diff --git a/app/package.json b/app/package.json index 90a0ed4..b89e14a 100644 --- a/app/package.json +++ b/app/package.json @@ -18,10 +18,13 @@ "@tailwindcss/vite": "^4.2.4", "astro": "^6.2.1", "lucide-solid": "^1.14.0", + "openapi-typescript-fetch": "^2.2.1", "tailwindcss": "^4.2.4", "vue": "^3.5.33" }, "devDependencies": { - "daisyui": "^5.5.19" + "daisyui": "^5.5.19", + "openapi-typescript": "^7.13.0", + "typescript": "^6.0.3" } } \ No newline at end of file diff --git a/app/pnpm-lock.yaml b/app/pnpm-lock.yaml index f637b60..24a52c8 100644 --- a/app/pnpm-lock.yaml +++ b/app/pnpm-lock.yaml @@ -10,32 +10,41 @@ importers: dependencies: '@astrojs/vue': specifier: ^6.0.1 - version: 6.0.1(astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2))(jiti@2.6.1)(lightningcss@1.32.0)(vue@3.5.33) + version: 6.0.1(astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@6.0.3))(jiti@2.6.1)(lightningcss@1.32.0)(vue@3.5.33(typescript@6.0.3)) '@lucide/astro': specifier: ^1.14.0 - version: 1.14.0(astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)) + version: 1.14.0(astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@6.0.3)) '@lucide/vue': specifier: ^1.14.0 - version: 1.14.0(vue@3.5.33) + version: 1.14.0(vue@3.5.33(typescript@6.0.3)) '@tailwindcss/vite': specifier: ^4.2.4 version: 4.2.4(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0)) astro: specifier: ^6.2.1 - version: 6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2) + version: 6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@6.0.3) lucide-solid: specifier: ^1.14.0 version: 1.14.0(solid-js@1.9.12) + openapi-typescript-fetch: + specifier: ^2.2.1 + version: 2.2.1 tailwindcss: specifier: ^4.2.4 version: 4.2.4 vue: specifier: ^3.5.33 - version: 3.5.33 + version: 3.5.33(typescript@6.0.3) devDependencies: daisyui: specifier: ^5.5.19 version: 5.5.19 + openapi-typescript: + specifier: ^7.13.0 + version: 7.13.0(typescript@6.0.3) + typescript: + specifier: ^6.0.3 + version: 6.0.3 packages: @@ -543,6 +552,16 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} + + '@redocly/config@0.22.0': + resolution: {integrity: sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==} + + '@redocly/openapi-core@1.34.14': + resolution: {integrity: sha512-y+xFx+Zz54Xhr8jUdnLENYnt7Y7GEDL6Q03ga7rTtX8DVwefX9H+hQEPgJp1nda7vdH+wJ9/HBVvyfBuW9x6rA==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + '@rolldown/pluginutils@1.0.0-rc.13': resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==} @@ -914,6 +933,14 @@ packages: '@vue/shared@3.5.33': resolution: {integrity: sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + ansis@4.2.0: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} @@ -944,6 +971,9 @@ packages: bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + baseline-browser-mapping@2.10.24: resolution: {integrity: sha512-I2NkZOOrj2XuguvWCK6OVh9GavsNjZjK908Rq3mIBK25+GD8vPX5w2WdxVqnQ7xx3SrZJiCiZFu+/Oz50oSYSA==} engines: {node: '>=6.0.0'} @@ -955,6 +985,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + brace-expansion@2.1.0: + resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} + browserslist@4.28.2: resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -970,6 +1003,9 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -991,6 +1027,9 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} @@ -1155,6 +1194,9 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-string-truncated-width@3.0.3: resolution: {integrity: sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==} @@ -1244,6 +1286,14 @@ packages: http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + iron-webcrypto@1.2.1: resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==} @@ -1274,6 +1324,10 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true + js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1286,6 +1340,9 @@ packages: engines: {node: '>=6'} hasBin: true + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -1517,6 +1574,10 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} + engines: {node: '>=10'} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -1571,6 +1632,16 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} + openapi-typescript-fetch@2.2.1: + resolution: {integrity: sha512-aBp1cR5FTNxp4HA8bb2ST53aIqEiJgoOMyXiyzKi6YF7vogW8KkyyUQ1FeDz8D05uspxFrKvFbkVU2YiiKkULA==} + engines: {node: '>= 12.0.0', npm: '>= 7.0.0'} + + openapi-typescript@7.13.0: + resolution: {integrity: sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==} + hasBin: true + peerDependencies: + typescript: ^5.x + p-limit@7.3.0: resolution: {integrity: sha512-7cIXg/Z0M5WZRblrsOla88S4wAK+zOQQWeBYfV3qJuJXMr+LnbYjaadrFaS0JILfEDPVqHyKnZ1Z/1d6J9VVUw==} engines: {node: '>=20'} @@ -1586,6 +1657,10 @@ packages: package-manager-detector@1.6.0: resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==} + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + parse-latin@7.0.0: resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} @@ -1612,6 +1687,10 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + postcss@8.5.12: resolution: {integrity: sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==} engines: {node: ^10 || ^12 || >=14} @@ -1667,6 +1746,10 @@ packages: remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} @@ -1743,6 +1826,10 @@ packages: stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + supports-color@10.2.2: + resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} + engines: {node: '>=18'} + svgo@4.0.1: resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==} engines: {node: '>=16'} @@ -1793,6 +1880,15 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} + engines: {node: '>=14.17'} + hasBin: true + ufo@1.6.4: resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} @@ -1907,6 +2003,9 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -2020,6 +2119,13 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + yargs-parser@22.0.0: resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} @@ -2081,15 +2187,15 @@ snapshots: is-wsl: 3.1.1 which-pm-runs: 1.1.0 - '@astrojs/vue@6.0.1(astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2))(jiti@2.6.1)(lightningcss@1.32.0)(vue@3.5.33)': + '@astrojs/vue@6.0.1(astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@6.0.3))(jiti@2.6.1)(lightningcss@1.32.0)(vue@3.5.33(typescript@6.0.3))': dependencies: - '@vitejs/plugin-vue': 6.0.6(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33) - '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33) + '@vitejs/plugin-vue': 6.0.6(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33(typescript@6.0.3)) + '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33(typescript@6.0.3)) '@vue/compiler-sfc': 3.5.33 - astro: 6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2) + astro: 6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@6.0.3) vite: 7.3.2(jiti@2.6.1)(lightningcss@1.32.0) - vite-plugin-vue-devtools: 8.1.1(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33) - vue: 3.5.33 + vite-plugin-vue-devtools: 8.1.1(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) transitivePeerDependencies: - '@nuxt/kit' - '@types/node' @@ -2126,7 +2232,7 @@ snapshots: '@babel/types': 7.29.0 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -2287,7 +2393,7 @@ snapshots: '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -2511,18 +2617,41 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@lucide/astro@1.14.0(astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2))': + '@lucide/astro@1.14.0(astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@6.0.3))': dependencies: - astro: 6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2) + astro: 6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@6.0.3) - '@lucide/vue@1.14.0(vue@3.5.33)': + '@lucide/vue@1.14.0(vue@3.5.33(typescript@6.0.3))': dependencies: - vue: 3.5.33 + vue: 3.5.33(typescript@6.0.3) '@oslojs/encoding@1.1.0': {} '@polka/url@1.0.0-next.29': {} + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/config@0.22.0': {} + + '@redocly/openapi-core@1.34.14(supports-color@10.2.2)': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.22.0 + colorette: 1.4.0 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + js-levenshtein: 1.1.6 + js-yaml: 4.1.1 + minimatch: 5.1.9 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - supports-color + '@rolldown/pluginutils@1.0.0-rc.13': {} '@rolldown/pluginutils@1.0.0-rc.18': {} @@ -2742,7 +2871,7 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33)': + '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33(typescript@6.0.3))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) @@ -2750,15 +2879,15 @@ snapshots: '@rolldown/pluginutils': 1.0.0-rc.18 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0) vite: 7.3.2(jiti@2.6.1)(lightningcss@1.32.0) - vue: 3.5.33 + vue: 3.5.33(typescript@6.0.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.6(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33)': + '@vitejs/plugin-vue@6.0.6(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33(typescript@6.0.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.13 vite: 7.3.2(jiti@2.6.1)(lightningcss@1.32.0) - vue: 3.5.33 + vue: 3.5.33(typescript@6.0.3) '@vue/babel-helper-vue-transform-on@1.5.0': {} @@ -2848,11 +2977,11 @@ snapshots: '@vue/compiler-dom': 3.5.33 '@vue/shared': 3.5.33 - '@vue/devtools-core@8.1.1(vue@3.5.33)': + '@vue/devtools-core@8.1.1(vue@3.5.33(typescript@6.0.3))': dependencies: '@vue/devtools-kit': 8.1.1 '@vue/devtools-shared': 8.1.1 - vue: 3.5.33 + vue: 3.5.33(typescript@6.0.3) '@vue/devtools-kit@8.1.1': dependencies: @@ -2879,14 +3008,18 @@ snapshots: '@vue/shared': 3.5.33 csstype: 3.2.3 - '@vue/server-renderer@3.5.33(vue@3.5.33)': + '@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3))': dependencies: '@vue/compiler-ssr': 3.5.33 '@vue/shared': 3.5.33 - vue: 3.5.33 + vue: 3.5.33(typescript@6.0.3) '@vue/shared@3.5.33': {} + agent-base@7.1.4: {} + + ansi-colors@4.1.3: {} + ansis@4.2.0: {} anymatch@3.1.3: @@ -2900,7 +3033,7 @@ snapshots: array-iterate@2.0.1: {} - astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2): + astro@6.2.1(jiti@2.6.1)(lightningcss@1.32.0)(rollup@4.60.2)(typescript@6.0.3): dependencies: '@astrojs/compiler': 4.0.0 '@astrojs/internal-helpers': 0.9.0 @@ -2945,7 +3078,7 @@ snapshots: tinyclip: 0.1.12 tinyexec: 1.1.2 tinyglobby: 0.2.16 - tsconfck: 3.1.6 + tsconfck: 3.1.6(typescript@6.0.3) ultrahtml: 1.6.0 unifont: 0.7.4 unist-util-visit: 5.1.0 @@ -2997,12 +3130,18 @@ snapshots: bail@2.0.2: {} + balanced-match@1.0.2: {} + baseline-browser-mapping@2.10.24: {} birpc@2.9.0: {} boolbase@1.0.0: {} + brace-expansion@2.1.0: + dependencies: + balanced-match: 1.0.2 + browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.24 @@ -3019,6 +3158,8 @@ snapshots: ccount@2.0.1: {} + change-case@5.4.4: {} + character-entities-html4@2.1.0: {} character-entities-legacy@3.0.0: {} @@ -3033,6 +3174,8 @@ snapshots: clsx@2.1.1: {} + colorette@1.4.0: {} + comma-separated-tokens@2.0.3: {} commander@11.1.0: {} @@ -3077,9 +3220,11 @@ snapshots: daisyui@5.5.19: {} - debug@4.4.3: + debug@4.4.3(supports-color@10.2.2): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 10.2.2 decode-named-character-reference@1.3.0: dependencies: @@ -3188,6 +3333,8 @@ snapshots: extend@3.0.2: {} + fast-deep-equal@3.1.3: {} + fast-string-truncated-width@3.0.3: {} fast-string-width@3.0.2: @@ -3328,6 +3475,15 @@ snapshots: http-cache-semantics@4.2.0: {} + https-proxy-agent@7.0.6(supports-color@10.2.2): + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + + index-to-position@1.2.0: {} + iron-webcrypto@1.2.1: {} is-docker@3.0.0: {} @@ -3346,6 +3502,8 @@ snapshots: jiti@2.6.1: {} + js-levenshtein@1.1.6: {} + js-tokens@4.0.0: {} js-yaml@4.1.1: @@ -3354,6 +3512,8 @@ snapshots: jsesc@3.1.0: {} + json-schema-traverse@1.0.0: {} + json5@2.2.3: {} kolorist@1.8.0: {} @@ -3727,7 +3887,7 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.13 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) decode-named-character-reference: 1.3.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -3746,6 +3906,10 @@ snapshots: transitivePeerDependencies: - supports-color + minimatch@5.1.9: + dependencies: + brace-expansion: 2.1.0 + mrmime@2.0.1: {} ms@2.1.3: {} @@ -3795,6 +3959,18 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 + openapi-typescript-fetch@2.2.1: {} + + openapi-typescript@7.13.0(typescript@6.0.3): + dependencies: + '@redocly/openapi-core': 1.34.14(supports-color@10.2.2) + ansi-colors: 4.1.3 + change-case: 5.4.4 + parse-json: 8.3.0 + supports-color: 10.2.2 + typescript: 6.0.3 + yargs-parser: 21.1.1 + p-limit@7.3.0: dependencies: yocto-queue: 1.2.2 @@ -3808,6 +3984,12 @@ snapshots: package-manager-detector@1.6.0: {} + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.0 + index-to-position: 1.2.0 + type-fest: 4.41.0 + parse-latin@7.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -3833,6 +4015,8 @@ snapshots: picomatch@4.0.4: {} + pluralize@8.0.0: {} + postcss@8.5.12: dependencies: nanoid: 3.3.11 @@ -3923,6 +4107,8 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 + require-from-string@2.0.2: {} + retext-latin@4.0.0: dependencies: '@types/nlcst': 2.0.3 @@ -4061,6 +4247,8 @@ snapshots: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + supports-color@10.2.2: {} + svgo@4.0.1: dependencies: commander: 11.1.0 @@ -4092,11 +4280,17 @@ snapshots: trough@2.2.0: {} - tsconfck@3.1.6: {} + tsconfck@3.1.6(typescript@6.0.3): + optionalDependencies: + typescript: 6.0.3 tslib@2.8.1: optional: true + type-fest@4.41.0: {} + + typescript@6.0.3: {} + ufo@1.6.4: {} ultrahtml@1.6.0: {} @@ -4183,6 +4377,8 @@ snapshots: escalade: 3.2.0 picocolors: 1.1.1 + uri-js-replace@1.0.1: {} + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -4211,7 +4407,7 @@ snapshots: vite-plugin-inspect@11.3.3(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0)): dependencies: ansis: 4.2.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@10.2.2) error-stack-parser-es: 1.0.5 ohash: 2.0.11 open: 10.2.0 @@ -4223,9 +4419,9 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-devtools@8.1.1(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33): + vite-plugin-vue-devtools@8.1.1(vite@7.3.2(jiti@2.6.1)(lightningcss@1.32.0))(vue@3.5.33(typescript@6.0.3)): dependencies: - '@vue/devtools-core': 8.1.1(vue@3.5.33) + '@vue/devtools-core': 8.1.1(vue@3.5.33(typescript@6.0.3)) '@vue/devtools-kit': 8.1.1 '@vue/devtools-shared': 8.1.1 sirv: 3.0.2 @@ -4269,13 +4465,15 @@ snapshots: optionalDependencies: vite: 7.3.2(jiti@2.6.1)(lightningcss@1.32.0) - vue@3.5.33: + vue@3.5.33(typescript@6.0.3): dependencies: '@vue/compiler-dom': 3.5.33 '@vue/compiler-sfc': 3.5.33 '@vue/runtime-dom': 3.5.33 - '@vue/server-renderer': 3.5.33(vue@3.5.33) + '@vue/server-renderer': 3.5.33(vue@3.5.33(typescript@6.0.3)) '@vue/shared': 3.5.33 + optionalDependencies: + typescript: 6.0.3 web-namespaces@2.0.1: {} @@ -4289,6 +4487,10 @@ snapshots: yallist@3.1.1: {} + yaml-ast-parser@0.0.43: {} + + yargs-parser@21.1.1: {} + yargs-parser@22.0.0: {} yocto-queue@1.2.2: {} diff --git a/app/src/api/README.md b/app/src/api/README.md new file mode 100644 index 0000000..7a882e1 --- /dev/null +++ b/app/src/api/README.md @@ -0,0 +1,3 @@ +# Update schema + +`pnpm dlx openapi-typescript http://localhost:8000/openapi.json -o ./schema.d.ts` diff --git a/app/src/api/schema.ts b/app/src/api/schema.ts new file mode 100644 index 0000000..a69f8d7 --- /dev/null +++ b/app/src/api/schema.ts @@ -0,0 +1,275 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/api/user-info/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Get-User-Info */ + get: operations["get_user_info_api_user_info__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/login": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Login Init */ + get: operations["login_init_auth_login_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/auth/login-callback": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Login Callback */ + get: operations["login_callback_auth_login_callback_get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/api/locks/": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** List Locks */ + get: operations["list_locks_api_locks__get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + /** HTTPValidationError */ + HTTPValidationError: { + /** Detail */ + detail?: components["schemas"]["ValidationError"][]; + }; + /** + * HttpProblemDetail + * @description API Error modeled after [RFC9475](https://www.rfc-editor.org/rfc/rfc9457.html). + */ + HttpProblemDetail: { + /** Status */ + status: number; + type: components["schemas"]["HttpProblemType"]; + /** Title */ + title: string; + /** Detail */ + detail: string; + /** Instance */ + instance: string | null; + }; + /** + * HttpProblemType + * @description Statically known HTTP problem types using the [type URI scheme](https://datatracker.ietf.org/doc/rfc4151/) + * @enum {string} + */ + HttpProblemType: "type:noc@hamburg.ccc.de,2026:UNAUTHORIZED" | "type:noc@hamburg.ccc.de,2026:DOOR_NOT_FOUND"; + /** Lock */ + Lock: { + /** Name */ + name: string; + status: components["schemas"]["LockStatus"]; + }; + /** LockStatus */ + LockStatus: { + /** Is Unreachable */ + is_unreachable: boolean; + /** Is Low Battery */ + is_low_battery: boolean; + /** Is Error Jammed */ + is_error_jammed: boolean; + /** + * Lock Target Level + * @enum {string} + */ + lock_target_level: "locked" | "unlocked" | "open"; + /** + * Lock State + * @enum {string} + */ + lock_state: "unknown" | "locked" | "unlocked"; + /** + * Activity State + * @enum {string} + */ + activity_state: "unknown" | "locking" | "unlocking" | "stable"; + }; + /** UserInfo */ + UserInfo: { + /** Username */ + username: string; + }; + /** UserStatus */ + UserStatus: { + /** Is Logged In */ + is_logged_in: boolean; + /** Guaranteed Session Until */ + guaranteed_session_until: string | null; + user_info: components["schemas"]["UserInfo"] | null; + }; + /** ValidationError */ + ValidationError: { + /** Location */ + loc: (string | number)[]; + /** Message */ + msg: string; + /** Error Type */ + type: string; + /** Input */ + input?: unknown; + /** Context */ + ctx?: Record; + }; + }; + responses: never; + parameters: never; + requestBodies: never; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + get_user_info_api_user_info__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["UserStatus"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HttpProblemDetail"]; + }; + }; + }; + }; + login_init_auth_login_get: { + parameters: { + query?: { + next?: string | null; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 302: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Validation Error */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HTTPValidationError"]; + }; + }; + }; + }; + login_callback_auth_login_callback_get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 302: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + list_locks_api_locks__get: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful Response */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["Lock"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["HttpProblemDetail"]; + }; + }; + }; + }; +}