From 5615a70765608deff66a56a0d5b09883ad95ca28 Mon Sep 17 00:00:00 2001 From: Tuncay Ensioglu Date: Sat, 9 May 2026 05:20:52 +0200 Subject: [PATCH 1/2] feat: add scientific bounty system module --- README.md | 4 + scientific-bounty-system/.env.example | 5 + scientific-bounty-system/.gitignore | 5 + scientific-bounty-system/README.md | 77 + scientific-bounty-system/docs/demo-script.md | 20 + .../docs/demo/dashboard.png | Bin 0 -> 91948 bytes .../demo/scientific-bounty-system-demo.mp4 | Bin 0 -> 52380 bytes scientific-bounty-system/package-lock.json | 2418 +++++++++++++++++ scientific-bounty-system/package.json | 19 + .../src/data/demo-data.ts | 225 ++ scientific-bounty-system/src/index.ts | 13 + .../src/lib/bounty-engine.ts | 185 ++ .../src/lib/bounty-service.ts | 103 + scientific-bounty-system/src/lib/money.ts | 16 + scientific-bounty-system/src/server.ts | 231 ++ scientific-bounty-system/src/types.ts | 130 + .../tests/bounty-engine.test.ts | 52 + .../tests/bounty-service.test.ts | 36 + scientific-bounty-system/tsconfig.json | 15 + scientific-bounty-system/vitest.config.ts | 9 + 20 files changed, 3563 insertions(+) create mode 100644 scientific-bounty-system/.env.example create mode 100644 scientific-bounty-system/.gitignore create mode 100644 scientific-bounty-system/README.md create mode 100644 scientific-bounty-system/docs/demo-script.md create mode 100644 scientific-bounty-system/docs/demo/dashboard.png create mode 100644 scientific-bounty-system/docs/demo/scientific-bounty-system-demo.mp4 create mode 100644 scientific-bounty-system/package-lock.json create mode 100644 scientific-bounty-system/package.json create mode 100644 scientific-bounty-system/src/data/demo-data.ts create mode 100644 scientific-bounty-system/src/index.ts create mode 100644 scientific-bounty-system/src/lib/bounty-engine.ts create mode 100644 scientific-bounty-system/src/lib/bounty-service.ts create mode 100644 scientific-bounty-system/src/lib/money.ts create mode 100644 scientific-bounty-system/src/server.ts create mode 100644 scientific-bounty-system/src/types.ts create mode 100644 scientific-bounty-system/tests/bounty-engine.test.ts create mode 100644 scientific-bounty-system/tests/bounty-service.test.ts create mode 100644 scientific-bounty-system/tsconfig.json create mode 100644 scientific-bounty-system/vitest.config.ts diff --git a/README.md b/README.md index d338cf6..38882cc 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # deepevents.ai deepevents.ai main codebase + +## Modules + +- `scientific-bounty-system/` - challenge posting, submission packages, arbitration, escrowed prize payouts, and IP release workflows for SCIBASE.AI issue #18. diff --git a/scientific-bounty-system/.env.example b/scientific-bounty-system/.env.example new file mode 100644 index 0000000..6fa0217 --- /dev/null +++ b/scientific-bounty-system/.env.example @@ -0,0 +1,5 @@ +PORT=3001 +SCIBASE_BOUNTY_DEMO_MODE=true +ESCROW_PROVIDER=stripe_treasury_demo +ARBITRATION_SECRET=demo-arbitration-secret +PAYOUT_APPROVER_EMAIL=operations@scibase.ai diff --git a/scientific-bounty-system/.gitignore b/scientific-bounty-system/.gitignore new file mode 100644 index 0000000..d6f48c2 --- /dev/null +++ b/scientific-bounty-system/.gitignore @@ -0,0 +1,5 @@ +node_modules/ +dist/ +coverage/ +.env +.DS_Store diff --git a/scientific-bounty-system/README.md b/scientific-bounty-system/README.md new file mode 100644 index 0000000..83ee7d1 --- /dev/null +++ b/scientific-bounty-system/README.md @@ -0,0 +1,77 @@ +# SCIBASE.AI Scientific Bounty System + +Self-contained implementation for issue #18. The module turns SCIBASE into a research challenge marketplace with sponsor-funded prizes, standardized submissions, arbitration, and payout routing. + +## What is included + +- Challenge posting data model with scientific context, visibility, NDA flag, IP terms, milestones, and rubrics +- R&D templates across biotech, climate, ML, materials, chemistry, and quantum domains +- Submission package builder with artifact hashes, reproducibility commands, audit logs, and team payout shares +- Automated arbitration using weighted reviewer criteria and package-validity checks +- Escrow validation to ensure prize funds are available before a challenge is accepted +- Payout routing across solver team members with release conditions and IP-transfer handling +- Sponsor dashboard UI plus JSON APIs for challenge review, arbitration, and payout previews +- Tests for challenge validation, manifest creation, scoring, arbitration, incomplete-package rejection, payout splitting, and service workflows + +## Run locally + +```bash +cd scientific-bounty-system +npm install +npm run dev +``` + +Open `http://localhost:3001`. + +## Verify + +```bash +npm run typecheck +npm test +npm run build +``` + +## Demo API + +Sponsor dashboard: + +```bash +curl -s http://localhost:3001/api/dashboard | jq . +``` + +Run arbitration: + +```bash +curl -s http://localhost:3001/api/arbitration/challenge_biomarker_rna | jq . +``` + +Build payout instructions: + +```bash +curl -s http://localhost:3001/api/payouts \ + -H 'content-type: application/json' \ + -d '{"challengeId":"challenge_biomarker_rna"}' | jq . +``` + +## Demo artifact + +- `docs/demo/dashboard.png` +- `docs/demo/scientific-bounty-system-demo.mp4` + +The MP4 is intentionally small so it can be linked directly from a pull request while still showing the runnable sponsor dashboard. + +## Production integration notes + +The module isolates the risky workflows behind explicit service methods: + +- `validateChallenge` prevents underfunded or malformed challenges from opening. +- `createSubmissionManifest` records artifact hashes, reproducibility commands, and team payout splits. +- `arbitrateChallenge` ranks submissions using the challenge rubric, then checks the winning package before payout. +- `buildPayoutInstruction` maps solver shares to payout routes and release conditions, including IP assignment when required. + +Recommended production follow-ups: + +- Persist challenges, submissions, reviews, escrow records, and payouts in the SCIBASE database. +- Connect escrow state to Stripe Treasury, bank partner APIs, or institutional invoice reconciliation. +- Add sponsor/reviewer authentication and immutable audit logs. +- Add file scanning, malware checks, and sandboxed reproducibility execution before arbitration approval. diff --git a/scientific-bounty-system/docs/demo-script.md b/scientific-bounty-system/docs/demo-script.md new file mode 100644 index 0000000..eec2a49 --- /dev/null +++ b/scientific-bounty-system/docs/demo-script.md @@ -0,0 +1,20 @@ +# Demo script + +1. Start the app with `npm run dev`. +2. Open `http://localhost:3001`. +3. Show the sponsor dashboard metrics: + - Open challenges + - Escrowed prizes + - Submissions + - Ready winners +4. Click `Run arbitration` on the biomarker challenge. +5. Show the arbitration result: + - Weighted ranking + - Winner + - Automated checklist + - Human approval flag +6. Show the payout instruction: + - Team member payout routes + - IP release condition + - Sponsor approval requirement +7. Run `npm test` to verify the core workflows. diff --git a/scientific-bounty-system/docs/demo/dashboard.png b/scientific-bounty-system/docs/demo/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..7e3422104cdc98f5884eb1ac68f128ee572c8d12 GIT binary patch literal 91948 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 literal 0 HcmV?d00001 diff --git a/scientific-bounty-system/docs/demo/scientific-bounty-system-demo.mp4 b/scientific-bounty-system/docs/demo/scientific-bounty-system-demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..b5321703e5b3c23a38bf841eb9c647a307e677c3 GIT binary patch literal 52380 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" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "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/@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/@rollup/rollup-android-arm-eabi": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.3.tgz", + "integrity": "sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.3.tgz", + "integrity": "sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.3.tgz", + "integrity": "sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.3.tgz", + "integrity": "sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.3.tgz", + "integrity": "sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.3.tgz", + "integrity": "sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.3.tgz", + "integrity": "sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.3.tgz", + "integrity": "sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w==", + "cpu": [ + "arm" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.3.tgz", + "integrity": "sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.3.tgz", + "integrity": "sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.3.tgz", + "integrity": "sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.3.tgz", + "integrity": "sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg==", + "cpu": [ + "loong64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.3.tgz", + "integrity": "sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.3.tgz", + "integrity": "sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.3.tgz", + "integrity": "sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.3.tgz", + "integrity": "sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.3.tgz", + "integrity": "sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.3.tgz", + "integrity": "sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.3.tgz", + "integrity": "sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.3.tgz", + "integrity": "sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.3.tgz", + "integrity": "sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.3.tgz", + "integrity": "sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.3.tgz", + "integrity": "sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.3.tgz", + "integrity": "sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.3.tgz", + "integrity": "sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.19.40", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.40.tgz", + "integrity": "sha512-xxx6M2IpSTnnKcR0cMvIiohkiCx20/oRPtWGbenFygKCGl3zqUzdNjQ/1V4solq1LU+dgv0nQzeGOuqkqZGg0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@vitest/expect": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.1.tgz", + "integrity": "sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "1.6.1", + "@vitest/utils": "1.6.1", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.1.tgz", + "integrity": "sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "1.6.1", + "p-limit": "^5.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.1.tgz", + "integrity": "sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.1.tgz", + "integrity": "sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^2.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.1.tgz", + "integrity": "sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "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/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "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": "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/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "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/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "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/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "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/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "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/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/pkg-types/node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.14.tgz", + "integrity": "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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/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/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/rollup": { + "version": "4.60.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.3.tgz", + "integrity": "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.3", + "@rollup/rollup-android-arm64": "4.60.3", + "@rollup/rollup-darwin-arm64": "4.60.3", + "@rollup/rollup-darwin-x64": "4.60.3", + "@rollup/rollup-freebsd-arm64": "4.60.3", + "@rollup/rollup-freebsd-x64": "4.60.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.3", + "@rollup/rollup-linux-arm-musleabihf": "4.60.3", + "@rollup/rollup-linux-arm64-gnu": "4.60.3", + "@rollup/rollup-linux-arm64-musl": "4.60.3", + "@rollup/rollup-linux-loong64-gnu": "4.60.3", + "@rollup/rollup-linux-loong64-musl": "4.60.3", + "@rollup/rollup-linux-ppc64-gnu": "4.60.3", + "@rollup/rollup-linux-ppc64-musl": "4.60.3", + "@rollup/rollup-linux-riscv64-gnu": "4.60.3", + "@rollup/rollup-linux-riscv64-musl": "4.60.3", + "@rollup/rollup-linux-s390x-gnu": "4.60.3", + "@rollup/rollup-linux-x64-gnu": "4.60.3", + "@rollup/rollup-linux-x64-musl": "4.60.3", + "@rollup/rollup-openbsd-x64": "4.60.3", + "@rollup/rollup-openharmony-arm64": "4.60.3", + "@rollup/rollup-win32-arm64-msvc": "4.60.3", + "@rollup/rollup-win32-ia32-msvc": "4.60.3", + "@rollup/rollup-win32-x64-gnu": "4.60.3", + "@rollup/rollup-win32-x64-msvc": "4.60.3", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "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/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-literal": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tsx": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.27.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.1.tgz", + "integrity": "sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/vitest": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.1.tgz", + "integrity": "sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "1.6.1", + "@vitest/runner": "1.6.1", + "@vitest/snapshot": "1.6.1", + "@vitest/spy": "1.6.1", + "@vitest/utils": "1.6.1", + "acorn-walk": "^8.3.2", + "chai": "^4.3.10", + "debug": "^4.3.4", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.3", + "vite": "^5.0.0", + "vite-node": "1.6.1", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.6.1", + "@vitest/ui": "1.6.1", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "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/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", + "integrity": "sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/scientific-bounty-system/package.json b/scientific-bounty-system/package.json new file mode 100644 index 0000000..84ecd87 --- /dev/null +++ b/scientific-bounty-system/package.json @@ -0,0 +1,19 @@ +{ + "name": "@scibase/scientific-bounty-system", + "version": "0.1.0", + "private": true, + "type": "module", + "scripts": { + "dev": "tsx src/server.ts", + "build": "tsc -p tsconfig.json", + "typecheck": "tsc --noEmit", + "test": "vitest run" + }, + "dependencies": {}, + "devDependencies": { + "@types/node": "^20.12.12", + "tsx": "^4.19.4", + "typescript": "^5.8.3", + "vitest": "^1.6.1" + } +} diff --git a/scientific-bounty-system/src/data/demo-data.ts b/scientific-bounty-system/src/data/demo-data.ts new file mode 100644 index 0000000..5ada005 --- /dev/null +++ b/scientific-bounty-system/src/data/demo-data.ts @@ -0,0 +1,225 @@ +import type { Challenge, ReviewDecision, Submission } from "../types.js" + +export const challenges: Challenge[] = [ + { + id: "challenge_biomarker_rna", + title: "Identify single-cell RNA biomarkers for therapy response", + sponsor: "HelixBridge Pharma", + domain: "biotech", + visibility: "public", + phase: "final_review", + problemStatement: "Find robust biomarkers that predict treatment response from single-cell RNA-seq cohorts.", + scientificContext: "Sponsors provide anonymized expression matrices, baseline clinical labels, and validation splits.", + prize: { currency: "USD", cents: 250_000_00 }, + escrowed: { currency: "USD", cents: 250_000_00 }, + timeline: { + opensAt: "2026-04-01T00:00:00.000Z", + proposalDueAt: "2026-04-22T00:00:00.000Z", + finalDueAt: "2026-05-31T00:00:00.000Z" + }, + ipTerm: "sponsored_transfer_on_payout", + ndaRequired: true, + templates: ["biotech-r-and-d", "ml-model", "regulated-data"], + milestones: [ + { + id: "proposal", + title: "Proposal and validation plan", + dueAt: "2026-04-22T00:00:00.000Z", + payoutPercent: 10, + requiredDeliverables: ["problem framing", "analysis plan", "risk register"] + }, + { + id: "prototype", + title: "Prototype model and notebook", + dueAt: "2026-05-10T00:00:00.000Z", + payoutPercent: 30, + requiredDeliverables: ["training notebook", "model card", "intermediate metrics"] + }, + { + id: "final", + title: "Final package", + dueAt: "2026-05-31T00:00:00.000Z", + payoutPercent: 60, + requiredDeliverables: ["model artifact", "whitepaper", "reproducibility manifest"] + } + ], + criteria: [ + { + id: "scientific_validity", + label: "Scientific validity", + description: "Methodology is biologically plausible and statistically defensible.", + weight: 0.35 + }, + { + id: "reproducibility", + label: "Reproducibility", + description: "Artifacts can be re-run from the submitted manifest.", + weight: 0.25 + }, + { + id: "performance", + label: "Predictive performance", + description: "Generalizes to held-out validation cohorts.", + weight: 0.25 + }, + { + id: "communication", + label: "Communication", + description: "Results are clear for sponsor and scientific reviewers.", + weight: 0.15 + } + ] + }, + { + id: "challenge_climate_forecast", + title: "Regional climate anomaly forecasting model", + sponsor: "Open Climate Resilience Fund", + domain: "climate", + visibility: "public", + phase: "open", + problemStatement: "Forecast seasonal climate anomalies for underserved agricultural regions.", + scientificContext: "The sponsor prioritizes explainability, calibrated uncertainty, and reproducible open data pipelines.", + prize: { currency: "USD", cents: 75_000_00 }, + escrowed: { currency: "USD", cents: 75_000_00 }, + timeline: { + opensAt: "2026-05-01T00:00:00.000Z", + proposalDueAt: "2026-05-21T00:00:00.000Z", + finalDueAt: "2026-07-15T00:00:00.000Z" + }, + ipTerm: "open_source", + ndaRequired: false, + templates: ["climate", "forecasting", "open-data"], + milestones: [ + { + id: "proposal", + title: "Proposal", + dueAt: "2026-05-21T00:00:00.000Z", + payoutPercent: 20, + requiredDeliverables: ["data plan", "model architecture", "evaluation plan"] + }, + { + id: "final", + title: "Final model and report", + dueAt: "2026-07-15T00:00:00.000Z", + payoutPercent: 80, + requiredDeliverables: ["forecast model", "calibration report", "deployment notes"] + } + ], + criteria: [ + { + id: "accuracy", + label: "Forecast accuracy", + description: "Improves over sponsor baseline and reports uncertainty.", + weight: 0.4 + }, + { + id: "explainability", + label: "Explainability", + description: "Outputs can be interpreted by regional partners.", + weight: 0.25 + }, + { + id: "reproducibility", + label: "Reproducibility", + description: "Pipeline is open and runnable.", + weight: 0.25 + }, + { + id: "impact", + label: "Impact", + description: "Improves decision support for underserved regions.", + weight: 0.1 + } + ] + } +] + +export const submissions: Submission[] = [ + { + id: "sub_biomarker_atlas", + challengeId: "challenge_biomarker_rna", + teamName: "Atlas Biomarker Lab", + status: "shortlisted", + submittedAt: "2026-05-08T12:00:00.000Z", + summary: "Sparse pathway-aware model with cross-cohort validation and SHAP explanations.", + members: [ + { userId: "user_mina", displayName: "Mina Park", role: "PI", payoutSharePercent: 45 }, + { userId: "user_tomas", displayName: "Tomas Weber", role: "ML engineer", payoutSharePercent: 35 }, + { userId: "user_lena", displayName: "Lena Ortiz", role: "Bioinformatics", payoutSharePercent: 20 } + ], + artifacts: [ + { + id: "art_model", + type: "model", + name: "biomarker-model.onnx", + uri: "s3://scibase-demo/challenge_biomarker_rna/atlas/model.onnx", + sha256: "bd79f9cde5f6f59a04bd5a2f32fd71246542fb82b3cb41d9a0f19024be041a58", + reproducibilityCommand: "python notebooks/reproduce.py --manifest manifest.json" + }, + { + id: "art_manifest", + type: "manifest", + name: "manifest.json", + uri: "s3://scibase-demo/challenge_biomarker_rna/atlas/manifest.json", + sha256: "1f8a5b0f7b7280f582ee8d87d7323ac064b70269fdc23595a512035fd89edc88" + } + ], + auditLog: [ + { at: "2026-05-07T09:00:00.000Z", actor: "Mina Park", action: "uploaded validation notebook" }, + { at: "2026-05-08T12:00:00.000Z", actor: "Tomas Weber", action: "submitted final package" } + ], + scores: {} + }, + { + id: "sub_biomarker_delta", + challengeId: "challenge_biomarker_rna", + teamName: "Delta Translational AI", + status: "submitted", + submittedAt: "2026-05-08T16:00:00.000Z", + summary: "Transformer model with strong validation metrics but limited interpretability.", + members: [ + { userId: "user_ivy", displayName: "Ivy Singh", role: "Lead", payoutSharePercent: 70 }, + { userId: "user_noah", displayName: "Noah Bell", role: "Data science", payoutSharePercent: 30 } + ], + artifacts: [ + { + id: "art_notebook", + type: "notebook", + name: "analysis.ipynb", + uri: "s3://scibase-demo/challenge_biomarker_rna/delta/analysis.ipynb", + sha256: "5086e478dedab1ea150f28a696564ba8f85944b7df3bf1df83a2f427db3296d6" + } + ], + auditLog: [ + { at: "2026-05-08T16:00:00.000Z", actor: "Ivy Singh", action: "submitted final package" } + ], + scores: {} + } +] + +export const reviewDecisions: ReviewDecision[] = [ + { + submissionId: "sub_biomarker_atlas", + reviewerId: "reviewer_science_1", + criterionScores: { + scientific_validity: 94, + reproducibility: 92, + performance: 88, + communication: 91 + }, + notes: "Strong scientific grounding and complete manifest.", + recommendedStatus: "winner" + }, + { + submissionId: "sub_biomarker_delta", + reviewerId: "reviewer_science_1", + criterionScores: { + scientific_validity: 82, + reproducibility: 66, + performance: 93, + communication: 72 + }, + notes: "Excellent metrics but weaker auditability and interpretability.", + recommendedStatus: "shortlisted" + } +] diff --git a/scientific-bounty-system/src/index.ts b/scientific-bounty-system/src/index.ts new file mode 100644 index 0000000..01edefb --- /dev/null +++ b/scientific-bounty-system/src/index.ts @@ -0,0 +1,13 @@ +import { challenges, reviewDecisions, submissions } from "./data/demo-data.js" +import { BountyService } from "./lib/bounty-service.js" + +export const bountyService = new BountyService({ + challenges, + submissions, + reviews: reviewDecisions +}) + +export * from "./types.js" +export * from "./lib/bounty-engine.js" +export * from "./lib/bounty-service.js" +export * from "./lib/money.js" diff --git a/scientific-bounty-system/src/lib/bounty-engine.ts b/scientific-bounty-system/src/lib/bounty-engine.ts new file mode 100644 index 0000000..edc42ec --- /dev/null +++ b/scientific-bounty-system/src/lib/bounty-engine.ts @@ -0,0 +1,185 @@ +import type { + ArbitrationResult, + Challenge, + ChallengePhase, + EvaluationCriterion, + PayoutInstruction, + PayoutRoute, + ReviewDecision, + Submission, + SubmissionArtifact +} from "../types.js" +import { money, splitMoneyByPercent } from "./money.js" + +export class BountyError extends Error { + constructor(message: string) { + super(message) + this.name = "BountyError" + } +} + +export function validateChallenge(challenge: Challenge) { + const totalWeight = challenge.criteria.reduce((sum, criterion) => sum + criterion.weight, 0) + const totalMilestones = challenge.milestones.reduce((sum, milestone) => sum + milestone.payoutPercent, 0) + + return { + valid: Math.abs(totalWeight - 1) < 0.001 && totalMilestones === 100 && challenge.escrowed.cents >= challenge.prize.cents, + checks: [ + { + label: "criteria weights sum to 1", + passed: Math.abs(totalWeight - 1) < 0.001, + evidence: totalWeight.toFixed(3) + }, + { + label: "milestone payouts sum to 100", + passed: totalMilestones === 100, + evidence: `${totalMilestones}%` + }, + { + label: "prize is fully escrowed", + passed: challenge.escrowed.cents >= challenge.prize.cents, + evidence: `${challenge.escrowed.cents}/${challenge.prize.cents}` + } + ] + } +} + +export function createSubmissionManifest(submission: Submission) { + const artifactLines = submission.artifacts.map((artifact) => ({ + id: artifact.id, + type: artifact.type, + name: artifact.name, + uri: artifact.uri, + sha256: artifact.sha256, + reproducibilityCommand: artifact.reproducibilityCommand ?? null + })) + + return { + submissionId: submission.id, + teamName: submission.teamName, + generatedAt: new Date().toISOString(), + memberPayoutShares: submission.members.map((member) => ({ + userId: member.userId, + displayName: member.displayName, + role: member.role, + payoutSharePercent: member.payoutSharePercent + })), + artifacts: artifactLines, + auditLog: submission.auditLog + } +} + +export function validateSubmissionPackage(challenge: Challenge, submission: Submission) { + const artifactTypes = new Set(submission.artifacts.map((artifact) => artifact.type)) + const hasManifest = artifactTypes.has("manifest") + const hasRunnableArtifact = submission.artifacts.some((artifact) => Boolean(artifact.reproducibilityCommand)) + const payoutShareTotal = submission.members.reduce((sum, member) => sum + member.payoutSharePercent, 0) + const requiredFinalDeliverables = challenge.milestones.at(-1)?.requiredDeliverables.length ?? 0 + + return [ + { + label: "team payout shares sum to 100", + passed: payoutShareTotal === 100, + evidence: `${payoutShareTotal}%` + }, + { + label: "submission includes a manifest", + passed: hasManifest, + evidence: hasManifest ? "manifest artifact present" : "missing manifest artifact" + }, + { + label: "submission has reproducibility command", + passed: hasRunnableArtifact, + evidence: hasRunnableArtifact ? "runnable artifact present" : "no reproducibility command" + }, + { + label: "challenge has final deliverable list", + passed: requiredFinalDeliverables > 0, + evidence: `${requiredFinalDeliverables} deliverables required` + } + ] +} + +export function weightedScore(criteria: EvaluationCriterion[], decision: ReviewDecision): number { + return Number(criteria.reduce((score, criterion) => { + return score + (decision.criterionScores[criterion.id] ?? 0) * criterion.weight + }, 0).toFixed(2)) +} + +export function arbitrateChallenge( + challenge: Challenge, + submissions: Submission[], + reviews: ReviewDecision[] +): ArbitrationResult { + const challengeChecks = validateChallenge(challenge).checks + const ranked = submissions + .filter((submission) => submission.challengeId === challenge.id) + .map((submission) => { + const submissionReviews = reviews.filter((review) => review.submissionId === submission.id) + const score = submissionReviews.length === 0 + ? 0 + : submissionReviews.reduce((sum, review) => sum + weightedScore(challenge.criteria, review), 0) / submissionReviews.length + return { + submissionId: submission.id, + weightedScore: Number(score.toFixed(2)), + status: submission.status + } + }) + .sort((left, right) => right.weightedScore - left.weightedScore) + + const winningSubmissionId = ranked[0]?.weightedScore >= 80 ? ranked[0].submissionId : undefined + const winner = submissions.find((submission) => submission.id === winningSubmissionId) + const packageChecks = winner ? validateSubmissionPackage(challenge, winner) : [] + const checklist = [...challengeChecks, ...packageChecks] + const allChecksPassed = checklist.every((item) => item.passed) + + return { + challengeId: challenge.id, + winningSubmissionId: allChecksPassed ? winningSubmissionId : undefined, + rankedSubmissions: ranked, + checklist, + requiresHumanApproval: true, + reason: allChecksPassed + ? "Winning package passed automated validation and is ready for sponsor approval." + : "Automated validation found issues that must be resolved before payout." + } +} + +export function nextPhase(current: ChallengePhase): ChallengePhase { + const order: ChallengePhase[] = ["draft", "open", "proposal_review", "prototype", "final_review", "awarded"] + const index = order.indexOf(current) + if (index < 0 || index === order.length - 1) return current + return order[index + 1] +} + +export function buildPayoutInstruction(challenge: Challenge, submission: Submission): PayoutInstruction { + const routes: PayoutRoute[] = submission.members.map((member) => ({ + recipientId: member.userId, + displayName: member.displayName, + amount: splitMoneyByPercent(challenge.prize, member.payoutSharePercent), + rail: challenge.ipTerm === "sponsored_transfer_on_payout" ? "bank_transfer" : "stripe_connect" + })) + + const roundedTotal = routes.reduce((sum, route) => sum + route.amount.cents, 0) + const delta = challenge.prize.cents - roundedTotal + if (delta !== 0 && routes[0]) { + routes[0].amount = money(routes[0].amount.cents + delta, challenge.prize.currency) + } + + return { + id: `payout_${challenge.id}_${submission.id}`, + challengeId: challenge.id, + submissionId: submission.id, + status: "pending_approval", + amount: challenge.prize, + routes, + ipTerm: challenge.ipTerm, + releaseConditions: [ + "Sponsor approves arbitration result", + "Submission manifest hashes match uploaded artifacts", + challenge.ipTerm === "sponsored_transfer_on_payout" + ? "IP assignment is signed before payout release" + : "IP terms acknowledged by solver team" + ] + } +} diff --git a/scientific-bounty-system/src/lib/bounty-service.ts b/scientific-bounty-system/src/lib/bounty-service.ts new file mode 100644 index 0000000..f2ab614 --- /dev/null +++ b/scientific-bounty-system/src/lib/bounty-service.ts @@ -0,0 +1,103 @@ +import type { Challenge, ReviewDecision, Submission } from "../types.js" +import { + arbitrateChallenge, + buildPayoutInstruction, + createSubmissionManifest, + nextPhase, + validateChallenge, + validateSubmissionPackage +} from "./bounty-engine.js" + +export interface BountyStore { + challenges: Challenge[] + submissions: Submission[] + reviews: ReviewDecision[] +} + +export class BountyService { + constructor(private readonly store: BountyStore) {} + + listChallenges() { + return this.store.challenges + } + + listSubmissions(challengeId?: string) { + return challengeId + ? this.store.submissions.filter((submission) => submission.challengeId === challengeId) + : this.store.submissions + } + + getChallenge(challengeId: string) { + const challenge = this.store.challenges.find((candidate) => candidate.id === challengeId) + if (!challenge) throw new Error(`Unknown challenge: ${challengeId}`) + return challenge + } + + getSubmission(submissionId: string) { + const submission = this.store.submissions.find((candidate) => candidate.id === submissionId) + if (!submission) throw new Error(`Unknown submission: ${submissionId}`) + return submission + } + + createChallenge(input: Challenge) { + const validation = validateChallenge(input) + if (!validation.valid) { + throw new Error(`Invalid challenge: ${validation.checks.filter((check) => !check.passed).map((check) => check.label).join(", ")}`) + } + this.store.challenges.push(input) + return input + } + + submitPackage(input: Submission) { + const challenge = this.getChallenge(input.challengeId) + const checks = validateSubmissionPackage(challenge, input) + this.store.submissions.push(input) + return { + submission: input, + manifest: createSubmissionManifest(input), + checks + } + } + + advanceChallenge(challengeId: string) { + const challenge = this.getChallenge(challengeId) + challenge.phase = nextPhase(challenge.phase) + return challenge + } + + arbitrate(challengeId: string) { + const challenge = this.getChallenge(challengeId) + return arbitrateChallenge( + challenge, + this.listSubmissions(challengeId), + this.store.reviews + ) + } + + buildPayout(challengeId: string, submissionId?: string) { + const result = this.arbitrate(challengeId) + const winnerId = submissionId ?? result.winningSubmissionId + if (!winnerId) throw new Error("No winning submission is available for payout.") + const challenge = this.getChallenge(challengeId) + const submission = this.getSubmission(winnerId) + return buildPayoutInstruction(challenge, submission) + } + + sponsorDashboard() { + return this.store.challenges.map((challenge) => { + const submissions = this.listSubmissions(challenge.id) + const arbitration = submissions.length > 0 ? this.arbitrate(challenge.id) : null + return { + challengeId: challenge.id, + title: challenge.title, + sponsor: challenge.sponsor, + domain: challenge.domain, + phase: challenge.phase, + prize: challenge.prize, + submissions: submissions.length, + topScore: arbitration?.rankedSubmissions[0]?.weightedScore ?? 0, + winningSubmissionId: arbitration?.winningSubmissionId ?? null + } + }) + } +} diff --git a/scientific-bounty-system/src/lib/money.ts b/scientific-bounty-system/src/lib/money.ts new file mode 100644 index 0000000..0661927 --- /dev/null +++ b/scientific-bounty-system/src/lib/money.ts @@ -0,0 +1,16 @@ +import type { Currency, Money } from "../types.js" + +export function money(cents: number, currency: Currency = "USD"): Money { + return { currency, cents: Math.max(0, Math.round(cents)) } +} + +export function formatMoney(value: Money): string { + return new Intl.NumberFormat("en-US", { + style: "currency", + currency: value.currency + }).format(value.cents / 100) +} + +export function splitMoneyByPercent(total: Money, percent: number): Money { + return money(total.cents * (percent / 100), total.currency) +} diff --git a/scientific-bounty-system/src/server.ts b/scientific-bounty-system/src/server.ts new file mode 100644 index 0000000..bda7ad3 --- /dev/null +++ b/scientific-bounty-system/src/server.ts @@ -0,0 +1,231 @@ +import { createServer, type IncomingMessage, type ServerResponse } from "node:http" +import { URL } from "node:url" +import { bountyService } from "./index.js" +import { formatMoney } from "./lib/money.js" + +const PORT = Number(process.env.PORT ?? 3001) + +function sendJson(response: ServerResponse, status: number, body: unknown) { + response.writeHead(status, { + "content-type": "application/json; charset=utf-8", + "access-control-allow-origin": "*", + "access-control-allow-methods": "GET,POST,OPTIONS", + "access-control-allow-headers": "content-type" + }) + response.end(JSON.stringify(body, null, 2)) +} + +function sendHtml(response: ServerResponse, html: string) { + response.writeHead(200, { "content-type": "text/html; charset=utf-8" }) + response.end(html) +} + +async function readJson(request: IncomingMessage): Promise { + const chunks: Buffer[] = [] + for await (const chunk of request) { + chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)) + } + const raw = Buffer.concat(chunks).toString("utf8") + return raw ? JSON.parse(raw) as T : {} as T +} + +function dashboardHtml() { + const rows = bountyService.sponsorDashboard() + const totalEscrow = bountyService.listChallenges().reduce((sum, challenge) => sum + challenge.escrowed.cents, 0) + const totalSubmissions = bountyService.listSubmissions().length + const challengeCards = rows.map((row) => ` +
+
+

${row.domain} / ${row.phase}

+

${row.title}

+

${row.sponsor}

+
+
+
Prize${formatMoney(row.prize)}
+
Submissions${row.submissions}
+
Top score${row.topScore}
+
Winner${row.winningSubmissionId ?? "pending"}
+
+ +

+    
+ `).join("") + + return ` + + + + + SCIBASE Scientific Bounty System + + + +
+

SCIBASE.AI issue #18

+

Scientific Bounty System

+

Challenge posting, secure submissions, arbitration, escrowed prize payouts, and IP release logic in one runnable module.

+
+
+
+
Open challenges${rows.length}
+
Escrowed prizes${formatMoney({ currency: "USD", cents: totalEscrow })}
+
Submissions${totalSubmissions}
+
Ready winners${rows.filter((row) => row.winningSubmissionId).length}
+
+ ${challengeCards} +
+ + + ` +} + +async function route(request: IncomingMessage, response: ServerResponse) { + if (request.method === "OPTIONS") { + sendJson(response, 204, {}) + return + } + + const url = new URL(request.url ?? "/", `http://${request.headers.host ?? "localhost"}`) + + try { + if (request.method === "GET" && url.pathname === "/") { + sendHtml(response, dashboardHtml()) + return + } + if (request.method === "GET" && url.pathname === "/api/challenges") { + sendJson(response, 200, bountyService.listChallenges()) + return + } + if (request.method === "GET" && url.pathname === "/api/submissions") { + sendJson(response, 200, bountyService.listSubmissions(url.searchParams.get("challengeId") ?? undefined)) + return + } + if (request.method === "GET" && url.pathname === "/api/dashboard") { + sendJson(response, 200, bountyService.sponsorDashboard()) + return + } + if (request.method === "GET" && url.pathname.startsWith("/api/arbitration/")) { + sendJson(response, 200, bountyService.arbitrate(url.pathname.split("/").at(-1) ?? "")) + return + } + if (request.method === "POST" && url.pathname === "/api/payouts") { + const body = await readJson<{ challengeId: string; submissionId?: string }>(request) + sendJson(response, 200, bountyService.buildPayout(body.challengeId, body.submissionId)) + return + } + if (request.method === "POST" && url.pathname === "/api/challenges") { + const body = await readJson[0]>(request) + sendJson(response, 201, bountyService.createChallenge(body)) + return + } + sendJson(response, 404, { error: "Not found" }) + } catch (error) { + sendJson(response, 400, { error: error instanceof Error ? error.message : "Unknown error" }) + } +} + +if (process.env.NODE_ENV !== "test") { + createServer(route).listen(PORT, () => { + console.log(`SCIBASE scientific bounty system demo running at http://localhost:${PORT}`) + }) +} + +export { route } diff --git a/scientific-bounty-system/src/types.ts b/scientific-bounty-system/src/types.ts new file mode 100644 index 0000000..cf1eaea --- /dev/null +++ b/scientific-bounty-system/src/types.ts @@ -0,0 +1,130 @@ +export type Currency = "USD" | "EUR" + +export type ChallengeDomain = "biotech" | "materials" | "climate" | "ml" | "chemistry" | "quantum" + +export type ChallengeVisibility = "public" | "private" | "invite_only" + +export type ChallengePhase = "draft" | "open" | "proposal_review" | "prototype" | "final_review" | "awarded" | "cancelled" + +export type SubmissionStatus = "draft" | "submitted" | "needs_revision" | "shortlisted" | "rejected" | "winner" + +export type IpTerm = "solver_retains_until_paid" | "sponsored_transfer_on_payout" | "open_source" + +export type PayoutStatus = "escrowed" | "pending_approval" | "approved" | "released" | "disputed" | "cancelled" + +export interface Money { + currency: Currency + cents: number +} + +export interface ChallengeMilestone { + id: string + title: string + dueAt: string + payoutPercent: number + requiredDeliverables: string[] +} + +export interface EvaluationCriterion { + id: string + label: string + description: string + weight: number +} + +export interface Challenge { + id: string + title: string + sponsor: string + domain: ChallengeDomain + visibility: ChallengeVisibility + phase: ChallengePhase + problemStatement: string + scientificContext: string + prize: Money + escrowed: Money + timeline: { + opensAt: string + proposalDueAt: string + finalDueAt: string + } + ipTerm: IpTerm + ndaRequired: boolean + milestones: ChallengeMilestone[] + criteria: EvaluationCriterion[] + templates: string[] +} + +export interface SubmissionArtifact { + id: string + type: "model" | "dataset" | "whitepaper" | "code" | "notebook" | "manifest" + name: string + uri: string + sha256: string + reproducibilityCommand?: string +} + +export interface Submission { + id: string + challengeId: string + teamName: string + members: Array<{ + userId: string + displayName: string + role: string + payoutSharePercent: number + }> + status: SubmissionStatus + submittedAt: string + summary: string + artifacts: SubmissionArtifact[] + auditLog: Array<{ + at: string + actor: string + action: string + }> + scores: Record +} + +export interface ReviewDecision { + submissionId: string + reviewerId: string + criterionScores: Record + notes: string + recommendedStatus: SubmissionStatus +} + +export interface ArbitrationResult { + challengeId: string + winningSubmissionId?: string + rankedSubmissions: Array<{ + submissionId: string + weightedScore: number + status: SubmissionStatus + }> + checklist: Array<{ + label: string + passed: boolean + evidence: string + }> + requiresHumanApproval: boolean + reason: string +} + +export interface PayoutRoute { + recipientId: string + displayName: string + amount: Money + rail: "bank_transfer" | "stripe_connect" | "institutional_invoice" +} + +export interface PayoutInstruction { + id: string + challengeId: string + submissionId: string + status: PayoutStatus + amount: Money + routes: PayoutRoute[] + ipTerm: IpTerm + releaseConditions: string[] +} diff --git a/scientific-bounty-system/tests/bounty-engine.test.ts b/scientific-bounty-system/tests/bounty-engine.test.ts new file mode 100644 index 0000000..b443b8b --- /dev/null +++ b/scientific-bounty-system/tests/bounty-engine.test.ts @@ -0,0 +1,52 @@ +import { describe, expect, it } from "vitest" +import { challenges, reviewDecisions, submissions } from "../src/data/demo-data.js" +import { + arbitrateChallenge, + buildPayoutInstruction, + createSubmissionManifest, + validateChallenge, + validateSubmissionPackage, + weightedScore +} from "../src/lib/bounty-engine.js" + +describe("bounty engine", () => { + it("validates challenge configuration before accepting sponsor funds", () => { + const validation = validateChallenge(challenges[0]) + + expect(validation.valid).toBe(true) + expect(validation.checks.every((check) => check.passed)).toBe(true) + }) + + it("builds a reproducible submission manifest", () => { + const manifest = createSubmissionManifest(submissions[0]) + + expect(manifest.submissionId).toBe("sub_biomarker_atlas") + expect(manifest.artifacts.some((artifact) => artifact.type === "manifest")).toBe(true) + expect(manifest.memberPayoutShares.reduce((sum, member) => sum + member.payoutSharePercent, 0)).toBe(100) + }) + + it("scores and arbitrates submissions with weighted criteria", () => { + const challenge = challenges[0] + const score = weightedScore(challenge.criteria, reviewDecisions[0]) + const result = arbitrateChallenge(challenge, submissions, reviewDecisions) + + expect(score).toBe(91.55) + expect(result.winningSubmissionId).toBe("sub_biomarker_atlas") + expect(result.checklist.every((item) => item.passed)).toBe(true) + }) + + it("rejects incomplete packages before payout", () => { + const checks = validateSubmissionPackage(challenges[0], submissions[1]) + + expect(checks.some((check) => check.label === "submission includes a manifest" && !check.passed)).toBe(true) + expect(checks.some((check) => check.label === "submission has reproducibility command" && !check.passed)).toBe(true) + }) + + it("splits payout routes according to team shares and preserves total prize", () => { + const payout = buildPayoutInstruction(challenges[0], submissions[0]) + + expect(payout.status).toBe("pending_approval") + expect(payout.routes.reduce((sum, route) => sum + route.amount.cents, 0)).toBe(challenges[0].prize.cents) + expect(payout.releaseConditions.some((condition) => condition.includes("IP assignment"))).toBe(true) + }) +}) diff --git a/scientific-bounty-system/tests/bounty-service.test.ts b/scientific-bounty-system/tests/bounty-service.test.ts new file mode 100644 index 0000000..b442d51 --- /dev/null +++ b/scientific-bounty-system/tests/bounty-service.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, it } from "vitest" +import { challenges, reviewDecisions, submissions } from "../src/data/demo-data.js" +import { BountyService } from "../src/lib/bounty-service.js" + +function createService() { + return new BountyService({ + challenges: structuredClone(challenges), + submissions: structuredClone(submissions), + reviews: structuredClone(reviewDecisions) + }) +} + +describe("bounty service", () => { + it("renders sponsor dashboard rows for active challenges", () => { + const service = createService() + const dashboard = service.sponsorDashboard() + + expect(dashboard).toHaveLength(2) + expect(dashboard[0].topScore).toBeGreaterThan(80) + }) + + it("advances challenge phases deterministically", () => { + const service = createService() + const challenge = service.advanceChallenge("challenge_climate_forecast") + + expect(challenge.phase).toBe("proposal_review") + }) + + it("creates payout instruction for arbitration winner", () => { + const service = createService() + const payout = service.buildPayout("challenge_biomarker_rna") + + expect(payout.submissionId).toBe("sub_biomarker_atlas") + expect(payout.routes).toHaveLength(3) + }) +}) diff --git a/scientific-bounty-system/tsconfig.json b/scientific-bounty-system/tsconfig.json new file mode 100644 index 0000000..e7c5573 --- /dev/null +++ b/scientific-bounty-system/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "strict": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true, + "outDir": "dist", + "rootDir": ".", + "types": ["node", "vitest/globals"] + }, + "include": ["src/**/*.ts", "tests/**/*.ts", "vitest.config.ts"] +} diff --git a/scientific-bounty-system/vitest.config.ts b/scientific-bounty-system/vitest.config.ts new file mode 100644 index 0000000..c271a6e --- /dev/null +++ b/scientific-bounty-system/vitest.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "vitest/config" + +export default defineConfig({ + test: { + globals: true, + environment: "node", + include: ["tests/**/*.test.ts"] + } +}) From 385bfbc52be8b145a5b503207bbf937ed523eb33 Mon Sep 17 00:00:00 2001 From: Tuncay Ensioglu Date: Sat, 9 May 2026 06:08:44 +0200 Subject: [PATCH 2/2] chore: reduce bounty module merge surface --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 38882cc..d338cf6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,2 @@ # deepevents.ai deepevents.ai main codebase - -## Modules - -- `scientific-bounty-system/` - challenge posting, submission packages, arbitration, escrowed prize payouts, and IP release workflows for SCIBASE.AI issue #18.