Social Annotations in the Atmosphere
15
fork

Configure Feed

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

init

Anish Lakhwara 12d9e6f3

+5250
+40
.gitignore
··· 1 + # Logs 2 + logs 3 + *.log 4 + npm-debug.log* 5 + yarn-debug.log* 6 + yarn-error.log* 7 + pnpm-debug.log* 8 + lerna-debug.log* 9 + 10 + node_modules 11 + .output 12 + stats.html 13 + stats-*.json 14 + .wxt 15 + web-ext.config.ts 16 + 17 + # Editor directories and files 18 + .vscode/* 19 + !.vscode/extensions.json 20 + .idea 21 + .DS_Store 22 + *.suo 23 + *.ntvs* 24 + *.njsproj 25 + *.sln 26 + *.sw? 27 + 28 + .env 29 + .env.production 30 + dist 31 + dist-npm 32 + .dev.vars 33 + 34 + channels.db* 35 + .wrangler 36 + # Local Netlify folder 37 + .netlify 38 + 39 + # Reference directory 40 + reference/
+15
README.md
··· 1 + # synthes.is 2 + 3 + To install dependencies: 4 + 5 + ```bash 6 + bun install 7 + ``` 8 + 9 + To run: 10 + 11 + ```bash 12 + bun run index.ts 13 + ``` 14 + 15 + This project was created using `bun init` in bun v1.3.0. [Bun](https://bun.com) is a fast all-in-one JavaScript runtime.
+63
entrypoints/background.ts
··· 1 + export default defineBackground(() => { 2 + // Create context menu on install 3 + browser.runtime.onInstalled.addListener(() => { 4 + browser.contextMenus.create({ 5 + id: 'annotate-selection', 6 + title: 'Annotate', 7 + contexts: ['selection'], 8 + }); 9 + }); 10 + 11 + // Handle context menu click 12 + browser.contextMenus.onClicked.addListener(async (info, tab) => { 13 + if (info.menuItemId === 'annotate-selection' && tab?.id) { 14 + // Tell content script to save annotation immediately 15 + browser.tabs.sendMessage(tab.id, { 16 + type: 'SAVE_ANNOTATION', 17 + }); 18 + } 19 + }); 20 + 21 + // Open sidepanel when extension icon is clicked 22 + browser.action.onClicked.addListener(async (tab) => { 23 + if (tab.id) { 24 + // Chrome API 25 + if (browser.sidePanel) { 26 + await browser.sidePanel.open({ tabId: tab.id }); 27 + } 28 + } 29 + }); 30 + 31 + // Handle auth state changes 32 + browser.runtime.onMessage.addListener((message, sender, sendResponse) => { 33 + if (message.type === 'AUTH_STATE_CHANGED') { 34 + // Broadcast auth state change to all extension contexts 35 + browser.runtime.sendMessage({ 36 + type: 'AUTH_STATE_CHANGED', 37 + isAuthenticated: message.isAuthenticated, 38 + }).catch(() => { 39 + // Ignore if no listeners 40 + }); 41 + sendResponse({ success: true }); 42 + return true; 43 + } 44 + 45 + if (message.type === 'LOGOUT') { 46 + handleLogout().then(() => sendResponse({ success: true })); 47 + return true; 48 + } 49 + }); 50 + 51 + async function handleLogout() { 52 + // Clear OAuth session from storage 53 + await browser.storage.local.remove('synthesis-oauth:session'); 54 + 55 + // Notify all contexts 56 + browser.runtime.sendMessage({ 57 + type: 'AUTH_STATE_CHANGED', 58 + isAuthenticated: false, 59 + }).catch(() => { 60 + // Ignore if no listeners 61 + }); 62 + } 63 + });
+115
entrypoints/content.ts
··· 1 + import { generateSelectors } from '@/lib/selectors/generate'; 2 + import { applyHighlights, clearHighlights } from '@/lib/highlights/apply'; 3 + import type { Selector, Annotation } from '@/lib/types/annotation'; 4 + 5 + export default defineContentScript({ 6 + matches: ['<all_urls>'], 7 + main() { 8 + console.log('[synthesis] content script loaded'); 9 + 10 + let currentSelection: { 11 + text: string; 12 + selectors: Selector[]; 13 + } | null = null; 14 + 15 + let currentAnnotations: Annotation[] = []; 16 + 17 + // Track text selection 18 + document.addEventListener('mouseup', () => { 19 + const selection = window.getSelection(); 20 + if (selection && selection.toString().trim().length > 0) { 21 + const text = selection.toString().trim(); 22 + const root = document.querySelector('main') || document.querySelector('article') || document.body; 23 + const selectors = generateSelectors(selection, root); 24 + 25 + currentSelection = { text, selectors }; 26 + 27 + console.log('[synthesis] text selected:', text); 28 + console.log('[synthesis] selectors:', selectors); 29 + 30 + // Notify sidebar that selection changed 31 + browser.runtime.sendMessage({ 32 + type: 'SELECTION_CHANGED', 33 + data: { text, selectors } 34 + }).catch(() => { 35 + // Sidebar might not be open 36 + }); 37 + } else { 38 + currentSelection = null; 39 + } 40 + }); 41 + 42 + // Listen for messages from sidebar 43 + browser.runtime.onMessage.addListener((message, sender, sendResponse) => { 44 + console.log('[synthesis] Received message:', message.type); 45 + if (message.type === 'GET_SELECTION') { 46 + sendResponse({ 47 + selection: currentSelection, 48 + url: window.location.href, 49 + title: document.title 50 + }); 51 + return true; 52 + } 53 + 54 + if (message.type === 'UPDATE_HIGHLIGHTS') { 55 + currentAnnotations = message.annotations || []; 56 + console.log('[synthesis] Received UPDATE_HIGHLIGHTS:', currentAnnotations.length); 57 + console.log('[synthesis] Annotations data:', currentAnnotations); 58 + console.log('[synthesis] Document ready state:', document.readyState); 59 + 60 + // Apply highlights immediately 61 + applyHighlights(currentAnnotations); 62 + 63 + sendResponse({ success: true }); 64 + return true; 65 + } 66 + 67 + if (message.type === 'CLEAR_HIGHLIGHTS') { 68 + clearHighlights(); 69 + currentAnnotations = []; 70 + sendResponse({ success: true }); 71 + return true; 72 + } 73 + 74 + if (message.type === 'SAVE_ANNOTATION') { 75 + if (!currentSelection) { 76 + console.warn('[synthesis] No selection to save'); 77 + sendResponse({ success: false, error: 'No selection' }); 78 + return true; 79 + } 80 + 81 + // Save annotation immediately 82 + const annotation = { 83 + $type: 'community.lexicon.annotation', 84 + target: [{ 85 + source: window.location.href, 86 + selector: currentSelection.selectors 87 + }], 88 + createdAt: new Date().toISOString() 89 + }; 90 + 91 + // Store locally 92 + browser.storage.local.get('annotations').then(stored => { 93 + const annotations = stored.annotations || []; 94 + annotations.push(annotation); 95 + return browser.storage.local.set({ annotations }); 96 + }).then(() => { 97 + console.log('[synthesis] Annotation saved via context menu'); 98 + // Add to current annotations and highlight immediately 99 + currentAnnotations.push(annotation); 100 + applyHighlights(currentAnnotations); 101 + sendResponse({ success: true }); 102 + }).catch(err => { 103 + console.error('[synthesis] Failed to save annotation:', err); 104 + sendResponse({ success: false, error: err.message }); 105 + }); 106 + 107 + return true; 108 + } 109 + 110 + return false; 111 + }); 112 + 113 + // Don't use MutationObserver - it causes conflicts with page JavaScript 114 + }, 115 + });
+12
entrypoints/sidepanel/index.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.0"> 6 + <title>Synthesis</title> 7 + </head> 8 + <body> 9 + <div id="app"></div> 10 + <script type="module" src="./main.ts"></script> 11 + </body> 12 + </html>
+247
entrypoints/sidepanel/main.ts
··· 1 + import './style.css'; 2 + import type { Annotation } from '@/lib/types/annotation'; 3 + import { initializeOAuth, startLoginProcess, loadSession, clearSession, getProfile } from '@/lib/oauth'; 4 + 5 + console.log('[synthesis] sidepanel script loading...'); 6 + 7 + // Initialize OAuth 8 + initializeOAuth(); 9 + 10 + // Run immediately, not wrapped in defineUnlistedScript 11 + (function() { 12 + const app = document.getElementById('app'); 13 + if (!app) return; 14 + 15 + let currentUrl = ''; 16 + let currentSelection: { text: string; selectors: any[] } | null = null; 17 + 18 + app.innerHTML = ` 19 + <div class="sidebar"> 20 + <div class="auth-section"> 21 + <input type="text" id="handle-input" placeholder="your-handle.bsky.social" /> 22 + <button id="login-btn">Login with ATProto</button> 23 + <button id="logout-btn" style="display: none;">Logout</button> 24 + <img id="profile-avatar" style="display: none; width: 40px; height: 40px; border-radius: 50%; margin-left: auto;" /> 25 + <div id="auth-status"></div> 26 + </div> 27 + <div class="annotation-form"> 28 + <h2>Create Annotation</h2> 29 + <div id="selected-text" class="selected-text"></div> 30 + <textarea id="annotation-text" placeholder="Add your note..."></textarea> 31 + <button id="save-btn">Save Annotation</button> 32 + </div> 33 + <div class="annotations-list"> 34 + <h2>Annotations on this page</h2> 35 + <div id="annotations"></div> 36 + </div> 37 + </div> 38 + `; 39 + 40 + const selectedTextEl = document.getElementById('selected-text'); 41 + const annotationTextarea = document.getElementById('annotation-text') as HTMLTextAreaElement; 42 + const saveBtn = document.getElementById('save-btn'); 43 + const annotationsContainer = document.getElementById('annotations'); 44 + const handleInput = document.getElementById('handle-input') as HTMLInputElement; 45 + const loginBtn = document.getElementById('login-btn'); 46 + const logoutBtn = document.getElementById('logout-btn'); 47 + const authStatus = document.getElementById('auth-status'); 48 + const profileAvatar = document.getElementById('profile-avatar') as HTMLImageElement; 49 + 50 + // Check for existing session 51 + loadSession().then(async session => { 52 + if (session) { 53 + try { 54 + const profile = await getProfile(session); 55 + if (profileAvatar && profile.avatar) { 56 + profileAvatar.src = profile.avatar; 57 + profileAvatar.style.display = 'block'; 58 + } 59 + if (authStatus) authStatus.textContent = ''; 60 + if (loginBtn) loginBtn.style.display = 'none'; 61 + if (logoutBtn) logoutBtn.style.display = 'inline-block'; 62 + if (handleInput) handleInput.style.display = 'none'; 63 + } catch (error) { 64 + console.error('Failed to fetch profile:', error); 65 + if (authStatus) authStatus.textContent = `Logged in as ${session.info.sub}`; 66 + if (loginBtn) loginBtn.style.display = 'none'; 67 + if (logoutBtn) logoutBtn.style.display = 'inline-block'; 68 + if (handleInput) handleInput.style.display = 'none'; 69 + } 70 + } 71 + }); 72 + 73 + // Login handler 74 + loginBtn?.addEventListener('click', async () => { 75 + const handle = handleInput?.value.trim(); 76 + if (!handle) { 77 + alert('Please enter your handle'); 78 + return; 79 + } 80 + 81 + try { 82 + if (authStatus) authStatus.textContent = 'Logging in...'; 83 + await startLoginProcess(handle); 84 + 85 + // Reload to show logged in state 86 + const session = await loadSession(); 87 + if (session) { 88 + try { 89 + const profile = await getProfile(session); 90 + if (profileAvatar && profile.avatar) { 91 + profileAvatar.src = profile.avatar; 92 + profileAvatar.style.display = 'block'; 93 + } 94 + if (authStatus) authStatus.textContent = ''; 95 + if (loginBtn) loginBtn.style.display = 'none'; 96 + if (logoutBtn) logoutBtn.style.display = 'inline-block'; 97 + if (handleInput) handleInput.style.display = 'none'; 98 + } catch (error) { 99 + console.error('Failed to fetch profile:', error); 100 + if (authStatus) authStatus.textContent = `Logged in as ${session.info.sub}`; 101 + } 102 + } 103 + } catch (error) { 104 + if (authStatus) authStatus.textContent = 'Login failed'; 105 + console.error('Login error:', error); 106 + } 107 + }); 108 + 109 + // Logout handler 110 + logoutBtn?.addEventListener('click', async () => { 111 + await clearSession(); 112 + if (authStatus) authStatus.textContent = ''; 113 + if (profileAvatar) profileAvatar.style.display = 'none'; 114 + if (loginBtn) loginBtn.style.display = 'inline-block'; 115 + if (logoutBtn) logoutBtn.style.display = 'none'; 116 + if (handleInput) handleInput.style.display = 'inline-block'; 117 + }); 118 + 119 + // Listen for selection changes 120 + browser.runtime.onMessage.addListener((message) => { 121 + if (message.type === 'SELECTION_CHANGED') { 122 + currentSelection = message.data; 123 + if (selectedTextEl) { 124 + selectedTextEl.innerHTML = ` 125 + <strong>Selected text:</strong> 126 + <blockquote>${currentSelection.text}</blockquote> 127 + `; 128 + } 129 + console.log('Selection updated:', currentSelection); 130 + } 131 + }); 132 + 133 + // Get current page info 134 + browser.tabs.query({ active: true, currentWindow: true }).then(tabs => { 135 + if (tabs[0]?.id) { 136 + browser.tabs.sendMessage(tabs[0].id, { type: 'GET_SELECTION' }).then(response => { 137 + currentUrl = response.url; 138 + currentSelection = response.selection; 139 + 140 + if (currentSelection && selectedTextEl) { 141 + selectedTextEl.innerHTML = ` 142 + <strong>Selected text:</strong> 143 + <blockquote>${currentSelection.text}</blockquote> 144 + `; 145 + } 146 + 147 + loadAnnotations(currentUrl); 148 + }).catch(err => { 149 + console.error('Failed to get selection:', err); 150 + }); 151 + } 152 + }); 153 + 154 + // Send highlights to content script when annotations change 155 + async function updateHighlights(annotations: Annotation[]) { 156 + console.log('[synthesis] Sending highlights to content script:', annotations.length); 157 + const tabs = await browser.tabs.query({ active: true, currentWindow: true }); 158 + console.log('[synthesis] Active tab:', tabs[0]?.id, tabs[0]?.url); 159 + 160 + if (tabs[0]?.id) { 161 + browser.tabs.sendMessage(tabs[0].id, { 162 + type: 'UPDATE_HIGHLIGHTS', 163 + annotations 164 + }).then(response => { 165 + console.log('[synthesis] Highlights updated successfully:', response); 166 + }).catch(err => { 167 + console.error('[synthesis] Failed to update highlights:', err); 168 + }); 169 + } else { 170 + console.error('[synthesis] No active tab found'); 171 + } 172 + } 173 + 174 + // Save annotation 175 + saveBtn?.addEventListener('click', async () => { 176 + if (!currentSelection) { 177 + alert('Please select text on the page first'); 178 + return; 179 + } 180 + 181 + const body = annotationTextarea.value.trim(); 182 + 183 + const annotation: Annotation = { 184 + $type: 'community.lexicon.annotation', 185 + target: [{ 186 + source: currentUrl, 187 + selector: currentSelection.selectors 188 + }], 189 + body: body || undefined, 190 + createdAt: new Date().toISOString() 191 + }; 192 + 193 + // Store locally for now (will replace with atproto) 194 + await saveAnnotationLocal(annotation); 195 + 196 + // Clear form 197 + annotationTextarea.value = ''; 198 + if (selectedTextEl) selectedTextEl.innerHTML = ''; 199 + currentSelection = null; 200 + 201 + // Reload annotations 202 + await loadAnnotations(currentUrl); 203 + }); 204 + 205 + async function saveAnnotationLocal(annotation: Annotation) { 206 + const stored = await browser.storage.local.get('annotations'); 207 + const annotations = stored.annotations || []; 208 + annotations.push(annotation); 209 + await browser.storage.local.set({ annotations }); 210 + console.log('Annotation saved:', annotation); 211 + } 212 + 213 + async function loadAnnotations(url: string) { 214 + const stored = await browser.storage.local.get('annotations'); 215 + const allAnnotations: Annotation[] = stored.annotations || []; 216 + 217 + // Filter by current URL 218 + const pageAnnotations = allAnnotations.filter(ann => 219 + ann.target[0]?.source === url 220 + ); 221 + 222 + if (!annotationsContainer) return; 223 + 224 + if (pageAnnotations.length === 0) { 225 + annotationsContainer.innerHTML = '<p class="empty">No annotations yet. Select text to create one.</p>'; 226 + return; 227 + } 228 + 229 + annotationsContainer.innerHTML = pageAnnotations.map(ann => { 230 + const quote = ann.target[0]?.selector?.find((s: any) => s.type === 'TextQuoteSelector'); 231 + const text = quote?.exact || ''; 232 + 233 + return ` 234 + <div class="annotation-card"> 235 + ${text ? `<blockquote>${text}</blockquote>` : ''} 236 + ${ann.body ? `<p>${ann.body}</p>` : ''} 237 + <div class="annotation-meta"> 238 + <small>${new Date(ann.createdAt).toLocaleString()}</small> 239 + </div> 240 + </div> 241 + `; 242 + }).join(''); 243 + 244 + // Update highlights on page 245 + await updateHighlights(pageAnnotations); 246 + } 247 + })();
+116
entrypoints/sidepanel/style.css
··· 1 + * { 2 + box-sizing: border-box; 3 + margin: 0; 4 + padding: 0; 5 + } 6 + 7 + body { 8 + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; 9 + background: #fff; 10 + color: #1a1a1a; 11 + } 12 + 13 + .sidebar { 14 + padding: 16px; 15 + max-width: 100%; 16 + } 17 + 18 + h2 { 19 + font-size: 16px; 20 + margin-bottom: 12px; 21 + font-weight: 600; 22 + } 23 + 24 + button { 25 + background: #0085ff; 26 + color: white; 27 + border: none; 28 + padding: 8px 16px; 29 + border-radius: 6px; 30 + cursor: pointer; 31 + font-size: 14px; 32 + } 33 + 34 + button:hover { 35 + background: #0070dd; 36 + } 37 + 38 + .annotation-form { 39 + margin: 16px 0; 40 + padding: 16px; 41 + border: 1px solid #e0e0e0; 42 + border-radius: 8px; 43 + } 44 + 45 + textarea { 46 + width: 100%; 47 + min-height: 80px; 48 + padding: 8px; 49 + border: 1px solid #e0e0e0; 50 + border-radius: 4px; 51 + font-family: inherit; 52 + margin-bottom: 8px; 53 + } 54 + 55 + .annotations-list { 56 + margin-top: 24px; 57 + } 58 + 59 + #annotations { 60 + display: flex; 61 + flex-direction: column; 62 + gap: 12px; 63 + } 64 + 65 + .annotation-card { 66 + padding: 12px; 67 + border: 1px solid #e0e0e0; 68 + border-radius: 8px; 69 + background: #fafafa; 70 + } 71 + 72 + .annotation-card blockquote { 73 + margin: 0 0 8px 0; 74 + padding: 8px 12px; 75 + background: white; 76 + border-left: 3px solid #0085ff; 77 + font-style: italic; 78 + color: #555; 79 + } 80 + 81 + .annotation-card p { 82 + margin: 8px 0; 83 + line-height: 1.5; 84 + } 85 + 86 + .annotation-meta { 87 + margin-top: 8px; 88 + padding-top: 8px; 89 + border-top: 1px solid #e0e0e0; 90 + } 91 + 92 + .annotation-meta small { 93 + color: #666; 94 + font-size: 12px; 95 + } 96 + 97 + .selected-text { 98 + margin-bottom: 12px; 99 + padding: 12px; 100 + background: #f0f8ff; 101 + border-radius: 6px; 102 + } 103 + 104 + .selected-text blockquote { 105 + margin: 8px 0 0 0; 106 + padding: 8px 12px; 107 + background: white; 108 + border-left: 3px solid #0085ff; 109 + font-style: italic; 110 + color: #333; 111 + } 112 + 113 + .empty { 114 + color: #999; 115 + font-style: italic; 116 + }
+61
flake.lock
··· 1 + { 2 + "nodes": { 3 + "flake-utils": { 4 + "inputs": { 5 + "systems": "systems" 6 + }, 7 + "locked": { 8 + "lastModified": 1731533236, 9 + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", 10 + "owner": "numtide", 11 + "repo": "flake-utils", 12 + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", 13 + "type": "github" 14 + }, 15 + "original": { 16 + "owner": "numtide", 17 + "repo": "flake-utils", 18 + "type": "github" 19 + } 20 + }, 21 + "nixpkgs": { 22 + "locked": { 23 + "lastModified": 1760878510, 24 + "narHash": "sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs=", 25 + "owner": "NixOS", 26 + "repo": "nixpkgs", 27 + "rev": "5e2a59a5b1a82f89f2c7e598302a9cacebb72a67", 28 + "type": "github" 29 + }, 30 + "original": { 31 + "owner": "NixOS", 32 + "ref": "nixos-unstable", 33 + "repo": "nixpkgs", 34 + "type": "github" 35 + } 36 + }, 37 + "root": { 38 + "inputs": { 39 + "flake-utils": "flake-utils", 40 + "nixpkgs": "nixpkgs" 41 + } 42 + }, 43 + "systems": { 44 + "locked": { 45 + "lastModified": 1681028828, 46 + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", 47 + "owner": "nix-systems", 48 + "repo": "default", 49 + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", 50 + "type": "github" 51 + }, 52 + "original": { 53 + "owner": "nix-systems", 54 + "repo": "default", 55 + "type": "github" 56 + } 57 + } 58 + }, 59 + "root": "root", 60 + "version": 7 61 + }
+36
flake.nix
··· 1 + { 2 + description = "synthesis - atproto web annotation extension"; 3 + 4 + inputs = { 5 + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; 6 + flake-utils.url = "github:numtide/flake-utils"; 7 + }; 8 + 9 + outputs = { self, nixpkgs, flake-utils }: 10 + flake-utils.lib.eachDefaultSystem (system: 11 + let 12 + pkgs = nixpkgs.legacyPackages.${system}; 13 + in 14 + { 15 + devShells.default = pkgs.mkShell { 16 + buildInputs = with pkgs; [ 17 + bun 18 + nodejs_22 19 + pnpm 20 + typescript 21 + git 22 + curl 23 + jq 24 + ]; 25 + 26 + shellHook = '' 27 + # Add node_modules/.bin to PATH 28 + export PATH="$PWD/node_modules/.bin:$PATH" 29 + 30 + # Set environment defaults 31 + export API_PORT=''${API_PORT:-3000} 32 + ''; 33 + }; 34 + } 35 + ); 36 + }
+152
lib/highlights/apply.ts
··· 1 + import { findAnnotationRange } from '@/lib/selectors/match'; 2 + import { showAnnotationPopover } from './popover'; 3 + import type { Annotation } from '@/lib/types/annotation'; 4 + 5 + export function applyHighlights(annotations: Annotation[], container?: HTMLElement) { 6 + // Use main/article as root to avoid matching text in script tags 7 + const root = container || document.querySelector('main') || document.querySelector('article') || document.body; 8 + 9 + // Clear existing highlights first 10 + clearHighlights(root); 11 + 12 + console.log(`[synthesis] Applying ${annotations.length} highlights`); 13 + console.log('[synthesis] Container:', root.tagName, root.textContent?.substring(0, 100)); 14 + 15 + annotations.forEach((annotation, index) => { 16 + console.log(`[synthesis] Processing annotation ${index + 1}/${annotations.length}`); 17 + const range = findAnnotationRange(annotation, root); 18 + 19 + if (!range) { 20 + console.warn('[synthesis] Could not anchor annotation:', annotation); 21 + return; 22 + } 23 + 24 + // Check if range is inside a script/style tag (not visible) 25 + let node = range.commonAncestorContainer; 26 + while (node && node !== container) { 27 + if (node.nodeName === 'SCRIPT' || node.nodeName === 'STYLE') { 28 + console.warn('[synthesis] Skipping highlight inside', node.nodeName, 'tag'); 29 + return; 30 + } 31 + node = node.parentNode as HTMLElement; 32 + } 33 + 34 + console.log('[synthesis] Found range, attempting to highlight'); 35 + try { 36 + highlightRange(range, annotation); 37 + console.log('[synthesis] Successfully highlighted annotation', index + 1); 38 + } catch (error) { 39 + console.warn('[synthesis] Failed to highlight range:', error); 40 + } 41 + }); 42 + 43 + console.log('[synthesis] Finished applying highlights'); 44 + } 45 + 46 + function highlightRange(range: Range, annotation: Annotation) { 47 + console.log('[synthesis] Highlighting range:', range.toString().substring(0, 50)); 48 + 49 + const highlight = document.createElement('span'); 50 + highlight.className = 'synthesis-highlight'; 51 + highlight.dataset.annotationId = annotation.uri || annotation.createdAt; 52 + highlight.style.cssText = ` 53 + background-color: rgba(255, 235, 59, 0.6) !important; 54 + cursor: pointer !important; 55 + transition: background-color 0.2s !important; 56 + `; 57 + 58 + // Hover effect 59 + highlight.addEventListener('mouseenter', () => { 60 + highlight.style.cssText = ` 61 + background-color: rgba(255, 235, 59, 0.8) !important; 62 + cursor: pointer !important; 63 + transition: background-color 0.2s !important; 64 + `; 65 + }); 66 + 67 + highlight.addEventListener('mouseleave', () => { 68 + highlight.style.cssText = ` 69 + background-color: rgba(255, 235, 59, 0.6) !important; 70 + cursor: pointer !important; 71 + transition: background-color 0.2s !important; 72 + `; 73 + }); 74 + 75 + // Click to show annotation popover 76 + highlight.addEventListener('click', (e) => { 77 + e.preventDefault(); 78 + e.stopPropagation(); 79 + console.log('[synthesis] Clicked annotation:', annotation); 80 + 81 + showAnnotationPopover( 82 + annotation, 83 + highlight, 84 + // On save 85 + async (updatedAnnotation) => { 86 + const stored = await browser.storage.local.get('annotations'); 87 + const annotations = stored.annotations || []; 88 + const index = annotations.findIndex((a: Annotation) => 89 + a.createdAt === annotation.createdAt 90 + ); 91 + if (index !== -1) { 92 + annotations[index] = updatedAnnotation; 93 + await browser.storage.local.set({ annotations }); 94 + console.log('[synthesis] Annotation updated:', updatedAnnotation); 95 + 96 + // Update the annotation object in memory so next click shows updated note 97 + Object.assign(annotation, updatedAnnotation); 98 + } 99 + }, 100 + // On delete 101 + async () => { 102 + const stored = await browser.storage.local.get('annotations'); 103 + const annotations = stored.annotations || []; 104 + const filtered = annotations.filter((a: Annotation) => 105 + a.createdAt !== annotation.createdAt 106 + ); 107 + await browser.storage.local.set({ annotations: filtered }); 108 + console.log('[synthesis] Annotation deleted'); 109 + 110 + // Remove highlight 111 + highlight.remove(); 112 + } 113 + ); 114 + }); 115 + 116 + // Always use manual wrapping - surroundContents can fail silently 117 + try { 118 + const contents = range.extractContents(); 119 + console.log('[synthesis] Extracted contents:', contents); 120 + console.log('[synthesis] Contents text:', contents.textContent); 121 + highlight.appendChild(contents); 122 + range.insertNode(highlight); 123 + console.log('[synthesis] Successfully applied highlight'); 124 + console.log('[synthesis] Highlight innerHTML:', highlight.innerHTML); 125 + console.log('[synthesis] Highlight textContent:', highlight.textContent); 126 + const rect = highlight.getBoundingClientRect(); 127 + console.log('[synthesis] Highlight size:', { 128 + width: rect.width, 129 + height: rect.height, 130 + x: rect.x, 131 + y: rect.y 132 + }); 133 + } catch (error) { 134 + console.error('[synthesis] Failed to apply highlight:', error); 135 + } 136 + } 137 + 138 + export function clearHighlights(container: HTMLElement = document.body) { 139 + const highlights = container.querySelectorAll('.synthesis-highlight'); 140 + console.log(`[synthesis] Clearing ${highlights.length} highlights`); 141 + 142 + highlights.forEach(highlight => { 143 + const parent = highlight.parentNode; 144 + if (parent) { 145 + while (highlight.firstChild) { 146 + parent.insertBefore(highlight.firstChild, highlight); 147 + } 148 + parent.removeChild(highlight); 149 + parent.normalize(); 150 + } 151 + }); 152 + }
+105
lib/highlights/popover.ts
··· 1 + import type { Annotation } from '../types/annotation'; 2 + 3 + let currentPopover: HTMLElement | null = null; 4 + 5 + export function showAnnotationPopover( 6 + annotation: Annotation, 7 + targetElement: HTMLElement, 8 + onSave: (updatedAnnotation: Annotation) => void, 9 + onDelete: () => void 10 + ) { 11 + // Remove existing popover 12 + hidePopover(); 13 + 14 + const popover = document.createElement('div'); 15 + popover.className = 'synthesis-popover'; 16 + popover.style.cssText = ` 17 + position: absolute; 18 + z-index: 999999; 19 + background: white; 20 + border: 1px solid #ccc; 21 + border-radius: 8px; 22 + padding: 12px; 23 + box-shadow: 0 2px 8px rgba(0,0,0,0.15); 24 + min-width: 300px; 25 + max-width: 400px; 26 + `; 27 + 28 + const rect = targetElement.getBoundingClientRect(); 29 + popover.style.left = `${rect.left + window.scrollX}px`; 30 + popover.style.top = `${rect.bottom + window.scrollY + 5}px`; 31 + 32 + const quote = annotation.target[0]?.selector?.find((s: any) => s.type === 'TextQuoteSelector'); 33 + const quotedText = quote?.exact || ''; 34 + 35 + popover.innerHTML = ` 36 + <div style="margin-bottom: 8px; font-size: 13px; color: #666; font-style: italic; border-left: 3px solid #0085ff; padding-left: 8px;"> 37 + ${quotedText} 38 + </div> 39 + <textarea 40 + class="synthesis-note-input" 41 + placeholder="Add a note..." 42 + style="width: 100%; box-sizing: border-box; min-height: 60px; padding: 8px; border: 1px solid #ddd; border-radius: 4px; font-size: 14px; font-family: inherit; resize: vertical;" 43 + >${annotation.body || ''}</textarea> 44 + <div style="display: flex; gap: 8px; margin-top: 8px;"> 45 + <button class="synthesis-save-btn" style="flex: 1; padding: 6px 12px; background: #0085ff; color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 14px;"> 46 + Save 47 + </button> 48 + <button class="synthesis-delete-btn" style="padding: 6px 12px; background: #dc3545; color: white; border: none; border-radius: 4px; cursor: pointer; font-size: 14px;"> 49 + Delete 50 + </button> 51 + </div> 52 + `; 53 + 54 + document.body.appendChild(popover); 55 + currentPopover = popover; 56 + 57 + const textarea = popover.querySelector('.synthesis-note-input') as HTMLTextAreaElement; 58 + const saveBtn = popover.querySelector('.synthesis-save-btn') as HTMLButtonElement; 59 + const deleteBtn = popover.querySelector('.synthesis-delete-btn') as HTMLButtonElement; 60 + 61 + // Focus textarea 62 + textarea.focus(); 63 + 64 + // Save button 65 + saveBtn.addEventListener('click', (e) => { 66 + e.stopPropagation(); 67 + const updatedAnnotation = { 68 + ...annotation, 69 + body: textarea.value.trim() || undefined, 70 + }; 71 + onSave(updatedAnnotation); 72 + hidePopover(); 73 + }); 74 + 75 + // Delete button 76 + deleteBtn.addEventListener('click', (e) => { 77 + e.stopPropagation(); 78 + if (confirm('Delete this annotation?')) { 79 + onDelete(); 80 + hidePopover(); 81 + } 82 + }); 83 + 84 + // Close on click outside 85 + setTimeout(() => { 86 + document.addEventListener('click', handleClickOutside); 87 + }, 0); 88 + 89 + // Stop propagation on popover clicks 90 + popover.addEventListener('click', (e) => { 91 + e.stopPropagation(); 92 + }); 93 + } 94 + 95 + function handleClickOutside() { 96 + hidePopover(); 97 + } 98 + 99 + export function hidePopover() { 100 + if (currentPopover) { 101 + currentPopover.remove(); 102 + currentPopover = null; 103 + document.removeEventListener('click', handleClickOutside); 104 + } 105 + }
+114
lib/oauth.ts
··· 1 + import { 2 + configureOAuth, 3 + createAuthorizationUrl, 4 + finalizeAuthorization, 5 + resolveFromIdentity, 6 + type OAuthSession, 7 + } from "@atcute/oauth-browser-client"; 8 + 9 + const OAUTH_SESSION_KEY = "synthesis-oauth:session"; 10 + 11 + let isOAuthInitialized = false; 12 + 13 + export function initializeOAuth() { 14 + if (typeof window !== "undefined" && !isOAuthInitialized) { 15 + // Always use the web redirect URL for AT Protocol OAuth 16 + // The web callback will relay to chromiumapp.org for extensions 17 + configureOAuth({ 18 + metadata: { 19 + client_id: import.meta.env.VITE_OAUTH_CLIENT_ID, 20 + redirect_uri: import.meta.env.VITE_OAUTH_REDIRECT_URI, 21 + }, 22 + }); 23 + isOAuthInitialized = true; 24 + } 25 + } 26 + 27 + export async function startLoginProcess(handle: string): Promise<void> { 28 + console.log('[oauth] Starting login process for handle:', handle); 29 + initializeOAuth(); 30 + 31 + console.log('[oauth] Resolving identity...'); 32 + // Resolve handle to get server metadata 33 + const { metadata } = await resolveFromIdentity(handle); 34 + console.log('[oauth] PDS metadata:', metadata); 35 + 36 + console.log('[oauth] Creating authorization URL...'); 37 + const authUrl = await createAuthorizationUrl({ 38 + metadata: metadata, 39 + scope: import.meta.env.VITE_OAUTH_SCOPE, 40 + }); 41 + console.log('[oauth] Auth URL:', authUrl.toString()); 42 + 43 + // Use browser.identity.launchWebAuthFlow for extension OAuth 44 + if (typeof browser !== "undefined" && browser.identity) { 45 + console.log('[oauth] Launching web auth flow...'); 46 + try { 47 + // launchWebAuthFlow will capture the chromiumapp.org redirect 48 + const capturedUrl = await browser.identity.launchWebAuthFlow({ 49 + url: authUrl.toString(), 50 + interactive: true, 51 + }); 52 + 53 + if (!capturedUrl) { 54 + throw new Error('OAuth flow cancelled or failed'); 55 + } 56 + 57 + console.log('[oauth] Captured redirect URL:', capturedUrl); 58 + 59 + // Parse OAuth response from redirect URL (params can be in search or hash) 60 + const url = new URL(capturedUrl); 61 + const paramString = url.search || url.hash.slice(1); // Remove '#' from hash 62 + const params = new URLSearchParams(paramString); 63 + 64 + console.log('[oauth] OAuth params:', Object.fromEntries(params)); 65 + 66 + // Finalize authorization with the params 67 + console.log('[oauth] Finalizing authorization...'); 68 + const session = await finalizeAuthorization(params); 69 + console.log('[oauth] Authorization complete, session:', session); 70 + 71 + // Store session 72 + await saveSession(session); 73 + console.log('[oauth] Session saved successfully'); 74 + } catch (error) { 75 + console.error('[oauth] launchWebAuthFlow error:', error); 76 + throw error; 77 + } 78 + } else { 79 + // Fallback for non-extension contexts 80 + console.log('[oauth] Redirecting to auth URL (non-extension)'); 81 + window.location.href = authUrl.toString(); 82 + } 83 + } 84 + 85 + export async function saveSession(session: OAuthSession): Promise<void> { 86 + await browser.storage.local.set({ [OAUTH_SESSION_KEY]: session }); 87 + } 88 + 89 + export async function loadSession(): Promise<OAuthSession | null> { 90 + const result = await browser.storage.local.get(OAUTH_SESSION_KEY); 91 + return result[OAUTH_SESSION_KEY] || null; 92 + } 93 + 94 + export async function clearSession(): Promise<void> { 95 + await browser.storage.local.remove(OAUTH_SESSION_KEY); 96 + } 97 + 98 + export async function getProfile(session: OAuthSession): Promise<any> { 99 + const { BskyAgent } = await import('@atproto/api'); 100 + 101 + // Use the PDS URL from the session (aud or server.issuer) 102 + const serviceUrl = (session.info as any).aud || (session.info as any).server?.issuer; 103 + const agent = new BskyAgent({ service: serviceUrl }); 104 + 105 + await agent.resumeSession({ 106 + did: session.info.sub, 107 + handle: '', // We'll get this from the profile 108 + accessJwt: session.token.access_token, 109 + refreshJwt: session.token.refresh_token || '', 110 + }); 111 + 112 + const response = await agent.getProfile({ actor: session.info.sub }); 113 + return response.data; 114 + }
+67
lib/selectors/generate.ts
··· 1 + import * as textQuote from 'dom-anchor-text-quote'; 2 + import * as textPosition from 'dom-anchor-text-position'; 3 + import type { Selector, TextQuoteSelector, TextPositionSelector } from '../types/annotation'; 4 + 5 + /** 6 + * Generate W3C selectors from a DOM selection using Hypothesis libraries 7 + */ 8 + export function generateSelectors(selection: Selection, root?: HTMLElement): Selector[] { 9 + if (!selection.rangeCount) return []; 10 + 11 + const range = selection.getRangeAt(0); 12 + const container = root || document.body; 13 + const selectors: Selector[] = []; 14 + 15 + // TextQuoteSelector - most robust for content changes 16 + const textQuoteSelector = generateTextQuoteSelector(range, container); 17 + if (textQuoteSelector) selectors.push(textQuoteSelector); 18 + 19 + // TextPositionSelector - precise but fragile 20 + const textPositionSelector = generateTextPositionSelector(range, container); 21 + if (textPositionSelector) selectors.push(textPositionSelector); 22 + 23 + return selectors; 24 + } 25 + 26 + function generateTextQuoteSelector( 27 + range: Range, 28 + root: HTMLElement 29 + ): TextQuoteSelector | null { 30 + const exact = range.toString().trim(); 31 + if (!exact) return null; 32 + 33 + try { 34 + const selector = textQuote.fromRange(root, range); 35 + 36 + return { 37 + type: 'TextQuoteSelector', 38 + exact: selector.exact, 39 + prefix: selector.prefix || undefined, 40 + suffix: selector.suffix || undefined 41 + }; 42 + } catch (error) { 43 + console.warn('Failed to generate TextQuoteSelector:', error); 44 + return null; 45 + } 46 + } 47 + 48 + function generateTextPositionSelector( 49 + range: Range, 50 + root: HTMLElement 51 + ): TextPositionSelector | null { 52 + const exact = range.toString().trim(); 53 + if (!exact) return null; 54 + 55 + try { 56 + const selector = textPosition.fromRange(root, range); 57 + 58 + return { 59 + type: 'TextPositionSelector', 60 + start: selector.start, 61 + end: selector.end 62 + }; 63 + } catch (error) { 64 + console.warn('Failed to generate TextPositionSelector:', error); 65 + return null; 66 + } 67 + }
+67
lib/selectors/match.ts
··· 1 + import * as textQuote from 'dom-anchor-text-quote'; 2 + import * as textPosition from 'dom-anchor-text-position'; 3 + import type { Annotation, TextQuoteSelector, TextPositionSelector } from '../types/annotation'; 4 + 5 + /** 6 + * Find the DOM Range for an annotation using its selectors 7 + */ 8 + export function findAnnotationRange( 9 + annotation: Annotation, 10 + container: HTMLElement = document.body 11 + ): Range | null { 12 + const selectors = annotation.target?.[0]?.selector; 13 + if (!selectors || selectors.length === 0) { 14 + console.warn('[synthesis] No selectors found in annotation'); 15 + return null; 16 + } 17 + 18 + console.log('[synthesis] Trying to match annotation with', selectors.length, 'selectors'); 19 + 20 + // Try each selector in order 21 + for (const selector of selectors) { 22 + let range: Range | null = null; 23 + 24 + console.log('[synthesis] Trying selector type:', selector.type); 25 + 26 + switch (selector.type) { 27 + case 'TextPositionSelector': 28 + range = matchTextPositionSelector(selector as TextPositionSelector, container); 29 + break; 30 + case 'TextQuoteSelector': 31 + range = matchTextQuoteSelector(selector as TextQuoteSelector, container); 32 + break; 33 + } 34 + 35 + if (range) { 36 + console.log('[synthesis] Successfully matched with', selector.type); 37 + return range; 38 + } 39 + } 40 + 41 + console.warn('[synthesis] Could not match any selector'); 42 + return null; 43 + } 44 + 45 + function matchTextPositionSelector( 46 + selector: TextPositionSelector, 47 + container: HTMLElement 48 + ): Range | null { 49 + try { 50 + return textPosition.toRange(container, selector); 51 + } catch (e) { 52 + console.warn('TextPositionSelector match failed:', e); 53 + return null; 54 + } 55 + } 56 + 57 + function matchTextQuoteSelector( 58 + selector: TextQuoteSelector, 59 + container: HTMLElement 60 + ): Range | null { 61 + try { 62 + return textQuote.toRange(container, selector); 63 + } catch (e) { 64 + console.warn('TextQuoteSelector match failed:', e); 65 + return null; 66 + } 67 + }
+95
lib/types/annotation.ts
··· 1 + /** 2 + * W3C Web Annotation Data Model types 3 + * Based on lexicon.community annotation lexicon 4 + */ 5 + 6 + export interface Annotation { 7 + $type: 'community.lexicon.annotation'; 8 + target: Target[]; 9 + body?: string; 10 + tags?: string[]; 11 + document?: DocumentMetadata; 12 + createdAt: string; 13 + 14 + // ATProto metadata 15 + uri?: string; 16 + cid?: string; 17 + author?: { 18 + did: string; 19 + handle: string; 20 + displayName?: string; 21 + avatar?: string; 22 + }; 23 + } 24 + 25 + export interface Target { 26 + source: string; 27 + selector?: Selector[]; 28 + } 29 + 30 + export type Selector = 31 + | TextQuoteSelector 32 + | TextPositionSelector 33 + | RangeSelector; 34 + 35 + export interface TextQuoteSelector { 36 + type: 'TextQuoteSelector'; 37 + exact: string; 38 + prefix?: string; 39 + suffix?: string; 40 + } 41 + 42 + export interface TextPositionSelector { 43 + type: 'TextPositionSelector'; 44 + start: number; 45 + end: number; 46 + } 47 + 48 + export interface RangeSelector { 49 + type: 'RangeSelector'; 50 + startSelector: XPathSelector | CssSelector; 51 + endSelector: XPathSelector | CssSelector; 52 + } 53 + 54 + export interface XPathSelector { 55 + type: 'XPathSelector'; 56 + value: string; 57 + } 58 + 59 + export interface CssSelector { 60 + type: 'CssSelector'; 61 + value: string; 62 + } 63 + 64 + export interface DocumentMetadata { 65 + title?: string; 66 + canonicalUri?: string; 67 + } 68 + 69 + export function isAnnotation(record: unknown): record is Annotation { 70 + return ( 71 + typeof record === 'object' && 72 + record !== null && 73 + '$type' in record && 74 + record.$type === 'community.lexicon.annotation' 75 + ); 76 + } 77 + 78 + export function getAnnotationText(annotation: Annotation): string { 79 + return annotation.body || ''; 80 + } 81 + 82 + export function getQuotedText(annotation: Annotation): string | null { 83 + const target = annotation.target?.[0]; 84 + if (!target?.selector) return null; 85 + 86 + const textQuote = target.selector.find( 87 + (s): s is TextQuoteSelector => s.type === 'TextQuoteSelector' 88 + ); 89 + 90 + return textQuote?.exact || null; 91 + } 92 + 93 + export function getSelectors(annotation: Annotation): Selector[] { 94 + return annotation.target?.[0]?.selector || []; 95 + }
+8
netlify.toml
··· 1 + [build] 2 + publish = "public" 3 + command = "echo 'No build needed'" 4 + 5 + [[redirects]] 6 + from = "/oauth-client-metadata.json" 7 + to = "/oauth/client-metadata.json" 8 + status = 200
+36
package.json
··· 1 + { 2 + "name": "synthes.is", 3 + "version": "1.0.0", 4 + "description": "To install dependencies:", 5 + "main": "index.js", 6 + "scripts": { 7 + "dev": "wxt", 8 + "build": "wxt build", 9 + "zip": "wxt zip" 10 + }, 11 + "repository": { 12 + "type": "git", 13 + "url": "git+https://github.com/Chickensoupwithrice/synthes.is.git" 14 + }, 15 + "keywords": [], 16 + "author": "", 17 + "license": "ISC", 18 + "bugs": { 19 + "url": "https://github.com/Chickensoupwithrice/synthes.is/issues" 20 + }, 21 + "homepage": "https://github.com/Chickensoupwithrice/synthes.is#readme", 22 + "dependencies": { 23 + "@atcute/oauth-browser-client": "^1.0.27", 24 + "@atproto/api": "^0.17.3", 25 + "dom-anchor-text-position": "^5.0.0", 26 + "dom-anchor-text-quote": "^4.0.2" 27 + }, 28 + "devDependencies": { 29 + "wxt": "0.20.9" 30 + }, 31 + "pnpm": { 32 + "overrides": { 33 + "@wxt-dev/storage": "1.2.0" 34 + } 35 + } 36 + }
+3728
pnpm-lock.yaml
··· 1 + lockfileVersion: '9.0' 2 + 3 + settings: 4 + autoInstallPeers: true 5 + excludeLinksFromLockfile: false 6 + 7 + overrides: 8 + '@wxt-dev/storage': 1.2.0 9 + 10 + importers: 11 + 12 + .: 13 + dependencies: 14 + '@atcute/oauth-browser-client': 15 + specifier: ^1.0.27 16 + version: 1.0.27 17 + '@atproto/api': 18 + specifier: ^0.17.3 19 + version: 0.17.3 20 + dom-anchor-text-position: 21 + specifier: ^5.0.0 22 + version: 5.0.0 23 + dom-anchor-text-quote: 24 + specifier: ^4.0.2 25 + version: 4.0.2 26 + devDependencies: 27 + wxt: 28 + specifier: 0.20.9 29 + version: 0.20.9(@types/node@24.8.1)(jiti@2.6.1)(rollup@4.52.5) 30 + 31 + packages: 32 + 33 + '@1natsu/wait-element@4.1.2': 34 + resolution: {integrity: sha512-qWxSJD+Q5b8bKOvESFifvfZ92DuMsY+03SBNjTO34ipJLP6mZ9yK4bQz/vlh48aEQXoJfaZBqUwKL5BdI5iiWw==} 35 + 36 + '@aklinker1/rollup-plugin-visualizer@5.12.0': 37 + resolution: {integrity: sha512-X24LvEGw6UFmy0lpGJDmXsMyBD58XmX1bbwsaMLhNoM+UMQfQ3b2RtC+nz4b/NoRK5r6QJSKJHBNVeUdwqybaQ==} 38 + engines: {node: '>=14'} 39 + hasBin: true 40 + peerDependencies: 41 + rollup: 2.x || 3.x || 4.x 42 + peerDependenciesMeta: 43 + rollup: 44 + optional: true 45 + 46 + '@atcute/client@4.0.5': 47 + resolution: {integrity: sha512-R8Qen8goGmEkynYGg2m6XFlVmz0GTDvQ+9w+4QqOob+XMk8/WDpF4aImev7WKEde/rV2gjcqW7zM8E6W9NShDA==} 48 + 49 + '@atcute/identity@1.1.1': 50 + resolution: {integrity: sha512-zax42n693VEhnC+5tndvO2KLDTMkHOz8UExwmklvJv7R9VujfEwiSWhcv6Jgwb3ellaG8wjiQ1lMOIjLLvwh0Q==} 51 + 52 + '@atcute/lexicons@1.2.2': 53 + resolution: {integrity: sha512-bgEhJq5Z70/0TbK5sx+tAkrR8FsCODNiL2gUEvS5PuJfPxmFmRYNWaMGehxSPaXWpU2+Oa9ckceHiYbrItDTkA==} 54 + 55 + '@atcute/multibase@1.1.6': 56 + resolution: {integrity: sha512-HBxuCgYLKPPxETV0Rot4VP9e24vKl8JdzGCZOVsDaOXJgbRZoRIF67Lp0H/OgnJeH/Xpva8Z5ReoTNJE5dn3kg==} 57 + 58 + '@atcute/oauth-browser-client@1.0.27': 59 + resolution: {integrity: sha512-Ng1tCOTMLgFHHoIHXTtCZR1/ND62an1qxPX2kBoUzkxxd7iCP7IBYYqOiKyJYT5n1R4zS+s29hFS4t9mxXa5kQ==} 60 + 61 + '@atcute/uint8array@1.0.5': 62 + resolution: {integrity: sha512-XLWWxoR2HNl2qU+FCr0rp1APwJXci7HnzbOQLxK55OaMNBXZ19+xNC5ii4QCsThsDxa4JS/JTzuiQLziITWf2Q==} 63 + 64 + '@atproto/api@0.17.3': 65 + resolution: {integrity: sha512-pdQXhUAapNPdmN00W0vX5ta/aMkHqfgBHATt20X02XwxQpY2AnrPm2Iog4FyjsZqoHooAtCNV/NWJ4xfddJzsg==} 66 + 67 + '@atproto/common-web@0.4.3': 68 + resolution: {integrity: sha512-nRDINmSe4VycJzPo6fP/hEltBcULFxt9Kw7fQk6405FyAWZiTluYHlXOnU7GkQfeUK44OENG1qFTBcmCJ7e8pg==} 69 + 70 + '@atproto/lexicon@0.5.1': 71 + resolution: {integrity: sha512-y8AEtYmfgVl4fqFxqXAeGvhesiGkxiy3CWoJIfsFDDdTlZUC8DFnZrYhcqkIop3OlCkkljvpSJi1hbeC1tbi8A==} 72 + 73 + '@atproto/syntax@0.4.1': 74 + resolution: {integrity: sha512-CJdImtLAiFO+0z3BWTtxwk6aY5w4t8orHTMVJgkf++QRJWTxPbIFko/0hrkADB7n2EruDxDSeAgfUGehpH6ngw==} 75 + 76 + '@atproto/xrpc@0.7.5': 77 + resolution: {integrity: sha512-MUYNn5d2hv8yVegRL0ccHvTHAVj5JSnW07bkbiaz96UH45lvYNRVwt44z+yYVnb0/mvBzyD3/ZQ55TRGt7fHkA==} 78 + 79 + '@babel/code-frame@7.27.1': 80 + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} 81 + engines: {node: '>=6.9.0'} 82 + 83 + '@babel/helper-string-parser@7.27.1': 84 + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 85 + engines: {node: '>=6.9.0'} 86 + 87 + '@babel/helper-validator-identifier@7.27.1': 88 + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 89 + engines: {node: '>=6.9.0'} 90 + 91 + '@babel/parser@7.28.4': 92 + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} 93 + engines: {node: '>=6.0.0'} 94 + hasBin: true 95 + 96 + '@babel/runtime@7.28.2': 97 + resolution: {integrity: sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==} 98 + engines: {node: '>=6.9.0'} 99 + 100 + '@babel/types@7.28.4': 101 + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} 102 + engines: {node: '>=6.9.0'} 103 + 104 + '@badrap/valita@0.4.6': 105 + resolution: {integrity: sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==} 106 + engines: {node: '>= 18'} 107 + 108 + '@devicefarmer/adbkit-logcat@2.1.3': 109 + resolution: {integrity: sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==} 110 + engines: {node: '>= 4'} 111 + 112 + '@devicefarmer/adbkit-monkey@1.2.1': 113 + resolution: {integrity: sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==} 114 + engines: {node: '>= 0.10.4'} 115 + 116 + '@devicefarmer/adbkit@3.3.8': 117 + resolution: {integrity: sha512-7rBLLzWQnBwutH2WZ0EWUkQdihqrnLYCUMaB44hSol9e0/cdIhuNFcqZO0xNheAU6qqHVA8sMiLofkYTgb+lmw==} 118 + engines: {node: '>= 0.10.4'} 119 + hasBin: true 120 + 121 + '@esbuild/aix-ppc64@0.25.11': 122 + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} 123 + engines: {node: '>=18'} 124 + cpu: [ppc64] 125 + os: [aix] 126 + 127 + '@esbuild/android-arm64@0.25.11': 128 + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} 129 + engines: {node: '>=18'} 130 + cpu: [arm64] 131 + os: [android] 132 + 133 + '@esbuild/android-arm@0.25.11': 134 + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} 135 + engines: {node: '>=18'} 136 + cpu: [arm] 137 + os: [android] 138 + 139 + '@esbuild/android-x64@0.25.11': 140 + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} 141 + engines: {node: '>=18'} 142 + cpu: [x64] 143 + os: [android] 144 + 145 + '@esbuild/darwin-arm64@0.25.11': 146 + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} 147 + engines: {node: '>=18'} 148 + cpu: [arm64] 149 + os: [darwin] 150 + 151 + '@esbuild/darwin-x64@0.25.11': 152 + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} 153 + engines: {node: '>=18'} 154 + cpu: [x64] 155 + os: [darwin] 156 + 157 + '@esbuild/freebsd-arm64@0.25.11': 158 + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} 159 + engines: {node: '>=18'} 160 + cpu: [arm64] 161 + os: [freebsd] 162 + 163 + '@esbuild/freebsd-x64@0.25.11': 164 + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} 165 + engines: {node: '>=18'} 166 + cpu: [x64] 167 + os: [freebsd] 168 + 169 + '@esbuild/linux-arm64@0.25.11': 170 + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} 171 + engines: {node: '>=18'} 172 + cpu: [arm64] 173 + os: [linux] 174 + 175 + '@esbuild/linux-arm@0.25.11': 176 + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} 177 + engines: {node: '>=18'} 178 + cpu: [arm] 179 + os: [linux] 180 + 181 + '@esbuild/linux-ia32@0.25.11': 182 + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} 183 + engines: {node: '>=18'} 184 + cpu: [ia32] 185 + os: [linux] 186 + 187 + '@esbuild/linux-loong64@0.25.11': 188 + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} 189 + engines: {node: '>=18'} 190 + cpu: [loong64] 191 + os: [linux] 192 + 193 + '@esbuild/linux-mips64el@0.25.11': 194 + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} 195 + engines: {node: '>=18'} 196 + cpu: [mips64el] 197 + os: [linux] 198 + 199 + '@esbuild/linux-ppc64@0.25.11': 200 + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} 201 + engines: {node: '>=18'} 202 + cpu: [ppc64] 203 + os: [linux] 204 + 205 + '@esbuild/linux-riscv64@0.25.11': 206 + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} 207 + engines: {node: '>=18'} 208 + cpu: [riscv64] 209 + os: [linux] 210 + 211 + '@esbuild/linux-s390x@0.25.11': 212 + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} 213 + engines: {node: '>=18'} 214 + cpu: [s390x] 215 + os: [linux] 216 + 217 + '@esbuild/linux-x64@0.25.11': 218 + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} 219 + engines: {node: '>=18'} 220 + cpu: [x64] 221 + os: [linux] 222 + 223 + '@esbuild/netbsd-arm64@0.25.11': 224 + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} 225 + engines: {node: '>=18'} 226 + cpu: [arm64] 227 + os: [netbsd] 228 + 229 + '@esbuild/netbsd-x64@0.25.11': 230 + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} 231 + engines: {node: '>=18'} 232 + cpu: [x64] 233 + os: [netbsd] 234 + 235 + '@esbuild/openbsd-arm64@0.25.11': 236 + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} 237 + engines: {node: '>=18'} 238 + cpu: [arm64] 239 + os: [openbsd] 240 + 241 + '@esbuild/openbsd-x64@0.25.11': 242 + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} 243 + engines: {node: '>=18'} 244 + cpu: [x64] 245 + os: [openbsd] 246 + 247 + '@esbuild/openharmony-arm64@0.25.11': 248 + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} 249 + engines: {node: '>=18'} 250 + cpu: [arm64] 251 + os: [openharmony] 252 + 253 + '@esbuild/sunos-x64@0.25.11': 254 + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} 255 + engines: {node: '>=18'} 256 + cpu: [x64] 257 + os: [sunos] 258 + 259 + '@esbuild/win32-arm64@0.25.11': 260 + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} 261 + engines: {node: '>=18'} 262 + cpu: [arm64] 263 + os: [win32] 264 + 265 + '@esbuild/win32-ia32@0.25.11': 266 + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} 267 + engines: {node: '>=18'} 268 + cpu: [ia32] 269 + os: [win32] 270 + 271 + '@esbuild/win32-x64@0.25.11': 272 + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} 273 + engines: {node: '>=18'} 274 + cpu: [x64] 275 + os: [win32] 276 + 277 + '@isaacs/balanced-match@4.0.1': 278 + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} 279 + engines: {node: 20 || >=22} 280 + 281 + '@isaacs/brace-expansion@5.0.0': 282 + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} 283 + engines: {node: 20 || >=22} 284 + 285 + '@jridgewell/gen-mapping@0.3.13': 286 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 287 + 288 + '@jridgewell/remapping@2.3.5': 289 + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} 290 + 291 + '@jridgewell/resolve-uri@3.1.2': 292 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 293 + engines: {node: '>=6.0.0'} 294 + 295 + '@jridgewell/sourcemap-codec@1.5.5': 296 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 297 + 298 + '@jridgewell/trace-mapping@0.3.31': 299 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 300 + 301 + '@nodelib/fs.scandir@2.1.5': 302 + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 303 + engines: {node: '>= 8'} 304 + 305 + '@nodelib/fs.stat@2.0.5': 306 + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 307 + engines: {node: '>= 8'} 308 + 309 + '@nodelib/fs.walk@1.2.8': 310 + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 311 + engines: {node: '>= 8'} 312 + 313 + '@pnpm/config.env-replace@1.1.0': 314 + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} 315 + engines: {node: '>=12.22.0'} 316 + 317 + '@pnpm/network.ca-file@1.0.2': 318 + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} 319 + engines: {node: '>=12.22.0'} 320 + 321 + '@pnpm/npm-conf@2.3.1': 322 + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} 323 + engines: {node: '>=12'} 324 + 325 + '@rollup/rollup-android-arm-eabi@4.52.5': 326 + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} 327 + cpu: [arm] 328 + os: [android] 329 + 330 + '@rollup/rollup-android-arm64@4.52.5': 331 + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} 332 + cpu: [arm64] 333 + os: [android] 334 + 335 + '@rollup/rollup-darwin-arm64@4.52.5': 336 + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} 337 + cpu: [arm64] 338 + os: [darwin] 339 + 340 + '@rollup/rollup-darwin-x64@4.52.5': 341 + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} 342 + cpu: [x64] 343 + os: [darwin] 344 + 345 + '@rollup/rollup-freebsd-arm64@4.52.5': 346 + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} 347 + cpu: [arm64] 348 + os: [freebsd] 349 + 350 + '@rollup/rollup-freebsd-x64@4.52.5': 351 + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} 352 + cpu: [x64] 353 + os: [freebsd] 354 + 355 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 356 + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} 357 + cpu: [arm] 358 + os: [linux] 359 + 360 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 361 + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} 362 + cpu: [arm] 363 + os: [linux] 364 + 365 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 366 + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} 367 + cpu: [arm64] 368 + os: [linux] 369 + 370 + '@rollup/rollup-linux-arm64-musl@4.52.5': 371 + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} 372 + cpu: [arm64] 373 + os: [linux] 374 + 375 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 376 + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} 377 + cpu: [loong64] 378 + os: [linux] 379 + 380 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 381 + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} 382 + cpu: [ppc64] 383 + os: [linux] 384 + 385 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 386 + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} 387 + cpu: [riscv64] 388 + os: [linux] 389 + 390 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 391 + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} 392 + cpu: [riscv64] 393 + os: [linux] 394 + 395 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 396 + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} 397 + cpu: [s390x] 398 + os: [linux] 399 + 400 + '@rollup/rollup-linux-x64-gnu@4.52.5': 401 + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} 402 + cpu: [x64] 403 + os: [linux] 404 + 405 + '@rollup/rollup-linux-x64-musl@4.52.5': 406 + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} 407 + cpu: [x64] 408 + os: [linux] 409 + 410 + '@rollup/rollup-openharmony-arm64@4.52.5': 411 + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} 412 + cpu: [arm64] 413 + os: [openharmony] 414 + 415 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 416 + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} 417 + cpu: [arm64] 418 + os: [win32] 419 + 420 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 421 + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} 422 + cpu: [ia32] 423 + os: [win32] 424 + 425 + '@rollup/rollup-win32-x64-gnu@4.52.5': 426 + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} 427 + cpu: [x64] 428 + os: [win32] 429 + 430 + '@rollup/rollup-win32-x64-msvc@4.52.5': 431 + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} 432 + cpu: [x64] 433 + os: [win32] 434 + 435 + '@standard-schema/spec@1.0.0': 436 + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} 437 + 438 + '@types/estree@1.0.8': 439 + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 440 + 441 + '@types/filesystem@0.0.36': 442 + resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} 443 + 444 + '@types/filewriter@0.0.33': 445 + resolution: {integrity: sha512-xFU8ZXTw4gd358lb2jw25nxY9QAgqn2+bKKjKOYfNCzN4DKCFetK7sPtrlpg66Ywe3vWY9FNxprZawAh9wfJ3g==} 446 + 447 + '@types/har-format@1.2.16': 448 + resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} 449 + 450 + '@types/minimatch@3.0.5': 451 + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} 452 + 453 + '@types/node@24.8.1': 454 + resolution: {integrity: sha512-alv65KGRadQVfVcG69MuB4IzdYVpRwMG/mq8KWOaoOdyY617P5ivaDiMCGOFDWD2sAn5Q0mR3mRtUOgm99hL9Q==} 455 + 456 + '@types/yauzl@2.10.3': 457 + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} 458 + 459 + '@webext-core/fake-browser@1.3.2': 460 + resolution: {integrity: sha512-jFyPWWz+VkHAC9DRIiIPOyu6X/KlC8dYqSKweHz6tsDb86QawtVgZSpYcM+GOQBlZc5DHFo92jJ7cIq4uBnU0A==} 461 + 462 + '@webext-core/isolated-element@1.1.2': 463 + resolution: {integrity: sha512-CNHYhsIR8TPkPb+4yqTIuzaGnVn/Fshev5fyoPW+/8Cyc93tJbCjP9PC1XSK6fDWu+xASdPHLZaoa2nWAYoxeQ==} 464 + 465 + '@webext-core/match-patterns@1.0.3': 466 + resolution: {integrity: sha512-NY39ACqCxdKBmHgw361M9pfJma8e4AZo20w9AY+5ZjIj1W2dvXC8J31G5fjfOGbulW9w4WKpT8fPooi0mLkn9A==} 467 + 468 + '@wxt-dev/browser@0.1.4': 469 + resolution: {integrity: sha512-9x03I15i79XU8qYwjv4le0K2HdMl/Yga2wUBSoUbcrCnamv8P3nvuYxREQ9C5QY/qPAfeEVdAtaTrS3KWak71g==} 470 + 471 + '@wxt-dev/storage@1.2.0': 472 + resolution: {integrity: sha512-4A44zCpwl5GZdmUdSJvUWJ6ekZZ+Fz5ttYqTGPIRJSsyosKX8X8Yl7D2Loy1ZlqIg6oJHysaiFXALtTE+pFjpw==} 473 + 474 + acorn@8.15.0: 475 + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 476 + engines: {node: '>=0.4.0'} 477 + hasBin: true 478 + 479 + adm-zip@0.5.16: 480 + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} 481 + engines: {node: '>=12.0'} 482 + 483 + ancestors@0.0.3: 484 + resolution: {integrity: sha512-hWePu8BinW3M5wSo2++ahS6mb3ZZcYWFIxrmOfJI4990DRQnM/OrMNWorjVotrrAkVxldBdF17TCKenwin4XzA==} 485 + 486 + ansi-align@3.0.1: 487 + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} 488 + 489 + ansi-escapes@7.1.1: 490 + resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} 491 + engines: {node: '>=18'} 492 + 493 + ansi-regex@5.0.1: 494 + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 495 + engines: {node: '>=8'} 496 + 497 + ansi-regex@6.2.2: 498 + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} 499 + engines: {node: '>=12'} 500 + 501 + ansi-styles@4.3.0: 502 + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 503 + engines: {node: '>=8'} 504 + 505 + ansi-styles@6.2.3: 506 + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} 507 + engines: {node: '>=12'} 508 + 509 + any-promise@1.3.0: 510 + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 511 + 512 + array-differ@4.0.0: 513 + resolution: {integrity: sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==} 514 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 515 + 516 + array-union@3.0.1: 517 + resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} 518 + engines: {node: '>=12'} 519 + 520 + async-mutex@0.5.0: 521 + resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} 522 + 523 + async@3.2.6: 524 + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} 525 + 526 + atomic-sleep@1.0.0: 527 + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 528 + engines: {node: '>=8.0.0'} 529 + 530 + atomically@2.0.3: 531 + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} 532 + 533 + await-lock@2.2.2: 534 + resolution: {integrity: sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==} 535 + 536 + balanced-match@1.0.2: 537 + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 538 + 539 + base64-js@1.5.1: 540 + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 541 + 542 + bl@5.1.0: 543 + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} 544 + 545 + bluebird@3.7.2: 546 + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} 547 + 548 + boolbase@1.0.0: 549 + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 550 + 551 + boxen@8.0.1: 552 + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} 553 + engines: {node: '>=18'} 554 + 555 + brace-expansion@1.1.12: 556 + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} 557 + 558 + braces@3.0.3: 559 + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 560 + engines: {node: '>=8'} 561 + 562 + buffer-crc32@0.2.13: 563 + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} 564 + 565 + buffer-from@1.1.2: 566 + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 567 + 568 + buffer@6.0.3: 569 + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 570 + 571 + bundle-name@4.1.0: 572 + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} 573 + engines: {node: '>=18'} 574 + 575 + c12@3.3.1: 576 + resolution: {integrity: sha512-LcWQ01LT9tkoUINHgpIOv3mMs+Abv7oVCrtpMRi1PaapVEpWoMga5WuT7/DqFTu7URP9ftbOmimNw1KNIGh9DQ==} 577 + peerDependencies: 578 + magicast: ^0.3.5 579 + peerDependenciesMeta: 580 + magicast: 581 + optional: true 582 + 583 + cac@6.7.14: 584 + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 585 + engines: {node: '>=8'} 586 + 587 + camelcase@8.0.0: 588 + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} 589 + engines: {node: '>=16'} 590 + 591 + chalk@4.1.2: 592 + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 593 + engines: {node: '>=10'} 594 + 595 + chalk@5.6.2: 596 + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} 597 + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 598 + 599 + chokidar@4.0.3: 600 + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 601 + engines: {node: '>= 14.16.0'} 602 + 603 + chrome-launcher@1.2.0: 604 + resolution: {integrity: sha512-JbuGuBNss258bvGil7FT4HKdC3SC2K7UAEUqiPy3ACS3Yxo3hAW6bvFpCu2HsIJLgTqxgEX6BkujvzZfLpUD0Q==} 605 + engines: {node: '>=12.13.0'} 606 + hasBin: true 607 + 608 + ci-info@4.3.1: 609 + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} 610 + engines: {node: '>=8'} 611 + 612 + citty@0.1.6: 613 + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} 614 + 615 + cli-boxes@3.0.0: 616 + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} 617 + engines: {node: '>=10'} 618 + 619 + cli-cursor@4.0.0: 620 + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} 621 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 622 + 623 + cli-cursor@5.0.0: 624 + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} 625 + engines: {node: '>=18'} 626 + 627 + cli-highlight@2.1.11: 628 + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} 629 + engines: {node: '>=8.0.0', npm: '>=5.0.0'} 630 + hasBin: true 631 + 632 + cli-spinners@2.9.2: 633 + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} 634 + engines: {node: '>=6'} 635 + 636 + cli-truncate@4.0.0: 637 + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} 638 + engines: {node: '>=18'} 639 + 640 + cliui@7.0.4: 641 + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 642 + 643 + cliui@8.0.1: 644 + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 645 + engines: {node: '>=12'} 646 + 647 + clone@1.0.4: 648 + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} 649 + engines: {node: '>=0.8'} 650 + 651 + color-convert@2.0.1: 652 + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 653 + engines: {node: '>=7.0.0'} 654 + 655 + color-name@1.1.4: 656 + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 657 + 658 + colorette@2.0.20: 659 + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 660 + 661 + commander@2.9.0: 662 + resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==} 663 + engines: {node: '>= 0.6.x'} 664 + 665 + commander@9.5.0: 666 + resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} 667 + engines: {node: ^12.20.0 || >=14} 668 + 669 + concat-map@0.0.1: 670 + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 671 + 672 + concat-stream@1.6.2: 673 + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} 674 + engines: {'0': node >= 0.8} 675 + 676 + confbox@0.1.8: 677 + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 678 + 679 + confbox@0.2.2: 680 + resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} 681 + 682 + config-chain@1.1.13: 683 + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} 684 + 685 + configstore@7.1.0: 686 + resolution: {integrity: sha512-N4oog6YJWbR9kGyXvS7jEykLDXIE2C0ILYqNBZBp9iwiJpoCBWYsuAdW6PPFn6w06jjnC+3JstVvWHO4cZqvRg==} 687 + engines: {node: '>=18'} 688 + 689 + consola@3.4.2: 690 + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} 691 + engines: {node: ^14.18.0 || >=16.10.0} 692 + 693 + core-util-is@1.0.3: 694 + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 695 + 696 + css-select@5.2.2: 697 + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} 698 + 699 + css-what@6.2.2: 700 + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} 701 + engines: {node: '>= 6'} 702 + 703 + cssom@0.5.0: 704 + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} 705 + 706 + debounce@1.2.1: 707 + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} 708 + 709 + debug@4.3.7: 710 + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} 711 + engines: {node: '>=6.0'} 712 + peerDependencies: 713 + supports-color: '*' 714 + peerDependenciesMeta: 715 + supports-color: 716 + optional: true 717 + 718 + debug@4.4.3: 719 + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 720 + engines: {node: '>=6.0'} 721 + peerDependencies: 722 + supports-color: '*' 723 + peerDependenciesMeta: 724 + supports-color: 725 + optional: true 726 + 727 + deep-extend@0.6.0: 728 + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} 729 + engines: {node: '>=4.0.0'} 730 + 731 + default-browser-id@5.0.0: 732 + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} 733 + engines: {node: '>=18'} 734 + 735 + default-browser@5.2.1: 736 + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} 737 + engines: {node: '>=18'} 738 + 739 + defaults@1.0.4: 740 + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} 741 + 742 + define-lazy-prop@2.0.0: 743 + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} 744 + engines: {node: '>=8'} 745 + 746 + define-lazy-prop@3.0.0: 747 + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} 748 + engines: {node: '>=12'} 749 + 750 + defu@6.1.4: 751 + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} 752 + 753 + dequal@2.0.3: 754 + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 755 + engines: {node: '>=6'} 756 + 757 + destr@2.0.5: 758 + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} 759 + 760 + diff-match-patch@1.0.5: 761 + resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} 762 + 763 + dom-anchor-text-position@4.0.0: 764 + resolution: {integrity: sha512-McGwz4XUK2ttClhYTMoeSuu5sCYYKG2UilW9rJg5n39byIpKtFQMviGPmjRuCWE4JWO8IIjCbAXQgGFVMCuUww==} 765 + 766 + dom-anchor-text-position@5.0.0: 767 + resolution: {integrity: sha512-2Z5p3jBfcxh5PUdxg68GBRbt4kZ6PsxoHp/rhSmZNoWKJfI14ScPMAxJySVWI8EIf+4dMhVskjRXsCxGGe4zJA==} 768 + 769 + dom-anchor-text-quote@4.0.2: 770 + resolution: {integrity: sha512-yM1Z/PYgh8hEnfijmTA14Z1XWvlN8P9wD6srBvRaTSktmtI+z5f2zr0r9hqr7ZMpmokW71MeDyOHBRqbXu0VXA==} 771 + 772 + dom-node-iterator@3.5.3: 773 + resolution: {integrity: sha512-B61Q0KVg/86rIT9C3zwq9ud495TI/4B/V0psFMNcNEn9UFVpG1JjY04jP57MUGUb6FRMozPzSSVXJvFyF0PQ+g==} 774 + 775 + dom-seek@4.0.3: 776 + resolution: {integrity: sha512-Tx9l8RmRkbqfIW0EXPPeKS5+2AJ2+9s2Sam+G+xi9JgPoYEwnSRg+6knLswI66QRD7DaVTI/GRS9qDWAMi/SPg==} 777 + 778 + dom-seek@5.1.1: 779 + resolution: {integrity: sha512-1strSwd201Gfhfkfsk77SX9xyJGzu12gqUo5Q0W3Njtj2QxcfQTwCDOynZ6npZ4ASUFRQq0asjYDRlFxYPKwTA==} 780 + 781 + dom-serializer@2.0.0: 782 + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 783 + 784 + domelementtype@2.3.0: 785 + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} 786 + 787 + domhandler@5.0.3: 788 + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 789 + engines: {node: '>= 4'} 790 + 791 + domutils@3.2.2: 792 + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} 793 + 794 + dot-prop@9.0.0: 795 + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} 796 + engines: {node: '>=18'} 797 + 798 + dotenv-expand@12.0.3: 799 + resolution: {integrity: sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==} 800 + engines: {node: '>=12'} 801 + 802 + dotenv@16.6.1: 803 + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} 804 + engines: {node: '>=12'} 805 + 806 + dotenv@17.2.3: 807 + resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} 808 + engines: {node: '>=12'} 809 + 810 + emoji-regex@10.6.0: 811 + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} 812 + 813 + emoji-regex@8.0.0: 814 + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 815 + 816 + end-of-stream@1.4.5: 817 + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} 818 + 819 + entities@4.5.0: 820 + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 821 + engines: {node: '>=0.12'} 822 + 823 + entities@6.0.1: 824 + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 825 + engines: {node: '>=0.12'} 826 + 827 + environment@1.1.0: 828 + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} 829 + engines: {node: '>=18'} 830 + 831 + error-ex@1.3.4: 832 + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} 833 + 834 + es-module-lexer@1.7.0: 835 + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 836 + 837 + es6-error@4.1.1: 838 + resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} 839 + 840 + esbuild@0.25.11: 841 + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} 842 + engines: {node: '>=18'} 843 + hasBin: true 844 + 845 + escalade@3.2.0: 846 + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 847 + engines: {node: '>=6'} 848 + 849 + escape-goat@4.0.0: 850 + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} 851 + engines: {node: '>=12'} 852 + 853 + escape-string-regexp@4.0.0: 854 + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 855 + engines: {node: '>=10'} 856 + 857 + escape-string-regexp@5.0.0: 858 + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 859 + engines: {node: '>=12'} 860 + 861 + esm-env@1.2.2: 862 + resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} 863 + 864 + estree-walker@3.0.3: 865 + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 866 + 867 + eventemitter3@5.0.1: 868 + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 869 + 870 + exsolve@1.0.7: 871 + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==} 872 + 873 + extract-zip@2.0.1: 874 + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} 875 + engines: {node: '>= 10.17.0'} 876 + hasBin: true 877 + 878 + fast-glob@3.3.3: 879 + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 880 + engines: {node: '>=8.6.0'} 881 + 882 + fast-redact@3.5.0: 883 + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} 884 + engines: {node: '>=6'} 885 + 886 + fastq@1.19.1: 887 + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 888 + 889 + fd-slicer@1.1.0: 890 + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} 891 + 892 + fdir@6.5.0: 893 + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 894 + engines: {node: '>=12.0.0'} 895 + peerDependencies: 896 + picomatch: ^3 || ^4 897 + peerDependenciesMeta: 898 + picomatch: 899 + optional: true 900 + 901 + filesize@10.1.6: 902 + resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} 903 + engines: {node: '>= 10.4.0'} 904 + 905 + fill-range@7.1.1: 906 + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 907 + engines: {node: '>=8'} 908 + 909 + firefox-profile@4.7.0: 910 + resolution: {integrity: sha512-aGApEu5bfCNbA4PGUZiRJAIU6jKmghV2UVdklXAofnNtiDjqYw0czLS46W7IfFqVKgKhFB8Ao2YoNGHY4BoIMQ==} 911 + engines: {node: '>=18'} 912 + hasBin: true 913 + 914 + formdata-node@6.0.3: 915 + resolution: {integrity: sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==} 916 + engines: {node: '>= 18'} 917 + 918 + fs-extra@11.3.2: 919 + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} 920 + engines: {node: '>=14.14'} 921 + 922 + fsevents@2.3.3: 923 + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 924 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 925 + os: [darwin] 926 + 927 + fx-runner@1.4.0: 928 + resolution: {integrity: sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==} 929 + hasBin: true 930 + 931 + get-caller-file@2.0.5: 932 + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 933 + engines: {node: 6.* || 8.* || >= 10.*} 934 + 935 + get-east-asian-width@1.4.0: 936 + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} 937 + engines: {node: '>=18'} 938 + 939 + get-port-please@3.2.0: 940 + resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==} 941 + 942 + get-stream@5.2.0: 943 + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} 944 + engines: {node: '>=8'} 945 + 946 + giget@2.0.0: 947 + resolution: {integrity: sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==} 948 + hasBin: true 949 + 950 + glob-parent@5.1.2: 951 + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 952 + engines: {node: '>= 6'} 953 + 954 + glob-to-regexp@0.4.1: 955 + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} 956 + 957 + global-directory@4.0.1: 958 + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} 959 + engines: {node: '>=18'} 960 + 961 + graceful-fs@4.2.10: 962 + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 963 + 964 + graceful-fs@4.2.11: 965 + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 966 + 967 + graceful-readlink@1.0.1: 968 + resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==} 969 + 970 + graphemer@1.4.0: 971 + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 972 + 973 + growly@1.3.0: 974 + resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==} 975 + 976 + has-flag@4.0.0: 977 + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 978 + engines: {node: '>=8'} 979 + 980 + highlight.js@10.7.3: 981 + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} 982 + 983 + hookable@5.5.3: 984 + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} 985 + 986 + html-escaper@3.0.3: 987 + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} 988 + 989 + htmlparser2@10.0.0: 990 + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} 991 + 992 + ieee754@1.2.1: 993 + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 994 + 995 + immediate@3.0.6: 996 + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} 997 + 998 + import-meta-resolve@4.2.0: 999 + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} 1000 + 1001 + index-of@0.2.0: 1002 + resolution: {integrity: sha512-VkoJmFW85R0il3IJJYCD7wdQ8pQgTtVoCSqu/BI/ZMy51qDJ618nQsiWmQ6tnyKZShEG2nLt7i7o3YJmEPJSyg==} 1003 + engines: {node: '>=0.10.0'} 1004 + 1005 + inherits@2.0.4: 1006 + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1007 + 1008 + ini@1.3.8: 1009 + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 1010 + 1011 + ini@4.1.1: 1012 + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} 1013 + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1014 + 1015 + ini@4.1.3: 1016 + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} 1017 + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1018 + 1019 + is-absolute@0.1.7: 1020 + resolution: {integrity: sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==} 1021 + engines: {node: '>=0.10.0'} 1022 + 1023 + is-arrayish@0.2.1: 1024 + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1025 + 1026 + is-docker@2.2.1: 1027 + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} 1028 + engines: {node: '>=8'} 1029 + hasBin: true 1030 + 1031 + is-docker@3.0.0: 1032 + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} 1033 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1034 + hasBin: true 1035 + 1036 + is-extglob@2.1.1: 1037 + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1038 + engines: {node: '>=0.10.0'} 1039 + 1040 + is-fullwidth-code-point@3.0.0: 1041 + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1042 + engines: {node: '>=8'} 1043 + 1044 + is-fullwidth-code-point@4.0.0: 1045 + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 1046 + engines: {node: '>=12'} 1047 + 1048 + is-fullwidth-code-point@5.1.0: 1049 + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} 1050 + engines: {node: '>=18'} 1051 + 1052 + is-glob@4.0.3: 1053 + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1054 + engines: {node: '>=0.10.0'} 1055 + 1056 + is-in-ci@1.0.0: 1057 + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} 1058 + engines: {node: '>=18'} 1059 + hasBin: true 1060 + 1061 + is-inside-container@1.0.0: 1062 + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} 1063 + engines: {node: '>=14.16'} 1064 + hasBin: true 1065 + 1066 + is-installed-globally@1.0.0: 1067 + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} 1068 + engines: {node: '>=18'} 1069 + 1070 + is-interactive@2.0.0: 1071 + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} 1072 + engines: {node: '>=12'} 1073 + 1074 + is-npm@6.1.0: 1075 + resolution: {integrity: sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==} 1076 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1077 + 1078 + is-number@7.0.0: 1079 + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1080 + engines: {node: '>=0.12.0'} 1081 + 1082 + is-path-inside@4.0.0: 1083 + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} 1084 + engines: {node: '>=12'} 1085 + 1086 + is-plain-object@2.0.4: 1087 + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} 1088 + engines: {node: '>=0.10.0'} 1089 + 1090 + is-potential-custom-element-name@1.0.1: 1091 + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} 1092 + 1093 + is-primitive@3.0.1: 1094 + resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} 1095 + engines: {node: '>=0.10.0'} 1096 + 1097 + is-relative@0.1.3: 1098 + resolution: {integrity: sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==} 1099 + engines: {node: '>=0.10.0'} 1100 + 1101 + is-unicode-supported@1.3.0: 1102 + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} 1103 + engines: {node: '>=12'} 1104 + 1105 + is-unicode-supported@2.1.0: 1106 + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} 1107 + engines: {node: '>=18'} 1108 + 1109 + is-wsl@2.2.0: 1110 + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} 1111 + engines: {node: '>=8'} 1112 + 1113 + is-wsl@3.1.0: 1114 + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} 1115 + engines: {node: '>=16'} 1116 + 1117 + isarray@1.0.0: 1118 + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1119 + 1120 + isexe@1.1.2: 1121 + resolution: {integrity: sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==} 1122 + 1123 + isexe@2.0.0: 1124 + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1125 + 1126 + iso-datestring-validator@2.2.2: 1127 + resolution: {integrity: sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==} 1128 + 1129 + isobject@3.0.1: 1130 + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} 1131 + engines: {node: '>=0.10.0'} 1132 + 1133 + jiti@2.6.1: 1134 + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 1135 + hasBin: true 1136 + 1137 + js-tokens@4.0.0: 1138 + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1139 + 1140 + js-tokens@9.0.1: 1141 + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} 1142 + 1143 + json-parse-even-better-errors@3.0.2: 1144 + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} 1145 + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1146 + 1147 + json5@2.2.3: 1148 + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1149 + engines: {node: '>=6'} 1150 + hasBin: true 1151 + 1152 + jsonfile@6.2.0: 1153 + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} 1154 + 1155 + jszip@3.10.1: 1156 + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} 1157 + 1158 + kleur@3.0.3: 1159 + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 1160 + engines: {node: '>=6'} 1161 + 1162 + ky@1.12.0: 1163 + resolution: {integrity: sha512-YRLmSUHCwOJRBMArtqMRLOmO7fewn3yOoui6aB8ERkRVXupa0UiaQaKbIXteMt4jUElhbdqTMsLFHs8APxxUoQ==} 1164 + engines: {node: '>=18'} 1165 + 1166 + latest-version@9.0.0: 1167 + resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} 1168 + engines: {node: '>=18'} 1169 + 1170 + lie@3.3.0: 1171 + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} 1172 + 1173 + lighthouse-logger@2.0.2: 1174 + resolution: {integrity: sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==} 1175 + 1176 + lines-and-columns@2.0.4: 1177 + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} 1178 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1179 + 1180 + linkedom@0.18.12: 1181 + resolution: {integrity: sha512-jalJsOwIKuQJSeTvsgzPe9iJzyfVaEJiEXl+25EkKevsULHvMJzpNqwvj1jOESWdmgKDiXObyjOYwlUqG7wo1Q==} 1182 + engines: {node: '>=16'} 1183 + peerDependencies: 1184 + canvas: '>= 2' 1185 + peerDependenciesMeta: 1186 + canvas: 1187 + optional: true 1188 + 1189 + listr2@8.3.3: 1190 + resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} 1191 + engines: {node: '>=18.0.0'} 1192 + 1193 + local-pkg@1.1.2: 1194 + resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==} 1195 + engines: {node: '>=14'} 1196 + 1197 + lodash.camelcase@4.3.0: 1198 + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} 1199 + 1200 + lodash.kebabcase@4.1.1: 1201 + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} 1202 + 1203 + lodash.merge@4.6.2: 1204 + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1205 + 1206 + lodash.snakecase@4.1.1: 1207 + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} 1208 + 1209 + log-symbols@5.1.0: 1210 + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} 1211 + engines: {node: '>=12'} 1212 + 1213 + log-symbols@6.0.0: 1214 + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} 1215 + engines: {node: '>=18'} 1216 + 1217 + log-update@6.1.0: 1218 + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} 1219 + engines: {node: '>=18'} 1220 + 1221 + magic-string@0.30.19: 1222 + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} 1223 + 1224 + magicast@0.3.5: 1225 + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} 1226 + 1227 + make-error@1.3.6: 1228 + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1229 + 1230 + many-keys-map@2.0.1: 1231 + resolution: {integrity: sha512-DHnZAD4phTbZ+qnJdjoNEVU1NecYoSdbOOoVmTDH46AuxDkEVh3MxTVpXq10GtcTC6mndN9dkv1rNfpjRcLnOw==} 1232 + 1233 + marky@1.3.0: 1234 + resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} 1235 + 1236 + merge2@1.4.1: 1237 + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1238 + engines: {node: '>= 8'} 1239 + 1240 + micromatch@4.0.8: 1241 + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1242 + engines: {node: '>=8.6'} 1243 + 1244 + mimic-fn@2.1.0: 1245 + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1246 + engines: {node: '>=6'} 1247 + 1248 + mimic-function@5.0.1: 1249 + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} 1250 + engines: {node: '>=18'} 1251 + 1252 + minimatch@10.0.3: 1253 + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} 1254 + engines: {node: 20 || >=22} 1255 + 1256 + minimatch@3.1.2: 1257 + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1258 + 1259 + minimist@1.2.8: 1260 + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1261 + 1262 + mlly@1.8.0: 1263 + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} 1264 + 1265 + ms@2.1.3: 1266 + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1267 + 1268 + multiformats@9.9.0: 1269 + resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} 1270 + 1271 + multimatch@6.0.0: 1272 + resolution: {integrity: sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==} 1273 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1274 + 1275 + mz@2.7.0: 1276 + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1277 + 1278 + nano-spawn@1.0.3: 1279 + resolution: {integrity: sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA==} 1280 + engines: {node: '>=20.17'} 1281 + 1282 + nanoid@3.3.11: 1283 + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1284 + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1285 + hasBin: true 1286 + 1287 + nanoid@5.1.6: 1288 + resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==} 1289 + engines: {node: ^18 || >=20} 1290 + hasBin: true 1291 + 1292 + node-fetch-native@1.6.7: 1293 + resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} 1294 + 1295 + node-forge@1.3.1: 1296 + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} 1297 + engines: {node: '>= 6.13.0'} 1298 + 1299 + node-notifier@10.0.1: 1300 + resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==} 1301 + 1302 + normalize-path@3.0.0: 1303 + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1304 + engines: {node: '>=0.10.0'} 1305 + 1306 + nth-check@2.1.1: 1307 + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 1308 + 1309 + nypm@0.6.2: 1310 + resolution: {integrity: sha512-7eM+hpOtrKrBDCh7Ypu2lJ9Z7PNZBdi/8AT3AX8xoCj43BBVHD0hPSTEvMtkMpfs8FCqBGhxB+uToIQimA111g==} 1311 + engines: {node: ^14.16.0 || >=16.10.0} 1312 + hasBin: true 1313 + 1314 + object-assign@4.1.1: 1315 + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1316 + engines: {node: '>=0.10.0'} 1317 + 1318 + ofetch@1.4.1: 1319 + resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==} 1320 + 1321 + ohash@2.0.11: 1322 + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} 1323 + 1324 + on-exit-leak-free@2.1.2: 1325 + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} 1326 + engines: {node: '>=14.0.0'} 1327 + 1328 + once@1.4.0: 1329 + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1330 + 1331 + onetime@5.1.2: 1332 + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1333 + engines: {node: '>=6'} 1334 + 1335 + onetime@7.0.0: 1336 + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} 1337 + engines: {node: '>=18'} 1338 + 1339 + open@10.2.0: 1340 + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} 1341 + engines: {node: '>=18'} 1342 + 1343 + open@8.4.2: 1344 + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} 1345 + engines: {node: '>=12'} 1346 + 1347 + ora@6.3.1: 1348 + resolution: {integrity: sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==} 1349 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1350 + 1351 + ora@8.2.0: 1352 + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} 1353 + engines: {node: '>=18'} 1354 + 1355 + os-shim@0.1.3: 1356 + resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} 1357 + engines: {node: '>= 0.4.0'} 1358 + 1359 + package-json@10.0.1: 1360 + resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} 1361 + engines: {node: '>=18'} 1362 + 1363 + pako@1.0.11: 1364 + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 1365 + 1366 + parse-json@7.1.1: 1367 + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} 1368 + engines: {node: '>=16'} 1369 + 1370 + parse5-htmlparser2-tree-adapter@6.0.1: 1371 + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} 1372 + 1373 + parse5@5.1.1: 1374 + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} 1375 + 1376 + parse5@6.0.1: 1377 + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} 1378 + 1379 + pathe@2.0.3: 1380 + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1381 + 1382 + pend@1.2.0: 1383 + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} 1384 + 1385 + perfect-debounce@1.0.0: 1386 + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} 1387 + 1388 + perfect-debounce@2.0.0: 1389 + resolution: {integrity: sha512-fkEH/OBiKrqqI/yIgjR92lMfs2K8105zt/VT6+7eTjNwisrsh47CeIED9z58zI7DfKdH3uHAn25ziRZn3kgAow==} 1390 + 1391 + picocolors@1.1.1: 1392 + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1393 + 1394 + picomatch@2.3.1: 1395 + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1396 + engines: {node: '>=8.6'} 1397 + 1398 + picomatch@4.0.3: 1399 + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 1400 + engines: {node: '>=12'} 1401 + 1402 + pino-abstract-transport@2.0.0: 1403 + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} 1404 + 1405 + pino-std-serializers@7.0.0: 1406 + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} 1407 + 1408 + pino@9.7.0: 1409 + resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==} 1410 + hasBin: true 1411 + 1412 + pkg-types@1.3.1: 1413 + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 1414 + 1415 + pkg-types@2.3.0: 1416 + resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==} 1417 + 1418 + postcss@8.5.6: 1419 + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 1420 + engines: {node: ^10 || ^12 || >=14} 1421 + 1422 + process-nextick-args@2.0.1: 1423 + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 1424 + 1425 + process-warning@5.0.0: 1426 + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} 1427 + 1428 + promise-toolbox@0.21.0: 1429 + resolution: {integrity: sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==} 1430 + engines: {node: '>=6'} 1431 + 1432 + prompts@2.4.2: 1433 + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 1434 + engines: {node: '>= 6'} 1435 + 1436 + proto-list@1.2.4: 1437 + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} 1438 + 1439 + publish-browser-extension@3.0.2: 1440 + resolution: {integrity: sha512-yZLPF/WyyaKYUHmurDcSMYpgZLqpUkx/4482bLpelHyRlyghjo3951pJXw/KunMnO6pdwWEZGr0AJnvlls2H8g==} 1441 + engines: {node: ^18.0.0 || >=20.0.0} 1442 + hasBin: true 1443 + 1444 + pump@3.0.3: 1445 + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} 1446 + 1447 + pupa@3.3.0: 1448 + resolution: {integrity: sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==} 1449 + engines: {node: '>=12.20'} 1450 + 1451 + quansync@0.2.11: 1452 + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} 1453 + 1454 + queue-microtask@1.2.3: 1455 + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1456 + 1457 + quick-format-unescaped@4.0.4: 1458 + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 1459 + 1460 + rc9@2.1.2: 1461 + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} 1462 + 1463 + rc@1.2.8: 1464 + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} 1465 + hasBin: true 1466 + 1467 + readable-stream@2.3.8: 1468 + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 1469 + 1470 + readable-stream@3.6.2: 1471 + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1472 + engines: {node: '>= 6'} 1473 + 1474 + readdirp@4.1.2: 1475 + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 1476 + engines: {node: '>= 14.18.0'} 1477 + 1478 + real-require@0.2.0: 1479 + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 1480 + engines: {node: '>= 12.13.0'} 1481 + 1482 + registry-auth-token@5.1.0: 1483 + resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} 1484 + engines: {node: '>=14'} 1485 + 1486 + registry-url@6.0.1: 1487 + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} 1488 + engines: {node: '>=12'} 1489 + 1490 + require-directory@2.1.1: 1491 + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1492 + engines: {node: '>=0.10.0'} 1493 + 1494 + restore-cursor@4.0.0: 1495 + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} 1496 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1497 + 1498 + restore-cursor@5.1.0: 1499 + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} 1500 + engines: {node: '>=18'} 1501 + 1502 + reusify@1.1.0: 1503 + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1504 + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1505 + 1506 + rfdc@1.4.1: 1507 + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 1508 + 1509 + rollup@4.52.5: 1510 + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} 1511 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1512 + hasBin: true 1513 + 1514 + run-applescript@7.1.0: 1515 + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} 1516 + engines: {node: '>=18'} 1517 + 1518 + run-parallel@1.2.0: 1519 + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1520 + 1521 + safe-buffer@5.1.2: 1522 + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1523 + 1524 + safe-buffer@5.2.1: 1525 + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1526 + 1527 + safe-stable-stringify@2.5.0: 1528 + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} 1529 + engines: {node: '>=10'} 1530 + 1531 + sax@1.4.1: 1532 + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} 1533 + 1534 + scule@1.3.0: 1535 + resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==} 1536 + 1537 + semver@7.7.3: 1538 + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} 1539 + engines: {node: '>=10'} 1540 + hasBin: true 1541 + 1542 + set-value@4.1.0: 1543 + resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} 1544 + engines: {node: '>=11.0'} 1545 + 1546 + setimmediate@1.0.5: 1547 + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} 1548 + 1549 + shell-quote@1.7.3: 1550 + resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==} 1551 + 1552 + shellwords@0.1.1: 1553 + resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} 1554 + 1555 + signal-exit@3.0.7: 1556 + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1557 + 1558 + signal-exit@4.1.0: 1559 + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1560 + engines: {node: '>=14'} 1561 + 1562 + sisteransi@1.0.5: 1563 + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 1564 + 1565 + slice-ansi@5.0.0: 1566 + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 1567 + engines: {node: '>=12'} 1568 + 1569 + slice-ansi@7.1.2: 1570 + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} 1571 + engines: {node: '>=18'} 1572 + 1573 + sonic-boom@4.2.0: 1574 + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} 1575 + 1576 + source-map-js@1.2.1: 1577 + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1578 + engines: {node: '>=0.10.0'} 1579 + 1580 + source-map-support@0.5.21: 1581 + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1582 + 1583 + source-map@0.6.1: 1584 + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1585 + engines: {node: '>=0.10.0'} 1586 + 1587 + source-map@0.7.6: 1588 + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} 1589 + engines: {node: '>= 12'} 1590 + 1591 + spawn-sync@1.0.15: 1592 + resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} 1593 + 1594 + split2@4.2.0: 1595 + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 1596 + engines: {node: '>= 10.x'} 1597 + 1598 + split@1.0.1: 1599 + resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} 1600 + 1601 + stdin-discarder@0.1.0: 1602 + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} 1603 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1604 + 1605 + stdin-discarder@0.2.2: 1606 + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} 1607 + engines: {node: '>=18'} 1608 + 1609 + string-width@4.2.3: 1610 + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1611 + engines: {node: '>=8'} 1612 + 1613 + string-width@7.2.0: 1614 + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 1615 + engines: {node: '>=18'} 1616 + 1617 + string_decoder@1.1.1: 1618 + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 1619 + 1620 + string_decoder@1.3.0: 1621 + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1622 + 1623 + strip-ansi@6.0.1: 1624 + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1625 + engines: {node: '>=8'} 1626 + 1627 + strip-ansi@7.1.2: 1628 + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} 1629 + engines: {node: '>=12'} 1630 + 1631 + strip-bom@5.0.0: 1632 + resolution: {integrity: sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==} 1633 + engines: {node: '>=12'} 1634 + 1635 + strip-json-comments@2.0.1: 1636 + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} 1637 + engines: {node: '>=0.10.0'} 1638 + 1639 + strip-json-comments@5.0.2: 1640 + resolution: {integrity: sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==} 1641 + engines: {node: '>=14.16'} 1642 + 1643 + strip-literal@3.1.0: 1644 + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} 1645 + 1646 + stubborn-fs@1.2.5: 1647 + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} 1648 + 1649 + supports-color@7.2.0: 1650 + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1651 + engines: {node: '>=8'} 1652 + 1653 + thenify-all@1.6.0: 1654 + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1655 + engines: {node: '>=0.8'} 1656 + 1657 + thenify@3.3.1: 1658 + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1659 + 1660 + thread-stream@3.1.0: 1661 + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} 1662 + 1663 + through@2.3.8: 1664 + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} 1665 + 1666 + tinyexec@1.0.1: 1667 + resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} 1668 + 1669 + tinyglobby@0.2.15: 1670 + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 1671 + engines: {node: '>=12.0.0'} 1672 + 1673 + tlds@1.260.0: 1674 + resolution: {integrity: sha512-78+28EWBhCEE7qlyaHA9OR3IPvbCLiDh3Ckla593TksfFc9vfTsgvH7eS+dr3o9qr31gwGbogcI16yN91PoRjQ==} 1675 + hasBin: true 1676 + 1677 + tmp@0.2.5: 1678 + resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} 1679 + engines: {node: '>=14.14'} 1680 + 1681 + to-regex-range@5.0.1: 1682 + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1683 + engines: {node: '>=8.0'} 1684 + 1685 + tslib@2.8.1: 1686 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1687 + 1688 + type-fest@3.13.1: 1689 + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} 1690 + engines: {node: '>=14.16'} 1691 + 1692 + type-fest@4.41.0: 1693 + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} 1694 + engines: {node: '>=16'} 1695 + 1696 + typedarray@0.0.6: 1697 + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} 1698 + 1699 + ufo@1.6.1: 1700 + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} 1701 + 1702 + uhyphen@0.2.0: 1703 + resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==} 1704 + 1705 + uint8arrays@3.0.0: 1706 + resolution: {integrity: sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==} 1707 + 1708 + undici-types@7.14.0: 1709 + resolution: {integrity: sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==} 1710 + 1711 + unimport@5.5.0: 1712 + resolution: {integrity: sha512-/JpWMG9s1nBSlXJAQ8EREFTFy3oy6USFd8T6AoBaw1q2GGcF4R9yp3ofg32UODZlYEO5VD0EWE1RpI9XDWyPYg==} 1713 + engines: {node: '>=18.12.0'} 1714 + 1715 + universalify@2.0.1: 1716 + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 1717 + engines: {node: '>= 10.0.0'} 1718 + 1719 + unplugin-utils@0.3.1: 1720 + resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==} 1721 + engines: {node: '>=20.19.0'} 1722 + 1723 + unplugin@2.3.10: 1724 + resolution: {integrity: sha512-6NCPkv1ClwH+/BGE9QeoTIl09nuiAt0gS28nn1PvYXsGKRwM2TCbFA2QiilmehPDTXIe684k4rZI1yl3A1PCUw==} 1725 + engines: {node: '>=18.12.0'} 1726 + 1727 + update-notifier@7.3.1: 1728 + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} 1729 + engines: {node: '>=18'} 1730 + 1731 + util-deprecate@1.0.2: 1732 + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1733 + 1734 + uuid@8.3.2: 1735 + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 1736 + hasBin: true 1737 + 1738 + vite-node@3.2.4: 1739 + resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} 1740 + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1741 + hasBin: true 1742 + 1743 + vite@7.1.11: 1744 + resolution: {integrity: sha512-uzcxnSDVjAopEUjljkWh8EIrg6tlzrjFUfMcR1EVsRDGwf/ccef0qQPRyOrROwhrTDaApueq+ja+KLPlzR/zdg==} 1745 + engines: {node: ^20.19.0 || >=22.12.0} 1746 + hasBin: true 1747 + peerDependencies: 1748 + '@types/node': ^20.19.0 || >=22.12.0 1749 + jiti: '>=1.21.0' 1750 + less: ^4.0.0 1751 + lightningcss: ^1.21.0 1752 + sass: ^1.70.0 1753 + sass-embedded: ^1.70.0 1754 + stylus: '>=0.54.8' 1755 + sugarss: ^5.0.0 1756 + terser: ^5.16.0 1757 + tsx: ^4.8.1 1758 + yaml: ^2.4.2 1759 + peerDependenciesMeta: 1760 + '@types/node': 1761 + optional: true 1762 + jiti: 1763 + optional: true 1764 + less: 1765 + optional: true 1766 + lightningcss: 1767 + optional: true 1768 + sass: 1769 + optional: true 1770 + sass-embedded: 1771 + optional: true 1772 + stylus: 1773 + optional: true 1774 + sugarss: 1775 + optional: true 1776 + terser: 1777 + optional: true 1778 + tsx: 1779 + optional: true 1780 + yaml: 1781 + optional: true 1782 + 1783 + watchpack@2.4.4: 1784 + resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} 1785 + engines: {node: '>=10.13.0'} 1786 + 1787 + wcwidth@1.0.1: 1788 + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} 1789 + 1790 + web-ext-run@0.2.4: 1791 + resolution: {integrity: sha512-rQicL7OwuqWdQWI33JkSXKcp7cuv1mJG8u3jRQwx/8aDsmhbTHs9ZRmNYOL+LX0wX8edIEQX8jj4bB60GoXtKA==} 1792 + engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1793 + 1794 + webpack-virtual-modules@0.6.2: 1795 + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} 1796 + 1797 + when-exit@2.1.4: 1798 + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} 1799 + 1800 + when@3.7.7: 1801 + resolution: {integrity: sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==} 1802 + 1803 + which@1.2.4: 1804 + resolution: {integrity: sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==} 1805 + hasBin: true 1806 + 1807 + which@2.0.2: 1808 + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1809 + engines: {node: '>= 8'} 1810 + hasBin: true 1811 + 1812 + widest-line@5.0.0: 1813 + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} 1814 + engines: {node: '>=18'} 1815 + 1816 + winreg@0.0.12: 1817 + resolution: {integrity: sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==} 1818 + 1819 + wrap-ansi@7.0.0: 1820 + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1821 + engines: {node: '>=10'} 1822 + 1823 + wrap-ansi@9.0.2: 1824 + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} 1825 + engines: {node: '>=18'} 1826 + 1827 + wrappy@1.0.2: 1828 + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1829 + 1830 + wsl-utils@0.1.0: 1831 + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} 1832 + engines: {node: '>=18'} 1833 + 1834 + wxt@0.20.9: 1835 + resolution: {integrity: sha512-mfde8xptbTC5+PcvP2T4rvqIVN6zfGUdoQwRXTu/mfpLtvmnChMZPCovr2oTxofnGSTkY2ZPPt0H8kTbPRhWrw==} 1836 + hasBin: true 1837 + 1838 + xdg-basedir@5.1.0: 1839 + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} 1840 + engines: {node: '>=12'} 1841 + 1842 + xml2js@0.6.2: 1843 + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} 1844 + engines: {node: '>=4.0.0'} 1845 + 1846 + xmlbuilder@11.0.1: 1847 + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} 1848 + engines: {node: '>=4.0'} 1849 + 1850 + y18n@5.0.8: 1851 + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1852 + engines: {node: '>=10'} 1853 + 1854 + yargs-parser@20.2.9: 1855 + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 1856 + engines: {node: '>=10'} 1857 + 1858 + yargs-parser@21.1.1: 1859 + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 1860 + engines: {node: '>=12'} 1861 + 1862 + yargs@16.2.0: 1863 + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 1864 + engines: {node: '>=10'} 1865 + 1866 + yargs@17.7.2: 1867 + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 1868 + engines: {node: '>=12'} 1869 + 1870 + yauzl@2.10.0: 1871 + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} 1872 + 1873 + zip-dir@2.0.0: 1874 + resolution: {integrity: sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==} 1875 + 1876 + zod@3.25.76: 1877 + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} 1878 + 1879 + snapshots: 1880 + 1881 + '@1natsu/wait-element@4.1.2': 1882 + dependencies: 1883 + defu: 6.1.4 1884 + many-keys-map: 2.0.1 1885 + 1886 + '@aklinker1/rollup-plugin-visualizer@5.12.0(rollup@4.52.5)': 1887 + dependencies: 1888 + open: 8.4.2 1889 + picomatch: 2.3.1 1890 + source-map: 0.7.6 1891 + yargs: 17.7.2 1892 + optionalDependencies: 1893 + rollup: 4.52.5 1894 + 1895 + '@atcute/client@4.0.5': 1896 + dependencies: 1897 + '@atcute/identity': 1.1.1 1898 + '@atcute/lexicons': 1.2.2 1899 + 1900 + '@atcute/identity@1.1.1': 1901 + dependencies: 1902 + '@atcute/lexicons': 1.2.2 1903 + '@badrap/valita': 0.4.6 1904 + 1905 + '@atcute/lexicons@1.2.2': 1906 + dependencies: 1907 + '@standard-schema/spec': 1.0.0 1908 + esm-env: 1.2.2 1909 + 1910 + '@atcute/multibase@1.1.6': 1911 + dependencies: 1912 + '@atcute/uint8array': 1.0.5 1913 + 1914 + '@atcute/oauth-browser-client@1.0.27': 1915 + dependencies: 1916 + '@atcute/client': 4.0.5 1917 + '@atcute/identity': 1.1.1 1918 + '@atcute/lexicons': 1.2.2 1919 + '@atcute/multibase': 1.1.6 1920 + '@atcute/uint8array': 1.0.5 1921 + nanoid: 5.1.6 1922 + 1923 + '@atcute/uint8array@1.0.5': {} 1924 + 1925 + '@atproto/api@0.17.3': 1926 + dependencies: 1927 + '@atproto/common-web': 0.4.3 1928 + '@atproto/lexicon': 0.5.1 1929 + '@atproto/syntax': 0.4.1 1930 + '@atproto/xrpc': 0.7.5 1931 + await-lock: 2.2.2 1932 + multiformats: 9.9.0 1933 + tlds: 1.260.0 1934 + zod: 3.25.76 1935 + 1936 + '@atproto/common-web@0.4.3': 1937 + dependencies: 1938 + graphemer: 1.4.0 1939 + multiformats: 9.9.0 1940 + uint8arrays: 3.0.0 1941 + zod: 3.25.76 1942 + 1943 + '@atproto/lexicon@0.5.1': 1944 + dependencies: 1945 + '@atproto/common-web': 0.4.3 1946 + '@atproto/syntax': 0.4.1 1947 + iso-datestring-validator: 2.2.2 1948 + multiformats: 9.9.0 1949 + zod: 3.25.76 1950 + 1951 + '@atproto/syntax@0.4.1': {} 1952 + 1953 + '@atproto/xrpc@0.7.5': 1954 + dependencies: 1955 + '@atproto/lexicon': 0.5.1 1956 + zod: 3.25.76 1957 + 1958 + '@babel/code-frame@7.27.1': 1959 + dependencies: 1960 + '@babel/helper-validator-identifier': 7.27.1 1961 + js-tokens: 4.0.0 1962 + picocolors: 1.1.1 1963 + 1964 + '@babel/helper-string-parser@7.27.1': {} 1965 + 1966 + '@babel/helper-validator-identifier@7.27.1': {} 1967 + 1968 + '@babel/parser@7.28.4': 1969 + dependencies: 1970 + '@babel/types': 7.28.4 1971 + 1972 + '@babel/runtime@7.28.2': {} 1973 + 1974 + '@babel/types@7.28.4': 1975 + dependencies: 1976 + '@babel/helper-string-parser': 7.27.1 1977 + '@babel/helper-validator-identifier': 7.27.1 1978 + 1979 + '@badrap/valita@0.4.6': {} 1980 + 1981 + '@devicefarmer/adbkit-logcat@2.1.3': {} 1982 + 1983 + '@devicefarmer/adbkit-monkey@1.2.1': {} 1984 + 1985 + '@devicefarmer/adbkit@3.3.8': 1986 + dependencies: 1987 + '@devicefarmer/adbkit-logcat': 2.1.3 1988 + '@devicefarmer/adbkit-monkey': 1.2.1 1989 + bluebird: 3.7.2 1990 + commander: 9.5.0 1991 + debug: 4.3.7 1992 + node-forge: 1.3.1 1993 + split: 1.0.1 1994 + transitivePeerDependencies: 1995 + - supports-color 1996 + 1997 + '@esbuild/aix-ppc64@0.25.11': 1998 + optional: true 1999 + 2000 + '@esbuild/android-arm64@0.25.11': 2001 + optional: true 2002 + 2003 + '@esbuild/android-arm@0.25.11': 2004 + optional: true 2005 + 2006 + '@esbuild/android-x64@0.25.11': 2007 + optional: true 2008 + 2009 + '@esbuild/darwin-arm64@0.25.11': 2010 + optional: true 2011 + 2012 + '@esbuild/darwin-x64@0.25.11': 2013 + optional: true 2014 + 2015 + '@esbuild/freebsd-arm64@0.25.11': 2016 + optional: true 2017 + 2018 + '@esbuild/freebsd-x64@0.25.11': 2019 + optional: true 2020 + 2021 + '@esbuild/linux-arm64@0.25.11': 2022 + optional: true 2023 + 2024 + '@esbuild/linux-arm@0.25.11': 2025 + optional: true 2026 + 2027 + '@esbuild/linux-ia32@0.25.11': 2028 + optional: true 2029 + 2030 + '@esbuild/linux-loong64@0.25.11': 2031 + optional: true 2032 + 2033 + '@esbuild/linux-mips64el@0.25.11': 2034 + optional: true 2035 + 2036 + '@esbuild/linux-ppc64@0.25.11': 2037 + optional: true 2038 + 2039 + '@esbuild/linux-riscv64@0.25.11': 2040 + optional: true 2041 + 2042 + '@esbuild/linux-s390x@0.25.11': 2043 + optional: true 2044 + 2045 + '@esbuild/linux-x64@0.25.11': 2046 + optional: true 2047 + 2048 + '@esbuild/netbsd-arm64@0.25.11': 2049 + optional: true 2050 + 2051 + '@esbuild/netbsd-x64@0.25.11': 2052 + optional: true 2053 + 2054 + '@esbuild/openbsd-arm64@0.25.11': 2055 + optional: true 2056 + 2057 + '@esbuild/openbsd-x64@0.25.11': 2058 + optional: true 2059 + 2060 + '@esbuild/openharmony-arm64@0.25.11': 2061 + optional: true 2062 + 2063 + '@esbuild/sunos-x64@0.25.11': 2064 + optional: true 2065 + 2066 + '@esbuild/win32-arm64@0.25.11': 2067 + optional: true 2068 + 2069 + '@esbuild/win32-ia32@0.25.11': 2070 + optional: true 2071 + 2072 + '@esbuild/win32-x64@0.25.11': 2073 + optional: true 2074 + 2075 + '@isaacs/balanced-match@4.0.1': {} 2076 + 2077 + '@isaacs/brace-expansion@5.0.0': 2078 + dependencies: 2079 + '@isaacs/balanced-match': 4.0.1 2080 + 2081 + '@jridgewell/gen-mapping@0.3.13': 2082 + dependencies: 2083 + '@jridgewell/sourcemap-codec': 1.5.5 2084 + '@jridgewell/trace-mapping': 0.3.31 2085 + 2086 + '@jridgewell/remapping@2.3.5': 2087 + dependencies: 2088 + '@jridgewell/gen-mapping': 0.3.13 2089 + '@jridgewell/trace-mapping': 0.3.31 2090 + 2091 + '@jridgewell/resolve-uri@3.1.2': {} 2092 + 2093 + '@jridgewell/sourcemap-codec@1.5.5': {} 2094 + 2095 + '@jridgewell/trace-mapping@0.3.31': 2096 + dependencies: 2097 + '@jridgewell/resolve-uri': 3.1.2 2098 + '@jridgewell/sourcemap-codec': 1.5.5 2099 + 2100 + '@nodelib/fs.scandir@2.1.5': 2101 + dependencies: 2102 + '@nodelib/fs.stat': 2.0.5 2103 + run-parallel: 1.2.0 2104 + 2105 + '@nodelib/fs.stat@2.0.5': {} 2106 + 2107 + '@nodelib/fs.walk@1.2.8': 2108 + dependencies: 2109 + '@nodelib/fs.scandir': 2.1.5 2110 + fastq: 1.19.1 2111 + 2112 + '@pnpm/config.env-replace@1.1.0': {} 2113 + 2114 + '@pnpm/network.ca-file@1.0.2': 2115 + dependencies: 2116 + graceful-fs: 4.2.10 2117 + 2118 + '@pnpm/npm-conf@2.3.1': 2119 + dependencies: 2120 + '@pnpm/config.env-replace': 1.1.0 2121 + '@pnpm/network.ca-file': 1.0.2 2122 + config-chain: 1.1.13 2123 + 2124 + '@rollup/rollup-android-arm-eabi@4.52.5': 2125 + optional: true 2126 + 2127 + '@rollup/rollup-android-arm64@4.52.5': 2128 + optional: true 2129 + 2130 + '@rollup/rollup-darwin-arm64@4.52.5': 2131 + optional: true 2132 + 2133 + '@rollup/rollup-darwin-x64@4.52.5': 2134 + optional: true 2135 + 2136 + '@rollup/rollup-freebsd-arm64@4.52.5': 2137 + optional: true 2138 + 2139 + '@rollup/rollup-freebsd-x64@4.52.5': 2140 + optional: true 2141 + 2142 + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': 2143 + optional: true 2144 + 2145 + '@rollup/rollup-linux-arm-musleabihf@4.52.5': 2146 + optional: true 2147 + 2148 + '@rollup/rollup-linux-arm64-gnu@4.52.5': 2149 + optional: true 2150 + 2151 + '@rollup/rollup-linux-arm64-musl@4.52.5': 2152 + optional: true 2153 + 2154 + '@rollup/rollup-linux-loong64-gnu@4.52.5': 2155 + optional: true 2156 + 2157 + '@rollup/rollup-linux-ppc64-gnu@4.52.5': 2158 + optional: true 2159 + 2160 + '@rollup/rollup-linux-riscv64-gnu@4.52.5': 2161 + optional: true 2162 + 2163 + '@rollup/rollup-linux-riscv64-musl@4.52.5': 2164 + optional: true 2165 + 2166 + '@rollup/rollup-linux-s390x-gnu@4.52.5': 2167 + optional: true 2168 + 2169 + '@rollup/rollup-linux-x64-gnu@4.52.5': 2170 + optional: true 2171 + 2172 + '@rollup/rollup-linux-x64-musl@4.52.5': 2173 + optional: true 2174 + 2175 + '@rollup/rollup-openharmony-arm64@4.52.5': 2176 + optional: true 2177 + 2178 + '@rollup/rollup-win32-arm64-msvc@4.52.5': 2179 + optional: true 2180 + 2181 + '@rollup/rollup-win32-ia32-msvc@4.52.5': 2182 + optional: true 2183 + 2184 + '@rollup/rollup-win32-x64-gnu@4.52.5': 2185 + optional: true 2186 + 2187 + '@rollup/rollup-win32-x64-msvc@4.52.5': 2188 + optional: true 2189 + 2190 + '@standard-schema/spec@1.0.0': {} 2191 + 2192 + '@types/estree@1.0.8': {} 2193 + 2194 + '@types/filesystem@0.0.36': 2195 + dependencies: 2196 + '@types/filewriter': 0.0.33 2197 + 2198 + '@types/filewriter@0.0.33': {} 2199 + 2200 + '@types/har-format@1.2.16': {} 2201 + 2202 + '@types/minimatch@3.0.5': {} 2203 + 2204 + '@types/node@24.8.1': 2205 + dependencies: 2206 + undici-types: 7.14.0 2207 + 2208 + '@types/yauzl@2.10.3': 2209 + dependencies: 2210 + '@types/node': 24.8.1 2211 + optional: true 2212 + 2213 + '@webext-core/fake-browser@1.3.2': 2214 + dependencies: 2215 + lodash.merge: 4.6.2 2216 + 2217 + '@webext-core/isolated-element@1.1.2': 2218 + dependencies: 2219 + is-potential-custom-element-name: 1.0.1 2220 + 2221 + '@webext-core/match-patterns@1.0.3': {} 2222 + 2223 + '@wxt-dev/browser@0.1.4': 2224 + dependencies: 2225 + '@types/filesystem': 0.0.36 2226 + '@types/har-format': 1.2.16 2227 + 2228 + '@wxt-dev/storage@1.2.0': 2229 + dependencies: 2230 + '@wxt-dev/browser': 0.1.4 2231 + async-mutex: 0.5.0 2232 + dequal: 2.0.3 2233 + 2234 + acorn@8.15.0: {} 2235 + 2236 + adm-zip@0.5.16: {} 2237 + 2238 + ancestors@0.0.3: {} 2239 + 2240 + ansi-align@3.0.1: 2241 + dependencies: 2242 + string-width: 4.2.3 2243 + 2244 + ansi-escapes@7.1.1: 2245 + dependencies: 2246 + environment: 1.1.0 2247 + 2248 + ansi-regex@5.0.1: {} 2249 + 2250 + ansi-regex@6.2.2: {} 2251 + 2252 + ansi-styles@4.3.0: 2253 + dependencies: 2254 + color-convert: 2.0.1 2255 + 2256 + ansi-styles@6.2.3: {} 2257 + 2258 + any-promise@1.3.0: {} 2259 + 2260 + array-differ@4.0.0: {} 2261 + 2262 + array-union@3.0.1: {} 2263 + 2264 + async-mutex@0.5.0: 2265 + dependencies: 2266 + tslib: 2.8.1 2267 + 2268 + async@3.2.6: {} 2269 + 2270 + atomic-sleep@1.0.0: {} 2271 + 2272 + atomically@2.0.3: 2273 + dependencies: 2274 + stubborn-fs: 1.2.5 2275 + when-exit: 2.1.4 2276 + 2277 + await-lock@2.2.2: {} 2278 + 2279 + balanced-match@1.0.2: {} 2280 + 2281 + base64-js@1.5.1: {} 2282 + 2283 + bl@5.1.0: 2284 + dependencies: 2285 + buffer: 6.0.3 2286 + inherits: 2.0.4 2287 + readable-stream: 3.6.2 2288 + 2289 + bluebird@3.7.2: {} 2290 + 2291 + boolbase@1.0.0: {} 2292 + 2293 + boxen@8.0.1: 2294 + dependencies: 2295 + ansi-align: 3.0.1 2296 + camelcase: 8.0.0 2297 + chalk: 5.6.2 2298 + cli-boxes: 3.0.0 2299 + string-width: 7.2.0 2300 + type-fest: 4.41.0 2301 + widest-line: 5.0.0 2302 + wrap-ansi: 9.0.2 2303 + 2304 + brace-expansion@1.1.12: 2305 + dependencies: 2306 + balanced-match: 1.0.2 2307 + concat-map: 0.0.1 2308 + 2309 + braces@3.0.3: 2310 + dependencies: 2311 + fill-range: 7.1.1 2312 + 2313 + buffer-crc32@0.2.13: {} 2314 + 2315 + buffer-from@1.1.2: {} 2316 + 2317 + buffer@6.0.3: 2318 + dependencies: 2319 + base64-js: 1.5.1 2320 + ieee754: 1.2.1 2321 + 2322 + bundle-name@4.1.0: 2323 + dependencies: 2324 + run-applescript: 7.1.0 2325 + 2326 + c12@3.3.1(magicast@0.3.5): 2327 + dependencies: 2328 + chokidar: 4.0.3 2329 + confbox: 0.2.2 2330 + defu: 6.1.4 2331 + dotenv: 17.2.3 2332 + exsolve: 1.0.7 2333 + giget: 2.0.0 2334 + jiti: 2.6.1 2335 + ohash: 2.0.11 2336 + pathe: 2.0.3 2337 + perfect-debounce: 2.0.0 2338 + pkg-types: 2.3.0 2339 + rc9: 2.1.2 2340 + optionalDependencies: 2341 + magicast: 0.3.5 2342 + 2343 + cac@6.7.14: {} 2344 + 2345 + camelcase@8.0.0: {} 2346 + 2347 + chalk@4.1.2: 2348 + dependencies: 2349 + ansi-styles: 4.3.0 2350 + supports-color: 7.2.0 2351 + 2352 + chalk@5.6.2: {} 2353 + 2354 + chokidar@4.0.3: 2355 + dependencies: 2356 + readdirp: 4.1.2 2357 + 2358 + chrome-launcher@1.2.0: 2359 + dependencies: 2360 + '@types/node': 24.8.1 2361 + escape-string-regexp: 4.0.0 2362 + is-wsl: 2.2.0 2363 + lighthouse-logger: 2.0.2 2364 + transitivePeerDependencies: 2365 + - supports-color 2366 + 2367 + ci-info@4.3.1: {} 2368 + 2369 + citty@0.1.6: 2370 + dependencies: 2371 + consola: 3.4.2 2372 + 2373 + cli-boxes@3.0.0: {} 2374 + 2375 + cli-cursor@4.0.0: 2376 + dependencies: 2377 + restore-cursor: 4.0.0 2378 + 2379 + cli-cursor@5.0.0: 2380 + dependencies: 2381 + restore-cursor: 5.1.0 2382 + 2383 + cli-highlight@2.1.11: 2384 + dependencies: 2385 + chalk: 4.1.2 2386 + highlight.js: 10.7.3 2387 + mz: 2.7.0 2388 + parse5: 5.1.1 2389 + parse5-htmlparser2-tree-adapter: 6.0.1 2390 + yargs: 16.2.0 2391 + 2392 + cli-spinners@2.9.2: {} 2393 + 2394 + cli-truncate@4.0.0: 2395 + dependencies: 2396 + slice-ansi: 5.0.0 2397 + string-width: 7.2.0 2398 + 2399 + cliui@7.0.4: 2400 + dependencies: 2401 + string-width: 4.2.3 2402 + strip-ansi: 6.0.1 2403 + wrap-ansi: 7.0.0 2404 + 2405 + cliui@8.0.1: 2406 + dependencies: 2407 + string-width: 4.2.3 2408 + strip-ansi: 6.0.1 2409 + wrap-ansi: 7.0.0 2410 + 2411 + clone@1.0.4: {} 2412 + 2413 + color-convert@2.0.1: 2414 + dependencies: 2415 + color-name: 1.1.4 2416 + 2417 + color-name@1.1.4: {} 2418 + 2419 + colorette@2.0.20: {} 2420 + 2421 + commander@2.9.0: 2422 + dependencies: 2423 + graceful-readlink: 1.0.1 2424 + 2425 + commander@9.5.0: {} 2426 + 2427 + concat-map@0.0.1: {} 2428 + 2429 + concat-stream@1.6.2: 2430 + dependencies: 2431 + buffer-from: 1.1.2 2432 + inherits: 2.0.4 2433 + readable-stream: 2.3.8 2434 + typedarray: 0.0.6 2435 + 2436 + confbox@0.1.8: {} 2437 + 2438 + confbox@0.2.2: {} 2439 + 2440 + config-chain@1.1.13: 2441 + dependencies: 2442 + ini: 1.3.8 2443 + proto-list: 1.2.4 2444 + 2445 + configstore@7.1.0: 2446 + dependencies: 2447 + atomically: 2.0.3 2448 + dot-prop: 9.0.0 2449 + graceful-fs: 4.2.11 2450 + xdg-basedir: 5.1.0 2451 + 2452 + consola@3.4.2: {} 2453 + 2454 + core-util-is@1.0.3: {} 2455 + 2456 + css-select@5.2.2: 2457 + dependencies: 2458 + boolbase: 1.0.0 2459 + css-what: 6.2.2 2460 + domhandler: 5.0.3 2461 + domutils: 3.2.2 2462 + nth-check: 2.1.1 2463 + 2464 + css-what@6.2.2: {} 2465 + 2466 + cssom@0.5.0: {} 2467 + 2468 + debounce@1.2.1: {} 2469 + 2470 + debug@4.3.7: 2471 + dependencies: 2472 + ms: 2.1.3 2473 + 2474 + debug@4.4.3: 2475 + dependencies: 2476 + ms: 2.1.3 2477 + 2478 + deep-extend@0.6.0: {} 2479 + 2480 + default-browser-id@5.0.0: {} 2481 + 2482 + default-browser@5.2.1: 2483 + dependencies: 2484 + bundle-name: 4.1.0 2485 + default-browser-id: 5.0.0 2486 + 2487 + defaults@1.0.4: 2488 + dependencies: 2489 + clone: 1.0.4 2490 + 2491 + define-lazy-prop@2.0.0: {} 2492 + 2493 + define-lazy-prop@3.0.0: {} 2494 + 2495 + defu@6.1.4: {} 2496 + 2497 + dequal@2.0.3: {} 2498 + 2499 + destr@2.0.5: {} 2500 + 2501 + diff-match-patch@1.0.5: {} 2502 + 2503 + dom-anchor-text-position@4.0.0: 2504 + dependencies: 2505 + dom-node-iterator: 3.5.3 2506 + dom-seek: 4.0.3 2507 + 2508 + dom-anchor-text-position@5.0.0: 2509 + dependencies: 2510 + dom-seek: 5.1.1 2511 + 2512 + dom-anchor-text-quote@4.0.2: 2513 + dependencies: 2514 + diff-match-patch: 1.0.5 2515 + dom-anchor-text-position: 4.0.0 2516 + 2517 + dom-node-iterator@3.5.3: {} 2518 + 2519 + dom-seek@4.0.3: 2520 + dependencies: 2521 + ancestors: 0.0.3 2522 + index-of: 0.2.0 2523 + 2524 + dom-seek@5.1.1: {} 2525 + 2526 + dom-serializer@2.0.0: 2527 + dependencies: 2528 + domelementtype: 2.3.0 2529 + domhandler: 5.0.3 2530 + entities: 4.5.0 2531 + 2532 + domelementtype@2.3.0: {} 2533 + 2534 + domhandler@5.0.3: 2535 + dependencies: 2536 + domelementtype: 2.3.0 2537 + 2538 + domutils@3.2.2: 2539 + dependencies: 2540 + dom-serializer: 2.0.0 2541 + domelementtype: 2.3.0 2542 + domhandler: 5.0.3 2543 + 2544 + dot-prop@9.0.0: 2545 + dependencies: 2546 + type-fest: 4.41.0 2547 + 2548 + dotenv-expand@12.0.3: 2549 + dependencies: 2550 + dotenv: 16.6.1 2551 + 2552 + dotenv@16.6.1: {} 2553 + 2554 + dotenv@17.2.3: {} 2555 + 2556 + emoji-regex@10.6.0: {} 2557 + 2558 + emoji-regex@8.0.0: {} 2559 + 2560 + end-of-stream@1.4.5: 2561 + dependencies: 2562 + once: 1.4.0 2563 + 2564 + entities@4.5.0: {} 2565 + 2566 + entities@6.0.1: {} 2567 + 2568 + environment@1.1.0: {} 2569 + 2570 + error-ex@1.3.4: 2571 + dependencies: 2572 + is-arrayish: 0.2.1 2573 + 2574 + es-module-lexer@1.7.0: {} 2575 + 2576 + es6-error@4.1.1: {} 2577 + 2578 + esbuild@0.25.11: 2579 + optionalDependencies: 2580 + '@esbuild/aix-ppc64': 0.25.11 2581 + '@esbuild/android-arm': 0.25.11 2582 + '@esbuild/android-arm64': 0.25.11 2583 + '@esbuild/android-x64': 0.25.11 2584 + '@esbuild/darwin-arm64': 0.25.11 2585 + '@esbuild/darwin-x64': 0.25.11 2586 + '@esbuild/freebsd-arm64': 0.25.11 2587 + '@esbuild/freebsd-x64': 0.25.11 2588 + '@esbuild/linux-arm': 0.25.11 2589 + '@esbuild/linux-arm64': 0.25.11 2590 + '@esbuild/linux-ia32': 0.25.11 2591 + '@esbuild/linux-loong64': 0.25.11 2592 + '@esbuild/linux-mips64el': 0.25.11 2593 + '@esbuild/linux-ppc64': 0.25.11 2594 + '@esbuild/linux-riscv64': 0.25.11 2595 + '@esbuild/linux-s390x': 0.25.11 2596 + '@esbuild/linux-x64': 0.25.11 2597 + '@esbuild/netbsd-arm64': 0.25.11 2598 + '@esbuild/netbsd-x64': 0.25.11 2599 + '@esbuild/openbsd-arm64': 0.25.11 2600 + '@esbuild/openbsd-x64': 0.25.11 2601 + '@esbuild/openharmony-arm64': 0.25.11 2602 + '@esbuild/sunos-x64': 0.25.11 2603 + '@esbuild/win32-arm64': 0.25.11 2604 + '@esbuild/win32-ia32': 0.25.11 2605 + '@esbuild/win32-x64': 0.25.11 2606 + 2607 + escalade@3.2.0: {} 2608 + 2609 + escape-goat@4.0.0: {} 2610 + 2611 + escape-string-regexp@4.0.0: {} 2612 + 2613 + escape-string-regexp@5.0.0: {} 2614 + 2615 + esm-env@1.2.2: {} 2616 + 2617 + estree-walker@3.0.3: 2618 + dependencies: 2619 + '@types/estree': 1.0.8 2620 + 2621 + eventemitter3@5.0.1: {} 2622 + 2623 + exsolve@1.0.7: {} 2624 + 2625 + extract-zip@2.0.1: 2626 + dependencies: 2627 + debug: 4.4.3 2628 + get-stream: 5.2.0 2629 + yauzl: 2.10.0 2630 + optionalDependencies: 2631 + '@types/yauzl': 2.10.3 2632 + transitivePeerDependencies: 2633 + - supports-color 2634 + 2635 + fast-glob@3.3.3: 2636 + dependencies: 2637 + '@nodelib/fs.stat': 2.0.5 2638 + '@nodelib/fs.walk': 1.2.8 2639 + glob-parent: 5.1.2 2640 + merge2: 1.4.1 2641 + micromatch: 4.0.8 2642 + 2643 + fast-redact@3.5.0: {} 2644 + 2645 + fastq@1.19.1: 2646 + dependencies: 2647 + reusify: 1.1.0 2648 + 2649 + fd-slicer@1.1.0: 2650 + dependencies: 2651 + pend: 1.2.0 2652 + 2653 + fdir@6.5.0(picomatch@4.0.3): 2654 + optionalDependencies: 2655 + picomatch: 4.0.3 2656 + 2657 + filesize@10.1.6: {} 2658 + 2659 + fill-range@7.1.1: 2660 + dependencies: 2661 + to-regex-range: 5.0.1 2662 + 2663 + firefox-profile@4.7.0: 2664 + dependencies: 2665 + adm-zip: 0.5.16 2666 + fs-extra: 11.3.2 2667 + ini: 4.1.3 2668 + minimist: 1.2.8 2669 + xml2js: 0.6.2 2670 + 2671 + formdata-node@6.0.3: {} 2672 + 2673 + fs-extra@11.3.2: 2674 + dependencies: 2675 + graceful-fs: 4.2.11 2676 + jsonfile: 6.2.0 2677 + universalify: 2.0.1 2678 + 2679 + fsevents@2.3.3: 2680 + optional: true 2681 + 2682 + fx-runner@1.4.0: 2683 + dependencies: 2684 + commander: 2.9.0 2685 + shell-quote: 1.7.3 2686 + spawn-sync: 1.0.15 2687 + when: 3.7.7 2688 + which: 1.2.4 2689 + winreg: 0.0.12 2690 + 2691 + get-caller-file@2.0.5: {} 2692 + 2693 + get-east-asian-width@1.4.0: {} 2694 + 2695 + get-port-please@3.2.0: {} 2696 + 2697 + get-stream@5.2.0: 2698 + dependencies: 2699 + pump: 3.0.3 2700 + 2701 + giget@2.0.0: 2702 + dependencies: 2703 + citty: 0.1.6 2704 + consola: 3.4.2 2705 + defu: 6.1.4 2706 + node-fetch-native: 1.6.7 2707 + nypm: 0.6.2 2708 + pathe: 2.0.3 2709 + 2710 + glob-parent@5.1.2: 2711 + dependencies: 2712 + is-glob: 4.0.3 2713 + 2714 + glob-to-regexp@0.4.1: {} 2715 + 2716 + global-directory@4.0.1: 2717 + dependencies: 2718 + ini: 4.1.1 2719 + 2720 + graceful-fs@4.2.10: {} 2721 + 2722 + graceful-fs@4.2.11: {} 2723 + 2724 + graceful-readlink@1.0.1: {} 2725 + 2726 + graphemer@1.4.0: {} 2727 + 2728 + growly@1.3.0: {} 2729 + 2730 + has-flag@4.0.0: {} 2731 + 2732 + highlight.js@10.7.3: {} 2733 + 2734 + hookable@5.5.3: {} 2735 + 2736 + html-escaper@3.0.3: {} 2737 + 2738 + htmlparser2@10.0.0: 2739 + dependencies: 2740 + domelementtype: 2.3.0 2741 + domhandler: 5.0.3 2742 + domutils: 3.2.2 2743 + entities: 6.0.1 2744 + 2745 + ieee754@1.2.1: {} 2746 + 2747 + immediate@3.0.6: {} 2748 + 2749 + import-meta-resolve@4.2.0: {} 2750 + 2751 + index-of@0.2.0: {} 2752 + 2753 + inherits@2.0.4: {} 2754 + 2755 + ini@1.3.8: {} 2756 + 2757 + ini@4.1.1: {} 2758 + 2759 + ini@4.1.3: {} 2760 + 2761 + is-absolute@0.1.7: 2762 + dependencies: 2763 + is-relative: 0.1.3 2764 + 2765 + is-arrayish@0.2.1: {} 2766 + 2767 + is-docker@2.2.1: {} 2768 + 2769 + is-docker@3.0.0: {} 2770 + 2771 + is-extglob@2.1.1: {} 2772 + 2773 + is-fullwidth-code-point@3.0.0: {} 2774 + 2775 + is-fullwidth-code-point@4.0.0: {} 2776 + 2777 + is-fullwidth-code-point@5.1.0: 2778 + dependencies: 2779 + get-east-asian-width: 1.4.0 2780 + 2781 + is-glob@4.0.3: 2782 + dependencies: 2783 + is-extglob: 2.1.1 2784 + 2785 + is-in-ci@1.0.0: {} 2786 + 2787 + is-inside-container@1.0.0: 2788 + dependencies: 2789 + is-docker: 3.0.0 2790 + 2791 + is-installed-globally@1.0.0: 2792 + dependencies: 2793 + global-directory: 4.0.1 2794 + is-path-inside: 4.0.0 2795 + 2796 + is-interactive@2.0.0: {} 2797 + 2798 + is-npm@6.1.0: {} 2799 + 2800 + is-number@7.0.0: {} 2801 + 2802 + is-path-inside@4.0.0: {} 2803 + 2804 + is-plain-object@2.0.4: 2805 + dependencies: 2806 + isobject: 3.0.1 2807 + 2808 + is-potential-custom-element-name@1.0.1: {} 2809 + 2810 + is-primitive@3.0.1: {} 2811 + 2812 + is-relative@0.1.3: {} 2813 + 2814 + is-unicode-supported@1.3.0: {} 2815 + 2816 + is-unicode-supported@2.1.0: {} 2817 + 2818 + is-wsl@2.2.0: 2819 + dependencies: 2820 + is-docker: 2.2.1 2821 + 2822 + is-wsl@3.1.0: 2823 + dependencies: 2824 + is-inside-container: 1.0.0 2825 + 2826 + isarray@1.0.0: {} 2827 + 2828 + isexe@1.1.2: {} 2829 + 2830 + isexe@2.0.0: {} 2831 + 2832 + iso-datestring-validator@2.2.2: {} 2833 + 2834 + isobject@3.0.1: {} 2835 + 2836 + jiti@2.6.1: {} 2837 + 2838 + js-tokens@4.0.0: {} 2839 + 2840 + js-tokens@9.0.1: {} 2841 + 2842 + json-parse-even-better-errors@3.0.2: {} 2843 + 2844 + json5@2.2.3: {} 2845 + 2846 + jsonfile@6.2.0: 2847 + dependencies: 2848 + universalify: 2.0.1 2849 + optionalDependencies: 2850 + graceful-fs: 4.2.11 2851 + 2852 + jszip@3.10.1: 2853 + dependencies: 2854 + lie: 3.3.0 2855 + pako: 1.0.11 2856 + readable-stream: 2.3.8 2857 + setimmediate: 1.0.5 2858 + 2859 + kleur@3.0.3: {} 2860 + 2861 + ky@1.12.0: {} 2862 + 2863 + latest-version@9.0.0: 2864 + dependencies: 2865 + package-json: 10.0.1 2866 + 2867 + lie@3.3.0: 2868 + dependencies: 2869 + immediate: 3.0.6 2870 + 2871 + lighthouse-logger@2.0.2: 2872 + dependencies: 2873 + debug: 4.4.3 2874 + marky: 1.3.0 2875 + transitivePeerDependencies: 2876 + - supports-color 2877 + 2878 + lines-and-columns@2.0.4: {} 2879 + 2880 + linkedom@0.18.12: 2881 + dependencies: 2882 + css-select: 5.2.2 2883 + cssom: 0.5.0 2884 + html-escaper: 3.0.3 2885 + htmlparser2: 10.0.0 2886 + uhyphen: 0.2.0 2887 + 2888 + listr2@8.3.3: 2889 + dependencies: 2890 + cli-truncate: 4.0.0 2891 + colorette: 2.0.20 2892 + eventemitter3: 5.0.1 2893 + log-update: 6.1.0 2894 + rfdc: 1.4.1 2895 + wrap-ansi: 9.0.2 2896 + 2897 + local-pkg@1.1.2: 2898 + dependencies: 2899 + mlly: 1.8.0 2900 + pkg-types: 2.3.0 2901 + quansync: 0.2.11 2902 + 2903 + lodash.camelcase@4.3.0: {} 2904 + 2905 + lodash.kebabcase@4.1.1: {} 2906 + 2907 + lodash.merge@4.6.2: {} 2908 + 2909 + lodash.snakecase@4.1.1: {} 2910 + 2911 + log-symbols@5.1.0: 2912 + dependencies: 2913 + chalk: 5.6.2 2914 + is-unicode-supported: 1.3.0 2915 + 2916 + log-symbols@6.0.0: 2917 + dependencies: 2918 + chalk: 5.6.2 2919 + is-unicode-supported: 1.3.0 2920 + 2921 + log-update@6.1.0: 2922 + dependencies: 2923 + ansi-escapes: 7.1.1 2924 + cli-cursor: 5.0.0 2925 + slice-ansi: 7.1.2 2926 + strip-ansi: 7.1.2 2927 + wrap-ansi: 9.0.2 2928 + 2929 + magic-string@0.30.19: 2930 + dependencies: 2931 + '@jridgewell/sourcemap-codec': 1.5.5 2932 + 2933 + magicast@0.3.5: 2934 + dependencies: 2935 + '@babel/parser': 7.28.4 2936 + '@babel/types': 7.28.4 2937 + source-map-js: 1.2.1 2938 + 2939 + make-error@1.3.6: {} 2940 + 2941 + many-keys-map@2.0.1: {} 2942 + 2943 + marky@1.3.0: {} 2944 + 2945 + merge2@1.4.1: {} 2946 + 2947 + micromatch@4.0.8: 2948 + dependencies: 2949 + braces: 3.0.3 2950 + picomatch: 2.3.1 2951 + 2952 + mimic-fn@2.1.0: {} 2953 + 2954 + mimic-function@5.0.1: {} 2955 + 2956 + minimatch@10.0.3: 2957 + dependencies: 2958 + '@isaacs/brace-expansion': 5.0.0 2959 + 2960 + minimatch@3.1.2: 2961 + dependencies: 2962 + brace-expansion: 1.1.12 2963 + 2964 + minimist@1.2.8: {} 2965 + 2966 + mlly@1.8.0: 2967 + dependencies: 2968 + acorn: 8.15.0 2969 + pathe: 2.0.3 2970 + pkg-types: 1.3.1 2971 + ufo: 1.6.1 2972 + 2973 + ms@2.1.3: {} 2974 + 2975 + multiformats@9.9.0: {} 2976 + 2977 + multimatch@6.0.0: 2978 + dependencies: 2979 + '@types/minimatch': 3.0.5 2980 + array-differ: 4.0.0 2981 + array-union: 3.0.1 2982 + minimatch: 3.1.2 2983 + 2984 + mz@2.7.0: 2985 + dependencies: 2986 + any-promise: 1.3.0 2987 + object-assign: 4.1.1 2988 + thenify-all: 1.6.0 2989 + 2990 + nano-spawn@1.0.3: {} 2991 + 2992 + nanoid@3.3.11: {} 2993 + 2994 + nanoid@5.1.6: {} 2995 + 2996 + node-fetch-native@1.6.7: {} 2997 + 2998 + node-forge@1.3.1: {} 2999 + 3000 + node-notifier@10.0.1: 3001 + dependencies: 3002 + growly: 1.3.0 3003 + is-wsl: 2.2.0 3004 + semver: 7.7.3 3005 + shellwords: 0.1.1 3006 + uuid: 8.3.2 3007 + which: 2.0.2 3008 + 3009 + normalize-path@3.0.0: {} 3010 + 3011 + nth-check@2.1.1: 3012 + dependencies: 3013 + boolbase: 1.0.0 3014 + 3015 + nypm@0.6.2: 3016 + dependencies: 3017 + citty: 0.1.6 3018 + consola: 3.4.2 3019 + pathe: 2.0.3 3020 + pkg-types: 2.3.0 3021 + tinyexec: 1.0.1 3022 + 3023 + object-assign@4.1.1: {} 3024 + 3025 + ofetch@1.4.1: 3026 + dependencies: 3027 + destr: 2.0.5 3028 + node-fetch-native: 1.6.7 3029 + ufo: 1.6.1 3030 + 3031 + ohash@2.0.11: {} 3032 + 3033 + on-exit-leak-free@2.1.2: {} 3034 + 3035 + once@1.4.0: 3036 + dependencies: 3037 + wrappy: 1.0.2 3038 + 3039 + onetime@5.1.2: 3040 + dependencies: 3041 + mimic-fn: 2.1.0 3042 + 3043 + onetime@7.0.0: 3044 + dependencies: 3045 + mimic-function: 5.0.1 3046 + 3047 + open@10.2.0: 3048 + dependencies: 3049 + default-browser: 5.2.1 3050 + define-lazy-prop: 3.0.0 3051 + is-inside-container: 1.0.0 3052 + wsl-utils: 0.1.0 3053 + 3054 + open@8.4.2: 3055 + dependencies: 3056 + define-lazy-prop: 2.0.0 3057 + is-docker: 2.2.1 3058 + is-wsl: 2.2.0 3059 + 3060 + ora@6.3.1: 3061 + dependencies: 3062 + chalk: 5.6.2 3063 + cli-cursor: 4.0.0 3064 + cli-spinners: 2.9.2 3065 + is-interactive: 2.0.0 3066 + is-unicode-supported: 1.3.0 3067 + log-symbols: 5.1.0 3068 + stdin-discarder: 0.1.0 3069 + strip-ansi: 7.1.2 3070 + wcwidth: 1.0.1 3071 + 3072 + ora@8.2.0: 3073 + dependencies: 3074 + chalk: 5.6.2 3075 + cli-cursor: 5.0.0 3076 + cli-spinners: 2.9.2 3077 + is-interactive: 2.0.0 3078 + is-unicode-supported: 2.1.0 3079 + log-symbols: 6.0.0 3080 + stdin-discarder: 0.2.2 3081 + string-width: 7.2.0 3082 + strip-ansi: 7.1.2 3083 + 3084 + os-shim@0.1.3: {} 3085 + 3086 + package-json@10.0.1: 3087 + dependencies: 3088 + ky: 1.12.0 3089 + registry-auth-token: 5.1.0 3090 + registry-url: 6.0.1 3091 + semver: 7.7.3 3092 + 3093 + pako@1.0.11: {} 3094 + 3095 + parse-json@7.1.1: 3096 + dependencies: 3097 + '@babel/code-frame': 7.27.1 3098 + error-ex: 1.3.4 3099 + json-parse-even-better-errors: 3.0.2 3100 + lines-and-columns: 2.0.4 3101 + type-fest: 3.13.1 3102 + 3103 + parse5-htmlparser2-tree-adapter@6.0.1: 3104 + dependencies: 3105 + parse5: 6.0.1 3106 + 3107 + parse5@5.1.1: {} 3108 + 3109 + parse5@6.0.1: {} 3110 + 3111 + pathe@2.0.3: {} 3112 + 3113 + pend@1.2.0: {} 3114 + 3115 + perfect-debounce@1.0.0: {} 3116 + 3117 + perfect-debounce@2.0.0: {} 3118 + 3119 + picocolors@1.1.1: {} 3120 + 3121 + picomatch@2.3.1: {} 3122 + 3123 + picomatch@4.0.3: {} 3124 + 3125 + pino-abstract-transport@2.0.0: 3126 + dependencies: 3127 + split2: 4.2.0 3128 + 3129 + pino-std-serializers@7.0.0: {} 3130 + 3131 + pino@9.7.0: 3132 + dependencies: 3133 + atomic-sleep: 1.0.0 3134 + fast-redact: 3.5.0 3135 + on-exit-leak-free: 2.1.2 3136 + pino-abstract-transport: 2.0.0 3137 + pino-std-serializers: 7.0.0 3138 + process-warning: 5.0.0 3139 + quick-format-unescaped: 4.0.4 3140 + real-require: 0.2.0 3141 + safe-stable-stringify: 2.5.0 3142 + sonic-boom: 4.2.0 3143 + thread-stream: 3.1.0 3144 + 3145 + pkg-types@1.3.1: 3146 + dependencies: 3147 + confbox: 0.1.8 3148 + mlly: 1.8.0 3149 + pathe: 2.0.3 3150 + 3151 + pkg-types@2.3.0: 3152 + dependencies: 3153 + confbox: 0.2.2 3154 + exsolve: 1.0.7 3155 + pathe: 2.0.3 3156 + 3157 + postcss@8.5.6: 3158 + dependencies: 3159 + nanoid: 3.3.11 3160 + picocolors: 1.1.1 3161 + source-map-js: 1.2.1 3162 + 3163 + process-nextick-args@2.0.1: {} 3164 + 3165 + process-warning@5.0.0: {} 3166 + 3167 + promise-toolbox@0.21.0: 3168 + dependencies: 3169 + make-error: 1.3.6 3170 + 3171 + prompts@2.4.2: 3172 + dependencies: 3173 + kleur: 3.0.3 3174 + sisteransi: 1.0.5 3175 + 3176 + proto-list@1.2.4: {} 3177 + 3178 + publish-browser-extension@3.0.2: 3179 + dependencies: 3180 + cac: 6.7.14 3181 + cli-highlight: 2.1.11 3182 + consola: 3.4.2 3183 + dotenv: 16.6.1 3184 + extract-zip: 2.0.1 3185 + formdata-node: 6.0.3 3186 + listr2: 8.3.3 3187 + lodash.camelcase: 4.3.0 3188 + lodash.kebabcase: 4.1.1 3189 + lodash.snakecase: 4.1.1 3190 + ofetch: 1.4.1 3191 + open: 10.2.0 3192 + ora: 6.3.1 3193 + prompts: 2.4.2 3194 + zod: 3.25.76 3195 + transitivePeerDependencies: 3196 + - supports-color 3197 + 3198 + pump@3.0.3: 3199 + dependencies: 3200 + end-of-stream: 1.4.5 3201 + once: 1.4.0 3202 + 3203 + pupa@3.3.0: 3204 + dependencies: 3205 + escape-goat: 4.0.0 3206 + 3207 + quansync@0.2.11: {} 3208 + 3209 + queue-microtask@1.2.3: {} 3210 + 3211 + quick-format-unescaped@4.0.4: {} 3212 + 3213 + rc9@2.1.2: 3214 + dependencies: 3215 + defu: 6.1.4 3216 + destr: 2.0.5 3217 + 3218 + rc@1.2.8: 3219 + dependencies: 3220 + deep-extend: 0.6.0 3221 + ini: 1.3.8 3222 + minimist: 1.2.8 3223 + strip-json-comments: 2.0.1 3224 + 3225 + readable-stream@2.3.8: 3226 + dependencies: 3227 + core-util-is: 1.0.3 3228 + inherits: 2.0.4 3229 + isarray: 1.0.0 3230 + process-nextick-args: 2.0.1 3231 + safe-buffer: 5.1.2 3232 + string_decoder: 1.1.1 3233 + util-deprecate: 1.0.2 3234 + 3235 + readable-stream@3.6.2: 3236 + dependencies: 3237 + inherits: 2.0.4 3238 + string_decoder: 1.3.0 3239 + util-deprecate: 1.0.2 3240 + 3241 + readdirp@4.1.2: {} 3242 + 3243 + real-require@0.2.0: {} 3244 + 3245 + registry-auth-token@5.1.0: 3246 + dependencies: 3247 + '@pnpm/npm-conf': 2.3.1 3248 + 3249 + registry-url@6.0.1: 3250 + dependencies: 3251 + rc: 1.2.8 3252 + 3253 + require-directory@2.1.1: {} 3254 + 3255 + restore-cursor@4.0.0: 3256 + dependencies: 3257 + onetime: 5.1.2 3258 + signal-exit: 3.0.7 3259 + 3260 + restore-cursor@5.1.0: 3261 + dependencies: 3262 + onetime: 7.0.0 3263 + signal-exit: 4.1.0 3264 + 3265 + reusify@1.1.0: {} 3266 + 3267 + rfdc@1.4.1: {} 3268 + 3269 + rollup@4.52.5: 3270 + dependencies: 3271 + '@types/estree': 1.0.8 3272 + optionalDependencies: 3273 + '@rollup/rollup-android-arm-eabi': 4.52.5 3274 + '@rollup/rollup-android-arm64': 4.52.5 3275 + '@rollup/rollup-darwin-arm64': 4.52.5 3276 + '@rollup/rollup-darwin-x64': 4.52.5 3277 + '@rollup/rollup-freebsd-arm64': 4.52.5 3278 + '@rollup/rollup-freebsd-x64': 4.52.5 3279 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 3280 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 3281 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 3282 + '@rollup/rollup-linux-arm64-musl': 4.52.5 3283 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 3284 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 3285 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 3286 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 3287 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 3288 + '@rollup/rollup-linux-x64-gnu': 4.52.5 3289 + '@rollup/rollup-linux-x64-musl': 4.52.5 3290 + '@rollup/rollup-openharmony-arm64': 4.52.5 3291 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 3292 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 3293 + '@rollup/rollup-win32-x64-gnu': 4.52.5 3294 + '@rollup/rollup-win32-x64-msvc': 4.52.5 3295 + fsevents: 2.3.3 3296 + 3297 + run-applescript@7.1.0: {} 3298 + 3299 + run-parallel@1.2.0: 3300 + dependencies: 3301 + queue-microtask: 1.2.3 3302 + 3303 + safe-buffer@5.1.2: {} 3304 + 3305 + safe-buffer@5.2.1: {} 3306 + 3307 + safe-stable-stringify@2.5.0: {} 3308 + 3309 + sax@1.4.1: {} 3310 + 3311 + scule@1.3.0: {} 3312 + 3313 + semver@7.7.3: {} 3314 + 3315 + set-value@4.1.0: 3316 + dependencies: 3317 + is-plain-object: 2.0.4 3318 + is-primitive: 3.0.1 3319 + 3320 + setimmediate@1.0.5: {} 3321 + 3322 + shell-quote@1.7.3: {} 3323 + 3324 + shellwords@0.1.1: {} 3325 + 3326 + signal-exit@3.0.7: {} 3327 + 3328 + signal-exit@4.1.0: {} 3329 + 3330 + sisteransi@1.0.5: {} 3331 + 3332 + slice-ansi@5.0.0: 3333 + dependencies: 3334 + ansi-styles: 6.2.3 3335 + is-fullwidth-code-point: 4.0.0 3336 + 3337 + slice-ansi@7.1.2: 3338 + dependencies: 3339 + ansi-styles: 6.2.3 3340 + is-fullwidth-code-point: 5.1.0 3341 + 3342 + sonic-boom@4.2.0: 3343 + dependencies: 3344 + atomic-sleep: 1.0.0 3345 + 3346 + source-map-js@1.2.1: {} 3347 + 3348 + source-map-support@0.5.21: 3349 + dependencies: 3350 + buffer-from: 1.1.2 3351 + source-map: 0.6.1 3352 + 3353 + source-map@0.6.1: {} 3354 + 3355 + source-map@0.7.6: {} 3356 + 3357 + spawn-sync@1.0.15: 3358 + dependencies: 3359 + concat-stream: 1.6.2 3360 + os-shim: 0.1.3 3361 + 3362 + split2@4.2.0: {} 3363 + 3364 + split@1.0.1: 3365 + dependencies: 3366 + through: 2.3.8 3367 + 3368 + stdin-discarder@0.1.0: 3369 + dependencies: 3370 + bl: 5.1.0 3371 + 3372 + stdin-discarder@0.2.2: {} 3373 + 3374 + string-width@4.2.3: 3375 + dependencies: 3376 + emoji-regex: 8.0.0 3377 + is-fullwidth-code-point: 3.0.0 3378 + strip-ansi: 6.0.1 3379 + 3380 + string-width@7.2.0: 3381 + dependencies: 3382 + emoji-regex: 10.6.0 3383 + get-east-asian-width: 1.4.0 3384 + strip-ansi: 7.1.2 3385 + 3386 + string_decoder@1.1.1: 3387 + dependencies: 3388 + safe-buffer: 5.1.2 3389 + 3390 + string_decoder@1.3.0: 3391 + dependencies: 3392 + safe-buffer: 5.2.1 3393 + 3394 + strip-ansi@6.0.1: 3395 + dependencies: 3396 + ansi-regex: 5.0.1 3397 + 3398 + strip-ansi@7.1.2: 3399 + dependencies: 3400 + ansi-regex: 6.2.2 3401 + 3402 + strip-bom@5.0.0: {} 3403 + 3404 + strip-json-comments@2.0.1: {} 3405 + 3406 + strip-json-comments@5.0.2: {} 3407 + 3408 + strip-literal@3.1.0: 3409 + dependencies: 3410 + js-tokens: 9.0.1 3411 + 3412 + stubborn-fs@1.2.5: {} 3413 + 3414 + supports-color@7.2.0: 3415 + dependencies: 3416 + has-flag: 4.0.0 3417 + 3418 + thenify-all@1.6.0: 3419 + dependencies: 3420 + thenify: 3.3.1 3421 + 3422 + thenify@3.3.1: 3423 + dependencies: 3424 + any-promise: 1.3.0 3425 + 3426 + thread-stream@3.1.0: 3427 + dependencies: 3428 + real-require: 0.2.0 3429 + 3430 + through@2.3.8: {} 3431 + 3432 + tinyexec@1.0.1: {} 3433 + 3434 + tinyglobby@0.2.15: 3435 + dependencies: 3436 + fdir: 6.5.0(picomatch@4.0.3) 3437 + picomatch: 4.0.3 3438 + 3439 + tlds@1.260.0: {} 3440 + 3441 + tmp@0.2.5: {} 3442 + 3443 + to-regex-range@5.0.1: 3444 + dependencies: 3445 + is-number: 7.0.0 3446 + 3447 + tslib@2.8.1: {} 3448 + 3449 + type-fest@3.13.1: {} 3450 + 3451 + type-fest@4.41.0: {} 3452 + 3453 + typedarray@0.0.6: {} 3454 + 3455 + ufo@1.6.1: {} 3456 + 3457 + uhyphen@0.2.0: {} 3458 + 3459 + uint8arrays@3.0.0: 3460 + dependencies: 3461 + multiformats: 9.9.0 3462 + 3463 + undici-types@7.14.0: {} 3464 + 3465 + unimport@5.5.0: 3466 + dependencies: 3467 + acorn: 8.15.0 3468 + escape-string-regexp: 5.0.0 3469 + estree-walker: 3.0.3 3470 + local-pkg: 1.1.2 3471 + magic-string: 0.30.19 3472 + mlly: 1.8.0 3473 + pathe: 2.0.3 3474 + picomatch: 4.0.3 3475 + pkg-types: 2.3.0 3476 + scule: 1.3.0 3477 + strip-literal: 3.1.0 3478 + tinyglobby: 0.2.15 3479 + unplugin: 2.3.10 3480 + unplugin-utils: 0.3.1 3481 + 3482 + universalify@2.0.1: {} 3483 + 3484 + unplugin-utils@0.3.1: 3485 + dependencies: 3486 + pathe: 2.0.3 3487 + picomatch: 4.0.3 3488 + 3489 + unplugin@2.3.10: 3490 + dependencies: 3491 + '@jridgewell/remapping': 2.3.5 3492 + acorn: 8.15.0 3493 + picomatch: 4.0.3 3494 + webpack-virtual-modules: 0.6.2 3495 + 3496 + update-notifier@7.3.1: 3497 + dependencies: 3498 + boxen: 8.0.1 3499 + chalk: 5.6.2 3500 + configstore: 7.1.0 3501 + is-in-ci: 1.0.0 3502 + is-installed-globally: 1.0.0 3503 + is-npm: 6.1.0 3504 + latest-version: 9.0.0 3505 + pupa: 3.3.0 3506 + semver: 7.7.3 3507 + xdg-basedir: 5.1.0 3508 + 3509 + util-deprecate@1.0.2: {} 3510 + 3511 + uuid@8.3.2: {} 3512 + 3513 + vite-node@3.2.4(@types/node@24.8.1)(jiti@2.6.1): 3514 + dependencies: 3515 + cac: 6.7.14 3516 + debug: 4.4.3 3517 + es-module-lexer: 1.7.0 3518 + pathe: 2.0.3 3519 + vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1) 3520 + transitivePeerDependencies: 3521 + - '@types/node' 3522 + - jiti 3523 + - less 3524 + - lightningcss 3525 + - sass 3526 + - sass-embedded 3527 + - stylus 3528 + - sugarss 3529 + - supports-color 3530 + - terser 3531 + - tsx 3532 + - yaml 3533 + 3534 + vite@7.1.11(@types/node@24.8.1)(jiti@2.6.1): 3535 + dependencies: 3536 + esbuild: 0.25.11 3537 + fdir: 6.5.0(picomatch@4.0.3) 3538 + picomatch: 4.0.3 3539 + postcss: 8.5.6 3540 + rollup: 4.52.5 3541 + tinyglobby: 0.2.15 3542 + optionalDependencies: 3543 + '@types/node': 24.8.1 3544 + fsevents: 2.3.3 3545 + jiti: 2.6.1 3546 + 3547 + watchpack@2.4.4: 3548 + dependencies: 3549 + glob-to-regexp: 0.4.1 3550 + graceful-fs: 4.2.11 3551 + 3552 + wcwidth@1.0.1: 3553 + dependencies: 3554 + defaults: 1.0.4 3555 + 3556 + web-ext-run@0.2.4: 3557 + dependencies: 3558 + '@babel/runtime': 7.28.2 3559 + '@devicefarmer/adbkit': 3.3.8 3560 + chrome-launcher: 1.2.0 3561 + debounce: 1.2.1 3562 + es6-error: 4.1.1 3563 + firefox-profile: 4.7.0 3564 + fx-runner: 1.4.0 3565 + multimatch: 6.0.0 3566 + node-notifier: 10.0.1 3567 + parse-json: 7.1.1 3568 + pino: 9.7.0 3569 + promise-toolbox: 0.21.0 3570 + set-value: 4.1.0 3571 + source-map-support: 0.5.21 3572 + strip-bom: 5.0.0 3573 + strip-json-comments: 5.0.2 3574 + tmp: 0.2.5 3575 + update-notifier: 7.3.1 3576 + watchpack: 2.4.4 3577 + zip-dir: 2.0.0 3578 + transitivePeerDependencies: 3579 + - supports-color 3580 + 3581 + webpack-virtual-modules@0.6.2: {} 3582 + 3583 + when-exit@2.1.4: {} 3584 + 3585 + when@3.7.7: {} 3586 + 3587 + which@1.2.4: 3588 + dependencies: 3589 + is-absolute: 0.1.7 3590 + isexe: 1.1.2 3591 + 3592 + which@2.0.2: 3593 + dependencies: 3594 + isexe: 2.0.0 3595 + 3596 + widest-line@5.0.0: 3597 + dependencies: 3598 + string-width: 7.2.0 3599 + 3600 + winreg@0.0.12: {} 3601 + 3602 + wrap-ansi@7.0.0: 3603 + dependencies: 3604 + ansi-styles: 4.3.0 3605 + string-width: 4.2.3 3606 + strip-ansi: 6.0.1 3607 + 3608 + wrap-ansi@9.0.2: 3609 + dependencies: 3610 + ansi-styles: 6.2.3 3611 + string-width: 7.2.0 3612 + strip-ansi: 7.1.2 3613 + 3614 + wrappy@1.0.2: {} 3615 + 3616 + wsl-utils@0.1.0: 3617 + dependencies: 3618 + is-wsl: 3.1.0 3619 + 3620 + wxt@0.20.9(@types/node@24.8.1)(jiti@2.6.1)(rollup@4.52.5): 3621 + dependencies: 3622 + '@1natsu/wait-element': 4.1.2 3623 + '@aklinker1/rollup-plugin-visualizer': 5.12.0(rollup@4.52.5) 3624 + '@webext-core/fake-browser': 1.3.2 3625 + '@webext-core/isolated-element': 1.1.2 3626 + '@webext-core/match-patterns': 1.0.3 3627 + '@wxt-dev/browser': 0.1.4 3628 + '@wxt-dev/storage': 1.2.0 3629 + async-mutex: 0.5.0 3630 + c12: 3.3.1(magicast@0.3.5) 3631 + cac: 6.7.14 3632 + chokidar: 4.0.3 3633 + ci-info: 4.3.1 3634 + consola: 3.4.2 3635 + defu: 6.1.4 3636 + dotenv: 17.2.3 3637 + dotenv-expand: 12.0.3 3638 + esbuild: 0.25.11 3639 + fast-glob: 3.3.3 3640 + filesize: 10.1.6 3641 + fs-extra: 11.3.2 3642 + get-port-please: 3.2.0 3643 + giget: 2.0.0 3644 + hookable: 5.5.3 3645 + import-meta-resolve: 4.2.0 3646 + is-wsl: 3.1.0 3647 + json5: 2.2.3 3648 + jszip: 3.10.1 3649 + linkedom: 0.18.12 3650 + magicast: 0.3.5 3651 + minimatch: 10.0.3 3652 + nano-spawn: 1.0.3 3653 + normalize-path: 3.0.0 3654 + nypm: 0.6.2 3655 + ohash: 2.0.11 3656 + open: 10.2.0 3657 + ora: 8.2.0 3658 + perfect-debounce: 1.0.0 3659 + picocolors: 1.1.1 3660 + prompts: 2.4.2 3661 + publish-browser-extension: 3.0.2 3662 + scule: 1.3.0 3663 + unimport: 5.5.0 3664 + vite: 7.1.11(@types/node@24.8.1)(jiti@2.6.1) 3665 + vite-node: 3.2.4(@types/node@24.8.1)(jiti@2.6.1) 3666 + web-ext-run: 0.2.4 3667 + transitivePeerDependencies: 3668 + - '@types/node' 3669 + - canvas 3670 + - jiti 3671 + - less 3672 + - lightningcss 3673 + - rollup 3674 + - sass 3675 + - sass-embedded 3676 + - stylus 3677 + - sugarss 3678 + - supports-color 3679 + - terser 3680 + - tsx 3681 + - yaml 3682 + 3683 + xdg-basedir@5.1.0: {} 3684 + 3685 + xml2js@0.6.2: 3686 + dependencies: 3687 + sax: 1.4.1 3688 + xmlbuilder: 11.0.1 3689 + 3690 + xmlbuilder@11.0.1: {} 3691 + 3692 + y18n@5.0.8: {} 3693 + 3694 + yargs-parser@20.2.9: {} 3695 + 3696 + yargs-parser@21.1.1: {} 3697 + 3698 + yargs@16.2.0: 3699 + dependencies: 3700 + cliui: 7.0.4 3701 + escalade: 3.2.0 3702 + get-caller-file: 2.0.5 3703 + require-directory: 2.1.1 3704 + string-width: 4.2.3 3705 + y18n: 5.0.8 3706 + yargs-parser: 20.2.9 3707 + 3708 + yargs@17.7.2: 3709 + dependencies: 3710 + cliui: 8.0.1 3711 + escalade: 3.2.0 3712 + get-caller-file: 2.0.5 3713 + require-directory: 2.1.1 3714 + string-width: 4.2.3 3715 + y18n: 5.0.8 3716 + yargs-parser: 21.1.1 3717 + 3718 + yauzl@2.10.0: 3719 + dependencies: 3720 + buffer-crc32: 0.2.13 3721 + fd-slicer: 1.1.0 3722 + 3723 + zip-dir@2.0.0: 3724 + dependencies: 3725 + async: 3.2.6 3726 + jszip: 3.10.1 3727 + 3728 + zod@3.25.76: {}
+16
public/extension-callback.html
··· 1 + <!DOCTYPE html> 2 + <html> 3 + <head> 4 + <meta charset="UTF-8"> 5 + <title>OAuth Callback</title> 6 + </head> 7 + <body> 8 + <p>Authenticated. This window will close automatically.</p> 9 + <script> 10 + // Log what we received to help debug 11 + console.log('[extension-callback] Full URL:', window.location.href); 12 + console.log('[extension-callback] Search:', window.location.search); 13 + console.log('[extension-callback] Hash:', window.location.hash); 14 + </script> 15 + </body> 16 + </html>
+17
public/oauth/callback.html
··· 1 + <!DOCTYPE html> 2 + <html> 3 + <head> 4 + <meta charset="UTF-8"> 5 + <title>OAuth Callback</title> 6 + </head> 7 + <body> 8 + <p>Redirecting...</p> 9 + <script> 10 + // Relay to Chromium extension callback 11 + // The extension ID is deterministic based on the manifest key 12 + const extensionId = 'kjdnjfgcikmlbloojphbkmknfpmfofio'; 13 + const extRedirect = `https://${extensionId}.chromiumapp.org/extension-callback.html`; 14 + window.location.href = extRedirect + window.location.search + window.location.hash; 15 + </script> 16 + </body> 17 + </html>
+21
public/oauth/client-metadata.json
··· 1 + { 2 + "client_id": "https://synthes-is.netlify.app/oauth/client-metadata.json", 3 + "client_uri": "https://synthes-is.netlify.app", 4 + "redirect_uris": [ 5 + "https://synthes-is.netlify.app", 6 + "https://synthes-is.netlify.app/oauth/callback", 7 + "https://synthes-is.netlify.app/oauth/ff/callback" 8 + ], 9 + "application_type": "web", 10 + "client_name": "Synthesis", 11 + "dpop_bound_access_tokens": true, 12 + "grant_types": [ 13 + "authorization_code", 14 + "refresh_token" 15 + ], 16 + "response_types": [ 17 + "code" 18 + ], 19 + "scope": "atproto transition:generic", 20 + "token_endpoint_auth_method": "none" 21 + }
+18
public/oauth/ff/callback.html
··· 1 + <!DOCTYPE html> 2 + <html> 3 + <head> 4 + <meta charset="UTF-8"> 5 + <title>OAuth Callback</title> 6 + </head> 7 + <body> 8 + <p>Redirecting...</p> 9 + <script> 10 + // Relay to Firefox extension callback 11 + // Firefox extensions use browser.identity.getRedirectURL() which returns a moz-extension:// URL 12 + // The actual URL will be captured by launchWebAuthFlow 13 + // For Firefox, we redirect to a web_accessible_resource 14 + const extRedirect = browser.identity.getRedirectURL('extension-callback.html'); 15 + window.location.href = extRedirect + window.location.search + window.location.hash; 16 + </script> 17 + </body> 18 + </html>
+31
scripts/inject-oauth-plugin.ts
··· 1 + import type { PluginOption } from "vite"; 2 + import metadata from "../public/oauth/client-metadata.json"; 3 + 4 + type OAuthConfig = { 5 + client_id: string; 6 + client_uri: string; 7 + redirect_uris: string[]; 8 + scope: string; 9 + }; 10 + 11 + export function injectOauthEnvForExtension(browser: string): PluginOption { 12 + return { 13 + name: "inject-oauth-env", 14 + config: () => { 15 + const config = metadata as OAuthConfig; 16 + 17 + // Select redirect URI based on browser 18 + const redirectUri = browser === "firefox" 19 + ? config.redirect_uris.find(uri => uri.includes("/ff/callback"))! 20 + : config.redirect_uris.find(uri => uri.includes("/oauth/callback") && !uri.includes("/ff/"))!; 21 + 22 + const define = { 23 + "import.meta.env.VITE_OAUTH_CLIENT_ID": JSON.stringify(config.client_id), 24 + "import.meta.env.VITE_OAUTH_REDIRECT_URI": JSON.stringify(redirectUri), 25 + "import.meta.env.VITE_OAUTH_SCOPE": JSON.stringify(config.scope), 26 + }; 27 + 28 + return { define }; 29 + }, 30 + } as PluginOption; 31 + }
+16
tsconfig.json
··· 1 + { 2 + "compilerOptions": { 3 + "target": "ES2020", 4 + "module": "ESNext", 5 + "lib": ["ES2020", "DOM"], 6 + "moduleResolution": "bundler", 7 + "strict": true, 8 + "esModuleInterop": true, 9 + "skipLibCheck": true, 10 + "resolveJsonModule": true, 11 + "isolatedModules": true, 12 + "types": ["wxt/client-types"] 13 + }, 14 + "include": ["entrypoints/**/*", "components/**/*", "lib/**/*"], 15 + "exclude": ["node_modules", ".output"] 16 + }
+11
vite-env.d.ts
··· 1 + /// <reference types="vite/client" /> 2 + 3 + interface ImportMetaEnv { 4 + readonly VITE_OAUTH_CLIENT_ID: string; 5 + readonly VITE_OAUTH_REDIRECT_URI: string; 6 + readonly VITE_OAUTH_SCOPE: string; 7 + } 8 + 9 + interface ImportMeta { 10 + readonly env: ImportMetaEnv; 11 + }
+43
wxt.config.ts
··· 1 + import { defineConfig } from 'wxt'; 2 + import { injectOauthEnvForExtension } from './scripts/inject-oauth-plugin'; 3 + 4 + export default defineConfig({ 5 + manifest: (env) => ({ 6 + name: 'Synthesis', 7 + description: 'Web annotations on AT Protocol', 8 + ...(env.browser === 'chrome' && { 9 + key: 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyv6hsV+VmGtQB8kZFQE0x0VYvhH0Lq2GzDhKZHh9BvPZLmFJQjXqzD9K0UzXxMXBj8FqV3WEJ9xFzDqJc+hKRBqJFQp0vXYrG8hVLVsqxW2wYpF1K8ZqMH3J0V2VB9C3KxvqBJk9kQxqHj8BvXJFqVQ3E5VqJzYqK0Hh9vK0E2J1YxLqJ8kV9qBxV0E1J2V3kQxqFz8B1XJFqVQ3E5VqJzYqK0Hh9vK0E2J1YxLqJ8kV9qBxV0E1J2V3kQxqFz8B1XJFqVQ3E5VqJzYqK0Hh9vK0E2J1YxLqJ8kV9qBxV0E1J2V3kQxqFz8B1XJFqVQ3E5VqJzYqK0Hh9vK0E2J1YxLqJ8kV9qBxV0E1J2V3kQxqFQIDAQAB', 10 + }), 11 + permissions: [ 12 + 'storage', 13 + 'tabs', 14 + 'activeTab', 15 + 'scripting', 16 + 'contextMenus', 17 + 'identity', 18 + ...(env.browser === 'chrome' ? ['sidePanel'] : []), 19 + ], 20 + host_permissions: ['<all_urls>', 'https://synthes-is.netlify.app/*'], 21 + content_scripts: [ 22 + { 23 + matches: ['<all_urls>'], 24 + js: ['content-scripts/content.js'], 25 + }, 26 + ], 27 + action: { 28 + default_title: 'Open Synthesis', 29 + }, 30 + web_accessible_resources: [ 31 + { 32 + resources: ['extension-callback.html'], 33 + matches: ['<all_urls>'], 34 + }, 35 + ], 36 + }), 37 + vite: (env) => ({ 38 + plugins: [injectOauthEnvForExtension(env.browser)], 39 + }), 40 + runner: { 41 + disabled: false, 42 + }, 43 + });