beatufitull front end for ozone modration ,, wit catpucoin and ebergarden !
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

init

cool habdle d3a4c986

+10117
+31
.gitignore
··· 1 + node_modules 2 + 3 + # Output 4 + .output 5 + .vercel 6 + .netlify 7 + .wrangler 8 + /.svelte-kit 9 + /build 10 + 11 + # OS 12 + .DS_Store 13 + Thumbs.db 14 + 15 + # Env 16 + .env 17 + .env.* 18 + !.env.example 19 + !.env.test 20 + .direnv 21 + 22 + # Development Database 23 + .postgres 24 + .postgres-socket 25 + 26 + # nix 27 + result 28 + 29 + # Vite 30 + vite.config.js.timestamp-* 31 + vite.config.ts.timestamp-*
+1
.npmrc
··· 1 + engine-strict=true
+9
.prettierignore
··· 1 + # Package Managers 2 + package-lock.json 3 + pnpm-lock.yaml 4 + yarn.lock 5 + bun.lock 6 + bun.lockb 7 + 8 + # Miscellaneous 9 + /static/
+16
.prettierrc
··· 1 + { 2 + "useTabs": true, 3 + "singleQuote": true, 4 + "trailingComma": "none", 5 + "printWidth": 100, 6 + "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], 7 + "overrides": [ 8 + { 9 + "files": "*.svelte", 10 + "options": { 11 + "parser": "svelte" 12 + } 13 + } 14 + ], 15 + "tailwindStylesheet": "./src/routes/layout.css" 16 + }
+6
.vscode/extensions.json
··· 1 + { 2 + "recommendations": [ 3 + "svelte.svelte-vscode", 4 + "bradlc.vscode-tailwindcss" 5 + ] 6 + }
+6
.vscode/settings.json
··· 1 + { 2 + "files.associations": { 3 + "*.css": "tailwindcss" 4 + }, 5 + "npm.packageManager": "pnpm" 6 + }
+15
README.md
··· 1 + # meowzone 2 + ozone , but made for catz 3 + 4 + woaw sho coil !! but how do i host it ???? 5 + 6 + first . nix haters dni !!! host it urself if u hate repoducablity 7 + 8 + ok yeh so just use deh nix flake ,, duh ! 9 + 10 + ### thanks u to 11 + 12 + shabel rodes four nix 13 + blesky team for ozone back end 14 + my catss 15 + captucin
+18
docker-compose.yaml
··· 1 + version: "3.9" 2 + 3 + services: 4 + postgres: 5 + image: postgres:16 6 + container_name: postgres 7 + restart: unless-stopped 8 + environment: 9 + POSTGRES_USER: app 10 + POSTGRES_PASSWORD: secret 11 + POSTGRES_DB: appdb 12 + ports: 13 + - "5432:5432" 14 + volumes: 15 + - pgdata:/var/lib/postgresql/data 16 + 17 + volumes: 18 + pgdata:
+39
eslint.config.js
··· 1 + import prettier from 'eslint-config-prettier'; 2 + import path from 'node:path'; 3 + import { includeIgnoreFile } from '@eslint/compat'; 4 + import js from '@eslint/js'; 5 + import svelte from 'eslint-plugin-svelte'; 6 + import { defineConfig } from 'eslint/config'; 7 + import globals from 'globals'; 8 + import ts from 'typescript-eslint'; 9 + import svelteConfig from './svelte.config.js'; 10 + 11 + const gitignorePath = path.resolve(import.meta.dirname, '.gitignore'); 12 + 13 + export default defineConfig( 14 + includeIgnoreFile(gitignorePath), 15 + js.configs.recommended, 16 + ...ts.configs.recommended, 17 + ...svelte.configs.recommended, 18 + prettier, 19 + ...svelte.configs.prettier, 20 + { 21 + languageOptions: { globals: { ...globals.browser, ...globals.node } }, 22 + rules: { 23 + // typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects. 24 + // see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors 25 + 'no-undef': 'off' 26 + } 27 + }, 28 + { 29 + files: ['**/*.svelte', '**/*.svelte.ts', '**/*.svelte.js'], 30 + languageOptions: { 31 + parserOptions: { 32 + projectService: true, 33 + extraFileExtensions: ['.svelte'], 34 + parser: ts.parser, 35 + svelteConfig 36 + } 37 + } 38 + } 39 + );
+27
flake.lock
··· 1 + { 2 + "nodes": { 3 + "nixpkgs": { 4 + "locked": { 5 + "lastModified": 1771207753, 6 + "narHash": "sha256-b9uG8yN50DRQ6A7JdZBfzq718ryYrlmGgqkRm9OOwCE=", 7 + "owner": "nixos", 8 + "repo": "nixpkgs", 9 + "rev": "d1c15b7d5806069da59e819999d70e1cec0760bf", 10 + "type": "github" 11 + }, 12 + "original": { 13 + "owner": "nixos", 14 + "ref": "nixpkgs-unstable", 15 + "repo": "nixpkgs", 16 + "type": "github" 17 + } 18 + }, 19 + "root": { 20 + "inputs": { 21 + "nixpkgs": "nixpkgs" 22 + } 23 + } 24 + }, 25 + "root": "root", 26 + "version": 7 27 + }
+31
flake.nix
··· 1 + { 2 + description = "coil ozone frontend , made for cats"; 3 + 4 + inputs = { 5 + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; 6 + }; 7 + 8 + outputs = 9 + { self, nixpkgs }: 10 + let 11 + forAllSystems = 12 + function: 13 + nixpkgs.lib.genAttrs nixpkgs.lib.systems.flakeExposed ( 14 + system: function nixpkgs.legacyPackages.${system} 15 + ); 16 + in 17 + { 18 + packages = forAllSystems (pkgs: { 19 + meowzone = pkgs.callPackage ./nix/default.nix { }; 20 + default = self.packages.${pkgs.stdenv.hostPlatform.system}.meowzone; 21 + }); 22 + 23 + devShells = forAllSystems (pkgs: { 24 + default = pkgs.callPackage ./nix/shell.nix { }; 25 + }); 26 + 27 + homeManagerModules.default = ./nix/hm-module.nix; 28 + 29 + overlays.default = final: _: { washing-machien = final.callPackage ./nix/default.nix { }; }; 30 + }; 31 + }
+44
nix/default.nix
··· 1 + { 2 + fetchPnpmDeps, 3 + nodejs, 4 + pnpm, 5 + pnpmConfigHook, 6 + stdenv, 7 + lib 8 + }: 9 + let 10 + pkg = builtins.fromJSON (builtins.readFile ../package.json); 11 + in 12 + stdenv.mkDerivation (finalAttrs: { 13 + pname = "meowzone"; 14 + inherit (pkg) version; 15 + 16 + src = ../.; 17 + 18 + nativeBuildInputs = [ 19 + nodejs 20 + pnpmConfigHook 21 + pnpm 22 + ]; 23 + 24 + pnpmDeps = fetchPnpmDeps { 25 + inherit (finalAttrs) pname version src; 26 + fetcherVersion = 3; 27 + hash = "sha256-YCrA8jRi4tsQoiskuPjb2A5qwcTzNoplvgLtLN0NlqM="; 28 + }; 29 + 30 + buildPhase = '' 31 + pnpm run build 32 + ''; 33 + 34 + installPhase = '' 35 + mkdir -p $out 36 + cp -r build/* $out/ 37 + ''; 38 + 39 + meta = { 40 + description = "fontend for ozone , made for cats"; 41 + license = lib.licenses.mit; 42 + mainProgram = "build"; 43 + }; 44 + })
+80
nix/module.nix
··· 1 + { config, lib, pkgs, ... }: 2 + 3 + with lib; 4 + 5 + let 6 + cfg = config.services.meowzone; 7 + in 8 + { 9 + options.services.meowzone = { 10 + enable = mkEnableOption "meowzone. frontend for ozone"; 11 + 12 + port = mkOption { 13 + type = types.port; 14 + default = 3000; 15 + description = "Port to run the frontend on"; 16 + }; 17 + 18 + host = mkOption { 19 + type = types.str; 20 + default = "127.0.0.1"; 21 + description = "Host to bind the frontend to"; 22 + }; 23 + 24 + pdsUrl = mkOption { 25 + type = types.str; 26 + description = "URL of the labeler's PDS"; 27 + example = "https://pds.example.com"; 28 + }; 29 + 30 + labelerUrl = mkOption { 31 + type = types.str; 32 + description = "Public URL of the labeler's backend"; 33 + example = "https://ozone.example.com"; 34 + }; 35 + 36 + package = mkOption { 37 + type = types.package; 38 + default = pkgs.callPackage ./default.nix { }; 39 + description = "Ozone package to use"; 40 + }; 41 + }; 42 + 43 + config = mkIf cfg.enable { 44 + systemd.services.meowzone = { 45 + description = "meowzone frontend service"; 46 + after = [ "network.target" ]; 47 + wantedBy = [ "multi-user.target" ]; 48 + 49 + environment = { 50 + VITE_LABELER_DID = cfg.serverDid; 51 + VITE_LABELER_URL = cfg.labelerUrl; 52 + VITE_PDS_URL = cfg.pdsUrl; 53 + PORT = toString cfg.port; 54 + HOST = cfg.host; 55 + NODE_ENV = "production"; 56 + TZ = "Etc/UTC"; 57 + }; 58 + 59 + serviceConfig = { 60 + Type = "simple"; 61 + ExecStart = "${pkgs.nodejs}/bin/node --env-file=.env ${cfg.package}/build"; 62 + Restart = "on-failure"; 63 + RestartSec = 5; 64 + User = "meowzone"; 65 + Group = "meowzone"; 66 + StandardOutput = "journal"; 67 + StandardError = "journal"; 68 + }; 69 + }; 70 + 71 + users = { 72 + users.meowzone = mkIf (cfg.enable) { 73 + isSystemUser = true; 74 + group = "meowzone"; 75 + description = "meowzone service user"; 76 + }; 77 + groups.meowzone = mkIf (cfg.enable) { }; 78 + }; 79 + }; 80 + }
+54
package.json
··· 1 + { 2 + "name": "mewderate", 3 + "private": true, 4 + "version": "0.0.1", 5 + "type": "module", 6 + "scripts": { 7 + "dev": "vite dev", 8 + "service": "docker-compose up -d && node service/index.js", 9 + "build": "vite build", 10 + "preview": "vite preview", 11 + "prepare": "svelte-kit sync || echo ''", 12 + "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 13 + "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", 14 + "lint": "prettier --check . && eslint .", 15 + "format": "prettier --write ." 16 + }, 17 + "dependencies": { 18 + "@atcute/did-plc": "^0.3.2", 19 + "@atproto/api": "^0.18.20", 20 + "@atproto/crypto": "^0.4.5", 21 + "@atproto/dev-env": "^0.3.208", 22 + "@atproto/oauth-client-browser": "^0.3.40", 23 + "@atproto/ozone": "^0.1.163", 24 + "@sveltejs/adapter-node": "^5.5.3", 25 + "@tanstack/svelte-query": "^6.0.18", 26 + "dotenv": "^17.2.4", 27 + "lucide-svelte": "^0.563.0", 28 + "pg": "^8.18.0" 29 + }, 30 + "devDependencies": { 31 + "@catppuccin/tailwindcss": "^1.0.0", 32 + "@eslint/compat": "^2.0.1", 33 + "@eslint/js": "^9.39.2", 34 + "@sveltejs/adapter-auto": "^7.0.0", 35 + "@sveltejs/kit": "^2.50.1", 36 + "@sveltejs/vite-plugin-svelte": "^6.2.4", 37 + "@tailwindcss/vite": "^4.1.18", 38 + "@types/node": "^24", 39 + "@types/pg": "^8.16.0", 40 + "eslint": "^9.39.2", 41 + "eslint-config-prettier": "^10.1.8", 42 + "eslint-plugin-svelte": "^3.14.0", 43 + "globals": "^17.1.0", 44 + "prettier": "^3.8.1", 45 + "prettier-plugin-svelte": "^3.4.1", 46 + "prettier-plugin-tailwindcss": "^0.7.2", 47 + "svelte": "^5.48.2", 48 + "svelte-check": "^4.3.5", 49 + "tailwindcss": "^4.1.18", 50 + "typescript": "^5.9.3", 51 + "typescript-eslint": "^8.53.1", 52 + "vite": "^7.3.1" 53 + } 54 + }
+7521
pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + importers: 8 + 9 + .: 10 + dependencies: 11 + '@atcute/did-plc': 12 + specifier: ^0.3.2 13 + version: 0.3.2 14 + '@atproto/api': 15 + specifier: ^0.18.20 16 + version: 0.18.20 17 + '@atproto/crypto': 18 + specifier: ^0.4.5 19 + version: 0.4.5 20 + '@atproto/dev-env': 21 + specifier: ^0.3.208 22 + version: 0.3.208 23 + '@atproto/oauth-client-browser': 24 + specifier: ^0.3.40 25 + version: 0.3.40 26 + '@atproto/ozone': 27 + specifier: ^0.1.163 28 + version: 0.1.163 29 + '@sveltejs/adapter-node': 30 + specifier: ^5.5.3 31 + version: 5.5.3(@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2))) 32 + '@tanstack/svelte-query': 33 + specifier: ^6.0.18 34 + version: 6.0.18(svelte@5.49.2) 35 + dotenv: 36 + specifier: ^17.2.4 37 + version: 17.2.4 38 + lucide-svelte: 39 + specifier: ^0.563.0 40 + version: 0.563.0(svelte@5.49.2) 41 + pg: 42 + specifier: ^8.18.0 43 + version: 8.18.0 44 + devDependencies: 45 + '@catppuccin/tailwindcss': 46 + specifier: ^1.0.0 47 + version: 1.0.0 48 + '@eslint/compat': 49 + specifier: ^2.0.1 50 + version: 2.0.2(eslint@9.39.2(jiti@2.6.1)) 51 + '@eslint/js': 52 + specifier: ^9.39.2 53 + version: 9.39.2 54 + '@sveltejs/adapter-auto': 55 + specifier: ^7.0.0 56 + version: 7.0.0(@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2))) 57 + '@sveltejs/kit': 58 + specifier: ^2.50.1 59 + version: 2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)) 60 + '@sveltejs/vite-plugin-svelte': 61 + specifier: ^6.2.4 62 + version: 6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)) 63 + '@tailwindcss/vite': 64 + specifier: ^4.1.18 65 + version: 4.1.18(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)) 66 + '@types/node': 67 + specifier: ^24 68 + version: 24.10.11 69 + '@types/pg': 70 + specifier: ^8.16.0 71 + version: 8.16.0 72 + eslint: 73 + specifier: ^9.39.2 74 + version: 9.39.2(jiti@2.6.1) 75 + eslint-config-prettier: 76 + specifier: ^10.1.8 77 + version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) 78 + eslint-plugin-svelte: 79 + specifier: ^3.14.0 80 + version: 3.14.0(eslint@9.39.2(jiti@2.6.1))(svelte@5.49.2) 81 + globals: 82 + specifier: ^17.1.0 83 + version: 17.3.0 84 + prettier: 85 + specifier: ^3.8.1 86 + version: 3.8.1 87 + prettier-plugin-svelte: 88 + specifier: ^3.4.1 89 + version: 3.4.1(prettier@3.8.1)(svelte@5.49.2) 90 + prettier-plugin-tailwindcss: 91 + specifier: ^0.7.2 92 + version: 0.7.2(prettier-plugin-svelte@3.4.1(prettier@3.8.1)(svelte@5.49.2))(prettier@3.8.1) 93 + svelte: 94 + specifier: ^5.48.2 95 + version: 5.49.2 96 + svelte-check: 97 + specifier: ^4.3.5 98 + version: 4.3.6(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.9.3) 99 + tailwindcss: 100 + specifier: ^4.1.18 101 + version: 4.1.18 102 + typescript: 103 + specifier: ^5.9.3 104 + version: 5.9.3 105 + typescript-eslint: 106 + specifier: ^8.53.1 107 + version: 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 108 + vite: 109 + specifier: ^7.3.1 110 + version: 7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2) 111 + 112 + packages: 113 + 114 + '@atcute/cbor@2.3.2': 115 + resolution: {integrity: sha512-xP2SORSau/VVI00x2V4BjwIkHr6EQ7l/MXEOPaa4LGYtePFc4gnD4L1yN10dT5NEuUnvGEuCh6arLB7gz1smVQ==} 116 + 117 + '@atcute/cid@2.4.1': 118 + resolution: {integrity: sha512-bwhna69RCv7yetXudtj+2qrMPYvhhIQqvJz6YUpUS98v7OdF3X2dnye9Nig2NDrklZcuyOsu7sQo7GOykJXRLQ==} 119 + 120 + '@atcute/crypto@2.3.0': 121 + resolution: {integrity: sha512-w5pkJKCjbNMQu+F4JRHbR3ROQyhi1wbn+GSC6WDQamcYHkZmEZk1/eoI354bIQOOfkEM6aFLv718iskrkon4GQ==} 122 + 123 + '@atcute/did-plc@0.3.2': 124 + resolution: {integrity: sha512-zOqk5mcZJa+xnfpYFN8aIgRA5uQdTDeiDvQeWWIZKOslFBJTtWWL912FLI8r5JWzIc7SgYEp+SbpXmAB6t26EA==} 125 + 126 + '@atcute/identity@1.1.3': 127 + resolution: {integrity: sha512-oIqPoI8TwWeQxvcLmFEZLdN2XdWcaLVtlm8pNk0E72As9HNzzD9pwKPrLr3rmTLRIoULPPFmq9iFNsTeCIU9ng==} 128 + 129 + '@atcute/lexicons@1.2.9': 130 + resolution: {integrity: sha512-/RRHm2Cw9o8Mcsrq0eo8fjS9okKYLGfuFwrQ0YoP/6sdSDsXshaTLJsvLlcUcaDaSJ1YFOuHIo3zr2Om2F/16g==} 131 + 132 + '@atcute/multibase@1.1.8': 133 + resolution: {integrity: sha512-pJgtImMZKCjqwRbu+2GzB+4xQjKBXDwdZOzeqe0u97zYKRGftpGYGvYv3+pMe2xXe+msDyu7Nv8iJp+U14otTA==} 134 + 135 + '@atcute/uint8array@1.1.1': 136 + resolution: {integrity: sha512-3LsC8XB8TKe9q/5hOA5sFuzGaIFdJZJNewC5OKa3o/eU6+K7JR6see9Zy2JbQERNVnRl11EzbNov1efgLMAs4g==} 137 + 138 + '@atcute/util-fetch@1.0.5': 139 + resolution: {integrity: sha512-qjHj01BGxjSjIFdPiAjSARnodJIIyKxnCMMEcXMESo9TAyND6XZQqrie5fia+LlYWVXdpsTds8uFQwc9jdKTig==} 140 + 141 + '@atcute/util-text@1.1.1': 142 + resolution: {integrity: sha512-JH0SxzUQJAmbOBTYyhxQbkkI6M33YpjlVLEcbP5GYt43xgFArzV0FJVmEpvIj0kjsmphHB45b6IitdvxPdec9w==} 143 + 144 + '@atproto-labs/did-resolver@0.2.6': 145 + resolution: {integrity: sha512-2K1bC04nI2fmgNcvof+yA28IhGlpWn2JKYlPa7To9JTKI45FINCGkQSGiL2nyXlyzDJJ34fZ1aq6/IRFIOIiqg==} 146 + 147 + '@atproto-labs/fetch-node@0.2.0': 148 + resolution: {integrity: sha512-Krq09nH/aeoiU2s9xdHA0FjTEFWG9B5FFenipv1iRixCcPc7V3DhTNDawxG9gI8Ny0k4dBVS9WTRN/IDzBx86Q==} 149 + engines: {node: '>=18.7.0'} 150 + 151 + '@atproto-labs/fetch@0.2.3': 152 + resolution: {integrity: sha512-NZtbJOCbxKUFRFKMpamT38PUQMY0hX0p7TG5AEYOPhZKZEP7dHZ1K2s1aB8MdVH0qxmqX7nQleNrrvLf09Zfdw==} 153 + 154 + '@atproto-labs/handle-resolver@0.3.6': 155 + resolution: {integrity: sha512-qnSTXvOBNj1EHhp2qTWSX8MS5q3AwYU5LKlt5fBvSbCjgmTr2j0URHCv+ydrwO55KvsojIkTMgeMOh4YuY4fCA==} 156 + 157 + '@atproto-labs/identity-resolver@0.3.6': 158 + resolution: {integrity: sha512-qoWqBDRobln0NR8L8dQjSp79E0chGkBhibEgxQa2f9WD+JbJdjQ0YvwwO5yeQn05pJoJmAwmI2wyJ45zjU7aWg==} 159 + 160 + '@atproto-labs/pipe@0.1.1': 161 + resolution: {integrity: sha512-hdNw2oUs2B6BN1lp+32pF7cp8EMKuIN5Qok2Vvv/aOpG/3tNSJ9YkvfI0k6Zd188LeDDYRUpYpxcoFIcGH/FNg==} 162 + 163 + '@atproto-labs/simple-store-memory@0.1.4': 164 + resolution: {integrity: sha512-3mKY4dP8I7yKPFj9VKpYyCRzGJOi5CEpOLPlRhoJyLmgs3J4RzDrjn323Oakjz2Aj2JzRU/AIvWRAZVhpYNJHw==} 165 + 166 + '@atproto-labs/simple-store-redis@0.0.1': 167 + resolution: {integrity: sha512-hGkfDNVtTqwcRx27k6u25pgwNIHq3xDCRuojkfHf6c1B9R5rKphdZJ91Mn3lCvsyDB/lUqqLuzKuXQWFml/u5g==} 168 + peerDependencies: 169 + ioredis: ^5.3.2 170 + 171 + '@atproto-labs/simple-store@0.3.0': 172 + resolution: {integrity: sha512-nOb6ONKBRJHRlukW1sVawUkBqReLlLx6hT35VS3imaNPwiXDxLnTK7lxw3Lrl9k5yugSBDQAkZAq3MPTEFSUBQ==} 173 + 174 + '@atproto-labs/xrpc-utils@0.0.24': 175 + resolution: {integrity: sha512-wWXd2Ht47UsL/UbDCr3twMFSZrh0xSI56u4O3kz0DTU4G+530mCG71mMVE6eeYcR+j6FEjp7o2Ld6c7wFklYGw==} 176 + 177 + '@atproto/api@0.18.20': 178 + resolution: {integrity: sha512-BZYZkh2VJIFCXEnc/vzKwAwWjAQQTgbNJ8FBxpBK+z+KYh99O0uPCsRYKoCQsRrnkgrhzdU9+g2G+7zanTIGbw==} 179 + 180 + '@atproto/aws@0.2.31': 181 + resolution: {integrity: sha512-jzw0v4KttNqeEZtkIujIOCvWABJl4m8WQuSOlJtYeJhn/xaBC1+CNt7qnvYCzBd+T5nncZU8junHSEbOMdVwiA==} 182 + engines: {node: '>=18.7.0'} 183 + 184 + '@atproto/bsky@0.0.214': 185 + resolution: {integrity: sha512-Fn+o3WcaX57EmcLoUdcViY4wU2UzfbyNlS/qFQu+1clADtL3pthylwTJgwUU73cZE+7MILZPfTzhQTc15snR9A==} 186 + engines: {node: '>=18.7.0'} 187 + 188 + '@atproto/bsync@0.0.23': 189 + resolution: {integrity: sha512-ONbbY1oavc02ItBzXpo7dam0aNZ4ufDdGlgqLjBV5ZQnP35qmPfdq01plf8H9B2rerOLzz5PaxOBber35KffUA==} 190 + engines: {node: '>=18.7.0'} 191 + 192 + '@atproto/common-web@0.4.15': 193 + resolution: {integrity: sha512-A4l9gyqUNez8CjZp/Trypz/D3WIQsNj8dN05WR6+RoBbvwc9JhWjKPrm+WoVYc/F16RPdXHLkE3BEJlGIyYIiA==} 194 + 195 + '@atproto/common-web@0.4.16': 196 + resolution: {integrity: sha512-Ufvaff5JgxUyUyTAG0/3o7ltpy3lnZ1DvLjyAnvAf+hHfiK7OMQg+8byr+orN+KP9MtIQaRTsCgYPX+PxMKUoA==} 197 + 198 + '@atproto/common@0.1.0': 199 + resolution: {integrity: sha512-OB5tWE2R19jwiMIs2IjQieH5KTUuMb98XGCn9h3xuu6NanwjlmbCYMv08fMYwIp3UQ6jcq//84cDT3Bu6fJD+A==} 200 + 201 + '@atproto/common@0.1.1': 202 + resolution: {integrity: sha512-GYwot5wF/z8iYGSPjrLHuratLc0CVgovmwfJss7+BUOB6y2/Vw8+1Vw0n9DDI0gb5vmx3UI8z0uJgC8aa8yuJg==} 203 + 204 + '@atproto/common@0.5.11': 205 + resolution: {integrity: sha512-WRlT4s+wv80WdQuzkQub9D5vTD82O8dH2p91u4b+x3O17q5IQbmA3Lj+1NICINNSy2voqloqAWdqXEkRfdlAPw==} 206 + engines: {node: '>=18.7.0'} 207 + 208 + '@atproto/crypto@0.1.0': 209 + resolution: {integrity: sha512-9xgFEPtsCiJEPt9o3HtJT30IdFTGw5cQRSJVIy5CFhqBA4vDLcdXiRDLCjkzHEVbtNCsHUW6CrlfOgbeLPcmcg==} 210 + 211 + '@atproto/crypto@0.4.5': 212 + resolution: {integrity: sha512-n40aKkMoCatP0u9Yvhrdk6fXyOHFDDbkdm4h4HCyWW+KlKl8iXfD5iV+ECq+w5BM+QH25aIpt3/j6EUNerhLxw==} 213 + engines: {node: '>=18.7.0'} 214 + 215 + '@atproto/dev-env@0.3.208': 216 + resolution: {integrity: sha512-ttx+MIT21iFICW7sZNaFJoCPlxZAqgFy1ztOEn1ebW2MkJzsNHSq2oQC8MHxmpbYEOMPekTXC2iMHW6PYVQJxQ==} 217 + engines: {node: '>=18.7.0'} 218 + hasBin: true 219 + 220 + '@atproto/did@0.3.0': 221 + resolution: {integrity: sha512-raUPzUGegtW/6OxwCmM8bhZvuIMzxG5t9oWsth6Tp91Kb5fTnHV2h/KKNF1C82doeA4BdXCErTyg7ISwLbQkzA==} 222 + 223 + '@atproto/identity@0.4.11': 224 + resolution: {integrity: sha512-/xXPPojR0PRD0pqoEPmgKMeclUCrkaMKfFGFkssAmXSuT39aCtiibxNqvhp+S2jOdeM6rKrs2QgH91OCGvwPcg==} 225 + engines: {node: '>=18.7.0'} 226 + 227 + '@atproto/jwk-jose@0.1.11': 228 + resolution: {integrity: sha512-i4Fnr2sTBYmMmHXl7NJh8GrCH+tDQEVWrcDMDnV5DjJfkgT17wIqvojIw9SNbSL4Uf0OtfEv6AgG0A+mgh8b5Q==} 229 + 230 + '@atproto/jwk-webcrypto@0.2.0': 231 + resolution: {integrity: sha512-UmgRrrEAkWvxwhlwe30UmDOdTEFidlIzBC7C3cCbeJMcBN1x8B3KH+crXrsTqfWQBG58mXgt8wgSK3Kxs2LhFg==} 232 + 233 + '@atproto/jwk@0.6.0': 234 + resolution: {integrity: sha512-bDoJPvt7TrQVi/rBfBrSSpGykhtIriKxeYCYQTiPRKFfyRhbgpElF0wPXADjIswnbzZdOwbY63az4E/CFVT3Tw==} 235 + 236 + '@atproto/lex-cbor@0.0.11': 237 + resolution: {integrity: sha512-A7ETtPsEsJ/VuPJOFw4bPNTKxHvFN1JbTQ2NjLuisd3ry7fVxgMpo/qGXsUQsAh/I/uziGbhpNqdS6GnI2p/Wg==} 238 + 239 + '@atproto/lex-client@0.0.12': 240 + resolution: {integrity: sha512-ef4jQQ7SOtBsXr+Gf1UHuBfCiAGYZxO5PCCXl3eT4ObO83SROtIf7pyO06jBQI/IZChSVsXqXsgakR0aru6lYQ==} 241 + 242 + '@atproto/lex-data@0.0.10': 243 + resolution: {integrity: sha512-FDbcy8VIUVzS9Mi1F8SMxbkL/jOUmRRpqbeM1xB4A0fMxeZJTxf6naAbFt4gYF3quu/+TPJGmio6/7cav05FqQ==} 244 + 245 + '@atproto/lex-data@0.0.11': 246 + resolution: {integrity: sha512-4+KTtHdqwlhiTKA7D4SACea4jprsNpCQsNALW09wsZ6IHhCDGO5tr1cmV+QnLYe3G3mu1E1yXHXbPUHrUUDT/A==} 247 + 248 + '@atproto/lex-document@0.0.13': 249 + resolution: {integrity: sha512-LWsBsKIbyuG7jFObTtnCFQNYHxWWVpVVspqv6UtnS/QsaCyCMg1GIz5vlgi8QBnmGvaPiQxIzGt6mERpTvEXpg==} 250 + 251 + '@atproto/lex-json@0.0.10': 252 + resolution: {integrity: sha512-L6MyXU17C5ODMeob8myQ2F3xvgCTvJUtM0ew8qSApnN//iDasB/FDGgd7ty4UVNmx4NQ/rtvz8xV94YpG6kneQ==} 253 + 254 + '@atproto/lex-json@0.0.11': 255 + resolution: {integrity: sha512-2IExAoQ4KsR5fyPa1JjIvtR316PvdgRH/l3BVGLBd3cSxM3m5MftIv1B6qZ9HjNiK60SgkWp0mi9574bTNDhBQ==} 256 + 257 + '@atproto/lex-resolver@0.0.14': 258 + resolution: {integrity: sha512-jBkYRmMKap2OM1zm0VDvs7Heuf3pGjw9xJEHQx1ohkMmM5f+cHPS40RQ8x8SNE+Vl9gMuOrgmgKyPDIuYSIBTw==} 259 + 260 + '@atproto/lex-schema@0.0.12': 261 + resolution: {integrity: sha512-l1RNYmqNwIEjgMEjC9i2o6FLsUFdpAc610xQYK/CRxN31cRzY0lAJ2GFbp2GZ4rRAD3FGYCXid6gZ42KsieUcw==} 262 + 263 + '@atproto/lexicon@0.6.1': 264 + resolution: {integrity: sha512-/vI1kVlY50Si+5MXpvOucelnYwb0UJ6Qto5mCp+7Q5C+Jtp+SoSykAPVvjVtTnQUH2vrKOFOwpb3C375vSKzXw==} 265 + 266 + '@atproto/oauth-client-browser@0.3.40': 267 + resolution: {integrity: sha512-AlvHf1DYFRHw+J8uALUMhpclTbUTTkvLqzQeGBdAXxSGP8OefsOXXaSiY5Mh6zAYxek95/ypxYzNYncasgnMWg==} 268 + 269 + '@atproto/oauth-client@0.5.14': 270 + resolution: {integrity: sha512-sPH+vcdq9maTEAhJI0HzmFcFAMrkCS19np+RUssNkX6kS8Xr3OYr57tvYRCbkcnIyYTfYcxKQgpwHKx3RVEaYw==} 271 + 272 + '@atproto/oauth-provider-api@0.3.7': 273 + resolution: {integrity: sha512-7yU9vuQFt/hy4NzlDtn+LuhIGvVKkhgWAkCmopnseMPBw6oGPT90uOsTxMkVGtHuKVvBSz7hOXoELXpnZq3gDQ==} 274 + 275 + '@atproto/oauth-provider-frontend@0.2.9': 276 + resolution: {integrity: sha512-m1NhqC7ydEpF5ELV13CxkgCawyMX8wbAXls/4af3Tsz3IOkdM6zPgQeYK7Zj+7Nywjml4mZTkJ8rZiT6O9+5sw==} 277 + engines: {node: '>=18.7.0'} 278 + 279 + '@atproto/oauth-provider-ui@0.4.3': 280 + resolution: {integrity: sha512-BLNZmtOwoHu2qk/Oi6dUR8TcXQaJre6wgW8YjkW5bKf+Vftn3PGzh8bKgr1fQZDYweZ6AF148imA2OzVSAaLHQ==} 281 + engines: {node: '>=18.7.0'} 282 + 283 + '@atproto/oauth-provider@0.15.9': 284 + resolution: {integrity: sha512-nuyOVw5piS/iEk7xKEtdulRbcFZ7HBB0gPXL62z5IpxmluEvLem/VLqsntj2OK/mtP6xhnIfFHP5pb5+PnLuYQ==} 285 + engines: {node: '>=18.7.0'} 286 + 287 + '@atproto/oauth-scopes@0.3.1': 288 + resolution: {integrity: sha512-eUD9C78uYH+0ZUmiV/X6pRj4BKlH9I1xxJYW1Gb/qJiATuTZkJVm02urJb/BkWX4Qpxy4rOr8EProNg1wByIEA==} 289 + 290 + '@atproto/oauth-types@0.6.2': 291 + resolution: {integrity: sha512-2cuboM4RQBCYR8NQC5uGRkW6KgCgKyq/B5/+tnMmWZYtZGVUQvsUWQHK/ZiMCnVXbcDNtc/RIEJQJDZ8FXMoxg==} 292 + 293 + '@atproto/oauth-types@0.6.3': 294 + resolution: {integrity: sha512-jdKuoPknJuh/WjI+mYk7agSbx9mNVMbS6Dr3k1z2YMY2oRiCQjxYBuo4MLKATbxj05nMQaZRWlHRUazoAu5Cng==} 295 + 296 + '@atproto/ozone@0.1.163': 297 + resolution: {integrity: sha512-Rz5p0Bf9K3KVo6VuPNe5KTiuJVM5eV7fXSIeWidC1WbDgfEEM8jJu2YRQHvDQq5r95SKKY0gTFYqU6vW0DKSJA==} 298 + engines: {node: '>=18.7.0'} 299 + 300 + '@atproto/pds@0.4.208': 301 + resolution: {integrity: sha512-XQsSOEwqIEXHApNHuGwFKtqbO7lz1KUEGxFnF4akagv3yFkjuxeat/JLMT7JdydjP7z+lraI2/phOoPrOGAzTQ==} 302 + engines: {node: '>=18.7.0'} 303 + 304 + '@atproto/repo@0.8.12': 305 + resolution: {integrity: sha512-QpVTVulgfz5PUiCTELlDBiRvnsnwrFWi+6CfY88VwXzrRHd9NE8GItK7sfxQ6U65vD/idH8ddCgFrlrsn1REPQ==} 306 + engines: {node: '>=18.7.0'} 307 + 308 + '@atproto/sync@0.1.39': 309 + resolution: {integrity: sha512-JE0flkb6cDHc1dFNclkX6QB2PYXR+Taa1HDP7prI1lyFtkEASO0AOt+VtbL2JKhEa7VEy8ckko1T9glpCwGNYA==} 310 + engines: {node: '>=18.7.0'} 311 + 312 + '@atproto/syntax@0.4.3': 313 + resolution: {integrity: sha512-YoZUz40YAJr5nPwvCDWgodEOlt5IftZqPJvA0JDWjuZKD8yXddTwSzXSaKQAzGOpuM+/A3uXRtPzJJqlScc+iA==} 314 + 315 + '@atproto/ws-client@0.0.4': 316 + resolution: {integrity: sha512-dox1XIymuC7/ZRhUqKezIGgooZS45C6vHCfu0PnWjfvsLCK2kAlnvX4IBkA/WpcoijDhQ9ejChnFbo/sLmgvAg==} 317 + engines: {node: '>=18.7.0'} 318 + 319 + '@atproto/xrpc-server@0.10.12': 320 + resolution: {integrity: sha512-HuciFHxvQfWtvq+dmH3vK9uXii49vqkJgZFLcHums1xMvLvNBY5bgtUBdpQdsdEuq8B4DTuanZRs+z3zGariyg==} 321 + engines: {node: '>=18.7.0'} 322 + 323 + '@atproto/xrpc@0.7.7': 324 + resolution: {integrity: sha512-K1ZyO/BU8JNtXX5dmPp7b5UrkLMMqpsIa/Lrj5D3Su+j1Xwq1m6QJ2XJ1AgjEjkI1v4Muzm7klianLE6XGxtmA==} 325 + 326 + '@aws-crypto/crc32@5.2.0': 327 + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} 328 + engines: {node: '>=16.0.0'} 329 + 330 + '@aws-crypto/crc32c@5.2.0': 331 + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} 332 + 333 + '@aws-crypto/sha1-browser@5.2.0': 334 + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} 335 + 336 + '@aws-crypto/sha256-browser@5.2.0': 337 + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} 338 + 339 + '@aws-crypto/sha256-js@5.2.0': 340 + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} 341 + engines: {node: '>=16.0.0'} 342 + 343 + '@aws-crypto/supports-web-crypto@5.2.0': 344 + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} 345 + 346 + '@aws-crypto/util@5.2.0': 347 + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} 348 + 349 + '@aws-sdk/client-cloudfront@3.985.0': 350 + resolution: {integrity: sha512-NItQgeotTtcx4bySCGtLbRSrzJgBGBjIcFEymY5IsTitsZ54U3BWR2HMqg4C2mz6hfFa1fr6vF/XLdfWeN2DSg==} 351 + engines: {node: '>=20.0.0'} 352 + 353 + '@aws-sdk/client-kms@3.985.0': 354 + resolution: {integrity: sha512-DachgzIvkZDwknlFdicLpfCnzYBdQtGOox5zYLq953/ZlnlB7YnW74Hh8Ql+IEq/gsup8s2ahzkFvb72SMRHMg==} 355 + engines: {node: '>=20.0.0'} 356 + 357 + '@aws-sdk/client-s3@3.985.0': 358 + resolution: {integrity: sha512-S9TqjzzZEEIKBnC7yFpvqM7CG9ALpY5qhQ5BnDBJtdG20NoGpjKLGUUfD2wmZItuhbrcM4Z8c6m6Fg0XYIOVvw==} 359 + engines: {node: '>=20.0.0'} 360 + 361 + '@aws-sdk/client-sso@3.985.0': 362 + resolution: {integrity: sha512-81J8iE8MuXhdbMfIz4sWFj64Pe41bFi/uqqmqOC5SlGv+kwoyLsyKS/rH2tW2t5buih4vTUxskRjxlqikTD4oQ==} 363 + engines: {node: '>=20.0.0'} 364 + 365 + '@aws-sdk/core@3.973.7': 366 + resolution: {integrity: sha512-wNZZQQNlJ+hzD49cKdo+PY6rsTDElO8yDImnrI69p2PLBa7QomeUKAJWYp9xnaR38nlHqWhMHZuYLCQ3oSX+xg==} 367 + engines: {node: '>=20.0.0'} 368 + 369 + '@aws-sdk/crc64-nvme@3.972.0': 370 + resolution: {integrity: sha512-ThlLhTqX68jvoIVv+pryOdb5coP1cX1/MaTbB9xkGDCbWbsqQcLqzPxuSoW1DCnAAIacmXCWpzUNOB9pv+xXQw==} 371 + engines: {node: '>=20.0.0'} 372 + 373 + '@aws-sdk/credential-provider-env@3.972.5': 374 + resolution: {integrity: sha512-LxJ9PEO4gKPXzkufvIESUysykPIdrV7+Ocb9yAhbhJLE4TiAYqbCVUE+VuKP1leGR1bBfjWjYgSV5MxprlX3mQ==} 375 + engines: {node: '>=20.0.0'} 376 + 377 + '@aws-sdk/credential-provider-http@3.972.7': 378 + resolution: {integrity: sha512-L2uOGtvp2x3bTcxFTpSM+GkwFIPd8pHfGWO1764icMbo7e5xJh0nfhx1UwkXLnwvocTNEf8A7jISZLYjUSNaTg==} 379 + engines: {node: '>=20.0.0'} 380 + 381 + '@aws-sdk/credential-provider-ini@3.972.5': 382 + resolution: {integrity: sha512-SdDTYE6jkARzOeL7+kudMIM4DaFnP5dZVeatzw849k4bSXDdErDS188bgeNzc/RA2WGrlEpsqHUKP6G7sVXhZg==} 383 + engines: {node: '>=20.0.0'} 384 + 385 + '@aws-sdk/credential-provider-login@3.972.5': 386 + resolution: {integrity: sha512-uYq1ILyTSI6ZDCMY5+vUsRM0SOCVI7kaW4wBrehVVkhAxC6y+e9rvGtnoZqCOWL1gKjTMouvsf4Ilhc5NCg1Aw==} 387 + engines: {node: '>=20.0.0'} 388 + 389 + '@aws-sdk/credential-provider-node@3.972.6': 390 + resolution: {integrity: sha512-DZ3CnAAtSVtVz+G+ogqecaErMLgzph4JH5nYbHoBMgBkwTUV+SUcjsjOJwdBJTHu3Dm6l5LBYekZoU2nDqQk2A==} 391 + engines: {node: '>=20.0.0'} 392 + 393 + '@aws-sdk/credential-provider-process@3.972.5': 394 + resolution: {integrity: sha512-HDKF3mVbLnuqGg6dMnzBf1VUOywE12/N286msI9YaK9mEIzdsGCtLTvrDhe3Up0R9/hGFbB+9l21/TwF5L1C6g==} 395 + engines: {node: '>=20.0.0'} 396 + 397 + '@aws-sdk/credential-provider-sso@3.972.5': 398 + resolution: {integrity: sha512-8urj3AoeNeQisjMmMBhFeiY2gxt6/7wQQbEGun0YV/OaOOiXrIudTIEYF8ZfD+NQI6X1FY5AkRsx6O/CaGiybA==} 399 + engines: {node: '>=20.0.0'} 400 + 401 + '@aws-sdk/credential-provider-web-identity@3.972.5': 402 + resolution: {integrity: sha512-OK3cULuJl6c+RcDZfPpaK5o3deTOnKZbxm7pzhFNGA3fI2hF9yDih17fGRazJzGGWaDVlR9ejZrpDef4DJCEsw==} 403 + engines: {node: '>=20.0.0'} 404 + 405 + '@aws-sdk/lib-storage@3.879.0': 406 + resolution: {integrity: sha512-FAb3vOfLIrf8lPuDoxKRu18DxXfQLEFm7MoXi0jd8ooFjD09jpVCQGNrRuMCqc688wrx7zJSovWObtn4LRjvrg==} 407 + engines: {node: '>=18.0.0'} 408 + peerDependencies: 409 + '@aws-sdk/client-s3': ^3.879.0 410 + 411 + '@aws-sdk/middleware-bucket-endpoint@3.972.3': 412 + resolution: {integrity: sha512-fmbgWYirF67YF1GfD7cg5N6HHQ96EyRNx/rDIrTF277/zTWVuPI2qS/ZHgofwR1NZPe/NWvoppflQY01LrbVLg==} 413 + engines: {node: '>=20.0.0'} 414 + 415 + '@aws-sdk/middleware-expect-continue@3.972.3': 416 + resolution: {integrity: sha512-4msC33RZsXQpUKR5QR4HnvBSNCPLGHmB55oDiROqqgyOc+TOfVu2xgi5goA7ms6MdZLeEh2905UfWMnMMF4mRg==} 417 + engines: {node: '>=20.0.0'} 418 + 419 + '@aws-sdk/middleware-flexible-checksums@3.972.5': 420 + resolution: {integrity: sha512-SF/1MYWx67OyCrLA4icIpWUfCkdlOi8Y1KecQ9xYxkL10GMjVdPTGPnYhAg0dw5U43Y9PVUWhAV2ezOaG+0BLg==} 421 + engines: {node: '>=20.0.0'} 422 + 423 + '@aws-sdk/middleware-host-header@3.972.3': 424 + resolution: {integrity: sha512-aknPTb2M+G3s+0qLCx4Li/qGZH8IIYjugHMv15JTYMe6mgZO8VBpYgeGYsNMGCqCZOcWzuf900jFBG5bopfzmA==} 425 + engines: {node: '>=20.0.0'} 426 + 427 + '@aws-sdk/middleware-location-constraint@3.972.3': 428 + resolution: {integrity: sha512-nIg64CVrsXp67vbK0U1/Is8rik3huS3QkRHn2DRDx4NldrEFMgdkZGI/+cZMKD9k4YOS110Dfu21KZLHrFA/1g==} 429 + engines: {node: '>=20.0.0'} 430 + 431 + '@aws-sdk/middleware-logger@3.972.3': 432 + resolution: {integrity: sha512-Ftg09xNNRqaz9QNzlfdQWfpqMCJbsQdnZVJP55jfhbKi1+FTWxGuvfPoBhDHIovqWKjqbuiew3HuhxbJ0+OjgA==} 433 + engines: {node: '>=20.0.0'} 434 + 435 + '@aws-sdk/middleware-recursion-detection@3.972.3': 436 + resolution: {integrity: sha512-PY57QhzNuXHnwbJgbWYTrqIDHYSeOlhfYERTAuc16LKZpTZRJUjzBFokp9hF7u1fuGeE3D70ERXzdbMBOqQz7Q==} 437 + engines: {node: '>=20.0.0'} 438 + 439 + '@aws-sdk/middleware-sdk-s3@3.972.7': 440 + resolution: {integrity: sha512-VtZ7tMIw18VzjG+I6D6rh2eLkJfTtByiFoCIauGDtTTPBEUMQUiGaJ/zZrPlCY6BsvLLeFKz3+E5mntgiOWmIg==} 441 + engines: {node: '>=20.0.0'} 442 + 443 + '@aws-sdk/middleware-ssec@3.972.3': 444 + resolution: {integrity: sha512-dU6kDuULN3o3jEHcjm0c4zWJlY1zWVkjG9NPe9qxYLLpcbdj5kRYBS2DdWYD+1B9f910DezRuws7xDEqKkHQIg==} 445 + engines: {node: '>=20.0.0'} 446 + 447 + '@aws-sdk/middleware-user-agent@3.972.7': 448 + resolution: {integrity: sha512-HUD+geASjXSCyL/DHPQc/Ua7JhldTcIglVAoCV8kiVm99IaFSlAbTvEnyhZwdE6bdFyTL+uIaWLaCFSRsglZBQ==} 449 + engines: {node: '>=20.0.0'} 450 + 451 + '@aws-sdk/nested-clients@3.985.0': 452 + resolution: {integrity: sha512-TsWwKzb/2WHafAY0CE7uXgLj0FmnkBTgfioG9HO+7z/zCPcl1+YU+i7dW4o0y+aFxFgxTMG+ExBQpqT/k2ao8g==} 453 + engines: {node: '>=20.0.0'} 454 + 455 + '@aws-sdk/region-config-resolver@3.972.3': 456 + resolution: {integrity: sha512-v4J8qYAWfOMcZ4MJUyatntOicTzEMaU7j3OpkRCGGFSL2NgXQ5VbxauIyORA+pxdKZ0qQG2tCQjQjZDlXEC3Ow==} 457 + engines: {node: '>=20.0.0'} 458 + 459 + '@aws-sdk/signature-v4-multi-region@3.985.0': 460 + resolution: {integrity: sha512-W6hTSOPiSbh4IdTYVxN7xHjpCh0qvfQU1GKGBzGQm0ZEIOaMmWqiDEvFfyGYKmfBvumT8vHKxQRTX0av9omtIg==} 461 + engines: {node: '>=20.0.0'} 462 + 463 + '@aws-sdk/token-providers@3.985.0': 464 + resolution: {integrity: sha512-+hwpHZyEq8k+9JL2PkE60V93v2kNhUIv7STFt+EAez1UJsJOQDhc5LpzEX66pNjclI5OTwBROs/DhJjC/BtMjQ==} 465 + engines: {node: '>=20.0.0'} 466 + 467 + '@aws-sdk/types@3.973.1': 468 + resolution: {integrity: sha512-DwHBiMNOB468JiX6+i34c+THsKHErYUdNQ3HexeXZvVn4zouLjgaS4FejiGSi2HyBuzuyHg7SuOPmjSvoU9NRg==} 469 + engines: {node: '>=20.0.0'} 470 + 471 + '@aws-sdk/util-arn-parser@3.972.2': 472 + resolution: {integrity: sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==} 473 + engines: {node: '>=20.0.0'} 474 + 475 + '@aws-sdk/util-endpoints@3.985.0': 476 + resolution: {integrity: sha512-vth7UfGSUR3ljvaq8V4Rc62FsM7GUTH/myxPWkaEgOrprz1/Pc72EgTXxj+cPPPDAfHFIpjhkB7T7Td0RJx+BA==} 477 + engines: {node: '>=20.0.0'} 478 + 479 + '@aws-sdk/util-locate-window@3.965.4': 480 + resolution: {integrity: sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==} 481 + engines: {node: '>=20.0.0'} 482 + 483 + '@aws-sdk/util-user-agent-browser@3.972.3': 484 + resolution: {integrity: sha512-JurOwkRUcXD/5MTDBcqdyQ9eVedtAsZgw5rBwktsPTN7QtPiS2Ld1jkJepNgYoCufz1Wcut9iup7GJDoIHp8Fw==} 485 + 486 + '@aws-sdk/util-user-agent-node@3.972.5': 487 + resolution: {integrity: sha512-GsUDF+rXyxDZkkJxUsDxnA67FG+kc5W1dnloCFLl6fWzceevsCYzJpASBzT+BPjwUgREE6FngfJYYYMQUY5fZQ==} 488 + engines: {node: '>=20.0.0'} 489 + peerDependencies: 490 + aws-crt: '>=1.0.0' 491 + peerDependenciesMeta: 492 + aws-crt: 493 + optional: true 494 + 495 + '@aws-sdk/xml-builder@3.972.4': 496 + resolution: {integrity: sha512-0zJ05ANfYqI6+rGqj8samZBFod0dPPousBjLEqg8WdxSgbMAkRgLyn81lP215Do0rFJ/17LIXwr7q0yK24mP6Q==} 497 + engines: {node: '>=20.0.0'} 498 + 499 + '@aws/lambda-invoke-store@0.2.3': 500 + resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==} 501 + engines: {node: '>=18.0.0'} 502 + 503 + '@badrap/valita@0.4.6': 504 + resolution: {integrity: sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==} 505 + engines: {node: '>= 18'} 506 + 507 + '@bufbuild/protobuf@1.10.1': 508 + resolution: {integrity: sha512-wJ8ReQbHxsAfXhrf9ixl0aYbZorRuOWpBNzm8pL8ftmSxQx/wnJD5Eg861NwJU/czy2VXFIebCeZnZrI9rktIQ==} 509 + 510 + '@catppuccin/tailwindcss@1.0.0': 511 + resolution: {integrity: sha512-l8pOlcYe2ncGd8a1gUmL5AHmKlxR2+CHuG5kt4Me6IZwzntW1DoLmj89BH+DcsPHBsdDGLrTSv35emlYyU3FeQ==} 512 + engines: {node: '>=22.0.0'} 513 + 514 + '@connectrpc/connect-express@1.7.0': 515 + resolution: {integrity: sha512-Ajj/jupbF0nCgYlUzuKWQHuwLq5XKqQdJYF5aHmnVZlUcg5Z5zp1u4waG2j4JRczuTb8e0R1yVMTnad5SHM3Lg==} 516 + engines: {node: '>=16.0.0'} 517 + peerDependencies: 518 + '@bufbuild/protobuf': ^1.10.0 519 + '@connectrpc/connect': 1.7.0 520 + '@connectrpc/connect-node': 1.7.0 521 + 522 + '@connectrpc/connect-node@1.7.0': 523 + resolution: {integrity: sha512-6vaPIkG/NyhxlYgytLoR9KYbPhczEboFB2OYWkA9qvUz1K7efXfeGrlRxoLtpa+r8VxyIOw73w5ktNe743nD+A==} 524 + engines: {node: '>=16.0.0'} 525 + peerDependencies: 526 + '@bufbuild/protobuf': ^1.10.0 527 + '@connectrpc/connect': 1.7.0 528 + 529 + '@connectrpc/connect@1.7.0': 530 + resolution: {integrity: sha512-iNKdJRi69YP3mq6AePRT8F/HrxWCewrhxnLMNm0vpqXAR8biwzRtO6Hjx80C6UvtKJ5sFmffQT7I4Baecz389w==} 531 + peerDependencies: 532 + '@bufbuild/protobuf': ^1.10.0 533 + 534 + '@did-plc/lib@0.0.1': 535 + resolution: {integrity: sha512-RkY5w9DbYMco3SjeepqIiMveqz35exjlVDipCs2gz9AXF4/cp9hvmrp9zUWEw2vny+FjV8vGEN7QpaXWaO6nhg==} 536 + 537 + '@did-plc/lib@0.0.4': 538 + resolution: {integrity: sha512-Omeawq3b8G/c/5CtkTtzovSOnWuvIuCI4GTJNrt1AmCskwEQV7zbX5d6km1mjJNbE0gHuQPTVqZxLVqetNbfwA==} 539 + 540 + '@did-plc/server@0.0.1': 541 + resolution: {integrity: sha512-GtxxHcOrOQ6fNI1ufq3Zqjc2PtWqPZOdsuzlwtxiH9XibUGwDkb0GmaBHyU5GiOxOKZEW1GspZ8mreBA6XOlTQ==} 542 + 543 + '@emnapi/runtime@1.8.1': 544 + resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} 545 + 546 + '@esbuild/aix-ppc64@0.27.3': 547 + resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} 548 + engines: {node: '>=18'} 549 + cpu: [ppc64] 550 + os: [aix] 551 + 552 + '@esbuild/android-arm64@0.27.3': 553 + resolution: {integrity: sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==} 554 + engines: {node: '>=18'} 555 + cpu: [arm64] 556 + os: [android] 557 + 558 + '@esbuild/android-arm@0.27.3': 559 + resolution: {integrity: sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==} 560 + engines: {node: '>=18'} 561 + cpu: [arm] 562 + os: [android] 563 + 564 + '@esbuild/android-x64@0.27.3': 565 + resolution: {integrity: sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==} 566 + engines: {node: '>=18'} 567 + cpu: [x64] 568 + os: [android] 569 + 570 + '@esbuild/darwin-arm64@0.27.3': 571 + resolution: {integrity: sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==} 572 + engines: {node: '>=18'} 573 + cpu: [arm64] 574 + os: [darwin] 575 + 576 + '@esbuild/darwin-x64@0.27.3': 577 + resolution: {integrity: sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==} 578 + engines: {node: '>=18'} 579 + cpu: [x64] 580 + os: [darwin] 581 + 582 + '@esbuild/freebsd-arm64@0.27.3': 583 + resolution: {integrity: sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==} 584 + engines: {node: '>=18'} 585 + cpu: [arm64] 586 + os: [freebsd] 587 + 588 + '@esbuild/freebsd-x64@0.27.3': 589 + resolution: {integrity: sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==} 590 + engines: {node: '>=18'} 591 + cpu: [x64] 592 + os: [freebsd] 593 + 594 + '@esbuild/linux-arm64@0.27.3': 595 + resolution: {integrity: sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==} 596 + engines: {node: '>=18'} 597 + cpu: [arm64] 598 + os: [linux] 599 + 600 + '@esbuild/linux-arm@0.27.3': 601 + resolution: {integrity: sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==} 602 + engines: {node: '>=18'} 603 + cpu: [arm] 604 + os: [linux] 605 + 606 + '@esbuild/linux-ia32@0.27.3': 607 + resolution: {integrity: sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==} 608 + engines: {node: '>=18'} 609 + cpu: [ia32] 610 + os: [linux] 611 + 612 + '@esbuild/linux-loong64@0.27.3': 613 + resolution: {integrity: sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==} 614 + engines: {node: '>=18'} 615 + cpu: [loong64] 616 + os: [linux] 617 + 618 + '@esbuild/linux-mips64el@0.27.3': 619 + resolution: {integrity: sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==} 620 + engines: {node: '>=18'} 621 + cpu: [mips64el] 622 + os: [linux] 623 + 624 + '@esbuild/linux-ppc64@0.27.3': 625 + resolution: {integrity: sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==} 626 + engines: {node: '>=18'} 627 + cpu: [ppc64] 628 + os: [linux] 629 + 630 + '@esbuild/linux-riscv64@0.27.3': 631 + resolution: {integrity: sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==} 632 + engines: {node: '>=18'} 633 + cpu: [riscv64] 634 + os: [linux] 635 + 636 + '@esbuild/linux-s390x@0.27.3': 637 + resolution: {integrity: sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==} 638 + engines: {node: '>=18'} 639 + cpu: [s390x] 640 + os: [linux] 641 + 642 + '@esbuild/linux-x64@0.27.3': 643 + resolution: {integrity: sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==} 644 + engines: {node: '>=18'} 645 + cpu: [x64] 646 + os: [linux] 647 + 648 + '@esbuild/netbsd-arm64@0.27.3': 649 + resolution: {integrity: sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==} 650 + engines: {node: '>=18'} 651 + cpu: [arm64] 652 + os: [netbsd] 653 + 654 + '@esbuild/netbsd-x64@0.27.3': 655 + resolution: {integrity: sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==} 656 + engines: {node: '>=18'} 657 + cpu: [x64] 658 + os: [netbsd] 659 + 660 + '@esbuild/openbsd-arm64@0.27.3': 661 + resolution: {integrity: sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==} 662 + engines: {node: '>=18'} 663 + cpu: [arm64] 664 + os: [openbsd] 665 + 666 + '@esbuild/openbsd-x64@0.27.3': 667 + resolution: {integrity: sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==} 668 + engines: {node: '>=18'} 669 + cpu: [x64] 670 + os: [openbsd] 671 + 672 + '@esbuild/openharmony-arm64@0.27.3': 673 + resolution: {integrity: sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==} 674 + engines: {node: '>=18'} 675 + cpu: [arm64] 676 + os: [openharmony] 677 + 678 + '@esbuild/sunos-x64@0.27.3': 679 + resolution: {integrity: sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==} 680 + engines: {node: '>=18'} 681 + cpu: [x64] 682 + os: [sunos] 683 + 684 + '@esbuild/win32-arm64@0.27.3': 685 + resolution: {integrity: sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==} 686 + engines: {node: '>=18'} 687 + cpu: [arm64] 688 + os: [win32] 689 + 690 + '@esbuild/win32-ia32@0.27.3': 691 + resolution: {integrity: sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==} 692 + engines: {node: '>=18'} 693 + cpu: [ia32] 694 + os: [win32] 695 + 696 + '@esbuild/win32-x64@0.27.3': 697 + resolution: {integrity: sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==} 698 + engines: {node: '>=18'} 699 + cpu: [x64] 700 + os: [win32] 701 + 702 + '@eslint-community/eslint-utils@4.9.1': 703 + resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} 704 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 705 + peerDependencies: 706 + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 707 + 708 + '@eslint-community/regexpp@4.12.2': 709 + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} 710 + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 711 + 712 + '@eslint/compat@2.0.2': 713 + resolution: {integrity: sha512-pR1DoD0h3HfF675QZx0xsyrsU8q70Z/plx7880NOhS02NuWLgBCOMDL787nUeQ7EWLkxv3bPQJaarjcPQb2Dwg==} 714 + engines: {node: ^20.19.0 || ^22.13.0 || >=24} 715 + peerDependencies: 716 + eslint: ^8.40 || 9 || 10 717 + peerDependenciesMeta: 718 + eslint: 719 + optional: true 720 + 721 + '@eslint/config-array@0.21.1': 722 + resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} 723 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 724 + 725 + '@eslint/config-helpers@0.4.2': 726 + resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} 727 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 728 + 729 + '@eslint/core@0.17.0': 730 + resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} 731 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 732 + 733 + '@eslint/core@1.1.0': 734 + resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} 735 + engines: {node: ^20.19.0 || ^22.13.0 || >=24} 736 + 737 + '@eslint/eslintrc@3.3.3': 738 + resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} 739 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 740 + 741 + '@eslint/js@9.39.2': 742 + resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} 743 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 744 + 745 + '@eslint/object-schema@2.1.7': 746 + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} 747 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 748 + 749 + '@eslint/plugin-kit@0.4.1': 750 + resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} 751 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 752 + 753 + '@fastify/busboy@2.1.1': 754 + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} 755 + engines: {node: '>=14'} 756 + 757 + '@growthbook/growthbook@1.6.4': 758 + resolution: {integrity: sha512-EID0PBixS9PyWLVEDT0FLGWSQ4kSaGo1kFOTFgIYxwI7/SRqesbYOt2Bc+79vb6HcQANzRhdmtz/9rZ3JsOVYA==} 759 + engines: {node: '>=10'} 760 + 761 + '@grpc/grpc-js@1.14.3': 762 + resolution: {integrity: sha512-Iq8QQQ/7X3Sac15oB6p0FmUg/klxQvXLeileoqrTRGJYLV+/9tubbr9ipz0GKHjmXVsgFPo/+W+2cA8eNcR+XA==} 763 + engines: {node: '>=12.10.0'} 764 + 765 + '@grpc/proto-loader@0.7.15': 766 + resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} 767 + engines: {node: '>=6'} 768 + hasBin: true 769 + 770 + '@grpc/proto-loader@0.8.0': 771 + resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} 772 + engines: {node: '>=6'} 773 + hasBin: true 774 + 775 + '@hapi/accept@6.0.3': 776 + resolution: {integrity: sha512-p72f9k56EuF0n3MwlBNThyVE5PXX40g+aQh+C/xbKrfzahM2Oispv3AXmOIU51t3j77zay1qrX7IIziZXspMlw==} 777 + 778 + '@hapi/address@5.1.1': 779 + resolution: {integrity: sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==} 780 + engines: {node: '>=14.0.0'} 781 + 782 + '@hapi/boom@10.0.1': 783 + resolution: {integrity: sha512-ERcCZaEjdH3OgSJlyjVk8pHIFeus91CjKP3v+MpgBNp5IvGzP2l/bRiD78nqYcKPaZdbKkK5vDBVPd2ohHBlsA==} 784 + 785 + '@hapi/bourne@3.0.0': 786 + resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} 787 + 788 + '@hapi/content@6.0.0': 789 + resolution: {integrity: sha512-CEhs7j+H0iQffKfe5Htdak5LBOz/Qc8TRh51cF+BFv0qnuph3Em4pjGVzJMkI2gfTDdlJKWJISGWS1rK34POGA==} 790 + 791 + '@hapi/hoek@11.0.7': 792 + resolution: {integrity: sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==} 793 + 794 + '@humanfs/core@0.19.1': 795 + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 796 + engines: {node: '>=18.18.0'} 797 + 798 + '@humanfs/node@0.16.7': 799 + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} 800 + engines: {node: '>=18.18.0'} 801 + 802 + '@humanwhocodes/module-importer@1.0.1': 803 + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 804 + engines: {node: '>=12.22'} 805 + 806 + '@humanwhocodes/retry@0.4.3': 807 + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} 808 + engines: {node: '>=18.18'} 809 + 810 + '@img/sharp-darwin-arm64@0.33.5': 811 + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} 812 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 813 + cpu: [arm64] 814 + os: [darwin] 815 + 816 + '@img/sharp-darwin-x64@0.33.5': 817 + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} 818 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 819 + cpu: [x64] 820 + os: [darwin] 821 + 822 + '@img/sharp-libvips-darwin-arm64@1.0.4': 823 + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} 824 + cpu: [arm64] 825 + os: [darwin] 826 + 827 + '@img/sharp-libvips-darwin-x64@1.0.4': 828 + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} 829 + cpu: [x64] 830 + os: [darwin] 831 + 832 + '@img/sharp-libvips-linux-arm64@1.0.4': 833 + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} 834 + cpu: [arm64] 835 + os: [linux] 836 + libc: [glibc] 837 + 838 + '@img/sharp-libvips-linux-arm@1.0.5': 839 + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} 840 + cpu: [arm] 841 + os: [linux] 842 + libc: [glibc] 843 + 844 + '@img/sharp-libvips-linux-s390x@1.0.4': 845 + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} 846 + cpu: [s390x] 847 + os: [linux] 848 + libc: [glibc] 849 + 850 + '@img/sharp-libvips-linux-x64@1.0.4': 851 + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} 852 + cpu: [x64] 853 + os: [linux] 854 + libc: [glibc] 855 + 856 + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 857 + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} 858 + cpu: [arm64] 859 + os: [linux] 860 + libc: [musl] 861 + 862 + '@img/sharp-libvips-linuxmusl-x64@1.0.4': 863 + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} 864 + cpu: [x64] 865 + os: [linux] 866 + libc: [musl] 867 + 868 + '@img/sharp-linux-arm64@0.33.5': 869 + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} 870 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 871 + cpu: [arm64] 872 + os: [linux] 873 + libc: [glibc] 874 + 875 + '@img/sharp-linux-arm@0.33.5': 876 + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} 877 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 878 + cpu: [arm] 879 + os: [linux] 880 + libc: [glibc] 881 + 882 + '@img/sharp-linux-s390x@0.33.5': 883 + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} 884 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 885 + cpu: [s390x] 886 + os: [linux] 887 + libc: [glibc] 888 + 889 + '@img/sharp-linux-x64@0.33.5': 890 + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} 891 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 892 + cpu: [x64] 893 + os: [linux] 894 + libc: [glibc] 895 + 896 + '@img/sharp-linuxmusl-arm64@0.33.5': 897 + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} 898 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 899 + cpu: [arm64] 900 + os: [linux] 901 + libc: [musl] 902 + 903 + '@img/sharp-linuxmusl-x64@0.33.5': 904 + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} 905 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 906 + cpu: [x64] 907 + os: [linux] 908 + libc: [musl] 909 + 910 + '@img/sharp-wasm32@0.33.5': 911 + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} 912 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 913 + cpu: [wasm32] 914 + 915 + '@img/sharp-win32-ia32@0.33.5': 916 + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} 917 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 918 + cpu: [ia32] 919 + os: [win32] 920 + 921 + '@img/sharp-win32-x64@0.33.5': 922 + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} 923 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 924 + cpu: [x64] 925 + os: [win32] 926 + 927 + '@ioredis/commands@1.5.0': 928 + resolution: {integrity: sha512-eUgLqrMf8nJkZxT24JvVRrQya1vZkQh8BBeYNwGDqa5I0VUi8ACx7uFvAaLxintokpTenkK6DASvo/bvNbBGow==} 929 + 930 + '@ipld/dag-cbor@7.0.3': 931 + resolution: {integrity: sha512-1VVh2huHsuohdXC1bGJNE8WR72slZ9XE2T3wbBBq31dm7ZBatmKLLxrB+XAqafxfRFjv08RZmj/W/ZqaM13AuA==} 932 + 933 + '@isaacs/cliui@8.0.2': 934 + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 935 + engines: {node: '>=12'} 936 + 937 + '@jridgewell/gen-mapping@0.3.13': 938 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 939 + 940 + '@jridgewell/remapping@2.3.5': 941 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 942 + 943 + '@jridgewell/resolve-uri@3.1.2': 944 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 945 + engines: {node: '>=6.0.0'} 946 + 947 + '@jridgewell/sourcemap-codec@1.5.5': 948 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 949 + 950 + '@jridgewell/trace-mapping@0.3.31': 951 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 952 + 953 + '@js-sdsl/ordered-map@4.4.2': 954 + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} 955 + 956 + '@noble/curves@1.9.7': 957 + resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==} 958 + engines: {node: ^14.21.3 || >=16} 959 + 960 + '@noble/hashes@1.8.0': 961 + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} 962 + engines: {node: ^14.21.3 || >=16} 963 + 964 + '@noble/secp256k1@1.7.2': 965 + resolution: {integrity: sha512-/qzwYl5eFLH8OWIecQWM31qld2g1NfjgylK+TNhqtaUKP37Nm+Y+z30Fjhw0Ct8p9yCQEm2N3W/AckdIb3SMcQ==} 966 + 967 + '@noble/secp256k1@3.0.0': 968 + resolution: {integrity: sha512-NJBaR352KyIvj3t6sgT/+7xrNyF9Xk9QlLSIqUGVUYlsnDTAUqY8LOmwpcgEx4AMJXRITQ5XEVHD+mMaPfr3mg==} 969 + 970 + '@pkgjs/parseargs@0.11.0': 971 + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 972 + engines: {node: '>=14'} 973 + 974 + '@polka/url@1.0.0-next.29': 975 + resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} 976 + 977 + '@protobufjs/aspromise@1.1.2': 978 + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} 979 + 980 + '@protobufjs/base64@1.1.2': 981 + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} 982 + 983 + '@protobufjs/codegen@2.0.4': 984 + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} 985 + 986 + '@protobufjs/eventemitter@1.1.0': 987 + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} 988 + 989 + '@protobufjs/fetch@1.1.0': 990 + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} 991 + 992 + '@protobufjs/float@1.0.2': 993 + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} 994 + 995 + '@protobufjs/inquire@1.1.0': 996 + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} 997 + 998 + '@protobufjs/path@1.1.2': 999 + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} 1000 + 1001 + '@protobufjs/pool@1.1.0': 1002 + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} 1003 + 1004 + '@protobufjs/utf8@1.1.0': 1005 + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} 1006 + 1007 + '@rollup/plugin-commonjs@29.0.0': 1008 + resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==} 1009 + engines: {node: '>=16.0.0 || 14 >= 14.17'} 1010 + peerDependencies: 1011 + rollup: ^2.68.0||^3.0.0||^4.0.0 1012 + peerDependenciesMeta: 1013 + rollup: 1014 + optional: true 1015 + 1016 + '@rollup/plugin-json@6.1.0': 1017 + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} 1018 + engines: {node: '>=14.0.0'} 1019 + peerDependencies: 1020 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 1021 + peerDependenciesMeta: 1022 + rollup: 1023 + optional: true 1024 + 1025 + '@rollup/plugin-node-resolve@16.0.3': 1026 + resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} 1027 + engines: {node: '>=14.0.0'} 1028 + peerDependencies: 1029 + rollup: ^2.78.0||^3.0.0||^4.0.0 1030 + peerDependenciesMeta: 1031 + rollup: 1032 + optional: true 1033 + 1034 + '@rollup/pluginutils@5.3.0': 1035 + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} 1036 + engines: {node: '>=14.0.0'} 1037 + peerDependencies: 1038 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 1039 + peerDependenciesMeta: 1040 + rollup: 1041 + optional: true 1042 + 1043 + '@rollup/rollup-android-arm-eabi@4.57.1': 1044 + resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} 1045 + cpu: [arm] 1046 + os: [android] 1047 + 1048 + '@rollup/rollup-android-arm64@4.57.1': 1049 + resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} 1050 + cpu: [arm64] 1051 + os: [android] 1052 + 1053 + '@rollup/rollup-darwin-arm64@4.57.1': 1054 + resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} 1055 + cpu: [arm64] 1056 + os: [darwin] 1057 + 1058 + '@rollup/rollup-darwin-x64@4.57.1': 1059 + resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} 1060 + cpu: [x64] 1061 + os: [darwin] 1062 + 1063 + '@rollup/rollup-freebsd-arm64@4.57.1': 1064 + resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} 1065 + cpu: [arm64] 1066 + os: [freebsd] 1067 + 1068 + '@rollup/rollup-freebsd-x64@4.57.1': 1069 + resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} 1070 + cpu: [x64] 1071 + os: [freebsd] 1072 + 1073 + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': 1074 + resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} 1075 + cpu: [arm] 1076 + os: [linux] 1077 + libc: [glibc] 1078 + 1079 + '@rollup/rollup-linux-arm-musleabihf@4.57.1': 1080 + resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} 1081 + cpu: [arm] 1082 + os: [linux] 1083 + libc: [musl] 1084 + 1085 + '@rollup/rollup-linux-arm64-gnu@4.57.1': 1086 + resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} 1087 + cpu: [arm64] 1088 + os: [linux] 1089 + libc: [glibc] 1090 + 1091 + '@rollup/rollup-linux-arm64-musl@4.57.1': 1092 + resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} 1093 + cpu: [arm64] 1094 + os: [linux] 1095 + libc: [musl] 1096 + 1097 + '@rollup/rollup-linux-loong64-gnu@4.57.1': 1098 + resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} 1099 + cpu: [loong64] 1100 + os: [linux] 1101 + libc: [glibc] 1102 + 1103 + '@rollup/rollup-linux-loong64-musl@4.57.1': 1104 + resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} 1105 + cpu: [loong64] 1106 + os: [linux] 1107 + libc: [musl] 1108 + 1109 + '@rollup/rollup-linux-ppc64-gnu@4.57.1': 1110 + resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} 1111 + cpu: [ppc64] 1112 + os: [linux] 1113 + libc: [glibc] 1114 + 1115 + '@rollup/rollup-linux-ppc64-musl@4.57.1': 1116 + resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} 1117 + cpu: [ppc64] 1118 + os: [linux] 1119 + libc: [musl] 1120 + 1121 + '@rollup/rollup-linux-riscv64-gnu@4.57.1': 1122 + resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} 1123 + cpu: [riscv64] 1124 + os: [linux] 1125 + libc: [glibc] 1126 + 1127 + '@rollup/rollup-linux-riscv64-musl@4.57.1': 1128 + resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} 1129 + cpu: [riscv64] 1130 + os: [linux] 1131 + libc: [musl] 1132 + 1133 + '@rollup/rollup-linux-s390x-gnu@4.57.1': 1134 + resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} 1135 + cpu: [s390x] 1136 + os: [linux] 1137 + libc: [glibc] 1138 + 1139 + '@rollup/rollup-linux-x64-gnu@4.57.1': 1140 + resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} 1141 + cpu: [x64] 1142 + os: [linux] 1143 + libc: [glibc] 1144 + 1145 + '@rollup/rollup-linux-x64-musl@4.57.1': 1146 + resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} 1147 + cpu: [x64] 1148 + os: [linux] 1149 + libc: [musl] 1150 + 1151 + '@rollup/rollup-openbsd-x64@4.57.1': 1152 + resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} 1153 + cpu: [x64] 1154 + os: [openbsd] 1155 + 1156 + '@rollup/rollup-openharmony-arm64@4.57.1': 1157 + resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} 1158 + cpu: [arm64] 1159 + os: [openharmony] 1160 + 1161 + '@rollup/rollup-win32-arm64-msvc@4.57.1': 1162 + resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} 1163 + cpu: [arm64] 1164 + os: [win32] 1165 + 1166 + '@rollup/rollup-win32-ia32-msvc@4.57.1': 1167 + resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} 1168 + cpu: [ia32] 1169 + os: [win32] 1170 + 1171 + '@rollup/rollup-win32-x64-gnu@4.57.1': 1172 + resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} 1173 + cpu: [x64] 1174 + os: [win32] 1175 + 1176 + '@rollup/rollup-win32-x64-msvc@4.57.1': 1177 + resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} 1178 + cpu: [x64] 1179 + os: [win32] 1180 + 1181 + '@smithy/abort-controller@4.2.8': 1182 + resolution: {integrity: sha512-peuVfkYHAmS5ybKxWcfraK7WBBP0J+rkfUcbHJJKQ4ir3UAUNQI+Y4Vt/PqSzGqgloJ5O1dk7+WzNL8wcCSXbw==} 1183 + engines: {node: '>=18.0.0'} 1184 + 1185 + '@smithy/chunked-blob-reader-native@4.2.1': 1186 + resolution: {integrity: sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==} 1187 + engines: {node: '>=18.0.0'} 1188 + 1189 + '@smithy/chunked-blob-reader@5.2.0': 1190 + resolution: {integrity: sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==} 1191 + engines: {node: '>=18.0.0'} 1192 + 1193 + '@smithy/config-resolver@4.4.6': 1194 + resolution: {integrity: sha512-qJpzYC64kaj3S0fueiu3kXm8xPrR3PcXDPEgnaNMRn0EjNSZFoFjvbUp0YUDsRhN1CB90EnHJtbxWKevnH99UQ==} 1195 + engines: {node: '>=18.0.0'} 1196 + 1197 + '@smithy/core@3.22.1': 1198 + resolution: {integrity: sha512-x3ie6Crr58MWrm4viHqqy2Du2rHYZjwu8BekasrQx4ca+Y24dzVAwq3yErdqIbc2G3I0kLQA13PQ+/rde+u65g==} 1199 + engines: {node: '>=18.0.0'} 1200 + 1201 + '@smithy/credential-provider-imds@4.2.8': 1202 + resolution: {integrity: sha512-FNT0xHS1c/CPN8upqbMFP83+ul5YgdisfCfkZ86Jh2NSmnqw/AJ6x5pEogVCTVvSm7j9MopRU89bmDelxuDMYw==} 1203 + engines: {node: '>=18.0.0'} 1204 + 1205 + '@smithy/eventstream-codec@4.2.8': 1206 + resolution: {integrity: sha512-jS/O5Q14UsufqoGhov7dHLOPCzkYJl9QDzusI2Psh4wyYx/izhzvX9P4D69aTxcdfVhEPhjK+wYyn/PzLjKbbw==} 1207 + engines: {node: '>=18.0.0'} 1208 + 1209 + '@smithy/eventstream-serde-browser@4.2.8': 1210 + resolution: {integrity: sha512-MTfQT/CRQz5g24ayXdjg53V0mhucZth4PESoA5IhvaWVDTOQLfo8qI9vzqHcPsdd2v6sqfTYqF5L/l+pea5Uyw==} 1211 + engines: {node: '>=18.0.0'} 1212 + 1213 + '@smithy/eventstream-serde-config-resolver@4.3.8': 1214 + resolution: {integrity: sha512-ah12+luBiDGzBruhu3efNy1IlbwSEdNiw8fOZksoKoWW1ZHvO/04MQsdnws/9Aj+5b0YXSSN2JXKy/ClIsW8MQ==} 1215 + engines: {node: '>=18.0.0'} 1216 + 1217 + '@smithy/eventstream-serde-node@4.2.8': 1218 + resolution: {integrity: sha512-cYpCpp29z6EJHa5T9WL0KAlq3SOKUQkcgSoeRfRVwjGgSFl7Uh32eYGt7IDYCX20skiEdRffyDpvF2efEZPC0A==} 1219 + engines: {node: '>=18.0.0'} 1220 + 1221 + '@smithy/eventstream-serde-universal@4.2.8': 1222 + resolution: {integrity: sha512-iJ6YNJd0bntJYnX6s52NC4WFYcZeKrPUr1Kmmr5AwZcwCSzVpS7oavAmxMR7pMq7V+D1G4s9F5NJK0xwOsKAlQ==} 1223 + engines: {node: '>=18.0.0'} 1224 + 1225 + '@smithy/fetch-http-handler@5.3.9': 1226 + resolution: {integrity: sha512-I4UhmcTYXBrct03rwzQX1Y/iqQlzVQaPxWjCjula++5EmWq9YGBrx6bbGqluGc1f0XEfhSkiY4jhLgbsJUMKRA==} 1227 + engines: {node: '>=18.0.0'} 1228 + 1229 + '@smithy/hash-blob-browser@4.2.9': 1230 + resolution: {integrity: sha512-m80d/iicI7DlBDxyQP6Th7BW/ejDGiF0bgI754+tiwK0lgMkcaIBgvwwVc7OFbY4eUzpGtnig52MhPAEJ7iNYg==} 1231 + engines: {node: '>=18.0.0'} 1232 + 1233 + '@smithy/hash-node@4.2.8': 1234 + resolution: {integrity: sha512-7ZIlPbmaDGxVoxErDZnuFG18WekhbA/g2/i97wGj+wUBeS6pcUeAym8u4BXh/75RXWhgIJhyC11hBzig6MljwA==} 1235 + engines: {node: '>=18.0.0'} 1236 + 1237 + '@smithy/hash-stream-node@4.2.8': 1238 + resolution: {integrity: sha512-v0FLTXgHrTeheYZFGhR+ehX5qUm4IQsjAiL9qehad2cyjMWcN2QG6/4mSwbSgEQzI7jwfoXj7z4fxZUx/Mhj2w==} 1239 + engines: {node: '>=18.0.0'} 1240 + 1241 + '@smithy/invalid-dependency@4.2.8': 1242 + resolution: {integrity: sha512-N9iozRybwAQ2dn9Fot9kI6/w9vos2oTXLhtK7ovGqwZjlOcxu6XhPlpLpC+INsxktqHinn5gS2DXDjDF2kG5sQ==} 1243 + engines: {node: '>=18.0.0'} 1244 + 1245 + '@smithy/is-array-buffer@2.2.0': 1246 + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} 1247 + engines: {node: '>=14.0.0'} 1248 + 1249 + '@smithy/is-array-buffer@4.2.0': 1250 + resolution: {integrity: sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==} 1251 + engines: {node: '>=18.0.0'} 1252 + 1253 + '@smithy/md5-js@4.2.8': 1254 + resolution: {integrity: sha512-oGMaLj4tVZzLi3itBa9TCswgMBr7k9b+qKYowQ6x1rTyTuO1IU2YHdHUa+891OsOH+wCsH7aTPRsTJO3RMQmjQ==} 1255 + engines: {node: '>=18.0.0'} 1256 + 1257 + '@smithy/middleware-content-length@4.2.8': 1258 + resolution: {integrity: sha512-RO0jeoaYAB1qBRhfVyq0pMgBoUK34YEJxVxyjOWYZiOKOq2yMZ4MnVXMZCUDenpozHue207+9P5ilTV1zeda0A==} 1259 + engines: {node: '>=18.0.0'} 1260 + 1261 + '@smithy/middleware-endpoint@4.4.13': 1262 + resolution: {integrity: sha512-x6vn0PjYmGdNuKh/juUJJewZh7MoQ46jYaJ2mvekF4EesMuFfrl4LaW/k97Zjf8PTCPQmPgMvwewg7eNoH9n5w==} 1263 + engines: {node: '>=18.0.0'} 1264 + 1265 + '@smithy/middleware-retry@4.4.30': 1266 + resolution: {integrity: sha512-CBGyFvN0f8hlnqKH/jckRDz78Snrp345+PVk8Ux7pnkUCW97Iinse59lY78hBt04h1GZ6hjBN94BRwZy1xC8Bg==} 1267 + engines: {node: '>=18.0.0'} 1268 + 1269 + '@smithy/middleware-serde@4.2.9': 1270 + resolution: {integrity: sha512-eMNiej0u/snzDvlqRGSN3Vl0ESn3838+nKyVfF2FKNXFbi4SERYT6PR392D39iczngbqqGG0Jl1DlCnp7tBbXQ==} 1271 + engines: {node: '>=18.0.0'} 1272 + 1273 + '@smithy/middleware-stack@4.2.8': 1274 + resolution: {integrity: sha512-w6LCfOviTYQjBctOKSwy6A8FIkQy7ICvglrZFl6Bw4FmcQ1Z420fUtIhxaUZZshRe0VCq4kvDiPiXrPZAe8oRA==} 1275 + engines: {node: '>=18.0.0'} 1276 + 1277 + '@smithy/node-config-provider@4.3.8': 1278 + resolution: {integrity: sha512-aFP1ai4lrbVlWjfpAfRSL8KFcnJQYfTl5QxLJXY32vghJrDuFyPZ6LtUL+JEGYiFRG1PfPLHLoxj107ulncLIg==} 1279 + engines: {node: '>=18.0.0'} 1280 + 1281 + '@smithy/node-http-handler@4.4.9': 1282 + resolution: {integrity: sha512-KX5Wml5mF+luxm1szW4QDz32e3NObgJ4Fyw+irhph4I/2geXwUy4jkIMUs5ZPGflRBeR6BUkC2wqIab4Llgm3w==} 1283 + engines: {node: '>=18.0.0'} 1284 + 1285 + '@smithy/property-provider@4.2.8': 1286 + resolution: {integrity: sha512-EtCTbyIveCKeOXDSWSdze3k612yCPq1YbXsbqX3UHhkOSW8zKsM9NOJG5gTIya0vbY2DIaieG8pKo1rITHYL0w==} 1287 + engines: {node: '>=18.0.0'} 1288 + 1289 + '@smithy/protocol-http@5.3.8': 1290 + resolution: {integrity: sha512-QNINVDhxpZ5QnP3aviNHQFlRogQZDfYlCkQT+7tJnErPQbDhysondEjhikuANxgMsZrkGeiAxXy4jguEGsDrWQ==} 1291 + engines: {node: '>=18.0.0'} 1292 + 1293 + '@smithy/querystring-builder@4.2.8': 1294 + resolution: {integrity: sha512-Xr83r31+DrE8CP3MqPgMJl+pQlLLmOfiEUnoyAlGzzJIrEsbKsPy1hqH0qySaQm4oWrCBlUqRt+idEgunKB+iw==} 1295 + engines: {node: '>=18.0.0'} 1296 + 1297 + '@smithy/querystring-parser@4.2.8': 1298 + resolution: {integrity: sha512-vUurovluVy50CUlazOiXkPq40KGvGWSdmusa3130MwrR1UNnNgKAlj58wlOe61XSHRpUfIIh6cE0zZ8mzKaDPA==} 1299 + engines: {node: '>=18.0.0'} 1300 + 1301 + '@smithy/service-error-classification@4.2.8': 1302 + resolution: {integrity: sha512-mZ5xddodpJhEt3RkCjbmUQuXUOaPNTkbMGR0bcS8FE0bJDLMZlhmpgrvPNCYglVw5rsYTpSnv19womw9WWXKQQ==} 1303 + engines: {node: '>=18.0.0'} 1304 + 1305 + '@smithy/shared-ini-file-loader@4.4.3': 1306 + resolution: {integrity: sha512-DfQjxXQnzC5UbCUPeC3Ie8u+rIWZTvuDPAGU/BxzrOGhRvgUanaP68kDZA+jaT3ZI+djOf+4dERGlm9mWfFDrg==} 1307 + engines: {node: '>=18.0.0'} 1308 + 1309 + '@smithy/signature-v4@5.3.8': 1310 + resolution: {integrity: sha512-6A4vdGj7qKNRF16UIcO8HhHjKW27thsxYci+5r/uVRkdcBEkOEiY8OMPuydLX4QHSrJqGHPJzPRwwVTqbLZJhg==} 1311 + engines: {node: '>=18.0.0'} 1312 + 1313 + '@smithy/smithy-client@4.11.2': 1314 + resolution: {integrity: sha512-SCkGmFak/xC1n7hKRsUr6wOnBTJ3L22Qd4e8H1fQIuKTAjntwgU8lrdMe7uHdiT2mJAOWA/60qaW9tiMu69n1A==} 1315 + engines: {node: '>=18.0.0'} 1316 + 1317 + '@smithy/types@4.12.0': 1318 + resolution: {integrity: sha512-9YcuJVTOBDjg9LWo23Qp0lTQ3D7fQsQtwle0jVfpbUHy9qBwCEgKuVH4FqFB3VYu0nwdHKiEMA+oXz7oV8X1kw==} 1319 + engines: {node: '>=18.0.0'} 1320 + 1321 + '@smithy/url-parser@4.2.8': 1322 + resolution: {integrity: sha512-NQho9U68TGMEU639YkXnVMV3GEFFULmmaWdlu1E9qzyIePOHsoSnagTGSDv1Zi8DCNN6btxOSdgmy5E/hsZwhA==} 1323 + engines: {node: '>=18.0.0'} 1324 + 1325 + '@smithy/util-base64@4.3.0': 1326 + resolution: {integrity: sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==} 1327 + engines: {node: '>=18.0.0'} 1328 + 1329 + '@smithy/util-body-length-browser@4.2.0': 1330 + resolution: {integrity: sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==} 1331 + engines: {node: '>=18.0.0'} 1332 + 1333 + '@smithy/util-body-length-node@4.2.1': 1334 + resolution: {integrity: sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==} 1335 + engines: {node: '>=18.0.0'} 1336 + 1337 + '@smithy/util-buffer-from@2.2.0': 1338 + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} 1339 + engines: {node: '>=14.0.0'} 1340 + 1341 + '@smithy/util-buffer-from@4.2.0': 1342 + resolution: {integrity: sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==} 1343 + engines: {node: '>=18.0.0'} 1344 + 1345 + '@smithy/util-config-provider@4.2.0': 1346 + resolution: {integrity: sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==} 1347 + engines: {node: '>=18.0.0'} 1348 + 1349 + '@smithy/util-defaults-mode-browser@4.3.29': 1350 + resolution: {integrity: sha512-nIGy3DNRmOjaYaaKcQDzmWsro9uxlaqUOhZDHQed9MW/GmkBZPtnU70Pu1+GT9IBmUXwRdDuiyaeiy9Xtpn3+Q==} 1351 + engines: {node: '>=18.0.0'} 1352 + 1353 + '@smithy/util-defaults-mode-node@4.2.32': 1354 + resolution: {integrity: sha512-7dtFff6pu5fsjqrVve0YMhrnzJtccCWDacNKOkiZjJ++fmjGExmmSu341x+WU6Oc1IccL7lDuaUj7SfrHpWc5Q==} 1355 + engines: {node: '>=18.0.0'} 1356 + 1357 + '@smithy/util-endpoints@3.2.8': 1358 + resolution: {integrity: sha512-8JaVTn3pBDkhZgHQ8R0epwWt+BqPSLCjdjXXusK1onwJlRuN69fbvSK66aIKKO7SwVFM6x2J2ox5X8pOaWcUEw==} 1359 + engines: {node: '>=18.0.0'} 1360 + 1361 + '@smithy/util-hex-encoding@4.2.0': 1362 + resolution: {integrity: sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==} 1363 + engines: {node: '>=18.0.0'} 1364 + 1365 + '@smithy/util-middleware@4.2.8': 1366 + resolution: {integrity: sha512-PMqfeJxLcNPMDgvPbbLl/2Vpin+luxqTGPpW3NAQVLbRrFRzTa4rNAASYeIGjRV9Ytuhzny39SpyU04EQreF+A==} 1367 + engines: {node: '>=18.0.0'} 1368 + 1369 + '@smithy/util-retry@4.2.8': 1370 + resolution: {integrity: sha512-CfJqwvoRY0kTGe5AkQokpURNCT1u/MkRzMTASWMPPo2hNSnKtF1D45dQl3DE2LKLr4m+PW9mCeBMJr5mCAVThg==} 1371 + engines: {node: '>=18.0.0'} 1372 + 1373 + '@smithy/util-stream@4.5.11': 1374 + resolution: {integrity: sha512-lKmZ0S/3Qj2OF5H1+VzvDLb6kRxGzZHq6f3rAsoSu5cTLGsn3v3VQBA8czkNNXlLjoFEtVu3OQT2jEeOtOE2CA==} 1375 + engines: {node: '>=18.0.0'} 1376 + 1377 + '@smithy/util-uri-escape@4.2.0': 1378 + resolution: {integrity: sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==} 1379 + engines: {node: '>=18.0.0'} 1380 + 1381 + '@smithy/util-utf8@2.3.0': 1382 + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} 1383 + engines: {node: '>=14.0.0'} 1384 + 1385 + '@smithy/util-utf8@4.2.0': 1386 + resolution: {integrity: sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==} 1387 + engines: {node: '>=18.0.0'} 1388 + 1389 + '@smithy/util-waiter@4.2.8': 1390 + resolution: {integrity: sha512-n+lahlMWk+aejGuax7DPWtqav8HYnWxQwR+LCG2BgCUmaGcTe9qZCFsmw8TMg9iG75HOwhrJCX9TCJRLH+Yzqg==} 1391 + engines: {node: '>=18.0.0'} 1392 + 1393 + '@smithy/uuid@1.1.0': 1394 + resolution: {integrity: sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==} 1395 + engines: {node: '>=18.0.0'} 1396 + 1397 + '@standard-schema/spec@1.1.0': 1398 + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} 1399 + 1400 + '@sveltejs/acorn-typescript@1.0.8': 1401 + resolution: {integrity: sha512-esgN+54+q0NjB0Y/4BomT9samII7jGwNy/2a3wNZbT2A2RpmXsXwUt24LvLhx6jUq2gVk4cWEvcRO6MFQbOfNA==} 1402 + peerDependencies: 1403 + acorn: ^8.9.0 1404 + 1405 + '@sveltejs/adapter-auto@7.0.0': 1406 + resolution: {integrity: sha512-ImDWaErTOCkRS4Gt+5gZuymKFBobnhChXUZ9lhUZLahUgvA4OOvRzi3sahzYgbxGj5nkA6OV0GAW378+dl/gyw==} 1407 + peerDependencies: 1408 + '@sveltejs/kit': ^2.0.0 1409 + 1410 + '@sveltejs/adapter-node@5.5.3': 1411 + resolution: {integrity: sha512-yeWbKXBL9vqDb/7R8ebvRHeuBHN4cRYYBSquNJSMQtS6rIYkXxsVSveaMTUaLvHYQsb1zNa+nH2iLTOMawBohA==} 1412 + peerDependencies: 1413 + '@sveltejs/kit': ^2.4.0 1414 + 1415 + '@sveltejs/kit@2.50.2': 1416 + resolution: {integrity: sha512-875hTUkEbz+MyJIxWbQjfMaekqdmEKUUfR7JyKcpfMRZqcGyrO9Gd+iS1D/Dx8LpE5FEtutWGOtlAh4ReSAiOA==} 1417 + engines: {node: '>=18.13'} 1418 + hasBin: true 1419 + peerDependencies: 1420 + '@opentelemetry/api': ^1.0.0 1421 + '@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 1422 + svelte: ^4.0.0 || ^5.0.0-next.0 1423 + typescript: ^5.3.3 1424 + vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 1425 + peerDependenciesMeta: 1426 + '@opentelemetry/api': 1427 + optional: true 1428 + typescript: 1429 + optional: true 1430 + 1431 + '@sveltejs/vite-plugin-svelte-inspector@5.0.2': 1432 + resolution: {integrity: sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==} 1433 + engines: {node: ^20.19 || ^22.12 || >=24} 1434 + peerDependencies: 1435 + '@sveltejs/vite-plugin-svelte': ^6.0.0-next.0 1436 + svelte: ^5.0.0 1437 + vite: ^6.3.0 || ^7.0.0 1438 + 1439 + '@sveltejs/vite-plugin-svelte@6.2.4': 1440 + resolution: {integrity: sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==} 1441 + engines: {node: ^20.19 || ^22.12 || >=24} 1442 + peerDependencies: 1443 + svelte: ^5.0.0 1444 + vite: ^6.3.0 || ^7.0.0 1445 + 1446 + '@tailwindcss/node@4.1.18': 1447 + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} 1448 + 1449 + '@tailwindcss/oxide-android-arm64@4.1.18': 1450 + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} 1451 + engines: {node: '>= 10'} 1452 + cpu: [arm64] 1453 + os: [android] 1454 + 1455 + '@tailwindcss/oxide-darwin-arm64@4.1.18': 1456 + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} 1457 + engines: {node: '>= 10'} 1458 + cpu: [arm64] 1459 + os: [darwin] 1460 + 1461 + '@tailwindcss/oxide-darwin-x64@4.1.18': 1462 + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} 1463 + engines: {node: '>= 10'} 1464 + cpu: [x64] 1465 + os: [darwin] 1466 + 1467 + '@tailwindcss/oxide-freebsd-x64@4.1.18': 1468 + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} 1469 + engines: {node: '>= 10'} 1470 + cpu: [x64] 1471 + os: [freebsd] 1472 + 1473 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': 1474 + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} 1475 + engines: {node: '>= 10'} 1476 + cpu: [arm] 1477 + os: [linux] 1478 + 1479 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': 1480 + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} 1481 + engines: {node: '>= 10'} 1482 + cpu: [arm64] 1483 + os: [linux] 1484 + libc: [glibc] 1485 + 1486 + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': 1487 + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} 1488 + engines: {node: '>= 10'} 1489 + cpu: [arm64] 1490 + os: [linux] 1491 + libc: [musl] 1492 + 1493 + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': 1494 + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} 1495 + engines: {node: '>= 10'} 1496 + cpu: [x64] 1497 + os: [linux] 1498 + libc: [glibc] 1499 + 1500 + '@tailwindcss/oxide-linux-x64-musl@4.1.18': 1501 + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} 1502 + engines: {node: '>= 10'} 1503 + cpu: [x64] 1504 + os: [linux] 1505 + libc: [musl] 1506 + 1507 + '@tailwindcss/oxide-wasm32-wasi@4.1.18': 1508 + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} 1509 + engines: {node: '>=14.0.0'} 1510 + cpu: [wasm32] 1511 + bundledDependencies: 1512 + - '@napi-rs/wasm-runtime' 1513 + - '@emnapi/core' 1514 + - '@emnapi/runtime' 1515 + - '@tybys/wasm-util' 1516 + - '@emnapi/wasi-threads' 1517 + - tslib 1518 + 1519 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': 1520 + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} 1521 + engines: {node: '>= 10'} 1522 + cpu: [arm64] 1523 + os: [win32] 1524 + 1525 + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': 1526 + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} 1527 + engines: {node: '>= 10'} 1528 + cpu: [x64] 1529 + os: [win32] 1530 + 1531 + '@tailwindcss/oxide@4.1.18': 1532 + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} 1533 + engines: {node: '>= 10'} 1534 + 1535 + '@tailwindcss/vite@4.1.18': 1536 + resolution: {integrity: sha512-jVA+/UpKL1vRLg6Hkao5jldawNmRo7mQYrZtNHMIVpLfLhDml5nMRUo/8MwoX2vNXvnaXNNMedrMfMugAVX1nA==} 1537 + peerDependencies: 1538 + vite: ^5.2.0 || ^6 || ^7 1539 + 1540 + '@tanstack/query-core@5.90.20': 1541 + resolution: {integrity: sha512-OMD2HLpNouXEfZJWcKeVKUgQ5n+n3A2JFmBaScpNDUqSrQSjiveC7dKMe53uJUg1nDG16ttFPz2xfilz6i2uVg==} 1542 + 1543 + '@tanstack/svelte-query@6.0.18': 1544 + resolution: {integrity: sha512-iGS8osfrIVUW5pkV4Ig6pspNIMtiNjGnVTNJKDas0m/QaNDFFIKbgg74rCzcjwrTIvO38tMpzb4VUKklvAmjxw==} 1545 + peerDependencies: 1546 + svelte: ^5.25.0 1547 + 1548 + '@tokenizer/token@0.3.0': 1549 + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} 1550 + 1551 + '@types/bn.js@5.2.0': 1552 + resolution: {integrity: sha512-DLbJ1BPqxvQhIGbeu8VbUC1DiAiahHtAYvA0ZEAa4P31F7IaArc8z3C3BRQdWX4mtLQuABG4yzp76ZrS02Ui1Q==} 1553 + 1554 + '@types/cookie@0.6.0': 1555 + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} 1556 + 1557 + '@types/elliptic@6.4.18': 1558 + resolution: {integrity: sha512-UseG6H5vjRiNpQvrhy4VF/JXdA3V/Fp5amvveaL+fs28BZ6xIKJBPnUPRlEaZpysD9MbpfaLi8lbl7PGUAkpWw==} 1559 + 1560 + '@types/estree@1.0.8': 1561 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 1562 + 1563 + '@types/http-errors@2.0.5': 1564 + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} 1565 + 1566 + '@types/json-schema@7.0.15': 1567 + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 1568 + 1569 + '@types/node@24.10.11': 1570 + resolution: {integrity: sha512-/Af7O8r1frCVgOz0I62jWUtMohJ0/ZQU/ZoketltOJPZpnb17yoNc9BSoVuV9qlaIXJiPNOpsfq4ByFajSArNQ==} 1571 + 1572 + '@types/pg@8.16.0': 1573 + resolution: {integrity: sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==} 1574 + 1575 + '@types/resolve@1.20.2': 1576 + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} 1577 + 1578 + '@typescript-eslint/eslint-plugin@8.54.0': 1579 + resolution: {integrity: sha512-hAAP5io/7csFStuOmR782YmTthKBJ9ND3WVL60hcOjvtGFb+HJxH4O5huAcmcZ9v9G8P+JETiZ/G1B8MALnWZQ==} 1580 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1581 + peerDependencies: 1582 + '@typescript-eslint/parser': ^8.54.0 1583 + eslint: ^8.57.0 || ^9.0.0 1584 + typescript: '>=4.8.4 <6.0.0' 1585 + 1586 + '@typescript-eslint/parser@8.54.0': 1587 + resolution: {integrity: sha512-BtE0k6cjwjLZoZixN0t5AKP0kSzlGu7FctRXYuPAm//aaiZhmfq1JwdYpYr1brzEspYyFeF+8XF5j2VK6oalrA==} 1588 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1589 + peerDependencies: 1590 + eslint: ^8.57.0 || ^9.0.0 1591 + typescript: '>=4.8.4 <6.0.0' 1592 + 1593 + '@typescript-eslint/project-service@8.54.0': 1594 + resolution: {integrity: sha512-YPf+rvJ1s7MyiWM4uTRhE4DvBXrEV+d8oC3P9Y2eT7S+HBS0clybdMIPnhiATi9vZOYDc7OQ1L/i6ga6NFYK/g==} 1595 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1596 + peerDependencies: 1597 + typescript: '>=4.8.4 <6.0.0' 1598 + 1599 + '@typescript-eslint/scope-manager@8.54.0': 1600 + resolution: {integrity: sha512-27rYVQku26j/PbHYcVfRPonmOlVI6gihHtXFbTdB5sb6qA0wdAQAbyXFVarQ5t4HRojIz64IV90YtsjQSSGlQg==} 1601 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1602 + 1603 + '@typescript-eslint/tsconfig-utils@8.54.0': 1604 + resolution: {integrity: sha512-dRgOyT2hPk/JwxNMZDsIXDgyl9axdJI3ogZ2XWhBPsnZUv+hPesa5iuhdYt2gzwA9t8RE5ytOJ6xB0moV0Ujvw==} 1605 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1606 + peerDependencies: 1607 + typescript: '>=4.8.4 <6.0.0' 1608 + 1609 + '@typescript-eslint/type-utils@8.54.0': 1610 + resolution: {integrity: sha512-hiLguxJWHjjwL6xMBwD903ciAwd7DmK30Y9Axs/etOkftC3ZNN9K44IuRD/EB08amu+Zw6W37x9RecLkOo3pMA==} 1611 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1612 + peerDependencies: 1613 + eslint: ^8.57.0 || ^9.0.0 1614 + typescript: '>=4.8.4 <6.0.0' 1615 + 1616 + '@typescript-eslint/types@8.54.0': 1617 + resolution: {integrity: sha512-PDUI9R1BVjqu7AUDsRBbKMtwmjWcn4J3le+5LpcFgWULN3LvHC5rkc9gCVxbrsrGmO1jfPybN5s6h4Jy+OnkAA==} 1618 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1619 + 1620 + '@typescript-eslint/typescript-estree@8.54.0': 1621 + resolution: {integrity: sha512-BUwcskRaPvTk6fzVWgDPdUndLjB87KYDrN5EYGetnktoeAvPtO4ONHlAZDnj5VFnUANg0Sjm7j4usBlnoVMHwA==} 1622 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1623 + peerDependencies: 1624 + typescript: '>=4.8.4 <6.0.0' 1625 + 1626 + '@typescript-eslint/utils@8.54.0': 1627 + resolution: {integrity: sha512-9Cnda8GS57AQakvRyG0PTejJNlA2xhvyNtEVIMlDWOOeEyBkYWhGPnfrIAnqxLMTSTo6q8g12XVjjev5l1NvMA==} 1628 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1629 + peerDependencies: 1630 + eslint: ^8.57.0 || ^9.0.0 1631 + typescript: '>=4.8.4 <6.0.0' 1632 + 1633 + '@typescript-eslint/visitor-keys@8.54.0': 1634 + resolution: {integrity: sha512-VFlhGSl4opC0bprJiItPQ1RfUhGDIBokcPwaFH4yiBCaNPeld/9VeXbiPO1cLyorQi1G1vL+ecBk1x8o1axORA==} 1635 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1636 + 1637 + abort-controller@3.0.0: 1638 + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 1639 + engines: {node: '>=6.5'} 1640 + 1641 + accepts@1.3.8: 1642 + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 1643 + engines: {node: '>= 0.6'} 1644 + 1645 + acorn-jsx@5.3.2: 1646 + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 1647 + peerDependencies: 1648 + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 1649 + 1650 + acorn@8.15.0: 1651 + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 1652 + engines: {node: '>=0.4.0'} 1653 + hasBin: true 1654 + 1655 + ajv@6.12.6: 1656 + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 1657 + 1658 + ansi-regex@5.0.1: 1659 + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1660 + engines: {node: '>=8'} 1661 + 1662 + ansi-regex@6.2.2: 1663 + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} 1664 + engines: {node: '>=12'} 1665 + 1666 + ansi-styles@4.3.0: 1667 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1668 + engines: {node: '>=8'} 1669 + 1670 + ansi-styles@6.2.3: 1671 + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} 1672 + engines: {node: '>=12'} 1673 + 1674 + argparse@2.0.1: 1675 + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1676 + 1677 + aria-query@5.3.2: 1678 + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} 1679 + engines: {node: '>= 0.4'} 1680 + 1681 + array-flatten@1.1.1: 1682 + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 1683 + 1684 + asn1.js@5.4.1: 1685 + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} 1686 + 1687 + asynckit@0.4.0: 1688 + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 1689 + 1690 + atomic-sleep@1.0.0: 1691 + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 1692 + engines: {node: '>=8.0.0'} 1693 + 1694 + await-lock@2.2.2: 1695 + resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} 1696 + 1697 + axios@1.13.4: 1698 + resolution: {integrity: sha512-1wVkUaAO6WyaYtCkcYCOx12ZgpGf9Zif+qXa4n+oYzK558YryKqiL6UWwd5DqiH3VRW0GYhTZQ/vlgJrCoNQlg==} 1699 + 1700 + axobject-query@4.1.0: 1701 + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} 1702 + engines: {node: '>= 0.4'} 1703 + 1704 + balanced-match@1.0.2: 1705 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1706 + 1707 + base64-js@1.5.1: 1708 + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 1709 + 1710 + better-sqlite3@10.1.0: 1711 + resolution: {integrity: sha512-hqpHJaCfKEZFaAWdMh6crdzRWyzQzfP6Ih8TYI0vFn01a6ZTDSbJIMXN+6AMBaBOh99DzUy8l3PsV9R3qnJDng==} 1712 + 1713 + big-integer@1.6.52: 1714 + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} 1715 + engines: {node: '>=0.6'} 1716 + 1717 + bignumber.js@9.3.1: 1718 + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} 1719 + 1720 + bindings@1.5.0: 1721 + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} 1722 + 1723 + bl@4.1.0: 1724 + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} 1725 + 1726 + bn.js@4.12.2: 1727 + resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} 1728 + 1729 + body-parser@1.20.4: 1730 + resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} 1731 + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1732 + 1733 + bowser@2.13.1: 1734 + resolution: {integrity: sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==} 1735 + 1736 + brace-expansion@1.1.12: 1737 + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 1738 + 1739 + brace-expansion@2.0.2: 1740 + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} 1741 + 1742 + brorand@1.1.0: 1743 + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} 1744 + 1745 + buffer@5.6.0: 1746 + resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} 1747 + 1748 + buffer@5.7.1: 1749 + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 1750 + 1751 + buffer@6.0.3: 1752 + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 1753 + 1754 + bytes@3.1.2: 1755 + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 1756 + engines: {node: '>= 0.8'} 1757 + 1758 + call-bind-apply-helpers@1.0.2: 1759 + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 1760 + engines: {node: '>= 0.4'} 1761 + 1762 + call-bound@1.0.4: 1763 + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 1764 + engines: {node: '>= 0.4'} 1765 + 1766 + callsites@3.1.0: 1767 + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1768 + engines: {node: '>=6'} 1769 + 1770 + cborg@1.10.2: 1771 + resolution: {integrity: sha512-b3tFPA9pUr2zCUiCfRd2+wok2/LBSNUMKOuRRok+WlvvAgEt/PlbgPTsZUcwCOs53IJvLgTp0eotwtosE6njug==} 1772 + hasBin: true 1773 + 1774 + chalk@4.1.2: 1775 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1776 + engines: {node: '>=10'} 1777 + 1778 + chokidar@4.0.3: 1779 + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 1780 + engines: {node: '>= 14.16.0'} 1781 + 1782 + chownr@1.1.4: 1783 + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} 1784 + 1785 + cliui@8.0.1: 1786 + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 1787 + engines: {node: '>=12'} 1788 + 1789 + clsx@2.1.1: 1790 + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 1791 + engines: {node: '>=6'} 1792 + 1793 + cluster-key-slot@1.1.2: 1794 + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} 1795 + engines: {node: '>=0.10.0'} 1796 + 1797 + cockatiel@3.2.1: 1798 + resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==} 1799 + engines: {node: '>=16'} 1800 + 1801 + color-convert@2.0.1: 1802 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1803 + engines: {node: '>=7.0.0'} 1804 + 1805 + color-name@1.1.4: 1806 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1807 + 1808 + color-string@1.9.1: 1809 + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} 1810 + 1811 + color@4.2.3: 1812 + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} 1813 + engines: {node: '>=12.5.0'} 1814 + 1815 + combined-stream@1.0.8: 1816 + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1817 + engines: {node: '>= 0.8'} 1818 + 1819 + commondir@1.0.1: 1820 + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} 1821 + 1822 + compressible@2.0.18: 1823 + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} 1824 + engines: {node: '>= 0.6'} 1825 + 1826 + compression@1.8.1: 1827 + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} 1828 + engines: {node: '>= 0.8.0'} 1829 + 1830 + concat-map@0.0.1: 1831 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1832 + 1833 + content-disposition@0.5.4: 1834 + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 1835 + engines: {node: '>= 0.6'} 1836 + 1837 + content-type@1.0.5: 1838 + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 1839 + engines: {node: '>= 0.6'} 1840 + 1841 + cookie-signature@1.0.7: 1842 + resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} 1843 + 1844 + cookie@0.6.0: 1845 + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 1846 + engines: {node: '>= 0.6'} 1847 + 1848 + cookie@0.7.2: 1849 + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 1850 + engines: {node: '>= 0.6'} 1851 + 1852 + core-js@3.48.0: 1853 + resolution: {integrity: sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ==} 1854 + 1855 + cors@2.8.6: 1856 + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} 1857 + engines: {node: '>= 0.10'} 1858 + 1859 + cross-spawn@7.0.6: 1860 + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 1861 + engines: {node: '>= 8'} 1862 + 1863 + cssesc@3.0.0: 1864 + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 1865 + engines: {node: '>=4'} 1866 + hasBin: true 1867 + 1868 + debug@2.6.9: 1869 + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1870 + peerDependencies: 1871 + supports-color: '*' 1872 + peerDependenciesMeta: 1873 + supports-color: 1874 + optional: true 1875 + 1876 + debug@4.4.3: 1877 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 1878 + engines: {node: '>=6.0'} 1879 + peerDependencies: 1880 + supports-color: '*' 1881 + peerDependenciesMeta: 1882 + supports-color: 1883 + optional: true 1884 + 1885 + decompress-response@6.0.0: 1886 + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} 1887 + engines: {node: '>=10'} 1888 + 1889 + deep-extend@0.6.0: 1890 + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 1891 + engines: {node: '>=4.0.0'} 1892 + 1893 + deep-is@0.1.4: 1894 + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1895 + 1896 + deepmerge@4.3.1: 1897 + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1898 + engines: {node: '>=0.10.0'} 1899 + 1900 + delay@5.0.0: 1901 + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} 1902 + engines: {node: '>=10'} 1903 + 1904 + delayed-stream@1.0.0: 1905 + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1906 + engines: {node: '>=0.4.0'} 1907 + 1908 + denque@2.1.0: 1909 + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} 1910 + engines: {node: '>=0.10'} 1911 + 1912 + depd@2.0.0: 1913 + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 1914 + engines: {node: '>= 0.8'} 1915 + 1916 + destroy@1.2.0: 1917 + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 1918 + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1919 + 1920 + detect-libc@2.1.2: 1921 + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} 1922 + engines: {node: '>=8'} 1923 + 1924 + devalue@5.6.2: 1925 + resolution: {integrity: sha512-nPRkjWzzDQlsejL1WVifk5rvcFi/y1onBRxjaFMjZeR9mFpqu2gmAZ9xUB9/IEanEP/vBtGeGganC/GO1fmufg==} 1926 + 1927 + disposable-email-domains-js@1.21.0: 1928 + resolution: {integrity: sha512-PKRzcII8n40uiMUYMVjFTlubk8VwWHdbJth1bBtWswjwiI88j1Uw8FVrfXQvHnj56Z8P9nCkcCn/i5VF4u47Cw==} 1929 + 1930 + dom-mutator@0.6.0: 1931 + resolution: {integrity: sha512-iCt9o0aYfXMUkz/43ZOAUFQYotjGB+GNbYJiJdz4TgXkyToXbbRy5S6FbTp72lRBtfpUMwEc1KmpFEU4CZeoNg==} 1932 + engines: {node: '>=10'} 1933 + 1934 + dom-serializer@1.4.1: 1935 + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} 1936 + 1937 + domelementtype@2.3.0: 1938 + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 1939 + 1940 + domhandler@4.3.1: 1941 + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} 1942 + engines: {node: '>= 4'} 1943 + 1944 + domutils@2.8.0: 1945 + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} 1946 + 1947 + dotenv@16.6.1: 1948 + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} 1949 + engines: {node: '>=12'} 1950 + 1951 + dotenv@17.2.4: 1952 + resolution: {integrity: sha512-mudtfb4zRB4bVvdj0xRo+e6duH1csJRM8IukBqfTRvHotn9+LBXB8ynAidP9zHqoRC/fsllXgk4kCKlR21fIhw==} 1953 + engines: {node: '>=12'} 1954 + 1955 + dunder-proto@1.0.1: 1956 + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 1957 + engines: {node: '>= 0.4'} 1958 + 1959 + eastasianwidth@0.2.0: 1960 + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 1961 + 1962 + ee-first@1.1.1: 1963 + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 1964 + 1965 + elliptic@6.6.1: 1966 + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} 1967 + 1968 + emoji-regex@8.0.0: 1969 + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1970 + 1971 + emoji-regex@9.2.2: 1972 + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 1973 + 1974 + encodeurl@2.0.0: 1975 + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 1976 + engines: {node: '>= 0.8'} 1977 + 1978 + end-of-stream@1.4.5: 1979 + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} 1980 + 1981 + enhanced-resolve@5.19.0: 1982 + resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} 1983 + engines: {node: '>=10.13.0'} 1984 + 1985 + entities@2.2.0: 1986 + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} 1987 + 1988 + es-define-property@1.0.1: 1989 + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 1990 + engines: {node: '>= 0.4'} 1991 + 1992 + es-errors@1.3.0: 1993 + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 1994 + engines: {node: '>= 0.4'} 1995 + 1996 + es-object-atoms@1.1.1: 1997 + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 1998 + engines: {node: '>= 0.4'} 1999 + 2000 + es-set-tostringtag@2.1.0: 2001 + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 2002 + engines: {node: '>= 0.4'} 2003 + 2004 + esbuild@0.27.3: 2005 + resolution: {integrity: sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==} 2006 + engines: {node: '>=18'} 2007 + hasBin: true 2008 + 2009 + escalade@3.2.0: 2010 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 2011 + engines: {node: '>=6'} 2012 + 2013 + escape-html@1.0.3: 2014 + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 2015 + 2016 + escape-string-regexp@4.0.0: 2017 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 2018 + engines: {node: '>=10'} 2019 + 2020 + eslint-config-prettier@10.1.8: 2021 + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} 2022 + hasBin: true 2023 + peerDependencies: 2024 + eslint: '>=7.0.0' 2025 + 2026 + eslint-plugin-svelte@3.14.0: 2027 + resolution: {integrity: sha512-Isw0GvaMm0yHxAj71edAdGFh28ufYs+6rk2KlbbZphnqZAzrH3Se3t12IFh2H9+1F/jlDhBBL4oiOJmLqmYX0g==} 2028 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2029 + peerDependencies: 2030 + eslint: ^8.57.1 || ^9.0.0 2031 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 2032 + peerDependenciesMeta: 2033 + svelte: 2034 + optional: true 2035 + 2036 + eslint-scope@8.4.0: 2037 + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} 2038 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2039 + 2040 + eslint-visitor-keys@3.4.3: 2041 + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 2042 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2043 + 2044 + eslint-visitor-keys@4.2.1: 2045 + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} 2046 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2047 + 2048 + eslint@9.39.2: 2049 + resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} 2050 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2051 + hasBin: true 2052 + peerDependencies: 2053 + jiti: '*' 2054 + peerDependenciesMeta: 2055 + jiti: 2056 + optional: true 2057 + 2058 + esm-env@1.2.2: 2059 + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 2060 + 2061 + espree@10.4.0: 2062 + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} 2063 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2064 + 2065 + esquery@1.7.0: 2066 + resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} 2067 + engines: {node: '>=0.10'} 2068 + 2069 + esrap@2.2.2: 2070 + resolution: {integrity: sha512-zA6497ha+qKvoWIK+WM9NAh5ni17sKZKhbS5B3PoYbBvaYHZWoS33zmFybmyqpn07RLUxSmn+RCls2/XF+d0oQ==} 2071 + 2072 + esrecurse@4.3.0: 2073 + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 2074 + engines: {node: '>=4.0'} 2075 + 2076 + estraverse@5.3.0: 2077 + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 2078 + engines: {node: '>=4.0'} 2079 + 2080 + estree-walker@2.0.2: 2081 + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 2082 + 2083 + esutils@2.0.3: 2084 + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 2085 + engines: {node: '>=0.10.0'} 2086 + 2087 + etag@1.8.1: 2088 + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 2089 + engines: {node: '>= 0.6'} 2090 + 2091 + etcd3@1.1.2: 2092 + resolution: {integrity: sha512-YIampCz1/OmrVo/tR3QltAVUtYCQQOSFoqmHKKeoHbalm+WdXe3l4rhLIylklu8EzR/I3PBiOF4dC847dDskKg==} 2093 + engines: {node: '>=16'} 2094 + 2095 + event-target-shim@5.0.1: 2096 + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 2097 + engines: {node: '>=6'} 2098 + 2099 + eventemitter3@4.0.7: 2100 + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} 2101 + 2102 + events@3.3.0: 2103 + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 2104 + engines: {node: '>=0.8.x'} 2105 + 2106 + expand-template@2.0.3: 2107 + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} 2108 + engines: {node: '>=6'} 2109 + 2110 + express-async-errors@3.1.1: 2111 + resolution: {integrity: sha512-h6aK1da4tpqWSbyCa3FxB/V6Ehd4EEB15zyQq9qe75OZBp0krinNKuH4rAY+S/U/2I36vdLAUFSjQJ+TFmODng==} 2112 + peerDependencies: 2113 + express: ^4.16.2 2114 + 2115 + express@4.22.1: 2116 + resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} 2117 + engines: {node: '>= 0.10.0'} 2118 + 2119 + fast-deep-equal@3.1.3: 2120 + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 2121 + 2122 + fast-json-stable-stringify@2.1.0: 2123 + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 2124 + 2125 + fast-levenshtein@2.0.6: 2126 + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 2127 + 2128 + fast-printf@1.6.10: 2129 + resolution: {integrity: sha512-GwTgG9O4FVIdShhbVF3JxOgSBY2+ePGsu2V/UONgoCPzF9VY6ZdBMKsHKCYQHZwNk3qNouUolRDsgVxcVA5G1w==} 2130 + engines: {node: '>=10.0'} 2131 + 2132 + fast-redact@3.5.0: 2133 + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} 2134 + engines: {node: '>=6'} 2135 + 2136 + fast-xml-parser@5.3.4: 2137 + resolution: {integrity: sha512-EFd6afGmXlCx8H8WTZHhAoDaWaGyuIBoZJ2mknrNxug+aZKjkp0a0dlars9Izl+jF+7Gu1/5f/2h68cQpe0IiA==} 2138 + hasBin: true 2139 + 2140 + fdir@6.5.0: 2141 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 2142 + engines: {node: '>=12.0.0'} 2143 + peerDependencies: 2144 + picomatch: ^3 || ^4 2145 + peerDependenciesMeta: 2146 + picomatch: 2147 + optional: true 2148 + 2149 + file-entry-cache@8.0.0: 2150 + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 2151 + engines: {node: '>=16.0.0'} 2152 + 2153 + file-type@16.5.4: 2154 + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} 2155 + engines: {node: '>=10'} 2156 + 2157 + file-uri-to-path@1.0.0: 2158 + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} 2159 + 2160 + finalhandler@1.3.2: 2161 + resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} 2162 + engines: {node: '>= 0.8'} 2163 + 2164 + find-up@5.0.0: 2165 + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 2166 + engines: {node: '>=10'} 2167 + 2168 + flat-cache@4.0.1: 2169 + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 2170 + engines: {node: '>=16'} 2171 + 2172 + flatted@3.3.3: 2173 + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 2174 + 2175 + follow-redirects@1.15.11: 2176 + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} 2177 + engines: {node: '>=4.0'} 2178 + peerDependencies: 2179 + debug: '*' 2180 + peerDependenciesMeta: 2181 + debug: 2182 + optional: true 2183 + 2184 + foreground-child@3.3.1: 2185 + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 2186 + engines: {node: '>=14'} 2187 + 2188 + form-data@4.0.5: 2189 + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} 2190 + engines: {node: '>= 6'} 2191 + 2192 + forwarded@0.2.0: 2193 + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 2194 + engines: {node: '>= 0.6'} 2195 + 2196 + french-badwords-list@1.0.7: 2197 + resolution: {integrity: sha512-H1ziKs2PJh2+UXZ9oCGJ/rRQpsI9NBykGf2Sc7WaKaj1OnWFuBXfsvANTdRcfVmOghGQaUmRyZ1hJOPbDpy04Q==} 2198 + 2199 + fresh@0.5.2: 2200 + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 2201 + engines: {node: '>= 0.6'} 2202 + 2203 + fs-constants@1.0.0: 2204 + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} 2205 + 2206 + fsevents@2.3.3: 2207 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 2208 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2209 + os: [darwin] 2210 + 2211 + function-bind@1.1.2: 2212 + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 2213 + 2214 + get-caller-file@2.0.5: 2215 + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 2216 + engines: {node: 6.* || 8.* || >= 10.*} 2217 + 2218 + get-intrinsic@1.3.0: 2219 + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 2220 + engines: {node: '>= 0.4'} 2221 + 2222 + get-port@5.1.1: 2223 + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} 2224 + engines: {node: '>=8'} 2225 + 2226 + get-proto@1.0.1: 2227 + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 2228 + engines: {node: '>= 0.4'} 2229 + 2230 + github-from-package@0.0.0: 2231 + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} 2232 + 2233 + glob-parent@6.0.2: 2234 + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 2235 + engines: {node: '>=10.13.0'} 2236 + 2237 + glob@10.5.0: 2238 + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} 2239 + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me 2240 + hasBin: true 2241 + 2242 + globals@14.0.0: 2243 + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 2244 + engines: {node: '>=18'} 2245 + 2246 + globals@16.5.0: 2247 + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} 2248 + engines: {node: '>=18'} 2249 + 2250 + globals@17.3.0: 2251 + resolution: {integrity: sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==} 2252 + engines: {node: '>=18'} 2253 + 2254 + gopd@1.2.0: 2255 + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 2256 + engines: {node: '>= 0.4'} 2257 + 2258 + graceful-fs@4.2.11: 2259 + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 2260 + 2261 + handlebars@4.7.8: 2262 + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} 2263 + engines: {node: '>=0.4.7'} 2264 + hasBin: true 2265 + 2266 + has-flag@4.0.0: 2267 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 2268 + engines: {node: '>=8'} 2269 + 2270 + has-symbols@1.1.0: 2271 + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 2272 + engines: {node: '>= 0.4'} 2273 + 2274 + has-tostringtag@1.0.2: 2275 + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 2276 + engines: {node: '>= 0.4'} 2277 + 2278 + hash.js@1.1.7: 2279 + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} 2280 + 2281 + hasown@2.0.2: 2282 + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 2283 + engines: {node: '>= 0.4'} 2284 + 2285 + he@1.2.0: 2286 + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 2287 + hasBin: true 2288 + 2289 + hmac-drbg@1.0.1: 2290 + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} 2291 + 2292 + html-to-text@7.1.1: 2293 + resolution: {integrity: sha512-c9QWysrfnRZevVpS8MlE7PyOdSuIOjg8Bt8ZE10jMU/BEngA6j3llj4GRfAmtQzcd1FjKE0sWu5IHXRUH9YxIQ==} 2294 + engines: {node: '>=10.23.2'} 2295 + hasBin: true 2296 + 2297 + htmlparser2@6.1.0: 2298 + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} 2299 + 2300 + http-errors@2.0.1: 2301 + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} 2302 + engines: {node: '>= 0.8'} 2303 + 2304 + http-terminator@3.2.0: 2305 + resolution: {integrity: sha512-JLjck1EzPaWjsmIf8bziM3p9fgR1Y3JoUKAkyYEbZmFrIvJM6I8vVJfBGWlEtV9IWOvzNnaTtjuwZeBY2kwB4g==} 2306 + engines: {node: '>=14'} 2307 + 2308 + iconv-lite@0.4.24: 2309 + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 2310 + engines: {node: '>=0.10.0'} 2311 + 2312 + ieee754@1.2.1: 2313 + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 2314 + 2315 + ignore@5.3.2: 2316 + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 2317 + engines: {node: '>= 4'} 2318 + 2319 + ignore@7.0.5: 2320 + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} 2321 + engines: {node: '>= 4'} 2322 + 2323 + import-fresh@3.3.1: 2324 + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 2325 + engines: {node: '>=6'} 2326 + 2327 + imurmurhash@0.1.4: 2328 + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 2329 + engines: {node: '>=0.8.19'} 2330 + 2331 + inherits@2.0.4: 2332 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2333 + 2334 + ini@1.3.8: 2335 + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 2336 + 2337 + ioredis@5.9.2: 2338 + resolution: {integrity: sha512-tAAg/72/VxOUW7RQSX1pIxJVucYKcjFjfvj60L57jrZpYCHC3XN0WCQ3sNYL4Gmvv+7GPvTAjc+KSdeNuE8oWQ==} 2339 + engines: {node: '>=12.22.0'} 2340 + 2341 + ipaddr.js@1.9.1: 2342 + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 2343 + engines: {node: '>= 0.10'} 2344 + 2345 + ipaddr.js@2.3.0: 2346 + resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} 2347 + engines: {node: '>= 10'} 2348 + 2349 + is-arrayish@0.3.4: 2350 + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} 2351 + 2352 + is-core-module@2.16.1: 2353 + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 2354 + engines: {node: '>= 0.4'} 2355 + 2356 + is-extglob@2.1.1: 2357 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2358 + engines: {node: '>=0.10.0'} 2359 + 2360 + is-fullwidth-code-point@3.0.0: 2361 + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 2362 + engines: {node: '>=8'} 2363 + 2364 + is-glob@4.0.3: 2365 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2366 + engines: {node: '>=0.10.0'} 2367 + 2368 + is-module@1.0.0: 2369 + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} 2370 + 2371 + is-reference@1.2.1: 2372 + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} 2373 + 2374 + is-reference@3.0.3: 2375 + resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} 2376 + 2377 + isexe@2.0.0: 2378 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2379 + 2380 + iso-datestring-validator@2.2.2: 2381 + resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 2382 + 2383 + jackspeak@3.4.3: 2384 + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 2385 + 2386 + jiti@2.6.1: 2387 + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 2388 + hasBin: true 2389 + 2390 + jose@5.10.0: 2391 + resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} 2392 + 2393 + js-yaml@4.1.1: 2394 + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} 2395 + hasBin: true 2396 + 2397 + json-buffer@3.0.1: 2398 + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 2399 + 2400 + json-schema-traverse@0.4.1: 2401 + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2402 + 2403 + json-stable-stringify-without-jsonify@1.0.1: 2404 + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2405 + 2406 + key-encoder@2.0.3: 2407 + resolution: {integrity: sha512-fgBtpAGIr/Fy5/+ZLQZIPPhsZEcbSlYu/Wu96tNDFNSjSACw5lEIOFeaVdQ/iwrb8oxjlWi6wmWdH76hV6GZjg==} 2408 + 2409 + keyv@4.5.4: 2410 + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 2411 + 2412 + kleur@4.1.5: 2413 + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 2414 + engines: {node: '>=6'} 2415 + 2416 + known-css-properties@0.37.0: 2417 + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} 2418 + 2419 + kysely@0.22.0: 2420 + resolution: {integrity: sha512-ZE3qWtnqLOalodzfK5QUEcm7AEulhxsPNuKaGFsC3XiqO92vMLm+mAHk/NnbSIOtC4RmGm0nsv700i8KDp1gfQ==} 2421 + engines: {node: '>=14.0.0'} 2422 + 2423 + kysely@0.23.5: 2424 + resolution: {integrity: sha512-TH+b56pVXQq0tsyooYLeNfV11j6ih7D50dyN8tkM0e7ndiUH28Nziojiog3qRFlmEj9XePYdZUrNJ2079Qjdow==} 2425 + engines: {node: '>=14.0.0'} 2426 + 2427 + lande@1.0.10: 2428 + resolution: {integrity: sha512-yT52DQh+UV2pEp08jOYrA4drDv0DbjpiRyZYgl25ak9G2cVR2AimzrqkYQWrD9a7Ud+qkAcaiDDoNH9DXfHPmw==} 2429 + 2430 + leo-profanity@1.9.0: 2431 + resolution: {integrity: sha512-vMrrrjsbT+fA5I/1rlBEVT5YjJsw1ASIVF8/xBEdZ6ylsg5AEIBrEvHxwe5XAmfVuTBi7aw2KcO2L3s9ddpKzw==} 2432 + engines: {node: '>=18'} 2433 + 2434 + levn@0.4.1: 2435 + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2436 + engines: {node: '>= 0.8.0'} 2437 + 2438 + lightningcss-android-arm64@1.30.2: 2439 + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} 2440 + engines: {node: '>= 12.0.0'} 2441 + cpu: [arm64] 2442 + os: [android] 2443 + 2444 + lightningcss-darwin-arm64@1.30.2: 2445 + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} 2446 + engines: {node: '>= 12.0.0'} 2447 + cpu: [arm64] 2448 + os: [darwin] 2449 + 2450 + lightningcss-darwin-x64@1.30.2: 2451 + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} 2452 + engines: {node: '>= 12.0.0'} 2453 + cpu: [x64] 2454 + os: [darwin] 2455 + 2456 + lightningcss-freebsd-x64@1.30.2: 2457 + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} 2458 + engines: {node: '>= 12.0.0'} 2459 + cpu: [x64] 2460 + os: [freebsd] 2461 + 2462 + lightningcss-linux-arm-gnueabihf@1.30.2: 2463 + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} 2464 + engines: {node: '>= 12.0.0'} 2465 + cpu: [arm] 2466 + os: [linux] 2467 + 2468 + lightningcss-linux-arm64-gnu@1.30.2: 2469 + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} 2470 + engines: {node: '>= 12.0.0'} 2471 + cpu: [arm64] 2472 + os: [linux] 2473 + libc: [glibc] 2474 + 2475 + lightningcss-linux-arm64-musl@1.30.2: 2476 + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} 2477 + engines: {node: '>= 12.0.0'} 2478 + cpu: [arm64] 2479 + os: [linux] 2480 + libc: [musl] 2481 + 2482 + lightningcss-linux-x64-gnu@1.30.2: 2483 + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} 2484 + engines: {node: '>= 12.0.0'} 2485 + cpu: [x64] 2486 + os: [linux] 2487 + libc: [glibc] 2488 + 2489 + lightningcss-linux-x64-musl@1.30.2: 2490 + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} 2491 + engines: {node: '>= 12.0.0'} 2492 + cpu: [x64] 2493 + os: [linux] 2494 + libc: [musl] 2495 + 2496 + lightningcss-win32-arm64-msvc@1.30.2: 2497 + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} 2498 + engines: {node: '>= 12.0.0'} 2499 + cpu: [arm64] 2500 + os: [win32] 2501 + 2502 + lightningcss-win32-x64-msvc@1.30.2: 2503 + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} 2504 + engines: {node: '>= 12.0.0'} 2505 + cpu: [x64] 2506 + os: [win32] 2507 + 2508 + lightningcss@1.30.2: 2509 + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} 2510 + engines: {node: '>= 12.0.0'} 2511 + 2512 + lilconfig@2.1.0: 2513 + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 2514 + engines: {node: '>=10'} 2515 + 2516 + locate-character@3.0.0: 2517 + resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} 2518 + 2519 + locate-path@6.0.0: 2520 + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2521 + engines: {node: '>=10'} 2522 + 2523 + lodash.camelcase@4.3.0: 2524 + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} 2525 + 2526 + lodash.defaults@4.2.0: 2527 + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} 2528 + 2529 + lodash.isarguments@3.1.0: 2530 + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} 2531 + 2532 + lodash.merge@4.6.2: 2533 + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2534 + 2535 + long@5.3.2: 2536 + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} 2537 + 2538 + lru-cache@10.4.3: 2539 + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 2540 + 2541 + lucide-svelte@0.563.0: 2542 + resolution: {integrity: sha512-pjZKw7TpQcamfQrx7YdbOHgmrcNeKiGGMD0tKZQaVktwSsbqw28CsKc2Q97ttwjytiCWkJyOa8ij2Q+Og0nPfQ==} 2543 + peerDependencies: 2544 + svelte: ^3 || ^4 || ^5.0.0-next.42 2545 + 2546 + magic-string@0.30.21: 2547 + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} 2548 + 2549 + math-intrinsics@1.1.0: 2550 + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 2551 + engines: {node: '>= 0.4'} 2552 + 2553 + media-typer@0.3.0: 2554 + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 2555 + engines: {node: '>= 0.6'} 2556 + 2557 + merge-descriptors@1.0.3: 2558 + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} 2559 + 2560 + methods@1.1.2: 2561 + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 2562 + engines: {node: '>= 0.6'} 2563 + 2564 + mime-db@1.52.0: 2565 + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 2566 + engines: {node: '>= 0.6'} 2567 + 2568 + mime-db@1.54.0: 2569 + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} 2570 + engines: {node: '>= 0.6'} 2571 + 2572 + mime-types@2.1.35: 2573 + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 2574 + engines: {node: '>= 0.6'} 2575 + 2576 + mime@1.6.0: 2577 + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 2578 + engines: {node: '>=4'} 2579 + hasBin: true 2580 + 2581 + mimic-response@3.1.0: 2582 + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} 2583 + engines: {node: '>=10'} 2584 + 2585 + minimalistic-assert@1.0.1: 2586 + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} 2587 + 2588 + minimalistic-crypto-utils@1.0.1: 2589 + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} 2590 + 2591 + minimatch@3.1.2: 2592 + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2593 + 2594 + minimatch@9.0.5: 2595 + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 2596 + engines: {node: '>=16 || 14 >=14.17'} 2597 + 2598 + minimist@1.2.8: 2599 + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 2600 + 2601 + minipass@7.1.2: 2602 + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 2603 + engines: {node: '>=16 || 14 >=14.17'} 2604 + 2605 + mkdirp-classic@0.5.3: 2606 + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} 2607 + 2608 + mri@1.2.0: 2609 + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 2610 + engines: {node: '>=4'} 2611 + 2612 + mrmime@2.0.1: 2613 + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} 2614 + engines: {node: '>=10'} 2615 + 2616 + ms@2.0.0: 2617 + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 2618 + 2619 + ms@2.1.3: 2620 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 2621 + 2622 + multiformats@9.9.0: 2623 + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 2624 + 2625 + murmurhash@2.0.1: 2626 + resolution: {integrity: sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew==} 2627 + 2628 + nanoid@3.3.11: 2629 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 2630 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2631 + hasBin: true 2632 + 2633 + napi-build-utils@2.0.0: 2634 + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} 2635 + 2636 + natural-compare@1.4.0: 2637 + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 2638 + 2639 + negotiator@0.6.3: 2640 + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 2641 + engines: {node: '>= 0.6'} 2642 + 2643 + negotiator@0.6.4: 2644 + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} 2645 + engines: {node: '>= 0.6'} 2646 + 2647 + neo-async@2.6.2: 2648 + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 2649 + 2650 + node-abi@3.87.0: 2651 + resolution: {integrity: sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==} 2652 + engines: {node: '>=10'} 2653 + 2654 + nodemailer-html-to-text@3.2.0: 2655 + resolution: {integrity: sha512-RJUC6640QV1PzTHHapOrc6IzrAJUZtk2BdVdINZ9VTLm+mcQNyBO9LYyhrnufkzqiD9l8hPLJ97rSyK4WanPNg==} 2656 + engines: {node: '>= 10.23.0'} 2657 + 2658 + nodemailer@6.10.1: 2659 + resolution: {integrity: sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==} 2660 + engines: {node: '>=6.0.0'} 2661 + 2662 + object-assign@4.1.1: 2663 + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2664 + engines: {node: '>=0.10.0'} 2665 + 2666 + object-inspect@1.13.4: 2667 + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 2668 + engines: {node: '>= 0.4'} 2669 + 2670 + obug@2.1.1: 2671 + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} 2672 + 2673 + on-exit-leak-free@2.1.2: 2674 + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} 2675 + engines: {node: '>=14.0.0'} 2676 + 2677 + on-finished@2.4.1: 2678 + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 2679 + engines: {node: '>= 0.8'} 2680 + 2681 + on-headers@1.1.0: 2682 + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} 2683 + engines: {node: '>= 0.8'} 2684 + 2685 + once@1.4.0: 2686 + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2687 + 2688 + one-webcrypto@1.0.3: 2689 + resolution: {integrity: sha512-fu9ywBVBPx0gS9K0etIROTiCkvI5S1TDjFsYFb3rC1ewFxeOqsbzq7aIMBHsYfrTHBcGXJaONXXjTl8B01cW1Q==} 2690 + 2691 + optionator@0.9.4: 2692 + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 2693 + engines: {node: '>= 0.8.0'} 2694 + 2695 + p-finally@1.0.0: 2696 + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} 2697 + engines: {node: '>=4'} 2698 + 2699 + p-limit@3.1.0: 2700 + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2701 + engines: {node: '>=10'} 2702 + 2703 + p-locate@5.0.0: 2704 + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 2705 + engines: {node: '>=10'} 2706 + 2707 + p-queue@6.6.2: 2708 + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} 2709 + engines: {node: '>=8'} 2710 + 2711 + p-timeout@3.2.0: 2712 + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} 2713 + engines: {node: '>=8'} 2714 + 2715 + p-wait-for@3.2.0: 2716 + resolution: {integrity: sha512-wpgERjNkLrBiFmkMEjuZJEWKKDrNfHCKA1OhyN1wg1FrLkULbviEy6py1AyJUgZ72YWFbZ38FIpnqvVqAlDUwA==} 2717 + engines: {node: '>=8'} 2718 + 2719 + package-json-from-dist@1.0.1: 2720 + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 2721 + 2722 + parent-module@1.0.1: 2723 + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 2724 + engines: {node: '>=6'} 2725 + 2726 + parseurl@1.3.3: 2727 + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 2728 + engines: {node: '>= 0.8'} 2729 + 2730 + path-exists@4.0.0: 2731 + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 2732 + engines: {node: '>=8'} 2733 + 2734 + path-key@3.1.1: 2735 + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 2736 + engines: {node: '>=8'} 2737 + 2738 + path-parse@1.0.7: 2739 + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2740 + 2741 + path-scurry@1.11.1: 2742 + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 2743 + engines: {node: '>=16 || 14 >=14.18'} 2744 + 2745 + path-to-regexp@0.1.12: 2746 + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} 2747 + 2748 + peek-readable@4.1.0: 2749 + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} 2750 + engines: {node: '>=8'} 2751 + 2752 + pg-cloudflare@1.3.0: 2753 + resolution: {integrity: sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ==} 2754 + 2755 + pg-connection-string@2.11.0: 2756 + resolution: {integrity: sha512-kecgoJwhOpxYU21rZjULrmrBJ698U2RxXofKVzOn5UDj61BPj/qMb7diYUR1nLScCDbrztQFl1TaQZT0t1EtzQ==} 2757 + 2758 + pg-int8@1.0.1: 2759 + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} 2760 + engines: {node: '>=4.0.0'} 2761 + 2762 + pg-pool@3.11.0: 2763 + resolution: {integrity: sha512-MJYfvHwtGp870aeusDh+hg9apvOe2zmpZJpyt+BMtzUWlVqbhFmMK6bOBXLBUPd7iRtIF9fZplDc7KrPN3PN7w==} 2764 + peerDependencies: 2765 + pg: '>=8.0' 2766 + 2767 + pg-protocol@1.11.0: 2768 + resolution: {integrity: sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==} 2769 + 2770 + pg-types@2.2.0: 2771 + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} 2772 + engines: {node: '>=4'} 2773 + 2774 + pg@8.18.0: 2775 + resolution: {integrity: sha512-xqrUDL1b9MbkydY/s+VZ6v+xiMUmOUk7SS9d/1kpyQxoJ6U9AO1oIJyUWVZojbfe5Cc/oluutcgFG4L9RDP1iQ==} 2776 + engines: {node: '>= 16.0.0'} 2777 + peerDependencies: 2778 + pg-native: '>=3.0.1' 2779 + peerDependenciesMeta: 2780 + pg-native: 2781 + optional: true 2782 + 2783 + pgpass@1.0.5: 2784 + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} 2785 + 2786 + picocolors@1.1.1: 2787 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 2788 + 2789 + picomatch@4.0.3: 2790 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 2791 + engines: {node: '>=12'} 2792 + 2793 + pino-abstract-transport@1.2.0: 2794 + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} 2795 + 2796 + pino-http@8.6.1: 2797 + resolution: {integrity: sha512-J0hiJgUExtBXP2BjrK4VB305tHXS31sCmWJ9XJo2wPkLHa1NFPuW4V9wjG27PAc2fmBCigiNhQKpvrx+kntBPA==} 2798 + 2799 + pino-std-serializers@6.2.2: 2800 + resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} 2801 + 2802 + pino@8.21.0: 2803 + resolution: {integrity: sha512-ip4qdzjkAyDDZklUaZkcRFb2iA118H9SgRh8yzTkSQK8HilsOJF7rSY8HoW5+I0M46AZgX/pxbprf2vvzQCE0Q==} 2804 + hasBin: true 2805 + 2806 + postcss-load-config@3.1.4: 2807 + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 2808 + engines: {node: '>= 10'} 2809 + peerDependencies: 2810 + postcss: '>=8.0.9' 2811 + ts-node: '>=9.0.0' 2812 + peerDependenciesMeta: 2813 + postcss: 2814 + optional: true 2815 + ts-node: 2816 + optional: true 2817 + 2818 + postcss-safe-parser@7.0.1: 2819 + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} 2820 + engines: {node: '>=18.0'} 2821 + peerDependencies: 2822 + postcss: ^8.4.31 2823 + 2824 + postcss-scss@4.0.9: 2825 + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} 2826 + engines: {node: '>=12.0'} 2827 + peerDependencies: 2828 + postcss: ^8.4.29 2829 + 2830 + postcss-selector-parser@7.1.1: 2831 + resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} 2832 + engines: {node: '>=4'} 2833 + 2834 + postcss@8.5.6: 2835 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 2836 + engines: {node: ^10 || ^12 || >=14} 2837 + 2838 + postgres-array@2.0.0: 2839 + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} 2840 + engines: {node: '>=4'} 2841 + 2842 + postgres-bytea@1.0.1: 2843 + resolution: {integrity: sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ==} 2844 + engines: {node: '>=0.10.0'} 2845 + 2846 + postgres-date@1.0.7: 2847 + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} 2848 + engines: {node: '>=0.10.0'} 2849 + 2850 + postgres-interval@1.2.0: 2851 + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} 2852 + engines: {node: '>=0.10.0'} 2853 + 2854 + prebuild-install@7.1.3: 2855 + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} 2856 + engines: {node: '>=10'} 2857 + hasBin: true 2858 + 2859 + prelude-ls@1.2.1: 2860 + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 2861 + engines: {node: '>= 0.8.0'} 2862 + 2863 + prettier-plugin-svelte@3.4.1: 2864 + resolution: {integrity: sha512-xL49LCloMoZRvSwa6IEdN2GV6cq2IqpYGstYtMT+5wmml1/dClEoI0MZR78MiVPpu6BdQFfN0/y73yO6+br5Pg==} 2865 + peerDependencies: 2866 + prettier: ^3.0.0 2867 + svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 2868 + 2869 + prettier-plugin-tailwindcss@0.7.2: 2870 + resolution: {integrity: sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA==} 2871 + engines: {node: '>=20.19'} 2872 + peerDependencies: 2873 + '@ianvs/prettier-plugin-sort-imports': '*' 2874 + '@prettier/plugin-hermes': '*' 2875 + '@prettier/plugin-oxc': '*' 2876 + '@prettier/plugin-pug': '*' 2877 + '@shopify/prettier-plugin-liquid': '*' 2878 + '@trivago/prettier-plugin-sort-imports': '*' 2879 + '@zackad/prettier-plugin-twig': '*' 2880 + prettier: ^3.0 2881 + prettier-plugin-astro: '*' 2882 + prettier-plugin-css-order: '*' 2883 + prettier-plugin-jsdoc: '*' 2884 + prettier-plugin-marko: '*' 2885 + prettier-plugin-multiline-arrays: '*' 2886 + prettier-plugin-organize-attributes: '*' 2887 + prettier-plugin-organize-imports: '*' 2888 + prettier-plugin-sort-imports: '*' 2889 + prettier-plugin-svelte: '*' 2890 + peerDependenciesMeta: 2891 + '@ianvs/prettier-plugin-sort-imports': 2892 + optional: true 2893 + '@prettier/plugin-hermes': 2894 + optional: true 2895 + '@prettier/plugin-oxc': 2896 + optional: true 2897 + '@prettier/plugin-pug': 2898 + optional: true 2899 + '@shopify/prettier-plugin-liquid': 2900 + optional: true 2901 + '@trivago/prettier-plugin-sort-imports': 2902 + optional: true 2903 + '@zackad/prettier-plugin-twig': 2904 + optional: true 2905 + prettier-plugin-astro: 2906 + optional: true 2907 + prettier-plugin-css-order: 2908 + optional: true 2909 + prettier-plugin-jsdoc: 2910 + optional: true 2911 + prettier-plugin-marko: 2912 + optional: true 2913 + prettier-plugin-multiline-arrays: 2914 + optional: true 2915 + prettier-plugin-organize-attributes: 2916 + optional: true 2917 + prettier-plugin-organize-imports: 2918 + optional: true 2919 + prettier-plugin-sort-imports: 2920 + optional: true 2921 + prettier-plugin-svelte: 2922 + optional: true 2923 + 2924 + prettier@3.8.1: 2925 + resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} 2926 + engines: {node: '>=14'} 2927 + hasBin: true 2928 + 2929 + process-warning@3.0.0: 2930 + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} 2931 + 2932 + process@0.11.10: 2933 + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} 2934 + engines: {node: '>= 0.6.0'} 2935 + 2936 + protobufjs@7.5.4: 2937 + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} 2938 + engines: {node: '>=12.0.0'} 2939 + 2940 + proxy-addr@2.0.7: 2941 + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 2942 + engines: {node: '>= 0.10'} 2943 + 2944 + proxy-from-env@1.1.0: 2945 + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 2946 + 2947 + pump@3.0.3: 2948 + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} 2949 + 2950 + punycode@2.3.1: 2951 + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 2952 + engines: {node: '>=6'} 2953 + 2954 + qs@6.14.1: 2955 + resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==} 2956 + engines: {node: '>=0.6'} 2957 + 2958 + quick-format-unescaped@4.0.4: 2959 + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 2960 + 2961 + range-parser@1.2.1: 2962 + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 2963 + engines: {node: '>= 0.6'} 2964 + 2965 + rate-limiter-flexible@2.4.2: 2966 + resolution: {integrity: sha512-rMATGGOdO1suFyf/mI5LYhts71g1sbdhmd6YvdiXO2gJnd42Tt6QS4JUKJKSWVVkMtBacm6l40FR7Trjo6Iruw==} 2967 + 2968 + raw-body@2.5.3: 2969 + resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} 2970 + engines: {node: '>= 0.8'} 2971 + 2972 + rc@1.2.8: 2973 + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 2974 + hasBin: true 2975 + 2976 + readable-stream@3.6.2: 2977 + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 2978 + engines: {node: '>= 6'} 2979 + 2980 + readable-stream@4.7.0: 2981 + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} 2982 + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2983 + 2984 + readable-web-to-node-stream@3.0.4: 2985 + resolution: {integrity: sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw==} 2986 + engines: {node: '>=8'} 2987 + 2988 + readdirp@4.1.2: 2989 + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 2990 + engines: {node: '>= 14.18.0'} 2991 + 2992 + real-require@0.2.0: 2993 + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 2994 + engines: {node: '>= 12.13.0'} 2995 + 2996 + redis-errors@1.2.0: 2997 + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} 2998 + engines: {node: '>=4'} 2999 + 3000 + redis-parser@3.0.0: 3001 + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} 3002 + engines: {node: '>=4'} 3003 + 3004 + require-directory@2.1.1: 3005 + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 3006 + engines: {node: '>=0.10.0'} 3007 + 3008 + resolve-from@4.0.0: 3009 + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 3010 + engines: {node: '>=4'} 3011 + 3012 + resolve@1.22.11: 3013 + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} 3014 + engines: {node: '>= 0.4'} 3015 + hasBin: true 3016 + 3017 + roarr@7.21.4: 3018 + resolution: {integrity: sha512-qvfUKCrpPzhWmQ4NxRYnuwhkI5lwmObhBU06BCK/lpj6PID9nL4Hk6XDwek2foKI+TMaV+Yw//XZshGF2Lox/Q==} 3019 + engines: {node: '>=18.0'} 3020 + 3021 + rollup@4.57.1: 3022 + resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} 3023 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 3024 + hasBin: true 3025 + 3026 + russian-bad-words@0.5.0: 3027 + resolution: {integrity: sha512-euNvEYki6iYYpkNbeudW+lEMMYGEmN7EBwVF8ezlbv0bZoQpVYB7W10cCeUIGV7Ed50sJynLQ0c559q5iI0ejQ==} 3028 + engines: {node: '>=10'} 3029 + 3030 + rxjs@7.8.2: 3031 + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} 3032 + 3033 + sade@1.8.1: 3034 + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 3035 + engines: {node: '>=6'} 3036 + 3037 + safe-buffer@5.2.1: 3038 + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 3039 + 3040 + safe-stable-stringify@2.5.0: 3041 + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} 3042 + engines: {node: '>=10'} 3043 + 3044 + safer-buffer@2.1.2: 3045 + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 3046 + 3047 + semver-compare@1.0.0: 3048 + resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} 3049 + 3050 + semver@7.7.4: 3051 + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} 3052 + engines: {node: '>=10'} 3053 + hasBin: true 3054 + 3055 + send@0.19.2: 3056 + resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} 3057 + engines: {node: '>= 0.8.0'} 3058 + 3059 + serve-static@1.16.3: 3060 + resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} 3061 + engines: {node: '>= 0.8.0'} 3062 + 3063 + set-cookie-parser@3.0.1: 3064 + resolution: {integrity: sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==} 3065 + 3066 + setprototypeof@1.2.0: 3067 + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 3068 + 3069 + sharp@0.33.5: 3070 + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} 3071 + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} 3072 + 3073 + shebang-command@2.0.0: 3074 + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 3075 + engines: {node: '>=8'} 3076 + 3077 + shebang-regex@3.0.0: 3078 + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 3079 + engines: {node: '>=8'} 3080 + 3081 + side-channel-list@1.0.0: 3082 + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 3083 + engines: {node: '>= 0.4'} 3084 + 3085 + side-channel-map@1.0.1: 3086 + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 3087 + engines: {node: '>= 0.4'} 3088 + 3089 + side-channel-weakmap@1.0.2: 3090 + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 3091 + engines: {node: '>= 0.4'} 3092 + 3093 + side-channel@1.1.0: 3094 + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 3095 + engines: {node: '>= 0.4'} 3096 + 3097 + signal-exit@4.1.0: 3098 + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 3099 + engines: {node: '>=14'} 3100 + 3101 + simple-concat@1.0.1: 3102 + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} 3103 + 3104 + simple-get@4.0.1: 3105 + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} 3106 + 3107 + simple-swizzle@0.2.4: 3108 + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} 3109 + 3110 + sirv@3.0.2: 3111 + resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} 3112 + engines: {node: '>=18'} 3113 + 3114 + sonic-boom@3.8.1: 3115 + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} 3116 + 3117 + source-map-js@1.2.1: 3118 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 3119 + engines: {node: '>=0.10.0'} 3120 + 3121 + source-map@0.6.1: 3122 + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 3123 + engines: {node: '>=0.10.0'} 3124 + 3125 + split2@4.2.0: 3126 + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 3127 + engines: {node: '>= 10.x'} 3128 + 3129 + standard-as-callback@2.1.0: 3130 + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} 3131 + 3132 + statuses@2.0.2: 3133 + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} 3134 + engines: {node: '>= 0.8'} 3135 + 3136 + stream-browserify@3.0.0: 3137 + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} 3138 + 3139 + string-width@4.2.3: 3140 + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 3141 + engines: {node: '>=8'} 3142 + 3143 + string-width@5.1.2: 3144 + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 3145 + engines: {node: '>=12'} 3146 + 3147 + string_decoder@1.3.0: 3148 + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 3149 + 3150 + strip-ansi@6.0.1: 3151 + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 3152 + engines: {node: '>=8'} 3153 + 3154 + strip-ansi@7.1.2: 3155 + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} 3156 + engines: {node: '>=12'} 3157 + 3158 + strip-json-comments@2.0.1: 3159 + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 3160 + engines: {node: '>=0.10.0'} 3161 + 3162 + strip-json-comments@3.1.1: 3163 + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 3164 + engines: {node: '>=8'} 3165 + 3166 + strnum@2.1.2: 3167 + resolution: {integrity: sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==} 3168 + 3169 + strtok3@6.3.0: 3170 + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} 3171 + engines: {node: '>=10'} 3172 + 3173 + structured-headers@1.0.1: 3174 + resolution: {integrity: sha512-QYBxdBtA4Tl5rFPuqmbmdrS9kbtren74RTJTcs0VSQNVV5iRhJD4QlYTLD0+81SBwUQctjEQzjTRI3WG4DzICA==} 3175 + engines: {node: '>= 14', npm: '>=6'} 3176 + 3177 + supports-color@7.2.0: 3178 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 3179 + engines: {node: '>=8'} 3180 + 3181 + supports-preserve-symlinks-flag@1.0.0: 3182 + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 3183 + engines: {node: '>= 0.4'} 3184 + 3185 + svelte-check@4.3.6: 3186 + resolution: {integrity: sha512-uBkz96ElE3G4pt9E1Tw0xvBfIUQkeH794kDQZdAUk795UVMr+NJZpuFSS62vcmO/DuSalK83LyOwhgWq8YGU1Q==} 3187 + engines: {node: '>= 18.0.0'} 3188 + hasBin: true 3189 + peerDependencies: 3190 + svelte: ^4.0.0 || ^5.0.0-next.0 3191 + typescript: '>=5.0.0' 3192 + 3193 + svelte-eslint-parser@1.4.1: 3194 + resolution: {integrity: sha512-1eqkfQ93goAhjAXxZiu1SaKI9+0/sxp4JIWQwUpsz7ybehRE5L8dNuz7Iry7K22R47p5/+s9EM+38nHV2OlgXA==} 3195 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.24.0} 3196 + peerDependencies: 3197 + svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 3198 + peerDependenciesMeta: 3199 + svelte: 3200 + optional: true 3201 + 3202 + svelte@5.49.2: 3203 + resolution: {integrity: sha512-PYLwnngYzyhKzqDlGVlCH4z+NVI8mC0/bTv15vw25CcdOhxENsOHIbQ36oj5DIf3oBazM+STbCAvaskpxtBmWA==} 3204 + engines: {node: '>=18'} 3205 + 3206 + tailwindcss@4.1.18: 3207 + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} 3208 + 3209 + tapable@2.3.0: 3210 + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} 3211 + engines: {node: '>=6'} 3212 + 3213 + tar-fs@2.1.4: 3214 + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} 3215 + 3216 + tar-stream@2.2.0: 3217 + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} 3218 + engines: {node: '>=6'} 3219 + 3220 + thread-stream@2.7.0: 3221 + resolution: {integrity: sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw==} 3222 + 3223 + tinyglobby@0.2.15: 3224 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 3225 + engines: {node: '>=12.0.0'} 3226 + 3227 + tlds@1.261.0: 3228 + resolution: {integrity: sha512-QXqwfEl9ddlGBaRFXIvNKK6OhipSiLXuRuLJX5DErz0o0Q0rYxulWLdFryTkV5PkdZct5iMInwYEGe/eR++1AA==} 3229 + hasBin: true 3230 + 3231 + toidentifier@1.0.1: 3232 + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 3233 + engines: {node: '>=0.6'} 3234 + 3235 + token-types@4.2.1: 3236 + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} 3237 + engines: {node: '>=10'} 3238 + 3239 + totalist@3.0.1: 3240 + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} 3241 + engines: {node: '>=6'} 3242 + 3243 + toygrad@2.6.0: 3244 + resolution: {integrity: sha512-g4zBmlSbvzOE5FOILxYkAybTSxijKLkj1WoNqVGnbMcWDyj4wWQ+eYSr3ik7XOpIgMq/7eBcPRTJX3DM2E0YMg==} 3245 + 3246 + ts-api-utils@2.4.0: 3247 + resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} 3248 + engines: {node: '>=18.12'} 3249 + peerDependencies: 3250 + typescript: '>=4.8.4' 3251 + 3252 + tslib@2.8.1: 3253 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 3254 + 3255 + tunnel-agent@0.6.0: 3256 + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} 3257 + 3258 + type-check@0.4.0: 3259 + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 3260 + engines: {node: '>= 0.8.0'} 3261 + 3262 + type-fest@2.19.0: 3263 + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 3264 + engines: {node: '>=12.20'} 3265 + 3266 + type-is@1.6.18: 3267 + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 3268 + engines: {node: '>= 0.6'} 3269 + 3270 + typed-emitter@2.1.0: 3271 + resolution: {integrity: sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==} 3272 + 3273 + typescript-eslint@8.54.0: 3274 + resolution: {integrity: sha512-CKsJ+g53QpsNPqbzUsfKVgd3Lny4yKZ1pP4qN3jdMOg/sisIDLGyDMezycquXLE5JsEU0wp3dGNdzig0/fmSVQ==} 3275 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 3276 + peerDependencies: 3277 + eslint: ^8.57.0 || ^9.0.0 3278 + typescript: '>=4.8.4 <6.0.0' 3279 + 3280 + typescript@5.9.3: 3281 + resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 3282 + engines: {node: '>=14.17'} 3283 + hasBin: true 3284 + 3285 + uglify-js@3.19.3: 3286 + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} 3287 + engines: {node: '>=0.8.0'} 3288 + hasBin: true 3289 + 3290 + uint8arrays@3.0.0: 3291 + resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} 3292 + 3293 + undici-types@7.16.0: 3294 + resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} 3295 + 3296 + undici@5.29.0: 3297 + resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} 3298 + engines: {node: '>=14.0'} 3299 + 3300 + undici@6.23.0: 3301 + resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} 3302 + engines: {node: '>=18.17'} 3303 + 3304 + unicode-segmenter@0.14.5: 3305 + resolution: {integrity: sha512-jHGmj2LUuqDcX3hqY12Ql+uhUTn8huuxNZGq7GvtF6bSybzH3aFgedYu/KTzQStEgt1Ra2F3HxadNXsNjb3m3g==} 3306 + 3307 + unpipe@1.0.0: 3308 + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 3309 + engines: {node: '>= 0.8'} 3310 + 3311 + uri-js@4.4.1: 3312 + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 3313 + 3314 + util-deprecate@1.0.2: 3315 + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 3316 + 3317 + utils-merge@1.0.1: 3318 + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 3319 + engines: {node: '>= 0.4.0'} 3320 + 3321 + varint@6.0.0: 3322 + resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} 3323 + 3324 + vary@1.1.2: 3325 + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 3326 + engines: {node: '>= 0.8'} 3327 + 3328 + vite@7.3.1: 3329 + resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==} 3330 + engines: {node: ^20.19.0 || >=22.12.0} 3331 + hasBin: true 3332 + peerDependencies: 3333 + '@types/node': ^20.19.0 || >=22.12.0 3334 + jiti: '>=1.21.0' 3335 + less: ^4.0.0 3336 + lightningcss: ^1.21.0 3337 + sass: ^1.70.0 3338 + sass-embedded: ^1.70.0 3339 + stylus: '>=0.54.8' 3340 + sugarss: ^5.0.0 3341 + terser: ^5.16.0 3342 + tsx: ^4.8.1 3343 + yaml: ^2.4.2 3344 + peerDependenciesMeta: 3345 + '@types/node': 3346 + optional: true 3347 + jiti: 3348 + optional: true 3349 + less: 3350 + optional: true 3351 + lightningcss: 3352 + optional: true 3353 + sass: 3354 + optional: true 3355 + sass-embedded: 3356 + optional: true 3357 + stylus: 3358 + optional: true 3359 + sugarss: 3360 + optional: true 3361 + terser: 3362 + optional: true 3363 + tsx: 3364 + optional: true 3365 + yaml: 3366 + optional: true 3367 + 3368 + vitefu@1.1.1: 3369 + resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==} 3370 + peerDependencies: 3371 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 3372 + peerDependenciesMeta: 3373 + vite: 3374 + optional: true 3375 + 3376 + which@2.0.2: 3377 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3378 + engines: {node: '>= 8'} 3379 + hasBin: true 3380 + 3381 + word-wrap@1.2.5: 3382 + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 3383 + engines: {node: '>=0.10.0'} 3384 + 3385 + wordwrap@1.0.0: 3386 + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} 3387 + 3388 + wrap-ansi@7.0.0: 3389 + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 3390 + engines: {node: '>=10'} 3391 + 3392 + wrap-ansi@8.1.0: 3393 + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 3394 + engines: {node: '>=12'} 3395 + 3396 + wrappy@1.0.2: 3397 + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3398 + 3399 + ws@8.19.0: 3400 + resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} 3401 + engines: {node: '>=10.0.0'} 3402 + peerDependencies: 3403 + bufferutil: ^4.0.1 3404 + utf-8-validate: '>=5.0.2' 3405 + peerDependenciesMeta: 3406 + bufferutil: 3407 + optional: true 3408 + utf-8-validate: 3409 + optional: true 3410 + 3411 + xtend@4.0.2: 3412 + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 3413 + engines: {node: '>=0.4'} 3414 + 3415 + y18n@5.0.8: 3416 + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 3417 + engines: {node: '>=10'} 3418 + 3419 + yaml@1.10.2: 3420 + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 3421 + engines: {node: '>= 6'} 3422 + 3423 + yargs-parser@21.1.1: 3424 + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 3425 + engines: {node: '>=12'} 3426 + 3427 + yargs@17.7.2: 3428 + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 3429 + engines: {node: '>=12'} 3430 + 3431 + yocto-queue@0.1.0: 3432 + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3433 + engines: {node: '>=10'} 3434 + 3435 + zimmerframe@1.1.4: 3436 + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} 3437 + 3438 + zod@3.23.8: 3439 + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} 3440 + 3441 + zod@3.25.76: 3442 + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} 3443 + 3444 + snapshots: 3445 + 3446 + '@atcute/cbor@2.3.2': 3447 + dependencies: 3448 + '@atcute/cid': 2.4.1 3449 + '@atcute/multibase': 1.1.8 3450 + '@atcute/uint8array': 1.1.1 3451 + 3452 + '@atcute/cid@2.4.1': 3453 + dependencies: 3454 + '@atcute/multibase': 1.1.8 3455 + '@atcute/uint8array': 1.1.1 3456 + 3457 + '@atcute/crypto@2.3.0': 3458 + dependencies: 3459 + '@atcute/multibase': 1.1.8 3460 + '@atcute/uint8array': 1.1.1 3461 + '@noble/secp256k1': 3.0.0 3462 + 3463 + '@atcute/did-plc@0.3.2': 3464 + dependencies: 3465 + '@atcute/cbor': 2.3.2 3466 + '@atcute/cid': 2.4.1 3467 + '@atcute/crypto': 2.3.0 3468 + '@atcute/identity': 1.1.3 3469 + '@atcute/lexicons': 1.2.9 3470 + '@atcute/multibase': 1.1.8 3471 + '@atcute/uint8array': 1.1.1 3472 + '@atcute/util-fetch': 1.0.5 3473 + '@badrap/valita': 0.4.6 3474 + 3475 + '@atcute/identity@1.1.3': 3476 + dependencies: 3477 + '@atcute/lexicons': 1.2.9 3478 + '@badrap/valita': 0.4.6 3479 + 3480 + '@atcute/lexicons@1.2.9': 3481 + dependencies: 3482 + '@atcute/uint8array': 1.1.1 3483 + '@atcute/util-text': 1.1.1 3484 + '@standard-schema/spec': 1.1.0 3485 + esm-env: 1.2.2 3486 + 3487 + '@atcute/multibase@1.1.8': 3488 + dependencies: 3489 + '@atcute/uint8array': 1.1.1 3490 + 3491 + '@atcute/uint8array@1.1.1': {} 3492 + 3493 + '@atcute/util-fetch@1.0.5': 3494 + dependencies: 3495 + '@badrap/valita': 0.4.6 3496 + 3497 + '@atcute/util-text@1.1.1': 3498 + dependencies: 3499 + unicode-segmenter: 0.14.5 3500 + 3501 + '@atproto-labs/did-resolver@0.2.6': 3502 + dependencies: 3503 + '@atproto-labs/fetch': 0.2.3 3504 + '@atproto-labs/pipe': 0.1.1 3505 + '@atproto-labs/simple-store': 0.3.0 3506 + '@atproto-labs/simple-store-memory': 0.1.4 3507 + '@atproto/did': 0.3.0 3508 + zod: 3.25.76 3509 + 3510 + '@atproto-labs/fetch-node@0.2.0': 3511 + dependencies: 3512 + '@atproto-labs/fetch': 0.2.3 3513 + '@atproto-labs/pipe': 0.1.1 3514 + ipaddr.js: 2.3.0 3515 + undici: 6.23.0 3516 + 3517 + '@atproto-labs/fetch@0.2.3': 3518 + dependencies: 3519 + '@atproto-labs/pipe': 0.1.1 3520 + 3521 + '@atproto-labs/handle-resolver@0.3.6': 3522 + dependencies: 3523 + '@atproto-labs/simple-store': 0.3.0 3524 + '@atproto-labs/simple-store-memory': 0.1.4 3525 + '@atproto/did': 0.3.0 3526 + zod: 3.25.76 3527 + 3528 + '@atproto-labs/identity-resolver@0.3.6': 3529 + dependencies: 3530 + '@atproto-labs/did-resolver': 0.2.6 3531 + '@atproto-labs/handle-resolver': 0.3.6 3532 + 3533 + '@atproto-labs/pipe@0.1.1': {} 3534 + 3535 + '@atproto-labs/simple-store-memory@0.1.4': 3536 + dependencies: 3537 + '@atproto-labs/simple-store': 0.3.0 3538 + lru-cache: 10.4.3 3539 + 3540 + '@atproto-labs/simple-store-redis@0.0.1(ioredis@5.9.2)': 3541 + dependencies: 3542 + '@atproto-labs/simple-store': 0.3.0 3543 + ioredis: 5.9.2 3544 + 3545 + '@atproto-labs/simple-store@0.3.0': {} 3546 + 3547 + '@atproto-labs/xrpc-utils@0.0.24': 3548 + dependencies: 3549 + '@atproto/xrpc': 0.7.7 3550 + '@atproto/xrpc-server': 0.10.12 3551 + transitivePeerDependencies: 3552 + - bufferutil 3553 + - supports-color 3554 + - utf-8-validate 3555 + 3556 + '@atproto/api@0.18.20': 3557 + dependencies: 3558 + '@atproto/common-web': 0.4.15 3559 + '@atproto/lexicon': 0.6.1 3560 + '@atproto/syntax': 0.4.3 3561 + '@atproto/xrpc': 0.7.7 3562 + await-lock: 2.2.2 3563 + multiformats: 9.9.0 3564 + tlds: 1.261.0 3565 + zod: 3.25.76 3566 + 3567 + '@atproto/aws@0.2.31': 3568 + dependencies: 3569 + '@atproto/common': 0.5.11 3570 + '@atproto/common-web': 0.4.16 3571 + '@atproto/crypto': 0.4.5 3572 + '@atproto/repo': 0.8.12 3573 + '@aws-sdk/client-cloudfront': 3.985.0 3574 + '@aws-sdk/client-kms': 3.985.0 3575 + '@aws-sdk/client-s3': 3.985.0 3576 + '@aws-sdk/lib-storage': 3.879.0(@aws-sdk/client-s3@3.985.0) 3577 + '@noble/curves': 1.9.7 3578 + key-encoder: 2.0.3 3579 + multiformats: 9.9.0 3580 + uint8arrays: 3.0.0 3581 + transitivePeerDependencies: 3582 + - aws-crt 3583 + 3584 + '@atproto/bsky@0.0.214': 3585 + dependencies: 3586 + '@atproto-labs/fetch-node': 0.2.0 3587 + '@atproto-labs/xrpc-utils': 0.0.24 3588 + '@atproto/api': 0.18.20 3589 + '@atproto/common': 0.5.11 3590 + '@atproto/crypto': 0.4.5 3591 + '@atproto/did': 0.3.0 3592 + '@atproto/identity': 0.4.11 3593 + '@atproto/lexicon': 0.6.1 3594 + '@atproto/repo': 0.8.12 3595 + '@atproto/sync': 0.1.39 3596 + '@atproto/syntax': 0.4.3 3597 + '@atproto/xrpc-server': 0.10.12 3598 + '@bufbuild/protobuf': 1.10.1 3599 + '@connectrpc/connect': 1.7.0(@bufbuild/protobuf@1.10.1) 3600 + '@connectrpc/connect-express': 1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect-node@1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)))(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)) 3601 + '@connectrpc/connect-node': 1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)) 3602 + '@did-plc/lib': 0.0.1 3603 + '@growthbook/growthbook': 1.6.4 3604 + '@hapi/address': 5.1.1 3605 + '@types/http-errors': 2.0.5 3606 + compression: 1.8.1 3607 + cors: 2.8.6 3608 + disposable-email-domains-js: 1.21.0 3609 + etcd3: 1.1.2 3610 + express: 4.22.1 3611 + http-errors: 2.0.1 3612 + http-terminator: 3.2.0 3613 + ioredis: 5.9.2 3614 + jose: 5.10.0 3615 + key-encoder: 2.0.3 3616 + kysely: 0.22.0 3617 + leo-profanity: 1.9.0 3618 + multiformats: 9.9.0 3619 + murmurhash: 2.0.1 3620 + p-queue: 6.6.2 3621 + pg: 8.18.0 3622 + pino: 8.21.0 3623 + pino-http: 8.6.1 3624 + sharp: 0.33.5 3625 + structured-headers: 1.0.1 3626 + typed-emitter: 2.1.0 3627 + uint8arrays: 3.0.0 3628 + undici: 6.23.0 3629 + zod: 3.23.8 3630 + transitivePeerDependencies: 3631 + - bufferutil 3632 + - debug 3633 + - pg-native 3634 + - supports-color 3635 + - utf-8-validate 3636 + 3637 + '@atproto/bsync@0.0.23': 3638 + dependencies: 3639 + '@atproto/common': 0.5.11 3640 + '@atproto/syntax': 0.4.3 3641 + '@bufbuild/protobuf': 1.10.1 3642 + '@connectrpc/connect': 1.7.0(@bufbuild/protobuf@1.10.1) 3643 + '@connectrpc/connect-node': 1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)) 3644 + http-terminator: 3.2.0 3645 + kysely: 0.22.0 3646 + pg: 8.18.0 3647 + pino-http: 8.6.1 3648 + typed-emitter: 2.1.0 3649 + transitivePeerDependencies: 3650 + - pg-native 3651 + 3652 + '@atproto/common-web@0.4.15': 3653 + dependencies: 3654 + '@atproto/lex-data': 0.0.10 3655 + '@atproto/lex-json': 0.0.10 3656 + '@atproto/syntax': 0.4.3 3657 + zod: 3.25.76 3658 + 3659 + '@atproto/common-web@0.4.16': 3660 + dependencies: 3661 + '@atproto/lex-data': 0.0.11 3662 + '@atproto/lex-json': 0.0.11 3663 + '@atproto/syntax': 0.4.3 3664 + zod: 3.25.76 3665 + 3666 + '@atproto/common@0.1.0': 3667 + dependencies: 3668 + '@ipld/dag-cbor': 7.0.3 3669 + multiformats: 9.9.0 3670 + pino: 8.21.0 3671 + zod: 3.25.76 3672 + 3673 + '@atproto/common@0.1.1': 3674 + dependencies: 3675 + '@ipld/dag-cbor': 7.0.3 3676 + multiformats: 9.9.0 3677 + pino: 8.21.0 3678 + zod: 3.25.76 3679 + 3680 + '@atproto/common@0.5.11': 3681 + dependencies: 3682 + '@atproto/common-web': 0.4.16 3683 + '@atproto/lex-cbor': 0.0.11 3684 + '@atproto/lex-data': 0.0.11 3685 + iso-datestring-validator: 2.2.2 3686 + multiformats: 9.9.0 3687 + pino: 8.21.0 3688 + 3689 + '@atproto/crypto@0.1.0': 3690 + dependencies: 3691 + '@noble/secp256k1': 1.7.2 3692 + big-integer: 1.6.52 3693 + multiformats: 9.9.0 3694 + one-webcrypto: 1.0.3 3695 + uint8arrays: 3.0.0 3696 + 3697 + '@atproto/crypto@0.4.5': 3698 + dependencies: 3699 + '@noble/curves': 1.9.7 3700 + '@noble/hashes': 1.8.0 3701 + uint8arrays: 3.0.0 3702 + 3703 + '@atproto/dev-env@0.3.208': 3704 + dependencies: 3705 + '@atproto/api': 0.18.20 3706 + '@atproto/bsky': 0.0.214 3707 + '@atproto/bsync': 0.0.23 3708 + '@atproto/common-web': 0.4.16 3709 + '@atproto/crypto': 0.4.5 3710 + '@atproto/identity': 0.4.11 3711 + '@atproto/lexicon': 0.6.1 3712 + '@atproto/ozone': 0.1.163 3713 + '@atproto/pds': 0.4.208 3714 + '@atproto/sync': 0.1.39 3715 + '@atproto/syntax': 0.4.3 3716 + '@atproto/xrpc-server': 0.10.12 3717 + '@did-plc/lib': 0.0.1 3718 + '@did-plc/server': 0.0.1 3719 + dotenv: 16.6.1 3720 + express: 4.22.1 3721 + get-port: 5.1.1 3722 + multiformats: 9.9.0 3723 + uint8arrays: 3.0.0 3724 + undici: 6.23.0 3725 + transitivePeerDependencies: 3726 + - aws-crt 3727 + - bufferutil 3728 + - debug 3729 + - pg-native 3730 + - supports-color 3731 + - utf-8-validate 3732 + 3733 + '@atproto/did@0.3.0': 3734 + dependencies: 3735 + zod: 3.25.76 3736 + 3737 + '@atproto/identity@0.4.11': 3738 + dependencies: 3739 + '@atproto/common-web': 0.4.16 3740 + '@atproto/crypto': 0.4.5 3741 + 3742 + '@atproto/jwk-jose@0.1.11': 3743 + dependencies: 3744 + '@atproto/jwk': 0.6.0 3745 + jose: 5.10.0 3746 + 3747 + '@atproto/jwk-webcrypto@0.2.0': 3748 + dependencies: 3749 + '@atproto/jwk': 0.6.0 3750 + '@atproto/jwk-jose': 0.1.11 3751 + zod: 3.25.76 3752 + 3753 + '@atproto/jwk@0.6.0': 3754 + dependencies: 3755 + multiformats: 9.9.0 3756 + zod: 3.25.76 3757 + 3758 + '@atproto/lex-cbor@0.0.11': 3759 + dependencies: 3760 + '@atproto/lex-data': 0.0.11 3761 + tslib: 2.8.1 3762 + 3763 + '@atproto/lex-client@0.0.12': 3764 + dependencies: 3765 + '@atproto/lex-data': 0.0.11 3766 + '@atproto/lex-json': 0.0.11 3767 + '@atproto/lex-schema': 0.0.12 3768 + tslib: 2.8.1 3769 + 3770 + '@atproto/lex-data@0.0.10': 3771 + dependencies: 3772 + multiformats: 9.9.0 3773 + tslib: 2.8.1 3774 + uint8arrays: 3.0.0 3775 + unicode-segmenter: 0.14.5 3776 + 3777 + '@atproto/lex-data@0.0.11': 3778 + dependencies: 3779 + multiformats: 9.9.0 3780 + tslib: 2.8.1 3781 + uint8arrays: 3.0.0 3782 + unicode-segmenter: 0.14.5 3783 + 3784 + '@atproto/lex-document@0.0.13': 3785 + dependencies: 3786 + '@atproto/lex-schema': 0.0.12 3787 + core-js: 3.48.0 3788 + tslib: 2.8.1 3789 + 3790 + '@atproto/lex-json@0.0.10': 3791 + dependencies: 3792 + '@atproto/lex-data': 0.0.10 3793 + tslib: 2.8.1 3794 + 3795 + '@atproto/lex-json@0.0.11': 3796 + dependencies: 3797 + '@atproto/lex-data': 0.0.11 3798 + tslib: 2.8.1 3799 + 3800 + '@atproto/lex-resolver@0.0.14': 3801 + dependencies: 3802 + '@atproto-labs/did-resolver': 0.2.6 3803 + '@atproto/crypto': 0.4.5 3804 + '@atproto/lex-client': 0.0.12 3805 + '@atproto/lex-data': 0.0.11 3806 + '@atproto/lex-document': 0.0.13 3807 + '@atproto/lex-schema': 0.0.12 3808 + '@atproto/repo': 0.8.12 3809 + '@atproto/syntax': 0.4.3 3810 + tslib: 2.8.1 3811 + 3812 + '@atproto/lex-schema@0.0.12': 3813 + dependencies: 3814 + '@atproto/lex-data': 0.0.11 3815 + '@atproto/syntax': 0.4.3 3816 + tslib: 2.8.1 3817 + 3818 + '@atproto/lexicon@0.6.1': 3819 + dependencies: 3820 + '@atproto/common-web': 0.4.15 3821 + '@atproto/syntax': 0.4.3 3822 + iso-datestring-validator: 2.2.2 3823 + multiformats: 9.9.0 3824 + zod: 3.25.76 3825 + 3826 + '@atproto/oauth-client-browser@0.3.40': 3827 + dependencies: 3828 + '@atproto-labs/did-resolver': 0.2.6 3829 + '@atproto-labs/handle-resolver': 0.3.6 3830 + '@atproto-labs/simple-store': 0.3.0 3831 + '@atproto/did': 0.3.0 3832 + '@atproto/jwk': 0.6.0 3833 + '@atproto/jwk-webcrypto': 0.2.0 3834 + '@atproto/oauth-client': 0.5.14 3835 + '@atproto/oauth-types': 0.6.2 3836 + core-js: 3.48.0 3837 + 3838 + '@atproto/oauth-client@0.5.14': 3839 + dependencies: 3840 + '@atproto-labs/did-resolver': 0.2.6 3841 + '@atproto-labs/fetch': 0.2.3 3842 + '@atproto-labs/handle-resolver': 0.3.6 3843 + '@atproto-labs/identity-resolver': 0.3.6 3844 + '@atproto-labs/simple-store': 0.3.0 3845 + '@atproto-labs/simple-store-memory': 0.1.4 3846 + '@atproto/did': 0.3.0 3847 + '@atproto/jwk': 0.6.0 3848 + '@atproto/oauth-types': 0.6.2 3849 + '@atproto/xrpc': 0.7.7 3850 + core-js: 3.48.0 3851 + multiformats: 9.9.0 3852 + zod: 3.25.76 3853 + 3854 + '@atproto/oauth-provider-api@0.3.7': 3855 + dependencies: 3856 + '@atproto/jwk': 0.6.0 3857 + '@atproto/oauth-types': 0.6.2 3858 + 3859 + '@atproto/oauth-provider-frontend@0.2.9': 3860 + optionalDependencies: 3861 + '@atproto/oauth-provider-api': 0.3.7 3862 + 3863 + '@atproto/oauth-provider-ui@0.4.3': 3864 + optionalDependencies: 3865 + '@atproto/oauth-provider-api': 0.3.7 3866 + 3867 + '@atproto/oauth-provider@0.15.9': 3868 + dependencies: 3869 + '@atproto-labs/fetch': 0.2.3 3870 + '@atproto-labs/fetch-node': 0.2.0 3871 + '@atproto-labs/pipe': 0.1.1 3872 + '@atproto-labs/simple-store': 0.3.0 3873 + '@atproto-labs/simple-store-memory': 0.1.4 3874 + '@atproto/common': 0.5.11 3875 + '@atproto/did': 0.3.0 3876 + '@atproto/jwk': 0.6.0 3877 + '@atproto/jwk-jose': 0.1.11 3878 + '@atproto/lex-document': 0.0.13 3879 + '@atproto/lex-resolver': 0.0.14 3880 + '@atproto/oauth-provider-api': 0.3.7 3881 + '@atproto/oauth-provider-frontend': 0.2.9 3882 + '@atproto/oauth-provider-ui': 0.4.3 3883 + '@atproto/oauth-scopes': 0.3.1 3884 + '@atproto/oauth-types': 0.6.3 3885 + '@atproto/syntax': 0.4.3 3886 + '@hapi/accept': 6.0.3 3887 + '@hapi/address': 5.1.1 3888 + '@hapi/bourne': 3.0.0 3889 + '@hapi/content': 6.0.0 3890 + cookie: 0.7.2 3891 + disposable-email-domains-js: 1.21.0 3892 + forwarded: 0.2.0 3893 + http-errors: 2.0.1 3894 + ioredis: 5.9.2 3895 + jose: 5.10.0 3896 + zod: 3.25.76 3897 + transitivePeerDependencies: 3898 + - supports-color 3899 + 3900 + '@atproto/oauth-scopes@0.3.1': 3901 + dependencies: 3902 + '@atproto/did': 0.3.0 3903 + '@atproto/syntax': 0.4.3 3904 + 3905 + '@atproto/oauth-types@0.6.2': 3906 + dependencies: 3907 + '@atproto/did': 0.3.0 3908 + '@atproto/jwk': 0.6.0 3909 + zod: 3.25.76 3910 + 3911 + '@atproto/oauth-types@0.6.3': 3912 + dependencies: 3913 + '@atproto/did': 0.3.0 3914 + '@atproto/jwk': 0.6.0 3915 + zod: 3.25.76 3916 + 3917 + '@atproto/ozone@0.1.163': 3918 + dependencies: 3919 + '@atproto/api': 0.18.20 3920 + '@atproto/common': 0.5.11 3921 + '@atproto/crypto': 0.4.5 3922 + '@atproto/identity': 0.4.11 3923 + '@atproto/lexicon': 0.6.1 3924 + '@atproto/syntax': 0.4.3 3925 + '@atproto/ws-client': 0.0.4 3926 + '@atproto/xrpc': 0.7.7 3927 + '@atproto/xrpc-server': 0.10.12 3928 + '@did-plc/lib': 0.0.1 3929 + compression: 1.8.1 3930 + cors: 2.8.6 3931 + express: 4.22.1 3932 + http-terminator: 3.2.0 3933 + kysely: 0.22.0 3934 + lande: 1.0.10 3935 + multiformats: 9.9.0 3936 + p-queue: 6.6.2 3937 + pg: 8.18.0 3938 + pino-http: 8.6.1 3939 + structured-headers: 1.0.1 3940 + typed-emitter: 2.1.0 3941 + uint8arrays: 3.0.0 3942 + undici: 6.23.0 3943 + ws: 8.19.0 3944 + transitivePeerDependencies: 3945 + - bufferutil 3946 + - debug 3947 + - pg-native 3948 + - supports-color 3949 + - utf-8-validate 3950 + 3951 + '@atproto/pds@0.4.208': 3952 + dependencies: 3953 + '@atproto-labs/fetch-node': 0.2.0 3954 + '@atproto-labs/simple-store': 0.3.0 3955 + '@atproto-labs/simple-store-memory': 0.1.4 3956 + '@atproto-labs/simple-store-redis': 0.0.1(ioredis@5.9.2) 3957 + '@atproto-labs/xrpc-utils': 0.0.24 3958 + '@atproto/api': 0.18.20 3959 + '@atproto/aws': 0.2.31 3960 + '@atproto/common': 0.5.11 3961 + '@atproto/crypto': 0.4.5 3962 + '@atproto/identity': 0.4.11 3963 + '@atproto/lex-cbor': 0.0.11 3964 + '@atproto/lex-data': 0.0.11 3965 + '@atproto/lexicon': 0.6.1 3966 + '@atproto/oauth-provider': 0.15.9 3967 + '@atproto/oauth-scopes': 0.3.1 3968 + '@atproto/repo': 0.8.12 3969 + '@atproto/syntax': 0.4.3 3970 + '@atproto/xrpc': 0.7.7 3971 + '@atproto/xrpc-server': 0.10.12 3972 + '@did-plc/lib': 0.0.4 3973 + '@hapi/address': 5.1.1 3974 + better-sqlite3: 10.1.0 3975 + bytes: 3.1.2 3976 + compression: 1.8.1 3977 + cors: 2.8.6 3978 + disposable-email-domains-js: 1.21.0 3979 + express: 4.22.1 3980 + express-async-errors: 3.1.1(express@4.22.1) 3981 + file-type: 16.5.4 3982 + glob: 10.5.0 3983 + handlebars: 4.7.8 3984 + http-terminator: 3.2.0 3985 + ioredis: 5.9.2 3986 + jose: 5.10.0 3987 + key-encoder: 2.0.3 3988 + kysely: 0.22.0 3989 + multiformats: 9.9.0 3990 + nodemailer: 6.10.1 3991 + nodemailer-html-to-text: 3.2.0 3992 + p-queue: 6.6.2 3993 + pino: 8.21.0 3994 + pino-http: 8.6.1 3995 + typed-emitter: 2.1.0 3996 + uint8arrays: 3.0.0 3997 + undici: 6.23.0 3998 + zod: 3.25.76 3999 + transitivePeerDependencies: 4000 + - aws-crt 4001 + - bufferutil 4002 + - debug 4003 + - supports-color 4004 + - utf-8-validate 4005 + 4006 + '@atproto/repo@0.8.12': 4007 + dependencies: 4008 + '@atproto/common': 0.5.11 4009 + '@atproto/common-web': 0.4.16 4010 + '@atproto/crypto': 0.4.5 4011 + '@atproto/lexicon': 0.6.1 4012 + '@ipld/dag-cbor': 7.0.3 4013 + multiformats: 9.9.0 4014 + uint8arrays: 3.0.0 4015 + varint: 6.0.0 4016 + zod: 3.25.76 4017 + 4018 + '@atproto/sync@0.1.39': 4019 + dependencies: 4020 + '@atproto/common': 0.5.11 4021 + '@atproto/identity': 0.4.11 4022 + '@atproto/lexicon': 0.6.1 4023 + '@atproto/repo': 0.8.12 4024 + '@atproto/syntax': 0.4.3 4025 + '@atproto/xrpc-server': 0.10.12 4026 + multiformats: 9.9.0 4027 + p-queue: 6.6.2 4028 + ws: 8.19.0 4029 + transitivePeerDependencies: 4030 + - bufferutil 4031 + - supports-color 4032 + - utf-8-validate 4033 + 4034 + '@atproto/syntax@0.4.3': 4035 + dependencies: 4036 + tslib: 2.8.1 4037 + 4038 + '@atproto/ws-client@0.0.4': 4039 + dependencies: 4040 + '@atproto/common': 0.5.11 4041 + ws: 8.19.0 4042 + transitivePeerDependencies: 4043 + - bufferutil 4044 + - utf-8-validate 4045 + 4046 + '@atproto/xrpc-server@0.10.12': 4047 + dependencies: 4048 + '@atproto/common': 0.5.11 4049 + '@atproto/crypto': 0.4.5 4050 + '@atproto/lex-cbor': 0.0.11 4051 + '@atproto/lex-data': 0.0.11 4052 + '@atproto/lexicon': 0.6.1 4053 + '@atproto/ws-client': 0.0.4 4054 + '@atproto/xrpc': 0.7.7 4055 + express: 4.22.1 4056 + http-errors: 2.0.1 4057 + mime-types: 2.1.35 4058 + rate-limiter-flexible: 2.4.2 4059 + ws: 8.19.0 4060 + zod: 3.25.76 4061 + transitivePeerDependencies: 4062 + - bufferutil 4063 + - supports-color 4064 + - utf-8-validate 4065 + 4066 + '@atproto/xrpc@0.7.7': 4067 + dependencies: 4068 + '@atproto/lexicon': 0.6.1 4069 + zod: 3.25.76 4070 + 4071 + '@aws-crypto/crc32@5.2.0': 4072 + dependencies: 4073 + '@aws-crypto/util': 5.2.0 4074 + '@aws-sdk/types': 3.973.1 4075 + tslib: 2.8.1 4076 + 4077 + '@aws-crypto/crc32c@5.2.0': 4078 + dependencies: 4079 + '@aws-crypto/util': 5.2.0 4080 + '@aws-sdk/types': 3.973.1 4081 + tslib: 2.8.1 4082 + 4083 + '@aws-crypto/sha1-browser@5.2.0': 4084 + dependencies: 4085 + '@aws-crypto/supports-web-crypto': 5.2.0 4086 + '@aws-crypto/util': 5.2.0 4087 + '@aws-sdk/types': 3.973.1 4088 + '@aws-sdk/util-locate-window': 3.965.4 4089 + '@smithy/util-utf8': 2.3.0 4090 + tslib: 2.8.1 4091 + 4092 + '@aws-crypto/sha256-browser@5.2.0': 4093 + dependencies: 4094 + '@aws-crypto/sha256-js': 5.2.0 4095 + '@aws-crypto/supports-web-crypto': 5.2.0 4096 + '@aws-crypto/util': 5.2.0 4097 + '@aws-sdk/types': 3.973.1 4098 + '@aws-sdk/util-locate-window': 3.965.4 4099 + '@smithy/util-utf8': 2.3.0 4100 + tslib: 2.8.1 4101 + 4102 + '@aws-crypto/sha256-js@5.2.0': 4103 + dependencies: 4104 + '@aws-crypto/util': 5.2.0 4105 + '@aws-sdk/types': 3.973.1 4106 + tslib: 2.8.1 4107 + 4108 + '@aws-crypto/supports-web-crypto@5.2.0': 4109 + dependencies: 4110 + tslib: 2.8.1 4111 + 4112 + '@aws-crypto/util@5.2.0': 4113 + dependencies: 4114 + '@aws-sdk/types': 3.973.1 4115 + '@smithy/util-utf8': 2.3.0 4116 + tslib: 2.8.1 4117 + 4118 + '@aws-sdk/client-cloudfront@3.985.0': 4119 + dependencies: 4120 + '@aws-crypto/sha256-browser': 5.2.0 4121 + '@aws-crypto/sha256-js': 5.2.0 4122 + '@aws-sdk/core': 3.973.7 4123 + '@aws-sdk/credential-provider-node': 3.972.6 4124 + '@aws-sdk/middleware-host-header': 3.972.3 4125 + '@aws-sdk/middleware-logger': 3.972.3 4126 + '@aws-sdk/middleware-recursion-detection': 3.972.3 4127 + '@aws-sdk/middleware-user-agent': 3.972.7 4128 + '@aws-sdk/region-config-resolver': 3.972.3 4129 + '@aws-sdk/types': 3.973.1 4130 + '@aws-sdk/util-endpoints': 3.985.0 4131 + '@aws-sdk/util-user-agent-browser': 3.972.3 4132 + '@aws-sdk/util-user-agent-node': 3.972.5 4133 + '@smithy/config-resolver': 4.4.6 4134 + '@smithy/core': 3.22.1 4135 + '@smithy/fetch-http-handler': 5.3.9 4136 + '@smithy/hash-node': 4.2.8 4137 + '@smithy/invalid-dependency': 4.2.8 4138 + '@smithy/middleware-content-length': 4.2.8 4139 + '@smithy/middleware-endpoint': 4.4.13 4140 + '@smithy/middleware-retry': 4.4.30 4141 + '@smithy/middleware-serde': 4.2.9 4142 + '@smithy/middleware-stack': 4.2.8 4143 + '@smithy/node-config-provider': 4.3.8 4144 + '@smithy/node-http-handler': 4.4.9 4145 + '@smithy/protocol-http': 5.3.8 4146 + '@smithy/smithy-client': 4.11.2 4147 + '@smithy/types': 4.12.0 4148 + '@smithy/url-parser': 4.2.8 4149 + '@smithy/util-base64': 4.3.0 4150 + '@smithy/util-body-length-browser': 4.2.0 4151 + '@smithy/util-body-length-node': 4.2.1 4152 + '@smithy/util-defaults-mode-browser': 4.3.29 4153 + '@smithy/util-defaults-mode-node': 4.2.32 4154 + '@smithy/util-endpoints': 3.2.8 4155 + '@smithy/util-middleware': 4.2.8 4156 + '@smithy/util-retry': 4.2.8 4157 + '@smithy/util-stream': 4.5.11 4158 + '@smithy/util-utf8': 4.2.0 4159 + '@smithy/util-waiter': 4.2.8 4160 + tslib: 2.8.1 4161 + transitivePeerDependencies: 4162 + - aws-crt 4163 + 4164 + '@aws-sdk/client-kms@3.985.0': 4165 + dependencies: 4166 + '@aws-crypto/sha256-browser': 5.2.0 4167 + '@aws-crypto/sha256-js': 5.2.0 4168 + '@aws-sdk/core': 3.973.7 4169 + '@aws-sdk/credential-provider-node': 3.972.6 4170 + '@aws-sdk/middleware-host-header': 3.972.3 4171 + '@aws-sdk/middleware-logger': 3.972.3 4172 + '@aws-sdk/middleware-recursion-detection': 3.972.3 4173 + '@aws-sdk/middleware-user-agent': 3.972.7 4174 + '@aws-sdk/region-config-resolver': 3.972.3 4175 + '@aws-sdk/types': 3.973.1 4176 + '@aws-sdk/util-endpoints': 3.985.0 4177 + '@aws-sdk/util-user-agent-browser': 3.972.3 4178 + '@aws-sdk/util-user-agent-node': 3.972.5 4179 + '@smithy/config-resolver': 4.4.6 4180 + '@smithy/core': 3.22.1 4181 + '@smithy/fetch-http-handler': 5.3.9 4182 + '@smithy/hash-node': 4.2.8 4183 + '@smithy/invalid-dependency': 4.2.8 4184 + '@smithy/middleware-content-length': 4.2.8 4185 + '@smithy/middleware-endpoint': 4.4.13 4186 + '@smithy/middleware-retry': 4.4.30 4187 + '@smithy/middleware-serde': 4.2.9 4188 + '@smithy/middleware-stack': 4.2.8 4189 + '@smithy/node-config-provider': 4.3.8 4190 + '@smithy/node-http-handler': 4.4.9 4191 + '@smithy/protocol-http': 5.3.8 4192 + '@smithy/smithy-client': 4.11.2 4193 + '@smithy/types': 4.12.0 4194 + '@smithy/url-parser': 4.2.8 4195 + '@smithy/util-base64': 4.3.0 4196 + '@smithy/util-body-length-browser': 4.2.0 4197 + '@smithy/util-body-length-node': 4.2.1 4198 + '@smithy/util-defaults-mode-browser': 4.3.29 4199 + '@smithy/util-defaults-mode-node': 4.2.32 4200 + '@smithy/util-endpoints': 3.2.8 4201 + '@smithy/util-middleware': 4.2.8 4202 + '@smithy/util-retry': 4.2.8 4203 + '@smithy/util-utf8': 4.2.0 4204 + tslib: 2.8.1 4205 + transitivePeerDependencies: 4206 + - aws-crt 4207 + 4208 + '@aws-sdk/client-s3@3.985.0': 4209 + dependencies: 4210 + '@aws-crypto/sha1-browser': 5.2.0 4211 + '@aws-crypto/sha256-browser': 5.2.0 4212 + '@aws-crypto/sha256-js': 5.2.0 4213 + '@aws-sdk/core': 3.973.7 4214 + '@aws-sdk/credential-provider-node': 3.972.6 4215 + '@aws-sdk/middleware-bucket-endpoint': 3.972.3 4216 + '@aws-sdk/middleware-expect-continue': 3.972.3 4217 + '@aws-sdk/middleware-flexible-checksums': 3.972.5 4218 + '@aws-sdk/middleware-host-header': 3.972.3 4219 + '@aws-sdk/middleware-location-constraint': 3.972.3 4220 + '@aws-sdk/middleware-logger': 3.972.3 4221 + '@aws-sdk/middleware-recursion-detection': 3.972.3 4222 + '@aws-sdk/middleware-sdk-s3': 3.972.7 4223 + '@aws-sdk/middleware-ssec': 3.972.3 4224 + '@aws-sdk/middleware-user-agent': 3.972.7 4225 + '@aws-sdk/region-config-resolver': 3.972.3 4226 + '@aws-sdk/signature-v4-multi-region': 3.985.0 4227 + '@aws-sdk/types': 3.973.1 4228 + '@aws-sdk/util-endpoints': 3.985.0 4229 + '@aws-sdk/util-user-agent-browser': 3.972.3 4230 + '@aws-sdk/util-user-agent-node': 3.972.5 4231 + '@smithy/config-resolver': 4.4.6 4232 + '@smithy/core': 3.22.1 4233 + '@smithy/eventstream-serde-browser': 4.2.8 4234 + '@smithy/eventstream-serde-config-resolver': 4.3.8 4235 + '@smithy/eventstream-serde-node': 4.2.8 4236 + '@smithy/fetch-http-handler': 5.3.9 4237 + '@smithy/hash-blob-browser': 4.2.9 4238 + '@smithy/hash-node': 4.2.8 4239 + '@smithy/hash-stream-node': 4.2.8 4240 + '@smithy/invalid-dependency': 4.2.8 4241 + '@smithy/md5-js': 4.2.8 4242 + '@smithy/middleware-content-length': 4.2.8 4243 + '@smithy/middleware-endpoint': 4.4.13 4244 + '@smithy/middleware-retry': 4.4.30 4245 + '@smithy/middleware-serde': 4.2.9 4246 + '@smithy/middleware-stack': 4.2.8 4247 + '@smithy/node-config-provider': 4.3.8 4248 + '@smithy/node-http-handler': 4.4.9 4249 + '@smithy/protocol-http': 5.3.8 4250 + '@smithy/smithy-client': 4.11.2 4251 + '@smithy/types': 4.12.0 4252 + '@smithy/url-parser': 4.2.8 4253 + '@smithy/util-base64': 4.3.0 4254 + '@smithy/util-body-length-browser': 4.2.0 4255 + '@smithy/util-body-length-node': 4.2.1 4256 + '@smithy/util-defaults-mode-browser': 4.3.29 4257 + '@smithy/util-defaults-mode-node': 4.2.32 4258 + '@smithy/util-endpoints': 3.2.8 4259 + '@smithy/util-middleware': 4.2.8 4260 + '@smithy/util-retry': 4.2.8 4261 + '@smithy/util-stream': 4.5.11 4262 + '@smithy/util-utf8': 4.2.0 4263 + '@smithy/util-waiter': 4.2.8 4264 + tslib: 2.8.1 4265 + transitivePeerDependencies: 4266 + - aws-crt 4267 + 4268 + '@aws-sdk/client-sso@3.985.0': 4269 + dependencies: 4270 + '@aws-crypto/sha256-browser': 5.2.0 4271 + '@aws-crypto/sha256-js': 5.2.0 4272 + '@aws-sdk/core': 3.973.7 4273 + '@aws-sdk/middleware-host-header': 3.972.3 4274 + '@aws-sdk/middleware-logger': 3.972.3 4275 + '@aws-sdk/middleware-recursion-detection': 3.972.3 4276 + '@aws-sdk/middleware-user-agent': 3.972.7 4277 + '@aws-sdk/region-config-resolver': 3.972.3 4278 + '@aws-sdk/types': 3.973.1 4279 + '@aws-sdk/util-endpoints': 3.985.0 4280 + '@aws-sdk/util-user-agent-browser': 3.972.3 4281 + '@aws-sdk/util-user-agent-node': 3.972.5 4282 + '@smithy/config-resolver': 4.4.6 4283 + '@smithy/core': 3.22.1 4284 + '@smithy/fetch-http-handler': 5.3.9 4285 + '@smithy/hash-node': 4.2.8 4286 + '@smithy/invalid-dependency': 4.2.8 4287 + '@smithy/middleware-content-length': 4.2.8 4288 + '@smithy/middleware-endpoint': 4.4.13 4289 + '@smithy/middleware-retry': 4.4.30 4290 + '@smithy/middleware-serde': 4.2.9 4291 + '@smithy/middleware-stack': 4.2.8 4292 + '@smithy/node-config-provider': 4.3.8 4293 + '@smithy/node-http-handler': 4.4.9 4294 + '@smithy/protocol-http': 5.3.8 4295 + '@smithy/smithy-client': 4.11.2 4296 + '@smithy/types': 4.12.0 4297 + '@smithy/url-parser': 4.2.8 4298 + '@smithy/util-base64': 4.3.0 4299 + '@smithy/util-body-length-browser': 4.2.0 4300 + '@smithy/util-body-length-node': 4.2.1 4301 + '@smithy/util-defaults-mode-browser': 4.3.29 4302 + '@smithy/util-defaults-mode-node': 4.2.32 4303 + '@smithy/util-endpoints': 3.2.8 4304 + '@smithy/util-middleware': 4.2.8 4305 + '@smithy/util-retry': 4.2.8 4306 + '@smithy/util-utf8': 4.2.0 4307 + tslib: 2.8.1 4308 + transitivePeerDependencies: 4309 + - aws-crt 4310 + 4311 + '@aws-sdk/core@3.973.7': 4312 + dependencies: 4313 + '@aws-sdk/types': 3.973.1 4314 + '@aws-sdk/xml-builder': 3.972.4 4315 + '@smithy/core': 3.22.1 4316 + '@smithy/node-config-provider': 4.3.8 4317 + '@smithy/property-provider': 4.2.8 4318 + '@smithy/protocol-http': 5.3.8 4319 + '@smithy/signature-v4': 5.3.8 4320 + '@smithy/smithy-client': 4.11.2 4321 + '@smithy/types': 4.12.0 4322 + '@smithy/util-base64': 4.3.0 4323 + '@smithy/util-middleware': 4.2.8 4324 + '@smithy/util-utf8': 4.2.0 4325 + tslib: 2.8.1 4326 + 4327 + '@aws-sdk/crc64-nvme@3.972.0': 4328 + dependencies: 4329 + '@smithy/types': 4.12.0 4330 + tslib: 2.8.1 4331 + 4332 + '@aws-sdk/credential-provider-env@3.972.5': 4333 + dependencies: 4334 + '@aws-sdk/core': 3.973.7 4335 + '@aws-sdk/types': 3.973.1 4336 + '@smithy/property-provider': 4.2.8 4337 + '@smithy/types': 4.12.0 4338 + tslib: 2.8.1 4339 + 4340 + '@aws-sdk/credential-provider-http@3.972.7': 4341 + dependencies: 4342 + '@aws-sdk/core': 3.973.7 4343 + '@aws-sdk/types': 3.973.1 4344 + '@smithy/fetch-http-handler': 5.3.9 4345 + '@smithy/node-http-handler': 4.4.9 4346 + '@smithy/property-provider': 4.2.8 4347 + '@smithy/protocol-http': 5.3.8 4348 + '@smithy/smithy-client': 4.11.2 4349 + '@smithy/types': 4.12.0 4350 + '@smithy/util-stream': 4.5.11 4351 + tslib: 2.8.1 4352 + 4353 + '@aws-sdk/credential-provider-ini@3.972.5': 4354 + dependencies: 4355 + '@aws-sdk/core': 3.973.7 4356 + '@aws-sdk/credential-provider-env': 3.972.5 4357 + '@aws-sdk/credential-provider-http': 3.972.7 4358 + '@aws-sdk/credential-provider-login': 3.972.5 4359 + '@aws-sdk/credential-provider-process': 3.972.5 4360 + '@aws-sdk/credential-provider-sso': 3.972.5 4361 + '@aws-sdk/credential-provider-web-identity': 3.972.5 4362 + '@aws-sdk/nested-clients': 3.985.0 4363 + '@aws-sdk/types': 3.973.1 4364 + '@smithy/credential-provider-imds': 4.2.8 4365 + '@smithy/property-provider': 4.2.8 4366 + '@smithy/shared-ini-file-loader': 4.4.3 4367 + '@smithy/types': 4.12.0 4368 + tslib: 2.8.1 4369 + transitivePeerDependencies: 4370 + - aws-crt 4371 + 4372 + '@aws-sdk/credential-provider-login@3.972.5': 4373 + dependencies: 4374 + '@aws-sdk/core': 3.973.7 4375 + '@aws-sdk/nested-clients': 3.985.0 4376 + '@aws-sdk/types': 3.973.1 4377 + '@smithy/property-provider': 4.2.8 4378 + '@smithy/protocol-http': 5.3.8 4379 + '@smithy/shared-ini-file-loader': 4.4.3 4380 + '@smithy/types': 4.12.0 4381 + tslib: 2.8.1 4382 + transitivePeerDependencies: 4383 + - aws-crt 4384 + 4385 + '@aws-sdk/credential-provider-node@3.972.6': 4386 + dependencies: 4387 + '@aws-sdk/credential-provider-env': 3.972.5 4388 + '@aws-sdk/credential-provider-http': 3.972.7 4389 + '@aws-sdk/credential-provider-ini': 3.972.5 4390 + '@aws-sdk/credential-provider-process': 3.972.5 4391 + '@aws-sdk/credential-provider-sso': 3.972.5 4392 + '@aws-sdk/credential-provider-web-identity': 3.972.5 4393 + '@aws-sdk/types': 3.973.1 4394 + '@smithy/credential-provider-imds': 4.2.8 4395 + '@smithy/property-provider': 4.2.8 4396 + '@smithy/shared-ini-file-loader': 4.4.3 4397 + '@smithy/types': 4.12.0 4398 + tslib: 2.8.1 4399 + transitivePeerDependencies: 4400 + - aws-crt 4401 + 4402 + '@aws-sdk/credential-provider-process@3.972.5': 4403 + dependencies: 4404 + '@aws-sdk/core': 3.973.7 4405 + '@aws-sdk/types': 3.973.1 4406 + '@smithy/property-provider': 4.2.8 4407 + '@smithy/shared-ini-file-loader': 4.4.3 4408 + '@smithy/types': 4.12.0 4409 + tslib: 2.8.1 4410 + 4411 + '@aws-sdk/credential-provider-sso@3.972.5': 4412 + dependencies: 4413 + '@aws-sdk/client-sso': 3.985.0 4414 + '@aws-sdk/core': 3.973.7 4415 + '@aws-sdk/token-providers': 3.985.0 4416 + '@aws-sdk/types': 3.973.1 4417 + '@smithy/property-provider': 4.2.8 4418 + '@smithy/shared-ini-file-loader': 4.4.3 4419 + '@smithy/types': 4.12.0 4420 + tslib: 2.8.1 4421 + transitivePeerDependencies: 4422 + - aws-crt 4423 + 4424 + '@aws-sdk/credential-provider-web-identity@3.972.5': 4425 + dependencies: 4426 + '@aws-sdk/core': 3.973.7 4427 + '@aws-sdk/nested-clients': 3.985.0 4428 + '@aws-sdk/types': 3.973.1 4429 + '@smithy/property-provider': 4.2.8 4430 + '@smithy/shared-ini-file-loader': 4.4.3 4431 + '@smithy/types': 4.12.0 4432 + tslib: 2.8.1 4433 + transitivePeerDependencies: 4434 + - aws-crt 4435 + 4436 + '@aws-sdk/lib-storage@3.879.0(@aws-sdk/client-s3@3.985.0)': 4437 + dependencies: 4438 + '@aws-sdk/client-s3': 3.985.0 4439 + '@smithy/abort-controller': 4.2.8 4440 + '@smithy/middleware-endpoint': 4.4.13 4441 + '@smithy/smithy-client': 4.11.2 4442 + buffer: 5.6.0 4443 + events: 3.3.0 4444 + stream-browserify: 3.0.0 4445 + tslib: 2.8.1 4446 + 4447 + '@aws-sdk/middleware-bucket-endpoint@3.972.3': 4448 + dependencies: 4449 + '@aws-sdk/types': 3.973.1 4450 + '@aws-sdk/util-arn-parser': 3.972.2 4451 + '@smithy/node-config-provider': 4.3.8 4452 + '@smithy/protocol-http': 5.3.8 4453 + '@smithy/types': 4.12.0 4454 + '@smithy/util-config-provider': 4.2.0 4455 + tslib: 2.8.1 4456 + 4457 + '@aws-sdk/middleware-expect-continue@3.972.3': 4458 + dependencies: 4459 + '@aws-sdk/types': 3.973.1 4460 + '@smithy/protocol-http': 5.3.8 4461 + '@smithy/types': 4.12.0 4462 + tslib: 2.8.1 4463 + 4464 + '@aws-sdk/middleware-flexible-checksums@3.972.5': 4465 + dependencies: 4466 + '@aws-crypto/crc32': 5.2.0 4467 + '@aws-crypto/crc32c': 5.2.0 4468 + '@aws-crypto/util': 5.2.0 4469 + '@aws-sdk/core': 3.973.7 4470 + '@aws-sdk/crc64-nvme': 3.972.0 4471 + '@aws-sdk/types': 3.973.1 4472 + '@smithy/is-array-buffer': 4.2.0 4473 + '@smithy/node-config-provider': 4.3.8 4474 + '@smithy/protocol-http': 5.3.8 4475 + '@smithy/types': 4.12.0 4476 + '@smithy/util-middleware': 4.2.8 4477 + '@smithy/util-stream': 4.5.11 4478 + '@smithy/util-utf8': 4.2.0 4479 + tslib: 2.8.1 4480 + 4481 + '@aws-sdk/middleware-host-header@3.972.3': 4482 + dependencies: 4483 + '@aws-sdk/types': 3.973.1 4484 + '@smithy/protocol-http': 5.3.8 4485 + '@smithy/types': 4.12.0 4486 + tslib: 2.8.1 4487 + 4488 + '@aws-sdk/middleware-location-constraint@3.972.3': 4489 + dependencies: 4490 + '@aws-sdk/types': 3.973.1 4491 + '@smithy/types': 4.12.0 4492 + tslib: 2.8.1 4493 + 4494 + '@aws-sdk/middleware-logger@3.972.3': 4495 + dependencies: 4496 + '@aws-sdk/types': 3.973.1 4497 + '@smithy/types': 4.12.0 4498 + tslib: 2.8.1 4499 + 4500 + '@aws-sdk/middleware-recursion-detection@3.972.3': 4501 + dependencies: 4502 + '@aws-sdk/types': 3.973.1 4503 + '@aws/lambda-invoke-store': 0.2.3 4504 + '@smithy/protocol-http': 5.3.8 4505 + '@smithy/types': 4.12.0 4506 + tslib: 2.8.1 4507 + 4508 + '@aws-sdk/middleware-sdk-s3@3.972.7': 4509 + dependencies: 4510 + '@aws-sdk/core': 3.973.7 4511 + '@aws-sdk/types': 3.973.1 4512 + '@aws-sdk/util-arn-parser': 3.972.2 4513 + '@smithy/core': 3.22.1 4514 + '@smithy/node-config-provider': 4.3.8 4515 + '@smithy/protocol-http': 5.3.8 4516 + '@smithy/signature-v4': 5.3.8 4517 + '@smithy/smithy-client': 4.11.2 4518 + '@smithy/types': 4.12.0 4519 + '@smithy/util-config-provider': 4.2.0 4520 + '@smithy/util-middleware': 4.2.8 4521 + '@smithy/util-stream': 4.5.11 4522 + '@smithy/util-utf8': 4.2.0 4523 + tslib: 2.8.1 4524 + 4525 + '@aws-sdk/middleware-ssec@3.972.3': 4526 + dependencies: 4527 + '@aws-sdk/types': 3.973.1 4528 + '@smithy/types': 4.12.0 4529 + tslib: 2.8.1 4530 + 4531 + '@aws-sdk/middleware-user-agent@3.972.7': 4532 + dependencies: 4533 + '@aws-sdk/core': 3.973.7 4534 + '@aws-sdk/types': 3.973.1 4535 + '@aws-sdk/util-endpoints': 3.985.0 4536 + '@smithy/core': 3.22.1 4537 + '@smithy/protocol-http': 5.3.8 4538 + '@smithy/types': 4.12.0 4539 + tslib: 2.8.1 4540 + 4541 + '@aws-sdk/nested-clients@3.985.0': 4542 + dependencies: 4543 + '@aws-crypto/sha256-browser': 5.2.0 4544 + '@aws-crypto/sha256-js': 5.2.0 4545 + '@aws-sdk/core': 3.973.7 4546 + '@aws-sdk/middleware-host-header': 3.972.3 4547 + '@aws-sdk/middleware-logger': 3.972.3 4548 + '@aws-sdk/middleware-recursion-detection': 3.972.3 4549 + '@aws-sdk/middleware-user-agent': 3.972.7 4550 + '@aws-sdk/region-config-resolver': 3.972.3 4551 + '@aws-sdk/types': 3.973.1 4552 + '@aws-sdk/util-endpoints': 3.985.0 4553 + '@aws-sdk/util-user-agent-browser': 3.972.3 4554 + '@aws-sdk/util-user-agent-node': 3.972.5 4555 + '@smithy/config-resolver': 4.4.6 4556 + '@smithy/core': 3.22.1 4557 + '@smithy/fetch-http-handler': 5.3.9 4558 + '@smithy/hash-node': 4.2.8 4559 + '@smithy/invalid-dependency': 4.2.8 4560 + '@smithy/middleware-content-length': 4.2.8 4561 + '@smithy/middleware-endpoint': 4.4.13 4562 + '@smithy/middleware-retry': 4.4.30 4563 + '@smithy/middleware-serde': 4.2.9 4564 + '@smithy/middleware-stack': 4.2.8 4565 + '@smithy/node-config-provider': 4.3.8 4566 + '@smithy/node-http-handler': 4.4.9 4567 + '@smithy/protocol-http': 5.3.8 4568 + '@smithy/smithy-client': 4.11.2 4569 + '@smithy/types': 4.12.0 4570 + '@smithy/url-parser': 4.2.8 4571 + '@smithy/util-base64': 4.3.0 4572 + '@smithy/util-body-length-browser': 4.2.0 4573 + '@smithy/util-body-length-node': 4.2.1 4574 + '@smithy/util-defaults-mode-browser': 4.3.29 4575 + '@smithy/util-defaults-mode-node': 4.2.32 4576 + '@smithy/util-endpoints': 3.2.8 4577 + '@smithy/util-middleware': 4.2.8 4578 + '@smithy/util-retry': 4.2.8 4579 + '@smithy/util-utf8': 4.2.0 4580 + tslib: 2.8.1 4581 + transitivePeerDependencies: 4582 + - aws-crt 4583 + 4584 + '@aws-sdk/region-config-resolver@3.972.3': 4585 + dependencies: 4586 + '@aws-sdk/types': 3.973.1 4587 + '@smithy/config-resolver': 4.4.6 4588 + '@smithy/node-config-provider': 4.3.8 4589 + '@smithy/types': 4.12.0 4590 + tslib: 2.8.1 4591 + 4592 + '@aws-sdk/signature-v4-multi-region@3.985.0': 4593 + dependencies: 4594 + '@aws-sdk/middleware-sdk-s3': 3.972.7 4595 + '@aws-sdk/types': 3.973.1 4596 + '@smithy/protocol-http': 5.3.8 4597 + '@smithy/signature-v4': 5.3.8 4598 + '@smithy/types': 4.12.0 4599 + tslib: 2.8.1 4600 + 4601 + '@aws-sdk/token-providers@3.985.0': 4602 + dependencies: 4603 + '@aws-sdk/core': 3.973.7 4604 + '@aws-sdk/nested-clients': 3.985.0 4605 + '@aws-sdk/types': 3.973.1 4606 + '@smithy/property-provider': 4.2.8 4607 + '@smithy/shared-ini-file-loader': 4.4.3 4608 + '@smithy/types': 4.12.0 4609 + tslib: 2.8.1 4610 + transitivePeerDependencies: 4611 + - aws-crt 4612 + 4613 + '@aws-sdk/types@3.973.1': 4614 + dependencies: 4615 + '@smithy/types': 4.12.0 4616 + tslib: 2.8.1 4617 + 4618 + '@aws-sdk/util-arn-parser@3.972.2': 4619 + dependencies: 4620 + tslib: 2.8.1 4621 + 4622 + '@aws-sdk/util-endpoints@3.985.0': 4623 + dependencies: 4624 + '@aws-sdk/types': 3.973.1 4625 + '@smithy/types': 4.12.0 4626 + '@smithy/url-parser': 4.2.8 4627 + '@smithy/util-endpoints': 3.2.8 4628 + tslib: 2.8.1 4629 + 4630 + '@aws-sdk/util-locate-window@3.965.4': 4631 + dependencies: 4632 + tslib: 2.8.1 4633 + 4634 + '@aws-sdk/util-user-agent-browser@3.972.3': 4635 + dependencies: 4636 + '@aws-sdk/types': 3.973.1 4637 + '@smithy/types': 4.12.0 4638 + bowser: 2.13.1 4639 + tslib: 2.8.1 4640 + 4641 + '@aws-sdk/util-user-agent-node@3.972.5': 4642 + dependencies: 4643 + '@aws-sdk/middleware-user-agent': 3.972.7 4644 + '@aws-sdk/types': 3.973.1 4645 + '@smithy/node-config-provider': 4.3.8 4646 + '@smithy/types': 4.12.0 4647 + tslib: 2.8.1 4648 + 4649 + '@aws-sdk/xml-builder@3.972.4': 4650 + dependencies: 4651 + '@smithy/types': 4.12.0 4652 + fast-xml-parser: 5.3.4 4653 + tslib: 2.8.1 4654 + 4655 + '@aws/lambda-invoke-store@0.2.3': {} 4656 + 4657 + '@badrap/valita@0.4.6': {} 4658 + 4659 + '@bufbuild/protobuf@1.10.1': {} 4660 + 4661 + '@catppuccin/tailwindcss@1.0.0': {} 4662 + 4663 + '@connectrpc/connect-express@1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect-node@1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)))(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1))': 4664 + dependencies: 4665 + '@bufbuild/protobuf': 1.10.1 4666 + '@connectrpc/connect': 1.7.0(@bufbuild/protobuf@1.10.1) 4667 + '@connectrpc/connect-node': 1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)) 4668 + 4669 + '@connectrpc/connect-node@1.7.0(@bufbuild/protobuf@1.10.1)(@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1))': 4670 + dependencies: 4671 + '@bufbuild/protobuf': 1.10.1 4672 + '@connectrpc/connect': 1.7.0(@bufbuild/protobuf@1.10.1) 4673 + undici: 5.29.0 4674 + 4675 + '@connectrpc/connect@1.7.0(@bufbuild/protobuf@1.10.1)': 4676 + dependencies: 4677 + '@bufbuild/protobuf': 1.10.1 4678 + 4679 + '@did-plc/lib@0.0.1': 4680 + dependencies: 4681 + '@atproto/common': 0.1.0 4682 + '@atproto/crypto': 0.1.0 4683 + '@ipld/dag-cbor': 7.0.3 4684 + axios: 1.13.4 4685 + multiformats: 9.9.0 4686 + uint8arrays: 3.0.0 4687 + zod: 3.25.76 4688 + transitivePeerDependencies: 4689 + - debug 4690 + 4691 + '@did-plc/lib@0.0.4': 4692 + dependencies: 4693 + '@atproto/common': 0.1.1 4694 + '@atproto/crypto': 0.1.0 4695 + '@ipld/dag-cbor': 7.0.3 4696 + axios: 1.13.4 4697 + multiformats: 9.9.0 4698 + uint8arrays: 3.0.0 4699 + zod: 3.25.76 4700 + transitivePeerDependencies: 4701 + - debug 4702 + 4703 + '@did-plc/server@0.0.1': 4704 + dependencies: 4705 + '@atproto/common': 0.1.0 4706 + '@atproto/crypto': 0.1.0 4707 + '@did-plc/lib': 0.0.1 4708 + axios: 1.13.4 4709 + cors: 2.8.6 4710 + express: 4.22.1 4711 + express-async-errors: 3.1.1(express@4.22.1) 4712 + http-terminator: 3.2.0 4713 + kysely: 0.23.5 4714 + multiformats: 9.9.0 4715 + pg: 8.18.0 4716 + pino: 8.21.0 4717 + pino-http: 8.6.1 4718 + transitivePeerDependencies: 4719 + - debug 4720 + - pg-native 4721 + - supports-color 4722 + 4723 + '@emnapi/runtime@1.8.1': 4724 + dependencies: 4725 + tslib: 2.8.1 4726 + optional: true 4727 + 4728 + '@esbuild/aix-ppc64@0.27.3': 4729 + optional: true 4730 + 4731 + '@esbuild/android-arm64@0.27.3': 4732 + optional: true 4733 + 4734 + '@esbuild/android-arm@0.27.3': 4735 + optional: true 4736 + 4737 + '@esbuild/android-x64@0.27.3': 4738 + optional: true 4739 + 4740 + '@esbuild/darwin-arm64@0.27.3': 4741 + optional: true 4742 + 4743 + '@esbuild/darwin-x64@0.27.3': 4744 + optional: true 4745 + 4746 + '@esbuild/freebsd-arm64@0.27.3': 4747 + optional: true 4748 + 4749 + '@esbuild/freebsd-x64@0.27.3': 4750 + optional: true 4751 + 4752 + '@esbuild/linux-arm64@0.27.3': 4753 + optional: true 4754 + 4755 + '@esbuild/linux-arm@0.27.3': 4756 + optional: true 4757 + 4758 + '@esbuild/linux-ia32@0.27.3': 4759 + optional: true 4760 + 4761 + '@esbuild/linux-loong64@0.27.3': 4762 + optional: true 4763 + 4764 + '@esbuild/linux-mips64el@0.27.3': 4765 + optional: true 4766 + 4767 + '@esbuild/linux-ppc64@0.27.3': 4768 + optional: true 4769 + 4770 + '@esbuild/linux-riscv64@0.27.3': 4771 + optional: true 4772 + 4773 + '@esbuild/linux-s390x@0.27.3': 4774 + optional: true 4775 + 4776 + '@esbuild/linux-x64@0.27.3': 4777 + optional: true 4778 + 4779 + '@esbuild/netbsd-arm64@0.27.3': 4780 + optional: true 4781 + 4782 + '@esbuild/netbsd-x64@0.27.3': 4783 + optional: true 4784 + 4785 + '@esbuild/openbsd-arm64@0.27.3': 4786 + optional: true 4787 + 4788 + '@esbuild/openbsd-x64@0.27.3': 4789 + optional: true 4790 + 4791 + '@esbuild/openharmony-arm64@0.27.3': 4792 + optional: true 4793 + 4794 + '@esbuild/sunos-x64@0.27.3': 4795 + optional: true 4796 + 4797 + '@esbuild/win32-arm64@0.27.3': 4798 + optional: true 4799 + 4800 + '@esbuild/win32-ia32@0.27.3': 4801 + optional: true 4802 + 4803 + '@esbuild/win32-x64@0.27.3': 4804 + optional: true 4805 + 4806 + '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': 4807 + dependencies: 4808 + eslint: 9.39.2(jiti@2.6.1) 4809 + eslint-visitor-keys: 3.4.3 4810 + 4811 + '@eslint-community/regexpp@4.12.2': {} 4812 + 4813 + '@eslint/compat@2.0.2(eslint@9.39.2(jiti@2.6.1))': 4814 + dependencies: 4815 + '@eslint/core': 1.1.0 4816 + optionalDependencies: 4817 + eslint: 9.39.2(jiti@2.6.1) 4818 + 4819 + '@eslint/config-array@0.21.1': 4820 + dependencies: 4821 + '@eslint/object-schema': 2.1.7 4822 + debug: 4.4.3 4823 + minimatch: 3.1.2 4824 + transitivePeerDependencies: 4825 + - supports-color 4826 + 4827 + '@eslint/config-helpers@0.4.2': 4828 + dependencies: 4829 + '@eslint/core': 0.17.0 4830 + 4831 + '@eslint/core@0.17.0': 4832 + dependencies: 4833 + '@types/json-schema': 7.0.15 4834 + 4835 + '@eslint/core@1.1.0': 4836 + dependencies: 4837 + '@types/json-schema': 7.0.15 4838 + 4839 + '@eslint/eslintrc@3.3.3': 4840 + dependencies: 4841 + ajv: 6.12.6 4842 + debug: 4.4.3 4843 + espree: 10.4.0 4844 + globals: 14.0.0 4845 + ignore: 5.3.2 4846 + import-fresh: 3.3.1 4847 + js-yaml: 4.1.1 4848 + minimatch: 3.1.2 4849 + strip-json-comments: 3.1.1 4850 + transitivePeerDependencies: 4851 + - supports-color 4852 + 4853 + '@eslint/js@9.39.2': {} 4854 + 4855 + '@eslint/object-schema@2.1.7': {} 4856 + 4857 + '@eslint/plugin-kit@0.4.1': 4858 + dependencies: 4859 + '@eslint/core': 0.17.0 4860 + levn: 0.4.1 4861 + 4862 + '@fastify/busboy@2.1.1': {} 4863 + 4864 + '@growthbook/growthbook@1.6.4': 4865 + dependencies: 4866 + dom-mutator: 0.6.0 4867 + 4868 + '@grpc/grpc-js@1.14.3': 4869 + dependencies: 4870 + '@grpc/proto-loader': 0.8.0 4871 + '@js-sdsl/ordered-map': 4.4.2 4872 + 4873 + '@grpc/proto-loader@0.7.15': 4874 + dependencies: 4875 + lodash.camelcase: 4.3.0 4876 + long: 5.3.2 4877 + protobufjs: 7.5.4 4878 + yargs: 17.7.2 4879 + 4880 + '@grpc/proto-loader@0.8.0': 4881 + dependencies: 4882 + lodash.camelcase: 4.3.0 4883 + long: 5.3.2 4884 + protobufjs: 7.5.4 4885 + yargs: 17.7.2 4886 + 4887 + '@hapi/accept@6.0.3': 4888 + dependencies: 4889 + '@hapi/boom': 10.0.1 4890 + '@hapi/hoek': 11.0.7 4891 + 4892 + '@hapi/address@5.1.1': 4893 + dependencies: 4894 + '@hapi/hoek': 11.0.7 4895 + 4896 + '@hapi/boom@10.0.1': 4897 + dependencies: 4898 + '@hapi/hoek': 11.0.7 4899 + 4900 + '@hapi/bourne@3.0.0': {} 4901 + 4902 + '@hapi/content@6.0.0': 4903 + dependencies: 4904 + '@hapi/boom': 10.0.1 4905 + 4906 + '@hapi/hoek@11.0.7': {} 4907 + 4908 + '@humanfs/core@0.19.1': {} 4909 + 4910 + '@humanfs/node@0.16.7': 4911 + dependencies: 4912 + '@humanfs/core': 0.19.1 4913 + '@humanwhocodes/retry': 0.4.3 4914 + 4915 + '@humanwhocodes/module-importer@1.0.1': {} 4916 + 4917 + '@humanwhocodes/retry@0.4.3': {} 4918 + 4919 + '@img/sharp-darwin-arm64@0.33.5': 4920 + optionalDependencies: 4921 + '@img/sharp-libvips-darwin-arm64': 1.0.4 4922 + optional: true 4923 + 4924 + '@img/sharp-darwin-x64@0.33.5': 4925 + optionalDependencies: 4926 + '@img/sharp-libvips-darwin-x64': 1.0.4 4927 + optional: true 4928 + 4929 + '@img/sharp-libvips-darwin-arm64@1.0.4': 4930 + optional: true 4931 + 4932 + '@img/sharp-libvips-darwin-x64@1.0.4': 4933 + optional: true 4934 + 4935 + '@img/sharp-libvips-linux-arm64@1.0.4': 4936 + optional: true 4937 + 4938 + '@img/sharp-libvips-linux-arm@1.0.5': 4939 + optional: true 4940 + 4941 + '@img/sharp-libvips-linux-s390x@1.0.4': 4942 + optional: true 4943 + 4944 + '@img/sharp-libvips-linux-x64@1.0.4': 4945 + optional: true 4946 + 4947 + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': 4948 + optional: true 4949 + 4950 + '@img/sharp-libvips-linuxmusl-x64@1.0.4': 4951 + optional: true 4952 + 4953 + '@img/sharp-linux-arm64@0.33.5': 4954 + optionalDependencies: 4955 + '@img/sharp-libvips-linux-arm64': 1.0.4 4956 + optional: true 4957 + 4958 + '@img/sharp-linux-arm@0.33.5': 4959 + optionalDependencies: 4960 + '@img/sharp-libvips-linux-arm': 1.0.5 4961 + optional: true 4962 + 4963 + '@img/sharp-linux-s390x@0.33.5': 4964 + optionalDependencies: 4965 + '@img/sharp-libvips-linux-s390x': 1.0.4 4966 + optional: true 4967 + 4968 + '@img/sharp-linux-x64@0.33.5': 4969 + optionalDependencies: 4970 + '@img/sharp-libvips-linux-x64': 1.0.4 4971 + optional: true 4972 + 4973 + '@img/sharp-linuxmusl-arm64@0.33.5': 4974 + optionalDependencies: 4975 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 4976 + optional: true 4977 + 4978 + '@img/sharp-linuxmusl-x64@0.33.5': 4979 + optionalDependencies: 4980 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 4981 + optional: true 4982 + 4983 + '@img/sharp-wasm32@0.33.5': 4984 + dependencies: 4985 + '@emnapi/runtime': 1.8.1 4986 + optional: true 4987 + 4988 + '@img/sharp-win32-ia32@0.33.5': 4989 + optional: true 4990 + 4991 + '@img/sharp-win32-x64@0.33.5': 4992 + optional: true 4993 + 4994 + '@ioredis/commands@1.5.0': {} 4995 + 4996 + '@ipld/dag-cbor@7.0.3': 4997 + dependencies: 4998 + cborg: 1.10.2 4999 + multiformats: 9.9.0 5000 + 5001 + '@isaacs/cliui@8.0.2': 5002 + dependencies: 5003 + string-width: 5.1.2 5004 + string-width-cjs: string-width@4.2.3 5005 + strip-ansi: 7.1.2 5006 + strip-ansi-cjs: strip-ansi@6.0.1 5007 + wrap-ansi: 8.1.0 5008 + wrap-ansi-cjs: wrap-ansi@7.0.0 5009 + 5010 + '@jridgewell/gen-mapping@0.3.13': 5011 + dependencies: 5012 + '@jridgewell/sourcemap-codec': 1.5.5 5013 + '@jridgewell/trace-mapping': 0.3.31 5014 + 5015 + '@jridgewell/remapping@2.3.5': 5016 + dependencies: 5017 + '@jridgewell/gen-mapping': 0.3.13 5018 + '@jridgewell/trace-mapping': 0.3.31 5019 + 5020 + '@jridgewell/resolve-uri@3.1.2': {} 5021 + 5022 + '@jridgewell/sourcemap-codec@1.5.5': {} 5023 + 5024 + '@jridgewell/trace-mapping@0.3.31': 5025 + dependencies: 5026 + '@jridgewell/resolve-uri': 3.1.2 5027 + '@jridgewell/sourcemap-codec': 1.5.5 5028 + 5029 + '@js-sdsl/ordered-map@4.4.2': {} 5030 + 5031 + '@noble/curves@1.9.7': 5032 + dependencies: 5033 + '@noble/hashes': 1.8.0 5034 + 5035 + '@noble/hashes@1.8.0': {} 5036 + 5037 + '@noble/secp256k1@1.7.2': {} 5038 + 5039 + '@noble/secp256k1@3.0.0': {} 5040 + 5041 + '@pkgjs/parseargs@0.11.0': 5042 + optional: true 5043 + 5044 + '@polka/url@1.0.0-next.29': {} 5045 + 5046 + '@protobufjs/aspromise@1.1.2': {} 5047 + 5048 + '@protobufjs/base64@1.1.2': {} 5049 + 5050 + '@protobufjs/codegen@2.0.4': {} 5051 + 5052 + '@protobufjs/eventemitter@1.1.0': {} 5053 + 5054 + '@protobufjs/fetch@1.1.0': 5055 + dependencies: 5056 + '@protobufjs/aspromise': 1.1.2 5057 + '@protobufjs/inquire': 1.1.0 5058 + 5059 + '@protobufjs/float@1.0.2': {} 5060 + 5061 + '@protobufjs/inquire@1.1.0': {} 5062 + 5063 + '@protobufjs/path@1.1.2': {} 5064 + 5065 + '@protobufjs/pool@1.1.0': {} 5066 + 5067 + '@protobufjs/utf8@1.1.0': {} 5068 + 5069 + '@rollup/plugin-commonjs@29.0.0(rollup@4.57.1)': 5070 + dependencies: 5071 + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) 5072 + commondir: 1.0.1 5073 + estree-walker: 2.0.2 5074 + fdir: 6.5.0(picomatch@4.0.3) 5075 + is-reference: 1.2.1 5076 + magic-string: 0.30.21 5077 + picomatch: 4.0.3 5078 + optionalDependencies: 5079 + rollup: 4.57.1 5080 + 5081 + '@rollup/plugin-json@6.1.0(rollup@4.57.1)': 5082 + dependencies: 5083 + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) 5084 + optionalDependencies: 5085 + rollup: 4.57.1 5086 + 5087 + '@rollup/plugin-node-resolve@16.0.3(rollup@4.57.1)': 5088 + dependencies: 5089 + '@rollup/pluginutils': 5.3.0(rollup@4.57.1) 5090 + '@types/resolve': 1.20.2 5091 + deepmerge: 4.3.1 5092 + is-module: 1.0.0 5093 + resolve: 1.22.11 5094 + optionalDependencies: 5095 + rollup: 4.57.1 5096 + 5097 + '@rollup/pluginutils@5.3.0(rollup@4.57.1)': 5098 + dependencies: 5099 + '@types/estree': 1.0.8 5100 + estree-walker: 2.0.2 5101 + picomatch: 4.0.3 5102 + optionalDependencies: 5103 + rollup: 4.57.1 5104 + 5105 + '@rollup/rollup-android-arm-eabi@4.57.1': 5106 + optional: true 5107 + 5108 + '@rollup/rollup-android-arm64@4.57.1': 5109 + optional: true 5110 + 5111 + '@rollup/rollup-darwin-arm64@4.57.1': 5112 + optional: true 5113 + 5114 + '@rollup/rollup-darwin-x64@4.57.1': 5115 + optional: true 5116 + 5117 + '@rollup/rollup-freebsd-arm64@4.57.1': 5118 + optional: true 5119 + 5120 + '@rollup/rollup-freebsd-x64@4.57.1': 5121 + optional: true 5122 + 5123 + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': 5124 + optional: true 5125 + 5126 + '@rollup/rollup-linux-arm-musleabihf@4.57.1': 5127 + optional: true 5128 + 5129 + '@rollup/rollup-linux-arm64-gnu@4.57.1': 5130 + optional: true 5131 + 5132 + '@rollup/rollup-linux-arm64-musl@4.57.1': 5133 + optional: true 5134 + 5135 + '@rollup/rollup-linux-loong64-gnu@4.57.1': 5136 + optional: true 5137 + 5138 + '@rollup/rollup-linux-loong64-musl@4.57.1': 5139 + optional: true 5140 + 5141 + '@rollup/rollup-linux-ppc64-gnu@4.57.1': 5142 + optional: true 5143 + 5144 + '@rollup/rollup-linux-ppc64-musl@4.57.1': 5145 + optional: true 5146 + 5147 + '@rollup/rollup-linux-riscv64-gnu@4.57.1': 5148 + optional: true 5149 + 5150 + '@rollup/rollup-linux-riscv64-musl@4.57.1': 5151 + optional: true 5152 + 5153 + '@rollup/rollup-linux-s390x-gnu@4.57.1': 5154 + optional: true 5155 + 5156 + '@rollup/rollup-linux-x64-gnu@4.57.1': 5157 + optional: true 5158 + 5159 + '@rollup/rollup-linux-x64-musl@4.57.1': 5160 + optional: true 5161 + 5162 + '@rollup/rollup-openbsd-x64@4.57.1': 5163 + optional: true 5164 + 5165 + '@rollup/rollup-openharmony-arm64@4.57.1': 5166 + optional: true 5167 + 5168 + '@rollup/rollup-win32-arm64-msvc@4.57.1': 5169 + optional: true 5170 + 5171 + '@rollup/rollup-win32-ia32-msvc@4.57.1': 5172 + optional: true 5173 + 5174 + '@rollup/rollup-win32-x64-gnu@4.57.1': 5175 + optional: true 5176 + 5177 + '@rollup/rollup-win32-x64-msvc@4.57.1': 5178 + optional: true 5179 + 5180 + '@smithy/abort-controller@4.2.8': 5181 + dependencies: 5182 + '@smithy/types': 4.12.0 5183 + tslib: 2.8.1 5184 + 5185 + '@smithy/chunked-blob-reader-native@4.2.1': 5186 + dependencies: 5187 + '@smithy/util-base64': 4.3.0 5188 + tslib: 2.8.1 5189 + 5190 + '@smithy/chunked-blob-reader@5.2.0': 5191 + dependencies: 5192 + tslib: 2.8.1 5193 + 5194 + '@smithy/config-resolver@4.4.6': 5195 + dependencies: 5196 + '@smithy/node-config-provider': 4.3.8 5197 + '@smithy/types': 4.12.0 5198 + '@smithy/util-config-provider': 4.2.0 5199 + '@smithy/util-endpoints': 3.2.8 5200 + '@smithy/util-middleware': 4.2.8 5201 + tslib: 2.8.1 5202 + 5203 + '@smithy/core@3.22.1': 5204 + dependencies: 5205 + '@smithy/middleware-serde': 4.2.9 5206 + '@smithy/protocol-http': 5.3.8 5207 + '@smithy/types': 4.12.0 5208 + '@smithy/util-base64': 4.3.0 5209 + '@smithy/util-body-length-browser': 4.2.0 5210 + '@smithy/util-middleware': 4.2.8 5211 + '@smithy/util-stream': 4.5.11 5212 + '@smithy/util-utf8': 4.2.0 5213 + '@smithy/uuid': 1.1.0 5214 + tslib: 2.8.1 5215 + 5216 + '@smithy/credential-provider-imds@4.2.8': 5217 + dependencies: 5218 + '@smithy/node-config-provider': 4.3.8 5219 + '@smithy/property-provider': 4.2.8 5220 + '@smithy/types': 4.12.0 5221 + '@smithy/url-parser': 4.2.8 5222 + tslib: 2.8.1 5223 + 5224 + '@smithy/eventstream-codec@4.2.8': 5225 + dependencies: 5226 + '@aws-crypto/crc32': 5.2.0 5227 + '@smithy/types': 4.12.0 5228 + '@smithy/util-hex-encoding': 4.2.0 5229 + tslib: 2.8.1 5230 + 5231 + '@smithy/eventstream-serde-browser@4.2.8': 5232 + dependencies: 5233 + '@smithy/eventstream-serde-universal': 4.2.8 5234 + '@smithy/types': 4.12.0 5235 + tslib: 2.8.1 5236 + 5237 + '@smithy/eventstream-serde-config-resolver@4.3.8': 5238 + dependencies: 5239 + '@smithy/types': 4.12.0 5240 + tslib: 2.8.1 5241 + 5242 + '@smithy/eventstream-serde-node@4.2.8': 5243 + dependencies: 5244 + '@smithy/eventstream-serde-universal': 4.2.8 5245 + '@smithy/types': 4.12.0 5246 + tslib: 2.8.1 5247 + 5248 + '@smithy/eventstream-serde-universal@4.2.8': 5249 + dependencies: 5250 + '@smithy/eventstream-codec': 4.2.8 5251 + '@smithy/types': 4.12.0 5252 + tslib: 2.8.1 5253 + 5254 + '@smithy/fetch-http-handler@5.3.9': 5255 + dependencies: 5256 + '@smithy/protocol-http': 5.3.8 5257 + '@smithy/querystring-builder': 4.2.8 5258 + '@smithy/types': 4.12.0 5259 + '@smithy/util-base64': 4.3.0 5260 + tslib: 2.8.1 5261 + 5262 + '@smithy/hash-blob-browser@4.2.9': 5263 + dependencies: 5264 + '@smithy/chunked-blob-reader': 5.2.0 5265 + '@smithy/chunked-blob-reader-native': 4.2.1 5266 + '@smithy/types': 4.12.0 5267 + tslib: 2.8.1 5268 + 5269 + '@smithy/hash-node@4.2.8': 5270 + dependencies: 5271 + '@smithy/types': 4.12.0 5272 + '@smithy/util-buffer-from': 4.2.0 5273 + '@smithy/util-utf8': 4.2.0 5274 + tslib: 2.8.1 5275 + 5276 + '@smithy/hash-stream-node@4.2.8': 5277 + dependencies: 5278 + '@smithy/types': 4.12.0 5279 + '@smithy/util-utf8': 4.2.0 5280 + tslib: 2.8.1 5281 + 5282 + '@smithy/invalid-dependency@4.2.8': 5283 + dependencies: 5284 + '@smithy/types': 4.12.0 5285 + tslib: 2.8.1 5286 + 5287 + '@smithy/is-array-buffer@2.2.0': 5288 + dependencies: 5289 + tslib: 2.8.1 5290 + 5291 + '@smithy/is-array-buffer@4.2.0': 5292 + dependencies: 5293 + tslib: 2.8.1 5294 + 5295 + '@smithy/md5-js@4.2.8': 5296 + dependencies: 5297 + '@smithy/types': 4.12.0 5298 + '@smithy/util-utf8': 4.2.0 5299 + tslib: 2.8.1 5300 + 5301 + '@smithy/middleware-content-length@4.2.8': 5302 + dependencies: 5303 + '@smithy/protocol-http': 5.3.8 5304 + '@smithy/types': 4.12.0 5305 + tslib: 2.8.1 5306 + 5307 + '@smithy/middleware-endpoint@4.4.13': 5308 + dependencies: 5309 + '@smithy/core': 3.22.1 5310 + '@smithy/middleware-serde': 4.2.9 5311 + '@smithy/node-config-provider': 4.3.8 5312 + '@smithy/shared-ini-file-loader': 4.4.3 5313 + '@smithy/types': 4.12.0 5314 + '@smithy/url-parser': 4.2.8 5315 + '@smithy/util-middleware': 4.2.8 5316 + tslib: 2.8.1 5317 + 5318 + '@smithy/middleware-retry@4.4.30': 5319 + dependencies: 5320 + '@smithy/node-config-provider': 4.3.8 5321 + '@smithy/protocol-http': 5.3.8 5322 + '@smithy/service-error-classification': 4.2.8 5323 + '@smithy/smithy-client': 4.11.2 5324 + '@smithy/types': 4.12.0 5325 + '@smithy/util-middleware': 4.2.8 5326 + '@smithy/util-retry': 4.2.8 5327 + '@smithy/uuid': 1.1.0 5328 + tslib: 2.8.1 5329 + 5330 + '@smithy/middleware-serde@4.2.9': 5331 + dependencies: 5332 + '@smithy/protocol-http': 5.3.8 5333 + '@smithy/types': 4.12.0 5334 + tslib: 2.8.1 5335 + 5336 + '@smithy/middleware-stack@4.2.8': 5337 + dependencies: 5338 + '@smithy/types': 4.12.0 5339 + tslib: 2.8.1 5340 + 5341 + '@smithy/node-config-provider@4.3.8': 5342 + dependencies: 5343 + '@smithy/property-provider': 4.2.8 5344 + '@smithy/shared-ini-file-loader': 4.4.3 5345 + '@smithy/types': 4.12.0 5346 + tslib: 2.8.1 5347 + 5348 + '@smithy/node-http-handler@4.4.9': 5349 + dependencies: 5350 + '@smithy/abort-controller': 4.2.8 5351 + '@smithy/protocol-http': 5.3.8 5352 + '@smithy/querystring-builder': 4.2.8 5353 + '@smithy/types': 4.12.0 5354 + tslib: 2.8.1 5355 + 5356 + '@smithy/property-provider@4.2.8': 5357 + dependencies: 5358 + '@smithy/types': 4.12.0 5359 + tslib: 2.8.1 5360 + 5361 + '@smithy/protocol-http@5.3.8': 5362 + dependencies: 5363 + '@smithy/types': 4.12.0 5364 + tslib: 2.8.1 5365 + 5366 + '@smithy/querystring-builder@4.2.8': 5367 + dependencies: 5368 + '@smithy/types': 4.12.0 5369 + '@smithy/util-uri-escape': 4.2.0 5370 + tslib: 2.8.1 5371 + 5372 + '@smithy/querystring-parser@4.2.8': 5373 + dependencies: 5374 + '@smithy/types': 4.12.0 5375 + tslib: 2.8.1 5376 + 5377 + '@smithy/service-error-classification@4.2.8': 5378 + dependencies: 5379 + '@smithy/types': 4.12.0 5380 + 5381 + '@smithy/shared-ini-file-loader@4.4.3': 5382 + dependencies: 5383 + '@smithy/types': 4.12.0 5384 + tslib: 2.8.1 5385 + 5386 + '@smithy/signature-v4@5.3.8': 5387 + dependencies: 5388 + '@smithy/is-array-buffer': 4.2.0 5389 + '@smithy/protocol-http': 5.3.8 5390 + '@smithy/types': 4.12.0 5391 + '@smithy/util-hex-encoding': 4.2.0 5392 + '@smithy/util-middleware': 4.2.8 5393 + '@smithy/util-uri-escape': 4.2.0 5394 + '@smithy/util-utf8': 4.2.0 5395 + tslib: 2.8.1 5396 + 5397 + '@smithy/smithy-client@4.11.2': 5398 + dependencies: 5399 + '@smithy/core': 3.22.1 5400 + '@smithy/middleware-endpoint': 4.4.13 5401 + '@smithy/middleware-stack': 4.2.8 5402 + '@smithy/protocol-http': 5.3.8 5403 + '@smithy/types': 4.12.0 5404 + '@smithy/util-stream': 4.5.11 5405 + tslib: 2.8.1 5406 + 5407 + '@smithy/types@4.12.0': 5408 + dependencies: 5409 + tslib: 2.8.1 5410 + 5411 + '@smithy/url-parser@4.2.8': 5412 + dependencies: 5413 + '@smithy/querystring-parser': 4.2.8 5414 + '@smithy/types': 4.12.0 5415 + tslib: 2.8.1 5416 + 5417 + '@smithy/util-base64@4.3.0': 5418 + dependencies: 5419 + '@smithy/util-buffer-from': 4.2.0 5420 + '@smithy/util-utf8': 4.2.0 5421 + tslib: 2.8.1 5422 + 5423 + '@smithy/util-body-length-browser@4.2.0': 5424 + dependencies: 5425 + tslib: 2.8.1 5426 + 5427 + '@smithy/util-body-length-node@4.2.1': 5428 + dependencies: 5429 + tslib: 2.8.1 5430 + 5431 + '@smithy/util-buffer-from@2.2.0': 5432 + dependencies: 5433 + '@smithy/is-array-buffer': 2.2.0 5434 + tslib: 2.8.1 5435 + 5436 + '@smithy/util-buffer-from@4.2.0': 5437 + dependencies: 5438 + '@smithy/is-array-buffer': 4.2.0 5439 + tslib: 2.8.1 5440 + 5441 + '@smithy/util-config-provider@4.2.0': 5442 + dependencies: 5443 + tslib: 2.8.1 5444 + 5445 + '@smithy/util-defaults-mode-browser@4.3.29': 5446 + dependencies: 5447 + '@smithy/property-provider': 4.2.8 5448 + '@smithy/smithy-client': 4.11.2 5449 + '@smithy/types': 4.12.0 5450 + tslib: 2.8.1 5451 + 5452 + '@smithy/util-defaults-mode-node@4.2.32': 5453 + dependencies: 5454 + '@smithy/config-resolver': 4.4.6 5455 + '@smithy/credential-provider-imds': 4.2.8 5456 + '@smithy/node-config-provider': 4.3.8 5457 + '@smithy/property-provider': 4.2.8 5458 + '@smithy/smithy-client': 4.11.2 5459 + '@smithy/types': 4.12.0 5460 + tslib: 2.8.1 5461 + 5462 + '@smithy/util-endpoints@3.2.8': 5463 + dependencies: 5464 + '@smithy/node-config-provider': 4.3.8 5465 + '@smithy/types': 4.12.0 5466 + tslib: 2.8.1 5467 + 5468 + '@smithy/util-hex-encoding@4.2.0': 5469 + dependencies: 5470 + tslib: 2.8.1 5471 + 5472 + '@smithy/util-middleware@4.2.8': 5473 + dependencies: 5474 + '@smithy/types': 4.12.0 5475 + tslib: 2.8.1 5476 + 5477 + '@smithy/util-retry@4.2.8': 5478 + dependencies: 5479 + '@smithy/service-error-classification': 4.2.8 5480 + '@smithy/types': 4.12.0 5481 + tslib: 2.8.1 5482 + 5483 + '@smithy/util-stream@4.5.11': 5484 + dependencies: 5485 + '@smithy/fetch-http-handler': 5.3.9 5486 + '@smithy/node-http-handler': 4.4.9 5487 + '@smithy/types': 4.12.0 5488 + '@smithy/util-base64': 4.3.0 5489 + '@smithy/util-buffer-from': 4.2.0 5490 + '@smithy/util-hex-encoding': 4.2.0 5491 + '@smithy/util-utf8': 4.2.0 5492 + tslib: 2.8.1 5493 + 5494 + '@smithy/util-uri-escape@4.2.0': 5495 + dependencies: 5496 + tslib: 2.8.1 5497 + 5498 + '@smithy/util-utf8@2.3.0': 5499 + dependencies: 5500 + '@smithy/util-buffer-from': 2.2.0 5501 + tslib: 2.8.1 5502 + 5503 + '@smithy/util-utf8@4.2.0': 5504 + dependencies: 5505 + '@smithy/util-buffer-from': 4.2.0 5506 + tslib: 2.8.1 5507 + 5508 + '@smithy/util-waiter@4.2.8': 5509 + dependencies: 5510 + '@smithy/abort-controller': 4.2.8 5511 + '@smithy/types': 4.12.0 5512 + tslib: 2.8.1 5513 + 5514 + '@smithy/uuid@1.1.0': 5515 + dependencies: 5516 + tslib: 2.8.1 5517 + 5518 + '@standard-schema/spec@1.1.0': {} 5519 + 5520 + '@sveltejs/acorn-typescript@1.0.8(acorn@8.15.0)': 5521 + dependencies: 5522 + acorn: 8.15.0 5523 + 5524 + '@sveltejs/adapter-auto@7.0.0(@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))': 5525 + dependencies: 5526 + '@sveltejs/kit': 2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)) 5527 + 5528 + '@sveltejs/adapter-node@5.5.3(@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))': 5529 + dependencies: 5530 + '@rollup/plugin-commonjs': 29.0.0(rollup@4.57.1) 5531 + '@rollup/plugin-json': 6.1.0(rollup@4.57.1) 5532 + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.57.1) 5533 + '@sveltejs/kit': 2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)) 5534 + rollup: 4.57.1 5535 + 5536 + '@sveltejs/kit@2.50.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2))': 5537 + dependencies: 5538 + '@standard-schema/spec': 1.1.0 5539 + '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) 5540 + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)) 5541 + '@types/cookie': 0.6.0 5542 + acorn: 8.15.0 5543 + cookie: 0.6.0 5544 + devalue: 5.6.2 5545 + esm-env: 1.2.2 5546 + kleur: 4.1.5 5547 + magic-string: 0.30.21 5548 + mrmime: 2.0.1 5549 + sade: 1.8.1 5550 + set-cookie-parser: 3.0.1 5551 + sirv: 3.0.2 5552 + svelte: 5.49.2 5553 + vite: 7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2) 5554 + optionalDependencies: 5555 + typescript: 5.9.3 5556 + 5557 + '@sveltejs/vite-plugin-svelte-inspector@5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2))': 5558 + dependencies: 5559 + '@sveltejs/vite-plugin-svelte': 6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)) 5560 + obug: 2.1.1 5561 + svelte: 5.49.2 5562 + vite: 7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2) 5563 + 5564 + '@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2))': 5565 + dependencies: 5566 + '@sveltejs/vite-plugin-svelte-inspector': 5.0.2(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)))(svelte@5.49.2)(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)) 5567 + deepmerge: 4.3.1 5568 + magic-string: 0.30.21 5569 + obug: 2.1.1 5570 + svelte: 5.49.2 5571 + vite: 7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2) 5572 + vitefu: 1.1.1(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)) 5573 + 5574 + '@tailwindcss/node@4.1.18': 5575 + dependencies: 5576 + '@jridgewell/remapping': 2.3.5 5577 + enhanced-resolve: 5.19.0 5578 + jiti: 2.6.1 5579 + lightningcss: 1.30.2 5580 + magic-string: 0.30.21 5581 + source-map-js: 1.2.1 5582 + tailwindcss: 4.1.18 5583 + 5584 + '@tailwindcss/oxide-android-arm64@4.1.18': 5585 + optional: true 5586 + 5587 + '@tailwindcss/oxide-darwin-arm64@4.1.18': 5588 + optional: true 5589 + 5590 + '@tailwindcss/oxide-darwin-x64@4.1.18': 5591 + optional: true 5592 + 5593 + '@tailwindcss/oxide-freebsd-x64@4.1.18': 5594 + optional: true 5595 + 5596 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': 5597 + optional: true 5598 + 5599 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': 5600 + optional: true 5601 + 5602 + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': 5603 + optional: true 5604 + 5605 + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': 5606 + optional: true 5607 + 5608 + '@tailwindcss/oxide-linux-x64-musl@4.1.18': 5609 + optional: true 5610 + 5611 + '@tailwindcss/oxide-wasm32-wasi@4.1.18': 5612 + optional: true 5613 + 5614 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': 5615 + optional: true 5616 + 5617 + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': 5618 + optional: true 5619 + 5620 + '@tailwindcss/oxide@4.1.18': 5621 + optionalDependencies: 5622 + '@tailwindcss/oxide-android-arm64': 4.1.18 5623 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 5624 + '@tailwindcss/oxide-darwin-x64': 4.1.18 5625 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 5626 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 5627 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 5628 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 5629 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 5630 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 5631 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 5632 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 5633 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 5634 + 5635 + '@tailwindcss/vite@4.1.18(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2))': 5636 + dependencies: 5637 + '@tailwindcss/node': 4.1.18 5638 + '@tailwindcss/oxide': 4.1.18 5639 + tailwindcss: 4.1.18 5640 + vite: 7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2) 5641 + 5642 + '@tanstack/query-core@5.90.20': {} 5643 + 5644 + '@tanstack/svelte-query@6.0.18(svelte@5.49.2)': 5645 + dependencies: 5646 + '@tanstack/query-core': 5.90.20 5647 + svelte: 5.49.2 5648 + 5649 + '@tokenizer/token@0.3.0': {} 5650 + 5651 + '@types/bn.js@5.2.0': 5652 + dependencies: 5653 + '@types/node': 24.10.11 5654 + 5655 + '@types/cookie@0.6.0': {} 5656 + 5657 + '@types/elliptic@6.4.18': 5658 + dependencies: 5659 + '@types/bn.js': 5.2.0 5660 + 5661 + '@types/estree@1.0.8': {} 5662 + 5663 + '@types/http-errors@2.0.5': {} 5664 + 5665 + '@types/json-schema@7.0.15': {} 5666 + 5667 + '@types/node@24.10.11': 5668 + dependencies: 5669 + undici-types: 7.16.0 5670 + 5671 + '@types/pg@8.16.0': 5672 + dependencies: 5673 + '@types/node': 24.10.11 5674 + pg-protocol: 1.11.0 5675 + pg-types: 2.2.0 5676 + 5677 + '@types/resolve@1.20.2': {} 5678 + 5679 + '@typescript-eslint/eslint-plugin@8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': 5680 + dependencies: 5681 + '@eslint-community/regexpp': 4.12.2 5682 + '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 5683 + '@typescript-eslint/scope-manager': 8.54.0 5684 + '@typescript-eslint/type-utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 5685 + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 5686 + '@typescript-eslint/visitor-keys': 8.54.0 5687 + eslint: 9.39.2(jiti@2.6.1) 5688 + ignore: 7.0.5 5689 + natural-compare: 1.4.0 5690 + ts-api-utils: 2.4.0(typescript@5.9.3) 5691 + typescript: 5.9.3 5692 + transitivePeerDependencies: 5693 + - supports-color 5694 + 5695 + '@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': 5696 + dependencies: 5697 + '@typescript-eslint/scope-manager': 8.54.0 5698 + '@typescript-eslint/types': 8.54.0 5699 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) 5700 + '@typescript-eslint/visitor-keys': 8.54.0 5701 + debug: 4.4.3 5702 + eslint: 9.39.2(jiti@2.6.1) 5703 + typescript: 5.9.3 5704 + transitivePeerDependencies: 5705 + - supports-color 5706 + 5707 + '@typescript-eslint/project-service@8.54.0(typescript@5.9.3)': 5708 + dependencies: 5709 + '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) 5710 + '@typescript-eslint/types': 8.54.0 5711 + debug: 4.4.3 5712 + typescript: 5.9.3 5713 + transitivePeerDependencies: 5714 + - supports-color 5715 + 5716 + '@typescript-eslint/scope-manager@8.54.0': 5717 + dependencies: 5718 + '@typescript-eslint/types': 8.54.0 5719 + '@typescript-eslint/visitor-keys': 8.54.0 5720 + 5721 + '@typescript-eslint/tsconfig-utils@8.54.0(typescript@5.9.3)': 5722 + dependencies: 5723 + typescript: 5.9.3 5724 + 5725 + '@typescript-eslint/type-utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': 5726 + dependencies: 5727 + '@typescript-eslint/types': 8.54.0 5728 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) 5729 + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 5730 + debug: 4.4.3 5731 + eslint: 9.39.2(jiti@2.6.1) 5732 + ts-api-utils: 2.4.0(typescript@5.9.3) 5733 + typescript: 5.9.3 5734 + transitivePeerDependencies: 5735 + - supports-color 5736 + 5737 + '@typescript-eslint/types@8.54.0': {} 5738 + 5739 + '@typescript-eslint/typescript-estree@8.54.0(typescript@5.9.3)': 5740 + dependencies: 5741 + '@typescript-eslint/project-service': 8.54.0(typescript@5.9.3) 5742 + '@typescript-eslint/tsconfig-utils': 8.54.0(typescript@5.9.3) 5743 + '@typescript-eslint/types': 8.54.0 5744 + '@typescript-eslint/visitor-keys': 8.54.0 5745 + debug: 4.4.3 5746 + minimatch: 9.0.5 5747 + semver: 7.7.4 5748 + tinyglobby: 0.2.15 5749 + ts-api-utils: 2.4.0(typescript@5.9.3) 5750 + typescript: 5.9.3 5751 + transitivePeerDependencies: 5752 + - supports-color 5753 + 5754 + '@typescript-eslint/utils@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': 5755 + dependencies: 5756 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) 5757 + '@typescript-eslint/scope-manager': 8.54.0 5758 + '@typescript-eslint/types': 8.54.0 5759 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) 5760 + eslint: 9.39.2(jiti@2.6.1) 5761 + typescript: 5.9.3 5762 + transitivePeerDependencies: 5763 + - supports-color 5764 + 5765 + '@typescript-eslint/visitor-keys@8.54.0': 5766 + dependencies: 5767 + '@typescript-eslint/types': 8.54.0 5768 + eslint-visitor-keys: 4.2.1 5769 + 5770 + abort-controller@3.0.0: 5771 + dependencies: 5772 + event-target-shim: 5.0.1 5773 + 5774 + accepts@1.3.8: 5775 + dependencies: 5776 + mime-types: 2.1.35 5777 + negotiator: 0.6.3 5778 + 5779 + acorn-jsx@5.3.2(acorn@8.15.0): 5780 + dependencies: 5781 + acorn: 8.15.0 5782 + 5783 + acorn@8.15.0: {} 5784 + 5785 + ajv@6.12.6: 5786 + dependencies: 5787 + fast-deep-equal: 3.1.3 5788 + fast-json-stable-stringify: 2.1.0 5789 + json-schema-traverse: 0.4.1 5790 + uri-js: 4.4.1 5791 + 5792 + ansi-regex@5.0.1: {} 5793 + 5794 + ansi-regex@6.2.2: {} 5795 + 5796 + ansi-styles@4.3.0: 5797 + dependencies: 5798 + color-convert: 2.0.1 5799 + 5800 + ansi-styles@6.2.3: {} 5801 + 5802 + argparse@2.0.1: {} 5803 + 5804 + aria-query@5.3.2: {} 5805 + 5806 + array-flatten@1.1.1: {} 5807 + 5808 + asn1.js@5.4.1: 5809 + dependencies: 5810 + bn.js: 4.12.2 5811 + inherits: 2.0.4 5812 + minimalistic-assert: 1.0.1 5813 + safer-buffer: 2.1.2 5814 + 5815 + asynckit@0.4.0: {} 5816 + 5817 + atomic-sleep@1.0.0: {} 5818 + 5819 + await-lock@2.2.2: {} 5820 + 5821 + axios@1.13.4: 5822 + dependencies: 5823 + follow-redirects: 1.15.11 5824 + form-data: 4.0.5 5825 + proxy-from-env: 1.1.0 5826 + transitivePeerDependencies: 5827 + - debug 5828 + 5829 + axobject-query@4.1.0: {} 5830 + 5831 + balanced-match@1.0.2: {} 5832 + 5833 + base64-js@1.5.1: {} 5834 + 5835 + better-sqlite3@10.1.0: 5836 + dependencies: 5837 + bindings: 1.5.0 5838 + prebuild-install: 7.1.3 5839 + 5840 + big-integer@1.6.52: {} 5841 + 5842 + bignumber.js@9.3.1: {} 5843 + 5844 + bindings@1.5.0: 5845 + dependencies: 5846 + file-uri-to-path: 1.0.0 5847 + 5848 + bl@4.1.0: 5849 + dependencies: 5850 + buffer: 5.7.1 5851 + inherits: 2.0.4 5852 + readable-stream: 3.6.2 5853 + 5854 + bn.js@4.12.2: {} 5855 + 5856 + body-parser@1.20.4: 5857 + dependencies: 5858 + bytes: 3.1.2 5859 + content-type: 1.0.5 5860 + debug: 2.6.9 5861 + depd: 2.0.0 5862 + destroy: 1.2.0 5863 + http-errors: 2.0.1 5864 + iconv-lite: 0.4.24 5865 + on-finished: 2.4.1 5866 + qs: 6.14.1 5867 + raw-body: 2.5.3 5868 + type-is: 1.6.18 5869 + unpipe: 1.0.0 5870 + transitivePeerDependencies: 5871 + - supports-color 5872 + 5873 + bowser@2.13.1: {} 5874 + 5875 + brace-expansion@1.1.12: 5876 + dependencies: 5877 + balanced-match: 1.0.2 5878 + concat-map: 0.0.1 5879 + 5880 + brace-expansion@2.0.2: 5881 + dependencies: 5882 + balanced-match: 1.0.2 5883 + 5884 + brorand@1.1.0: {} 5885 + 5886 + buffer@5.6.0: 5887 + dependencies: 5888 + base64-js: 1.5.1 5889 + ieee754: 1.2.1 5890 + 5891 + buffer@5.7.1: 5892 + dependencies: 5893 + base64-js: 1.5.1 5894 + ieee754: 1.2.1 5895 + 5896 + buffer@6.0.3: 5897 + dependencies: 5898 + base64-js: 1.5.1 5899 + ieee754: 1.2.1 5900 + 5901 + bytes@3.1.2: {} 5902 + 5903 + call-bind-apply-helpers@1.0.2: 5904 + dependencies: 5905 + es-errors: 1.3.0 5906 + function-bind: 1.1.2 5907 + 5908 + call-bound@1.0.4: 5909 + dependencies: 5910 + call-bind-apply-helpers: 1.0.2 5911 + get-intrinsic: 1.3.0 5912 + 5913 + callsites@3.1.0: {} 5914 + 5915 + cborg@1.10.2: {} 5916 + 5917 + chalk@4.1.2: 5918 + dependencies: 5919 + ansi-styles: 4.3.0 5920 + supports-color: 7.2.0 5921 + 5922 + chokidar@4.0.3: 5923 + dependencies: 5924 + readdirp: 4.1.2 5925 + 5926 + chownr@1.1.4: {} 5927 + 5928 + cliui@8.0.1: 5929 + dependencies: 5930 + string-width: 4.2.3 5931 + strip-ansi: 6.0.1 5932 + wrap-ansi: 7.0.0 5933 + 5934 + clsx@2.1.1: {} 5935 + 5936 + cluster-key-slot@1.1.2: {} 5937 + 5938 + cockatiel@3.2.1: {} 5939 + 5940 + color-convert@2.0.1: 5941 + dependencies: 5942 + color-name: 1.1.4 5943 + 5944 + color-name@1.1.4: {} 5945 + 5946 + color-string@1.9.1: 5947 + dependencies: 5948 + color-name: 1.1.4 5949 + simple-swizzle: 0.2.4 5950 + 5951 + color@4.2.3: 5952 + dependencies: 5953 + color-convert: 2.0.1 5954 + color-string: 1.9.1 5955 + 5956 + combined-stream@1.0.8: 5957 + dependencies: 5958 + delayed-stream: 1.0.0 5959 + 5960 + commondir@1.0.1: {} 5961 + 5962 + compressible@2.0.18: 5963 + dependencies: 5964 + mime-db: 1.54.0 5965 + 5966 + compression@1.8.1: 5967 + dependencies: 5968 + bytes: 3.1.2 5969 + compressible: 2.0.18 5970 + debug: 2.6.9 5971 + negotiator: 0.6.4 5972 + on-headers: 1.1.0 5973 + safe-buffer: 5.2.1 5974 + vary: 1.1.2 5975 + transitivePeerDependencies: 5976 + - supports-color 5977 + 5978 + concat-map@0.0.1: {} 5979 + 5980 + content-disposition@0.5.4: 5981 + dependencies: 5982 + safe-buffer: 5.2.1 5983 + 5984 + content-type@1.0.5: {} 5985 + 5986 + cookie-signature@1.0.7: {} 5987 + 5988 + cookie@0.6.0: {} 5989 + 5990 + cookie@0.7.2: {} 5991 + 5992 + core-js@3.48.0: {} 5993 + 5994 + cors@2.8.6: 5995 + dependencies: 5996 + object-assign: 4.1.1 5997 + vary: 1.1.2 5998 + 5999 + cross-spawn@7.0.6: 6000 + dependencies: 6001 + path-key: 3.1.1 6002 + shebang-command: 2.0.0 6003 + which: 2.0.2 6004 + 6005 + cssesc@3.0.0: {} 6006 + 6007 + debug@2.6.9: 6008 + dependencies: 6009 + ms: 2.0.0 6010 + 6011 + debug@4.4.3: 6012 + dependencies: 6013 + ms: 2.1.3 6014 + 6015 + decompress-response@6.0.0: 6016 + dependencies: 6017 + mimic-response: 3.1.0 6018 + 6019 + deep-extend@0.6.0: {} 6020 + 6021 + deep-is@0.1.4: {} 6022 + 6023 + deepmerge@4.3.1: {} 6024 + 6025 + delay@5.0.0: {} 6026 + 6027 + delayed-stream@1.0.0: {} 6028 + 6029 + denque@2.1.0: {} 6030 + 6031 + depd@2.0.0: {} 6032 + 6033 + destroy@1.2.0: {} 6034 + 6035 + detect-libc@2.1.2: {} 6036 + 6037 + devalue@5.6.2: {} 6038 + 6039 + disposable-email-domains-js@1.21.0: {} 6040 + 6041 + dom-mutator@0.6.0: {} 6042 + 6043 + dom-serializer@1.4.1: 6044 + dependencies: 6045 + domelementtype: 2.3.0 6046 + domhandler: 4.3.1 6047 + entities: 2.2.0 6048 + 6049 + domelementtype@2.3.0: {} 6050 + 6051 + domhandler@4.3.1: 6052 + dependencies: 6053 + domelementtype: 2.3.0 6054 + 6055 + domutils@2.8.0: 6056 + dependencies: 6057 + dom-serializer: 1.4.1 6058 + domelementtype: 2.3.0 6059 + domhandler: 4.3.1 6060 + 6061 + dotenv@16.6.1: {} 6062 + 6063 + dotenv@17.2.4: {} 6064 + 6065 + dunder-proto@1.0.1: 6066 + dependencies: 6067 + call-bind-apply-helpers: 1.0.2 6068 + es-errors: 1.3.0 6069 + gopd: 1.2.0 6070 + 6071 + eastasianwidth@0.2.0: {} 6072 + 6073 + ee-first@1.1.1: {} 6074 + 6075 + elliptic@6.6.1: 6076 + dependencies: 6077 + bn.js: 4.12.2 6078 + brorand: 1.1.0 6079 + hash.js: 1.1.7 6080 + hmac-drbg: 1.0.1 6081 + inherits: 2.0.4 6082 + minimalistic-assert: 1.0.1 6083 + minimalistic-crypto-utils: 1.0.1 6084 + 6085 + emoji-regex@8.0.0: {} 6086 + 6087 + emoji-regex@9.2.2: {} 6088 + 6089 + encodeurl@2.0.0: {} 6090 + 6091 + end-of-stream@1.4.5: 6092 + dependencies: 6093 + once: 1.4.0 6094 + 6095 + enhanced-resolve@5.19.0: 6096 + dependencies: 6097 + graceful-fs: 4.2.11 6098 + tapable: 2.3.0 6099 + 6100 + entities@2.2.0: {} 6101 + 6102 + es-define-property@1.0.1: {} 6103 + 6104 + es-errors@1.3.0: {} 6105 + 6106 + es-object-atoms@1.1.1: 6107 + dependencies: 6108 + es-errors: 1.3.0 6109 + 6110 + es-set-tostringtag@2.1.0: 6111 + dependencies: 6112 + es-errors: 1.3.0 6113 + get-intrinsic: 1.3.0 6114 + has-tostringtag: 1.0.2 6115 + hasown: 2.0.2 6116 + 6117 + esbuild@0.27.3: 6118 + optionalDependencies: 6119 + '@esbuild/aix-ppc64': 0.27.3 6120 + '@esbuild/android-arm': 0.27.3 6121 + '@esbuild/android-arm64': 0.27.3 6122 + '@esbuild/android-x64': 0.27.3 6123 + '@esbuild/darwin-arm64': 0.27.3 6124 + '@esbuild/darwin-x64': 0.27.3 6125 + '@esbuild/freebsd-arm64': 0.27.3 6126 + '@esbuild/freebsd-x64': 0.27.3 6127 + '@esbuild/linux-arm': 0.27.3 6128 + '@esbuild/linux-arm64': 0.27.3 6129 + '@esbuild/linux-ia32': 0.27.3 6130 + '@esbuild/linux-loong64': 0.27.3 6131 + '@esbuild/linux-mips64el': 0.27.3 6132 + '@esbuild/linux-ppc64': 0.27.3 6133 + '@esbuild/linux-riscv64': 0.27.3 6134 + '@esbuild/linux-s390x': 0.27.3 6135 + '@esbuild/linux-x64': 0.27.3 6136 + '@esbuild/netbsd-arm64': 0.27.3 6137 + '@esbuild/netbsd-x64': 0.27.3 6138 + '@esbuild/openbsd-arm64': 0.27.3 6139 + '@esbuild/openbsd-x64': 0.27.3 6140 + '@esbuild/openharmony-arm64': 0.27.3 6141 + '@esbuild/sunos-x64': 0.27.3 6142 + '@esbuild/win32-arm64': 0.27.3 6143 + '@esbuild/win32-ia32': 0.27.3 6144 + '@esbuild/win32-x64': 0.27.3 6145 + 6146 + escalade@3.2.0: {} 6147 + 6148 + escape-html@1.0.3: {} 6149 + 6150 + escape-string-regexp@4.0.0: {} 6151 + 6152 + eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)): 6153 + dependencies: 6154 + eslint: 9.39.2(jiti@2.6.1) 6155 + 6156 + eslint-plugin-svelte@3.14.0(eslint@9.39.2(jiti@2.6.1))(svelte@5.49.2): 6157 + dependencies: 6158 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) 6159 + '@jridgewell/sourcemap-codec': 1.5.5 6160 + eslint: 9.39.2(jiti@2.6.1) 6161 + esutils: 2.0.3 6162 + globals: 16.5.0 6163 + known-css-properties: 0.37.0 6164 + postcss: 8.5.6 6165 + postcss-load-config: 3.1.4(postcss@8.5.6) 6166 + postcss-safe-parser: 7.0.1(postcss@8.5.6) 6167 + semver: 7.7.4 6168 + svelte-eslint-parser: 1.4.1(svelte@5.49.2) 6169 + optionalDependencies: 6170 + svelte: 5.49.2 6171 + transitivePeerDependencies: 6172 + - ts-node 6173 + 6174 + eslint-scope@8.4.0: 6175 + dependencies: 6176 + esrecurse: 4.3.0 6177 + estraverse: 5.3.0 6178 + 6179 + eslint-visitor-keys@3.4.3: {} 6180 + 6181 + eslint-visitor-keys@4.2.1: {} 6182 + 6183 + eslint@9.39.2(jiti@2.6.1): 6184 + dependencies: 6185 + '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) 6186 + '@eslint-community/regexpp': 4.12.2 6187 + '@eslint/config-array': 0.21.1 6188 + '@eslint/config-helpers': 0.4.2 6189 + '@eslint/core': 0.17.0 6190 + '@eslint/eslintrc': 3.3.3 6191 + '@eslint/js': 9.39.2 6192 + '@eslint/plugin-kit': 0.4.1 6193 + '@humanfs/node': 0.16.7 6194 + '@humanwhocodes/module-importer': 1.0.1 6195 + '@humanwhocodes/retry': 0.4.3 6196 + '@types/estree': 1.0.8 6197 + ajv: 6.12.6 6198 + chalk: 4.1.2 6199 + cross-spawn: 7.0.6 6200 + debug: 4.4.3 6201 + escape-string-regexp: 4.0.0 6202 + eslint-scope: 8.4.0 6203 + eslint-visitor-keys: 4.2.1 6204 + espree: 10.4.0 6205 + esquery: 1.7.0 6206 + esutils: 2.0.3 6207 + fast-deep-equal: 3.1.3 6208 + file-entry-cache: 8.0.0 6209 + find-up: 5.0.0 6210 + glob-parent: 6.0.2 6211 + ignore: 5.3.2 6212 + imurmurhash: 0.1.4 6213 + is-glob: 4.0.3 6214 + json-stable-stringify-without-jsonify: 1.0.1 6215 + lodash.merge: 4.6.2 6216 + minimatch: 3.1.2 6217 + natural-compare: 1.4.0 6218 + optionator: 0.9.4 6219 + optionalDependencies: 6220 + jiti: 2.6.1 6221 + transitivePeerDependencies: 6222 + - supports-color 6223 + 6224 + esm-env@1.2.2: {} 6225 + 6226 + espree@10.4.0: 6227 + dependencies: 6228 + acorn: 8.15.0 6229 + acorn-jsx: 5.3.2(acorn@8.15.0) 6230 + eslint-visitor-keys: 4.2.1 6231 + 6232 + esquery@1.7.0: 6233 + dependencies: 6234 + estraverse: 5.3.0 6235 + 6236 + esrap@2.2.2: 6237 + dependencies: 6238 + '@jridgewell/sourcemap-codec': 1.5.5 6239 + 6240 + esrecurse@4.3.0: 6241 + dependencies: 6242 + estraverse: 5.3.0 6243 + 6244 + estraverse@5.3.0: {} 6245 + 6246 + estree-walker@2.0.2: {} 6247 + 6248 + esutils@2.0.3: {} 6249 + 6250 + etag@1.8.1: {} 6251 + 6252 + etcd3@1.1.2: 6253 + dependencies: 6254 + '@grpc/grpc-js': 1.14.3 6255 + '@grpc/proto-loader': 0.7.15 6256 + bignumber.js: 9.3.1 6257 + cockatiel: 3.2.1 6258 + 6259 + event-target-shim@5.0.1: {} 6260 + 6261 + eventemitter3@4.0.7: {} 6262 + 6263 + events@3.3.0: {} 6264 + 6265 + expand-template@2.0.3: {} 6266 + 6267 + express-async-errors@3.1.1(express@4.22.1): 6268 + dependencies: 6269 + express: 4.22.1 6270 + 6271 + express@4.22.1: 6272 + dependencies: 6273 + accepts: 1.3.8 6274 + array-flatten: 1.1.1 6275 + body-parser: 1.20.4 6276 + content-disposition: 0.5.4 6277 + content-type: 1.0.5 6278 + cookie: 0.7.2 6279 + cookie-signature: 1.0.7 6280 + debug: 2.6.9 6281 + depd: 2.0.0 6282 + encodeurl: 2.0.0 6283 + escape-html: 1.0.3 6284 + etag: 1.8.1 6285 + finalhandler: 1.3.2 6286 + fresh: 0.5.2 6287 + http-errors: 2.0.1 6288 + merge-descriptors: 1.0.3 6289 + methods: 1.1.2 6290 + on-finished: 2.4.1 6291 + parseurl: 1.3.3 6292 + path-to-regexp: 0.1.12 6293 + proxy-addr: 2.0.7 6294 + qs: 6.14.1 6295 + range-parser: 1.2.1 6296 + safe-buffer: 5.2.1 6297 + send: 0.19.2 6298 + serve-static: 1.16.3 6299 + setprototypeof: 1.2.0 6300 + statuses: 2.0.2 6301 + type-is: 1.6.18 6302 + utils-merge: 1.0.1 6303 + vary: 1.1.2 6304 + transitivePeerDependencies: 6305 + - supports-color 6306 + 6307 + fast-deep-equal@3.1.3: {} 6308 + 6309 + fast-json-stable-stringify@2.1.0: {} 6310 + 6311 + fast-levenshtein@2.0.6: {} 6312 + 6313 + fast-printf@1.6.10: {} 6314 + 6315 + fast-redact@3.5.0: {} 6316 + 6317 + fast-xml-parser@5.3.4: 6318 + dependencies: 6319 + strnum: 2.1.2 6320 + 6321 + fdir@6.5.0(picomatch@4.0.3): 6322 + optionalDependencies: 6323 + picomatch: 4.0.3 6324 + 6325 + file-entry-cache@8.0.0: 6326 + dependencies: 6327 + flat-cache: 4.0.1 6328 + 6329 + file-type@16.5.4: 6330 + dependencies: 6331 + readable-web-to-node-stream: 3.0.4 6332 + strtok3: 6.3.0 6333 + token-types: 4.2.1 6334 + 6335 + file-uri-to-path@1.0.0: {} 6336 + 6337 + finalhandler@1.3.2: 6338 + dependencies: 6339 + debug: 2.6.9 6340 + encodeurl: 2.0.0 6341 + escape-html: 1.0.3 6342 + on-finished: 2.4.1 6343 + parseurl: 1.3.3 6344 + statuses: 2.0.2 6345 + unpipe: 1.0.0 6346 + transitivePeerDependencies: 6347 + - supports-color 6348 + 6349 + find-up@5.0.0: 6350 + dependencies: 6351 + locate-path: 6.0.0 6352 + path-exists: 4.0.0 6353 + 6354 + flat-cache@4.0.1: 6355 + dependencies: 6356 + flatted: 3.3.3 6357 + keyv: 4.5.4 6358 + 6359 + flatted@3.3.3: {} 6360 + 6361 + follow-redirects@1.15.11: {} 6362 + 6363 + foreground-child@3.3.1: 6364 + dependencies: 6365 + cross-spawn: 7.0.6 6366 + signal-exit: 4.1.0 6367 + 6368 + form-data@4.0.5: 6369 + dependencies: 6370 + asynckit: 0.4.0 6371 + combined-stream: 1.0.8 6372 + es-set-tostringtag: 2.1.0 6373 + hasown: 2.0.2 6374 + mime-types: 2.1.35 6375 + 6376 + forwarded@0.2.0: {} 6377 + 6378 + french-badwords-list@1.0.7: 6379 + optional: true 6380 + 6381 + fresh@0.5.2: {} 6382 + 6383 + fs-constants@1.0.0: {} 6384 + 6385 + fsevents@2.3.3: 6386 + optional: true 6387 + 6388 + function-bind@1.1.2: {} 6389 + 6390 + get-caller-file@2.0.5: {} 6391 + 6392 + get-intrinsic@1.3.0: 6393 + dependencies: 6394 + call-bind-apply-helpers: 1.0.2 6395 + es-define-property: 1.0.1 6396 + es-errors: 1.3.0 6397 + es-object-atoms: 1.1.1 6398 + function-bind: 1.1.2 6399 + get-proto: 1.0.1 6400 + gopd: 1.2.0 6401 + has-symbols: 1.1.0 6402 + hasown: 2.0.2 6403 + math-intrinsics: 1.1.0 6404 + 6405 + get-port@5.1.1: {} 6406 + 6407 + get-proto@1.0.1: 6408 + dependencies: 6409 + dunder-proto: 1.0.1 6410 + es-object-atoms: 1.1.1 6411 + 6412 + github-from-package@0.0.0: {} 6413 + 6414 + glob-parent@6.0.2: 6415 + dependencies: 6416 + is-glob: 4.0.3 6417 + 6418 + glob@10.5.0: 6419 + dependencies: 6420 + foreground-child: 3.3.1 6421 + jackspeak: 3.4.3 6422 + minimatch: 9.0.5 6423 + minipass: 7.1.2 6424 + package-json-from-dist: 1.0.1 6425 + path-scurry: 1.11.1 6426 + 6427 + globals@14.0.0: {} 6428 + 6429 + globals@16.5.0: {} 6430 + 6431 + globals@17.3.0: {} 6432 + 6433 + gopd@1.2.0: {} 6434 + 6435 + graceful-fs@4.2.11: {} 6436 + 6437 + handlebars@4.7.8: 6438 + dependencies: 6439 + minimist: 1.2.8 6440 + neo-async: 2.6.2 6441 + source-map: 0.6.1 6442 + wordwrap: 1.0.0 6443 + optionalDependencies: 6444 + uglify-js: 3.19.3 6445 + 6446 + has-flag@4.0.0: {} 6447 + 6448 + has-symbols@1.1.0: {} 6449 + 6450 + has-tostringtag@1.0.2: 6451 + dependencies: 6452 + has-symbols: 1.1.0 6453 + 6454 + hash.js@1.1.7: 6455 + dependencies: 6456 + inherits: 2.0.4 6457 + minimalistic-assert: 1.0.1 6458 + 6459 + hasown@2.0.2: 6460 + dependencies: 6461 + function-bind: 1.1.2 6462 + 6463 + he@1.2.0: {} 6464 + 6465 + hmac-drbg@1.0.1: 6466 + dependencies: 6467 + hash.js: 1.1.7 6468 + minimalistic-assert: 1.0.1 6469 + minimalistic-crypto-utils: 1.0.1 6470 + 6471 + html-to-text@7.1.1: 6472 + dependencies: 6473 + deepmerge: 4.3.1 6474 + he: 1.2.0 6475 + htmlparser2: 6.1.0 6476 + minimist: 1.2.8 6477 + 6478 + htmlparser2@6.1.0: 6479 + dependencies: 6480 + domelementtype: 2.3.0 6481 + domhandler: 4.3.1 6482 + domutils: 2.8.0 6483 + entities: 2.2.0 6484 + 6485 + http-errors@2.0.1: 6486 + dependencies: 6487 + depd: 2.0.0 6488 + inherits: 2.0.4 6489 + setprototypeof: 1.2.0 6490 + statuses: 2.0.2 6491 + toidentifier: 1.0.1 6492 + 6493 + http-terminator@3.2.0: 6494 + dependencies: 6495 + delay: 5.0.0 6496 + p-wait-for: 3.2.0 6497 + roarr: 7.21.4 6498 + type-fest: 2.19.0 6499 + 6500 + iconv-lite@0.4.24: 6501 + dependencies: 6502 + safer-buffer: 2.1.2 6503 + 6504 + ieee754@1.2.1: {} 6505 + 6506 + ignore@5.3.2: {} 6507 + 6508 + ignore@7.0.5: {} 6509 + 6510 + import-fresh@3.3.1: 6511 + dependencies: 6512 + parent-module: 1.0.1 6513 + resolve-from: 4.0.0 6514 + 6515 + imurmurhash@0.1.4: {} 6516 + 6517 + inherits@2.0.4: {} 6518 + 6519 + ini@1.3.8: {} 6520 + 6521 + ioredis@5.9.2: 6522 + dependencies: 6523 + '@ioredis/commands': 1.5.0 6524 + cluster-key-slot: 1.1.2 6525 + debug: 4.4.3 6526 + denque: 2.1.0 6527 + lodash.defaults: 4.2.0 6528 + lodash.isarguments: 3.1.0 6529 + redis-errors: 1.2.0 6530 + redis-parser: 3.0.0 6531 + standard-as-callback: 2.1.0 6532 + transitivePeerDependencies: 6533 + - supports-color 6534 + 6535 + ipaddr.js@1.9.1: {} 6536 + 6537 + ipaddr.js@2.3.0: {} 6538 + 6539 + is-arrayish@0.3.4: {} 6540 + 6541 + is-core-module@2.16.1: 6542 + dependencies: 6543 + hasown: 2.0.2 6544 + 6545 + is-extglob@2.1.1: {} 6546 + 6547 + is-fullwidth-code-point@3.0.0: {} 6548 + 6549 + is-glob@4.0.3: 6550 + dependencies: 6551 + is-extglob: 2.1.1 6552 + 6553 + is-module@1.0.0: {} 6554 + 6555 + is-reference@1.2.1: 6556 + dependencies: 6557 + '@types/estree': 1.0.8 6558 + 6559 + is-reference@3.0.3: 6560 + dependencies: 6561 + '@types/estree': 1.0.8 6562 + 6563 + isexe@2.0.0: {} 6564 + 6565 + iso-datestring-validator@2.2.2: {} 6566 + 6567 + jackspeak@3.4.3: 6568 + dependencies: 6569 + '@isaacs/cliui': 8.0.2 6570 + optionalDependencies: 6571 + '@pkgjs/parseargs': 0.11.0 6572 + 6573 + jiti@2.6.1: {} 6574 + 6575 + jose@5.10.0: {} 6576 + 6577 + js-yaml@4.1.1: 6578 + dependencies: 6579 + argparse: 2.0.1 6580 + 6581 + json-buffer@3.0.1: {} 6582 + 6583 + json-schema-traverse@0.4.1: {} 6584 + 6585 + json-stable-stringify-without-jsonify@1.0.1: {} 6586 + 6587 + key-encoder@2.0.3: 6588 + dependencies: 6589 + '@types/elliptic': 6.4.18 6590 + asn1.js: 5.4.1 6591 + bn.js: 4.12.2 6592 + elliptic: 6.6.1 6593 + 6594 + keyv@4.5.4: 6595 + dependencies: 6596 + json-buffer: 3.0.1 6597 + 6598 + kleur@4.1.5: {} 6599 + 6600 + known-css-properties@0.37.0: {} 6601 + 6602 + kysely@0.22.0: {} 6603 + 6604 + kysely@0.23.5: {} 6605 + 6606 + lande@1.0.10: 6607 + dependencies: 6608 + toygrad: 2.6.0 6609 + 6610 + leo-profanity@1.9.0: 6611 + optionalDependencies: 6612 + french-badwords-list: 1.0.7 6613 + russian-bad-words: 0.5.0 6614 + 6615 + levn@0.4.1: 6616 + dependencies: 6617 + prelude-ls: 1.2.1 6618 + type-check: 0.4.0 6619 + 6620 + lightningcss-android-arm64@1.30.2: 6621 + optional: true 6622 + 6623 + lightningcss-darwin-arm64@1.30.2: 6624 + optional: true 6625 + 6626 + lightningcss-darwin-x64@1.30.2: 6627 + optional: true 6628 + 6629 + lightningcss-freebsd-x64@1.30.2: 6630 + optional: true 6631 + 6632 + lightningcss-linux-arm-gnueabihf@1.30.2: 6633 + optional: true 6634 + 6635 + lightningcss-linux-arm64-gnu@1.30.2: 6636 + optional: true 6637 + 6638 + lightningcss-linux-arm64-musl@1.30.2: 6639 + optional: true 6640 + 6641 + lightningcss-linux-x64-gnu@1.30.2: 6642 + optional: true 6643 + 6644 + lightningcss-linux-x64-musl@1.30.2: 6645 + optional: true 6646 + 6647 + lightningcss-win32-arm64-msvc@1.30.2: 6648 + optional: true 6649 + 6650 + lightningcss-win32-x64-msvc@1.30.2: 6651 + optional: true 6652 + 6653 + lightningcss@1.30.2: 6654 + dependencies: 6655 + detect-libc: 2.1.2 6656 + optionalDependencies: 6657 + lightningcss-android-arm64: 1.30.2 6658 + lightningcss-darwin-arm64: 1.30.2 6659 + lightningcss-darwin-x64: 1.30.2 6660 + lightningcss-freebsd-x64: 1.30.2 6661 + lightningcss-linux-arm-gnueabihf: 1.30.2 6662 + lightningcss-linux-arm64-gnu: 1.30.2 6663 + lightningcss-linux-arm64-musl: 1.30.2 6664 + lightningcss-linux-x64-gnu: 1.30.2 6665 + lightningcss-linux-x64-musl: 1.30.2 6666 + lightningcss-win32-arm64-msvc: 1.30.2 6667 + lightningcss-win32-x64-msvc: 1.30.2 6668 + 6669 + lilconfig@2.1.0: {} 6670 + 6671 + locate-character@3.0.0: {} 6672 + 6673 + locate-path@6.0.0: 6674 + dependencies: 6675 + p-locate: 5.0.0 6676 + 6677 + lodash.camelcase@4.3.0: {} 6678 + 6679 + lodash.defaults@4.2.0: {} 6680 + 6681 + lodash.isarguments@3.1.0: {} 6682 + 6683 + lodash.merge@4.6.2: {} 6684 + 6685 + long@5.3.2: {} 6686 + 6687 + lru-cache@10.4.3: {} 6688 + 6689 + lucide-svelte@0.563.0(svelte@5.49.2): 6690 + dependencies: 6691 + svelte: 5.49.2 6692 + 6693 + magic-string@0.30.21: 6694 + dependencies: 6695 + '@jridgewell/sourcemap-codec': 1.5.5 6696 + 6697 + math-intrinsics@1.1.0: {} 6698 + 6699 + media-typer@0.3.0: {} 6700 + 6701 + merge-descriptors@1.0.3: {} 6702 + 6703 + methods@1.1.2: {} 6704 + 6705 + mime-db@1.52.0: {} 6706 + 6707 + mime-db@1.54.0: {} 6708 + 6709 + mime-types@2.1.35: 6710 + dependencies: 6711 + mime-db: 1.52.0 6712 + 6713 + mime@1.6.0: {} 6714 + 6715 + mimic-response@3.1.0: {} 6716 + 6717 + minimalistic-assert@1.0.1: {} 6718 + 6719 + minimalistic-crypto-utils@1.0.1: {} 6720 + 6721 + minimatch@3.1.2: 6722 + dependencies: 6723 + brace-expansion: 1.1.12 6724 + 6725 + minimatch@9.0.5: 6726 + dependencies: 6727 + brace-expansion: 2.0.2 6728 + 6729 + minimist@1.2.8: {} 6730 + 6731 + minipass@7.1.2: {} 6732 + 6733 + mkdirp-classic@0.5.3: {} 6734 + 6735 + mri@1.2.0: {} 6736 + 6737 + mrmime@2.0.1: {} 6738 + 6739 + ms@2.0.0: {} 6740 + 6741 + ms@2.1.3: {} 6742 + 6743 + multiformats@9.9.0: {} 6744 + 6745 + murmurhash@2.0.1: {} 6746 + 6747 + nanoid@3.3.11: {} 6748 + 6749 + napi-build-utils@2.0.0: {} 6750 + 6751 + natural-compare@1.4.0: {} 6752 + 6753 + negotiator@0.6.3: {} 6754 + 6755 + negotiator@0.6.4: {} 6756 + 6757 + neo-async@2.6.2: {} 6758 + 6759 + node-abi@3.87.0: 6760 + dependencies: 6761 + semver: 7.7.4 6762 + 6763 + nodemailer-html-to-text@3.2.0: 6764 + dependencies: 6765 + html-to-text: 7.1.1 6766 + 6767 + nodemailer@6.10.1: {} 6768 + 6769 + object-assign@4.1.1: {} 6770 + 6771 + object-inspect@1.13.4: {} 6772 + 6773 + obug@2.1.1: {} 6774 + 6775 + on-exit-leak-free@2.1.2: {} 6776 + 6777 + on-finished@2.4.1: 6778 + dependencies: 6779 + ee-first: 1.1.1 6780 + 6781 + on-headers@1.1.0: {} 6782 + 6783 + once@1.4.0: 6784 + dependencies: 6785 + wrappy: 1.0.2 6786 + 6787 + one-webcrypto@1.0.3: {} 6788 + 6789 + optionator@0.9.4: 6790 + dependencies: 6791 + deep-is: 0.1.4 6792 + fast-levenshtein: 2.0.6 6793 + levn: 0.4.1 6794 + prelude-ls: 1.2.1 6795 + type-check: 0.4.0 6796 + word-wrap: 1.2.5 6797 + 6798 + p-finally@1.0.0: {} 6799 + 6800 + p-limit@3.1.0: 6801 + dependencies: 6802 + yocto-queue: 0.1.0 6803 + 6804 + p-locate@5.0.0: 6805 + dependencies: 6806 + p-limit: 3.1.0 6807 + 6808 + p-queue@6.6.2: 6809 + dependencies: 6810 + eventemitter3: 4.0.7 6811 + p-timeout: 3.2.0 6812 + 6813 + p-timeout@3.2.0: 6814 + dependencies: 6815 + p-finally: 1.0.0 6816 + 6817 + p-wait-for@3.2.0: 6818 + dependencies: 6819 + p-timeout: 3.2.0 6820 + 6821 + package-json-from-dist@1.0.1: {} 6822 + 6823 + parent-module@1.0.1: 6824 + dependencies: 6825 + callsites: 3.1.0 6826 + 6827 + parseurl@1.3.3: {} 6828 + 6829 + path-exists@4.0.0: {} 6830 + 6831 + path-key@3.1.1: {} 6832 + 6833 + path-parse@1.0.7: {} 6834 + 6835 + path-scurry@1.11.1: 6836 + dependencies: 6837 + lru-cache: 10.4.3 6838 + minipass: 7.1.2 6839 + 6840 + path-to-regexp@0.1.12: {} 6841 + 6842 + peek-readable@4.1.0: {} 6843 + 6844 + pg-cloudflare@1.3.0: 6845 + optional: true 6846 + 6847 + pg-connection-string@2.11.0: {} 6848 + 6849 + pg-int8@1.0.1: {} 6850 + 6851 + pg-pool@3.11.0(pg@8.18.0): 6852 + dependencies: 6853 + pg: 8.18.0 6854 + 6855 + pg-protocol@1.11.0: {} 6856 + 6857 + pg-types@2.2.0: 6858 + dependencies: 6859 + pg-int8: 1.0.1 6860 + postgres-array: 2.0.0 6861 + postgres-bytea: 1.0.1 6862 + postgres-date: 1.0.7 6863 + postgres-interval: 1.2.0 6864 + 6865 + pg@8.18.0: 6866 + dependencies: 6867 + pg-connection-string: 2.11.0 6868 + pg-pool: 3.11.0(pg@8.18.0) 6869 + pg-protocol: 1.11.0 6870 + pg-types: 2.2.0 6871 + pgpass: 1.0.5 6872 + optionalDependencies: 6873 + pg-cloudflare: 1.3.0 6874 + 6875 + pgpass@1.0.5: 6876 + dependencies: 6877 + split2: 4.2.0 6878 + 6879 + picocolors@1.1.1: {} 6880 + 6881 + picomatch@4.0.3: {} 6882 + 6883 + pino-abstract-transport@1.2.0: 6884 + dependencies: 6885 + readable-stream: 4.7.0 6886 + split2: 4.2.0 6887 + 6888 + pino-http@8.6.1: 6889 + dependencies: 6890 + get-caller-file: 2.0.5 6891 + pino: 8.21.0 6892 + pino-std-serializers: 6.2.2 6893 + process-warning: 3.0.0 6894 + 6895 + pino-std-serializers@6.2.2: {} 6896 + 6897 + pino@8.21.0: 6898 + dependencies: 6899 + atomic-sleep: 1.0.0 6900 + fast-redact: 3.5.0 6901 + on-exit-leak-free: 2.1.2 6902 + pino-abstract-transport: 1.2.0 6903 + pino-std-serializers: 6.2.2 6904 + process-warning: 3.0.0 6905 + quick-format-unescaped: 4.0.4 6906 + real-require: 0.2.0 6907 + safe-stable-stringify: 2.5.0 6908 + sonic-boom: 3.8.1 6909 + thread-stream: 2.7.0 6910 + 6911 + postcss-load-config@3.1.4(postcss@8.5.6): 6912 + dependencies: 6913 + lilconfig: 2.1.0 6914 + yaml: 1.10.2 6915 + optionalDependencies: 6916 + postcss: 8.5.6 6917 + 6918 + postcss-safe-parser@7.0.1(postcss@8.5.6): 6919 + dependencies: 6920 + postcss: 8.5.6 6921 + 6922 + postcss-scss@4.0.9(postcss@8.5.6): 6923 + dependencies: 6924 + postcss: 8.5.6 6925 + 6926 + postcss-selector-parser@7.1.1: 6927 + dependencies: 6928 + cssesc: 3.0.0 6929 + util-deprecate: 1.0.2 6930 + 6931 + postcss@8.5.6: 6932 + dependencies: 6933 + nanoid: 3.3.11 6934 + picocolors: 1.1.1 6935 + source-map-js: 1.2.1 6936 + 6937 + postgres-array@2.0.0: {} 6938 + 6939 + postgres-bytea@1.0.1: {} 6940 + 6941 + postgres-date@1.0.7: {} 6942 + 6943 + postgres-interval@1.2.0: 6944 + dependencies: 6945 + xtend: 4.0.2 6946 + 6947 + prebuild-install@7.1.3: 6948 + dependencies: 6949 + detect-libc: 2.1.2 6950 + expand-template: 2.0.3 6951 + github-from-package: 0.0.0 6952 + minimist: 1.2.8 6953 + mkdirp-classic: 0.5.3 6954 + napi-build-utils: 2.0.0 6955 + node-abi: 3.87.0 6956 + pump: 3.0.3 6957 + rc: 1.2.8 6958 + simple-get: 4.0.1 6959 + tar-fs: 2.1.4 6960 + tunnel-agent: 0.6.0 6961 + 6962 + prelude-ls@1.2.1: {} 6963 + 6964 + prettier-plugin-svelte@3.4.1(prettier@3.8.1)(svelte@5.49.2): 6965 + dependencies: 6966 + prettier: 3.8.1 6967 + svelte: 5.49.2 6968 + 6969 + prettier-plugin-tailwindcss@0.7.2(prettier-plugin-svelte@3.4.1(prettier@3.8.1)(svelte@5.49.2))(prettier@3.8.1): 6970 + dependencies: 6971 + prettier: 3.8.1 6972 + optionalDependencies: 6973 + prettier-plugin-svelte: 3.4.1(prettier@3.8.1)(svelte@5.49.2) 6974 + 6975 + prettier@3.8.1: {} 6976 + 6977 + process-warning@3.0.0: {} 6978 + 6979 + process@0.11.10: {} 6980 + 6981 + protobufjs@7.5.4: 6982 + dependencies: 6983 + '@protobufjs/aspromise': 1.1.2 6984 + '@protobufjs/base64': 1.1.2 6985 + '@protobufjs/codegen': 2.0.4 6986 + '@protobufjs/eventemitter': 1.1.0 6987 + '@protobufjs/fetch': 1.1.0 6988 + '@protobufjs/float': 1.0.2 6989 + '@protobufjs/inquire': 1.1.0 6990 + '@protobufjs/path': 1.1.2 6991 + '@protobufjs/pool': 1.1.0 6992 + '@protobufjs/utf8': 1.1.0 6993 + '@types/node': 24.10.11 6994 + long: 5.3.2 6995 + 6996 + proxy-addr@2.0.7: 6997 + dependencies: 6998 + forwarded: 0.2.0 6999 + ipaddr.js: 1.9.1 7000 + 7001 + proxy-from-env@1.1.0: {} 7002 + 7003 + pump@3.0.3: 7004 + dependencies: 7005 + end-of-stream: 1.4.5 7006 + once: 1.4.0 7007 + 7008 + punycode@2.3.1: {} 7009 + 7010 + qs@6.14.1: 7011 + dependencies: 7012 + side-channel: 1.1.0 7013 + 7014 + quick-format-unescaped@4.0.4: {} 7015 + 7016 + range-parser@1.2.1: {} 7017 + 7018 + rate-limiter-flexible@2.4.2: {} 7019 + 7020 + raw-body@2.5.3: 7021 + dependencies: 7022 + bytes: 3.1.2 7023 + http-errors: 2.0.1 7024 + iconv-lite: 0.4.24 7025 + unpipe: 1.0.0 7026 + 7027 + rc@1.2.8: 7028 + dependencies: 7029 + deep-extend: 0.6.0 7030 + ini: 1.3.8 7031 + minimist: 1.2.8 7032 + strip-json-comments: 2.0.1 7033 + 7034 + readable-stream@3.6.2: 7035 + dependencies: 7036 + inherits: 2.0.4 7037 + string_decoder: 1.3.0 7038 + util-deprecate: 1.0.2 7039 + 7040 + readable-stream@4.7.0: 7041 + dependencies: 7042 + abort-controller: 3.0.0 7043 + buffer: 6.0.3 7044 + events: 3.3.0 7045 + process: 0.11.10 7046 + string_decoder: 1.3.0 7047 + 7048 + readable-web-to-node-stream@3.0.4: 7049 + dependencies: 7050 + readable-stream: 4.7.0 7051 + 7052 + readdirp@4.1.2: {} 7053 + 7054 + real-require@0.2.0: {} 7055 + 7056 + redis-errors@1.2.0: {} 7057 + 7058 + redis-parser@3.0.0: 7059 + dependencies: 7060 + redis-errors: 1.2.0 7061 + 7062 + require-directory@2.1.1: {} 7063 + 7064 + resolve-from@4.0.0: {} 7065 + 7066 + resolve@1.22.11: 7067 + dependencies: 7068 + is-core-module: 2.16.1 7069 + path-parse: 1.0.7 7070 + supports-preserve-symlinks-flag: 1.0.0 7071 + 7072 + roarr@7.21.4: 7073 + dependencies: 7074 + fast-printf: 1.6.10 7075 + safe-stable-stringify: 2.5.0 7076 + semver-compare: 1.0.0 7077 + 7078 + rollup@4.57.1: 7079 + dependencies: 7080 + '@types/estree': 1.0.8 7081 + optionalDependencies: 7082 + '@rollup/rollup-android-arm-eabi': 4.57.1 7083 + '@rollup/rollup-android-arm64': 4.57.1 7084 + '@rollup/rollup-darwin-arm64': 4.57.1 7085 + '@rollup/rollup-darwin-x64': 4.57.1 7086 + '@rollup/rollup-freebsd-arm64': 4.57.1 7087 + '@rollup/rollup-freebsd-x64': 4.57.1 7088 + '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 7089 + '@rollup/rollup-linux-arm-musleabihf': 4.57.1 7090 + '@rollup/rollup-linux-arm64-gnu': 4.57.1 7091 + '@rollup/rollup-linux-arm64-musl': 4.57.1 7092 + '@rollup/rollup-linux-loong64-gnu': 4.57.1 7093 + '@rollup/rollup-linux-loong64-musl': 4.57.1 7094 + '@rollup/rollup-linux-ppc64-gnu': 4.57.1 7095 + '@rollup/rollup-linux-ppc64-musl': 4.57.1 7096 + '@rollup/rollup-linux-riscv64-gnu': 4.57.1 7097 + '@rollup/rollup-linux-riscv64-musl': 4.57.1 7098 + '@rollup/rollup-linux-s390x-gnu': 4.57.1 7099 + '@rollup/rollup-linux-x64-gnu': 4.57.1 7100 + '@rollup/rollup-linux-x64-musl': 4.57.1 7101 + '@rollup/rollup-openbsd-x64': 4.57.1 7102 + '@rollup/rollup-openharmony-arm64': 4.57.1 7103 + '@rollup/rollup-win32-arm64-msvc': 4.57.1 7104 + '@rollup/rollup-win32-ia32-msvc': 4.57.1 7105 + '@rollup/rollup-win32-x64-gnu': 4.57.1 7106 + '@rollup/rollup-win32-x64-msvc': 4.57.1 7107 + fsevents: 2.3.3 7108 + 7109 + russian-bad-words@0.5.0: 7110 + optional: true 7111 + 7112 + rxjs@7.8.2: 7113 + dependencies: 7114 + tslib: 2.8.1 7115 + optional: true 7116 + 7117 + sade@1.8.1: 7118 + dependencies: 7119 + mri: 1.2.0 7120 + 7121 + safe-buffer@5.2.1: {} 7122 + 7123 + safe-stable-stringify@2.5.0: {} 7124 + 7125 + safer-buffer@2.1.2: {} 7126 + 7127 + semver-compare@1.0.0: {} 7128 + 7129 + semver@7.7.4: {} 7130 + 7131 + send@0.19.2: 7132 + dependencies: 7133 + debug: 2.6.9 7134 + depd: 2.0.0 7135 + destroy: 1.2.0 7136 + encodeurl: 2.0.0 7137 + escape-html: 1.0.3 7138 + etag: 1.8.1 7139 + fresh: 0.5.2 7140 + http-errors: 2.0.1 7141 + mime: 1.6.0 7142 + ms: 2.1.3 7143 + on-finished: 2.4.1 7144 + range-parser: 1.2.1 7145 + statuses: 2.0.2 7146 + transitivePeerDependencies: 7147 + - supports-color 7148 + 7149 + serve-static@1.16.3: 7150 + dependencies: 7151 + encodeurl: 2.0.0 7152 + escape-html: 1.0.3 7153 + parseurl: 1.3.3 7154 + send: 0.19.2 7155 + transitivePeerDependencies: 7156 + - supports-color 7157 + 7158 + set-cookie-parser@3.0.1: {} 7159 + 7160 + setprototypeof@1.2.0: {} 7161 + 7162 + sharp@0.33.5: 7163 + dependencies: 7164 + color: 4.2.3 7165 + detect-libc: 2.1.2 7166 + semver: 7.7.4 7167 + optionalDependencies: 7168 + '@img/sharp-darwin-arm64': 0.33.5 7169 + '@img/sharp-darwin-x64': 0.33.5 7170 + '@img/sharp-libvips-darwin-arm64': 1.0.4 7171 + '@img/sharp-libvips-darwin-x64': 1.0.4 7172 + '@img/sharp-libvips-linux-arm': 1.0.5 7173 + '@img/sharp-libvips-linux-arm64': 1.0.4 7174 + '@img/sharp-libvips-linux-s390x': 1.0.4 7175 + '@img/sharp-libvips-linux-x64': 1.0.4 7176 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 7177 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 7178 + '@img/sharp-linux-arm': 0.33.5 7179 + '@img/sharp-linux-arm64': 0.33.5 7180 + '@img/sharp-linux-s390x': 0.33.5 7181 + '@img/sharp-linux-x64': 0.33.5 7182 + '@img/sharp-linuxmusl-arm64': 0.33.5 7183 + '@img/sharp-linuxmusl-x64': 0.33.5 7184 + '@img/sharp-wasm32': 0.33.5 7185 + '@img/sharp-win32-ia32': 0.33.5 7186 + '@img/sharp-win32-x64': 0.33.5 7187 + 7188 + shebang-command@2.0.0: 7189 + dependencies: 7190 + shebang-regex: 3.0.0 7191 + 7192 + shebang-regex@3.0.0: {} 7193 + 7194 + side-channel-list@1.0.0: 7195 + dependencies: 7196 + es-errors: 1.3.0 7197 + object-inspect: 1.13.4 7198 + 7199 + side-channel-map@1.0.1: 7200 + dependencies: 7201 + call-bound: 1.0.4 7202 + es-errors: 1.3.0 7203 + get-intrinsic: 1.3.0 7204 + object-inspect: 1.13.4 7205 + 7206 + side-channel-weakmap@1.0.2: 7207 + dependencies: 7208 + call-bound: 1.0.4 7209 + es-errors: 1.3.0 7210 + get-intrinsic: 1.3.0 7211 + object-inspect: 1.13.4 7212 + side-channel-map: 1.0.1 7213 + 7214 + side-channel@1.1.0: 7215 + dependencies: 7216 + es-errors: 1.3.0 7217 + object-inspect: 1.13.4 7218 + side-channel-list: 1.0.0 7219 + side-channel-map: 1.0.1 7220 + side-channel-weakmap: 1.0.2 7221 + 7222 + signal-exit@4.1.0: {} 7223 + 7224 + simple-concat@1.0.1: {} 7225 + 7226 + simple-get@4.0.1: 7227 + dependencies: 7228 + decompress-response: 6.0.0 7229 + once: 1.4.0 7230 + simple-concat: 1.0.1 7231 + 7232 + simple-swizzle@0.2.4: 7233 + dependencies: 7234 + is-arrayish: 0.3.4 7235 + 7236 + sirv@3.0.2: 7237 + dependencies: 7238 + '@polka/url': 1.0.0-next.29 7239 + mrmime: 2.0.1 7240 + totalist: 3.0.1 7241 + 7242 + sonic-boom@3.8.1: 7243 + dependencies: 7244 + atomic-sleep: 1.0.0 7245 + 7246 + source-map-js@1.2.1: {} 7247 + 7248 + source-map@0.6.1: {} 7249 + 7250 + split2@4.2.0: {} 7251 + 7252 + standard-as-callback@2.1.0: {} 7253 + 7254 + statuses@2.0.2: {} 7255 + 7256 + stream-browserify@3.0.0: 7257 + dependencies: 7258 + inherits: 2.0.4 7259 + readable-stream: 3.6.2 7260 + 7261 + string-width@4.2.3: 7262 + dependencies: 7263 + emoji-regex: 8.0.0 7264 + is-fullwidth-code-point: 3.0.0 7265 + strip-ansi: 6.0.1 7266 + 7267 + string-width@5.1.2: 7268 + dependencies: 7269 + eastasianwidth: 0.2.0 7270 + emoji-regex: 9.2.2 7271 + strip-ansi: 7.1.2 7272 + 7273 + string_decoder@1.3.0: 7274 + dependencies: 7275 + safe-buffer: 5.2.1 7276 + 7277 + strip-ansi@6.0.1: 7278 + dependencies: 7279 + ansi-regex: 5.0.1 7280 + 7281 + strip-ansi@7.1.2: 7282 + dependencies: 7283 + ansi-regex: 6.2.2 7284 + 7285 + strip-json-comments@2.0.1: {} 7286 + 7287 + strip-json-comments@3.1.1: {} 7288 + 7289 + strnum@2.1.2: {} 7290 + 7291 + strtok3@6.3.0: 7292 + dependencies: 7293 + '@tokenizer/token': 0.3.0 7294 + peek-readable: 4.1.0 7295 + 7296 + structured-headers@1.0.1: {} 7297 + 7298 + supports-color@7.2.0: 7299 + dependencies: 7300 + has-flag: 4.0.0 7301 + 7302 + supports-preserve-symlinks-flag@1.0.0: {} 7303 + 7304 + svelte-check@4.3.6(picomatch@4.0.3)(svelte@5.49.2)(typescript@5.9.3): 7305 + dependencies: 7306 + '@jridgewell/trace-mapping': 0.3.31 7307 + chokidar: 4.0.3 7308 + fdir: 6.5.0(picomatch@4.0.3) 7309 + picocolors: 1.1.1 7310 + sade: 1.8.1 7311 + svelte: 5.49.2 7312 + typescript: 5.9.3 7313 + transitivePeerDependencies: 7314 + - picomatch 7315 + 7316 + svelte-eslint-parser@1.4.1(svelte@5.49.2): 7317 + dependencies: 7318 + eslint-scope: 8.4.0 7319 + eslint-visitor-keys: 4.2.1 7320 + espree: 10.4.0 7321 + postcss: 8.5.6 7322 + postcss-scss: 4.0.9(postcss@8.5.6) 7323 + postcss-selector-parser: 7.1.1 7324 + optionalDependencies: 7325 + svelte: 5.49.2 7326 + 7327 + svelte@5.49.2: 7328 + dependencies: 7329 + '@jridgewell/remapping': 2.3.5 7330 + '@jridgewell/sourcemap-codec': 1.5.5 7331 + '@sveltejs/acorn-typescript': 1.0.8(acorn@8.15.0) 7332 + '@types/estree': 1.0.8 7333 + acorn: 8.15.0 7334 + aria-query: 5.3.2 7335 + axobject-query: 4.1.0 7336 + clsx: 2.1.1 7337 + devalue: 5.6.2 7338 + esm-env: 1.2.2 7339 + esrap: 2.2.2 7340 + is-reference: 3.0.3 7341 + locate-character: 3.0.0 7342 + magic-string: 0.30.21 7343 + zimmerframe: 1.1.4 7344 + 7345 + tailwindcss@4.1.18: {} 7346 + 7347 + tapable@2.3.0: {} 7348 + 7349 + tar-fs@2.1.4: 7350 + dependencies: 7351 + chownr: 1.1.4 7352 + mkdirp-classic: 0.5.3 7353 + pump: 3.0.3 7354 + tar-stream: 2.2.0 7355 + 7356 + tar-stream@2.2.0: 7357 + dependencies: 7358 + bl: 4.1.0 7359 + end-of-stream: 1.4.5 7360 + fs-constants: 1.0.0 7361 + inherits: 2.0.4 7362 + readable-stream: 3.6.2 7363 + 7364 + thread-stream@2.7.0: 7365 + dependencies: 7366 + real-require: 0.2.0 7367 + 7368 + tinyglobby@0.2.15: 7369 + dependencies: 7370 + fdir: 6.5.0(picomatch@4.0.3) 7371 + picomatch: 4.0.3 7372 + 7373 + tlds@1.261.0: {} 7374 + 7375 + toidentifier@1.0.1: {} 7376 + 7377 + token-types@4.2.1: 7378 + dependencies: 7379 + '@tokenizer/token': 0.3.0 7380 + ieee754: 1.2.1 7381 + 7382 + totalist@3.0.1: {} 7383 + 7384 + toygrad@2.6.0: {} 7385 + 7386 + ts-api-utils@2.4.0(typescript@5.9.3): 7387 + dependencies: 7388 + typescript: 5.9.3 7389 + 7390 + tslib@2.8.1: {} 7391 + 7392 + tunnel-agent@0.6.0: 7393 + dependencies: 7394 + safe-buffer: 5.2.1 7395 + 7396 + type-check@0.4.0: 7397 + dependencies: 7398 + prelude-ls: 1.2.1 7399 + 7400 + type-fest@2.19.0: {} 7401 + 7402 + type-is@1.6.18: 7403 + dependencies: 7404 + media-typer: 0.3.0 7405 + mime-types: 2.1.35 7406 + 7407 + typed-emitter@2.1.0: 7408 + optionalDependencies: 7409 + rxjs: 7.8.2 7410 + 7411 + typescript-eslint@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3): 7412 + dependencies: 7413 + '@typescript-eslint/eslint-plugin': 8.54.0(@typescript-eslint/parser@8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 7414 + '@typescript-eslint/parser': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 7415 + '@typescript-eslint/typescript-estree': 8.54.0(typescript@5.9.3) 7416 + '@typescript-eslint/utils': 8.54.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) 7417 + eslint: 9.39.2(jiti@2.6.1) 7418 + typescript: 5.9.3 7419 + transitivePeerDependencies: 7420 + - supports-color 7421 + 7422 + typescript@5.9.3: {} 7423 + 7424 + uglify-js@3.19.3: 7425 + optional: true 7426 + 7427 + uint8arrays@3.0.0: 7428 + dependencies: 7429 + multiformats: 9.9.0 7430 + 7431 + undici-types@7.16.0: {} 7432 + 7433 + undici@5.29.0: 7434 + dependencies: 7435 + '@fastify/busboy': 2.1.1 7436 + 7437 + undici@6.23.0: {} 7438 + 7439 + unicode-segmenter@0.14.5: {} 7440 + 7441 + unpipe@1.0.0: {} 7442 + 7443 + uri-js@4.4.1: 7444 + dependencies: 7445 + punycode: 2.3.1 7446 + 7447 + util-deprecate@1.0.2: {} 7448 + 7449 + utils-merge@1.0.1: {} 7450 + 7451 + varint@6.0.0: {} 7452 + 7453 + vary@1.1.2: {} 7454 + 7455 + vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2): 7456 + dependencies: 7457 + esbuild: 0.27.3 7458 + fdir: 6.5.0(picomatch@4.0.3) 7459 + picomatch: 4.0.3 7460 + postcss: 8.5.6 7461 + rollup: 4.57.1 7462 + tinyglobby: 0.2.15 7463 + optionalDependencies: 7464 + '@types/node': 24.10.11 7465 + fsevents: 2.3.3 7466 + jiti: 2.6.1 7467 + lightningcss: 1.30.2 7468 + 7469 + vitefu@1.1.1(vite@7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2)): 7470 + optionalDependencies: 7471 + vite: 7.3.1(@types/node@24.10.11)(jiti@2.6.1)(lightningcss@1.30.2) 7472 + 7473 + which@2.0.2: 7474 + dependencies: 7475 + isexe: 2.0.0 7476 + 7477 + word-wrap@1.2.5: {} 7478 + 7479 + wordwrap@1.0.0: {} 7480 + 7481 + wrap-ansi@7.0.0: 7482 + dependencies: 7483 + ansi-styles: 4.3.0 7484 + string-width: 4.2.3 7485 + strip-ansi: 6.0.1 7486 + 7487 + wrap-ansi@8.1.0: 7488 + dependencies: 7489 + ansi-styles: 6.2.3 7490 + string-width: 5.1.2 7491 + strip-ansi: 7.1.2 7492 + 7493 + wrappy@1.0.2: {} 7494 + 7495 + ws@8.19.0: {} 7496 + 7497 + xtend@4.0.2: {} 7498 + 7499 + y18n@5.0.8: {} 7500 + 7501 + yaml@1.10.2: {} 7502 + 7503 + yargs-parser@21.1.1: {} 7504 + 7505 + yargs@17.7.2: 7506 + dependencies: 7507 + cliui: 8.0.1 7508 + escalade: 3.2.0 7509 + get-caller-file: 2.0.5 7510 + require-directory: 2.1.1 7511 + string-width: 4.2.3 7512 + y18n: 5.0.8 7513 + yargs-parser: 21.1.1 7514 + 7515 + yocto-queue@0.1.0: {} 7516 + 7517 + zimmerframe@1.1.4: {} 7518 + 7519 + zod@3.23.8: {} 7520 + 7521 + zod@3.25.76: {}
+4
pnpm-workspace.yaml
··· 1 + onlyBuiltDependencies: 2 + - better-sqlite3 3 + - core-js 4 + - esbuild
+27
service/index.js
··· 1 + import { readEnv, httpLogger, envToCfg, envToSecrets, OzoneService, Database } from '@atproto/ozone' 2 + import "dotenv/config"; 3 + 4 + async function main() { 5 + // backend 6 + const env = readEnv() 7 + const config = envToCfg(env) 8 + const secrets = envToSecrets(env) 9 + const migrate = process.env.OZONE_DB_MIGRATE === '1' 10 + if (migrate) { 11 + const db = new Database({ 12 + url: config.db.postgresUrl, 13 + schema: config.db.postgresSchema, 14 + }) 15 + await db.migrateToLatestOrThrow() 16 + await db.close() 17 + } 18 + const ozone = await OzoneService.create(config, secrets) 19 + 20 + // run 21 + const httpServer = await ozone.start() 22 + /** @type {import('net').AddressInfo} */ 23 + const addr = httpServer.address() 24 + console.info(`Ozone is running at http://localhost:${addr.port}`) 25 + } 26 + 27 + main().catch(console.error)
+13
src/app.d.ts
··· 1 + // See https://svelte.dev/docs/kit/types#app.d.ts 2 + // for information about these interfaces 3 + declare global { 4 + namespace App { 5 + // interface Error {} 6 + // interface Locals {} 7 + // interface PageData {} 8 + // interface PageState {} 9 + // interface Platform {} 10 + } 11 + } 12 + 13 + export {};
+11
src/app.html
··· 1 + <!doctype html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="utf-8" /> 5 + <meta name="viewport" content="width=device-width, initial-scale=1" /> 6 + %sveltekit.head% 7 + </head> 8 + <body data-sveltekit-preload-data="hover" class="bg-ctp-base"> 9 + <div style="display: contents">%sveltekit.body%</div> 10 + </body> 11 + </html>
+118
src/components/Header.svelte
··· 1 + <script lang="ts"> 2 + import { session } from '$lib/stores/auth'; 3 + import { accentColours, inputAccentColor, type InputAccentColor } from '$lib/stores/ui'; 4 + import { createQuery } from '@tanstack/svelte-query'; 5 + import { Cat, LogOut, Paintbrush, TriangleAlert } from 'lucide-svelte'; 6 + import Button from './ui/Button.svelte'; 7 + 8 + let menuOpen = false; 9 + 10 + async function handleLogout() { 11 + if ($session) { 12 + await $session.session.session.signOut(); 13 + } 14 + session.set(null); 15 + window.location.href = '/login'; 16 + } 17 + 18 + function toggleMenu() { 19 + menuOpen = !menuOpen; 20 + } 21 + 22 + function closeMenu() { 23 + menuOpen = false; 24 + } 25 + 26 + function setInputAccentColor(color: InputAccentColor) { 27 + inputAccentColor.set(color); 28 + } 29 + 30 + const profileQuery = createQuery(() => ({ 31 + queryKey: ['profile'], 32 + queryFn: async () => { 33 + if (!$session) { 34 + throw new Error('No active session'); 35 + } 36 + const profile = await $session.agent.getProfile({ actor: $session.agent.did! }); 37 + return profile.data; 38 + }, 39 + enabled: !!$session 40 + })); 41 + </script> 42 + 43 + {#if menuOpen} 44 + <button type="button" class="fixed inset-0 z-40" on:click={closeMenu} aria-label="Close menu" 45 + ></button> 46 + {/if} 47 + 48 + <div 49 + class="mx-auto mb-4 flex max-w-2xl items-center justify-between rounded-xl border border-ctp-surface1 bg-ctp-surface0 px-2 py-2" 50 + > 51 + <div class="ml-3 flex cursor-pointer items-center"> 52 + <Cat class="mr-4 text-ctp-text" /> 53 + <h1 class="text-xl font-bold text-ctp-text">meowzone</h1> 54 + </div> 55 + <div class="relative"> 56 + <Button 57 + variant="ghost" 58 + size="icon" 59 + on:click={toggleMenu} 60 + className="items-center" 61 + aria-label="Menu" 62 + > 63 + <div class="size-8"> 64 + {#if profileQuery.isLoading} 65 + <div class="size-8 rounded-full bg-ctp-surface1"></div> 66 + {:else if profileQuery.isError || !profileQuery.data} 67 + <div class="size-8 rounded-full bg-ctp-red/20"> 68 + <TriangleAlert class="size-full p-2 text-ctp-red" /> 69 + </div> 70 + {:else if profileQuery.data && $session} 71 + <img 72 + src={profileQuery.data.avatar} 73 + alt={profileQuery.data.displayName || profileQuery.data.handle} 74 + class="size-8 rounded-full" 75 + /> 76 + {/if} 77 + </div> 78 + </Button> 79 + 80 + {#if menuOpen} 81 + <div 82 + class="absolute top-full right-0 z-50 w-48 rounded-md border border-ctp-surface1 bg-ctp-surface0 px-1.5 py-2 shadow-lg" 83 + > 84 + <div class="mb-1 flex items-center gap-2 px-2 py-1 text-xs text-ctp-subtext0"> 85 + <Paintbrush size={16} /> 86 + <span>Theme</span> 87 + </div> 88 + <div class="flex gap-2 px-2 py-1"> 89 + {#each accentColours as colour} 90 + <button 91 + class="size-5 cursor-pointer rounded-full hover:opacity-80" 92 + class:bg-ctp-sapphire={colour === 'sapphire'} 93 + class:bg-ctp-mauve={colour === 'mauve'} 94 + class:bg-ctp-lavender={colour === 'lavender'} 95 + class:ring-2={$inputAccentColor === colour} 96 + class:ring-ctp-overlay1={$inputAccentColor === colour} 97 + class:text-ctp-subtext0={$inputAccentColor !== colour} 98 + on:click={() => setInputAccentColor(colour)} 99 + aria-label={`Set input accent color to ${colour}`} 100 + > 101 + </button> 102 + {/each} 103 + </div> 104 + <div class="my-2 border-t border-ctp-surface1"></div> 105 + <Button 106 + variant="danger" 107 + fullWidth={true} 108 + size="sm" 109 + on:click={handleLogout} 110 + className="justify-start py-1.5 rounded-sm" 111 + > 112 + <LogOut size={18} class="mr-3" /> 113 + <span>Logout</span> 114 + </Button> 115 + </div> 116 + {/if} 117 + </div> 118 + </div>
+305
src/components/LabelerSetup.svelte
··· 1 + <script lang="ts"> 2 + import { onMount } from 'svelte'; 3 + import { getLabelerDid, getLabelerUrl } from '$lib/api/ozone'; 4 + import { getOAuthClient, signInPopup } from '$lib/oauth'; 5 + import { Agent } from '@atproto/api'; 6 + import { Check, LoaderCircle } from 'lucide-svelte'; 7 + import { query } from '$app/server'; 8 + import { createQuery } from '@tanstack/svelte-query'; 9 + import { PlcClient, signOperation } from '@atcute/did-plc'; 10 + import { session } from '$lib/stores/auth'; 11 + import Button from './ui/Button.svelte'; 12 + import Input from './ui/Input.svelte'; 13 + 14 + const metadataPath = '/labeler-metadata.json'; 15 + const serviceRecord = { 16 + $type: 'app.bsky.labeler.service', 17 + policies: { 18 + labelValues: ['my-cool-label'], 19 + labelValueDefinitions: [ 20 + { 21 + blurs: 'none', 22 + locales: [ 23 + { 24 + lang: 'en', 25 + name: 'my cool label', 26 + description: 'woaw cool label !' 27 + } 28 + ], 29 + severity: 'inform', 30 + adultOnly: false, 31 + identifier: 'my-cool-label', 32 + defaultSetting: 'warn' 33 + } 34 + ] 35 + }, 36 + createdAt: new Date().toISOString() 37 + }; 38 + let serviceRecordCreating = false; 39 + let plcDocumentCreating = false; 40 + let plcSubmitting = false; 41 + let authSession: Agent | null = null; 42 + 43 + onMount(async () => { 44 + try { 45 + const auth = await getOAuthClient(metadataPath); 46 + const labeler = getLabelerDid(); 47 + const session = await auth.restore(labeler); 48 + if (session) { 49 + authSession = new Agent(session); 50 + } 51 + } catch (e) { 52 + console.error('Error restoring session in LabelerSetup:', e); 53 + } 54 + }); 55 + 56 + async function onLogin() { 57 + try { 58 + const labeler = getLabelerDid(); 59 + const session = await signInPopup(labeler, metadataPath); 60 + authSession = new Agent(session); 61 + } catch (e) { 62 + console.error('Error in onLogin:', e); 63 + } 64 + } 65 + 66 + function onLoginClick() { 67 + if (authSession != null) { 68 + return; 69 + } 70 + 71 + onLogin(); 72 + } 73 + 74 + async function onSubmitClick() { 75 + if (plcSignature.length <= 2 || plcSubmitting) { 76 + return; 77 + } 78 + 79 + try { 80 + plcSubmitting = true; 81 + if (plcQuery.data == true && authSession != null) { 82 + const plcDocument = await authSession.com.atproto.identity.getRecommendedDidCredentials(); 83 + 84 + const meta = await fetch(new URL('.well-known/ozone-metadata.json', getLabelerUrl())); 85 + 86 + const metaJson = await meta.json(); 87 + const publicKey = metaJson['publicKey']; 88 + 89 + if (!publicKey) { 90 + throw new Error('Public key not found in metadata'); 91 + } 92 + 93 + const res = await authSession?.com.atproto.identity.signPlcOperation({ 94 + token: plcSignature, 95 + ...plcDocument.data, 96 + verificationMethods: { 97 + ...plcDocument.data.verificationMethods, 98 + atproto_label: publicKey 99 + }, 100 + services: { 101 + ...plcDocument.data.services, 102 + atproto_labeler: { 103 + type: 'AtprotoLabeler', 104 + endpoint: getLabelerUrl() 105 + } 106 + } 107 + }); 108 + 109 + await authSession.com.atproto.identity.submitPlcOperation({ 110 + operation: res.data.operation 111 + }); 112 + } 113 + setTimeout(() => { 114 + window.location.href = '/'; 115 + window.location.reload(); 116 + }, 5000); 117 + } finally { 118 + plcSubmitting = false; 119 + } 120 + } 121 + 122 + const serviceRecordQuery = createQuery(() => ({ 123 + queryKey: ['createLabelerServiceRecord'], 124 + queryFn: async () => { 125 + if (!authSession) { 126 + throw new Error('No auth session available'); 127 + } 128 + serviceRecordCreating = true; 129 + try { 130 + const result = await authSession.com.atproto.repo.createRecord({ 131 + repo: getLabelerDid(), 132 + collection: 'app.bsky.labeler.service', 133 + rkey: 'self', 134 + record: serviceRecord 135 + }); 136 + return result; 137 + } catch (error) { 138 + const check = await authSession.com.atproto.repo.getRecord({ 139 + repo: getLabelerDid(), 140 + collection: 'app.bsky.labeler.service', 141 + rkey: 'self' 142 + }); 143 + if (check) { 144 + return check; 145 + } 146 + console.error('Error creating service record:', error); 147 + throw error; 148 + } finally { 149 + serviceRecordCreating = false; 150 + } 151 + }, 152 + retry: 3, 153 + enabled: !!authSession, 154 + refetchOnWindowFocus: false 155 + })); 156 + 157 + const client = new PlcClient(); 158 + let plcSignature: string = ''; 159 + const plcQuery = createQuery(() => ({ 160 + queryKey: ['plcDocumentQuery'], 161 + queryFn: async () => { 162 + if (!authSession) { 163 + throw new Error('No auth session available'); 164 + } 165 + plcDocumentCreating = true; 166 + const doc = await client.getDocument(getLabelerDid()); 167 + if ( 168 + doc.service?.find((s) => s.type == 'atproto_labeler')?.serviceEndpoint == getLabelerUrl() 169 + ) { 170 + return false; 171 + } 172 + 173 + try { 174 + await authSession.com.atproto.identity.requestPlcOperationSignature(); 175 + } catch (error) { 176 + console.error('Error creating service record:', error); 177 + throw error; 178 + } finally { 179 + plcDocumentCreating = false; 180 + } 181 + 182 + return true; 183 + }, 184 + retry: 3, 185 + enabled: !!serviceRecordQuery.data, 186 + refetchOnWindowFocus: false 187 + })); 188 + 189 + let mounted = false; 190 + 191 + onMount(() => { 192 + setTimeout(() => { 193 + mounted = true; 194 + }, 10); 195 + }); 196 + </script> 197 + 198 + <div class="relative flex min-h-screen items-center justify-center"> 199 + <div 200 + class={`absolute inset-0 bg-linear-to-br from-ctp-lavender to-ctp-sapphire transition-opacity duration-800 ${ 201 + mounted ? 'opacity-100' : 'opacity-0' 202 + }`} 203 + ></div> 204 + <div class="relative w-full max-w-md space-y-6 rounded-lg bg-ctp-surface0 p-8"> 205 + <h2 class="mb-2 pb-5 text-xl font-bold text-ctp-lavender">Labeler setup</h2> 206 + <div class="space-y-6"> 207 + <div> 208 + <div class="flex items-center space-x-4"> 209 + <div 210 + class={`flex size-7 items-center justify-center rounded-full bg-ctp-lavender font-semibold text-ctp-base ${authSession != null ? 'opacity-40' : ''}`} 211 + > 212 + {#if authSession != null} 213 + <Check class="p-1" /> 214 + {:else} 215 + 1 216 + {/if} 217 + </div> 218 + <h3 class={`${authSession != null ? 'text-ctp-subtext0' : 'text-ctp-text'}`}> 219 + Login to labeler 220 + </h3> 221 + </div> 222 + <Button 223 + className="mt-4" 224 + fullWidth={true} 225 + disabled={authSession != null} 226 + on:click={onLoginClick} 227 + > 228 + Login with labeler account 229 + </Button> 230 + </div> 231 + <div> 232 + <div class="flex items-center space-x-4"> 233 + <div 234 + class={`flex size-7 items-center justify-center rounded-full bg-ctp-lavender font-semibold text-ctp-base ${serviceRecordQuery.data != null ? 'opacity-40' : ''}`} 235 + > 236 + {#if serviceRecordCreating == true} 237 + <LoaderCircle class="animate-spin text-ctp-base" size={16} /> 238 + {:else if serviceRecordQuery.data != null} 239 + <Check class="p-1" /> 240 + {:else} 241 + 2 242 + {/if} 243 + </div> 244 + <h3 class={serviceRecordQuery.data != null ? 'text-ctp-subtext0' : 'text-ctp-text'}> 245 + Create service record 246 + </h3> 247 + </div> 248 + {#if serviceRecordQuery.isError} 249 + <p class="mt-2 text-sm text-ctp-red">Error: {serviceRecordQuery.error.message}</p> 250 + {/if} 251 + <div class={`pt-5 ${serviceRecordQuery.data != null ? 'opacity-40' : ''}`}> 252 + <pre 253 + class="h-50 w-full overflow-auto rounded-xl bg-ctp-surface2 p-4 text-start text-ctp-text"><code 254 + >{JSON.stringify(serviceRecord, null, 2)}</code 255 + ></pre> 256 + </div> 257 + </div> 258 + <div> 259 + <div class="flex items-center space-x-4"> 260 + <div 261 + class={`flex size-7 items-center justify-center rounded-full bg-ctp-lavender font-semibold text-ctp-base ${plcQuery.data != null ? 'opacity-40' : ''}`} 262 + > 263 + {#if plcDocumentCreating} 264 + <LoaderCircle class="animate-spin text-ctp-base" size={16} /> 265 + {:else if plcQuery.data != null} 266 + <Check class="p-1" /> 267 + {:else} 268 + 2 269 + {/if} 270 + </div> 271 + <h3 class={plcQuery.data != null ? 'text-ctp-subtext0' : 'text-ctp-text'}> 272 + Request PLC signature 273 + </h3> 274 + </div> 275 + {#if plcQuery.isError} 276 + <p class="mt-2 text-sm text-ctp-red">Error: {plcQuery.error.message}</p> 277 + {/if} 278 + <div class={`pt-3 ${plcQuery.data == null ? 'opacity-40' : ''}`}> 279 + <p class="text-md mb-4 text-ctp-text"> 280 + Retrieve the code from your inbox to edit your labeler's PLC 281 + </p> 282 + <Input 283 + placeholder="XXXX-XXXX" 284 + bind:value={plcSignature} 285 + disabled={plcQuery.data == null} 286 + className="border-none bg-ctp-surface2 px-2 py-2 focus:border-none focus:ring-3 focus:ring-ctp-lavender" 287 + /> 288 + </div> 289 + </div> 290 + <div> 291 + <Button 292 + fullWidth={true} 293 + loading={plcSubmitting} 294 + disabled={plcSubmitting || plcSignature.length <= 2} 295 + on:click={onSubmitClick} 296 + > 297 + {#if plcSubmitting} 298 + <LoaderCircle class="animate-spin" size={16} /> 299 + {/if} 300 + Submit 301 + </Button> 302 + </div> 303 + </div> 304 + </div> 305 + </div>
+9
src/components/Loading.svelte
··· 1 + <script> 2 + import { LoaderCircle } from 'lucide-svelte'; 3 + </script> 4 + 5 + <div class="flex min-h-screen items-center justify-center"> 6 + <div class="text-center"> 7 + <LoaderCircle class="mx-auto mb-4 h-8 w-8 animate-spin text-ctp-subtext0" /> 8 + </div> 9 + </div>
+50
src/components/Modal.svelte
··· 1 + <script lang="ts"> 2 + import { X } from 'lucide-svelte'; 3 + 4 + export let isOpen = false; 5 + export let title = ''; 6 + export let onClose = () => {}; 7 + 8 + function handleBackdropClick() { 9 + onClose(); 10 + } 11 + 12 + function handleKeydown(e: KeyboardEvent) { 13 + if (e.key === 'Escape') { 14 + onClose(); 15 + } 16 + } 17 + </script> 18 + 19 + <svelte:window on:keydown={handleKeydown} /> 20 + 21 + {#if isOpen} 22 + <div 23 + class="fixed inset-0 z-40 bg-black/30" 24 + on:click={handleBackdropClick} 25 + role="presentation" 26 + tabindex="-1" 27 + ></div> 28 + <div class="fixed inset-0 z-50 flex items-center justify-center md:p-4"> 29 + <div 30 + class="relative flex h-screen max-h-screen w-full max-w-3xl flex-col overflow-hidden rounded-lg border border-ctp-surface1 bg-ctp-base shadow-lg md:h-auto md:max-h-[calc(100vh-2rem)]" 31 + role="dialog" 32 + aria-modal="true" 33 + tabindex="0" 34 + > 35 + <div class="flex items-center justify-between border-b border-ctp-surface1 p-4"> 36 + <h2 class="text-lg font-bold text-ctp-text">{title}</h2> 37 + <button 38 + on:click={onClose} 39 + class="cursor-pointer rounded-lg p-1 transition-colors hover:bg-ctp-surface1" 40 + aria-label="Close modal" 41 + > 42 + <X size={20} class="text-ctp-text" /> 43 + </button> 44 + </div> 45 + <div class="overflow-y-auto p-4"> 46 + <slot /> 47 + </div> 48 + </div> 49 + </div> 50 + {/if}
+59
src/components/ui/Button.svelte
··· 1 + <script lang="ts"> 2 + import { inputAccentColor, type InputAccentColor } from '$lib/stores/ui'; 3 + 4 + export let type: 'button' | 'submit' | 'reset' = 'button'; 5 + export let variant: 'primary' | 'surface' | 'danger' | 'ghost' = 'primary'; 6 + export let size: 'sm' | 'md' | 'icon' = 'md'; 7 + export let fullWidth = false; 8 + export let loading = false; 9 + export let disabled = false; 10 + export let color: InputAccentColor | null = null; 11 + export let className = ''; 12 + 13 + import { accentClasses } from '$lib/utils/accent'; 14 + $: isDisabled = disabled || loading; 15 + $: activeColor = color ?? $inputAccentColor; 16 + // grab the colour-specific utilities from our shared lookup so that the 17 + // compiler sees every possibility at build time instead of relying on 18 + // interpolated template strings. 19 + $: primaryClass = `${accentClasses[activeColor].bg} text-ctp-base`; 20 + $: primaryHoverClass = `hover:opacity-80`; 21 + 22 + $: variantClass = 23 + variant === 'primary' 24 + ? primaryClass 25 + : variant === 'surface' 26 + ? 'border border-ctp-surface1 bg-ctp-surface0 text-ctp-text' 27 + : variant === 'danger' 28 + ? 'text-ctp-red' 29 + : 'bg-transparent text-ctp-text'; 30 + 31 + $: hoverClass = isDisabled 32 + ? '' 33 + : variant === 'primary' 34 + ? primaryHoverClass 35 + : variant === 'surface' || variant === 'ghost' 36 + ? 'hover:bg-ctp-surface1' 37 + : variant === 'danger' 38 + ? 'hover:bg-ctp-red/10' 39 + : 'hover:opacity-80'; 40 + 41 + $: sizeClass = 42 + size === 'sm' ? 'px-3 py-1 text-sm' : size === 'icon' ? 'p-1' : 'px-4 py-2 font-semibold'; 43 + 44 + $: buttonClass = [ 45 + 'rounded-lg flex items-center justify-center gap-2', 46 + variantClass, 47 + sizeClass, 48 + fullWidth ? 'w-full' : '', 49 + isDisabled ? 'cursor-not-allowed opacity-40' : 'cursor-pointer', 50 + hoverClass, 51 + className 52 + ] 53 + .filter(Boolean) 54 + .join(' '); 55 + </script> 56 + 57 + <button {type} class={buttonClass} {disabled} on:click {...$$restProps}> 58 + <slot /> 59 + </button>
+45
src/components/ui/Input.svelte
··· 1 + <script lang="ts"> 2 + import { inputAccentColor, type InputAccentColor } from '$lib/stores/ui'; 3 + 4 + export let id: string | undefined = undefined; 5 + export let type = 'text'; 6 + export let value = ''; 7 + export let placeholder = ''; 8 + export let disabled = false; 9 + export let color: InputAccentColor | null = null; 10 + export let className = ''; 11 + 12 + $: activeColor = color ?? $inputAccentColor; 13 + $: colorClass = 14 + activeColor === 'mauve' 15 + ? 'focus:border-ctp-mauve focus:ring-2 focus:ring-ctp-mauve' 16 + : activeColor === 'lavender' 17 + ? 'focus:border-ctp-lavender focus:ring-2 focus:ring-ctp-lavender' 18 + : 'focus:border-ctp-sapphire focus:ring-2 focus:ring-ctp-sapphire'; 19 + 20 + $: inputClass = [ 21 + 'w-full rounded-lg border border-ctp-surface1 bg-ctp-surface0 px-4 py-2 text-ctp-text placeholder-ctp-subtext1', 22 + 'focus:outline-none', 23 + colorClass, 24 + disabled ? 'cursor-not-allowed bg-ctp-surface1 opacity-50' : '', 25 + className 26 + ] 27 + .filter(Boolean) 28 + .join(' '); 29 + </script> 30 + 31 + <input 32 + {id} 33 + {type} 34 + bind:value 35 + {placeholder} 36 + {disabled} 37 + class={inputClass} 38 + on:input 39 + on:change 40 + on:focus 41 + on:blur 42 + on:keydown 43 + on:keypress 44 + {...$$restProps} 45 + />
+35
src/components/ui/Tabs.svelte
··· 1 + <script lang="ts"> 2 + import Button from './Button.svelte'; 3 + 4 + type TabItem = { 5 + id: string; 6 + label: string; 7 + }; 8 + 9 + let { 10 + tabs, 11 + activeTab, 12 + onTabChange, 13 + className = '' 14 + }: { 15 + tabs: TabItem[]; 16 + activeTab: string; 17 + onTabChange: (tabId: string) => void; 18 + className?: string; 19 + } = $props(); 20 + </script> 21 + 22 + <div class={`flex gap-2 rounded-lg border border-ctp-surface1 bg-ctp-surface0 p-1 ${className}`}> 23 + {#each tabs as tab} 24 + <Button 25 + type="button" 26 + variant={activeTab === tab.id ? 'surface' : 'ghost'} 27 + size="sm" 28 + fullWidth={true} 29 + className={`flex-1 rounded-md ${activeTab === tab.id ? 'bg-ctp-surface1 text-ctp-text' : 'text-ctp-subtext0'}`} 30 + on:click={() => onTabChange(tab.id)} 31 + > 32 + {tab.label} 33 + </Button> 34 + {/each} 35 + </div>
+45
src/components/ui/TextField.svelte
··· 1 + <script lang="ts"> 2 + import { inputAccentColor, type InputAccentColor } from '$lib/stores/ui'; 3 + 4 + export let id: string | undefined = undefined; 5 + export let value = ''; 6 + export let placeholder = ''; 7 + export let rows = 4; 8 + export let disabled = false; 9 + export let color: InputAccentColor | null = null; 10 + export let className = ''; 11 + 12 + $: activeColor = color ?? $inputAccentColor; 13 + $: colorClass = 14 + activeColor === 'mauve' 15 + ? 'focus:border-ctp-mauve focus:ring-2 focus:ring-ctp-mauve' 16 + : activeColor === 'lavender' 17 + ? 'focus:border-ctp-lavender focus:ring-2 focus:ring-ctp-lavender' 18 + : 'focus:border-ctp-sapphire focus:ring-2 focus:ring-ctp-sapphire'; 19 + 20 + $: textFieldClass = [ 21 + 'w-full rounded-lg border border-ctp-surface1 bg-ctp-surface0 px-4 py-2 text-ctp-text placeholder-ctp-subtext1', 22 + 'focus:outline-none', 23 + colorClass, 24 + disabled ? 'cursor-not-allowed bg-ctp-surface1 opacity-50' : '', 25 + className 26 + ] 27 + .filter(Boolean) 28 + .join(' '); 29 + </script> 30 + 31 + <textarea 32 + {id} 33 + bind:value 34 + {placeholder} 35 + {rows} 36 + {disabled} 37 + class={textFieldClass} 38 + on:input 39 + on:change 40 + on:focus 41 + on:blur 42 + on:keydown 43 + on:keypress 44 + {...$$restProps} 45 + ></textarea>
+126
src/components/view/Actions.svelte
··· 1 + <script lang="ts"> 2 + import { CheckIcon, LoaderCircle } from 'lucide-svelte'; 3 + import TextField from '../ui/TextField.svelte'; 4 + import Button from '../ui/Button.svelte'; 5 + import { inputAccentColor } from '$lib/stores/ui'; 6 + import { accentClasses } from '$lib/utils/accent'; 7 + import { createQuery } from '@tanstack/svelte-query'; 8 + import { moderationConfigQueryOptions } from '$lib/queries/moderation'; 9 + import { session } from '$lib/stores/auth'; 10 + 11 + let { 12 + initialSelectedLabelVals = [], 13 + onSubmit 14 + }: { 15 + initialSelectedLabelVals?: string[]; 16 + onSubmit: ( 17 + reason: string, 18 + labels: { 19 + createLabelVals: string[]; 20 + negateLabelVals: string[]; 21 + } 22 + ) => Promise<void>; 23 + } = $props(); 24 + const labelerConfig = createQuery(() => moderationConfigQueryOptions($session?.agent)); 25 + 26 + let selectedLabelVals = $state(new Set<string>()); 27 + let reason = $state(''); 28 + let labelSubmitting = $state(false); 29 + 30 + $effect(() => { 31 + selectedLabelVals = new Set(initialSelectedLabelVals); 32 + }); 33 + 34 + function getLabelDiff(labelVals: Set<string> = selectedLabelVals) { 35 + const currentLabels = new Set(initialSelectedLabelVals); 36 + const createLabelVals = [...labelVals].filter((label) => !currentLabels.has(label)); 37 + const negateLabelVals = [...currentLabels].filter((label) => !labelVals.has(label)); 38 + 39 + return { createLabelVals, negateLabelVals }; 40 + } 41 + 42 + const hasLabelChanges = $derived.by(() => { 43 + const { createLabelVals, negateLabelVals } = getLabelDiff(); 44 + return createLabelVals.length > 0 || negateLabelVals.length > 0; 45 + }); 46 + 47 + function onToggleLabel(labelVal: string) { 48 + const next = new Set(selectedLabelVals); 49 + if (next.has(labelVal)) { 50 + next.delete(labelVal); 51 + } else { 52 + next.add(labelVal); 53 + } 54 + selectedLabelVals = next; 55 + } 56 + 57 + function onReasonChange(newReason: string) { 58 + reason = newReason; 59 + } 60 + 61 + async function onSubmitClick() { 62 + if (labelSubmitting) return; 63 + labelSubmitting = true; 64 + try { 65 + await onSubmit(reason, getLabelDiff()); 66 + } catch (error) { 67 + console.error('Failed to submit labels:', error); 68 + } finally { 69 + labelSubmitting = false; 70 + } 71 + } 72 + </script> 73 + 74 + <h3 class="text-md mt-4 text-ctp-text">Labels</h3> 75 + {#if labelerConfig.data?.labels} 76 + <div class="mt-2 space-y-3"> 77 + <div class="flex items-center justify-between"> 78 + <p class="text-xs text-ctp-subtext0">Select labels to apply</p> 79 + <p class="text-xs text-ctp-subtext1">{selectedLabelVals.size} selected</p> 80 + </div> 81 + <div class="flex flex-wrap gap-2 rounded-lg"> 82 + {#each labelerConfig.data?.labels as label} 83 + {@const isSelected = selectedLabelVals.has(label.val)} 84 + <button 85 + type="button" 86 + class={`${isSelected ? 'text-ctp-text' : 'text-ctp-subtext0'} group flex cursor-pointer items-center gap-2 rounded-lg border border-ctp-surface1 bg-ctp-surface0 px-2.5 py-1.5 text-sm transition-colors hover:border-ctp-surface2 hover:bg-ctp-surface0 hover:text-ctp-text`} 87 + onclick={() => onToggleLabel(label.val)} 88 + > 89 + <span 90 + class={`flex h-4 w-4 items-center justify-center rounded-sm text-[10px] ${ 91 + isSelected 92 + ? `${accentClasses[$inputAccentColor].bg} text-ctp-base` 93 + : 'bg-ctp-surface1 text-transparent group-hover:text-ctp-subtext1' 94 + }`} 95 + > 96 + <CheckIcon class="h-3 w-3" /> 97 + </span> 98 + <span class="font-medium">{label.name}</span> 99 + </button> 100 + {/each} 101 + </div> 102 + <TextField 103 + label="Reason" 104 + placeholder="Enter reason" 105 + value={reason} 106 + on:input={(event) => onReasonChange((event.currentTarget as HTMLInputElement).value)} 107 + /> 108 + <Button 109 + variant="primary" 110 + fullWidth={true} 111 + disabled={labelSubmitting || !hasLabelChanges} 112 + on:click={onSubmitClick} 113 + > 114 + {#if labelSubmitting} 115 + <LoaderCircle class="h-4 w-4 animate-spin" /> 116 + {/if} 117 + Submit 118 + </Button> 119 + </div> 120 + {:else if labelerConfig.isLoading} 121 + <div class="flex items-center justify-center p-4"> 122 + <LoaderCircle class="h-6 w-6 animate-spin text-ctp-text" /> 123 + </div> 124 + {:else if labelerConfig.isError} 125 + <p class="text-sm text-ctp-red">Failed to load labels.</p> 126 + {/if}
+107
src/components/view/Events.svelte
··· 1 + <script lang="ts"> 2 + import { formatDate } from '$lib/time'; 3 + import type { ToolsOzoneModerationDefs, ToolsOzoneModerationQueryEvents } from '@atproto/api'; 4 + import { 5 + isModEventLabel, 6 + isModEventTag, 7 + isModEventReport 8 + } from '@atproto/api/dist/client/types/tools/ozone/moderation/defs'; 9 + import type { CreateQueryResult } from '@tanstack/svelte-query'; 10 + import { LoaderCircle } from 'lucide-svelte'; 11 + 12 + let { eventsQuery } = $props<{ 13 + eventsQuery: CreateQueryResult<ToolsOzoneModerationQueryEvents.OutputSchema, Error>; 14 + }>(); 15 + const events = $derived.by(() => { 16 + const data = eventsQuery.data as 17 + | { events?: ToolsOzoneModerationDefs.ModEventView[] } 18 + | undefined; 19 + return Array.isArray(data?.events) ? data.events : []; 20 + }); 21 + 22 + function eventName(event: ToolsOzoneModerationDefs.ModEventView): string { 23 + switch (event.event.$type) { 24 + case 'tools.ozone.moderation.defs#modEventAcknowledge': 25 + return 'Acknowledged'; 26 + case 'tools.ozone.moderation.defs#modEventLabel': 27 + return 'Labeled'; 28 + case 'tools.ozone.moderation.defs#modEventTag': 29 + return 'Tagged'; 30 + case 'tools.ozone.moderation.defs#modEventReport': 31 + return 'Reported'; 32 + default: 33 + return event.event.$type; 34 + } 35 + } 36 + </script> 37 + 38 + <div 39 + class=" 40 + overflow-y-auto rounded-lg border border-ctp-surface1 bg-ctp-surface0 41 + p-3 42 + md:max-h-[60vh] 43 + " 44 + > 45 + <h3 class="text-md mb-2 text-ctp-text">Moderation Events</h3> 46 + 47 + {#if eventsQuery.isLoading} 48 + <div class="flex items-center justify-center p-10"> 49 + <LoaderCircle class="h-8 w-8 animate-spin text-ctp-text" /> 50 + </div> 51 + {:else if eventsQuery.isError} 52 + <p class="text-sm text-ctp-red"> 53 + Error: {eventsQuery.error instanceof Error 54 + ? eventsQuery.error.message 55 + : 'Failed to load events'} 56 + </p> 57 + {:else if events.length === 0} 58 + <p class="text-sm text-ctp-subtext0">No moderation events found.</p> 59 + {:else} 60 + <div class="space-y-2"> 61 + {#each events as event} 62 + <div class="rounded-lg border border-ctp-surface1 bg-ctp-base p-2"> 63 + <div class="flex items-center justify-between gap-2"> 64 + <p class="text-sm font-medium text-ctp-text">{eventName(event)}</p> 65 + <p class="text-xs text-ctp-subtext0">{formatDate(event.createdAt)}</p> 66 + </div> 67 + {#if isModEventLabel(event.event)} 68 + <div class="space-y-1 py-1"> 69 + {#if event.event.createLabelVals.length > 0} 70 + <span class="block rounded-full text-xs text-ctp-green"> 71 + + {event.event.createLabelVals.join(', ')} 72 + </span> 73 + {/if} 74 + {#if event.event.negateLabelVals.length > 0} 75 + <span class="block rounded-full text-xs text-ctp-red"> 76 + - {event.event.negateLabelVals.join(', ')} 77 + </span> 78 + {/if} 79 + <p class="text-sm text-ctp-text">Reason: {event.event.comment}</p> 80 + </div> 81 + {:else if isModEventTag(event.event)} 82 + <div class="space-y-1 py-1"> 83 + {#if event.event.add.length > 0} 84 + <span class="block rounded-full text-xs text-ctp-green"> 85 + + {event.event.add.join(', ')} 86 + </span> 87 + {/if} 88 + {#if event.event.remove.length > 0} 89 + <span class="block rounded-full text-xs text-ctp-red"> 90 + - {event.event.remove.join(', ')} 91 + </span> 92 + {/if} 93 + </div> 94 + {:else if isModEventReport(event.event)} 95 + <div class="space-y-1 py-1"> 96 + <p class="w-fit rounded-md bg-ctp-surface0 p-1 text-xs text-ctp-text"> 97 + {event.event.reportType.replace('com.atproto.moderation.defs#reason', '')} 98 + </p> 99 + <p class="text-sm text-ctp-text">Reason: {event.event.comment}</p> 100 + </div> 101 + {/if} 102 + <p class="text-xs text-ctp-subtext1">by @{event.creatorHandle}</p> 103 + </div> 104 + {/each} 105 + </div> 106 + {/if} 107 + </div>
+225
src/components/view/Post.svelte
··· 1 + <script lang="ts"> 2 + import { createQuery } from '@tanstack/svelte-query'; 3 + import { AppBskyFeedPost, AtUri } from '@atproto/api'; 4 + import { LoaderCircle } from 'lucide-svelte'; 5 + import Modal from '../Modal.svelte'; 6 + import Tabs from '../ui/Tabs.svelte'; 7 + import { session } from '$lib/stores/auth'; 8 + import catsky from '$lib/assets/catsky.png'; 9 + import Bluesky from '$lib/assets/bluesky.svelte'; 10 + import Events from './Events.svelte'; 11 + import Actions from './Actions.svelte'; 12 + import type { RecordViewDetail } from '@atproto/api/dist/client/types/tools/ozone/moderation/defs'; 13 + 14 + let { 15 + isOpen = false, 16 + uri, 17 + onClose 18 + }: { isOpen?: boolean; uri: AtUri; onClose: () => void } = $props(); 19 + 20 + const postQuery = createQuery(() => ({ 21 + queryKey: ['post', uri, $session?.agent?.did], 22 + queryFn: async ({ queryKey }) => { 23 + const postUri = queryKey[1] as AtUri; 24 + if (!$session?.agent) { 25 + throw new Error('No active session'); 26 + } 27 + if (!postUri) { 28 + throw new Error('Missing post URI'); 29 + } 30 + 31 + const postData = await $session.agent.tools.ozone.moderation.getRecord({ 32 + uri: postUri.toString() 33 + }); 34 + 35 + if (!postData.success) { 36 + throw new Error('Failed to fetch post data'); 37 + } 38 + 39 + if (AppBskyFeedPost.isMain(postData.data.value)) { 40 + return postData.data as Omit<RecordViewDetail, 'value'> & { value: AppBskyFeedPost.Main }; 41 + } else { 42 + throw new Error('Record is not a post'); 43 + } 44 + }, 45 + enabled: isOpen && !!uri && !!$session?.agent, 46 + retry: 3, 47 + refetchOnWindowFocus: false 48 + })); 49 + 50 + const profileQuery = createQuery(() => ({ 51 + queryKey: ['post', uri.host, $session?.agent?.did], 52 + queryFn: async ({ queryKey }) => { 53 + const postUri = queryKey[1] as string; 54 + if (!$session?.agent) { 55 + throw new Error('No active session'); 56 + } 57 + if (!postUri) { 58 + throw new Error('Missing post URI'); 59 + } 60 + 61 + const postData = await $session.agent.getProfile({ 62 + actor: postUri 63 + }); 64 + 65 + if (!postData.success) { 66 + throw new Error('Failed to fetch post data'); 67 + } 68 + 69 + return postData.data; 70 + }, 71 + enabled: isOpen && !!uri && !!$session?.agent, 72 + retry: 3, 73 + refetchOnWindowFocus: false 74 + })); 75 + 76 + const eventsQuery = createQuery(() => ({ 77 + queryKey: ['events', uri, $session?.agent?.did], 78 + queryFn: async ({ queryKey }) => { 79 + const atUri = queryKey[1] as AtUri; 80 + if (!$session?.agent) { 81 + throw new Error('No active session'); 82 + } 83 + if (!atUri) { 84 + throw new Error('Missing post URI'); 85 + } 86 + 87 + const postEvents = await $session.agent.tools.ozone.moderation.queryEvents({ 88 + subject: atUri.toString() 89 + }); 90 + if (postEvents?.success) { 91 + return postEvents.data; 92 + } 93 + 94 + throw new Error('Failed to fetch post events'); 95 + }, 96 + enabled: isOpen && !!uri && !!$session?.agent, 97 + retry: 3, 98 + refetchOnWindowFocus: false 99 + })); 100 + 101 + const panelTabs = [ 102 + { id: 'post', label: 'Post' }, 103 + { id: 'events', label: 'Events' } 104 + ] as const; 105 + 106 + let activePanel: 'post' | 'events' = $state('post'); 107 + 108 + $effect(() => { 109 + if (isOpen) { 110 + activePanel = 'post'; 111 + } 112 + }); 113 + 114 + async function submitLabels( 115 + reason: string, 116 + { createLabelVals, negateLabelVals }: { createLabelVals: string[]; negateLabelVals: string[] } 117 + ) { 118 + // const agent = $session?.agent; 119 + // if (!agent) { 120 + // throw new Error('No active session'); 121 + // } 122 + // if (createLabelVals.length === 0 && negateLabelVals.length === 0) { 123 + // return; 124 + // } 125 + // const result = await agent.tools.ozone.moderation.emitEvent({ 126 + // subject: { 127 + // $type: 'com.atproto.admin.defs#repoRef', 128 + // did: uri.host 129 + // }, 130 + // modTool: { 131 + // $type: 'tools.ozone.moderation.defs#modTool', 132 + // name: 'meowzone' 133 + // }, 134 + // event: { 135 + // $type: 'tools.ozone.moderation.defs#modEventLabel', 136 + // negateLabelVals, 137 + // createLabelVals, 138 + // comment: reason 139 + // }, 140 + // createdBy: agent.assertDid 141 + // }); 142 + // if (!result.success) { 143 + // throw new Error('Failed to submit labels'); 144 + // } else { 145 + // await userQuery.refetch(); 146 + // await eventsQuery.refetch(); 147 + // } 148 + } 149 + </script> 150 + 151 + {#snippet postPanel()} 152 + <div class="rounded-lg p-3"> 153 + {#if postQuery.isLoading || profileQuery.isLoading} 154 + <div class="flex items-center justify-center p-10"> 155 + <LoaderCircle class="h-8 w-8 animate-spin text-ctp-text" /> 156 + </div> 157 + {:else if postQuery.data && profileQuery.data} 158 + <div class="rounded-lg border border-ctp-surface1 px-4 py-3"> 159 + <div class="mb-2 flex items-center gap-3"> 160 + <img src={profileQuery.data.avatar} alt="Avatar" class="size-8 rounded-full" /> 161 + <div> 162 + <h2 class="text-sm text-ctp-text">{profileQuery.data.displayName}</h2> 163 + <p class="text-sm text-ctp-subtext0">@{profileQuery.data.handle}</p> 164 + </div> 165 + <div class="ml-auto flex items-center gap-2"> 166 + <a 167 + href={`https://catsky.social/profile/${uri.host}/post/${uri.rkey}`} 168 + target="_blank" 169 + rel="noopener noreferrer" 170 + > 171 + <img 172 + src={catsky} 173 + alt="Catsky" 174 + class="size-6 opacity-30 transition-opacity hover:opacity-100" 175 + /> 176 + </a> 177 + <a 178 + href={`https://bsky.app/profile/${uri.host}/post/${uri.rkey}`} 179 + target="_blank" 180 + rel="noopener noreferrer" 181 + > 182 + <Bluesky className="size-6 fill-ctp-blue/30 hover:fill-ctp-blue transition-colors" /> 183 + </a> 184 + </div> 185 + </div> 186 + <p class="text-ctp-text">{postQuery.data.value.text}</p> 187 + </div> 188 + 189 + <Actions 190 + initialSelectedLabelVals={postQuery.data.labels?.map((label) => label.val) ?? []} 191 + onSubmit={(reason, labels) => submitLabels(reason, labels)} 192 + /> 193 + {:else if profileQuery.isError || postQuery.isError} 194 + <p class="text-sm text-ctp-red"> 195 + Error: {profileQuery.error instanceof Error 196 + ? profileQuery.error.message 197 + : 'Failed to load profile'} 198 + </p> 199 + {/if} 200 + </div> 201 + {/snippet} 202 + 203 + <Modal {isOpen} title={`Post by @${profileQuery.data?.handle || uri.host}`} {onClose}> 204 + <div class="space-y-3"> 205 + <Tabs 206 + tabs={[...panelTabs]} 207 + activeTab={activePanel} 208 + onTabChange={(tabId) => (activePanel = tabId as 'post' | 'events')} 209 + className="md:hidden" 210 + /> 211 + 212 + <div class="md:hidden"> 213 + {#if activePanel === 'post'} 214 + {@render postPanel()} 215 + {:else} 216 + <Events {eventsQuery} /> 217 + {/if} 218 + </div> 219 + 220 + <div class="hidden gap-3 md:grid md:grid-cols-2"> 221 + {@render postPanel()} 222 + <Events {eventsQuery} /> 223 + </div> 224 + </div> 225 + </Modal>
+211
src/components/view/User.svelte
··· 1 + <script lang="ts"> 2 + import { createQuery } from '@tanstack/svelte-query'; 3 + import { AtUri } from '@atproto/api'; 4 + import { LoaderCircle } from 'lucide-svelte'; 5 + import Modal from '$components/Modal.svelte'; 6 + import Tabs from '$ui/Tabs.svelte'; 7 + import { session } from '$lib/stores/auth'; 8 + import catsky from '$lib/assets/catsky.png'; 9 + import Bluesky from '$lib/assets/bluesky.svelte'; 10 + import Events from '$components/view/Events.svelte'; 11 + import Actions from '$components/view/Actions.svelte'; 12 + 13 + let { 14 + isOpen = false, 15 + did, 16 + onClose 17 + }: { isOpen?: boolean; did: string; onClose: () => void } = $props(); 18 + 19 + function normalizeActor(value: string): string { 20 + const trimmed = value.trim(); 21 + if (!trimmed) return ''; 22 + 23 + if (trimmed.startsWith('at://')) { 24 + try { 25 + return new AtUri(trimmed).host.toString(); 26 + } catch { 27 + return trimmed; 28 + } 29 + } 30 + 31 + return trimmed; 32 + } 33 + 34 + const actor = $derived(normalizeActor(did)); 35 + 36 + const userQuery = createQuery(() => ({ 37 + queryKey: ['user', actor, $session?.agent?.did], 38 + queryFn: async ({ queryKey }) => { 39 + const actorFromKey = queryKey[1] as string; 40 + if (!$session?.agent) { 41 + throw new Error('No active session'); 42 + } 43 + if (!actorFromKey) { 44 + throw new Error('Missing user DID'); 45 + } 46 + 47 + const profileData = await $session.agent.getProfile({ actor: actorFromKey }); 48 + if (!profileData.success) { 49 + throw new Error('Failed to fetch user profile'); 50 + } 51 + 52 + const repo = await $session.agent.tools.ozone.moderation.getRepo({ did: actorFromKey }); 53 + 54 + if (!repo.success) { 55 + throw new Error('Failed to fetch user repo'); 56 + } 57 + 58 + return { profile: profileData.data, repo: repo.data }; 59 + }, 60 + enabled: isOpen && !!actor && !!$session?.agent, 61 + retry: 0, 62 + refetchOnWindowFocus: false 63 + })); 64 + 65 + const eventsQuery = createQuery(() => ({ 66 + queryKey: ['events', actor, $session?.agent?.did], 67 + queryFn: async ({ queryKey }) => { 68 + const actorFromKey = queryKey[1] as string; 69 + if (!$session?.agent) { 70 + throw new Error('No active session'); 71 + } 72 + if (!actorFromKey) { 73 + throw new Error('Missing user DID'); 74 + } 75 + 76 + const profile = await $session.agent.tools.ozone.moderation.queryEvents({ 77 + subject: actorFromKey 78 + }); 79 + if (profile?.success) { 80 + return profile.data; 81 + } 82 + 83 + throw new Error('Failed to fetch user events'); 84 + }, 85 + enabled: isOpen && !!actor && !!$session?.agent, 86 + retry: 3, 87 + refetchOnWindowFocus: false 88 + })); 89 + 90 + const panelTabs = [ 91 + { id: 'profile', label: 'Profile' }, 92 + { id: 'events', label: 'Events' } 93 + ] as const; 94 + 95 + let activePanel: 'profile' | 'events' = $state('profile'); 96 + 97 + $effect(() => { 98 + if (isOpen) { 99 + activePanel = 'profile'; 100 + } 101 + }); 102 + 103 + async function submitLabels( 104 + reason: string, 105 + { createLabelVals, negateLabelVals }: { createLabelVals: string[]; negateLabelVals: string[] } 106 + ) { 107 + const agent = $session?.agent; 108 + if (!agent) { 109 + throw new Error('No active session'); 110 + } 111 + 112 + if (createLabelVals.length === 0 && negateLabelVals.length === 0) { 113 + return; 114 + } 115 + 116 + const result = await agent.tools.ozone.moderation.emitEvent({ 117 + subject: { 118 + $type: 'com.atproto.admin.defs#repoRef', 119 + did: actor 120 + }, 121 + modTool: { 122 + $type: 'tools.ozone.moderation.defs#modTool', 123 + name: 'meowzone' 124 + }, 125 + event: { 126 + $type: 'tools.ozone.moderation.defs#modEventLabel', 127 + negateLabelVals, 128 + createLabelVals, 129 + comment: reason 130 + }, 131 + createdBy: agent.assertDid 132 + }); 133 + 134 + if (!result.success) { 135 + throw new Error('Failed to submit labels'); 136 + } else { 137 + await userQuery.refetch(); 138 + await eventsQuery.refetch(); 139 + } 140 + } 141 + </script> 142 + 143 + {#snippet profilePanel()} 144 + <div class="rounded-lg p-3"> 145 + {#if userQuery.isLoading} 146 + <div class="flex items-center justify-center p-10"> 147 + <LoaderCircle class="h-8 w-8 animate-spin text-ctp-text" /> 148 + </div> 149 + {:else if userQuery.data} 150 + <div class="mb-4 flex items-center gap-4"> 151 + <img src={userQuery.data.profile.avatar} alt="Avatar" class="size-12 rounded-full" /> 152 + <div> 153 + <h2 class="text-xl text-ctp-text">{userQuery.data.profile.displayName}</h2> 154 + <p class="text-sm text-ctp-subtext0">@{userQuery.data.profile.handle}</p> 155 + </div> 156 + <div class="ml-auto flex items-center gap-2"> 157 + <a 158 + href={`https://catsky.social/profile/${actor}`} 159 + target="_blank" 160 + rel="noopener noreferrer" 161 + > 162 + <img 163 + src={catsky} 164 + alt="Catsky" 165 + class="size-6 opacity-30 transition-opacity hover:opacity-100" 166 + /> 167 + </a> 168 + <a href={`https://bsky.app/profile/${actor}`} target="_blank" rel="noopener noreferrer"> 169 + <Bluesky className="size-6 fill-ctp-blue/30 hover:fill-ctp-blue transition-colors" /> 170 + </a> 171 + </div> 172 + </div> 173 + <p class="text-ctp-text">{userQuery.data.profile.description}</p> 174 + 175 + <Actions 176 + initialSelectedLabelVals={userQuery.data.repo.labels?.map((label) => label.val) ?? []} 177 + onSubmit={(reason, labels) => submitLabels(reason, labels)} 178 + /> 179 + {:else if userQuery.isError} 180 + <p class="text-sm text-ctp-red"> 181 + Error: {userQuery.error instanceof Error 182 + ? userQuery.error.message 183 + : 'Failed to load profile'} 184 + </p> 185 + {/if} 186 + </div> 187 + {/snippet} 188 + 189 + <Modal {isOpen} title={`@${userQuery.data?.profile?.handle || actor}'s profile`} {onClose}> 190 + <div class="space-y-3"> 191 + <Tabs 192 + tabs={[...panelTabs]} 193 + activeTab={activePanel} 194 + onTabChange={(tabId) => (activePanel = tabId as 'profile' | 'events')} 195 + className="md:hidden" 196 + /> 197 + 198 + <div class="md:hidden"> 199 + {#if activePanel === 'profile'} 200 + {@render profilePanel()} 201 + {:else} 202 + <Events {eventsQuery} /> 203 + {/if} 204 + </div> 205 + 206 + <div class="hidden gap-3 md:grid md:grid-cols-2"> 207 + {@render profilePanel()} 208 + <Events {eventsQuery} /> 209 + </div> 210 + </div> 211 + </Modal>
+27
src/lib/api/ozone.ts
··· 1 + const DEFAULT_LABELER_DID = import.meta.env.VITE_LABELER_DID 2 + const DEFAULT_PLC_URL = import.meta.env.VITE_PLC_URL || 'https://plc.directory' 3 + const DEFAULT_PDS_URL = import.meta.env.VITE_PDS_URL || 'https://tngl.sh' 4 + 5 + export function getPlcUrl(override?: string) { 6 + return override ?? DEFAULT_PLC_URL 7 + } 8 + 9 + export function getPdsUrl(override?: string) { 10 + return override ?? DEFAULT_PDS_URL 11 + } 12 + 13 + export function getLabelerDid(override?: string) { 14 + const labelerDid = override ?? DEFAULT_LABELER_DID 15 + if (!labelerDid) { 16 + throw new Error('Missing labeler DID. Set VITE_LABELER_DID or pass labelerDid.') 17 + } 18 + return labelerDid 19 + } 20 + 21 + export function getLabelerUrl(override?: string) { 22 + const labelerUrl = override ?? import.meta.env.VITE_LABELER_URL 23 + if (!labelerUrl) { 24 + throw new Error('Missing labeler URL. Set VITE_LABELER_URL or pass labelerUrl.') 25 + } 26 + return labelerUrl 27 + }
+9
src/lib/assets/bluesky.svelte
··· 1 + <script> 2 + export let className = ''; 3 + </script> 4 + 5 + <svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" class={className} 6 + ><title>Bluesky</title><path 7 + d="M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037-.856 3.061-3.978 3.842-6.755 3.37 4.854.826 6.089 3.562 3.422 6.299-5.065 5.196-7.28-1.304-7.847-2.97-.104-.305-.152-.448-.153-.327 0-.121-.05.022-.153.327-.568 1.666-2.782 8.166-7.847 2.97-2.667-2.737-1.432-5.473 3.422-6.3-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026" 8 + /></svg 9 + >
src/lib/assets/catsky.png

This is a binary file and will not be displayed.

+18
src/lib/assets/favicon.svg
··· 1 + <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 + <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 3 + <svg width="100%" height="100%" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;"> 4 + <g transform="matrix(1.49324,0,0,1.49324,-252.538,-252.538)"> 5 + <g transform="matrix(22.8454,0,0,22.8454,237.973,239.95)"> 6 + <path d="M12,5C12.67,5 13.35,5.09 14,5.26C15.78,3.26 19.03,2.42 20.42,3C21.82,3.58 20,10 20,10C20.57,11.07 21,12.24 21,13.44C21,17.9 16.97,21 12,21C7.03,21 3,18 3,13.44C3,12.19 3.5,11.04 4,10C4,10 2.11,3.58 3.5,3C4.89,2.42 8.22,3.23 10,5.23C10.656,5.079 11.327,5.002 12,5Z" style="fill:none;fill-rule:nonzero;stroke:rgb(217,168,250);stroke-width:2px;"/> 7 + </g> 8 + <g transform="matrix(22.8454,0,0,22.8454,237.973,239.95)"> 9 + <path d="M8,14L8,14.5" style="fill:none;fill-rule:nonzero;stroke:rgb(217,168,250);stroke-width:2px;"/> 10 + </g> 11 + <g transform="matrix(22.8454,0,0,22.8454,237.973,239.95)"> 12 + <path d="M16,14L16,14.5" style="fill:none;fill-rule:nonzero;stroke:rgb(217,168,250);stroke-width:2px;"/> 13 + </g> 14 + <g transform="matrix(22.8454,0,0,22.8454,237.973,239.95)"> 15 + <path d="M11.25,16.25L12.75,16.25L12,17L11.25,16.25Z" style="fill:none;fill-rule:nonzero;stroke:rgb(217,168,250);stroke-width:2px;"/> 16 + </g> 17 + </g> 18 + </svg>
+1
src/lib/index.ts
··· 1 + // place files you want to import through the `$lib` alias in this folder.
+70
src/lib/oauth.ts
··· 1 + import { BrowserOAuthClient, buildAtprotoLoopbackClientMetadata } from '@atproto/oauth-client-browser' 2 + import type { OAuthSession } from '@atproto/oauth-client-browser' 3 + import { getPdsUrl, getPlcUrl } from './api/ozone' 4 + 5 + // Cache clients by metadata path to avoid mixing different client_ids 6 + const oauthClientCache = new Map<string, BrowserOAuthClient>() 7 + export let tempClient: BrowserOAuthClient | null = null 8 + // Store the current metadata path for this session 9 + export let currentMetadataPath: string = "/client-metadata.json" 10 + 11 + export async function getOAuthClient(metadata: string = "/client-metadata.json"): Promise<BrowserOAuthClient> { 12 + // Update the current metadata path 13 + currentMetadataPath = metadata 14 + // Don't cache during callback processing to ensure params are captured 15 + if (!window.location.search.includes('code') && oauthClientCache.has(metadata)) { 16 + return oauthClientCache.get(metadata)! 17 + } 18 + 19 + const client = await BrowserOAuthClient.load({ 20 + clientId: window.location.origin + metadata, 21 + handleResolver: getPdsUrl(), 22 + allowHttp: true, 23 + plcDirectoryUrl: getPlcUrl(), 24 + }); 25 + 26 + oauthClientCache.set(metadata, client) 27 + return client 28 + } 29 + 30 + export async function initializeAuth(): Promise<OAuthSession | null> { 31 + // Check if we have a stored metadata path from a popup OAuth flow 32 + let metadataPath = "/client-metadata.json" 33 + if (typeof window !== 'undefined') { 34 + const storedPath = sessionStorage.getItem('oauth-metadata-path') 35 + if (storedPath) { 36 + metadataPath = storedPath 37 + // Clear it after use 38 + sessionStorage.removeItem('oauth-metadata-path') 39 + } 40 + } 41 + 42 + const client = await getOAuthClient(metadataPath) 43 + const result = await client.init() 44 + 45 + console.log("got auth result", result) 46 + 47 + if (result && result.session) { 48 + return result.session 49 + } 50 + 51 + return null 52 + } 53 + 54 + export async function authorize(handle: string, metadata: string = "/client-metadata.json"): Promise<URL> { 55 + const client = await getOAuthClient(metadata) 56 + return await client.authorize(handle) 57 + } 58 + 59 + export async function signInPopup(handle: string, metadata: string = "/client-metadata.json"): Promise<OAuthSession> { 60 + // Store metadata path in sessionStorage so callback can use the correct client 61 + if (typeof window !== 'undefined') { 62 + sessionStorage.setItem('oauth-metadata-path', metadata) 63 + } 64 + const client = await getOAuthClient(metadata) 65 + return await client.signInPopup(handle) 66 + } 67 + 68 + export async function signOut(session: OAuthSession): Promise<void> { 69 + await session.signOut() 70 + }
+100
src/lib/queries/moderation.ts
··· 1 + import { Agent, AppBskyLabelerService } from '@atproto/api'; 2 + import { PlcClient } from '@atcute/did-plc'; 3 + 4 + import { getLabelerDid, getPdsUrl } from '$lib/api/ozone'; 5 + 6 + export interface ModerationConfig { 7 + plcLabeler: boolean; 8 + moderatorRecord: AppBskyLabelerService.Main | undefined; 9 + labels: { 10 + name: string; 11 + val: string; 12 + }[]; 13 + } 14 + 15 + export interface ReadyModerationConfig { 16 + plcLabeler: true; 17 + moderatorRecord: AppBskyLabelerService.Main; 18 + labels: { 19 + name: string; 20 + val: string; 21 + }[]; 22 + } 23 + 24 + export async function fetchModerationConfig(agent?: Agent): Promise<ModerationConfig> { 25 + const currentAgent = agent ?? new Agent(getPdsUrl()); 26 + const labelerDid = getLabelerDid(); 27 + 28 + const record = await currentAgent.com.atproto.repo.getRecord({ 29 + repo: labelerDid, 30 + collection: 'app.bsky.labeler.service', 31 + rkey: 'self' 32 + }); 33 + 34 + if (!record || !AppBskyLabelerService.isRecord(record.data.value)) { 35 + return { 36 + plcLabeler: false, 37 + moderatorRecord: undefined, 38 + labels: [] 39 + }; 40 + } 41 + 42 + const doc = await new PlcClient().getDocument(labelerDid); 43 + const labeler = doc.service?.find((service) => service.id === '#atproto_labeler'); 44 + const r = record.data.value as AppBskyLabelerService.Main 45 + 46 + return { 47 + plcLabeler: !!labeler?.serviceEndpoint, 48 + moderatorRecord: r, 49 + labels: r.policies.labelValues.map((label, index) => ({ 50 + name: r.policies.labelValueDefinitions?.find(def => def.identifier === label)?.locales[0].name ?? label.toString(), 51 + val: label.toString() 52 + })) 53 + }; 54 + } 55 + 56 + export function moderationConfigQueryOptions(agent?: Agent) { 57 + return { 58 + queryKey: ['moderationConfig', agent?.did ?? 'anonymous'], 59 + queryFn: async () => fetchModerationConfig(agent), 60 + retry(failureCount: number, error: unknown) { 61 + if (error instanceof Error && error.message.includes('Record not found')) { 62 + return false; 63 + } 64 + 65 + return failureCount < 2; 66 + }, 67 + refetchOnWindowFocus: false 68 + }; 69 + } 70 + 71 + export function moderationConfigRequiredQueryOptions(agent: Agent) { 72 + return { 73 + queryKey: ['moderationConfig', 'required', agent.did], 74 + queryFn: async (): Promise<ReadyModerationConfig> => { 75 + const config = await fetchModerationConfig(agent); 76 + 77 + if (!config.moderatorRecord || !config.plcLabeler) { 78 + throw new Error('Moderation config is not ready'); 79 + } 80 + 81 + return { 82 + plcLabeler: true, 83 + moderatorRecord: config.moderatorRecord, 84 + labels: config.labels 85 + }; 86 + }, 87 + retry(failureCount: number, error: unknown) { 88 + if (error instanceof Error && error.message.includes('Moderation config is not ready')) { 89 + return false; 90 + } 91 + 92 + if (error instanceof Error && error.message.includes('Record not found')) { 93 + return false; 94 + } 95 + 96 + return failureCount < 2; 97 + }, 98 + refetchOnWindowFocus: false 99 + }; 100 + }
+19
src/lib/stores/auth.ts
··· 1 + import { writable, type Writable } from 'svelte/store' 2 + import type { OAuthSession } from '@atproto/oauth-client-browser' 3 + import type { Agent } from '@atproto/api' 4 + 5 + export interface AuthStore { 6 + session: { 7 + session: OAuthSession; 8 + state?: never; 9 + } | { 10 + session: OAuthSession; 11 + state: string | null; 12 + }; 13 + agent: Agent; 14 + metadataPath: string; 15 + } 16 + 17 + export const session: Writable<AuthStore | null> = writable(null) 18 + export const isLoading: Writable<boolean> = writable(false) 19 + export const error: Writable<string | null> = writable(null)
+32
src/lib/stores/ui.ts
··· 1 + import { browser } from '$app/environment'; 2 + import { writable } from 'svelte/store'; 3 + 4 + // TODO: redo colour system 5 + export const accentColours = ["sapphire", "mauve", "lavender"] as const; 6 + export type InputAccentColor = typeof accentColours[number]; 7 + 8 + const storageKey = 'ui-input-accent-color'; 9 + const defaultColor: InputAccentColor = 'mauve'; 10 + 11 + function isInputAccentColor(value: string): value is InputAccentColor { 12 + return value === 'sapphire' || value === 'mauve' || value === 'lavender'; 13 + } 14 + 15 + function createInputAccentColorStore() { 16 + const store = writable<InputAccentColor>(defaultColor); 17 + 18 + if (browser) { 19 + const savedColor = localStorage.getItem(storageKey); 20 + if (savedColor && isInputAccentColor(savedColor)) { 21 + store.set(savedColor); 22 + } 23 + 24 + store.subscribe((color) => { 25 + localStorage.setItem(storageKey, color); 26 + }); 27 + } 28 + 29 + return store; 30 + } 31 + 32 + export const inputAccentColor = createInputAccentColorStore();
+24
src/lib/time.ts
··· 1 + export function formatDate(value: string | null): string { 2 + if (!value) { 3 + return ''; 4 + } 5 + 6 + const parsed = new Date(value); 7 + if (Number.isNaN(parsed.getTime())) { 8 + return value; 9 + } 10 + 11 + const now = new Date(); 12 + const diffMs = now.getTime() - parsed.getTime(); 13 + const diffSecs = Math.floor(diffMs / 1000); 14 + const diffMins = Math.floor(diffSecs / 60); 15 + const diffHours = Math.floor(diffMins / 60); 16 + const diffDays = Math.floor(diffHours / 24); 17 + 18 + if (diffSecs < 60) return 'just now'; 19 + if (diffMins < 60) return `${diffMins}m ago`; 20 + if (diffHours < 24) return `${diffHours}h ago`; 21 + if (diffDays < 7) return `${diffDays}d ago`; 22 + 23 + return parsed.toLocaleDateString(); 24 + }
+8
src/lib/types.ts
··· 1 + export interface Report { 2 + subject: { 3 + did: string; 4 + handle: string | null; 5 + reason: string | null; 6 + }; 7 + createdAt: string; 8 + }
+66
src/lib/utils/accent.ts
··· 1 + import type { InputAccentColor } from '../stores/ui'; 2 + 3 + /** 4 + * All of the Tailwind utility classes we use when the accent colour changes. 5 + * Keeping them in one place makes it easier to ensure the JIT compiler sees 6 + * every possible combination and avoids dynamic string interpolation in 7 + * templates. 8 + */ 9 + export const accentClasses: Record< 10 + InputAccentColor, 11 + { 12 + bg: string; 13 + border: string; 14 + text: string; 15 + ring: string; 16 + focusBorder: string; 17 + focusRing: string; 18 + } 19 + > = { 20 + sapphire: { 21 + bg: 'bg-ctp-sapphire', 22 + border: 'border-ctp-sapphire', 23 + text: 'text-ctp-sapphire', 24 + ring: 'ring-ctp-sapphire', 25 + focusBorder: 'focus:border-ctp-sapphire', 26 + focusRing: 'focus:ring-ctp-sapphire', 27 + }, 28 + mauve: { 29 + bg: 'bg-ctp-mauve', 30 + border: 'border-ctp-mauve', 31 + text: 'text-ctp-mauve', 32 + ring: 'ring-ctp-mauve', 33 + focusBorder: 'focus:border-ctp-mauve', 34 + focusRing: 'focus:ring-ctp-mauve', 35 + }, 36 + lavender: { 37 + bg: 'bg-ctp-lavender', 38 + border: 'border-ctp-lavender', 39 + text: 'text-ctp-lavender', 40 + ring: 'ring-ctp-lavender', 41 + focusBorder: 'focus:border-ctp-lavender', 42 + focusRing: 'focus:ring-ctp-lavender', 43 + } 44 + }; 45 + 46 + /** 47 + * Small helpers that make the call sites a little more ergonomic. 48 + */ 49 + export function bgAccent(color: InputAccentColor) { 50 + return accentClasses[color].bg; 51 + } 52 + export function borderAccent(color: InputAccentColor) { 53 + return accentClasses[color].border; 54 + } 55 + export function textAccent(color: InputAccentColor) { 56 + return accentClasses[color].text; 57 + } 58 + export function ringAccent(color: InputAccentColor) { 59 + return accentClasses[color].ring; 60 + } 61 + export function focusBorderAccent(color: InputAccentColor) { 62 + return accentClasses[color].focusBorder; 63 + } 64 + export function focusRingAccent(color: InputAccentColor) { 65 + return accentClasses[color].focusRing; 66 + }
+84
src/routes/+layout.svelte
··· 1 + <script lang="ts"> 2 + import './layout.css'; 3 + import favicon from '$lib/assets/favicon.svg'; 4 + import { session } from '$lib/stores/auth'; 5 + import { page } from '$app/stores'; 6 + import { onMount } from 'svelte'; 7 + import { initializeAuth } from '$lib/oauth'; 8 + import { LoaderCircle } from 'lucide-svelte'; 9 + import { Agent } from '@atproto/api'; 10 + import { getLabelerDid } from '$lib/api/ozone'; 11 + import { createQuery, QueryClient, QueryClientProvider } from '@tanstack/svelte-query'; 12 + import LabelerSetup from '../components/LabelerSetup.svelte'; 13 + import { moderationConfigQueryOptions } from '$lib/queries/moderation'; 14 + 15 + let { children } = $props(); 16 + let isInitialized = $state(false); 17 + let redirecting = $state(false); 18 + 19 + onMount(async () => { 20 + // Try to initialize/restore session first 21 + try { 22 + const params = new URLSearchParams(location.hash.slice(1)); 23 + 24 + console.log('OAuth init result (layout):', params); 25 + const existingSession = await initializeAuth(); 26 + if (existingSession) { 27 + const metadataPath = 28 + typeof window !== 'undefined' 29 + ? sessionStorage.getItem('oauth-metadata-path') || '/client-metadata.json' 30 + : '/client-metadata.json'; 31 + session.set({ 32 + session: { session: existingSession }, 33 + agent: new Agent(existingSession).withProxy('atproto_labeler', getLabelerDid()), 34 + metadataPath 35 + }); 36 + } 37 + } catch (err) { 38 + console.error('Failed to initialize auth:', err); 39 + } 40 + 41 + // Check if we're on a protected page 42 + const currentPath = $page.url.pathname; 43 + const isLoginPage = currentPath === '/login'; 44 + const isCallbackPage = currentPath.includes('callback'); 45 + const isPublicPage = isLoginPage || isCallbackPage; 46 + 47 + if (!isPublicPage && !$session) { 48 + // Redirect to login if not authenticated and not on public page 49 + redirecting = true; 50 + window.location.href = '/login'; 51 + } 52 + 53 + isInitialized = true; 54 + }); 55 + 56 + const queryClient = new QueryClient(); 57 + const labelerConfig = createQuery( 58 + () => moderationConfigQueryOptions($session?.agent), 59 + () => queryClient 60 + ); 61 + </script> 62 + 63 + <svelte:head><link rel="icon" href={favicon} /></svelte:head> 64 + 65 + <QueryClientProvider client={queryClient}> 66 + {#if labelerConfig.isLoading} 67 + <div class="flex min-h-screen items-center justify-center"> 68 + <div class="text-center"> 69 + <LoaderCircle class="mx-auto mb-4 h-8 w-8 animate-spin text-ctp-text" /> 70 + </div> 71 + </div> 72 + {:else if !labelerConfig.data?.plcLabeler || !labelerConfig.data?.moderatorRecord} 73 + <p>{JSON.stringify(labelerConfig.data)}</p> 74 + <LabelerSetup /> 75 + {:else if !redirecting} 76 + {@render children()} 77 + {:else} 78 + <div class="flex min-h-screen items-center justify-center"> 79 + <div class="text-center"> 80 + <LoaderCircle class="mx-auto mb-4 h-8 w-8 animate-spin text-ctp-text" /> 81 + </div> 82 + </div> 83 + {/if} 84 + </QueryClientProvider>
+160
src/routes/+page.svelte
··· 1 + <script lang="ts"> 2 + import { session, type AuthStore } from '$lib/stores/auth'; 3 + import { LoaderCircle, ExternalLink, TriangleAlert, CheckIcon, CircleCheck } from 'lucide-svelte'; 4 + import { createInfiniteQuery, createQuery, QueryClient } from '@tanstack/svelte-query'; 5 + import { AtUri, ComAtprotoRepoStrongRef } from '@atproto/api'; 6 + import Header from '../components/Header.svelte'; 7 + import Modal from '../components/Modal.svelte'; 8 + import UserModal from '../components/view/User.svelte'; 9 + import Button from '../components/ui/Button.svelte'; 10 + import type { Report } from '$lib/types'; 11 + import { isRepoRef } from '@atproto/api/dist/client/types/com/atproto/admin/defs'; 12 + import { formatDate } from '$lib/time'; 13 + import Post from '$components/view/Post.svelte'; 14 + 15 + let selectedDid: string | null = null; 16 + let selectedPostUri: AtUri | null = null; 17 + function getCollectionName(report: Report) { 18 + try { 19 + return report.subject.handle ? 'Post' : 'unknown'; 20 + } catch (e) { 21 + console.error('Invalid report:', report); 22 + return 'unknown'; 23 + } 24 + } 25 + // switch to infinite query so we can page with the cursor returned by the API 26 + const reportsQuery = createInfiniteQuery(() => ({ 27 + queryKey: ['reports'], 28 + queryFn: async ({ pageParam }) => { 29 + if (!$session) { 30 + throw new Error('No active session'); 31 + } 32 + const statuses = await $session.agent.tools.ozone.moderation.queryStatuses({ 33 + limit: 10, 34 + sortField: 'lastReportedAt', 35 + sortDirection: 'desc', 36 + // pageParam will be the cursor string if present 37 + cursor: pageParam == '' ? undefined : pageParam 38 + }); 39 + 40 + return statuses.data; 41 + }, 42 + initialPageParam: '', 43 + getNextPageParam: (lastPage) => lastPage.cursor ?? undefined, 44 + retry(failureCount, error) { 45 + console.log('Fetch reports error:', error); 46 + return failureCount < 3; 47 + }, 48 + enabled: !!$session 49 + })); 50 + 51 + function infiniteScroll(node: HTMLElement) { 52 + const observer = new IntersectionObserver( 53 + (entries) => { 54 + if ( 55 + entries[0].isIntersecting && 56 + reportsQuery.hasNextPage && 57 + !reportsQuery.isFetchingNextPage 58 + ) { 59 + reportsQuery.fetchNextPage(); 60 + } 61 + }, 62 + { 63 + rootMargin: '200px' 64 + } 65 + ); 66 + 67 + observer.observe(node); 68 + 69 + return { 70 + destroy() { 71 + observer.disconnect(); 72 + } 73 + }; 74 + } 75 + </script> 76 + 77 + <div class="min-h-screen bg-ctp-base p-4"> 78 + <Header></Header> 79 + {#if selectedDid} 80 + {#key selectedDid} 81 + <UserModal isOpen={true} did={selectedDid} onClose={() => (selectedDid = null)} /> 82 + {/key} 83 + {:else if selectedPostUri} 84 + {#key selectedPostUri} 85 + <Post isOpen={true} uri={selectedPostUri} onClose={() => (selectedPostUri = null)} /> 86 + {/key} 87 + {/if} 88 + <div class="mx-auto max-w-2xl"> 89 + {#if reportsQuery.isLoading} 90 + <div class="flex min-h-screen items-center justify-center"> 91 + <div class="text-center"> 92 + <LoaderCircle class="mx-auto mb-4 h-8 w-8 animate-spin text-ctp-subtext0" /> 93 + </div> 94 + </div> 95 + {:else if reportsQuery.isError} 96 + <div class="rounded-lg bg-ctp-red/20 p-4 text-ctp-red shadow-lg"> 97 + <h2 class="font-semibold">Error</h2> 98 + <p>{reportsQuery.error?.message}</p> 99 + </div> 100 + {:else if reportsQuery.data} 101 + <h2 class="pb-5 text-xl font-bold text-ctp-text">Recent Reports</h2> 102 + <ul class="space-y-4 text-ctp-text"> 103 + {#each reportsQuery.data.pages as page} 104 + {#each page.subjectStatuses as report} 105 + {@const subject = report.subject} 106 + <li class="rounded-lg border border-ctp-surface1 bg-ctp-surface0 p-4"> 107 + <div class="flex items-center justify-between"> 108 + <div class="flex items-center gap-2"> 109 + {#if report.reviewState == 'tools.ozone.moderation.defs#reviewClosed'} 110 + <CircleCheck class="size-5 text-ctp-green" /> 111 + {:else} 112 + <TriangleAlert class="size-5 text-ctp-yellow" /> 113 + {/if} 114 + <p> 115 + {#if ComAtprotoRepoStrongRef.isMain(subject)} 116 + <button 117 + on:click={() => (selectedPostUri = new AtUri(subject.uri))} 118 + class="inline-flex cursor-pointer items-center px-0 py-0 text-ctp-blue hover:underline" 119 + > 120 + Post 121 + <ExternalLink size={15} class="ml-1" /> 122 + </button> 123 + created by 124 + <button 125 + on:click={() => (selectedDid = new AtUri(subject.uri).host)} 126 + class="inline-flex cursor-pointer items-center px-0 py-0 text-ctp-blue hover:underline" 127 + > 128 + @{report.subjectRepoHandle} 129 + <ExternalLink size={15} class="ml-1" /> 130 + </button> 131 + {:else if isRepoRef(subject)} 132 + <button 133 + on:click={() => (selectedDid = subject.did)} 134 + class="inline-flex cursor-pointer items-center px-0 py-0 text-ctp-blue hover:underline" 135 + > 136 + @{report.subjectRepoHandle} 137 + <ExternalLink size={15} class="ml-1" /> 138 + </button> 139 + {/if} 140 + </p> 141 + </div> 142 + <p class="text-sm text-ctp-subtext0"> 143 + {formatDate(report.lastReportedAt ?? report.createdAt)} 144 + </p> 145 + </div> 146 + </li> 147 + {/each} 148 + {/each} 149 + {#if reportsQuery.hasNextPage} 150 + <div use:infiniteScroll class="h-10"></div> 151 + {/if} 152 + {#if reportsQuery.isFetchingNextPage} 153 + <div class="flex justify-center py-4"> 154 + <LoaderCircle class="h-6 w-6 animate-spin text-ctp-subtext0" /> 155 + </div> 156 + {/if} 157 + </ul> 158 + {/if} 159 + </div> 160 + </div>
+21
src/routes/client-metadata.json/+server.js
··· 1 + import { json, redirect } from '@sveltejs/kit'; 2 + 3 + export function GET(event) { 4 + const proto = event.request.headers.get('x-forwarded-proto') || 'http'; 5 + const host = event.request.headers.get('x-forwarded-host') || event.request.headers.get('host'); 6 + const origin = `${proto}://${host}`; 7 + return json({ 8 + client_id: origin + "/client-metadata.json", 9 + client_name: "meowderation", 10 + client_uri: origin, 11 + logo_uri: origin + '/favicon.svg', 12 + // TODO: define scopes 13 + scope: 'atproto transition:generic', 14 + grant_types: ['authorization_code', 'refresh_token'], 15 + redirect_uris: [origin], 16 + response_types: ['code'], 17 + token_endpoint_auth_method: 'none', 18 + application_type: 'web', 19 + dpop_bound_access_tokens: true 20 + }); 21 + }
+20
src/routes/labeler-metadata.json/+server.js
··· 1 + import { json, redirect } from '@sveltejs/kit'; 2 + 3 + export function GET(event) { 4 + const proto = event.request.headers.get('x-forwarded-proto') || 'http'; 5 + const host = event.request.headers.get('x-forwarded-host') || event.request.headers.get('host'); 6 + const origin = `${proto}://${host}`; 7 + return json({ 8 + client_id: origin + "/labeler-metadata.json", 9 + client_name: "meowderation", 10 + client_uri: origin, 11 + logo_uri: origin + '/favicon.svg', 12 + scope: 'atproto repo:app.bsky.labeler.service?action=create identity:*', 13 + grant_types: ['authorization_code', 'refresh_token'], 14 + redirect_uris: [origin + '/'], 15 + response_types: ['code'], 16 + token_endpoint_auth_method: 'none', 17 + application_type: 'web', 18 + dpop_bound_access_tokens: true 19 + }); 20 + }
+1
src/routes/labeler/callback/+page.svelte
··· 1 + <p>Logging you in…</p>
+2
src/routes/layout.css
··· 1 + @import 'tailwindcss'; 2 + @import "@catppuccin/tailwindcss/mocha.css";
+102
src/routes/login/+page.svelte
··· 1 + <script lang="ts"> 2 + import { error, isLoading } from '$lib/stores/auth'; 3 + import { authorize } from '$lib/oauth'; 4 + import { getLabelerDid, getPdsUrl } from '$lib/api/ozone'; 5 + import { Agent } from '@atproto/api'; 6 + import Button from '../../components/ui/Button.svelte'; 7 + import Input from '../../components/ui/Input.svelte'; 8 + import { CatIcon } from 'lucide-svelte'; 9 + 10 + let handleInput = ''; 11 + 12 + async function handleLogin() { 13 + if (!handleInput.trim()) { 14 + error.set('Please enter a valid handle'); 15 + return; 16 + } 17 + 18 + isLoading.set(true); 19 + error.set(null); 20 + 21 + try { 22 + const isDid = handleInput.trim().startsWith('did:'); 23 + const agent = new Agent(new URL(getPdsUrl())); 24 + const did = isDid 25 + ? handleInput.trim() 26 + : (await agent.com.atproto.identity.resolveHandle({ handle: handleInput.trim() })).data.did; 27 + 28 + if (did == getLabelerDid()) { 29 + error.set('Labeler account cannot be used to log in'); 30 + isLoading.set(false); 31 + return; 32 + } 33 + 34 + const authUrl = await authorize(did); 35 + // Redirect to authorization page 36 + window.location.href = authUrl.toString(); 37 + } catch (err) { 38 + const message = err instanceof Error ? err.message : 'Authentication failed'; 39 + error.set(message); 40 + isLoading.set(false); 41 + } 42 + } 43 + 44 + function handleInputChange(e: Event) { 45 + const target = e.target as HTMLInputElement; 46 + handleInput = target.value; 47 + if ($error) error.set(null); 48 + } 49 + 50 + function handleKeyPress(e: KeyboardEvent) { 51 + if (e.key === 'Enter') { 52 + handleLogin(); 53 + } 54 + } 55 + </script> 56 + 57 + <div class="flex min-h-screen items-center justify-center"> 58 + <div class="w-full max-w-md px-4"> 59 + <div class="mb-2 flex items-center text-ctp-mauve"> 60 + <CatIcon class="size-6" /> 61 + <h1 class="ml-2 text-3xl font-bold">meowzone</h1> 62 + </div> 63 + <p class="mb-5 text-ctp-subtext1">login with ur personal internet habdle</p> 64 + 65 + <div class="space-y-4"> 66 + <div> 67 + <Input 68 + id="handle" 69 + type="text" 70 + placeholder="ur-habdle.ebil.club" 71 + bind:value={handleInput} 72 + on:input={handleInputChange} 73 + on:keypress={handleKeyPress} 74 + disabled={$isLoading} 75 + className="mt-1" 76 + /> 77 + </div> 78 + 79 + {#if handleInput == 'coil-habdle.ebil.club'} 80 + <p class="text-ctp-mauve">woaa ,, dat coil hablde !!</p> 81 + {:else if handleInput == 'olaren.dev'} 82 + <p class="text-ctp-mauve">montreal or montfake ?</p> 83 + {:else if handleInput == 'isabelroses.com'} 84 + <p class="text-ctp-mauve">remeber to water ur rodes</p> 85 + {/if} 86 + 87 + {#if $error} 88 + <div class="rounded-lg bg-ctp-red/20 p-3 text-ctp-red">{$error}</div> 89 + {/if} 90 + 91 + <Button 92 + variant="primary" 93 + fullWidth={true} 94 + on:click={handleLogin} 95 + disabled={$isLoading || !handleInput.trim()} 96 + className={$isLoading || !handleInput.trim() ? 'bg-ctp-surface1' : ''} 97 + > 98 + {$isLoading ? 'signing in...' : 'sign in'} 99 + </Button> 100 + </div> 101 + </div> 102 + </div>
+3
static/robots.txt
··· 1 + # allow crawling everything by default 2 + User-agent: * 3 + Disallow:
+17
svelte.config.js
··· 1 + import adapter from '@sveltejs/adapter-node'; 2 + 3 + /** @type {import('@sveltejs/kit').Config} */ 4 + const config = { 5 + kit: { 6 + // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list. 7 + // If your environment is not supported, or you settled on a specific environment, switch out the adapter. 8 + // See https://svelte.dev/docs/kit/adapters for more information about adapters. 9 + adapter: adapter(), 10 + alias: { 11 + "$components": "src/components", 12 + "$ui": "src/components/ui", 13 + } 14 + } 15 + }; 16 + 17 + export default config;
+20
tailwind.config.cjs
··· 1 + const plugin = require('@catppuccin/tailwindcss'); 2 + 3 + /** @type {import('tailwindcss').Config} */ 4 + module.exports = { 5 + content: ['./src/**/*.{html,js,svelte,ts}'], 6 + safelist: [ 7 + { 8 + pattern: /^(bg|border|text|ring|focus:border|focus:ring)-ctp-(sapphire|mauve|lavender)(\/\d+)?$/, 9 + }, 10 + { 11 + pattern: /^ring-ctp-overlay1$/, 12 + }, 13 + // some of our utilities like hover:opacity-80 are static and already 14 + // scanned, but we can include them explicitly if needed. 15 + ], 16 + theme: { 17 + extend: {}, 18 + }, 19 + plugins: [plugin], 20 + };
+20
tsconfig.json
··· 1 + { 2 + "extends": "./.svelte-kit/tsconfig.json", 3 + "compilerOptions": { 4 + "rewriteRelativeImportExtensions": true, 5 + "allowJs": true, 6 + "checkJs": true, 7 + "esModuleInterop": true, 8 + "forceConsistentCasingInFileNames": true, 9 + "resolveJsonModule": true, 10 + "skipLibCheck": true, 11 + "sourceMap": true, 12 + "strict": true, 13 + "moduleResolution": "bundler" 14 + } 15 + // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias 16 + // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files 17 + // 18 + // To make changes to top-level options such as include and exclude, we recommend extending 19 + // the generated config; see https://svelte.dev/docs/kit/configuration#typescript 20 + }
+5
vite.config.ts
··· 1 + import tailwindcss from '@tailwindcss/vite'; 2 + import { sveltekit } from '@sveltejs/kit/vite'; 3 + import { defineConfig } from 'vite'; 4 + 5 + export default defineConfig({ plugins: [tailwindcss(), sveltekit()] });