From baea0785c080608f5c1ec4eef8b228b1097e4c92 Mon Sep 17 00:00:00 2001 From: Pradeep Elankumaran Date: Tue, 10 Feb 2026 10:05:36 -0800 Subject: [PATCH] Initial release: camofox-browser v1.0.12 Headless browser server for AI agents with C++ anti-detection. Powered by Camoufox (Firefox fork with fingerprint spoofing). - REST API with element refs, accessibility snapshots, session isolation - Search macros for Google, YouTube, Amazon, Reddit, and more - OpenClaw plugin support - Docker ready with pre-baked Camoufox binary --- .gitignore | 44 + AGENTS.md | 144 + Dockerfile | 60 + LICENSE | 21 + README.md | 142 + camofox-og.png | Bin 0 -> 171053 bytes camofox.png | Bin 0 -> 164550 bytes jest.config.js | 41 + lib/macros.js | 30 + openclaw.plugin.json | 39 + package-lock.json | 6146 +++++++++++++++++++++++++++++ package.json | 67 + plugin.ts | 647 +++ run.sh | 37 + server.js | 1288 ++++++ tests/e2e/concurrency.test.js | 103 + tests/e2e/formSubmission.test.js | 129 + tests/e2e/macroNavigation.test.js | 92 + tests/e2e/navigation.test.js | 128 + tests/e2e/scroll.test.js | 81 + tests/e2e/snapshotLinks.test.js | 141 + tests/e2e/tabLifecycle.test.js | 149 + tests/e2e/typingEnter.test.js | 147 + tests/helpers/client.js | 223 ++ tests/helpers/startServer.js | 91 + tests/helpers/testSite.js | 238 ++ tests/live/googleSearch.test.js | 93 + tests/live/macroExpansion.test.js | 132 + tests/unit/macros.test.js | 123 + 29 files changed, 10576 insertions(+) create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 camofox-og.png create mode 100644 camofox.png create mode 100644 jest.config.js create mode 100644 lib/macros.js create mode 100644 openclaw.plugin.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 plugin.ts create mode 100755 run.sh create mode 100644 server.js create mode 100644 tests/e2e/concurrency.test.js create mode 100644 tests/e2e/formSubmission.test.js create mode 100644 tests/e2e/macroNavigation.test.js create mode 100644 tests/e2e/navigation.test.js create mode 100644 tests/e2e/scroll.test.js create mode 100644 tests/e2e/snapshotLinks.test.js create mode 100644 tests/e2e/tabLifecycle.test.js create mode 100644 tests/e2e/typingEnter.test.js create mode 100644 tests/helpers/client.js create mode 100644 tests/helpers/startServer.js create mode 100644 tests/helpers/testSite.js create mode 100644 tests/live/googleSearch.test.js create mode 100644 tests/live/macroExpansion.test.js create mode 100644 tests/unit/macros.test.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f094f90 --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +node_modules/ +.env +.env.local +.env.*.local + +# Logs +logs/ +*.log +npm-debug.log* + +# Runtime +*.pid +*.seed +*.pid.lock + +# Coverage +coverage/ +.nyc_output/ + +# Build +dist/ +build/ + +# IDE +.idea/ +.vscode/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +.github/ +fly.toml +railway.toml + +# Camoufox cache +.camoufox/ + +# Test artifacts +test-results/ +playwright-report/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..88d6ccd --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,144 @@ +# camofox-browser Agent Guide + +Headless browser automation server for AI agents. Run locally or deploy to any cloud provider. + +## Quick Start for Agents + +```bash +# Install and start +npm install && npm start +# Server runs on http://localhost:9377 +``` + +## Core Workflow + +1. **Create a tab** → Get `tabId` +2. **Navigate** → Go to URL or use search macro +3. **Get snapshot** → Receive page content with element refs (`e1`, `e2`, etc.) +4. **Interact** → Click/type using refs +5. **Repeat** steps 3-4 as needed + +## API Reference + +### Create Tab +```bash +POST /tabs +{"userId": "agent1", "sessionKey": "task1", "url": "https://example.com"} +``` +Returns: `{"tabId": "abc123", "url": "...", "title": "..."}` + +### Navigate +```bash +POST /tabs/:tabId/navigate +{"userId": "agent1", "url": "https://google.com"} +# Or use macro: +{"userId": "agent1", "macro": "@google_search", "query": "weather today"} +``` + +### Get Snapshot +```bash +GET /tabs/:tabId/snapshot?userId=agent1 +``` +Returns accessibility tree with refs: +``` +[heading] Example Domain +[paragraph] This domain is for use in examples. +[link e1] More information... +``` + +### Click Element +```bash +POST /tabs/:tabId/click +{"userId": "agent1", "ref": "e1"} +# Or CSS selector: +{"userId": "agent1", "selector": "button.submit"} +``` + +### Type Text +```bash +POST /tabs/:tabId/type +{"userId": "agent1", "ref": "e2", "text": "hello world"} +# Add enter: {"userId": "agent1", "ref": "e2", "text": "search query", "pressEnter": true} +``` + +### Scroll +```bash +POST /tabs/:tabId/scroll +{"userId": "agent1", "direction": "down", "amount": 500} +``` + +### Navigation +```bash +POST /tabs/:tabId/back {"userId": "agent1"} +POST /tabs/:tabId/forward {"userId": "agent1"} +POST /tabs/:tabId/refresh {"userId": "agent1"} +``` + +### Get Links +```bash +GET /tabs/:tabId/links?userId=agent1&limit=50 +``` + +### Close Tab +```bash +DELETE /tabs/:tabId?userId=agent1 +``` + +## Search Macros + +Use these instead of constructing URLs: + +| Macro | Site | +|-------|------| +| `@google_search` | Google | +| `@youtube_search` | YouTube | +| `@amazon_search` | Amazon | +| `@reddit_search` | Reddit | +| `@wikipedia_search` | Wikipedia | +| `@twitter_search` | Twitter/X | +| `@yelp_search` | Yelp | +| `@linkedin_search` | LinkedIn | + +## Element Refs + +Refs like `e1`, `e2` are stable identifiers for page elements: + +1. Call `/snapshot` to get current refs +2. Use ref in `/click` or `/type` +3. Refs reset on navigation - get new snapshot after + +## Session Management + +- `userId` isolates cookies/storage between users +- `sessionKey` groups tabs by conversation/task (legacy: `listItemId` also accepted) +- Sessions timeout after 30 minutes of inactivity +- Delete all user data: `DELETE /sessions/:userId` + +## Running Engines + +### Camoufox (Default) +```bash +npm start +# Or: ./run.sh +``` +Firefox-based with anti-detection. Bypasses Google captcha. + +## Testing + +```bash +npm test # E2E tests +npm run test:live # Live Google tests +npm run test:debug # With server output +``` + +## Docker + +```bash +docker build -t camofox-browser . +docker run -p 9377:9377 camofox-browser +``` + +## Key Files + +- `server.js` - Camoufox engine +- `Dockerfile` - Production container diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..442ee94 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,60 @@ +FROM node:20-slim + +# Pinned Camoufox version for reproducible builds +# Update these when upgrading Camoufox +ARG CAMOUFOX_VERSION=135.0.1 +ARG CAMOUFOX_RELEASE=beta.24 +ARG CAMOUFOX_URL=https://github.com/daijro/camoufox/releases/download/v${CAMOUFOX_VERSION}-${CAMOUFOX_RELEASE}/camoufox-${CAMOUFOX_VERSION}-${CAMOUFOX_RELEASE}-lin.x86_64.zip + +# Install dependencies for Camoufox (Firefox-based) +RUN apt-get update && apt-get install -y \ + # Firefox dependencies + libgtk-3-0 \ + libdbus-glib-1-2 \ + libxt6 \ + libasound2 \ + libx11-xcb1 \ + libxcomposite1 \ + libxcursor1 \ + libxdamage1 \ + libxfixes3 \ + libxi6 \ + libxrandr2 \ + libxrender1 \ + libxss1 \ + libxtst6 \ + # Fonts + fonts-liberation \ + fonts-noto-color-emoji \ + fontconfig \ + # Utils + ca-certificates \ + curl \ + unzip \ + && rm -rf /var/lib/apt/lists/* + +# Pre-bake Camoufox browser binary into image +# This avoids downloading at runtime and pins the version +# Note: unzip returns exit code 1 for warnings (Unicode filenames), so we use || true and verify +RUN mkdir -p /root/.cache/camoufox \ + && curl -L -o /tmp/camoufox.zip "${CAMOUFOX_URL}" \ + && (unzip -q /tmp/camoufox.zip -d /root/.cache/camoufox || true) \ + && rm /tmp/camoufox.zip \ + && chmod -R 755 /root/.cache/camoufox \ + && echo "{\"version\":\"${CAMOUFOX_VERSION}\",\"release\":\"${CAMOUFOX_RELEASE}\"}" > /root/.cache/camoufox/version.json \ + && test -f /root/.cache/camoufox/camoufox-bin && echo "Camoufox installed successfully" + +WORKDIR /app + +COPY package.json ./ +RUN npm install --production + +COPY server.js ./ +COPY lib/ ./lib/ + +ENV NODE_ENV=production +ENV PORT=3000 + +EXPOSE 3000 + +CMD ["node", "server.js"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..219f243 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Jo, Inc + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..fdb45e3 --- /dev/null +++ b/README.md @@ -0,0 +1,142 @@ +
+ camofox-browser +

camofox-browser

+

Headless browser server for AI agents with C++ anti-detection

+

+ Build + License + Camoufox + Docker +

+

+ Powered by Camoufox — a Firefox fork with fingerprint spoofing at the C++ level.
+ The same engine behind askjo.ai's web scraping. +

+
+ +--- + +## Why + +AI agents need to browse the real web. Playwright gets blocked. Headless Chrome gets fingerprinted. Stealth plugins become the fingerprint. + +Camoufox patches Firefox at the **C++ implementation level** — `navigator.hardwareConcurrency`, WebGL renderers, AudioContext, screen geometry, WebRTC — all spoofed before JavaScript ever sees them. No shims, no wrappers, no tells. + +This project wraps that engine in a REST API built for agents: accessibility snapshots instead of bloated HTML, stable element refs for clicking, and search macros for common sites. + +## Features + +- **C++ Anti-Detection** — bypasses Google, Cloudflare, and most bot detection +- **Element Refs** — stable `e1`, `e2`, `e3` identifiers for reliable interaction +- **Token-Efficient** — accessibility snapshots are 90% smaller than raw HTML +- **Session Isolation** — separate cookies/storage per user +- **Search Macros** — `@google_search`, `@youtube_search`, `@amazon_search`, and 10 more +- **Docker Ready** — production Dockerfile with pre-baked Camoufox binary + +## Quick Start + +### OpenClaw Plugin + +```bash +openclaw plugins install @askjo/camofox-browser +``` + +**Tools:** `camofox_create_tab` · `camofox_snapshot` · `camofox_click` · `camofox_type` · `camofox_navigate` · `camofox_scroll` · `camofox_screenshot` · `camofox_close_tab` · `camofox_list_tabs` + +### Standalone + +```bash +git clone https://github.com/jo-inc/camofox-browser +cd camofox-browser +npm install +npm start # downloads Camoufox on first run (~300MB) +``` + +### Docker + +```bash +docker build -t camofox-browser . +docker run -p 3000:3000 camofox-browser +``` + +## Usage + +```bash +# Create a tab +curl -X POST http://localhost:3000/tabs \ + -d '{"userId": "agent1", "sessionKey": "task1", "url": "https://example.com"}' + +# Get page snapshot with element refs +curl "http://localhost:3000/tabs/TAB_ID/snapshot?userId=agent1" +# → { "snapshot": "[button e1] Submit [link e2] Learn more", ... } + +# Click by ref +curl -X POST http://localhost:3000/tabs/TAB_ID/click \ + -d '{"userId": "agent1", "ref": "e1"}' + +# Search with macros +curl -X POST http://localhost:3000/tabs/TAB_ID/navigate \ + -d '{"userId": "agent1", "macro": "@google_search", "query": "best coffee beans"}' +``` + +## API + +| Method | Endpoint | Description | +|--------|----------|-------------| +| `POST` | `/tabs` | Create tab | +| `GET` | `/tabs/:id/snapshot` | Accessibility snapshot with refs | +| `POST` | `/tabs/:id/click` | Click element by ref | +| `POST` | `/tabs/:id/type` | Type into element | +| `POST` | `/tabs/:id/navigate` | Navigate to URL or macro | +| `POST` | `/tabs/:id/scroll` | Scroll page | +| `GET` | `/tabs/:id/screenshot` | Screenshot | +| `GET` | `/tabs/:id/links` | All links on page | +| `POST` | `/tabs/:id/back` | Go back | +| `POST` | `/tabs/:id/forward` | Go forward | +| `POST` | `/tabs/:id/refresh` | Refresh | +| `DELETE` | `/tabs/:id` | Close tab | +| `GET` | `/tabs?userId=X` | List tabs | +| `DELETE` | `/sessions/:userId` | Close all user tabs | +| `GET` | `/health` | Health check | + +## Search Macros + +`@google_search` · `@youtube_search` · `@amazon_search` · `@reddit_search` · `@wikipedia_search` · `@twitter_search` · `@yelp_search` · `@spotify_search` · `@netflix_search` · `@linkedin_search` · `@instagram_search` · `@tiktok_search` · `@twitch_search` + +## Architecture + +``` +Browser Instance +└── User Session (BrowserContext) — isolated cookies/storage + ├── Tab Group (sessionKey: "conv1") + │ ├── Tab (google.com) + │ └── Tab (github.com) + └── Tab Group (sessionKey: "conv2") + └── Tab (amazon.com) +``` + +Sessions auto-expire after 30 minutes of inactivity. + +## Testing + +```bash +npm test # e2e tests +npm run test:live # live Google tests +npm run test:debug # with server output +``` + +## npm + +```bash +npm install @askjo/camofox-browser +``` + +## Credits + +- [Camoufox](https://camoufox.com) — Firefox-based browser with C++ anti-detection +- [OpenClaw](https://openclaw.ai) — Open-source AI agent framework +- [Amp](https://ampcode.com) — AI coding agent + +## License + +MIT diff --git a/camofox-og.png b/camofox-og.png new file mode 100644 index 0000000000000000000000000000000000000000..c76743790041bcc28cf5200a3d30049822b5da67 GIT binary patch literal 171053 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�HijNkMidB8$%=r)a1(&pF%#bQs^s%T^q?cXM{M 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 z zyM_Gner%E0d-eT=!Uwj&;wl3dJ>C&4LqkJvPEYyMdAzZmDIj?5PkS; z(BeiwL_|ank_S+L{ju|dr2!OwBzHIHwmo?IPqt;)9uM`7i&V$IRXG7vY!T8Cd znZaJ=cR$=Xzp|C+{+I|7eiZwQ6~S+YHJE`-k)nFCHbHn|7=+ikO^Lgx{oMrX*(DQ~ z0h2P`6^S&7#|(o@uv+2VJg$Jl7s!)1Nt&e8Nl)ss?;Dc9O4HuO^=gM2$8Qb7o{@qD zeQSra=~O`LN(E#)C$r7_#`EAl`P|k*8N2Ai$!O`slV8|q?s-Cep~G3dG4wc|Q#K1y z3lkUu7&3W!YkC+*4p6(>DkV9W9(2_|Sj2&cWFGOc6f<)d(Ys@Iv{^du5q)fe^-qPF8-3s68PEWcQl;Db7|wyz*NIo2-Xq4mwpP<9EpyEntfGDweB% z-U6zTw5bAhN=X*t5Y5|QpJO7q)qEvPyBg#V?%J=lU)OsO*zrf}S>p_pErf zoc?!7JgV2~l4CRII19;dwFJMd6}8yqX2Gu|Oaym9%k^b}sO9?9dDq4p&l++nT0ei7 z74)+~McbNEE=WdX*eq1%Z&Cg@kG|->F^rf@I7Oo7!zIq89PdH#_b_2`+AIh&OkUqU zdJNHRGgV?*LUk|S+RdPeXC9qrjpIepGDmx47CQNwzPeo+MRL1crLQ3Mw|4cH3ZODJ zbEU?}-k}_j)xe_cx!R);$Ivq3>1KejI#0=E*CB>xP$tyJGVv2~aM~GtKb~Jr4DwO7 zsxi|~L$Mck(=Np?d>shB!VbdkFr=?zD&~HEM2zF(LH*rjh>$~ohK8gAMwbxLsBaLT zHrDA`SRpKFAh;8`$1GW_mVA5dmYi3f9bmym`?d$$>{7di0!&)hNg_S*Q2q_6--F^u z_~XWliIkp>MZDe>8a60hX|xv7!T=CAn$C{dei9z|bloQt(wd#9)E=6nfNcXz)6uP@ z6V9aVm93{3VBBI-4m)^~V7iuY!S5wCa-RZub!0qX2QIXZF>%+1n`g28aE-O6y+1QUDQ{AI?q-nt+kx+(;l+d(%)w;~i$#yX+|SNjGG|FwC3Z%o!SZy= zuJB1>y*90VR+ZxJWZj7*qiM_7 z53wg1?GQY&VG)u5s@gVNTLWuuFnH2MH;)m=j*uL){OT_W7S*zXc(h^Y5p+WjE~1Jp z$520_(n6@VA71w#}i1Rvt=aZI&-;UlYR3R ze%eTvKVq(zU&UrB@?EP8{Nrb}Twgt+yob$~(8C&W5)IWh&fL~$|7J>HHtlR84|11` zP$1!zqyz;m8(U+-1;~9M>j0#Y24Jha^s$;eUs*a-)_h+*rMYLM0Ha^2h5X-V0gVK! zF8FtN6MvTJ%a&#KOHMa(t0(fS^NV(V`QIImq}-$EHhL)4ytcHCWtlDVLfwOe&lL1R zf^8QWj+gm9CdU=!$4I{#d*6QPAAEemudIe*0r35LKyh0W_x40w;kkU77*0MR+3uZt zycgmsF{&`z$q{CwMfh~=&NT_fbA2rMiSAk%HfpAMXHrcQ97$sx?Mr5~FR>UW#XhLX z{}XR=v%qoHZ>*A?7BdpcaaAk_yp*?ib4#w;s&U|iN`mE`ov}(o#wc|9%;t#U^$YMN z%}RWHVE~qo{@m0xJ^&MrdtKk1t(7jJ`1YEn5bVdBrKlPy$&6YkwyST@?v8i9AuLup zCM+*^k#evRb!;0~P?@^t$z`3R&=0@E)w}cJ*qej2_2po<3P+@CSR=S|mNT1#L=p&) z{=x&28z9osF+~su2uOE#cXtR#O9+foknZjn-95TNItS7Mqnl^`{?EI;+;yGr zeeQEUb(=9E1Q@OYzA{?~l9cx2y${deCk_#j(hjEWi&UlJXd(|QY7XicT zt*jKb?uu$>l>?JKQ|iFmqY?3>w@We`+1bmF0}YKl8AgtuWJO7JIN-kq2s_;JOSFq> z55iOFN$YKQ$0EAjNgR#|;Sn8Na_hlYN`&Wc1p@m0Hb|XrZg!we$mFdM3>?jWogh}J zlP;LRrGkKvJw_tQ!2!OQ8)I@C(MX-^baEBc@nx3~}fPJ(?nDC%T^9bh`q1mF8|OL*GczRx=+8 z3y?HOVos$onso?-xLaUWs6VO9eYp7B-f4m{iR_q zfI-pUHE`%Rt&F8FGEO%1MZbqS@Hir`?zvoKQjBW>UY^UMA=GP7J-#=p6;D`A$x0VX zIK*`<7|XRyn_bpdP_t4n%(%W?*$yjiStO}67Kh2w63oZjgOpS44`p9)I8ai+M?J2x z43yQ0#Nz12w4`aJ#3WOj;IX+9?sO+KGSre`-!HO!HTbgKpFeOU4 z=7=$UOlG1?%+3=tTTI)HEj49W{ytEEXbEJV%~x% zOkEVwq6yZ7v9=JfI2;~RW3{4Sa>4jFS)x-Jfun39iJD=*NH~W?u!i|R;wmw^EM{T% z=G@Wy<$GF?tj03i_}56gvtQP`pX?%M$4@uED@{yIpS?~^P2-b7&W&$yG1x`0Xm`-O zlTKH2r~jImegRJJ0p>Ej$fpe-fxAze$OjGXNPGZ(Q$dz4;Nbp`p`UaN#8D%1PzQNq zP5D&Z`mOdEhUznz6Y{AFPddF?{R56#eC^oXCiiBY>UtjQ^x5sovxUe%>t-_IdA+36 zIm1ww+DS_{WqCs)&c${;M#x1hpoY^BIVbXUKmk8|2QSHK)Ae3O7rfKWx1b1w8g^(9<*95+duiD1`KKN2t@LO!$cw6Uc_BFR)oPpS}!W?0h8Mp7`?WqtCIaH z1Z6%hR?-gGAAi0PSKuhvKZYJ)7%Ql4q(!LGa@dg1mD@YpI#SmZblsj})uA-RC?Xc4 zmcZ$96UF;m8PyW*{JQudMUo8aB$BFzse>NOX|Az3_8fLZ>GZT?HmPEVOhAQi*a2CmhCUIz*43RyVl?_^ zLJ!DU!N+am2|_4>#jBb0!<=r`>{H)rp<%C`Bk8r_qtI>|MVBt4^xy0?KeB+}L6ePd z6KY}C4_mcAz7qEMsYY`C1DJcqhFzg{sQ{p%Uo;%Lx6wwbuI zDM3UjN*AK^jc%1}yz~%XMu8QR4f)1xA$wzfD4fR)n_*H4n4d0f*EXba1oj=J70Ws_ z8UqR72rB52VE@h)aa$Ja|0PdaTQ^SlnSV}1iyhKxzn$_$k3pD-9I~!%>Ng(DBn_&b zTCu=5AnD@Po|yWwYP+w-YMQ(6>%PLUqwVfhjP?QDJ5ZZrgI76?gh_xy#rXElxW+bSjLY<$%etvcH6z9?swP3qLRXEpX* zyku>XOJZ~JQh+>>;#Qh9>$iBJ<^7|BFEHg(mrbI0r+f~7L{zlUT>hbIhF7NEzao&{ zp)g1&P_WzRImH*!kol=#+K>9BLbfik17uLmBK-#Gx~o_gwznA zSW~N5bhd92q)7m#xPmFvfLr2ChiT!(io;CFHas#xQF;S3(cOLlo~T-%31 zizP*AIY^)I*M_-pPdic>2dV%o&`9aL)- zc7wTn>M}T3KxdV^B-i>r;?10pi}R6DL^8&3w_%&#u@!r>z(Bh7M;%w0NzL# zDPXbQel|N5DN<>)v2zpYO&6??(ll}g%5xb&RjvWrV7j!FKxWV$GE6NG@ zO(;#MoT$>Wpl|iwZu-`Zx_r0efEA2B7blKn^l|nc^xPPM5gC#e5|Y0<8*tWc?;oq= zt)|}udGcI#rq_3sYX@!eFpuFWAEtkFD;UhAn*FOTM_N11C3ileZ$F42!9$Dc&X*l4 z-MWyynwIH8$HSwtS2zBeM&S^B=(U=EeWM1R`S3l9KMJ zDWdw+=hK7en}#>X?~sG^Z)$&BoqlN#9uCEvk78$lk6fRv+&H!Nnv#l4C_ffkGPTsB zcw5x2zH$}Qc2jn$_J1)~to-(zM&TX5K+jR?@p^kHe%F`%tv=7?L-URN&HD1ky5OM!(gWPGFLq*A831skh7vBvvV zy8L#|`)m-nAcrgtFm*y@@1`lgp&TK~f#VsTqe@W1hwzLaiFl{tQ$J!nZ{7tLs1DG@M_6-a`$py1Jqcs?X?G4ZQK1d4Amy(ZyTzzBB&J8n@@cQ zpD-4mmR^-4K2hlKUY7)(2}&OS$kj5a8D_-BG6B)D+0?T*ZrgpnZ5HsPlQ=!xAVHbI zPATY`{OjxHB{0(lYP|wCc?Yy1vv1Fa9#HhIc{!TH0+wAdwlJr*O0c@4c(nrNC+R_0 zJcD&WeT7M3crWT$KANlRff*{BWHKOxjAVs_Ty~+n6lbp$(y3cj6|$+t>CVz9#yJez z1n;c7KIiSar6S@X&(o!q0(l-tsjTe%hOM~;_CvRK4ZG8=Q#d=5dPh;Koh*72*@ zpyAtAyGrct;I^sG9UA12%pcW1vusKNt+BEIq)Zv1yNXD=M=YER>+)MZXzmH7dJpJ% z!)EyB6ClV0Q_py}@sVQnp4+igK{-F(QEwaabls@$*dYZUIn-z^tRgHNSeHt*??=X< zp1Sazj<5x5Bo-NUrCU?`tH45{aB~JXdXeN#J}79`lww6m3a)(1oE_yXE6m)sw(BnHbxM_gj6ykPDncf zqUt`BRaWMfl$?9K`VTMoe;6@Bz^#~-Zw18j@gpaaGVftyeCl}$+xNfCobcUL?-ZBB z7-}z40flwQqN#0IRAJghSZkwCQsE7Uha#lDqS2u^TP>3O-P68yDEr*(eZaHthk0;y z+|!`eGK3_~hLfO{tgdq*p^@x^~4OW6g49ebW@`8P=OoysL4VLVas`({!7J z5#d1L3gSg^nw(7Vs_m@~*tqu*jM#caq(s|_D7a*Lrs^_tl3RB)@WTU_=(W_8+DK{i$?90mu%xntUdhlFM;h+% z{e&}0DJ#z737g-Q%?mLmh5W{4u+(_rfX7+)tUse^>u{1;OF5)TC3esZ_^44s4TIE<>S4QGhbm z3iq6aS0TU%4)T__d#>cs+qq7_Fr@Jo4@YI0Ef;ZUQPn%Bx+lEiJZie3ZNpPkU6G8R^_t<6o5cW%Y*U($!8wG_8 z*-n-yoFi&j#@iFDRIG8Gz&oo}&1J8h=Oqr9!%L~c>s5`pzoI_UURtR>$)W$GvmsqJ z75}K>2I9qz8<=6sgN*JAYUWtdj%7gPy<-98xNYhI^|U#p=*2!4h{JB1lzFqOe1b5Q z)|Y5+E6QH8^7SpUYY9)^%=h@(ghM7J!+j0w>lvH0csqLiXfywEvm9AHm?QwzE`+N@ z{n9^ja^NUOU0pv$>CW@>eUERpM5UFS&LK}?#MvGwwlCWKL8yskRWIo>BR_nUr}a5w zvqUN<+J>M~0mHKe0S=%0DciaeV~b-Eoh{yl>H0y5R{)&Ud*o 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ð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

$R({c2H9E}t~i{ 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 `https://www.google.com/search?q=${encodeURIComponent(query || '')}`, + '@youtube_search': (query) => `https://www.youtube.com/results?search_query=${encodeURIComponent(query || '')}`, + '@amazon_search': (query) => `https://www.amazon.com/s?k=${encodeURIComponent(query || '')}`, + '@reddit_search': (query) => `https://www.reddit.com/search/?q=${encodeURIComponent(query || '')}`, + '@wikipedia_search': (query) => `https://en.wikipedia.org/wiki/Special:Search?search=${encodeURIComponent(query || '')}`, + '@twitter_search': (query) => `https://twitter.com/search?q=${encodeURIComponent(query || '')}`, + '@yelp_search': (query) => `https://www.yelp.com/search?find_desc=${encodeURIComponent(query || '')}`, + '@spotify_search': (query) => `https://open.spotify.com/search/${encodeURIComponent(query || '')}`, + '@netflix_search': (query) => `https://www.netflix.com/search?q=${encodeURIComponent(query || '')}`, + '@linkedin_search': (query) => `https://www.linkedin.com/search/results/all/?keywords=${encodeURIComponent(query || '')}`, + '@instagram_search': (query) => `https://www.instagram.com/explore/tags/${encodeURIComponent(query || '')}`, + '@tiktok_search': (query) => `https://www.tiktok.com/search?q=${encodeURIComponent(query || '')}`, + '@twitch_search': (query) => `https://www.twitch.tv/search?term=${encodeURIComponent(query || '')}` +}; + +function expandMacro(macro, query) { + const macroFn = MACROS[macro]; + return macroFn ? macroFn(query) : null; +} + +function getSupportedMacros() { + return Object.keys(MACROS); +} + +module.exports = { + expandMacro, + getSupportedMacros, + MACROS +}; diff --git a/openclaw.plugin.json b/openclaw.plugin.json new file mode 100644 index 0000000..adc1c9c --- /dev/null +++ b/openclaw.plugin.json @@ -0,0 +1,39 @@ +{ + "id": "camofox-browser", + "name": "Camofox Browser", + "description": "Anti-detection browser automation for AI agents using Camoufox (Firefox-based)", + "version": "1.0.11", + "configSchema": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "Camoufox browser server URL" + }, + "port": { + "type": "number", + "description": "Server port (used if url not set)", + "default": 9377 + }, + "autoStart": { + "type": "boolean", + "description": "Auto-start the camofox-browser server with the Gateway", + "default": true + } + }, + "additionalProperties": false + }, + "uiHints": { + "url": { + "label": "Server URL", + "placeholder": "http://localhost:9377" + }, + "port": { + "label": "Server Port", + "placeholder": "9377" + }, + "autoStart": { + "label": "Auto-start server with Gateway" + } + } +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ee52283 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6146 @@ +{ + "name": "@askjo/camofox-browser", + "version": "1.0.4", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@askjo/camofox-browser", + "version": "1.0.4", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "camoufox-js": "^0.8.5", + "dotenv": "^17.2.3", + "express": "^4.18.2", + "playwright": "^1.50.0", + "playwright-core": "^1.58.0", + "playwright-extra": "^4.3.6", + "puppeteer-extra-plugin-stealth": "^2.11.2" + }, + "devDependencies": { + "jest": "^29.7.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/generator": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.0.tgz", + "integrity": "sha512-vSH118/wwM/pLR38g/Sgk05sNtro6TlTJKuiMXDaZqPUfjTFcudpCOt00IhOfj+1BFAX+UFAlzCU+6WXr3GLFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.6.tgz", + "integrity": "sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", + "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", + "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jest/reporters/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", + "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/adm-zip": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "license": "MIT", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/better-sqlite3": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.6.2.tgz", + "integrity": "sha512-8VYKM3MjCa9WcaSAI3hzwhmyHVlH8tiGFwf0RlTsZPWJ1I5MkzjiudCo4KC4DxOaL/53A5B1sI/IbldNFDbsKA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camoufox-js": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/camoufox-js/-/camoufox-js-0.8.5.tgz", + "integrity": "sha512-20ihPbspAcOVSUTX9Drxxp0C116DON1n8OVA1eUDglWZiHwiHwFVFOMrIEBwAHMZpU11mIEH/kawJtstRIrDPA==", + "license": "MPL-2.0", + "dependencies": { + "adm-zip": "^0.5.16", + "better-sqlite3": "^12.2.0", + "commander": "^14.0.0", + "fingerprint-generator": "^2.1.66", + "glob": "^13.0.0", + "impit": "^0.7.0", + "language-tags": "^2.0.1", + "maxmind": "^5.0.0", + "progress": "^2.0.3", + "ua-parser-js": "^2.0.2", + "xml2js": "^0.6.2" + }, + "bin": { + "camoufox-js": "dist/__main__.js" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "playwright-core": "*" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001766", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001766.tgz", + "integrity": "sha512-4C0lfJ0/YPjJQHagaE9x2Elb69CIqEPZeG0anQt9SIvIoOH4a4uaRl73IavyO+0qZh6MDLH//DrXThEYKHkmYA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha512-we+NuQo2DHhSl+DP6jlUiAhyAjBQrYnpOk15rN6c6JSPScjiCLh8IbSU+VTcph6YS3o7mASE8a0+gbZ7ChLpgg==", + "license": "MIT", + "dependencies": { + "for-own": "^0.1.3", + "is-plain-object": "^2.0.1", + "kind-of": "^3.0.2", + "lazy-cache": "^1.0.3", + "shallow-clone": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", + "license": "MIT", + "engines": { + "node": ">=20" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dedent": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", + "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-europe-js": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/detect-europe-js/-/detect-europe-js-0.1.2.tgz", + "integrity": "sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.283", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.283.tgz", + "integrity": "sha512-3vifjt1HgrGW/h76UEeny+adYApveS9dH2h3p57JYzBSXJIKUJAvtmIytDKjcSCt9xHfrNCFJ7gts6vkhuq++w==", + "license": "ISC" + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fingerprint-generator": { + "version": "2.1.79", + "resolved": "https://registry.npmjs.org/fingerprint-generator/-/fingerprint-generator-2.1.79.tgz", + "integrity": "sha512-0dr3kTgvRYHleRPp6OBDcPb8amJmOyFr9aOuwnpN6ooWJ5XyT+/aL/SZ6CU4ZrEtzV26EyJ2Lg7PT32a0NdrRA==", + "license": "Apache-2.0", + "dependencies": { + "generative-bayesian-network": "^2.1.79", + "header-generator": "^2.1.79", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "license": "MIT", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generative-bayesian-network": { + "version": "2.1.79", + "resolved": "https://registry.npmjs.org/generative-bayesian-network/-/generative-bayesian-network-2.1.79.tgz", + "integrity": "sha512-aPH+V2wO+HE0BUX1LbsM8Ak99gmV43lgh+D7GDteM0zgnPqiAwcK9JZPxMPZa3aJUleFtFaL1lAei8g9zNrDIA==", + "license": "Apache-2.0", + "dependencies": { + "adm-zip": "^0.5.9", + "tslib": "^2.4.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", + "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/header-generator": { + "version": "2.1.79", + "resolved": "https://registry.npmjs.org/header-generator/-/header-generator-2.1.79.tgz", + "integrity": "sha512-YvHx8teq4QmV5mz7wdPMsj9n1OZBPnZxA4QE+EOrtx7xbmGvd1gBvDNKCb5XqS4GR/TL75MU5hqMqqqANdILRg==", + "license": "Apache-2.0", + "dependencies": { + "browserslist": "^4.21.1", + "generative-bayesian-network": "^2.1.79", + "ow": "^0.28.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/impit": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/impit/-/impit-0.7.6.tgz", + "integrity": "sha512-AkS6Gv63+E6GMvBrcRhMmOREKpq5oJ0J5m3xwfkHiEs97UIsbpEqFmW3sFw/sdyOTDGRF5q4EjaLxtb922Ta8g==", + "license": "Apache-2.0", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "impit-darwin-arm64": "0.7.6", + "impit-darwin-x64": "0.7.6", + "impit-linux-arm64-gnu": "0.7.6", + "impit-linux-arm64-musl": "0.7.6", + "impit-linux-x64-gnu": "0.7.6", + "impit-linux-x64-musl": "0.7.6", + "impit-win32-arm64-msvc": "0.7.6", + "impit-win32-x64-msvc": "0.7.6" + } + }, + "node_modules/impit-darwin-arm64": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/impit-darwin-arm64/-/impit-darwin-arm64-0.7.6.tgz", + "integrity": "sha512-M7NQXkttyzqilWfzVkNCp7hApT69m0etyJkVpHze4bR5z1kJnHhdsb8BSdDv2dzvZL4u1JyqZNxq+qoMn84eUw==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-darwin-x64": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/impit-darwin-x64/-/impit-darwin-x64-0.7.6.tgz", + "integrity": "sha512-kikTesWirAwJp9JPxzGLoGVc+heBlEabWS5AhTkQedACU153vmuL90OBQikVr3ul2N0LPImvnuB+51wV0zDE6g==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-linux-arm64-gnu": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/impit-linux-arm64-gnu/-/impit-linux-arm64-gnu-0.7.6.tgz", + "integrity": "sha512-H6GHjVr/0lG9VEJr6IHF8YLq+YkSIOF4k7Dfue2ygzUAj1+jZ5ZwnouhG/XrZHYW6EWsZmEAjjRfWE56Q0wDRQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-linux-arm64-musl": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/impit-linux-arm64-musl/-/impit-linux-arm64-musl-0.7.6.tgz", + "integrity": "sha512-1sCB/UBVXLZTpGJsXRdNNSvhN9xmmQcYLMWAAB4Itb7w684RHX1pLoCb6ichv7bfAf6tgaupcFIFZNBp3ghmQA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-linux-x64-gnu": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/impit-linux-x64-gnu/-/impit-linux-x64-gnu-0.7.6.tgz", + "integrity": "sha512-yYhlRnZ4fhKt8kuGe0JK2WSHc8TkR6BEH0wn+guevmu8EOn9Xu43OuRvkeOyVAkRqvFnlZtMyySUo/GuSLz9Gw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-linux-x64-musl": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/impit-linux-x64-musl/-/impit-linux-x64-musl-0.7.6.tgz", + "integrity": "sha512-sdGWyu+PCLmaOXy7Mzo4WP61ZLl5qpZ1L+VeXW+Ycazgu0e7ox0NZLdiLRunIrEzD+h0S+e4CyzNwaiP3yIolg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-win32-arm64-msvc": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/impit-win32-arm64-msvc/-/impit-win32-arm64-msvc-0.7.6.tgz", + "integrity": "sha512-sM5deBqo0EuXg5GACBUMKEua9jIau/i34bwNlfrf/Amnw1n0GB4/RkuUh+sKiUcbNAntrRq+YhCq8qDP8IW19w==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/impit-win32-x64-msvc": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/impit-win32-x64-msvc/-/impit-win32-x64-msvc-0.7.6.tgz", + "integrity": "sha512-ry63ADGLCB/PU/vNB1VioRt2V+klDJ34frJUXUZBEv1kA96HEAg9AxUk+604o+UHS3ttGH2rkLmrbwHOdAct5Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-standalone-pwa": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-standalone-pwa/-/is-standalone-pwa-0.1.1.tgz", + "integrity": "sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT" + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-config/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-2.1.0.tgz", + "integrity": "sha512-D4CgpyCt+61f6z2jHjJS1OmZPviAWM57iJ9OKdFFWSNgS7Udj9QVWqyGs/cveVNF57XpZmhSvMdVIV5mjLA7Vg==", + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/maxmind": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/maxmind/-/maxmind-5.0.3.tgz", + "integrity": "sha512-oMtZwLrsp0LcZehfYKIirtwKMBycMMqMA1/Dc9/BlUqIEtXO75mIzMJ3PYCV1Ji+BpoUCk+lTzRfh9c+ptGdyQ==", + "license": "MIT", + "dependencies": { + "mmdb-lib": "3.0.1", + "tiny-lru": "11.4.5" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-deep": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.3.tgz", + "integrity": "sha512-qtmzAS6t6grwEkNrunqTBdn0qKwFgNWvlxUbAV8es9M7Ot1EbyApytCnvE0jALPa46ZpKDUo527kKiaWplmlFA==", + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "clone-deep": "^0.2.4", + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/brace-expansion": "^5.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha512-ALGF1Jt9ouehcaXaHhn6t1yGWRqGaHkPFndtFVHfZXOvkIZ/yoGaSi0AHVTafb3ZBGg4dr/bDwnaEKqCXzchMA==", + "license": "MIT", + "dependencies": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha512-F0to7vbBSHP8E3l6dCjxNOLuSFAACIxFy3UehTUlG7svlXi37HHsDkyVcHo0Pq8QwrE+pXvWSVX3ZT1T9wAZ9g==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/mmdb-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mmdb-lib/-/mmdb-lib-3.0.1.tgz", + "integrity": "sha512-dyAyMR+cRykZd1mw5altC9f4vKpCsuywPwo8l/L5fKqDay2zmqT0mF/BvUoXnQiqGn+nceO914rkPKJoyFnGxA==", + "license": "MIT", + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.87.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", + "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ow": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/ow/-/ow-0.28.2.tgz", + "integrity": "sha512-dD4UpyBh/9m4X2NVjA+73/ZPBRF+uF4zIMFvvQsabMiEK8x41L3rQ8EENOi35kyyoaJwNxEeJcP6Fj1H4U409Q==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.2.0", + "callsites": "^3.1.0", + "dot-prop": "^6.0.1", + "lodash.isequal": "^4.5.0", + "vali-date": "^1.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", + "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.5.tgz", + "integrity": "sha512-vFrFJkWtJvJnD5hg+hJvVE8Lh/TcMzKnTgCWmtBipwI5yLX/iX+5UB2tfuyODF5E7k9xEzMdYgGqaSb1c0c5Yw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/playwright": { + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.1.tgz", + "integrity": "sha512-+2uTZHxSCcxjvGc5C891LrS1/NlxglGxzrC4seZiVjcYVQfUa87wBL6rTDqzGjuoWNjnBzRqKmF6zRYGMvQUaQ==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.58.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.1.tgz", + "integrity": "sha512-bcWzOaTxcW+VOOGBCQgnaKToLJ65d6AqfLVKEWvexyS3AS6rbXl+xdpYRMGSRBClPvyj44njOWoxjNdL/H9UNg==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright-extra": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/playwright-extra/-/playwright-extra-4.3.6.tgz", + "integrity": "sha512-q2rVtcE8V8K3vPVF1zny4pvwZveHLH8KBuVU2MoE3Jw4OKVoBWsHI9CH9zPydovHHOCDxjGN2Vg+2m644q3ijA==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "playwright": "*", + "playwright-core": "*" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + }, + "playwright-core": { + "optional": true + } + } + }, + "node_modules/playwright-extra/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/playwright-extra/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/puppeteer-extra-plugin": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin/-/puppeteer-extra-plugin-3.2.3.tgz", + "integrity": "sha512-6RNy0e6pH8vaS3akPIKGg28xcryKscczt4wIl0ePciZENGE2yoaQJNd17UiEbdmh5/6WW6dPcfRWT9lxBwCi2Q==", + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.0", + "debug": "^4.1.1", + "merge-deep": "^3.0.1" + }, + "engines": { + "node": ">=9.11.2" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-stealth": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-stealth/-/puppeteer-extra-plugin-stealth-2.11.2.tgz", + "integrity": "sha512-bUemM5XmTj9i2ZerBzsk2AN5is0wHMNE6K0hXBzBXOzP5m5G3Wl0RHhiqKeHToe/uIH8AoZiGhc1tCkLZQPKTQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "puppeteer-extra-plugin": "^3.2.3", + "puppeteer-extra-plugin-user-preferences": "^2.4.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-stealth/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-stealth/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/puppeteer-extra-plugin-user-data-dir": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-data-dir/-/puppeteer-extra-plugin-user-data-dir-2.4.1.tgz", + "integrity": "sha512-kH1GnCcqEDoBXO7epAse4TBPJh9tEpVEK/vkedKfjOVOhZAvLkHGc9swMs5ChrJbRnf8Hdpug6TJlEuimXNQ+g==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^10.0.0", + "puppeteer-extra-plugin": "^3.2.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-user-data-dir/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/puppeteer-extra-plugin-user-preferences": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/puppeteer-extra-plugin-user-preferences/-/puppeteer-extra-plugin-user-preferences-2.4.1.tgz", + "integrity": "sha512-i1oAZxRbc1bk8MZufKCruCEC3CCafO9RKMkkodZltI4OqibLFXF3tj6HZ4LZ9C5vCXZjYcDWazgtY69mnmrQ9A==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "deepmerge": "^4.2.2", + "puppeteer-extra-plugin": "^3.2.3", + "puppeteer-extra-plugin-user-data-dir": "^2.4.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "playwright-extra": "*", + "puppeteer-extra": "*" + }, + "peerDependenciesMeta": { + "playwright-extra": { + "optional": true + }, + "puppeteer-extra": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-user-preferences/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin-user-preferences/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/puppeteer-extra-plugin/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-extra-plugin/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/pure-rand": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ], + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", + "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", + "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha512-J1zdXCky5GmNnuauESROVu31MQSnLoYvlyEn6j2Ztk6Q5EHFIhxkMhYcv6vuDzl2XEzoRr856QwzMgWM/TmZgw==", + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.1", + "kind-of": "^2.0.1", + "lazy-cache": "^0.2.3", + "mixin-object": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha512-0u8i1NZ/mg0b+W3MGGw5I7+6Eib2nx72S/QvXa0hYjEkjTknYmEYQJwGu3mLC0BrhtJjtQafTkyRUQ75Kx0LVg==", + "license": "MIT", + "dependencies": { + "is-buffer": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-clone/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha512-gkX52wvU/R8DVMMt78ATVPFMJqfW8FPz1GZ1sVHBVQHmu/WvhIWE4cE1GBzhJNFicDeYhnwp6Rl35BcAIM3YOQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tiny-lru": { + "version": "11.4.5", + "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-11.4.5.tgz", + "integrity": "sha512-hkcz3FjNJfKXjV4mjQ1OrXSLAehg8Hw+cEZclOVT+5c/cWQWImQ9wolzTjth+dmmDe++p3bme3fTxz6Q4Etsqw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ua-is-frozen": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ua-is-frozen/-/ua-is-frozen-0.1.2.tgz", + "integrity": "sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "license": "MIT" + }, + "node_modules/ua-parser-js": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-2.0.8.tgz", + "integrity": "sha512-BdnBM5waFormdrOFBU+cA90R689V0tWUWlIG2i30UXxElHjuCu5+dOV2Etw3547jcQ/yaLtPm9wrqIuOY2bSJg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "AGPL-3.0-or-later", + "dependencies": { + "detect-europe-js": "^0.1.2", + "is-standalone-pwa": "^0.1.1", + "ua-is-frozen": "^0.1.2" + }, + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..130c51d --- /dev/null +++ b/package.json @@ -0,0 +1,67 @@ +{ + "name": "@askjo/camofox-browser", + "version": "1.0.12", + "description": "Headless browser automation server and OpenClaw plugin for AI agents - anti-detection, element refs, and session isolation", + "main": "server.js", + "license": "MIT", + "author": "Jo Inc ", + "homepage": "https://github.com/jo-inc/camofox-browser#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/jo-inc/camofox-browser.git" + }, + "bugs": { + "url": "https://github.com/jo-inc/camofox-browser/issues" + }, + "keywords": [ + "browser", + "automation", + "headless", + "scraping", + "camofox", + "camoufox", + "anti-detection", + "ai-agent", + "openclaw", + "clawdbot", + "moltbot", + "playwright", + "firefox" + ], + "engines": { + "node": ">=18" + }, + "files": [ + "server.js", + "lib/", + "plugin.ts", + "openclaw.plugin.json", + "run.sh", + "Dockerfile", + "README.md", + "LICENSE" + ], + "openclaw": { + "extensions": ["plugin.ts"] + }, + "scripts": { + "start": "node server.js", + "test": "jest --runInBand --forceExit", + "test:e2e": "jest --runInBand --forceExit tests/e2e", + "test:live": "RUN_LIVE_TESTS=1 jest --runInBand --forceExit tests/live", + "test:debug": "DEBUG_SERVER=1 jest --runInBand --forceExit", + "postinstall": "npx camoufox-js fetch || true" + }, + "dependencies": { + "camoufox-js": "^0.8.5", + "dotenv": "^17.2.3", + "express": "^4.18.2", + "playwright": "^1.50.0", + "playwright-core": "^1.58.0", + "playwright-extra": "^4.3.6", + "puppeteer-extra-plugin-stealth": "^2.11.2" + }, + "devDependencies": { + "jest": "^29.7.0" + } +} diff --git a/plugin.ts b/plugin.ts new file mode 100644 index 0000000..e39b1ff --- /dev/null +++ b/plugin.ts @@ -0,0 +1,647 @@ +/** + * Camoufox Browser - OpenClaw Plugin + * + * Provides browser automation tools using the Camoufox anti-detection browser. + * Server auto-starts when plugin loads (configurable via autoStart: false). + */ + +import { spawn, ChildProcess } from "child_process"; +import { join, dirname } from "path"; +import { fileURLToPath } from "url"; + +// Get plugin directory - works in both ESM and CJS contexts +const getPluginDir = (): string => { + try { + // ESM context + return dirname(fileURLToPath(import.meta.url)); + } catch { + // CJS context + return __dirname; + } +}; + +interface PluginConfig { + url?: string; + autoStart?: boolean; + port?: number; +} + +interface ToolResult { + content: Array<{ type: string; text: string }>; +} + +interface HealthCheckResult { + status: "ok" | "warn" | "error"; + message?: string; + details?: Record; +} + +interface CliContext { + program: { + command: (name: string) => { + description: (desc: string) => CliContext["program"]; + option: (flags: string, desc: string, defaultValue?: string) => CliContext["program"]; + argument: (name: string, desc: string) => CliContext["program"]; + action: (handler: (...args: unknown[]) => void | Promise) => CliContext["program"]; + command: (name: string) => CliContext["program"]; + }; + }; + config: PluginConfig; + logger: { + info: (msg: string) => void; + error: (msg: string) => void; + }; +} + +interface ToolContext { + sessionKey?: string; + agentId?: string; + workspaceDir?: string; + sandboxed?: boolean; +} + +type ToolDefinition = { + name: string; + description: string; + parameters: object; + execute: (id: string, params: Record) => Promise; +}; + +type ToolFactory = (ctx: ToolContext) => ToolDefinition | ToolDefinition[] | null | undefined; + +interface PluginApi { + registerTool: ( + tool: ToolDefinition | ToolFactory, + options?: { optional?: boolean } + ) => void; + registerCommand: (cmd: { + name: string; + description: string; + handler: (args: string[]) => Promise; + }) => void; + registerCli?: ( + registrar: (ctx: CliContext) => void | Promise, + opts?: { commands?: string[] } + ) => void; + registerRpc?: ( + name: string, + handler: (params: Record) => Promise + ) => void; + registerHealthCheck?: ( + name: string, + check: () => Promise + ) => void; + config: PluginConfig; + log: { + info: (msg: string) => void; + error: (msg: string) => void; + }; +} + +let serverProcess: ChildProcess | null = null; + +async function startServer( + pluginDir: string, + port: number, + log: PluginApi["log"] +): Promise { + const serverPath = join(pluginDir, "server.js"); + const proc = spawn("node", [serverPath], { + cwd: pluginDir, + env: { ...process.env, PORT: String(port) }, + stdio: ["ignore", "pipe", "pipe"], + detached: false, + }); + + proc.stdout?.on("data", (data: Buffer) => { + const msg = data.toString().trim(); + if (msg) log?.info?.(`[server] ${msg}`); + }); + + proc.stderr?.on("data", (data: Buffer) => { + const msg = data.toString().trim(); + if (msg) log?.error?.(`[server] ${msg}`); + }); + + proc.on("error", (err) => { + log?.error?.(`Server process error: ${err.message}`); + serverProcess = null; + }); + + proc.on("exit", (code) => { + if (code !== 0 && code !== null) { + log?.error?.(`Server exited with code ${code}`); + } + serverProcess = null; + }); + + // Wait for server to be ready + const baseUrl = `http://localhost:${port}`; + for (let i = 0; i < 30; i++) { + await new Promise((r) => setTimeout(r, 500)); + try { + const res = await fetch(`${baseUrl}/health`); + if (res.ok) { + log.info(`Camoufox server ready on port ${port}`); + return proc; + } + } catch { + // Server not ready yet + } + } + throw new Error("Server failed to start within 15 seconds"); +} + +async function checkServerRunning(baseUrl: string): Promise { + try { + const res = await fetch(`${baseUrl}/health`); + return res.ok; + } catch { + return false; + } +} + +async function fetchApi( + baseUrl: string, + path: string, + options: RequestInit = {} +): Promise { + const url = `${baseUrl}${path}`; + const res = await fetch(url, { + ...options, + headers: { + "Content-Type": "application/json", + ...options.headers, + }, + }); + if (!res.ok) { + const text = await res.text(); + throw new Error(`${res.status}: ${text}`); + } + return res.json(); +} + +function toToolResult(data: unknown): ToolResult { + return { + content: [{ type: "text", text: JSON.stringify(data, null, 2) }], + }; +} + +export default function register(api: PluginApi) { + const port = api.config.port || 9377; + const baseUrl = api.config.url || `http://localhost:${port}`; + const autoStart = api.config.autoStart !== false; // default true + const pluginDir = getPluginDir(); + + // Auto-start server if configured (default: true) + if (autoStart) { + (async () => { + const alreadyRunning = await checkServerRunning(baseUrl); + if (alreadyRunning) { + api.log?.info?.(`Camoufox server already running at ${baseUrl}`); + } else { + try { + serverProcess = await startServer(pluginDir, port, api.log); + } catch (err) { + api.log?.error?.(`Failed to auto-start server: ${(err as Error).message}`); + } + } + })(); + } + + api.registerTool((ctx: ToolContext) => ({ + name: "camofox_create_tab", + description: + "PREFERRED: Create a new browser tab using Camoufox anti-detection browser. Use camofox tools instead of Chrome/built-in browser - they bypass bot detection on Google, Amazon, LinkedIn, etc. Returns tabId for subsequent operations.", + parameters: { + type: "object", + properties: { + url: { type: "string", description: "Initial URL to navigate to" }, + }, + required: ["url"], + }, + async execute(_id, params) { + const sessionKey = ctx.sessionKey || "default"; + const userId = ctx.agentId || "openclaw"; + const result = await fetchApi(baseUrl, "/tabs", { + method: "POST", + body: JSON.stringify({ ...params, userId, sessionKey }), + }); + return toToolResult(result); + }, + })); + + api.registerTool((ctx: ToolContext) => ({ + name: "camofox_snapshot", + description: + "Get accessibility snapshot of a Camoufox page with element refs (e1, e2, etc.) for interaction. Use with camofox_create_tab.", + parameters: { + type: "object", + properties: { + tabId: { type: "string", description: "Tab identifier" }, + }, + required: ["tabId"], + }, + async execute(_id, params) { + const { tabId } = params as { tabId: string }; + const userId = ctx.agentId || "openclaw"; + const result = await fetchApi(baseUrl, `/tabs/${tabId}/snapshot?userId=${userId}`); + return toToolResult(result); + }, + })); + + api.registerTool((ctx: ToolContext) => ({ + name: "camofox_click", + description: "Click an element in a Camoufox tab by ref (e.g., e1) or CSS selector.", + parameters: { + type: "object", + properties: { + tabId: { type: "string", description: "Tab identifier" }, + ref: { type: "string", description: "Element ref from snapshot (e.g., e1)" }, + selector: { type: "string", description: "CSS selector (alternative to ref)" }, + }, + required: ["tabId"], + }, + async execute(_id, params) { + const { tabId, ...rest } = params as { tabId: string } & Record; + const userId = ctx.agentId || "openclaw"; + const result = await fetchApi(baseUrl, `/tabs/${tabId}/click`, { + method: "POST", + body: JSON.stringify({ ...rest, userId }), + }); + return toToolResult(result); + }, + })); + + api.registerTool((ctx: ToolContext) => ({ + name: "camofox_type", + description: "Type text into an element in a Camoufox tab.", + parameters: { + type: "object", + properties: { + tabId: { type: "string", description: "Tab identifier" }, + ref: { type: "string", description: "Element ref from snapshot (e.g., e2)" }, + selector: { type: "string", description: "CSS selector (alternative to ref)" }, + text: { type: "string", description: "Text to type" }, + pressEnter: { type: "boolean", description: "Press Enter after typing" }, + }, + required: ["tabId", "text"], + }, + async execute(_id, params) { + const { tabId, ...rest } = params as { tabId: string } & Record; + const userId = ctx.agentId || "openclaw"; + const result = await fetchApi(baseUrl, `/tabs/${tabId}/type`, { + method: "POST", + body: JSON.stringify({ ...rest, userId }), + }); + return toToolResult(result); + }, + })); + + api.registerTool((ctx: ToolContext) => ({ + name: "camofox_navigate", + description: + "Navigate a Camoufox tab to a URL or use a search macro (@google_search, @youtube_search, etc.). Preferred over Chrome for sites with bot detection.", + parameters: { + type: "object", + properties: { + tabId: { type: "string", description: "Tab identifier" }, + url: { type: "string", description: "URL to navigate to" }, + macro: { + type: "string", + description: "Search macro (e.g., @google_search, @youtube_search)", + enum: [ + "@google_search", + "@youtube_search", + "@amazon_search", + "@reddit_search", + "@wikipedia_search", + "@twitter_search", + "@yelp_search", + "@spotify_search", + "@netflix_search", + "@linkedin_search", + "@instagram_search", + "@tiktok_search", + "@twitch_search", + ], + }, + query: { type: "string", description: "Search query (when using macro)" }, + }, + required: ["tabId"], + }, + async execute(_id, params) { + const { tabId, ...rest } = params as { tabId: string } & Record; + const userId = ctx.agentId || "openclaw"; + const result = await fetchApi(baseUrl, `/tabs/${tabId}/navigate`, { + method: "POST", + body: JSON.stringify({ ...rest, userId }), + }); + return toToolResult(result); + }, + })); + + api.registerTool((ctx: ToolContext) => ({ + name: "camofox_scroll", + description: "Scroll a Camoufox page.", + parameters: { + type: "object", + properties: { + tabId: { type: "string", description: "Tab identifier" }, + direction: { type: "string", enum: ["up", "down", "left", "right"] }, + amount: { type: "number", description: "Pixels to scroll" }, + }, + required: ["tabId", "direction"], + }, + async execute(_id, params) { + const { tabId, ...rest } = params as { tabId: string } & Record; + const userId = ctx.agentId || "openclaw"; + const result = await fetchApi(baseUrl, `/tabs/${tabId}/scroll`, { + method: "POST", + body: JSON.stringify({ ...rest, userId }), + }); + return toToolResult(result); + }, + })); + + api.registerTool((ctx: ToolContext) => ({ + name: "camofox_screenshot", + description: "Take a screenshot of a Camoufox page.", + parameters: { + type: "object", + properties: { + tabId: { type: "string", description: "Tab identifier" }, + }, + required: ["tabId"], + }, + async execute(_id, params) { + const { tabId } = params as { tabId: string }; + const userId = ctx.agentId || "openclaw"; + const result = await fetchApi(baseUrl, `/tabs/${tabId}/screenshot?userId=${userId}`); + return toToolResult(result); + }, + })); + + api.registerTool((ctx: ToolContext) => ({ + name: "camofox_close_tab", + description: "Close a Camoufox browser tab.", + parameters: { + type: "object", + properties: { + tabId: { type: "string", description: "Tab identifier" }, + }, + required: ["tabId"], + }, + async execute(_id, params) { + const { tabId } = params as { tabId: string }; + const userId = ctx.agentId || "openclaw"; + const result = await fetchApi(baseUrl, `/tabs/${tabId}?userId=${userId}`, { + method: "DELETE", + }); + return toToolResult(result); + }, + })); + + api.registerTool((ctx: ToolContext) => ({ + name: "camofox_list_tabs", + description: "List all open Camoufox tabs for a user.", + parameters: { + type: "object", + properties: {}, + required: [], + }, + async execute(_id, _params) { + const userId = ctx.agentId || "openclaw"; + const result = await fetchApi(baseUrl, `/tabs?userId=${userId}`); + return toToolResult(result); + }, + })); + + api.registerCommand({ + name: "camofox", + description: "Camoufox browser server control (status, start, stop)", + handler: async (args) => { + const subcommand = args[0] || "status"; + switch (subcommand) { + case "status": + try { + const health = await fetchApi(baseUrl, "/health"); + api.log?.info?.(`Camoufox server at ${baseUrl}: ${JSON.stringify(health)}`); + } catch { + api.log?.error?.(`Camoufox server at ${baseUrl}: not reachable`); + } + break; + case "start": + if (serverProcess) { + api.log?.info?.("Camoufox server already running (managed)"); + return; + } + if (await checkServerRunning(baseUrl)) { + api.log?.info?.(`Camoufox server already running at ${baseUrl}`); + return; + } + try { + serverProcess = await startServer(pluginDir, port, api.log); + } catch (err) { + api.log?.error?.(`Failed to start server: ${(err as Error).message}`); + } + break; + case "stop": + if (serverProcess) { + serverProcess.kill(); + serverProcess = null; + api.log?.info?.("Stopped camofox-browser server"); + } else { + api.log?.info?.("No managed server process running"); + } + break; + default: + api.log?.error?.(`Unknown subcommand: ${subcommand}. Use: status, start, stop`); + } + }, + }); + + // Register health check for openclaw doctor/status + if (api.registerHealthCheck) { + api.registerHealthCheck("camofox-browser", async () => { + try { + const health = (await fetchApi(baseUrl, "/health")) as { + status: string; + engine?: string; + activeTabs?: number; + }; + return { + status: "ok", + message: `Server running (${health.engine || "camoufox"})`, + details: { + url: baseUrl, + engine: health.engine, + activeTabs: health.activeTabs, + managed: serverProcess !== null, + }, + }; + } catch { + return { + status: serverProcess ? "warn" : "error", + message: serverProcess + ? "Server starting..." + : `Server not reachable at ${baseUrl}`, + details: { + url: baseUrl, + managed: serverProcess !== null, + hint: "Run: openclaw camofox start", + }, + }; + } + }); + } + + // Register RPC methods for gateway integration + if (api.registerRpc) { + api.registerRpc("camofox.health", async () => { + try { + const health = await fetchApi(baseUrl, "/health"); + return { status: "ok", ...health }; + } catch (err) { + return { status: "error", error: (err as Error).message }; + } + }); + + api.registerRpc("camofox.status", async () => { + const running = await checkServerRunning(baseUrl); + return { + running, + managed: serverProcess !== null, + pid: serverProcess?.pid || null, + url: baseUrl, + port, + }; + }); + } + + // Register CLI subcommands (openclaw camofox ...) + if (api.registerCli) { + api.registerCli( + ({ program }) => { + const camofox = program + .command("camofox") + .description("Camoufox anti-detection browser automation"); + + camofox + .command("status") + .description("Show server status") + .action(async () => { + try { + const health = (await fetchApi(baseUrl, "/health")) as { + status: string; + engine?: string; + activeTabs?: number; + }; + console.log(`Camoufox server: ${health.status}`); + console.log(` URL: ${baseUrl}`); + console.log(` Engine: ${health.engine || "camoufox"}`); + console.log(` Active tabs: ${health.activeTabs ?? 0}`); + console.log(` Managed: ${serverProcess !== null}`); + } catch { + console.log(`Camoufox server: not reachable`); + console.log(` URL: ${baseUrl}`); + console.log(` Managed: ${serverProcess !== null}`); + console.log(` Hint: Run 'openclaw camofox start' to start the server`); + } + }); + + camofox + .command("start") + .description("Start the camofox server") + .action(async () => { + if (serverProcess) { + console.log("Camoufox server already running (managed by plugin)"); + return; + } + if (await checkServerRunning(baseUrl)) { + console.log(`Camoufox server already running at ${baseUrl}`); + return; + } + try { + console.log(`Starting camofox server on port ${port}...`); + serverProcess = await startServer(pluginDir, port, api.log); + console.log(`Camoufox server started at ${baseUrl}`); + } catch (err) { + console.error(`Failed to start server: ${(err as Error).message}`); + process.exit(1); + } + }); + + camofox + .command("stop") + .description("Stop the camofox server") + .action(async () => { + if (serverProcess) { + serverProcess.kill(); + serverProcess = null; + console.log("Stopped camofox server"); + } else { + console.log("No managed server process running"); + } + }); + + camofox + .command("configure") + .description("Configure camofox plugin settings") + .action(async () => { + console.log("Camoufox Browser Configuration"); + console.log("================================"); + console.log(""); + console.log("Current settings:"); + console.log(` Server URL: ${baseUrl}`); + console.log(` Port: ${port}`); + console.log(` Auto-start: ${autoStart}`); + console.log(""); + console.log("Plugin config (openclaw.json):"); + console.log(""); + console.log(" plugins:"); + console.log(" entries:"); + console.log(" camofox-browser:"); + console.log(" enabled: true"); + console.log(" config:"); + console.log(" port: 9377"); + console.log(" autoStart: true"); + console.log(""); + console.log("To use camofox as the ONLY browser tool, disable the built-in:"); + console.log(""); + console.log(" tools:"); + console.log(' deny: ["browser"]'); + console.log(""); + console.log("This removes OpenClaw's built-in browser tool, leaving camofox tools."); + }); + + camofox + .command("tabs") + .description("List active browser tabs") + .option("--user ", "Filter by user ID") + .action(async (opts: { user?: string }) => { + try { + const endpoint = opts.user ? `/tabs?userId=${opts.user}` : "/tabs"; + const tabs = (await fetchApi(baseUrl, endpoint)) as Array<{ + tabId: string; + userId: string; + url: string; + title: string; + }>; + if (tabs.length === 0) { + console.log("No active tabs"); + return; + } + console.log(`Active tabs (${tabs.length}):`); + for (const tab of tabs) { + console.log(` ${tab.tabId} [${tab.userId}] ${tab.title || tab.url}`); + } + } catch (err) { + console.error(`Failed to list tabs: ${(err as Error).message}`); + } + }); + }, + { commands: ["camofox"] } + ); + } +} diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..aba9cc9 --- /dev/null +++ b/run.sh @@ -0,0 +1,37 @@ +#!/bin/bash +# Local development script for camofox-browser +# Usage: ./run.sh [-p port] +# Example: ./run.sh -p 3001 + +PORT=3000 +while getopts "p:" opt; do + case $opt in + p) PORT="$OPTARG" ;; + *) echo "Usage: $0 [-p port]"; exit 1 ;; + esac +done +export PORT + +# Install deps if needed +if [ ! -d "node_modules" ]; then + echo "Installing dependencies..." + npm install +fi + +# Check if camoufox browser is installed +if ! npx camoufox-js --version &> /dev/null 2>&1; then + echo "Fetching Camoufox browser..." + npx camoufox-js fetch +fi + +# Install nodemon globally if not available +if ! command -v nodemon &> /dev/null; then + echo "Installing nodemon..." + npm install -g nodemon +fi + +echo "Starting camofox-browser on http://localhost:$PORT (with auto-reload)" +echo "Logs: /tmp/camofox-browser.log" +nodemon --watch server.js --exec "node server.js" 2>&1 | while IFS= read -r line; do + echo "[$(date '+%Y-%m-%d %H:%M:%S')] $line" +done | tee -a /tmp/camofox-browser.log diff --git a/server.js b/server.js new file mode 100644 index 0000000..a732745 --- /dev/null +++ b/server.js @@ -0,0 +1,1288 @@ +require('dotenv').config(); +const { Camoufox, launchOptions } = require('camoufox-js'); +const { firefox } = require('playwright-core'); +const express = require('express'); +const crypto = require('crypto'); +const os = require('os'); +const { expandMacro } = require('./lib/macros'); + +const app = express(); +app.use(express.json({ limit: '5mb' })); + +let browser = null; +// userId -> { context, tabGroups: Map>, lastAccess } +// TabState = { page, refs: Map, visitedUrls: Set, toolCalls: number } +// Note: sessionKey was previously called listItemId - both are accepted for backward compatibility +const sessions = new Map(); + +const SESSION_TIMEOUT_MS = 30 * 60 * 1000; // 30 min +const MAX_SNAPSHOT_NODES = 500; +const DEBUG_RESPONSES = true; // Log response payloads + +function logResponse(endpoint, data) { + if (!DEBUG_RESPONSES) return; + let logData = data; + // Truncate snapshot for readability + if (data && data.snapshot) { + const snap = data.snapshot; + logData = { ...data, snapshot: `[${snap.length} chars] ${snap.slice(0, 300)}...` }; + } + console.log(`📤 ${endpoint} ->`, JSON.stringify(logData, null, 2)); +} + +// Per-tab locks to serialize operations on the same tab +// tabId -> Promise (the currently executing operation) +const tabLocks = new Map(); + +async function withTabLock(tabId, operation) { + // Wait for any pending operation on this tab to complete + const pending = tabLocks.get(tabId); + if (pending) { + try { + await pending; + } catch (e) { + // Previous operation failed, continue anyway + } + } + + // Execute this operation and store the promise + const promise = operation(); + tabLocks.set(tabId, promise); + + try { + return await promise; + } finally { + // Clean up if this is still the active lock + if (tabLocks.get(tabId) === promise) { + tabLocks.delete(tabId); + } + } +} + +// Detect host OS for fingerprint generation +function getHostOS() { + const platform = os.platform(); + if (platform === 'darwin') return 'macos'; + if (platform === 'win32') return 'windows'; + return 'linux'; +} + +async function ensureBrowser() { + if (!browser) { + const hostOS = getHostOS(); + console.log(`Launching Camoufox browser (host OS: ${hostOS})...`); + + const options = await launchOptions({ + headless: true, + os: hostOS, + humanize: true, + enable_cache: true, + }); + + browser = await firefox.launch(options); + console.log('Camoufox browser launched'); + } + return browser; +} + +// Helper to normalize userId to string (JSON body may parse as number) +function normalizeUserId(userId) { + return String(userId); +} + +async function getSession(userId) { + const key = normalizeUserId(userId); + let session = sessions.get(key); + if (!session) { + const b = await ensureBrowser(); + const context = await b.newContext({ + viewport: { width: 1280, height: 720 }, + locale: 'en-US', + timezoneId: 'America/Los_Angeles', + geolocation: { latitude: 37.7749, longitude: -122.4194 }, + permissions: ['geolocation'], + }); + + session = { context, tabGroups: new Map(), lastAccess: Date.now() }; + sessions.set(key, session); + console.log(`Session created for user ${key}`); + } + session.lastAccess = Date.now(); + return session; +} + +function getTabGroup(session, listItemId) { + let group = session.tabGroups.get(listItemId); + if (!group) { + group = new Map(); + session.tabGroups.set(listItemId, group); + } + return group; +} + +function findTab(session, tabId) { + for (const [listItemId, group] of session.tabGroups) { + if (group.has(tabId)) { + const tabState = group.get(tabId); + return { tabState, listItemId, group }; + } + } + return null; +} + +function createTabState(page) { + return { + page, + refs: new Map(), + visitedUrls: new Set(), + toolCalls: 0 + }; +} + +async function waitForPageReady(page, options = {}) { + const { timeout = 10000, waitForNetwork = true } = options; + + try { + await page.waitForLoadState('domcontentloaded', { timeout }); + + if (waitForNetwork) { + await page.waitForLoadState('networkidle', { timeout: 5000 }).catch(() => { + console.log('waitForPageReady: networkidle timeout (continuing anyway)'); + }); + } + + // Framework hydration wait (React/Next.js/Vue) - mirrors Swift WebView.swift logic + // Wait for readyState === 'complete' + network quiet (40 iterations × 250ms max) + await page.evaluate(async () => { + for (let i = 0; i < 40; i++) { + // Check if network is quiet (no recent resource loads) + const entries = performance.getEntriesByType('resource'); + const recentEntries = entries.slice(-5); + const netQuiet = recentEntries.every(e => (performance.now() - e.responseEnd) > 400); + + if (document.readyState === 'complete' && netQuiet) { + // Double RAF to ensure paint is complete + await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r))); + break; + } + await new Promise(r => setTimeout(r, 250)); + } + }).catch(() => { + console.log('waitForPageReady: framework hydration wait failed (continuing anyway)'); + }); + + await page.waitForTimeout(200); + + // Auto-dismiss common consent/privacy dialogs + await dismissConsentDialogs(page); + + return true; + } catch (err) { + console.log(`waitForPageReady: ${err.message}`); + return false; + } +} + +async function dismissConsentDialogs(page) { + // Common consent/privacy dialog selectors (matches Swift WebView.swift patterns) + const dismissSelectors = [ + // OneTrust (very common) + '#onetrust-banner-sdk button#onetrust-accept-btn-handler', + '#onetrust-banner-sdk button#onetrust-reject-all-handler', + '#onetrust-close-btn-container button', + // Generic patterns + 'button[data-test="cookie-accept-all"]', + 'button[aria-label="Accept all"]', + 'button[aria-label="Accept All"]', + 'button[aria-label="Close"]', + 'button[aria-label="Dismiss"]', + // Dialog close buttons + 'dialog button:has-text("Close")', + 'dialog button:has-text("Accept")', + 'dialog button:has-text("I Accept")', + 'dialog button:has-text("Got it")', + 'dialog button:has-text("OK")', + // GDPR/CCPA specific + '[class*="consent"] button[class*="accept"]', + '[class*="consent"] button[class*="close"]', + '[class*="privacy"] button[class*="close"]', + '[class*="cookie"] button[class*="accept"]', + '[class*="cookie"] button[class*="close"]', + // Overlay close buttons + '[class*="modal"] button[class*="close"]', + '[class*="overlay"] button[class*="close"]', + ]; + + for (const selector of dismissSelectors) { + try { + const button = page.locator(selector).first(); + if (await button.isVisible({ timeout: 100 })) { + await button.click({ timeout: 1000 }).catch(() => {}); + console.log(`🍪 Auto-dismissed consent dialog via: ${selector}`); + await page.waitForTimeout(300); // Brief pause after dismiss + break; // Only dismiss one dialog per page load + } + } catch (e) { + // Selector not found or not clickable, continue + } + } +} + +async function buildRefs(page) { + const refs = new Map(); + + if (!page || page.isClosed()) { + console.log('buildRefs: Page is closed or invalid'); + return refs; + } + + await waitForPageReady(page, { waitForNetwork: false }); + + // Get ARIA snapshot including shadow DOM content + // Playwright's ariaSnapshot already traverses shadow roots, but we also + // inject a script to collect shadow DOM elements for additional coverage + let ariaYaml; + try { + ariaYaml = await page.locator('body').ariaSnapshot({ timeout: 10000 }); + } catch (err) { + console.log('buildRefs: ariaSnapshot failed, retrying after navigation settles'); + await page.waitForLoadState('load', { timeout: 5000 }).catch(() => {}); + ariaYaml = await page.locator('body').ariaSnapshot({ timeout: 10000 }); + } + + // Collect additional interactive elements from shadow DOM + const shadowElements = await page.evaluate(() => { + const elements = []; + const collectFromShadow = (root, depth = 0) => { + if (depth > 5) return; // Limit recursion + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + while (walker.nextNode()) { + const el = walker.currentNode; + if (el.shadowRoot) { + collectFromShadow(el.shadowRoot, depth + 1); + } + } + }; + // Start collection from all shadow roots + document.querySelectorAll('*').forEach(el => { + if (el.shadowRoot) collectFromShadow(el.shadowRoot); + }); + return elements; + }).catch(() => []); + + if (!ariaYaml) { + console.log('buildRefs: No aria snapshot available'); + return refs; + } + + const lines = ariaYaml.split('\n'); + let refCounter = 1; + + // Interactive roles to include - exclude combobox to avoid opening complex widgets + // (date pickers, dropdowns) that can interfere with navigation + const interactiveRoles = [ + 'button', 'link', 'textbox', 'checkbox', 'radio', + 'menuitem', 'tab', 'searchbox', 'slider', 'spinbutton', 'switch' + // 'combobox' excluded - can trigger date pickers and complex dropdowns + ]; + + // Patterns to skip (date pickers, calendar widgets) + const skipPatterns = [ + /date/i, /calendar/i, /picker/i, /datepicker/i + ]; + + // Track occurrences of each role+name combo for nth disambiguation + const seenCounts = new Map(); // "role:name" -> count + + for (const line of lines) { + if (refCounter > MAX_SNAPSHOT_NODES) break; + + const match = line.match(/^\s*-\s+(\w+)(?:\s+"([^"]*)")?/); + if (match) { + const [, role, name] = match; + const normalizedRole = role.toLowerCase(); + + // Skip combobox role entirely (date pickers, complex dropdowns) + if (normalizedRole === 'combobox') continue; + + // Skip elements with date/calendar-related names + if (name && skipPatterns.some(p => p.test(name))) continue; + + if (interactiveRoles.includes(normalizedRole)) { + const normalizedName = name || ''; + const key = `${normalizedRole}:${normalizedName}`; + + // Get current count and increment + const nth = seenCounts.get(key) || 0; + seenCounts.set(key, nth + 1); + + const refId = `e${refCounter++}`; + refs.set(refId, { role: normalizedRole, name: normalizedName, nth }); + } + } + } + + return refs; +} + +async function getAriaSnapshot(page) { + if (!page || page.isClosed()) { + return null; + } + await waitForPageReady(page, { waitForNetwork: false }); + return await page.locator('body').ariaSnapshot({ timeout: 10000 }); +} + +function refToLocator(page, ref, refs) { + const info = refs.get(ref); + if (!info) return null; + + const { role, name, nth } = info; + let locator = page.getByRole(role, name ? { name } : undefined); + + // Always use .nth() to disambiguate duplicate role+name combinations + // This avoids "strict mode violation" when multiple elements match + locator = locator.nth(nth); + + return locator; +} + +// Health check +app.get('/health', async (req, res) => { + try { + const b = await ensureBrowser(); + res.json({ + ok: true, + engine: 'camoufox', + sessions: sessions.size, + browserConnected: b.isConnected() + }); + } catch (err) { + res.status(500).json({ ok: false, error: err.message }); + } +}); + +// Create new tab +app.post('/tabs', async (req, res) => { + try { + const { userId, sessionKey, listItemId, url } = req.body; + // Accept both sessionKey (preferred) and listItemId (legacy) for backward compatibility + const resolvedSessionKey = sessionKey || listItemId; + if (!userId || !resolvedSessionKey) { + return res.status(400).json({ error: 'userId and sessionKey required' }); + } + + const session = await getSession(userId); + const group = getTabGroup(session, resolvedSessionKey); + + const page = await session.context.newPage(); + const tabId = crypto.randomUUID(); + const tabState = createTabState(page); + group.set(tabId, tabState); + + if (url) { + await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 }); + tabState.visitedUrls.add(url); + } + + console.log(`Tab ${tabId} created for user ${userId}, session ${resolvedSessionKey}`); + res.json({ tabId, url: page.url() }); + } catch (err) { + console.error('Create tab error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Navigate +app.post('/tabs/:tabId/navigate', async (req, res) => { + const tabId = req.params.tabId; + + try { + const { userId, url, macro, query } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + tabState.toolCalls++; + + let targetUrl = url; + if (macro) { + targetUrl = expandMacro(macro, query) || url; + } + + if (!targetUrl) { + return res.status(400).json({ error: 'url or macro required' }); + } + + // Serialize navigation operations on the same tab + const result = await withTabLock(tabId, async () => { + await tabState.page.goto(targetUrl, { waitUntil: 'domcontentloaded', timeout: 30000 }); + tabState.visitedUrls.add(targetUrl); + tabState.refs = await buildRefs(tabState.page); + return { ok: true, url: tabState.page.url() }; + }); + + logResponse(`POST /tabs/${tabId}/navigate`, result); + res.json(result); + } catch (err) { + console.error('Navigate error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Snapshot +app.get('/tabs/:tabId/snapshot', async (req, res) => { + try { + const userId = req.query.userId; + const format = req.query.format || 'text'; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, req.params.tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + tabState.toolCalls++; + tabState.refs = await buildRefs(tabState.page); + + const ariaYaml = await getAriaSnapshot(tabState.page); + + // Annotate YAML with ref IDs for interactive elements + let annotatedYaml = ariaYaml || ''; + if (annotatedYaml && tabState.refs.size > 0) { + // Build a map of role+name -> refId for annotation + const refsByKey = new Map(); + const seenCounts = new Map(); + for (const [refId, info] of tabState.refs) { + const key = `${info.role}:${info.name}:${info.nth}`; + refsByKey.set(key, refId); + } + + // Track occurrences while annotating + const annotationCounts = new Map(); + const lines = annotatedYaml.split('\n'); + // Must match buildRefs - excludes combobox to avoid date pickers/complex dropdowns + const interactiveRoles = [ + 'button', 'link', 'textbox', 'checkbox', 'radio', + 'menuitem', 'tab', 'searchbox', 'slider', 'spinbutton', 'switch' + ]; + const skipPatterns = [/date/i, /calendar/i, /picker/i, /datepicker/i]; + + annotatedYaml = lines.map(line => { + const match = line.match(/^(\s*-\s+)(\w+)(\s+"([^"]*)")?(.*)$/); + if (match) { + const [, prefix, role, nameMatch, name, suffix] = match; + const normalizedRole = role.toLowerCase(); + + // Skip combobox and date-related elements (same as buildRefs) + if (normalizedRole === 'combobox') return line; + if (name && skipPatterns.some(p => p.test(name))) return line; + + if (interactiveRoles.includes(normalizedRole)) { + const normalizedName = name || ''; + const countKey = `${normalizedRole}:${normalizedName}`; + const nth = annotationCounts.get(countKey) || 0; + annotationCounts.set(countKey, nth + 1); + + const key = `${normalizedRole}:${normalizedName}:${nth}`; + const refId = refsByKey.get(key); + if (refId) { + return `${prefix}${role}${nameMatch || ''} [${refId}]${suffix}`; + } + } + } + return line; + }).join('\n'); + } + + const result = { + url: tabState.page.url(), + snapshot: annotatedYaml, + refsCount: tabState.refs.size + }; + logResponse(`GET /tabs/${req.params.tabId}/snapshot`, result); + res.json(result); + } catch (err) { + console.error('Snapshot error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Wait for page ready +app.post('/tabs/:tabId/wait', async (req, res) => { + try { + const { userId, timeout = 10000, waitForNetwork = true } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, req.params.tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + const ready = await waitForPageReady(tabState.page, { timeout, waitForNetwork }); + + res.json({ ok: true, ready }); + } catch (err) { + console.error('Wait error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Click +app.post('/tabs/:tabId/click', async (req, res) => { + const tabId = req.params.tabId; + + try { + const { userId, ref, selector } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + tabState.toolCalls++; + + if (!ref && !selector) { + return res.status(400).json({ error: 'ref or selector required' }); + } + + const result = await withTabLock(tabId, async () => { + // Full mouse event sequence for stubborn JS click handlers (mirrors Swift WebView.swift) + // Dispatches: mouseover → mouseenter → mousedown → mouseup → click + const dispatchMouseSequence = async (locator) => { + const box = await locator.boundingBox(); + if (!box) throw new Error('Element not visible (no bounding box)'); + + const x = box.x + box.width / 2; + const y = box.y + box.height / 2; + + // Move mouse to element (triggers mouseover/mouseenter) + await tabState.page.mouse.move(x, y); + await tabState.page.waitForTimeout(50); + + // Full click sequence + await tabState.page.mouse.down(); + await tabState.page.waitForTimeout(50); + await tabState.page.mouse.up(); + + console.log(`🖱️ Dispatched full mouse sequence at (${x.toFixed(0)}, ${y.toFixed(0)})`); + }; + + const doClick = async (locatorOrSelector, isLocator) => { + const locator = isLocator ? locatorOrSelector : tabState.page.locator(locatorOrSelector); + + try { + // First try normal click (respects visibility, enabled, not-obscured) + await locator.click({ timeout: 5000 }); + } catch (err) { + // Fallback 1: If intercepted by overlay, retry with force + if (err.message.includes('intercepts pointer events')) { + console.log('Click intercepted, retrying with force:true'); + try { + await locator.click({ timeout: 5000, force: true }); + } catch (forceErr) { + // Fallback 2: Full mouse event sequence for stubborn JS handlers + console.log('Force click failed, trying full mouse sequence'); + await dispatchMouseSequence(locator); + } + } else if (err.message.includes('not visible') || err.message.includes('timeout')) { + // Fallback 2: Element not responding to click, try mouse sequence + console.log('Click timeout/not visible, trying full mouse sequence'); + await dispatchMouseSequence(locator); + } else { + throw err; + } + } + }; + + if (ref) { + const locator = refToLocator(tabState.page, ref, tabState.refs); + if (!locator) { + const maxRef = tabState.refs.size > 0 ? `e${tabState.refs.size}` : 'none'; + throw new Error(`Unknown ref: ${ref} (valid refs: e1-${maxRef}, ${tabState.refs.size} total). Refs reset after navigation - call snapshot first.`); + } + await doClick(locator, true); + } else { + await doClick(selector, false); + } + + await tabState.page.waitForTimeout(500); + tabState.refs = await buildRefs(tabState.page); + + const newUrl = tabState.page.url(); + tabState.visitedUrls.add(newUrl); + return { ok: true, url: newUrl }; + }); + + logResponse(`POST /tabs/${tabId}/click`, result); + res.json(result); + } catch (err) { + console.error('Click error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Type +app.post('/tabs/:tabId/type', async (req, res) => { + const tabId = req.params.tabId; + + try { + const { userId, ref, selector, text } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + tabState.toolCalls++; + + if (!ref && !selector) { + return res.status(400).json({ error: 'ref or selector required' }); + } + + await withTabLock(tabId, async () => { + if (ref) { + const locator = refToLocator(tabState.page, ref, tabState.refs); + if (!locator) throw new Error(`Unknown ref: ${ref}`); + await locator.fill(text, { timeout: 10000 }); + } else { + await tabState.page.fill(selector, text, { timeout: 10000 }); + } + }); + + res.json({ ok: true }); + } catch (err) { + console.error('Type error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Press key +app.post('/tabs/:tabId/press', async (req, res) => { + const tabId = req.params.tabId; + + try { + const { userId, key } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + tabState.toolCalls++; + + await withTabLock(tabId, async () => { + await tabState.page.keyboard.press(key); + }); + + res.json({ ok: true }); + } catch (err) { + console.error('Press error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Scroll +app.post('/tabs/:tabId/scroll', async (req, res) => { + try { + const { userId, direction = 'down', amount = 500 } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, req.params.tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + tabState.toolCalls++; + + const delta = direction === 'up' ? -amount : amount; + await tabState.page.mouse.wheel(0, delta); + await tabState.page.waitForTimeout(300); + + res.json({ ok: true }); + } catch (err) { + console.error('Scroll error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Back +app.post('/tabs/:tabId/back', async (req, res) => { + const tabId = req.params.tabId; + + try { + const { userId } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + tabState.toolCalls++; + + const result = await withTabLock(tabId, async () => { + await tabState.page.goBack({ timeout: 10000 }); + tabState.refs = await buildRefs(tabState.page); + return { ok: true, url: tabState.page.url() }; + }); + + res.json(result); + } catch (err) { + console.error('Back error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Forward +app.post('/tabs/:tabId/forward', async (req, res) => { + const tabId = req.params.tabId; + + try { + const { userId } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + tabState.toolCalls++; + + const result = await withTabLock(tabId, async () => { + await tabState.page.goForward({ timeout: 10000 }); + tabState.refs = await buildRefs(tabState.page); + return { ok: true, url: tabState.page.url() }; + }); + + res.json(result); + } catch (err) { + console.error('Forward error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Refresh +app.post('/tabs/:tabId/refresh', async (req, res) => { + const tabId = req.params.tabId; + + try { + const { userId } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + tabState.toolCalls++; + + const result = await withTabLock(tabId, async () => { + await tabState.page.reload({ timeout: 30000 }); + tabState.refs = await buildRefs(tabState.page); + return { ok: true, url: tabState.page.url() }; + }); + + res.json(result); + } catch (err) { + console.error('Refresh error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Get links +app.get('/tabs/:tabId/links', async (req, res) => { + try { + const userId = req.query.userId; + const limit = parseInt(req.query.limit) || 50; + const offset = parseInt(req.query.offset) || 0; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, req.params.tabId); + if (!found) { + console.log(`GET /tabs/${req.params.tabId}/links -> 404 (userId=${userId}, hasSession=${!!session}, sessionUsers=${[...sessions.keys()].join(',')})`); + return res.status(404).json({ error: 'Tab not found' }); + } + + const { tabState } = found; + tabState.toolCalls++; + + const allLinks = await tabState.page.evaluate(() => { + const links = []; + document.querySelectorAll('a[href]').forEach(a => { + const href = a.href; + const text = a.textContent?.trim().slice(0, 100) || ''; + if (href && href.startsWith('http')) { + links.push({ url: href, text }); + } + }); + return links; + }); + + const total = allLinks.length; + const paginated = allLinks.slice(offset, offset + limit); + + res.json({ + links: paginated, + pagination: { total, offset, limit, hasMore: offset + limit < total } + }); + } catch (err) { + console.error('Links error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Screenshot +app.get('/tabs/:tabId/screenshot', async (req, res) => { + try { + const userId = req.query.userId; + const fullPage = req.query.fullPage === 'true'; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, req.params.tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState } = found; + const buffer = await tabState.page.screenshot({ type: 'png', fullPage }); + res.set('Content-Type', 'image/png'); + res.send(buffer); + } catch (err) { + console.error('Screenshot error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Stats +app.get('/tabs/:tabId/stats', async (req, res) => { + try { + const userId = req.query.userId; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, req.params.tabId); + if (!found) return res.status(404).json({ error: 'Tab not found' }); + + const { tabState, listItemId } = found; + res.json({ + tabId: req.params.tabId, + sessionKey: listItemId, + listItemId, // Legacy compatibility + url: tabState.page.url(), + visitedUrls: Array.from(tabState.visitedUrls), + toolCalls: tabState.toolCalls, + refsCount: tabState.refs.size + }); + } catch (err) { + console.error('Stats error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Close tab +app.delete('/tabs/:tabId', async (req, res) => { + try { + const { userId } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, req.params.tabId); + if (found) { + await found.tabState.page.close(); + found.group.delete(req.params.tabId); + if (found.group.size === 0) { + session.tabGroups.delete(found.listItemId); + } + console.log(`Tab ${req.params.tabId} closed for user ${userId}`); + } + res.json({ ok: true }); + } catch (err) { + console.error('Close tab error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Close tab group +app.delete('/tabs/group/:listItemId', async (req, res) => { + try { + const { userId } = req.body; + const session = sessions.get(normalizeUserId(userId)); + const group = session?.tabGroups.get(req.params.listItemId); + if (group) { + for (const [tabId, tabState] of group) { + await tabState.page.close().catch(() => {}); + } + session.tabGroups.delete(req.params.listItemId); + console.log(`Tab group ${req.params.listItemId} closed for user ${userId}`); + } + res.json({ ok: true }); + } catch (err) { + console.error('Close tab group error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Close session +app.delete('/sessions/:userId', async (req, res) => { + try { + const userId = req.params.userId; + const session = sessions.get(normalizeUserId(userId)); + if (session) { + await session.context.close(); + sessions.delete(userId); + console.log(`Session closed for user ${userId}`); + } + res.json({ ok: true }); + } catch (err) { + console.error('Close session error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Cleanup stale sessions +setInterval(() => { + const now = Date.now(); + for (const [userId, session] of sessions) { + if (now - session.lastAccess > SESSION_TIMEOUT_MS) { + session.context.close().catch(() => {}); + sessions.delete(userId); + console.log(`Session expired for user ${userId}`); + } + } +}, 60_000); + +// ============================================================================= +// OpenClaw-compatible endpoint aliases +// These allow camoufox to be used as a profile backend for OpenClaw's browser tool +// ============================================================================= + +// GET / - Status (alias for GET /health) +app.get('/', async (req, res) => { + try { + const b = await ensureBrowser(); + res.json({ + ok: true, + enabled: true, + running: b.isConnected(), + engine: 'camoufox', + sessions: sessions.size, + browserConnected: b.isConnected() + }); + } catch (err) { + res.status(500).json({ ok: false, error: err.message }); + } +}); + +// GET /tabs - List all tabs (OpenClaw expects this) +app.get('/tabs', async (req, res) => { + try { + const userId = req.query.userId; + const session = sessions.get(normalizeUserId(userId)); + + if (!session) { + return res.json({ running: true, tabs: [] }); + } + + const tabs = []; + for (const [listItemId, group] of session.tabGroups) { + for (const [tabId, tabState] of group) { + tabs.push({ + targetId: tabId, + tabId, + url: tabState.page.url(), + title: await tabState.page.title().catch(() => ''), + listItemId + }); + } + } + + res.json({ running: true, tabs }); + } catch (err) { + console.error('List tabs error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// POST /tabs/open - Open tab (alias for POST /tabs, OpenClaw format) +app.post('/tabs/open', async (req, res) => { + try { + const { url, userId = 'openclaw', listItemId = 'default' } = req.body; + if (!url) { + return res.status(400).json({ error: 'url is required' }); + } + + const session = await getSession(userId); + const group = getTabGroup(session, listItemId); + + const page = await session.context.newPage(); + const tabId = crypto.randomUUID(); + const tabState = createTabState(page); + group.set(tabId, tabState); + + await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 }); + tabState.visitedUrls.add(url); + + console.log(`[OpenClaw] Tab ${tabId} opened: ${url}`); + res.json({ + ok: true, + targetId: tabId, + tabId, + url: page.url(), + title: await page.title().catch(() => '') + }); + } catch (err) { + console.error('Open tab error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// POST /start - Start browser (OpenClaw expects this) +app.post('/start', async (req, res) => { + try { + await ensureBrowser(); + res.json({ ok: true, profile: 'camoufox' }); + } catch (err) { + res.status(500).json({ ok: false, error: err.message }); + } +}); + +// POST /stop - Stop browser (OpenClaw expects this) +app.post('/stop', async (req, res) => { + try { + if (browser) { + await browser.close().catch(() => {}); + browser = null; + } + sessions.clear(); + res.json({ ok: true, stopped: true, profile: 'camoufox' }); + } catch (err) { + res.status(500).json({ ok: false, error: err.message }); + } +}); + +// POST /navigate - Navigate (OpenClaw format with targetId in body) +app.post('/navigate', async (req, res) => { + try { + const { targetId, url, userId = 'openclaw' } = req.body; + if (!url) { + return res.status(400).json({ error: 'url is required' }); + } + + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, targetId); + if (!found) { + return res.status(404).json({ error: 'Tab not found' }); + } + + const { tabState } = found; + tabState.toolCalls++; + + const result = await withTabLock(targetId, async () => { + await tabState.page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 }); + tabState.visitedUrls.add(url); + tabState.refs = await buildRefs(tabState.page); + return { ok: true, targetId, url: tabState.page.url() }; + }); + + res.json(result); + } catch (err) { + console.error('Navigate error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// GET /snapshot - Snapshot (OpenClaw format with query params) +app.get('/snapshot', async (req, res) => { + try { + const { targetId, userId = 'openclaw', format = 'text' } = req.query; + + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, targetId); + if (!found) { + return res.status(404).json({ error: 'Tab not found' }); + } + + const { tabState } = found; + tabState.toolCalls++; + tabState.refs = await buildRefs(tabState.page); + + const ariaYaml = await getAriaSnapshot(tabState.page); + + // Annotate YAML with ref IDs + let annotatedYaml = ariaYaml || ''; + if (annotatedYaml && tabState.refs.size > 0) { + const refsByKey = new Map(); + for (const [refId, el] of tabState.refs) { + const key = `${el.role}:${el.name || ''}`; + if (!refsByKey.has(key)) refsByKey.set(key, refId); + } + + const lines = annotatedYaml.split('\n'); + annotatedYaml = lines.map(line => { + const match = line.match(/^(\s*)-\s+(\w+)(?:\s+"([^"]*)")?/); + if (match) { + const [, indent, role, name] = match; + const key = `${role}:${name || ''}`; + const refId = refsByKey.get(key); + if (refId) { + return line.replace(/^(\s*-\s+\w+)/, `$1 [${refId}]`); + } + } + return line; + }).join('\n'); + } + + res.json({ + ok: true, + format: 'aria', + targetId, + url: tabState.page.url(), + snapshot: annotatedYaml, + refsCount: tabState.refs.size + }); + } catch (err) { + console.error('Snapshot error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// POST /act - Combined action endpoint (OpenClaw format) +// Routes to click/type/scroll/press/etc based on 'kind' parameter +app.post('/act', async (req, res) => { + try { + const { kind, targetId, userId = 'openclaw', ...params } = req.body; + + if (!kind) { + return res.status(400).json({ error: 'kind is required' }); + } + + const session = sessions.get(normalizeUserId(userId)); + const found = session && findTab(session, targetId); + if (!found) { + return res.status(404).json({ error: 'Tab not found' }); + } + + const { tabState } = found; + tabState.toolCalls++; + + const result = await withTabLock(targetId, async () => { + switch (kind) { + case 'click': { + const { ref, selector, doubleClick } = params; + if (!ref && !selector) { + throw new Error('ref or selector required'); + } + + const doClick = async (locatorOrSelector, isLocator) => { + const locator = isLocator ? locatorOrSelector : tabState.page.locator(locatorOrSelector); + const clickOpts = { timeout: 5000 }; + if (doubleClick) clickOpts.clickCount = 2; + + try { + await locator.click(clickOpts); + } catch (err) { + if (err.message.includes('intercepts pointer events')) { + await locator.click({ ...clickOpts, force: true }); + } else { + throw err; + } + } + }; + + if (ref) { + const locator = refToLocator(tabState.page, ref, tabState.refs); + if (!locator) throw new Error(`Unknown ref: ${ref}`); + await doClick(locator, true); + } else { + await doClick(selector, false); + } + + await tabState.page.waitForTimeout(500); + tabState.refs = await buildRefs(tabState.page); + return { ok: true, targetId, url: tabState.page.url() }; + } + + case 'type': { + const { ref, selector, text, submit } = params; + if (!ref && !selector) { + throw new Error('ref or selector required'); + } + if (typeof text !== 'string') { + throw new Error('text is required'); + } + + if (ref) { + const locator = refToLocator(tabState.page, ref, tabState.refs); + if (!locator) throw new Error(`Unknown ref: ${ref}`); + await locator.fill(text, { timeout: 10000 }); + if (submit) await tabState.page.keyboard.press('Enter'); + } else { + await tabState.page.fill(selector, text, { timeout: 10000 }); + if (submit) await tabState.page.keyboard.press('Enter'); + } + return { ok: true, targetId }; + } + + case 'press': { + const { key } = params; + if (!key) throw new Error('key is required'); + await tabState.page.keyboard.press(key); + return { ok: true, targetId }; + } + + case 'scroll': + case 'scrollIntoView': { + const { ref, direction = 'down', amount = 500 } = params; + if (ref) { + const locator = refToLocator(tabState.page, ref, tabState.refs); + if (!locator) throw new Error(`Unknown ref: ${ref}`); + await locator.scrollIntoViewIfNeeded({ timeout: 5000 }); + } else { + const delta = direction === 'up' ? -amount : amount; + await tabState.page.mouse.wheel(0, delta); + } + await tabState.page.waitForTimeout(300); + return { ok: true, targetId }; + } + + case 'hover': { + const { ref, selector } = params; + if (!ref && !selector) throw new Error('ref or selector required'); + + if (ref) { + const locator = refToLocator(tabState.page, ref, tabState.refs); + if (!locator) throw new Error(`Unknown ref: ${ref}`); + await locator.hover({ timeout: 5000 }); + } else { + await tabState.page.locator(selector).hover({ timeout: 5000 }); + } + return { ok: true, targetId }; + } + + case 'wait': { + const { timeMs, text, loadState } = params; + if (timeMs) { + await tabState.page.waitForTimeout(timeMs); + } else if (text) { + await tabState.page.waitForSelector(`text=${text}`, { timeout: 30000 }); + } else if (loadState) { + await tabState.page.waitForLoadState(loadState, { timeout: 30000 }); + } + return { ok: true, targetId, url: tabState.page.url() }; + } + + case 'close': { + await tabState.page.close(); + found.group.delete(targetId); + return { ok: true, targetId }; + } + + default: + throw new Error(`Unsupported action kind: ${kind}`); + } + }); + + res.json(result); + } catch (err) { + console.error('Act error:', err); + res.status(500).json({ error: err.message }); + } +}); + +// Graceful shutdown +process.on('SIGTERM', async () => { + console.log('Shutting down...'); + for (const [userId, session] of sessions) { + await session.context.close().catch(() => {}); + } + if (browser) await browser.close().catch(() => {}); + process.exit(0); +}); + +const PORT = process.env.PORT || 9377; +app.listen(PORT, async () => { + console.log(`🦊 camofox-browser listening on port ${PORT}`); + // Pre-launch browser so it's ready for first request + await ensureBrowser().catch(err => { + console.error('Failed to pre-launch browser:', err.message); + }); +}); diff --git a/tests/e2e/concurrency.test.js b/tests/e2e/concurrency.test.js new file mode 100644 index 0000000..80ec82f --- /dev/null +++ b/tests/e2e/concurrency.test.js @@ -0,0 +1,103 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { startTestSite, stopTestSite, getTestSiteUrl } = require('../helpers/testSite'); +const { createClient } = require('../helpers/client'); + +describe('Concurrency', () => { + let serverUrl; + let testSiteUrl; + + beforeAll(async () => { + const port = await startServer(); + serverUrl = getServerUrl(); + + const testPort = await startTestSite(); + testSiteUrl = getTestSiteUrl(); + }, 120000); + + afterAll(async () => { + await stopTestSite(); + await stopServer(); + }, 30000); + + test('concurrent operations on same tab are serialized', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/pageA`); + + // Fire multiple operations concurrently on the same tab + const operations = [ + client.getSnapshot(tabId), + client.navigate(tabId, `${testSiteUrl}/pageB`), + client.getSnapshot(tabId), + ]; + + // All should complete without errors (tab locking serializes them) + const results = await Promise.all(operations); + + expect(results.length).toBe(3); + // Each result should be valid (no crashes) + results.forEach(r => expect(r).toBeDefined()); + } finally { + await client.cleanup(); + } + }); + + test('parallel operations on different tabs work', async () => { + const client = createClient(serverUrl); + + try { + // Create two tabs + const tab1 = await client.createTab(`${testSiteUrl}/pageA`); + const tab2 = await client.createTab(`${testSiteUrl}/pageB`); + + // Run operations on both tabs in parallel + const [snap1, snap2] = await Promise.all([ + client.getSnapshot(tab1.tabId), + client.getSnapshot(tab2.tabId), + ]); + + // Both should return valid snapshots + expect(snap1.snapshot).toContain('Page A'); + expect(snap2.snapshot).toContain('Page B'); + } finally { + await client.cleanup(); + } + }); + + test('multiple clients can work independently', async () => { + const client1 = createClient(serverUrl); + const client2 = createClient(serverUrl); + + try { + // Each client creates their own tab + const [tab1, tab2] = await Promise.all([ + client1.createTab(`${testSiteUrl}/pageA`), + client2.createTab(`${testSiteUrl}/pageB`), + ]); + + // Verify they are independent + expect(tab1.tabId).not.toBe(tab2.tabId); + expect(client1.userId).not.toBe(client2.userId); + + // Both can operate independently + const [snap1, snap2] = await Promise.all([ + client1.getSnapshot(tab1.tabId), + client2.getSnapshot(tab2.tabId), + ]); + + expect(snap1.snapshot).toContain('Page A'); + expect(snap2.snapshot).toContain('Page B'); + + // Closing one client's session doesn't affect the other + await client1.closeSession(); + + // Client 2 still works + const snap2After = await client2.getSnapshot(tab2.tabId); + expect(snap2After.snapshot).toContain('Page B'); + } finally { + await client1.cleanup(); + await client2.cleanup(); + } + }); +}); diff --git a/tests/e2e/formSubmission.test.js b/tests/e2e/formSubmission.test.js new file mode 100644 index 0000000..ddee3fb --- /dev/null +++ b/tests/e2e/formSubmission.test.js @@ -0,0 +1,129 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { startTestSite, stopTestSite, getTestSiteUrl } = require('../helpers/testSite'); +const { createClient } = require('../helpers/client'); + +describe('Form Submission', () => { + let serverUrl; + let testSiteUrl; + + beforeAll(async () => { + const port = await startServer(); + serverUrl = getServerUrl(); + + const testPort = await startTestSite(); + testSiteUrl = getTestSiteUrl(); + }, 120000); + + afterAll(async () => { + await stopTestSite(); + await stopServer(); + }, 30000); + + test('fill form fields and submit via button click', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/form`); + + // Fill username + await client.type(tabId, { + selector: '#username', + text: 'testuser' + }); + + // Fill email + await client.type(tabId, { + selector: '#email', + text: 'test@example.com' + }); + + // Click submit button + await client.click(tabId, { + selector: '#submitBtn' + }); + + // Wait for form submission and navigation + const snapshot = await client.waitForUrl(tabId, '/submitted'); + + expect(snapshot.url).toContain('/submitted'); + expect(snapshot.snapshot).toContain('Form Submitted Successfully'); + expect(snapshot.snapshot).toContain('Username: testuser'); + expect(snapshot.snapshot).toContain('Email: test@example.com'); + } finally { + await client.cleanup(); + } + }); + + test('click button on page', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/click`); + + // Initial state + let snapshot = await client.getSnapshot(tabId); + expect(snapshot.snapshot).not.toContain('Button was clicked!'); + + // Click the button + await client.click(tabId, { + selector: '#clickMe' + }); + + // Verify click effect + snapshot = await client.waitForSnapshotContains(tabId, 'Button was clicked!'); + expect(snapshot.snapshot).toContain('Button was clicked!'); + } finally { + await client.cleanup(); + } + }); + + test('click using ref', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/click`); + + // Get snapshot to find button ref + const snapshot = await client.getSnapshot(tabId); + + // Find ref for "Click Me" button + const match = snapshot.snapshot.match(/\[(e\d+)\].*button.*Click Me/i); + + if (match) { + const ref = match[1]; + await client.click(tabId, { ref }); + + const updatedSnapshot = await client.waitForSnapshotContains(tabId, 'Button was clicked!'); + expect(updatedSnapshot.snapshot).toContain('Button was clicked!'); + } else { + // Fallback to selector + await client.click(tabId, { selector: '#clickMe' }); + const updatedSnapshot = await client.waitForSnapshotContains(tabId, 'Button was clicked!'); + expect(updatedSnapshot.snapshot).toContain('Button was clicked!'); + } + } finally { + await client.cleanup(); + } + }); + + test('click link to navigate', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/pageA`); + + // Click the link to page B + await client.click(tabId, { + selector: 'a[href="/pageB"]' + }); + + // Wait for navigation + const snapshot = await client.waitForUrl(tabId, '/pageB'); + + expect(snapshot.url).toContain('/pageB'); + expect(snapshot.snapshot).toContain('Page B'); + } finally { + await client.cleanup(); + } + }); +}); diff --git a/tests/e2e/macroNavigation.test.js b/tests/e2e/macroNavigation.test.js new file mode 100644 index 0000000..04e59ff --- /dev/null +++ b/tests/e2e/macroNavigation.test.js @@ -0,0 +1,92 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { startTestSite, stopTestSite, getTestSiteUrl } = require('../helpers/testSite'); +const { createClient } = require('../helpers/client'); + +describe('Macro Navigation', () => { + let serverUrl; + let testSiteUrl; + + beforeAll(async () => { + const port = await startServer(); + serverUrl = getServerUrl(); + + const testPort = await startTestSite(); + testSiteUrl = getTestSiteUrl(); + }, 120000); + + afterAll(async () => { + await stopTestSite(); + await stopServer(); + }, 30000); + + test('unknown macro returns error when no fallback URL', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + await expect(client.navigate(tabId, '@nonexistent_macro test query')) + .rejects.toThrow(/url or macro required/); + } finally { + await client.cleanup(); + } + }); + + test('client parses @macro syntax correctly', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + // Navigate to a real URL first so we have a valid tab + await client.navigate(tabId, `${testSiteUrl}/pageA`); + + // Now try an unknown macro - if client parsing works, + // server will receive {macro: "@unknown", query: "with spaces"} + // and return "url or macro required" error + await expect(client.navigate(tabId, '@unknown with spaces')) + .rejects.toThrow(/url or macro required/); + } finally { + await client.cleanup(); + } + }); + + test('regular URL still works after macro changes', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + // Regular URL should still work + const result = await client.navigate(tabId, `${testSiteUrl}/pageA`); + + expect(result.ok).toBe(true); + expect(result.url).toContain('/pageA'); + + const snapshot = await client.getSnapshot(tabId); + expect(snapshot.snapshot).toContain('Page A'); + } finally { + await client.cleanup(); + } + }); + + test('navigate API accepts macro and query params directly', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + // Test the raw API with macro param directly (bypass client parsing) + // Unknown macro should fail + await expect( + client.request('POST', `/tabs/${tabId}/navigate`, { + userId: client.userId, + macro: '@fake_macro', + query: 'test' + }) + ).rejects.toThrow(/url or macro required/); + } finally { + await client.cleanup(); + } + }); +}); diff --git a/tests/e2e/navigation.test.js b/tests/e2e/navigation.test.js new file mode 100644 index 0000000..fc128f0 --- /dev/null +++ b/tests/e2e/navigation.test.js @@ -0,0 +1,128 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { startTestSite, stopTestSite, getTestSiteUrl } = require('../helpers/testSite'); +const { createClient } = require('../helpers/client'); + +describe('Navigation', () => { + let serverUrl; + let testSiteUrl; + + beforeAll(async () => { + const port = await startServer(); + serverUrl = getServerUrl(); + + const testPort = await startTestSite(); + testSiteUrl = getTestSiteUrl(); + }, 120000); + + afterAll(async () => { + await stopTestSite(); + await stopServer(); + }, 30000); + + test('navigate to URL', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + const result = await client.navigate(tabId, `${testSiteUrl}/pageA`); + + expect(result.ok).toBe(true); + expect(result.url).toContain('/pageA'); + + const snapshot = await client.getSnapshot(tabId); + expect(snapshot.snapshot).toContain('Welcome to Page A'); + } finally { + await client.cleanup(); + } + }); + + test('navigate back', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/pageA`); + await client.navigate(tabId, `${testSiteUrl}/pageB`); + + // Verify we're on page B + let snapshot = await client.getSnapshot(tabId); + expect(snapshot.snapshot).toContain('Page B'); + + // Go back + const result = await client.back(tabId); + expect(result.ok).toBe(true); + expect(result.url).toContain('/pageA'); + + snapshot = await client.getSnapshot(tabId); + expect(snapshot.snapshot).toContain('Page A'); + } finally { + await client.cleanup(); + } + }); + + test('navigate forward', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/pageA`); + await client.navigate(tabId, `${testSiteUrl}/pageB`); + await client.back(tabId); + + // Verify we're back on page A + let snapshot = await client.getSnapshot(tabId); + expect(snapshot.snapshot).toContain('Page A'); + + // Go forward + const result = await client.forward(tabId); + expect(result.ok).toBe(true); + expect(result.url).toContain('/pageB'); + + snapshot = await client.getSnapshot(tabId); + expect(snapshot.snapshot).toContain('Page B'); + } finally { + await client.cleanup(); + } + }); + + test('refresh page', async () => { + const client = createClient(serverUrl); + + try { + // Use the refresh counter page + const { tabId } = await client.createTab(`${testSiteUrl}/refresh-test`); + + let snapshot = await client.getSnapshot(tabId); + const initialMatch = snapshot.snapshot.match(/Count: (\d+)/); + const initialCount = initialMatch ? parseInt(initialMatch[1]) : 0; + + // Refresh the page + const result = await client.refresh(tabId); + expect(result.ok).toBe(true); + + snapshot = await client.getSnapshot(tabId); + const newMatch = snapshot.snapshot.match(/Count: (\d+)/); + const newCount = newMatch ? parseInt(newMatch[1]) : 0; + + // Count should have incremented + expect(newCount).toBe(initialCount + 1); + } finally { + await client.cleanup(); + } + }); + + test('navigation updates visited URLs', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/pageA`); + await client.navigate(tabId, `${testSiteUrl}/pageB`); + + const stats = await client.getStats(tabId); + + expect(stats.visitedUrls).toContain(`${testSiteUrl}/pageA`); + expect(stats.visitedUrls).toContain(`${testSiteUrl}/pageB`); + } finally { + await client.cleanup(); + } + }); +}); diff --git a/tests/e2e/scroll.test.js b/tests/e2e/scroll.test.js new file mode 100644 index 0000000..1a64c4b --- /dev/null +++ b/tests/e2e/scroll.test.js @@ -0,0 +1,81 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { startTestSite, stopTestSite, getTestSiteUrl } = require('../helpers/testSite'); +const { createClient } = require('../helpers/client'); + +describe('Scroll', () => { + let serverUrl; + let testSiteUrl; + + beforeAll(async () => { + const port = await startServer(); + serverUrl = getServerUrl(); + + const testPort = await startTestSite(); + testSiteUrl = getTestSiteUrl(); + }, 120000); + + afterAll(async () => { + await stopTestSite(); + await stopServer(); + }, 30000); + + test('scroll down page', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/scroll`); + + // Scroll down + const result = await client.scroll(tabId, { + direction: 'down', + amount: 500 + }); + + expect(result.ok).toBe(true); + } finally { + await client.cleanup(); + } + }); + + test('scroll to bottom of page', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/scroll`); + + // Scroll to bottom + const result = await client.scroll(tabId, { + direction: 'down', + amount: 10000 // Large number to reach bottom + }); + + expect(result.ok).toBe(true); + + // The snapshot might now include "Bottom of page" text + // (depending on viewport and scroll behavior) + } finally { + await client.cleanup(); + } + }); + + test('scroll up page', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/scroll`); + + // First scroll down + await client.scroll(tabId, { direction: 'down', amount: 1000 }); + + // Then scroll up + const result = await client.scroll(tabId, { + direction: 'up', + amount: 500 + }); + + expect(result.ok).toBe(true); + } finally { + await client.cleanup(); + } + }); +}); diff --git a/tests/e2e/snapshotLinks.test.js b/tests/e2e/snapshotLinks.test.js new file mode 100644 index 0000000..8b2f7cc --- /dev/null +++ b/tests/e2e/snapshotLinks.test.js @@ -0,0 +1,141 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { startTestSite, stopTestSite, getTestSiteUrl } = require('../helpers/testSite'); +const { createClient } = require('../helpers/client'); + +describe('Snapshot and Links', () => { + let serverUrl; + let testSiteUrl; + + beforeAll(async () => { + const port = await startServer(); + serverUrl = getServerUrl(); + + const testPort = await startTestSite(); + testSiteUrl = getTestSiteUrl(); + }, 120000); + + afterAll(async () => { + await stopTestSite(); + await stopServer(); + }, 30000); + + test('get snapshot returns page content', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/pageA`); + + const snapshot = await client.getSnapshot(tabId); + + expect(snapshot.url).toContain('/pageA'); + expect(snapshot.snapshot).toBeDefined(); + expect(typeof snapshot.snapshot).toBe('string'); + expect(snapshot.snapshot).toContain('Page A'); + expect(snapshot.refsCount).toBeDefined(); + } finally { + await client.cleanup(); + } + }); + + test('snapshot contains element refs', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/links`); + + const snapshot = await client.getSnapshot(tabId); + + // Snapshot should contain ref markers like [e1], [e2], etc. + expect(snapshot.snapshot).toMatch(/\[e\d+\]/); + } finally { + await client.cleanup(); + } + }); + + test('get links returns all links on page', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/links`); + + const result = await client.getLinks(tabId); + + expect(result.links).toBeDefined(); + expect(Array.isArray(result.links)).toBe(true); + expect(result.links.length).toBe(5); + + // Check link structure + const link = result.links[0]; + expect(link.url).toContain('example.com'); + expect(link.text).toBeDefined(); + + // Check pagination info + expect(result.pagination).toBeDefined(); + expect(result.pagination.total).toBe(5); + } finally { + await client.cleanup(); + } + }); + + test('get links supports pagination', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/links`); + + // Get first 2 links + const page1 = await client.getLinks(tabId, { limit: 2, offset: 0 }); + expect(page1.links.length).toBe(2); + expect(page1.pagination.hasMore).toBe(true); + + // Get next 2 links + const page2 = await client.getLinks(tabId, { limit: 2, offset: 2 }); + expect(page2.links.length).toBe(2); + expect(page2.pagination.hasMore).toBe(true); + + // Get last link + const page3 = await client.getLinks(tabId, { limit: 2, offset: 4 }); + expect(page3.links.length).toBe(1); + expect(page3.pagination.hasMore).toBe(false); + + // Links should be different + expect(page1.links[0].url).not.toBe(page2.links[0].url); + } finally { + await client.cleanup(); + } + }); + + test('screenshot returns PNG buffer', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/pageA`); + + const buffer = await client.screenshot(tabId); + + expect(buffer).toBeDefined(); + expect(buffer.byteLength).toBeGreaterThan(0); + + // Check PNG magic bytes + const bytes = new Uint8Array(buffer); + expect(bytes[0]).toBe(0x89); + expect(bytes[1]).toBe(0x50); // P + expect(bytes[2]).toBe(0x4E); // N + expect(bytes[3]).toBe(0x47); // G + } finally { + await client.cleanup(); + } + }); + + test('snapshot for non-existent tab returns 404', async () => { + const client = createClient(serverUrl); + + try { + await expect(client.getSnapshot('non-existent-tab-id')).rejects.toMatchObject({ + status: 404 + }); + } finally { + await client.cleanup(); + } + }); +}); diff --git a/tests/e2e/tabLifecycle.test.js b/tests/e2e/tabLifecycle.test.js new file mode 100644 index 0000000..fe11396 --- /dev/null +++ b/tests/e2e/tabLifecycle.test.js @@ -0,0 +1,149 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { startTestSite, stopTestSite, getTestSiteUrl } = require('../helpers/testSite'); +const { createClient } = require('../helpers/client'); + +describe('Tab Lifecycle', () => { + let serverUrl; + let testSiteUrl; + + beforeAll(async () => { + const port = await startServer(); + serverUrl = getServerUrl(); + + const testPort = await startTestSite(); + testSiteUrl = getTestSiteUrl(); + }, 120000); + + afterAll(async () => { + await stopTestSite(); + await stopServer(); + }, 30000); + + test('health check returns camoufox engine', async () => { + const client = createClient(serverUrl); + const health = await client.health(); + + expect(health.ok).toBe(true); + expect(health.engine).toBe('camoufox'); + }); + + test('create tab without URL', async () => { + const client = createClient(serverUrl); + + try { + const result = await client.createTab(); + + expect(result.tabId).toBeDefined(); + expect(typeof result.tabId).toBe('string'); + expect(result.url).toBe('about:blank'); + } finally { + await client.cleanup(); + } + }); + + test('create tab with URL', async () => { + const client = createClient(serverUrl); + + try { + const result = await client.createTab(`${testSiteUrl}/pageA`); + + expect(result.tabId).toBeDefined(); + expect(result.url).toContain('/pageA'); + + const snapshot = await client.getSnapshot(result.tabId); + expect(snapshot.snapshot).toContain('Page A'); + } finally { + await client.cleanup(); + } + }); + + test('create multiple tabs in same group', async () => { + const client = createClient(serverUrl); + + try { + const tab1 = await client.createTab(`${testSiteUrl}/pageA`); + const tab2 = await client.createTab(`${testSiteUrl}/pageB`); + + expect(tab1.tabId).not.toBe(tab2.tabId); + + const snapshot1 = await client.getSnapshot(tab1.tabId); + const snapshot2 = await client.getSnapshot(tab2.tabId); + + expect(snapshot1.snapshot).toContain('Page A'); + expect(snapshot2.snapshot).toContain('Page B'); + } finally { + await client.cleanup(); + } + }); + + test('close individual tab', async () => { + const client = createClient(serverUrl); + + try { + const tab1 = await client.createTab(`${testSiteUrl}/pageA`); + const tab2 = await client.createTab(`${testSiteUrl}/pageB`); + + await client.closeTab(tab1.tabId); + + // Tab 1 should be gone + await expect(client.getSnapshot(tab1.tabId)).rejects.toThrow(); + + // Tab 2 should still work + const snapshot2 = await client.getSnapshot(tab2.tabId); + expect(snapshot2.snapshot).toContain('Page B'); + } finally { + await client.cleanup(); + } + }); + + test('close tab group', async () => { + const client = createClient(serverUrl); + + try { + const tab1 = await client.createTab(`${testSiteUrl}/pageA`); + const tab2 = await client.createTab(`${testSiteUrl}/pageB`); + + await client.closeTabGroup(); + + // Both tabs should be gone + await expect(client.getSnapshot(tab1.tabId)).rejects.toThrow(); + await expect(client.getSnapshot(tab2.tabId)).rejects.toThrow(); + } finally { + await client.cleanup(); + } + }); + + test('close session clears all tabs', async () => { + const client = createClient(serverUrl); + + const tab = await client.createTab(`${testSiteUrl}/pageA`); + + await client.closeSession(); + + // Tab should be gone after session close + await expect(client.getSnapshot(tab.tabId)).rejects.toThrow(); + }); + + test('tab stats are tracked correctly', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/pageA`); + + // Make some operations + await client.getSnapshot(tabId); + await client.navigate(tabId, `${testSiteUrl}/pageB`); + await client.getSnapshot(tabId); + + const stats = await client.getStats(tabId); + + expect(stats.tabId).toBe(tabId); + expect(stats.sessionKey).toBe(client.sessionKey); + expect(stats.url).toContain('/pageB'); + expect(stats.toolCalls).toBeGreaterThan(0); + expect(stats.visitedUrls).toContain(`${testSiteUrl}/pageA`); + } finally { + await client.cleanup(); + } + }); +}); diff --git a/tests/e2e/typingEnter.test.js b/tests/e2e/typingEnter.test.js new file mode 100644 index 0000000..a9c565c --- /dev/null +++ b/tests/e2e/typingEnter.test.js @@ -0,0 +1,147 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { startTestSite, stopTestSite, getTestSiteUrl } = require('../helpers/testSite'); +const { createClient } = require('../helpers/client'); + +describe('Typing and Enter', () => { + let serverUrl; + let testSiteUrl; + + beforeAll(async () => { + const port = await startServer(); + serverUrl = getServerUrl(); + + const testPort = await startTestSite(); + testSiteUrl = getTestSiteUrl(); + }, 120000); + + afterAll(async () => { + await stopTestSite(); + await stopServer(); + }, 30000); + + test('type text into input field', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/typing`); + + // Type using selector + const result = await client.type(tabId, { + selector: '#input', + text: 'Hello World' + }); + + expect(result.ok).toBe(true); + + // Verify the text appears in preview + const snapshot = await client.waitForSnapshotContains(tabId, 'Preview: Hello World'); + expect(snapshot.snapshot).toContain('Hello World'); + } finally { + await client.cleanup(); + } + }); + + test('type text using ref', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/typing`); + + // Get snapshot to find the input ref + const snapshot = await client.getSnapshot(tabId); + + // Find a ref for the textbox (look for pattern like [e1] textbox) + const match = snapshot.snapshot.match(/\[(e\d+)\].*textbox/i); + if (!match) { + // Try by selector if ref not found + await client.type(tabId, { selector: '#input', text: 'Test via selector' }); + } else { + const ref = match[1]; + await client.type(tabId, { ref, text: 'Test via ref' }); + } + + const updatedSnapshot = await client.getSnapshot(tabId); + expect(updatedSnapshot.snapshot).toMatch(/Preview: Test via (ref|selector)/); + } finally { + await client.cleanup(); + } + }); + + test('type and press Enter navigates page', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/enter`); + + // Type and press Enter + await client.type(tabId, { + selector: '#searchInput', + text: 'test query', + pressEnter: true + }); + + // Wait for navigation to /entered + const snapshot = await client.waitForUrl(tabId, '/entered'); + + expect(snapshot.url).toContain('/entered'); + expect(snapshot.url).toContain('value=test%20query'); + expect(snapshot.snapshot).toContain('Entered: test query'); + } finally { + await client.cleanup(); + } + }); + + test('type without Enter does not navigate', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/enter`); + + // Type without pressing Enter + await client.type(tabId, { + selector: '#searchInput', + text: 'should not navigate', + pressEnter: false + }); + + // Wait a bit to ensure no navigation happened + await new Promise(r => setTimeout(r, 500)); + + const snapshot = await client.getSnapshot(tabId); + expect(snapshot.url).toContain('/enter'); + expect(snapshot.url).not.toContain('/entered'); + } finally { + await client.cleanup(); + } + }); + + test('type replaces existing content', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(`${testSiteUrl}/typing`); + + // Type first text + await client.type(tabId, { + selector: '#input', + text: 'First text' + }); + + let snapshot = await client.waitForSnapshotContains(tabId, 'Preview: First text'); + expect(snapshot.snapshot).toContain('First text'); + + // Type second text (should replace due to clear behavior) + await client.type(tabId, { + selector: '#input', + text: 'Second text', + clear: true + }); + + snapshot = await client.waitForSnapshotContains(tabId, 'Preview: Second text'); + expect(snapshot.snapshot).toContain('Second text'); + expect(snapshot.snapshot).not.toContain('First text'); + } finally { + await client.cleanup(); + } + }); +}); diff --git a/tests/helpers/client.js b/tests/helpers/client.js new file mode 100644 index 0000000..777d6f8 --- /dev/null +++ b/tests/helpers/client.js @@ -0,0 +1,223 @@ +const crypto = require('crypto'); + +class BrowserClient { + constructor(baseUrl) { + this.baseUrl = baseUrl; + this.userId = crypto.randomUUID(); + this.sessionKey = crypto.randomUUID(); + this.listItemId = this.sessionKey; // Legacy alias + this.tabs = []; + this.timeout = 30000; // 30 second default timeout + } + + async request(method, path, body = null, options = {}) { + const url = `${this.baseUrl}${path}`; + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), options.timeout || this.timeout); + + try { + const fetchOptions = { + method, + headers: { 'Content-Type': 'application/json' }, + signal: controller.signal + }; + + if (body) { + fetchOptions.body = JSON.stringify(body); + } + + const response = await fetch(url, fetchOptions); + clearTimeout(timeoutId); + + const contentType = response.headers.get('content-type'); + if (contentType?.includes('application/json')) { + const data = await response.json(); + if (!response.ok) { + const error = new Error(data.error || `HTTP ${response.status}`); + error.status = response.status; + error.data = data; + throw error; + } + return data; + } else if (contentType?.includes('image/')) { + return await response.arrayBuffer(); + } else { + return await response.text(); + } + } catch (err) { + clearTimeout(timeoutId); + if (err.name === 'AbortError') { + throw new Error(`Request timeout after ${options.timeout || this.timeout}ms: ${method} ${path}`); + } + throw err; + } + } + + // Health check + async health() { + return this.request('GET', '/health'); + } + + // Tab management + async createTab(url = null) { + const body = { userId: this.userId, sessionKey: this.sessionKey }; + if (url) body.url = url; + + const result = await this.request('POST', '/tabs', body); + if (result.tabId) { + this.tabs.push(result.tabId); + } + return result; + } + + async navigate(tabId, urlOrMacro) { + // Support both regular URLs and @macro syntax + if (urlOrMacro.startsWith('@')) { + const [macro, ...queryParts] = urlOrMacro.split(' '); + const query = queryParts.join(' '); + return this.request('POST', `/tabs/${tabId}/navigate`, { userId: this.userId, macro, query }); + } + return this.request('POST', `/tabs/${tabId}/navigate`, { userId: this.userId, url: urlOrMacro }); + } + + async getSnapshot(tabId) { + return this.request('GET', `/tabs/${tabId}/snapshot?userId=${this.userId}`); + } + + async click(tabId, options) { + return this.request('POST', `/tabs/${tabId}/click`, { userId: this.userId, ...options }); + } + + async type(tabId, options) { + const { pressEnter, clear, ...typeOptions } = options; + + // Handle clear by selecting all first + if (clear && (options.selector || options.ref)) { + // Click to focus, then select all and type to replace + await this.click(tabId, { selector: options.selector, ref: options.ref }); + await this.press(tabId, 'Control+a'); + } + + const result = await this.request('POST', `/tabs/${tabId}/type`, { userId: this.userId, ...typeOptions }); + + // Handle Enter key press after typing + if (pressEnter) { + await this.press(tabId, 'Enter'); + } + + return result; + } + + async press(tabId, key) { + return this.request('POST', `/tabs/${tabId}/press`, { userId: this.userId, key }); + } + + async scroll(tabId, options) { + return this.request('POST', `/tabs/${tabId}/scroll`, { userId: this.userId, ...options }); + } + + async back(tabId) { + return this.request('POST', `/tabs/${tabId}/back`, { userId: this.userId }); + } + + async forward(tabId) { + return this.request('POST', `/tabs/${tabId}/forward`, { userId: this.userId }); + } + + async refresh(tabId) { + return this.request('POST', `/tabs/${tabId}/refresh`, { userId: this.userId }); + } + + async getLinks(tabId, options = {}) { + const params = new URLSearchParams({ userId: this.userId }); + if (options.limit) params.append('limit', options.limit); + if (options.offset) params.append('offset', options.offset); + return this.request('GET', `/tabs/${tabId}/links?${params}`); + } + + async getStats(tabId) { + return this.request('GET', `/tabs/${tabId}/stats?userId=${this.userId}`); + } + + async screenshot(tabId, fullPage = false) { + return this.request('GET', `/tabs/${tabId}/screenshot?userId=${this.userId}&fullPage=${fullPage}`); + } + + async closeTab(tabId) { + const result = await this.request('DELETE', `/tabs/${tabId}`, { userId: this.userId }); + this.tabs = this.tabs.filter(t => t !== tabId); + return result; + } + + async closeTabGroup(sessionKey = null) { + return this.request('DELETE', `/tabs/group/${sessionKey || this.sessionKey}`, { userId: this.userId }); + } + + async closeSession() { + return this.request('DELETE', `/sessions/${this.userId}`); + } + + // Cleanup all tabs created by this client + async cleanup() { + for (const tabId of [...this.tabs]) { + try { + await this.closeTab(tabId); + } catch (e) { + // Tab may already be closed + } + } + try { + await this.closeSession(); + } catch (e) { + // Session may already be closed + } + } + + // Wait for snapshot to contain specific text (polling) + async waitForSnapshotContains(tabId, text, options = {}) { + const maxWait = options.maxWait || 10000; + const interval = options.interval || 500; + const startTime = Date.now(); + + while (Date.now() - startTime < maxWait) { + const snapshot = await this.getSnapshot(tabId); + if (snapshot.snapshot && snapshot.snapshot.includes(text)) { + return snapshot; + } + await new Promise(r => setTimeout(r, interval)); + } + + throw new Error(`Timeout waiting for snapshot to contain "${text}"`); + } + + // Wait for URL to match pattern + async waitForUrl(tabId, pattern, options = {}) { + const maxWait = options.maxWait || 10000; + const interval = options.interval || 500; + const startTime = Date.now(); + + while (Date.now() - startTime < maxWait) { + const snapshot = await this.getSnapshot(tabId); + const url = snapshot.url; + + if (typeof pattern === 'string' && url.includes(pattern)) { + return snapshot; + } else if (pattern instanceof RegExp && pattern.test(url)) { + return snapshot; + } + + await new Promise(r => setTimeout(r, interval)); + } + + throw new Error(`Timeout waiting for URL to match ${pattern}`); + } +} + +function createClient(baseUrl) { + return new BrowserClient(baseUrl); +} + +module.exports = { + BrowserClient, + createClient +}; diff --git a/tests/helpers/startServer.js b/tests/helpers/startServer.js new file mode 100644 index 0000000..d863714 --- /dev/null +++ b/tests/helpers/startServer.js @@ -0,0 +1,91 @@ +const { spawn } = require('child_process'); +const path = require('path'); + +let serverProcess = null; +let serverPort = null; + +async function waitForServer(port, maxRetries = 30, interval = 1000) { + for (let i = 0; i < maxRetries; i++) { + try { + const response = await fetch(`http://localhost:${port}/health`); + if (response.ok) { + return true; + } + } catch (e) { + // Server not ready yet + } + await new Promise(r => setTimeout(r, interval)); + } + throw new Error(`Server failed to start on port ${port} after ${maxRetries} attempts`); +} + +async function startServer(port = 0) { + const usePort = port || Math.floor(3100 + Math.random() * 900); + + const serverPath = path.join(__dirname, '../../server.js'); + + serverProcess = spawn('node', [serverPath], { + env: { ...process.env, PORT: usePort.toString(), DEBUG_RESPONSES: 'false' }, + stdio: ['ignore', 'pipe', 'pipe'], + detached: false + }); + + serverProcess.stdout.on('data', (data) => { + if (process.env.DEBUG_SERVER) { + console.log(`[server] ${data.toString().trim()}`); + } + }); + + serverProcess.stderr.on('data', (data) => { + if (process.env.DEBUG_SERVER) { + console.error(`[server:err] ${data.toString().trim()}`); + } + }); + + serverProcess.on('error', (err) => { + console.error('Failed to start server:', err); + }); + + serverPort = usePort; + + await waitForServer(usePort); + + console.log(`camofox-browser server started on port ${usePort}`); + return usePort; +} + +async function stopServer() { + if (serverProcess) { + return new Promise((resolve) => { + serverProcess.on('close', () => { + serverProcess = null; + serverPort = null; + resolve(); + }); + + serverProcess.kill('SIGTERM'); + + setTimeout(() => { + if (serverProcess) { + serverProcess.kill('SIGKILL'); + } + }, 5000); + }); + } +} + +function getServerUrl() { + if (!serverPort) throw new Error('Server not started'); + return `http://localhost:${serverPort}`; +} + +function getServerPort() { + return serverPort; +} + +module.exports = { + startServer, + stopServer, + getServerUrl, + getServerPort +}; diff --git a/tests/helpers/testSite.js b/tests/helpers/testSite.js new file mode 100644 index 0000000..dc42b61 --- /dev/null +++ b/tests/helpers/testSite.js @@ -0,0 +1,238 @@ +const express = require('express'); + +let server = null; +let port = null; + +function createTestApp() { + const app = express(); + app.use(express.urlencoded({ extended: true })); + + // Simple pages for navigation tests + app.get('/pageA', (req, res) => { + res.send(` + + Page A + +

Welcome to Page A

+

This is the first test page.

+
Go to Page B + + `); + }); + + app.get('/pageB', (req, res) => { + res.send(` + + Page B + +

Welcome to Page B

+

This is the second test page.

+ Go to Page A + + `); + }); + + // Page with multiple links for links extraction test + app.get('/links', (req, res) => { + res.send(` + + Links Page + +

Links Collection

+ + + `); + }); + + // Page for typing tests with live preview + app.get('/typing', (req, res) => { + res.send(` + + Typing Test + +

Typing Test Page

+ +
+ + + `); + }); + + // Page for Enter key test - redirects on Enter + app.get('/enter', (req, res) => { + res.send(` + + Enter Test + +

Press Enter Test

+ + + + `); + }); + + app.get('/entered', (req, res) => { + const value = req.query.value || ''; + res.send(` + + Entered + +

Entry Received

+

Entered: ${value}

+ + `); + }); + + // Form submission test + app.get('/form', (req, res) => { + res.send(` + + Form Test + +

Form Submission Test

+
+ + +
+ + +
+ +
+ + `); + }); + + app.post('/submitted', (req, res) => { + const { username, email } = req.body; + res.send(` + + Submitted + +

Form Submitted Successfully

+

Username: ${username || ''}

+

Email: ${email || ''}

+ + `); + }); + + // Page with refresh counter (to verify refresh actually works) + let refreshCount = 0; + app.get('/refresh-test', (req, res) => { + refreshCount++; + res.send(` + + Refresh Test + +

Refresh Counter

+

Count: ${refreshCount}

+ + `); + }); + + // Reset refresh counter (for test isolation) + app.post('/reset-refresh-count', (req, res) => { + refreshCount = 0; + res.json({ ok: true }); + }); + + // Page with clickable button + app.get('/click', (req, res) => { + res.send(` + + Click Test + +

Click Test Page

+ +
+ + + `); + }); + + // Echo endpoint for macro expansion testing - echoes the full request URL + app.get('/echo-url', (req, res) => { + res.send(` + + Echo URL + +

URL Echo

+
${req.originalUrl}
+
${JSON.stringify(req.query)}
+ + `); + }); + + // Page with scrollable content + app.get('/scroll', (req, res) => { + const items = Array.from({ length: 100 }, (_, i) => `

Item ${i}

`).join('\n'); + res.send(` + + Scroll Test + +

Scroll Test Page

+ ${items} +
Bottom of page
+ + `); + }); + + return app; +} + +async function startTestSite(preferredPort = 0) { + const app = createTestApp(); + + return new Promise((resolve, reject) => { + server = app.listen(preferredPort, () => { + port = server.address().port; + console.log(`Test site running on port ${port}`); + resolve(port); + }); + server.on('error', reject); + }); +} + +async function stopTestSite() { + if (server) { + return new Promise((resolve) => { + server.close(() => { + server = null; + port = null; + resolve(); + }); + }); + } +} + +function getTestSiteUrl() { + if (!port) throw new Error('Test site not started'); + return `http://localhost:${port}`; +} + +module.exports = { + startTestSite, + stopTestSite, + getTestSiteUrl +}; diff --git a/tests/live/googleSearch.test.js b/tests/live/googleSearch.test.js new file mode 100644 index 0000000..2b1e5f1 --- /dev/null +++ b/tests/live/googleSearch.test.js @@ -0,0 +1,93 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { createClient } = require('../helpers/client'); + +// Live Google tests are opt-in due to potential captchas/rate limiting +const SKIP_LIVE_TESTS = !process.env.RUN_LIVE_TESTS; + +describe('Live Google Search', () => { + let serverUrl; + + beforeAll(async () => { + if (SKIP_LIVE_TESTS) return; + + const port = await startServer(); + serverUrl = getServerUrl(); + }, 120000); + + afterAll(async () => { + if (SKIP_LIVE_TESTS) return; + await stopServer(); + }, 30000); + + (SKIP_LIVE_TESTS ? test.skip : test)('Google search via @google_search macro', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + // Use the @google_search macro + const result = await client.navigate(tabId, '@google_search Camoufox playwright browser'); + + expect(result.ok).toBe(true); + expect(result.url).toContain('google.com'); + + // Get snapshot - should contain search results + const snapshot = await client.getSnapshot(tabId); + + expect(snapshot.snapshot).toBeDefined(); + expect(snapshot.snapshot.length).toBeGreaterThan(100); + + // Should contain at least one of the search terms + const containsSearchTerm = + snapshot.snapshot.toLowerCase().includes('camoufox') || + snapshot.snapshot.toLowerCase().includes('playwright') || + snapshot.snapshot.toLowerCase().includes('browser'); + + expect(containsSearchTerm).toBe(true); + + // Get links - should have search result links + const linksResult = await client.getLinks(tabId, { limit: 20 }); + expect(linksResult.links.length).toBeGreaterThan(0); + + } finally { + await client.cleanup(); + } + }, 120000); // 2 minute timeout for live test + + (SKIP_LIVE_TESTS ? test.skip : test)('click on Google search result', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + // Search for something specific + await client.navigate(tabId, '@google_search playwright documentation'); + + // Get snapshot to find a result link + const snapshot = await client.getSnapshot(tabId); + + // Look for playwright.dev link in refs + const playwriteMatch = snapshot.snapshot.match(/\[(e\d+)\].*playwright\.dev/i); + + if (playwriteMatch) { + const ref = playwriteMatch[1]; + + // Click the link + await client.click(tabId, { ref }); + + // Wait for navigation + await new Promise(r => setTimeout(r, 3000)); + + const newSnapshot = await client.getSnapshot(tabId); + expect(newSnapshot.url).toContain('playwright'); + } else { + // If no playwright.dev link found, test still passes + // (Google results can vary) + console.log('No playwright.dev link found in search results, skipping click test'); + } + + } finally { + await client.cleanup(); + } + }, 120000); +}); diff --git a/tests/live/macroExpansion.test.js b/tests/live/macroExpansion.test.js new file mode 100644 index 0000000..1a17d68 --- /dev/null +++ b/tests/live/macroExpansion.test.js @@ -0,0 +1,132 @@ +const { startServer, stopServer, getServerUrl } = require('../helpers/startServer'); +const { createClient } = require('../helpers/client'); + +// Live macro tests are opt-in due to external site dependencies +const SKIP_LIVE_TESTS = !process.env.RUN_LIVE_TESTS; + +describe('Live Macro URL Expansion', () => { + let serverUrl; + + beforeAll(async () => { + if (SKIP_LIVE_TESTS) return; + + const port = await startServer(); + serverUrl = getServerUrl(); + }, 120000); + + afterAll(async () => { + if (SKIP_LIVE_TESTS) return; + await stopServer(); + }, 30000); + + (SKIP_LIVE_TESTS ? test.skip : test)('@google_search expands to correct URL', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + const result = await client.navigate(tabId, '@google_search test query'); + + expect(result.ok).toBe(true); + expect(result.url).toContain('google.com/search'); + expect(result.url).toContain('q=test'); + } finally { + await client.cleanup(); + } + }, 60000); + + (SKIP_LIVE_TESTS ? test.skip : test)('@youtube_search expands to correct URL', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + const result = await client.navigate(tabId, '@youtube_search funny cats'); + + expect(result.ok).toBe(true); + expect(result.url).toContain('youtube.com/results'); + expect(result.url).toContain('search_query=funny'); + } finally { + await client.cleanup(); + } + }, 60000); + + (SKIP_LIVE_TESTS ? test.skip : test)('@amazon_search expands to correct URL', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + const result = await client.navigate(tabId, '@amazon_search laptop stand'); + + expect(result.ok).toBe(true); + expect(result.url).toContain('amazon.com/s'); + expect(result.url).toMatch(/k=laptop[\+%20]stand/); + } finally { + await client.cleanup(); + } + }, 60000); + + (SKIP_LIVE_TESTS ? test.skip : test)('@wikipedia_search expands to correct URL', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + const result = await client.navigate(tabId, '@wikipedia_search JavaScript'); + + expect(result.ok).toBe(true); + expect(result.url).toContain('wikipedia.org'); + // Wikipedia may redirect to article or stay on search + expect(result.url).toMatch(/JavaScript|search/i); + } finally { + await client.cleanup(); + } + }, 60000); + + (SKIP_LIVE_TESTS ? test.skip : test)('@reddit_search expands to correct URL', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + const result = await client.navigate(tabId, '@reddit_search programming'); + + expect(result.ok).toBe(true); + expect(result.url).toContain('reddit.com/search'); + expect(result.url).toContain('q=programming'); + } finally { + await client.cleanup(); + } + }, 60000); + + (SKIP_LIVE_TESTS ? test.skip : test)('special characters are URL encoded (live)', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + const result = await client.navigate(tabId, '@google_search hello & world'); + + expect(result.ok).toBe(true); + // & should be encoded as %26 + expect(result.url).toContain('q=hello%20%26%20world'); + } finally { + await client.cleanup(); + } + }, 60000); + + (SKIP_LIVE_TESTS ? test.skip : test)('unknown macro returns error', async () => { + const client = createClient(serverUrl); + + try { + const { tabId } = await client.createTab(); + + // Unknown macro with no fallback URL should fail + await expect(client.navigate(tabId, '@unknown_macro test')) + .rejects.toThrow(/url or macro required/); + } finally { + await client.cleanup(); + } + }, 60000); +}); diff --git a/tests/unit/macros.test.js b/tests/unit/macros.test.js new file mode 100644 index 0000000..774e2d0 --- /dev/null +++ b/tests/unit/macros.test.js @@ -0,0 +1,123 @@ +const { expandMacro, getSupportedMacros, MACROS } = require('../../lib/macros'); + +describe('Macro URL Expansion (unit)', () => { + + test('all macros are defined', () => { + const macros = getSupportedMacros(); + expect(macros).toContain('@google_search'); + expect(macros).toContain('@youtube_search'); + expect(macros).toContain('@amazon_search'); + expect(macros).toContain('@reddit_search'); + expect(macros).toContain('@wikipedia_search'); + expect(macros).toContain('@twitter_search'); + expect(macros).toContain('@yelp_search'); + expect(macros).toContain('@spotify_search'); + expect(macros).toContain('@netflix_search'); + expect(macros).toContain('@linkedin_search'); + expect(macros).toContain('@instagram_search'); + expect(macros).toContain('@tiktok_search'); + expect(macros).toContain('@twitch_search'); + expect(macros.length).toBe(13); + }); + + test('@google_search expands correctly', () => { + expect(expandMacro('@google_search', 'test query')) + .toBe('https://www.google.com/search?q=test%20query'); + }); + + test('@youtube_search expands correctly', () => { + expect(expandMacro('@youtube_search', 'funny cats')) + .toBe('https://www.youtube.com/results?search_query=funny%20cats'); + }); + + test('@amazon_search expands correctly', () => { + expect(expandMacro('@amazon_search', 'laptop stand')) + .toBe('https://www.amazon.com/s?k=laptop%20stand'); + }); + + test('@reddit_search expands correctly', () => { + expect(expandMacro('@reddit_search', 'programming')) + .toBe('https://www.reddit.com/search/?q=programming'); + }); + + test('@wikipedia_search expands correctly', () => { + expect(expandMacro('@wikipedia_search', 'JavaScript')) + .toBe('https://en.wikipedia.org/wiki/Special:Search?search=JavaScript'); + }); + + test('@twitter_search expands correctly', () => { + expect(expandMacro('@twitter_search', 'breaking news')) + .toBe('https://twitter.com/search?q=breaking%20news'); + }); + + test('@yelp_search expands correctly', () => { + expect(expandMacro('@yelp_search', 'italian restaurant')) + .toBe('https://www.yelp.com/search?find_desc=italian%20restaurant'); + }); + + test('@spotify_search expands correctly', () => { + expect(expandMacro('@spotify_search', 'jazz music')) + .toBe('https://open.spotify.com/search/jazz%20music'); + }); + + test('@netflix_search expands correctly', () => { + expect(expandMacro('@netflix_search', 'comedy')) + .toBe('https://www.netflix.com/search?q=comedy'); + }); + + test('@linkedin_search expands correctly', () => { + expect(expandMacro('@linkedin_search', 'software engineer')) + .toBe('https://www.linkedin.com/search/results/all/?keywords=software%20engineer'); + }); + + test('@instagram_search expands correctly', () => { + expect(expandMacro('@instagram_search', 'travel')) + .toBe('https://www.instagram.com/explore/tags/travel'); + }); + + test('@tiktok_search expands correctly', () => { + expect(expandMacro('@tiktok_search', 'dance')) + .toBe('https://www.tiktok.com/search?q=dance'); + }); + + test('@twitch_search expands correctly', () => { + expect(expandMacro('@twitch_search', 'gaming')) + .toBe('https://www.twitch.tv/search?term=gaming'); + }); + + test('special characters are URL encoded', () => { + expect(expandMacro('@google_search', 'hello & world')) + .toBe('https://www.google.com/search?q=hello%20%26%20world'); + + expect(expandMacro('@google_search', 'test?param=value')) + .toBe('https://www.google.com/search?q=test%3Fparam%3Dvalue'); + + expect(expandMacro('@google_search', 'C++ programming')) + .toBe('https://www.google.com/search?q=C%2B%2B%20programming'); + }); + + test('empty query is handled', () => { + expect(expandMacro('@google_search', '')) + .toBe('https://www.google.com/search?q='); + + expect(expandMacro('@google_search', null)) + .toBe('https://www.google.com/search?q='); + + expect(expandMacro('@google_search', undefined)) + .toBe('https://www.google.com/search?q='); + }); + + test('unknown macro returns null', () => { + expect(expandMacro('@unknown_macro', 'test')).toBeNull(); + expect(expandMacro('@fake_search', 'query')).toBeNull(); + expect(expandMacro('google_search', 'no @ prefix')).toBeNull(); + }); + + test('unicode characters are encoded', () => { + expect(expandMacro('@google_search', '日本語')) + .toBe('https://www.google.com/search?q=%E6%97%A5%E6%9C%AC%E8%AA%9E'); + + expect(expandMacro('@google_search', 'café')) + .toBe('https://www.google.com/search?q=caf%C3%A9'); + }); +});