Various AT Protocol integrations with obsidian

OAuth (#22)

* add metadata

* test pages action

* initial oauth flow

* update scope

* login in settings

* remove session from plugin class

* remove oauth modal

* add session store / refactor

handle missing block text

* render before done fetching feed

* initila work for redirect to obsidian uri scheme

* switch back to browser client

* cleanup storing session/agent

* cleanup

* better html page

* better settings layout

authored by

treethought and committed by
GitHub
d640f14a 1418f94d

+6216 -144
+42
.github/workflows/deploy_static.yml
···
··· 1 + name: Deploy static content to Pages 2 + 3 + on: 4 + push: 5 + tags: 6 + - "*" 7 + 8 + # Allows you to run this workflow manually from the Actions tab 9 + workflow_dispatch: 10 + 11 + permissions: 12 + contents: read 13 + pages: write 14 + id-token: write 15 + 16 + concurrency: 17 + group: "pages" 18 + cancel-in-progress: false 19 + 20 + jobs: 21 + deploy: 22 + environment: 23 + name: github-pages 24 + url: ${{ steps.deployment.outputs.page_url }} 25 + runs-on: ubuntu-latest 26 + steps: 27 + - name: Checkout 28 + uses: actions/checkout@v4 29 + - name: Setup Pages 30 + uses: actions/configure-pages@v5 31 + - name: Prepare static files 32 + run: | 33 + mkdir -p _site 34 + cp client-metadata.json _site/ 35 + cp oauth-callback.html _site/ 36 + - name: Upload artifact 37 + uses: actions/upload-pages-artifact@v3 38 + with: 39 + path: '_site' 40 + - name: Deploy to GitHub Pages 41 + id: deployment 42 + uses: actions/deploy-pages@v4
+30 -19
.github/workflows/lint.yml
··· 1 name: Bun build 2 3 on: 4 - push: 5 - branches: ["**"] 6 - pull_request: 7 - branches: ["**"] 8 9 jobs: 10 - build: 11 - runs-on: ubuntu-latest 12 13 - strategy: 14 - matrix: 15 - bun-version: [latest] 16 - 17 - steps: 18 - - uses: actions/checkout@v4 19 - - name: Setup Bun ${{ matrix.bun-version }} 20 - uses: oven-sh/setup-bun@v2 21 - with: 22 - bun-version: ${{ matrix.bun-version }} 23 - - run: bun install --frozen-lockfile 24 - - run: bun run build --if-present 25 - - run: bun run lint 26
··· 1 name: Bun build 2 3 on: 4 + push: 5 + branches: ["**"] 6 + pull_request: 7 + branches: ["**"] 8 + 9 + # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages 10 + permissions: 11 + contents: read 12 + pages: write 13 + id-token: write 14 + 15 + # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. 16 + # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. 17 + concurrency: 18 + group: "pages" 19 + cancel-in-progress: false 20 21 jobs: 22 + build: 23 + runs-on: ubuntu-latest 24 25 + strategy: 26 + matrix: 27 + bun-version: [latest] 28 29 + steps: 30 + - uses: actions/checkout@v4 31 + - name: Setup Bun ${{ matrix.bun-version }} 32 + uses: oven-sh/setup-bun@v2 33 + with: 34 + bun-version: ${{ matrix.bun-version }} 35 + - run: bun install --frozen-lockfile 36 + - run: bun run build --if-present 37 + - run: bun run lint
+11 -2
bun.lock
··· 9 "@atcute/bluesky": "^3.2.15", 10 "@atcute/client": "^4.2.1", 11 "@atcute/identity-resolver": "^1.2.2", 12 "@atcute/leaflet": "^1.0.17", 13 "@atcute/microcosm": "^1.0.1", 14 - "@atcute/oauth-browser-client": "^2.0.3", 15 "@atcute/pckt": "^0.1.5", 16 "@atcute/standard-site": "^1.0.0", 17 "obsidian": "latest", ··· 52 53 "@atcute/identity-resolver": ["@atcute/identity-resolver@1.2.2", "", { "dependencies": { "@atcute/lexicons": "^1.2.6", "@atcute/util-fetch": "^1.0.5", "@badrap/valita": "^0.4.6" }, "peerDependencies": { "@atcute/identity": "^1.0.0" } }, "sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw=="], 54 55 "@atcute/leaflet": ["@atcute/leaflet@1.0.17", "", { "dependencies": { "@atcute/atproto": "^3.1.10", "@atcute/lexicons": "^1.2.7" } }, "sha512-aCykf/vCRY19B8S42VEoyIvUR2CuOsH/RQcDF8u8rHZvmGfc4qgcAAxriHxiVrlinLNhxzhzuliq2avVxHiv8g=="], 56 57 "@atcute/lex-cli": ["@atcute/lex-cli@2.5.3", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/identity-resolver": "^1.2.2", "@atcute/lexicon-doc": "^2.1.0", "@atcute/lexicon-resolver": "^0.1.6", "@atcute/lexicons": "^1.2.7", "@badrap/valita": "^0.4.6", "@optique/core": "^0.6.10", "@optique/run": "^0.6.10", "picocolors": "^1.1.1", "prettier": "^3.7.4" }, "bin": { "lex-cli": "cli.mjs" } }, "sha512-829rvezMOfRkJQRKvupNT8TWT/YYffJ2QsB80D9aPjkXSogrETZA7xZcPaMZBXg+mJaVbLO9S4ThPQmlF0L4UQ=="], ··· 68 69 "@atcute/multibase": ["@atcute/multibase@1.1.7", "", { "dependencies": { "@atcute/uint8array": "^1.1.0" } }, "sha512-YmWds7U52b7Qri0xNfGeqSOvgyNfHR8Yy/NNDQx4d5TkCX2fHJIo0pXquEhCyMNAwKt53uH5yQDswy4TNP1Zhw=="], 70 71 - "@atcute/oauth-browser-client": ["@atcute/oauth-browser-client@2.0.3", "", { "dependencies": { "@atcute/client": "^4.1.1", "@atcute/identity-resolver": "^1.2.0", "@atcute/lexicons": "^1.2.5", "@atcute/multibase": "^1.1.6", "@atcute/uint8array": "^1.0.6", "nanoid": "^5.1.6" } }, "sha512-rzUjwhjE4LRRKdQnCFQag/zXRZMEAB1hhBoLfnoQuHwWbmDUCL7fzwC3jRhDPp3om8XaYNDj8a/iqRip0wRqoQ=="], 72 73 "@atcute/pckt": ["@atcute/pckt@0.1.5", "", { "dependencies": { "@atcute/atproto": "^3.1.10", "@atcute/lexicons": "^1.2.7" } }, "sha512-vvQ/jrSvCsipH7DoAZYDHMWQcStJWg1Jt+GBPGyCmYJylb5ZZTrRg6Hy1rEik5WbLUxKdK5SLXSq0/EYwhqOww=="], 74
··· 9 "@atcute/bluesky": "^3.2.15", 10 "@atcute/client": "^4.2.1", 11 "@atcute/identity-resolver": "^1.2.2", 12 + "@atcute/identity-resolver-node": "^1.0.3", 13 "@atcute/leaflet": "^1.0.17", 14 "@atcute/microcosm": "^1.0.1", 15 + "@atcute/oauth-browser-client": "^3.0.0", 16 "@atcute/pckt": "^0.1.5", 17 "@atcute/standard-site": "^1.0.0", 18 "obsidian": "latest", ··· 53 54 "@atcute/identity-resolver": ["@atcute/identity-resolver@1.2.2", "", { "dependencies": { "@atcute/lexicons": "^1.2.6", "@atcute/util-fetch": "^1.0.5", "@badrap/valita": "^0.4.6" }, "peerDependencies": { "@atcute/identity": "^1.0.0" } }, "sha512-eUh/UH4bFvuXS0X7epYCeJC/kj4rbBXfSRumLEH4smMVwNOgTo7cL/0Srty+P/qVPoZEyXdfEbS0PHJyzoXmHw=="], 55 56 + "@atcute/identity-resolver-node": ["@atcute/identity-resolver-node@1.0.3", "", { "dependencies": { "@atcute/lexicons": "^1.2.2" }, "peerDependencies": { "@atcute/identity": "^1.0.0", "@atcute/identity-resolver": "^1.0.0" } }, "sha512-RPH5M4ZRayKRcGnJWUOPVhN5WSYURXXZxKzgVT9lj/WZCH6ij2Vg3P3Eva7GGs0SG1ytnX1XVBTMoIk8nF/SLQ=="], 57 + 58 "@atcute/leaflet": ["@atcute/leaflet@1.0.17", "", { "dependencies": { "@atcute/atproto": "^3.1.10", "@atcute/lexicons": "^1.2.7" } }, "sha512-aCykf/vCRY19B8S42VEoyIvUR2CuOsH/RQcDF8u8rHZvmGfc4qgcAAxriHxiVrlinLNhxzhzuliq2avVxHiv8g=="], 59 60 "@atcute/lex-cli": ["@atcute/lex-cli@2.5.3", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/identity-resolver": "^1.2.2", "@atcute/lexicon-doc": "^2.1.0", "@atcute/lexicon-resolver": "^0.1.6", "@atcute/lexicons": "^1.2.7", "@badrap/valita": "^0.4.6", "@optique/core": "^0.6.10", "@optique/run": "^0.6.10", "picocolors": "^1.1.1", "prettier": "^3.7.4" }, "bin": { "lex-cli": "cli.mjs" } }, "sha512-829rvezMOfRkJQRKvupNT8TWT/YYffJ2QsB80D9aPjkXSogrETZA7xZcPaMZBXg+mJaVbLO9S4ThPQmlF0L4UQ=="], ··· 71 72 "@atcute/multibase": ["@atcute/multibase@1.1.7", "", { "dependencies": { "@atcute/uint8array": "^1.1.0" } }, "sha512-YmWds7U52b7Qri0xNfGeqSOvgyNfHR8Yy/NNDQx4d5TkCX2fHJIo0pXquEhCyMNAwKt53uH5yQDswy4TNP1Zhw=="], 73 74 + "@atcute/oauth-browser-client": ["@atcute/oauth-browser-client@3.0.0", "", { "dependencies": { "@atcute/client": "^4.2.1", "@atcute/identity-resolver": "^1.2.2", "@atcute/lexicons": "^1.2.7", "@atcute/multibase": "^1.1.7", "@atcute/oauth-crypto": "^0.1.0", "@atcute/oauth-types": "^0.1.0", "nanoid": "^5.1.6" } }, "sha512-7AbKV8tTe7aRJNJV7gCcWHSVEADb2nr58O1p7dQsf73HSe9pvlBkj/Vk1yjjtH691uAVYkwhHSh0bC7D8XdwJw=="], 75 + 76 + "@atcute/oauth-crypto": ["@atcute/oauth-crypto@0.1.0", "", { "dependencies": { "@atcute/multibase": "^1.1.7", "@atcute/uint8array": "^1.1.0", "@badrap/valita": "^0.4.6", "nanoid": "^5.1.6" } }, "sha512-qZYDCNLF/4B6AndYT1rsQelN8621AC5u/sL5PHvlr/qqAbmmUwCBGjEgRSyZtHE1AqD60VNiSMlOgAuEQTSl3w=="], 77 + 78 + "@atcute/oauth-keyset": ["@atcute/oauth-keyset@0.1.0", "", { "dependencies": { "@atcute/oauth-crypto": "^0.1.0" } }, "sha512-+wqT/+I5Lg9VzKnKY3g88+N45xbq+wsdT6bHDGqCVa2u57gRvolFF4dY+weMfc/OX641BIZO6/o+zFtKBsMQnQ=="], 79 + 80 + "@atcute/oauth-types": ["@atcute/oauth-types@0.1.1", "", { "dependencies": { "@atcute/identity": "^1.1.3", "@atcute/lexicons": "^1.2.7", "@atcute/oauth-keyset": "^0.1.0", "@badrap/valita": "^0.4.6" } }, "sha512-u+3KMjse3Uc/9hDyilu1QVN7IpcnjVXgRzhddzBB8Uh6wePHNVBDdi9wQvFTVVA3zmxtMJVptXRyLLg6Ou9bqg=="], 81 82 "@atcute/pckt": ["@atcute/pckt@0.1.5", "", { "dependencies": { "@atcute/atproto": "^3.1.10", "@atcute/lexicons": "^1.2.7" } }, "sha512-vvQ/jrSvCsipH7DoAZYDHMWQcStJWg1Jt+GBPGyCmYJylb5ZZTrRg6Hy1rEik5WbLUxKdK5SLXSq0/EYwhqOww=="], 83
+14
client-metadata.json
···
··· 1 + { 2 + "client_id": "https://treethought.github.io/obsidian-atmosphere/client-metadata.json", 3 + "client_name": "obsidian-atmosphere", 4 + "client_uri": "https://treethought.github.io/obsidian-atmosphere", 5 + "redirect_uris": [ 6 + "https://treethought.github.io/obsidian-atmosphere/oauth-callback.html" 7 + ], 8 + "scope": "atproto include:at.margin.authFull repo:site.standard.document repo:network.cosmik.card repo:network.cosmik.collection repo:network.cosmik.collectionLink", 9 + "grant_types": ["authorization_code", "refresh_token"], 10 + "response_types": ["code"], 11 + "token_endpoint_auth_method": "none", 12 + "application_type": "native", 13 + "dpop_bound_access_tokens": true 14 + }
+1 -1
esbuild.config.mjs
··· 3 import { builtinModules } from 'node:module'; 4 5 const banner = 6 - `/* 7 THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 8 if you want to view the source, please visit the github repository of this plugin 9 */
··· 3 import { builtinModules } from 'node:module'; 4 5 const banner = 6 + `/* 7 THIS IS A GENERATED/BUNDLED FILE BY ESBUILD 8 if you want to view the source, please visit the github repository of this plugin 9 */
+165
oauth-callback.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>Atmosphere OAuth - Redirecting...</title> 7 + <style> 8 + * { 9 + margin: 0; 10 + padding: 0; 11 + box-sizing: border-box; 12 + } 13 + body { 14 + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; 15 + display: flex; 16 + align-items: center; 17 + justify-content: center; 18 + min-height: 100vh; 19 + background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); 20 + padding: 1rem; 21 + } 22 + .container { 23 + text-align: center; 24 + padding: 3rem 2rem; 25 + background: white; 26 + border-radius: 16px; 27 + box-shadow: 0 20px 60px rgba(0,0,0,0.3); 28 + max-width: 500px; 29 + width: 100%; 30 + } 31 + h1 { 32 + color: #667eea; 33 + margin: 0 0 1rem 0; 34 + font-size: 1.75rem; 35 + font-weight: 600; 36 + } 37 + .spinner { 38 + margin: 2rem auto; 39 + width: 50px; 40 + height: 50px; 41 + border: 4px solid #f3f3f3; 42 + border-top: 4px solid #667eea; 43 + border-radius: 50%; 44 + animation: spin 1s linear infinite; 45 + } 46 + @keyframes spin { 47 + 0% { transform: rotate(0deg); } 48 + 100% { transform: rotate(360deg); } 49 + } 50 + p { 51 + color: #6b7280; 52 + margin: 1rem 0; 53 + line-height: 1.6; 54 + } 55 + .manual-link { 56 + margin-top: 2rem; 57 + padding: 1rem; 58 + background: #f9fafb; 59 + border-radius: 8px; 60 + border: 1px solid #e5e7eb; 61 + display: none; 62 + } 63 + .manual-link.show { 64 + display: block; 65 + } 66 + .link-text { 67 + word-break: break-all; 68 + font-family: monospace; 69 + font-size: 0.85rem; 70 + color: #374151; 71 + padding: 0.5rem; 72 + background: white; 73 + border-radius: 4px; 74 + margin-top: 0.5rem; 75 + } 76 + button { 77 + margin-top: 1rem; 78 + padding: 0.75rem 1.5rem; 79 + background: #667eea; 80 + color: white; 81 + border: none; 82 + border-radius: 8px; 83 + font-size: 1rem; 84 + font-weight: 500; 85 + cursor: pointer; 86 + transition: background 0.2s; 87 + } 88 + button:hover { 89 + background: #5568d3; 90 + } 91 + </style> 92 + </head> 93 + <body> 94 + <div class="container"> 95 + <h1>✅ Authentication Successful!</h1> 96 + <div class="spinner"></div> 97 + <p id="status">Redirecting to Obsidian...</p> 98 + <div class="manual-link" id="manual-link"> 99 + <p>If Obsidian doesn't open automatically:</p> 100 + <p style="font-size: 0.9rem; margin-bottom: 0.5rem;">1. Copy the link below</p> 101 + <div class="link-text" id="link-text"></div> 102 + <button onclick="copyLink()">Copy Link</button> 103 + <p style="font-size: 0.9rem; margin-top: 1rem;">2. Open Obsidian and paste it in your browser</p> 104 + </div> 105 + </div> 106 + 107 + <script> 108 + (function() { 109 + try { 110 + // extract OAuth parameters from URL hash (not search string) 111 + const params = new URLSearchParams(window.location.hash.slice(1)); 112 + 113 + const obsidianUri = `obsidian://atmosphere-oauth?${params.toString()}`; 114 + 115 + // store the URI for manual copy 116 + document.getElementById('link-text').textContent = obsidianUri; 117 + 118 + window.location.href = obsidianUri; 119 + 120 + setTimeout(function() { 121 + const spinner = document.querySelector('.spinner'); 122 + if (spinner) spinner.style.display = 'none'; 123 + 124 + // Show success message 125 + document.querySelector('h1').textContent = '✅ Redirected!'; 126 + document.getElementById('status').textContent = 'Return to Obsidian to complete login.'; 127 + 128 + setTimeout(function() { 129 + try { 130 + window.close(); 131 + } catch (e) { 132 + document.getElementById('status').textContent = 'You can close this window now.'; 133 + } 134 + }, 500); 135 + }, 500); 136 + 137 + // show manual instructions after a longer delay if still open 138 + setTimeout(function() { 139 + document.getElementById('manual-link').classList.add('show'); 140 + }, 3000); 141 + 142 + } catch (error) { 143 + console.error('Redirect error:', error); 144 + document.querySelector('.spinner').style.display = 'none'; 145 + document.getElementById('status').textContent = 'An error occurred during redirect'; 146 + document.getElementById('manual-link').classList.add('show'); 147 + } 148 + })(); 149 + 150 + function copyLink() { 151 + const linkText = document.getElementById('link-text').textContent; 152 + navigator.clipboard.writeText(linkText).then(function() { 153 + const btn = event.target; 154 + btn.textContent = '✓ Copied!'; 155 + setTimeout(function() { 156 + btn.textContent = 'Copy Link'; 157 + }, 2000); 158 + }).catch(function(err) { 159 + console.error('Failed to copy:', err); 160 + alert('Failed to copy. Please select and copy the link manually.'); 161 + }); 162 + } 163 + </script> 164 + </body> 165 + </html>
+5620
package-lock.json
···
··· 1 + { 2 + "name": "obsidian-atmosphere", 3 + "version": "0.1.12", 4 + "lockfileVersion": 3, 5 + "requires": true, 6 + "packages": { 7 + "": { 8 + "name": "obsidian-atmosphere", 9 + "version": "0.1.12", 10 + "license": "MIT", 11 + "dependencies": { 12 + "@atcute/atproto": "^3.1.10", 13 + "@atcute/bluesky": "^3.2.15", 14 + "@atcute/client": "^4.2.1", 15 + "@atcute/identity-resolver": "^1.2.2", 16 + "@atcute/identity-resolver-node": "^1.0.3", 17 + "@atcute/leaflet": "^1.0.17", 18 + "@atcute/microcosm": "^1.0.1", 19 + "@atcute/oauth-browser-client": "^2.0.3", 20 + "@atcute/oauth-node-client": "^1.1.0", 21 + "@atcute/pckt": "^0.1.5", 22 + "@atcute/standard-site": "^1.0.0", 23 + "obsidian": "latest", 24 + "remark-parse": "^11.0.0", 25 + "remark-stringify": "^11.0.0", 26 + "unified": "^11.0.5" 27 + }, 28 + "devDependencies": { 29 + "@atcute/lex-cli": "^2.5.3", 30 + "@eslint/js": "9.30.1", 31 + "@types/node": "^16.11.6", 32 + "esbuild": "0.25.5", 33 + "eslint-plugin-obsidianmd": "0.1.9", 34 + "globals": "14.0.0", 35 + "jiti": "2.6.1", 36 + "tslib": "2.4.0", 37 + "typescript": "^5.8.3", 38 + "typescript-eslint": "8.35.1" 39 + } 40 + }, 41 + "node_modules/@atcute/atproto": { 42 + "version": "3.1.10", 43 + "license": "0BSD", 44 + "dependencies": { 45 + "@atcute/lexicons": "^1.2.6" 46 + } 47 + }, 48 + "node_modules/@atcute/bluesky": { 49 + "version": "3.2.16", 50 + "license": "0BSD", 51 + "dependencies": { 52 + "@atcute/atproto": "^3.1.10", 53 + "@atcute/lexicons": "^1.2.7" 54 + } 55 + }, 56 + "node_modules/@atcute/car": { 57 + "version": "5.1.0", 58 + "dev": true, 59 + "license": "0BSD", 60 + "dependencies": { 61 + "@atcute/cbor": "^2.3.0", 62 + "@atcute/cid": "^2.4.0", 63 + "@atcute/uint8array": "^1.0.6", 64 + "@atcute/varint": "^1.0.3" 65 + } 66 + }, 67 + "node_modules/@atcute/cbor": { 68 + "version": "2.3.0", 69 + "dev": true, 70 + "license": "0BSD", 71 + "dependencies": { 72 + "@atcute/cid": "^2.4.0", 73 + "@atcute/multibase": "^1.1.6", 74 + "@atcute/uint8array": "^1.0.6" 75 + } 76 + }, 77 + "node_modules/@atcute/cid": { 78 + "version": "2.4.0", 79 + "dev": true, 80 + "license": "0BSD", 81 + "dependencies": { 82 + "@atcute/multibase": "^1.1.6", 83 + "@atcute/uint8array": "^1.0.6" 84 + } 85 + }, 86 + "node_modules/@atcute/client": { 87 + "version": "4.2.1", 88 + "license": "0BSD", 89 + "dependencies": { 90 + "@atcute/identity": "^1.1.3", 91 + "@atcute/lexicons": "^1.2.6" 92 + } 93 + }, 94 + "node_modules/@atcute/crypto": { 95 + "version": "2.3.0", 96 + "dev": true, 97 + "license": "0BSD", 98 + "dependencies": { 99 + "@atcute/multibase": "^1.1.6", 100 + "@atcute/uint8array": "^1.0.6", 101 + "@noble/secp256k1": "^3.0.0" 102 + } 103 + }, 104 + "node_modules/@atcute/identity": { 105 + "version": "1.1.3", 106 + "license": "0BSD", 107 + "peer": true, 108 + "dependencies": { 109 + "@atcute/lexicons": "^1.2.4", 110 + "@badrap/valita": "^0.4.6" 111 + } 112 + }, 113 + "node_modules/@atcute/identity-resolver": { 114 + "version": "1.2.2", 115 + "license": "0BSD", 116 + "peer": true, 117 + "dependencies": { 118 + "@atcute/lexicons": "^1.2.6", 119 + "@atcute/util-fetch": "^1.0.5", 120 + "@badrap/valita": "^0.4.6" 121 + }, 122 + "peerDependencies": { 123 + "@atcute/identity": "^1.0.0" 124 + } 125 + }, 126 + "node_modules/@atcute/identity-resolver-node": { 127 + "version": "1.0.3", 128 + "resolved": "https://registry.npmjs.org/@atcute/identity-resolver-node/-/identity-resolver-node-1.0.3.tgz", 129 + "integrity": "sha512-RPH5M4ZRayKRcGnJWUOPVhN5WSYURXXZxKzgVT9lj/WZCH6ij2Vg3P3Eva7GGs0SG1ytnX1XVBTMoIk8nF/SLQ==", 130 + "license": "0BSD", 131 + "dependencies": { 132 + "@atcute/lexicons": "^1.2.2" 133 + }, 134 + "peerDependencies": { 135 + "@atcute/identity": "^1.0.0", 136 + "@atcute/identity-resolver": "^1.0.0" 137 + } 138 + }, 139 + "node_modules/@atcute/leaflet": { 140 + "version": "1.0.17", 141 + "license": "0BSD", 142 + "dependencies": { 143 + "@atcute/atproto": "^3.1.10", 144 + "@atcute/lexicons": "^1.2.7" 145 + } 146 + }, 147 + "node_modules/@atcute/lex-cli": { 148 + "version": "2.5.3", 149 + "dev": true, 150 + "license": "0BSD", 151 + "dependencies": { 152 + "@atcute/identity": "^1.1.3", 153 + "@atcute/identity-resolver": "^1.2.2", 154 + "@atcute/lexicon-doc": "^2.1.0", 155 + "@atcute/lexicon-resolver": "^0.1.6", 156 + "@atcute/lexicons": "^1.2.7", 157 + "@badrap/valita": "^0.4.6", 158 + "@optique/core": "^0.6.10", 159 + "@optique/run": "^0.6.10", 160 + "picocolors": "^1.1.1", 161 + "prettier": "^3.7.4" 162 + }, 163 + "bin": { 164 + "lex-cli": "cli.mjs" 165 + } 166 + }, 167 + "node_modules/@atcute/lexicon-doc": { 168 + "version": "2.1.0", 169 + "dev": true, 170 + "license": "0BSD", 171 + "dependencies": { 172 + "@atcute/identity": "^1.1.3", 173 + "@atcute/lexicons": "^1.2.7", 174 + "@atcute/uint8array": "^1.1.0", 175 + "@atcute/util-text": "^1.1.0", 176 + "@badrap/valita": "^0.4.6" 177 + } 178 + }, 179 + "node_modules/@atcute/lexicon-resolver": { 180 + "version": "0.1.6", 181 + "dev": true, 182 + "license": "0BSD", 183 + "dependencies": { 184 + "@atcute/crypto": "^2.3.0", 185 + "@atcute/lexicon-doc": "^2.0.6", 186 + "@atcute/lexicons": "^1.2.6", 187 + "@atcute/repo": "^0.1.1", 188 + "@atcute/util-fetch": "^1.0.5", 189 + "@badrap/valita": "^0.4.6" 190 + }, 191 + "peerDependencies": { 192 + "@atcute/identity": "^1.1.0", 193 + "@atcute/identity-resolver": "^1.1.3" 194 + } 195 + }, 196 + "node_modules/@atcute/lexicons": { 197 + "version": "1.2.7", 198 + "license": "0BSD", 199 + "dependencies": { 200 + "@atcute/uint8array": "^1.1.0", 201 + "@atcute/util-text": "^1.1.0", 202 + "@standard-schema/spec": "^1.1.0", 203 + "esm-env": "^1.2.2" 204 + } 205 + }, 206 + "node_modules/@atcute/microcosm": { 207 + "version": "1.0.1", 208 + "license": "0BSD", 209 + "dependencies": { 210 + "@atcute/lexicons": "^1.2.7" 211 + } 212 + }, 213 + "node_modules/@atcute/mst": { 214 + "version": "0.1.2", 215 + "dev": true, 216 + "license": "0BSD", 217 + "dependencies": { 218 + "@atcute/cbor": "^2.3.0", 219 + "@atcute/cid": "^2.4.0", 220 + "@atcute/uint8array": "^1.0.6" 221 + } 222 + }, 223 + "node_modules/@atcute/multibase": { 224 + "version": "1.1.7", 225 + "license": "0BSD", 226 + "dependencies": { 227 + "@atcute/uint8array": "^1.1.0" 228 + } 229 + }, 230 + "node_modules/@atcute/oauth-browser-client": { 231 + "version": "2.0.3", 232 + "license": "0BSD", 233 + "dependencies": { 234 + "@atcute/client": "^4.1.1", 235 + "@atcute/identity-resolver": "^1.2.0", 236 + "@atcute/lexicons": "^1.2.5", 237 + "@atcute/multibase": "^1.1.6", 238 + "@atcute/uint8array": "^1.0.6", 239 + "nanoid": "^5.1.6" 240 + } 241 + }, 242 + "node_modules/@atcute/oauth-crypto": { 243 + "version": "0.1.0", 244 + "license": "0BSD", 245 + "dependencies": { 246 + "@atcute/multibase": "^1.1.7", 247 + "@atcute/uint8array": "^1.1.0", 248 + "@badrap/valita": "^0.4.6", 249 + "nanoid": "^5.1.6" 250 + } 251 + }, 252 + "node_modules/@atcute/oauth-keyset": { 253 + "version": "0.1.0", 254 + "license": "0BSD", 255 + "dependencies": { 256 + "@atcute/oauth-crypto": "^0.1.0" 257 + } 258 + }, 259 + "node_modules/@atcute/oauth-node-client": { 260 + "version": "1.1.0", 261 + "license": "0BSD", 262 + "dependencies": { 263 + "@atcute/client": "^4.2.1", 264 + "@atcute/identity": "^1.1.3", 265 + "@atcute/identity-resolver": "^1.2.2", 266 + "@atcute/lexicons": "^1.2.7", 267 + "@atcute/oauth-crypto": "^0.1.0", 268 + "@atcute/oauth-keyset": "^0.1.0", 269 + "@atcute/oauth-types": "^0.1.1", 270 + "@atcute/util-fetch": "^1.0.5", 271 + "@badrap/valita": "^0.4.6", 272 + "nanoid": "^5.1.6" 273 + } 274 + }, 275 + "node_modules/@atcute/oauth-types": { 276 + "version": "0.1.1", 277 + "license": "0BSD", 278 + "dependencies": { 279 + "@atcute/identity": "^1.1.3", 280 + "@atcute/lexicons": "^1.2.7", 281 + "@atcute/oauth-keyset": "^0.1.0", 282 + "@badrap/valita": "^0.4.6" 283 + } 284 + }, 285 + "node_modules/@atcute/pckt": { 286 + "version": "0.1.5", 287 + "license": "0BSD", 288 + "dependencies": { 289 + "@atcute/atproto": "^3.1.10", 290 + "@atcute/lexicons": "^1.2.7" 291 + } 292 + }, 293 + "node_modules/@atcute/repo": { 294 + "version": "0.1.1", 295 + "dev": true, 296 + "license": "0BSD", 297 + "dependencies": { 298 + "@atcute/car": "^5.0.0", 299 + "@atcute/cbor": "^2.2.8", 300 + "@atcute/cid": "^2.2.6", 301 + "@atcute/crypto": "^2.3.0", 302 + "@atcute/lexicons": "^1.2.5", 303 + "@atcute/mst": "^0.1.0", 304 + "@atcute/uint8array": "^1.0.6" 305 + } 306 + }, 307 + "node_modules/@atcute/standard-site": { 308 + "version": "1.0.0", 309 + "license": "0BSD", 310 + "dependencies": { 311 + "@atcute/atproto": "^3.1.10", 312 + "@atcute/lexicons": "^1.2.7" 313 + } 314 + }, 315 + "node_modules/@atcute/uint8array": { 316 + "version": "1.1.0", 317 + "license": "0BSD" 318 + }, 319 + "node_modules/@atcute/util-fetch": { 320 + "version": "1.0.5", 321 + "license": "0BSD", 322 + "dependencies": { 323 + "@badrap/valita": "^0.4.6" 324 + } 325 + }, 326 + "node_modules/@atcute/util-text": { 327 + "version": "1.1.0", 328 + "license": "0BSD", 329 + "dependencies": { 330 + "unicode-segmenter": "^0.14.5" 331 + } 332 + }, 333 + "node_modules/@atcute/varint": { 334 + "version": "1.0.3", 335 + "dev": true, 336 + "license": "0BSD" 337 + }, 338 + "node_modules/@badrap/valita": { 339 + "version": "0.4.6", 340 + "license": "MIT", 341 + "engines": { 342 + "node": ">= 18" 343 + } 344 + }, 345 + "node_modules/@codemirror/state": { 346 + "version": "6.5.0", 347 + "license": "MIT", 348 + "peer": true, 349 + "dependencies": { 350 + "@marijn/find-cluster-break": "^1.0.0" 351 + } 352 + }, 353 + "node_modules/@codemirror/view": { 354 + "version": "6.38.6", 355 + "license": "MIT", 356 + "peer": true, 357 + "dependencies": { 358 + "@codemirror/state": "^6.5.0", 359 + "crelt": "^1.0.6", 360 + "style-mod": "^4.1.0", 361 + "w3c-keyname": "^2.2.4" 362 + } 363 + }, 364 + "node_modules/@esbuild/aix-ppc64": { 365 + "version": "0.25.5", 366 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", 367 + "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", 368 + "cpu": [ 369 + "ppc64" 370 + ], 371 + "dev": true, 372 + "license": "MIT", 373 + "optional": true, 374 + "os": [ 375 + "aix" 376 + ], 377 + "engines": { 378 + "node": ">=18" 379 + } 380 + }, 381 + "node_modules/@esbuild/android-arm": { 382 + "version": "0.25.5", 383 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", 384 + "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", 385 + "cpu": [ 386 + "arm" 387 + ], 388 + "dev": true, 389 + "license": "MIT", 390 + "optional": true, 391 + "os": [ 392 + "android" 393 + ], 394 + "engines": { 395 + "node": ">=18" 396 + } 397 + }, 398 + "node_modules/@esbuild/android-arm64": { 399 + "version": "0.25.5", 400 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", 401 + "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", 402 + "cpu": [ 403 + "arm64" 404 + ], 405 + "dev": true, 406 + "license": "MIT", 407 + "optional": true, 408 + "os": [ 409 + "android" 410 + ], 411 + "engines": { 412 + "node": ">=18" 413 + } 414 + }, 415 + "node_modules/@esbuild/android-x64": { 416 + "version": "0.25.5", 417 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", 418 + "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", 419 + "cpu": [ 420 + "x64" 421 + ], 422 + "dev": true, 423 + "license": "MIT", 424 + "optional": true, 425 + "os": [ 426 + "android" 427 + ], 428 + "engines": { 429 + "node": ">=18" 430 + } 431 + }, 432 + "node_modules/@esbuild/darwin-arm64": { 433 + "version": "0.25.5", 434 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", 435 + "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", 436 + "cpu": [ 437 + "arm64" 438 + ], 439 + "dev": true, 440 + "license": "MIT", 441 + "optional": true, 442 + "os": [ 443 + "darwin" 444 + ], 445 + "engines": { 446 + "node": ">=18" 447 + } 448 + }, 449 + "node_modules/@esbuild/darwin-x64": { 450 + "version": "0.25.5", 451 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", 452 + "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", 453 + "cpu": [ 454 + "x64" 455 + ], 456 + "dev": true, 457 + "license": "MIT", 458 + "optional": true, 459 + "os": [ 460 + "darwin" 461 + ], 462 + "engines": { 463 + "node": ">=18" 464 + } 465 + }, 466 + "node_modules/@esbuild/freebsd-arm64": { 467 + "version": "0.25.5", 468 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", 469 + "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", 470 + "cpu": [ 471 + "arm64" 472 + ], 473 + "dev": true, 474 + "license": "MIT", 475 + "optional": true, 476 + "os": [ 477 + "freebsd" 478 + ], 479 + "engines": { 480 + "node": ">=18" 481 + } 482 + }, 483 + "node_modules/@esbuild/freebsd-x64": { 484 + "version": "0.25.5", 485 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", 486 + "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", 487 + "cpu": [ 488 + "x64" 489 + ], 490 + "dev": true, 491 + "license": "MIT", 492 + "optional": true, 493 + "os": [ 494 + "freebsd" 495 + ], 496 + "engines": { 497 + "node": ">=18" 498 + } 499 + }, 500 + "node_modules/@esbuild/linux-arm": { 501 + "version": "0.25.5", 502 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", 503 + "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", 504 + "cpu": [ 505 + "arm" 506 + ], 507 + "dev": true, 508 + "license": "MIT", 509 + "optional": true, 510 + "os": [ 511 + "linux" 512 + ], 513 + "engines": { 514 + "node": ">=18" 515 + } 516 + }, 517 + "node_modules/@esbuild/linux-arm64": { 518 + "version": "0.25.5", 519 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", 520 + "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", 521 + "cpu": [ 522 + "arm64" 523 + ], 524 + "dev": true, 525 + "license": "MIT", 526 + "optional": true, 527 + "os": [ 528 + "linux" 529 + ], 530 + "engines": { 531 + "node": ">=18" 532 + } 533 + }, 534 + "node_modules/@esbuild/linux-ia32": { 535 + "version": "0.25.5", 536 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", 537 + "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", 538 + "cpu": [ 539 + "ia32" 540 + ], 541 + "dev": true, 542 + "license": "MIT", 543 + "optional": true, 544 + "os": [ 545 + "linux" 546 + ], 547 + "engines": { 548 + "node": ">=18" 549 + } 550 + }, 551 + "node_modules/@esbuild/linux-loong64": { 552 + "version": "0.25.5", 553 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", 554 + "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", 555 + "cpu": [ 556 + "loong64" 557 + ], 558 + "dev": true, 559 + "license": "MIT", 560 + "optional": true, 561 + "os": [ 562 + "linux" 563 + ], 564 + "engines": { 565 + "node": ">=18" 566 + } 567 + }, 568 + "node_modules/@esbuild/linux-mips64el": { 569 + "version": "0.25.5", 570 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", 571 + "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", 572 + "cpu": [ 573 + "mips64el" 574 + ], 575 + "dev": true, 576 + "license": "MIT", 577 + "optional": true, 578 + "os": [ 579 + "linux" 580 + ], 581 + "engines": { 582 + "node": ">=18" 583 + } 584 + }, 585 + "node_modules/@esbuild/linux-ppc64": { 586 + "version": "0.25.5", 587 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", 588 + "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", 589 + "cpu": [ 590 + "ppc64" 591 + ], 592 + "dev": true, 593 + "license": "MIT", 594 + "optional": true, 595 + "os": [ 596 + "linux" 597 + ], 598 + "engines": { 599 + "node": ">=18" 600 + } 601 + }, 602 + "node_modules/@esbuild/linux-riscv64": { 603 + "version": "0.25.5", 604 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", 605 + "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", 606 + "cpu": [ 607 + "riscv64" 608 + ], 609 + "dev": true, 610 + "license": "MIT", 611 + "optional": true, 612 + "os": [ 613 + "linux" 614 + ], 615 + "engines": { 616 + "node": ">=18" 617 + } 618 + }, 619 + "node_modules/@esbuild/linux-s390x": { 620 + "version": "0.25.5", 621 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", 622 + "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", 623 + "cpu": [ 624 + "s390x" 625 + ], 626 + "dev": true, 627 + "license": "MIT", 628 + "optional": true, 629 + "os": [ 630 + "linux" 631 + ], 632 + "engines": { 633 + "node": ">=18" 634 + } 635 + }, 636 + "node_modules/@esbuild/linux-x64": { 637 + "version": "0.25.5", 638 + "cpu": [ 639 + "x64" 640 + ], 641 + "dev": true, 642 + "license": "MIT", 643 + "optional": true, 644 + "os": [ 645 + "linux" 646 + ], 647 + "engines": { 648 + "node": ">=18" 649 + } 650 + }, 651 + "node_modules/@esbuild/netbsd-arm64": { 652 + "version": "0.25.5", 653 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", 654 + "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", 655 + "cpu": [ 656 + "arm64" 657 + ], 658 + "dev": true, 659 + "license": "MIT", 660 + "optional": true, 661 + "os": [ 662 + "netbsd" 663 + ], 664 + "engines": { 665 + "node": ">=18" 666 + } 667 + }, 668 + "node_modules/@esbuild/netbsd-x64": { 669 + "version": "0.25.5", 670 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", 671 + "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", 672 + "cpu": [ 673 + "x64" 674 + ], 675 + "dev": true, 676 + "license": "MIT", 677 + "optional": true, 678 + "os": [ 679 + "netbsd" 680 + ], 681 + "engines": { 682 + "node": ">=18" 683 + } 684 + }, 685 + "node_modules/@esbuild/openbsd-arm64": { 686 + "version": "0.25.5", 687 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", 688 + "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", 689 + "cpu": [ 690 + "arm64" 691 + ], 692 + "dev": true, 693 + "license": "MIT", 694 + "optional": true, 695 + "os": [ 696 + "openbsd" 697 + ], 698 + "engines": { 699 + "node": ">=18" 700 + } 701 + }, 702 + "node_modules/@esbuild/openbsd-x64": { 703 + "version": "0.25.5", 704 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", 705 + "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", 706 + "cpu": [ 707 + "x64" 708 + ], 709 + "dev": true, 710 + "license": "MIT", 711 + "optional": true, 712 + "os": [ 713 + "openbsd" 714 + ], 715 + "engines": { 716 + "node": ">=18" 717 + } 718 + }, 719 + "node_modules/@esbuild/sunos-x64": { 720 + "version": "0.25.5", 721 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", 722 + "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", 723 + "cpu": [ 724 + "x64" 725 + ], 726 + "dev": true, 727 + "license": "MIT", 728 + "optional": true, 729 + "os": [ 730 + "sunos" 731 + ], 732 + "engines": { 733 + "node": ">=18" 734 + } 735 + }, 736 + "node_modules/@esbuild/win32-arm64": { 737 + "version": "0.25.5", 738 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", 739 + "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", 740 + "cpu": [ 741 + "arm64" 742 + ], 743 + "dev": true, 744 + "license": "MIT", 745 + "optional": true, 746 + "os": [ 747 + "win32" 748 + ], 749 + "engines": { 750 + "node": ">=18" 751 + } 752 + }, 753 + "node_modules/@esbuild/win32-ia32": { 754 + "version": "0.25.5", 755 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", 756 + "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", 757 + "cpu": [ 758 + "ia32" 759 + ], 760 + "dev": true, 761 + "license": "MIT", 762 + "optional": true, 763 + "os": [ 764 + "win32" 765 + ], 766 + "engines": { 767 + "node": ">=18" 768 + } 769 + }, 770 + "node_modules/@esbuild/win32-x64": { 771 + "version": "0.25.5", 772 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", 773 + "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", 774 + "cpu": [ 775 + "x64" 776 + ], 777 + "dev": true, 778 + "license": "MIT", 779 + "optional": true, 780 + "os": [ 781 + "win32" 782 + ], 783 + "engines": { 784 + "node": ">=18" 785 + } 786 + }, 787 + "node_modules/@eslint-community/eslint-utils": { 788 + "version": "4.9.1", 789 + "dev": true, 790 + "license": "MIT", 791 + "dependencies": { 792 + "eslint-visitor-keys": "^3.4.3" 793 + }, 794 + "engines": { 795 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 796 + }, 797 + "funding": { 798 + "url": "https://opencollective.com/eslint" 799 + }, 800 + "peerDependencies": { 801 + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 802 + } 803 + }, 804 + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { 805 + "version": "3.4.3", 806 + "dev": true, 807 + "license": "Apache-2.0", 808 + "engines": { 809 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 810 + }, 811 + "funding": { 812 + "url": "https://opencollective.com/eslint" 813 + } 814 + }, 815 + "node_modules/@eslint-community/regexpp": { 816 + "version": "4.12.2", 817 + "dev": true, 818 + "license": "MIT", 819 + "engines": { 820 + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 821 + } 822 + }, 823 + "node_modules/@eslint/config-array": { 824 + "version": "0.21.1", 825 + "dev": true, 826 + "license": "Apache-2.0", 827 + "dependencies": { 828 + "@eslint/object-schema": "^2.1.7", 829 + "debug": "^4.3.1", 830 + "minimatch": "^3.1.2" 831 + }, 832 + "engines": { 833 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 834 + } 835 + }, 836 + "node_modules/@eslint/config-helpers": { 837 + "version": "0.4.2", 838 + "dev": true, 839 + "license": "Apache-2.0", 840 + "dependencies": { 841 + "@eslint/core": "^0.17.0" 842 + }, 843 + "engines": { 844 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 845 + } 846 + }, 847 + "node_modules/@eslint/core": { 848 + "version": "0.17.0", 849 + "dev": true, 850 + "license": "Apache-2.0", 851 + "dependencies": { 852 + "@types/json-schema": "^7.0.15" 853 + }, 854 + "engines": { 855 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 856 + } 857 + }, 858 + "node_modules/@eslint/eslintrc": { 859 + "version": "3.3.3", 860 + "dev": true, 861 + "license": "MIT", 862 + "dependencies": { 863 + "ajv": "^6.12.4", 864 + "debug": "^4.3.2", 865 + "espree": "^10.0.1", 866 + "globals": "^14.0.0", 867 + "ignore": "^5.2.0", 868 + "import-fresh": "^3.2.1", 869 + "js-yaml": "^4.1.1", 870 + "minimatch": "^3.1.2", 871 + "strip-json-comments": "^3.1.1" 872 + }, 873 + "engines": { 874 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 875 + }, 876 + "funding": { 877 + "url": "https://opencollective.com/eslint" 878 + } 879 + }, 880 + "node_modules/@eslint/js": { 881 + "version": "9.30.1", 882 + "dev": true, 883 + "license": "MIT", 884 + "peer": true, 885 + "engines": { 886 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 887 + }, 888 + "funding": { 889 + "url": "https://eslint.org/donate" 890 + } 891 + }, 892 + "node_modules/@eslint/json": { 893 + "version": "0.14.0", 894 + "dev": true, 895 + "license": "Apache-2.0", 896 + "peer": true, 897 + "dependencies": { 898 + "@eslint/core": "^0.17.0", 899 + "@eslint/plugin-kit": "^0.4.1", 900 + "@humanwhocodes/momoa": "^3.3.10", 901 + "natural-compare": "^1.4.0" 902 + }, 903 + "engines": { 904 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 905 + } 906 + }, 907 + "node_modules/@eslint/object-schema": { 908 + "version": "2.1.7", 909 + "dev": true, 910 + "license": "Apache-2.0", 911 + "engines": { 912 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 913 + } 914 + }, 915 + "node_modules/@eslint/plugin-kit": { 916 + "version": "0.4.1", 917 + "dev": true, 918 + "license": "Apache-2.0", 919 + "dependencies": { 920 + "@eslint/core": "^0.17.0", 921 + "levn": "^0.4.1" 922 + }, 923 + "engines": { 924 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 925 + } 926 + }, 927 + "node_modules/@humanfs/core": { 928 + "version": "0.19.1", 929 + "dev": true, 930 + "license": "Apache-2.0", 931 + "engines": { 932 + "node": ">=18.18.0" 933 + } 934 + }, 935 + "node_modules/@humanfs/node": { 936 + "version": "0.16.7", 937 + "dev": true, 938 + "license": "Apache-2.0", 939 + "dependencies": { 940 + "@humanfs/core": "^0.19.1", 941 + "@humanwhocodes/retry": "^0.4.0" 942 + }, 943 + "engines": { 944 + "node": ">=18.18.0" 945 + } 946 + }, 947 + "node_modules/@humanwhocodes/module-importer": { 948 + "version": "1.0.1", 949 + "dev": true, 950 + "license": "Apache-2.0", 951 + "engines": { 952 + "node": ">=12.22" 953 + }, 954 + "funding": { 955 + "type": "github", 956 + "url": "https://github.com/sponsors/nzakas" 957 + } 958 + }, 959 + "node_modules/@humanwhocodes/momoa": { 960 + "version": "3.3.10", 961 + "dev": true, 962 + "license": "Apache-2.0", 963 + "engines": { 964 + "node": ">=18" 965 + } 966 + }, 967 + "node_modules/@humanwhocodes/retry": { 968 + "version": "0.4.3", 969 + "dev": true, 970 + "license": "Apache-2.0", 971 + "engines": { 972 + "node": ">=18.18" 973 + }, 974 + "funding": { 975 + "type": "github", 976 + "url": "https://github.com/sponsors/nzakas" 977 + } 978 + }, 979 + "node_modules/@marijn/find-cluster-break": { 980 + "version": "1.0.2", 981 + "license": "MIT" 982 + }, 983 + "node_modules/@microsoft/eslint-plugin-sdl": { 984 + "version": "1.1.0", 985 + "dev": true, 986 + "license": "MIT", 987 + "dependencies": { 988 + "eslint-plugin-n": "17.10.3", 989 + "eslint-plugin-react": "7.37.3", 990 + "eslint-plugin-security": "1.4.0" 991 + }, 992 + "engines": { 993 + "node": ">=18.0.0" 994 + }, 995 + "peerDependencies": { 996 + "eslint": "^9" 997 + } 998 + }, 999 + "node_modules/@microsoft/eslint-plugin-sdl/node_modules/eslint-plugin-security": { 1000 + "version": "1.4.0", 1001 + "dev": true, 1002 + "license": "Apache-2.0", 1003 + "dependencies": { 1004 + "safe-regex": "^1.1.0" 1005 + } 1006 + }, 1007 + "node_modules/@microsoft/eslint-plugin-sdl/node_modules/eslint-plugin-security/node_modules/safe-regex": { 1008 + "version": "1.1.0", 1009 + "dev": true, 1010 + "license": "MIT", 1011 + "dependencies": { 1012 + "ret": "~0.1.10" 1013 + } 1014 + }, 1015 + "node_modules/@noble/secp256k1": { 1016 + "version": "3.0.0", 1017 + "dev": true, 1018 + "license": "MIT", 1019 + "funding": { 1020 + "url": "https://paulmillr.com/funding/" 1021 + } 1022 + }, 1023 + "node_modules/@nodelib/fs.scandir": { 1024 + "version": "2.1.5", 1025 + "dev": true, 1026 + "license": "MIT", 1027 + "dependencies": { 1028 + "@nodelib/fs.stat": "2.0.5", 1029 + "run-parallel": "^1.1.9" 1030 + }, 1031 + "engines": { 1032 + "node": ">= 8" 1033 + } 1034 + }, 1035 + "node_modules/@nodelib/fs.stat": { 1036 + "version": "2.0.5", 1037 + "dev": true, 1038 + "license": "MIT", 1039 + "engines": { 1040 + "node": ">= 8" 1041 + } 1042 + }, 1043 + "node_modules/@nodelib/fs.walk": { 1044 + "version": "1.2.8", 1045 + "dev": true, 1046 + "license": "MIT", 1047 + "dependencies": { 1048 + "@nodelib/fs.scandir": "2.1.5", 1049 + "fastq": "^1.6.0" 1050 + }, 1051 + "engines": { 1052 + "node": ">= 8" 1053 + } 1054 + }, 1055 + "node_modules/@optique/core": { 1056 + "version": "0.6.11", 1057 + "dev": true, 1058 + "funding": [ 1059 + "https://github.com/sponsors/dahlia" 1060 + ], 1061 + "license": "MIT", 1062 + "engines": { 1063 + "bun": ">=1.2.0", 1064 + "deno": ">=2.3.0", 1065 + "node": ">=20.0.0" 1066 + } 1067 + }, 1068 + "node_modules/@optique/run": { 1069 + "version": "0.6.11", 1070 + "dev": true, 1071 + "funding": [ 1072 + "https://github.com/sponsors/dahlia" 1073 + ], 1074 + "license": "MIT", 1075 + "dependencies": { 1076 + "@optique/core": "0.6.11" 1077 + }, 1078 + "engines": { 1079 + "bun": ">=1.2.0", 1080 + "deno": ">=2.3.0", 1081 + "node": ">=20.0.0" 1082 + } 1083 + }, 1084 + "node_modules/@pkgr/core": { 1085 + "version": "0.1.2", 1086 + "dev": true, 1087 + "license": "MIT", 1088 + "engines": { 1089 + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" 1090 + }, 1091 + "funding": { 1092 + "url": "https://opencollective.com/unts" 1093 + } 1094 + }, 1095 + "node_modules/@rtsao/scc": { 1096 + "version": "1.1.0", 1097 + "dev": true, 1098 + "license": "MIT" 1099 + }, 1100 + "node_modules/@standard-schema/spec": { 1101 + "version": "1.1.0", 1102 + "license": "MIT" 1103 + }, 1104 + "node_modules/@types/codemirror": { 1105 + "version": "5.60.8", 1106 + "license": "MIT", 1107 + "dependencies": { 1108 + "@types/tern": "*" 1109 + } 1110 + }, 1111 + "node_modules/@types/debug": { 1112 + "version": "4.1.12", 1113 + "license": "MIT", 1114 + "dependencies": { 1115 + "@types/ms": "*" 1116 + } 1117 + }, 1118 + "node_modules/@types/eslint": { 1119 + "version": "8.56.2", 1120 + "dev": true, 1121 + "license": "MIT", 1122 + "dependencies": { 1123 + "@types/estree": "*", 1124 + "@types/json-schema": "*" 1125 + } 1126 + }, 1127 + "node_modules/@types/estree": { 1128 + "version": "1.0.8", 1129 + "license": "MIT" 1130 + }, 1131 + "node_modules/@types/json-schema": { 1132 + "version": "7.0.15", 1133 + "dev": true, 1134 + "license": "MIT" 1135 + }, 1136 + "node_modules/@types/json5": { 1137 + "version": "0.0.29", 1138 + "dev": true, 1139 + "license": "MIT" 1140 + }, 1141 + "node_modules/@types/mdast": { 1142 + "version": "4.0.4", 1143 + "license": "MIT", 1144 + "dependencies": { 1145 + "@types/unist": "*" 1146 + } 1147 + }, 1148 + "node_modules/@types/ms": { 1149 + "version": "2.1.0", 1150 + "license": "MIT" 1151 + }, 1152 + "node_modules/@types/node": { 1153 + "version": "16.18.126", 1154 + "dev": true, 1155 + "license": "MIT" 1156 + }, 1157 + "node_modules/@types/tern": { 1158 + "version": "0.23.9", 1159 + "license": "MIT", 1160 + "dependencies": { 1161 + "@types/estree": "*" 1162 + } 1163 + }, 1164 + "node_modules/@types/unist": { 1165 + "version": "3.0.3", 1166 + "license": "MIT" 1167 + }, 1168 + "node_modules/@typescript-eslint/eslint-plugin": { 1169 + "version": "8.35.1", 1170 + "dev": true, 1171 + "license": "MIT", 1172 + "dependencies": { 1173 + "@eslint-community/regexpp": "^4.10.0", 1174 + "@typescript-eslint/scope-manager": "8.35.1", 1175 + "@typescript-eslint/type-utils": "8.35.1", 1176 + "@typescript-eslint/utils": "8.35.1", 1177 + "@typescript-eslint/visitor-keys": "8.35.1", 1178 + "graphemer": "^1.4.0", 1179 + "ignore": "^7.0.0", 1180 + "natural-compare": "^1.4.0", 1181 + "ts-api-utils": "^2.1.0" 1182 + }, 1183 + "engines": { 1184 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1185 + }, 1186 + "funding": { 1187 + "type": "opencollective", 1188 + "url": "https://opencollective.com/typescript-eslint" 1189 + }, 1190 + "peerDependencies": { 1191 + "@typescript-eslint/parser": "^8.35.1", 1192 + "eslint": "^8.57.0 || ^9.0.0", 1193 + "typescript": ">=4.8.4 <5.9.0" 1194 + } 1195 + }, 1196 + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { 1197 + "version": "7.0.5", 1198 + "dev": true, 1199 + "license": "MIT", 1200 + "engines": { 1201 + "node": ">= 4" 1202 + } 1203 + }, 1204 + "node_modules/@typescript-eslint/parser": { 1205 + "version": "8.35.1", 1206 + "dev": true, 1207 + "license": "MIT", 1208 + "peer": true, 1209 + "dependencies": { 1210 + "@typescript-eslint/scope-manager": "8.35.1", 1211 + "@typescript-eslint/types": "8.35.1", 1212 + "@typescript-eslint/typescript-estree": "8.35.1", 1213 + "@typescript-eslint/visitor-keys": "8.35.1", 1214 + "debug": "^4.3.4" 1215 + }, 1216 + "engines": { 1217 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1218 + }, 1219 + "funding": { 1220 + "type": "opencollective", 1221 + "url": "https://opencollective.com/typescript-eslint" 1222 + }, 1223 + "peerDependencies": { 1224 + "eslint": "^8.57.0 || ^9.0.0", 1225 + "typescript": ">=4.8.4 <5.9.0" 1226 + } 1227 + }, 1228 + "node_modules/@typescript-eslint/project-service": { 1229 + "version": "8.35.1", 1230 + "dev": true, 1231 + "license": "MIT", 1232 + "dependencies": { 1233 + "@typescript-eslint/tsconfig-utils": "^8.35.1", 1234 + "@typescript-eslint/types": "^8.35.1", 1235 + "debug": "^4.3.4" 1236 + }, 1237 + "engines": { 1238 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1239 + }, 1240 + "funding": { 1241 + "type": "opencollective", 1242 + "url": "https://opencollective.com/typescript-eslint" 1243 + }, 1244 + "peerDependencies": { 1245 + "typescript": ">=4.8.4 <5.9.0" 1246 + } 1247 + }, 1248 + "node_modules/@typescript-eslint/scope-manager": { 1249 + "version": "8.35.1", 1250 + "dev": true, 1251 + "license": "MIT", 1252 + "dependencies": { 1253 + "@typescript-eslint/types": "8.35.1", 1254 + "@typescript-eslint/visitor-keys": "8.35.1" 1255 + }, 1256 + "engines": { 1257 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1258 + }, 1259 + "funding": { 1260 + "type": "opencollective", 1261 + "url": "https://opencollective.com/typescript-eslint" 1262 + } 1263 + }, 1264 + "node_modules/@typescript-eslint/tsconfig-utils": { 1265 + "version": "8.35.1", 1266 + "dev": true, 1267 + "license": "MIT", 1268 + "engines": { 1269 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1270 + }, 1271 + "funding": { 1272 + "type": "opencollective", 1273 + "url": "https://opencollective.com/typescript-eslint" 1274 + }, 1275 + "peerDependencies": { 1276 + "typescript": ">=4.8.4 <5.9.0" 1277 + } 1278 + }, 1279 + "node_modules/@typescript-eslint/type-utils": { 1280 + "version": "8.35.1", 1281 + "dev": true, 1282 + "license": "MIT", 1283 + "dependencies": { 1284 + "@typescript-eslint/typescript-estree": "8.35.1", 1285 + "@typescript-eslint/utils": "8.35.1", 1286 + "debug": "^4.3.4", 1287 + "ts-api-utils": "^2.1.0" 1288 + }, 1289 + "engines": { 1290 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1291 + }, 1292 + "funding": { 1293 + "type": "opencollective", 1294 + "url": "https://opencollective.com/typescript-eslint" 1295 + }, 1296 + "peerDependencies": { 1297 + "eslint": "^8.57.0 || ^9.0.0", 1298 + "typescript": ">=4.8.4 <5.9.0" 1299 + } 1300 + }, 1301 + "node_modules/@typescript-eslint/types": { 1302 + "version": "8.35.1", 1303 + "dev": true, 1304 + "license": "MIT", 1305 + "engines": { 1306 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1307 + }, 1308 + "funding": { 1309 + "type": "opencollective", 1310 + "url": "https://opencollective.com/typescript-eslint" 1311 + } 1312 + }, 1313 + "node_modules/@typescript-eslint/typescript-estree": { 1314 + "version": "8.35.1", 1315 + "dev": true, 1316 + "license": "MIT", 1317 + "dependencies": { 1318 + "@typescript-eslint/project-service": "8.35.1", 1319 + "@typescript-eslint/tsconfig-utils": "8.35.1", 1320 + "@typescript-eslint/types": "8.35.1", 1321 + "@typescript-eslint/visitor-keys": "8.35.1", 1322 + "debug": "^4.3.4", 1323 + "fast-glob": "^3.3.2", 1324 + "is-glob": "^4.0.3", 1325 + "minimatch": "^9.0.4", 1326 + "semver": "^7.6.0", 1327 + "ts-api-utils": "^2.1.0" 1328 + }, 1329 + "engines": { 1330 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1331 + }, 1332 + "funding": { 1333 + "type": "opencollective", 1334 + "url": "https://opencollective.com/typescript-eslint" 1335 + }, 1336 + "peerDependencies": { 1337 + "typescript": ">=4.8.4 <5.9.0" 1338 + } 1339 + }, 1340 + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { 1341 + "version": "9.0.5", 1342 + "dev": true, 1343 + "license": "ISC", 1344 + "dependencies": { 1345 + "brace-expansion": "^2.0.1" 1346 + }, 1347 + "engines": { 1348 + "node": ">=16 || 14 >=14.17" 1349 + }, 1350 + "funding": { 1351 + "url": "https://github.com/sponsors/isaacs" 1352 + } 1353 + }, 1354 + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/node_modules/brace-expansion": { 1355 + "version": "2.0.2", 1356 + "dev": true, 1357 + "license": "MIT", 1358 + "dependencies": { 1359 + "balanced-match": "^1.0.0" 1360 + } 1361 + }, 1362 + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { 1363 + "version": "7.7.3", 1364 + "dev": true, 1365 + "license": "ISC", 1366 + "bin": { 1367 + "semver": "bin/semver.js" 1368 + }, 1369 + "engines": { 1370 + "node": ">=10" 1371 + } 1372 + }, 1373 + "node_modules/@typescript-eslint/utils": { 1374 + "version": "8.35.1", 1375 + "dev": true, 1376 + "license": "MIT", 1377 + "dependencies": { 1378 + "@eslint-community/eslint-utils": "^4.7.0", 1379 + "@typescript-eslint/scope-manager": "8.35.1", 1380 + "@typescript-eslint/types": "8.35.1", 1381 + "@typescript-eslint/typescript-estree": "8.35.1" 1382 + }, 1383 + "engines": { 1384 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1385 + }, 1386 + "funding": { 1387 + "type": "opencollective", 1388 + "url": "https://opencollective.com/typescript-eslint" 1389 + }, 1390 + "peerDependencies": { 1391 + "eslint": "^8.57.0 || ^9.0.0", 1392 + "typescript": ">=4.8.4 <5.9.0" 1393 + } 1394 + }, 1395 + "node_modules/@typescript-eslint/visitor-keys": { 1396 + "version": "8.35.1", 1397 + "dev": true, 1398 + "license": "MIT", 1399 + "dependencies": { 1400 + "@typescript-eslint/types": "8.35.1", 1401 + "eslint-visitor-keys": "^4.2.1" 1402 + }, 1403 + "engines": { 1404 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 1405 + }, 1406 + "funding": { 1407 + "type": "opencollective", 1408 + "url": "https://opencollective.com/typescript-eslint" 1409 + } 1410 + }, 1411 + "node_modules/acorn": { 1412 + "version": "8.15.0", 1413 + "dev": true, 1414 + "license": "MIT", 1415 + "peer": true, 1416 + "bin": { 1417 + "acorn": "bin/acorn" 1418 + }, 1419 + "engines": { 1420 + "node": ">=0.4.0" 1421 + } 1422 + }, 1423 + "node_modules/acorn-jsx": { 1424 + "version": "5.3.2", 1425 + "dev": true, 1426 + "license": "MIT", 1427 + "peerDependencies": { 1428 + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1429 + } 1430 + }, 1431 + "node_modules/ajv": { 1432 + "version": "6.12.6", 1433 + "dev": true, 1434 + "license": "MIT", 1435 + "dependencies": { 1436 + "fast-deep-equal": "^3.1.1", 1437 + "fast-json-stable-stringify": "^2.0.0", 1438 + "json-schema-traverse": "^0.4.1", 1439 + "uri-js": "^4.2.2" 1440 + }, 1441 + "funding": { 1442 + "type": "github", 1443 + "url": "https://github.com/sponsors/epoberezkin" 1444 + } 1445 + }, 1446 + "node_modules/ansi-styles": { 1447 + "version": "4.3.0", 1448 + "dev": true, 1449 + "license": "MIT", 1450 + "dependencies": { 1451 + "color-convert": "^2.0.1" 1452 + }, 1453 + "engines": { 1454 + "node": ">=8" 1455 + }, 1456 + "funding": { 1457 + "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1458 + } 1459 + }, 1460 + "node_modules/argparse": { 1461 + "version": "2.0.1", 1462 + "dev": true, 1463 + "license": "Python-2.0" 1464 + }, 1465 + "node_modules/array-buffer-byte-length": { 1466 + "version": "1.0.2", 1467 + "dev": true, 1468 + "license": "MIT", 1469 + "dependencies": { 1470 + "call-bound": "^1.0.3", 1471 + "is-array-buffer": "^3.0.5" 1472 + }, 1473 + "engines": { 1474 + "node": ">= 0.4" 1475 + }, 1476 + "funding": { 1477 + "url": "https://github.com/sponsors/ljharb" 1478 + } 1479 + }, 1480 + "node_modules/array-includes": { 1481 + "version": "3.1.9", 1482 + "dev": true, 1483 + "license": "MIT", 1484 + "dependencies": { 1485 + "call-bind": "^1.0.8", 1486 + "call-bound": "^1.0.4", 1487 + "define-properties": "^1.2.1", 1488 + "es-abstract": "^1.24.0", 1489 + "es-object-atoms": "^1.1.1", 1490 + "get-intrinsic": "^1.3.0", 1491 + "is-string": "^1.1.1", 1492 + "math-intrinsics": "^1.1.0" 1493 + }, 1494 + "engines": { 1495 + "node": ">= 0.4" 1496 + }, 1497 + "funding": { 1498 + "url": "https://github.com/sponsors/ljharb" 1499 + } 1500 + }, 1501 + "node_modules/array.prototype.findlast": { 1502 + "version": "1.2.5", 1503 + "dev": true, 1504 + "license": "MIT", 1505 + "dependencies": { 1506 + "call-bind": "^1.0.7", 1507 + "define-properties": "^1.2.1", 1508 + "es-abstract": "^1.23.2", 1509 + "es-errors": "^1.3.0", 1510 + "es-object-atoms": "^1.0.0", 1511 + "es-shim-unscopables": "^1.0.2" 1512 + }, 1513 + "engines": { 1514 + "node": ">= 0.4" 1515 + }, 1516 + "funding": { 1517 + "url": "https://github.com/sponsors/ljharb" 1518 + } 1519 + }, 1520 + "node_modules/array.prototype.findlastindex": { 1521 + "version": "1.2.6", 1522 + "dev": true, 1523 + "license": "MIT", 1524 + "dependencies": { 1525 + "call-bind": "^1.0.8", 1526 + "call-bound": "^1.0.4", 1527 + "define-properties": "^1.2.1", 1528 + "es-abstract": "^1.23.9", 1529 + "es-errors": "^1.3.0", 1530 + "es-object-atoms": "^1.1.1", 1531 + "es-shim-unscopables": "^1.1.0" 1532 + }, 1533 + "engines": { 1534 + "node": ">= 0.4" 1535 + }, 1536 + "funding": { 1537 + "url": "https://github.com/sponsors/ljharb" 1538 + } 1539 + }, 1540 + "node_modules/array.prototype.flat": { 1541 + "version": "1.3.3", 1542 + "dev": true, 1543 + "license": "MIT", 1544 + "dependencies": { 1545 + "call-bind": "^1.0.8", 1546 + "define-properties": "^1.2.1", 1547 + "es-abstract": "^1.23.5", 1548 + "es-shim-unscopables": "^1.0.2" 1549 + }, 1550 + "engines": { 1551 + "node": ">= 0.4" 1552 + }, 1553 + "funding": { 1554 + "url": "https://github.com/sponsors/ljharb" 1555 + } 1556 + }, 1557 + "node_modules/array.prototype.flatmap": { 1558 + "version": "1.3.3", 1559 + "dev": true, 1560 + "license": "MIT", 1561 + "dependencies": { 1562 + "call-bind": "^1.0.8", 1563 + "define-properties": "^1.2.1", 1564 + "es-abstract": "^1.23.5", 1565 + "es-shim-unscopables": "^1.0.2" 1566 + }, 1567 + "engines": { 1568 + "node": ">= 0.4" 1569 + }, 1570 + "funding": { 1571 + "url": "https://github.com/sponsors/ljharb" 1572 + } 1573 + }, 1574 + "node_modules/array.prototype.tosorted": { 1575 + "version": "1.1.4", 1576 + "dev": true, 1577 + "license": "MIT", 1578 + "dependencies": { 1579 + "call-bind": "^1.0.7", 1580 + "define-properties": "^1.2.1", 1581 + "es-abstract": "^1.23.3", 1582 + "es-errors": "^1.3.0", 1583 + "es-shim-unscopables": "^1.0.2" 1584 + }, 1585 + "engines": { 1586 + "node": ">= 0.4" 1587 + } 1588 + }, 1589 + "node_modules/arraybuffer.prototype.slice": { 1590 + "version": "1.0.4", 1591 + "dev": true, 1592 + "license": "MIT", 1593 + "dependencies": { 1594 + "array-buffer-byte-length": "^1.0.1", 1595 + "call-bind": "^1.0.8", 1596 + "define-properties": "^1.2.1", 1597 + "es-abstract": "^1.23.5", 1598 + "es-errors": "^1.3.0", 1599 + "get-intrinsic": "^1.2.6", 1600 + "is-array-buffer": "^3.0.4" 1601 + }, 1602 + "engines": { 1603 + "node": ">= 0.4" 1604 + }, 1605 + "funding": { 1606 + "url": "https://github.com/sponsors/ljharb" 1607 + } 1608 + }, 1609 + "node_modules/async-function": { 1610 + "version": "1.0.0", 1611 + "dev": true, 1612 + "license": "MIT", 1613 + "engines": { 1614 + "node": ">= 0.4" 1615 + } 1616 + }, 1617 + "node_modules/available-typed-arrays": { 1618 + "version": "1.0.7", 1619 + "dev": true, 1620 + "license": "MIT", 1621 + "dependencies": { 1622 + "possible-typed-array-names": "^1.0.0" 1623 + }, 1624 + "engines": { 1625 + "node": ">= 0.4" 1626 + }, 1627 + "funding": { 1628 + "url": "https://github.com/sponsors/ljharb" 1629 + } 1630 + }, 1631 + "node_modules/bail": { 1632 + "version": "2.0.2", 1633 + "license": "MIT", 1634 + "funding": { 1635 + "type": "github", 1636 + "url": "https://github.com/sponsors/wooorm" 1637 + } 1638 + }, 1639 + "node_modules/balanced-match": { 1640 + "version": "1.0.2", 1641 + "dev": true, 1642 + "license": "MIT" 1643 + }, 1644 + "node_modules/brace-expansion": { 1645 + "version": "1.1.12", 1646 + "dev": true, 1647 + "license": "MIT", 1648 + "dependencies": { 1649 + "balanced-match": "^1.0.0", 1650 + "concat-map": "0.0.1" 1651 + } 1652 + }, 1653 + "node_modules/braces": { 1654 + "version": "3.0.3", 1655 + "dev": true, 1656 + "license": "MIT", 1657 + "dependencies": { 1658 + "fill-range": "^7.1.1" 1659 + }, 1660 + "engines": { 1661 + "node": ">=8" 1662 + } 1663 + }, 1664 + "node_modules/call-bind": { 1665 + "version": "1.0.8", 1666 + "dev": true, 1667 + "license": "MIT", 1668 + "dependencies": { 1669 + "call-bind-apply-helpers": "^1.0.0", 1670 + "es-define-property": "^1.0.0", 1671 + "get-intrinsic": "^1.2.4", 1672 + "set-function-length": "^1.2.2" 1673 + }, 1674 + "engines": { 1675 + "node": ">= 0.4" 1676 + }, 1677 + "funding": { 1678 + "url": "https://github.com/sponsors/ljharb" 1679 + } 1680 + }, 1681 + "node_modules/call-bind-apply-helpers": { 1682 + "version": "1.0.2", 1683 + "dev": true, 1684 + "license": "MIT", 1685 + "dependencies": { 1686 + "es-errors": "^1.3.0", 1687 + "function-bind": "^1.1.2" 1688 + }, 1689 + "engines": { 1690 + "node": ">= 0.4" 1691 + } 1692 + }, 1693 + "node_modules/call-bound": { 1694 + "version": "1.0.4", 1695 + "dev": true, 1696 + "license": "MIT", 1697 + "dependencies": { 1698 + "call-bind-apply-helpers": "^1.0.2", 1699 + "get-intrinsic": "^1.3.0" 1700 + }, 1701 + "engines": { 1702 + "node": ">= 0.4" 1703 + }, 1704 + "funding": { 1705 + "url": "https://github.com/sponsors/ljharb" 1706 + } 1707 + }, 1708 + "node_modules/callsites": { 1709 + "version": "3.1.0", 1710 + "dev": true, 1711 + "license": "MIT", 1712 + "engines": { 1713 + "node": ">=6" 1714 + } 1715 + }, 1716 + "node_modules/chalk": { 1717 + "version": "4.1.2", 1718 + "dev": true, 1719 + "license": "MIT", 1720 + "dependencies": { 1721 + "ansi-styles": "^4.1.0", 1722 + "supports-color": "^7.1.0" 1723 + }, 1724 + "engines": { 1725 + "node": ">=10" 1726 + }, 1727 + "funding": { 1728 + "url": "https://github.com/chalk/chalk?sponsor=1" 1729 + } 1730 + }, 1731 + "node_modules/character-entities": { 1732 + "version": "2.0.2", 1733 + "license": "MIT", 1734 + "funding": { 1735 + "type": "github", 1736 + "url": "https://github.com/sponsors/wooorm" 1737 + } 1738 + }, 1739 + "node_modules/color-convert": { 1740 + "version": "2.0.1", 1741 + "dev": true, 1742 + "license": "MIT", 1743 + "dependencies": { 1744 + "color-name": "~1.1.4" 1745 + }, 1746 + "engines": { 1747 + "node": ">=7.0.0" 1748 + } 1749 + }, 1750 + "node_modules/color-name": { 1751 + "version": "1.1.4", 1752 + "dev": true, 1753 + "license": "MIT" 1754 + }, 1755 + "node_modules/concat-map": { 1756 + "version": "0.0.1", 1757 + "dev": true, 1758 + "license": "MIT" 1759 + }, 1760 + "node_modules/crelt": { 1761 + "version": "1.0.6", 1762 + "license": "MIT" 1763 + }, 1764 + "node_modules/cross-spawn": { 1765 + "version": "7.0.6", 1766 + "dev": true, 1767 + "license": "MIT", 1768 + "dependencies": { 1769 + "path-key": "^3.1.0", 1770 + "shebang-command": "^2.0.0", 1771 + "which": "^2.0.1" 1772 + }, 1773 + "engines": { 1774 + "node": ">= 8" 1775 + } 1776 + }, 1777 + "node_modules/data-view-buffer": { 1778 + "version": "1.0.2", 1779 + "dev": true, 1780 + "license": "MIT", 1781 + "dependencies": { 1782 + "call-bound": "^1.0.3", 1783 + "es-errors": "^1.3.0", 1784 + "is-data-view": "^1.0.2" 1785 + }, 1786 + "engines": { 1787 + "node": ">= 0.4" 1788 + }, 1789 + "funding": { 1790 + "url": "https://github.com/sponsors/ljharb" 1791 + } 1792 + }, 1793 + "node_modules/data-view-byte-length": { 1794 + "version": "1.0.2", 1795 + "dev": true, 1796 + "license": "MIT", 1797 + "dependencies": { 1798 + "call-bound": "^1.0.3", 1799 + "es-errors": "^1.3.0", 1800 + "is-data-view": "^1.0.2" 1801 + }, 1802 + "engines": { 1803 + "node": ">= 0.4" 1804 + }, 1805 + "funding": { 1806 + "url": "https://github.com/sponsors/inspect-js" 1807 + } 1808 + }, 1809 + "node_modules/data-view-byte-offset": { 1810 + "version": "1.0.1", 1811 + "dev": true, 1812 + "license": "MIT", 1813 + "dependencies": { 1814 + "call-bound": "^1.0.2", 1815 + "es-errors": "^1.3.0", 1816 + "is-data-view": "^1.0.1" 1817 + }, 1818 + "engines": { 1819 + "node": ">= 0.4" 1820 + }, 1821 + "funding": { 1822 + "url": "https://github.com/sponsors/ljharb" 1823 + } 1824 + }, 1825 + "node_modules/debug": { 1826 + "version": "4.4.3", 1827 + "license": "MIT", 1828 + "dependencies": { 1829 + "ms": "^2.1.3" 1830 + }, 1831 + "engines": { 1832 + "node": ">=6.0" 1833 + }, 1834 + "peerDependenciesMeta": { 1835 + "supports-color": { 1836 + "optional": true 1837 + } 1838 + } 1839 + }, 1840 + "node_modules/decode-named-character-reference": { 1841 + "version": "1.3.0", 1842 + "license": "MIT", 1843 + "dependencies": { 1844 + "character-entities": "^2.0.0" 1845 + }, 1846 + "funding": { 1847 + "type": "github", 1848 + "url": "https://github.com/sponsors/wooorm" 1849 + } 1850 + }, 1851 + "node_modules/deep-is": { 1852 + "version": "0.1.4", 1853 + "dev": true, 1854 + "license": "MIT" 1855 + }, 1856 + "node_modules/define-data-property": { 1857 + "version": "1.1.4", 1858 + "dev": true, 1859 + "license": "MIT", 1860 + "dependencies": { 1861 + "es-define-property": "^1.0.0", 1862 + "es-errors": "^1.3.0", 1863 + "gopd": "^1.0.1" 1864 + }, 1865 + "engines": { 1866 + "node": ">= 0.4" 1867 + }, 1868 + "funding": { 1869 + "url": "https://github.com/sponsors/ljharb" 1870 + } 1871 + }, 1872 + "node_modules/define-properties": { 1873 + "version": "1.2.1", 1874 + "dev": true, 1875 + "license": "MIT", 1876 + "dependencies": { 1877 + "define-data-property": "^1.0.1", 1878 + "has-property-descriptors": "^1.0.0", 1879 + "object-keys": "^1.1.1" 1880 + }, 1881 + "engines": { 1882 + "node": ">= 0.4" 1883 + }, 1884 + "funding": { 1885 + "url": "https://github.com/sponsors/ljharb" 1886 + } 1887 + }, 1888 + "node_modules/dequal": { 1889 + "version": "2.0.3", 1890 + "license": "MIT", 1891 + "engines": { 1892 + "node": ">=6" 1893 + } 1894 + }, 1895 + "node_modules/devlop": { 1896 + "version": "1.1.0", 1897 + "license": "MIT", 1898 + "dependencies": { 1899 + "dequal": "^2.0.0" 1900 + }, 1901 + "funding": { 1902 + "type": "github", 1903 + "url": "https://github.com/sponsors/wooorm" 1904 + } 1905 + }, 1906 + "node_modules/doctrine": { 1907 + "version": "2.1.0", 1908 + "dev": true, 1909 + "license": "Apache-2.0", 1910 + "dependencies": { 1911 + "esutils": "^2.0.2" 1912 + }, 1913 + "engines": { 1914 + "node": ">=0.10.0" 1915 + } 1916 + }, 1917 + "node_modules/dunder-proto": { 1918 + "version": "1.0.1", 1919 + "dev": true, 1920 + "license": "MIT", 1921 + "dependencies": { 1922 + "call-bind-apply-helpers": "^1.0.1", 1923 + "es-errors": "^1.3.0", 1924 + "gopd": "^1.2.0" 1925 + }, 1926 + "engines": { 1927 + "node": ">= 0.4" 1928 + } 1929 + }, 1930 + "node_modules/empathic": { 1931 + "version": "2.0.0", 1932 + "dev": true, 1933 + "license": "MIT", 1934 + "engines": { 1935 + "node": ">=14" 1936 + } 1937 + }, 1938 + "node_modules/enhanced-resolve": { 1939 + "version": "5.18.4", 1940 + "dev": true, 1941 + "license": "MIT", 1942 + "dependencies": { 1943 + "graceful-fs": "^4.2.4", 1944 + "tapable": "^2.2.0" 1945 + }, 1946 + "engines": { 1947 + "node": ">=10.13.0" 1948 + } 1949 + }, 1950 + "node_modules/es-abstract": { 1951 + "version": "1.24.1", 1952 + "dev": true, 1953 + "license": "MIT", 1954 + "dependencies": { 1955 + "array-buffer-byte-length": "^1.0.2", 1956 + "arraybuffer.prototype.slice": "^1.0.4", 1957 + "available-typed-arrays": "^1.0.7", 1958 + "call-bind": "^1.0.8", 1959 + "call-bound": "^1.0.4", 1960 + "data-view-buffer": "^1.0.2", 1961 + "data-view-byte-length": "^1.0.2", 1962 + "data-view-byte-offset": "^1.0.1", 1963 + "es-define-property": "^1.0.1", 1964 + "es-errors": "^1.3.0", 1965 + "es-object-atoms": "^1.1.1", 1966 + "es-set-tostringtag": "^2.1.0", 1967 + "es-to-primitive": "^1.3.0", 1968 + "function.prototype.name": "^1.1.8", 1969 + "get-intrinsic": "^1.3.0", 1970 + "get-proto": "^1.0.1", 1971 + "get-symbol-description": "^1.1.0", 1972 + "globalthis": "^1.0.4", 1973 + "gopd": "^1.2.0", 1974 + "has-property-descriptors": "^1.0.2", 1975 + "has-proto": "^1.2.0", 1976 + "has-symbols": "^1.1.0", 1977 + "hasown": "^2.0.2", 1978 + "internal-slot": "^1.1.0", 1979 + "is-array-buffer": "^3.0.5", 1980 + "is-callable": "^1.2.7", 1981 + "is-data-view": "^1.0.2", 1982 + "is-negative-zero": "^2.0.3", 1983 + "is-regex": "^1.2.1", 1984 + "is-set": "^2.0.3", 1985 + "is-shared-array-buffer": "^1.0.4", 1986 + "is-string": "^1.1.1", 1987 + "is-typed-array": "^1.1.15", 1988 + "is-weakref": "^1.1.1", 1989 + "math-intrinsics": "^1.1.0", 1990 + "object-inspect": "^1.13.4", 1991 + "object-keys": "^1.1.1", 1992 + "object.assign": "^4.1.7", 1993 + "own-keys": "^1.0.1", 1994 + "regexp.prototype.flags": "^1.5.4", 1995 + "safe-array-concat": "^1.1.3", 1996 + "safe-push-apply": "^1.0.0", 1997 + "safe-regex-test": "^1.1.0", 1998 + "set-proto": "^1.0.0", 1999 + "stop-iteration-iterator": "^1.1.0", 2000 + "string.prototype.trim": "^1.2.10", 2001 + "string.prototype.trimend": "^1.0.9", 2002 + "string.prototype.trimstart": "^1.0.8", 2003 + "typed-array-buffer": "^1.0.3", 2004 + "typed-array-byte-length": "^1.0.3", 2005 + "typed-array-byte-offset": "^1.0.4", 2006 + "typed-array-length": "^1.0.7", 2007 + "unbox-primitive": "^1.1.0", 2008 + "which-typed-array": "^1.1.19" 2009 + }, 2010 + "engines": { 2011 + "node": ">= 0.4" 2012 + }, 2013 + "funding": { 2014 + "url": "https://github.com/sponsors/ljharb" 2015 + } 2016 + }, 2017 + "node_modules/es-define-property": { 2018 + "version": "1.0.1", 2019 + "dev": true, 2020 + "license": "MIT", 2021 + "engines": { 2022 + "node": ">= 0.4" 2023 + } 2024 + }, 2025 + "node_modules/es-errors": { 2026 + "version": "1.3.0", 2027 + "dev": true, 2028 + "license": "MIT", 2029 + "engines": { 2030 + "node": ">= 0.4" 2031 + } 2032 + }, 2033 + "node_modules/es-iterator-helpers": { 2034 + "version": "1.2.2", 2035 + "dev": true, 2036 + "license": "MIT", 2037 + "dependencies": { 2038 + "call-bind": "^1.0.8", 2039 + "call-bound": "^1.0.4", 2040 + "define-properties": "^1.2.1", 2041 + "es-abstract": "^1.24.1", 2042 + "es-errors": "^1.3.0", 2043 + "es-set-tostringtag": "^2.1.0", 2044 + "function-bind": "^1.1.2", 2045 + "get-intrinsic": "^1.3.0", 2046 + "globalthis": "^1.0.4", 2047 + "gopd": "^1.2.0", 2048 + "has-property-descriptors": "^1.0.2", 2049 + "has-proto": "^1.2.0", 2050 + "has-symbols": "^1.1.0", 2051 + "internal-slot": "^1.1.0", 2052 + "iterator.prototype": "^1.1.5", 2053 + "safe-array-concat": "^1.1.3" 2054 + }, 2055 + "engines": { 2056 + "node": ">= 0.4" 2057 + } 2058 + }, 2059 + "node_modules/es-object-atoms": { 2060 + "version": "1.1.1", 2061 + "dev": true, 2062 + "license": "MIT", 2063 + "dependencies": { 2064 + "es-errors": "^1.3.0" 2065 + }, 2066 + "engines": { 2067 + "node": ">= 0.4" 2068 + } 2069 + }, 2070 + "node_modules/es-set-tostringtag": { 2071 + "version": "2.1.0", 2072 + "dev": true, 2073 + "license": "MIT", 2074 + "dependencies": { 2075 + "es-errors": "^1.3.0", 2076 + "get-intrinsic": "^1.2.6", 2077 + "has-tostringtag": "^1.0.2", 2078 + "hasown": "^2.0.2" 2079 + }, 2080 + "engines": { 2081 + "node": ">= 0.4" 2082 + } 2083 + }, 2084 + "node_modules/es-shim-unscopables": { 2085 + "version": "1.1.0", 2086 + "dev": true, 2087 + "license": "MIT", 2088 + "dependencies": { 2089 + "hasown": "^2.0.2" 2090 + }, 2091 + "engines": { 2092 + "node": ">= 0.4" 2093 + } 2094 + }, 2095 + "node_modules/es-to-primitive": { 2096 + "version": "1.3.0", 2097 + "dev": true, 2098 + "license": "MIT", 2099 + "dependencies": { 2100 + "is-callable": "^1.2.7", 2101 + "is-date-object": "^1.0.5", 2102 + "is-symbol": "^1.0.4" 2103 + }, 2104 + "engines": { 2105 + "node": ">= 0.4" 2106 + }, 2107 + "funding": { 2108 + "url": "https://github.com/sponsors/ljharb" 2109 + } 2110 + }, 2111 + "node_modules/esbuild": { 2112 + "version": "0.25.5", 2113 + "dev": true, 2114 + "hasInstallScript": true, 2115 + "license": "MIT", 2116 + "bin": { 2117 + "esbuild": "bin/esbuild" 2118 + }, 2119 + "engines": { 2120 + "node": ">=18" 2121 + }, 2122 + "optionalDependencies": { 2123 + "@esbuild/aix-ppc64": "0.25.5", 2124 + "@esbuild/android-arm": "0.25.5", 2125 + "@esbuild/android-arm64": "0.25.5", 2126 + "@esbuild/android-x64": "0.25.5", 2127 + "@esbuild/darwin-arm64": "0.25.5", 2128 + "@esbuild/darwin-x64": "0.25.5", 2129 + "@esbuild/freebsd-arm64": "0.25.5", 2130 + "@esbuild/freebsd-x64": "0.25.5", 2131 + "@esbuild/linux-arm": "0.25.5", 2132 + "@esbuild/linux-arm64": "0.25.5", 2133 + "@esbuild/linux-ia32": "0.25.5", 2134 + "@esbuild/linux-loong64": "0.25.5", 2135 + "@esbuild/linux-mips64el": "0.25.5", 2136 + "@esbuild/linux-ppc64": "0.25.5", 2137 + "@esbuild/linux-riscv64": "0.25.5", 2138 + "@esbuild/linux-s390x": "0.25.5", 2139 + "@esbuild/linux-x64": "0.25.5", 2140 + "@esbuild/netbsd-arm64": "0.25.5", 2141 + "@esbuild/netbsd-x64": "0.25.5", 2142 + "@esbuild/openbsd-arm64": "0.25.5", 2143 + "@esbuild/openbsd-x64": "0.25.5", 2144 + "@esbuild/sunos-x64": "0.25.5", 2145 + "@esbuild/win32-arm64": "0.25.5", 2146 + "@esbuild/win32-ia32": "0.25.5", 2147 + "@esbuild/win32-x64": "0.25.5" 2148 + } 2149 + }, 2150 + "node_modules/escape-string-regexp": { 2151 + "version": "4.0.0", 2152 + "dev": true, 2153 + "license": "MIT", 2154 + "engines": { 2155 + "node": ">=10" 2156 + }, 2157 + "funding": { 2158 + "url": "https://github.com/sponsors/sindresorhus" 2159 + } 2160 + }, 2161 + "node_modules/eslint": { 2162 + "version": "9.39.2", 2163 + "dev": true, 2164 + "license": "MIT", 2165 + "peer": true, 2166 + "dependencies": { 2167 + "@eslint-community/eslint-utils": "^4.8.0", 2168 + "@eslint-community/regexpp": "^4.12.1", 2169 + "@eslint/config-array": "^0.21.1", 2170 + "@eslint/config-helpers": "^0.4.2", 2171 + "@eslint/core": "^0.17.0", 2172 + "@eslint/eslintrc": "^3.3.1", 2173 + "@eslint/js": "9.39.2", 2174 + "@eslint/plugin-kit": "^0.4.1", 2175 + "@humanfs/node": "^0.16.6", 2176 + "@humanwhocodes/module-importer": "^1.0.1", 2177 + "@humanwhocodes/retry": "^0.4.2", 2178 + "@types/estree": "^1.0.6", 2179 + "ajv": "^6.12.4", 2180 + "chalk": "^4.0.0", 2181 + "cross-spawn": "^7.0.6", 2182 + "debug": "^4.3.2", 2183 + "escape-string-regexp": "^4.0.0", 2184 + "eslint-scope": "^8.4.0", 2185 + "eslint-visitor-keys": "^4.2.1", 2186 + "espree": "^10.4.0", 2187 + "esquery": "^1.5.0", 2188 + "esutils": "^2.0.2", 2189 + "fast-deep-equal": "^3.1.3", 2190 + "file-entry-cache": "^8.0.0", 2191 + "find-up": "^5.0.0", 2192 + "glob-parent": "^6.0.2", 2193 + "ignore": "^5.2.0", 2194 + "imurmurhash": "^0.1.4", 2195 + "is-glob": "^4.0.0", 2196 + "json-stable-stringify-without-jsonify": "^1.0.1", 2197 + "lodash.merge": "^4.6.2", 2198 + "minimatch": "^3.1.2", 2199 + "natural-compare": "^1.4.0", 2200 + "optionator": "^0.9.3" 2201 + }, 2202 + "bin": { 2203 + "eslint": "bin/eslint.js" 2204 + }, 2205 + "engines": { 2206 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2207 + }, 2208 + "funding": { 2209 + "url": "https://eslint.org/donate" 2210 + }, 2211 + "peerDependencies": { 2212 + "jiti": "*" 2213 + }, 2214 + "peerDependenciesMeta": { 2215 + "jiti": { 2216 + "optional": true 2217 + } 2218 + } 2219 + }, 2220 + "node_modules/eslint-compat-utils": { 2221 + "version": "0.5.1", 2222 + "dev": true, 2223 + "license": "MIT", 2224 + "dependencies": { 2225 + "semver": "^7.5.4" 2226 + }, 2227 + "engines": { 2228 + "node": ">=12" 2229 + }, 2230 + "peerDependencies": { 2231 + "eslint": ">=6.0.0" 2232 + } 2233 + }, 2234 + "node_modules/eslint-compat-utils/node_modules/semver": { 2235 + "version": "7.7.3", 2236 + "dev": true, 2237 + "license": "ISC", 2238 + "bin": { 2239 + "semver": "bin/semver.js" 2240 + }, 2241 + "engines": { 2242 + "node": ">=10" 2243 + } 2244 + }, 2245 + "node_modules/eslint-import-resolver-node": { 2246 + "version": "0.3.9", 2247 + "dev": true, 2248 + "license": "MIT", 2249 + "dependencies": { 2250 + "debug": "^3.2.7", 2251 + "is-core-module": "^2.13.0", 2252 + "resolve": "^1.22.4" 2253 + } 2254 + }, 2255 + "node_modules/eslint-import-resolver-node/node_modules/debug": { 2256 + "version": "3.2.7", 2257 + "dev": true, 2258 + "license": "MIT", 2259 + "dependencies": { 2260 + "ms": "^2.1.1" 2261 + } 2262 + }, 2263 + "node_modules/eslint-import-resolver-node/node_modules/resolve": { 2264 + "version": "1.22.11", 2265 + "dev": true, 2266 + "license": "MIT", 2267 + "dependencies": { 2268 + "is-core-module": "^2.16.1", 2269 + "path-parse": "^1.0.7", 2270 + "supports-preserve-symlinks-flag": "^1.0.0" 2271 + }, 2272 + "bin": { 2273 + "resolve": "bin/resolve" 2274 + }, 2275 + "engines": { 2276 + "node": ">= 0.4" 2277 + }, 2278 + "funding": { 2279 + "url": "https://github.com/sponsors/ljharb" 2280 + } 2281 + }, 2282 + "node_modules/eslint-module-utils": { 2283 + "version": "2.12.1", 2284 + "dev": true, 2285 + "license": "MIT", 2286 + "dependencies": { 2287 + "debug": "^3.2.7" 2288 + }, 2289 + "engines": { 2290 + "node": ">=4" 2291 + }, 2292 + "peerDependenciesMeta": { 2293 + "eslint": { 2294 + "optional": true 2295 + } 2296 + } 2297 + }, 2298 + "node_modules/eslint-module-utils/node_modules/debug": { 2299 + "version": "3.2.7", 2300 + "dev": true, 2301 + "license": "MIT", 2302 + "dependencies": { 2303 + "ms": "^2.1.1" 2304 + } 2305 + }, 2306 + "node_modules/eslint-plugin-depend": { 2307 + "version": "1.3.1", 2308 + "dev": true, 2309 + "license": "MIT", 2310 + "dependencies": { 2311 + "empathic": "^2.0.0", 2312 + "module-replacements": "^2.8.0", 2313 + "semver": "^7.6.3" 2314 + } 2315 + }, 2316 + "node_modules/eslint-plugin-depend/node_modules/semver": { 2317 + "version": "7.7.3", 2318 + "dev": true, 2319 + "license": "ISC", 2320 + "bin": { 2321 + "semver": "bin/semver.js" 2322 + }, 2323 + "engines": { 2324 + "node": ">=10" 2325 + } 2326 + }, 2327 + "node_modules/eslint-plugin-es-x": { 2328 + "version": "7.8.0", 2329 + "dev": true, 2330 + "funding": [ 2331 + "https://github.com/sponsors/ota-meshi", 2332 + "https://opencollective.com/eslint" 2333 + ], 2334 + "license": "MIT", 2335 + "dependencies": { 2336 + "@eslint-community/eslint-utils": "^4.1.2", 2337 + "@eslint-community/regexpp": "^4.11.0", 2338 + "eslint-compat-utils": "^0.5.1" 2339 + }, 2340 + "engines": { 2341 + "node": "^14.18.0 || >=16.0.0" 2342 + }, 2343 + "peerDependencies": { 2344 + "eslint": ">=8" 2345 + } 2346 + }, 2347 + "node_modules/eslint-plugin-import": { 2348 + "version": "2.32.0", 2349 + "dev": true, 2350 + "license": "MIT", 2351 + "dependencies": { 2352 + "@rtsao/scc": "^1.1.0", 2353 + "array-includes": "^3.1.9", 2354 + "array.prototype.findlastindex": "^1.2.6", 2355 + "array.prototype.flat": "^1.3.3", 2356 + "array.prototype.flatmap": "^1.3.3", 2357 + "debug": "^3.2.7", 2358 + "doctrine": "^2.1.0", 2359 + "eslint-import-resolver-node": "^0.3.9", 2360 + "eslint-module-utils": "^2.12.1", 2361 + "hasown": "^2.0.2", 2362 + "is-core-module": "^2.16.1", 2363 + "is-glob": "^4.0.3", 2364 + "minimatch": "^3.1.2", 2365 + "object.fromentries": "^2.0.8", 2366 + "object.groupby": "^1.0.3", 2367 + "object.values": "^1.2.1", 2368 + "semver": "^6.3.1", 2369 + "string.prototype.trimend": "^1.0.9", 2370 + "tsconfig-paths": "^3.15.0" 2371 + }, 2372 + "engines": { 2373 + "node": ">=4" 2374 + }, 2375 + "peerDependencies": { 2376 + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" 2377 + } 2378 + }, 2379 + "node_modules/eslint-plugin-import/node_modules/debug": { 2380 + "version": "3.2.7", 2381 + "dev": true, 2382 + "license": "MIT", 2383 + "dependencies": { 2384 + "ms": "^2.1.1" 2385 + } 2386 + }, 2387 + "node_modules/eslint-plugin-import/node_modules/semver": { 2388 + "version": "6.3.1", 2389 + "dev": true, 2390 + "license": "ISC", 2391 + "bin": { 2392 + "semver": "bin/semver.js" 2393 + } 2394 + }, 2395 + "node_modules/eslint-plugin-json-schema-validator": { 2396 + "version": "5.1.0", 2397 + "dev": true, 2398 + "license": "MIT", 2399 + "dependencies": { 2400 + "@eslint-community/eslint-utils": "^4.3.0", 2401 + "ajv": "^8.0.0", 2402 + "debug": "^4.3.1", 2403 + "eslint-compat-utils": "^0.5.0", 2404 + "json-schema-migrate": "^2.0.0", 2405 + "jsonc-eslint-parser": "^2.0.0", 2406 + "minimatch": "^8.0.0", 2407 + "synckit": "^0.9.0", 2408 + "toml-eslint-parser": "^0.9.0", 2409 + "tunnel-agent": "^0.6.0", 2410 + "yaml-eslint-parser": "^1.0.0" 2411 + }, 2412 + "engines": { 2413 + "node": "^14.18.0 || >=16.0.0" 2414 + }, 2415 + "funding": { 2416 + "url": "https://github.com/sponsors/ota-meshi" 2417 + }, 2418 + "peerDependencies": { 2419 + "eslint": ">=6.0.0" 2420 + } 2421 + }, 2422 + "node_modules/eslint-plugin-json-schema-validator/node_modules/ajv": { 2423 + "version": "8.17.1", 2424 + "dev": true, 2425 + "license": "MIT", 2426 + "dependencies": { 2427 + "fast-deep-equal": "^3.1.3", 2428 + "fast-uri": "^3.0.1", 2429 + "json-schema-traverse": "^1.0.0", 2430 + "require-from-string": "^2.0.2" 2431 + }, 2432 + "funding": { 2433 + "type": "github", 2434 + "url": "https://github.com/sponsors/epoberezkin" 2435 + } 2436 + }, 2437 + "node_modules/eslint-plugin-json-schema-validator/node_modules/ajv/node_modules/json-schema-traverse": { 2438 + "version": "1.0.0", 2439 + "dev": true, 2440 + "license": "MIT" 2441 + }, 2442 + "node_modules/eslint-plugin-json-schema-validator/node_modules/minimatch": { 2443 + "version": "8.0.4", 2444 + "dev": true, 2445 + "license": "ISC", 2446 + "dependencies": { 2447 + "brace-expansion": "^2.0.1" 2448 + }, 2449 + "engines": { 2450 + "node": ">=16 || 14 >=14.17" 2451 + }, 2452 + "funding": { 2453 + "url": "https://github.com/sponsors/isaacs" 2454 + } 2455 + }, 2456 + "node_modules/eslint-plugin-json-schema-validator/node_modules/minimatch/node_modules/brace-expansion": { 2457 + "version": "2.0.2", 2458 + "dev": true, 2459 + "license": "MIT", 2460 + "dependencies": { 2461 + "balanced-match": "^1.0.0" 2462 + } 2463 + }, 2464 + "node_modules/eslint-plugin-n": { 2465 + "version": "17.10.3", 2466 + "dev": true, 2467 + "license": "MIT", 2468 + "dependencies": { 2469 + "@eslint-community/eslint-utils": "^4.4.0", 2470 + "enhanced-resolve": "^5.17.0", 2471 + "eslint-plugin-es-x": "^7.5.0", 2472 + "get-tsconfig": "^4.7.0", 2473 + "globals": "^15.8.0", 2474 + "ignore": "^5.2.4", 2475 + "minimatch": "^9.0.5", 2476 + "semver": "^7.5.3" 2477 + }, 2478 + "engines": { 2479 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2480 + }, 2481 + "funding": { 2482 + "url": "https://opencollective.com/eslint" 2483 + }, 2484 + "peerDependencies": { 2485 + "eslint": ">=8.23.0" 2486 + } 2487 + }, 2488 + "node_modules/eslint-plugin-n/node_modules/globals": { 2489 + "version": "15.15.0", 2490 + "dev": true, 2491 + "license": "MIT", 2492 + "engines": { 2493 + "node": ">=18" 2494 + }, 2495 + "funding": { 2496 + "url": "https://github.com/sponsors/sindresorhus" 2497 + } 2498 + }, 2499 + "node_modules/eslint-plugin-n/node_modules/minimatch": { 2500 + "version": "9.0.5", 2501 + "dev": true, 2502 + "license": "ISC", 2503 + "dependencies": { 2504 + "brace-expansion": "^2.0.1" 2505 + }, 2506 + "engines": { 2507 + "node": ">=16 || 14 >=14.17" 2508 + }, 2509 + "funding": { 2510 + "url": "https://github.com/sponsors/isaacs" 2511 + } 2512 + }, 2513 + "node_modules/eslint-plugin-n/node_modules/minimatch/node_modules/brace-expansion": { 2514 + "version": "2.0.2", 2515 + "dev": true, 2516 + "license": "MIT", 2517 + "dependencies": { 2518 + "balanced-match": "^1.0.0" 2519 + } 2520 + }, 2521 + "node_modules/eslint-plugin-n/node_modules/semver": { 2522 + "version": "7.7.3", 2523 + "dev": true, 2524 + "license": "ISC", 2525 + "bin": { 2526 + "semver": "bin/semver.js" 2527 + }, 2528 + "engines": { 2529 + "node": ">=10" 2530 + } 2531 + }, 2532 + "node_modules/eslint-plugin-obsidianmd": { 2533 + "version": "0.1.9", 2534 + "dev": true, 2535 + "license": "MIT", 2536 + "dependencies": { 2537 + "@microsoft/eslint-plugin-sdl": "^1.1.0", 2538 + "@types/eslint": "8.56.2", 2539 + "@types/node": "20.12.12", 2540 + "eslint": ">=9.0.0 <10.0.0", 2541 + "eslint-plugin-depend": "1.3.1", 2542 + "eslint-plugin-import": "^2.31.0", 2543 + "eslint-plugin-json-schema-validator": "5.1.0", 2544 + "eslint-plugin-security": "2.1.1", 2545 + "globals": "14.0.0", 2546 + "obsidian": "1.8.7", 2547 + "typescript": "5.4.5" 2548 + }, 2549 + "bin": { 2550 + "eslint-plugin-obsidian": "dist/lib/index.js" 2551 + }, 2552 + "engines": { 2553 + "node": ">= 18" 2554 + }, 2555 + "peerDependencies": { 2556 + "@eslint/js": "^9.30.1", 2557 + "@eslint/json": "0.14.0", 2558 + "eslint": ">=9.0.0 <10.0.0", 2559 + "obsidian": "1.8.7", 2560 + "typescript-eslint": "^8.35.1" 2561 + } 2562 + }, 2563 + "node_modules/eslint-plugin-obsidianmd/node_modules/@types/node": { 2564 + "version": "20.12.12", 2565 + "dev": true, 2566 + "license": "MIT", 2567 + "dependencies": { 2568 + "undici-types": "~5.26.4" 2569 + } 2570 + }, 2571 + "node_modules/eslint-plugin-obsidianmd/node_modules/obsidian": { 2572 + "version": "1.8.7", 2573 + "dev": true, 2574 + "license": "MIT", 2575 + "dependencies": { 2576 + "@types/codemirror": "5.60.8", 2577 + "moment": "2.29.4" 2578 + }, 2579 + "peerDependencies": { 2580 + "@codemirror/state": "^6.0.0", 2581 + "@codemirror/view": "^6.0.0" 2582 + } 2583 + }, 2584 + "node_modules/eslint-plugin-obsidianmd/node_modules/typescript": { 2585 + "version": "5.4.5", 2586 + "dev": true, 2587 + "license": "Apache-2.0", 2588 + "bin": { 2589 + "tsc": "bin/tsc", 2590 + "tsserver": "bin/tsserver" 2591 + }, 2592 + "engines": { 2593 + "node": ">=14.17" 2594 + } 2595 + }, 2596 + "node_modules/eslint-plugin-react": { 2597 + "version": "7.37.3", 2598 + "dev": true, 2599 + "license": "MIT", 2600 + "dependencies": { 2601 + "array-includes": "^3.1.8", 2602 + "array.prototype.findlast": "^1.2.5", 2603 + "array.prototype.flatmap": "^1.3.3", 2604 + "array.prototype.tosorted": "^1.1.4", 2605 + "doctrine": "^2.1.0", 2606 + "es-iterator-helpers": "^1.2.1", 2607 + "estraverse": "^5.3.0", 2608 + "hasown": "^2.0.2", 2609 + "jsx-ast-utils": "^2.4.1 || ^3.0.0", 2610 + "minimatch": "^3.1.2", 2611 + "object.entries": "^1.1.8", 2612 + "object.fromentries": "^2.0.8", 2613 + "object.values": "^1.2.1", 2614 + "prop-types": "^15.8.1", 2615 + "resolve": "^2.0.0-next.5", 2616 + "semver": "^6.3.1", 2617 + "string.prototype.matchall": "^4.0.12", 2618 + "string.prototype.repeat": "^1.0.0" 2619 + }, 2620 + "engines": { 2621 + "node": ">=4" 2622 + }, 2623 + "peerDependencies": { 2624 + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" 2625 + } 2626 + }, 2627 + "node_modules/eslint-plugin-react/node_modules/resolve": { 2628 + "version": "2.0.0-next.5", 2629 + "dev": true, 2630 + "license": "MIT", 2631 + "dependencies": { 2632 + "is-core-module": "^2.13.0", 2633 + "path-parse": "^1.0.7", 2634 + "supports-preserve-symlinks-flag": "^1.0.0" 2635 + }, 2636 + "bin": { 2637 + "resolve": "bin/resolve" 2638 + }, 2639 + "funding": { 2640 + "url": "https://github.com/sponsors/ljharb" 2641 + } 2642 + }, 2643 + "node_modules/eslint-plugin-react/node_modules/semver": { 2644 + "version": "6.3.1", 2645 + "dev": true, 2646 + "license": "ISC", 2647 + "bin": { 2648 + "semver": "bin/semver.js" 2649 + } 2650 + }, 2651 + "node_modules/eslint-plugin-security": { 2652 + "version": "2.1.1", 2653 + "dev": true, 2654 + "license": "Apache-2.0", 2655 + "dependencies": { 2656 + "safe-regex": "^2.1.1" 2657 + } 2658 + }, 2659 + "node_modules/eslint-scope": { 2660 + "version": "8.4.0", 2661 + "dev": true, 2662 + "license": "BSD-2-Clause", 2663 + "dependencies": { 2664 + "esrecurse": "^4.3.0", 2665 + "estraverse": "^5.2.0" 2666 + }, 2667 + "engines": { 2668 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2669 + }, 2670 + "funding": { 2671 + "url": "https://opencollective.com/eslint" 2672 + } 2673 + }, 2674 + "node_modules/eslint-visitor-keys": { 2675 + "version": "4.2.1", 2676 + "dev": true, 2677 + "license": "Apache-2.0", 2678 + "engines": { 2679 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2680 + }, 2681 + "funding": { 2682 + "url": "https://opencollective.com/eslint" 2683 + } 2684 + }, 2685 + "node_modules/eslint/node_modules/@eslint/js": { 2686 + "version": "9.39.2", 2687 + "dev": true, 2688 + "license": "MIT", 2689 + "engines": { 2690 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2691 + }, 2692 + "funding": { 2693 + "url": "https://eslint.org/donate" 2694 + } 2695 + }, 2696 + "node_modules/esm-env": { 2697 + "version": "1.2.2", 2698 + "license": "MIT" 2699 + }, 2700 + "node_modules/espree": { 2701 + "version": "10.4.0", 2702 + "dev": true, 2703 + "license": "BSD-2-Clause", 2704 + "dependencies": { 2705 + "acorn": "^8.15.0", 2706 + "acorn-jsx": "^5.3.2", 2707 + "eslint-visitor-keys": "^4.2.1" 2708 + }, 2709 + "engines": { 2710 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 2711 + }, 2712 + "funding": { 2713 + "url": "https://opencollective.com/eslint" 2714 + } 2715 + }, 2716 + "node_modules/esquery": { 2717 + "version": "1.7.0", 2718 + "dev": true, 2719 + "license": "BSD-3-Clause", 2720 + "dependencies": { 2721 + "estraverse": "^5.1.0" 2722 + }, 2723 + "engines": { 2724 + "node": ">=0.10" 2725 + } 2726 + }, 2727 + "node_modules/esrecurse": { 2728 + "version": "4.3.0", 2729 + "dev": true, 2730 + "license": "BSD-2-Clause", 2731 + "dependencies": { 2732 + "estraverse": "^5.2.0" 2733 + }, 2734 + "engines": { 2735 + "node": ">=4.0" 2736 + } 2737 + }, 2738 + "node_modules/estraverse": { 2739 + "version": "5.3.0", 2740 + "dev": true, 2741 + "license": "BSD-2-Clause", 2742 + "engines": { 2743 + "node": ">=4.0" 2744 + } 2745 + }, 2746 + "node_modules/esutils": { 2747 + "version": "2.0.3", 2748 + "dev": true, 2749 + "license": "BSD-2-Clause", 2750 + "engines": { 2751 + "node": ">=0.10.0" 2752 + } 2753 + }, 2754 + "node_modules/extend": { 2755 + "version": "3.0.2", 2756 + "license": "MIT" 2757 + }, 2758 + "node_modules/fast-deep-equal": { 2759 + "version": "3.1.3", 2760 + "dev": true, 2761 + "license": "MIT" 2762 + }, 2763 + "node_modules/fast-glob": { 2764 + "version": "3.3.3", 2765 + "dev": true, 2766 + "license": "MIT", 2767 + "dependencies": { 2768 + "@nodelib/fs.stat": "^2.0.2", 2769 + "@nodelib/fs.walk": "^1.2.3", 2770 + "glob-parent": "^5.1.2", 2771 + "merge2": "^1.3.0", 2772 + "micromatch": "^4.0.8" 2773 + }, 2774 + "engines": { 2775 + "node": ">=8.6.0" 2776 + } 2777 + }, 2778 + "node_modules/fast-glob/node_modules/glob-parent": { 2779 + "version": "5.1.2", 2780 + "dev": true, 2781 + "license": "ISC", 2782 + "dependencies": { 2783 + "is-glob": "^4.0.1" 2784 + }, 2785 + "engines": { 2786 + "node": ">= 6" 2787 + } 2788 + }, 2789 + "node_modules/fast-json-stable-stringify": { 2790 + "version": "2.1.0", 2791 + "dev": true, 2792 + "license": "MIT" 2793 + }, 2794 + "node_modules/fast-levenshtein": { 2795 + "version": "2.0.6", 2796 + "dev": true, 2797 + "license": "MIT" 2798 + }, 2799 + "node_modules/fast-uri": { 2800 + "version": "3.1.0", 2801 + "dev": true, 2802 + "funding": [ 2803 + { 2804 + "type": "github", 2805 + "url": "https://github.com/sponsors/fastify" 2806 + }, 2807 + { 2808 + "type": "opencollective", 2809 + "url": "https://opencollective.com/fastify" 2810 + } 2811 + ], 2812 + "license": "BSD-3-Clause" 2813 + }, 2814 + "node_modules/fastq": { 2815 + "version": "1.20.1", 2816 + "dev": true, 2817 + "license": "ISC", 2818 + "dependencies": { 2819 + "reusify": "^1.0.4" 2820 + } 2821 + }, 2822 + "node_modules/file-entry-cache": { 2823 + "version": "8.0.0", 2824 + "dev": true, 2825 + "license": "MIT", 2826 + "dependencies": { 2827 + "flat-cache": "^4.0.0" 2828 + }, 2829 + "engines": { 2830 + "node": ">=16.0.0" 2831 + } 2832 + }, 2833 + "node_modules/fill-range": { 2834 + "version": "7.1.1", 2835 + "dev": true, 2836 + "license": "MIT", 2837 + "dependencies": { 2838 + "to-regex-range": "^5.0.1" 2839 + }, 2840 + "engines": { 2841 + "node": ">=8" 2842 + } 2843 + }, 2844 + "node_modules/find-up": { 2845 + "version": "5.0.0", 2846 + "dev": true, 2847 + "license": "MIT", 2848 + "dependencies": { 2849 + "locate-path": "^6.0.0", 2850 + "path-exists": "^4.0.0" 2851 + }, 2852 + "engines": { 2853 + "node": ">=10" 2854 + }, 2855 + "funding": { 2856 + "url": "https://github.com/sponsors/sindresorhus" 2857 + } 2858 + }, 2859 + "node_modules/flat-cache": { 2860 + "version": "4.0.1", 2861 + "dev": true, 2862 + "license": "MIT", 2863 + "dependencies": { 2864 + "flatted": "^3.2.9", 2865 + "keyv": "^4.5.4" 2866 + }, 2867 + "engines": { 2868 + "node": ">=16" 2869 + } 2870 + }, 2871 + "node_modules/flatted": { 2872 + "version": "3.3.3", 2873 + "dev": true, 2874 + "license": "ISC" 2875 + }, 2876 + "node_modules/for-each": { 2877 + "version": "0.3.5", 2878 + "dev": true, 2879 + "license": "MIT", 2880 + "dependencies": { 2881 + "is-callable": "^1.2.7" 2882 + }, 2883 + "engines": { 2884 + "node": ">= 0.4" 2885 + }, 2886 + "funding": { 2887 + "url": "https://github.com/sponsors/ljharb" 2888 + } 2889 + }, 2890 + "node_modules/function-bind": { 2891 + "version": "1.1.2", 2892 + "dev": true, 2893 + "license": "MIT", 2894 + "funding": { 2895 + "url": "https://github.com/sponsors/ljharb" 2896 + } 2897 + }, 2898 + "node_modules/function.prototype.name": { 2899 + "version": "1.1.8", 2900 + "dev": true, 2901 + "license": "MIT", 2902 + "dependencies": { 2903 + "call-bind": "^1.0.8", 2904 + "call-bound": "^1.0.3", 2905 + "define-properties": "^1.2.1", 2906 + "functions-have-names": "^1.2.3", 2907 + "hasown": "^2.0.2", 2908 + "is-callable": "^1.2.7" 2909 + }, 2910 + "engines": { 2911 + "node": ">= 0.4" 2912 + }, 2913 + "funding": { 2914 + "url": "https://github.com/sponsors/ljharb" 2915 + } 2916 + }, 2917 + "node_modules/functions-have-names": { 2918 + "version": "1.2.3", 2919 + "dev": true, 2920 + "license": "MIT", 2921 + "funding": { 2922 + "url": "https://github.com/sponsors/ljharb" 2923 + } 2924 + }, 2925 + "node_modules/generator-function": { 2926 + "version": "2.0.1", 2927 + "dev": true, 2928 + "license": "MIT", 2929 + "engines": { 2930 + "node": ">= 0.4" 2931 + } 2932 + }, 2933 + "node_modules/get-intrinsic": { 2934 + "version": "1.3.0", 2935 + "dev": true, 2936 + "license": "MIT", 2937 + "dependencies": { 2938 + "call-bind-apply-helpers": "^1.0.2", 2939 + "es-define-property": "^1.0.1", 2940 + "es-errors": "^1.3.0", 2941 + "es-object-atoms": "^1.1.1", 2942 + "function-bind": "^1.1.2", 2943 + "get-proto": "^1.0.1", 2944 + "gopd": "^1.2.0", 2945 + "has-symbols": "^1.1.0", 2946 + "hasown": "^2.0.2", 2947 + "math-intrinsics": "^1.1.0" 2948 + }, 2949 + "engines": { 2950 + "node": ">= 0.4" 2951 + }, 2952 + "funding": { 2953 + "url": "https://github.com/sponsors/ljharb" 2954 + } 2955 + }, 2956 + "node_modules/get-proto": { 2957 + "version": "1.0.1", 2958 + "dev": true, 2959 + "license": "MIT", 2960 + "dependencies": { 2961 + "dunder-proto": "^1.0.1", 2962 + "es-object-atoms": "^1.0.0" 2963 + }, 2964 + "engines": { 2965 + "node": ">= 0.4" 2966 + } 2967 + }, 2968 + "node_modules/get-symbol-description": { 2969 + "version": "1.1.0", 2970 + "dev": true, 2971 + "license": "MIT", 2972 + "dependencies": { 2973 + "call-bound": "^1.0.3", 2974 + "es-errors": "^1.3.0", 2975 + "get-intrinsic": "^1.2.6" 2976 + }, 2977 + "engines": { 2978 + "node": ">= 0.4" 2979 + }, 2980 + "funding": { 2981 + "url": "https://github.com/sponsors/ljharb" 2982 + } 2983 + }, 2984 + "node_modules/get-tsconfig": { 2985 + "version": "4.13.1", 2986 + "dev": true, 2987 + "license": "MIT", 2988 + "dependencies": { 2989 + "resolve-pkg-maps": "^1.0.0" 2990 + }, 2991 + "funding": { 2992 + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" 2993 + } 2994 + }, 2995 + "node_modules/glob-parent": { 2996 + "version": "6.0.2", 2997 + "dev": true, 2998 + "license": "ISC", 2999 + "dependencies": { 3000 + "is-glob": "^4.0.3" 3001 + }, 3002 + "engines": { 3003 + "node": ">=10.13.0" 3004 + } 3005 + }, 3006 + "node_modules/globals": { 3007 + "version": "14.0.0", 3008 + "dev": true, 3009 + "license": "MIT", 3010 + "engines": { 3011 + "node": ">=18" 3012 + }, 3013 + "funding": { 3014 + "url": "https://github.com/sponsors/sindresorhus" 3015 + } 3016 + }, 3017 + "node_modules/globalthis": { 3018 + "version": "1.0.4", 3019 + "dev": true, 3020 + "license": "MIT", 3021 + "dependencies": { 3022 + "define-properties": "^1.2.1", 3023 + "gopd": "^1.0.1" 3024 + }, 3025 + "engines": { 3026 + "node": ">= 0.4" 3027 + }, 3028 + "funding": { 3029 + "url": "https://github.com/sponsors/ljharb" 3030 + } 3031 + }, 3032 + "node_modules/gopd": { 3033 + "version": "1.2.0", 3034 + "dev": true, 3035 + "license": "MIT", 3036 + "engines": { 3037 + "node": ">= 0.4" 3038 + }, 3039 + "funding": { 3040 + "url": "https://github.com/sponsors/ljharb" 3041 + } 3042 + }, 3043 + "node_modules/graceful-fs": { 3044 + "version": "4.2.11", 3045 + "dev": true, 3046 + "license": "ISC" 3047 + }, 3048 + "node_modules/graphemer": { 3049 + "version": "1.4.0", 3050 + "dev": true, 3051 + "license": "MIT" 3052 + }, 3053 + "node_modules/has-bigints": { 3054 + "version": "1.1.0", 3055 + "dev": true, 3056 + "license": "MIT", 3057 + "engines": { 3058 + "node": ">= 0.4" 3059 + }, 3060 + "funding": { 3061 + "url": "https://github.com/sponsors/ljharb" 3062 + } 3063 + }, 3064 + "node_modules/has-flag": { 3065 + "version": "4.0.0", 3066 + "dev": true, 3067 + "license": "MIT", 3068 + "engines": { 3069 + "node": ">=8" 3070 + } 3071 + }, 3072 + "node_modules/has-property-descriptors": { 3073 + "version": "1.0.2", 3074 + "dev": true, 3075 + "license": "MIT", 3076 + "dependencies": { 3077 + "es-define-property": "^1.0.0" 3078 + }, 3079 + "funding": { 3080 + "url": "https://github.com/sponsors/ljharb" 3081 + } 3082 + }, 3083 + "node_modules/has-proto": { 3084 + "version": "1.2.0", 3085 + "dev": true, 3086 + "license": "MIT", 3087 + "dependencies": { 3088 + "dunder-proto": "^1.0.0" 3089 + }, 3090 + "engines": { 3091 + "node": ">= 0.4" 3092 + }, 3093 + "funding": { 3094 + "url": "https://github.com/sponsors/ljharb" 3095 + } 3096 + }, 3097 + "node_modules/has-symbols": { 3098 + "version": "1.1.0", 3099 + "dev": true, 3100 + "license": "MIT", 3101 + "engines": { 3102 + "node": ">= 0.4" 3103 + }, 3104 + "funding": { 3105 + "url": "https://github.com/sponsors/ljharb" 3106 + } 3107 + }, 3108 + "node_modules/has-tostringtag": { 3109 + "version": "1.0.2", 3110 + "dev": true, 3111 + "license": "MIT", 3112 + "dependencies": { 3113 + "has-symbols": "^1.0.3" 3114 + }, 3115 + "engines": { 3116 + "node": ">= 0.4" 3117 + }, 3118 + "funding": { 3119 + "url": "https://github.com/sponsors/ljharb" 3120 + } 3121 + }, 3122 + "node_modules/hasown": { 3123 + "version": "2.0.2", 3124 + "dev": true, 3125 + "license": "MIT", 3126 + "dependencies": { 3127 + "function-bind": "^1.1.2" 3128 + }, 3129 + "engines": { 3130 + "node": ">= 0.4" 3131 + } 3132 + }, 3133 + "node_modules/ignore": { 3134 + "version": "5.3.2", 3135 + "dev": true, 3136 + "license": "MIT", 3137 + "engines": { 3138 + "node": ">= 4" 3139 + } 3140 + }, 3141 + "node_modules/import-fresh": { 3142 + "version": "3.3.1", 3143 + "dev": true, 3144 + "license": "MIT", 3145 + "dependencies": { 3146 + "parent-module": "^1.0.0", 3147 + "resolve-from": "^4.0.0" 3148 + }, 3149 + "engines": { 3150 + "node": ">=6" 3151 + }, 3152 + "funding": { 3153 + "url": "https://github.com/sponsors/sindresorhus" 3154 + } 3155 + }, 3156 + "node_modules/imurmurhash": { 3157 + "version": "0.1.4", 3158 + "dev": true, 3159 + "license": "MIT", 3160 + "engines": { 3161 + "node": ">=0.8.19" 3162 + } 3163 + }, 3164 + "node_modules/internal-slot": { 3165 + "version": "1.1.0", 3166 + "dev": true, 3167 + "license": "MIT", 3168 + "dependencies": { 3169 + "es-errors": "^1.3.0", 3170 + "hasown": "^2.0.2", 3171 + "side-channel": "^1.1.0" 3172 + }, 3173 + "engines": { 3174 + "node": ">= 0.4" 3175 + } 3176 + }, 3177 + "node_modules/is-array-buffer": { 3178 + "version": "3.0.5", 3179 + "dev": true, 3180 + "license": "MIT", 3181 + "dependencies": { 3182 + "call-bind": "^1.0.8", 3183 + "call-bound": "^1.0.3", 3184 + "get-intrinsic": "^1.2.6" 3185 + }, 3186 + "engines": { 3187 + "node": ">= 0.4" 3188 + }, 3189 + "funding": { 3190 + "url": "https://github.com/sponsors/ljharb" 3191 + } 3192 + }, 3193 + "node_modules/is-async-function": { 3194 + "version": "2.1.1", 3195 + "dev": true, 3196 + "license": "MIT", 3197 + "dependencies": { 3198 + "async-function": "^1.0.0", 3199 + "call-bound": "^1.0.3", 3200 + "get-proto": "^1.0.1", 3201 + "has-tostringtag": "^1.0.2", 3202 + "safe-regex-test": "^1.1.0" 3203 + }, 3204 + "engines": { 3205 + "node": ">= 0.4" 3206 + }, 3207 + "funding": { 3208 + "url": "https://github.com/sponsors/ljharb" 3209 + } 3210 + }, 3211 + "node_modules/is-bigint": { 3212 + "version": "1.1.0", 3213 + "dev": true, 3214 + "license": "MIT", 3215 + "dependencies": { 3216 + "has-bigints": "^1.0.2" 3217 + }, 3218 + "engines": { 3219 + "node": ">= 0.4" 3220 + }, 3221 + "funding": { 3222 + "url": "https://github.com/sponsors/ljharb" 3223 + } 3224 + }, 3225 + "node_modules/is-boolean-object": { 3226 + "version": "1.2.2", 3227 + "dev": true, 3228 + "license": "MIT", 3229 + "dependencies": { 3230 + "call-bound": "^1.0.3", 3231 + "has-tostringtag": "^1.0.2" 3232 + }, 3233 + "engines": { 3234 + "node": ">= 0.4" 3235 + }, 3236 + "funding": { 3237 + "url": "https://github.com/sponsors/ljharb" 3238 + } 3239 + }, 3240 + "node_modules/is-callable": { 3241 + "version": "1.2.7", 3242 + "dev": true, 3243 + "license": "MIT", 3244 + "engines": { 3245 + "node": ">= 0.4" 3246 + }, 3247 + "funding": { 3248 + "url": "https://github.com/sponsors/ljharb" 3249 + } 3250 + }, 3251 + "node_modules/is-core-module": { 3252 + "version": "2.16.1", 3253 + "dev": true, 3254 + "license": "MIT", 3255 + "dependencies": { 3256 + "hasown": "^2.0.2" 3257 + }, 3258 + "engines": { 3259 + "node": ">= 0.4" 3260 + }, 3261 + "funding": { 3262 + "url": "https://github.com/sponsors/ljharb" 3263 + } 3264 + }, 3265 + "node_modules/is-data-view": { 3266 + "version": "1.0.2", 3267 + "dev": true, 3268 + "license": "MIT", 3269 + "dependencies": { 3270 + "call-bound": "^1.0.2", 3271 + "get-intrinsic": "^1.2.6", 3272 + "is-typed-array": "^1.1.13" 3273 + }, 3274 + "engines": { 3275 + "node": ">= 0.4" 3276 + }, 3277 + "funding": { 3278 + "url": "https://github.com/sponsors/ljharb" 3279 + } 3280 + }, 3281 + "node_modules/is-date-object": { 3282 + "version": "1.1.0", 3283 + "dev": true, 3284 + "license": "MIT", 3285 + "dependencies": { 3286 + "call-bound": "^1.0.2", 3287 + "has-tostringtag": "^1.0.2" 3288 + }, 3289 + "engines": { 3290 + "node": ">= 0.4" 3291 + }, 3292 + "funding": { 3293 + "url": "https://github.com/sponsors/ljharb" 3294 + } 3295 + }, 3296 + "node_modules/is-extglob": { 3297 + "version": "2.1.1", 3298 + "dev": true, 3299 + "license": "MIT", 3300 + "engines": { 3301 + "node": ">=0.10.0" 3302 + } 3303 + }, 3304 + "node_modules/is-finalizationregistry": { 3305 + "version": "1.1.1", 3306 + "dev": true, 3307 + "license": "MIT", 3308 + "dependencies": { 3309 + "call-bound": "^1.0.3" 3310 + }, 3311 + "engines": { 3312 + "node": ">= 0.4" 3313 + }, 3314 + "funding": { 3315 + "url": "https://github.com/sponsors/ljharb" 3316 + } 3317 + }, 3318 + "node_modules/is-generator-function": { 3319 + "version": "1.1.2", 3320 + "dev": true, 3321 + "license": "MIT", 3322 + "dependencies": { 3323 + "call-bound": "^1.0.4", 3324 + "generator-function": "^2.0.0", 3325 + "get-proto": "^1.0.1", 3326 + "has-tostringtag": "^1.0.2", 3327 + "safe-regex-test": "^1.1.0" 3328 + }, 3329 + "engines": { 3330 + "node": ">= 0.4" 3331 + }, 3332 + "funding": { 3333 + "url": "https://github.com/sponsors/ljharb" 3334 + } 3335 + }, 3336 + "node_modules/is-glob": { 3337 + "version": "4.0.3", 3338 + "dev": true, 3339 + "license": "MIT", 3340 + "dependencies": { 3341 + "is-extglob": "^2.1.1" 3342 + }, 3343 + "engines": { 3344 + "node": ">=0.10.0" 3345 + } 3346 + }, 3347 + "node_modules/is-map": { 3348 + "version": "2.0.3", 3349 + "dev": true, 3350 + "license": "MIT", 3351 + "engines": { 3352 + "node": ">= 0.4" 3353 + }, 3354 + "funding": { 3355 + "url": "https://github.com/sponsors/ljharb" 3356 + } 3357 + }, 3358 + "node_modules/is-negative-zero": { 3359 + "version": "2.0.3", 3360 + "dev": true, 3361 + "license": "MIT", 3362 + "engines": { 3363 + "node": ">= 0.4" 3364 + }, 3365 + "funding": { 3366 + "url": "https://github.com/sponsors/ljharb" 3367 + } 3368 + }, 3369 + "node_modules/is-number": { 3370 + "version": "7.0.0", 3371 + "dev": true, 3372 + "license": "MIT", 3373 + "engines": { 3374 + "node": ">=0.12.0" 3375 + } 3376 + }, 3377 + "node_modules/is-number-object": { 3378 + "version": "1.1.1", 3379 + "dev": true, 3380 + "license": "MIT", 3381 + "dependencies": { 3382 + "call-bound": "^1.0.3", 3383 + "has-tostringtag": "^1.0.2" 3384 + }, 3385 + "engines": { 3386 + "node": ">= 0.4" 3387 + }, 3388 + "funding": { 3389 + "url": "https://github.com/sponsors/ljharb" 3390 + } 3391 + }, 3392 + "node_modules/is-plain-obj": { 3393 + "version": "4.1.0", 3394 + "license": "MIT", 3395 + "engines": { 3396 + "node": ">=12" 3397 + }, 3398 + "funding": { 3399 + "url": "https://github.com/sponsors/sindresorhus" 3400 + } 3401 + }, 3402 + "node_modules/is-regex": { 3403 + "version": "1.2.1", 3404 + "dev": true, 3405 + "license": "MIT", 3406 + "dependencies": { 3407 + "call-bound": "^1.0.2", 3408 + "gopd": "^1.2.0", 3409 + "has-tostringtag": "^1.0.2", 3410 + "hasown": "^2.0.2" 3411 + }, 3412 + "engines": { 3413 + "node": ">= 0.4" 3414 + }, 3415 + "funding": { 3416 + "url": "https://github.com/sponsors/ljharb" 3417 + } 3418 + }, 3419 + "node_modules/is-set": { 3420 + "version": "2.0.3", 3421 + "dev": true, 3422 + "license": "MIT", 3423 + "engines": { 3424 + "node": ">= 0.4" 3425 + }, 3426 + "funding": { 3427 + "url": "https://github.com/sponsors/ljharb" 3428 + } 3429 + }, 3430 + "node_modules/is-shared-array-buffer": { 3431 + "version": "1.0.4", 3432 + "dev": true, 3433 + "license": "MIT", 3434 + "dependencies": { 3435 + "call-bound": "^1.0.3" 3436 + }, 3437 + "engines": { 3438 + "node": ">= 0.4" 3439 + }, 3440 + "funding": { 3441 + "url": "https://github.com/sponsors/ljharb" 3442 + } 3443 + }, 3444 + "node_modules/is-string": { 3445 + "version": "1.1.1", 3446 + "dev": true, 3447 + "license": "MIT", 3448 + "dependencies": { 3449 + "call-bound": "^1.0.3", 3450 + "has-tostringtag": "^1.0.2" 3451 + }, 3452 + "engines": { 3453 + "node": ">= 0.4" 3454 + }, 3455 + "funding": { 3456 + "url": "https://github.com/sponsors/ljharb" 3457 + } 3458 + }, 3459 + "node_modules/is-symbol": { 3460 + "version": "1.1.1", 3461 + "dev": true, 3462 + "license": "MIT", 3463 + "dependencies": { 3464 + "call-bound": "^1.0.2", 3465 + "has-symbols": "^1.1.0", 3466 + "safe-regex-test": "^1.1.0" 3467 + }, 3468 + "engines": { 3469 + "node": ">= 0.4" 3470 + }, 3471 + "funding": { 3472 + "url": "https://github.com/sponsors/ljharb" 3473 + } 3474 + }, 3475 + "node_modules/is-typed-array": { 3476 + "version": "1.1.15", 3477 + "dev": true, 3478 + "license": "MIT", 3479 + "dependencies": { 3480 + "which-typed-array": "^1.1.16" 3481 + }, 3482 + "engines": { 3483 + "node": ">= 0.4" 3484 + }, 3485 + "funding": { 3486 + "url": "https://github.com/sponsors/ljharb" 3487 + } 3488 + }, 3489 + "node_modules/is-weakmap": { 3490 + "version": "2.0.2", 3491 + "dev": true, 3492 + "license": "MIT", 3493 + "engines": { 3494 + "node": ">= 0.4" 3495 + }, 3496 + "funding": { 3497 + "url": "https://github.com/sponsors/ljharb" 3498 + } 3499 + }, 3500 + "node_modules/is-weakref": { 3501 + "version": "1.1.1", 3502 + "dev": true, 3503 + "license": "MIT", 3504 + "dependencies": { 3505 + "call-bound": "^1.0.3" 3506 + }, 3507 + "engines": { 3508 + "node": ">= 0.4" 3509 + }, 3510 + "funding": { 3511 + "url": "https://github.com/sponsors/ljharb" 3512 + } 3513 + }, 3514 + "node_modules/is-weakset": { 3515 + "version": "2.0.4", 3516 + "dev": true, 3517 + "license": "MIT", 3518 + "dependencies": { 3519 + "call-bound": "^1.0.3", 3520 + "get-intrinsic": "^1.2.6" 3521 + }, 3522 + "engines": { 3523 + "node": ">= 0.4" 3524 + }, 3525 + "funding": { 3526 + "url": "https://github.com/sponsors/ljharb" 3527 + } 3528 + }, 3529 + "node_modules/isarray": { 3530 + "version": "2.0.5", 3531 + "dev": true, 3532 + "license": "MIT" 3533 + }, 3534 + "node_modules/isexe": { 3535 + "version": "2.0.0", 3536 + "dev": true, 3537 + "license": "ISC" 3538 + }, 3539 + "node_modules/iterator.prototype": { 3540 + "version": "1.1.5", 3541 + "dev": true, 3542 + "license": "MIT", 3543 + "dependencies": { 3544 + "define-data-property": "^1.1.4", 3545 + "es-object-atoms": "^1.0.0", 3546 + "get-intrinsic": "^1.2.6", 3547 + "get-proto": "^1.0.0", 3548 + "has-symbols": "^1.1.0", 3549 + "set-function-name": "^2.0.2" 3550 + }, 3551 + "engines": { 3552 + "node": ">= 0.4" 3553 + } 3554 + }, 3555 + "node_modules/jiti": { 3556 + "version": "2.6.1", 3557 + "dev": true, 3558 + "license": "MIT", 3559 + "peer": true, 3560 + "bin": { 3561 + "jiti": "lib/jiti-cli.mjs" 3562 + } 3563 + }, 3564 + "node_modules/js-tokens": { 3565 + "version": "4.0.0", 3566 + "dev": true, 3567 + "license": "MIT" 3568 + }, 3569 + "node_modules/js-yaml": { 3570 + "version": "4.1.1", 3571 + "dev": true, 3572 + "license": "MIT", 3573 + "dependencies": { 3574 + "argparse": "^2.0.1" 3575 + }, 3576 + "bin": { 3577 + "js-yaml": "bin/js-yaml.js" 3578 + } 3579 + }, 3580 + "node_modules/json-buffer": { 3581 + "version": "3.0.1", 3582 + "dev": true, 3583 + "license": "MIT" 3584 + }, 3585 + "node_modules/json-schema-migrate": { 3586 + "version": "2.0.0", 3587 + "dev": true, 3588 + "license": "MIT", 3589 + "dependencies": { 3590 + "ajv": "^8.0.0" 3591 + } 3592 + }, 3593 + "node_modules/json-schema-migrate/node_modules/ajv": { 3594 + "version": "8.17.1", 3595 + "dev": true, 3596 + "license": "MIT", 3597 + "dependencies": { 3598 + "fast-deep-equal": "^3.1.3", 3599 + "fast-uri": "^3.0.1", 3600 + "json-schema-traverse": "^1.0.0", 3601 + "require-from-string": "^2.0.2" 3602 + }, 3603 + "funding": { 3604 + "type": "github", 3605 + "url": "https://github.com/sponsors/epoberezkin" 3606 + } 3607 + }, 3608 + "node_modules/json-schema-migrate/node_modules/ajv/node_modules/json-schema-traverse": { 3609 + "version": "1.0.0", 3610 + "dev": true, 3611 + "license": "MIT" 3612 + }, 3613 + "node_modules/json-schema-traverse": { 3614 + "version": "0.4.1", 3615 + "dev": true, 3616 + "license": "MIT" 3617 + }, 3618 + "node_modules/json-stable-stringify-without-jsonify": { 3619 + "version": "1.0.1", 3620 + "dev": true, 3621 + "license": "MIT" 3622 + }, 3623 + "node_modules/json5": { 3624 + "version": "1.0.2", 3625 + "dev": true, 3626 + "license": "MIT", 3627 + "dependencies": { 3628 + "minimist": "^1.2.0" 3629 + }, 3630 + "bin": { 3631 + "json5": "lib/cli.js" 3632 + } 3633 + }, 3634 + "node_modules/jsonc-eslint-parser": { 3635 + "version": "2.4.2", 3636 + "dev": true, 3637 + "license": "MIT", 3638 + "dependencies": { 3639 + "acorn": "^8.5.0", 3640 + "eslint-visitor-keys": "^3.0.0", 3641 + "espree": "^9.0.0", 3642 + "semver": "^7.3.5" 3643 + }, 3644 + "engines": { 3645 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3646 + }, 3647 + "funding": { 3648 + "url": "https://github.com/sponsors/ota-meshi" 3649 + } 3650 + }, 3651 + "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { 3652 + "version": "3.4.3", 3653 + "dev": true, 3654 + "license": "Apache-2.0", 3655 + "engines": { 3656 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3657 + }, 3658 + "funding": { 3659 + "url": "https://opencollective.com/eslint" 3660 + } 3661 + }, 3662 + "node_modules/jsonc-eslint-parser/node_modules/espree": { 3663 + "version": "9.6.1", 3664 + "dev": true, 3665 + "license": "BSD-2-Clause", 3666 + "dependencies": { 3667 + "acorn": "^8.9.0", 3668 + "acorn-jsx": "^5.3.2", 3669 + "eslint-visitor-keys": "^3.4.1" 3670 + }, 3671 + "engines": { 3672 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 3673 + }, 3674 + "funding": { 3675 + "url": "https://opencollective.com/eslint" 3676 + } 3677 + }, 3678 + "node_modules/jsx-ast-utils": { 3679 + "version": "3.3.5", 3680 + "dev": true, 3681 + "license": "MIT", 3682 + "dependencies": { 3683 + "array-includes": "^3.1.6", 3684 + "array.prototype.flat": "^1.3.1", 3685 + "object.assign": "^4.1.4", 3686 + "object.values": "^1.1.6" 3687 + }, 3688 + "engines": { 3689 + "node": ">=4.0" 3690 + } 3691 + }, 3692 + "node_modules/keyv": { 3693 + "version": "4.5.4", 3694 + "dev": true, 3695 + "license": "MIT", 3696 + "dependencies": { 3697 + "json-buffer": "3.0.1" 3698 + } 3699 + }, 3700 + "node_modules/levn": { 3701 + "version": "0.4.1", 3702 + "dev": true, 3703 + "license": "MIT", 3704 + "dependencies": { 3705 + "prelude-ls": "^1.2.1", 3706 + "type-check": "~0.4.0" 3707 + }, 3708 + "engines": { 3709 + "node": ">= 0.8.0" 3710 + } 3711 + }, 3712 + "node_modules/locate-path": { 3713 + "version": "6.0.0", 3714 + "dev": true, 3715 + "license": "MIT", 3716 + "dependencies": { 3717 + "p-locate": "^5.0.0" 3718 + }, 3719 + "engines": { 3720 + "node": ">=10" 3721 + }, 3722 + "funding": { 3723 + "url": "https://github.com/sponsors/sindresorhus" 3724 + } 3725 + }, 3726 + "node_modules/lodash.merge": { 3727 + "version": "4.6.2", 3728 + "dev": true, 3729 + "license": "MIT" 3730 + }, 3731 + "node_modules/longest-streak": { 3732 + "version": "3.1.0", 3733 + "license": "MIT", 3734 + "funding": { 3735 + "type": "github", 3736 + "url": "https://github.com/sponsors/wooorm" 3737 + } 3738 + }, 3739 + "node_modules/loose-envify": { 3740 + "version": "1.4.0", 3741 + "dev": true, 3742 + "license": "MIT", 3743 + "dependencies": { 3744 + "js-tokens": "^3.0.0 || ^4.0.0" 3745 + }, 3746 + "bin": { 3747 + "loose-envify": "cli.js" 3748 + } 3749 + }, 3750 + "node_modules/math-intrinsics": { 3751 + "version": "1.1.0", 3752 + "dev": true, 3753 + "license": "MIT", 3754 + "engines": { 3755 + "node": ">= 0.4" 3756 + } 3757 + }, 3758 + "node_modules/mdast-util-from-markdown": { 3759 + "version": "2.0.2", 3760 + "license": "MIT", 3761 + "dependencies": { 3762 + "@types/mdast": "^4.0.0", 3763 + "@types/unist": "^3.0.0", 3764 + "decode-named-character-reference": "^1.0.0", 3765 + "devlop": "^1.0.0", 3766 + "mdast-util-to-string": "^4.0.0", 3767 + "micromark": "^4.0.0", 3768 + "micromark-util-decode-numeric-character-reference": "^2.0.0", 3769 + "micromark-util-decode-string": "^2.0.0", 3770 + "micromark-util-normalize-identifier": "^2.0.0", 3771 + "micromark-util-symbol": "^2.0.0", 3772 + "micromark-util-types": "^2.0.0", 3773 + "unist-util-stringify-position": "^4.0.0" 3774 + }, 3775 + "funding": { 3776 + "type": "opencollective", 3777 + "url": "https://opencollective.com/unified" 3778 + } 3779 + }, 3780 + "node_modules/mdast-util-phrasing": { 3781 + "version": "4.1.0", 3782 + "license": "MIT", 3783 + "dependencies": { 3784 + "@types/mdast": "^4.0.0", 3785 + "unist-util-is": "^6.0.0" 3786 + }, 3787 + "funding": { 3788 + "type": "opencollective", 3789 + "url": "https://opencollective.com/unified" 3790 + } 3791 + }, 3792 + "node_modules/mdast-util-to-markdown": { 3793 + "version": "2.1.2", 3794 + "license": "MIT", 3795 + "dependencies": { 3796 + "@types/mdast": "^4.0.0", 3797 + "@types/unist": "^3.0.0", 3798 + "longest-streak": "^3.0.0", 3799 + "mdast-util-phrasing": "^4.0.0", 3800 + "mdast-util-to-string": "^4.0.0", 3801 + "micromark-util-classify-character": "^2.0.0", 3802 + "micromark-util-decode-string": "^2.0.0", 3803 + "unist-util-visit": "^5.0.0", 3804 + "zwitch": "^2.0.0" 3805 + }, 3806 + "funding": { 3807 + "type": "opencollective", 3808 + "url": "https://opencollective.com/unified" 3809 + } 3810 + }, 3811 + "node_modules/mdast-util-to-string": { 3812 + "version": "4.0.0", 3813 + "license": "MIT", 3814 + "dependencies": { 3815 + "@types/mdast": "^4.0.0" 3816 + }, 3817 + "funding": { 3818 + "type": "opencollective", 3819 + "url": "https://opencollective.com/unified" 3820 + } 3821 + }, 3822 + "node_modules/merge2": { 3823 + "version": "1.4.1", 3824 + "dev": true, 3825 + "license": "MIT", 3826 + "engines": { 3827 + "node": ">= 8" 3828 + } 3829 + }, 3830 + "node_modules/micromark": { 3831 + "version": "4.0.2", 3832 + "funding": [ 3833 + { 3834 + "type": "GitHub Sponsors", 3835 + "url": "https://github.com/sponsors/unifiedjs" 3836 + }, 3837 + { 3838 + "type": "OpenCollective", 3839 + "url": "https://opencollective.com/unified" 3840 + } 3841 + ], 3842 + "license": "MIT", 3843 + "dependencies": { 3844 + "@types/debug": "^4.0.0", 3845 + "debug": "^4.0.0", 3846 + "decode-named-character-reference": "^1.0.0", 3847 + "devlop": "^1.0.0", 3848 + "micromark-core-commonmark": "^2.0.0", 3849 + "micromark-factory-space": "^2.0.0", 3850 + "micromark-util-character": "^2.0.0", 3851 + "micromark-util-chunked": "^2.0.0", 3852 + "micromark-util-combine-extensions": "^2.0.0", 3853 + "micromark-util-decode-numeric-character-reference": "^2.0.0", 3854 + "micromark-util-encode": "^2.0.0", 3855 + "micromark-util-normalize-identifier": "^2.0.0", 3856 + "micromark-util-resolve-all": "^2.0.0", 3857 + "micromark-util-sanitize-uri": "^2.0.0", 3858 + "micromark-util-subtokenize": "^2.0.0", 3859 + "micromark-util-symbol": "^2.0.0", 3860 + "micromark-util-types": "^2.0.0" 3861 + } 3862 + }, 3863 + "node_modules/micromark-core-commonmark": { 3864 + "version": "2.0.3", 3865 + "funding": [ 3866 + { 3867 + "type": "GitHub Sponsors", 3868 + "url": "https://github.com/sponsors/unifiedjs" 3869 + }, 3870 + { 3871 + "type": "OpenCollective", 3872 + "url": "https://opencollective.com/unified" 3873 + } 3874 + ], 3875 + "license": "MIT", 3876 + "dependencies": { 3877 + "decode-named-character-reference": "^1.0.0", 3878 + "devlop": "^1.0.0", 3879 + "micromark-factory-destination": "^2.0.0", 3880 + "micromark-factory-label": "^2.0.0", 3881 + "micromark-factory-space": "^2.0.0", 3882 + "micromark-factory-title": "^2.0.0", 3883 + "micromark-factory-whitespace": "^2.0.0", 3884 + "micromark-util-character": "^2.0.0", 3885 + "micromark-util-chunked": "^2.0.0", 3886 + "micromark-util-classify-character": "^2.0.0", 3887 + "micromark-util-html-tag-name": "^2.0.0", 3888 + "micromark-util-normalize-identifier": "^2.0.0", 3889 + "micromark-util-resolve-all": "^2.0.0", 3890 + "micromark-util-subtokenize": "^2.0.0", 3891 + "micromark-util-symbol": "^2.0.0", 3892 + "micromark-util-types": "^2.0.0" 3893 + } 3894 + }, 3895 + "node_modules/micromark-factory-destination": { 3896 + "version": "2.0.1", 3897 + "funding": [ 3898 + { 3899 + "type": "GitHub Sponsors", 3900 + "url": "https://github.com/sponsors/unifiedjs" 3901 + }, 3902 + { 3903 + "type": "OpenCollective", 3904 + "url": "https://opencollective.com/unified" 3905 + } 3906 + ], 3907 + "license": "MIT", 3908 + "dependencies": { 3909 + "micromark-util-character": "^2.0.0", 3910 + "micromark-util-symbol": "^2.0.0", 3911 + "micromark-util-types": "^2.0.0" 3912 + } 3913 + }, 3914 + "node_modules/micromark-factory-label": { 3915 + "version": "2.0.1", 3916 + "funding": [ 3917 + { 3918 + "type": "GitHub Sponsors", 3919 + "url": "https://github.com/sponsors/unifiedjs" 3920 + }, 3921 + { 3922 + "type": "OpenCollective", 3923 + "url": "https://opencollective.com/unified" 3924 + } 3925 + ], 3926 + "license": "MIT", 3927 + "dependencies": { 3928 + "devlop": "^1.0.0", 3929 + "micromark-util-character": "^2.0.0", 3930 + "micromark-util-symbol": "^2.0.0", 3931 + "micromark-util-types": "^2.0.0" 3932 + } 3933 + }, 3934 + "node_modules/micromark-factory-space": { 3935 + "version": "2.0.1", 3936 + "funding": [ 3937 + { 3938 + "type": "GitHub Sponsors", 3939 + "url": "https://github.com/sponsors/unifiedjs" 3940 + }, 3941 + { 3942 + "type": "OpenCollective", 3943 + "url": "https://opencollective.com/unified" 3944 + } 3945 + ], 3946 + "license": "MIT", 3947 + "dependencies": { 3948 + "micromark-util-character": "^2.0.0", 3949 + "micromark-util-types": "^2.0.0" 3950 + } 3951 + }, 3952 + "node_modules/micromark-factory-title": { 3953 + "version": "2.0.1", 3954 + "funding": [ 3955 + { 3956 + "type": "GitHub Sponsors", 3957 + "url": "https://github.com/sponsors/unifiedjs" 3958 + }, 3959 + { 3960 + "type": "OpenCollective", 3961 + "url": "https://opencollective.com/unified" 3962 + } 3963 + ], 3964 + "license": "MIT", 3965 + "dependencies": { 3966 + "micromark-factory-space": "^2.0.0", 3967 + "micromark-util-character": "^2.0.0", 3968 + "micromark-util-symbol": "^2.0.0", 3969 + "micromark-util-types": "^2.0.0" 3970 + } 3971 + }, 3972 + "node_modules/micromark-factory-whitespace": { 3973 + "version": "2.0.1", 3974 + "funding": [ 3975 + { 3976 + "type": "GitHub Sponsors", 3977 + "url": "https://github.com/sponsors/unifiedjs" 3978 + }, 3979 + { 3980 + "type": "OpenCollective", 3981 + "url": "https://opencollective.com/unified" 3982 + } 3983 + ], 3984 + "license": "MIT", 3985 + "dependencies": { 3986 + "micromark-factory-space": "^2.0.0", 3987 + "micromark-util-character": "^2.0.0", 3988 + "micromark-util-symbol": "^2.0.0", 3989 + "micromark-util-types": "^2.0.0" 3990 + } 3991 + }, 3992 + "node_modules/micromark-util-character": { 3993 + "version": "2.1.1", 3994 + "funding": [ 3995 + { 3996 + "type": "GitHub Sponsors", 3997 + "url": "https://github.com/sponsors/unifiedjs" 3998 + }, 3999 + { 4000 + "type": "OpenCollective", 4001 + "url": "https://opencollective.com/unified" 4002 + } 4003 + ], 4004 + "license": "MIT", 4005 + "dependencies": { 4006 + "micromark-util-symbol": "^2.0.0", 4007 + "micromark-util-types": "^2.0.0" 4008 + } 4009 + }, 4010 + "node_modules/micromark-util-chunked": { 4011 + "version": "2.0.1", 4012 + "funding": [ 4013 + { 4014 + "type": "GitHub Sponsors", 4015 + "url": "https://github.com/sponsors/unifiedjs" 4016 + }, 4017 + { 4018 + "type": "OpenCollective", 4019 + "url": "https://opencollective.com/unified" 4020 + } 4021 + ], 4022 + "license": "MIT", 4023 + "dependencies": { 4024 + "micromark-util-symbol": "^2.0.0" 4025 + } 4026 + }, 4027 + "node_modules/micromark-util-classify-character": { 4028 + "version": "2.0.1", 4029 + "funding": [ 4030 + { 4031 + "type": "GitHub Sponsors", 4032 + "url": "https://github.com/sponsors/unifiedjs" 4033 + }, 4034 + { 4035 + "type": "OpenCollective", 4036 + "url": "https://opencollective.com/unified" 4037 + } 4038 + ], 4039 + "license": "MIT", 4040 + "dependencies": { 4041 + "micromark-util-character": "^2.0.0", 4042 + "micromark-util-symbol": "^2.0.0", 4043 + "micromark-util-types": "^2.0.0" 4044 + } 4045 + }, 4046 + "node_modules/micromark-util-combine-extensions": { 4047 + "version": "2.0.1", 4048 + "funding": [ 4049 + { 4050 + "type": "GitHub Sponsors", 4051 + "url": "https://github.com/sponsors/unifiedjs" 4052 + }, 4053 + { 4054 + "type": "OpenCollective", 4055 + "url": "https://opencollective.com/unified" 4056 + } 4057 + ], 4058 + "license": "MIT", 4059 + "dependencies": { 4060 + "micromark-util-chunked": "^2.0.0", 4061 + "micromark-util-types": "^2.0.0" 4062 + } 4063 + }, 4064 + "node_modules/micromark-util-decode-numeric-character-reference": { 4065 + "version": "2.0.2", 4066 + "funding": [ 4067 + { 4068 + "type": "GitHub Sponsors", 4069 + "url": "https://github.com/sponsors/unifiedjs" 4070 + }, 4071 + { 4072 + "type": "OpenCollective", 4073 + "url": "https://opencollective.com/unified" 4074 + } 4075 + ], 4076 + "license": "MIT", 4077 + "dependencies": { 4078 + "micromark-util-symbol": "^2.0.0" 4079 + } 4080 + }, 4081 + "node_modules/micromark-util-decode-string": { 4082 + "version": "2.0.1", 4083 + "funding": [ 4084 + { 4085 + "type": "GitHub Sponsors", 4086 + "url": "https://github.com/sponsors/unifiedjs" 4087 + }, 4088 + { 4089 + "type": "OpenCollective", 4090 + "url": "https://opencollective.com/unified" 4091 + } 4092 + ], 4093 + "license": "MIT", 4094 + "dependencies": { 4095 + "decode-named-character-reference": "^1.0.0", 4096 + "micromark-util-character": "^2.0.0", 4097 + "micromark-util-decode-numeric-character-reference": "^2.0.0", 4098 + "micromark-util-symbol": "^2.0.0" 4099 + } 4100 + }, 4101 + "node_modules/micromark-util-encode": { 4102 + "version": "2.0.1", 4103 + "funding": [ 4104 + { 4105 + "type": "GitHub Sponsors", 4106 + "url": "https://github.com/sponsors/unifiedjs" 4107 + }, 4108 + { 4109 + "type": "OpenCollective", 4110 + "url": "https://opencollective.com/unified" 4111 + } 4112 + ], 4113 + "license": "MIT" 4114 + }, 4115 + "node_modules/micromark-util-html-tag-name": { 4116 + "version": "2.0.1", 4117 + "funding": [ 4118 + { 4119 + "type": "GitHub Sponsors", 4120 + "url": "https://github.com/sponsors/unifiedjs" 4121 + }, 4122 + { 4123 + "type": "OpenCollective", 4124 + "url": "https://opencollective.com/unified" 4125 + } 4126 + ], 4127 + "license": "MIT" 4128 + }, 4129 + "node_modules/micromark-util-normalize-identifier": { 4130 + "version": "2.0.1", 4131 + "funding": [ 4132 + { 4133 + "type": "GitHub Sponsors", 4134 + "url": "https://github.com/sponsors/unifiedjs" 4135 + }, 4136 + { 4137 + "type": "OpenCollective", 4138 + "url": "https://opencollective.com/unified" 4139 + } 4140 + ], 4141 + "license": "MIT", 4142 + "dependencies": { 4143 + "micromark-util-symbol": "^2.0.0" 4144 + } 4145 + }, 4146 + "node_modules/micromark-util-resolve-all": { 4147 + "version": "2.0.1", 4148 + "funding": [ 4149 + { 4150 + "type": "GitHub Sponsors", 4151 + "url": "https://github.com/sponsors/unifiedjs" 4152 + }, 4153 + { 4154 + "type": "OpenCollective", 4155 + "url": "https://opencollective.com/unified" 4156 + } 4157 + ], 4158 + "license": "MIT", 4159 + "dependencies": { 4160 + "micromark-util-types": "^2.0.0" 4161 + } 4162 + }, 4163 + "node_modules/micromark-util-sanitize-uri": { 4164 + "version": "2.0.1", 4165 + "funding": [ 4166 + { 4167 + "type": "GitHub Sponsors", 4168 + "url": "https://github.com/sponsors/unifiedjs" 4169 + }, 4170 + { 4171 + "type": "OpenCollective", 4172 + "url": "https://opencollective.com/unified" 4173 + } 4174 + ], 4175 + "license": "MIT", 4176 + "dependencies": { 4177 + "micromark-util-character": "^2.0.0", 4178 + "micromark-util-encode": "^2.0.0", 4179 + "micromark-util-symbol": "^2.0.0" 4180 + } 4181 + }, 4182 + "node_modules/micromark-util-subtokenize": { 4183 + "version": "2.1.0", 4184 + "funding": [ 4185 + { 4186 + "type": "GitHub Sponsors", 4187 + "url": "https://github.com/sponsors/unifiedjs" 4188 + }, 4189 + { 4190 + "type": "OpenCollective", 4191 + "url": "https://opencollective.com/unified" 4192 + } 4193 + ], 4194 + "license": "MIT", 4195 + "dependencies": { 4196 + "devlop": "^1.0.0", 4197 + "micromark-util-chunked": "^2.0.0", 4198 + "micromark-util-symbol": "^2.0.0", 4199 + "micromark-util-types": "^2.0.0" 4200 + } 4201 + }, 4202 + "node_modules/micromark-util-symbol": { 4203 + "version": "2.0.1", 4204 + "funding": [ 4205 + { 4206 + "type": "GitHub Sponsors", 4207 + "url": "https://github.com/sponsors/unifiedjs" 4208 + }, 4209 + { 4210 + "type": "OpenCollective", 4211 + "url": "https://opencollective.com/unified" 4212 + } 4213 + ], 4214 + "license": "MIT" 4215 + }, 4216 + "node_modules/micromark-util-types": { 4217 + "version": "2.0.2", 4218 + "funding": [ 4219 + { 4220 + "type": "GitHub Sponsors", 4221 + "url": "https://github.com/sponsors/unifiedjs" 4222 + }, 4223 + { 4224 + "type": "OpenCollective", 4225 + "url": "https://opencollective.com/unified" 4226 + } 4227 + ], 4228 + "license": "MIT" 4229 + }, 4230 + "node_modules/micromatch": { 4231 + "version": "4.0.8", 4232 + "dev": true, 4233 + "license": "MIT", 4234 + "dependencies": { 4235 + "braces": "^3.0.3", 4236 + "picomatch": "^2.3.1" 4237 + }, 4238 + "engines": { 4239 + "node": ">=8.6" 4240 + } 4241 + }, 4242 + "node_modules/minimatch": { 4243 + "version": "3.1.2", 4244 + "dev": true, 4245 + "license": "ISC", 4246 + "dependencies": { 4247 + "brace-expansion": "^1.1.7" 4248 + }, 4249 + "engines": { 4250 + "node": "*" 4251 + } 4252 + }, 4253 + "node_modules/minimist": { 4254 + "version": "1.2.8", 4255 + "dev": true, 4256 + "license": "MIT", 4257 + "funding": { 4258 + "url": "https://github.com/sponsors/ljharb" 4259 + } 4260 + }, 4261 + "node_modules/module-replacements": { 4262 + "version": "2.11.0", 4263 + "dev": true, 4264 + "license": "MIT" 4265 + }, 4266 + "node_modules/moment": { 4267 + "version": "2.29.4", 4268 + "license": "MIT", 4269 + "engines": { 4270 + "node": "*" 4271 + } 4272 + }, 4273 + "node_modules/ms": { 4274 + "version": "2.1.3", 4275 + "license": "MIT" 4276 + }, 4277 + "node_modules/nanoid": { 4278 + "version": "5.1.6", 4279 + "funding": [ 4280 + { 4281 + "type": "github", 4282 + "url": "https://github.com/sponsors/ai" 4283 + } 4284 + ], 4285 + "license": "MIT", 4286 + "bin": { 4287 + "nanoid": "bin/nanoid.js" 4288 + }, 4289 + "engines": { 4290 + "node": "^18 || >=20" 4291 + } 4292 + }, 4293 + "node_modules/natural-compare": { 4294 + "version": "1.4.0", 4295 + "dev": true, 4296 + "license": "MIT" 4297 + }, 4298 + "node_modules/object-assign": { 4299 + "version": "4.1.1", 4300 + "dev": true, 4301 + "license": "MIT", 4302 + "engines": { 4303 + "node": ">=0.10.0" 4304 + } 4305 + }, 4306 + "node_modules/object-inspect": { 4307 + "version": "1.13.4", 4308 + "dev": true, 4309 + "license": "MIT", 4310 + "engines": { 4311 + "node": ">= 0.4" 4312 + }, 4313 + "funding": { 4314 + "url": "https://github.com/sponsors/ljharb" 4315 + } 4316 + }, 4317 + "node_modules/object-keys": { 4318 + "version": "1.1.1", 4319 + "dev": true, 4320 + "license": "MIT", 4321 + "engines": { 4322 + "node": ">= 0.4" 4323 + } 4324 + }, 4325 + "node_modules/object.assign": { 4326 + "version": "4.1.7", 4327 + "dev": true, 4328 + "license": "MIT", 4329 + "dependencies": { 4330 + "call-bind": "^1.0.8", 4331 + "call-bound": "^1.0.3", 4332 + "define-properties": "^1.2.1", 4333 + "es-object-atoms": "^1.0.0", 4334 + "has-symbols": "^1.1.0", 4335 + "object-keys": "^1.1.1" 4336 + }, 4337 + "engines": { 4338 + "node": ">= 0.4" 4339 + }, 4340 + "funding": { 4341 + "url": "https://github.com/sponsors/ljharb" 4342 + } 4343 + }, 4344 + "node_modules/object.entries": { 4345 + "version": "1.1.9", 4346 + "dev": true, 4347 + "license": "MIT", 4348 + "dependencies": { 4349 + "call-bind": "^1.0.8", 4350 + "call-bound": "^1.0.4", 4351 + "define-properties": "^1.2.1", 4352 + "es-object-atoms": "^1.1.1" 4353 + }, 4354 + "engines": { 4355 + "node": ">= 0.4" 4356 + } 4357 + }, 4358 + "node_modules/object.fromentries": { 4359 + "version": "2.0.8", 4360 + "dev": true, 4361 + "license": "MIT", 4362 + "dependencies": { 4363 + "call-bind": "^1.0.7", 4364 + "define-properties": "^1.2.1", 4365 + "es-abstract": "^1.23.2", 4366 + "es-object-atoms": "^1.0.0" 4367 + }, 4368 + "engines": { 4369 + "node": ">= 0.4" 4370 + }, 4371 + "funding": { 4372 + "url": "https://github.com/sponsors/ljharb" 4373 + } 4374 + }, 4375 + "node_modules/object.groupby": { 4376 + "version": "1.0.3", 4377 + "dev": true, 4378 + "license": "MIT", 4379 + "dependencies": { 4380 + "call-bind": "^1.0.7", 4381 + "define-properties": "^1.2.1", 4382 + "es-abstract": "^1.23.2" 4383 + }, 4384 + "engines": { 4385 + "node": ">= 0.4" 4386 + } 4387 + }, 4388 + "node_modules/object.values": { 4389 + "version": "1.2.1", 4390 + "dev": true, 4391 + "license": "MIT", 4392 + "dependencies": { 4393 + "call-bind": "^1.0.8", 4394 + "call-bound": "^1.0.3", 4395 + "define-properties": "^1.2.1", 4396 + "es-object-atoms": "^1.0.0" 4397 + }, 4398 + "engines": { 4399 + "node": ">= 0.4" 4400 + }, 4401 + "funding": { 4402 + "url": "https://github.com/sponsors/ljharb" 4403 + } 4404 + }, 4405 + "node_modules/obsidian": { 4406 + "version": "1.11.4", 4407 + "resolved": "https://registry.npmjs.org/obsidian/-/obsidian-1.11.4.tgz", 4408 + "integrity": "sha512-n0KD3S+VndgaByrEtEe8NELy0ya6/s+KZ7OcxA6xOm5NN4thxKpQjo6eqEudHEvfGCeT/TYToAKJzitQ1I3XTg==", 4409 + "license": "MIT", 4410 + "dependencies": { 4411 + "@types/codemirror": "5.60.8", 4412 + "moment": "2.29.4" 4413 + }, 4414 + "peerDependencies": { 4415 + "@codemirror/state": "6.5.0", 4416 + "@codemirror/view": "6.38.6" 4417 + } 4418 + }, 4419 + "node_modules/optionator": { 4420 + "version": "0.9.4", 4421 + "dev": true, 4422 + "license": "MIT", 4423 + "dependencies": { 4424 + "deep-is": "^0.1.3", 4425 + "fast-levenshtein": "^2.0.6", 4426 + "levn": "^0.4.1", 4427 + "prelude-ls": "^1.2.1", 4428 + "type-check": "^0.4.0", 4429 + "word-wrap": "^1.2.5" 4430 + }, 4431 + "engines": { 4432 + "node": ">= 0.8.0" 4433 + } 4434 + }, 4435 + "node_modules/own-keys": { 4436 + "version": "1.0.1", 4437 + "dev": true, 4438 + "license": "MIT", 4439 + "dependencies": { 4440 + "get-intrinsic": "^1.2.6", 4441 + "object-keys": "^1.1.1", 4442 + "safe-push-apply": "^1.0.0" 4443 + }, 4444 + "engines": { 4445 + "node": ">= 0.4" 4446 + }, 4447 + "funding": { 4448 + "url": "https://github.com/sponsors/ljharb" 4449 + } 4450 + }, 4451 + "node_modules/p-limit": { 4452 + "version": "3.1.0", 4453 + "dev": true, 4454 + "license": "MIT", 4455 + "dependencies": { 4456 + "yocto-queue": "^0.1.0" 4457 + }, 4458 + "engines": { 4459 + "node": ">=10" 4460 + }, 4461 + "funding": { 4462 + "url": "https://github.com/sponsors/sindresorhus" 4463 + } 4464 + }, 4465 + "node_modules/p-locate": { 4466 + "version": "5.0.0", 4467 + "dev": true, 4468 + "license": "MIT", 4469 + "dependencies": { 4470 + "p-limit": "^3.0.2" 4471 + }, 4472 + "engines": { 4473 + "node": ">=10" 4474 + }, 4475 + "funding": { 4476 + "url": "https://github.com/sponsors/sindresorhus" 4477 + } 4478 + }, 4479 + "node_modules/parent-module": { 4480 + "version": "1.0.1", 4481 + "dev": true, 4482 + "license": "MIT", 4483 + "dependencies": { 4484 + "callsites": "^3.0.0" 4485 + }, 4486 + "engines": { 4487 + "node": ">=6" 4488 + } 4489 + }, 4490 + "node_modules/path-exists": { 4491 + "version": "4.0.0", 4492 + "dev": true, 4493 + "license": "MIT", 4494 + "engines": { 4495 + "node": ">=8" 4496 + } 4497 + }, 4498 + "node_modules/path-key": { 4499 + "version": "3.1.1", 4500 + "dev": true, 4501 + "license": "MIT", 4502 + "engines": { 4503 + "node": ">=8" 4504 + } 4505 + }, 4506 + "node_modules/path-parse": { 4507 + "version": "1.0.7", 4508 + "dev": true, 4509 + "license": "MIT" 4510 + }, 4511 + "node_modules/picocolors": { 4512 + "version": "1.1.1", 4513 + "dev": true, 4514 + "license": "ISC" 4515 + }, 4516 + "node_modules/picomatch": { 4517 + "version": "2.3.1", 4518 + "dev": true, 4519 + "license": "MIT", 4520 + "engines": { 4521 + "node": ">=8.6" 4522 + }, 4523 + "funding": { 4524 + "url": "https://github.com/sponsors/jonschlinkert" 4525 + } 4526 + }, 4527 + "node_modules/possible-typed-array-names": { 4528 + "version": "1.1.0", 4529 + "dev": true, 4530 + "license": "MIT", 4531 + "engines": { 4532 + "node": ">= 0.4" 4533 + } 4534 + }, 4535 + "node_modules/prelude-ls": { 4536 + "version": "1.2.1", 4537 + "dev": true, 4538 + "license": "MIT", 4539 + "engines": { 4540 + "node": ">= 0.8.0" 4541 + } 4542 + }, 4543 + "node_modules/prettier": { 4544 + "version": "3.8.1", 4545 + "dev": true, 4546 + "license": "MIT", 4547 + "bin": { 4548 + "prettier": "bin/prettier.cjs" 4549 + }, 4550 + "engines": { 4551 + "node": ">=14" 4552 + }, 4553 + "funding": { 4554 + "url": "https://github.com/prettier/prettier?sponsor=1" 4555 + } 4556 + }, 4557 + "node_modules/prop-types": { 4558 + "version": "15.8.1", 4559 + "dev": true, 4560 + "license": "MIT", 4561 + "dependencies": { 4562 + "loose-envify": "^1.4.0", 4563 + "object-assign": "^4.1.1", 4564 + "react-is": "^16.13.1" 4565 + } 4566 + }, 4567 + "node_modules/punycode": { 4568 + "version": "2.3.1", 4569 + "dev": true, 4570 + "license": "MIT", 4571 + "engines": { 4572 + "node": ">=6" 4573 + } 4574 + }, 4575 + "node_modules/queue-microtask": { 4576 + "version": "1.2.3", 4577 + "dev": true, 4578 + "funding": [ 4579 + { 4580 + "type": "github", 4581 + "url": "https://github.com/sponsors/feross" 4582 + }, 4583 + { 4584 + "type": "patreon", 4585 + "url": "https://www.patreon.com/feross" 4586 + }, 4587 + { 4588 + "type": "consulting", 4589 + "url": "https://feross.org/support" 4590 + } 4591 + ], 4592 + "license": "MIT" 4593 + }, 4594 + "node_modules/react-is": { 4595 + "version": "16.13.1", 4596 + "dev": true, 4597 + "license": "MIT" 4598 + }, 4599 + "node_modules/reflect.getprototypeof": { 4600 + "version": "1.0.10", 4601 + "dev": true, 4602 + "license": "MIT", 4603 + "dependencies": { 4604 + "call-bind": "^1.0.8", 4605 + "define-properties": "^1.2.1", 4606 + "es-abstract": "^1.23.9", 4607 + "es-errors": "^1.3.0", 4608 + "es-object-atoms": "^1.0.0", 4609 + "get-intrinsic": "^1.2.7", 4610 + "get-proto": "^1.0.1", 4611 + "which-builtin-type": "^1.2.1" 4612 + }, 4613 + "engines": { 4614 + "node": ">= 0.4" 4615 + }, 4616 + "funding": { 4617 + "url": "https://github.com/sponsors/ljharb" 4618 + } 4619 + }, 4620 + "node_modules/regexp-tree": { 4621 + "version": "0.1.27", 4622 + "dev": true, 4623 + "license": "MIT", 4624 + "bin": { 4625 + "regexp-tree": "bin/regexp-tree" 4626 + } 4627 + }, 4628 + "node_modules/regexp.prototype.flags": { 4629 + "version": "1.5.4", 4630 + "dev": true, 4631 + "license": "MIT", 4632 + "dependencies": { 4633 + "call-bind": "^1.0.8", 4634 + "define-properties": "^1.2.1", 4635 + "es-errors": "^1.3.0", 4636 + "get-proto": "^1.0.1", 4637 + "gopd": "^1.2.0", 4638 + "set-function-name": "^2.0.2" 4639 + }, 4640 + "engines": { 4641 + "node": ">= 0.4" 4642 + }, 4643 + "funding": { 4644 + "url": "https://github.com/sponsors/ljharb" 4645 + } 4646 + }, 4647 + "node_modules/remark-parse": { 4648 + "version": "11.0.0", 4649 + "license": "MIT", 4650 + "dependencies": { 4651 + "@types/mdast": "^4.0.0", 4652 + "mdast-util-from-markdown": "^2.0.0", 4653 + "micromark-util-types": "^2.0.0", 4654 + "unified": "^11.0.0" 4655 + }, 4656 + "funding": { 4657 + "type": "opencollective", 4658 + "url": "https://opencollective.com/unified" 4659 + } 4660 + }, 4661 + "node_modules/remark-stringify": { 4662 + "version": "11.0.0", 4663 + "license": "MIT", 4664 + "dependencies": { 4665 + "@types/mdast": "^4.0.0", 4666 + "mdast-util-to-markdown": "^2.0.0", 4667 + "unified": "^11.0.0" 4668 + }, 4669 + "funding": { 4670 + "type": "opencollective", 4671 + "url": "https://opencollective.com/unified" 4672 + } 4673 + }, 4674 + "node_modules/require-from-string": { 4675 + "version": "2.0.2", 4676 + "dev": true, 4677 + "license": "MIT", 4678 + "engines": { 4679 + "node": ">=0.10.0" 4680 + } 4681 + }, 4682 + "node_modules/resolve-from": { 4683 + "version": "4.0.0", 4684 + "dev": true, 4685 + "license": "MIT", 4686 + "engines": { 4687 + "node": ">=4" 4688 + } 4689 + }, 4690 + "node_modules/resolve-pkg-maps": { 4691 + "version": "1.0.0", 4692 + "dev": true, 4693 + "license": "MIT", 4694 + "funding": { 4695 + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" 4696 + } 4697 + }, 4698 + "node_modules/ret": { 4699 + "version": "0.1.15", 4700 + "dev": true, 4701 + "license": "MIT", 4702 + "engines": { 4703 + "node": ">=0.12" 4704 + } 4705 + }, 4706 + "node_modules/reusify": { 4707 + "version": "1.1.0", 4708 + "dev": true, 4709 + "license": "MIT", 4710 + "engines": { 4711 + "iojs": ">=1.0.0", 4712 + "node": ">=0.10.0" 4713 + } 4714 + }, 4715 + "node_modules/run-parallel": { 4716 + "version": "1.2.0", 4717 + "dev": true, 4718 + "funding": [ 4719 + { 4720 + "type": "github", 4721 + "url": "https://github.com/sponsors/feross" 4722 + }, 4723 + { 4724 + "type": "patreon", 4725 + "url": "https://www.patreon.com/feross" 4726 + }, 4727 + { 4728 + "type": "consulting", 4729 + "url": "https://feross.org/support" 4730 + } 4731 + ], 4732 + "license": "MIT", 4733 + "dependencies": { 4734 + "queue-microtask": "^1.2.2" 4735 + } 4736 + }, 4737 + "node_modules/safe-array-concat": { 4738 + "version": "1.1.3", 4739 + "dev": true, 4740 + "license": "MIT", 4741 + "dependencies": { 4742 + "call-bind": "^1.0.8", 4743 + "call-bound": "^1.0.2", 4744 + "get-intrinsic": "^1.2.6", 4745 + "has-symbols": "^1.1.0", 4746 + "isarray": "^2.0.5" 4747 + }, 4748 + "engines": { 4749 + "node": ">=0.4" 4750 + }, 4751 + "funding": { 4752 + "url": "https://github.com/sponsors/ljharb" 4753 + } 4754 + }, 4755 + "node_modules/safe-buffer": { 4756 + "version": "5.2.1", 4757 + "dev": true, 4758 + "funding": [ 4759 + { 4760 + "type": "github", 4761 + "url": "https://github.com/sponsors/feross" 4762 + }, 4763 + { 4764 + "type": "patreon", 4765 + "url": "https://www.patreon.com/feross" 4766 + }, 4767 + { 4768 + "type": "consulting", 4769 + "url": "https://feross.org/support" 4770 + } 4771 + ], 4772 + "license": "MIT" 4773 + }, 4774 + "node_modules/safe-push-apply": { 4775 + "version": "1.0.0", 4776 + "dev": true, 4777 + "license": "MIT", 4778 + "dependencies": { 4779 + "es-errors": "^1.3.0", 4780 + "isarray": "^2.0.5" 4781 + }, 4782 + "engines": { 4783 + "node": ">= 0.4" 4784 + }, 4785 + "funding": { 4786 + "url": "https://github.com/sponsors/ljharb" 4787 + } 4788 + }, 4789 + "node_modules/safe-regex": { 4790 + "version": "2.1.1", 4791 + "dev": true, 4792 + "license": "MIT", 4793 + "dependencies": { 4794 + "regexp-tree": "~0.1.1" 4795 + } 4796 + }, 4797 + "node_modules/safe-regex-test": { 4798 + "version": "1.1.0", 4799 + "dev": true, 4800 + "license": "MIT", 4801 + "dependencies": { 4802 + "call-bound": "^1.0.2", 4803 + "es-errors": "^1.3.0", 4804 + "is-regex": "^1.2.1" 4805 + }, 4806 + "engines": { 4807 + "node": ">= 0.4" 4808 + }, 4809 + "funding": { 4810 + "url": "https://github.com/sponsors/ljharb" 4811 + } 4812 + }, 4813 + "node_modules/semver": { 4814 + "version": "7.7.3", 4815 + "dev": true, 4816 + "license": "ISC", 4817 + "bin": { 4818 + "semver": "bin/semver.js" 4819 + }, 4820 + "engines": { 4821 + "node": ">=10" 4822 + } 4823 + }, 4824 + "node_modules/set-function-length": { 4825 + "version": "1.2.2", 4826 + "dev": true, 4827 + "license": "MIT", 4828 + "dependencies": { 4829 + "define-data-property": "^1.1.4", 4830 + "es-errors": "^1.3.0", 4831 + "function-bind": "^1.1.2", 4832 + "get-intrinsic": "^1.2.4", 4833 + "gopd": "^1.0.1", 4834 + "has-property-descriptors": "^1.0.2" 4835 + }, 4836 + "engines": { 4837 + "node": ">= 0.4" 4838 + } 4839 + }, 4840 + "node_modules/set-function-name": { 4841 + "version": "2.0.2", 4842 + "dev": true, 4843 + "license": "MIT", 4844 + "dependencies": { 4845 + "define-data-property": "^1.1.4", 4846 + "es-errors": "^1.3.0", 4847 + "functions-have-names": "^1.2.3", 4848 + "has-property-descriptors": "^1.0.2" 4849 + }, 4850 + "engines": { 4851 + "node": ">= 0.4" 4852 + } 4853 + }, 4854 + "node_modules/set-proto": { 4855 + "version": "1.0.0", 4856 + "dev": true, 4857 + "license": "MIT", 4858 + "dependencies": { 4859 + "dunder-proto": "^1.0.1", 4860 + "es-errors": "^1.3.0", 4861 + "es-object-atoms": "^1.0.0" 4862 + }, 4863 + "engines": { 4864 + "node": ">= 0.4" 4865 + } 4866 + }, 4867 + "node_modules/shebang-command": { 4868 + "version": "2.0.0", 4869 + "dev": true, 4870 + "license": "MIT", 4871 + "dependencies": { 4872 + "shebang-regex": "^3.0.0" 4873 + }, 4874 + "engines": { 4875 + "node": ">=8" 4876 + } 4877 + }, 4878 + "node_modules/shebang-regex": { 4879 + "version": "3.0.0", 4880 + "dev": true, 4881 + "license": "MIT", 4882 + "engines": { 4883 + "node": ">=8" 4884 + } 4885 + }, 4886 + "node_modules/side-channel": { 4887 + "version": "1.1.0", 4888 + "dev": true, 4889 + "license": "MIT", 4890 + "dependencies": { 4891 + "es-errors": "^1.3.0", 4892 + "object-inspect": "^1.13.3", 4893 + "side-channel-list": "^1.0.0", 4894 + "side-channel-map": "^1.0.1", 4895 + "side-channel-weakmap": "^1.0.2" 4896 + }, 4897 + "engines": { 4898 + "node": ">= 0.4" 4899 + }, 4900 + "funding": { 4901 + "url": "https://github.com/sponsors/ljharb" 4902 + } 4903 + }, 4904 + "node_modules/side-channel-list": { 4905 + "version": "1.0.0", 4906 + "dev": true, 4907 + "license": "MIT", 4908 + "dependencies": { 4909 + "es-errors": "^1.3.0", 4910 + "object-inspect": "^1.13.3" 4911 + }, 4912 + "engines": { 4913 + "node": ">= 0.4" 4914 + }, 4915 + "funding": { 4916 + "url": "https://github.com/sponsors/ljharb" 4917 + } 4918 + }, 4919 + "node_modules/side-channel-map": { 4920 + "version": "1.0.1", 4921 + "dev": true, 4922 + "license": "MIT", 4923 + "dependencies": { 4924 + "call-bound": "^1.0.2", 4925 + "es-errors": "^1.3.0", 4926 + "get-intrinsic": "^1.2.5", 4927 + "object-inspect": "^1.13.3" 4928 + }, 4929 + "engines": { 4930 + "node": ">= 0.4" 4931 + }, 4932 + "funding": { 4933 + "url": "https://github.com/sponsors/ljharb" 4934 + } 4935 + }, 4936 + "node_modules/side-channel-weakmap": { 4937 + "version": "1.0.2", 4938 + "dev": true, 4939 + "license": "MIT", 4940 + "dependencies": { 4941 + "call-bound": "^1.0.2", 4942 + "es-errors": "^1.3.0", 4943 + "get-intrinsic": "^1.2.5", 4944 + "object-inspect": "^1.13.3", 4945 + "side-channel-map": "^1.0.1" 4946 + }, 4947 + "engines": { 4948 + "node": ">= 0.4" 4949 + }, 4950 + "funding": { 4951 + "url": "https://github.com/sponsors/ljharb" 4952 + } 4953 + }, 4954 + "node_modules/stop-iteration-iterator": { 4955 + "version": "1.1.0", 4956 + "dev": true, 4957 + "license": "MIT", 4958 + "dependencies": { 4959 + "es-errors": "^1.3.0", 4960 + "internal-slot": "^1.1.0" 4961 + }, 4962 + "engines": { 4963 + "node": ">= 0.4" 4964 + } 4965 + }, 4966 + "node_modules/string.prototype.matchall": { 4967 + "version": "4.0.12", 4968 + "dev": true, 4969 + "license": "MIT", 4970 + "dependencies": { 4971 + "call-bind": "^1.0.8", 4972 + "call-bound": "^1.0.3", 4973 + "define-properties": "^1.2.1", 4974 + "es-abstract": "^1.23.6", 4975 + "es-errors": "^1.3.0", 4976 + "es-object-atoms": "^1.0.0", 4977 + "get-intrinsic": "^1.2.6", 4978 + "gopd": "^1.2.0", 4979 + "has-symbols": "^1.1.0", 4980 + "internal-slot": "^1.1.0", 4981 + "regexp.prototype.flags": "^1.5.3", 4982 + "set-function-name": "^2.0.2", 4983 + "side-channel": "^1.1.0" 4984 + }, 4985 + "engines": { 4986 + "node": ">= 0.4" 4987 + }, 4988 + "funding": { 4989 + "url": "https://github.com/sponsors/ljharb" 4990 + } 4991 + }, 4992 + "node_modules/string.prototype.repeat": { 4993 + "version": "1.0.0", 4994 + "dev": true, 4995 + "license": "MIT", 4996 + "dependencies": { 4997 + "define-properties": "^1.1.3", 4998 + "es-abstract": "^1.17.5" 4999 + } 5000 + }, 5001 + "node_modules/string.prototype.trim": { 5002 + "version": "1.2.10", 5003 + "dev": true, 5004 + "license": "MIT", 5005 + "dependencies": { 5006 + "call-bind": "^1.0.8", 5007 + "call-bound": "^1.0.2", 5008 + "define-data-property": "^1.1.4", 5009 + "define-properties": "^1.2.1", 5010 + "es-abstract": "^1.23.5", 5011 + "es-object-atoms": "^1.0.0", 5012 + "has-property-descriptors": "^1.0.2" 5013 + }, 5014 + "engines": { 5015 + "node": ">= 0.4" 5016 + }, 5017 + "funding": { 5018 + "url": "https://github.com/sponsors/ljharb" 5019 + } 5020 + }, 5021 + "node_modules/string.prototype.trimend": { 5022 + "version": "1.0.9", 5023 + "dev": true, 5024 + "license": "MIT", 5025 + "dependencies": { 5026 + "call-bind": "^1.0.8", 5027 + "call-bound": "^1.0.2", 5028 + "define-properties": "^1.2.1", 5029 + "es-object-atoms": "^1.0.0" 5030 + }, 5031 + "engines": { 5032 + "node": ">= 0.4" 5033 + }, 5034 + "funding": { 5035 + "url": "https://github.com/sponsors/ljharb" 5036 + } 5037 + }, 5038 + "node_modules/string.prototype.trimstart": { 5039 + "version": "1.0.8", 5040 + "dev": true, 5041 + "license": "MIT", 5042 + "dependencies": { 5043 + "call-bind": "^1.0.7", 5044 + "define-properties": "^1.2.1", 5045 + "es-object-atoms": "^1.0.0" 5046 + }, 5047 + "engines": { 5048 + "node": ">= 0.4" 5049 + }, 5050 + "funding": { 5051 + "url": "https://github.com/sponsors/ljharb" 5052 + } 5053 + }, 5054 + "node_modules/strip-bom": { 5055 + "version": "3.0.0", 5056 + "dev": true, 5057 + "license": "MIT", 5058 + "engines": { 5059 + "node": ">=4" 5060 + } 5061 + }, 5062 + "node_modules/strip-json-comments": { 5063 + "version": "3.1.1", 5064 + "dev": true, 5065 + "license": "MIT", 5066 + "engines": { 5067 + "node": ">=8" 5068 + }, 5069 + "funding": { 5070 + "url": "https://github.com/sponsors/sindresorhus" 5071 + } 5072 + }, 5073 + "node_modules/style-mod": { 5074 + "version": "4.1.3", 5075 + "license": "MIT" 5076 + }, 5077 + "node_modules/supports-color": { 5078 + "version": "7.2.0", 5079 + "dev": true, 5080 + "license": "MIT", 5081 + "dependencies": { 5082 + "has-flag": "^4.0.0" 5083 + }, 5084 + "engines": { 5085 + "node": ">=8" 5086 + } 5087 + }, 5088 + "node_modules/supports-preserve-symlinks-flag": { 5089 + "version": "1.0.0", 5090 + "dev": true, 5091 + "license": "MIT", 5092 + "engines": { 5093 + "node": ">= 0.4" 5094 + }, 5095 + "funding": { 5096 + "url": "https://github.com/sponsors/ljharb" 5097 + } 5098 + }, 5099 + "node_modules/synckit": { 5100 + "version": "0.9.3", 5101 + "dev": true, 5102 + "license": "MIT", 5103 + "dependencies": { 5104 + "@pkgr/core": "^0.1.0", 5105 + "tslib": "^2.6.2" 5106 + }, 5107 + "engines": { 5108 + "node": "^14.18.0 || >=16.0.0" 5109 + }, 5110 + "funding": { 5111 + "url": "https://opencollective.com/unts" 5112 + } 5113 + }, 5114 + "node_modules/synckit/node_modules/tslib": { 5115 + "version": "2.8.1", 5116 + "dev": true, 5117 + "license": "0BSD" 5118 + }, 5119 + "node_modules/tapable": { 5120 + "version": "2.3.0", 5121 + "dev": true, 5122 + "license": "MIT", 5123 + "engines": { 5124 + "node": ">=6" 5125 + }, 5126 + "funding": { 5127 + "type": "opencollective", 5128 + "url": "https://opencollective.com/webpack" 5129 + } 5130 + }, 5131 + "node_modules/to-regex-range": { 5132 + "version": "5.0.1", 5133 + "dev": true, 5134 + "license": "MIT", 5135 + "dependencies": { 5136 + "is-number": "^7.0.0" 5137 + }, 5138 + "engines": { 5139 + "node": ">=8.0" 5140 + } 5141 + }, 5142 + "node_modules/toml-eslint-parser": { 5143 + "version": "0.9.3", 5144 + "dev": true, 5145 + "license": "MIT", 5146 + "dependencies": { 5147 + "eslint-visitor-keys": "^3.0.0" 5148 + }, 5149 + "engines": { 5150 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 5151 + }, 5152 + "funding": { 5153 + "url": "https://github.com/sponsors/ota-meshi" 5154 + } 5155 + }, 5156 + "node_modules/toml-eslint-parser/node_modules/eslint-visitor-keys": { 5157 + "version": "3.4.3", 5158 + "dev": true, 5159 + "license": "Apache-2.0", 5160 + "engines": { 5161 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 5162 + }, 5163 + "funding": { 5164 + "url": "https://opencollective.com/eslint" 5165 + } 5166 + }, 5167 + "node_modules/trough": { 5168 + "version": "2.2.0", 5169 + "license": "MIT", 5170 + "funding": { 5171 + "type": "github", 5172 + "url": "https://github.com/sponsors/wooorm" 5173 + } 5174 + }, 5175 + "node_modules/ts-api-utils": { 5176 + "version": "2.4.0", 5177 + "dev": true, 5178 + "license": "MIT", 5179 + "engines": { 5180 + "node": ">=18.12" 5181 + }, 5182 + "peerDependencies": { 5183 + "typescript": ">=4.8.4" 5184 + } 5185 + }, 5186 + "node_modules/tsconfig-paths": { 5187 + "version": "3.15.0", 5188 + "dev": true, 5189 + "license": "MIT", 5190 + "dependencies": { 5191 + "@types/json5": "^0.0.29", 5192 + "json5": "^1.0.2", 5193 + "minimist": "^1.2.6", 5194 + "strip-bom": "^3.0.0" 5195 + } 5196 + }, 5197 + "node_modules/tslib": { 5198 + "version": "2.4.0", 5199 + "dev": true, 5200 + "license": "0BSD" 5201 + }, 5202 + "node_modules/tunnel-agent": { 5203 + "version": "0.6.0", 5204 + "dev": true, 5205 + "license": "Apache-2.0", 5206 + "dependencies": { 5207 + "safe-buffer": "^5.0.1" 5208 + }, 5209 + "engines": { 5210 + "node": "*" 5211 + } 5212 + }, 5213 + "node_modules/type-check": { 5214 + "version": "0.4.0", 5215 + "dev": true, 5216 + "license": "MIT", 5217 + "dependencies": { 5218 + "prelude-ls": "^1.2.1" 5219 + }, 5220 + "engines": { 5221 + "node": ">= 0.8.0" 5222 + } 5223 + }, 5224 + "node_modules/typed-array-buffer": { 5225 + "version": "1.0.3", 5226 + "dev": true, 5227 + "license": "MIT", 5228 + "dependencies": { 5229 + "call-bound": "^1.0.3", 5230 + "es-errors": "^1.3.0", 5231 + "is-typed-array": "^1.1.14" 5232 + }, 5233 + "engines": { 5234 + "node": ">= 0.4" 5235 + } 5236 + }, 5237 + "node_modules/typed-array-byte-length": { 5238 + "version": "1.0.3", 5239 + "dev": true, 5240 + "license": "MIT", 5241 + "dependencies": { 5242 + "call-bind": "^1.0.8", 5243 + "for-each": "^0.3.3", 5244 + "gopd": "^1.2.0", 5245 + "has-proto": "^1.2.0", 5246 + "is-typed-array": "^1.1.14" 5247 + }, 5248 + "engines": { 5249 + "node": ">= 0.4" 5250 + }, 5251 + "funding": { 5252 + "url": "https://github.com/sponsors/ljharb" 5253 + } 5254 + }, 5255 + "node_modules/typed-array-byte-offset": { 5256 + "version": "1.0.4", 5257 + "dev": true, 5258 + "license": "MIT", 5259 + "dependencies": { 5260 + "available-typed-arrays": "^1.0.7", 5261 + "call-bind": "^1.0.8", 5262 + "for-each": "^0.3.3", 5263 + "gopd": "^1.2.0", 5264 + "has-proto": "^1.2.0", 5265 + "is-typed-array": "^1.1.15", 5266 + "reflect.getprototypeof": "^1.0.9" 5267 + }, 5268 + "engines": { 5269 + "node": ">= 0.4" 5270 + }, 5271 + "funding": { 5272 + "url": "https://github.com/sponsors/ljharb" 5273 + } 5274 + }, 5275 + "node_modules/typed-array-length": { 5276 + "version": "1.0.7", 5277 + "dev": true, 5278 + "license": "MIT", 5279 + "dependencies": { 5280 + "call-bind": "^1.0.7", 5281 + "for-each": "^0.3.3", 5282 + "gopd": "^1.0.1", 5283 + "is-typed-array": "^1.1.13", 5284 + "possible-typed-array-names": "^1.0.0", 5285 + "reflect.getprototypeof": "^1.0.6" 5286 + }, 5287 + "engines": { 5288 + "node": ">= 0.4" 5289 + }, 5290 + "funding": { 5291 + "url": "https://github.com/sponsors/ljharb" 5292 + } 5293 + }, 5294 + "node_modules/typescript": { 5295 + "version": "5.8.3", 5296 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 5297 + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 5298 + "dev": true, 5299 + "license": "Apache-2.0", 5300 + "peer": true, 5301 + "bin": { 5302 + "tsc": "bin/tsc", 5303 + "tsserver": "bin/tsserver" 5304 + }, 5305 + "engines": { 5306 + "node": ">=14.17" 5307 + } 5308 + }, 5309 + "node_modules/typescript-eslint": { 5310 + "version": "8.35.1", 5311 + "dev": true, 5312 + "license": "MIT", 5313 + "peer": true, 5314 + "dependencies": { 5315 + "@typescript-eslint/eslint-plugin": "8.35.1", 5316 + "@typescript-eslint/parser": "8.35.1", 5317 + "@typescript-eslint/utils": "8.35.1" 5318 + }, 5319 + "engines": { 5320 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" 5321 + }, 5322 + "funding": { 5323 + "type": "opencollective", 5324 + "url": "https://opencollective.com/typescript-eslint" 5325 + }, 5326 + "peerDependencies": { 5327 + "eslint": "^8.57.0 || ^9.0.0", 5328 + "typescript": ">=4.8.4 <5.9.0" 5329 + } 5330 + }, 5331 + "node_modules/unbox-primitive": { 5332 + "version": "1.1.0", 5333 + "dev": true, 5334 + "license": "MIT", 5335 + "dependencies": { 5336 + "call-bound": "^1.0.3", 5337 + "has-bigints": "^1.0.2", 5338 + "has-symbols": "^1.1.0", 5339 + "which-boxed-primitive": "^1.1.1" 5340 + }, 5341 + "engines": { 5342 + "node": ">= 0.4" 5343 + }, 5344 + "funding": { 5345 + "url": "https://github.com/sponsors/ljharb" 5346 + } 5347 + }, 5348 + "node_modules/undici-types": { 5349 + "version": "5.26.5", 5350 + "dev": true, 5351 + "license": "MIT" 5352 + }, 5353 + "node_modules/unicode-segmenter": { 5354 + "version": "0.14.5", 5355 + "license": "MIT" 5356 + }, 5357 + "node_modules/unified": { 5358 + "version": "11.0.5", 5359 + "license": "MIT", 5360 + "dependencies": { 5361 + "@types/unist": "^3.0.0", 5362 + "bail": "^2.0.0", 5363 + "devlop": "^1.0.0", 5364 + "extend": "^3.0.0", 5365 + "is-plain-obj": "^4.0.0", 5366 + "trough": "^2.0.0", 5367 + "vfile": "^6.0.0" 5368 + }, 5369 + "funding": { 5370 + "type": "opencollective", 5371 + "url": "https://opencollective.com/unified" 5372 + } 5373 + }, 5374 + "node_modules/unist-util-is": { 5375 + "version": "6.0.1", 5376 + "license": "MIT", 5377 + "dependencies": { 5378 + "@types/unist": "^3.0.0" 5379 + }, 5380 + "funding": { 5381 + "type": "opencollective", 5382 + "url": "https://opencollective.com/unified" 5383 + } 5384 + }, 5385 + "node_modules/unist-util-stringify-position": { 5386 + "version": "4.0.0", 5387 + "license": "MIT", 5388 + "dependencies": { 5389 + "@types/unist": "^3.0.0" 5390 + }, 5391 + "funding": { 5392 + "type": "opencollective", 5393 + "url": "https://opencollective.com/unified" 5394 + } 5395 + }, 5396 + "node_modules/unist-util-visit": { 5397 + "version": "5.1.0", 5398 + "license": "MIT", 5399 + "dependencies": { 5400 + "@types/unist": "^3.0.0", 5401 + "unist-util-is": "^6.0.0", 5402 + "unist-util-visit-parents": "^6.0.0" 5403 + }, 5404 + "funding": { 5405 + "type": "opencollective", 5406 + "url": "https://opencollective.com/unified" 5407 + } 5408 + }, 5409 + "node_modules/unist-util-visit-parents": { 5410 + "version": "6.0.2", 5411 + "license": "MIT", 5412 + "dependencies": { 5413 + "@types/unist": "^3.0.0", 5414 + "unist-util-is": "^6.0.0" 5415 + }, 5416 + "funding": { 5417 + "type": "opencollective", 5418 + "url": "https://opencollective.com/unified" 5419 + } 5420 + }, 5421 + "node_modules/uri-js": { 5422 + "version": "4.4.1", 5423 + "dev": true, 5424 + "license": "BSD-2-Clause", 5425 + "dependencies": { 5426 + "punycode": "^2.1.0" 5427 + } 5428 + }, 5429 + "node_modules/vfile": { 5430 + "version": "6.0.3", 5431 + "license": "MIT", 5432 + "dependencies": { 5433 + "@types/unist": "^3.0.0", 5434 + "vfile-message": "^4.0.0" 5435 + }, 5436 + "funding": { 5437 + "type": "opencollective", 5438 + "url": "https://opencollective.com/unified" 5439 + } 5440 + }, 5441 + "node_modules/vfile-message": { 5442 + "version": "4.0.3", 5443 + "license": "MIT", 5444 + "dependencies": { 5445 + "@types/unist": "^3.0.0", 5446 + "unist-util-stringify-position": "^4.0.0" 5447 + }, 5448 + "funding": { 5449 + "type": "opencollective", 5450 + "url": "https://opencollective.com/unified" 5451 + } 5452 + }, 5453 + "node_modules/w3c-keyname": { 5454 + "version": "2.2.8", 5455 + "license": "MIT" 5456 + }, 5457 + "node_modules/which": { 5458 + "version": "2.0.2", 5459 + "dev": true, 5460 + "license": "ISC", 5461 + "dependencies": { 5462 + "isexe": "^2.0.0" 5463 + }, 5464 + "bin": { 5465 + "node-which": "bin/node-which" 5466 + }, 5467 + "engines": { 5468 + "node": ">= 8" 5469 + } 5470 + }, 5471 + "node_modules/which-boxed-primitive": { 5472 + "version": "1.1.1", 5473 + "dev": true, 5474 + "license": "MIT", 5475 + "dependencies": { 5476 + "is-bigint": "^1.1.0", 5477 + "is-boolean-object": "^1.2.1", 5478 + "is-number-object": "^1.1.1", 5479 + "is-string": "^1.1.1", 5480 + "is-symbol": "^1.1.1" 5481 + }, 5482 + "engines": { 5483 + "node": ">= 0.4" 5484 + }, 5485 + "funding": { 5486 + "url": "https://github.com/sponsors/ljharb" 5487 + } 5488 + }, 5489 + "node_modules/which-builtin-type": { 5490 + "version": "1.2.1", 5491 + "dev": true, 5492 + "license": "MIT", 5493 + "dependencies": { 5494 + "call-bound": "^1.0.2", 5495 + "function.prototype.name": "^1.1.6", 5496 + "has-tostringtag": "^1.0.2", 5497 + "is-async-function": "^2.0.0", 5498 + "is-date-object": "^1.1.0", 5499 + "is-finalizationregistry": "^1.1.0", 5500 + "is-generator-function": "^1.0.10", 5501 + "is-regex": "^1.2.1", 5502 + "is-weakref": "^1.0.2", 5503 + "isarray": "^2.0.5", 5504 + "which-boxed-primitive": "^1.1.0", 5505 + "which-collection": "^1.0.2", 5506 + "which-typed-array": "^1.1.16" 5507 + }, 5508 + "engines": { 5509 + "node": ">= 0.4" 5510 + }, 5511 + "funding": { 5512 + "url": "https://github.com/sponsors/ljharb" 5513 + } 5514 + }, 5515 + "node_modules/which-collection": { 5516 + "version": "1.0.2", 5517 + "dev": true, 5518 + "license": "MIT", 5519 + "dependencies": { 5520 + "is-map": "^2.0.3", 5521 + "is-set": "^2.0.3", 5522 + "is-weakmap": "^2.0.2", 5523 + "is-weakset": "^2.0.3" 5524 + }, 5525 + "engines": { 5526 + "node": ">= 0.4" 5527 + }, 5528 + "funding": { 5529 + "url": "https://github.com/sponsors/ljharb" 5530 + } 5531 + }, 5532 + "node_modules/which-typed-array": { 5533 + "version": "1.1.20", 5534 + "dev": true, 5535 + "license": "MIT", 5536 + "dependencies": { 5537 + "available-typed-arrays": "^1.0.7", 5538 + "call-bind": "^1.0.8", 5539 + "call-bound": "^1.0.4", 5540 + "for-each": "^0.3.5", 5541 + "get-proto": "^1.0.1", 5542 + "gopd": "^1.2.0", 5543 + "has-tostringtag": "^1.0.2" 5544 + }, 5545 + "engines": { 5546 + "node": ">= 0.4" 5547 + }, 5548 + "funding": { 5549 + "url": "https://github.com/sponsors/ljharb" 5550 + } 5551 + }, 5552 + "node_modules/word-wrap": { 5553 + "version": "1.2.5", 5554 + "dev": true, 5555 + "license": "MIT", 5556 + "engines": { 5557 + "node": ">=0.10.0" 5558 + } 5559 + }, 5560 + "node_modules/yaml": { 5561 + "version": "2.8.2", 5562 + "dev": true, 5563 + "license": "ISC", 5564 + "bin": { 5565 + "yaml": "bin.mjs" 5566 + }, 5567 + "engines": { 5568 + "node": ">= 14.6" 5569 + }, 5570 + "funding": { 5571 + "url": "https://github.com/sponsors/eemeli" 5572 + } 5573 + }, 5574 + "node_modules/yaml-eslint-parser": { 5575 + "version": "1.3.2", 5576 + "dev": true, 5577 + "license": "MIT", 5578 + "dependencies": { 5579 + "eslint-visitor-keys": "^3.0.0", 5580 + "yaml": "^2.0.0" 5581 + }, 5582 + "engines": { 5583 + "node": "^14.17.0 || >=16.0.0" 5584 + }, 5585 + "funding": { 5586 + "url": "https://github.com/sponsors/ota-meshi" 5587 + } 5588 + }, 5589 + "node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": { 5590 + "version": "3.4.3", 5591 + "dev": true, 5592 + "license": "Apache-2.0", 5593 + "engines": { 5594 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 5595 + }, 5596 + "funding": { 5597 + "url": "https://opencollective.com/eslint" 5598 + } 5599 + }, 5600 + "node_modules/yocto-queue": { 5601 + "version": "0.1.0", 5602 + "dev": true, 5603 + "license": "MIT", 5604 + "engines": { 5605 + "node": ">=10" 5606 + }, 5607 + "funding": { 5608 + "url": "https://github.com/sponsors/sindresorhus" 5609 + } 5610 + }, 5611 + "node_modules/zwitch": { 5612 + "version": "2.0.4", 5613 + "license": "MIT", 5614 + "funding": { 5615 + "type": "github", 5616 + "url": "https://github.com/sponsors/wooorm" 5617 + } 5618 + } 5619 + } 5620 + }
+4 -3
package.json
··· 13 "keywords": [], 14 "license": "MIT", 15 "devDependencies": { 16 "@eslint/js": "9.30.1", 17 "@types/node": "^16.11.6", 18 "esbuild": "0.25.5", ··· 21 "jiti": "2.6.1", 22 "tslib": "2.4.0", 23 "typescript": "^5.8.3", 24 - "typescript-eslint": "8.35.1", 25 - "@atcute/lex-cli": "^2.5.3" 26 }, 27 "dependencies": { 28 "@atcute/atproto": "^3.1.10", 29 "@atcute/bluesky": "^3.2.15", 30 "@atcute/client": "^4.2.1", 31 "@atcute/identity-resolver": "^1.2.2", 32 "@atcute/leaflet": "^1.0.17", 33 "@atcute/microcosm": "^1.0.1", 34 - "@atcute/oauth-browser-client": "^2.0.3", 35 "@atcute/pckt": "^0.1.5", 36 "@atcute/standard-site": "^1.0.0", 37 "obsidian": "latest",
··· 13 "keywords": [], 14 "license": "MIT", 15 "devDependencies": { 16 + "@atcute/lex-cli": "^2.5.3", 17 "@eslint/js": "9.30.1", 18 "@types/node": "^16.11.6", 19 "esbuild": "0.25.5", ··· 22 "jiti": "2.6.1", 23 "tslib": "2.4.0", 24 "typescript": "^5.8.3", 25 + "typescript-eslint": "8.35.1" 26 }, 27 "dependencies": { 28 "@atcute/atproto": "^3.1.10", 29 "@atcute/bluesky": "^3.2.15", 30 "@atcute/client": "^4.2.1", 31 "@atcute/identity-resolver": "^1.2.2", 32 + "@atcute/identity-resolver-node": "^1.0.3", 33 "@atcute/leaflet": "^1.0.17", 34 "@atcute/microcosm": "^1.0.1", 35 + "@atcute/oauth-browser-client": "^3.0.0", 36 "@atcute/pckt": "^0.1.5", 37 "@atcute/standard-site": "^1.0.0", 38 "obsidian": "latest",
+3 -3
src/commands/publishDocument.ts
··· 189 doc: SiteStandardDocument.Main, 190 existingUri?: ResourceUri, 191 ) { 192 - if (!plugin.client) { 193 throw new Error("Client not initialized"); 194 } 195 196 const response = existingUri 197 - ? await putDocument(plugin.client, plugin.settings.identifier, existingUri, doc) 198 - : await createDocument(plugin.client, plugin.settings.identifier, doc); 199 200 if (!response.ok) { 201 throw new Error(`Failed to publish: ${response.status}`);
··· 189 doc: SiteStandardDocument.Main, 190 existingUri?: ResourceUri, 191 ) { 192 + if (!await plugin.checkAuth()) { 193 throw new Error("Client not initialized"); 194 } 195 196 const response = existingUri 197 + ? await putDocument(plugin.client, plugin.settings.did!, existingUri, doc) 198 + : await createDocument(plugin.client, plugin.settings.did!, doc); 199 200 if (!response.ok) { 201 throw new Error(`Failed to publish: ${response.status}`);
+4 -4
src/components/cardDetailModal.ts
··· 85 } 86 87 private async handleAddNote() { 88 - if (!this.plugin.client || !this.noteInput) return; 89 90 const text = this.noteInput.value.trim(); 91 if (!text) { ··· 96 try { 97 await createNoteCard( 98 this.plugin.client, 99 - this.plugin.settings.identifier, 100 text, 101 { uri: this.item.getUri(), cid: this.item.getCid() } 102 ); ··· 111 } 112 113 private async handleDeleteNote(noteUri: string) { 114 - if (!this.plugin.client) return; 115 116 const rkey = noteUri.split("/").pop(); 117 if (!rkey) { ··· 122 try { 123 await deleteRecord( 124 this.plugin.client, 125 - this.plugin.settings.identifier, 126 "network.cosmik.card", 127 rkey 128 );
··· 85 } 86 87 private async handleAddNote() { 88 + if (!this.plugin.client.loggedIn || !this.noteInput) return; 89 90 const text = this.noteInput.value.trim(); 91 if (!text) { ··· 96 try { 97 await createNoteCard( 98 this.plugin.client, 99 + this.plugin.settings.did!, 100 text, 101 { uri: this.item.getUri(), cid: this.item.getCid() } 102 ); ··· 111 } 112 113 private async handleDeleteNote(noteUri: string) { 114 + if (!this.plugin.client.loggedIn) return; 115 116 const rkey = noteUri.split("/").pop(); 117 if (!rkey) { ··· 122 try { 123 await deleteRecord( 124 this.plugin.client, 125 + this.plugin.settings.did!, 126 "network.cosmik.card", 127 rkey 128 );
+1 -1
src/components/cardForm.ts
··· 50 // new Notice("Please enter some text"); 51 // return; 52 // } 53 - // await ok(createNoteCard(this.plugin.client!, this.plugin.settings.identifier, text)); 54 // new Notice("Card created successfully!"); 55 // this.close(); 56 // };
··· 50 // new Notice("Please enter some text"); 51 // return; 52 // } 53 + // await ok(createNoteCard(this.plugin.client!, this.plugin.settings.did!, text)); 54 // new Notice("Card created successfully!"); 55 // this.close(); 56 // };
+1 -1
src/components/createCollectionModal.ts
··· 81 try { 82 await createCollection( 83 this.plugin.client, 84 - this.plugin.settings.identifier, 85 name, 86 descInput.value.trim() 87 );
··· 81 try { 82 await createCollection( 83 this.plugin.client, 84 + this.plugin.settings.did!, 85 name, 86 descInput.value.trim() 87 );
+1 -1
src/components/createMarginCollectionModal.ts
··· 90 try { 91 await createMarginCollection( 92 this.plugin.client, 93 - this.plugin.settings.identifier, 94 name, 95 descInput.value.trim() || undefined, 96 iconInput.value.trim() || undefined
··· 90 try { 91 await createMarginCollection( 92 this.plugin.client, 93 + this.plugin.settings.did!, 94 name, 95 descInput.value.trim() || undefined, 96 iconInput.value.trim() || undefined
+1 -1
src/components/createTagModal.ts
··· 73 try { 74 await createTag( 75 this.plugin.client, 76 - this.plugin.settings.identifier, 77 value 78 ); 79
··· 73 try { 74 await createTag( 75 this.plugin.client, 76 + this.plugin.settings.did!, 77 value 78 ); 79
+3 -3
src/components/editBookmarkModal.ts
··· 40 const loading = contentEl.createEl("p", { text: "Loading..." }); 41 42 try { 43 - const bookmarksResp = await getBookmarks(this.plugin.client, this.plugin.settings.identifier); 44 loading.remove(); 45 46 const bookmarks = (bookmarksResp.ok ? bookmarksResp.data.records : []) as unknown as BookmarkRecord[]; ··· 172 173 await deleteRecord( 174 this.plugin.client, 175 - this.plugin.settings.identifier, 176 "community.lexicon.bookmarks.bookmark", 177 rkey 178 ); ··· 216 217 await putRecord( 218 this.plugin.client, 219 - this.plugin.settings.identifier, 220 "community.lexicon.bookmarks.bookmark", 221 rkey, 222 updatedRecord
··· 40 const loading = contentEl.createEl("p", { text: "Loading..." }); 41 42 try { 43 + const bookmarksResp = await getBookmarks(this.plugin.client, this.plugin.settings.did!); 44 loading.remove(); 45 46 const bookmarks = (bookmarksResp.ok ? bookmarksResp.data.records : []) as unknown as BookmarkRecord[]; ··· 172 173 await deleteRecord( 174 this.plugin.client, 175 + this.plugin.settings.did!, 176 "community.lexicon.bookmarks.bookmark", 177 rkey 178 ); ··· 216 217 await putRecord( 218 this.plugin.client, 219 + this.plugin.settings.did!, 220 "community.lexicon.bookmarks.bookmark", 221 rkey, 222 updatedRecord
+6 -6
src/components/editCardModal.ts
··· 53 54 try { 55 const [collectionsResp, linksResp] = await Promise.all([ 56 - getCollections(this.plugin.client, this.plugin.settings.identifier), 57 - getCollectionLinks(this.plugin.client, this.plugin.settings.identifier), 58 ]); 59 60 loading.remove(); ··· 162 163 await deleteRecord( 164 this.plugin.client, 165 - this.plugin.settings.identifier, 166 "network.cosmik.card", 167 rkey 168 ); ··· 202 if (rkey) { 203 await deleteRecord( 204 this.plugin.client, 205 - this.plugin.settings.identifier, 206 "network.cosmik.collectionLink", 207 rkey 208 ); ··· 216 217 const collectionResp = await getRecord( 218 this.plugin.client, 219 - this.plugin.settings.identifier, 220 "network.cosmik.collection", 221 collectionRkey 222 ); ··· 225 226 await createCollectionLink( 227 this.plugin.client, 228 - this.plugin.settings.identifier, 229 this.cardUri, 230 this.cardCid, 231 state.collection.uri,
··· 53 54 try { 55 const [collectionsResp, linksResp] = await Promise.all([ 56 + getCollections(this.plugin.client, this.plugin.settings.did!), 57 + getCollectionLinks(this.plugin.client, this.plugin.settings.did!), 58 ]); 59 60 loading.remove(); ··· 162 163 await deleteRecord( 164 this.plugin.client, 165 + this.plugin.settings.did!, 166 "network.cosmik.card", 167 rkey 168 ); ··· 202 if (rkey) { 203 await deleteRecord( 204 this.plugin.client, 205 + this.plugin.settings.did!, 206 "network.cosmik.collectionLink", 207 rkey 208 ); ··· 216 217 const collectionResp = await getRecord( 218 this.plugin.client, 219 + this.plugin.settings.did!, 220 "network.cosmik.collection", 221 collectionRkey 222 ); ··· 225 226 await createCollectionLink( 227 this.plugin.client, 228 + this.plugin.settings.did!, 229 this.cardUri, 230 this.cardCid, 231 state.collection.uri,
+7 -7
src/components/editMarginBookmarkModal.ts
··· 53 54 try { 55 const [collectionsResp, itemsResp, bookmarksResp] = await Promise.all([ 56 - getMarginCollections(this.plugin.client, this.plugin.settings.identifier), 57 - getMarginCollectionItems(this.plugin.client, this.plugin.settings.identifier), 58 - getMarginBookmarks(this.plugin.client, this.plugin.settings.identifier), 59 ]); 60 61 loading.remove(); ··· 227 228 await deleteRecord( 229 this.plugin.client, 230 - this.plugin.settings.identifier, 231 "at.margin.bookmark", 232 rkey 233 ); ··· 271 272 await putRecord( 273 this.plugin.client, 274 - this.plugin.settings.identifier, 275 "at.margin.bookmark", 276 rkey, 277 updatedRecord ··· 286 if (linkRkey) { 287 await deleteRecord( 288 this.plugin.client, 289 - this.plugin.settings.identifier, 290 "at.margin.collectionItem", 291 linkRkey 292 ); ··· 297 for (const state of collectionsToAdd) { 298 await createMarginCollectionItem( 299 this.plugin.client, 300 - this.plugin.settings.identifier, 301 this.record.uri, 302 state.collection.uri 303 );
··· 53 54 try { 55 const [collectionsResp, itemsResp, bookmarksResp] = await Promise.all([ 56 + getMarginCollections(this.plugin.client, this.plugin.settings.did!), 57 + getMarginCollectionItems(this.plugin.client, this.plugin.settings.did!), 58 + getMarginBookmarks(this.plugin.client, this.plugin.settings.did!), 59 ]); 60 61 loading.remove(); ··· 227 228 await deleteRecord( 229 this.plugin.client, 230 + this.plugin.settings.did!, 231 "at.margin.bookmark", 232 rkey 233 ); ··· 271 272 await putRecord( 273 this.plugin.client, 274 + this.plugin.settings.did!, 275 "at.margin.bookmark", 276 rkey, 277 updatedRecord ··· 286 if (linkRkey) { 287 await deleteRecord( 288 this.plugin.client, 289 + this.plugin.settings.did!, 290 "at.margin.collectionItem", 291 linkRkey 292 ); ··· 297 for (const state of collectionsToAdd) { 298 await createMarginCollectionItem( 299 this.plugin.client, 300 + this.plugin.settings.did!, 301 this.record.uri, 302 state.collection.uri 303 );
+4
src/components/loginMessage.ts
···
··· 1 + export function renderLoginMessage(container: HTMLElement) { 2 + const message = container.createEl("div", { cls: "atmosphere-auth-required" }); 3 + message.createEl("p", { text: "Please log in by opening settings" }); 4 + }
+1 -1
src/components/selectPublicationModal.ts
··· 34 const loading = contentEl.createEl("p", { text: "Loading publications..." }); 35 36 try { 37 - const response = await getPublications(this.plugin.client, this.plugin.settings.identifier); 38 loading.remove(); 39 40 let pubs = response.records
··· 34 const loading = contentEl.createEl("p", { text: "Loading publications..." }); 35 36 try { 37 + const response = await getPublications(this.plugin.client, this.plugin.settings.did!); 38 loading.remove(); 39 40 let pubs = response.records
+59 -47
src/lib/client.ts
··· 1 - import { Client, CredentialManager, FetchHandlerObject, simpleFetchHandler } from "@atcute/client"; 2 import { resolveActor } from "./identity"; 3 import { isActorIdentifier } from "@atcute/lexicons/syntax"; 4 import { ResolvedActor } from "@atcute/identity-resolver"; 5 6 - const DEFAULT_SERVICE = "https://bsky.social"; 7 8 - export interface Credentials { 9 - identifier: string; 10 - password: string; 11 - } 12 13 - export class ATClient extends Client { 14 - hh: Handler; 15 - slingshot: Client 16 17 - constructor(creds?: Credentials) { 18 - const handler = new Handler(creds); 19 - super({ handler }); 20 - this.hh = handler; 21 } 22 23 - get loggedIn(): boolean { 24 - return !!this.hh.cm?.session?.did; 25 } 26 - get session() { 27 - return this.hh.cm?.session; 28 } 29 30 async getActor(identifier: string): Promise<ResolvedActor> { 31 return this.hh.getActor(identifier); 32 } 33 } 34 35 export class Handler implements FetchHandlerObject { 36 - creds?: Credentials; 37 - cm?: CredentialManager; 38 - cache: Cache 39 40 - constructor(creds?: Credentials) { 41 - this.creds = creds; 42 this.cache = new Cache(5 * 60 * 1000); // 5 minutes TTL 43 } 44 45 - async initAuth(): Promise<void> { 46 - if (this.cm?.session?.did || !this.creds) { 47 - return; 48 - } 49 - 50 - const actor = await this.getActor(this.creds.identifier); 51 - this.cm = new CredentialManager({ service: actor.pds }); 52 - await this.cm.login(this.creds); 53 - } 54 - 55 async getActor(identifier: string): Promise<ResolvedActor> { 56 const key = `actor:${identifier}`; 57 const cached = this.cache.get<ResolvedActor>(key); ··· 63 const res = await resolveActor(identifier); 64 this.cache.set(key, res); 65 return res; 66 - } 67 - catch (e) { 68 - console.error("Error resolving actor:", e) 69 - throw new Error("Failed to resolve actor: " + JSON.stringify(identifier)); 70 } 71 } else { 72 - throw new Error("Invalid actor identifier: " + JSON.stringify(identifier)); 73 } 74 } 75 76 async getPDS(pathname: string): Promise<string | null> { 77 - const url = new URL(pathname, "https://placeholder") 78 const repo = url.searchParams.get("repo"); 79 if (!repo) { 80 - return null 81 } 82 - const own = (repo === this.cm?.session?.handle || repo === this.cm?.session?.did); 83 if (!own) { 84 const actor = await this.getActor(repo); 85 - return actor.pds 86 } 87 - return null 88 } 89 90 async handle(pathname: string, init: RequestInit): Promise<Response> { 91 - await this.initAuth(); 92 - 93 const cacheKey = `${init?.method || "GET"}:${pathname}`; 94 if (init?.method?.toLowerCase() === "get") { 95 const cached = this.cache.get<Response>(cacheKey); ··· 99 } 100 101 let resp: Response; 102 const pds = await this.getPDS(pathname); 103 if (pds) { 104 const sfh = simpleFetchHandler({ service: pds }); 105 resp = await sfh(pathname, init); 106 - } else if (this.cm) { 107 - resp = await this.cm.handle(pathname, init); 108 } else { 109 - const sfh = simpleFetchHandler({ service: DEFAULT_SERVICE }); 110 resp = await sfh(pathname, init); 111 } 112
··· 1 + import { Client, FetchHandlerObject, simpleFetchHandler } from "@atcute/client"; 2 import { resolveActor } from "./identity"; 3 import { isActorIdentifier } from "@atcute/lexicons/syntax"; 4 import { ResolvedActor } from "@atcute/identity-resolver"; 5 + import { OAuthHandler, } from "./oauth/oauth"; 6 + import { OAuthUserAgent } from "@atcute/oauth-browser-client"; 7 8 + export class ATClient extends Client { 9 + private hh: Handler; 10 + private oauth: OAuthHandler; 11 + actor?: ResolvedActor; 12 13 + constructor() { 14 + const hh = new Handler(); 15 + super({ handler: hh }); 16 + this.oauth = new OAuthHandler(); 17 + this.hh = hh; 18 + } 19 20 + get loggedIn(): boolean { 21 + return !!this.hh.agent && !!this.actor; 22 + } 23 24 + async login(identifier: string): Promise<void> { 25 + const session = await this.oauth.authorize(identifier); 26 + this.hh.agent = new OAuthUserAgent(session); 27 + const did = this.hh.agent?.session.info.sub; 28 + if (did) { 29 + this.actor = await this.hh.getActor(did); 30 + } 31 } 32 33 + async restoreSession(did: string): Promise<void> { 34 + const session = await this.oauth.restore(did); 35 + this.hh.agent = new OAuthUserAgent(session); 36 + this.actor = await this.hh.getActor(did); 37 } 38 + 39 + async logout(identifier: string): Promise<void> { 40 + await this.oauth.revoke(identifier); 41 + this.hh.agent = undefined; 42 + this.actor = undefined; 43 } 44 45 async getActor(identifier: string): Promise<ResolvedActor> { 46 return this.hh.getActor(identifier); 47 + } 48 + 49 + handleOAuthCallback(params: URLSearchParams): void { 50 + this.oauth.handleCallback(params); 51 } 52 } 53 54 + /** 55 + * Custom handler that wraps OAuthUserAgent and adds PDS routing logic 56 + */ 57 export class Handler implements FetchHandlerObject { 58 + cache: Cache; 59 + agent?: OAuthUserAgent; 60 61 + constructor() { 62 this.cache = new Cache(5 * 60 * 1000); // 5 minutes TTL 63 } 64 65 async getActor(identifier: string): Promise<ResolvedActor> { 66 const key = `actor:${identifier}`; 67 const cached = this.cache.get<ResolvedActor>(key); ··· 73 const res = await resolveActor(identifier); 74 this.cache.set(key, res); 75 return res; 76 + } catch (e) { 77 + throw new Error(`Failed to resolve actor ${identifier}:` + JSON.stringify(e)); 78 } 79 } else { 80 + throw new Error("Invalid actor identifier: " + identifier); 81 } 82 } 83 84 async getPDS(pathname: string): Promise<string | null> { 85 + const url = new URL(pathname, "https://placeholder"); 86 const repo = url.searchParams.get("repo"); 87 if (!repo) { 88 + return null; 89 } 90 + 91 + const own = (repo === this.agent?.session.info.sub); 92 if (!own) { 93 + // resolve to get user's PDS 94 const actor = await this.getActor(repo); 95 + return actor.pds; 96 } 97 + return null; 98 } 99 100 async handle(pathname: string, init: RequestInit): Promise<Response> { 101 const cacheKey = `${init?.method || "GET"}:${pathname}`; 102 if (init?.method?.toLowerCase() === "get") { 103 const cached = this.cache.get<Response>(cacheKey); ··· 107 } 108 109 let resp: Response; 110 + 111 const pds = await this.getPDS(pathname); 112 if (pds) { 113 + // use configureable public fetch for external PDS 114 const sfh = simpleFetchHandler({ service: pds }); 115 resp = await sfh(pathname, init); 116 + } else if (this.agent) { 117 + // oauth handler if we are logged in 118 + resp = await this.agent.handle(pathname, init); 119 } else { 120 + // default public fetch to bsky 121 + const sfh = simpleFetchHandler({ service: "https://bsky.social" }); 122 resp = await sfh(pathname, init); 123 } 124
+1 -1
src/lib/identity.ts
··· 87 88 const slingshotResolver = new SlingshotActorResolver(); 89 90 - const compositeResolver = new CompositeActorResolver(slingshotResolver, localActorResolver); 91 92 export async function resolveActor(identifier: ActorIdentifier) { 93 return compositeResolver.resolve(identifier);
··· 87 88 const slingshotResolver = new SlingshotActorResolver(); 89 90 + export const compositeResolver = new CompositeActorResolver(slingshotResolver, localActorResolver); 91 92 export async function resolveActor(identifier: ActorIdentifier) { 93 return compositeResolver.resolve(identifier);
+1 -1
src/lib/markdown/index.ts
··· 45 } 46 47 export function cleanPlaintext(text: string): string { 48 - return text.trim(); 49 } 50 51 export type { Root, RootContent };
··· 45 } 46 47 export function cleanPlaintext(text: string): string { 48 + return text ? text.trim() : ""; 49 } 50 51 export type { Root, RootContent };
+99
src/lib/oauth/oauth.ts
···
··· 1 + import { 2 + configureOAuth, 3 + createAuthorizationUrl, 4 + finalizeAuthorization, 5 + getSession, 6 + deleteStoredSession, 7 + OAuthUserAgent, 8 + Session, 9 + } from '@atcute/oauth-browser-client'; 10 + import { compositeResolver } from 'lib/identity'; 11 + import { Notice } from 'obsidian'; 12 + import { isDid, type ActorIdentifier } from "@atcute/lexicons/syntax"; 13 + import metadata from '../../../client-metadata.json' with { type: 'json' }; 14 + 15 + 16 + export class OAuthHandler { 17 + private callbackResolver: ((value: URLSearchParams) => void) | null = null; 18 + private callbackRejecter: ((reason?: Error) => void) | null = null; 19 + private callbackTimeout: ReturnType<typeof setTimeout> | null = null; 20 + 21 + constructor() { 22 + configureOAuth({ 23 + metadata: { 24 + client_id: metadata.client_id, 25 + redirect_uri: metadata.redirect_uris[0]!, 26 + }, 27 + identityResolver: compositeResolver, 28 + }) 29 + } 30 + 31 + handleCallback(params: URLSearchParams): void { 32 + if (this.callbackResolver) { 33 + if (this.callbackTimeout) { 34 + clearTimeout(this.callbackTimeout); 35 + this.callbackTimeout = null; 36 + } 37 + this.callbackResolver(params); 38 + this.callbackResolver = null; 39 + this.callbackRejecter = null; 40 + } 41 + } 42 + 43 + async authorize(identifier: string): Promise<Session> { 44 + const authUrl = await createAuthorizationUrl({ 45 + target: { type: 'account', identifier: identifier as ActorIdentifier }, 46 + scope: metadata.scope, 47 + }); 48 + await new Promise((resolve) => setTimeout(resolve, 200)); 49 + 50 + const waitForCallback = new Promise<URLSearchParams>((resolve, reject) => { 51 + this.callbackResolver = resolve; 52 + this.callbackRejecter = reject; 53 + 54 + // timeout after 5 minutes 55 + this.callbackTimeout = setTimeout(() => { 56 + if (this.callbackRejecter) { 57 + this.callbackRejecter(new Error('OAuth callback timed out after 5 minutes')); 58 + this.callbackResolver = null; 59 + this.callbackRejecter = null; 60 + } 61 + }, 5 * 60_000); 62 + }); 63 + 64 + window.open(authUrl, '_blank'); 65 + new Notice('Continue login in the browser'); 66 + 67 + const params = await waitForCallback; 68 + const { session } = await finalizeAuthorization(params); 69 + return session; 70 + } 71 + 72 + async restore(did: string): Promise<Session> { 73 + if (!isDid(did)) { 74 + throw new Error("Invalid DID: " + did); 75 + } 76 + const session = await getSession(did, { allowStale: false }); 77 + if (!session) { 78 + throw new Error("No session found for DID: " + did); 79 + } 80 + return session; 81 + } 82 + 83 + async revoke(did: string): Promise<void> { 84 + if (!isDid(did)) { 85 + throw new Error("Invalid DID: " + did); 86 + } 87 + const session = await getSession(did, { allowStale: true }); 88 + if (session) { 89 + try { 90 + const agent = new OAuthUserAgent(session); 91 + await agent.signOut(); 92 + } catch (error) { 93 + console.error('Error during sign out:', error); 94 + } 95 + } 96 + deleteStoredSession(did); 97 + } 98 + 99 + }
+41 -8
src/main.ts
··· 1 - import { Plugin, WorkspaceLeaf } from "obsidian"; 2 import { DEFAULT_SETTINGS, AtProtoSettings, SettingTab } from "./settings"; 3 import { AtmosphereView, VIEW_TYPE_ATMOSPHERE_BOOKMARKS } from "./views/bookmarks"; 4 import { publishFileAsDocument } from "./commands/publishDocument"; ··· 13 14 async onload() { 15 await this.loadSettings(); 16 17 - const creds = { 18 - identifier: this.settings.identifier, 19 - password: this.settings.appPassword, 20 - }; 21 - this.client = new ATClient(creds); 22 - this.clipper = new Clipper(this); 23 24 this.registerView(VIEW_TYPE_ATMOSPHERE_BOOKMARKS, (leaf) => { 25 return new AtmosphereView(leaf, this); ··· 70 this.addSettingTab(new SettingTab(this.app, this)); 71 } 72 73 - 74 75 async activateView(v: string) { 76 const { workspace } = this.app; 77 78 let leaf: WorkspaceLeaf | null = null;
··· 1 + import { Notice, Plugin, WorkspaceLeaf } from "obsidian"; 2 import { DEFAULT_SETTINGS, AtProtoSettings, SettingTab } from "./settings"; 3 import { AtmosphereView, VIEW_TYPE_ATMOSPHERE_BOOKMARKS } from "./views/bookmarks"; 4 import { publishFileAsDocument } from "./commands/publishDocument"; ··· 13 14 async onload() { 15 await this.loadSettings(); 16 + this.client = new ATClient(); 17 + this.clipper = new Clipper(this); 18 19 + this.registerObsidianProtocolHandler('atmosphere-oauth', (params) => { 20 + try { 21 + const urlParams = new URLSearchParams(); 22 + for (const [key, value] of Object.entries(params)) { 23 + if (value) { 24 + urlParams.set(key, String(value)); 25 + } 26 + } 27 + this.client.handleOAuthCallback(urlParams); 28 + new Notice('Authentication completed! Processing...'); 29 + } catch (error) { 30 + console.error('Error handling OAuth callback:', error); 31 + new Notice('Authentication error. Please try again.'); 32 + } 33 + }); 34 35 this.registerView(VIEW_TYPE_ATMOSPHERE_BOOKMARKS, (leaf) => { 36 return new AtmosphereView(leaf, this); ··· 81 this.addSettingTab(new SettingTab(this.app, this)); 82 } 83 84 + async checkAuth() { 85 + if (this.client.loggedIn) { 86 + return true; 87 + } 88 + if (this.settings.did) { 89 + try { 90 + await this.client.restoreSession(this.settings.did); 91 + return true 92 + } catch (e) { 93 + console.error("Failed to restore session:", e); 94 + this.settings.did = undefined; 95 + await this.saveSettings(); 96 + new Notice("Session expired. Please login by opening settings"); 97 + return false; 98 + } 99 + } 100 + new Notice("Please log in by opening settings"); 101 + return false; 102 + } 103 104 async activateView(v: string) { 105 + if (!await this.checkAuth()) { 106 + return; 107 + } 108 + 109 const { workspace } = this.app; 110 111 let leaf: WorkspaceLeaf | null = null;
+75 -29
src/settings.ts
··· 1 - import { App, PluginSettingTab, Setting } from "obsidian"; 2 import type AtmospherePlugin from "./main"; 3 4 export interface AtProtoSettings { 5 - identifier: string; 6 - appPassword: string; 7 clipDir: string; 8 publish: { 9 useFirstHeaderAsTitle: boolean; ··· 11 } 12 13 export const DEFAULT_SETTINGS: AtProtoSettings = { 14 - identifier: "", 15 - appPassword: "", 16 clipDir: "AtmosphereClips", 17 publish: { 18 useFirstHeaderAsTitle: false, ··· 31 const { containerEl } = this; 32 containerEl.empty(); 33 34 - new Setting(containerEl) 35 - .setName("Handle") 36 - .setDesc("Your bluesky handle or identifier (e.g., user.bsky.social)") 37 - // .setDesc("user.bsky.social") 38 - .addText((text) => 39 - text 40 - .setValue(this.plugin.settings.identifier) 41 - .onChange(async (value) => { 42 - this.plugin.settings.identifier = value; 43 - await this.plugin.saveSettings(); 44 - }) 45 - ); 46 47 - new Setting(containerEl) 48 - .setName("App password") 49 - .setDesc("Create one at https://bsky.app/settings/app-passwords") 50 - .addText((text) => { 51 - text.inputEl.type = "password"; 52 - text 53 - .setValue(this.plugin.settings.appPassword) 54 - .onChange(async (value) => { 55 - this.plugin.settings.appPassword = value; 56 - await this.plugin.saveSettings(); 57 - }); 58 - }); 59 60 new Setting(containerEl) 61 .setName("Clip directory")
··· 1 + import { App, Notice, PluginSettingTab, Setting } from "obsidian"; 2 import type AtmospherePlugin from "./main"; 3 + import { isActorIdentifier } from "@atcute/lexicons/syntax"; 4 + import { VIEW_TYPE_ATMOSPHERE_BOOKMARKS } from "./views/bookmarks"; 5 + import { VIEW_ATMOSPHERE_STANDARD_FEED } from "./views/standardfeed"; 6 7 export interface AtProtoSettings { 8 + did?: string; 9 clipDir: string; 10 publish: { 11 useFirstHeaderAsTitle: boolean; ··· 13 } 14 15 export const DEFAULT_SETTINGS: AtProtoSettings = { 16 clipDir: "AtmosphereClips", 17 publish: { 18 useFirstHeaderAsTitle: false, ··· 31 const { containerEl } = this; 32 containerEl.empty(); 33 34 + if (this.plugin.client.loggedIn) { 35 + const displayName = this.plugin.client.actor?.handle || this.plugin.settings.did; 36 37 + new Setting(containerEl) 38 + .setName("Logged in as @" + displayName) 39 + .setDesc(this.plugin.client.actor?.did as string || "") 40 + .addButton((button) => 41 + button 42 + .setButtonText("Log out") 43 + .setCta() 44 + .onClick(async () => { 45 + await this.plugin.client.logout(this.plugin.settings.did!) 46 + this.plugin.settings.did = undefined; 47 + await this.plugin.saveSettings(); 48 + 49 + // close all plugin views 50 + this.app.workspace.detachLeavesOfType(VIEW_TYPE_ATMOSPHERE_BOOKMARKS); 51 + this.app.workspace.detachLeavesOfType(VIEW_ATMOSPHERE_STANDARD_FEED); 52 + 53 + this.display(); 54 + new Notice("Logged out successfully"); 55 + }) 56 + ); 57 + } else { 58 + let handleInput: HTMLInputElement; 59 + 60 + new Setting(containerEl) 61 + .setName("Log in") 62 + .setDesc("Enter your handle (e.g., user.bsky.social)") 63 + .addText((text) => { 64 + handleInput = text.inputEl; 65 + text.setValue(""); 66 + }) 67 + .addButton((button) => 68 + button 69 + .setButtonText("Log in") 70 + .setCta() 71 + .onClick(async () => { 72 + const handle = handleInput.value.trim(); 73 + 74 + if (!handle) { 75 + new Notice("Please enter a handle."); 76 + return; 77 + } 78 + 79 + if (!isActorIdentifier(handle)) { 80 + new Notice("Invalid handle format. Please enter a valid handle (e.g., user.bsky.social)."); 81 + return; 82 + } 83 + 84 + try { 85 + button.setDisabled(true); 86 + button.setButtonText("Logging in..."); 87 + 88 + new Notice("Opening browser for authorization..."); 89 + await this.plugin.client.login(handle) 90 + this.plugin.settings.did = this.plugin.client.actor?.did; 91 + await this.plugin.saveSettings(); 92 + 93 + this.display() 94 + new Notice(`Successfully logged in as ${this.plugin.client.actor!.handle}`); 95 + } catch (error) { 96 + console.error("Login failed:", error); 97 + const errorMessage = error instanceof Error ? error.message : String(error); 98 + new Notice(`Authentication failed: ${errorMessage}`); 99 + button.setDisabled(false); 100 + button.setButtonText("Log in"); 101 + } 102 + }) 103 + ); 104 + } 105 106 new Setting(containerEl) 107 .setName("Clip directory")
+9 -4
src/views/bookmarks.ts
··· 5 import { SembleSource } from "../sources/semble"; 6 import { BookmarkSource } from "../sources/bookmark"; 7 import { MarginSource } from "../sources/margin"; 8 9 export const VIEW_TYPE_ATMOSPHERE_BOOKMARKS = "atmosphere-bookmarks"; 10 ··· 21 } 22 23 initSources() { 24 - if (this.plugin.settings.identifier) { 25 - const repo = this.plugin.settings.identifier; 26 this.sources.set("semble", { 27 source: new SembleSource(this.plugin.client, repo), 28 filters: new Map() ··· 57 } 58 59 async fetchItems(): Promise<ATBookmarkItem[]> { 60 - if (!this.plugin.client) return []; 61 - 62 const sourceData = this.sources.get(this.activeSource); 63 if (!sourceData) return []; 64 ··· 70 const container = this.contentEl; 71 container.empty(); 72 container.addClass("atmosphere-view"); 73 74 this.renderHeader(container); 75
··· 5 import { SembleSource } from "../sources/semble"; 6 import { BookmarkSource } from "../sources/bookmark"; 7 import { MarginSource } from "../sources/margin"; 8 + import { renderLoginMessage } from "components/loginMessage"; 9 10 export const VIEW_TYPE_ATMOSPHERE_BOOKMARKS = "atmosphere-bookmarks"; 11 ··· 22 } 23 24 initSources() { 25 + if (this.plugin.settings.did) { 26 + const repo = this.plugin.settings.did; 27 this.sources.set("semble", { 28 source: new SembleSource(this.plugin.client, repo), 29 filters: new Map() ··· 58 } 59 60 async fetchItems(): Promise<ATBookmarkItem[]> { 61 const sourceData = this.sources.get(this.activeSource); 62 if (!sourceData) return []; 63 ··· 69 const container = this.contentEl; 70 container.empty(); 71 container.addClass("atmosphere-view"); 72 + 73 + 74 + if (!await this.plugin.checkAuth()) { 75 + renderLoginMessage(container) 76 + return 77 + } 78 79 this.renderHeader(container); 80
+12 -1
src/views/standardfeed.ts
··· 5 import { Main as Publication } from "@atcute/standard-site/types/publication"; 6 import { ATRecord } from "lib"; 7 import { parseResourceUri } from "@atcute/lexicons"; 8 9 export const VIEW_ATMOSPHERE_STANDARD_FEED = "atmosphere-standard-site-feed"; 10 ··· 36 const container = this.contentEl; 37 container.empty(); 38 container.addClass("standard-site-view"); 39 this.renderHeader(container); 40 41 const loading = container.createEl("p", { text: "Loading subscriptions..." }); 42 const list = container.createEl("div", { cls: "standard-site-list" }); 43 44 try { 45 - const subsResp = await getSubscriptions(this.plugin.client, this.plugin.settings.identifier); 46 if (subsResp.records.length === 0) { 47 loading.remove(); 48 container.createEl("p", { text: "No subscriptions found" }); ··· 66 container.createEl("p", { text: `Failed to load feed: ${message}`, cls: "standard-site-error" }); 67 loading.remove(); 68 } 69 } 70 71 private renderPublicationCard(container: HTMLElement, pub: ATRecord<Publication>) {
··· 5 import { Main as Publication } from "@atcute/standard-site/types/publication"; 6 import { ATRecord } from "lib"; 7 import { parseResourceUri } from "@atcute/lexicons"; 8 + import { renderLoginMessage } from "components/loginMessage"; 9 10 export const VIEW_ATMOSPHERE_STANDARD_FEED = "atmosphere-standard-site-feed"; 11 ··· 37 const container = this.contentEl; 38 container.empty(); 39 container.addClass("standard-site-view"); 40 + 41 + if (!await this.plugin.checkAuth()) { 42 + renderLoginMessage(container) 43 + return 44 + } 45 + 46 this.renderHeader(container); 47 + void this.fetchAndRender(container); 48 + } 49 50 + async fetchAndRender(container: HTMLElement) { 51 const loading = container.createEl("p", { text: "Loading subscriptions..." }); 52 const list = container.createEl("div", { cls: "standard-site-list" }); 53 54 try { 55 + const subsResp = await getSubscriptions(this.plugin.client, this.plugin.client.actor!.did); 56 if (subsResp.records.length === 0) { 57 loading.remove(); 58 container.createEl("p", { text: "No subscriptions found" }); ··· 76 container.createEl("p", { text: `Failed to load feed: ${message}`, cls: "standard-site-error" }); 77 loading.remove(); 78 } 79 + 80 } 81 82 private renderPublicationCard(container: HTMLElement, pub: ATRecord<Publication>) {