From a4ea8eeab3eb89360f3cbae66b34f6822f861d36 Mon Sep 17 00:00:00 2001 From: Gauthier Roebroeck Date: Tue, 20 May 2025 10:55:39 +0800 Subject: [PATCH] next-ui wip --- .nvmrc | 2 +- next-ui/.browserslistrc | 4 + next-ui/.editorconfig | 6 + next-ui/.eslintrc-auto-import.json | 78 + next-ui/.gitignore | 22 + next-ui/env.d.ts | 3 + next-ui/eslint.config.js | 36 + next-ui/index.html | 13 + next-ui/openapi-generator.ts | 26 + next-ui/package-lock.json | 6446 +++++++++++ next-ui/package.json | 52 + next-ui/public/favicon-16x16.png | Bin 0 -> 1115 bytes next-ui/public/favicon-32x32.png | Bin 0 -> 2296 bytes next-ui/public/favicon.ico | Bin 0 -> 15086 bytes next-ui/src/App.vue | 32 + next-ui/src/api/komga-client.ts | 24 + next-ui/src/assets/logo.svg | 113 + next-ui/src/auto-imports.d.ts | 142 + next-ui/src/colada/mutations/logout.ts | 16 + next-ui/src/colada/queries/actuator-info.ts | 15 + next-ui/src/colada/queries/app-releases.ts | 14 + next-ui/src/colada/queries/current-user.ts | 15 + next-ui/src/components.d.ts | 30 + next-ui/src/components/AppFooter.vue | 82 + next-ui/src/components/BuidVersion.vue | 20 + next-ui/src/components/BuildCommit.vue | 23 + next-ui/src/components/HelloWorld.vue | 189 + next-ui/src/components/LoginForm.vue | 97 + next-ui/src/components/README.md | 35 + next-ui/src/components/app/bar/AppBar.vue | 29 + .../src/components/app/bar/ThemeSelector.vue | 55 + .../src/components/app/drawer/AppDrawer.vue | 17 + .../components/app/drawer/AppDrawerFooter.vue | 18 + .../components/app/drawer/AppDrawerMenu.vue | 17 + .../app/drawer/AppDrawerMenuAccount.vue | 38 + .../app/drawer/AppDrawerMenuHistory.vue | 7 + .../app/drawer/AppDrawerMenuImport.vue | 21 + .../app/drawer/AppDrawerMenuLogout.vue | 18 + .../app/drawer/AppDrawerMenuMedia.vue | 44 + .../app/drawer/AppDrawerMenuServer.vue | 36 + next-ui/src/composables/buid-version.ts | 9 + next-ui/src/composables/current-user-role.ts | 10 + next-ui/src/composables/latest-version.ts | 17 + next-ui/src/generated/openapi/komga.d.ts | 9401 +++++++++++++++++ next-ui/src/layouts/README.md | 5 + next-ui/src/layouts/default.vue | 20 + next-ui/src/layouts/single.vue | 9 + next-ui/src/main.ts | 20 + next-ui/src/pages/README.md | 5 + next-ui/src/pages/account/activity.vue | 7 + next-ui/src/pages/account/api-keys.vue | 7 + next-ui/src/pages/account/details.vue | 7 + next-ui/src/pages/account/ui.vue | 7 + next-ui/src/pages/history.vue | 12 + next-ui/src/pages/import/books.vue | 12 + next-ui/src/pages/import/readlist.vue | 12 + next-ui/src/pages/index.vue | 7 + next-ui/src/pages/login.vue | 13 + next-ui/src/pages/media/analysis.vue | 12 + next-ui/src/pages/media/duplicate-files.vue | 12 + .../src/pages/media/duplicate-pages/known.vue | 12 + .../pages/media/duplicate-pages/unknown.vue | 12 + next-ui/src/pages/media/missing-posters.vue | 12 + next-ui/src/pages/server/announcements.vue | 12 + next-ui/src/pages/server/metrics.vue | 12 + next-ui/src/pages/server/settings.vue | 12 + next-ui/src/pages/server/ui.vue | 12 + next-ui/src/pages/server/updates.vue | 123 + next-ui/src/pages/server/users.vue | 12 + next-ui/src/pages/startup.vue | 41 + next-ui/src/plugins/README.md | 3 + next-ui/src/plugins/index.ts | 36 + next-ui/src/plugins/vuetify.ts | 40 + next-ui/src/router/index.ts | 36 + next-ui/src/router/login-guard.ts | 18 + next-ui/src/router/role-guard.ts | 16 + next-ui/src/stores/README.md | 5 + next-ui/src/stores/app.ts | 11 + next-ui/src/stores/index.ts | 8 + next-ui/src/stores/user.ts | 7 + next-ui/src/styles/README.md | 3 + next-ui/src/styles/global.scss | 16 + next-ui/src/styles/settings.scss | 11 + next-ui/src/typed-router.d.ts | 43 + next-ui/src/types/Actuator.ts | 22 + next-ui/src/types/RouterMeta.d.ts | 15 + next-ui/src/types/UserRoles.ts | 7 + next-ui/tsconfig.app.json | 18 + next-ui/tsconfig.json | 11 + next-ui/tsconfig.node.json | 18 + next-ui/vite.config.mts | 84 + 91 files changed, 18126 insertions(+), 1 deletion(-) create mode 100644 next-ui/.browserslistrc create mode 100644 next-ui/.editorconfig create mode 100644 next-ui/.eslintrc-auto-import.json create mode 100644 next-ui/.gitignore create mode 100644 next-ui/env.d.ts create mode 100644 next-ui/eslint.config.js create mode 100644 next-ui/index.html create mode 100644 next-ui/openapi-generator.ts create mode 100644 next-ui/package-lock.json create mode 100644 next-ui/package.json create mode 100644 next-ui/public/favicon-16x16.png create mode 100644 next-ui/public/favicon-32x32.png create mode 100644 next-ui/public/favicon.ico create mode 100644 next-ui/src/App.vue create mode 100644 next-ui/src/api/komga-client.ts create mode 100644 next-ui/src/assets/logo.svg create mode 100644 next-ui/src/auto-imports.d.ts create mode 100644 next-ui/src/colada/mutations/logout.ts create mode 100644 next-ui/src/colada/queries/actuator-info.ts create mode 100644 next-ui/src/colada/queries/app-releases.ts create mode 100644 next-ui/src/colada/queries/current-user.ts create mode 100644 next-ui/src/components.d.ts create mode 100644 next-ui/src/components/AppFooter.vue create mode 100644 next-ui/src/components/BuidVersion.vue create mode 100644 next-ui/src/components/BuildCommit.vue create mode 100644 next-ui/src/components/HelloWorld.vue create mode 100644 next-ui/src/components/LoginForm.vue create mode 100644 next-ui/src/components/README.md create mode 100644 next-ui/src/components/app/bar/AppBar.vue create mode 100644 next-ui/src/components/app/bar/ThemeSelector.vue create mode 100644 next-ui/src/components/app/drawer/AppDrawer.vue create mode 100644 next-ui/src/components/app/drawer/AppDrawerFooter.vue create mode 100644 next-ui/src/components/app/drawer/AppDrawerMenu.vue create mode 100644 next-ui/src/components/app/drawer/AppDrawerMenuAccount.vue create mode 100644 next-ui/src/components/app/drawer/AppDrawerMenuHistory.vue create mode 100644 next-ui/src/components/app/drawer/AppDrawerMenuImport.vue create mode 100644 next-ui/src/components/app/drawer/AppDrawerMenuLogout.vue create mode 100644 next-ui/src/components/app/drawer/AppDrawerMenuMedia.vue create mode 100644 next-ui/src/components/app/drawer/AppDrawerMenuServer.vue create mode 100644 next-ui/src/composables/buid-version.ts create mode 100644 next-ui/src/composables/current-user-role.ts create mode 100644 next-ui/src/composables/latest-version.ts create mode 100644 next-ui/src/generated/openapi/komga.d.ts create mode 100644 next-ui/src/layouts/README.md create mode 100644 next-ui/src/layouts/default.vue create mode 100644 next-ui/src/layouts/single.vue create mode 100644 next-ui/src/main.ts create mode 100644 next-ui/src/pages/README.md create mode 100644 next-ui/src/pages/account/activity.vue create mode 100644 next-ui/src/pages/account/api-keys.vue create mode 100644 next-ui/src/pages/account/details.vue create mode 100644 next-ui/src/pages/account/ui.vue create mode 100644 next-ui/src/pages/history.vue create mode 100644 next-ui/src/pages/import/books.vue create mode 100644 next-ui/src/pages/import/readlist.vue create mode 100644 next-ui/src/pages/index.vue create mode 100644 next-ui/src/pages/login.vue create mode 100644 next-ui/src/pages/media/analysis.vue create mode 100644 next-ui/src/pages/media/duplicate-files.vue create mode 100644 next-ui/src/pages/media/duplicate-pages/known.vue create mode 100644 next-ui/src/pages/media/duplicate-pages/unknown.vue create mode 100644 next-ui/src/pages/media/missing-posters.vue create mode 100644 next-ui/src/pages/server/announcements.vue create mode 100644 next-ui/src/pages/server/metrics.vue create mode 100644 next-ui/src/pages/server/settings.vue create mode 100644 next-ui/src/pages/server/ui.vue create mode 100644 next-ui/src/pages/server/updates.vue create mode 100644 next-ui/src/pages/server/users.vue create mode 100644 next-ui/src/pages/startup.vue create mode 100644 next-ui/src/plugins/README.md create mode 100644 next-ui/src/plugins/index.ts create mode 100644 next-ui/src/plugins/vuetify.ts create mode 100644 next-ui/src/router/index.ts create mode 100644 next-ui/src/router/login-guard.ts create mode 100644 next-ui/src/router/role-guard.ts create mode 100644 next-ui/src/stores/README.md create mode 100644 next-ui/src/stores/app.ts create mode 100644 next-ui/src/stores/index.ts create mode 100644 next-ui/src/stores/user.ts create mode 100644 next-ui/src/styles/README.md create mode 100644 next-ui/src/styles/global.scss create mode 100644 next-ui/src/styles/settings.scss create mode 100644 next-ui/src/typed-router.d.ts create mode 100644 next-ui/src/types/Actuator.ts create mode 100644 next-ui/src/types/RouterMeta.d.ts create mode 100644 next-ui/src/types/UserRoles.ts create mode 100644 next-ui/tsconfig.app.json create mode 100644 next-ui/tsconfig.json create mode 100644 next-ui/tsconfig.node.json create mode 100644 next-ui/vite.config.mts diff --git a/.nvmrc b/.nvmrc index 3c032078a..2bd5a0a98 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18 +22 diff --git a/next-ui/.browserslistrc b/next-ui/.browserslistrc new file mode 100644 index 000000000..dc3bc09a2 --- /dev/null +++ b/next-ui/.browserslistrc @@ -0,0 +1,4 @@ +> 1% +last 2 versions +not dead +not ie 11 diff --git a/next-ui/.editorconfig b/next-ui/.editorconfig new file mode 100644 index 000000000..ecea360f1 --- /dev/null +++ b/next-ui/.editorconfig @@ -0,0 +1,6 @@ +[*.{js,jsx,mjs,cjs,ts,tsx,mts,cts,vue}] +charset = utf-8 +indent_size = 2 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/next-ui/.eslintrc-auto-import.json b/next-ui/.eslintrc-auto-import.json new file mode 100644 index 000000000..e81c66d8f --- /dev/null +++ b/next-ui/.eslintrc-auto-import.json @@ -0,0 +1,78 @@ +{ + "globals": { + "Component": true, + "ComponentPublicInstance": true, + "ComputedRef": true, + "EffectScope": true, + "ExtractDefaultPropTypes": true, + "ExtractPropTypes": true, + "ExtractPublicPropTypes": true, + "InjectionKey": true, + "PropType": true, + "Ref": true, + "VNode": true, + "WritableComputedRef": true, + "computed": true, + "createApp": true, + "customRef": true, + "defineAsyncComponent": true, + "defineComponent": true, + "effectScope": true, + "getCurrentInstance": true, + "getCurrentScope": true, + "h": true, + "inject": true, + "isProxy": true, + "isReactive": true, + "isReadonly": true, + "isRef": true, + "markRaw": true, + "nextTick": true, + "onActivated": true, + "onBeforeMount": true, + "onBeforeUnmount": true, + "onBeforeUpdate": true, + "onDeactivated": true, + "onErrorCaptured": true, + "onMounted": true, + "onRenderTracked": true, + "onRenderTriggered": true, + "onScopeDispose": true, + "onServerPrefetch": true, + "onUnmounted": true, + "onUpdated": true, + "provide": true, + "reactive": true, + "readonly": true, + "ref": true, + "resolveComponent": true, + "shallowReactive": true, + "shallowReadonly": true, + "shallowRef": true, + "toRaw": true, + "toRef": true, + "toRefs": true, + "toValue": true, + "triggerRef": true, + "unref": true, + "useAttrs": true, + "useCssModule": true, + "useCssVars": true, + "useRoute": true, + "useRouter": true, + "useSlots": true, + "watch": true, + "watchEffect": true, + "watchPostEffect": true, + "watchSyncEffect": true, + "DirectiveBinding": true, + "MaybeRef": true, + "MaybeRefOrGetter": true, + "onWatcherCleanup": true, + "useId": true, + "useModel": true, + "useTemplateRef": true, + "Slot": true, + "Slots": true + } +} diff --git a/next-ui/.gitignore b/next-ui/.gitignore new file mode 100644 index 000000000..11f5d7142 --- /dev/null +++ b/next-ui/.gitignore @@ -0,0 +1,22 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/next-ui/env.d.ts b/next-ui/env.d.ts new file mode 100644 index 000000000..aa1c66908 --- /dev/null +++ b/next-ui/env.d.ts @@ -0,0 +1,3 @@ +/// +/// +/// diff --git a/next-ui/eslint.config.js b/next-ui/eslint.config.js new file mode 100644 index 000000000..038a47bd4 --- /dev/null +++ b/next-ui/eslint.config.js @@ -0,0 +1,36 @@ +/** + * .eslint.js + * + * ESLint configuration file. + */ + +import pluginVue from 'eslint-plugin-vue' +import vueTsEslintConfig from '@vue/eslint-config-typescript' + +export default [ + { + name: 'app/files-to-lint', + files: ['**/*.{ts,mts,tsx,vue}'], + }, + + { + name: 'app/files-to-ignore', + ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'], + }, + + ...pluginVue.configs['flat/recommended'], + ...vueTsEslintConfig(), + + { + rules: { + '@typescript-eslint/no-unused-expressions': [ + 'error', + { + allowShortCircuit: true, + allowTernary: true, + }, + ], + 'vue/multi-word-component-names': 'off', + } + } +] diff --git a/next-ui/index.html b/next-ui/index.html new file mode 100644 index 000000000..8abc79c03 --- /dev/null +++ b/next-ui/index.html @@ -0,0 +1,13 @@ + + + + + + + Welcome to Vuetify 3 + + +
+ + + diff --git a/next-ui/openapi-generator.ts b/next-ui/openapi-generator.ts new file mode 100644 index 000000000..bcb510624 --- /dev/null +++ b/next-ui/openapi-generator.ts @@ -0,0 +1,26 @@ +import fs from "node:fs"; +import openapiTS, { astToString } from "openapi-typescript"; +import ts from "typescript"; + +// From https://openapi-ts.dev/node +// We use the Node.js API as the CLI does not support Date types + +const mySchema = new URL("../komga/docs/openapi.json", import.meta.url) + +const DATE = ts.factory.createTypeReferenceNode(ts.factory.createIdentifier("Date")); // `Date` +const NULL = ts.factory.createLiteralTypeNode(ts.factory.createNull()); // `null` + +const ast = await openapiTS(mySchema, { + transform(schemaObject, metadata) { + if (schemaObject.format === "date-time") { + return schemaObject.nullable + ? ts.factory.createUnionTypeNode([DATE, NULL]) + : DATE; + } + }, +}); + +const contents = astToString(ast); + +// (optional) write to file +fs.writeFileSync("./src/generated/openapi/komga.d.ts", contents); diff --git a/next-ui/package-lock.json b/next-ui/package-lock.json new file mode 100644 index 000000000..44721c9de --- /dev/null +++ b/next-ui/package-lock.json @@ -0,0 +1,6446 @@ +{ + "name": "next-ui", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "next-ui", + "version": "0.0.0", + "dependencies": { + "@pinia/colada": "^0.15.3", + "@pinia/colada-plugin-auto-refetch": "^0.0.6", + "@vueuse/core": "^13.1.0", + "core-js": "^3.37.1", + "marked": "^15.0.11", + "openapi-fetch": "^0.14.0", + "pinia-plugin-persistedstate": "^4.3.0", + "vue": "^3.4.31", + "vuetify": "^3.6.14" + }, + "devDependencies": { + "@eslint/js": "^9.14.0", + "@mdi/font": "7.4.47", + "@tsconfig/node22": "^22.0.0", + "@types/node": "^22.9.0", + "@vitejs/plugin-vue": "^5.1.4", + "@vue/eslint-config-typescript": "^14.1.3", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.14.0", + "eslint-plugin-vue": "^10.1.0", + "npm-run-all2": "^8.0.1", + "openapi-typescript": "^7.8.0", + "pinia": "^3.0.2", + "sass": "1.77.8", + "sass-embedded": "^1.77.8", + "typescript": "^5.8.3", + "unplugin-auto-import": "^19.2.0", + "unplugin-fonts": "^1.1.1", + "unplugin-vue-components": "^28.5.0", + "unplugin-vue-router": "^0.12.0", + "vite": "^6.3.5", + "vite-plugin-vue-layouts-next": "^0.1.1", + "vite-plugin-vuetify": "^2.0.3", + "vue-router": "^4.4.0", + "vue-tsc": "^2.1.10" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.3.0.tgz", + "integrity": "sha512-WK6zH4MtBp/uesX8KGCnwDDRVnEVHUvwjsigKXcSR57Oo8Oyv1vRS9qyUlSP+6KWRl5z8tNAU5qpf3QodeVYxA==", + "devOptional": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", + "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", + "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", + "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", + "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", + "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", + "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", + "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", + "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", + "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", + "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", + "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", + "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", + "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", + "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", + "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", + "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", + "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", + "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", + "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", + "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", + "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", + "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", + "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", + "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", + "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz", + "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz", + "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.13.0.tgz", + "integrity": "sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.26.0.tgz", + "integrity": "sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.8.tgz", + "integrity": "sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.13.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@mdi/font": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/font/-/font-7.4.47.tgz", + "integrity": "sha512-43MtGpd585SNzHZPcYowu/84Vz2a2g31TvPMTm9uTiCSWzaheQySUcSyUH/46fPnuPQWof2yd0pGBtzee/IQWw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.1.tgz", + "integrity": "sha512-9LfmxKTb1v+vUS1/emSk1f5ePmTLkb9Le9AxOB5T0XM59EUumwcS45z05h7aiZx3GI0Bl7mjb3FMEglYj+acuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.3", + "eventsource": "^3.0.2", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nuxt/kit": { + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.17.3.tgz", + "integrity": "sha512-aw6u6mT3TnM/MmcCRDMv3i9Sbm5/ZMSJgDl+N+WsrWNDIQ2sWmsqdDkjb/HyXF20SNwc2891hRBkaQr3hG2mhA==", + "dependencies": { + "c12": "^3.0.3", + "consola": "^3.4.2", + "defu": "^6.1.4", + "destr": "^2.0.5", + "errx": "^0.1.0", + "exsolve": "^1.0.5", + "ignore": "^7.0.4", + "jiti": "^2.4.2", + "klona": "^2.0.6", + "knitwork": "^1.2.0", + "mlly": "^1.7.4", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "semver": "^7.7.1", + "std-env": "^3.9.0", + "tinyglobby": "^0.2.13", + "ufo": "^1.6.1", + "unctx": "^2.4.1", + "unimport": "^5.0.1", + "untyped": "^2.0.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@nuxt/kit/node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==" + }, + "node_modules/@nuxt/kit/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nuxt/kit/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@nuxt/kit/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/@nuxt/kit/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@nuxt/kit/node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, + "node_modules/@nuxt/kit/node_modules/unimport": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-5.0.1.tgz", + "integrity": "sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ==", + "dependencies": { + "acorn": "^8.14.1", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "strip-literal": "^3.0.0", + "tinyglobby": "^0.2.13", + "unplugin": "^2.3.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@pinia/colada": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/@pinia/colada/-/colada-0.15.3.tgz", + "integrity": "sha512-nQrCW8zJ8zyIMPdqvCI1ye/z8C6YDhzlsoX7KfmMdXiHf23QfIwJ1KGNOBGDntG+nlTQ/j5hzE/Mq3zqSuMb4g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "pinia": "^2.2.6 || ^3.0.0" + } + }, + "node_modules/@pinia/colada-plugin-auto-refetch": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@pinia/colada-plugin-auto-refetch/-/colada-plugin-auto-refetch-0.0.6.tgz", + "integrity": "sha512-cF1almDiFTEixC0KmuBqglZl+kE8by1pGp75mwcIDHzd4zRuYHTvQywTzRve98N9jM+4Za5+HwXKHHvMJGDI3Q==", + "license": "MIT", + "peerDependencies": { + "@pinia/colada": ">=0.15.0" + } + }, + "node_modules/@redocly/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js-replace": "^1.0.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/ajv/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/config": { + "version": "0.22.2", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.2.tgz", + "integrity": "sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@redocly/openapi-core": { + "version": "1.34.3", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.3.tgz", + "integrity": "sha512-3arRdUp1fNx55itnjKiUhO6t4Mf91TsrTIYINDNLAZPS0TPd5YpiXRctwjel0qqWoOOhjA34cZ3m4dksLDFUYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@redocly/ajv": "^8.11.2", + "@redocly/config": "^0.22.0", + "colorette": "^1.2.0", + "https-proxy-agent": "^7.0.5", + "js-levenshtein": "^1.1.6", + "js-yaml": "^4.1.0", + "minimatch": "^5.0.1", + "pluralize": "^8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=18.17.0", + "npm": ">=9.5.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", + "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", + "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", + "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", + "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", + "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", + "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", + "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", + "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", + "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", + "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", + "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", + "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", + "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", + "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", + "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", + "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", + "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", + "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", + "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", + "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tsconfig/node22": { + "version": "22.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.1.tgz", + "integrity": "sha512-VkgOa3n6jvs1p+r3DiwBqeEwGAwEvnVCg/hIjiANl5IEcqP3G0u5m8cBJspe1t9qjZRlZ7WFgqq5bJrGdgAKMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.15.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.17.tgz", + "integrity": "sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz", + "integrity": "sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/type-utils": "8.32.0", + "@typescript-eslint/utils": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz", + "integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz", + "integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz", + "integrity": "sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.32.0", + "@typescript-eslint/utils": "8.32.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz", + "integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz", + "integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/visitor-keys": "8.32.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.0.tgz", + "integrity": "sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.32.0", + "@typescript-eslint/types": "8.32.0", + "@typescript-eslint/typescript-estree": "8.32.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz", + "integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.32.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.13.tgz", + "integrity": "sha512-MnQJ7eKchJx5Oz+YdbqyFUk8BN6jasdJv31n/7r6/WwlOOv7qzvot6B66887l2ST3bUW4Mewml54euzpJWA6bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "2.4.13" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.13.tgz", + "integrity": "sha512-l/EBcc2FkvHgz2ZxV+OZK3kMSroMr7nN3sZLF2/f6kWW66q8+tEL4giiYyFjt0BcubqJhBt6soYIrAPhg/Yr+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@volar/typescript": { + "version": "2.4.13", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.13.tgz", + "integrity": "sha512-Ukz4xv84swJPupZeoFsQoeJEOm7U9pqsEnaGGgt5ni3SCTa22m8oJP5Nng3Wed7Uw5RBELdLxxORX8YhJPyOgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "2.4.13", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue-macros/common": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.16.1.tgz", + "integrity": "sha512-Pn/AWMTjoMYuquepLZP813BIcq8DTZiNCoaceuNlvaYuOTd8DqBZWc5u0uOMQZMInwME1mdSmmBAcTluiV9Jtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "^3.5.13", + "ast-kit": "^1.4.0", + "local-pkg": "^1.0.0", + "magic-string-ast": "^0.7.0", + "pathe": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=16.14.0" + }, + "peerDependencies": { + "vue": "^2.7.0 || ^3.2.25" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@vue-macros/common/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.6.tgz", + "integrity": "sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.6" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.6.tgz", + "integrity": "sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.6", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.6.tgz", + "integrity": "sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-14.5.0.tgz", + "integrity": "sha512-5oPOyuwkw++AP5gHDh5YFmST50dPfWOcm3/W7Nbh42IK5O3H74ytWAw0TrCRTaBoD/02khnWXuZf1Bz1xflavQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.26.0", + "fast-glob": "^3.3.3", + "typescript-eslint": "^8.26.0", + "vue-eslint-parser": "^10.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0", + "eslint-plugin-vue": "^9.28.0 || ^10.0.0", + "typescript": ">=4.8.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.10.tgz", + "integrity": "sha512-+yNoYx6XIKuAO8Mqh1vGytu8jkFEOH5C8iOv3i8Z/65A7x9iAOXA97Q+PqZ3nlm2lxf5rOJuIGI/wDtx/riNYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~2.4.11", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/@vue/tsconfig": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz", + "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": "5.x", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@vuetify/loader-shared": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-2.1.0.tgz", + "integrity": "sha512-dNE6Ceym9ijFsmJKB7YGW0cxs7xbYV8+1LjU6jd4P14xOt/ji4Igtgzt0rJFbxu+ZhAzqz853lhB0z8V9Dy9cQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "upath": "^2.0.1" + }, + "peerDependencies": { + "vue": "^3.0.0", + "vuetify": "^3.0.0" + } + }, + "node_modules/@vueuse/core": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.1.0.tgz", + "integrity": "sha512-PAauvdRXZvTWXtGLg8cPUFjiZEddTqmogdwYpnn60t08AA5a8Q4hZokBnpTOnVNqySlFlTcRYIC8OqreV4hv3Q==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.1.0", + "@vueuse/shared": "13.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.1.0.tgz", + "integrity": "sha512-+TDd7/a78jale5YbHX9KHW3cEDav1lz1JptwDvep2zSG8XjCsVE+9mHIzjTOaPbHUAk5XiE4jXLz51/tS+aKQw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.1.0.tgz", + "integrity": "sha512-IVS/qRRjhPTZ6C2/AM3jieqXACGwFZwWTdw5sNTSKk2m/ZpkuuN+ri+WCVUP8TqaKwJYt/KuMwmXspMAw8E6ew==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/ast-kit": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-1.4.3.tgz", + "integrity": "sha512-MdJqjpodkS5J149zN0Po+HPshkTdUyrvF7CKTafUgv69vBSPtncrj+3IiUgqdd7ElIEkbeXCsEouBUwLrw9Ilg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.27.0", + "pathe": "^2.0.3" + }, + "engines": { + "node": ">=16.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/ast-walker-scope": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.6.2.tgz", + "integrity": "sha512-1UWOyC50xI3QZkRuDj6PqDtpm1oHWtYs+NQGwqL/2R11eN3Q81PHAHPM0SWW3BNQm53UDwS//Jv8L4CCVLM1bQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "ast-kit": "^1.0.1" + }, + "engines": { + "node": ">=16.14.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/birpc": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.3.0.tgz", + "integrity": "sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "devOptional": true, + "license": "MIT/X11" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c12": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/c12/-/c12-3.0.3.tgz", + "integrity": "sha512-uC3MacKBb0Z15o5QWCHvHWj5Zv34pGQj9P+iXKSpTuSGFS0KKhUWf4t9AJ+gWjYOdmWCPEGpEzm8sS0iqbpo1w==", + "dependencies": { + "chokidar": "^4.0.3", + "confbox": "^0.2.2", + "defu": "^6.1.4", + "dotenv": "^16.4.7", + "exsolve": "^1.0.4", + "giget": "^2.0.0", + "jiti": "^2.4.2", + "ohash": "^2.0.11", + "pathe": "^2.0.3", + "perfect-debounce": "^1.0.0", + "pkg-types": "^2.1.0", + "rc9": "^2.1.2" + }, + "peerDependencies": { + "magicast": "^0.3.5" + }, + "peerDependenciesMeta": { + "magicast": { + "optional": true + } + } + }, + "node_modules/c12/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/c12/node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==" + }, + "node_modules/c12/node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, + "node_modules/c12/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", + "dependencies": { + "consola": "^3.2.3" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-js": { + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.42.0.tgz", + "integrity": "sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-pick-omit": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/deep-pick-omit/-/deep-pick-omit-1.2.1.tgz", + "integrity": "sha512-2J6Kc/m3irCeqVG42T+SaUMesaK7oGWaedGnQQK/+O0gYc+2SP5bKh/KKTE7d7SJ+GCA9UUE1GRzh6oDe0EnGw==" + }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz", + "integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==" + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/errx": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/errx/-/errx-0.1.0.tgz", + "integrity": "sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", + "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", + "devOptional": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.4", + "@esbuild/android-arm": "0.25.4", + "@esbuild/android-arm64": "0.25.4", + "@esbuild/android-x64": "0.25.4", + "@esbuild/darwin-arm64": "0.25.4", + "@esbuild/darwin-x64": "0.25.4", + "@esbuild/freebsd-arm64": "0.25.4", + "@esbuild/freebsd-x64": "0.25.4", + "@esbuild/linux-arm": "0.25.4", + "@esbuild/linux-arm64": "0.25.4", + "@esbuild/linux-ia32": "0.25.4", + "@esbuild/linux-loong64": "0.25.4", + "@esbuild/linux-mips64el": "0.25.4", + "@esbuild/linux-ppc64": "0.25.4", + "@esbuild/linux-riscv64": "0.25.4", + "@esbuild/linux-s390x": "0.25.4", + "@esbuild/linux-x64": "0.25.4", + "@esbuild/netbsd-arm64": "0.25.4", + "@esbuild/netbsd-x64": "0.25.4", + "@esbuild/openbsd-arm64": "0.25.4", + "@esbuild/openbsd-x64": "0.25.4", + "@esbuild/sunos-x64": "0.25.4", + "@esbuild/win32-arm64": "0.25.4", + "@esbuild/win32-ia32": "0.25.4", + "@esbuild/win32-x64": "0.25.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.26.0.tgz", + "integrity": "sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.20.0", + "@eslint/config-helpers": "^0.2.1", + "@eslint/core": "^0.13.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.26.0", + "@eslint/plugin-kit": "^0.2.8", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@modelcontextprotocol/sdk": "^1.8.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.3", + "zod": "^3.24.2" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.1.0.tgz", + "integrity": "sha512-/VTiJ1eSfNLw6lvG9ENySbGmcVvz6wZ9nA7ZqXlLBY2RkaF15iViYKxglWiIch12KiLAj0j1iXPYU6W4wTROFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "vue-eslint-parser": "^10.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.1.tgz", + "integrity": "sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", + "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": "^4.11 || 5 || ^5.0.0-beta.1" + } + }, + "node_modules/exsolve": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.5.tgz", + "integrity": "sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/giget": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz", + "integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.6", + "nypm": "^0.6.0", + "pathe": "^2.0.3" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/knitwork": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.2.0.tgz", + "integrity": "sha512-xYSH7AvuQ6nXkq42x0v5S8/Iry+cfulBz/DJQzhIyESdLD7425jXsPy4vn5cCXU+HhRN2kVw51Vd1K6/By4BQg==" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/local-pkg/node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "license": "MIT" + }, + "node_modules/local-pkg/node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/magic-string-ast": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.7.1.tgz", + "integrity": "sha512-ub9iytsEbT7Yw/Pd29mSo/cNQpaEu67zR1VVcXDiYjSFwzeBxNdTd0FMnSslLQXiRj8uGPzwsaoefrMD5XAmdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17" + }, + "engines": { + "node": ">=16.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/marked": { + "version": "15.0.11", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.11.tgz", + "integrity": "sha512-1BEXAU2euRCG3xwgLVT1y0xbJEld1XOrmRJpUwRCcy7rxhSCwMrmEu9LXoPhHSCJG41V7YcQ2mjKRr5BA3ITIA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch-native": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.6.tgz", + "integrity": "sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-all2": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-8.0.1.tgz", + "integrity": "sha512-jkhE0AsELQeCtScrcJ/7mSIdk+ZsnWjvKk3KwE96HZ6+OFVB74XhxQtHT1W6kdUfn92fRnBb29Mz82j9bV2XEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.6", + "memorystream": "^0.3.1", + "minimatch": "^10.0.1", + "pidtree": "^0.6.0", + "read-package-json-fast": "^4.0.0", + "shell-quote": "^1.7.3", + "which": "^5.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^20.5.0 || >=22.0.0", + "npm": ">= 10" + } + }, + "node_modules/npm-run-all2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm-run-all2/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm-run-all2/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm-run-all2/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nypm": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.0.tgz", + "integrity": "sha512-mn8wBFV9G9+UFHIrq+pZ2r2zL4aPau/by3kJb3cM7+5tQHMt6HGQB8FDIeKFYp8o0D2pnH6nVsO88N4AmUxIWg==", + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.4.0", + "pathe": "^2.0.3", + "pkg-types": "^2.0.0", + "tinyexec": "^0.3.2" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/nypm/node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==" + }, + "node_modules/nypm/node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ohash": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz", + "integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openapi-fetch": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/openapi-fetch/-/openapi-fetch-0.14.0.tgz", + "integrity": "sha512-PshIdm1NgdLvb05zp8LqRQMNSKzIlPkyMxYFxwyHR+UlKD4t2nUjkDhNxeRbhRSEd3x5EUNh2w5sJYwkhOH4fg==", + "license": "MIT", + "dependencies": { + "openapi-typescript-helpers": "^0.0.15" + } + }, + "node_modules/openapi-typescript": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.8.0.tgz", + "integrity": "sha512-1EeVWmDzi16A+siQlo/SwSGIT7HwaFAVjvMA7/jG5HMLSnrUOzPL7uSTRZZa4v/LCRxHTApHKtNY6glApEoiUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "^1.34.3", + "ansi-colors": "^4.1.3", + "change-case": "^5.4.4", + "parse-json": "^8.3.0", + "supports-color": "^10.0.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "openapi-typescript": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.x" + } + }, + "node_modules/openapi-typescript-helpers": { + "version": "0.0.15", + "resolved": "https://registry.npmjs.org/openapi-typescript-helpers/-/openapi-typescript-helpers-0.0.15.tgz", + "integrity": "sha512-opyTPaunsklCBpTK8JGef6mfPhLSnyy5a0IN9vKtx3+4aExf+KxEqYwIy3hqkedXIB97u357uLMJsOnm3GVjsw==", + "license": "MIT" + }, + "node_modules/openapi-typescript/node_modules/supports-color": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", + "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pinia": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.2.tgz", + "integrity": "sha512-sH2JK3wNY809JOeiiURUR0wehJ9/gd9qFN2Y828jCbxEzKEmEt0pzCXwqiSTfuRsK9vQsOflSdnbdBOGrhtn+g==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persistedstate": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-4.3.0.tgz", + "integrity": "sha512-x9wxpHj6iFDj5ITQJ3rj6+KesEqyRk/vqcE3WE+VGfetleV9Zufqwa9qJ6AkA5wmRSQEp7BTA1us/MDVTRHFFw==", + "license": "MIT", + "dependencies": { + "@nuxt/kit": "^3.17.2", + "deep-pick-omit": "^1.2.1", + "defu": "^6.1.4", + "destr": "^2.0.5" + }, + "peerDependencies": { + "@pinia/nuxt": ">=0.10.0", + "pinia": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@pinia/nuxt": { + "optional": true + }, + "pinia": { + "optional": true + } + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", + "integrity": "sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } + }, + "node_modules/read-package-json-fast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", + "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "4.40.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", + "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.7" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.40.2", + "@rollup/rollup-android-arm64": "4.40.2", + "@rollup/rollup-darwin-arm64": "4.40.2", + "@rollup/rollup-darwin-x64": "4.40.2", + "@rollup/rollup-freebsd-arm64": "4.40.2", + "@rollup/rollup-freebsd-x64": "4.40.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", + "@rollup/rollup-linux-arm-musleabihf": "4.40.2", + "@rollup/rollup-linux-arm64-gnu": "4.40.2", + "@rollup/rollup-linux-arm64-musl": "4.40.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-gnu": "4.40.2", + "@rollup/rollup-linux-riscv64-musl": "4.40.2", + "@rollup/rollup-linux-s390x-gnu": "4.40.2", + "@rollup/rollup-linux-x64-gnu": "4.40.2", + "@rollup/rollup-linux-x64-musl": "4.40.2", + "@rollup/rollup-win32-arm64-msvc": "4.40.2", + "@rollup/rollup-win32-ia32-msvc": "4.40.2", + "@rollup/rollup-win32-x64-msvc": "4.40.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.88.0.tgz", + "integrity": "sha512-GQUxgZFuej3NZ1TSPUHU8aebtYdnIeXqYsbNEEKBtE+SC7/Gr18KH1ijTAZHPw25OUfQCdtJaRy6Fo866dHmgw==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.0.2", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.88.0", + "sass-embedded-android-arm64": "1.88.0", + "sass-embedded-android-ia32": "1.88.0", + "sass-embedded-android-riscv64": "1.88.0", + "sass-embedded-android-x64": "1.88.0", + "sass-embedded-darwin-arm64": "1.88.0", + "sass-embedded-darwin-x64": "1.88.0", + "sass-embedded-linux-arm": "1.88.0", + "sass-embedded-linux-arm64": "1.88.0", + "sass-embedded-linux-ia32": "1.88.0", + "sass-embedded-linux-musl-arm": "1.88.0", + "sass-embedded-linux-musl-arm64": "1.88.0", + "sass-embedded-linux-musl-ia32": "1.88.0", + "sass-embedded-linux-musl-riscv64": "1.88.0", + "sass-embedded-linux-musl-x64": "1.88.0", + "sass-embedded-linux-riscv64": "1.88.0", + "sass-embedded-linux-x64": "1.88.0", + "sass-embedded-win32-arm64": "1.88.0", + "sass-embedded-win32-ia32": "1.88.0", + "sass-embedded-win32-x64": "1.88.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.88.0.tgz", + "integrity": "sha512-jveGkHhHxJ2+GnNxl3OyhZAxR8YXJCSuj7JYzoVuFTxlsaFqFQwtUrvZro61xOVOrwfe8xMk2HE3ZEw6dolhBA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.88.0.tgz", + "integrity": "sha512-YVdxVywlbXH74uomIcRsYLHF1644V+0per6YrfZndWicjfYnWqgbGq1xixdOzLxe3vac90RlsRNxTEb0VWlhmA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-ia32": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.88.0.tgz", + "integrity": "sha512-6C4o+lGFsYcUPGtCvOdFhFLQl1rrcBUNuC4DILDayI4bZeh3Y2CjonzCT4VNKPsOm7LFGf0OKQAZm+3/oXVIKg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.88.0.tgz", + "integrity": "sha512-zW1NmFHwPkBBg8wqVu8e5uCKeuTSk8vasB5BBEPvQubj4tWbgxrXGIVrQyseeGXJJQYSzjNiq3ua4qNoadBWJA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.88.0.tgz", + "integrity": "sha512-b33Ja8sU67CcWCX9C3M+k8AcWXOb9uhyUJuKg/2hb/RhKUqBRCpMtQhsChpV7/DyXvyevLeosy28j673qNfnuQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.88.0.tgz", + "integrity": "sha512-Zu+A4OzoFtZwTlcXn66ovZRTI9Ia610KJbtJBrpsXPfqR9QcCg7pPDB/zlPK5E5xFjsxGWaL0tICOifim1HCMg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.88.0.tgz", + "integrity": "sha512-nZ+/j5Z4llLejNyFcLUWJvbU3WNJDKiyZ7W+Hpn/52dDhzHiNWRVHH7humfzCEgLXZctPZlr56ubaNk/RsoSlA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.88.0.tgz", + "integrity": "sha512-bjiTZ4MNvArReXgwnA56mT3i+vHH3BgkLQT3qVwRv6fVTPQpYopK8D/QzQKbrVGYKgzWPYzZfksSQFC9lzM2yA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.88.0.tgz", + "integrity": "sha512-aphDl0Z4Y+YpPAqT0fEDDxZfrTXS/v36IRpGpVcbuRIua/iHd9L3wrZuwco1nbbY+sShFNiXPE1A9/k/ZGt8rw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-ia32": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.88.0.tgz", + "integrity": "sha512-m+pQMD14JQeMlQ/J8vQxHXwAQPAcfLG034BQz05a8ahXmNrk9qJkrC7FLptDlhsJ6weldX54UvXceoSpw2VsxQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.88.0.tgz", + "integrity": "sha512-jGRZZYP8XOiE521Pep2u9ktx1FFkLHosjO7Dj/0pvjwUddBVT16jE40gv9pqtTynG0saD8jokqdkqJ+FM3NJzA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.88.0.tgz", + "integrity": "sha512-Wxo9qklXqw+eYFHLo+uE9r9sbK/xklMt6xPU/HXs+ikoJcGtmugE7KRyyWeSfvPTi8jZvgfkFfNDZD9elzxEFA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.88.0.tgz", + "integrity": "sha512-utdTihiPCCP5HdKqwblQQWz864c7CqSplSGQ+p06GS+0ZfnuB/SKhtwe8fd11v4+IN8S2o0HAQ5KtWmRmk3eTA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.88.0.tgz", + "integrity": "sha512-P8XB7QVSU8KJry4oxegzAnuFVWjbHc/JCHgF2ktq2dURVyxcaKDfQZtzbUgiPOKP/R6MZIFhXaJVJIhppcruEQ==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.88.0.tgz", + "integrity": "sha512-OGEfD6AAm68vZTazFkIN7Dsu0ZQY983GZU+mWE9zZPLTIBzvNrrEZrEE/mpM6LemkwbqR+GaFP6rxGrkDz0Mhw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.88.0.tgz", + "integrity": "sha512-3hBlfq4bXx0RkkNxvw/FPZSmUC1GMU8NE1Ef+2dJowxAeneRotHy5WXZIMKvH7NGpskf7U8ButK05U3OxPzrTA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.88.0.tgz", + "integrity": "sha512-FzM5mCxkFE20efDDSPO5N5o0ZKPqs51zowt2JAe5tdAzmy/jUQ0t515tph40dV2mfX0flBJgoou76gZKhylHGg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.88.0.tgz", + "integrity": "sha512-Zp3yNEzk/gCCBIClQx8ihAGZ1YqPbjWjTnLWtruS9FcVrkrSAIjhqaesoN1Hy61aaIoiRektOyeffHH54jiQ3g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-ia32": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.88.0.tgz", + "integrity": "sha512-yUmD6BLb01ngw/gy+FcTdsCMFaoONGFYJcy6FhMr2OOcCHNjPVD+HqTF4ZRsLNbwna8PlP6XxHFzjPKzVw18xw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.88.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.88.0.tgz", + "integrity": "sha512-j4pOP/S9vD4enRqbfwno07Xx+j0RkfVYGV31ZxzAIF+a1+3dDBlsbwgDNP68XemJx5SjpP8yM8the6nHAnMUiQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded/node_modules/immutable": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.2.tgz", + "integrity": "sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/sass-embedded/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==" + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "license": "MIT" + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.1.3.tgz", + "integrity": "sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" + }, + "node_modules/tinyglobby": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", + "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", + "license": "MIT", + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "devOptional": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.0.tgz", + "integrity": "sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.32.0", + "@typescript-eslint/parser": "8.32.0", + "@typescript-eslint/utils": "8.32.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "license": "MIT" + }, + "node_modules/unctx": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.4.1.tgz", + "integrity": "sha512-AbaYw0Nm4mK4qjhns67C+kgxR2YWiwlDBPzxrN8h8C6VtAdCgditAY5Dezu3IJy4XVqAnbrXt9oQJvsn3fyozg==", + "dependencies": { + "acorn": "^8.14.0", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17", + "unplugin": "^2.1.0" + } + }, + "node_modules/unctx/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unimport": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-4.2.0.tgz", + "integrity": "sha512-mYVtA0nmzrysnYnyb3ALMbByJ+Maosee2+WyE0puXl+Xm2bUwPorPaaeZt0ETfuroPOtG8jj1g/qeFZ6buFnag==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.1", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "pkg-types": "^2.1.0", + "scule": "^1.3.0", + "strip-literal": "^3.0.0", + "tinyglobby": "^0.2.12", + "unplugin": "^2.2.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unimport/node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unimport/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unimport/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/unimport/node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.2.tgz", + "integrity": "sha512-3n7YA46rROb3zSj8fFxtxC/PqoyvYQ0llwz9wtUPUutr9ig09C8gGo5CWCwHrUzlqC1LLR43kxp5vEIyH1ac1w==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.1", + "picomatch": "^4.0.2", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-auto-import": { + "version": "19.2.0", + "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-19.2.0.tgz", + "integrity": "sha512-DGRHg86nUDKEYpny1p2kFZjeLg7kHQmknsPQ8krAshvpeypps7dFxNBsAqhBaxYINjetbgQilF8wbjuZxpdomg==", + "dev": true, + "license": "MIT", + "dependencies": { + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "picomatch": "^4.0.2", + "unimport": "^4.2.0", + "unplugin": "^2.3.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/unplugin-fonts": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/unplugin-fonts/-/unplugin-fonts-1.3.1.tgz", + "integrity": "sha512-GmaJWPAWH6lBI4fP8xKdbMZJwTgsnr8PGJOfQE52jlod8QkqSO4M529Nox2L8zYapjB5hox2wCu4N3c/LOal/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "unplugin": "2.0.0-beta.1" + }, + "peerDependencies": { + "@nuxt/kit": "^3.0.0", + "vite": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unplugin-fonts/node_modules/unplugin": { + "version": "2.0.0-beta.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.0.0-beta.1.tgz", + "integrity": "sha512-2qzQo5LN2DmUZXkWDHvGKLF5BP0WN+KthD6aPnPJ8plRBIjv4lh5O07eYcSxgO2znNw9s4MNhEO1sB+JDllDbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/unplugin-utils/-/unplugin-utils-0.2.4.tgz", + "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==", + "license": "MIT", + "dependencies": { + "pathe": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-utils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/unplugin-vue-components": { + "version": "28.5.0", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-28.5.0.tgz", + "integrity": "sha512-o7fMKU/uI8NiP+E0W62zoduuguWqB0obTfHFtbr1AP2uo2lhUPnPttWUE92yesdiYfo9/0hxIrj38FMc1eaySg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.6.0", + "debug": "^4.4.0", + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "tinyglobby": "^0.2.12", + "unplugin": "^2.3.2", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-router": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.12.0.tgz", + "integrity": "sha512-xjgheKU0MegvXQcy62GVea0LjyOdMxN0/QH+ijN29W62ZlMhG7o7K+0AYqfpprvPwpWtuRjiyC5jnV2SxWye2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.8", + "@vue-macros/common": "^1.16.1", + "ast-walker-scope": "^0.6.2", + "chokidar": "^4.0.3", + "fast-glob": "^3.3.3", + "json5": "^2.2.3", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "micromatch": "^4.0.8", + "mlly": "^1.7.4", + "pathe": "^2.0.2", + "scule": "^1.3.0", + "unplugin": "^2.2.0", + "unplugin-utils": "^0.2.3", + "yaml": "^2.7.0" + }, + "peerDependencies": { + "vue-router": "^4.4.0" + }, + "peerDependenciesMeta": { + "vue-router": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-router/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/unplugin-vue-router/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/unplugin/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/untyped": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/untyped/-/untyped-2.0.0.tgz", + "integrity": "sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==", + "dependencies": { + "citty": "^0.1.6", + "defu": "^6.1.4", + "jiti": "^2.4.2", + "knitwork": "^1.2.0", + "scule": "^1.3.0" + }, + "bin": { + "untyped": "dist/cli.mjs" + } + }, + "node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", + "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-vue-layouts-next": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-layouts-next/-/vite-plugin-vue-layouts-next-0.1.1.tgz", + "integrity": "sha512-tUhHalU00HX6GjXPmfbuombXimda3df5ymgRaxjNu9q467SmM39uOeNGUhQEYDv10BtSmYrol88lTI50jStikw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "fast-glob": "^3.3.3" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0 || ^6.0.0", + "vue": "^3.2.4", + "vue-router": "^4.0.11" + } + }, + "node_modules/vite-plugin-vuetify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/vite-plugin-vuetify/-/vite-plugin-vuetify-2.1.1.tgz", + "integrity": "sha512-Pb7bKhQH8qPMzURmEGq2aIqCJkruFNsyf1NcrrtnjsOIkqJPMcBbiP0oJoO8/uAmyB5W/1JTbbUEsyXdMM0QHQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@vuetify/loader-shared": "^2.1.0", + "debug": "^4.3.3", + "upath": "^2.0.1" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": ">=5", + "vue": "^3.0.0", + "vuetify": "^3.0.0" + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", + "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", + "devOptional": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.1.3.tgz", + "integrity": "sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.6.0", + "lodash": "^4.17.21", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-router": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", + "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-router/node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-tsc": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.10.tgz", + "integrity": "sha512-jWZ1xSaNbabEV3whpIDMbjVSVawjAyW+x1n3JeGQo7S0uv2n9F/JMgWW90tGWNFRKya4YwKMZgCtr0vRAM7DeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "~2.4.11", + "@vue/language-core": "2.2.10" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/vuetify": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.8.4.tgz", + "integrity": "sha512-hfA1eqA6vhrF5LF8Yfk0uHdNUmh8Uckxn5wREiThO82HW/9Vfreh+IpxPgEtCsAhV33KW+NVamltQCu3HczRKw==", + "license": "MIT", + "engines": { + "node": "^12.20 || >=14.13" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/johnleider" + }, + "peerDependencies": { + "typescript": ">=4.7", + "vite-plugin-vuetify": ">=2.1.0", + "vue": "^3.5.0", + "webpack-plugin-vuetify": ">=3.1.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vite-plugin-vuetify": { + "optional": true + }, + "webpack-plugin-vuetify": { + "optional": true + } + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "license": "MIT" + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } + }, + "node_modules/yaml": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", + "devOptional": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.24.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.4.tgz", + "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "dev": true, + "license": "ISC", + "peerDependencies": { + "zod": "^3.24.1" + } + } + } +} diff --git a/next-ui/package.json b/next-ui/package.json new file mode 100644 index 000000000..ce3429dab --- /dev/null +++ b/next-ui/package.json @@ -0,0 +1,52 @@ +{ + "name": "next-ui", + "private": true, + "type": "module", + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "run-p type-check \"build-only {@}\" --", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --build --force", + "lint": "eslint . --fix", + "openapi-generate": "npx tsx ./openapi-generator.ts" + }, + "dependencies": { + "@pinia/colada": "^0.15.3", + "@pinia/colada-plugin-auto-refetch": "^0.0.6", + "@vueuse/core": "^13.1.0", + "core-js": "^3.37.1", + "marked": "^15.0.11", + "openapi-fetch": "^0.14.0", + "pinia-plugin-persistedstate": "^4.3.0", + "vue": "^3.4.31", + "vuetify": "^3.6.14" + }, + "devDependencies": { + "@eslint/js": "^9.14.0", + "@mdi/font": "7.4.47", + "@tsconfig/node22": "^22.0.0", + "@types/node": "^22.9.0", + "@vitejs/plugin-vue": "^5.1.4", + "@vue/eslint-config-typescript": "^14.1.3", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.14.0", + "eslint-plugin-vue": "^10.1.0", + "npm-run-all2": "^8.0.1", + "openapi-typescript": "^7.8.0", + "pinia": "^3.0.2", + "sass": "1.77.8", + "sass-embedded": "^1.77.8", + "typescript": "^5.8.3", + "unplugin-auto-import": "^19.2.0", + "unplugin-fonts": "^1.1.1", + "unplugin-vue-components": "^28.5.0", + "unplugin-vue-router": "^0.12.0", + "vite": "^6.3.5", + "vite-plugin-vue-layouts-next": "^0.1.1", + "vite-plugin-vuetify": "^2.0.3", + "vue-router": "^4.4.0", + "vue-tsc": "^2.1.10" + } +} diff --git a/next-ui/public/favicon-16x16.png b/next-ui/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..0fd545ff45ff45d44bf4c7c5d7ec14ced136aed1 GIT binary patch literal 1115 zcmZ`%Yc$(;7=D8$DzUDI#eL0cb(|SXH0W_06(^CztwgG!$eps5l(=_0sHt9P>r%Fw zs@-(Q<(NYqYfNxf4K?C2tY^JZ7MJQDLE^H%o_^VfeR$vJdEVdip6A2+yBreCG&Qj{ z0RU4ri_Ssu{k<|aM7yK&fiM(|;%GrMfadG?E#W>?lf*1e5I~j#Ku$h@4jtvp0i==v zGy(w6N&pL4RY#~70H!1)kjp>~AW%c}2*ju%2JIsdJq+jmddE@8SHsD%w^9v!)G!MC zF^GQ4L+`({`PBmJCkSkU6KxRKxaaZz8G>5SS0llYvG6g5uTCt!(oo}%rWgo@6|KUA zYuD@&I+yzcww12zcpf38?&nx@8HJKqa2cRg2TZ1=IH8;PjR=lx5}`cii%RF;<0~Lke&5` zprHqgCeKJq1k{QV1u*Hyy~X5IRP2|rB2rM~?G+|tDnNu1oSYrRz|HKlHO0GMn67+? zj&|5|8rO0}EC2&Phgc#pHryR+ESP;(R&gq%tYY@XE6hsfO!@Ro`AP1~*z~5);VlHw zSbq~a<=K&?LkxVjeb%rAe!n~X82gH-i^?MeBDccF-P_W%?-d6Ry6Aif-HnM$A8NJL z+L*t+JHOmHOsGXLxiqErBkf(`^Mf~up#+gn?wqB5;+TFTzmSeUkA42J$NIFnew3+>afvU#NQW;DSD{yH*rufoEgg8%xx#J;)W+CpE1^B8NbDf*cuhYmJ=RNnIln z)jkzSU!Mn$M|F?jQBU`&a=m)&yM9O-R-14?bH=ST)!bl}wda3tUT6wygOrK7lB~V| ze?-pU$t6O$)Ki=+MFCvNt`ujoo3raNF6F2vh2rT(bt02J$z-xeDdj&4=aMAxv6=tB zKud5cLKm#|62g*V<>|s?DWs>TyTm7co+1{?q%KLxakrPetWndcEG|#Z5vG%5$w{&C zXQd>0rc6qTm&wHd8C5S4g7NuqM@Q9({sHz32Mq1;E@Hfyy;(r1xuF?}oN_xv%r%{5bIrc2?pdN+JLNh@-779eE7> z1BehWQ|R=6c_ctUVvqn(oh-VG75vl0Svz6?fUXGuj938p#giD{0U!hh0CQddV3Y{} z^5ksRMPpt=$lJ!s64?I}d9B51JVlsneTBl~>OTN=>Z0%S3NRIoL4l_QmBmF*-<-%`zz^LG`;y&#NZD}_w%2HMC*53vUd-1azJNkp_uX&m zn-uo>oXcP;gHv;-CY0YLp=S#k0^bkDrRQDHHbfLw?8g`YS(maBnOEs zC|j)s;ZNrKNc;Kh^~L>3pg5{7dGT16!V{7(`S&cUYk+$^FPPl1v(hwfrKa~h`rD7k zC4IYx>V^eU9fs^(FUij6|9d23W>naAeqT;E=gBp9=U&p^&tI9fW%qtMF{nT)CvemK zn@aP9h3?pdHWcR;6*Qzy{OHP*{w<#8FlZt%I){{Omz@vU))89Q^g0-p_SVV2P%L$^ zWhROSg}ap~nyIlGL;p0{JlFyn93-|1W$Fc=E!oI9~qg-U+W^Zc)2x-72FOj!P@ zLG)h#`^`hq>1@fujn73=xn^LN7vZdT>zr`pCyY&Vd?z*_%&*0q6LYpZKhoNUD7Ltf z0;HQHEm5YJ>t+(_Ox6%ZfOpaFH*c#Jyc&3XDuu7lL`mg-nqQ7QcZ+5}P!lG_jT-;T z9**1sHa!LK)7rpI-(+#>@a5%g{V||si+Ckzfmj)#ay_vmn#=Y_CzSaHPpPNk=Bpd+ zP<9c*gL|_IM7YeSaf@#iwO*oS`$?o_HGU(UJkTtfT!jr)eSjIbTA_Fjdx;OVxjJKM zV6r5ph;g3`sfs)gy5S-#F>-sZQ;}mE!7aY)u8ZhH#|&JI7I<9>12Nq#-uJ{3C8XIZ z8h0|P5fZ;);I*aV>NN-aGIB(&yY-eJBf^sajaO>P@GzG|jC>Z3TDH`W0u{DN`274@ z3yBn%Tl#d)a}Y2`v!r0&7o@GbgK&xKBkQH|8-lc<=puX^ByoMSWwx}i%YdRsVf@&3;o9%#@@16&ZT{sJ= zYP)GzYUZYIoe&UXT^0Og4oG7%LBFyw2gz*>d=Pvee-;B$x6!!oJx5RuGdzqQn#9OY zgNCefv-~+N5#Y{rSFsvX}si)gMV8zxPNf*U%`KTa`tkO(a zO-8%F3Gk)-Xi)mJ6mF3*rbm|>&O2rBRzMLsuj$R2kjK4?W2rtBh2AX(E#L2^gnT;4 z_;DmfVVW;5-~DUry>IC79l^*@zlY%3BVuEv7+^tb8?I>8NFI9>+gN$O!C1*SGP6Eb zMp6Fdz64aM@hNMDzjhDpDrU0#+ebRes%MfXQ zlyIMO#qDF`t_B6y0~Y$An4M|yZg1n2eT_}N!;m(kl4}#FuT}n&f7e!ddTO|VZ)&vG zM|q<6Q9>*zQxg5eeRX~<)edPEtQmfJMBqwb6;_#roX^qtEVQ3yB+xv7PmV!Z!J5~)xK`}xOVuI#U7`Oh7(yV zXz1X`pa^8O$FnJIQ~3SDCxlMcYX`TM)A_`Ms~eDFm8+pK@*s=y4p$2~ia~w|gyY0X zlXs8Sff{Q`$3Tn*8)LtJpx5pR%ifZ;@46~d@U`sk^LN#i>a8sKEzu}3qSf#v_1J8| zy?=ODgLE$L1AR}Jf*VVkMBev3LPfb!eXvwtBV4dAkARb~lW<*_zV1l_XZR^2INV4d zp$&r>!CBO{`R|H^dIn60BDq* KWrc-T%zpvXt{oo$ literal 0 HcmV?d00001 diff --git a/next-ui/public/favicon.ico b/next-ui/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6c8addeddc7e4e8cda9157f13fdbffc22fc14cc8 GIT binary patch literal 15086 zcmb_j34Bk-_MceFYx^wSky!q^yw`f~^|jh6N@++eK`0R-OU2$;o>pm#sC^5yR;@wR zQi4b#kw{`mP_kNUNu;z$6cI#3zW;OX?>9I1cYpULzu zpEQn&w0Fu^JfGn!KBsVqu$NH4Zcl;LgxArqv4gn1tBcqa=_MLhg!bcN08p?kYZsU&fwCv%&qs@9j?k&FTX# z|4Bn7t9)6`Pwy+T!!7Z9&zn^)e%2$Sb((E2EnaP!t0JA^xAtI zQKz#oBP|PFhqBRXXHyXYehw7yNQqDDE zAHaFkB{)|-fM@m=EBQ{OKTEnk=Ma9jmtr~#vbrq~VGq*Eo6|HF5N_2OiCxC5CyI`o z1m3Gcf#ke7)E2*%mjS)QQE%iWybyL5uXZ@7^a=M%y-NE~*{b`jSF(LaV$z9?D*k@r zh#tRQ?n;~OD`8>Z#_-yors~iK^+^7;a*%uNh8D7#E-o&{JM}j!m|fou!__N!h}e;d zuSe`hEB9zP#okxsUn}trCJt$%jBiKqv+d3JGrh&jgk7=UwQ^t5vo2-~cg46FBb52x zXU_q2I$faRmSgtA7C?V@bJ<5n9wY1tc%xQ0jwGK|`I3p`b2*rNC=0D4&%tR=Au3US z)JV9e%&Q-6iig+y5R4ts)sU}UokWx4e!^QT`=r2{@Ycvz;xvmt@&Oi3Hpd_QRV?9; zN67S83E40nxicAp#n4+$pZ{y{I<^h5h}!uzgetnzr3q0^gbrr2__ub^q;mAFW;*>f=Q zEa_IHI;LGZo<>#cdcpWvm!|u@ZHJxlZ|*3r5!Q1?_&G0WKyCDkKcx0U`xC?i>AS?v z@wbD_b?3+V`w_O~h#7QbUATf~uWeVcJAZl>RW#UZClp|AA9FivgPSNKoY&3pbN(S3 z5592+OL?Fy8zNe--KI)0m0xr<+u%;(Js zqcOZu~x%Sbz|3^YQz02SxYI=g$MBc7lHX?EF@`>Aaau^GdIlWSAN} z{@q!3$o4S_6`4OHx{2S6)~|%2<*#4Cv(0rUbWsLe8yU|%!DIHS*qxtChD+x&s5jwH zyu9XCh1M_f4}oodvNQW=^@rz6N9>2~$Bgl@$VYi+plS8X$jh@I18bHisrc(nxn^oF z$hB9-TKj?hA6Cp>?9ZgMYQITd*oIj5jVor(AA!*umccK!)P8GsJRcj5q$BU3)?E6VzDkpAPANVNkEjSTXA|4j-_L<>>I^Xj-{gS>LvV z9@n7<3JVMIS}n^Mc78Ke#qWsytdTqOa9Fkf{lxIHaO=NyKW4vwd9P|Ayt-te|H6}K z(aEwtFP>_TpBZv}XRAerDzJai$X${D@qS{M#Bbd{-qGVUdQbVxc>maT743sBSoXs0 zl4xJ~ccAZw7qD(cD*pH*&!!*z!ZYA9Jcss=`|)gi`TIvbcEVM_m?eIz4$U{htIrD` zX}o{e?+;pyvh)GZlP(J`qD90xOh`J9{in`jTx^D-H;(Mz4Y1?5ub8XF>^}Cz6ll z-$ppz?_1=Gsk$n6ZCPzP`Lh~kZ5Q)7 zP`SW01*oqEY1^)7di^)0=NJ8_k3+J7+$+##kOrE=$+FIm9HBjU`!+O;x%4>Li^;wm z>@Z-1f>vF+?Fe3dnLVF3!s;(undwA%`Fv*RX#lChS?NCF4Qi{*c}b7`G2c^ZJ$k*u zK+CAW^A=&^^Xo_I3kUgO8z%T{kf>G$l*js%-d8vi4YoBLvX>mhUBG)0wgDasTm>pC zHlM|Ab;$NMquHY6_vm zq{Z3%PH_Uqm36U`5W$?Uk2&uNKf&Cdo({byaK0WFy=QYi;kMz2_>z1od=vkQ97rDE z^7O-Ua^g6_DmN)dDOdicgzRb@^F6JG6h5Y)-qWf@FOT?;4frhSi5G<*=)C!o%{?qP z@o*EJn{4wCC)jr%+r_efeMC|=)mR^i<`N3Z8EUixcd7UsZCfXCGSZVZ>CqmZD``AT zl5{DCBebOtmt(%8w!O1RitHq_3ZNX2hqw_lRY4@J`s_a_KXk^=_hgm#64%L{sKj`#MKUJE})z!}b^W zyaD&KMasF@x5L~G%dBvJ$|j$5wm7Dna(z*fRO2jvQJv@}YiV;jASwo<7X)LO=L~BkV8GTb3Z0H;?qb-QrF6gK z4NM)~Ny+0gcHV2VE$=%s7%Yb- zw`AD2gG}kOYrM*zrc|7E73bKMWOE+33U1AMH|}uvS{`( zG^!p;KFRaSx2*HmuIP3y1&oZ!tNrxeXq=QyW6|!H<&u%y}ae zTC%TY+@4(0ZGQqL4YjA=r(+yuOh~fBb&$>`YwrHbMju!wcw9)?(mCk~vO8?<2+UmY zKe%6@dr?_*o;wlvz`68HZr3JT`uVr+pqG0X9y}73q#wO(LoPGr4_wT;s^+EAyimWYg?IG~X9&sPIw!f2pGNAPj1~Fo^lyfN z{&jgXOQj#aa zEfksX{M)i-K7zVk#dmYg;)BM(_yM-`#{?xS^yS^Yq2mYJ$ea6J(~%`x1+^<#4J@oroHwRZj0$ed~4*6;IZ z4W1)uYU80{rS`|@^-B>o;ti~xXl#FcH{2cniLkdnbhN>CwT1K2U#tCP=ga9&_E+$- zU>q3uf@+&EKK9r07-8Po{-XbeAjQXGzr+r4fyYl4`%5QtZsTZDPw}@>%B3l*9mIEE zR9YGSmDRL1pXJcOYJW~5z9nsKnbd%%^mTvN%e|DkC3V7A{FmCW!JutZn;yG*F5V40 zf@6J4@oK;8(rnW^^gj%%95QwF^}OJ4U=73$sb`mOP%qi+Y(&q$eCIy0>ZIYgFrZI4JoL8iYoL{&U3;~yv6@lit-d!*^c1*%QOevU@?( z=Zp(UX2m=&@tVN*!}b3o*w$I3>F=al>&8-DM0Iyk*OqZphojx9Qu}VDTP5Wi-J`p% zZG(K7i@0to%~QVNarkEPP%Q4{f=<8QRPGl}3wRIiD>kA|T%OuC<6vIszi>?$GuNd( zB)oSVLHn(Rn0qD{|66ne4SvW~_I)+?Jitpa`D%UUkL5vi=ciHKHGS$R_gDMuK7=;j z_mH1osI2Lq2Oh<|1!pjF(-pi$^J(CeG3xz5mMQ7;iM>Od(c^Fy+z#JIn=wTgKEQIv zjP38)!It}ch4&x8^Oq~&z1TB}MVRK_l;`GqL|^%@(7r*hpnGB#T76c8wIP=JdDm{^ z-rXVv$LK)17d!bHo=qsi^niC1KDckGzTzL3^;`G9k29H;dm7hs3zWL67So*rV@KSE;YqnT&sEDgHim$3#A>=KiiEXO2G!7uS<`W%;dA{M09`W9%O#3`iVON4Y;T zI3^jhmlYuLmm3IlyROs^+mVBM-~5Re$+LYy3RU4eXvy44~U4voH;|WcW9~pEExPAx`%G0^)OHQ4;GhY zUFW*|uuqHf_HurPpOZRY&I%chjeqhwYI_jIF%PZS3DL_ zU2TuP6|=7E>uTFkG`bd+OnK3Y(TzK@|z}*4>j1y67*%{yZp{& IxenL;e*&F}x&QzG literal 0 HcmV?d00001 diff --git a/next-ui/src/App.vue b/next-ui/src/App.vue new file mode 100644 index 000000000..6e9dab958 --- /dev/null +++ b/next-ui/src/App.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/next-ui/src/api/komga-client.ts b/next-ui/src/api/komga-client.ts new file mode 100644 index 000000000..908e65b1f --- /dev/null +++ b/next-ui/src/api/komga-client.ts @@ -0,0 +1,24 @@ +import type {Middleware} from 'openapi-fetch' +import createClient from 'openapi-fetch' +import type {paths} from '@/generated/openapi/komga' + +// Middleware that throws on error, so it works with Pinia Colada +const coladaMiddleware: Middleware = { + async onResponse({response}: {response: Response}) { + if (!response.ok) + throw new Error(`${response.url}: ${response.status} ${response.statusText}`) + // return response untouched + return undefined + }, +} + +const client = createClient({ + baseUrl: 'http://localhost:8080', + // required to pass the session cookie on all requests + credentials: 'include', + // required to avoid browser basic-auth popups + headers: {'X-Requested-With': 'XMLHttpRequest'}, +}) +client.use(coladaMiddleware) + +export const komgaClient = client diff --git a/next-ui/src/assets/logo.svg b/next-ui/src/assets/logo.svg new file mode 100644 index 000000000..6358ad1a0 --- /dev/null +++ b/next-ui/src/assets/logo.svg @@ -0,0 +1,113 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/next-ui/src/auto-imports.d.ts b/next-ui/src/auto-imports.d.ts new file mode 100644 index 000000000..b0e4fa6bd --- /dev/null +++ b/next-ui/src/auto-imports.d.ts @@ -0,0 +1,142 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +// biome-ignore lint: disable +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const computed: typeof import('vue')['computed'] + const createApp: typeof import('vue')['createApp'] + const customRef: typeof import('vue')['customRef'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const effectScope: typeof import('vue')['effectScope'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const inject: typeof import('vue')['inject'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] + const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] + const provide: typeof import('vue')['provide'] + const reactive: typeof import('vue')['reactive'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const toRaw: typeof import('vue')['toRaw'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const unref: typeof import('vue')['unref'] + const useAttrs: typeof import('vue')['useAttrs'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVars: typeof import('vue')['useCssVars'] + const useId: typeof import('vue')['useId'] + const useLink: typeof import('vue-router')['useLink'] + const useModel: typeof import('vue')['useModel'] + const useRoute: typeof import('vue-router/auto')['useRoute'] + const useRouter: typeof import('vue-router/auto')['useRouter'] + const useSlots: typeof import('vue')['useSlots'] + const useTemplateRef: typeof import('vue')['useTemplateRef'] + const watch: typeof import('vue')['watch'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + import('vue') +} + +// for vue template auto import +import { UnwrapRef } from 'vue' +declare module 'vue' { + interface GlobalComponents {} + interface ComponentCustomProperties { + readonly EffectScope: UnwrapRef + readonly computed: UnwrapRef + readonly createApp: UnwrapRef + readonly customRef: UnwrapRef + readonly defineAsyncComponent: UnwrapRef + readonly defineComponent: UnwrapRef + readonly effectScope: UnwrapRef + readonly getCurrentInstance: UnwrapRef + readonly getCurrentScope: UnwrapRef + readonly h: UnwrapRef + readonly inject: UnwrapRef + readonly isProxy: UnwrapRef + readonly isReactive: UnwrapRef + readonly isReadonly: UnwrapRef + readonly isRef: UnwrapRef + readonly markRaw: UnwrapRef + readonly nextTick: UnwrapRef + readonly onActivated: UnwrapRef + readonly onBeforeMount: UnwrapRef + readonly onBeforeUnmount: UnwrapRef + readonly onBeforeUpdate: UnwrapRef + readonly onDeactivated: UnwrapRef + readonly onErrorCaptured: UnwrapRef + readonly onMounted: UnwrapRef + readonly onRenderTracked: UnwrapRef + readonly onRenderTriggered: UnwrapRef + readonly onScopeDispose: UnwrapRef + readonly onServerPrefetch: UnwrapRef + readonly onUnmounted: UnwrapRef + readonly onUpdated: UnwrapRef + readonly onWatcherCleanup: UnwrapRef + readonly provide: UnwrapRef + readonly reactive: UnwrapRef + readonly readonly: UnwrapRef + readonly ref: UnwrapRef + readonly resolveComponent: UnwrapRef + readonly shallowReactive: UnwrapRef + readonly shallowReadonly: UnwrapRef + readonly shallowRef: UnwrapRef + readonly toRaw: UnwrapRef + readonly toRef: UnwrapRef + readonly toRefs: UnwrapRef + readonly toValue: UnwrapRef + readonly triggerRef: UnwrapRef + readonly unref: UnwrapRef + readonly useAttrs: UnwrapRef + readonly useCssModule: UnwrapRef + readonly useCssVars: UnwrapRef + readonly useId: UnwrapRef + readonly useModel: UnwrapRef + readonly useRoute: UnwrapRef + readonly useRouter: UnwrapRef + readonly useSlots: UnwrapRef + readonly useTemplateRef: UnwrapRef + readonly watch: UnwrapRef + readonly watchEffect: UnwrapRef + readonly watchPostEffect: UnwrapRef + readonly watchSyncEffect: UnwrapRef + } +} diff --git a/next-ui/src/colada/mutations/logout.ts b/next-ui/src/colada/mutations/logout.ts new file mode 100644 index 000000000..87918a9f3 --- /dev/null +++ b/next-ui/src/colada/mutations/logout.ts @@ -0,0 +1,16 @@ +import {defineMutation, useMutation, useQueryCache} from '@pinia/colada' +import {komgaClient} from '@/api/komga-client' + +export const useLogout = defineMutation(() => { + const queryCache = useQueryCache() + return useMutation({ + mutation: () => + komgaClient.POST('/api/logout'), + onSuccess: () => { + queryCache.invalidateQueries({key: ['current-user']}) + }, + onError: (error) => { + console.log('logout error', error) + }, + }) +}) diff --git a/next-ui/src/colada/queries/actuator-info.ts b/next-ui/src/colada/queries/actuator-info.ts new file mode 100644 index 000000000..61586390e --- /dev/null +++ b/next-ui/src/colada/queries/actuator-info.ts @@ -0,0 +1,15 @@ +import {useQuery} from '@pinia/colada' +import {komgaClient} from '@/api/komga-client' +import type {ActuatorInfo} from '@/types/Actuator' + +export function useActuatorInfo() { + return useQuery({ + key: () => ['actuator-info'], + query: () => komgaClient.GET('/actuator/info') + // unwrap the openapi-fetch structure on success + .then((res) => res.data as ActuatorInfo), + // 1 hour + staleTime: 60 * 60 * 1000, + gcTime: false, + }) +} diff --git a/next-ui/src/colada/queries/app-releases.ts b/next-ui/src/colada/queries/app-releases.ts new file mode 100644 index 000000000..b8208314e --- /dev/null +++ b/next-ui/src/colada/queries/app-releases.ts @@ -0,0 +1,14 @@ +import {useQuery} from '@pinia/colada' +import {komgaClient} from '@/api/komga-client' + +export function useAppReleases() { + return useQuery({ + key: () => ['app-releases'], + query: () => komgaClient.GET('/api/v1/releases') + // unwrap the openapi-fetch structure on success + .then((res) => res.data), + // 1 hour + staleTime: 60 * 60 * 1000, + gcTime: false, + }) +} diff --git a/next-ui/src/colada/queries/current-user.ts b/next-ui/src/colada/queries/current-user.ts new file mode 100644 index 000000000..7c2599c7f --- /dev/null +++ b/next-ui/src/colada/queries/current-user.ts @@ -0,0 +1,15 @@ +import {useQuery} from '@pinia/colada' +import {komgaClient} from '@/api/komga-client' + +export function useCurrentUser() { + return useQuery({ + key: () => ['current-user'], + query: () => komgaClient.GET('/api/v2/users/me') + // unwrap the openapi-fetch structure on success + .then((res) => res.data), + // 10 minutes + staleTime: 10 * 60 * 1000, + gcTime: false, + autoRefetch: true, + }) +} diff --git a/next-ui/src/components.d.ts b/next-ui/src/components.d.ts new file mode 100644 index 000000000..1ef4f89cd --- /dev/null +++ b/next-ui/src/components.d.ts @@ -0,0 +1,30 @@ +/* eslint-disable */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +// biome-ignore lint: disable +export {} + +/* prettier-ignore */ +declare module 'vue' { + export interface GlobalComponents { + AppBar: typeof import('./components/app/bar/AppBar.vue')['default'] + AppDrawer: typeof import('./components/app/drawer/AppDrawer.vue')['default'] + AppDrawerFooter: typeof import('./components/app/drawer/AppDrawerFooter.vue')['default'] + AppDrawerMenu: typeof import('./components/app/drawer/AppDrawerMenu.vue')['default'] + AppDrawerMenuAccount: typeof import('./components/app/drawer/AppDrawerMenuAccount.vue')['default'] + AppDrawerMenuHistory: typeof import('./components/app/drawer/AppDrawerMenuHistory.vue')['default'] + AppDrawerMenuImport: typeof import('./components/app/drawer/AppDrawerMenuImport.vue')['default'] + AppDrawerMenuLogout: typeof import('./components/app/drawer/AppDrawerMenuLogout.vue')['default'] + AppDrawerMenuMedia: typeof import('./components/app/drawer/AppDrawerMenuMedia.vue')['default'] + AppDrawerMenuServer: typeof import('./components/app/drawer/AppDrawerMenuServer.vue')['default'] + AppFooter: typeof import('./components/AppFooter.vue')['default'] + BuidVersion: typeof import('./components/BuidVersion.vue')['default'] + BuildCommit: typeof import('./components/BuildCommit.vue')['default'] + HelloWorld: typeof import('./components/HelloWorld.vue')['default'] + LoginForm: typeof import('./components/LoginForm.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + ThemeSelector: typeof import('./components/app/bar/ThemeSelector.vue')['default'] + } +} diff --git a/next-ui/src/components/AppFooter.vue b/next-ui/src/components/AppFooter.vue new file mode 100644 index 000000000..966da8f6b --- /dev/null +++ b/next-ui/src/components/AppFooter.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/next-ui/src/components/BuidVersion.vue b/next-ui/src/components/BuidVersion.vue new file mode 100644 index 000000000..d9a08e4c2 --- /dev/null +++ b/next-ui/src/components/BuidVersion.vue @@ -0,0 +1,20 @@ + + + diff --git a/next-ui/src/components/BuildCommit.vue b/next-ui/src/components/BuildCommit.vue new file mode 100644 index 000000000..36a017248 --- /dev/null +++ b/next-ui/src/components/BuildCommit.vue @@ -0,0 +1,23 @@ + + + diff --git a/next-ui/src/components/HelloWorld.vue b/next-ui/src/components/HelloWorld.vue new file mode 100644 index 000000000..e44c01abb --- /dev/null +++ b/next-ui/src/components/HelloWorld.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/next-ui/src/components/LoginForm.vue b/next-ui/src/components/LoginForm.vue new file mode 100644 index 000000000..33662f4af --- /dev/null +++ b/next-ui/src/components/LoginForm.vue @@ -0,0 +1,97 @@ + + + + + + + diff --git a/next-ui/src/components/README.md b/next-ui/src/components/README.md new file mode 100644 index 000000000..d1dc92f5e --- /dev/null +++ b/next-ui/src/components/README.md @@ -0,0 +1,35 @@ +# Components + +Vue template files in this folder are automatically imported. + +## 🚀 Usage + +Importing is handled by [unplugin-vue-components](https://github.com/unplugin/unplugin-vue-components). This plugin automatically imports `.vue` files created in the `src/components` directory, and registers them as global components. This means that you can use any component in your application without having to manually import it. + +The following example assumes a component located at `src/components/MyComponent.vue`: + +```vue + + + +``` + +When your template is rendered, the component's import will automatically be inlined, which renders to this: + +```vue + + + +``` diff --git a/next-ui/src/components/app/bar/AppBar.vue b/next-ui/src/components/app/bar/AppBar.vue new file mode 100644 index 000000000..e159c9cf1 --- /dev/null +++ b/next-ui/src/components/app/bar/AppBar.vue @@ -0,0 +1,29 @@ + + + + + + + diff --git a/next-ui/src/components/app/bar/ThemeSelector.vue b/next-ui/src/components/app/bar/ThemeSelector.vue new file mode 100644 index 000000000..6d1b3a8d4 --- /dev/null +++ b/next-ui/src/components/app/bar/ThemeSelector.vue @@ -0,0 +1,55 @@ + + + + + + + diff --git a/next-ui/src/components/app/drawer/AppDrawer.vue b/next-ui/src/components/app/drawer/AppDrawer.vue new file mode 100644 index 000000000..bfab9c04f --- /dev/null +++ b/next-ui/src/components/app/drawer/AppDrawer.vue @@ -0,0 +1,17 @@ + + + diff --git a/next-ui/src/components/app/drawer/AppDrawerFooter.vue b/next-ui/src/components/app/drawer/AppDrawerFooter.vue new file mode 100644 index 000000000..c525ee1aa --- /dev/null +++ b/next-ui/src/components/app/drawer/AppDrawerFooter.vue @@ -0,0 +1,18 @@ + + + diff --git a/next-ui/src/components/app/drawer/AppDrawerMenu.vue b/next-ui/src/components/app/drawer/AppDrawerMenu.vue new file mode 100644 index 000000000..2aacfcedd --- /dev/null +++ b/next-ui/src/components/app/drawer/AppDrawerMenu.vue @@ -0,0 +1,17 @@ + + + diff --git a/next-ui/src/components/app/drawer/AppDrawerMenuAccount.vue b/next-ui/src/components/app/drawer/AppDrawerMenuAccount.vue new file mode 100644 index 000000000..fc0fb3372 --- /dev/null +++ b/next-ui/src/components/app/drawer/AppDrawerMenuAccount.vue @@ -0,0 +1,38 @@ + + + + + + + diff --git a/next-ui/src/components/app/drawer/AppDrawerMenuHistory.vue b/next-ui/src/components/app/drawer/AppDrawerMenuHistory.vue new file mode 100644 index 000000000..0c057b3ca --- /dev/null +++ b/next-ui/src/components/app/drawer/AppDrawerMenuHistory.vue @@ -0,0 +1,7 @@ + diff --git a/next-ui/src/components/app/drawer/AppDrawerMenuImport.vue b/next-ui/src/components/app/drawer/AppDrawerMenuImport.vue new file mode 100644 index 000000000..8743c0862 --- /dev/null +++ b/next-ui/src/components/app/drawer/AppDrawerMenuImport.vue @@ -0,0 +1,21 @@ + diff --git a/next-ui/src/components/app/drawer/AppDrawerMenuLogout.vue b/next-ui/src/components/app/drawer/AppDrawerMenuLogout.vue new file mode 100644 index 000000000..127c48274 --- /dev/null +++ b/next-ui/src/components/app/drawer/AppDrawerMenuLogout.vue @@ -0,0 +1,18 @@ + + + diff --git a/next-ui/src/components/app/drawer/AppDrawerMenuMedia.vue b/next-ui/src/components/app/drawer/AppDrawerMenuMedia.vue new file mode 100644 index 000000000..40c0ebd3d --- /dev/null +++ b/next-ui/src/components/app/drawer/AppDrawerMenuMedia.vue @@ -0,0 +1,44 @@ + + diff --git a/next-ui/src/components/app/drawer/AppDrawerMenuServer.vue b/next-ui/src/components/app/drawer/AppDrawerMenuServer.vue new file mode 100644 index 000000000..922ded162 --- /dev/null +++ b/next-ui/src/components/app/drawer/AppDrawerMenuServer.vue @@ -0,0 +1,36 @@ + diff --git a/next-ui/src/composables/buid-version.ts b/next-ui/src/composables/buid-version.ts new file mode 100644 index 000000000..5f120d5a4 --- /dev/null +++ b/next-ui/src/composables/buid-version.ts @@ -0,0 +1,9 @@ + import {useActuatorInfo} from '@/colada/queries/actuator-info' + +export function useBuildVersion() { + const {data} = useActuatorInfo() + + const buildVersion = computed(() => data.value?.build?.version) + + return {buildVersion} +} diff --git a/next-ui/src/composables/current-user-role.ts b/next-ui/src/composables/current-user-role.ts new file mode 100644 index 000000000..2010d8b92 --- /dev/null +++ b/next-ui/src/composables/current-user-role.ts @@ -0,0 +1,10 @@ +import {useCurrentUser} from '@/colada/queries/current-user.ts' +import {UserRoles} from '@/types/UserRoles.ts' + +export function useCurrentUserRole(role: UserRoles) { + const {data} = useCurrentUser() + + const hasRole = computed(() => data.value?.roles.includes(role)) + + return {hasRole} +} diff --git a/next-ui/src/composables/latest-version.ts b/next-ui/src/composables/latest-version.ts new file mode 100644 index 000000000..030287b76 --- /dev/null +++ b/next-ui/src/composables/latest-version.ts @@ -0,0 +1,17 @@ +import {useAppReleases} from '@/colada/queries/app-releases.ts' +import {useBuildVersion} from '@/composables/buid-version.ts' + +export function useLatestVersion() { + const {data, } = useAppReleases() + + const {buildVersion} = useBuildVersion() + const latestRelease = computed(() => data.value?.find(x => x.latest)) + + const isLatestVersion = computed(() => { + if(buildVersion.value && latestRelease.value) + return buildVersion.value == latestRelease.value?.version + else return undefined + }) + + return {isLatestVersion} +} diff --git a/next-ui/src/generated/openapi/komga.d.ts b/next-ui/src/generated/openapi/komga.d.ts new file mode 100644 index 000000000..fdbab2665 --- /dev/null +++ b/next-ui/src/generated/openapi/komga.d.ts @@ -0,0 +1,9401 @@ +export interface paths { + "/actuator/info": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get server information + * @description Required role: **ADMIN** + */ + get: operations["getActuatorInfo"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/logout": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Logout + * @description Invalidates the current session and clean up any remember-me authentication. + */ + get: operations["postLogout"]; + put?: never; + /** + * Logout + * @description Invalidates the current session and clean up any remember-me authentication. + */ + post: operations["postLogout_1"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/age-ratings": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List age ratings + * @description Can be filtered by various criteria + */ + get: operations["getAgeRatings"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/announcements": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve announcements + * @description Required role: **ADMIN** + */ + get: operations["getAnnouncements"]; + /** + * Mark announcements as read + * @description Required role: **ADMIN** + */ + put: operations["markAnnouncementsRead"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/authors": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List authors + * @deprecated + * @description Use GET /api/v2/authors instead. Deprecated since 1.20.0. + */ + get: operations["getAuthorsDeprecated"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/authors/names": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List authors' names */ + get: operations["getAuthorsNames"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/authors/roles": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List authors' roles */ + get: operations["getAuthorsRoles"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List books + * @deprecated + * @description Use POST /api/v1/books/list instead. Deprecated since 1.19.0. + */ + get: operations["getAllBooksDeprecated"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/duplicates": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List duplicate books + * @description Return books that have the same file hash. + * + * Required role: **ADMIN** + */ + get: operations["getBooksDuplicates"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/import": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Import books + * @description Required role: **ADMIN** + */ + post: operations["importBooks"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/latest": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List latest books + * @description Return newly added or updated books. + */ + get: operations["getBooksLatest"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** List books */ + post: operations["getBooks"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/metadata": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update book metadata in bulk + * @description Set a field to null to unset the metadata. You can omit fields you don't want to update. + * + * Required role: **ADMIN** + */ + patch: operations["updateBookMetadataByBatch"]; + trace?: never; + }; + "/api/v1/books/ondeck": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List books on deck + * @description Return first unread book of series with at least one book read and no books in progress. + */ + get: operations["getBooksOnDeck"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/thumbnails": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Regenerate books posters + * @description Required role: **ADMIN** + */ + put: operations["booksRegenerateThumbnails"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get book details */ + get: operations["getBookById"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/analyze": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Analyze book + * @description Required role: **ADMIN** + */ + post: operations["bookAnalyze"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/file": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Download book file + * @description Download the book file. + * + * Required role: **FILE_DOWNLOAD** + */ + get: operations["downloadBookFile"]; + put?: never; + post?: never; + /** + * Delete book file + * @description Required role: **ADMIN** + */ + delete: operations["deleteBookFile"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/file/*": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Download book file + * @description Download the book file. + * + * Required role: **FILE_DOWNLOAD** + */ + get: operations["downloadBookFile_1"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/manifest": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get book's WebPub manifest */ + get: operations["getBookWebPubManifest"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/manifest/divina": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get book's WebPub manifest (DiViNa) */ + get: operations["getBookWebPubManifestDivina"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/manifest/epub": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get book's WebPub manifest (Epub) */ + get: operations["getBookWebPubManifestEpub"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/manifest/pdf": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get book's WebPub manifest (PDF) */ + get: operations["getBookWebPubManifestPdf"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/metadata": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update book metadata + * @description Set a field to null to unset the metadata. You can omit fields you don't want to update. + * + * Required role: **ADMIN** + */ + patch: operations["updateBookMetadata"]; + trace?: never; + }; + "/api/v1/books/{bookId}/metadata/refresh": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Refresh book metadata + * @description Required role: **ADMIN** + */ + post: operations["bookRefreshMetadata"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/next": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get next book in series */ + get: operations["getBookSiblingNext"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/pages": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List book pages */ + get: operations["getBookPages"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/pages/{pageNumber}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get book page image + * @description Required role: **PAGE_STREAMING** + */ + get: operations["getBookPageByNumber"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/pages/{pageNumber}/raw": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get raw book page + * @description Returns the book page in raw format, without content negotiation. + * + * Required role: **PAGE_STREAMING** + */ + get: operations["getBookPageRawByNumber"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/pages/{pageNumber}/thumbnail": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get book page thumbnail + * @description The image is resized to 300px on the largest dimension. + */ + get: operations["getBookPageThumbnailByNumber"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/positions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List book's positions + * @description The Positions API is a proposed standard for OPDS 2 and Readium. It is used by the Epub Reader. + */ + get: operations["getBookPositions"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/previous": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get previous book in series */ + get: operations["getBookSiblingPrevious"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/progression": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get book progression + * @description The Progression API is a proposed standard for OPDS 2 and Readium. It is used by the Epub Reader. + */ + get: operations["getBookProgression"]; + /** + * Mark book progression + * @description The Progression API is a proposed standard for OPDS 2 and Readium. It is used by the Epub Reader. + */ + put: operations["updateBookProgression"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/read-progress": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Mark book as unread + * @description Mark book as unread + */ + delete: operations["deleteBookReadProgress"]; + options?: never; + head?: never; + /** + * Mark book's read progress + * @description Mark book as read and/or change page progress. + */ + patch: operations["markBookReadProgress"]; + trace?: never; + }; + "/api/v1/books/{bookId}/readlists": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List book's readlists */ + get: operations["getReadListsByBookId"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/resource/{resource}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get Epub resource + * @description Return a resource from within an Epub book. + */ + get: operations["getBookEpubResource"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/thumbnail": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get book's poster image */ + get: operations["getBookThumbnail"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/thumbnails": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List book posters */ + get: operations["getBookThumbnails"]; + put?: never; + /** + * Add book poster + * @description Required role: **ADMIN** + */ + post: operations["addUserUploadedBookThumbnail"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/thumbnails/{thumbnailId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get book poster image */ + get: operations["getBookThumbnailById"]; + put?: never; + post?: never; + /** + * Delete book poster + * @description Only uploaded posters can be deleted. + * + * Required role: **ADMIN** + */ + delete: operations["deleteUserUploadedBookThumbnail"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/books/{bookId}/thumbnails/{thumbnailId}/selected": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Mark book poster as selected + * @description Required role: **ADMIN** + */ + put: operations["markBookThumbnailSelected"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/claim": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve claim status + * @description Check whether this server has already been claimed. + */ + get: operations["getClaimStatus"]; + put?: never; + /** + * Claim server + * @description Creates an admin user with the provided credentials. + */ + post: operations["claimServer"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/client-settings/global": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete global settings + * @description Setting key should be a valid lowercase namespace string like 'application.domain.key' + * + * Required role: **ADMIN** + */ + delete: operations["deleteGlobalSettings"]; + options?: never; + head?: never; + /** + * Save global settings + * @description Setting key should be a valid lowercase namespace string like 'application.domain.key' + * + * Required role: **ADMIN** + */ + patch: operations["saveGlobalSetting"]; + trace?: never; + }; + "/api/v1/client-settings/global/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve global client settings + * @description For unauthenticated users, only settings with 'allowUnauthorized=true' will be returned. + */ + get: operations["getGlobalSettings"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/client-settings/user": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete user settings + * @description Setting key should be a valid lowercase namespace string like 'application.domain.key' + */ + delete: operations["deleteUserSettings"]; + options?: never; + head?: never; + /** + * Save user settings + * @description Setting key should be a valid lowercase namespace string like 'application.domain.key' + */ + patch: operations["saveUserSetting"]; + trace?: never; + }; + "/api/v1/client-settings/user/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve user client settings */ + get: operations["getUserSettings"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/collections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List collections */ + get: operations["getCollections"]; + put?: never; + /** + * Create collection + * @description Required role: **ADMIN** + */ + post: operations["createCollection"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/collections/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get collection details */ + get: operations["getCollectionById"]; + put?: never; + post?: never; + /** + * Delete collection + * @description Required role: **ADMIN** + */ + delete: operations["deleteCollectionById"]; + options?: never; + head?: never; + /** + * Update collection + * @description Required role: **ADMIN** + */ + patch: operations["updateCollectionById"]; + trace?: never; + }; + "/api/v1/collections/{id}/series": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List collection's series */ + get: operations["getSeriesByCollectionId"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/collections/{id}/thumbnail": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get collection's poster image */ + get: operations["getCollectionThumbnail"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/collections/{id}/thumbnails": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List collection's posters */ + get: operations["getCollectionThumbnails"]; + put?: never; + /** + * Add collection poster + * @description Required role: **ADMIN** + */ + post: operations["addUserUploadedCollectionThumbnail"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/collections/{id}/thumbnails/{thumbnailId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get collection poster image */ + get: operations["getCollectionThumbnailById"]; + put?: never; + post?: never; + /** + * Delete collection poster + * @description Required role: **ADMIN** + */ + delete: operations["deleteUserUploadedCollectionThumbnail"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/collections/{id}/thumbnails/{thumbnailId}/selected": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Mark collection poster as selected + * @description Required role: **ADMIN** + */ + put: operations["markCollectionThumbnailSelected"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/filesystem": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Directory listing + * @description List folders and files from the host server's file system. If no request body is passed then the root directories are returned. + * + * Required role: **ADMIN** + */ + post: operations["getDirectoryListing"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/fonts/families": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List font families + * @description List all available font families. + */ + get: operations["getFonts"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/fonts/resource/{fontFamily}/css": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Download CSS file + * @description Download a CSS file with the @font-face block for the font family. This is used by the Epub Reader to change fonts. + */ + get: operations["getFontFamilyAsCss"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/fonts/resource/{fontFamily}/{fontFile}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Download font file */ + get: operations["getFontFile"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/genres": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List genres + * @description Can be filtered by various criteria + */ + get: operations["getGenres"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/history": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List historical events + * @description Required role: **ADMIN** + */ + get: operations["getHistoricalEvents"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/languages": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List languages + * @description Can be filtered by various criteria + */ + get: operations["getLanguages"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/libraries": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List all libraries + * @description The libraries are filtered based on the current user's permissions + */ + get: operations["getLibraries"]; + put?: never; + /** + * Create a library + * @description Required role: **ADMIN** + */ + post: operations["addLibrary"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/libraries/{libraryId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get details for a single library */ + get: operations["getLibraryById"]; + /** + * Update a library + * @deprecated + * @description Use PATCH /api/v1/libraries/{libraryId} instead. Deprecated since 1.3.0. + * + * Required role: **ADMIN** + */ + put: operations["updateLibraryByIdDeprecated"]; + post?: never; + /** + * Delete a library + * @description Required role: **ADMIN** + */ + delete: operations["deleteLibraryById"]; + options?: never; + head?: never; + /** + * Update a library + * @description You can omit fields you don't want to update + * + * Required role: **ADMIN** + */ + patch: operations["updateLibraryById"]; + trace?: never; + }; + "/api/v1/libraries/{libraryId}/analyze": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Analyze a library + * @description Required role: **ADMIN** + */ + post: operations["libraryAnalyze"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/libraries/{libraryId}/empty-trash": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Empty trash for a library + * @description Required role: **ADMIN** + */ + post: operations["libraryEmptyTrash"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/libraries/{libraryId}/metadata/refresh": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Refresh metadata for a library + * @description Required role: **ADMIN** + */ + post: operations["libraryRefreshMetadata"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/libraries/{libraryId}/scan": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Scan a library + * @description Required role: **ADMIN** + */ + post: operations["libraryScan"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/login/set-cookie": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Set cookie + * @description Forcefully return Set-Cookie header, even if the session is contained in the X-Auth-Token header. + */ + get: operations["convertHeaderSessionToCookie"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/oauth2/providers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List registered OAuth2 providers */ + get: operations["getOAuth2Providers"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/page-hashes": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List known duplicates + * @description Required role: **ADMIN** + */ + get: operations["getKnownPageHashes"]; + /** + * Mark duplicate page as known + * @description Required role: **ADMIN** + */ + put: operations["createOrUpdateKnownPageHash"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/page-hashes/unknown": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List unknown duplicates + * @description Required role: **ADMIN** + */ + get: operations["getUnknownPageHashes"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/page-hashes/unknown/{pageHash}/thumbnail": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get unknown duplicate image thumbnail + * @description Required role: **ADMIN** + */ + get: operations["getUnknownPageHashThumbnail"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/page-hashes/{pageHash}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List duplicate matches + * @description Required role: **ADMIN** + */ + get: operations["getPageHashMatches"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/page-hashes/{pageHash}/delete-all": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Delete all duplicate pages by hash + * @description Required role: **ADMIN** + */ + post: operations["deleteDuplicatePagesByPageHash"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/page-hashes/{pageHash}/delete-match": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Delete specific duplicate page + * @description Required role: **ADMIN** + */ + post: operations["deleteSingleMatchByPageHash"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/page-hashes/{pageHash}/thumbnail": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get known duplicate image thumbnail + * @description Required role: **ADMIN** + */ + get: operations["getKnownPageHashThumbnail"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/publishers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List publishers + * @description Can be filtered by various criteria + */ + get: operations["getPublishers"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List readlists */ + get: operations["getReadLists"]; + put?: never; + /** + * Create readlist + * @description Required role: **ADMIN** + */ + post: operations["createReadList"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/match/comicrack": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Match ComicRack list + * @description Required role: **ADMIN** + */ + post: operations["matchComicRackList"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get readlist details */ + get: operations["getReadListById"]; + put?: never; + post?: never; + /** + * Delete readlist + * @description Required role: **ADMIN** + */ + delete: operations["deleteReadListById"]; + options?: never; + head?: never; + /** + * Update readlist + * @description Required role: **ADMIN** + */ + patch: operations["updateReadListById"]; + trace?: never; + }; + "/api/v1/readlists/{id}/books": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List readlist's books */ + get: operations["getBooksByReadListId"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/{id}/books/{bookId}/next": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get next book in readlist */ + get: operations["getBookSiblingNextInReadList"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/{id}/books/{bookId}/previous": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get previous book in readlist */ + get: operations["getBookSiblingPreviousInReadList"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/{id}/file": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Download readlist + * @description Download the whole readlist as a ZIP file. + * + * Required role: **FILE_DOWNLOAD** + */ + get: operations["downloadReadListAsZip"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/{id}/read-progress/tachiyomi": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get readlist read progress (Mihon) + * @description Mihon specific, due to how read progress is handled in Mihon. + */ + get: operations["getMihonReadProgressByReadListId"]; + /** + * Update readlist read progress (Mihon) + * @description Mihon specific, due to how read progress is handled in Mihon. + */ + put: operations["updateMihonReadProgressByReadListId"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/{id}/thumbnail": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get readlist's poster image */ + get: operations["getReadListThumbnail"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/{id}/thumbnails": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List readlist's posters */ + get: operations["getReadListThumbnails"]; + put?: never; + /** + * Add readlist poster + * @description Required role: **ADMIN** + */ + post: operations["addUserUploadedReadListThumbnail"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/{id}/thumbnails/{thumbnailId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get readlist poster image */ + get: operations["getReadListThumbnailById"]; + put?: never; + post?: never; + /** + * Delete readlist poster + * @description Required role: **ADMIN** + */ + delete: operations["deleteUserUploadedReadListThumbnail"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/readlists/{id}/thumbnails/{thumbnailId}/selected": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Mark readlist poster as selected + * @description Required role: **ADMIN** + */ + put: operations["markReadListThumbnailSelected"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/releases": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List releases + * @description Required role: **ADMIN** + */ + get: operations["getReleases"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List series + * @deprecated + * @description Use POST /api/v1/series/list instead. Deprecated since 1.19.0. + */ + get: operations["getSeriesDeprecated"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/alphabetical-groups": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List series groups + * @deprecated + * @description Use POST /api/v1/series/list/alphabetical-groups instead. Deprecated since 1.19.0. + */ + get: operations["getSeriesAlphabeticalGroupsDeprecated"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/latest": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List latest series + * @description Return recently added or updated series. + */ + get: operations["getSeriesLatest"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** List series */ + post: operations["getSeries"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/list/alphabetical-groups": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * List series groups + * @description List series grouped by the first character of their sort title. + */ + post: operations["getSeriesAlphabeticalGroups"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/new": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List new series + * @description Return newly added series. + */ + get: operations["getSeriesNew"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/release-dates": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List series release dates + * @description Can be filtered by various criteria + */ + get: operations["getSeriesReleaseDates"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/updated": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List updated series + * @description Return recently updated series, but not newly added ones. + */ + get: operations["getSeriesUpdated"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get series details */ + get: operations["getSeriesById"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/analyze": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Analyze series + * @description Required role: **ADMIN** + */ + post: operations["seriesAnalyze"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/books": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List series' books + * @deprecated + * @description Use POST /api/v1/books/list instead. Deprecated since 1.19.0. + */ + get: operations["getBooksBySeriesId"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/collections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List series' collections */ + get: operations["getCollectionsBySeriesId"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/file": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Download series + * @description Download the whole series as a ZIP file. + * + * Required role: **FILE_DOWNLOAD** + */ + get: operations["downloadSeriesAsZip"]; + put?: never; + post?: never; + /** + * Delete series files + * @description Delete all of the series' books files on disk. + * + * Required role: **ADMIN** + */ + delete: operations["deleteSeriesFile"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/metadata": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update series metadata + * @description Required role: **ADMIN** + */ + patch: operations["updateSeriesMetadata"]; + trace?: never; + }; + "/api/v1/series/{seriesId}/metadata/refresh": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Refresh series metadata + * @description Required role: **ADMIN** + */ + post: operations["seriesRefreshMetadata"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/read-progress": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Mark series as read + * @description Mark all book for series as read + */ + post: operations["markSeriesAsRead"]; + /** + * Mark series as unread + * @description Mark all book for series as unread + */ + delete: operations["markSeriesAsUnread"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/thumbnail": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get series' poster image */ + get: operations["getSeriesThumbnail"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/thumbnails": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List series posters */ + get: operations["getSeriesThumbnails"]; + put?: never; + /** + * Add series poster + * @description Required role: **ADMIN** + */ + post: operations["addUserUploadedSeriesThumbnail"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/thumbnails/{thumbnailId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get series poster image */ + get: operations["getSeriesThumbnailById"]; + put?: never; + post?: never; + /** + * Delete series poster + * @description Required role: **ADMIN** + */ + delete: operations["deleteUserUploadedSeriesThumbnail"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/series/{seriesId}/thumbnails/{thumbnailId}/selected": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Mark series poster as selected + * @description Required role: **ADMIN** + */ + put: operations["markSeriesThumbnailSelected"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/settings": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve server settings + * @description Required role: **ADMIN** + */ + get: operations["getServerSettings"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update server settings + * @description You can omit fields you don't want to update + * + * Required role: **ADMIN** + */ + patch: operations["updateServerSettings"]; + trace?: never; + }; + "/api/v1/sharing-labels": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List sharing labels + * @description Can be filtered by various criteria + */ + get: operations["getSharingLabels"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/syncpoints/me": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete all sync points + * @description If an API Key ID is passed, deletes only the sync points associated with that API Key. Deleting sync points will allow a Kobo to sync from scratch upon the next sync. + */ + delete: operations["deleteSyncPointsForCurrentUser"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/tags": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List tags + * @description Can be filtered by various criteria + */ + get: operations["getTags"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/tags/book": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List book tags + * @description Can be filtered by various criteria + */ + get: operations["getBookTags"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/tags/series": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List series tags + * @description Can be filtered by various criteria + */ + get: operations["getSeriesTags"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/tasks": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Clear task queue + * @description Cancel all tasks queued + * + * Required role: **ADMIN** + */ + delete: operations["emptyTaskQueue"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/transient-books": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Scan folder for transient books + * @description Scan provided folder for transient books. + * + * Required role: **ADMIN** + */ + post: operations["scanTransientBooks"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/transient-books/{id}/analyze": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Analyze transient book + * @description Required role: **ADMIN** + */ + post: operations["analyzeTransientBook"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v1/transient-books/{id}/pages/{pageNumber}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get transient book page + * @description Required role: **ADMIN** + */ + get: operations["getPageByTransientBookId"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/authors": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List authors + * @description Can be filtered by various criteria + */ + get: operations["getAuthors"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/series/{seriesId}/read-progress/tachiyomi": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get series read progress (Mihon) + * @description Mihon specific, due to how read progress is handled in Mihon. + */ + get: operations["getMihonReadProgressBySeriesId"]; + /** + * Update series read progress (Mihon) + * @description Mihon specific, due to how read progress is handled in Mihon. + */ + put: operations["updateMihonReadProgressBySeriesId"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List users + * @description Required role: **ADMIN** + */ + get: operations["getUsers"]; + put?: never; + /** + * Create user + * @description Required role: **ADMIN** + */ + post: operations["addUser"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/users/authentication-activity": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve authentication activity + * @description Required role: **ADMIN** + */ + get: operations["getAuthenticationActivity"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/users/me": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve current user */ + get: operations["getCurrentUser"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/users/me/api-keys": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve API keys */ + get: operations["getApiKeysForCurrentUser"]; + put?: never; + /** Create API key */ + post: operations["createApiKeyForCurrentUser"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/users/me/api-keys/{keyId}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** Delete API key */ + delete: operations["deleteApiKeyByKeyId"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/users/me/authentication-activity": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Retrieve authentication activity for the current user */ + get: operations["getAuthenticationActivityForCurrentUser"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/users/me/password": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** Update current user's password */ + patch: operations["updatePasswordForCurrentUser"]; + trace?: never; + }; + "/api/v2/users/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete user + * @description Required role: **ADMIN** + */ + delete: operations["deleteUserById"]; + options?: never; + head?: never; + /** + * Update user + * @description Required role: **ADMIN** + */ + patch: operations["updateUserById"]; + trace?: never; + }; + "/api/v2/users/{id}/authentication-activity/latest": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve latest authentication activity for a user + * @description Required role: **ADMIN** + */ + get: operations["getLatestAuthenticationActivityByUserId"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/v2/users/{id}/password": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update user's password + * @description Required role: **ADMIN** + */ + patch: operations["updatePasswordByUserId"]; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + After: { + operator: "After"; + } & (Omit & { + /** Format: date-time */ + dateTime: Date; + }); + AgeRating: components["schemas"]["Series"] & { + ageRating: components["schemas"]["GreaterThan"] | components["schemas"]["Is"] | components["schemas"]["IsNot"] | components["schemas"]["IsNotNullT"] | components["schemas"]["IsNullT"] | components["schemas"]["LessThan"]; + }; + AgeRestrictionDto: { + /** Format: int32 */ + age: number; + /** @enum {string} */ + restriction: "ALLOW_ONLY" | "EXCLUDE"; + }; + AgeRestrictionUpdateDto: { + /** Format: int32 */ + age: number; + /** @enum {string} */ + restriction: "ALLOW_ONLY" | "EXCLUDE"; + }; + AllOfBook: components["schemas"]["Book"] & { + allOf: (components["schemas"]["AllOfBook"] | components["schemas"]["AnyOfBook"] | components["schemas"]["Author"] | components["schemas"]["Deleted"] | components["schemas"]["LibraryId"] | components["schemas"]["MediaProfile"] | components["schemas"]["MediaStatus"] | components["schemas"]["NumberSort"] | components["schemas"]["OneShot"] | components["schemas"]["Poster"] | components["schemas"]["ReadListId"] | components["schemas"]["ReadStatus"] | components["schemas"]["ReleaseDate"] | components["schemas"]["SeriesId"] | components["schemas"]["Tag"] | components["schemas"]["Title"])[]; + }; + AllOfSeries: components["schemas"]["Series"] & { + allOf: (components["schemas"]["AgeRating"] | components["schemas"]["AllOfSeries"] | components["schemas"]["AnyOfSeries"] | components["schemas"]["Author"] | components["schemas"]["CollectionId"] | components["schemas"]["Complete"] | components["schemas"]["Deleted"] | components["schemas"]["Genre"] | components["schemas"]["Language"] | components["schemas"]["LibraryId"] | components["schemas"]["OneShot"] | components["schemas"]["Publisher"] | components["schemas"]["ReadStatus"] | components["schemas"]["ReleaseDate"] | components["schemas"]["SeriesStatus"] | components["schemas"]["SharingLabel"] | components["schemas"]["Tag"] | components["schemas"]["Title"] | components["schemas"]["TitleSort"])[]; + }; + AlternateTitleDto: { + label: string; + title: string; + }; + AlternateTitleUpdateDto: { + label: string; + title: string; + }; + AnyOfBook: components["schemas"]["Book"] & { + anyOf: (components["schemas"]["AllOfBook"] | components["schemas"]["AnyOfBook"] | components["schemas"]["Author"] | components["schemas"]["Deleted"] | components["schemas"]["LibraryId"] | components["schemas"]["MediaProfile"] | components["schemas"]["MediaStatus"] | components["schemas"]["NumberSort"] | components["schemas"]["OneShot"] | components["schemas"]["Poster"] | components["schemas"]["ReadListId"] | components["schemas"]["ReadStatus"] | components["schemas"]["ReleaseDate"] | components["schemas"]["SeriesId"] | components["schemas"]["Tag"] | components["schemas"]["Title"])[]; + }; + AnyOfSeries: components["schemas"]["Series"] & { + anyOf: (components["schemas"]["AgeRating"] | components["schemas"]["AllOfSeries"] | components["schemas"]["AnyOfSeries"] | components["schemas"]["Author"] | components["schemas"]["CollectionId"] | components["schemas"]["Complete"] | components["schemas"]["Deleted"] | components["schemas"]["Genre"] | components["schemas"]["Language"] | components["schemas"]["LibraryId"] | components["schemas"]["OneShot"] | components["schemas"]["Publisher"] | components["schemas"]["ReadStatus"] | components["schemas"]["ReleaseDate"] | components["schemas"]["SeriesStatus"] | components["schemas"]["SharingLabel"] | components["schemas"]["Tag"] | components["schemas"]["Title"] | components["schemas"]["TitleSort"])[]; + }; + ApiKeyDto: { + comment: string; + /** Format: date-time */ + createdDate: Date; + id: string; + key: string; + /** Format: date-time */ + lastModifiedDate: Date; + userId: string; + }; + ApiKeyRequestDto: { + comment: string; + }; + AuthenticationActivityDto: { + apiKeyComment?: string; + apiKeyId?: string; + /** Format: date-time */ + dateTime: Date; + email?: string; + error?: string; + ip?: string; + source?: string; + success: boolean; + userAgent?: string; + userId?: string; + }; + Author: components["schemas"]["Series"] & { + author: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + } & components["schemas"]["Book"]; + AuthorDto: { + name: string; + role: string; + }; + AuthorUpdateDto: { + name: string; + role: string; + }; + Before: { + operator: "Before"; + } & (Omit & { + /** Format: date-time */ + dateTime: Date; + }); + BeginsWith: { + operator: "BeginsWith"; + } & (Omit & { + value: string; + }); + Book: Record; + BookDto: { + /** Format: date-time */ + created: Date; + deleted: boolean; + fileHash: string; + /** Format: date-time */ + fileLastModified: Date; + id: string; + /** Format: date-time */ + lastModified: Date; + libraryId: string; + media: components["schemas"]["MediaDto"]; + metadata: components["schemas"]["BookMetadataDto"]; + name: string; + /** Format: int32 */ + number: number; + oneshot: boolean; + readProgress?: components["schemas"]["ReadProgressDto"]; + seriesId: string; + seriesTitle: string; + size: string; + /** Format: int64 */ + sizeBytes: number; + url: string; + }; + BookImportBatchDto: { + books: components["schemas"]["BookImportDto"][]; + /** @enum {string} */ + copyMode: "MOVE" | "COPY" | "HARDLINK"; + }; + BookImportDto: { + destinationName?: string; + seriesId: string; + sourceFile: string; + upgradeBookId?: string; + }; + BookMetadataAggregationDto: { + authors: components["schemas"]["AuthorDto"][]; + /** Format: date-time */ + created: Date; + /** Format: date-time */ + lastModified: Date; + /** Format: date */ + releaseDate?: string; + summary: string; + summaryNumber: string; + tags: string[]; + }; + BookMetadataDto: { + authors: components["schemas"]["AuthorDto"][]; + authorsLock: boolean; + /** Format: date-time */ + created: Date; + isbn: string; + isbnLock: boolean; + /** Format: date-time */ + lastModified: Date; + links: components["schemas"]["WebLinkDto"][]; + linksLock: boolean; + number: string; + numberLock: boolean; + /** Format: float */ + numberSort: number; + numberSortLock: boolean; + /** Format: date */ + releaseDate?: string; + releaseDateLock: boolean; + summary: string; + summaryLock: boolean; + tags: string[]; + tagsLock: boolean; + title: string; + titleLock: boolean; + }; + /** @description Metadata fields to update. Set a field to null to unset the metadata. You can omit fields you don't want to update. */ + BookMetadataUpdateDto: { + authors?: components["schemas"]["AuthorUpdateDto"][]; + authorsLock?: boolean; + isbn?: string; + isbnLock?: boolean; + links?: components["schemas"]["WebLinkUpdateDto"][]; + linksLock?: boolean; + number?: string; + numberLock?: boolean; + /** Format: float */ + numberSort?: number; + numberSortLock?: boolean; + /** Format: date */ + releaseDate?: string; + releaseDateLock?: boolean; + summary?: string; + summaryLock?: boolean; + tags?: string[]; + tagsLock?: boolean; + title?: string; + titleLock?: boolean; + }; + BookSearch: { + condition?: components["schemas"]["AllOfBook"] | components["schemas"]["AnyOfBook"] | components["schemas"]["Author"] | components["schemas"]["Deleted"] | components["schemas"]["LibraryId"] | components["schemas"]["MediaProfile"] | components["schemas"]["MediaStatus"] | components["schemas"]["NumberSort"] | components["schemas"]["OneShot"] | components["schemas"]["Poster"] | components["schemas"]["ReadListId"] | components["schemas"]["ReadStatus"] | components["schemas"]["ReleaseDate"] | components["schemas"]["SeriesId"] | components["schemas"]["Tag"] | components["schemas"]["Title"]; + fullTextSearch?: string; + }; + Boolean: { + operator: string; + }; + ClaimStatus: { + isClaimed: boolean; + }; + ClientSettingDto: { + allowUnauthorized?: boolean; + value: string; + }; + ClientSettingGlobalUpdateDto: { + allowUnauthorized: boolean; + value: string; + }; + ClientSettingUserUpdateDto: { + value: string; + }; + CollectionCreationDto: { + name: string; + ordered: boolean; + seriesIds: string[]; + }; + CollectionDto: { + /** Format: date-time */ + createdDate: Date; + filtered: boolean; + id: string; + /** Format: date-time */ + lastModifiedDate: Date; + name: string; + ordered: boolean; + seriesIds: string[]; + }; + CollectionId: components["schemas"]["Series"] & { + collectionId: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + CollectionUpdateDto: { + name?: string; + ordered?: boolean; + seriesIds?: string[]; + }; + Complete: components["schemas"]["Series"] & { + complete: components["schemas"]["IsFalse"] | components["schemas"]["IsTrue"]; + }; + Contains: { + operator: "Contains"; + } & (Omit & { + value: string; + }); + Date: { + operator: string; + }; + Deleted: components["schemas"]["Series"] & { + deleted: components["schemas"]["IsFalse"] | components["schemas"]["IsTrue"]; + } & components["schemas"]["Book"]; + DirectoryListingDto: { + directories: components["schemas"]["PathDto"][]; + files: components["schemas"]["PathDto"][]; + parent?: string; + }; + DirectoryRequestDto: { + path: string; + showFiles: boolean; + }; + DoesNotBeginWith: { + operator: "DoesNotBeginWith"; + } & (Omit & { + value: string; + }); + DoesNotContain: { + operator: "DoesNotContain"; + } & (Omit & { + value: string; + }); + DoesNotEndWith: { + operator: "DoesNotEndWith"; + } & (Omit & { + value: string; + }); + EndsWith: { + operator: "EndsWith"; + } & (Omit & { + value: string; + }); + EqualityAuthorMatch: { + operator: string; + }; + EqualityMediaProfile: { + operator: string; + }; + EqualityNullableString: { + operator: string; + }; + EqualityPosterMatch: { + operator: string; + }; + EqualityReadStatus: { + operator: string; + }; + EqualityStatus: { + operator: string; + }; + EqualityString: { + operator: string; + }; + Genre: components["schemas"]["Series"] & { + genre: components["schemas"]["Is"] | components["schemas"]["IsNot"] | components["schemas"]["IsNotNullT"] | components["schemas"]["IsNullT"]; + }; + GreaterThan: { + operator: "GreaterThan"; + } & (Omit & { + value: Record; + } & Omit); + GroupCountDto: { + /** Format: int32 */ + count: number; + group: string; + }; + HistoricalEventDto: { + bookId?: string; + properties: { + [key: string]: string; + }; + seriesId?: string; + /** Format: date-time */ + timestamp: Date; + type: string; + }; + Is: { + operator: "Is"; + } & (Omit & { + value: Record; + } & Omit & Omit & Omit & Omit & Omit & Omit & Omit & Omit & Omit); + IsFalse: { + operator: "IsFalse"; + } & Omit; + IsInTheLast: { + operator: "IsInTheLast"; + } & (Omit & { + duration: { + /** Format: int32 */ + nano?: number; + negative?: boolean; + positive?: boolean; + /** Format: int64 */ + seconds?: number; + units?: { + dateBased?: boolean; + durationEstimated?: boolean; + timeBased?: boolean; + }[]; + zero?: boolean; + }; + }); + IsNot: { + operator: "IsNot"; + } & (Omit & { + value: Record; + } & Omit & Omit & Omit & Omit & Omit & Omit & Omit & Omit & Omit); + IsNotInTheLast: { + operator: "IsNotInTheLast"; + } & (Omit & { + duration: { + /** Format: int32 */ + nano?: number; + negative?: boolean; + positive?: boolean; + /** Format: int64 */ + seconds?: number; + units?: { + dateBased?: boolean; + durationEstimated?: boolean; + timeBased?: boolean; + }[]; + zero?: boolean; + }; + }); + IsNotNull: { + operator: "IsNotNull"; + } & Omit; + IsNotNullT: { + operator: "IsNotNullT"; + } & (Omit & Omit); + IsNull: { + operator: "IsNull"; + } & Omit; + IsNullT: { + operator: "IsNullT"; + } & (Omit & Omit); + IsTrue: { + operator: "IsTrue"; + } & Omit; + ItemDto: { + _komga?: components["schemas"]["KomgaExtensionDto"]; + author?: components["schemas"]["AuthorDto"]; + content_html?: string; + /** Format: date-time */ + date_modified?: Date; + id: string; + summary?: string; + tags: string[]; + title?: string; + url?: string; + }; + JsonFeedDto: { + description?: string; + home_page_url?: string; + items: components["schemas"]["ItemDto"][]; + title: string; + version: string; + }; + KomgaExtensionDto: { + read: boolean; + }; + Language: components["schemas"]["Series"] & { + language: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + LessThan: { + operator: "LessThan"; + } & (Omit & { + value: Record; + } & Omit); + LibraryCreationDto: { + analyzeDimensions: boolean; + convertToCbz: boolean; + emptyTrashAfterScan: boolean; + hashFiles: boolean; + hashKoreader: boolean; + hashPages: boolean; + importBarcodeIsbn: boolean; + importComicInfoBook: boolean; + importComicInfoCollection: boolean; + importComicInfoReadList: boolean; + importComicInfoSeries: boolean; + importComicInfoSeriesAppendVolume: boolean; + importEpubBook: boolean; + importEpubSeries: boolean; + importLocalArtwork: boolean; + importMylarSeries: boolean; + name: string; + oneshotsDirectory?: string; + repairExtensions: boolean; + root: string; + scanCbx: boolean; + scanDirectoryExclusions: string[]; + scanEpub: boolean; + scanForceModifiedTime: boolean; + /** @enum {string} */ + scanInterval: "DISABLED" | "HOURLY" | "EVERY_6H" | "EVERY_12H" | "DAILY" | "WEEKLY"; + scanOnStartup: boolean; + scanPdf: boolean; + /** @enum {string} */ + seriesCover: "FIRST" | "FIRST_UNREAD_OR_FIRST" | "FIRST_UNREAD_OR_LAST" | "LAST"; + }; + LibraryDto: { + analyzeDimensions: boolean; + convertToCbz: boolean; + emptyTrashAfterScan: boolean; + hashFiles: boolean; + hashKoreader: boolean; + hashPages: boolean; + id: string; + importBarcodeIsbn: boolean; + importComicInfoBook: boolean; + importComicInfoCollection: boolean; + importComicInfoReadList: boolean; + importComicInfoSeries: boolean; + importComicInfoSeriesAppendVolume: boolean; + importEpubBook: boolean; + importEpubSeries: boolean; + importLocalArtwork: boolean; + importMylarSeries: boolean; + name: string; + oneshotsDirectory?: string; + repairExtensions: boolean; + root: string; + scanCbx: boolean; + scanDirectoryExclusions: string[]; + scanEpub: boolean; + scanForceModifiedTime: boolean; + /** @enum {string} */ + scanInterval: "DISABLED" | "HOURLY" | "EVERY_6H" | "EVERY_12H" | "DAILY" | "WEEKLY"; + scanOnStartup: boolean; + scanPdf: boolean; + /** @enum {string} */ + seriesCover: "FIRST" | "FIRST_UNREAD_OR_FIRST" | "FIRST_UNREAD_OR_LAST" | "LAST"; + unavailable: boolean; + }; + LibraryId: components["schemas"]["Series"] & { + libraryId: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + } & components["schemas"]["Book"]; + /** @description Fields to update. You can omit fields you don't want to update. */ + LibraryUpdateDto: { + analyzeDimensions?: boolean; + convertToCbz?: boolean; + emptyTrashAfterScan?: boolean; + hashFiles?: boolean; + hashKoreader?: boolean; + hashPages?: boolean; + importBarcodeIsbn?: boolean; + importComicInfoBook?: boolean; + importComicInfoCollection?: boolean; + importComicInfoReadList?: boolean; + importComicInfoSeries?: boolean; + importComicInfoSeriesAppendVolume?: boolean; + importEpubBook?: boolean; + importEpubSeries?: boolean; + importLocalArtwork?: boolean; + importMylarSeries?: boolean; + name?: string; + oneshotsDirectory?: string; + repairExtensions?: boolean; + root?: string; + scanCbx?: boolean; + scanDirectoryExclusions?: string[]; + scanEpub?: boolean; + scanForceModifiedTime?: boolean; + /** @enum {string} */ + scanInterval?: "DISABLED" | "HOURLY" | "EVERY_6H" | "EVERY_12H" | "DAILY" | "WEEKLY"; + scanOnStartup?: boolean; + scanPdf?: boolean; + /** @enum {string} */ + seriesCover?: "FIRST" | "FIRST_UNREAD_OR_FIRST" | "FIRST_UNREAD_OR_LAST" | "LAST"; + }; + Location: { + fragments: string[]; + /** Format: int32 */ + position?: number; + /** Format: float */ + progression?: number; + /** Format: float */ + totalProgression?: number; + }; + MediaDto: { + comment: string; + epubDivinaCompatible: boolean; + epubIsKepub: boolean; + mediaProfile: string; + mediaType: string; + /** Format: int32 */ + pagesCount: number; + status: string; + }; + MediaProfile: components["schemas"]["Book"] & { + mediaProfile: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + MediaStatus: components["schemas"]["Book"] & { + mediaStatus: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + MediaType: { + charset?: string; + concrete?: boolean; + parameters?: { + [key: string]: string; + }; + /** Format: double */ + qualityValue?: number; + subtype?: string; + subtypeSuffix?: string; + type?: string; + wildcardSubtype?: boolean; + wildcardType?: boolean; + }; + NumberSort: components["schemas"]["Book"] & { + numberSort: components["schemas"]["GreaterThan"] | components["schemas"]["Is"] | components["schemas"]["IsNot"] | components["schemas"]["LessThan"]; + }; + NumericFloat: { + operator: string; + }; + NumericNullableInteger: { + operator: string; + }; + OAuth2ClientDto: { + name: string; + registrationId: string; + }; + OneShot: components["schemas"]["Series"] & { + oneShot: components["schemas"]["IsFalse"] | components["schemas"]["IsTrue"]; + } & components["schemas"]["Book"]; + PageAuthenticationActivityDto: { + content?: components["schemas"]["AuthenticationActivityDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PageAuthorDto: { + content?: components["schemas"]["AuthorDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PageBookDto: { + content?: components["schemas"]["BookDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PageCollectionDto: { + content?: components["schemas"]["CollectionDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PageDto: { + fileName: string; + /** Format: int32 */ + height?: number; + mediaType: string; + /** Format: int32 */ + number: number; + size: string; + /** Format: int64 */ + sizeBytes?: number; + /** Format: int32 */ + width?: number; + }; + PageHashCreationDto: { + /** @enum {string} */ + action: "DELETE_AUTO" | "DELETE_MANUAL" | "IGNORE"; + hash: string; + /** Format: int64 */ + size?: number; + }; + PageHashKnownDto: { + /** @enum {string} */ + action: "DELETE_AUTO" | "DELETE_MANUAL" | "IGNORE"; + /** Format: date-time */ + created: Date; + /** Format: int32 */ + deleteCount: number; + hash: string; + /** Format: date-time */ + lastModified: Date; + /** Format: int32 */ + matchCount: number; + /** Format: int64 */ + size?: number; + }; + PageHashMatchDto: { + bookId: string; + fileName: string; + /** Format: int64 */ + fileSize: number; + mediaType: string; + /** Format: int32 */ + pageNumber: number; + url: string; + }; + PageHashUnknownDto: { + hash: string; + /** Format: int32 */ + matchCount: number; + /** Format: int64 */ + size?: number; + }; + PageHistoricalEventDto: { + content?: components["schemas"]["HistoricalEventDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PagePageHashKnownDto: { + content?: components["schemas"]["PageHashKnownDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PagePageHashMatchDto: { + content?: components["schemas"]["PageHashMatchDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PagePageHashUnknownDto: { + content?: components["schemas"]["PageHashUnknownDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PageReadListDto: { + content?: components["schemas"]["ReadListDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PageSeriesDto: { + content?: components["schemas"]["SeriesDto"][]; + empty?: boolean; + first?: boolean; + last?: boolean; + /** Format: int32 */ + number?: number; + /** Format: int32 */ + numberOfElements?: number; + pageable?: components["schemas"]["PageableObject"]; + /** Format: int32 */ + size?: number; + sort?: components["schemas"]["SortObject"]; + /** Format: int64 */ + totalElements?: number; + /** Format: int32 */ + totalPages?: number; + }; + PageableObject: { + /** Format: int64 */ + offset?: number; + /** Format: int32 */ + pageNumber?: number; + /** Format: int32 */ + pageSize?: number; + paged?: boolean; + sort?: components["schemas"]["SortObject"]; + unpaged?: boolean; + }; + PasswordUpdateDto: { + password: string; + }; + PathDto: { + name: string; + path: string; + type: string; + }; + Poster: components["schemas"]["Book"] & { + poster: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + Publisher: components["schemas"]["Series"] & { + publisher: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + R2Device: { + id: string; + name: string; + }; + R2Locator: { + href: string; + koboSpan?: string; + locations?: components["schemas"]["Location"]; + text?: components["schemas"]["Text"]; + title?: string; + type: string; + }; + R2Positions: { + positions: components["schemas"]["R2Locator"][]; + /** Format: int32 */ + total: number; + }; + R2Progression: { + device: components["schemas"]["R2Device"]; + locator: components["schemas"]["R2Locator"]; + /** Format: date-time */ + modified: Date; + }; + ReadListCreationDto: { + bookIds: string[]; + name: string; + ordered: boolean; + summary: string; + }; + ReadListDto: { + bookIds: string[]; + /** Format: date-time */ + createdDate: Date; + filtered: boolean; + id: string; + /** Format: date-time */ + lastModifiedDate: Date; + name: string; + ordered: boolean; + summary: string; + }; + ReadListId: components["schemas"]["Book"] & { + readListId: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + ReadListMatchDto: { + errorCode: string; + name: string; + }; + ReadListRequestBookDto: { + number: string; + series: string[]; + }; + ReadListRequestBookMatchBookDto: { + bookId: string; + number: string; + title: string; + }; + ReadListRequestBookMatchDto: { + books: components["schemas"]["ReadListRequestBookMatchBookDto"][]; + series: components["schemas"]["ReadListRequestBookMatchSeriesDto"]; + }; + ReadListRequestBookMatchSeriesDto: { + /** Format: date */ + releaseDate?: string; + seriesId: string; + title: string; + }; + ReadListRequestBookMatchesDto: { + matches: components["schemas"]["ReadListRequestBookMatchDto"][]; + request: components["schemas"]["ReadListRequestBookDto"]; + }; + ReadListRequestMatchDto: { + errorCode: string; + readListMatch: components["schemas"]["ReadListMatchDto"]; + requests: components["schemas"]["ReadListRequestBookMatchesDto"][]; + }; + ReadListUpdateDto: { + bookIds?: string[]; + name?: string; + ordered?: boolean; + summary?: string; + }; + ReadProgressDto: { + completed: boolean; + /** Format: date-time */ + created: Date; + deviceId: string; + deviceName: string; + /** Format: date-time */ + lastModified: Date; + /** Format: int32 */ + page: number; + /** Format: date-time */ + readDate: Date; + }; + /** @description page can be omitted if completed is set to true. completed can be omitted, and will be set accordingly depending on the page passed and the total number of pages in the book. */ + ReadProgressUpdateDto: { + completed?: boolean; + /** Format: int32 */ + page?: number; + }; + ReadStatus: components["schemas"]["Series"] & { + readStatus: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + } & components["schemas"]["Book"]; + ReleaseDate: components["schemas"]["Series"] & { + releaseDate: components["schemas"]["After"] | components["schemas"]["Before"] | components["schemas"]["IsInTheLast"] | components["schemas"]["IsNotInTheLast"] | components["schemas"]["IsNotNull"] | components["schemas"]["IsNull"]; + } & components["schemas"]["Book"]; + ReleaseDto: { + description: string; + latest: boolean; + preRelease: boolean; + /** Format: date-time */ + releaseDate: Date; + url: string; + version: string; + }; + ScanRequestDto: { + path: string; + }; + Series: Record; + SeriesDto: { + /** Format: int32 */ + booksCount: number; + /** Format: int32 */ + booksInProgressCount: number; + booksMetadata: components["schemas"]["BookMetadataAggregationDto"]; + /** Format: int32 */ + booksReadCount: number; + /** Format: int32 */ + booksUnreadCount: number; + /** Format: date-time */ + created: Date; + deleted: boolean; + /** Format: date-time */ + fileLastModified: Date; + id: string; + /** Format: date-time */ + lastModified: Date; + libraryId: string; + metadata: components["schemas"]["SeriesMetadataDto"]; + name: string; + oneshot: boolean; + url: string; + }; + SeriesId: components["schemas"]["Book"] & { + seriesId: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + SeriesMetadataDto: { + /** Format: int32 */ + ageRating?: number; + ageRatingLock: boolean; + alternateTitles: components["schemas"]["AlternateTitleDto"][]; + alternateTitlesLock: boolean; + /** Format: date-time */ + created: Date; + genres: string[]; + genresLock: boolean; + language: string; + languageLock: boolean; + /** Format: date-time */ + lastModified: Date; + links: components["schemas"]["WebLinkDto"][]; + linksLock: boolean; + publisher: string; + publisherLock: boolean; + readingDirection: string; + readingDirectionLock: boolean; + sharingLabels: string[]; + sharingLabelsLock: boolean; + status: string; + statusLock: boolean; + summary: string; + summaryLock: boolean; + tags: string[]; + tagsLock: boolean; + title: string; + titleLock: boolean; + titleSort: string; + titleSortLock: boolean; + /** Format: int32 */ + totalBookCount?: number; + totalBookCountLock: boolean; + }; + /** @description Metadata fields to update. Set a field to null to unset the metadata. You can omit fields you don't want to update. */ + SeriesMetadataUpdateDto: { + /** Format: int32 */ + ageRating?: number; + ageRatingLock?: boolean; + alternateTitles?: components["schemas"]["AlternateTitleUpdateDto"][]; + alternateTitlesLock?: boolean; + genres?: string[]; + genresLock?: boolean; + language?: string; + languageLock?: boolean; + links?: components["schemas"]["WebLinkUpdateDto"][]; + linksLock?: boolean; + publisher?: string; + publisherLock?: boolean; + /** @enum {string} */ + readingDirection?: "LEFT_TO_RIGHT" | "RIGHT_TO_LEFT" | "VERTICAL" | "WEBTOON"; + readingDirectionLock?: boolean; + sharingLabels?: string[]; + sharingLabelsLock?: boolean; + /** @enum {string} */ + status?: "ENDED" | "ONGOING" | "ABANDONED" | "HIATUS"; + statusLock?: boolean; + summary?: string; + summaryLock?: boolean; + tags?: string[]; + tagsLock?: boolean; + title?: string; + titleLock?: boolean; + titleSort?: string; + titleSortLock?: boolean; + /** Format: int32 */ + totalBookCount?: number; + totalBookCountLock?: boolean; + }; + SeriesSearch: { + condition?: components["schemas"]["AgeRating"] | components["schemas"]["AllOfSeries"] | components["schemas"]["AnyOfSeries"] | components["schemas"]["Author"] | components["schemas"]["CollectionId"] | components["schemas"]["Complete"] | components["schemas"]["Deleted"] | components["schemas"]["Genre"] | components["schemas"]["Language"] | components["schemas"]["LibraryId"] | components["schemas"]["OneShot"] | components["schemas"]["Publisher"] | components["schemas"]["ReadStatus"] | components["schemas"]["ReleaseDate"] | components["schemas"]["SeriesStatus"] | components["schemas"]["SharingLabel"] | components["schemas"]["Tag"] | components["schemas"]["Title"] | components["schemas"]["TitleSort"]; + fullTextSearch?: string; + }; + SeriesStatus: components["schemas"]["Series"] & { + seriesStatus: components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + SettingMultiSourceInteger: { + /** Format: int32 */ + configurationSource: number; + /** Format: int32 */ + databaseSource: number; + /** Format: int32 */ + effectiveValue: number; + }; + SettingMultiSourceString: { + configurationSource: string; + databaseSource: string; + effectiveValue: string; + }; + SettingsDto: { + deleteEmptyCollections: boolean; + deleteEmptyReadLists: boolean; + kepubifyPath: components["schemas"]["SettingMultiSourceString"]; + /** Format: int32 */ + koboPort?: number; + koboProxy: boolean; + /** Format: int64 */ + rememberMeDurationDays: number; + serverContextPath: components["schemas"]["SettingMultiSourceString"]; + serverPort: components["schemas"]["SettingMultiSourceInteger"]; + /** Format: int32 */ + taskPoolSize: number; + /** @enum {string} */ + thumbnailSize: "DEFAULT" | "MEDIUM" | "LARGE" | "XLARGE"; + }; + /** @description Fields to update. You can omit fields you don't want to update. */ + SettingsUpdateDto: { + deleteEmptyCollections?: boolean; + deleteEmptyReadLists?: boolean; + kepubifyPath?: string; + /** Format: int32 */ + koboPort?: number; + koboProxy?: boolean; + /** Format: int64 */ + rememberMeDurationDays?: number; + renewRememberMeKey?: boolean; + serverContextPath?: string; + /** Format: int32 */ + serverPort?: number; + /** Format: int32 */ + taskPoolSize?: number; + /** @enum {string} */ + thumbnailSize?: "DEFAULT" | "MEDIUM" | "LARGE" | "XLARGE"; + }; + SharedLibrariesUpdateDto: { + all: boolean; + libraryIds: string[]; + }; + SharingLabel: components["schemas"]["Series"] & { + sharingLabel: components["schemas"]["Is"] | components["schemas"]["IsNot"] | components["schemas"]["IsNotNullT"] | components["schemas"]["IsNullT"]; + }; + SortObject: { + empty?: boolean; + sorted?: boolean; + unsorted?: boolean; + }; + StreamingResponseBody: Record; + StringOp: { + operator: string; + }; + TachiyomiReadProgressDto: { + /** Format: int32 */ + booksCount: number; + /** Format: int32 */ + booksInProgressCount: number; + /** Format: int32 */ + booksReadCount: number; + /** Format: int32 */ + booksUnreadCount: number; + /** Format: int32 */ + lastReadContinuousIndex: number; + }; + TachiyomiReadProgressUpdateDto: { + /** Format: int32 */ + lastBookRead: number; + }; + TachiyomiReadProgressUpdateV2Dto: { + /** Format: float */ + lastBookNumberSortRead: number; + }; + TachiyomiReadProgressV2Dto: { + /** Format: int32 */ + booksCount: number; + /** Format: int32 */ + booksInProgressCount: number; + /** Format: int32 */ + booksReadCount: number; + /** Format: int32 */ + booksUnreadCount: number; + /** Format: float */ + lastReadContinuousNumberSort: number; + /** Format: float */ + maxNumberSort: number; + }; + Tag: components["schemas"]["Series"] & { + tag: components["schemas"]["Is"] | components["schemas"]["IsNot"] | components["schemas"]["IsNotNullT"] | components["schemas"]["IsNullT"]; + } & components["schemas"]["Book"]; + Text: { + after?: string; + before?: string; + highlight?: string; + }; + ThumbnailBookDto: { + bookId: string; + /** Format: int64 */ + fileSize: number; + /** Format: int32 */ + height: number; + id: string; + mediaType: string; + selected: boolean; + type: string; + /** Format: int32 */ + width: number; + }; + ThumbnailReadListDto: { + /** Format: int64 */ + fileSize: number; + /** Format: int32 */ + height: number; + id: string; + mediaType: string; + readListId: string; + selected: boolean; + type: string; + /** Format: int32 */ + width: number; + }; + ThumbnailSeriesCollectionDto: { + collectionId: string; + /** Format: int64 */ + fileSize: number; + /** Format: int32 */ + height: number; + id: string; + mediaType: string; + selected: boolean; + type: string; + /** Format: int32 */ + width: number; + }; + ThumbnailSeriesDto: { + /** Format: int64 */ + fileSize: number; + /** Format: int32 */ + height: number; + id: string; + mediaType: string; + selected: boolean; + seriesId: string; + type: string; + /** Format: int32 */ + width: number; + }; + Title: components["schemas"]["Series"] & { + title: components["schemas"]["BeginsWith"] | components["schemas"]["Contains"] | components["schemas"]["DoesNotBeginWith"] | components["schemas"]["DoesNotContain"] | components["schemas"]["DoesNotEndWith"] | components["schemas"]["EndsWith"] | components["schemas"]["Is"] | components["schemas"]["IsNot"]; + } & components["schemas"]["Book"]; + TitleSort: components["schemas"]["Series"] & { + titleSort: components["schemas"]["BeginsWith"] | components["schemas"]["Contains"] | components["schemas"]["DoesNotBeginWith"] | components["schemas"]["DoesNotContain"] | components["schemas"]["DoesNotEndWith"] | components["schemas"]["EndsWith"] | components["schemas"]["Is"] | components["schemas"]["IsNot"]; + }; + TransientBookDto: { + comment: string; + /** Format: date-time */ + fileLastModified: Date; + files: string[]; + id: string; + mediaType: string; + name: string; + /** Format: float */ + number?: number; + pages: components["schemas"]["PageDto"][]; + seriesId?: string; + size: string; + /** Format: int64 */ + sizeBytes: number; + status: string; + url: string; + }; + UserCreationDto: { + email: string; + password: string; + roles: string[]; + }; + UserDto: { + ageRestriction?: components["schemas"]["AgeRestrictionDto"]; + email: string; + id: string; + labelsAllow: string[]; + labelsExclude: string[]; + roles: string[]; + sharedAllLibraries: boolean; + sharedLibrariesIds: string[]; + }; + UserUpdateDto: { + ageRestriction?: components["schemas"]["AgeRestrictionUpdateDto"]; + labelsAllow?: string[]; + labelsExclude?: string[]; + roles?: string[]; + sharedLibraries?: components["schemas"]["SharedLibrariesUpdateDto"]; + }; + ValidationErrorResponse: { + violations: components["schemas"]["Violation"][]; + }; + Violation: { + fieldName?: string; + message?: string; + }; + WPBelongsToDto: { + collection: components["schemas"]["WPContributorDto"][]; + series: components["schemas"]["WPContributorDto"][]; + }; + WPContributorDto: { + links: components["schemas"]["WPLinkDto"][]; + name: string; + /** Format: float */ + position?: number; + }; + WPLinkDto: { + /** Format: int32 */ + height?: number; + href?: string; + properties: { + [key: string]: { + [key: string]: Record; + }; + }; + rel?: string; + templated?: boolean; + title?: string; + type?: string; + /** Format: int32 */ + width?: number; + }; + WPMetadataDto: { + artist: string[]; + author: string[]; + belongsTo?: components["schemas"]["WPBelongsToDto"]; + colorist: string[]; + conformsTo?: string; + contributor: string[]; + description?: string; + editor: string[]; + identifier?: string; + illustrator: string[]; + inker: string[]; + language?: string; + letterer: string[]; + /** Format: date-time */ + modified?: Date; + /** Format: int32 */ + numberOfPages?: number; + penciler: string[]; + /** Format: date */ + published?: string; + publisher: string[]; + /** @enum {string} */ + readingProgression?: "rtl" | "ltr" | "ttb" | "btt" | "auto"; + rendition: { + [key: string]: Record; + }; + sortAs?: string; + subject: string[]; + subtitle?: string; + title: string; + translator: string[]; + type?: string; + }; + WPPublicationDto: { + context?: string; + images: components["schemas"]["WPLinkDto"][]; + landmarks: components["schemas"]["WPLinkDto"][]; + links: components["schemas"]["WPLinkDto"][]; + metadata: components["schemas"]["WPMetadataDto"]; + pageList: components["schemas"]["WPLinkDto"][]; + readingOrder: components["schemas"]["WPLinkDto"][]; + resources: components["schemas"]["WPLinkDto"][]; + toc: components["schemas"]["WPLinkDto"][]; + }; + WebLinkDto: { + label: string; + url: string; + }; + WebLinkUpdateDto: { + label: string; + url?: string; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + getActuatorInfo: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + }; + }; + postLogout: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + postLogout_1: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + getAgeRatings: { + parameters: { + query?: { + library_id?: string[]; + collection_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getAnnouncements: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["JsonFeedDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + markAnnouncementsRead: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": string[]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getAuthorsDeprecated: { + parameters: { + query?: { + search?: string; + library_id?: string; + collection_id?: string; + series_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AuthorDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getAuthorsNames: { + parameters: { + query?: { + search?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getAuthorsRoles: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getAllBooksDeprecated: { + parameters: { + query?: { + search?: string; + library_id?: string[]; + media_status?: ("UNKNOWN" | "ERROR" | "READY" | "UNSUPPORTED" | "OUTDATED")[]; + read_status?: ("UNREAD" | "READ" | "IN_PROGRESS")[]; + released_after?: string; + tag?: string[]; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageBookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBooksDuplicates: { + parameters: { + query?: { + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageBookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + importBooks: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["BookImportBatchDto"]; + }; + }; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBooksLatest: { + parameters: { + query?: { + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageBookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBooks: { + parameters: { + query?: { + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["BookSearch"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageBookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateBookMetadataByBatch: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": { + [key: string]: components["schemas"]["BookMetadataUpdateDto"]; + }; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBooksOnDeck: { + parameters: { + query?: { + library_id?: string[]; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageBookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + booksRegenerateThumbnails: { + parameters: { + query?: { + for_bigger_result_only?: boolean; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookById: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["BookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + bookAnalyze: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + downloadBookFile: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StreamingResponseBody"]; + "application/octet-stream": components["schemas"]["StreamingResponseBody"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteBookFile: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + downloadBookFile_1: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StreamingResponseBody"]; + "application/octet-stream": components["schemas"]["StreamingResponseBody"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookWebPubManifest: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/divina+json": components["schemas"]["WPPublicationDto"]; + "application/json": components["schemas"]["WPPublicationDto"]; + "application/webpub+json": components["schemas"]["WPPublicationDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookWebPubManifestDivina: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/divina+json": components["schemas"]["WPPublicationDto"]; + "application/json": components["schemas"]["WPPublicationDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookWebPubManifestEpub: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WPPublicationDto"]; + "application/webpub+json": components["schemas"]["WPPublicationDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookWebPubManifestPdf: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["WPPublicationDto"]; + "application/webpub+json": components["schemas"]["WPPublicationDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateBookMetadata: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["BookMetadataUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + bookRefreshMetadata: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookSiblingNext: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["BookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookPages: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookPageByNumber: { + parameters: { + query?: { + /** @description Convert the image to the provided format. */ + convert?: "jpeg" | "png"; + /** @description If set to true, pages will start at index 0. If set to false, pages will start at index 1. */ + zero_based?: boolean; + contentNegotiation?: boolean; + }; + header?: { + /** @description Some very limited server driven content negotiation is handled. If a book is a PDF book, and the Accept header contains 'application/pdf' as a more specific type than other 'image/' types, a raw PDF page will be returned. */ + Accept?: components["schemas"]["MediaType"][]; + }; + path: { + bookId: string; + pageNumber: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "image/*": string; + }; + }; + }; + }; + getBookPageRawByNumber: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + pageNumber: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + "application/json": string; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookPageThumbnailByNumber: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + pageNumber: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + getBookPositions: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["R2Positions"]; + "application/vnd.readium.position-list+json": components["schemas"]["R2Positions"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookSiblingPrevious: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["BookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookProgression: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["R2Progression"]; + "application/vnd.readium.progression+json": components["schemas"]["R2Progression"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateBookProgression: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["R2Progression"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteBookReadProgress: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + markBookReadProgress: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ReadProgressUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getReadListsByBookId: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ReadListDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookEpubResource: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + resource: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + "application/json": string; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookThumbnail: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + getBookThumbnails: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ThumbnailBookDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + addUserUploadedBookThumbnail: { + parameters: { + query?: { + selected?: boolean; + }; + header?: never; + path: { + bookId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ThumbnailBookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookThumbnailById: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + deleteUserUploadedBookThumbnail: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + markBookThumbnailSelected: { + parameters: { + query?: never; + header?: never; + path: { + bookId: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getClaimStatus: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ClaimStatus"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + claimServer: { + parameters: { + query?: never; + header: { + "X-Komga-Email": string; + "X-Komga-Password": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteGlobalSettings: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** @example [ + * "application.key1", + * "application.key2" + * ] */ + "application/json": string[]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + saveGlobalSetting: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** @example { + * "application.key1": { + * "value": "a string value", + * "allowUnauthorized": true + * }, + * "application.key2": { + * "value": "{\"json\":\"object\"}", + * "allowUnauthorized": false + * } + * } */ + "application/json": { + [key: string]: components["schemas"]["ClientSettingGlobalUpdateDto"]; + }; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getGlobalSettings: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: components["schemas"]["ClientSettingDto"]; + }; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteUserSettings: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** @example [ + * "application.key1", + * "application.key2" + * ] */ + "application/json": string[]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + saveUserSetting: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + /** @example { + * "application.key1": { + * "value": "a string value" + * }, + * "application.key2": { + * "value": "{\"json\":\"object\"}" + * } + * } */ + "application/json": { + [key: string]: components["schemas"]["ClientSettingUserUpdateDto"]; + }; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getUserSettings: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: components["schemas"]["ClientSettingDto"]; + }; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getCollections: { + parameters: { + query?: { + search?: string; + library_id?: string[]; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageCollectionDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + createCollection: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CollectionCreationDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CollectionDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getCollectionById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CollectionDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteCollectionById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateCollectionById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["CollectionUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesByCollectionId: { + parameters: { + query?: { + library_id?: string[]; + status?: ("ENDED" | "ONGOING" | "ABANDONED" | "HIATUS")[]; + read_status?: ("UNREAD" | "READ" | "IN_PROGRESS")[]; + publisher?: string[]; + language?: string[]; + genre?: string[]; + tag?: string[]; + age_rating?: string[]; + release_year?: string[]; + deleted?: boolean; + complete?: boolean; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Author criteria in the format: name,role. Multiple author criteria are supported. */ + author?: string[]; + }; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageSeriesDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getCollectionThumbnail: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + getCollectionThumbnails: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ThumbnailSeriesCollectionDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + addUserUploadedCollectionThumbnail: { + parameters: { + query?: { + selected?: boolean; + }; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ThumbnailSeriesCollectionDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getCollectionThumbnailById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + deleteUserUploadedCollectionThumbnail: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + markCollectionThumbnailSelected: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getDirectoryListing: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": components["schemas"]["DirectoryRequestDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["DirectoryListingDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getFonts: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getFontFamilyAsCss: { + parameters: { + query?: never; + header?: never; + path: { + fontFamily: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "text/css": string; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getFontFile: { + parameters: { + query?: never; + header?: never; + path: { + fontFamily: string; + fontFile: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getGenres: { + parameters: { + query?: { + library_id?: string[]; + collection_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getHistoricalEvents: { + parameters: { + query?: { + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageHistoricalEventDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getLanguages: { + parameters: { + query?: { + library_id?: string[]; + collection_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getLibraries: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LibraryDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + addLibrary: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["LibraryCreationDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LibraryDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getLibraryById: { + parameters: { + query?: never; + header?: never; + path: { + libraryId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["LibraryDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateLibraryByIdDeprecated: { + parameters: { + query?: never; + header?: never; + path: { + libraryId: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["LibraryUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteLibraryById: { + parameters: { + query?: never; + header?: never; + path: { + libraryId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateLibraryById: { + parameters: { + query?: never; + header?: never; + path: { + libraryId: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["LibraryUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + libraryAnalyze: { + parameters: { + query?: never; + header?: never; + path: { + libraryId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + libraryEmptyTrash: { + parameters: { + query?: never; + header?: never; + path: { + libraryId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + libraryRefreshMetadata: { + parameters: { + query?: never; + header?: never; + path: { + libraryId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + libraryScan: { + parameters: { + query?: { + deep?: boolean; + }; + header?: never; + path: { + libraryId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + convertHeaderSessionToCookie: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getOAuth2Providers: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["OAuth2ClientDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getKnownPageHashes: { + parameters: { + query?: { + action?: ("DELETE_AUTO" | "DELETE_MANUAL" | "IGNORE")[]; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PagePageHashKnownDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + createOrUpdateKnownPageHash: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PageHashCreationDto"]; + }; + }; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getUnknownPageHashes: { + parameters: { + query?: { + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PagePageHashUnknownDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getUnknownPageHashThumbnail: { + parameters: { + query?: { + resize?: number; + }; + header?: never; + path: { + pageHash: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + getPageHashMatches: { + parameters: { + query?: { + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path: { + pageHash: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PagePageHashMatchDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteDuplicatePagesByPageHash: { + parameters: { + query?: never; + header?: never; + path: { + pageHash: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteSingleMatchByPageHash: { + parameters: { + query?: never; + header?: never; + path: { + pageHash: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PageHashMatchDto"]; + }; + }; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getKnownPageHashThumbnail: { + parameters: { + query?: never; + header?: never; + path: { + pageHash: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + getPublishers: { + parameters: { + query?: { + library_id?: string[]; + collection_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getReadLists: { + parameters: { + query?: { + search?: string; + library_id?: string[]; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageReadListDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + createReadList: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ReadListCreationDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ReadListDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + matchComicRackList: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: { + content: { + "application/json": { + /** Format: binary */ + file: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ReadListRequestMatchDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getReadListById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ReadListDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteReadListById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateReadListById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ReadListUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBooksByReadListId: { + parameters: { + query?: { + library_id?: string[]; + read_status?: ("UNREAD" | "READ" | "IN_PROGRESS")[]; + tag?: string[]; + media_status?: ("UNKNOWN" | "ERROR" | "READY" | "UNSUPPORTED" | "OUTDATED")[]; + deleted?: boolean; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Author criteria in the format: name,role. Multiple author criteria are supported. */ + author?: string[]; + }; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageBookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookSiblingNextInReadList: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["BookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookSiblingPreviousInReadList: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + bookId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["BookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + downloadReadListAsZip: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StreamingResponseBody"]; + "application/octet-stream": components["schemas"]["StreamingResponseBody"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getMihonReadProgressByReadListId: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TachiyomiReadProgressDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateMihonReadProgressByReadListId: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TachiyomiReadProgressUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getReadListThumbnail: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + getReadListThumbnails: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ThumbnailReadListDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + addUserUploadedReadListThumbnail: { + parameters: { + query?: { + selected?: boolean; + }; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ThumbnailReadListDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getReadListThumbnailById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + deleteUserUploadedReadListThumbnail: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + markReadListThumbnailSelected: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getReleases: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ReleaseDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesDeprecated: { + parameters: { + query?: { + search?: string; + library_id?: string[]; + collection_id?: string[]; + status?: ("ENDED" | "ONGOING" | "ABANDONED" | "HIATUS")[]; + read_status?: ("UNREAD" | "READ" | "IN_PROGRESS")[]; + publisher?: string[]; + language?: string[]; + genre?: string[]; + tag?: string[]; + age_rating?: string[]; + release_year?: string[]; + sharing_label?: string[]; + deleted?: boolean; + complete?: boolean; + oneshot?: boolean; + unpaged?: boolean; + /** @description Search by regex criteria, in the form: regex,field. Supported fields are TITLE and TITLE_SORT. */ + search_regex?: string; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + /** @description Author criteria in the format: name,role. Multiple author criteria are supported. */ + author?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageSeriesDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesAlphabeticalGroupsDeprecated: { + parameters: { + query?: { + search?: string; + library_id?: string[]; + collection_id?: string[]; + status?: ("ENDED" | "ONGOING" | "ABANDONED" | "HIATUS")[]; + read_status?: ("UNREAD" | "READ" | "IN_PROGRESS")[]; + publisher?: string[]; + language?: string[]; + genre?: string[]; + tag?: string[]; + age_rating?: string[]; + release_year?: string[]; + sharing_label?: string[]; + deleted?: boolean; + complete?: boolean; + oneshot?: boolean; + /** @description Search by regex criteria, in the form: regex,field. Supported fields are TITLE and TITLE_SORT. */ + search_regex?: string; + /** @description Author criteria in the format: name,role. Multiple author criteria are supported. */ + author?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GroupCountDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesLatest: { + parameters: { + query?: { + library_id?: string[]; + deleted?: boolean; + oneshot?: boolean; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageSeriesDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeries: { + parameters: { + query?: { + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SeriesSearch"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageSeriesDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesAlphabeticalGroups: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SeriesSearch"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["GroupCountDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesNew: { + parameters: { + query?: { + library_id?: string[]; + deleted?: boolean; + oneshot?: boolean; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageSeriesDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesReleaseDates: { + parameters: { + query?: { + library_id?: string[]; + collection_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesUpdated: { + parameters: { + query?: { + library_id?: string[]; + deleted?: boolean; + oneshot?: boolean; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageSeriesDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesById: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SeriesDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + seriesAnalyze: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBooksBySeriesId: { + parameters: { + query?: { + media_status?: ("UNKNOWN" | "ERROR" | "READY" | "UNSUPPORTED" | "OUTDATED")[]; + read_status?: ("UNREAD" | "READ" | "IN_PROGRESS")[]; + tag?: string[]; + deleted?: boolean; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + /** @description Author criteria in the format: name,role. Multiple author criteria are supported. */ + author?: string[]; + }; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageBookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getCollectionsBySeriesId: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["CollectionDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + downloadSeriesAsZip: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["StreamingResponseBody"]; + "application/octet-stream": components["schemas"]["StreamingResponseBody"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteSeriesFile: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateSeriesMetadata: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SeriesMetadataUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + seriesRefreshMetadata: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + markSeriesAsRead: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + markSeriesAsUnread: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesThumbnail: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + getSeriesThumbnails: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ThumbnailSeriesDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + addUserUploadedSeriesThumbnail: { + parameters: { + query?: { + selected?: boolean; + }; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: { + content: { + "multipart/form-data": { + /** Format: binary */ + file: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ThumbnailSeriesDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesThumbnailById: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + /** @description default response */ + default: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string; + "image/jpeg": string; + }; + }; + }; + }; + deleteUserUploadedSeriesThumbnail: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + markSeriesThumbnailSelected: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + thumbnailId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Accepted */ + 202: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getServerSettings: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["SettingsDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateServerSettings: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["SettingsUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSharingLabels: { + parameters: { + query?: { + library_id?: string[]; + collection_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteSyncPointsForCurrentUser: { + parameters: { + query?: { + key_id?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getTags: { + parameters: { + query?: { + library_id?: string[]; + collection_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getBookTags: { + parameters: { + query?: { + series_id?: string; + readlist_id?: string; + library_id?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getSeriesTags: { + parameters: { + query?: { + library_id?: string; + collection_id?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + emptyTaskQueue: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": number; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + scanTransientBooks: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ScanRequestDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TransientBookDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + analyzeTransientBook: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TransientBookDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getPageByTransientBookId: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + pageNumber: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": string; + "application/json": string; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getAuthors: { + parameters: { + query?: { + search?: string; + role?: string; + library_id?: string[]; + collection_id?: string; + series_id?: string; + readlist_id?: string; + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageAuthorDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getMihonReadProgressBySeriesId: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["TachiyomiReadProgressV2Dto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateMihonReadProgressBySeriesId: { + parameters: { + query?: never; + header?: never; + path: { + seriesId: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["TachiyomiReadProgressUpdateV2Dto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getUsers: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + addUser: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserCreationDto"]; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getAuthenticationActivity: { + parameters: { + query?: { + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageAuthenticationActivityDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getCurrentUser: { + parameters: { + query?: { + "remember-me"?: boolean; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getApiKeysForCurrentUser: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiKeyDto"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + createApiKeyForCurrentUser: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["ApiKeyRequestDto"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["ApiKeyDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteApiKeyByKeyId: { + parameters: { + query?: never; + header?: never; + path: { + keyId: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getAuthenticationActivityForCurrentUser: { + parameters: { + query?: { + unpaged?: boolean; + /** @description Zero-based page index (0..N) */ + page?: number; + /** @description The size of the page to be returned */ + size?: number; + /** @description Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported. */ + sort?: string[]; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["PageAuthenticationActivityDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updatePasswordForCurrentUser: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PasswordUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + deleteUserById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updateUserById: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["UserUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + getLatestAuthenticationActivityByUserId: { + parameters: { + query?: { + apikey_id?: string; + }; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["AuthenticationActivityDto"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; + updatePasswordByUserId: { + parameters: { + query?: never; + header?: never; + path: { + id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "application/json": components["schemas"]["PasswordUpdateDto"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["ValidationErrorResponse"]; + }; + }; + }; + }; +} diff --git a/next-ui/src/layouts/README.md b/next-ui/src/layouts/README.md new file mode 100644 index 000000000..78f68b602 --- /dev/null +++ b/next-ui/src/layouts/README.md @@ -0,0 +1,5 @@ +# Layouts + +Layouts are reusable components that wrap around pages. They are used to provide a consistent look and feel across multiple pages. + +Full documentation for this feature can be found in the Official [vite-plugin-vue-layouts-next](https://github.com/loicduong/vite-plugin-vue-layouts-next) repository. diff --git a/next-ui/src/layouts/default.vue b/next-ui/src/layouts/default.vue new file mode 100644 index 000000000..895ee55a3 --- /dev/null +++ b/next-ui/src/layouts/default.vue @@ -0,0 +1,20 @@ + + + diff --git a/next-ui/src/layouts/single.vue b/next-ui/src/layouts/single.vue new file mode 100644 index 000000000..8e9e4143c --- /dev/null +++ b/next-ui/src/layouts/single.vue @@ -0,0 +1,9 @@ + + + diff --git a/next-ui/src/main.ts b/next-ui/src/main.ts new file mode 100644 index 000000000..da6ef2e42 --- /dev/null +++ b/next-ui/src/main.ts @@ -0,0 +1,20 @@ +/** + * main.ts + * + * Bootstraps Vuetify and other plugins then mounts the App` + */ + +// Plugins +import {registerPlugins} from '@/plugins' + +// Components +import App from './App.vue' + +// Composables +import {createApp} from 'vue' + +const app = createApp(App) + +registerPlugins(app) + +app.mount('#app') diff --git a/next-ui/src/pages/README.md b/next-ui/src/pages/README.md new file mode 100644 index 000000000..bc9281e39 --- /dev/null +++ b/next-ui/src/pages/README.md @@ -0,0 +1,5 @@ +# Pages + +Vue components created in this folder will automatically be converted to navigable routes. + +Full documentation for this feature can be found in the Official [unplugin-vue-router](https://github.com/posva/unplugin-vue-router) repository. diff --git a/next-ui/src/pages/account/activity.vue b/next-ui/src/pages/account/activity.vue new file mode 100644 index 000000000..1ed758b3a --- /dev/null +++ b/next-ui/src/pages/account/activity.vue @@ -0,0 +1,7 @@ + + + diff --git a/next-ui/src/pages/account/api-keys.vue b/next-ui/src/pages/account/api-keys.vue new file mode 100644 index 000000000..0bc52828a --- /dev/null +++ b/next-ui/src/pages/account/api-keys.vue @@ -0,0 +1,7 @@ + + + diff --git a/next-ui/src/pages/account/details.vue b/next-ui/src/pages/account/details.vue new file mode 100644 index 000000000..71dc72233 --- /dev/null +++ b/next-ui/src/pages/account/details.vue @@ -0,0 +1,7 @@ + + + diff --git a/next-ui/src/pages/account/ui.vue b/next-ui/src/pages/account/ui.vue new file mode 100644 index 000000000..03d3636d3 --- /dev/null +++ b/next-ui/src/pages/account/ui.vue @@ -0,0 +1,7 @@ + + + diff --git a/next-ui/src/pages/history.vue b/next-ui/src/pages/history.vue new file mode 100644 index 000000000..75b135785 --- /dev/null +++ b/next-ui/src/pages/history.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/import/books.vue b/next-ui/src/pages/import/books.vue new file mode 100644 index 000000000..931874edc --- /dev/null +++ b/next-ui/src/pages/import/books.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/import/readlist.vue b/next-ui/src/pages/import/readlist.vue new file mode 100644 index 000000000..c0feb9e92 --- /dev/null +++ b/next-ui/src/pages/import/readlist.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/index.vue b/next-ui/src/pages/index.vue new file mode 100644 index 000000000..dac59c780 --- /dev/null +++ b/next-ui/src/pages/index.vue @@ -0,0 +1,7 @@ + + + diff --git a/next-ui/src/pages/login.vue b/next-ui/src/pages/login.vue new file mode 100644 index 000000000..38d2bfaaa --- /dev/null +++ b/next-ui/src/pages/login.vue @@ -0,0 +1,13 @@ + + + + + +meta: + layout: single + noAuth: true + diff --git a/next-ui/src/pages/media/analysis.vue b/next-ui/src/pages/media/analysis.vue new file mode 100644 index 000000000..cd46a0524 --- /dev/null +++ b/next-ui/src/pages/media/analysis.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/media/duplicate-files.vue b/next-ui/src/pages/media/duplicate-files.vue new file mode 100644 index 000000000..29ad21ab3 --- /dev/null +++ b/next-ui/src/pages/media/duplicate-files.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/media/duplicate-pages/known.vue b/next-ui/src/pages/media/duplicate-pages/known.vue new file mode 100644 index 000000000..d7205db7b --- /dev/null +++ b/next-ui/src/pages/media/duplicate-pages/known.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/media/duplicate-pages/unknown.vue b/next-ui/src/pages/media/duplicate-pages/unknown.vue new file mode 100644 index 000000000..2ad3447fe --- /dev/null +++ b/next-ui/src/pages/media/duplicate-pages/unknown.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/media/missing-posters.vue b/next-ui/src/pages/media/missing-posters.vue new file mode 100644 index 000000000..b01072ee3 --- /dev/null +++ b/next-ui/src/pages/media/missing-posters.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/server/announcements.vue b/next-ui/src/pages/server/announcements.vue new file mode 100644 index 000000000..c347fec72 --- /dev/null +++ b/next-ui/src/pages/server/announcements.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/server/metrics.vue b/next-ui/src/pages/server/metrics.vue new file mode 100644 index 000000000..1e254e9fc --- /dev/null +++ b/next-ui/src/pages/server/metrics.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/server/settings.vue b/next-ui/src/pages/server/settings.vue new file mode 100644 index 000000000..4159f1d4d --- /dev/null +++ b/next-ui/src/pages/server/settings.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/server/ui.vue b/next-ui/src/pages/server/ui.vue new file mode 100644 index 000000000..fdab4b915 --- /dev/null +++ b/next-ui/src/pages/server/ui.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/server/updates.vue b/next-ui/src/pages/server/updates.vue new file mode 100644 index 000000000..5a6927d0a --- /dev/null +++ b/next-ui/src/pages/server/updates.vue @@ -0,0 +1,123 @@ + + + + + + + +meta: +requiresRole: ADMIN + diff --git a/next-ui/src/pages/server/users.vue b/next-ui/src/pages/server/users.vue new file mode 100644 index 000000000..be38d39ea --- /dev/null +++ b/next-ui/src/pages/server/users.vue @@ -0,0 +1,12 @@ + + + + + +meta: + requiresRole: ADMIN + diff --git a/next-ui/src/pages/startup.vue b/next-ui/src/pages/startup.vue new file mode 100644 index 000000000..c9518a03e --- /dev/null +++ b/next-ui/src/pages/startup.vue @@ -0,0 +1,41 @@ + + + + + +meta: + layout: single + noAuth: true + diff --git a/next-ui/src/plugins/README.md b/next-ui/src/plugins/README.md new file mode 100644 index 000000000..62201c7cf --- /dev/null +++ b/next-ui/src/plugins/README.md @@ -0,0 +1,3 @@ +# Plugins + +Plugins are a way to extend the functionality of your Vue application. Use this folder for registering plugins that you want to use globally. diff --git a/next-ui/src/plugins/index.ts b/next-ui/src/plugins/index.ts new file mode 100644 index 000000000..9c9a85301 --- /dev/null +++ b/next-ui/src/plugins/index.ts @@ -0,0 +1,36 @@ +/** + * plugins/index.ts + * + * Automatically included in `./src/main.ts` + */ + +// Plugins +import vuetify from './vuetify' +import pinia from '../stores' +import router from '../router' +import {PiniaColada} from '@pinia/colada' +import { PiniaColadaAutoRefetch } from '@pinia/colada-plugin-auto-refetch' + +// Types +import type {App} from 'vue' + +// Navigation guards +import {useLoginGuard} from '@/router/login-guard' +import {useRoleGuard} from '@/router/role-guard.ts' + +export function registerPlugins(app: App) { + app + .use(vuetify) + // .use(DataLoaderPlugin, {router}) + .use(router) + .use(pinia) + .use(PiniaColada, { + plugins: [ + PiniaColadaAutoRefetch() + ] + }) + + // register navigation guards + useLoginGuard(router) + useRoleGuard(router) +} diff --git a/next-ui/src/plugins/vuetify.ts b/next-ui/src/plugins/vuetify.ts new file mode 100644 index 000000000..98b922e12 --- /dev/null +++ b/next-ui/src/plugins/vuetify.ts @@ -0,0 +1,40 @@ +/** + * plugins/vuetify.ts + * + * Framework documentation: https://vuetifyjs.com` + */ + +// Styles +import '@mdi/font/css/materialdesignicons.css' +import 'vuetify/styles' + +// Composables +import {createVuetify} from 'vuetify' +import {md3} from 'vuetify/blueprints' + + +// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides +export default createVuetify({ + theme: { + defaultTheme: 'light', + themes: { + light: { + dark: false, + colors: { + primary: '#005ed3', + secondary: '#fec000', + accent: '#ff0335', + }, + }, + dark: { + dark: true, + colors: { + primary: '#78baec', + secondary: '#fec000', + accent: '#ff0335', + }, + }, + }, + }, + blueprint: md3, +}) diff --git a/next-ui/src/router/index.ts b/next-ui/src/router/index.ts new file mode 100644 index 000000000..7aeadc16c --- /dev/null +++ b/next-ui/src/router/index.ts @@ -0,0 +1,36 @@ +/** + * router/index.ts + * + * Automatic routes for `./src/pages/*.vue` + */ + +// Composables +import {createRouter, createWebHistory} from 'vue-router/auto' +import {setupLayouts} from 'virtual:generated-layouts' +import {routes} from 'vue-router/auto-routes' + +const router = createRouter({ + history: createWebHistory(import.meta.env.BASE_URL), + routes: setupLayouts(routes), +}) + +// Workaround for https://github.com/vitejs/vite/issues/11804 +router.onError((err, to) => { + if (err?.message?.includes?.('Failed to fetch dynamically imported module')) { + if (!localStorage.getItem('vuetify:dynamic-reload')) { + console.log('Reloading page to fix dynamic import error') + localStorage.setItem('vuetify:dynamic-reload', 'true') + location.assign(to.fullPath) + } else { + console.error('Dynamic import error, reloading page did not fix it', err) + } + } else { + console.error(err) + } +}) + +router.isReady().then(() => { + localStorage.removeItem('vuetify:dynamic-reload') +}) + +export default router diff --git a/next-ui/src/router/login-guard.ts b/next-ui/src/router/login-guard.ts new file mode 100644 index 000000000..836933934 --- /dev/null +++ b/next-ui/src/router/login-guard.ts @@ -0,0 +1,18 @@ +import type {Router} from 'vue-router' +import {useCurrentUser} from '@/colada/queries/current-user' + +// check if the user is authenticated before navigating to any page +// the authentication is cached by Pinia Colada +// redirect to the startup page if not authenticated +export function useLoginGuard(router: Router) { + router.beforeEach((to) => { + if (!to.meta.noAuth) { + const {data} = useCurrentUser() + const authenticated = data.value + if(!authenticated) { + const query = Object.assign({}, to.query, {redirect: to.fullPath}) + return {name: '/startup', query: query} + } + } + }) +} diff --git a/next-ui/src/router/role-guard.ts b/next-ui/src/router/role-guard.ts new file mode 100644 index 000000000..b77a7f885 --- /dev/null +++ b/next-ui/src/router/role-guard.ts @@ -0,0 +1,16 @@ +import type {Router} from 'vue-router' +import {useCurrentUser} from '@/colada/queries/current-user' + +// check if the user has the necessary role before navigating to restricted pages +// the authentication is cached by Pinia Colada +// redirect to the home page in case of insufficient permissions +export function useRoleGuard(router: Router) { + router.beforeEach((to) => { + if (to.meta.requiresRole) { + const {data} = useCurrentUser() + if(!data.value?.roles?.includes(to.meta.requiresRole)) { + return {name: '/'} + } + } + }) +} diff --git a/next-ui/src/stores/README.md b/next-ui/src/stores/README.md new file mode 100644 index 000000000..54f8e03b6 --- /dev/null +++ b/next-ui/src/stores/README.md @@ -0,0 +1,5 @@ +# Store + +Pinia stores are used to store reactive state and expose actions to mutate it. + +Full documentation for this feature can be found in the Official [Pinia](https://pinia.esm.dev/) repository. diff --git a/next-ui/src/stores/app.ts b/next-ui/src/stores/app.ts new file mode 100644 index 000000000..1c50e4f48 --- /dev/null +++ b/next-ui/src/stores/app.ts @@ -0,0 +1,11 @@ +// Utilities +import {defineStore} from 'pinia' +import {useDisplay} from 'vuetify' + +export const useAppStore = defineStore('app', { + state: () => ({ + drawer: !useDisplay().mobile.value.valueOf(), + theme: 'system', + }), + persist: true, +}) diff --git a/next-ui/src/stores/index.ts b/next-ui/src/stores/index.ts new file mode 100644 index 000000000..b6379a17c --- /dev/null +++ b/next-ui/src/stores/index.ts @@ -0,0 +1,8 @@ +// Utilities +import { createPinia } from 'pinia' +import piniaPluginPersistedstate from 'pinia-plugin-persistedstate' + +const pinia = createPinia() +pinia.use(piniaPluginPersistedstate) + +export default pinia diff --git a/next-ui/src/stores/user.ts b/next-ui/src/stores/user.ts new file mode 100644 index 000000000..80c3ccf97 --- /dev/null +++ b/next-ui/src/stores/user.ts @@ -0,0 +1,7 @@ +// Utilities +import {defineStore} from 'pinia' + +export const useUserStore = defineStore('user', { + state: () => ({ + }), +}) diff --git a/next-ui/src/styles/README.md b/next-ui/src/styles/README.md new file mode 100644 index 000000000..ea861794d --- /dev/null +++ b/next-ui/src/styles/README.md @@ -0,0 +1,3 @@ +# Styles + +This directory is for configuring the styles of the application. diff --git a/next-ui/src/styles/global.scss b/next-ui/src/styles/global.scss new file mode 100644 index 000000000..813ad83c4 --- /dev/null +++ b/next-ui/src/styles/global.scss @@ -0,0 +1,16 @@ +html { + overflow-y: auto !important; +} + +.link-none { + text-decoration: none; +} + +.link-underline { + text-decoration: none; + color: var(--v-anchor-base) +} + +.link-underline:hover { + text-decoration: underline; +} diff --git a/next-ui/src/styles/settings.scss b/next-ui/src/styles/settings.scss new file mode 100644 index 000000000..d4e450bc5 --- /dev/null +++ b/next-ui/src/styles/settings.scss @@ -0,0 +1,11 @@ +/** + * src/styles/settings.scss + * + * Configures SASS variables and Vuetify overwrites + */ + +// https://vuetifyjs.com/features/sass-variables/` +// @use 'vuetify/settings' with ( +// $reset: true +// ); + diff --git a/next-ui/src/typed-router.d.ts b/next-ui/src/typed-router.d.ts new file mode 100644 index 000000000..867a6abe7 --- /dev/null +++ b/next-ui/src/typed-router.d.ts @@ -0,0 +1,43 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-router. ‼️ DO NOT MODIFY THIS FILE ‼️ +// It's recommended to commit this file. +// Make sure to add this file to your tsconfig.json file as an "includes" or "files" entry. + +declare module 'vue-router/auto-routes' { + import type { + RouteRecordInfo, + ParamValue, + ParamValueOneOrMore, + ParamValueZeroOrMore, + ParamValueZeroOrOne, + } from 'vue-router' + + /** + * Route name map generated by unplugin-vue-router + */ + export interface RouteNamedMap { + '/': RouteRecordInfo<'/', '/', Record, Record>, + '/account/activity': RouteRecordInfo<'/account/activity', '/account/activity', Record, Record>, + '/account/api-keys': RouteRecordInfo<'/account/api-keys', '/account/api-keys', Record, Record>, + '/account/details': RouteRecordInfo<'/account/details', '/account/details', Record, Record>, + '/account/ui': RouteRecordInfo<'/account/ui', '/account/ui', Record, Record>, + '/history': RouteRecordInfo<'/history', '/history', Record, Record>, + '/import/books': RouteRecordInfo<'/import/books', '/import/books', Record, Record>, + '/import/readlist': RouteRecordInfo<'/import/readlist', '/import/readlist', Record, Record>, + '/login': RouteRecordInfo<'/login', '/login', Record, Record>, + '/media/analysis': RouteRecordInfo<'/media/analysis', '/media/analysis', Record, Record>, + '/media/duplicate-files': RouteRecordInfo<'/media/duplicate-files', '/media/duplicate-files', Record, Record>, + '/media/duplicate-pages/known': RouteRecordInfo<'/media/duplicate-pages/known', '/media/duplicate-pages/known', Record, Record>, + '/media/duplicate-pages/unknown': RouteRecordInfo<'/media/duplicate-pages/unknown', '/media/duplicate-pages/unknown', Record, Record>, + '/media/missing-posters': RouteRecordInfo<'/media/missing-posters', '/media/missing-posters', Record, Record>, + '/server/announcements': RouteRecordInfo<'/server/announcements', '/server/announcements', Record, Record>, + '/server/metrics': RouteRecordInfo<'/server/metrics', '/server/metrics', Record, Record>, + '/server/settings': RouteRecordInfo<'/server/settings', '/server/settings', Record, Record>, + '/server/ui': RouteRecordInfo<'/server/ui', '/server/ui', Record, Record>, + '/server/updates': RouteRecordInfo<'/server/updates', '/server/updates', Record, Record>, + '/server/users': RouteRecordInfo<'/server/users', '/server/users', Record, Record>, + '/startup': RouteRecordInfo<'/startup', '/startup', Record, Record>, + } +} diff --git a/next-ui/src/types/Actuator.ts b/next-ui/src/types/Actuator.ts new file mode 100644 index 000000000..ee21ae6f9 --- /dev/null +++ b/next-ui/src/types/Actuator.ts @@ -0,0 +1,22 @@ +export interface ActuatorInfo { + git: ActuatorGit, + build: ActuatorBuild +} + +export interface ActuatorGit { + commit: ActuatorGitCommit, + branch: string +} + +export interface ActuatorGitCommit { + time: Date, + id: string +} + +export interface ActuatorBuild { + version: string, + artifact: string, + name: string, + group: string, + time: Date +} diff --git a/next-ui/src/types/RouterMeta.d.ts b/next-ui/src/types/RouterMeta.d.ts new file mode 100644 index 000000000..46f18c897 --- /dev/null +++ b/next-ui/src/types/RouterMeta.d.ts @@ -0,0 +1,15 @@ +// This can be directly added to any of your `.ts` files like `router.ts` +// It can also be added to a `.d.ts` file. Make sure it's included in +// project's tsconfig.json "files" +import 'vue-router' +import type {UserRoles} from '@/types/UserRoles.ts' + +// To ensure it is treated as a module, add at least one `export` statement +export {} + +declare module 'vue-router' { + interface RouteMeta { + noAuth?: boolean + requiresRole?: UserRoles + } +} diff --git a/next-ui/src/types/UserRoles.ts b/next-ui/src/types/UserRoles.ts new file mode 100644 index 000000000..8470b1805 --- /dev/null +++ b/next-ui/src/types/UserRoles.ts @@ -0,0 +1,7 @@ +export enum UserRoles { + ADMIN = 'ADMIN', + FILE_DOWNLOAD = 'FILE_DOWNLOAD', + PAGE_STREAMING = 'PAGE_STREAMING', + KOBO_SYNC = 'KOBO_SYNC', + KOREADER_SYNC = 'KOREADER_SYNC' +} diff --git a/next-ui/tsconfig.app.json b/next-ui/tsconfig.app.json new file mode 100644 index 000000000..a8db203e0 --- /dev/null +++ b/next-ui/tsconfig.app.json @@ -0,0 +1,18 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "module": "ESNext", + "moduleResolution": "bundler", + "noUncheckedIndexedAccess": true, // openapi-ts + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + "types": ["vite-plugin-vue-layouts-next/client"] + } +} diff --git a/next-ui/tsconfig.json b/next-ui/tsconfig.json new file mode 100644 index 000000000..66b5e5703 --- /dev/null +++ b/next-ui/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/next-ui/tsconfig.node.json b/next-ui/tsconfig.node.json new file mode 100644 index 000000000..ba9a7ac38 --- /dev/null +++ b/next-ui/tsconfig.node.json @@ -0,0 +1,18 @@ +{ + "extends": "@tsconfig/node22/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "module": "ESNext", + "moduleResolution": "Bundler", + "types": ["node"] + } +} diff --git a/next-ui/vite.config.mts b/next-ui/vite.config.mts new file mode 100644 index 000000000..aa7b1ea8a --- /dev/null +++ b/next-ui/vite.config.mts @@ -0,0 +1,84 @@ +// Plugins +import AutoImport from 'unplugin-auto-import/vite' +import Components from 'unplugin-vue-components/vite' +import ViteFonts from "unplugin-fonts/vite" +import Layouts from 'vite-plugin-vue-layouts-next' +import Vue from '@vitejs/plugin-vue' +import VueRouter from 'unplugin-vue-router/vite' +import Vuetify, { transformAssetUrls } from 'vite-plugin-vuetify' + +// Utilities +import { defineConfig } from 'vite' +import { fileURLToPath, URL } from 'node:url' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + VueRouter({ + dts: 'src/typed-router.d.ts', + }), + Layouts(), + AutoImport({ + imports: [ + 'vue', + { + 'vue-router/auto': ['useRoute', 'useRouter'], + } + ], + dts: 'src/auto-imports.d.ts', + eslintrc: { + enabled: true, + }, + vueTemplate: true, + }), + Components({ + dts: 'src/components.d.ts', + }), + Vue({ + template: { transformAssetUrls }, + }), + // https://github.com/vuetifyjs/vuetify-loader/tree/master/packages/vite-plugin#readme + Vuetify({ + autoImport: true, + styles: { + configFile: 'src/styles/settings.scss', + }, + }), + ViteFonts({ + fontsource: { + families: [ + { + name: "Roboto", + weights: [100, 300, 400, 500, 700, 900], + styles: ["normal", "italic"], + }, + ], + }, + }), + ], + define: { 'process.env': {} }, + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + extensions: [ + '.js', + '.json', + '.jsx', + '.mjs', + '.ts', + '.tsx', + '.vue', + ], + }, + server: { + port: 3000, + }, + css: { + preprocessorOptions: { + sass: { + api: 'modern-compiler', + }, + }, + }, +})