From f3f58d1a9e45bfba8671c0a1fc85526eb65bfe40 Mon Sep 17 00:00:00 2001 From: RlxChap2 <133292635+RlxChap2@users.noreply.github.com> Date: Wed, 9 Sep 2026 15:15:05 +0300 Subject: [PATCH 1/2] docs: rebuild bilingual documentation --- .gitattributes | 2 + .github/workflows/docs.yml | 24 + CODE_OF_CONDUCT.md | 2 +- README.md | 118 +- api-reference/ayat/all.mdx | 81 - api-reference/ayat/get-by-number.mdx | 59 - api-reference/ayat/get-by-surah-aya.mdx | 63 - api-reference/ayat/overview.mdx | 55 - api-reference/ayat/search.mdx | 68 - api-reference/azkar/overview.mdx | 64 - api-reference/hadith/overview.mdx | 63 - api-reference/hijri/overview.mdx | 56 - api-reference/meta/catalogue.mdx | 56 - api-reference/meta/health.mdx | 69 - api-reference/meta/overview.mdx | 23 - api-reference/prayer/overview.mdx | 61 - api-reference/qibla/overview.mdx | 80 - api-reference/reciters/overview.mdx | 61 - api-reference/surah/get.mdx | 98 - api-reference/surah/list.mdx | 58 - api-reference/surah/overview.mdx | 41 - api-reference/surah/search.mdx | 114 - api-reference/tafsir/overview.mdx | 51 - favicon.svg => assets/favicon.svg | 0 bonyan-api.mdx | 162 - code-of-conduct.mdx | 151 - concepts/arabic-search.mdx | 81 - concepts/caching.mdx | 79 - concepts/errors.mdx | 137 - concepts/fallback.mdx | 124 - concepts/rate-limit.mdx | 68 - contributing.mdx | 80 - docs.json | 911 +- domains.mdx | 53 - ecosystem.mdx | 104 - examples/search.mjs | 48 + frame/dark.svg | 8 - frame/light.svg | 8 - guides/api-design.mdx | 76 - guides/design-principles.mdx | 48 - guides/documentation-standard.mdx | 55 - guides/project-lifecycle.mdx | 58 - guides/status-and-reliability.mdx | 60 - introduction.mdx | 103 - locales/ar/api-reference/ayat/all.mdx | 33 + .../ar/api-reference/ayat/get-by-number.mdx | 33 + .../api-reference/ayat/get-by-surah-aya.mdx | 33 + locales/ar/api-reference/ayat/overview.mdx | 15 + locales/ar/api-reference/ayat/search.mdx | 33 + locales/ar/api-reference/azkar/categories.mdx | 33 + locales/ar/api-reference/azkar/category.mdx | 33 + locales/ar/api-reference/azkar/overview.mdx | 15 + locales/ar/api-reference/azkar/random.mdx | 33 + locales/ar/api-reference/azkar/search.mdx | 33 + locales/ar/api-reference/hadith/book.mdx | 41 + locales/ar/api-reference/hadith/books.mdx | 33 + locales/ar/api-reference/hadith/get.mdx | 33 + locales/ar/api-reference/hadith/overview.mdx | 15 + locales/ar/api-reference/hadith/random.mdx | 35 + .../ar/api-reference/hijri/from-gregorian.mdx | 35 + locales/ar/api-reference/hijri/overview.mdx | 14 + .../ar/api-reference/hijri/to-gregorian.mdx | 35 + locales/ar/api-reference/hijri/today.mdx | 33 + locales/ar/api-reference/meta/catalogue.mdx | 33 + locales/ar/api-reference/meta/health.mdx | 33 + locales/ar/api-reference/meta/metrics.mdx | 33 + locales/ar/api-reference/meta/overview.mdx | 15 + locales/ar/api-reference/meta/ready.mdx | 33 + locales/ar/api-reference/overview.mdx | 89 + locales/ar/api-reference/prayer/overview.mdx | 12 + locales/ar/api-reference/prayer/times.mdx | 45 + locales/ar/api-reference/qibla/direction.mdx | 41 + locales/ar/api-reference/qibla/overview.mdx | 12 + locales/ar/api-reference/reciters/audio.mdx | 37 + locales/ar/api-reference/reciters/get.mdx | 33 + locales/ar/api-reference/reciters/list.mdx | 33 + .../ar/api-reference/reciters/overview.mdx | 15 + locales/ar/api-reference/reciters/search.mdx | 35 + locales/ar/api-reference/surah/get.mdx | 33 + locales/ar/api-reference/surah/list.mdx | 33 + locales/ar/api-reference/surah/overview.mdx | 14 + locales/ar/api-reference/surah/search.mdx | 35 + locales/ar/api-reference/tafsir/aya.mdx | 33 + locales/ar/api-reference/tafsir/editions.mdx | 33 + locales/ar/api-reference/tafsir/overview.mdx | 14 + locales/ar/api-reference/tafsir/surah.mdx | 35 + locales/ar/code-of-conduct.mdx | 10 + locales/ar/concepts/arabic-search.mdx | 34 + locales/ar/concepts/architecture.mdx | 39 + locales/ar/concepts/caching.mdx | 25 + locales/ar/concepts/errors.mdx | 44 + locales/ar/concepts/fallback.mdx | 53 + locales/ar/concepts/rate-limit.mdx | 23 + locales/ar/contributing.mdx | 12 + locales/ar/guides/audio.mdx | 23 + locales/ar/guides/maintenance.mdx | 36 + locales/ar/guides/operations.mdx | 25 + locales/ar/guides/self-hosting.mdx | 68 + locales/ar/guides/source-status.mdx | 27 + locales/ar/guides/troubleshooting.mdx | 19 + locales/ar/introduction.mdx | 29 + locales/ar/openapi.yaml | 2614 +++ locales/ar/quickstart.mdx | 54 + locales/ar/sdk/configuration.mdx | 33 + locales/ar/sdk/errors.mdx | 38 + locales/ar/sdk/overview.mdx | 49 + locales/ar/sdk/resources.mdx | 95 + locales/ar/sdk/search.mdx | 71 + locales/en/api-reference/ayat/all.mdx | 33 + .../en/api-reference/ayat/get-by-number.mdx | 33 + .../api-reference/ayat/get-by-surah-aya.mdx | 33 + locales/en/api-reference/ayat/overview.mdx | 15 + locales/en/api-reference/ayat/search.mdx | 33 + locales/en/api-reference/azkar/categories.mdx | 33 + locales/en/api-reference/azkar/category.mdx | 33 + locales/en/api-reference/azkar/overview.mdx | 15 + locales/en/api-reference/azkar/random.mdx | 33 + locales/en/api-reference/azkar/search.mdx | 33 + locales/en/api-reference/hadith/book.mdx | 41 + locales/en/api-reference/hadith/books.mdx | 33 + locales/en/api-reference/hadith/get.mdx | 33 + locales/en/api-reference/hadith/overview.mdx | 15 + locales/en/api-reference/hadith/random.mdx | 35 + .../en/api-reference/hijri/from-gregorian.mdx | 35 + locales/en/api-reference/hijri/overview.mdx | 14 + .../en/api-reference/hijri/to-gregorian.mdx | 35 + locales/en/api-reference/hijri/today.mdx | 33 + locales/en/api-reference/meta/catalogue.mdx | 33 + locales/en/api-reference/meta/health.mdx | 33 + locales/en/api-reference/meta/metrics.mdx | 33 + locales/en/api-reference/meta/overview.mdx | 15 + locales/en/api-reference/meta/ready.mdx | 33 + locales/en/api-reference/overview.mdx | 89 + locales/en/api-reference/prayer/overview.mdx | 12 + locales/en/api-reference/prayer/times.mdx | 45 + locales/en/api-reference/qibla/direction.mdx | 41 + locales/en/api-reference/qibla/overview.mdx | 12 + locales/en/api-reference/reciters/audio.mdx | 37 + locales/en/api-reference/reciters/get.mdx | 33 + locales/en/api-reference/reciters/list.mdx | 33 + .../en/api-reference/reciters/overview.mdx | 15 + locales/en/api-reference/reciters/search.mdx | 35 + locales/en/api-reference/surah/get.mdx | 33 + locales/en/api-reference/surah/list.mdx | 33 + locales/en/api-reference/surah/overview.mdx | 14 + locales/en/api-reference/surah/search.mdx | 35 + locales/en/api-reference/tafsir/aya.mdx | 33 + locales/en/api-reference/tafsir/editions.mdx | 33 + locales/en/api-reference/tafsir/overview.mdx | 14 + locales/en/api-reference/tafsir/surah.mdx | 35 + locales/en/code-of-conduct.mdx | 10 + locales/en/concepts/arabic-search.mdx | 34 + locales/en/concepts/architecture.mdx | 39 + locales/en/concepts/caching.mdx | 25 + locales/en/concepts/errors.mdx | 44 + locales/en/concepts/fallback.mdx | 53 + locales/en/concepts/rate-limit.mdx | 23 + locales/en/contributing.mdx | 12 + locales/en/guides/audio.mdx | 23 + locales/en/guides/maintenance.mdx | 36 + locales/en/guides/operations.mdx | 25 + locales/en/guides/self-hosting.mdx | 68 + locales/en/guides/source-status.mdx | 27 + locales/en/guides/troubleshooting.mdx | 19 + locales/en/introduction.mdx | 29 + locales/en/openapi.yaml | 2614 +++ locales/en/quickstart.mdx | 53 + locales/en/sdk/configuration.mdx | 33 + locales/en/sdk/errors.mdx | 38 + locales/en/sdk/overview.mdx | 49 + locales/en/sdk/resources.mdx | 95 + locales/en/sdk/search.mdx | 71 + openapi.yaml | 1074 -- package.json | 71 +- patches/@mintlify__link-rot@3.0.1334.patch | 13 + pnpm-lock.yaml | 15492 ++++++++-------- pnpm-workspace.yaml | 8 +- projects.mdx | 80 - quickstart.mdx | 141 - reference.mdx | 34 - scripts/api-catalog.mjs | 701 + scripts/api-schemas.mjs | 387 + scripts/check-docs.mjs | 201 + scripts/check-source.mjs | 54 + scripts/generate-api.mjs | 152 + scripts/generate-index.mjs | 156 + scripts/locales.mjs | 9 + scripts/search.test.mjs | 108 + snippets/fallback-callout.mdx | 6 - sources.lock.json | 15 + styles.css | 32 + 191 files changed, 19946 insertions(+), 12004 deletions(-) create mode 100644 .gitattributes create mode 100644 .github/workflows/docs.yml delete mode 100644 api-reference/ayat/all.mdx delete mode 100644 api-reference/ayat/get-by-number.mdx delete mode 100644 api-reference/ayat/get-by-surah-aya.mdx delete mode 100644 api-reference/ayat/overview.mdx delete mode 100644 api-reference/ayat/search.mdx delete mode 100644 api-reference/azkar/overview.mdx delete mode 100644 api-reference/hadith/overview.mdx delete mode 100644 api-reference/hijri/overview.mdx delete mode 100644 api-reference/meta/catalogue.mdx delete mode 100644 api-reference/meta/health.mdx delete mode 100644 api-reference/meta/overview.mdx delete mode 100644 api-reference/prayer/overview.mdx delete mode 100644 api-reference/qibla/overview.mdx delete mode 100644 api-reference/reciters/overview.mdx delete mode 100644 api-reference/surah/get.mdx delete mode 100644 api-reference/surah/list.mdx delete mode 100644 api-reference/surah/overview.mdx delete mode 100644 api-reference/surah/search.mdx delete mode 100644 api-reference/tafsir/overview.mdx rename favicon.svg => assets/favicon.svg (100%) delete mode 100644 bonyan-api.mdx delete mode 100644 code-of-conduct.mdx delete mode 100644 concepts/arabic-search.mdx delete mode 100644 concepts/caching.mdx delete mode 100644 concepts/errors.mdx delete mode 100644 concepts/fallback.mdx delete mode 100644 concepts/rate-limit.mdx delete mode 100644 contributing.mdx delete mode 100644 domains.mdx delete mode 100644 ecosystem.mdx create mode 100644 examples/search.mjs delete mode 100644 frame/dark.svg delete mode 100644 frame/light.svg delete mode 100644 guides/api-design.mdx delete mode 100644 guides/design-principles.mdx delete mode 100644 guides/documentation-standard.mdx delete mode 100644 guides/project-lifecycle.mdx delete mode 100644 guides/status-and-reliability.mdx delete mode 100644 introduction.mdx create mode 100644 locales/ar/api-reference/ayat/all.mdx create mode 100644 locales/ar/api-reference/ayat/get-by-number.mdx create mode 100644 locales/ar/api-reference/ayat/get-by-surah-aya.mdx create mode 100644 locales/ar/api-reference/ayat/overview.mdx create mode 100644 locales/ar/api-reference/ayat/search.mdx create mode 100644 locales/ar/api-reference/azkar/categories.mdx create mode 100644 locales/ar/api-reference/azkar/category.mdx create mode 100644 locales/ar/api-reference/azkar/overview.mdx create mode 100644 locales/ar/api-reference/azkar/random.mdx create mode 100644 locales/ar/api-reference/azkar/search.mdx create mode 100644 locales/ar/api-reference/hadith/book.mdx create mode 100644 locales/ar/api-reference/hadith/books.mdx create mode 100644 locales/ar/api-reference/hadith/get.mdx create mode 100644 locales/ar/api-reference/hadith/overview.mdx create mode 100644 locales/ar/api-reference/hadith/random.mdx create mode 100644 locales/ar/api-reference/hijri/from-gregorian.mdx create mode 100644 locales/ar/api-reference/hijri/overview.mdx create mode 100644 locales/ar/api-reference/hijri/to-gregorian.mdx create mode 100644 locales/ar/api-reference/hijri/today.mdx create mode 100644 locales/ar/api-reference/meta/catalogue.mdx create mode 100644 locales/ar/api-reference/meta/health.mdx create mode 100644 locales/ar/api-reference/meta/metrics.mdx create mode 100644 locales/ar/api-reference/meta/overview.mdx create mode 100644 locales/ar/api-reference/meta/ready.mdx create mode 100644 locales/ar/api-reference/overview.mdx create mode 100644 locales/ar/api-reference/prayer/overview.mdx create mode 100644 locales/ar/api-reference/prayer/times.mdx create mode 100644 locales/ar/api-reference/qibla/direction.mdx create mode 100644 locales/ar/api-reference/qibla/overview.mdx create mode 100644 locales/ar/api-reference/reciters/audio.mdx create mode 100644 locales/ar/api-reference/reciters/get.mdx create mode 100644 locales/ar/api-reference/reciters/list.mdx create mode 100644 locales/ar/api-reference/reciters/overview.mdx create mode 100644 locales/ar/api-reference/reciters/search.mdx create mode 100644 locales/ar/api-reference/surah/get.mdx create mode 100644 locales/ar/api-reference/surah/list.mdx create mode 100644 locales/ar/api-reference/surah/overview.mdx create mode 100644 locales/ar/api-reference/surah/search.mdx create mode 100644 locales/ar/api-reference/tafsir/aya.mdx create mode 100644 locales/ar/api-reference/tafsir/editions.mdx create mode 100644 locales/ar/api-reference/tafsir/overview.mdx create mode 100644 locales/ar/api-reference/tafsir/surah.mdx create mode 100644 locales/ar/code-of-conduct.mdx create mode 100644 locales/ar/concepts/arabic-search.mdx create mode 100644 locales/ar/concepts/architecture.mdx create mode 100644 locales/ar/concepts/caching.mdx create mode 100644 locales/ar/concepts/errors.mdx create mode 100644 locales/ar/concepts/fallback.mdx create mode 100644 locales/ar/concepts/rate-limit.mdx create mode 100644 locales/ar/contributing.mdx create mode 100644 locales/ar/guides/audio.mdx create mode 100644 locales/ar/guides/maintenance.mdx create mode 100644 locales/ar/guides/operations.mdx create mode 100644 locales/ar/guides/self-hosting.mdx create mode 100644 locales/ar/guides/source-status.mdx create mode 100644 locales/ar/guides/troubleshooting.mdx create mode 100644 locales/ar/introduction.mdx create mode 100644 locales/ar/openapi.yaml create mode 100644 locales/ar/quickstart.mdx create mode 100644 locales/ar/sdk/configuration.mdx create mode 100644 locales/ar/sdk/errors.mdx create mode 100644 locales/ar/sdk/overview.mdx create mode 100644 locales/ar/sdk/resources.mdx create mode 100644 locales/ar/sdk/search.mdx create mode 100644 locales/en/api-reference/ayat/all.mdx create mode 100644 locales/en/api-reference/ayat/get-by-number.mdx create mode 100644 locales/en/api-reference/ayat/get-by-surah-aya.mdx create mode 100644 locales/en/api-reference/ayat/overview.mdx create mode 100644 locales/en/api-reference/ayat/search.mdx create mode 100644 locales/en/api-reference/azkar/categories.mdx create mode 100644 locales/en/api-reference/azkar/category.mdx create mode 100644 locales/en/api-reference/azkar/overview.mdx create mode 100644 locales/en/api-reference/azkar/random.mdx create mode 100644 locales/en/api-reference/azkar/search.mdx create mode 100644 locales/en/api-reference/hadith/book.mdx create mode 100644 locales/en/api-reference/hadith/books.mdx create mode 100644 locales/en/api-reference/hadith/get.mdx create mode 100644 locales/en/api-reference/hadith/overview.mdx create mode 100644 locales/en/api-reference/hadith/random.mdx create mode 100644 locales/en/api-reference/hijri/from-gregorian.mdx create mode 100644 locales/en/api-reference/hijri/overview.mdx create mode 100644 locales/en/api-reference/hijri/to-gregorian.mdx create mode 100644 locales/en/api-reference/hijri/today.mdx create mode 100644 locales/en/api-reference/meta/catalogue.mdx create mode 100644 locales/en/api-reference/meta/health.mdx create mode 100644 locales/en/api-reference/meta/metrics.mdx create mode 100644 locales/en/api-reference/meta/overview.mdx create mode 100644 locales/en/api-reference/meta/ready.mdx create mode 100644 locales/en/api-reference/overview.mdx create mode 100644 locales/en/api-reference/prayer/overview.mdx create mode 100644 locales/en/api-reference/prayer/times.mdx create mode 100644 locales/en/api-reference/qibla/direction.mdx create mode 100644 locales/en/api-reference/qibla/overview.mdx create mode 100644 locales/en/api-reference/reciters/audio.mdx create mode 100644 locales/en/api-reference/reciters/get.mdx create mode 100644 locales/en/api-reference/reciters/list.mdx create mode 100644 locales/en/api-reference/reciters/overview.mdx create mode 100644 locales/en/api-reference/reciters/search.mdx create mode 100644 locales/en/api-reference/surah/get.mdx create mode 100644 locales/en/api-reference/surah/list.mdx create mode 100644 locales/en/api-reference/surah/overview.mdx create mode 100644 locales/en/api-reference/surah/search.mdx create mode 100644 locales/en/api-reference/tafsir/aya.mdx create mode 100644 locales/en/api-reference/tafsir/editions.mdx create mode 100644 locales/en/api-reference/tafsir/overview.mdx create mode 100644 locales/en/api-reference/tafsir/surah.mdx create mode 100644 locales/en/code-of-conduct.mdx create mode 100644 locales/en/concepts/arabic-search.mdx create mode 100644 locales/en/concepts/architecture.mdx create mode 100644 locales/en/concepts/caching.mdx create mode 100644 locales/en/concepts/errors.mdx create mode 100644 locales/en/concepts/fallback.mdx create mode 100644 locales/en/concepts/rate-limit.mdx create mode 100644 locales/en/contributing.mdx create mode 100644 locales/en/guides/audio.mdx create mode 100644 locales/en/guides/maintenance.mdx create mode 100644 locales/en/guides/operations.mdx create mode 100644 locales/en/guides/self-hosting.mdx create mode 100644 locales/en/guides/source-status.mdx create mode 100644 locales/en/guides/troubleshooting.mdx create mode 100644 locales/en/introduction.mdx create mode 100644 locales/en/openapi.yaml create mode 100644 locales/en/quickstart.mdx create mode 100644 locales/en/sdk/configuration.mdx create mode 100644 locales/en/sdk/errors.mdx create mode 100644 locales/en/sdk/overview.mdx create mode 100644 locales/en/sdk/resources.mdx create mode 100644 locales/en/sdk/search.mdx delete mode 100644 openapi.yaml create mode 100644 patches/@mintlify__link-rot@3.0.1334.patch delete mode 100644 projects.mdx delete mode 100644 quickstart.mdx delete mode 100644 reference.mdx create mode 100644 scripts/api-catalog.mjs create mode 100644 scripts/api-schemas.mjs create mode 100644 scripts/check-docs.mjs create mode 100644 scripts/check-source.mjs create mode 100644 scripts/generate-api.mjs create mode 100644 scripts/generate-index.mjs create mode 100644 scripts/locales.mjs create mode 100644 scripts/search.test.mjs delete mode 100644 snippets/fallback-callout.mdx create mode 100644 sources.lock.json create mode 100644 styles.css diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..12232fb --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +* text=auto eol=lf +*.svg text eol=lf diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..3f9fc49 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,24 @@ +name: Documentation checks +on: + pull_request: + push: + branches: [main] +permissions: + contents: read +jobs: + validate: + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + - uses: actions/setup-node@v4 + with: + node-version: 24 + cache: pnpm + - run: pnpm install --frozen-lockfile --ignore-scripts --no-optional + - run: pnpm check + - run: pnpm build + - run: pnpm broken-links diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 319b248..26c6262 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -74,7 +74,7 @@ If you experience or witness behavior that violates this Code of Conduct, please Reporting contact: -> TODO: Add a private reporting email, contact form, or GitHub maintainer contact before the public launch. +> A private reporting channel has not yet been published. Do not post sensitive reports in public issues. Maintainers need to provide a private contact before accepting confidential reports through the project. When reporting, include as much relevant information as you can: diff --git a/README.md b/README.md index 520df1d..9301c5b 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,95 @@ -# BonyanOSS Docs +# Bonyan documentation -Documentation site for **BonyanOSS** and the **Bonyan-API**. - -Built with [Mintlify](https://mintlify.com). The docs are organized as a -developer platform: ecosystem overview, project model, domain map, contribution -guide, Bonyan-API docs, engineering guides, and API reference. +English and Arabic documentation for Bonyan API and its JavaScript/TypeScript SDK. The Mintlify site contains 31 HTTP operations per language. ## Run locally +Use Node.js 22 or later and the pnpm version declared in package.json. + ```bash -pnpm install +pnpm install --frozen-lockfile pnpm dev ``` -The site will be live at `http://localhost:3000`. - -## Useful scripts +Open the URL printed by the CLI. English starts at `/locales/en/introduction`; Arabic at `/locales/ar/introduction`. -| Script | What it does | -| -------------------- | ------------------------------------------------- | -| `pnpm dev` | Start the local dev server with hot reload. | -| `pnpm build` | Validate the documentation build. | -| `pnpm broken-links` | Crawl pages and report dead internal links. | -| `pnpm openapi:check` | Validate `openapi.yaml` against the OpenAPI spec. | +The local search dialog requires an authenticated Mintlify session (`pnpm exec mintlify login`). Page rendering, navigation and the API playground work without that session. Check hosted search after deploying through the connected Mintlify project. -## Project layout +## Structure ```text -bonyan-docs/ -├── docs.json -├── openapi.yaml -├── logo/ -├── introduction.mdx -├── ecosystem.mdx -├── projects.mdx -├── domains.mdx -├── code-of-conduct.mdx -├── bonyan-api.mdx -├── quickstart.mdx -├── concepts/ -├── guides/ -└── api-reference/ +locales/ + en/ English documentation + api-reference/ API index and endpoint pages by module (generated) + concepts/ Architecture, responses, search, caching, fallback, limits + guides/ Integration, hosting, operations, maintenance + sdk/ SDK guides and generated method table + openapi.yaml English OpenAPI (generated) + ar/ Identical structure, translated into Arabic +assets/ Supplied brand asset +examples/search.mjs Tested search compatibility helper +patches/ Pinned Mintlify Windows path correction +scripts/ + api-catalog.mjs Endpoint metadata in both languages + api-schemas.mjs Response contracts and field descriptions + generate-api.mjs OpenAPI and endpoint generation + generate-index.mjs API indexes and SDK method tables + check-docs.mjs MDX, links, languages, schemas, SDK examples + check-source.mjs Source revisions and GET route parity + search.test.mjs Compatibility and error-path tests +.github/workflows/docs.yml CI validation +docs.json Theme, language navigation, legacy redirects +sources.lock.json Reviewed source commits and package versions +styles.css Arabic text direction, code isolation and diagram overflow +``` + +Published pages belong in a language directory. Every page must appear once in navigation and have a matching translation. Do not keep duplicate root-level guides. + +## Edit and verify + +Edit ordinary MDX guides in both languages. For endpoint changes, edit `scripts/api-catalog.mjs` and `scripts/api-schemas.mjs`, then regenerate: + +```bash +pnpm generate +pnpm check +pnpm build +pnpm broken-links ``` -## Public URL plan +`pnpm check` verifies generated-file drift, OpenAPI 3.1, MDX compilation, internal links, redirects, language parity, TypeScript SDK examples and the search helper. `pnpm build` is Mintlify build validation, not standalone HTML export. Preview layout changes in both languages. + +`patches/` fixes a Windows path-separator mismatch in `@mintlify/link-rot` 3.0.1334 that otherwise marks valid nested links as broken. Keep the patch and lockfile together; remove the patch only after a newer CLI passes `pnpm broken-links` on Windows. React and React DOM are pinned to the same version to satisfy the CLI's rendering peers. The remaining deprecated packages are transitive CLI dependencies. + +For documentation-only installs, `pnpm install --frozen-lockfile --ignore-scripts --no-optional` skips optional native tools that these checks and the preview do not need. + +```bash +node scripts/check-source.mjs /path/to/Bonyan-API /path/to/bonyan-sdk-js +``` + +This command expects the revisions in `sources.lock.json`. Review changed controllers, services and types before updating the lock. Do not claim a hosted deployment uses an exact commit unless the deployment exposes it. + +## Platform decision + +Reviewed 7 September 2026. **Keep Mintlify.** The project already uses it, and it supports Arabic language navigation, RTL and OpenAPI request builders. Replacing the platform would not fix inaccurate source contracts. [Mintlify internationalization](https://www.mintlify.com/docs/guides/internationalization), [OpenAPI setup](https://www.mintlify.com/docs/api-playground/openapi-setup). + +| Option | Project assessment | +| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Mintlify | Selected: existing hosting workflow, language navigation, RTL and OpenAPI rendering. Translations live in this repository. | +| Docusaurus | Suitable if independently hosted static documentation becomes a requirement. It supports i18n and RTL. Migration adds theme, search, hosting and API-reference integration work. | +| nodejs/doc-kit | Uses API-shaped Markdown and a generator pipeline. The reviewed docs demonstrate multiple outputs. I did not establish an equivalent ready-to-use Arabic/RTL plus OpenAPI request-builder workflow, so it is not the selected target. | + +Sources: [Docusaurus i18n](https://docusaurus.io/docs/i18n/introduction), [doc-kit](https://doc-kit.nodejs.org/). Migration-effort estimates are project-specific judgments, not claims that alternatives cannot support these features. + +## Known source differences + +The public API uses `https://api.bonyanoss.org`, without the old `/bonyan-api/v1` prefix. SDK 1.0.2 has a search-envelope mismatch; `examples/search.mjs` avoids it. Public tafsir IDs differ from upstream IDs. See [source status](locales/en/guides/source-status.mdx) and [Arabic source status](locales/ar/guides/source-status.mdx). + +The conduct policy has no configured private reporting contact. A maintainer needs to provide one; no address is invented here. + +## Publish -- Main site: `bonyanoss.org` -- Docs: `docs.bonyanoss.org` -- Status: `status.bonyanoss.org` -- Unified API: `api.bonyanoss.org` -- Bonyan API: `api.bonyanoss.org/bonyan-api/v1` -- Bonyan docs: `docs.bonyanoss.org/bonyan-api` +Review and merge through the existing documentation repository workflow. Keep the current Mintlify project connected to this repository. The rework does not publish a deployment or change DNS. Legacy page URLs redirect through `docs.json`. -## License +## العربية -MIT © BonyanOSS. +المحتوى العربي في `locales/ar/` وله بنية `locales/en/` نفسها. عدّل الأدلة باللغتين، أو عدّل بيانات API المشتركة ثم شغّل `pnpm generate`. افحص باستخدام `pnpm check` و`pnpm build` و`pnpm broken-links`. راجع [دليل الصيانة](locales/ar/guides/maintenance.mdx) لمعرفة مصدر كل ملف وخطوات تحديث الترجمة. diff --git a/api-reference/ayat/all.mdx b/api-reference/ayat/all.mdx deleted file mode 100644 index cabce5f..0000000 --- a/api-reference/ayat/all.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: "Get the full Quran text" -description: "All surahs with their ayat in one cached response." -api: "GET /ayat" ---- - -Returns the full Quran corpus grouped by surah. - -## Endpoint - -```http -GET /ayat -``` - -## Response - -```json -{ - "success": true, - "data": { - "surahs": [ - { - "number": 1, - "name": "الفاتحة", - "apiName": "alquran.cloud", - "ayat": [ - { "number": 1, "text": "بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ", "numberInSurah": 1 } - ] - } - ] - } -} -``` - -## Canonical Types - -```ts -type SurahWithAyaItem = { - number: number; - name: string; - ayat: AyaItem[]; - apiName: "alquran.cloud" | "quran.gading.dev"; -}; - -type AyaItem = { - number: number; - text: string; - numberInSurah: number; -}; -``` - -## Code Samples - - - - ```bash - curl https://api.bonyanoss.org/bonyan-api/v1/ayat - ``` - - - ```js - const res = await fetch("https://api.bonyanoss.org/bonyan-api/v1/ayat"); - const body = await res.json(); - console.log(body.data.surahs.length); - ``` - - - ```python - import requests - - body = requests.get("https://api.bonyanoss.org/bonyan-api/v1/ayat").json() - print(body["data"]["surahs"][0]["ayat"][0]["text"]) - ``` - - - -## Notes - -- Cached for **24 hours** under `ayat:full`. -- Provider order: `alquran.cloud` -> jsDelivr mirror of `fawazahmed0/quran-api`. -- The response is large; client-side caching is strongly recommended. diff --git a/api-reference/ayat/get-by-number.mdx b/api-reference/ayat/get-by-number.mdx deleted file mode 100644 index 8c50647..0000000 --- a/api-reference/ayat/get-by-number.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "Get aya by absolute number" -description: "A single aya addressed by its 1..6236 absolute verse number." -api: "GET /ayat/{id}" ---- - -Returns a single aya plus the surah it belongs to. - -## Endpoint - -```http -GET /ayat/:id -``` - - - Absolute verse number, **1** through **6236**. - - -## Response - -```json -{ - "success": true, - "data": { - "surahNumber": 1, - "surahName": "الفاتحة", - "aya": { - "number": 1, - "text": "بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ", - "numberInSurah": 1 - } - } -} -``` - -## Errors - -| Code | When | -| --- | --- | -| `400` | `id` is not numeric or is outside `1..6236`. | -| `404` | The aya was not found in the cached corpus. | -| `503` | The full Quran corpus could not be loaded. | - -## Code Samples - - - - ```bash - curl https://api.bonyanoss.org/bonyan-api/v1/ayat/1 - ``` - - - ```js - const res = await fetch("https://api.bonyanoss.org/bonyan-api/v1/ayat/1"); - const body = await res.json(); - console.log(body.data.aya.text); - ``` - - diff --git a/api-reference/ayat/get-by-surah-aya.mdx b/api-reference/ayat/get-by-surah-aya.mdx deleted file mode 100644 index fced5c8..0000000 --- a/api-reference/ayat/get-by-surah-aya.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: "Get aya by surah and verse" -description: "A single aya addressed by surah number and verse-in-surah." -api: "GET /ayat/{surah}/aya/{id}" ---- - -Returns a single aya by `(surah, verse-in-surah)` plus the surah metadata. - -## Endpoint - -```http -GET /ayat/:surah/aya/:id -``` - - - Surah number, **1** through **114**. - - - - Verse number inside the surah. - - -## Response - -```json -{ - "success": true, - "data": { - "surahNumber": 2, - "surahName": "البقرة", - "aya": { - "number": 262, - "text": "اللَّهُ لَا إِلَٰهَ إِلَّا هُوَ الْحَيُّ الْقَيُّومُ", - "numberInSurah": 255 - } - } -} -``` - -## Errors - -| Code | When | -| --- | --- | -| `400` | `surah` or `id` is not numeric, or surah is outside `1..114`. | -| `404` | The requested aya does not exist in that surah. | -| `503` | The full Quran corpus could not be loaded. | - -## Code Samples - - - - ```bash - curl https://api.bonyanoss.org/bonyan-api/v1/ayat/2/aya/255 - ``` - - - ```js - const res = await fetch("https://api.bonyanoss.org/bonyan-api/v1/ayat/2/aya/255"); - const body = await res.json(); - console.log(body.data.aya.text); - ``` - - diff --git a/api-reference/ayat/overview.mdx b/api-reference/ayat/overview.mdx deleted file mode 100644 index 0975347..0000000 --- a/api-reference/ayat/overview.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: "Ayat" -description: "Quranic verses — full text, single verses, normalized Arabic search." ---- - -The `Ayat` module serves the actual verse text of the Quran in the Uthmani -script. There are 6,236 ayat in total, addressable either by absolute verse -number or by `(surah, verse-in-surah)`. - -| Endpoint | Description | -| --- | --- | -| `GET /ayat` | Full Quran text (cached for 24h). | -| `GET /ayat/:id` | Single aya by absolute number (1–6236). | -| `GET /ayat/:surah/aya/:id` | Single aya by surah + verse-in-surah. | -| `GET /ayat/search` | Search ayat by text (Arabic-normalized). | - -## Fallback chain - -`alquran.cloud` (Uthmani edition) → `cdn.jsdelivr.net/gh/fawazahmed0/quran-api` - -## Cache TTL - -**24 hours.** The Quran does not change. - -## Canonical Types - -`GET /ayat` returns the corpus grouped by surah: - -```ts -type SurahWithAyaItem = { - number: number; - name: string; - ayat: AyaItem[]; - apiName: "alquran.cloud" | "quran.gading.dev"; -}; -``` - -Single-ayah endpoints return `{ surahNumber, surahName, aya }`. - -```ts -type AyaItem = { - number: number; // absolute verse number, 1..6236 - text: string; // verse text in Uthmani script - numberInSurah: number; // verse position within its surah -}; -``` - -## Search - -`/ayat/search?text=...` runs the query through -[`normalizeArabicForQuranSearch`](/concepts/arabic-search#normalizearabicforquransearch) -before matching, so users can type with or without tashkeel and still find what -they're looking for. - -/snippets/fallback-callout.mdx diff --git a/api-reference/ayat/search.mdx b/api-reference/ayat/search.mdx deleted file mode 100644 index 0563073..0000000 --- a/api-reference/ayat/search.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "Search ayat by text" -description: "Find ayat containing a normalized Arabic substring." -api: "GET /ayat/search" ---- - -Searches the cached Quran corpus with -[`normalizeArabicForQuranSearch`](/concepts/arabic-search#normalizearabicforquransearch). - -## Endpoint - -```http -GET /ayat/search?text={query}&limit={n} -``` - - - Arabic text to search for. - - - - Maximum number of results. The controller clamps this value to `1..500`. - - -## Response - -```json -{ - "success": true, - "total": 1, - "data": [ - { - "surahNumber": 1, - "surahName": "الفاتحة", - "aya": { - "number": 1, - "text": "بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ", - "numberInSurah": 1 - } - } - ] -} -``` - -## Errors - -| Code | When | -| --- | --- | -| `400` | `text` is missing or empty. | -| `404` | No ayat matched the query. | -| `503` | The Quran corpus could not be loaded. | - -## Code Samples - - - - ```bash - curl "https://api.bonyanoss.org/bonyan-api/v1/ayat/search?text=الرحمن&limit=20" - ``` - - - ```js - const params = new URLSearchParams({ text: "الرحمن", limit: "20" }); - const res = await fetch(`https://api.bonyanoss.org/bonyan-api/v1/ayat/search?${params}`); - const body = await res.json(); - console.log(body.total); - ``` - - diff --git a/api-reference/azkar/overview.mdx b/api-reference/azkar/overview.mdx deleted file mode 100644 index c418c94..0000000 --- a/api-reference/azkar/overview.mdx +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: "Azkar" -description: "Supplication categories, category items, random item selection, and Arabic search." ---- - -The `Azkar` module serves supplication categories and items from a pinned -GitHub JSON source, with Hisn Muslim as fallback. - -| Endpoint | Description | -| --- | --- | -| `GET /azkar` | Category summaries. | -| `GET /azkar/random` | Random zekr from the cached corpus. | -| `GET /azkar/search` | Search across all azkar text. | -| `GET /azkar/:category` | Items for a category. | - -## Fallback Chain - -Pinned `raw.githubusercontent.com/nawafalqari/azkar-api` -> `hisnmuslim.com` - -## Cache TTL - -**24 hours** for the source corpus. Random selection itself is performed on -each request. - -## Response Shapes - -`GET /azkar` returns category summaries: - -```ts -type AzkarCategorySummary = { - name: string; - count: number; - apiName: "github.com/nawafalqari" | "hisnmuslim.com"; -}; -``` - -`GET /azkar/:category` returns the full category: - -```ts -type AzkarCategory = { - category: string; - items: AzkarItem[]; - apiName: "github.com/nawafalqari" | "hisnmuslim.com"; -}; - -type AzkarItem = { - id: number; - text: string; - count?: number; - reference?: string; - description?: string; -}; -``` - -Search and random endpoints return `{ category, item }` objects. Search also -adds a top-level `total` field. - -## Search - -`/azkar/search` uses [`normalizeArabic`](/concepts/arabic-search#normalizearabic) -before matching, so diacritics and common Arabic letter variants do not block -results. - -/snippets/fallback-callout.mdx diff --git a/api-reference/hadith/overview.mdx b/api-reference/hadith/overview.mdx deleted file mode 100644 index c1024cf..0000000 --- a/api-reference/hadith/overview.mdx +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: "Hadith" -description: "Hadith books, ranges, single-number lookup, and random selection." ---- - -The `Hadith` module lists available books, fetches ranges from a book, fetches -a single hadith by number, and returns a random hadith. - -| Endpoint | Description | -| --- | --- | -| `GET /hadith` | List available hadith books. | -| `GET /hadith/random` | Random hadith, optionally scoped with `book`. | -| `GET /hadith/:book` | Range from a book. | -| `GET /hadith/:book/:number` | A single hadith. | - -## Range Query - -`GET /hadith/:book` accepts: - -| Query | Default | Notes | -| --- | --- | --- | -| `from` | `1` | Positive integer. | -| `to` | `from + 29` | Must be greater than or equal to `from`; keep ranges around 300 items or fewer. | - -## Fallback Chain - -`api.hadith.gading.dev` -> jsDelivr mirror of `sutanlab/hadith-api` - -## Cache TTL - -| Data | TTL | -| --- | --- | -| Book list | 24 hours | -| Book ranges and single hadith lookup | 12 hours | - -## Canonical Types - -```ts -type HadithBook = { - id: string; - name: string; - available: number; - apiName: "hadith.gading.dev"; -}; - -type HadithItem = { - number: number; - text: string; - book: string; - apiName: "hadith.gading.dev"; -}; -``` - -`GET /hadith/random` returns: - -```ts -type RandomHadithResponse = { - book: string; - hadith: HadithItem; -}; -``` - -/snippets/fallback-callout.mdx diff --git a/api-reference/hijri/overview.mdx b/api-reference/hijri/overview.mdx deleted file mode 100644 index e3fe826..0000000 --- a/api-reference/hijri/overview.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: "Hijri to Gregorian" -description: "Today's Hijri date and conversion in both directions." ---- - -The `Hijri` module converts dates between Gregorian and Hijri calendars using -Aladhan. - -| Endpoint | Description | -| --- | --- | -| `GET /hijri/today` | Today in both calendars. | -| `GET /hijri/from-gregorian` | Convert Gregorian to Hijri. | -| `GET /hijri/to-gregorian` | Convert Hijri to Gregorian. | - -## Date Format - -Both conversion endpoints use `DD-MM-YYYY`. - -- `/hijri/from-gregorian` defaults to today when `date` is omitted. -- `/hijri/to-gregorian` requires `date`. - -## Source - -`api.aladhan.com` - -There is no second source in the current implementation. If Aladhan cannot -serve the conversion, the endpoint returns `503`. - -## Cache TTL - -**7 days**, keyed by direction and date. - -## Canonical Type - -```ts -type HijriDate = { - hijri: { - date: string; - day: string; - month: string; - monthAr: string; - year: string; - weekday: string; - weekdayAr: string; - }; - gregorian: { - date: string; - day: string; - month: string; - year: string; - }; - apiName: "aladhan.com"; -}; -``` - -/snippets/fallback-callout.mdx diff --git a/api-reference/meta/catalogue.mdx b/api-reference/meta/catalogue.mdx deleted file mode 100644 index 459daf7..0000000 --- a/api-reference/meta/catalogue.mdx +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: "Service catalogue" -description: "Project metadata and the full list of registered routes." -api: "GET /" ---- - -Returns the service name, description, and the Fastify routes registered at -boot. The route list is built from Fastify's `onRoute` hook and excludes `/` -and `/health`. - -## Endpoint - -```http -GET / -``` - -## Response - -```json -{ - "name": "Bonyan-API", - "description": "Quran & Azkar API with multi-source fallback", - "routes": [ - { "method": "GET", "url": "/surah" }, - { "method": "GET", "url": "/ayat/search" }, - { "method": "GET", "url": "/qibla" } - ] -} -``` - -This endpoint does not use the standard `{ success, data }` envelope. - -## Code Samples - - - - ```bash - curl https://api.bonyanoss.org/bonyan-api/v1/ - ``` - - - ```js - const res = await fetch("https://api.bonyanoss.org/bonyan-api/v1/"); - const catalogue = await res.json(); - console.log(catalogue.routes.map((route) => route.url)); - ``` - - - ```python - import requests - - catalogue = requests.get("https://api.bonyanoss.org/bonyan-api/v1/").json() - print(catalogue["name"], len(catalogue["routes"])) - ``` - - diff --git a/api-reference/meta/health.mdx b/api-reference/meta/health.mdx deleted file mode 100644 index e64d590..0000000 --- a/api-reference/meta/health.mdx +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: "Liveness probe" -description: "A tiny endpoint for uptime monitors and Kubernetes liveness probes." -api: "GET /health" ---- - -A no-frills liveness probe. Returns `200 OK` with a constant payload as long -as the Fastify process is running. Use it for Kubernetes liveness/readiness -probes, status-page checkers, and uptime monitors. - -## Endpoint - -``` -GET /health -``` - -No parameters. It is registered on the same Fastify app as the public API, so -the global rate-limit plugin can still apply. - -## Response — `200 OK` - -```json -{ - "status": "ok", - "code": 200, - "timestamp": "2026-05-06T10:15:00.000Z" -} -``` - -Note: this endpoint is one of the few that does **not** wrap its body in the -`{ success, data }` envelope. The shape above is what monitoring tools like -Better Stack, Pingdom, and Uptime Kuma expect by convention. - -## Code samples - - - - ```bash - curl https://api.bonyanoss.org/bonyan-api/v1/health - ``` - - - ```yaml - livenessProbe: - httpGet: - path: /health - port: 3000 - initialDelaySeconds: 5 - periodSeconds: 10 - timeoutSeconds: 2 - readinessProbe: - httpGet: - path: /health - port: 3000 - periodSeconds: 5 - ``` - - - ```dockerfile - HEALTHCHECK --interval=30s --timeout=3s --retries=3 \ - CMD wget -q -O- http://localhost:3000/health || exit 1 - ``` - - - -## Notes - -- The endpoint does **not** verify upstream connectivity. It's a process-liveness check, not a deep health check. (Adding deep checks would mean a /health that flaps every time `mp3quran.net` is slow — defeating the point of [fallback](/concepts/fallback).) -- The timestamp is ISO 8601 UTC. diff --git a/api-reference/meta/overview.mdx b/api-reference/meta/overview.mdx deleted file mode 100644 index c23291d..0000000 --- a/api-reference/meta/overview.mdx +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Meta" -description: "Service catalogue and liveness probe." ---- - -The `Meta` module exposes two endpoints used by clients (and uptime monitors) -to introspect the service. Neither talks to an upstream — they are computed -in-process and never fail. - -| Endpoint | Description | -| --- | --- | -| `GET /` | The full catalogue of registered routes plus project metadata. | -| `GET /health` | Liveness probe. Returns `{ status: "ok", code: 200, timestamp }`. | - -## When to use which - -- **`/`** — for *humans* and *integrations* discovering what the service offers (e.g. an admin dashboard listing all available endpoints). -- **`/health`** — for *machines* (Kubernetes liveness probes, status-page checkers, uptime monitors). Tiny payload, never cached. - - - Neither endpoint participates in the [rate limit](/concepts/rate-limit). You - can hit `/health` as often as you like. - diff --git a/api-reference/prayer/overview.mdx b/api-reference/prayer/overview.mdx deleted file mode 100644 index 24c10c0..0000000 --- a/api-reference/prayer/overview.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "Prayer times" -description: "Daily prayer timings by coordinates or city/country." ---- - -The `Prayer` module returns prayer times for a given date and location. -Location can be provided as coordinates or as city/country. - -| Endpoint | Description | -| --- | --- | -| `GET /prayer/times` | Prayer times for a date and location. | - -## Query Parameters - -| Parameter | Required | Notes | -| --- | --- | --- | -| `date` | No | Defaults to today. Format: `DD-MM-YYYY`. | -| `latitude` | Conditional | Required with `longitude` when using coordinates. | -| `longitude` | Conditional | Required with `latitude` when using coordinates. | -| `city` | Conditional | Required with `country` when using city lookup. | -| `country` | Conditional | Required with `city` when using city lookup. | -| `method` | No | Integer Aladhan calculation method ID. If omitted, the upstream default is used. | - -The controller requires either `latitude + longitude` or `city + country`. - -## Fallback Chain - -| Request shape | Providers | -| --- | --- | -| Coordinates | Aladhan `/timings/{date}` -> pray.zone | -| City and country | Aladhan `/timingsByCity/{date}` | -| Both provided | Coordinates provider first, then city provider, then pray.zone | - -## Cache TTL - -**1 hour**, keyed by date, coordinates, city, country, and method. - -## Canonical Type - -```ts -type PrayerTimings = { - date: string; - hijri?: string; - timings: { - Fajr: string; - Sunrise?: string; - Dhuhr: string; - Asr: string; - Sunset?: string; - Maghrib: string; - Isha: string; - Imsak?: string; - Midnight?: string; - }; - method?: string; - coordinates?: { latitude: number; longitude: number }; - apiName: "aladhan.com" | "pray.zone"; -}; -``` - -/snippets/fallback-callout.mdx diff --git a/api-reference/qibla/overview.mdx b/api-reference/qibla/overview.mdx deleted file mode 100644 index 7104c1a..0000000 --- a/api-reference/qibla/overview.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "Qibla" -description: "Compass bearing toward the Kaaba, with a local mathematical fallback." ---- - -The `Qibla` module returns the compass bearing, in degrees clockwise from true -north, toward the Kaaba in Makkah. - -| Endpoint | Description | -| --- | --- | -| `GET /qibla` | Compass bearing toward the Kaaba. | - -## Query Parameters - -| Parameter | Required | Notes | -| --- | --- | --- | -| `latitude` | Yes | Number in `[-90, 90]`. | -| `longitude` | Yes | Number in `[-180, 180]`. | - -## Fallback Chain - -`api.aladhan.com/qibla` -> local great-circle calculation - -If Aladhan is unreachable, Bonyan-API computes the direction in-process: - -```ts -function localQiblaDirection(lat: number, lng: number): number { - const kaabaLat = 21.4225; - const kaabaLng = 39.8262; - - const phiK = (kaabaLat * Math.PI) / 180; - const lambdaK = (kaabaLng * Math.PI) / 180; - const phi = (lat * Math.PI) / 180; - const lambda = (lng * Math.PI) / 180; - - const y = Math.sin(lambdaK - lambda); - const x = - Math.cos(phi) * Math.tan(phiK) - - Math.sin(phi) * Math.cos(lambdaK - lambda); - - return ((Math.atan2(y, x) * 180) / Math.PI + 360) % 360; -} -``` - -## Response - -```json -{ - "success": true, - "data": { - "latitude": 24.7136, - "longitude": 46.6753, - "direction": 243.7091, - "apiName": "aladhan.com" - } -} -``` - -## Canonical Type - -```ts -type QiblaInfo = { - latitude: number; - longitude: number; - direction: number; - apiName: "aladhan.com"; -}; -``` - - - The current response does not expose whether the local fallback was used. - `apiName` remains `aladhan.com` because the module has a single public source - label in its type. - - -## Cache TTL - -**30 days.** Cache keys round coordinates to 4 decimal places. - -/snippets/fallback-callout.mdx diff --git a/api-reference/reciters/overview.mdx b/api-reference/reciters/overview.mdx deleted file mode 100644 index d425160..0000000 --- a/api-reference/reciters/overview.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "Reciters" -description: "Reciters, moshaf metadata, Arabic search, and MP3 URL resolution." ---- - -The `Reciters` module powers Quran audio workflows. It can list reciters, -search reciters by Arabic name, fetch one reciter, and resolve a surah audio -URL from the first available moshaf. - -| Endpoint | Description | -| --- | --- | -| `GET /reciters` | All reciters. | -| `GET /reciters/:id` | A single reciter. | -| `GET /reciters/search` | Search reciters by Arabic name. | -| `GET /reciters/:id/surah/:surah` | Resolve an MP3 URL. | - -## Fallback Chain - -`mp3quran.net` -> `quran.com` - -The `quran.com` fallback exposes recitation metadata but may not include the -`moshaf` server array used by the audio-resolution endpoint. - -## Cache TTL - -**1 hour.** - -## Canonical Types - -```ts -type ReciterItem = { - id: number; - name: string; - date?: string; - moshaf?: { - id: number; - name: string; - server: string; - }[]; - style?: string | null; - apiName: "mp3quran.net" | "quran.com"; -}; -``` - -`GET /reciters/:id/surah/:surah` returns: - -```ts -type ReciterAudio = { - reciter: string; - surah: number; - audio: string; -}; -``` - -The service pads the surah number to three digits and appends `.mp3`: - -```ts -const audio = `${moshaf.server}${String(surah).padStart(3, "0")}.mp3`; -``` - -/snippets/fallback-callout.mdx diff --git a/api-reference/surah/get.mdx b/api-reference/surah/get.mdx deleted file mode 100644 index 846d05c..0000000 --- a/api-reference/surah/get.mdx +++ /dev/null @@ -1,98 +0,0 @@ ---- -title: "Get a single surah" -description: "Returns a single surah by its 1..114 numeric ID." -api: "GET /surah/{id}" ---- - -Returns a single surah by its numeric ID. The ID is the conventional surah -number (1 = Al-Fatiha, 2 = Al-Baqara, …, 114 = An-Nas). - -## Endpoint - -``` -GET /surah/:id -``` - -### Path parameters - - - Surah number, between **1** and **114** inclusive. - - -## Response — `200 OK` - -```json -{ - "success": true, - "data": { - "id": 1, - "name": "الفاتحة", - "makkia": true, - "apiName": "mp3quran.net" - } -} -``` - -## Errors - -| Code | Body | When | -| --- | --- | --- | -| `400` | `Surah id must be between 1 and 114` | `id` is not a number, or is outside the range. | -| `404` | `Surah not found` | The cached surah list did not contain that ID. | -| `503` | Provider error message | All three upstreams failed. | - -## Fallback chain - -`mp3quran.net` → `alquran.cloud` → `quran.com` - -## Code samples - - - - ```bash - curl https://api.bonyanoss.org/bonyan-api/v1/surah/1 - ``` - - - ```js - const r = await fetch("https://api.bonyanoss.org/bonyan-api/v1/surah/1"); - const { data } = await r.json(); - console.log(data.name); // "الفاتحة" - ``` - - - ```ts - import axios from "axios"; - const surahId = 1; - const { data } = await axios.get(`https://api.bonyanoss.org/bonyan-api/v1/surah/${surahId}`); - console.log(data.data.name); - ``` - - - ```python - import requests - s = requests.get("https://api.bonyanoss.org/bonyan-api/v1/surah/1").json()["data"] - print(s["name"]) # الفاتحة - ``` - - - ```php - - - ```go - r, _ := http.Get("https://api.bonyanoss.org/bonyan-api/v1/surah/1") - defer r.Body.Close() - body, _ := io.ReadAll(r.Body) - fmt.Println(string(body)) - ``` - - - -## Notes - -- Cached for **12 hours**. -- If you need many surahs at once, prefer `GET /surah` over a loop — one cached call beats 114. diff --git a/api-reference/surah/list.mdx b/api-reference/surah/list.mdx deleted file mode 100644 index b108e45..0000000 --- a/api-reference/surah/list.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "List all surahs" -description: "Returns the full index of all 114 surahs." -api: "GET /surah" ---- - -Returns every surah with its number, Arabic name, Meccan/Medinan flag when -available, and the provider label that supplied the cached list. - -## Endpoint - -```http -GET /surah -``` - -## Response - -```json -{ - "success": true, - "data": { - "surah": [ - { "id": 1, "name": "الفاتحة", "makkia": true, "apiName": "mp3quran.net" }, - { "id": 2, "name": "البقرة", "makkia": false, "apiName": "mp3quran.net" } - ] - } -} -``` - -## Code Samples - - - - ```bash - curl https://api.bonyanoss.org/bonyan-api/v1/surah - ``` - - - ```js - const res = await fetch("https://api.bonyanoss.org/bonyan-api/v1/surah"); - const body = await res.json(); - console.log(body.data.surah.length); - ``` - - - ```python - import requests - - body = requests.get("https://api.bonyanoss.org/bonyan-api/v1/surah").json() - print(len(body["data"]["surah"])) - ``` - - - -## Notes - -- Cached for **12 hours** under `surah:all`. -- Provider order: `mp3quran.net` -> `alquran.cloud` -> `quran.com`. diff --git a/api-reference/surah/overview.mdx b/api-reference/surah/overview.mdx deleted file mode 100644 index 1df17ce..0000000 --- a/api-reference/surah/overview.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: "Surah" -description: "Index of all 114 surahs with diacritic-insensitive Arabic search." ---- - -The `Surah` module is the lookup table for the 114 surahs of the Quran. Use it -to populate dropdowns, render a table of contents, or resolve an Arabic name -into a numeric ID for use elsewhere in the API. - -| Endpoint | Description | -| --- | --- | -| `GET /surah` | Full list of all 114 surahs. | -| `GET /surah/:id` | A single surah by id (1–114). | -| `GET /surah/search` | Search by Arabic name (diacritic-insensitive). | - -## Fallback chain - -`mp3quran.net` → `alquran.cloud` → `quran.com` - -If all three fail, the response is `503` with a `{ success: false, message }` -body. - -## Cache TTL - -**12 hours.** The 114-surah list never changes — the cap exists only so we -re-validate against upstreams twice a day. - -## Canonical type - -```ts -type SurahItem = { - id: number; // 1..114 - name: string; // الفاتحة - makkia?: boolean; // true if Meccan, false if Medinan - apiName: "mp3quran.net" | "alquran.cloud" | "quran.com"; // which source served the response -}; -``` - -The `apiName` field is informational — see [Concepts → Fallback](/concepts/fallback#canonical-shapes). - -/snippets/fallback-callout.mdx diff --git a/api-reference/surah/search.mdx b/api-reference/surah/search.mdx deleted file mode 100644 index 94d9c5d..0000000 --- a/api-reference/surah/search.mdx +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: "Search surahs by name" -description: "Diacritic-insensitive Arabic search across the surah names." -api: "GET /surah/search" ---- - -Searches the 114-surah index by Arabic name. The query is normalized through -[`normalizeArabic`](/concepts/arabic-search) before the substring match, so -typing the name with or without tashkeel finds the same surah. - -## Endpoint - -``` -GET /surah/search?name={query} -``` - -### Query parameters - - - The Arabic name to search for. Substring match. URL-encode if hand-rolling. - - -## Response — `200 OK` - -```json -{ - "success": true, - "data": [ - { "id": 1, "name": "الفاتحة", "makkia": true, "apiName": "mp3quran.net" } - ] -} -``` - -If no surah matches, the endpoint returns `404`. - -## Errors - -| Code | When | -| --- | --- | -| `400` | `name` query parameter is missing or empty. | -| `429` | Rate limit exceeded. | -| `404` | No matching surah was found. | -| `503` | The surah index could not be loaded from any upstream. | - -## Fallback chain - -The search runs against the **already-loaded surah index**, so its fallback -chain is the same as `GET /surah`: -`mp3quran.net` → `alquran.cloud` → `quran.com`. - -## Code samples - - - - ```bash - curl "https://api.bonyanoss.org/bonyan-api/v1/surah/search?name=الفاتحة" - ``` - - - ```js - const q = encodeURIComponent("الفاتحة"); - const r = await fetch(`https://api.bonyanoss.org/bonyan-api/v1/surah/search?name=${q}`); - const { data } = await r.json(); - console.log(data); // [{ id: 1, name: "الفاتحة", ... }] - ``` - - - ```ts - import axios from "axios"; - const { data } = await axios.get("https://api.bonyanoss.org/bonyan-api/v1/surah/search", { - params: { name: "الفاتحة" }, - }); - console.log(data.data); - ``` - - - ```python - import requests - r = requests.get("https://api.bonyanoss.org/bonyan-api/v1/surah/search", params={"name": "الفاتحة"}) - print(r.json()["data"]) - ``` - - - ```php - - - ```go - q := url.QueryEscape("الفاتحة") - r, _ := http.Get("https://api.bonyanoss.org/bonyan-api/v1/surah/search?name=" + q) - defer r.Body.Close() - io.Copy(os.Stdout, r.Body) - ``` - - - -## Examples - -| Query | Matches | -| --- | --- | -| `الفاتحة` | Al-Fatiha (1) | -| `الفَاتِحَة` | Al-Fatiha (1) — tashkeel ignored | -| `بقر` | Al-Baqara (2) | -| `إبراهيم` | Ibrahim (14) | -| `يس` | Ya-Sin (36) | -| `يَـــس` | Ya-Sin (36) — tatweel stripped | - -## Notes - -- All client search-as-you-type bars should debounce (200–300ms) to avoid burning the rate limit. -- For a 114-item dataset, you may also want to fetch `/surah` once and search client-side. diff --git a/api-reference/tafsir/overview.mdx b/api-reference/tafsir/overview.mdx deleted file mode 100644 index ef2b28b..0000000 --- a/api-reference/tafsir/overview.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Tafsir" -description: "Supported tafsir editions by full surah or single aya." ---- - -The `Tafsir` module exposes supported Arabic tafsir editions. You can request a -whole surah or one aya. - -| Endpoint | Description | -| --- | --- | -| `GET /tafsir` | List supported editions. | -| `GET /tafsir/:edition/:surah` | Tafsir for a whole surah. | -| `GET /tafsir/:edition/:surah/:aya` | Tafsir for a single aya. | -| `GET /tafsir/:edition/:surah?aya=N` | Single aya using query parameter form. | - -## Editions - -| Public slug | Provider edition | -| --- | --- | -| `muyassar` | `ar.muyassar`, fallback `arabic_moyassar` | -| `jalalayn` | `ar.jalalayn` | -| `saadi` | `arabic_saadi` | -| `waseet` | `ar.waseet` | -| `qurtubi` | `ar.qurtubi` | - -## Fallback Behavior - -For editions that exist on both providers, Bonyan-API tries `alquran.cloud` first -and falls back to `quranenc.com`. Editions that exist on only one provider use -that provider directly. - -## Cache TTL - -**24 hours**, keyed by edition, surah, and optional aya. - -## Canonical Type - -```ts -type TafsirItem = { - surah: number; - aya: number; - text: string; - edition: string; - apiName: "alquran.cloud" | "quranenc.com"; -}; -``` - -When you fetch a whole surah, `data` is an array. When you fetch a single aya -through the path-param endpoint, `data` is one `TafsirItem`. - -/snippets/fallback-callout.mdx diff --git a/favicon.svg b/assets/favicon.svg similarity index 100% rename from favicon.svg rename to assets/favicon.svg diff --git a/bonyan-api.mdx b/bonyan-api.mdx deleted file mode 100644 index e43b777..0000000 --- a/bonyan-api.mdx +++ /dev/null @@ -1,162 +0,0 @@ ---- -title: "Bonyan API" -description: "The BonyanOSS REST API for Quran, tafsir, recitations, azkar, hadith, prayer times, Hijri dates, and Qibla." -mode: "wide" ---- - -**Bonyan API** is the first major API surface under BonyanOSS. It is a -Fastify + TypeScript service that gives developers one clean interface for -Islamic content and utilities: Quran text, surah metadata, reciters, tafsir, -azkar, hadith, prayer times, Hijri conversion, and Qibla direction. - -The project is intentionally simple: one module per domain, one controller per -route group, one service layer per upstream chain, and one stable JSON contract -for clients. - -## Surfaces - -| Surface | URL | Role | -| --- | --- | --- | -| Hosted API | `api.bonyanoss.org/bpnyan-api/v1` | Public versioned API gateway path. | -| Docs | `docs.bonyanoss.org/bonyan-api` | Guides, concepts, examples, and reference. | -| Source code | `github.com/BonyanOSS/Bonyan-API` | MIT-licensed Fastify + TypeScript implementation. | -| Status | `status.bonyanoss.org` | Availability for public BonyanOSS services. | - -## What It Provides - - - - Fetch all ayat, single ayat, surah/ayah lookups, normalized Arabic search, - and the 114-surah index. - - - List reciters, inspect available moshafs, search by Arabic name, and resolve - MP3 URLs. - - - Read supported Arabic tafsir editions by full surah or individual aya. - - - Serve supplication categories, category items, random azkar, and normalized - Arabic search. - - - List books, request ranges, fetch a single hadith by number, or request a - random hadith. - - - Prayer times, Hijri date conversion, today's Hijri date, and Qibla bearing. - - - -## Implementation Shape - -| Layer | What the code does | -| --- | --- | -| Server | Creates the Fastify app, enables CORS, applies `@fastify/rate-limit`, registers modules, and exposes `/` plus `/health`. | -| Routes | Each module owns its route file, such as `surah.route.ts`, `ayat.route.ts`, and `qibla.route.ts`. | -| Controllers | Validate path/query parameters, return `400`/`404` for client mistakes, and call service functions. | -| Services | Fetch upstream providers, map their raw payloads into BonyanOSS types, cache results, and run fallback chains. | -| Utilities | Shared helpers cover response envelopes, Arabic normalization, timeout-aware fetch, fallback, and in-process caching. | - -## Reliability Model - -```mermaid -sequenceDiagram - autonumber - participant App as Client app - participant API as Bonyan API - participant Cache as In-process cache - participant Primary as Primary provider - participant Backup as Backup provider - - App->>API: GET /ayat/1 - API->>API: Validate route params - API->>Cache: Lookup cache key - alt Cache hit - Cache-->>API: Canonical payload - API-->>App: 200 OK - else Cache miss - API->>Primary: fetchWithTimeout - alt Primary returns usable data - Primary-->>API: Raw provider payload - API->>API: Map to canonical shape - API->>Cache: Store with module TTL - API-->>App: 200 OK - else Primary fails or returns empty data - API->>Backup: Try next provider - Backup-->>API: Raw provider payload - API->>API: Map to canonical shape - API-->>App: 200 OK - end - end -``` - -The service never asks clients to understand upstream formats. A surah item, -ayah item, hadith item, or Qibla result keeps the same shape regardless of -which provider answered behind the scenes. - -## Response Contract - -Most endpoints return one of these two shapes: - -```json Success -{ "success": true, "data": { "endpoint": "specific payload" } } -``` - -```json Failure -{ "success": false, "message": "human-readable error" } -``` - -Search endpoints such as `/ayat/search` and `/azkar/search` add a top-level -`total` field: - -```json Search success -{ "success": true, "total": 12, "data": [] } -``` - -`GET /` and `GET /health` are intentionally small service endpoints and do not -use the standard success envelope. - -## Module Map - -| Module | Routes | -| --- | --- | -| Meta | `GET /`, `GET /health` | -| Surah | `GET /surah`, `GET /surah/:id`, `GET /surah/search` | -| Ayat | `GET /ayat`, `GET /ayat/:id`, `GET /ayat/:surah/aya/:id`, `GET /ayat/search` | -| Reciters | `GET /reciters`, `GET /reciters/:id`, `GET /reciters/search`, `GET /reciters/:id/surah/:surah` | -| Tafsir | `GET /tafsir`, `GET /tafsir/:edition/:surah`, `GET /tafsir/:edition/:surah/:aya` | -| Azkar | `GET /azkar`, `GET /azkar/:category`, `GET /azkar/random`, `GET /azkar/search` | -| Hadith | `GET /hadith`, `GET /hadith/random`, `GET /hadith/:book`, `GET /hadith/:book/:number` | -| Prayer | `GET /prayer/times` | -| Hijri | `GET /hijri/today`, `GET /hijri/from-gregorian`, `GET /hijri/to-gregorian` | -| Qibla | `GET /qibla` | - -## Source Chains - -| Module | Primary | Fallback | -| --- | --- | --- | -| Surah | `mp3quran.net` | `alquran.cloud`, then `quran.com` | -| Ayat | `alquran.cloud` Uthmani Quran | jsDelivr mirror of `fawazahmed0/quran-api` | -| Reciters | `mp3quran.net` | `quran.com` recitations | -| Tafsir | Edition-specific `alquran.cloud` or `quranenc.com` | The other provider when the edition exists there | -| Azkar | Pinned `nawafalqari/azkar-api` JSON | `hisnmuslim.com` | -| Hadith | `api.hadith.gading.dev` | jsDelivr mirror of `sutanlab/hadith-api` | -| Prayer | `api.aladhan.com` | `api.pray.zone` for coordinate requests | -| Hijri | `api.aladhan.com` | No second source | -| Qibla | `api.aladhan.com` | Local great-circle calculation | - -## Where To Go Next - - - - Make the first request and understand the response envelope. - - - See how upstream timeout, empty payload, and fallback behavior works. - - - Browse every endpoint, parameter, response shape, and example. - - diff --git a/code-of-conduct.mdx b/code-of-conduct.mdx deleted file mode 100644 index a1df57b..0000000 --- a/code-of-conduct.mdx +++ /dev/null @@ -1,151 +0,0 @@ ---- -title: "Code of Conduct" -description: "How contributors, maintainers, users, and community members are expected to treat one another across BonyanOSS spaces." ---- - -Last updated: 2026-05-07 - -## Purpose - -BonyanOSS exists to build open-source Islamic and beneficial software that -serves people and remains useful over time. - -This Code of Conduct protects that purpose by describing how contributors, -maintainers, users, and community members are expected to treat one another -across BonyanOSS projects and spaces. - -## Our Commitment - -We are committed to making BonyanOSS a respectful, safe, and welcoming -environment for everyone who wants to contribute to beneficial work, regardless -of background, level of experience, nationality, ethnicity, language, age, -disability, religion, school of thought, gender, or other personal -characteristics. - -BonyanOSS is rooted in Islamic values such as adab, amanah, ihsan, mercy, -humility, and sincere benefit. These values should be reflected in how we write -code, review work, discuss ideas, disagree, and make decisions. - -## Expected Behavior - -Community members are expected to: - -- Treat others with respect, patience, and good manners. -- Assume good faith when possible and ask for clarification before escalating disagreement. -- Give constructive feedback focused on the work, not the person. -- Welcome beginners, students, and contributors who are still learning. -- Be honest about limitations, mistakes, sources, and uncertainty. -- Keep discussions relevant to the project and its goals. -- Respect maintainers' time, project scope, and technical decisions. -- Handle Islamic content with care, source clarity, and humility. -- Accept responsibility, apologize when appropriate, and work to repair harm. - -## Unacceptable Behavior - -The following behavior is not acceptable in BonyanOSS spaces: - -- Harassment, intimidation, threats, or sustained disruption. -- Insults, personal attacks, mocking, or hostile language. -- Discrimination or exclusion based on personal characteristics. -- Sectarian hostility, inflammatory religious labeling, or declaring other participants outside Islam. -- Sexualized language, sexual attention, or inappropriate imagery. -- Publishing private information without clear permission. -- Trolling, spam, repeated off-topic arguments, or bad-faith participation. -- Misrepresenting Islamic sources, project decisions, or another person's words. -- Abusing project infrastructure, security processes, permissions, or maintainer trust. -- Retaliation against someone for reporting a concern or participating in an enforcement process. - -## Islamic Content and Differences of Opinion - -BonyanOSS projects may involve Quran, Hadith, Islamic learning, datasets, -research tools, and related religious material. Because of that, contributors -should be especially careful when discussing Islamic content. - -When contributing religious content or making claims related to Islamic -knowledge: - -- Cite sources where relevant. -- Separate source text, translation, interpretation, and personal opinion. -- Avoid presenting disputed matters as unanimous consensus. -- Discuss differences with respect and restraint. -- Keep debates within the project's scope and purpose. - -Maintainers may close, limit, or redirect discussions that become unproductive, -sectarian, or outside the project's goals. - -## Scope - -This Code of Conduct applies in all BonyanOSS community spaces, including: - -- GitHub repositories, issues, pull requests, discussions, releases, and wikis. -- Documentation, websites, forums, chats, and community channels. -- Project planning, reviews, meetings, and events. -- Public spaces where someone is clearly representing BonyanOSS or one of its projects. - -It also applies when behavior outside official spaces directly harms the -safety, trust, or participation of BonyanOSS community members. - -## Reporting - -If you experience or witness behavior that violates this Code of Conduct, -please report it privately to the maintainers. - - - Add a private reporting email, contact form, or GitHub maintainer contact - before the public launch. - - -When reporting, include as much relevant information as you can: - -- What happened. -- Where it happened. -- Who was involved. -- Links, screenshots, or timestamps if available. -- Whether there is any immediate safety or privacy concern. - -Reports will be handled with reasonable confidentiality. Information will only -be shared with people who need it to review and respond to the situation. - -## Enforcement - -Maintainers are responsible for reviewing reports and responding in a fair, -consistent, and timely way. - -Depending on the situation, maintainers may take one or more of the following -actions: - -- Clarify expectations or remind someone of this Code of Conduct. -- Ask for an apology, correction, or change in behavior. -- Edit, hide, or remove comments, issues, pull requests, or other content. -- Issue a private or public warning. -- Temporarily restrict participation in one or more BonyanOSS spaces. -- Permanently ban a person from BonyanOSS spaces. -- Escalate to platform moderators, hosting providers, or relevant authorities when necessary. - -Maintainers may act immediately and without prior warning when there is a -serious risk to safety, privacy, infrastructure, or community trust. - -## Maintainer Responsibilities - -Maintainers are expected to: - -- Apply this Code of Conduct consistently and in good faith. -- Avoid using enforcement for personal disputes or technical disagreement. -- Recuse themselves when they have a conflict of interest. -- Protect reporters from retaliation. -- Make decisions based on the available facts and the health of the community. - -## Project Decisions - -Technical decisions, scope decisions, and moderation decisions should be made -with the long-term benefit of the project in mind. - -Disagreement is allowed. Disrespect is not. - -Healthy collaboration includes discussion, review, correction, and sometimes -saying no. BonyanOSS aims to keep these moments principled, calm, and useful. - -## Attribution - -This Code of Conduct was written for BonyanOSS and may be reused or adapted by -projects within the BonyanOSS organization. diff --git a/concepts/arabic-search.mdx b/concepts/arabic-search.mdx deleted file mode 100644 index 75fa7ae..0000000 --- a/concepts/arabic-search.mdx +++ /dev/null @@ -1,81 +0,0 @@ ---- -title: "Arabic search & normalization" -description: "How Bonyan-API normalizes Arabic names and Quran text before search." ---- - -Arabic search needs normalization. Users may type without tashkeel, copy Quran -text with waqf marks, use different alif forms, or type `ة` where a source -stores `ه`. Bonyan-API solves this before comparing strings. - -There are two normalization functions in `utils/arabic.ts`. - -## `normalizeArabic` - -Used by `/surah/search`, `/reciters/search`, and `/azkar/search`. - -It does the following: - -1. Applies Unicode `NFKD` normalization. -2. Removes tashkeel, Quran marks, superscript alif, and tatweel. -3. Normalizes alif forms to `ا`. -4. Normalizes `ى` to `ي`. -5. Normalizes `ؤ` and `و` to `و`. -6. Normalizes `ئ` to `ي`. -7. Normalizes `ة` and `ه` to `ه`. -8. Removes non-Arabic characters except whitespace. -9. Lowercases and trims the result. - -| Input | Normalized | -| --- | --- | -| `الفاتحة` | `الفاتحه` | -| `ٱلْفَاتِحَةُ` | `الفاتحه` | -| `إبراهيم` | `ابراهيم` | -| `يـــس` | `يس` | - -Whitespace is preserved except for trimming at the edges. - -## `normalizeArabicForQuranSearch` - -Used by `/ayat/search`. - -This version is stricter for verse search: - -- It applies Unicode `NFKD`. -- It converts superscript alif to `ا`. -- It removes tashkeel and Quran stop/annotation marks. -- It normalizes alif forms, yaa, hamza-on-waw, hamza-on-yaa, and taa marbuta. -- It removes tatweel. -- It removes punctuation and non-Arabic characters. -- It removes all whitespace before matching. - -| Input | Normalized | -| --- | --- | -| `بِسْمِ ٱللَّهِ` | `بسمالله` | -| `ٱلْحَمْدُ لِلَّهِ` | `الحمدلله` | -| `إِيَّاكَ نَعْبُدُ` | `اياكنعبد` | - -Removing whitespace means a user can still find a phrase even if their copy -contains different spacing from the source text. - -## Client Behavior - -Clients do not need to normalize before calling the API. Send the user's raw -input: - -```bash -curl "https://api.bonyanoss.org/bonyan-api/v1/surah/search?name=الفاتحة" -curl "https://api.bonyanoss.org/bonyan-api/v1/surah/search?name=الفاتحه" -curl "https://api.bonyanoss.org/bonyan-api/v1/surah/search?name=ٱلْفَاتِحَةُ" -``` - -## Limits - -- Transliteration is not supported. `al-fatiha` will not match `الفاتحة`. -- Fuzzy typo search is not supported. Missing letters are not guessed. -- Matching is substring-based after normalization. - - - If you find a real Arabic search edge case, open an issue in - [BonyanOSS/Bonyan-API](https://github.com/BonyanOSS/Bonyan-API) with the input - and expected result. - diff --git a/concepts/caching.mdx b/concepts/caching.mdx deleted file mode 100644 index b47611e..0000000 --- a/concepts/caching.mdx +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: "Caching" -description: "The in-process memoization model used by Bonyan-API." ---- - -Bonyan-API uses a small in-process cache in `utils/cache.ts`. It is a `Map` -with per-key expiry plus an `inflight` map that coalesces concurrent identical -loads. - -There is no Redis layer in the current project. That is intentional for this -stage: most content is public, read-heavy, and slow-changing, so a local -memoized service layer keeps the implementation easy to understand and easy to -self-host. - -## TTL By Data Set - -| Data | Cache key pattern | TTL | -| --- | --- | --- | -| Surah list and surah search | `surah:all` | 12 hours | -| Full Quran corpus, ayah lookup, ayah search | `ayat:full` | 24 hours | -| Reciters, reciter search, audio URL lookup | `reciters:all` | 1 hour | -| Tafsir by edition/surah/aya | `tafsir:{edition}:{surah}:{aya-or-all}` | 24 hours | -| Azkar categories, category lookup, search, random source pool | `azkar:all` | 24 hours | -| Hadith book list | `hadith:books` | 24 hours | -| Hadith book ranges and single hadith lookup | `hadith:book:{book}:{from}-{to}` | 12 hours | -| Prayer times | `prayer:{date}:{lat}:{lng}:{city}:{country}:{method}` | 1 hour | -| Hijri conversions | `hijri:g2h:{date}`, `hijri:h2g:{date}` | 7 days | -| Qibla direction | `qibla:{lat.toFixed(4)}:{lng.toFixed(4)}` | 30 days | - -`/azkar/random` still returns a fresh random item on every request. What is -cached is the source corpus it selects from. - -## Concurrent-call Coalescing - -If three clients trigger the same cold key at the same time, Bonyan-API runs -the loader once and lets every caller await the same promise. - -```mermaid -sequenceDiagram - participant A as Client A - participant B as Client B - participant C as Client C - participant API as Bonyan-API - participant U as Upstream - - par - A->>API: GET /surah - and - B->>API: GET /surah - and - C->>API: GET /surah - end - Note over API: one inflight promise for surah:all - API->>U: one upstream request - U-->>API: payload - API-->>A: 200 OK - API-->>B: 200 OK - API-->>C: 200 OK -``` - -This is the part that protects upstream providers during cold starts and -traffic bursts. - -## What Is Cached - -The services cache normalized internal data, not raw upstream responses. For -example, `getAyatContent()` caches the full Quran corpus as -`SurahWithAyaItem[]`; individual ayah lookups and text search then scan that -cached corpus in-process. - -Failures are not cached. If a provider chain fails and returns `503`, the next -request tries the provider chain again. - -## When To Add Redis - -Add a shared cache only when you actually run multiple replicas and need cache -state shared between them. The replacement point is deliberately narrow: -replace the implementation behind `memoize`, `invalidate`, and `clearCache` -while keeping service code unchanged. diff --git a/concepts/errors.mdx b/concepts/errors.mdx deleted file mode 100644 index 4225027..0000000 --- a/concepts/errors.mdx +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: "Errors" -description: "The status-code matrix, response envelopes, and retry guidance for Bonyan-API." ---- - -Bonyan-API keeps controller errors intentionally boring. Client-side mistakes -return `400` or `404`, exhausted upstream chains return `503`, and unexpected -server bugs return `500`. - -## Standard Envelope - -Most successful module endpoints return: - -```json Success -{ "success": true, "data": { "endpoint": "specific payload" } } -``` - -Most failures return: - -```json Failure -{ "success": false, "message": "human-readable error" } -``` - -Search endpoints such as `/ayat/search` and `/azkar/search` include a top-level -`total` next to `data`. The service endpoints `GET /` and `GET /health` are -small metadata/liveness endpoints and do not use the normal envelope. - -## Status Codes - -| Code | Meaning | Typical cause | Retry? | -| --- | --- | --- | --- | -| `200` | OK | Request succeeded. | n/a | -| `400` | Bad request | Invalid ID, missing query parameter, bad date, invalid coordinates. | No | -| `404` | Not found | The requested item, category, reciter, surah, aya, or hadith was not found. | No | -| `429` | Too many requests | The client exceeded the Fastify rate limit. | Yes, after `Retry-After` | -| `500` | Internal server error | A bug or unexpected runtime failure. | Report it | -| `503` | Service unavailable | No upstream source could produce usable data. | Yes, with backoff | - -There is no auth layer in the current API, so normal requests do not return -`401` or `403`. - -## Examples - -### 400 Bad Request - -```bash -curl https://api.bonyanoss.org/bonyan-api/v1/surah/999 -``` - -```json -{ - "success": false, - "message": "Surah id must be between 1 and 114" -} -``` - -### 404 Not Found - -```bash -curl https://api.bonyanoss.org/bonyan-api/v1/hadith/bukhari/999999 -``` - -```json -{ - "success": false, - "message": "Hadith not found" -} -``` - -### 503 Service Unavailable - -```json -{ - "success": false, - "message": "hadith.gading.dev book failed" -} -``` - -The exact `message` reflects the thrown service error. Do not parse it as a -stable machine contract. - -## Retry Policy - -Retry only `429` and `503`. Do not retry `400` or `404`; the request itself is -wrong or the resource is not available. - - - - ```ts - async function fetchBonyan(url: string, attempt = 0): Promise { - const res = await fetch(url); - - if (res.status === 429) { - const wait = Number(res.headers.get("retry-after") ?? 1); - await new Promise((resolve) => setTimeout(resolve, wait * 1000)); - return fetchBonyan(url, attempt + 1); - } - - if (res.status === 503 && attempt < 2) { - await new Promise((resolve) => setTimeout(resolve, 500 * 2 ** attempt)); - return fetchBonyan(url, attempt + 1); - } - - const json = await res.json(); - if (json.success === false) throw new Error(json.message); - return json.data ?? json; - } - ``` - - - ```python - import time - import requests - - def fetch_bonyan(url, attempt=0): - res = requests.get(url) - - if res.status_code == 429: - time.sleep(int(res.headers.get("retry-after", "1"))) - return fetch_bonyan(url, attempt + 1) - - if res.status_code == 503 and attempt < 2: - time.sleep(0.5 * 2 ** attempt) - return fetch_bonyan(url, attempt + 1) - - body = res.json() - if body.get("success") is False: - raise RuntimeError(body["message"]) - return body.get("data", body) - ``` - - - - - Treat `message` as human-readable text for logs and debugging. Build client - decisions from HTTP status codes and documented response fields. - diff --git a/concepts/fallback.mdx b/concepts/fallback.mdx deleted file mode 100644 index e03a08c..0000000 --- a/concepts/fallback.mdx +++ /dev/null @@ -1,124 +0,0 @@ ---- -title: "Multi-source fallback" -description: "How Bonyan-API keeps one client contract while upstream providers fail, time out, or return empty data." ---- - -Bonyan-API depends on public upstream providers, and public upstream providers -sometimes fail. The API handles that by trying an ordered source chain inside -the service layer, then returning the same canonical BonyanOSS shape to the -client no matter which provider answered. - -The important idea is simple: **clients integrate with Bonyan-API, not with every -upstream provider.** - -## Request Lifecycle - -```mermaid -sequenceDiagram - autonumber - participant C as Client - participant E as Bonyan-API - participant Cache as In-process cache - participant U1 as Primary provider - participant U2 as Fallback provider - - C->>E: GET /ayat/1 - E->>E: Validate params - E->>Cache: Lookup cached corpus - alt cache hit - Cache-->>E: canonical payload - E-->>C: 200 OK - else cache miss - E->>U1: fetchWithTimeout - alt provider OK and non-empty - U1-->>E: raw payload - E->>E: map to internal type - E->>Cache: memoize result - E-->>C: 200 OK - else timeout / non-2xx / empty / thrown error - E->>U2: try next source - U2-->>E: raw payload - E->>E: map to internal type - E-->>C: 200 OK - end - end -``` - -## What Counts As Failure - -Fallback is triggered when a provider request throws, times out, returns a -non-2xx response, or maps to an empty result. The shared `fetchWithTimeout` -utility defaults to **8 seconds**, and individual services raise that where the -payload is larger: - -| Area | Timeout examples | -| --- | --- | -| Hijri and Qibla | 8 seconds | -| Hadith books and prayer times | 10 seconds | -| Tafsir surah, azkar, hadith ranges | 12-15 seconds | -| Full Quran text | 20 seconds | - -Some modules use the shared `runWithFallback` helper. Others keep a local -fallback loop because their result shape is slightly different, but the -behavior is the same: try providers in order, accept the first usable result, -and surface `503` only when no usable result can be produced. - -## Source Chains - -| Module | Primary | Fallback | -| --- | --- | --- | -| `/surah` | `mp3quran.net` | `alquran.cloud`, then `quran.com` | -| `/ayat` | `alquran.cloud` Uthmani Quran | jsDelivr mirror of `fawazahmed0/quran-api` | -| `/reciters` | `mp3quran.net` | `quran.com` recitations | -| `/tafsir` | Edition-specific `alquran.cloud` or `quranenc.com` | The other provider when supported | -| `/azkar` | Pinned `nawafalqari/azkar-api` JSON | `hisnmuslim.com` | -| `/hadith` | `api.hadith.gading.dev` | jsDelivr mirror of `sutanlab/hadith-api` | -| `/prayer/times` | `api.aladhan.com` | `api.pray.zone` for coordinate requests | -| `/hijri/*` | `api.aladhan.com` | No second source | -| `/qibla` | `api.aladhan.com` | Local great-circle calculation | - - - `GET /qibla` is special. With valid coordinates, it can still return a result - when Aladhan is unavailable because the service computes the bearing locally. - - -## Canonical Shapes - -The whole point of fallback is that the client does not care which provider -answered. For example, every surah provider is mapped into this shape: - -```ts -type SurahItem = { - id: number; - name: string; - makkia?: boolean; - apiName: "mp3quran.net" | "alquran.cloud" | "quran.com"; -}; -``` - -`apiName` is useful for logs and debugging. It should not become branching -logic in client code. - -## Self-hosting Notes - -If you fork or self-host Bonyan API, provider priority lives in each module's -service file. For example, the surah chain is defined in `surah.service.ts`, -and the ayat chain is defined in `ayat.service.ts`. Reorder providers only when -you are intentionally changing the service's reliability behavior. - - - - Yes. A non-2xx upstream response is treated as a failed provider attempt, - so the next source is tried. A 429 returned to your client is Bonyan API's - own rate limit. - - - No. The public contract is provider-agnostic. If you self-host, you can edit - the module service and register only the provider you want. - - - A fallback is only useful when it is trustworthy. Hijri conversion currently - uses Aladhan only because date calibration can vary by convention and - region. - - diff --git a/concepts/rate-limit.mdx b/concepts/rate-limit.mdx deleted file mode 100644 index 1c11a98..0000000 --- a/concepts/rate-limit.mdx +++ /dev/null @@ -1,68 +0,0 @@ ---- -title: "Rate limits" -description: "The Fastify rate-limit model used by Bonyan-API." ---- - -The hosted Bonyan-API instance uses `@fastify/rate-limit`. The current defaults -come directly from `server.ts`: - -| Variable | Default | -| --- | --- | -| `RATE_LIMIT_MAX` | `120` | -| `RATE_LIMIT_WINDOW` | `1 minute` | - -That means the default deployment allows **120 requests per IP per minute**. - -## Headers - -Fastify's rate-limit plugin emits standard rate-limit headers, including the -limit, remaining requests, reset timing, and `Retry-After` on 429 responses. -Use those headers instead of guessing when the window resets. - -## What 429 Means - -```json -{ - "success": false, - "message": "rate limit exceeded" -} -``` - -The exact wording can vary with the Fastify plugin version, but a 429 always -means the client should wait for `Retry-After` before sending more requests. - -## Client Guidance - - - - Surah lists, Quran text, tafsir, azkar, and hadith data are stable. Fetch - once, store client-side where appropriate, and avoid spending rate-limit - budget on repeated identical reads. - - - If your interface can fire the same request multiple times while rendering, - coalesce those requests in your client. - - - Do not loop on 429. Wait for the window to reset, then continue. - - - -## Self-hosting - -Set positive values for the limiter when running your own deployment: - -```bash -RATE_LIMIT_MAX=600 RATE_LIMIT_WINDOW="1 minute" pnpm start -``` - -Because the code uses `Number(process.env.RATE_LIMIT_MAX) || 120`, setting -`RATE_LIMIT_MAX=0` does **not** disable the limiter; it falls back to `120`. -If you truly need no limiter, change the Fastify registration in `server.ts` -and put your own gateway or abuse protection in front of the service. - -## Fair-use Policy - -The hosted API exists to help builders prototype and ship beneficial Islamic -software. For large production workloads, high-volume crawlers, or heavy audio -traffic, self-host the API or coordinate a dedicated deployment. diff --git a/contributing.mdx b/contributing.mdx deleted file mode 100644 index c6781a7..0000000 --- a/contributing.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "Contributing" -description: "How to contribute to BonyanOSS projects with clarity, respect, and long-term maintainability." ---- - -BonyanOSS is open because useful Islamic software should be easier to inspect, -improve, translate, maintain, and continue. Contributions can be code, docs, -design, content review, testing, ideas, issue triage, or operational help. - -## Good Contributions - - - - Improve something users or contributors actually hit: unclear docs, broken - examples, missing validation, unstable behavior, or rough setup steps. - - - Small, focused pull requests are easier to review and much safer to merge. - - - A good issue or PR explains who benefits, what changed, and what tradeoffs - were considered. - - - Islamic content work deserves care: cite sources, avoid casual assumptions, - and ask for review when accuracy matters. - - - -## Contribution Flow - - - - Start with a specific project area: Quran, Hadith, docs, API, data, - infrastructure, or developer tooling. - - - Read the project's README, docs page, API contract, and existing patterns - before changing behavior. - - - Keep unrelated refactors out of the same pull request. Include tests or - docs when the change affects users. - - - Explain the problem, the solution, screenshots if relevant, and any - remaining limitations. - - - Reviews are part of stewardship. Adjust the work, clarify tradeoffs, and - keep the conversation respectful. - - - -## What Needs Extra Care - -| Area | Extra expectation | -| --- | --- | -| Quran text | Use trusted sources, preserve Arabic correctly, and avoid silent normalization that changes displayed text. | -| Hadith content | Cite source collections and metadata clearly; do not imply grading certainty without data. | -| Prayer times | Document calculation methods, coordinates, timezones, and edge cases. | -| Public APIs | Keep response envelopes stable and version breaking changes. | -| Accessibility | Ensure text, navigation, contrast, and keyboard workflows are usable. | -| Translations | Prefer reviewed translation over machine-only output for public content. | - -## Contributor Standards - -- Be precise. Avoid vague changes that are hard to review. -- Be kind. The work matters, and so does the way it is done. -- Be transparent. Explain sources, assumptions, and limitations. -- Be sustainable. Leave the project easier to maintain than you found it. - - - See how ideas become maintained BonyanOSS projects. - - - - Review the community expectations for contributors, maintainers, users, and - public BonyanOSS spaces. - diff --git a/docs.json b/docs.json index 48135ab..a34162b 100644 --- a/docs.json +++ b/docs.json @@ -1,340 +1,597 @@ { - "$schema": "https://mintlify.com/docs.json", - "theme": "palm", - "name": "BonyanOSS Docs", - "description": "Developer documentation for BonyanOSS, an open-source initiative building Islamic and beneficial software.", - "colors": { - "primary": "#10B981", - "light": "#34D399", - "dark": "#059669" - }, - "favicon": "/favicon.svg", - "appearance": { - "default": "dark", - "strict": false - }, - "background": { - "color": { - "light": "#FFFFFF", - "dark": "#071C1A" + "$schema": "https://mintlify.com/docs.json", + "theme": "mint", + "name": "Bonyan", + "description": "Bonyan API and JavaScript SDK documentation in English and Arabic.", + "colors": { + "primary": "#087F67", + "light": "#10B981", + "dark": "#0F766E" }, - "decoration": "gradient" - }, - "fonts": { - "heading": { - "family": "Geist", - "weight": 650 + "favicon": "/assets/favicon.svg", + "appearance": { + "default": "system", + "strict": false }, - "body": { - "family": "Inter", - "weight": 400 - } - }, - "styling": { - "codeblocks": "system", - "eyebrows": "breadcrumbs" - }, - "interaction": { - "drilldown": false - }, - "contextual": { - "options": [ - "copy", - "view", - "chatgpt", - "claude", - "perplexity" - ] - }, - "logo": { - "light": "/favicon.svg", - "dark": "/favicon.svg", - "href": "/" - }, - "frame": { - "light": "/frame/light.svg", - "dark": "/frame/dark.svg", - "href": "/" - }, - "navbar": { - "links": [ - { - "label": "Main Site", - "href": "https://bonyanoss.org" - }, - { - "label": "Status", - "href": "https://status.bonyanoss.org" - }, - { - "label": "GitHub", - "href": "https://github.com/BonyanOSS" - } - ], - "primary": { - "type": "button", - "label": "Start Building", - "href": "/quickstart" - } - }, - "navigation": { - "global": { - "anchors": [ + "logo": { + "light": "/assets/favicon.svg", + "dark": "/assets/favicon.svg", + "href": "/" + }, + "styling": { + "codeblocks": "system" + }, + "navigation": { + "languages": [ + { + "language": "en", + "navbar": { + "links": [ + { + "label": "Project", + "href": "https://github.com/BonyanOSS" + } + ] + }, + "footer": { + "socials": { + "github": "https://github.com/BonyanOSS" + }, + "links": [ + { + "header": "Contribute", + "items": [ + { + "label": "Contributing", + "href": "/locales/en/contributing" + }, + { + "label": "Community conduct", + "href": "/locales/en/code-of-conduct" + } + ] + } + ] + }, + "tabs": [ + { + "tab": "Guides", + "icon": "book-open", + "groups": [ + { + "group": "Start here", + "pages": ["locales/en/introduction", "locales/en/quickstart", "locales/en/concepts/architecture"] + }, + { + "group": "API behavior", + "pages": [ + "locales/en/concepts/errors", + "locales/en/concepts/arabic-search", + "locales/en/concepts/fallback", + "locales/en/concepts/caching", + "locales/en/concepts/rate-limit" + ] + }, + { + "group": "Build and operate", + "pages": [ + "locales/en/guides/audio", + "locales/en/guides/self-hosting", + "locales/en/guides/operations", + "locales/en/guides/troubleshooting" + ] + }, + { + "group": "Project and maintenance", + "pages": [ + "locales/en/guides/source-status", + "locales/en/contributing", + "locales/en/code-of-conduct", + "locales/en/guides/maintenance" + ] + } + ] + }, + { + "tab": "JavaScript SDK", + "icon": "js", + "groups": [ + { + "group": "SDK", + "pages": [ + "locales/en/sdk/overview", + "locales/en/sdk/configuration", + "locales/en/sdk/resources", + "locales/en/sdk/errors", + "locales/en/sdk/search" + ] + } + ] + }, + { + "tab": "API reference", + "icon": "code", + "groups": [ + { + "group": "Reference", + "pages": ["locales/en/api-reference/overview"] + }, + { + "group": "Service operations", + "pages": [ + "locales/en/api-reference/meta/overview", + "locales/en/api-reference/meta/catalogue", + "locales/en/api-reference/meta/health", + "locales/en/api-reference/meta/ready", + "locales/en/api-reference/meta/metrics" + ] + }, + { + "group": "Surahs", + "pages": [ + "locales/en/api-reference/surah/overview", + "locales/en/api-reference/surah/list", + "locales/en/api-reference/surah/get", + "locales/en/api-reference/surah/search" + ] + }, + { + "group": "Ayat", + "pages": [ + "locales/en/api-reference/ayat/overview", + "locales/en/api-reference/ayat/all", + "locales/en/api-reference/ayat/get-by-number", + "locales/en/api-reference/ayat/get-by-surah-aya", + "locales/en/api-reference/ayat/search" + ] + }, + { + "group": "Reciters", + "pages": [ + "locales/en/api-reference/reciters/overview", + "locales/en/api-reference/reciters/list", + "locales/en/api-reference/reciters/get", + "locales/en/api-reference/reciters/search", + "locales/en/api-reference/reciters/audio" + ] + }, + { + "group": "Tafsir", + "pages": [ + "locales/en/api-reference/tafsir/overview", + "locales/en/api-reference/tafsir/editions", + "locales/en/api-reference/tafsir/surah", + "locales/en/api-reference/tafsir/aya" + ] + }, + { + "group": "Azkar", + "pages": [ + "locales/en/api-reference/azkar/overview", + "locales/en/api-reference/azkar/categories", + "locales/en/api-reference/azkar/category", + "locales/en/api-reference/azkar/search", + "locales/en/api-reference/azkar/random" + ] + }, + { + "group": "Hadith", + "pages": [ + "locales/en/api-reference/hadith/overview", + "locales/en/api-reference/hadith/books", + "locales/en/api-reference/hadith/book", + "locales/en/api-reference/hadith/get", + "locales/en/api-reference/hadith/random" + ] + }, + { + "group": "Prayer", + "pages": ["locales/en/api-reference/prayer/overview", "locales/en/api-reference/prayer/times"] + }, + { + "group": "Hijri", + "pages": [ + "locales/en/api-reference/hijri/overview", + "locales/en/api-reference/hijri/today", + "locales/en/api-reference/hijri/from-gregorian", + "locales/en/api-reference/hijri/to-gregorian" + ] + }, + { + "group": "Qibla", + "pages": ["locales/en/api-reference/qibla/overview", "locales/en/api-reference/qibla/direction"] + } + ] + } + ] + }, + { + "language": "ar", + "navbar": { + "links": [ + { + "label": "المشروع", + "href": "https://github.com/BonyanOSS" + } + ] + }, + "footer": { + "socials": { + "github": "https://github.com/BonyanOSS" + }, + "links": [ + { + "header": "المساهمة", + "items": [ + { + "label": "المساهمة", + "href": "/locales/ar/contributing" + }, + { + "label": "سلوك المجتمع", + "href": "/locales/ar/code-of-conduct" + } + ] + } + ] + }, + "tabs": [ + { + "tab": "الأدلة", + "icon": "book-open", + "groups": [ + { + "group": "ابدأ هنا", + "pages": ["locales/ar/introduction", "locales/ar/quickstart", "locales/ar/concepts/architecture"] + }, + { + "group": "سلوك API", + "pages": [ + "locales/ar/concepts/errors", + "locales/ar/concepts/arabic-search", + "locales/ar/concepts/fallback", + "locales/ar/concepts/caching", + "locales/ar/concepts/rate-limit" + ] + }, + { + "group": "التطوير والتشغيل", + "pages": [ + "locales/ar/guides/audio", + "locales/ar/guides/self-hosting", + "locales/ar/guides/operations", + "locales/ar/guides/troubleshooting" + ] + }, + { + "group": "المشروع والصيانة", + "pages": [ + "locales/ar/guides/source-status", + "locales/ar/contributing", + "locales/ar/code-of-conduct", + "locales/ar/guides/maintenance" + ] + } + ] + }, + { + "tab": "مكتبة JavaScript", + "icon": "js", + "groups": [ + { + "group": "المكتبة", + "pages": [ + "locales/ar/sdk/overview", + "locales/ar/sdk/configuration", + "locales/ar/sdk/resources", + "locales/ar/sdk/errors", + "locales/ar/sdk/search" + ] + } + ] + }, + { + "tab": "مرجع API", + "icon": "code", + "groups": [ + { + "group": "المرجع", + "pages": ["locales/ar/api-reference/overview"] + }, + { + "group": "تشغيل الخدمة", + "pages": [ + "locales/ar/api-reference/meta/overview", + "locales/ar/api-reference/meta/catalogue", + "locales/ar/api-reference/meta/health", + "locales/ar/api-reference/meta/ready", + "locales/ar/api-reference/meta/metrics" + ] + }, + { + "group": "السور", + "pages": [ + "locales/ar/api-reference/surah/overview", + "locales/ar/api-reference/surah/list", + "locales/ar/api-reference/surah/get", + "locales/ar/api-reference/surah/search" + ] + }, + { + "group": "الآيات", + "pages": [ + "locales/ar/api-reference/ayat/overview", + "locales/ar/api-reference/ayat/all", + "locales/ar/api-reference/ayat/get-by-number", + "locales/ar/api-reference/ayat/get-by-surah-aya", + "locales/ar/api-reference/ayat/search" + ] + }, + { + "group": "القراء", + "pages": [ + "locales/ar/api-reference/reciters/overview", + "locales/ar/api-reference/reciters/list", + "locales/ar/api-reference/reciters/get", + "locales/ar/api-reference/reciters/search", + "locales/ar/api-reference/reciters/audio" + ] + }, + { + "group": "التفسير", + "pages": [ + "locales/ar/api-reference/tafsir/overview", + "locales/ar/api-reference/tafsir/editions", + "locales/ar/api-reference/tafsir/surah", + "locales/ar/api-reference/tafsir/aya" + ] + }, + { + "group": "الأذكار", + "pages": [ + "locales/ar/api-reference/azkar/overview", + "locales/ar/api-reference/azkar/categories", + "locales/ar/api-reference/azkar/category", + "locales/ar/api-reference/azkar/search", + "locales/ar/api-reference/azkar/random" + ] + }, + { + "group": "الحديث", + "pages": [ + "locales/ar/api-reference/hadith/overview", + "locales/ar/api-reference/hadith/books", + "locales/ar/api-reference/hadith/book", + "locales/ar/api-reference/hadith/get", + "locales/ar/api-reference/hadith/random" + ] + }, + { + "group": "الصلاة", + "pages": ["locales/ar/api-reference/prayer/overview", "locales/ar/api-reference/prayer/times"] + }, + { + "group": "الهجري", + "pages": [ + "locales/ar/api-reference/hijri/overview", + "locales/ar/api-reference/hijri/today", + "locales/ar/api-reference/hijri/from-gregorian", + "locales/ar/api-reference/hijri/to-gregorian" + ] + }, + { + "group": "القبلة", + "pages": ["locales/ar/api-reference/qibla/overview", "locales/ar/api-reference/qibla/direction"] + } + ] + } + ] + } + ] + }, + "redirects": [ + { + "source": "/", + "destination": "/locales/en/introduction" + }, + { + "source": "/api-reference/ayat/all", + "destination": "/locales/en/api-reference/ayat/all" + }, + { + "source": "/api-reference/ayat/get-by-number", + "destination": "/locales/en/api-reference/ayat/get-by-number" + }, + { + "source": "/api-reference/ayat/get-by-surah-aya", + "destination": "/locales/en/api-reference/ayat/get-by-surah-aya" + }, + { + "source": "/api-reference/ayat/overview", + "destination": "/locales/en/api-reference/ayat/overview" + }, + { + "source": "/api-reference/ayat/search", + "destination": "/locales/en/api-reference/ayat/search" + }, + { + "source": "/api-reference/azkar/overview", + "destination": "/locales/en/api-reference/azkar/overview" + }, + { + "source": "/api-reference/hadith/overview", + "destination": "/locales/en/api-reference/hadith/overview" + }, + { + "source": "/api-reference/hijri/overview", + "destination": "/locales/en/api-reference/hijri/overview" + }, + { + "source": "/api-reference/meta/catalogue", + "destination": "/locales/en/api-reference/meta/catalogue" + }, + { + "source": "/api-reference/meta/health", + "destination": "/locales/en/api-reference/meta/health" + }, + { + "source": "/api-reference/meta/overview", + "destination": "/locales/en/api-reference/meta/overview" + }, + { + "source": "/api-reference/prayer/overview", + "destination": "/locales/en/api-reference/prayer/overview" + }, + { + "source": "/api-reference/qibla/overview", + "destination": "/locales/en/api-reference/qibla/overview" + }, + { + "source": "/api-reference/reciters/overview", + "destination": "/locales/en/api-reference/reciters/overview" + }, + { + "source": "/api-reference/surah/get", + "destination": "/locales/en/api-reference/surah/get" + }, + { + "source": "/api-reference/surah/list", + "destination": "/locales/en/api-reference/surah/list" + }, + { + "source": "/api-reference/surah/overview", + "destination": "/locales/en/api-reference/surah/overview" + }, + { + "source": "/api-reference/surah/search", + "destination": "/locales/en/api-reference/surah/search" + }, + { + "source": "/api-reference/tafsir/overview", + "destination": "/locales/en/api-reference/tafsir/overview" + }, + { + "source": "/bonyan-api", + "destination": "/locales/en/concepts/architecture" + }, + { + "source": "/code-of-conduct", + "destination": "/locales/en/code-of-conduct" + }, + { + "source": "/concepts/arabic-search", + "destination": "/locales/en/concepts/arabic-search" + }, + { + "source": "/concepts/caching", + "destination": "/locales/en/concepts/caching" + }, + { + "source": "/concepts/errors", + "destination": "/locales/en/concepts/errors" + }, + { + "source": "/concepts/fallback", + "destination": "/locales/en/concepts/fallback" + }, + { + "source": "/concepts/rate-limit", + "destination": "/locales/en/concepts/rate-limit" + }, + { + "source": "/contributing", + "destination": "/locales/en/contributing" + }, + { + "source": "/domains", + "destination": "/locales/en/guides/self-hosting" + }, + { + "source": "/ecosystem", + "destination": "/locales/en/introduction" + }, + { + "source": "/guides/api-design", + "destination": "/locales/en/api-reference/overview" + }, + { + "source": "/guides/design-principles", + "destination": "/locales/en/concepts/architecture" + }, + { + "source": "/guides/documentation-standard", + "destination": "/locales/en/guides/maintenance" + }, + { + "source": "/guides/project-lifecycle", + "destination": "/locales/en/contributing" + }, + { + "source": "/guides/status-and-reliability", + "destination": "/locales/en/guides/operations" + }, + { + "source": "/introduction", + "destination": "/locales/en/introduction" + }, + { + "source": "/projects", + "destination": "/locales/en/introduction" + }, { - "anchor": "bonyanoss.org", - "icon": "house", - "href": "https://bonyanoss.org" + "source": "/quickstart", + "destination": "/locales/en/quickstart" }, { - "anchor": "api.bonyanoss.org", - "icon": "code", - "href": "https://api.bonyanoss.org" + "source": "/reference", + "destination": "/locales/en/api-reference/overview" }, { - "anchor": "status.bonyanoss.org", - "icon": "signal", - "href": "https://status.bonyanoss.org" + "source": "/locales/en/bonyan-api", + "destination": "/locales/en/concepts/architecture" + }, + { + "source": "/locales/en/reference", + "destination": "/locales/en/api-reference/overview" + }, + { + "source": "/locales/ar/bonyan-api", + "destination": "/locales/ar/concepts/architecture" + }, + { + "source": "/locales/ar/reference", + "destination": "/locales/ar/api-reference/overview" + }, + { + "source": "/en", + "destination": "/locales/en/introduction" + }, + { + "source": "/en/:slug*", + "destination": "/locales/en/:slug*" + }, + { + "source": "/ar", + "destination": "/locales/ar/introduction" + }, + { + "source": "/ar/:slug*", + "destination": "/locales/ar/:slug*" } - ] - }, - "tabs": [ - { - "tab": "Home", - "pages": [ - { - "group": "Welcome", - "pages": [ - "introduction" - ] - }, - { - "group": "BonyanOSS", - "pages": [ - "ecosystem", - "projects", - "domains", - "contributing", - "code-of-conduct" - ] - } - ] - }, - { - "tab": "Bonyan API", - "pages": [ - { - "group": "Bonyan API", - "pages": [ - "bonyan-api", - "quickstart" - ] - }, - { - "group": "Core Concepts", - "pages": [ - "concepts/fallback", - "concepts/caching", - "concepts/rate-limit", - "concepts/errors", - "concepts/arabic-search" - ] - } - ] - }, - { - "tab": "Guides", - "icon": "book", - "pages": [ - { - "group": "Build Well", - "pages": [ - "guides/design-principles", - "guides/api-design", - "guides/documentation-standard" - ] - }, - { - "group": "Operate", - "pages": [ - "guides/status-and-reliability", - "guides/project-lifecycle" - ] - } - ] - }, - { - "tab": "Reference", - "icon": "code", - "pages": [ - { - "group": "Overview", - "pages": [ - "reference" - ] - }, - { - "group": "Meta", - "pages": [ - "api-reference/meta/overview", - "api-reference/meta/catalogue", - "api-reference/meta/health" - ] - }, - { - "group": "Surah", - "pages": [ - "api-reference/surah/overview", - "api-reference/surah/list", - "api-reference/surah/get", - "api-reference/surah/search" - ] - }, - { - "group": "Ayat", - "pages": [ - "api-reference/ayat/overview", - "api-reference/ayat/all", - "api-reference/ayat/get-by-number", - "api-reference/ayat/get-by-surah-aya", - "api-reference/ayat/search" - ] - }, - { - "group": "Reciters", - "pages": [ - "api-reference/reciters/overview" - ] - }, - { - "group": "Tafsir", - "pages": [ - "api-reference/tafsir/overview" - ] - }, - { - "group": "Azkar", - "pages": [ - "api-reference/azkar/overview" - ] - }, - { - "group": "Hadith", - "pages": [ - "api-reference/hadith/overview" - ] - }, - { - "group": "Prayer", - "pages": [ - "api-reference/prayer/overview" - ] - }, - { - "group": "Hijri", - "pages": [ - "api-reference/hijri/overview" - ] - }, - { - "group": "Qibla", - "pages": [ - "api-reference/qibla/overview" - ] - } - ] - } - ] - }, - "footer": { - "socials": { - "github": "https://github.com/BonyanOSS", - "x": "https://x.com/BonyanOSS" - }, - "links": [ - { - "header": "BonyanOSS", - "items": [ - { - "label": "Main site", - "href": "https://bonyanoss.org" - }, - { - "label": "Projects", - "href": "/projects" - }, - { - "label": "Contributing", - "href": "/contributing" - }, - { - "label": "Code of Conduct", - "href": "/code-of-conduct" - } - ] - }, - { - "header": "Platform", - "items": [ - { - "label": "Docs", - "href": "https://docs.bonyanoss.org" - }, - { - "label": "Unified API", - "href": "https://api.bonyanoss.org" - }, - { - "label": "Status", - "href": "https://status.bonyanoss.org" - } - ] - }, - { - "header": "Bonyan API", - "items": [ - { - "label": "Overview", - "href": "/bonyan-api" - }, - { - "label": "Bonyan API", - "href": "/reference" - }, - { - "label": "Quickstart", - "href": "/quickstart" - } - ] - } - ] - }, - "seo": { - "metatags": { - "og:site_name": "BonyanOSS Docs", - "twitter:card": "summary_large_image", - "canonical": "https://docs.bonyanoss.org" - }, - "indexing": "navigable" - }, - "search": { - "prompt": "Search BonyanOSS docs..." - }, - "api": { - "openapi": [ - "openapi.yaml" ], - "playground": { - "display": "simple" + "api": { + "playground": { + "display": "interactive" + }, + "examples": { + "languages": ["curl", "javascript", "python"], + "prefill": true + } + }, + "contextual": { + "options": ["copy", "view"] }, - "examples": { - "languages": [ - "curl", - "javascript", - "node", - "python", - "php", - "go" - ] + "seo": { + "indexing": "navigable" } - } } diff --git a/domains.mdx b/domains.mdx deleted file mode 100644 index 1db62d5..0000000 --- a/domains.mdx +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: "Domain Map" -description: "The proposed public URL structure for BonyanOSS apps, docs, status, and APIs." ---- - -BonyanOSS should feel organized from the first URL. The domain structure below -keeps the public site, docs, APIs, status page, and project-specific surfaces -easy to understand. - -| Surface | Proposed URL | Purpose | -| --- | --- | --- | -| Main site | `bonyanoss.org` | Public organization home, mission, projects, contributors, and calls to action. | -| Docs for all projects | `docs.bonyanoss.org` | Central documentation hub for every BonyanOSS project. | -| Status page | `status.bonyanoss.org` | Uptime, incidents, maintenance windows, and reliability communication. | -| Unified API | `api.bonyanoss.org` | Shared API gateway for BonyanOSS services. | -| Bonyan API | `api.bonyanoss.org/bonyan-api/v1` | Versioned Islamic content API under the unified API gateway. | -| Bonyan API docs | `docs.bonyanoss.org/bonyan-api` | Bonyan API guides, concepts, examples, and API reference. | - -## Why This Structure Works - - - - Users and developers can guess where to go: docs for docs, api for APIs, - status for reliability, and project subdomains for product surfaces. - - - Future projects can follow the same pattern, such as - `quran.bonyanoss.org`, `hadith.bonyanoss.org`, and - `api.bonyanoss.org/hadith/v1`. - - - Versioned API paths allow breaking changes to be introduced responsibly - without surprising existing clients. - - - A dedicated status page gives companies, contributors, and users a trusted - place to check availability. - - - -## Future Project Pattern - -```mermaid -flowchart LR - Project["project.bonyanoss.org"] --> Docs["docs.bonyanoss.org/project"] - Project --> Api["api.bonyanoss.org/project/v1"] - Api --> Status["status.bonyanoss.org"] -``` - - - Keep project URLs short, descriptive, and stable. If a public URL changes, - add a redirect and document the change in the relevant project docs. - diff --git a/ecosystem.mdx b/ecosystem.mdx deleted file mode 100644 index f7234f4..0000000 --- a/ecosystem.mdx +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: "BonyanOSS Ecosystem" -sidebarTitle: "Ecosystem" -description: "How BonyanOSS organizes projects, public surfaces, APIs, docs, and shared infrastructure." -mode: "wide" ---- - -BonyanOSS is not just a collection of separate repositories. It is intended to -grow into a shared ecosystem for Islamic and community-focused software: web -apps, APIs, datasets, libraries, documentation, and operational tooling that -can reinforce each other over time. - -## The Core Idea - -> Build what benefits people, keep it open, and make it easier for others to continue. - -This principle affects product decisions, API design, documentation style, -contributor onboarding, and infrastructure choices. The goal is not to ship a -single impressive release, but to create foundations that can be maintained, -audited, reused, and improved. - -## Public Surfaces - - - - `bonyanoss.org` introduces the organization, its vision, active projects, - and ways to join. - - - `docs.bonyanoss.org` is the central home for all project docs, guides, - standards, and API references. - - - `api.bonyanoss.org` provides a consistent gateway for public APIs across - BonyanOSS projects. - - - `status.bonyanoss.org` communicates uptime, incidents, maintenance, and - reliability expectations. - - - -## Focus Areas - -| Area | Examples | -| --- | --- | -| Quran tools | Quran readers, verse search, recitations, tafsir, memorization tools. | -| Hadith tools | Hadith search, collections, grading metadata, study interfaces. | -| Learning platforms | Courses, guided reading, study plans, classroom utilities. | -| APIs and datasets | Structured content, normalized schemas, public REST endpoints. | -| Developer libraries | SDKs, validators, Arabic normalization utilities, UI components. | -| Community platforms | Contribution portals, project boards, volunteer workflows. | -| Research tools | Indexing, comparison tools, citations, dataset inspection. | -| Automation utilities | Maintenance scripts, status checks, content sync, docs generation. | - -## Ecosystem Flow - -```mermaid -flowchart TD - Needs["Community needs"] --> Ideas["Project ideas"] - Ideas --> Review["Scope and benefit review"] - Review --> Build["Open development"] - Build --> Docs["Clear documentation"] - Build --> Api["Stable APIs and datasets"] - Docs --> Adoption["Developers and users"] - Api --> Adoption - Adoption --> Feedback["Feedback and maintenance"] - Feedback --> Review -``` - -## Shared Standards - - - - A contributor should be able to answer: who benefits, what problem is - solved, and what should not be included. - - - APIs, file formats, datasets, environment variables, and deployment steps - need docs before they become relied on by others. - - - Prefer boring, understandable architecture over complexity that only one - person can operate. - - - Projects may share standards and infrastructure, but each one should have a - focused docs section, roadmap, and ownership model. - - - -## Related Pages - - - - How projects are grouped and how new work enters the ecosystem. - - - Proposed public URLs and how they map to docs, apps, APIs, and status. - - - How an idea moves from proposal to maintained project. - - diff --git a/examples/search.mjs b/examples/search.mjs new file mode 100644 index 0000000..0d8b191 --- /dev/null +++ b/examples/search.mjs @@ -0,0 +1,48 @@ +import { BonyanApiError, BonyanRequestError } from "@bonyanoss/bonyan-api"; + +// Compatibility helper for the flat search envelope returned by API 2.0.0. +export async function searchContent( + resource, + text, + { + limit = 10, + baseUrl = "https://api.bonyanoss.org", + fetch: fetchFn = globalThis.fetch, + signal = AbortSignal.timeout(45000), + } = {}, +) { + if (!["ayat", "azkar"].includes(resource)) + throw new TypeError("resource must be ayat or azkar"); + const maximum = resource === "ayat" ? 500 : 200; + if (!Number.isInteger(limit) || limit < 1 || limit > maximum) + throw new RangeError("Invalid limit"); + if (typeof text !== "string" || !/[\u0621-\u064A]/u.test(text)) + throw new TypeError("Use an Arabic query"); + const url = new URL(baseUrl.replace(/\/+$/, "") + "/" + resource + "/search"); + url.searchParams.set("text", text); + url.searchParams.set("limit", String(limit)); + let response; + try { + response = await fetchFn(url, { + signal, + headers: { Accept: "application/json" }, + }); + } catch (error) { + throw BonyanRequestError.from(error); + } + const body = await response.json().catch(() => null); + if (!response.ok) + throw BonyanApiError.fromResponse( + response.status, + body, + response.statusText, + ); + if ( + body?.success !== true || + !Array.isArray(body.data) || + !Number.isInteger(body.total) + ) { + throw new BonyanRequestError("Unexpected search response", body); + } + return { total: body.total, results: body.data }; +} diff --git a/frame/dark.svg b/frame/dark.svg deleted file mode 100644 index d868cd6..0000000 --- a/frame/dark.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/frame/light.svg b/frame/light.svg deleted file mode 100644 index 70ae0e9..0000000 --- a/frame/light.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/guides/api-design.mdx b/guides/api-design.mdx deleted file mode 100644 index 5ad5a19..0000000 --- a/guides/api-design.mdx +++ /dev/null @@ -1,76 +0,0 @@ ---- -title: "API Design" -description: "How BonyanOSS APIs should be shaped, versioned, documented, and operated." ---- - -BonyanOSS APIs should be predictable. Developers should be able to read an -endpoint page, make a request, understand the response, and know how errors and -limits behave. - -## URL Pattern - -Use the unified API gateway with project-level versioning: - -```text -https://api.bonyanoss.org/{project}/v{version} -``` - -Examples: - -```text -https://api.bonyanoss.org/bonyan-api/v1 -https://api.bonyanoss.org/hadith/v1 -``` - -## Response Envelope - -Public APIs should use one success shape and one failure shape unless a project -has a documented reason to do otherwise. - -```json Success -{ "success": true, "data": { "id": 1 } } -``` - -```json Failure -{ "success": false, "message": "human-readable error" } -``` - -## Versioning Rules - -| Change | Version requirement | -| --- | --- | -| Add optional field | Same version. | -| Add new endpoint | Same version. | -| Add enum value | Same version, document behavior. | -| Rename field | New major API version. | -| Remove field | New major API version. | -| Change field type | New major API version. | -| Change authentication requirement | New major API version unless strictly additive. | - -## Endpoint Pages Should Include - -- What the endpoint does. -- Required and optional parameters. -- Response examples. -- Error cases. -- Rate-limit behavior. -- Caching behavior when relevant. -- Source or reliability notes when relevant. - -## Operational Expectations - - - - If external developers may call it, it needs a docs page and examples. - - - Public APIs should be represented on `status.bonyanoss.org`. - - - Use standard HTTP status codes and avoid endpoint-specific error formats. - - - Cache stable content, use timeouts, and isolate upstream failures whenever - possible. - - diff --git a/guides/design-principles.mdx b/guides/design-principles.mdx deleted file mode 100644 index 5123d7d..0000000 --- a/guides/design-principles.mdx +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: "Design Principles" -description: "The product and engineering principles BonyanOSS projects should follow." ---- - -BonyanOSS projects should feel calm, useful, and trustworthy. The goal is not -to impress with complexity, but to make beneficial software that people can -understand, use, and maintain. - -## Principles - - - - New features should serve a clear user or community need. Avoid building - complexity only because it is technically interesting. - - - Prefer names, APIs, data structures, and interfaces that a new contributor - can understand without hidden context. - - - Islamic text, citations, translations, and derived metadata should be - handled carefully and reviewed when accuracy matters. - - - Public tools should be usable across devices, connection speeds, languages, - and ability levels. - - - If two solutions work, choose the one future maintainers can safely operate - and explain. - - - -## Product Checklist - -| Question | Why it matters | -| --- | --- | -| Who benefits from this? | Prevents vague scope and vanity features. | -| What should this not do? | Keeps the project focused. | -| What data or source does it rely on? | Makes accuracy and licensing review possible. | -| What is the stable contract? | Helps others build on it safely. | -| Who can maintain it later? | Avoids one-person systems. | - - - A BonyanOSS project should be impressive because it is useful, clear, and - reliable. - diff --git a/guides/documentation-standard.mdx b/guides/documentation-standard.mdx deleted file mode 100644 index e64432d..0000000 --- a/guides/documentation-standard.mdx +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: "Documentation Standard" -description: "How BonyanOSS documentation should be written so newcomers, developers, and organizations can trust it." ---- - -Documentation is part of the product. For BonyanOSS, good docs are not just a -nice addition; they are how contributors continue the work and how developers -decide whether they can trust the project. - -## Page Types - -| Page type | Purpose | -| --- | --- | -| Introduction | Explain what the project is, who it helps, and where to start. | -| Quickstart | Let someone succeed quickly with minimal context. | -| Concept | Explain how an important model works, such as caching or fallback. | -| Guide | Walk through a task from start to finish. | -| Reference | Document exact endpoints, parameters, responses, and errors. | -| Operations | Explain status, limits, deployment, and maintenance expectations. | - -## Writing Style - - - - Tell people what they can build, fix, learn, or verify before diving into - internals. - - - Prefer real URLs, payloads, commands, and diagrams over abstract wording. - - - If a feature is early, partial, experimental, or depends on an upstream - source, say so. - - - Islamic text, translations, and citations should be explicit about source, - scope, and confidence. - - - -## Minimum Docs for a Stable Project - -- Overview page. -- Quickstart. -- Installation or usage guide. -- API or module reference. -- Error and troubleshooting page. -- Contribution path. -- Changelog or release notes. -- Status and support information. - - - If a page would help a future maintainer avoid asking the original author a - private question, it probably belongs in the docs. - diff --git a/guides/project-lifecycle.mdx b/guides/project-lifecycle.mdx deleted file mode 100644 index 5c0272b..0000000 --- a/guides/project-lifecycle.mdx +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: "Project Lifecycle" -description: "How BonyanOSS projects move from idea to maintained open-source software." ---- - -A strong open-source project needs more than code. It needs a clear purpose, -reviewable scope, maintainers, documentation, operations, and a path for future -contributors. - -## Lifecycle - -```mermaid -flowchart LR - Idea["Idea"] --> Scope["Scope"] - Scope --> Draft["Draft"] - Draft --> Preview["Preview"] - Preview --> Stable["Stable"] - Stable --> Maintained["Maintained"] - Maintained --> Review["Periodic review"] - Review --> Scope -``` - -## Stages - -| Stage | Exit criteria | -| --- | --- | -| Idea | Clear problem, intended users, and benefit. | -| Scope | Boundaries, non-goals, maintainers, and success criteria are written down. | -| Draft | Repository or prototype exists with setup instructions. | -| Preview | Early users can try it and report issues. | -| Stable | Public contract is documented, tested, and versioned. | -| Maintained | Ownership, status, releases, and triage are active. | - -## Graduation Checklist - - - - The project clearly states what it is for and what it will not try to be. - - - New users can understand, install, run, and contribute without private - context. - - - Core behavior is tested or verified, and known limitations are documented. - - - Public services have status coverage, health checks, and incident paths. - - - Maintainers are identified, and review expectations are clear. - - - - - Projects can stay small. A focused, maintained tool is better than a large - project that nobody can confidently continue. - diff --git a/guides/status-and-reliability.mdx b/guides/status-and-reliability.mdx deleted file mode 100644 index 51bf364..0000000 --- a/guides/status-and-reliability.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Status and Reliability" -description: "How BonyanOSS communicates uptime, incidents, rate limits, and service expectations." ---- - -Reliability is part of trust. A public Islamic software project should make it -easy for users and developers to know whether a service is healthy, degraded, -or undergoing maintenance. - -## Public Status - -Use `status.bonyanoss.org` for: - -- API availability. -- Web app availability. -- Scheduled maintenance. -- Incidents and post-incident notes. -- Uptime history for major public services. - -## Service Categories - -| Service | Example status component | -| --- | --- | -| Main site | `bonyanoss.org` | -| Docs | `docs.bonyanoss.org` | -| Unified API | `api.bonyanoss.org` | -| Bonyan API | `api.bonyanoss.org/bonyan-api/v1` | - -## Incident Communication - - - - If a public service is down or degraded, mark it clearly as soon as the - issue is confirmed. - - - Say which users, endpoints, or regions are affected. Avoid vague status - messages when the impact is known. - - - Keep the status page useful while work is ongoing, especially for API - consumers. - - - After resolution, summarize the cause, fix, and any follow-up work. - - - -## Reliability Practices - -- Time out upstream calls. -- Cache stable public content. -- Use fallback sources where responsible. -- Keep health checks small and dependency-light. -- Publish rate limits and retry behavior. -- Avoid silent breaking changes. - - - See the current Bonyan-API rate-limit model and client guidance. - diff --git a/introduction.mdx b/introduction.mdx deleted file mode 100644 index 2a1d086..0000000 --- a/introduction.mdx +++ /dev/null @@ -1,103 +0,0 @@ ---- -title: "BonyanOSS Developer Documentation" -sidebarTitle: "Introduction" -description: "Build open-source Islamic and beneficial software with clear docs, stable APIs, and shared foundations." -mode: "wide" ---- - - - BonyanOSS - BonyanOSS - - -**BonyanOSS** is a community-driven open-source initiative for building Islamic -and beneficial software: Quran tools, Hadith tools, learning platforms, APIs, -datasets, developer libraries, research utilities, and community infrastructure. - -The docs are designed as a long-term developer platform, not a single project -manual. Start from the thing you want to build, then move into the project, -guide, or API reference that matches your work. - - - - Build Quran, tafsir, recitation, azkar, hadith, prayer-time, Hijri, and - Qibla workflows on one stable API. - - - Use consistent endpoints for Islamic content, with clear envelopes, - examples, rate limits, and reliability rules. - - - Understand how BonyanOSS projects are organized, named, documented, and - grown over time. - - - -## Start Here - - - - The mission, public surfaces, project families, and how everything fits - together under BonyanOSS. - - - Call Bonyan API in under a minute using cURL, JavaScript, Python, PHP, - or Go. - - - See the proposed structure for `bonyanoss.org`, `docs.bonyanoss.org`, - `api.bonyanoss.org`, project docs, and status pages. - - - Learn how to suggest ideas, fix docs, build features, review work, and - keep projects maintainable. - - - -## Platform Shape - -```mermaid -flowchart LR - Home["bonyanoss.org
Main site"] --> Docs["docs.bonyanoss.org
All documentation"] - Docs --> BonyanApiDocs["docs.bonyanoss.org/bonyan-api
Bonyan API docs"] - Home --> Projects["Project apps
Current and future public products"] - Api["api.bonyanoss.org
Unified API gateway"] --> BonyanApi["/bonyan-api/v1
Bonyan API"] - Status["status.bonyanoss.org
Public uptime"] --> Api - Status --> Projects -``` - -## What BonyanOSS Optimizes For - - - - Every project should serve a meaningful purpose for Muslims, developers, - students, researchers, organizations, or the wider community. - - - APIs, datasets, and libraries should be understandable without private - context. A new contributor should know what is stable and what may change. - - - Code, docs, and infrastructure should be simple enough that future - contributors can continue the work without rebuilding it from scratch. - - - Development should be transparent, welcoming, and documented so the - community can inspect, improve, and reuse what is built. - - - -## Documentation Areas - -| Area | Use it for | -| --- | --- | -| [Home](/) | Orientation, ecosystem map, and high-level routes. | -| [Projects](/projects) | How BonyanOSS groups Quran, Hadith, learning, API, data, and utility projects. | -| [Bonyan API](/bonyan-api) | The first major API surface: Quran, tafsir, reciters, azkar, hadith, prayer, Hijri, and Qibla. | -| [Guides](/guides/design-principles) | Standards for building, documenting, operating, and graduating projects. | -| [Reference](/reference) | Endpoint-level details for the Bonyan API modules. | - - - BonyanOSS is built around a simple idea: build what benefits people, keep it - open, and make it easier for others to continue. - diff --git a/locales/ar/api-reference/ayat/all.mdx b/locales/ar/api-reference/ayat/all.mdx new file mode 100644 index 0000000..a3717de --- /dev/null +++ b/locales/ar/api-reference/ayat/all.mdx @@ -0,0 +1,33 @@ +--- +title: "نص القرآن كاملًا" +description: "يعيد السور والآيات المتاحة داخل data.surahs. الاستجابة كبيرة ولا تدعم ترقيم الصفحات." +openapi: "locales/ar/openapi.yaml GET /ayat" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/ayat' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ayat"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ayat.list(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/ayat/ayat.controller.ts) diff --git a/locales/ar/api-reference/ayat/get-by-number.mdx b/locales/ar/api-reference/ayat/get-by-number.mdx new file mode 100644 index 0000000..b009f32 --- /dev/null +++ b/locales/ar/api-reference/ayat/get-by-number.mdx @@ -0,0 +1,33 @@ +--- +title: "آية برقمها العام" +description: "يبحث عن آية برقمها العام في القرآن، وليس ترتيبها داخل السورة." +openapi: "locales/ar/openapi.yaml GET /ayat/{id}" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/ayat/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ayat/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ayat.getById(1); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/ayat/ayat.controller.ts) diff --git a/locales/ar/api-reference/ayat/get-by-surah-aya.mdx b/locales/ar/api-reference/ayat/get-by-surah-aya.mdx new file mode 100644 index 0000000..9753ab0 --- /dev/null +++ b/locales/ar/api-reference/ayat/get-by-surah-aya.mdx @@ -0,0 +1,33 @@ +--- +title: "آية داخل سورة" +description: "يعيد آية واحدة مع رقم السورة واسمها." +openapi: "locales/ar/openapi.yaml GET /ayat/{surah}/aya/{id}" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/ayat/1/aya/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ayat/1/aya/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ayat.getBySurah(1, 1); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/ayat/ayat.controller.ts) diff --git a/locales/ar/api-reference/ayat/overview.mdx b/locales/ar/api-reference/ayat/overview.mdx new file mode 100644 index 0000000..1e9e8ee --- /dev/null +++ b/locales/ar/api-reference/ayat/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "نص القرآن" +description: "مسارات نص القرآن ومعاملاتها وأمثلتها." +--- + +مسارات نص القرآن ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /ayat` | [نص القرآن كاملًا](/locales/ar/api-reference/ayat/all) | +| `GET /ayat/{id}` | [آية برقمها العام](/locales/ar/api-reference/ayat/get-by-number) | +| `GET /ayat/{surah}/aya/{id}` | [آية داخل سورة](/locales/ar/api-reference/ayat/get-by-surah-aya) | +| `GET /ayat/search` | [البحث في نص القرآن](/locales/ar/api-reference/ayat/search) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/ayat/search.mdx b/locales/ar/api-reference/ayat/search.mdx new file mode 100644 index 0000000..14e3ae6 --- /dev/null +++ b/locales/ar/api-reference/ayat/search.mdx @@ -0,0 +1,33 @@ +--- +title: "البحث في نص القرآن" +description: "يعيد {success, total, data: [...]}. يحسب total النتائج المعادة بعد تطبيق الحد، وليس جميع التطابقات في القرآن." +openapi: "locales/ar/openapi.yaml GET /ayat/search" +--- + + +توجد مشكلة في فك الاستجابة داخل client.ayat.search() في SDK 1.0.2. استخدم مثال fetch هنا أو الدالة البديلة في دليل SDK. + + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/ayat/search' \ + --data-urlencode 'text=الرحمن' \ + --data-urlencode 'limit=10' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ayat/search"); +url.searchParams.set("text", "الرحمن"); +url.searchParams.set("limit", "10"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/ayat/ayat.controller.ts) diff --git a/locales/ar/api-reference/azkar/categories.mdx b/locales/ar/api-reference/azkar/categories.mdx new file mode 100644 index 0000000..2d38429 --- /dev/null +++ b/locales/ar/api-reference/azkar/categories.mdx @@ -0,0 +1,33 @@ +--- +title: "تصنيفات الأذكار" +description: "يعرض أسماء التصنيفات وأعداد الأذكار ومصادرها داخل data.categories." +openapi: "locales/ar/openapi.yaml GET /azkar" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/azkar' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/azkar"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.azkar.listCategories(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/azkar/azkar.controller.ts) diff --git a/locales/ar/api-reference/azkar/category.mdx b/locales/ar/api-reference/azkar/category.mdx new file mode 100644 index 0000000..c281dd9 --- /dev/null +++ b/locales/ar/api-reference/azkar/category.mdx @@ -0,0 +1,33 @@ +--- +title: "أذكار تصنيف" +description: "يعيد أول تصنيف يحتوي اسمه العربي المطبع على القيمة المدخلة. استخدم الاسم الكامل من الفهرس لتجنب التطابق الغامض." +openapi: "locales/ar/openapi.yaml GET /azkar/{category}" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/azkar/%D8%A3%D8%B0%D9%83%D8%A7%D8%B1%20%D8%A7%D9%84%D8%B5%D8%A8%D8%A7%D8%AD' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/azkar/%D8%A3%D8%B0%D9%83%D8%A7%D8%B1%20%D8%A7%D9%84%D8%B5%D8%A8%D8%A7%D8%AD"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.azkar.getByCategory('أذكار الصباح'); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/azkar/azkar.controller.ts) diff --git a/locales/ar/api-reference/azkar/overview.mdx b/locales/ar/api-reference/azkar/overview.mdx new file mode 100644 index 0000000..bca39e4 --- /dev/null +++ b/locales/ar/api-reference/azkar/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "الأذكار" +description: "مسارات الأذكار ومعاملاتها وأمثلتها." +--- + +مسارات الأذكار ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /azkar` | [تصنيفات الأذكار](/locales/ar/api-reference/azkar/categories) | +| `GET /azkar/{category}` | [أذكار تصنيف](/locales/ar/api-reference/azkar/category) | +| `GET /azkar/search` | [البحث في الأذكار](/locales/ar/api-reference/azkar/search) | +| `GET /azkar/random` | [ذكر عشوائي](/locales/ar/api-reference/azkar/random) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/azkar/random.mdx b/locales/ar/api-reference/azkar/random.mdx new file mode 100644 index 0000000..31cdc58 --- /dev/null +++ b/locales/ar/api-reference/azkar/random.mdx @@ -0,0 +1,33 @@ +--- +title: "ذكر عشوائي" +description: "يختار ذكرًا من جميع التصنيفات المخزّنة. يتم الاختيار العشوائي عند كل طلب." +openapi: "locales/ar/openapi.yaml GET /azkar/random" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/azkar/random' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/azkar/random"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.azkar.random(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/azkar/azkar.controller.ts) diff --git a/locales/ar/api-reference/azkar/search.mdx b/locales/ar/api-reference/azkar/search.mdx new file mode 100644 index 0000000..7d407dd --- /dev/null +++ b/locales/ar/api-reference/azkar/search.mdx @@ -0,0 +1,33 @@ +--- +title: "البحث في الأذكار" +description: "يعيد {success, total, data: [...]} مع التصنيف والذكر لكل نتيجة. total هو عدد النتائج المعادة بعد تطبيق limit." +openapi: "locales/ar/openapi.yaml GET /azkar/search" +--- + + +توجد مشكلة في فك الاستجابة داخل client.azkar.search() في SDK 1.0.2. استخدم fetch أو الدالة البديلة في دليل SDK. + + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/azkar/search' \ + --data-urlencode 'text=الله' \ + --data-urlencode 'limit=10' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/azkar/search"); +url.searchParams.set("text", "الله"); +url.searchParams.set("limit", "10"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/azkar/azkar.controller.ts) diff --git a/locales/ar/api-reference/hadith/book.mdx b/locales/ar/api-reference/hadith/book.mdx new file mode 100644 index 0000000..f09e9ce --- /dev/null +++ b/locales/ar/api-reference/hadith/book.mdx @@ -0,0 +1,41 @@ +--- +title: "نطاق أحاديث" +description: "يعيد book وavailable وhadiths داخل data. طرفا النطاق مشمولان؛ from الافتراضي 1 وto الافتراضي from + 29." +openapi: "locales/ar/openapi.yaml GET /hadith/{book}" +--- + + +يرفض API حاليًا to - from > 300، فيقبل 301 عنصرًا عند شمول الطرفين. يرفض SDK 1.0.2 أكثر من 300 عند إرسال الطرفين. استخدم 300 أو أقل للتوافق. قد يعيد النطاق الفارغ 200 مع hadiths: []. + + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/hadith/bukhari' \ + --data-urlencode 'from=1' \ + --data-urlencode 'to=30' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hadith/bukhari"); +url.searchParams.set("from", "1"); +url.searchParams.set("to", "30"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hadith.getBook('bukhari', { from: 1, to: 30 }); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hadith/hadith.controller.ts) diff --git a/locales/ar/api-reference/hadith/books.mdx b/locales/ar/api-reference/hadith/books.mdx new file mode 100644 index 0000000..6c245d3 --- /dev/null +++ b/locales/ar/api-reference/hadith/books.mdx @@ -0,0 +1,33 @@ +--- +title: "كتب الحديث" +description: "يعيد معرّفات الكتب وأسماءها وأعداد الأحاديث من المصدر المستخدم. استخرج المعرّفات هنا بدل افتراض قائمة ثابتة." +openapi: "locales/ar/openapi.yaml GET /hadith" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/hadith' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hadith"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hadith.listBooks(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hadith/hadith.controller.ts) diff --git a/locales/ar/api-reference/hadith/get.mdx b/locales/ar/api-reference/hadith/get.mdx new file mode 100644 index 0000000..842db33 --- /dev/null +++ b/locales/ar/api-reference/hadith/get.mdx @@ -0,0 +1,33 @@ +--- +title: "حديث برقم" +description: "يعيد الحديث برقم داخل الكتاب. الاستجابة لا تحتوي حقول الحكم على الحديث أو الإسناد." +openapi: "locales/ar/openapi.yaml GET /hadith/{book}/{number}" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/hadith/bukhari/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hadith/bukhari/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hadith.getByNumber('bukhari', 1); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hadith/hadith.controller.ts) diff --git a/locales/ar/api-reference/hadith/overview.mdx b/locales/ar/api-reference/hadith/overview.mdx new file mode 100644 index 0000000..7c13061 --- /dev/null +++ b/locales/ar/api-reference/hadith/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "الحديث" +description: "مسارات الحديث ومعاملاتها وأمثلتها." +--- + +مسارات الحديث ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /hadith` | [كتب الحديث](/locales/ar/api-reference/hadith/books) | +| `GET /hadith/{book}` | [نطاق أحاديث](/locales/ar/api-reference/hadith/book) | +| `GET /hadith/{book}/{number}` | [حديث برقم](/locales/ar/api-reference/hadith/get) | +| `GET /hadith/random` | [حديث عشوائي](/locales/ar/api-reference/hadith/random) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/hadith/random.mdx b/locales/ar/api-reference/hadith/random.mdx new file mode 100644 index 0000000..54102a9 --- /dev/null +++ b/locales/ar/api-reference/hadith/random.mdx @@ -0,0 +1,35 @@ +--- +title: "حديث عشوائي" +description: "يختار كتابًا ثم رقم حديث وفق العدد المتاح. يمكن تقييد الكتاب. تحتوي النتيجة book وhadith." +openapi: "locales/ar/openapi.yaml GET /hadith/random" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/hadith/random' \ + --data-urlencode 'book=bukhari' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hadith/random"); +url.searchParams.set("book", "bukhari"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hadith.random({ book: 'bukhari' }); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hadith/hadith.controller.ts) diff --git a/locales/ar/api-reference/hijri/from-gregorian.mdx b/locales/ar/api-reference/hijri/from-gregorian.mdx new file mode 100644 index 0000000..38e8f98 --- /dev/null +++ b/locales/ar/api-reference/hijri/from-gregorian.mdx @@ -0,0 +1,35 @@ +--- +title: "من الميلادي إلى الهجري" +description: "يعيد تمثيل التاريخ بالتقويمين. Aladhan هو المصدر الوحيد المضبوط." +openapi: "locales/ar/openapi.yaml GET /hijri/from-gregorian" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/hijri/from-gregorian' \ + --data-urlencode 'date=01-01-2026' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hijri/from-gregorian"); +url.searchParams.set("date", "01-01-2026"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hijri.fromGregorian('01-01-2026'); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hijri/hijri.controller.ts) diff --git a/locales/ar/api-reference/hijri/overview.mdx b/locales/ar/api-reference/hijri/overview.mdx new file mode 100644 index 0000000..cdbcb89 --- /dev/null +++ b/locales/ar/api-reference/hijri/overview.mdx @@ -0,0 +1,14 @@ +--- +title: "التقويم الهجري" +description: "مسارات التقويم الهجري ومعاملاتها وأمثلتها." +--- + +مسارات التقويم الهجري ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /hijri/today` | [تاريخ اليوم بالتقويمين](/locales/ar/api-reference/hijri/today) | +| `GET /hijri/from-gregorian` | [من الميلادي إلى الهجري](/locales/ar/api-reference/hijri/from-gregorian) | +| `GET /hijri/to-gregorian` | [من الهجري إلى الميلادي](/locales/ar/api-reference/hijri/to-gregorian) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/hijri/to-gregorian.mdx b/locales/ar/api-reference/hijri/to-gregorian.mdx new file mode 100644 index 0000000..4f60efe --- /dev/null +++ b/locales/ar/api-reference/hijri/to-gregorian.mdx @@ -0,0 +1,35 @@ +--- +title: "من الهجري إلى الميلادي" +description: "يحوّل تاريخًا هجريًا مطلوبًا. تأتي أسماء الأشهر وأيام الأسبوع من المصدر." +openapi: "locales/ar/openapi.yaml GET /hijri/to-gregorian" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/hijri/to-gregorian' \ + --data-urlencode 'date=01-09-1447' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hijri/to-gregorian"); +url.searchParams.set("date", "01-09-1447"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hijri.toGregorian('01-09-1447'); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hijri/hijri.controller.ts) diff --git a/locales/ar/api-reference/hijri/today.mdx b/locales/ar/api-reference/hijri/today.mdx new file mode 100644 index 0000000..aeb13c4 --- /dev/null +++ b/locales/ar/api-reference/hijri/today.mdx @@ -0,0 +1,33 @@ +--- +title: "تاريخ اليوم بالتقويمين" +description: "يحوّل تاريخ خادم API الميلادي الحالي عبر Aladhan. لا يستخدم المنطقة الزمنية للمتصفح." +openapi: "locales/ar/openapi.yaml GET /hijri/today" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/hijri/today' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hijri/today"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hijri.today(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hijri/hijri.controller.ts) diff --git a/locales/ar/api-reference/meta/catalogue.mdx b/locales/ar/api-reference/meta/catalogue.mdx new file mode 100644 index 0000000..7d2ab2f --- /dev/null +++ b/locales/ar/api-reference/meta/catalogue.mdx @@ -0,0 +1,33 @@ +--- +title: "فهرس المسارات" +description: "يعرض مسارات المحتوى المسجّلة وبيانات المشروع. لا يدرج مسارات التشغيل الأربعة." +openapi: "locales/ar/openapi.yaml GET /" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.routes(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/server.ts) diff --git a/locales/ar/api-reference/meta/health.mdx b/locales/ar/api-reference/meta/health.mdx new file mode 100644 index 0000000..6b3ddb9 --- /dev/null +++ b/locales/ar/api-reference/meta/health.mdx @@ -0,0 +1,33 @@ +--- +title: "فحص الحياة" +description: "يتحقق من استجابة عملية HTTP. لا يتصل بمصادر المحتوى." +openapi: "locales/ar/openapi.yaml GET /health" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/health' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/health"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.health(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/server.ts) diff --git a/locales/ar/api-reference/meta/metrics.mdx b/locales/ar/api-reference/meta/metrics.mdx new file mode 100644 index 0000000..69ba7a4 --- /dev/null +++ b/locales/ar/api-reference/meta/metrics.mdx @@ -0,0 +1,33 @@ +--- +title: "مقاييس Prometheus" +description: "يعيد مدة التشغيل ومقاييس الكاش وعدادات طلبات المصادر كنص." +openapi: "locales/ar/openapi.yaml GET /metrics" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/metrics' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/metrics"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.text(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.metrics(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/server.ts) diff --git a/locales/ar/api-reference/meta/overview.mdx b/locales/ar/api-reference/meta/overview.mdx new file mode 100644 index 0000000..946eb3b --- /dev/null +++ b/locales/ar/api-reference/meta/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "تشغيل الخدمة" +description: "مسارات تشغيل الخدمة ومعاملاتها وأمثلتها." +--- + +مسارات تشغيل الخدمة ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /` | [فهرس المسارات](/locales/ar/api-reference/meta/catalogue) | +| `GET /health` | [فحص الحياة](/locales/ar/api-reference/meta/health) | +| `GET /ready` | [الجاهزية والكاش](/locales/ar/api-reference/meta/ready) | +| `GET /metrics` | [مقاييس Prometheus](/locales/ar/api-reference/meta/metrics) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/meta/ready.mdx b/locales/ar/api-reference/meta/ready.mdx new file mode 100644 index 0000000..474d94e --- /dev/null +++ b/locales/ar/api-reference/meta/ready.mdx @@ -0,0 +1,33 @@ +--- +title: "الجاهزية والكاش" +description: "يعيد جاهزية العملية وأعداد عناصر الكاش الحالية. لا يفحص توفر المصادر الخارجية." +openapi: "locales/ar/openapi.yaml GET /ready" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/ready' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ready"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ready(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/server.ts) diff --git a/locales/ar/api-reference/overview.mdx b/locales/ar/api-reference/overview.mdx new file mode 100644 index 0000000..9b89247 --- /dev/null +++ b/locales/ar/api-reference/overview.mdx @@ -0,0 +1,89 @@ +--- +title: "مرجع API" +description: "جميع مسارات HTTP ومعاملاتها واستجاباتها." +--- + +الرابط الأساسي `https://api.bonyanoss.org`. جميع المسارات التالية تستخدم GET. لا تحتاج مفتاح API في التنفيذ الحالي. افتح صفحة المسار لتجربة الطلب ورؤية المعاملات وحقول الاستجابة. + +[تنزيل OpenAPI بالعربية](/locales/ar/openapi.yaml) · [دليل الأخطاء](/locales/ar/concepts/errors) + +## تشغيل الخدمة + +| المسار | المرجع | +| --- | --- | +| `GET /` | [فهرس المسارات](/locales/ar/api-reference/meta/catalogue) | +| `GET /health` | [فحص الحياة](/locales/ar/api-reference/meta/health) | +| `GET /ready` | [الجاهزية والكاش](/locales/ar/api-reference/meta/ready) | +| `GET /metrics` | [مقاييس Prometheus](/locales/ar/api-reference/meta/metrics) | + +## بيانات السور + +| المسار | المرجع | +| --- | --- | +| `GET /surah` | [قائمة السور](/locales/ar/api-reference/surah/list) | +| `GET /surah/{id}` | [بيانات سورة](/locales/ar/api-reference/surah/get) | +| `GET /surah/search` | [البحث في أسماء السور](/locales/ar/api-reference/surah/search) | + +## نص القرآن + +| المسار | المرجع | +| --- | --- | +| `GET /ayat` | [نص القرآن كاملًا](/locales/ar/api-reference/ayat/all) | +| `GET /ayat/{id}` | [آية برقمها العام](/locales/ar/api-reference/ayat/get-by-number) | +| `GET /ayat/{surah}/aya/{id}` | [آية داخل سورة](/locales/ar/api-reference/ayat/get-by-surah-aya) | +| `GET /ayat/search` | [البحث في نص القرآن](/locales/ar/api-reference/ayat/search) | + +## القراء والصوت + +| المسار | المرجع | +| --- | --- | +| `GET /reciters` | [قائمة القراء](/locales/ar/api-reference/reciters/list) | +| `GET /reciters/{id}` | [بيانات قارئ](/locales/ar/api-reference/reciters/get) | +| `GET /reciters/search` | [البحث في أسماء القراء](/locales/ar/api-reference/reciters/search) | +| `GET /reciters/{id}/surah/{surah}` | [رابط صوت السورة](/locales/ar/api-reference/reciters/audio) | + +## التفسير + +| المسار | المرجع | +| --- | --- | +| `GET /tafsir` | [نسخ التفسير](/locales/ar/api-reference/tafsir/editions) | +| `GET /tafsir/{edition}/{surah}` | [تفسير سورة](/locales/ar/api-reference/tafsir/surah) | +| `GET /tafsir/{edition}/{surah}/{aya}` | [تفسير آية](/locales/ar/api-reference/tafsir/aya) | + +## الأذكار + +| المسار | المرجع | +| --- | --- | +| `GET /azkar` | [تصنيفات الأذكار](/locales/ar/api-reference/azkar/categories) | +| `GET /azkar/{category}` | [أذكار تصنيف](/locales/ar/api-reference/azkar/category) | +| `GET /azkar/search` | [البحث في الأذكار](/locales/ar/api-reference/azkar/search) | +| `GET /azkar/random` | [ذكر عشوائي](/locales/ar/api-reference/azkar/random) | + +## الحديث + +| المسار | المرجع | +| --- | --- | +| `GET /hadith` | [كتب الحديث](/locales/ar/api-reference/hadith/books) | +| `GET /hadith/{book}` | [نطاق أحاديث](/locales/ar/api-reference/hadith/book) | +| `GET /hadith/{book}/{number}` | [حديث برقم](/locales/ar/api-reference/hadith/get) | +| `GET /hadith/random` | [حديث عشوائي](/locales/ar/api-reference/hadith/random) | + +## مواقيت الصلاة + +| المسار | المرجع | +| --- | --- | +| `GET /prayer/times` | [مواقيت الصلاة](/locales/ar/api-reference/prayer/times) | + +## التقويم الهجري + +| المسار | المرجع | +| --- | --- | +| `GET /hijri/today` | [تاريخ اليوم بالتقويمين](/locales/ar/api-reference/hijri/today) | +| `GET /hijri/from-gregorian` | [من الميلادي إلى الهجري](/locales/ar/api-reference/hijri/from-gregorian) | +| `GET /hijri/to-gregorian` | [من الهجري إلى الميلادي](/locales/ar/api-reference/hijri/to-gregorian) | + +## القبلة + +| المسار | المرجع | +| --- | --- | +| `GET /qibla` | [اتجاه القبلة](/locales/ar/api-reference/qibla/direction) | diff --git a/locales/ar/api-reference/prayer/overview.mdx b/locales/ar/api-reference/prayer/overview.mdx new file mode 100644 index 0000000..fdb0817 --- /dev/null +++ b/locales/ar/api-reference/prayer/overview.mdx @@ -0,0 +1,12 @@ +--- +title: "مواقيت الصلاة" +description: "مسارات مواقيت الصلاة ومعاملاتها وأمثلتها." +--- + +مسارات مواقيت الصلاة ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /prayer/times` | [مواقيت الصلاة](/locales/ar/api-reference/prayer/times) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/prayer/times.mdx b/locales/ar/api-reference/prayer/times.mdx new file mode 100644 index 0000000..88bf8cc --- /dev/null +++ b/locales/ar/api-reference/prayer/times.mdx @@ -0,0 +1,45 @@ +--- +title: "مواقيت الصلاة" +description: "أرسل latitude وlongitude أو city وcountry. عند إرسال الزوجين، تُجرّب إحداثيات Aladhan قبل البحث باسم المدينة." +openapi: "locales/ar/openapi.yaml GET /prayer/times" +--- + + +يتاح بديل pray.zone لطلبات الإحداثيات بتاريخ اليوم على خادم API فقط. لا يستقبل method وقد يحذف method وcoordinates من النتيجة. افحص apiName قبل افتراض ثبات طريقة الحساب. يتحقق هذا المتحكم من كون الإحداثيات أرقامًا دون فرض حدودها الجغرافية؛ يفرض SDK الحدود. + + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/prayer/times' \ + --data-urlencode 'date=01-01-2026' \ + --data-urlencode 'latitude=21.4225' \ + --data-urlencode 'longitude=39.8262' \ + --data-urlencode 'method=4' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/prayer/times"); +url.searchParams.set("date", "01-01-2026"); +url.searchParams.set("latitude", "21.4225"); +url.searchParams.set("longitude", "39.8262"); +url.searchParams.set("method", "4"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.prayer.getTimes({ latitude: 21.4225, longitude: 39.8262, method: 4 }); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/prayer/prayer.controller.ts) diff --git a/locales/ar/api-reference/qibla/direction.mdx b/locales/ar/api-reference/qibla/direction.mdx new file mode 100644 index 0000000..c96a858 --- /dev/null +++ b/locales/ar/api-reference/qibla/direction.mdx @@ -0,0 +1,41 @@ +--- +title: "اتجاه القبلة" +description: "يعيد الزاوية بالدرجات باتجاه عقارب الساعة من الشمال الحقيقي. يجرّب Aladhan ثم يحسب الاتجاه محليًا على الدائرة العظمى." +openapi: "locales/ar/openapi.yaml GET /qibla" +--- + + +هذه زاوية جغرافية وليست قراءة بوصلة الجهاز. الانحراف المغناطيسي واتجاه الجهاز خارج وظيفة هذا المسار. + + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/qibla' \ + --data-urlencode 'latitude=21.4225' \ + --data-urlencode 'longitude=39.8262' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/qibla"); +url.searchParams.set("latitude", "21.4225"); +url.searchParams.set("longitude", "39.8262"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.qibla.getDirection(21.4225, 39.8262); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/qibla/qibla.controller.ts) diff --git a/locales/ar/api-reference/qibla/overview.mdx b/locales/ar/api-reference/qibla/overview.mdx new file mode 100644 index 0000000..3005ad9 --- /dev/null +++ b/locales/ar/api-reference/qibla/overview.mdx @@ -0,0 +1,12 @@ +--- +title: "القبلة" +description: "مسارات القبلة ومعاملاتها وأمثلتها." +--- + +مسارات القبلة ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /qibla` | [اتجاه القبلة](/locales/ar/api-reference/qibla/direction) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/reciters/audio.mdx b/locales/ar/api-reference/reciters/audio.mdx new file mode 100644 index 0000000..72048a0 --- /dev/null +++ b/locales/ar/api-reference/reciters/audio.mdx @@ -0,0 +1,37 @@ +--- +title: "رابط صوت السورة" +description: "ينشئ الرابط من خادم أول مصحف ورقم السورة بثلاث خانات. يعيد JSON وليس بثًا صوتيًا." +openapi: "locales/ar/openapi.yaml GET /reciters/{id}/surah/{surah}" +--- + + +لا يتحقق API من وجود ملف MP3. قد يفتقد قارئ من quran.com بيانات المصحف فتُعاد 404. اختر قارئًا له moshaf قبل طلب الصوت. + + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/reciters/1/surah/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/reciters/1/surah/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.reciters.getSurah(1, 1); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/reciters/reciters.controller.ts) diff --git a/locales/ar/api-reference/reciters/get.mdx b/locales/ar/api-reference/reciters/get.mdx new file mode 100644 index 0000000..69ccc8a --- /dev/null +++ b/locales/ar/api-reference/reciters/get.mdx @@ -0,0 +1,33 @@ +--- +title: "بيانات قارئ" +description: "يبحث عن المعرّف في فهرس المصدر المخزّن حاليًا." +openapi: "locales/ar/openapi.yaml GET /reciters/{id}" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/reciters/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/reciters/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.reciters.getById(1); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/reciters/reciters.controller.ts) diff --git a/locales/ar/api-reference/reciters/list.mdx b/locales/ar/api-reference/reciters/list.mdx new file mode 100644 index 0000000..5683b66 --- /dev/null +++ b/locales/ar/api-reference/reciters/list.mdx @@ -0,0 +1,33 @@ +--- +title: "قائمة القراء" +description: "يعيد القراء داخل data.reciters. قد يحذف المصدر البديل المصاحف وبيانات خادم الصوت." +openapi: "locales/ar/openapi.yaml GET /reciters" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/reciters' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/reciters"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.reciters.list(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/reciters/reciters.controller.ts) diff --git a/locales/ar/api-reference/reciters/overview.mdx b/locales/ar/api-reference/reciters/overview.mdx new file mode 100644 index 0000000..cc0544c --- /dev/null +++ b/locales/ar/api-reference/reciters/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "القراء والصوت" +description: "مسارات القراء والصوت ومعاملاتها وأمثلتها." +--- + +مسارات القراء والصوت ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /reciters` | [قائمة القراء](/locales/ar/api-reference/reciters/list) | +| `GET /reciters/{id}` | [بيانات قارئ](/locales/ar/api-reference/reciters/get) | +| `GET /reciters/search` | [البحث في أسماء القراء](/locales/ar/api-reference/reciters/search) | +| `GET /reciters/{id}/surah/{surah}` | [رابط صوت السورة](/locales/ar/api-reference/reciters/audio) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/reciters/search.mdx b/locales/ar/api-reference/reciters/search.mdx new file mode 100644 index 0000000..e6a885a --- /dev/null +++ b/locales/ar/api-reference/reciters/search.mdx @@ -0,0 +1,35 @@ +--- +title: "البحث في أسماء القراء" +description: "يعيد القراء المطابقين لجزء من الاسم العربي. لا يدعم البحث التقريبي أو البحث الإنجليزي." +openapi: "locales/ar/openapi.yaml GET /reciters/search" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/reciters/search' \ + --data-urlencode 'name=العفاسي' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/reciters/search"); +url.searchParams.set("name", "العفاسي"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.reciters.search('العفاسي'); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/reciters/reciters.controller.ts) diff --git a/locales/ar/api-reference/surah/get.mdx b/locales/ar/api-reference/surah/get.mdx new file mode 100644 index 0000000..fd9be79 --- /dev/null +++ b/locales/ar/api-reference/surah/get.mdx @@ -0,0 +1,33 @@ +--- +title: "بيانات سورة" +description: "يعيد بيانات سورة واحدة." +openapi: "locales/ar/openapi.yaml GET /surah/{id}" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/surah/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/surah/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.surah.getById(1); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/surah/surah.controller.ts) diff --git a/locales/ar/api-reference/surah/list.mdx b/locales/ar/api-reference/surah/list.mdx new file mode 100644 index 0000000..c64e779 --- /dev/null +++ b/locales/ar/api-reference/surah/list.mdx @@ -0,0 +1,33 @@ +--- +title: "قائمة السور" +description: "يعيد فهرس السور داخل data.surah. يحتوي أسماء وبيانات السور دون نص الآيات." +openapi: "locales/ar/openapi.yaml GET /surah" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/surah' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/surah"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.surah.list(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/surah/surah.controller.ts) diff --git a/locales/ar/api-reference/surah/overview.mdx b/locales/ar/api-reference/surah/overview.mdx new file mode 100644 index 0000000..8ccc155 --- /dev/null +++ b/locales/ar/api-reference/surah/overview.mdx @@ -0,0 +1,14 @@ +--- +title: "بيانات السور" +description: "مسارات بيانات السور ومعاملاتها وأمثلتها." +--- + +مسارات بيانات السور ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /surah` | [قائمة السور](/locales/ar/api-reference/surah/list) | +| `GET /surah/{id}` | [بيانات سورة](/locales/ar/api-reference/surah/get) | +| `GET /surah/search` | [البحث في أسماء السور](/locales/ar/api-reference/surah/search) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/surah/search.mdx b/locales/ar/api-reference/surah/search.mdx new file mode 100644 index 0000000..0d8b73e --- /dev/null +++ b/locales/ar/api-reference/surah/search.mdx @@ -0,0 +1,35 @@ +--- +title: "البحث في أسماء السور" +description: "يطابق جزءًا من الاسم بعد تطبيع العربية ويعيد مصفوفة. تعاد 404 عند غياب النتائج." +openapi: "locales/ar/openapi.yaml GET /surah/search" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/surah/search' \ + --data-urlencode 'name=الفاتحة' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/surah/search"); +url.searchParams.set("name", "الفاتحة"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.surah.search('الفاتحة'); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/surah/surah.controller.ts) diff --git a/locales/ar/api-reference/tafsir/aya.mdx b/locales/ar/api-reference/tafsir/aya.mdx new file mode 100644 index 0000000..ee90b7d --- /dev/null +++ b/locales/ar/api-reference/tafsir/aya.mdx @@ -0,0 +1,33 @@ +--- +title: "تفسير آية" +description: "يعيد كائن تفسير واحد. لنسخة muyassar مصدران، ولكل نسخة أخرى مصدر واحد." +openapi: "locales/ar/openapi.yaml GET /tafsir/{edition}/{surah}/{aya}" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/tafsir/muyassar/1/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/tafsir/muyassar/1/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.tafsir.forAya('muyassar', 1, 1); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/tafsir/tafsir.controller.ts) diff --git a/locales/ar/api-reference/tafsir/editions.mdx b/locales/ar/api-reference/tafsir/editions.mdx new file mode 100644 index 0000000..cd70dea --- /dev/null +++ b/locales/ar/api-reference/tafsir/editions.mdx @@ -0,0 +1,33 @@ +--- +title: "نسخ التفسير" +description: "يعرض معرّفات نسخ التفسير الخمس وأسماءها العربية. الفهرس محلي ولا يفحص توفر المصادر." +openapi: "locales/ar/openapi.yaml GET /tafsir" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/tafsir' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/tafsir"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.tafsir.listEditions(); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/tafsir/tafsir.controller.ts) diff --git a/locales/ar/api-reference/tafsir/overview.mdx b/locales/ar/api-reference/tafsir/overview.mdx new file mode 100644 index 0000000..a5c725b --- /dev/null +++ b/locales/ar/api-reference/tafsir/overview.mdx @@ -0,0 +1,14 @@ +--- +title: "التفسير" +description: "مسارات التفسير ومعاملاتها وأمثلتها." +--- + +مسارات التفسير ومعاملاتها وأمثلتها. + +| المسار | المرجع | +| --- | --- | +| `GET /tafsir` | [نسخ التفسير](/locales/ar/api-reference/tafsir/editions) | +| `GET /tafsir/{edition}/{surah}` | [تفسير سورة](/locales/ar/api-reference/tafsir/surah) | +| `GET /tafsir/{edition}/{surah}/{aya}` | [تفسير آية](/locales/ar/api-reference/tafsir/aya) | + +[سلوك المصادر البديلة](/locales/ar/concepts/fallback) · [مدد الكاش](/locales/ar/concepts/caching) diff --git a/locales/ar/api-reference/tafsir/surah.mdx b/locales/ar/api-reference/tafsir/surah.mdx new file mode 100644 index 0000000..cba6d09 --- /dev/null +++ b/locales/ar/api-reference/tafsir/surah.mdx @@ -0,0 +1,35 @@ +--- +title: "تفسير سورة" +description: "يعيد مصفوفة حتى عند تحديد آية واحدة بالمعامل aya. حقل edition المعاد يستخدم معرّف المصدر." +openapi: "locales/ar/openapi.yaml GET /tafsir/{edition}/{surah}" +--- + +## مثال الطلب + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/tafsir/muyassar/1' \ + --data-urlencode 'aya=1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/tafsir/muyassar/1"); +url.searchParams.set("aya", "1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.tafsir.forSurah('muyassar', 1); +console.log(result); +``` + + + +[الاستجابات والأخطاء](/locales/ar/concepts/errors) · [دليل SDK](/locales/ar/sdk/overview) · [كود المسار](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/tafsir/tafsir.controller.ts) diff --git a/locales/ar/code-of-conduct.mdx b/locales/ar/code-of-conduct.mdx new file mode 100644 index 0000000..4a177b0 --- /dev/null +++ b/locales/ar/code-of-conduct.mdx @@ -0,0 +1,10 @@ +--- +title: "سلوك المجتمع" +description: "دليل مختصر لسياسة المستودع." +--- + +عامل المساهمين باحترام، وركّز الملاحظات على العمل، واذكر المصادر عند مناقشة المحتوى الإسلامي. افصل النص الأصلي عن الترجمة والتفسير والرأي الشخصي. تحظر سياسة المستودع المضايقة والتهديد والعداء الطائفي وانتهاك الخصوصية والانتقام. + +تحدد [مدونة السلوك الكاملة](https://github.com/BonyanOSS/docs/blob/main/CODE_OF_CONDUCT.md) النطاق وإجراءات التنفيذ ومسؤوليات المشرفين. تلخص هذه الصفحة السياسة ولا تحل محلها. + +لا تحتوي السياسة حاليًا جهة اتصال خاصة محددة للإبلاغ. لا تنشر البلاغات الحساسة في issue عام. يحتاج المشرفون إلى توفير قناة خاصة؛ لا يختلق هذا التوثيق عنوانًا أو يعد بخدمة إبلاغ غير موجودة. diff --git a/locales/ar/concepts/arabic-search.mdx b/locales/ar/concepts/arabic-search.mdx new file mode 100644 index 0000000..7690f86 --- /dev/null +++ b/locales/ar/concepts/arabic-search.mdx @@ -0,0 +1,34 @@ +--- +title: "البحث العربي" +description: "مطابقة أجزاء النص وتطبيع العربية وترميز الاستعلام." +--- + +يطابق البحث أجزاء النص العربي بعد التطبيع. لا يرتب النتائج حسب الصلة، ولا يصحح الإملاء، ولا يترجم الإدخال، ولا يوفر فهرس بحث إنجليزيًا. + +## مساران للتطبيع + +| المسارات | السلوك | +| --- | --- | +| `/surah/search` و`/reciters/search` والبحث في تصنيفات الأذكار ونصوصها | إزالة العلامات والحروف غير العربية وتوحيد بعض أشكال الحروف مع إبقاء المسافات الداخلية. | +| `/ayat/search` | تطبيع العلامات القرآنية وأشكال الحروف وإزالة التطويل والمسافات قبل المطابقة. | + +يحوّل بحث القرآن الألف الخنجرية إلى ألف ويزيل التطويل والمسافات. يبقي التطبيع العام المسافات الداخلية. تحوّل الدالتان الواو المهموزة إلى واو بعد تفكيك Unicode وحذف العلامات. وقد يغيّر اختلاف التعامل مع العلامات القرآنية والمسافات نتائج المطابقة بين الوحدات. + + +قد يتحول الإدخال المؤلف من حروف لاتينية أو علامات ترقيم فقط إلى نص فارغ ويطابق عناصر غير مقصودة. أرسل عبارة عربية ذات معنى؛ نجاح الطلب برمز 200 لا يثبت دعم البحث الإنجليزي. + + +## رمّز الاستعلام العربي + +```js +const url = new URL('https://api.bonyanoss.org/ayat/search'); +url.searchParams.set('text', 'الرحمن'); +url.searchParams.set('limit', '10'); +const response = await fetch(url); +if (!response.ok) throw new Error(('HTTP ' + response.status)); +const body = await response.json(); +console.log(body.total, body.data); +``` + + +يضبط الخادم حد بحث الآيات بين 1 و500، وبحث الأذكار بين 1 و200، بافتراضي 50. الصفر أو الحد غير القابل للتحليل يستخدم 50 أيضًا. يتحقق SDK من الحدود بشكل أشد. البحث بلا تطابق يعيد 404 بدل مصفوفة نجاح فارغة. diff --git a/locales/ar/concepts/architecture.mdx b/locales/ar/concepts/architecture.mdx new file mode 100644 index 0000000..94874f5 --- /dev/null +++ b/locales/ar/concepts/architecture.mdx @@ -0,0 +1,39 @@ +--- +title: "كيف يعمل API" +description: "تدفق الطلب وتحويل بيانات المصادر وحدود البدائل." +--- + +Bonyan API خادم مبني على Fastify. تتحقق وحدات المحتوى التسع من الطلبات، وتجلب البيانات الخارجية، وتخزّن النتائج، وتعيد أشكال JSON الخاصة بكل وحدة. تصف مسارات التشغيل الأربعة حالة العملية نفسها. + +## طلب محتوى + +```mermaid +flowchart TD + A["تطبيقك: HTTP أو SDK"] --> B["Fastify: حد الطلبات والمسار"] + B --> C{"المدخلات صالحة؟"} + C -->|لا| X["400"] + C -->|نعم| D{"كاش صالح؟"} + D -->|نعم| R["تحديد النتيجة وإرسال JSON"] + D -->|لا| P["تحميل المصدر أو تجربة البدائل"] + P -->|نتيجة| S["تخزين النتيجة"] + S --> R + P -->|فشل جميع المحاولات| E["503"] +``` + +يوضح الرسم المسار الشائع. لا تتطابق الوحدات في التحقق من المدخلات أو فحص النتائج الفارغة أو تجربة البدائل. تُقرأ قائمة نسخ التفسير محليًا. يمكن حساب القبلة محليًا. لا تجلب مسارات الصحة محتوى خارجيًا. + +## الطبقات + +| الطبقة | المسؤولية | +| --- | --- | +| المسارات | مطابقة الرابط واستدعاء المتحكم. | +| المتحكمات | تحليل المدخلات واختيار العناصر وحالة الاستجابة. | +| الخدمات | جلب المصادر وتحويل حقولها إلى أنواع بنيان. | +| الكاش | مشاركة التحميل الجاري وحفظ النتائج الناجحة في الذاكرة. | +| مكتبة العميل | التحقق من بعض المعاملات وإرسال طلبات GET وفك الاستجابة. | + +تعمل الخدمة دون قاعدة بيانات. الكاش والمقاييس خاصان بعملية واحدة ويُصفّران عند إعادة تشغيلها. لا تشارك النسخ المتعددة هذه الحالة. + +## ما الذي يحافظ عليه البديل؟ + +يحوّل API بيانات المصادر إلى مجموعة حقول مشتركة. لكن تغيير المصدر قد يغيّر الحقول الاختيارية والمعرّفات والأسماء وعرض النص وتفاصيل حساب الصلاة. اقرأ [سلوك البدائل](/locales/ar/concepts/fallback) قبل الاعتماد على حقل اختياري. diff --git a/locales/ar/concepts/caching.mdx b/locales/ar/concepts/caching.mdx new file mode 100644 index 0000000..0f95ba9 --- /dev/null +++ b/locales/ar/concepts/caching.mdx @@ -0,0 +1,25 @@ +--- +title: "التخزين المؤقت" +description: "مدة تخزين كل وحدة وما يحدث عند غياب النتيجة." +--- + +يخزّن API نتائج الخدمات الناجحة في Map داخل الذاكرة. تشارك الطلبات المتزامنة للمفتاح غير المخزّن عملية تحميل واحدة. لا تُحفظ عمليات التحميل الفاشلة كعناصر ناجحة. + +| البيانات | مدة الصلاحية | ما يتضمنه مفتاح الكاش | +| --- | --- | --- | +| فهرس السور | 12 ساعة | مفتاح مشترك واحد | +| القرآن كاملًا | 24 ساعة | مفتاح مشترك واحد | +| القراء | ساعة | مفتاح مشترك واحد | +| الأذكار | 24 ساعة | مفتاح مشترك واحد | +| التفسير | 24 ساعة | النسخة والسورة والآية الاختيارية | +| فهرس كتب الحديث | 24 ساعة | مفتاح مشترك واحد | +| نطاق الحديث | 12 ساعة | الكتاب وfrom وto | +| مواقيت الصلاة | ساعة | التاريخ والإحداثيات والمدينة والدولة والطريقة | +| تحويل التاريخ الهجري | 7 أيام | اتجاه التحويل والتاريخ | +| القبلة | 30 يومًا | الإحداثيات | + +السعة الافتراضية 1000 عنصر، ويمكن ضبطها عبر `CACHE_MAX_ENTRIES`. تزيل سياسة الإخلاء أقدم مفتاح في Map؛ وليست سياسة LRU. قد تبقى العناصر المنتهية محسوبة حتى استبدالها أو إزالتها. + +تدعم الدالة المساعدة `staleWhileRevalidateMs`، لكن الوحدات الحالية لا تفعّله. ينتظر الطلب المعتاد تحديث البيانات بعد انتهاء صلاحيتها. لا تفترض تقديم بيانات قديمة أثناء تعطل المصدر. + +تمسح إعادة التشغيل حالة الكاش. لكل نسخة خادم عناصرها وحدودها وعداداتها. يعرض `GET /ready` الحقلين `cache.entries` و`cache.inflight`، ولا يقيس نسبة إصابة الكاش. لا يخزّن SDK الاستجابات مؤقتًا. diff --git a/locales/ar/concepts/errors.mdx b/locales/ar/concepts/errors.mdx new file mode 100644 index 0000000..d2c83d1 --- /dev/null +++ b/locales/ar/concepts/errors.mdx @@ -0,0 +1,44 @@ +--- +title: "الاستجابات والأخطاء" +description: "غلاف النجاح وأعداد نتائج البحث والأخطاء المنظمة." +--- + +## أشكال النجاح + +| مجموعة المسارات | استجابة HTTP الخام | +| --- | --- | +| معظم مسارات المحتوى | `{ success: true, data: ... }` | +| `/ayat/search` و`/azkar/search` | `{ success: true, total: number, data: [...] }` | +| `/` و`/health` و`/ready` | كائن JSON مباشر دون غلاف نجاح. | +| `/metrics` | نص Prometheus وليس JSON. | + +يحسب `total` عدد العناصر المعادة بعد تطبيق `limit`. لا يمثل عدد التطابقات في المحتوى كاملًا، ولا يوجد معامل offset أو cursor. + +## شكل الفشل + +هذا مثال توضيحي لاستجابة 400؛ يتغير معرّف الطلب لكل طلب. + +```json +{ + "success": false, + "message": "Surah id must be between 1 and 114", + "error": { + "code": "BAD_REQUEST", + "message": "Surah id must be between 1 and 114", + "requestId": "req-example" + } +} +``` + + +| حالة HTTP | الرمز المعتاد | الإجراء | +| --- | --- | --- | +| 400 | `BAD_REQUEST` | صحح الإدخال قبل إعادة المحاولة. | +| 404 | `NOT_FOUND` | تحقق من المعرّف أو اعرض حالة بحث بلا نتائج. | +| 429 | `RATE_LIMITED` | انتظر وفق `Retry-After` عند وجودها. | +| 503 | `ALL_SOURCES_FAILED` | أعد المحاولة بعد انتظار محدود أو اعرض عدم التوفر المؤقت. | +| 500 | `INTERNAL_SERVER_ERROR` | سجّل معرّف الطلب وأبلغ عن خطوات تكرار المشكلة. | + +تستخدم بعض حالات 503 المباشرة، مثل تعذر جلب حديث عشوائي، الرمز `INTERNAL_SERVER_ERROR` حاليًا. تعامل مع حالة HTTP إلى جانب الرمز. قد يتحول معرّف كتاب مجهول إلى 503 بعد فشل المصادر بدل 404. وقد يعيد البروكسي أخطاء بصيغة غير JSON. + +يوفر SDK الحقول `status` و`code` و`requestId` و`retryAfterMs` ضمن `BonyanApiError`. راجع [أخطاء SDK](/locales/ar/sdk/errors). diff --git a/locales/ar/concepts/fallback.mdx b/locales/ar/concepts/fallback.mdx new file mode 100644 index 0000000..b8b80b2 --- /dev/null +++ b/locales/ar/concepts/fallback.mdx @@ -0,0 +1,53 @@ +--- +title: "المصادر البديلة" +description: "الوحدات التي لها مصدر بديل والتفاصيل التي قد تتغير." +--- + +تُجرّب المصادر بالترتيب عند غياب كاش صالح. تجربة البدائل سلوك داخل الخادم، وتختلف عن إعادة المحاولة في SDK. + +| الوحدة | ترتيب المصادر وحدودها | +| --- | --- | +| السور | mp3quran.net ثم alquran.cloud ثم quran.com. | +| الآيات | alquran.cloud ثم بيانات fawazahmed0 عبر jsDelivr. | +| القراء | mp3quran.net ثم quran.com. لا يوفر الأخير خوادم صوت المصاحف. | +| التفسير | muyassar: من alquran.cloud ثم quranenc.com. وjalalayn وwaseet وqurtubi: من alquran.cloud فقط. وsaadi: من quranenc.com فقط. | +| الأذكار | نسخة مثبتة من بيانات nawafalqari ثم hisnmuslim.com. | +| الحديث | hadith.gading.dev ثم بيانات sutanlab عبر jsDelivr. | +| الصلاة | إحداثيات Aladhan ثم مدينته إذا أُرسلت، ثم pray.zone للإحداثيات بتاريخ اليوم فقط. | +| الهجري | Aladhan فقط. | +| القبلة | Aladhan ثم حساب محلي على الدائرة العظمى. | + +## مثال: غياب كاش السور + +```mermaid +%%{init: {"sequence": {"actorMargin": 24, "width": 100, "diagramMarginX": 8, "mirrorActors": false, "wrap": true}}}%% +sequenceDiagram + participant C as العميل + participant A as Bonyan API + participant P as المصدر الأول + participant F as المصدر البديل + C->>A: GET /surah + Note over A: كاش مفقود أو منتهي + A->>P: طلب البيانات + alt فشل المصدر الأول + A->>F: تجربة المصدر التالي + alt البديل يعيد نتيجة + F-->>A: بيانات المصدر + A-->>C: 200 JSON + else فشل جميع المحاولات + A-->>C: 503 JSON + end + else المصدر الأول يعيد نتيجة + P-->>A: بيانات المصدر + A-->>C: 200 JSON + end +``` + + +تستخدم دالة HTTP المشتركة مهلة 8 ثوانٍ ما لم تُستبدل. تستخدم طلبات القرآن كاملًا 20 ثانية لكل مصدر، وتستخدم الخدمات الأخرى بين 8 و15 ثانية. قد تستغرق المحاولات المتتابعة أكثر من مهلة SDK الافتراضية البالغة 10 ثوانٍ. + +لا تعمم التعامل مع النتائج الفارغة. ترفض بعض خدمات الفهارس المصفوفات الفارغة، لكن بعضها يعيد نتيجة فارغة إذا أعادت جميع المصادر فراغًا دون رمي خطأ. يستخدم الحديث والتفسير حلقات خاصة ولا يطبّقان فحص فراغ مشتركًا شاملًا. + +## الحقول التي تحتاج فحصًا + +استخدم `apiName` لنسب البيانات إلى مصدرها وتشخيص المشاكل. معرّفات القراء خاصة بالمصدر، وقد تغيب بيانات الصوت بعد تبديله. يستخدم `edition` في استجابة التفسير معرّف المصدر. قد يحذف بديل الصلاة الطريقة والإحداثيات ولا يرسل طريقة Aladhan المختارة إلى pray.zone. ثبات شكل JSON لا يضمن تطابق المحتوى أو إعدادات الحساب. diff --git a/locales/ar/concepts/rate-limit.mdx b/locales/ar/concepts/rate-limit.mdx new file mode 100644 index 0000000..e813ba7 --- /dev/null +++ b/locales/ar/concepts/rate-limit.mdx @@ -0,0 +1,23 @@ +--- +title: "حدود الطلبات وإعادة المحاولة" +description: "احسب ميزانية الطلبات واضبط إعادة المحاولة." +--- + +الحد الافتراضي للخادم 120 طلبًا لكل IP خلال دقيقة واحدة. يمكن تغييره عبر `RATE_LIMIT_MAX` و`RATE_LIMIT_WINDOW` في الاستضافة الذاتية. يطبق الحد على جميع المسارات، بما فيها مسارات التشغيل. + +تعامل مع HTTP 429 كطلب للانتظار. التزم بترويسة `Retry-After` عند وجودها. لا تكرر 400 أو404 دون تغيير الإدخال. حتى الطلب الذي يجد نتيجته في الكاش يُحسب كطلب وارد إلى API. + +يعيد SDK 1.0.2 محاولة HTTP 429 وHTTP 5xx وأخطاء الشبكة والمهلة. تسمح القيمة الافتراضية `retry: 3` بأربع محاولات إجمالًا. دون `Retry-After` تكون فترات الانتظار 100 ثم 200 ثم 400 مللي ثانية، مع إضافة عشوائية بين 0 و99 مللي ثانية. تتقدم ترويسة الانتظار على هذه الفترات إذا توفرت. + +استخدم سياسة واحدة لإعادة المحاولة في تطبيقك. إضافة حلقة إعادة محاولة حول SDK تضاعف المحاولات. المهلة تخص كل محاولة وليست سقفًا زمنيًا للعملية كاملة. + +```ts +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const health = await client.health(); +console.log(health.status); +``` + + +عند وضع خادمك خلف بروكسي موثوق، راجع `TRUST_PROXY` قبل الاعتماد على حدود IP لكل مستخدم. راجع [الاستضافة الذاتية](/locales/ar/guides/self-hosting). diff --git a/locales/ar/contributing.mdx b/locales/ar/contributing.mdx new file mode 100644 index 0000000..5047fc7 --- /dev/null +++ b/locales/ar/contributing.mdx @@ -0,0 +1,12 @@ +--- +title: "المساهمة" +description: "اختر المستودع وأرفق دليلًا يمكن تكراره." +--- + +استخدم [docs](https://github.com/BonyanOSS/docs) للتوثيق، و[Bonyan-API](https://github.com/BonyanOSS/Bonyan-API) لسلوك الخادم، و[bonyan-sdk-js](https://github.com/BonyanOSS/bonyan-sdk-js) لمكتبة JavaScript. + +لتصحيح التوثيق، اذكر الصفحة والطلب أو الدالة والسلوك المتوقع والكود أو الاستجابة التي تدعم التغيير. حدّث الصفحتين الإنجليزية والعربية معًا. راجع [صيانة التوثيق](/locales/ar/guides/maintenance). + +لتغييرات الكود، أنشئ fork وفرعًا محدد الغرض واتبع تعليمات المساهمة والاختبارات في المستودع نفسه. عند إضافة مصدر، حافظ على حقول استجابة الوحدة واختبر مسار الفشل إلى جانب المصدر الأساسي. تغطي MIT الكود؛ راجع شروط المحتوى الخارجي بشكل منفصل قبل إعادة توزيع البيانات أوالصوت. + +اتبع [دليل سلوك المجتمع](/locales/ar/code-of-conduct). لا تضع بيانات خاصة في البلاغات العامة. diff --git a/locales/ar/guides/audio.mdx b/locales/ar/guides/audio.mdx new file mode 100644 index 0000000..9bb1d44 --- /dev/null +++ b/locales/ar/guides/audio.mdx @@ -0,0 +1,23 @@ +--- +title: "تشغيل تلاوة" +description: "اختر قارئًا لديه بيانات صوت قبل طلب الرابط." +--- + +اجلب فهرس القراء واختر عنصرًا يحتوي خادمًا لأول مصحف. لا تفترض أن معرّف قارئ ثابت يعني الشخص نفسه عبر المصادر. + +```ts +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const reciters = await client.reciters.list(); +const reciter = reciters.find(item => item.moshaf?.[0]?.server); +if (!reciter) throw new Error('No audio-enabled reciter is available'); +const result = await client.reciters.getSurah(reciter.id, 1); +console.log(result.reciter, result.audio); +``` + +اضبط `src` لعنصر صوت HTML على الرابط المعاد في `audio` واعرض أدوات التشغيل. يعيد API نفسه JSON، بينما ينزّل المتصفح MP3 من المصدر. تعامل مع حدث الخطأ لعنصر الصوت وأتح للمستخدم اختيار قارئ آخر. + +يستخدم المسار أول مصحف فقط. لا يوجد معامل عام لاختيار المصحف. ينشئ `server + paddedSurah + '.mp3'` دون التحقق من الملف أو السور المتاحة في المصحف. لذلك قد ينجح طلب API ويفشل طلب MP3. + +قد تغيب خوادم الصوت عندما يوفر بديل quran.com الفهرس. اعرض حالة عدم توفر بدل اختراع رابط صوت. راجع [مسار الصوت](/locales/ar/api-reference/reciters/audio). diff --git a/locales/ar/guides/maintenance.mdx b/locales/ar/guides/maintenance.mdx new file mode 100644 index 0000000..d31a73f --- /dev/null +++ b/locales/ar/guides/maintenance.mdx @@ -0,0 +1,36 @@ +--- +title: "صيانة التوثيق" +description: "حافظ على توافق عقود المصادر والترجمات والصفحات المولدة." +--- + +## عدّل المصدر الصحيح + +| التغيير | الملف | +| --- | --- | +| سلوك المسار والمعاملات والأوصاف باللغتين | `scripts/api-catalog.mjs` | +| حقول الاستجابة وأوصافها المترجمة | `scripts/api-schemas.mjs` | +| عرض صفحات المسارات | `scripts/generate-api.mjs` | +| الأدلة | ملفا MDX متطابقا المسار داخل `en/` و`ar/` | +| فهارس API وجداول دوال SDK | `scripts/generate-index.mjs` | +| العرض العربي واتجاه الكود | `styles.css` | +| التنقل والتحويلات | `docs.json` | +| نسخ API وSDK المراجعة | `sources.lock.json` | + +شغّل `pnpm generate` بعد تعديل بيانات API. أدرج ملفات OpenAPI وصفحات المسارات المولدة مع مصادرها في commit. لا تعدّل صفحات المسارات المولدة يدويًا؛ يرفض أمر الفحص اختلافها عن المولد. + +## قبل Pull Request + +```bash +pnpm install --frozen-lockfile +pnpm check +pnpm build +pnpm broken-links +``` + +يتحقق أمر الفحص من ملفي OpenAPI، ويترجم MDX، ويفحص الروابط الداخلية وتكافؤ اللغات، ويفحص أنواع أمثلة SDK، ويختبر دالة البحث باستجابات تمثيلية. لا يثبت توفر مصادر المحتوى الخارجية دائمًا. + +لتغييرات المصادر، شغّل `node scripts/check-source.mjs /path/to/Bonyan-API /path/to/bonyan-sdk-js` على النسخ المسحوبة. راجع المتحكمات والخدمات والأنواع المتغيرة قبل تحديث ملف التثبيت. حافظ على تطابق بنية المسارات في الإنجليزية والعربية، وترجم الشرح مع إبقاء مفاتيح JSON وأسماء الدوال كما هي. + +عاين باستخدام `pnpm dev`. تحقق من RTL العربي واتجاه الكود والجداول والتنقل على الهاتف والرسومات وصفحة API مولدة. يستخدم النشر اتصال مشروع Mintlify الحالي بعد مراجعة تغيير المستودع ودمجه. + +يتطلب البحث المحلي تسجيل الدخول إلى Mintlify عبر `pnpm exec mintlify login`. تحقق من فهرسة البحث على الموقع المستضاف بعد النشر. diff --git a/locales/ar/guides/operations.mdx b/locales/ar/guides/operations.mdx new file mode 100644 index 0000000..301a117 --- /dev/null +++ b/locales/ar/guides/operations.mdx @@ -0,0 +1,25 @@ +--- +title: "التشغيل والمراقبة" +description: "فسّر الفحوص والعدادات وأخطاء المصادر." +--- + +## الفحوص + +يتحقق `/health` من استجابة العملية. ويعرض `/ready` الحالة ready وأعداد الكاش. لا يفحص أيهما المصادر الخارجية، لذلك لا تعني الجاهزية الناجحة أن كل مسارات المحتوى تعمل. + +أضف طلب محتوى منخفض التكرار إلى الفحوص إذا أردت مراقبة السلوك المعتمد على المصادر. قد يخفي الكاش تعطل المصدر الحالي حتى تنتهي صلاحيته. المسارات العشوائية ليست فحوصًا ثابتة النتائج. + +## المقاييس + +| المقياس | المعنى | +| --- | --- | +| bonyan_api_uptime_seconds | مدة تشغيل العملية بالثواني. | +| bonyan_api_cache_entries | عدد العناصر المخزّنة. | +| bonyan_api_cache_inflight | عمليات تحميل الكاش الجارية. | +| bonyan_api_upstream_requests_total | محاولات HTTP للمصادر مع وسمي host وresult. | +| bonyan_api_upstream_failures_total | محاولات المصادر الفاشلة بالوسمين نفسيهما. | +| bonyan_api_upstream_duration_ms_sum | مجموع مدد الطلبات المقاسة بالمللي ثانية. | + +قيم result هي `ok` و`http_error` و`error`. تقيس دالة HTTP المدة حول fetch، وليس تحليل JSON كاملًا أو زمن العميل من البداية للنهاية. مجموع المدد ليس مدرجًا تكراريًا ولا يكفي لحساب مئينات زمن الاستجابة. تتصفّر العدادات مع العملية، وتظهر سلاسل المصادر بعد حدوث الطلبات. + +عند 503، سجّل المسار والحالة ومعرّف الطلب، ثم افحص تحذيرات الخادم وعدادات المصادر. أبقِ طلبات المراقبة ضمن الميزانية المضبوطة. لا يتضمن هذا المرجع ضمان توفر منشورًا. diff --git a/locales/ar/guides/self-hosting.mdx b/locales/ar/guides/self-hosting.mdx new file mode 100644 index 0000000..688d499 --- /dev/null +++ b/locales/ar/guides/self-hosting.mdx @@ -0,0 +1,68 @@ +--- +title: "استضافة API ذاتيًا" +description: "شغّل نسخة Bonyan API واضبطها وتحقق منها." +--- + +استخدم Node.js 22 أو أحدث لإعداد محلي جديد. يستخدم مستودع API حاليًا pnpm 10.33.4. تحتاج طلبات المحتوى اتصال HTTPS صادرًا إلى مصادر البيانات المضبوطة. لا يضبط هذا الخادم قاعدة بيانات أو مفتاح API للمصادر. + +## التطوير المحلي + +```bash +git clone https://github.com/BonyanOSS/Bonyan-API.git +cd Bonyan-API +corepack enable +corepack prepare pnpm@10.33.4 --activate +pnpm install --frozen-lockfile +pnpm dev +``` + +لتغيير الافتراضيات، انسخ `.env.example` إلى `.env` قبل التشغيل: باستخدام `cp .env.example .env` على Unix أو `Copy-Item .env.example .env` في PowerShell. + +الرابط المحلي `http://localhost:3000`. لا يسجّل التطبيق بادئة `/bonyan-api/v1`؛ أضف البادئة واحذفها في بوابتك فقط إذا كان النشر يحتاجها. + +## الإعدادات + +```dotenv +PORT=3000 +HOST=0.0.0.0 +RATE_LIMIT_MAX=120 +RATE_LIMIT_WINDOW=1 minute +CORS_ORIGIN=* +TRUST_PROXY=false +LOG_LEVEL=info +CACHE_MAX_ENTRIES=1000 +``` + + +| المتغير | التأثير | +| --- | --- | +| PORT / HOST | منفذ الاستماع وعنوان الربط. استخدم 127.0.0.1 للاستماع محليًا فقط. | +| RATE_LIMIT_MAX / RATE_LIMIT_WINDOW | ميزانية الطلبات العامة لكل IP ونافذتها. | +| CORS_ORIGIN | يسمح `*` أو`true` بعكس النطاقات؛ وإلا فقائمة نطاقات مفصولة بفواصل. هذا الإعداد ليس مصادقة. | +| TRUST_PROXY | تفعّل القيمة المطابقة `true` الثقة بالبروكسي. فعّلها فقط خلف بروكسي موثوق مضبوط بشكل صحيح. | +| LOG_LEVEL | مستوى سجلات Fastify، افتراضيًا info. | +| CACHE_MAX_ENTRIES | أقصى عدد لعناصر الكاش داخل العملية، افتراضيًا 1000. | + +قد تضبط بيئة التشغيل `NODE_ENV`، لكن منطق إعداد الخادم نفسه لا يتفرع بحسبه. استخدم قيمًا رقمية موجبة للإعدادات الرقمية. + +## البناء والتشغيل + +```bash +pnpm lint:check +pnpm test +pnpm build +pnpm start +``` + +يتضمن المستودع Dockerfile. ابنِ الصورة باستخدام `docker build -t bonyan-api .`، ثم شغّل `docker run --rm -p 3000:3000 --env-file .env bonyan-api`. يستخدم Dockerfile المرفق Node 20 حاليًا؛ هذا اختيار صورة المستودع وليس متطلب تشغيل SDK. + +## تحقق من النشر + +```bash +curl --fail-with-body http://localhost:3000/health +curl --fail-with-body http://localhost:3000/ready +curl --fail-with-body http://localhost:3000/tafsir +curl --fail-with-body 'http://localhost:3000/surah/1' +``` + +لا تثبت الطلبات الثلاثة الأولى الاتصال بالمصادر. يختبر طلب السورة مصدر محتوى أو الكاش الموجود. اقرأ `/metrics` كنص؛ وتخضع الصحة والجاهزية والمقاييس لحدود الطلبات أيضًا. راجع [التشغيل والمراقبة](/locales/ar/guides/operations). diff --git a/locales/ar/guides/source-status.mdx b/locales/ar/guides/source-status.mdx new file mode 100644 index 0000000..1491a92 --- /dev/null +++ b/locales/ar/guides/source-status.mdx @@ -0,0 +1,27 @@ +--- +title: "المصادر والتوافق" +description: "النسخ المراجعة وسلوك النشر والفروق المعروفة في التنفيذ." +--- + +رُوجع هذا التوثيق في 7 سبتمبر 2026 مقابل: + +| المصدر | الإصدار | النسخة الثابتة | +| --- | --- | --- | +| Bonyan API | 2.0.0 | [e76bc4e](https://github.com/BonyanOSS/Bonyan-API/tree/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4) | +| مكتبة JavaScript | 1.0.2 | [068e23c](https://github.com/BonyanOSS/bonyan-sdk-js/tree/068e23cdbaeed8095a99c753b75412897905dd8a) | + +استجاب المساران العامان `/health` و`/ready` عند أصل النطاق أثناء المراجعة. لا يعرضان نسخة الكود، لذلك لا يدّعي التوثيق تطابق النشر مع commit المستودع تمامًا. إصدار الحزمة 2.0.0 لا يعني وجود بادئة URL باسم `/v2`. + +## الفروق المعروفة + +| المجال | السلوك الحالي | +| --- | --- | +| بحث SDK | يتوقع SDK غلاف بحث متداخلًا، والخادم يعيد غلافًا مسطحًا. استخدم [الدالة البديلة](/locales/ar/sdk/search). | +| معرّفات التفسير | المعرّفات العامة هي `muyassar` و`jalalayn` و`saadi` و`waseet` و`qurtubi`. تستخدم قيمة edition المعادة معرّف المصدر. | +| أنواع التفسير | يعلن SDK أن forSurah قد يعيد كائنًا أو مصفوفة؛ يعيد متحكم API هذا مصفوفة حتى مع استعلام aya. | +| نطاق الحديث | يقبل API فرقًا مقداره 300، أي 301 عنصرًا مع شمول الطرفين. يتحقق SDK من حد 300 عنصر عند إرسال الطرفين. | +| لغة البحث | قد تصبح الاستعلامات اللاتينية فقط فارغة بعد التطبيع. لا يدعم المتحكم ادعاء البحث الإنجليزي أو التقريبي. | +| بديل الصلاة | يستخدم pray.zone لطلبات الإحداثيات بتاريخ اليوم فقط ولا يرسل method. | +| الجاهزية | تعرض حالة العملية والكاش، لا جاهزية المصادر. | + +هذه نتائج مراجعة للتوثيق وليست إصلاحات في مستودعي API أوSDK. تصف ملفات OpenAPI المتحكمات والأنواع المراجعة، وتُصان هنا لأن المواصفة الحالية في مستودع API لا تفصّل مخططات الاستجابة. diff --git a/locales/ar/guides/troubleshooting.mdx b/locales/ar/guides/troubleshooting.mdx new file mode 100644 index 0000000..2790dea --- /dev/null +++ b/locales/ar/guides/troubleshooting.mdx @@ -0,0 +1,19 @@ +--- +title: "حل المشاكل" +description: "شخّص فشل الطلبات دون تخمين شكل الاستجابة." +--- + +| العَرَض | الفحص والإجراء | +| --- | --- | +| كل الطلبات العامة تعيد 404 | استخدم `https://api.bonyanoss.org` واحذف البادئة القديمة `/bonyan-api/v1`. | +| التفسير يعيد 400 | اجلب معرّفات النسخ من `/tafsir`. استخدم `muyassar` في المسار وليس `ar.muyassar`. | +| بحث SDK يعيد حقول undefined | استخدم [دالة البحث البديلة](/locales/ar/sdk/search) مع SDK 1.0.2. | +| البحث الإنجليزي يعيد بيانات غير مقصودة | أرسل نصًا عربيًا. قد تتحول الحروف اللاتينية فقط إلى تطابق فارغ. | +| الصوت يعيد 404 | اختر قارئًا لديه خادم لأول مصحف. قد يفتقده فهرس المصدر البديل. | +| رابط الصوت موجود لكن التشغيل يفشل | افحص طلب MP3 نفسه؛ ينشئ API الرابط فقط. | +| تنتهي مهلة طلب المحتوى | زد مهلة المحاولة للتحميل دون كاش، وتجنب مضاعفة حلقات إعادة المحاولة. | +| طريقة الصلاة غائبة | افحص apiName؛ بديل pray.zone لا يستقبل طريقة Aladhan. | +| الصحة ناجحة والمحتوى يفشل | افحص مسار محتوى وأخطاء المصادر. فحص الصحة لا يتصل بالمصادر. | +| كتاب الحديث يعيد 503 | طابق معرّف الكتاب مع الفهرس الحالي قبل افتراض التعطل. | + +عند الإبلاغ عن مشكلة، أرفق المسار والاستعلام والحالة ومعرّف الطلب ونسخة SDK ومثالًا صغيرًا. حدد هل استخدمت الخدمة العامة أم خادمك. أبلغ عن مشاكل API في [Bonyan-API](https://github.com/BonyanOSS/Bonyan-API/issues)، ومشاكل SDK في [bonyan-sdk-js](https://github.com/BonyanOSS/bonyan-sdk-js/issues)، وتصحيحات التوثيق في [docs](https://github.com/BonyanOSS/docs/issues). diff --git a/locales/ar/introduction.mdx b/locales/ar/introduction.mdx new file mode 100644 index 0000000..1482206 --- /dev/null +++ b/locales/ar/introduction.mdx @@ -0,0 +1,29 @@ +--- +title: "ابنِ تطبيقك مع بنيان" +description: "القرآن والمحتوى الإسلامي عبر HTTP API ومكتبة JavaScript." +--- + +يتيح Bonyan API لتطبيقك الوصول إلى نص القرآن والتفسير والقراء والأذكار والحديث ومواقيت الصلاة والتاريخ الهجري واتجاه القبلة. تغلّف مكتبة JavaScript وTypeScript مسارات HTTP نفسها. + + + اجلب آية، واقرأ الاستجابة، وتعامل مع الأخطاء. + ثبّت الحزمة واختر الدوال التي تحتاجها. + المعاملات وحقول الاستجابة والأمثلة لكل مسار. + اضبط الخادم وابنه وتحقق من استجابته. + + +## اختر طريقة الاستخدام + +| الواجهة | متى تستخدمها | +| --- | --- | +| HTTP API | عندما يستخدم تطبيقك أي لغة لديها عميل HTTP. | +| مكتبة JavaScript | عندما تحتاج دوال ذات أنواع محددة، والتحقق من المدخلات، والمهل الزمنية، وإعادة المحاولة في Node.js أو المتصفح. | +| استضافة API ذاتيًا | عندما تحتاج التحكم بالنشر والحدود وإعداد المصادر. | + +الرابط الأساسي العام هو `https://api.bonyanoss.org`. لا تتطلب هذه المسارات مفتاح API في التنفيذ الذي راجعناه. الحد الافتراضي للخادم 120 طلبًا في الدقيقة لكل عنوان IP، ويمكن تغييره عند النشر. + +## العربية والإنجليزية + +استخدم قائمة اللغات لتغيير لغة التوثيق والتنقل. تبقى المسارات وأسماء دوال SDK ومفاتيح JSON كما هي. اختيار الإنجليزية في التوثيق **لا يترجم** نص القرآن أو التفسير أو الحديث. لا يوجد معامل عام باسم `lang` في API. + +يغطي التوثيق كود API بإصدار 2.0.0 وSDK بإصدار 1.0.2. راجع [نسخ المصادر والفروق المعروفة](/locales/ar/guides/source-status). diff --git a/locales/ar/openapi.yaml b/locales/ar/openapi.yaml new file mode 100644 index 0000000..97a2aed --- /dev/null +++ b/locales/ar/openapi.yaml @@ -0,0 +1,2614 @@ +# Generated by pnpm generate. Edit scripts/api-catalog.mjs and scripts/api-schemas.mjs. +openapi: 3.1.0 +info: + title: Bonyan API + version: 2.0.0 + description: واجهة HTTP للقرآن والتفسير والقراء والأذكار والحديث ومواقيت الصلاة والتقويم والقبلة. لغة التوثيق لا تغيّر لغة المحتوى. + license: + name: MIT + identifier: MIT + x-source-revision: e76bc4e114f2f174bc93d0c7f90b163f0721a9f4 +servers: + - url: https://api.bonyanoss.org + description: الخدمة العامة + - url: http://localhost:3000 + description: التشغيل المحلي +security: [] +paths: + /: + get: + operationId: getCatalogue + tags: + - meta + summary: فهرس المسارات + description: يعرض مسارات المحتوى المسجّلة وبيانات المشروع. لا يدرج مسارات التشغيل الأربعة. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/Catalogue" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /health: + get: + operationId: getHealth + tags: + - meta + summary: فحص الحياة + description: يتحقق من استجابة عملية HTTP. لا يتصل بمصادر المحتوى. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/Health" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ready: + get: + operationId: getReady + tags: + - meta + summary: الجاهزية والكاش + description: يعيد جاهزية العملية وأعداد عناصر الكاش الحالية. لا يفحص توفر المصادر الخارجية. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/Ready" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /metrics: + get: + operationId: getMetrics + tags: + - meta + summary: مقاييس Prometheus + description: يعيد مدة التشغيل ومقاييس الكاش وعدادات طلبات المصادر كنص. + parameters: [] + responses: + "200": + description: نجاح + content: + text/plain: + schema: + $ref: "#/components/schemas/Metrics" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /surah: + get: + operationId: listSurahs + tags: + - surah + summary: قائمة السور + description: يعيد فهرس السور داخل data.surah. يحتوي أسماء وبيانات السور دون نص الآيات. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/SurahListResponse" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /surah/{id}: + get: + operationId: getSurah + tags: + - surah + summary: بيانات سورة + description: يعيد بيانات سورة واحدة. + parameters: + - name: id + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: رقم السورة من 1 إلى 114. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/SurahResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /surah/search: + get: + operationId: searchSurahs + tags: + - surah + summary: البحث في أسماء السور + description: يطابق جزءًا من الاسم بعد تطبيع العربية ويعيد مصفوفة. تعاد 404 عند غياب النتائج. + parameters: + - name: name + in: query + required: true + schema: + type: string + minLength: 1 + example: الفاتحة + description: الاسم العربي أو جزء منه. استخدم العربية؛ البحث بحروف لاتينية فقط غير مدعوم. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/SurahSearchResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ayat: + get: + operationId: listAyat + tags: + - ayat + summary: نص القرآن كاملًا + description: يعيد السور والآيات المتاحة داخل data.surahs. الاستجابة كبيرة ولا تدعم ترقيم الصفحات. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/AyatCorpusResponse" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ayat/{id}: + get: + operationId: getAyaByNumber + tags: + - ayat + summary: آية برقمها العام + description: يبحث عن آية برقمها العام في القرآن، وليس ترتيبها داخل السورة. + parameters: + - name: id + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 6236 + example: 1 + description: رقم الآية العام من 1 إلى 6236. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/AyaLookupResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ayat/{surah}/aya/{id}: + get: + operationId: getAyaBySurah + tags: + - ayat + summary: آية داخل سورة + description: يعيد آية واحدة مع رقم السورة واسمها. + parameters: + - name: surah + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: رقم السورة من 1 إلى 114. + - name: id + in: path + required: true + schema: + type: integer + minimum: 1 + example: 1 + description: رقم الآية داخل السورة. النتيجة الفارغة تعيد 404؛ وقد يعيد رفض مصادر التفسير 503 عند فشل جميع المصادر المضبوطة. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/AyaLookupResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ayat/search: + get: + operationId: searchAyat + tags: + - ayat + summary: البحث في نص القرآن + description: |- + يعيد {success, total, data: [...]}. يحسب total النتائج المعادة بعد تطبيق الحد، وليس جميع التطابقات في القرآن. + + توجد مشكلة في فك الاستجابة داخل client.ayat.search() في SDK 1.0.2. استخدم مثال fetch هنا أو الدالة البديلة في دليل SDK. + parameters: + - name: text + in: query + required: true + schema: + type: string + minLength: 1 + example: الرحمن + description: جزء من نص عربي مع ترميز URL. الإدخال الفارغ يعيد 400. + - name: limit + in: query + required: false + schema: + type: integer + default: 50 + minimum: 1 + maximum: 500 + example: 10 + description: حد النتائج وليس ترقيم صفحات. يضبطه الخادم بين 1 و500؛ الصفر أو القيمة غير القابلة للتحليل تعود إلى 50. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/AyaSearchResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /reciters: + get: + operationId: listReciters + tags: + - reciters + summary: قائمة القراء + description: يعيد القراء داخل data.reciters. قد يحذف المصدر البديل المصاحف وبيانات خادم الصوت. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/ReciterCollectionResponse" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /reciters/{id}: + get: + operationId: getReciter + tags: + - reciters + summary: بيانات قارئ + description: يبحث عن المعرّف في فهرس المصدر المخزّن حاليًا. + parameters: + - name: id + in: path + required: true + schema: + type: integer + example: 1 + description: المعرّف الذي يعيده فهرس القراء. المعرّفات مرتبطة بالمصدر. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/ReciterResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /reciters/search: + get: + operationId: searchReciters + tags: + - reciters + summary: البحث في أسماء القراء + description: يعيد القراء المطابقين لجزء من الاسم العربي. لا يدعم البحث التقريبي أو البحث الإنجليزي. + parameters: + - name: name + in: query + required: true + schema: + type: string + minLength: 1 + example: العفاسي + description: الاسم العربي أو جزء منه. استخدم العربية؛ البحث بحروف لاتينية فقط غير مدعوم. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/ReciterSearchResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /reciters/{id}/surah/{surah}: + get: + operationId: getReciterAudio + tags: + - reciters + summary: رابط صوت السورة + description: |- + ينشئ الرابط من خادم أول مصحف ورقم السورة بثلاث خانات. يعيد JSON وليس بثًا صوتيًا. + + لا يتحقق API من وجود ملف MP3. قد يفتقد قارئ من quran.com بيانات المصحف فتُعاد 404. اختر قارئًا له moshaf قبل طلب الصوت. + parameters: + - name: id + in: path + required: true + schema: + type: integer + example: 1 + description: المعرّف الذي يعيده فهرس القراء. المعرّفات مرتبطة بالمصدر. + - name: surah + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: رقم السورة من 1 إلى 114. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/ReciterAudioResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /tafsir: + get: + operationId: listTafsirEditions + tags: + - tafsir + summary: نسخ التفسير + description: يعرض معرّفات نسخ التفسير الخمس وأسماءها العربية. الفهرس محلي ولا يفحص توفر المصادر. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/TafsirEditionListResponse" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /tafsir/{edition}/{surah}: + get: + operationId: getSurahTafsir + tags: + - tafsir + summary: تفسير سورة + description: يعيد مصفوفة حتى عند تحديد آية واحدة بالمعامل aya. حقل edition المعاد يستخدم معرّف المصدر. + parameters: + - name: edition + in: path + required: true + schema: + type: string + enum: + - muyassar + - jalalayn + - saadi + - waseet + - qurtubi + example: muyassar + description: معرّف النسخة من GET /tafsir. استخدم muyassar وليس ar.muyassar. + - name: surah + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: رقم السورة من 1 إلى 114. + - name: aya + in: query + required: false + schema: + type: integer + minimum: 1 + example: 1 + description: آية اختيارية داخل السورة. تبقى الاستجابة مصفوفة. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/TafsirListResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /tafsir/{edition}/{surah}/{aya}: + get: + operationId: getAyaTafsir + tags: + - tafsir + summary: تفسير آية + description: يعيد كائن تفسير واحد. لنسخة muyassar مصدران، ولكل نسخة أخرى مصدر واحد. + parameters: + - name: edition + in: path + required: true + schema: + type: string + enum: + - muyassar + - jalalayn + - saadi + - waseet + - qurtubi + example: muyassar + description: معرّف النسخة من GET /tafsir. استخدم muyassar وليس ar.muyassar. + - name: surah + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: رقم السورة من 1 إلى 114. + - name: aya + in: path + required: true + schema: + type: integer + minimum: 1 + example: 1 + description: رقم الآية داخل السورة. النتيجة الفارغة تعيد 404؛ وقد يعيد رفض مصادر التفسير 503 عند فشل جميع المصادر المضبوطة. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/TafsirItemResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /azkar: + get: + operationId: listAzkarCategories + tags: + - azkar + summary: تصنيفات الأذكار + description: يعرض أسماء التصنيفات وأعداد الأذكار ومصادرها داخل data.categories. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/AzkarCategorySummaryResponse" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /azkar/{category}: + get: + operationId: getAzkarCategory + tags: + - azkar + summary: أذكار تصنيف + description: يعيد أول تصنيف يحتوي اسمه العربي المطبع على القيمة المدخلة. استخدم الاسم الكامل من الفهرس لتجنب التطابق الغامض. + parameters: + - name: category + in: path + required: true + schema: + type: string + minLength: 1 + example: أذكار الصباح + description: اسم التصنيف العربي، مرمّز كمقطع واحد من المسار. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/AzkarCategoryResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /azkar/search: + get: + operationId: searchAzkar + tags: + - azkar + summary: البحث في الأذكار + description: |- + يعيد {success, total, data: [...]} مع التصنيف والذكر لكل نتيجة. total هو عدد النتائج المعادة بعد تطبيق limit. + + توجد مشكلة في فك الاستجابة داخل client.azkar.search() في SDK 1.0.2. استخدم fetch أو الدالة البديلة في دليل SDK. + parameters: + - name: text + in: query + required: true + schema: + type: string + minLength: 1 + example: الله + description: جزء من نص عربي مع ترميز URL. الإدخال الفارغ يعيد 400. + - name: limit + in: query + required: false + schema: + type: integer + default: 50 + minimum: 1 + maximum: 200 + example: 10 + description: حد النتائج وليس ترقيم صفحات. يضبطه الخادم بين 1 و200؛ الصفر أو القيمة غير القابلة للتحليل تعود إلى 50. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/AzkarSearchResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /azkar/random: + get: + operationId: getRandomZekr + tags: + - azkar + summary: ذكر عشوائي + description: يختار ذكرًا من جميع التصنيفات المخزّنة. يتم الاختيار العشوائي عند كل طلب. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/AzkarPickResponse" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hadith: + get: + operationId: listHadithBooks + tags: + - hadith + summary: كتب الحديث + description: يعيد معرّفات الكتب وأسماءها وأعداد الأحاديث من المصدر المستخدم. استخرج المعرّفات هنا بدل افتراض قائمة ثابتة. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/HadithBookListResponse" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hadith/{book}: + get: + operationId: getHadithBook + tags: + - hadith + summary: نطاق أحاديث + description: |- + يعيد book وavailable وhadiths داخل data. طرفا النطاق مشمولان؛ from الافتراضي 1 وto الافتراضي from + 29. + + يرفض API حاليًا to - from > 300، فيقبل 301 عنصرًا عند شمول الطرفين. يرفض SDK 1.0.2 أكثر من 300 عند إرسال الطرفين. استخدم 300 أو أقل للتوافق. قد يعيد النطاق الفارغ 200 مع hadiths: []. + parameters: + - name: book + in: path + required: true + schema: + type: string + minLength: 1 + example: bukhari + description: معرّف الكتاب من GET /hadith. قد يعيد المعرّف المجهول 503 إذا رفضه المصدران. + - name: from + in: query + required: false + schema: + type: integer + minimum: 1 + default: 1 + example: 1 + description: رقم أول حديث، وهو مشمول. + - name: to + in: query + required: false + schema: + type: integer + minimum: 1 + example: 30 + description: "رقم آخر حديث، وهو مشمول. استخدم 300 حديث كحد أقصى: to = from + 299." + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/HadithListResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hadith/{book}/{number}: + get: + operationId: getHadith + tags: + - hadith + summary: حديث برقم + description: يعيد الحديث برقم داخل الكتاب. الاستجابة لا تحتوي حقول الحكم على الحديث أو الإسناد. + parameters: + - name: book + in: path + required: true + schema: + type: string + minLength: 1 + example: bukhari + description: معرّف الكتاب من GET /hadith. قد يعيد المعرّف المجهول 503 إذا رفضه المصدران. + - name: number + in: path + required: true + schema: + type: integer + minimum: 1 + example: 1 + description: رقم حديث موجب داخل الكتاب. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/HadithResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hadith/random: + get: + operationId: getRandomHadith + tags: + - hadith + summary: حديث عشوائي + description: يختار كتابًا ثم رقم حديث وفق العدد المتاح. يمكن تقييد الكتاب. تحتوي النتيجة book وhadith. + parameters: + - name: book + in: query + required: false + schema: + type: string + example: bukhari + description: معرّف كتاب مطابق اختياري. المعرّف المجهول يعيد 404. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/RandomHadithResponse" + "404": + description: لم يوجد العنصر أو التطابق المطلوب. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /prayer/times: + get: + operationId: getPrayerTimes + tags: + - prayer + summary: مواقيت الصلاة + description: |- + أرسل latitude وlongitude أو city وcountry. عند إرسال الزوجين، تُجرّب إحداثيات Aladhan قبل البحث باسم المدينة. + + يتاح بديل pray.zone لطلبات الإحداثيات بتاريخ اليوم على خادم API فقط. لا يستقبل method وقد يحذف method وcoordinates من النتيجة. افحص apiName قبل افتراض ثبات طريقة الحساب. يتحقق هذا المتحكم من كون الإحداثيات أرقامًا دون فرض حدودها الجغرافية؛ يفرض SDK الحدود. + parameters: + - name: date + in: query + required: false + schema: + type: string + pattern: ^\d{2}-\d{2}-\d{4}$ + example: 01-01-2026 + description: تاريخ ميلادي بصيغة DD-MM-YYYY. عند حذفه أو تركه فارغًا يستخدم تاريخ خادم API الحالي. التحقق من الصيغة فقط، وليس صحة اليوم في التقويم. + - name: latitude + in: query + required: false + schema: + type: number + example: 21.4225 + description: خط العرض بالدرجات العشرية؛ أرسله مع خط الطول. + - name: longitude + in: query + required: false + schema: + type: number + example: 39.8262 + description: خط الطول بالدرجات العشرية؛ أرسله مع خط العرض. + - name: city + in: query + required: false + schema: + type: string + example: Mecca + description: مطلوب مع country عند عدم إرسال الإحداثيات. + - name: country + in: query + required: false + schema: + type: string + example: SA + description: الدولة للبحث عن المدينة. أرسلها مع city. + - name: method + in: query + required: false + schema: + type: integer + example: 4 + description: معرّف طريقة الحساب لدى Aladhan. عند حذفه يستخدم المصدر افتراضيه. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/PrayerTimesResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hijri/today: + get: + operationId: getToday + tags: + - hijri + summary: تاريخ اليوم بالتقويمين + description: يحوّل تاريخ خادم API الميلادي الحالي عبر Aladhan. لا يستخدم المنطقة الزمنية للمتصفح. + parameters: [] + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/HijriResponse" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hijri/from-gregorian: + get: + operationId: fromGregorian + tags: + - hijri + summary: من الميلادي إلى الهجري + description: يعيد تمثيل التاريخ بالتقويمين. Aladhan هو المصدر الوحيد المضبوط. + parameters: + - name: date + in: query + required: false + schema: + type: string + pattern: ^\d{2}-\d{2}-\d{4}$ + example: 01-01-2026 + description: تاريخ ميلادي بصيغة DD-MM-YYYY. عند حذفه أو تركه فارغًا يستخدم تاريخ خادم API الحالي. التحقق من الصيغة فقط، وليس صحة اليوم في التقويم. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/HijriResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hijri/to-gregorian: + get: + operationId: toGregorian + tags: + - hijri + summary: من الهجري إلى الميلادي + description: يحوّل تاريخًا هجريًا مطلوبًا. تأتي أسماء الأشهر وأيام الأسبوع من المصدر. + parameters: + - name: date + in: query + required: true + schema: + type: string + pattern: ^\d{2}-\d{2}-\d{4}$ + example: 01-09-1447 + description: تاريخ هجري بصيغة DD-MM-YYYY. مطلوب. التحقق من الصيغة فقط، وليس صحة اليوم في التقويم. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/HijriResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /qibla: + get: + operationId: getQibla + tags: + - qibla + summary: اتجاه القبلة + description: |- + يعيد الزاوية بالدرجات باتجاه عقارب الساعة من الشمال الحقيقي. يجرّب Aladhan ثم يحسب الاتجاه محليًا على الدائرة العظمى. + + هذه زاوية جغرافية وليست قراءة بوصلة الجهاز. الانحراف المغناطيسي واتجاه الجهاز خارج وظيفة هذا المسار. + parameters: + - name: latitude + in: query + required: true + schema: + type: number + minimum: -90 + maximum: 90 + example: 21.4225 + description: خط العرض بالدرجات العشرية؛ أرسله مع خط الطول. + - name: longitude + in: query + required: true + schema: + type: number + minimum: -180 + maximum: 180 + example: 39.8262 + description: خط الطول بالدرجات العشرية؛ أرسله مع خط العرض. + responses: + "200": + description: نجاح + content: + application/json: + schema: + $ref: "#/components/schemas/QiblaResponse" + "400": + description: إدخال مفقود أو غير صالح. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها. + headers: + Retry-After: + description: مدة الانتظار بالثواني إذا أرسلها الخادم. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: خطأ غير متوقع في الخادم. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: تعذر الحصول على نتيجة من المصادر المضبوطة. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" +components: + schemas: + Catalogue: + type: object + required: + - name + - description + - routes + properties: + name: + type: string + description: اسم الخدمة. + description: + type: string + description: وصف الخدمة. + routes: + type: array + items: + type: object + required: + - method + - url + properties: + method: + oneOf: + - type: string + - type: array + items: + type: string + url: + type: string + description: المسار المسجّل؛ تستخدم معاملات المسار صيغة :name. + schema: {} + Health: + type: object + required: + - status + - code + - timestamp + properties: + status: + type: string + const: ok + code: + type: integer + const: 200 + timestamp: + type: string + description: وقت الخادم الحالي بصيغة ISO 8601. + format: date-time + Cache: + type: object + required: + - entries + - inflight + properties: + entries: + type: integer + description: عناصر الكاش المخزّنة، بما فيها العناصر التي لم تُزل بعد. + inflight: + type: integer + description: عمليات تحميل الكاش الجارية. + Ready: + type: object + required: + - status + - code + - timestamp + - cache + properties: + status: + type: string + const: ready + code: + type: integer + const: 200 + timestamp: + type: string + description: وقت الخادم الحالي. + format: date-time + cache: + $ref: "#/components/schemas/Cache" + Metrics: + type: string + Error: + type: object + required: + - success + - message + - error + properties: + success: + type: boolean + const: false + message: + type: string + description: رسالة خطأ مقروءة. لا تعتمد على نصها للتحكم بالبرنامج. + error: + type: object + required: + - code + - message + - requestId + properties: + code: + type: string + description: رمز قابل للمعالجة. قد تستخدم أخطاء 503 المباشرة INTERNAL_SERVER_ERROR؛ ويستخدم فشل المصادر ALL_SOURCES_FAILED. + enum: + - BAD_REQUEST + - NOT_FOUND + - RATE_LIMITED + - ALL_SOURCES_FAILED + - INTERNAL_SERVER_ERROR + message: + type: string + description: رسالة الخطأ. + requestId: + type: string + description: معرّف الطلب لتتبع المشكلة. + Surah: + type: object + required: + - id + - name + - apiName + properties: + id: + type: integer + description: رقم السورة. + minimum: 1 + maximum: 114 + name: + type: string + description: اسم السورة من المصدر. + makkia: + type: boolean + description: هل السورة مكية، إذا وفر المصدر القيمة. + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - mp3quran.net + - alquran.cloud + - quran.com + Aya: + type: object + required: + - number + - text + - numberInSurah + properties: + number: + type: integer + description: رقم الآية العام. + text: + type: string + description: نص المصدر كما يعيده API. لغة التوثيق لا تترجم المحتوى. + numberInSurah: + type: integer + description: رقم الآية داخل سورتها. + SurahWithAyat: + type: object + required: + - number + - name + - ayat + - apiName + properties: + number: + type: integer + description: رقم السورة. + name: + type: string + description: اسم السورة. + ayat: + type: array + items: + $ref: "#/components/schemas/Aya" + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - alquran.cloud + - cdn.jsdelivr.net/fawazahmed0/quran-api + AyaLookup: + type: object + required: + - surahNumber + - surahName + - aya + properties: + surahNumber: + type: integer + description: رقم السورة. + surahName: + type: string + description: اسم السورة. + aya: + $ref: "#/components/schemas/Aya" + Moshaf: + type: object + required: + - id + - name + - server + properties: + id: + type: integer + description: معرّف المصحف لدى المصدر. + name: + type: string + description: اسم المصحف. + server: + type: string + description: الرابط الأساسي لخادم الصوت. + format: uri + Reciter: + type: object + required: + - id + - name + - apiName + properties: + id: + type: integer + description: معرّف القارئ لدى المصدر. + name: + type: string + description: اسم القارئ. + date: + type: string + description: بيانات التاريخ من المصدر. + moshaf: + type: array + items: + $ref: "#/components/schemas/Moshaf" + style: + type: + - string + - "null" + description: أسلوب التلاوة إذا توفر. + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - mp3quran.net + - quran.com + ReciterAudio: + type: object + required: + - reciter + - surah + - audio + properties: + reciter: + type: string + description: اسم القارئ. + surah: + type: integer + description: رقم السورة. + audio: + type: string + description: رابط MP3 منشأ؛ لا يجري التحقق من وجود الملف. + format: uri + TafsirEdition: + type: object + required: + - id + - label + properties: + id: + type: string + description: معرّف النسخة العام المقبول في المسار. + enum: + - muyassar + - jalalayn + - saadi + - waseet + - qurtubi + label: + type: string + description: اسم النسخة بالعربية. + TafsirItem: + type: object + required: + - surah + - aya + - text + - edition + - apiName + properties: + surah: + type: integer + description: رقم السورة. + aya: + type: integer + description: رقم الآية داخل السورة. + text: + type: string + description: نص المصدر كما يعيده API. لغة التوثيق لا تترجم المحتوى. + edition: + type: string + description: معرّف النسخة لدى المصدر مثل ar.muyassar أو arabic_moyassar. يختلف عن المعرّف العام في المسار. + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - alquran.cloud + - quranenc.com + AzkarCategorySummary: + type: object + required: + - name + - count + - apiName + properties: + name: + type: string + description: اسم التصنيف. + count: + type: integer + description: عدد الأذكار في التصنيف. + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - github.com/nawafalqari + - hisnmuslim.com + AzkarItem: + type: object + required: + - id + - text + properties: + id: + type: integer + description: معرّف الذكر داخل المصدر أو التصنيف، وليس معرّفًا عامًا. + text: + type: string + description: نص المصدر كما يعيده API. لغة التوثيق لا تترجم المحتوى. + count: + type: integer + description: عدد التكرارات عند توفره. + reference: + type: string + description: مرجع الذكر عند توفره. + description: + type: string + description: وصف إضافي من المصدر. + content: + type: string + description: محتوى إضافي من المصدر. + AzkarCategory: + type: object + required: + - category + - items + - apiName + properties: + category: + type: string + description: اسم التصنيف. + items: + type: array + items: + $ref: "#/components/schemas/AzkarItem" + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - github.com/nawafalqari + - hisnmuslim.com + AzkarPick: + type: object + required: + - category + - item + properties: + category: + type: string + description: اسم التصنيف. + item: + $ref: "#/components/schemas/AzkarItem" + HadithBook: + type: object + required: + - id + - name + - available + - apiName + properties: + id: + type: string + description: معرّف الكتاب المستخدم في الطلبات. + name: + type: string + description: اسم الكتاب. + available: + type: integer + description: عدد الأحاديث الذي يذكره المصدر. + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - hadith.gading.dev + - cdn.jsdelivr.net/sutanlab/hadith-api + Hadith: + type: object + required: + - number + - text + - book + - apiName + properties: + number: + type: integer + description: رقم الحديث داخل الكتاب. + text: + type: string + description: نص المصدر كما يعيده API. لغة التوثيق لا تترجم المحتوى. + book: + type: string + description: اسم الكتاب الذي يعيده المصدر. + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - hadith.gading.dev + - cdn.jsdelivr.net/sutanlab/hadith-api + HadithRange: + type: object + required: + - book + - available + - hadiths + properties: + book: + type: string + description: اسم الكتاب. + available: + type: integer + description: العدد المتاح للكتاب كاملًا وليس للنطاق المعاد. + hadiths: + type: array + items: + $ref: "#/components/schemas/Hadith" + PrayerTimings: + type: object + required: + - Fajr + - Dhuhr + - Asr + - Maghrib + - Isha + properties: + Fajr: + type: string + description: وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO. + Sunrise: + type: string + description: وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO. + Dhuhr: + type: string + description: وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO. + Asr: + type: string + description: وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO. + Sunset: + type: string + description: وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO. + Maghrib: + type: string + description: وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO. + Isha: + type: string + description: وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO. + Imsak: + type: string + description: وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO. + Midnight: + type: string + description: وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO. + Coordinates: + type: object + required: + - latitude + - longitude + properties: + latitude: + type: number + description: خط العرض بالدرجات. + longitude: + type: number + description: خط الطول بالدرجات. + PrayerTimes: + type: object + required: + - date + - timings + - apiName + properties: + date: + type: string + description: التاريخ الميلادي بصيغة المصدر. + hijri: + type: string + description: التاريخ الهجري بصيغة المصدر. + timings: + $ref: "#/components/schemas/PrayerTimings" + method: + type: string + description: اسم طريقة الحساب إذا توفر. + coordinates: + $ref: "#/components/schemas/Coordinates" + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - aladhan.com + - pray.zone + HijriDate: + type: object + required: + - hijri + - gregorian + - apiName + properties: + hijri: + type: object + required: + - date + - day + - month + - monthAr + - year + - weekday + - weekdayAr + properties: + date: + type: string + description: التاريخ الهجري. + day: + type: string + description: اليوم كنص. + month: + type: string + description: اسم الشهر. + monthAr: + type: string + description: اسم الشهر بالعربية. + year: + type: string + description: السنة كنص. + weekday: + type: string + description: اسم يوم الأسبوع. + weekdayAr: + type: string + description: اسم يوم الأسبوع بالعربية. + gregorian: + type: object + required: + - date + - day + - month + - year + properties: + date: + type: string + description: التاريخ الميلادي. + day: + type: string + description: اليوم كنص. + month: + type: string + description: اسم الشهر. + year: + type: string + description: السنة كنص. + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - aladhan.com + Qibla: + type: object + required: + - latitude + - longitude + - direction + - apiName + properties: + latitude: + type: number + description: خط العرض بالدرجات. + longitude: + type: number + description: خط الطول بالدرجات. + direction: + type: number + description: درجات باتجاه عقارب الساعة من الشمال الحقيقي نحو الكعبة. + apiName: + type: string + description: المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر. + enum: + - aladhan.com + - local + SurahListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - surah + properties: + surah: + type: array + items: + $ref: "#/components/schemas/Surah" + SurahResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/Surah" + SurahSearchResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/Surah" + AyatCorpusResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - surahs + properties: + surahs: + type: array + items: + $ref: "#/components/schemas/SurahWithAyat" + AyaLookupResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/AyaLookup" + ReciterCollectionResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - reciters + properties: + reciters: + type: array + items: + $ref: "#/components/schemas/Reciter" + ReciterResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/Reciter" + ReciterSearchResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/Reciter" + ReciterAudioResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/ReciterAudio" + TafsirEditionListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/TafsirEdition" + TafsirListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/TafsirItem" + TafsirItemResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/TafsirItem" + AzkarCategorySummaryResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - categories + properties: + categories: + type: array + items: + $ref: "#/components/schemas/AzkarCategorySummary" + AzkarCategoryResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/AzkarCategory" + AzkarPickResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/AzkarPick" + HadithBookListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/HadithBook" + HadithResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/Hadith" + RandomHadithResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - book + - hadith + properties: + book: + type: string + description: اسم الكتاب. + hadith: + $ref: "#/components/schemas/Hadith" + HadithListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/HadithRange" + PrayerTimesResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/PrayerTimes" + HijriResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/HijriDate" + QiblaResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/Qibla" + AyaSearchResponse: + type: object + required: + - success + - total + - data + properties: + success: + type: boolean + const: true + total: + type: integer + description: عدد النتائج المعادة بعد الحد. + data: + type: array + items: + $ref: "#/components/schemas/AyaLookup" + AzkarSearchResponse: + type: object + required: + - success + - total + - data + properties: + success: + type: boolean + const: true + total: + type: integer + description: عدد النتائج المعادة بعد الحد. + data: + type: array + items: + $ref: "#/components/schemas/AzkarPick" diff --git a/locales/ar/quickstart.mdx b/locales/ar/quickstart.mdx new file mode 100644 index 0000000..1385551 --- /dev/null +++ b/locales/ar/quickstart.mdx @@ -0,0 +1,54 @@ +--- +title: "أول طلب" +description: "اجلب آية باستخدام cURL أو fetch أو SDK." +--- + +## 1. اتصل بالواجهة + +```bash +curl --fail-with-body 'https://api.bonyanoss.org/ayat/1' +``` + +استخدم `curl.exe` في Windows PowerShell إذا كان `curl` اسمًا مستعارًا لأمر PowerShell. الرابط العام لا يحتوي بادئة `/bonyan-api/v1`. عند التشغيل المحلي استبدل النطاق بـ `http://localhost:3000`. + +## 2. اقرأ النتيجة + +تحتوي استجابة جلب الآية الناجحة على `success: true` و`data`. النص موجود في `data.aya.text`. يمثل `aya.number` رقم الآية العام، ويمثل `aya.numberInSurah` ترتيبها داخل السورة. + +```js +const response = await fetch('https://api.bonyanoss.org/ayat/1', { + signal: AbortSignal.timeout(45000), +}); +const body = await response.json(); +if (!response.ok || body.success !== true) { + throw new Error(body.error?.message ?? body.message ?? ('HTTP ' + response.status)); +} +console.log(body.data.aya.text); +``` + +يمنح المثال طلبات المصادر غير المخزّنة 45 ثانية. المهلة الافتراضية في SDK هي 10 ثوانٍ لكل محاولة؛ وقد تكون أقصر من سلسلة تجربة المصادر كاملة. + +## 3. استخدم SDK في Node.js + +استخدم Node.js 22 أو أحدث وملف ESM مثل `example.mjs`. + +```bash +npm install @bonyanoss/bonyan-api@1.0.2 +``` + + +```ts +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ayat.getById(1); +console.log(result.aya.text); +``` + +يفك SDK غلاف النجاح، لذا استخدم `result.aya.text` دون `result.data`. + +## 4. تعامل مع الفشل + +تعني HTTP 400 إدخالًا غير صالح. قد يعيد البحث أو جلب عنصر غير موجود 404. تعني HTTP 429 تجاوز حد الطلبات، وتعني HTTP 503 أن الخادم لم يتمكن من إنتاج النتيجة. راجع [التعامل مع الأخطاء](/locales/ar/concepts/errors) و[أخطاء SDK](/locales/ar/sdk/errors). + +تابع إلى [جميع المسارات](/locales/ar/api-reference/overview) أو [دوال SDK](/locales/ar/sdk/resources) أو [تشغيل الصوت](/locales/ar/guides/audio). diff --git a/locales/ar/sdk/configuration.mdx b/locales/ar/sdk/configuration.mdx new file mode 100644 index 0000000..afa2f50 --- /dev/null +++ b/locales/ar/sdk/configuration.mdx @@ -0,0 +1,33 @@ +--- +title: "إعداد العميل" +description: "الرابط الأساسي والمهلة والمحاولات والترويسات وfetch المخصص." +--- + +```ts +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ + baseUrl: 'https://api.bonyanoss.org', + timeoutMs: 45000, + retry: 1, + headers: { 'X-Application': 'my-app' }, + fetch: globalThis.fetch.bind(globalThis), +}); +console.log(await client.health()); +``` + + +| الخيار | الافتراضي | المعنى | +| --- | --- | --- | +| `baseUrl` | `https://api.bonyanoss.org` | النطاق وبادئة النشر إن وجدت؛ تُحذف الشرطات المائلة الأخيرة. | +| `timeoutMs` | `10000` | مهلة كل محاولة بالمللي ثانية. | +| `retry` | `3` | المحاولات الإضافية بعد الطلب الأول. استخدم عددًا صحيحًا غير سالب؛ الصفر يعطّل الإعادة. | +| `headers` | `Accept: application/json` | ترويسات إضافية تُدمج فوق الافتراضيات. | +| `fetch` | fetch العام | بديل بتوقيع fetch القياسي للاختبارات أو التحكم بالنقل. | +| `userAgent` | غير مضبوط | ترويسة User-Agent اختيارية؛ يختلف سلوكها بحسب المتصفح. | + +إذا كانت بوابتك تستخدم بادئة مسار، ضمّن البادئة كاملة في `baseUrl`. يضيف SDK مسارات الموارد بعدها. النشر العام الذي راجعناه لا يحتاج بادئة. + +لا تعرض دوال الموارد خيارات مهلة أو ترويسات أو AbortSignal لكل استدعاء في الإصدار 1.0.2. توجد هذه الخيارات في عميل HTTP الداخلي لكنها ليست جزءًا من دوال الموارد المصدّرة. استخدم عملاء منفصلين لسياسات المهل المختلفة، أو fetch عند الحاجة إلى إلغاء طلب بعينه. + +لا يوفر SDK كاش للاستجابات أو تدفق مصادقة أو تحققًا وقت التشغيل من كل حقل معاد. تصف أنواع TypeScript البيانات المتوقعة؛ تحقق من الحقول التي يعتمد عليها تطبيقك. diff --git a/locales/ar/sdk/errors.mdx b/locales/ar/sdk/errors.mdx new file mode 100644 index 0000000..6456c7c --- /dev/null +++ b/locales/ar/sdk/errors.mdx @@ -0,0 +1,38 @@ +--- +title: "أخطاء SDK" +description: "ميّز أخطاء الإدخال وHTTP والنقل." +--- + +```ts +import { + BonyanClient, BonyanApiError, BonyanRequestError, ValidationError, +} from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ retry: 1, timeoutMs: 45000 }); +try { + console.log(await client.surah.getById(1)); +} catch (error) { + if (error instanceof ValidationError) { + console.error(error.field, error.message); + } else if (error instanceof BonyanApiError) { + console.error(error.status, error.code, error.requestId, error.retryAfterMs); + } else if (error instanceof BonyanRequestError) { + console.error(error.message, error.cause); + } else { + throw error; + } +} +``` + + +| فئة الخطأ | المعنى | الحقول | +| --- | --- | --- | +| `ValidationError` | رُفض المعامل قبل إرسال HTTP. | `field` و`message` | +| `BonyanApiError` | استجابة HTTP خارج 2xx بعد المحاولات المضبوطة. | `status` و`statusText` و`code` و`requestId` و`retryAfterMs` و`body` | +| `BonyanRequestError` | فشل الشبكة أو المهلة أو غلاف استجابة غير متوقع. | `message` و`cause` | + +تصدّر الحزمة أيضًا دوال فحص الأنواع `isValidationError` و`isBonyanApiError` و`isBonyanRequestError`. قد يغيب رمز الخطأ أو معرّف الطلب عندما يصدر الخطأ عن بروكسي. + +التحقق من الإدخال أشد من بعض متحكمات API: يحدد SDK رقم الآية داخل السورة بين 1 و286، ويفرض حدود الإحداثيات، ويحدد نطاق الحديث الصريح بـ300 عنصر. قد يعيد الخادم 404 أو503 حتى إذا اجتاز الإدخال تحقق SDK. + +راجع [سلوك إعادة المحاولة](/locales/ar/concepts/rate-limit). تجنب إضافة حلقة إعادة محاولة تلقائية حول SDK دون احتساب محاولاته الحالية. diff --git a/locales/ar/sdk/overview.mdx b/locales/ar/sdk/overview.mdx new file mode 100644 index 0000000..06358ce --- /dev/null +++ b/locales/ar/sdk/overview.mdx @@ -0,0 +1,49 @@ +--- +title: "مكتبة JavaScript وTypeScript" +description: "ثبّت SDK 1.0.2 وافهم القيم التي تعيدها دواله." +--- + +اسم الحزمة الرسمية `@bonyanoss/bonyan-api`. تدعم ESM وCommonJS، وتضم أنواع TypeScript، وتحدد Node.js 22 أو أحدث كمتطلب. تحتاج تطبيقات المتصفح واجهات fetch وAbortController وURL؛ استخدم أداة تجميع تطبيقك. + +```bash +npm install @bonyanoss/bonyan-api@1.0.2 +``` + + +```ts +import { BonyanClient, createBonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const surahs = await client.surah.list(); +console.log(surahs[0]?.name); + +const local = createBonyanClient({ baseUrl: 'http://localhost:3000' }); +console.log(await local.health()); +``` + +تعادل `createBonyanClient(options)` الاستدعاء `new BonyanClient(options)`. أعد استخدام عميل واحد لكل إعداد. + +## القيم المعادة + +تفك معظم دوال الموارد الغلاف `{ success, data }`. وتستخرج دوال القوائم المصفوفة أيضًا: تعيد `surah.list()` المصفوفة الموجودة في `data.surah`، وتعيد `reciters.list()` قيمة `data.reciters`. لا تضف وصولًا آخر إلى `.data`. + +تعيد دوال التشغيل كائن JSON الخام، وتعيد `metrics()` نصًا. لا ترسل أي دالة طلب كتابة. + + +في الإصدار 1.0.2 تتوقع `ayat.search()` و`azkar.search()` غلافًا مختلفًا عن API الحالي. لذلك قد تحتوي النتيجة على حقول undefined وقت التشغيل رغم أنواع TypeScript. استخدم [دالة البحث البديلة](/locales/ar/sdk/search) حتى إصلاح عدم التطابق في الحزمة. + + +## CommonJS + +```js +const { BonyanClient } = require('@bonyanoss/bonyan-api'); + +async function main() { + const client = new BonyanClient(); + console.log(await client.health()); +} +main().catch(console.error); +``` + + +تابع إلى [الإعدادات](/locales/ar/sdk/configuration) أو [مرجع الدوال](/locales/ar/sdk/resources) أو [التعامل مع الأخطاء](/locales/ar/sdk/errors). diff --git a/locales/ar/sdk/resources.mdx b/locales/ar/sdk/resources.mdx new file mode 100644 index 0000000..5ca3019 --- /dev/null +++ b/locales/ar/sdk/resources.mdx @@ -0,0 +1,95 @@ +--- +title: "مرجع دوال SDK" +description: "دوال الموارد والتواقيع والأنواع المعادة." +--- + +جميع الدوال أدناه تُستدعى على `client` وتعيد Promise بالنوع المذكور. يشير `?` إلى معامل أو خيار اختياري؛ التواقيع في الجدول مختصرة وليست كودًا للنسخ. + +الأرقام أعداد JavaScript؛ الأسماء والنصوص ومعرّفات الكتب والنسخ نصوص. التاريخ بصيغة `DD-MM-YYYY`. تقبل prayer.getTimes زوج إحداثيات أو مدينة ودولة، مع date وmethod اختياريين. + + +بحث ayat وazkar في الإصدار 1.0.2 لا يطابق غلاف API الحالي. لا تعتمد على النوع المعلن دون استخدام الدالة البديلة. [بديل البحث](/locales/ar/sdk/search). + + +## تشغيل الخدمة + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `routes()` | `BonyanRouteCatalogue` | [`GET /`](/locales/ar/api-reference/meta/catalogue) | +| `health()` | `HealthStatus` | [`GET /health`](/locales/ar/api-reference/meta/health) | +| `ready()` | `ReadyStatus` | [`GET /ready`](/locales/ar/api-reference/meta/ready) | +| `metrics()` | `string` | [`GET /metrics`](/locales/ar/api-reference/meta/metrics) | + +## بيانات السور + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `surah.list()` | `Surah[]` | [`GET /surah`](/locales/ar/api-reference/surah/list) | +| `surah.getById(id)` | `Surah` | [`GET /surah/{id}`](/locales/ar/api-reference/surah/get) | +| `surah.search(name)` | `Surah[]` | [`GET /surah/search`](/locales/ar/api-reference/surah/search) | + +## نص القرآن + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `ayat.list()` | `SurahWithAyat[]` | [`GET /ayat`](/locales/ar/api-reference/ayat/all) | +| `ayat.getById(id)` | `AyaWithSurah` | [`GET /ayat/{id}`](/locales/ar/api-reference/ayat/get-by-number) | +| `ayat.getBySurah(surah, aya)` | `AyaWithSurah` | [`GET /ayat/{surah}/aya/{id}`](/locales/ar/api-reference/ayat/get-by-surah-aya) | +| `ayat.search(text, { limit? }?)` | `AyatSearchResult` | [`GET /ayat/search`](/locales/ar/api-reference/ayat/search) | + +## القراء والصوت + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `reciters.list()` | `Reciter[]` | [`GET /reciters`](/locales/ar/api-reference/reciters/list) | +| `reciters.getById(id)` | `Reciter` | [`GET /reciters/{id}`](/locales/ar/api-reference/reciters/get) | +| `reciters.search(name)` | `Reciter[]` | [`GET /reciters/search`](/locales/ar/api-reference/reciters/search) | +| `reciters.getSurah(reciterId, surah)` | `ReciterAudio` | [`GET /reciters/{id}/surah/{surah}`](/locales/ar/api-reference/reciters/audio) | + +## التفسير + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `tafsir.listEditions()` | `TafsirEdition[]` | [`GET /tafsir`](/locales/ar/api-reference/tafsir/editions) | +| `tafsir.forSurah(edition, surah, { aya? }?)` | `TafsirItem[] \| TafsirItem` | [`GET /tafsir/{edition}/{surah}`](/locales/ar/api-reference/tafsir/surah) | +| `tafsir.forAya(edition, surah, aya)` | `TafsirItem` | [`GET /tafsir/{edition}/{surah}/{aya}`](/locales/ar/api-reference/tafsir/aya) | + +## الأذكار + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `azkar.listCategories()` | `AzkarCategorySummary[]` | [`GET /azkar`](/locales/ar/api-reference/azkar/categories) | +| `azkar.getByCategory(category)` | `AzkarCategory` | [`GET /azkar/{category}`](/locales/ar/api-reference/azkar/category) | +| `azkar.search(text, { limit? }?)` | `AzkarSearchResult` | [`GET /azkar/search`](/locales/ar/api-reference/azkar/search) | +| `azkar.random()` | `{ category: string; item: AzkarItem }` | [`GET /azkar/random`](/locales/ar/api-reference/azkar/random) | + +## الحديث + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `hadith.listBooks()` | `HadithBook[]` | [`GET /hadith`](/locales/ar/api-reference/hadith/books) | +| `hadith.getBook(bookId, { from?, to? }?)` | `HadithBookContent` | [`GET /hadith/{book}`](/locales/ar/api-reference/hadith/book) | +| `hadith.getByNumber(bookId, number)` | `HadithItem` | [`GET /hadith/{book}/{number}`](/locales/ar/api-reference/hadith/get) | +| `hadith.random({ book? }?)` | `HadithRandomResult` | [`GET /hadith/random`](/locales/ar/api-reference/hadith/random) | + +## مواقيت الصلاة + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `prayer.getTimes(options)` | `PrayerTimings` | [`GET /prayer/times`](/locales/ar/api-reference/prayer/times) | + +## التقويم الهجري + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `hijri.today()` | `HijriDate` | [`GET /hijri/today`](/locales/ar/api-reference/hijri/today) | +| `hijri.fromGregorian(date?)` | `HijriDate` | [`GET /hijri/from-gregorian`](/locales/ar/api-reference/hijri/from-gregorian) | +| `hijri.toGregorian(date)` | `HijriDate` | [`GET /hijri/to-gregorian`](/locales/ar/api-reference/hijri/to-gregorian) | + +## القبلة + +| الدالة | نوع النتيجة | HTTP | +| --- | --- | --- | +| `qibla.getDirection(latitude, longitude)` | `QiblaInfo` | [`GET /qibla`](/locales/ar/api-reference/qibla/direction) | + +تعيد forSurah في هذا API مصفوفة دائمًا؛ تعريف SDK أوسع. تعيد دوال القوائم المصفوفة المستخرجة من الغلاف، وتعاد بيانات التشغيل مباشرة. استخدم [مرجع المسار](/locales/ar/api-reference/overview) لمعرفة الحدود وحالات الفشل. diff --git a/locales/ar/sdk/search.mdx b/locales/ar/sdk/search.mdx new file mode 100644 index 0000000..2659168 --- /dev/null +++ b/locales/ar/sdk/search.mdx @@ -0,0 +1,71 @@ +--- +title: "توافق البحث" +description: "دالة بحث تعمل مع API 2.0.0 وSDK 1.0.2." +--- + +يعيد API الشكل `{ success: true, total, data: [...] }`. في SDK 1.0.2 يفك موردا البحث `data` أولًا، ثم يحاولان قراءة `total` و`data` من المصفوفة الناتجة. لذلك قد تتحول استجابة HTTP الناجحة إلى `{ total: undefined, results: undefined }`. + +احفظ الدالة التالية في `search.mjs`. تستخدم fetch مباشرة وتحافظ على فئات أخطاء SDK. ترسل طلبًا واحدًا دون إعادة تلقائية؛ وتبقى 404 خطأ وليست قائمة فارغة. + +```js +import { BonyanApiError, BonyanRequestError } from "@bonyanoss/bonyan-api"; + +// Compatibility helper for the flat search envelope returned by API 2.0.0. +export async function searchContent( + resource, + text, + { + limit = 10, + baseUrl = "https://api.bonyanoss.org", + fetch: fetchFn = globalThis.fetch, + signal = AbortSignal.timeout(45000), + } = {}, +) { + if (!["ayat", "azkar"].includes(resource)) + throw new TypeError("resource must be ayat or azkar"); + const maximum = resource === "ayat" ? 500 : 200; + if (!Number.isInteger(limit) || limit < 1 || limit > maximum) + throw new RangeError("Invalid limit"); + if (typeof text !== "string" || !/[\u0621-\u064A]/u.test(text)) + throw new TypeError("Use an Arabic query"); + const url = new URL(baseUrl.replace(/\/+$/, "") + "/" + resource + "/search"); + url.searchParams.set("text", text); + url.searchParams.set("limit", String(limit)); + let response; + try { + response = await fetchFn(url, { + signal, + headers: { Accept: "application/json" }, + }); + } catch (error) { + throw BonyanRequestError.from(error); + } + const body = await response.json().catch(() => null); + if (!response.ok) + throw BonyanApiError.fromResponse( + response.status, + body, + response.statusText, + ); + if ( + body?.success !== true || + !Array.isArray(body.data) || + !Number.isInteger(body.total) + ) { + throw new BonyanRequestError("Unexpected search response", body); + } + return { total: body.total, results: body.data }; +} +``` + + +```js +import { searchContent } from './search.mjs'; + +const { total, results } = await searchContent('ayat', 'الرحمن', { limit: 10 }); +console.log(total, results[0]?.aya.text); +``` + +أرسل `'azkar'` للبحث في الأذكار. تحتوي نتائجه `category` و`item`. تحافظ الدالة على بادئة الرابط في الاستضافة الذاتية وتقبل AbortSignal. تحويل الخطأ فيها لا يملأ `retryAfterMs`؛ إذا أضفت إعادة محاولة فاستخدم سياسة نقل تقرأ Retry-After. + +هذه دالة توافق موثّقة وليست تعديلًا للحزمة المنشورة. أعد فحص الحزمة قبل حذفها. [نسخ المصادر](/locales/ar/guides/source-status). diff --git a/locales/en/api-reference/ayat/all.mdx b/locales/en/api-reference/ayat/all.mdx new file mode 100644 index 0000000..ca38902 --- /dev/null +++ b/locales/en/api-reference/ayat/all.mdx @@ -0,0 +1,33 @@ +--- +title: "Full Quran text" +description: "Returns all available surahs and verses in data.surahs. This is a large response without pagination." +openapi: "locales/en/openapi.yaml GET /ayat" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/ayat' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ayat"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ayat.list(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/ayat/ayat.controller.ts) diff --git a/locales/en/api-reference/ayat/get-by-number.mdx b/locales/en/api-reference/ayat/get-by-number.mdx new file mode 100644 index 0000000..0c09a90 --- /dev/null +++ b/locales/en/api-reference/ayat/get-by-number.mdx @@ -0,0 +1,33 @@ +--- +title: "Aya by global number" +description: "Looks up a verse by its global Quran number, rather than its position within a surah." +openapi: "locales/en/openapi.yaml GET /ayat/{id}" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/ayat/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ayat/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ayat.getById(1); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/ayat/ayat.controller.ts) diff --git a/locales/en/api-reference/ayat/get-by-surah-aya.mdx b/locales/en/api-reference/ayat/get-by-surah-aya.mdx new file mode 100644 index 0000000..70b7e13 --- /dev/null +++ b/locales/en/api-reference/ayat/get-by-surah-aya.mdx @@ -0,0 +1,33 @@ +--- +title: "Aya within a surah" +description: "Returns one verse with its surah number and name." +openapi: "locales/en/openapi.yaml GET /ayat/{surah}/aya/{id}" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/ayat/1/aya/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ayat/1/aya/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ayat.getBySurah(1, 1); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/ayat/ayat.controller.ts) diff --git a/locales/en/api-reference/ayat/overview.mdx b/locales/en/api-reference/ayat/overview.mdx new file mode 100644 index 0000000..be880fd --- /dev/null +++ b/locales/en/api-reference/ayat/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "Quran text" +description: "Routes, parameters and examples for quran text." +--- + +Routes, parameters and examples for quran text. + +| Route | Reference | +| --- | --- | +| `GET /ayat` | [Full Quran text](/locales/en/api-reference/ayat/all) | +| `GET /ayat/{id}` | [Aya by global number](/locales/en/api-reference/ayat/get-by-number) | +| `GET /ayat/{surah}/aya/{id}` | [Aya within a surah](/locales/en/api-reference/ayat/get-by-surah-aya) | +| `GET /ayat/search` | [Search Quran text](/locales/en/api-reference/ayat/search) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/ayat/search.mdx b/locales/en/api-reference/ayat/search.mdx new file mode 100644 index 0000000..9fee800 --- /dev/null +++ b/locales/en/api-reference/ayat/search.mdx @@ -0,0 +1,33 @@ +--- +title: "Search Quran text" +description: "Returns {success, total, data: [...]}. total counts returned matches after the limit, not all matches in the Quran." +openapi: "locales/en/openapi.yaml GET /ayat/search" +--- + + +SDK 1.0.2 has an envelope mismatch in client.ayat.search(). Use the fetch example here or the compatibility helper in the SDK guide. + + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/ayat/search' \ + --data-urlencode 'text=الرحمن' \ + --data-urlencode 'limit=10' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ayat/search"); +url.searchParams.set("text", "الرحمن"); +url.searchParams.set("limit", "10"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/ayat/ayat.controller.ts) diff --git a/locales/en/api-reference/azkar/categories.mdx b/locales/en/api-reference/azkar/categories.mdx new file mode 100644 index 0000000..1e14513 --- /dev/null +++ b/locales/en/api-reference/azkar/categories.mdx @@ -0,0 +1,33 @@ +--- +title: "Azkar categories" +description: "Lists category names, item counts and sources in data.categories." +openapi: "locales/en/openapi.yaml GET /azkar" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/azkar' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/azkar"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.azkar.listCategories(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/azkar/azkar.controller.ts) diff --git a/locales/en/api-reference/azkar/category.mdx b/locales/en/api-reference/azkar/category.mdx new file mode 100644 index 0000000..b18669f --- /dev/null +++ b/locales/en/api-reference/azkar/category.mdx @@ -0,0 +1,33 @@ +--- +title: "Azkar in a category" +description: "Returns the first category whose normalized Arabic name contains the supplied value. Use the full name from the catalogue to avoid ambiguous matches." +openapi: "locales/en/openapi.yaml GET /azkar/{category}" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/azkar/%D8%A3%D8%B0%D9%83%D8%A7%D8%B1%20%D8%A7%D9%84%D8%B5%D8%A8%D8%A7%D8%AD' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/azkar/%D8%A3%D8%B0%D9%83%D8%A7%D8%B1%20%D8%A7%D9%84%D8%B5%D8%A8%D8%A7%D8%AD"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.azkar.getByCategory('أذكار الصباح'); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/azkar/azkar.controller.ts) diff --git a/locales/en/api-reference/azkar/overview.mdx b/locales/en/api-reference/azkar/overview.mdx new file mode 100644 index 0000000..3f2495a --- /dev/null +++ b/locales/en/api-reference/azkar/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "Azkar" +description: "Routes, parameters and examples for azkar." +--- + +Routes, parameters and examples for azkar. + +| Route | Reference | +| --- | --- | +| `GET /azkar` | [Azkar categories](/locales/en/api-reference/azkar/categories) | +| `GET /azkar/{category}` | [Azkar in a category](/locales/en/api-reference/azkar/category) | +| `GET /azkar/search` | [Search azkar text](/locales/en/api-reference/azkar/search) | +| `GET /azkar/random` | [Random zekr](/locales/en/api-reference/azkar/random) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/azkar/random.mdx b/locales/en/api-reference/azkar/random.mdx new file mode 100644 index 0000000..745137a --- /dev/null +++ b/locales/en/api-reference/azkar/random.mdx @@ -0,0 +1,33 @@ +--- +title: "Random zekr" +description: "Chooses one item from all cached categories. Random selection happens per request." +openapi: "locales/en/openapi.yaml GET /azkar/random" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/azkar/random' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/azkar/random"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.azkar.random(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/azkar/azkar.controller.ts) diff --git a/locales/en/api-reference/azkar/search.mdx b/locales/en/api-reference/azkar/search.mdx new file mode 100644 index 0000000..6b2f7e0 --- /dev/null +++ b/locales/en/api-reference/azkar/search.mdx @@ -0,0 +1,33 @@ +--- +title: "Search azkar text" +description: "Returns {success, total, data: [...]}, with category and item for each hit. total is the number returned, capped by limit." +openapi: "locales/en/openapi.yaml GET /azkar/search" +--- + + +SDK 1.0.2 has an envelope mismatch in client.azkar.search(). Use fetch or the compatibility helper in the SDK guide. + + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/azkar/search' \ + --data-urlencode 'text=الله' \ + --data-urlencode 'limit=10' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/azkar/search"); +url.searchParams.set("text", "الله"); +url.searchParams.set("limit", "10"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/azkar/azkar.controller.ts) diff --git a/locales/en/api-reference/hadith/book.mdx b/locales/en/api-reference/hadith/book.mdx new file mode 100644 index 0000000..b4e0a7d --- /dev/null +++ b/locales/en/api-reference/hadith/book.mdx @@ -0,0 +1,41 @@ +--- +title: "Hadith range" +description: "Returns book, available and hadiths inside data. Both range endpoints are inclusive; omitted from defaults to 1 and omitted to defaults to from + 29." +openapi: "locales/en/openapi.yaml GET /hadith/{book}" +--- + + +The API currently rejects to - from > 300, so it accepts 301 inclusive items. SDK 1.0.2 rejects more than 300 when both bounds are supplied. Use 300 or fewer for compatibility. An empty range can return 200 with hadiths: []. + + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/hadith/bukhari' \ + --data-urlencode 'from=1' \ + --data-urlencode 'to=30' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hadith/bukhari"); +url.searchParams.set("from", "1"); +url.searchParams.set("to", "30"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hadith.getBook('bukhari', { from: 1, to: 30 }); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hadith/hadith.controller.ts) diff --git a/locales/en/api-reference/hadith/books.mdx b/locales/en/api-reference/hadith/books.mdx new file mode 100644 index 0000000..c3be811 --- /dev/null +++ b/locales/en/api-reference/hadith/books.mdx @@ -0,0 +1,33 @@ +--- +title: "Hadith books" +description: "Returns book IDs, names and available counts from the active provider. Discover IDs here instead of assuming a fixed list." +openapi: "locales/en/openapi.yaml GET /hadith" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/hadith' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hadith"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hadith.listBooks(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hadith/hadith.controller.ts) diff --git a/locales/en/api-reference/hadith/get.mdx b/locales/en/api-reference/hadith/get.mdx new file mode 100644 index 0000000..da84e13 --- /dev/null +++ b/locales/en/api-reference/hadith/get.mdx @@ -0,0 +1,33 @@ +--- +title: "Get a hadith" +description: "Returns a narration by its book-local number. The response has no grading or chain-of-transmission fields." +openapi: "locales/en/openapi.yaml GET /hadith/{book}/{number}" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/hadith/bukhari/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hadith/bukhari/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hadith.getByNumber('bukhari', 1); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hadith/hadith.controller.ts) diff --git a/locales/en/api-reference/hadith/overview.mdx b/locales/en/api-reference/hadith/overview.mdx new file mode 100644 index 0000000..b538bfb --- /dev/null +++ b/locales/en/api-reference/hadith/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "Hadith" +description: "Routes, parameters and examples for hadith." +--- + +Routes, parameters and examples for hadith. + +| Route | Reference | +| --- | --- | +| `GET /hadith` | [Hadith books](/locales/en/api-reference/hadith/books) | +| `GET /hadith/{book}` | [Hadith range](/locales/en/api-reference/hadith/book) | +| `GET /hadith/{book}/{number}` | [Get a hadith](/locales/en/api-reference/hadith/get) | +| `GET /hadith/random` | [Random hadith](/locales/en/api-reference/hadith/random) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/hadith/random.mdx b/locales/en/api-reference/hadith/random.mdx new file mode 100644 index 0000000..4f01678 --- /dev/null +++ b/locales/en/api-reference/hadith/random.mdx @@ -0,0 +1,35 @@ +--- +title: "Random hadith" +description: "Picks a book, then a number from its available count. Optionally restrict the book. The result contains book and hadith." +openapi: "locales/en/openapi.yaml GET /hadith/random" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/hadith/random' \ + --data-urlencode 'book=bukhari' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hadith/random"); +url.searchParams.set("book", "bukhari"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hadith.random({ book: 'bukhari' }); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hadith/hadith.controller.ts) diff --git a/locales/en/api-reference/hijri/from-gregorian.mdx b/locales/en/api-reference/hijri/from-gregorian.mdx new file mode 100644 index 0000000..4c5d229 --- /dev/null +++ b/locales/en/api-reference/hijri/from-gregorian.mdx @@ -0,0 +1,35 @@ +--- +title: "Gregorian to Hijri" +description: "Returns both calendar representations. Aladhan is the only configured source." +openapi: "locales/en/openapi.yaml GET /hijri/from-gregorian" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/hijri/from-gregorian' \ + --data-urlencode 'date=01-01-2026' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hijri/from-gregorian"); +url.searchParams.set("date", "01-01-2026"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hijri.fromGregorian('01-01-2026'); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hijri/hijri.controller.ts) diff --git a/locales/en/api-reference/hijri/overview.mdx b/locales/en/api-reference/hijri/overview.mdx new file mode 100644 index 0000000..a9d5fe1 --- /dev/null +++ b/locales/en/api-reference/hijri/overview.mdx @@ -0,0 +1,14 @@ +--- +title: "Hijri calendar" +description: "Routes, parameters and examples for hijri calendar." +--- + +Routes, parameters and examples for hijri calendar. + +| Route | Reference | +| --- | --- | +| `GET /hijri/today` | [Today in both calendars](/locales/en/api-reference/hijri/today) | +| `GET /hijri/from-gregorian` | [Gregorian to Hijri](/locales/en/api-reference/hijri/from-gregorian) | +| `GET /hijri/to-gregorian` | [Hijri to Gregorian](/locales/en/api-reference/hijri/to-gregorian) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/hijri/to-gregorian.mdx b/locales/en/api-reference/hijri/to-gregorian.mdx new file mode 100644 index 0000000..fb75be2 --- /dev/null +++ b/locales/en/api-reference/hijri/to-gregorian.mdx @@ -0,0 +1,35 @@ +--- +title: "Hijri to Gregorian" +description: "Converts a required Hijri date. Returned month and weekday names come from the provider." +openapi: "locales/en/openapi.yaml GET /hijri/to-gregorian" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/hijri/to-gregorian' \ + --data-urlencode 'date=01-09-1447' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hijri/to-gregorian"); +url.searchParams.set("date", "01-09-1447"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hijri.toGregorian('01-09-1447'); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hijri/hijri.controller.ts) diff --git a/locales/en/api-reference/hijri/today.mdx b/locales/en/api-reference/hijri/today.mdx new file mode 100644 index 0000000..5122132 --- /dev/null +++ b/locales/en/api-reference/hijri/today.mdx @@ -0,0 +1,33 @@ +--- +title: "Today in both calendars" +description: "Converts the API server’s current Gregorian date through Aladhan. It does not use the browser’s timezone." +openapi: "locales/en/openapi.yaml GET /hijri/today" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/hijri/today' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/hijri/today"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.hijri.today(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/hijri/hijri.controller.ts) diff --git a/locales/en/api-reference/meta/catalogue.mdx b/locales/en/api-reference/meta/catalogue.mdx new file mode 100644 index 0000000..8a8a153 --- /dev/null +++ b/locales/en/api-reference/meta/catalogue.mdx @@ -0,0 +1,33 @@ +--- +title: "Route catalogue" +description: "Lists registered content routes and project metadata. The four operational routes are excluded from the catalogue." +openapi: "locales/en/openapi.yaml GET /" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.routes(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/server.ts) diff --git a/locales/en/api-reference/meta/health.mdx b/locales/en/api-reference/meta/health.mdx new file mode 100644 index 0000000..b523659 --- /dev/null +++ b/locales/en/api-reference/meta/health.mdx @@ -0,0 +1,33 @@ +--- +title: "Liveness" +description: "Confirms the HTTP process responds. It does not contact content providers." +openapi: "locales/en/openapi.yaml GET /health" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/health' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/health"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.health(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/server.ts) diff --git a/locales/en/api-reference/meta/metrics.mdx b/locales/en/api-reference/meta/metrics.mdx new file mode 100644 index 0000000..0d0e392 --- /dev/null +++ b/locales/en/api-reference/meta/metrics.mdx @@ -0,0 +1,33 @@ +--- +title: "Prometheus metrics" +description: "Returns uptime, cache gauges and upstream request counters as text." +openapi: "locales/en/openapi.yaml GET /metrics" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/metrics' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/metrics"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.text(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.metrics(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/server.ts) diff --git a/locales/en/api-reference/meta/overview.mdx b/locales/en/api-reference/meta/overview.mdx new file mode 100644 index 0000000..a996105 --- /dev/null +++ b/locales/en/api-reference/meta/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "Service operations" +description: "Routes, parameters and examples for service operations." +--- + +Routes, parameters and examples for service operations. + +| Route | Reference | +| --- | --- | +| `GET /` | [Route catalogue](/locales/en/api-reference/meta/catalogue) | +| `GET /health` | [Liveness](/locales/en/api-reference/meta/health) | +| `GET /ready` | [Readiness and cache](/locales/en/api-reference/meta/ready) | +| `GET /metrics` | [Prometheus metrics](/locales/en/api-reference/meta/metrics) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/meta/ready.mdx b/locales/en/api-reference/meta/ready.mdx new file mode 100644 index 0000000..554ce1d --- /dev/null +++ b/locales/en/api-reference/meta/ready.mdx @@ -0,0 +1,33 @@ +--- +title: "Readiness and cache" +description: "Returns process readiness and current cache counts. This is not an upstream availability check." +openapi: "locales/en/openapi.yaml GET /ready" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/ready' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/ready"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ready(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/server.ts) diff --git a/locales/en/api-reference/overview.mdx b/locales/en/api-reference/overview.mdx new file mode 100644 index 0000000..86583da --- /dev/null +++ b/locales/en/api-reference/overview.mdx @@ -0,0 +1,89 @@ +--- +title: "API reference" +description: "Every HTTP route with parameters and response schemas." +--- + +Base URL: `https://api.bonyanoss.org`. Every route below uses GET. No API key is required by the current implementation. Open an endpoint to try a request and inspect parameters and response fields. + +[Download English OpenAPI](/locales/en/openapi.yaml) · [Error guide](/locales/en/concepts/errors) + +## Service operations + +| Route | Reference | +| --- | --- | +| `GET /` | [Route catalogue](/locales/en/api-reference/meta/catalogue) | +| `GET /health` | [Liveness](/locales/en/api-reference/meta/health) | +| `GET /ready` | [Readiness and cache](/locales/en/api-reference/meta/ready) | +| `GET /metrics` | [Prometheus metrics](/locales/en/api-reference/meta/metrics) | + +## Surah metadata + +| Route | Reference | +| --- | --- | +| `GET /surah` | [List surahs](/locales/en/api-reference/surah/list) | +| `GET /surah/{id}` | [Get a surah](/locales/en/api-reference/surah/get) | +| `GET /surah/search` | [Search surah names](/locales/en/api-reference/surah/search) | + +## Quran text + +| Route | Reference | +| --- | --- | +| `GET /ayat` | [Full Quran text](/locales/en/api-reference/ayat/all) | +| `GET /ayat/{id}` | [Aya by global number](/locales/en/api-reference/ayat/get-by-number) | +| `GET /ayat/{surah}/aya/{id}` | [Aya within a surah](/locales/en/api-reference/ayat/get-by-surah-aya) | +| `GET /ayat/search` | [Search Quran text](/locales/en/api-reference/ayat/search) | + +## Reciters and audio + +| Route | Reference | +| --- | --- | +| `GET /reciters` | [List reciters](/locales/en/api-reference/reciters/list) | +| `GET /reciters/{id}` | [Get a reciter](/locales/en/api-reference/reciters/get) | +| `GET /reciters/search` | [Search reciter names](/locales/en/api-reference/reciters/search) | +| `GET /reciters/{id}/surah/{surah}` | [Surah audio URL](/locales/en/api-reference/reciters/audio) | + +## Tafsir + +| Route | Reference | +| --- | --- | +| `GET /tafsir` | [Tafsir editions](/locales/en/api-reference/tafsir/editions) | +| `GET /tafsir/{edition}/{surah}` | [Tafsir for a surah](/locales/en/api-reference/tafsir/surah) | +| `GET /tafsir/{edition}/{surah}/{aya}` | [Tafsir for an aya](/locales/en/api-reference/tafsir/aya) | + +## Azkar + +| Route | Reference | +| --- | --- | +| `GET /azkar` | [Azkar categories](/locales/en/api-reference/azkar/categories) | +| `GET /azkar/{category}` | [Azkar in a category](/locales/en/api-reference/azkar/category) | +| `GET /azkar/search` | [Search azkar text](/locales/en/api-reference/azkar/search) | +| `GET /azkar/random` | [Random zekr](/locales/en/api-reference/azkar/random) | + +## Hadith + +| Route | Reference | +| --- | --- | +| `GET /hadith` | [Hadith books](/locales/en/api-reference/hadith/books) | +| `GET /hadith/{book}` | [Hadith range](/locales/en/api-reference/hadith/book) | +| `GET /hadith/{book}/{number}` | [Get a hadith](/locales/en/api-reference/hadith/get) | +| `GET /hadith/random` | [Random hadith](/locales/en/api-reference/hadith/random) | + +## Prayer times + +| Route | Reference | +| --- | --- | +| `GET /prayer/times` | [Prayer times](/locales/en/api-reference/prayer/times) | + +## Hijri calendar + +| Route | Reference | +| --- | --- | +| `GET /hijri/today` | [Today in both calendars](/locales/en/api-reference/hijri/today) | +| `GET /hijri/from-gregorian` | [Gregorian to Hijri](/locales/en/api-reference/hijri/from-gregorian) | +| `GET /hijri/to-gregorian` | [Hijri to Gregorian](/locales/en/api-reference/hijri/to-gregorian) | + +## Qibla + +| Route | Reference | +| --- | --- | +| `GET /qibla` | [Qibla direction](/locales/en/api-reference/qibla/direction) | diff --git a/locales/en/api-reference/prayer/overview.mdx b/locales/en/api-reference/prayer/overview.mdx new file mode 100644 index 0000000..8495fba --- /dev/null +++ b/locales/en/api-reference/prayer/overview.mdx @@ -0,0 +1,12 @@ +--- +title: "Prayer times" +description: "Routes, parameters and examples for prayer times." +--- + +Routes, parameters and examples for prayer times. + +| Route | Reference | +| --- | --- | +| `GET /prayer/times` | [Prayer times](/locales/en/api-reference/prayer/times) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/prayer/times.mdx b/locales/en/api-reference/prayer/times.mdx new file mode 100644 index 0000000..ad0673c --- /dev/null +++ b/locales/en/api-reference/prayer/times.mdx @@ -0,0 +1,45 @@ +--- +title: "Prayer times" +description: "Provide latitude + longitude or city + country. With both pairs, Aladhan coordinates are tried before Aladhan city lookup." +openapi: "locales/en/openapi.yaml GET /prayer/times" +--- + + +pray.zone fallback is available only for coordinate requests dated today on the API server. It does not receive method, and may omit method and coordinates. Inspect apiName before assuming identical calculation settings. This controller validates numeric coordinates but does not enforce geographic bounds; SDK validation does. + + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/prayer/times' \ + --data-urlencode 'date=01-01-2026' \ + --data-urlencode 'latitude=21.4225' \ + --data-urlencode 'longitude=39.8262' \ + --data-urlencode 'method=4' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/prayer/times"); +url.searchParams.set("date", "01-01-2026"); +url.searchParams.set("latitude", "21.4225"); +url.searchParams.set("longitude", "39.8262"); +url.searchParams.set("method", "4"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.prayer.getTimes({ latitude: 21.4225, longitude: 39.8262, method: 4 }); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/prayer/prayer.controller.ts) diff --git a/locales/en/api-reference/qibla/direction.mdx b/locales/en/api-reference/qibla/direction.mdx new file mode 100644 index 0000000..1e95dad --- /dev/null +++ b/locales/en/api-reference/qibla/direction.mdx @@ -0,0 +1,41 @@ +--- +title: "Qibla direction" +description: "Returns degrees clockwise from true north. Tries Aladhan, then calculates the great-circle bearing locally." +openapi: "locales/en/openapi.yaml GET /qibla" +--- + + +This is a geographic bearing, not a device compass reading. Magnetic declination and device orientation are outside this endpoint. + + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/qibla' \ + --data-urlencode 'latitude=21.4225' \ + --data-urlencode 'longitude=39.8262' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/qibla"); +url.searchParams.set("latitude", "21.4225"); +url.searchParams.set("longitude", "39.8262"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.qibla.getDirection(21.4225, 39.8262); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/qibla/qibla.controller.ts) diff --git a/locales/en/api-reference/qibla/overview.mdx b/locales/en/api-reference/qibla/overview.mdx new file mode 100644 index 0000000..cc5b9f5 --- /dev/null +++ b/locales/en/api-reference/qibla/overview.mdx @@ -0,0 +1,12 @@ +--- +title: "Qibla" +description: "Routes, parameters and examples for qibla." +--- + +Routes, parameters and examples for qibla. + +| Route | Reference | +| --- | --- | +| `GET /qibla` | [Qibla direction](/locales/en/api-reference/qibla/direction) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/reciters/audio.mdx b/locales/en/api-reference/reciters/audio.mdx new file mode 100644 index 0000000..6623002 --- /dev/null +++ b/locales/en/api-reference/reciters/audio.mdx @@ -0,0 +1,37 @@ +--- +title: "Surah audio URL" +description: "Builds a URL from the first moshaf server and a three-digit surah number. Returns JSON, not an audio stream." +openapi: "locales/en/openapi.yaml GET /reciters/{id}/surah/{surah}" +--- + + +The API does not verify that the MP3 exists. A reciter from quran.com may have no moshaf, causing 404. Discover a reciter with moshaf before requesting audio. + + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/reciters/1/surah/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/reciters/1/surah/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.reciters.getSurah(1, 1); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/reciters/reciters.controller.ts) diff --git a/locales/en/api-reference/reciters/get.mdx b/locales/en/api-reference/reciters/get.mdx new file mode 100644 index 0000000..3164454 --- /dev/null +++ b/locales/en/api-reference/reciters/get.mdx @@ -0,0 +1,33 @@ +--- +title: "Get a reciter" +description: "Looks up an ID in the currently cached provider catalogue." +openapi: "locales/en/openapi.yaml GET /reciters/{id}" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/reciters/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/reciters/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.reciters.getById(1); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/reciters/reciters.controller.ts) diff --git a/locales/en/api-reference/reciters/list.mdx b/locales/en/api-reference/reciters/list.mdx new file mode 100644 index 0000000..78a17ae --- /dev/null +++ b/locales/en/api-reference/reciters/list.mdx @@ -0,0 +1,33 @@ +--- +title: "List reciters" +description: "Returns reciters in data.reciters. The fallback provider may omit moshaf and audio-server information." +openapi: "locales/en/openapi.yaml GET /reciters" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/reciters' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/reciters"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.reciters.list(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/reciters/reciters.controller.ts) diff --git a/locales/en/api-reference/reciters/overview.mdx b/locales/en/api-reference/reciters/overview.mdx new file mode 100644 index 0000000..7d2f7e7 --- /dev/null +++ b/locales/en/api-reference/reciters/overview.mdx @@ -0,0 +1,15 @@ +--- +title: "Reciters and audio" +description: "Routes, parameters and examples for reciters and audio." +--- + +Routes, parameters and examples for reciters and audio. + +| Route | Reference | +| --- | --- | +| `GET /reciters` | [List reciters](/locales/en/api-reference/reciters/list) | +| `GET /reciters/{id}` | [Get a reciter](/locales/en/api-reference/reciters/get) | +| `GET /reciters/search` | [Search reciter names](/locales/en/api-reference/reciters/search) | +| `GET /reciters/{id}/surah/{surah}` | [Surah audio URL](/locales/en/api-reference/reciters/audio) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/reciters/search.mdx b/locales/en/api-reference/reciters/search.mdx new file mode 100644 index 0000000..17f6fbf --- /dev/null +++ b/locales/en/api-reference/reciters/search.mdx @@ -0,0 +1,35 @@ +--- +title: "Search reciter names" +description: "Returns matching reciters using Arabic substring matching. This is not fuzzy or English-language search." +openapi: "locales/en/openapi.yaml GET /reciters/search" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/reciters/search' \ + --data-urlencode 'name=العفاسي' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/reciters/search"); +url.searchParams.set("name", "العفاسي"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.reciters.search('العفاسي'); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/reciters/reciters.controller.ts) diff --git a/locales/en/api-reference/surah/get.mdx b/locales/en/api-reference/surah/get.mdx new file mode 100644 index 0000000..ae4c57d --- /dev/null +++ b/locales/en/api-reference/surah/get.mdx @@ -0,0 +1,33 @@ +--- +title: "Get a surah" +description: "Returns metadata for one surah." +openapi: "locales/en/openapi.yaml GET /surah/{id}" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/surah/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/surah/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.surah.getById(1); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/surah/surah.controller.ts) diff --git a/locales/en/api-reference/surah/list.mdx b/locales/en/api-reference/surah/list.mdx new file mode 100644 index 0000000..0c8810a --- /dev/null +++ b/locales/en/api-reference/surah/list.mdx @@ -0,0 +1,33 @@ +--- +title: "List surahs" +description: "Returns the chapter catalogue in data.surah. This endpoint returns names and metadata, not verse text." +openapi: "locales/en/openapi.yaml GET /surah" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/surah' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/surah"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.surah.list(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/surah/surah.controller.ts) diff --git a/locales/en/api-reference/surah/overview.mdx b/locales/en/api-reference/surah/overview.mdx new file mode 100644 index 0000000..4587e60 --- /dev/null +++ b/locales/en/api-reference/surah/overview.mdx @@ -0,0 +1,14 @@ +--- +title: "Surah metadata" +description: "Routes, parameters and examples for surah metadata." +--- + +Routes, parameters and examples for surah metadata. + +| Route | Reference | +| --- | --- | +| `GET /surah` | [List surahs](/locales/en/api-reference/surah/list) | +| `GET /surah/{id}` | [Get a surah](/locales/en/api-reference/surah/get) | +| `GET /surah/search` | [Search surah names](/locales/en/api-reference/surah/search) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/surah/search.mdx b/locales/en/api-reference/surah/search.mdx new file mode 100644 index 0000000..b96a157 --- /dev/null +++ b/locales/en/api-reference/surah/search.mdx @@ -0,0 +1,35 @@ +--- +title: "Search surah names" +description: "Matches a normalized Arabic substring and returns an array. No matches returns 404." +openapi: "locales/en/openapi.yaml GET /surah/search" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/surah/search' \ + --data-urlencode 'name=الفاتحة' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/surah/search"); +url.searchParams.set("name", "الفاتحة"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.surah.search('الفاتحة'); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/surah/surah.controller.ts) diff --git a/locales/en/api-reference/tafsir/aya.mdx b/locales/en/api-reference/tafsir/aya.mdx new file mode 100644 index 0000000..bbb8184 --- /dev/null +++ b/locales/en/api-reference/tafsir/aya.mdx @@ -0,0 +1,33 @@ +--- +title: "Tafsir for an aya" +description: "Returns one tafsir object. muyassar can use two sources; the other configured editions each have one source." +openapi: "locales/en/openapi.yaml GET /tafsir/{edition}/{surah}/{aya}" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/tafsir/muyassar/1/1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/tafsir/muyassar/1/1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.tafsir.forAya('muyassar', 1, 1); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/tafsir/tafsir.controller.ts) diff --git a/locales/en/api-reference/tafsir/editions.mdx b/locales/en/api-reference/tafsir/editions.mdx new file mode 100644 index 0000000..f956afd --- /dev/null +++ b/locales/en/api-reference/tafsir/editions.mdx @@ -0,0 +1,33 @@ +--- +title: "Tafsir editions" +description: "Lists the five configured public edition IDs and Arabic labels. The catalogue is local; it does not test provider availability." +openapi: "locales/en/openapi.yaml GET /tafsir" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body 'https://api.bonyanoss.org/tafsir' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/tafsir"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.tafsir.listEditions(); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/tafsir/tafsir.controller.ts) diff --git a/locales/en/api-reference/tafsir/overview.mdx b/locales/en/api-reference/tafsir/overview.mdx new file mode 100644 index 0000000..f9e195c --- /dev/null +++ b/locales/en/api-reference/tafsir/overview.mdx @@ -0,0 +1,14 @@ +--- +title: "Tafsir" +description: "Routes, parameters and examples for tafsir." +--- + +Routes, parameters and examples for tafsir. + +| Route | Reference | +| --- | --- | +| `GET /tafsir` | [Tafsir editions](/locales/en/api-reference/tafsir/editions) | +| `GET /tafsir/{edition}/{surah}` | [Tafsir for a surah](/locales/en/api-reference/tafsir/surah) | +| `GET /tafsir/{edition}/{surah}/{aya}` | [Tafsir for an aya](/locales/en/api-reference/tafsir/aya) | + +[Provider fallback](/locales/en/concepts/fallback) · [Cache lifetimes](/locales/en/concepts/caching) diff --git a/locales/en/api-reference/tafsir/surah.mdx b/locales/en/api-reference/tafsir/surah.mdx new file mode 100644 index 0000000..e82652c --- /dev/null +++ b/locales/en/api-reference/tafsir/surah.mdx @@ -0,0 +1,35 @@ +--- +title: "Tafsir for a surah" +description: "Returns an array, including when the optional aya filter selects one verse. Returned edition is a provider-specific ID." +openapi: "locales/en/openapi.yaml GET /tafsir/{edition}/{surah}" +--- + +## Request example + + + +```bash cURL +curl --fail-with-body --get 'https://api.bonyanoss.org/tafsir/muyassar/1' \ + --data-urlencode 'aya=1' +``` + +```js JavaScript +const url = new URL("https://api.bonyanoss.org/tafsir/muyassar/1"); +url.searchParams.set("aya", "1"); +const response = await fetch(url, { signal: AbortSignal.timeout(45000) }); +if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`); +const body = await response.json(); +console.log(body); +``` + +```ts SDK +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.tafsir.forSurah('muyassar', 1); +console.log(result); +``` + + + +[Responses and errors](/locales/en/concepts/errors) · [SDK guide](/locales/en/sdk/overview) · [Route implementation](https://github.com/BonyanOSS/Bonyan-API/blob/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4/src/modules/tafsir/tafsir.controller.ts) diff --git a/locales/en/code-of-conduct.mdx b/locales/en/code-of-conduct.mdx new file mode 100644 index 0000000..b3b3d41 --- /dev/null +++ b/locales/en/code-of-conduct.mdx @@ -0,0 +1,10 @@ +--- +title: "Community conduct" +description: "A reader guide to the repository policy." +--- + +Treat contributors with respect, focus feedback on the work, and cite sources when discussing Islamic content. Separate source text, translation, interpretation and personal opinion. Harassment, threats, sectarian hostility, privacy violations and retaliation are prohibited by the repository policy. + +The [full Code of Conduct](https://github.com/BonyanOSS/docs/blob/main/CODE_OF_CONDUCT.md) defines scope, enforcement and maintainer responsibilities. This page summarizes that policy; it does not replace it. + +The policy currently has no configured private reporting contact. Do not publish sensitive reports in a public issue. Maintainers need to provide a private reporting channel; this documentation does not invent an address or promise a reporting service. diff --git a/locales/en/concepts/arabic-search.mdx b/locales/en/concepts/arabic-search.mdx new file mode 100644 index 0000000..7117cfd --- /dev/null +++ b/locales/en/concepts/arabic-search.mdx @@ -0,0 +1,34 @@ +--- +title: "Arabic search" +description: "Substring matching, normalization and query encoding." +--- + +Search matches normalized Arabic substrings. It does not rank relevance, correct spelling, translate input or provide an English search index. + +## Two normalization paths + +| Routes | Behavior | +| --- | --- | +| `/surah/search`, `/reciters/search`, azkar category and text search | Remove marks and non-Arabic characters; normalize common letter variants; preserve internal spaces. | +| `/ayat/search` | Normalize Quran-specific marks and letter variants, remove tatweel, and remove spaces before matching. | + +Quran search converts the dagger alif to an alif and removes tatweel and spaces. The general matcher preserves internal spaces. Both normalize waw-with-hamza to waw after Unicode decomposition and mark removal. The different handling of Quran marks and spaces can still change matches across modules. + + +Latin-only or punctuation-only input can normalize to an empty string and match unrelated entries. Submit a meaningful Arabic phrase; do not treat a 200 response as proof that English search is supported. + + +## Encode Arabic queries + +```js +const url = new URL('https://api.bonyanoss.org/ayat/search'); +url.searchParams.set('text', 'الرحمن'); +url.searchParams.set('limit', '10'); +const response = await fetch(url); +if (!response.ok) throw new Error(('HTTP ' + response.status)); +const body = await response.json(); +console.log(body.total, body.data); +``` + + +The server clamps verse search to 1..500 and azkar search to 1..200, with a default of 50. Zero or an unparsable limit also uses 50. The SDK validates limits more strictly. A search with no match returns 404 rather than an empty success array. diff --git a/locales/en/concepts/architecture.mdx b/locales/en/concepts/architecture.mdx new file mode 100644 index 0000000..7b55589 --- /dev/null +++ b/locales/en/concepts/architecture.mdx @@ -0,0 +1,39 @@ +--- +title: "How the API works" +description: "Request flow, source mapping and the limits of provider fallback." +--- + +Bonyan API is a Fastify server. Its nine content modules validate requests, fetch external data, cache results and return module-specific JSON shapes. The four operational routes report on the process itself. + +## A content request + +```mermaid +flowchart TD + A["Your app: HTTP or SDK"] --> B["Fastify: rate limit and route"] + B --> C{"Valid input?"} + C -->|No| X["400"] + C -->|Yes| D{"Fresh cache?"} + D -->|Yes| R["Select result and send JSON"] + D -->|No| P["Load provider or try fallbacks"] + P -->|Result| S["Cache result"] + S --> R + P -->|All attempts fail| E["503"] +``` + +The diagram shows the common path. Not every module validates inputs, checks empty data or falls back in the same way. Tafsir editions are served from a local catalogue. Qibla can calculate locally. Health endpoints do not load content. + +## Layers + +| Layer | Responsibility | +| --- | --- | +| Routes | Match URLs and call controllers. | +| Controllers | Parse input, select items and choose response status. | +| Services | Fetch providers and map their fields to Bonyan types. | +| Cache | Share in-flight loads and retain successful results in memory. | +| Client SDK | Validate selected arguments, send GET requests and unwrap responses. | + +The service runs without a database. Cache contents and metrics belong to one process and reset when it restarts. Multiple replicas do not share that state. + +## What fallback preserves + +The API maps provider payloads to a common set of fields. A source change can still affect optional fields, IDs, names, text presentation and prayer calculation details. Read [fallback behavior](/locales/en/concepts/fallback) before depending on an optional field. diff --git a/locales/en/concepts/caching.mdx b/locales/en/concepts/caching.mdx new file mode 100644 index 0000000..0c6ac2c --- /dev/null +++ b/locales/en/concepts/caching.mdx @@ -0,0 +1,25 @@ +--- +title: "Caching" +description: "Per-process cache lifetimes and what happens on a miss." +--- + +The API stores successful service results in an in-memory Map. Concurrent requests for the same uncached key share one loader. Failed loads are not stored as successful entries. + +| Data | TTL | Cache key includes | +| --- | --- | --- | +| Surah catalogue | 12 hours | One shared key | +| Full Quran | 24 hours | One shared key | +| Reciters | 1 hour | One shared key | +| Azkar | 24 hours | One shared key | +| Tafsir | 24 hours | Edition, surah, optional aya | +| Hadith book catalogue | 24 hours | One shared key | +| Hadith range | 12 hours | Book, from, to | +| Prayer times | 1 hour | Date, coordinates, city, country, method | +| Hijri conversion | 7 days | Direction and date | +| Qibla | 30 days | Coordinates | + +The default capacity is 1,000 entries, configurable with `CACHE_MAX_ENTRIES`. Eviction removes the oldest Map key; this is not an LRU cache. Expired entries can remain counted until replaced or evicted. + +The helper supports `staleWhileRevalidateMs`, but the current modules do not enable it. Normal requests wait for a refresh after expiry. Do not assume stale data will be served during an outage. + +Restarting clears cache state. Each replica has separate entries, limits and counters. `GET /ready` reports `cache.entries` and `cache.inflight`; it does not measure cache-hit ratio. The SDK has no response cache. diff --git a/locales/en/concepts/errors.mdx b/locales/en/concepts/errors.mdx new file mode 100644 index 0000000..bef5009 --- /dev/null +++ b/locales/en/concepts/errors.mdx @@ -0,0 +1,44 @@ +--- +title: "Responses and errors" +description: "Success envelopes, search counts and structured failures." +--- + +## Success shapes + +| Route family | Raw HTTP body | +| --- | --- | +| Most content endpoints | `{ success: true, data: ... }` | +| `/ayat/search`, `/azkar/search` | `{ success: true, total: number, data: [...] }` | +| `/`, `/health`, `/ready` | A plain JSON object without a success envelope. | +| `/metrics` | Prometheus text, not JSON. | + +Search `total` counts returned items after applying `limit`. It is not a corpus-wide count and there is no offset or cursor parameter. + +## Failure shape + +This is an illustrative 400 response; request IDs change for each request. + +```json +{ + "success": false, + "message": "Surah id must be between 1 and 114", + "error": { + "code": "BAD_REQUEST", + "message": "Surah id must be between 1 and 114", + "requestId": "req-example" + } +} +``` + + +| HTTP status | Typical code | Action | +| --- | --- | --- | +| 400 | `BAD_REQUEST` | Correct the input before retrying. | +| 404 | `NOT_FOUND` | Check the identifier or show an empty-search state. | +| 429 | `RATE_LIMITED` | Wait according to `Retry-After` when present. | +| 503 | `ALL_SOURCES_FAILED` | Retry with a bounded delay or show temporary unavailability. | +| 500 | `INTERNAL_SERVER_ERROR` | Record the request ID and report a reproducible failure. | + +Some explicit 503 branches, such as an unavailable random hadith, currently use `INTERNAL_SERVER_ERROR`. Handle HTTP status as well as the code. An unknown hadith book can become 503 after upstream failures instead of 404. Reverse proxies can return their own non-JSON errors. + +The SDK exposes `status`, `code`, `requestId` and `retryAfterMs` on `BonyanApiError`. See [SDK errors](/locales/en/sdk/errors). diff --git a/locales/en/concepts/fallback.mdx b/locales/en/concepts/fallback.mdx new file mode 100644 index 0000000..40bedbb --- /dev/null +++ b/locales/en/concepts/fallback.mdx @@ -0,0 +1,53 @@ +--- +title: "Provider fallback" +description: "Which modules have another source and which details can change." +--- + +Providers are attempted in order on a cache miss. Fallback is a server-side behavior, separate from SDK retries. + +| Module | Source order and limits | +| --- | --- | +| Surah | mp3quran.net, alquran.cloud, quran.com. | +| Ayat | alquran.cloud, then the fawazahmed0 Quran dataset through jsDelivr. | +| Reciters | mp3quran.net, then quran.com. The latter lacks moshaf audio servers. | +| Tafsir | muyassar: alquran.cloud then quranenc.com. jalalayn, waseet and qurtubi: alquran.cloud only. saadi: quranenc.com only. | +| Azkar | Pinned nawafalqari dataset, then hisnmuslim.com. | +| Hadith | hadith.gading.dev, then sutanlab dataset through jsDelivr. | +| Prayer | Aladhan coordinates, Aladhan city if supplied, then pray.zone only for coordinates dated today. | +| Hijri | Aladhan only. | +| Qibla | Aladhan, then local great-circle calculation. | + +## Example: a surah cache miss + +```mermaid +%%{init: {"sequence": {"actorMargin": 24, "width": 100, "diagramMarginX": 8, "mirrorActors": false, "wrap": true}}}%% +sequenceDiagram + participant C as Client + participant A as Bonyan API + participant P as First provider + participant F as Fallback provider + C->>A: GET /surah + Note over A: Cache missing or expired + A->>P: Request data + alt First provider fails + A->>F: Try next provider + alt Fallback returns data + F-->>A: Provider data + A-->>C: 200 JSON + else All attempts fail + A-->>C: 503 JSON + end + else First provider returns data + P-->>A: Provider data + A-->>C: 200 JSON + end +``` + + +The shared HTTP helper uses an 8-second timeout unless overridden. Full-Quran requests use 20 seconds per source; other services use 8..15 seconds. Multiple attempts can outlast the SDK's 10-second default. + +Do not generalize empty-result handling. Several catalogue services reject empty arrays, but some return an empty result if all providers return empty without throwing. Hadith and tafsir use their own loops and do not apply a universal shared emptiness test. + +## Fields to inspect + +Use `apiName` for source attribution and diagnostics. Reciter IDs are source-specific; audio metadata can disappear after a source switch. Tafsir `edition` uses provider identifiers in responses. Prayer fallback can omit method/coordinates and does not forward the chosen Aladhan method to pray.zone. A fixed JSON shape does not guarantee identical content or calculation settings. diff --git a/locales/en/concepts/rate-limit.mdx b/locales/en/concepts/rate-limit.mdx new file mode 100644 index 0000000..7fafe8e --- /dev/null +++ b/locales/en/concepts/rate-limit.mdx @@ -0,0 +1,23 @@ +--- +title: "Rate limits and retries" +description: "Budget requests and configure retry behavior." +--- + +The server defaults to 120 requests per IP in a one-minute window. `RATE_LIMIT_MAX` and `RATE_LIMIT_WINDOW` can change this in a self-hosted deployment. The limit applies globally, including operational routes. + +Treat an HTTP 429 as a request to wait. Respect `Retry-After` when present. Do not retry 400 or 404 unchanged. A cache hit still consumes an incoming API request. + +SDK 1.0.2 retries HTTP 429, HTTP 5xx and network/timeout errors. Its default `retry: 3` allows four total attempts. Without `Retry-After`, retry delays are 100, 200 and 400 milliseconds plus 0..99 milliseconds of jitter. A provided retry header overrides this backoff. + +Use one retry policy in your application. Wrapping SDK calls in another retry loop multiplies attempts. The timeout is per attempt and is not a total operation deadline. + +```ts +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const health = await client.health(); +console.log(health.status); +``` + + +For your own server behind a trusted reverse proxy, review `TRUST_PROXY` before relying on per-user IP limits. See [self-hosting](/locales/en/guides/self-hosting). diff --git a/locales/en/contributing.mdx b/locales/en/contributing.mdx new file mode 100644 index 0000000..bc1160f --- /dev/null +++ b/locales/en/contributing.mdx @@ -0,0 +1,12 @@ +--- +title: "Contribute" +description: "Choose the repository and include reproducible evidence." +--- + +Use [docs](https://github.com/BonyanOSS/docs) for documentation, [Bonyan-API](https://github.com/BonyanOSS/Bonyan-API) for server behavior, and [bonyan-sdk-js](https://github.com/BonyanOSS/bonyan-sdk-js) for the JavaScript client. + +For a documentation correction, include the affected page, the request or method, the expected behavior and the source code or observed response that supports the change. Update the English and Arabic pages together. See [maintaining these docs](/locales/en/guides/maintenance). + +For code changes, fork the repository, make a focused branch and follow that repository's own contribution and test instructions. When adding a provider, preserve the module's response fields and test the failure path as well as the primary path. MIT covers the code; review upstream content terms separately before redistributing data or audio. + +Follow the [community conduct guide](/locales/en/code-of-conduct). Do not include private data in public issues. diff --git a/locales/en/guides/audio.mdx b/locales/en/guides/audio.mdx new file mode 100644 index 0000000..8c1c11b --- /dev/null +++ b/locales/en/guides/audio.mdx @@ -0,0 +1,23 @@ +--- +title: "Play a recitation" +description: "Discover a reciter with audio metadata before requesting a URL." +--- + +Fetch the reciter catalogue and choose an entry with a first moshaf server. Do not assume that a hard-coded reciter ID means the same person across providers. + +```ts +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const reciters = await client.reciters.list(); +const reciter = reciters.find(item => item.moshaf?.[0]?.server); +if (!reciter) throw new Error('No audio-enabled reciter is available'); +const result = await client.reciters.getSurah(reciter.id, 1); +console.log(result.reciter, result.audio); +``` + +Set an HTML audio element's `src` to the returned `audio` URL and show playback controls. The API itself returns JSON; the browser downloads the MP3 from the provider. Handle the audio element's error event and allow the user to choose another reciter. + +The endpoint uses the first moshaf only. There is no public moshaf selector parameter. It constructs `server + paddedSurah + '.mp3'` and does not check the file or the moshaf's surah coverage. A successful API call can still lead to a failed MP3 request. + +When the quran.com fallback supplies the catalogue, audio servers may be absent. Show an unavailable state instead of inventing an audio URL. See [audio endpoint](/locales/en/api-reference/reciters/audio). diff --git a/locales/en/guides/maintenance.mdx b/locales/en/guides/maintenance.mdx new file mode 100644 index 0000000..9e9b303 --- /dev/null +++ b/locales/en/guides/maintenance.mdx @@ -0,0 +1,36 @@ +--- +title: "Maintain these docs" +description: "Keep source contracts, translations and generated pages in sync." +--- + +## Edit the right source + +| Change | File | +| --- | --- | +| Endpoint behavior, parameters and bilingual descriptions | `scripts/api-catalog.mjs` | +| Response fields and translated field descriptions | `scripts/api-schemas.mjs` | +| Endpoint-page rendering | `scripts/generate-api.mjs` | +| Guides | Matching MDX files inside `en/` and `ar/` | +| API indexes and SDK method tables | `scripts/generate-index.mjs` | +| Arabic layout and code direction | `styles.css` | +| Navigation and redirects | `docs.json` | +| Reviewed API / SDK revisions | `sources.lock.json` | + +Run `pnpm generate` after editing API metadata. Commit the generated OpenAPI files and endpoint pages with their sources. Do not hand-edit generated endpoint pages; the check command rejects drift. + +## Before a pull request + +```bash +pnpm install --frozen-lockfile +pnpm check +pnpm build +pnpm broken-links +``` + +The check command validates both OpenAPI documents, compiles MDX, checks internal links and language parity, type-checks SDK code blocks and exercises the search helper with representative responses. It does not prove that external content providers are always available. + +For source changes, run `node scripts/check-source.mjs /path/to/Bonyan-API /path/to/bonyan-sdk-js` against the checked-out revisions. Review changed controllers, services and types before updating the lock. Keep English and Arabic route structures identical, translate explanatory text, and preserve JSON keys and method names. + +Preview with `pnpm dev`. Check Arabic RTL layout, code direction, tables, mobile navigation, diagrams and a generated API page. Publishing uses the existing Mintlify project connection after the repository change is reviewed and merged. + +Local search requires a Mintlify login: run `pnpm exec mintlify login`. Verify search indexing again on the hosted site after publication. diff --git a/locales/en/guides/operations.mdx b/locales/en/guides/operations.mdx new file mode 100644 index 0000000..01d1dfc --- /dev/null +++ b/locales/en/guides/operations.mdx @@ -0,0 +1,25 @@ +--- +title: "Operations and metrics" +description: "Interpret probes, counters and provider failures." +--- + +## Probes + +`/health` confirms that the process responds. `/ready` reports status ready and cache counts. Neither checks upstream providers, so a green readiness response does not imply that every content endpoint works. + +Use a low-frequency content request in addition to probes when you need to monitor provider-backed behavior. Cached content can hide a current upstream outage until it expires. Random endpoints are not deterministic probes. + +## Metrics + +| Metric | Meaning | +| --- | --- | +| bonyan_api_uptime_seconds | Process uptime in seconds. | +| bonyan_api_cache_entries | Stored entries. | +| bonyan_api_cache_inflight | Active cache loaders. | +| bonyan_api_upstream_requests_total | HTTP provider attempts, labeled by host and result. | +| bonyan_api_upstream_failures_total | Failed provider attempts with the same labels. | +| bonyan_api_upstream_duration_ms_sum | Sum of measured request durations in milliseconds. | + +Result labels are `ok`, `http_error` and `error`. Duration is measured by the HTTP helper around fetch, not full JSON parsing or end-to-end client latency. The duration sum is not a histogram and cannot provide latency percentiles. Counters reset with the process; provider series appear after requests occur. + +For a 503, log the HTTP route, status and request ID, then inspect server warnings and upstream counters. Keep monitoring requests inside the configured rate budget. There is no published availability guarantee in this reference. diff --git a/locales/en/guides/self-hosting.mdx b/locales/en/guides/self-hosting.mdx new file mode 100644 index 0000000..e329bf7 --- /dev/null +++ b/locales/en/guides/self-hosting.mdx @@ -0,0 +1,68 @@ +--- +title: "Self-host the API" +description: "Run, configure and verify a Bonyan API instance." +--- + +Use Node.js 22 or later for a new local setup. The API repository currently uses pnpm 10.33.4. Outbound HTTPS access to the configured data providers is required for content requests. No database or provider API key is configured by this server. + +## Local development + +```bash +git clone https://github.com/BonyanOSS/Bonyan-API.git +cd Bonyan-API +corepack enable +corepack prepare pnpm@10.33.4 --activate +pnpm install --frozen-lockfile +pnpm dev +``` + +To override defaults, copy `.env.example` to `.env` before starting: `cp .env.example .env` on Unix, or `Copy-Item .env.example .env` in PowerShell. + +The local base URL is `http://localhost:3000`. The application does not register `/bonyan-api/v1`; add and strip a prefix at your own gateway only if your deployment needs it. + +## Configuration + +```dotenv +PORT=3000 +HOST=0.0.0.0 +RATE_LIMIT_MAX=120 +RATE_LIMIT_WINDOW=1 minute +CORS_ORIGIN=* +TRUST_PROXY=false +LOG_LEVEL=info +CACHE_MAX_ENTRIES=1000 +``` + + +| Variable | Effect | +| --- | --- | +| PORT / HOST | Listener port and bind address. Use 127.0.0.1 for a loopback-only listener. | +| RATE_LIMIT_MAX / RATE_LIMIT_WINDOW | Global per-IP request budget and window. | +| CORS_ORIGIN | `*` or `true` allows reflected origins; otherwise a comma-separated origin list. This setting is not authentication. | +| TRUST_PROXY | Only the exact value `true` enables proxy trust. Enable it only behind a trusted, correctly configured proxy. | +| LOG_LEVEL | Fastify logger level, default info. | +| CACHE_MAX_ENTRIES | Maximum in-process cache entries, default 1000. | + +`NODE_ENV` may be set by the runtime; the server's own configuration logic does not branch on it. Keep positive numeric values for the numeric settings. + +## Build and run + +```bash +pnpm lint:check +pnpm test +pnpm build +pnpm start +``` + +The repository includes a Dockerfile. Build with `docker build -t bonyan-api .`, then run `docker run --rm -p 3000:3000 --env-file .env bonyan-api`. The supplied Dockerfile currently uses Node 20; that is the repository's image choice, not the SDK's runtime requirement. + +## Verify deployment + +```bash +curl --fail-with-body http://localhost:3000/health +curl --fail-with-body http://localhost:3000/ready +curl --fail-with-body http://localhost:3000/tafsir +curl --fail-with-body 'http://localhost:3000/surah/1' +``` + +The first three requests do not prove provider connectivity. The surah request exercises a content provider or existing cache. Scrape `/metrics` as text; health, readiness and metrics are also subject to rate limits. See [operations](/locales/en/guides/operations). diff --git a/locales/en/guides/source-status.mdx b/locales/en/guides/source-status.mdx new file mode 100644 index 0000000..de9ca3c --- /dev/null +++ b/locales/en/guides/source-status.mdx @@ -0,0 +1,27 @@ +--- +title: "Sources and compatibility" +description: "Reviewed revisions, hosted behavior and known implementation differences." +--- + +This documentation was reviewed on 7 September 2026 against: + +| Source | Version | Immutable revision | +| --- | --- | --- | +| Bonyan API | 2.0.0 | [e76bc4e](https://github.com/BonyanOSS/Bonyan-API/tree/e76bc4e114f2f174bc93d0c7f90b163f0721a9f4) | +| JavaScript SDK | 1.0.2 | [068e23c](https://github.com/BonyanOSS/bonyan-sdk-js/tree/068e23cdbaeed8095a99c753b75412897905dd8a) | + +The hosted `/health` and `/ready` routes responded at the root origin during the review. They do not expose a source revision, so these docs do not claim that the deployment matches the repository commit exactly. The package version 2.0.0 is not a `/v2` URL prefix. + +## Known differences + +| Area | Current behavior | +| --- | --- | +| SDK search | The SDK expects a nested search envelope; the server returns a flat one. Use [the adapter](/locales/en/sdk/search). | +| Tafsir IDs | Public IDs are `muyassar`, `jalalayn`, `saadi`, `waseet` and `qurtubi`. Response edition values are provider IDs. | +| Tafsir types | SDK forSurah declares an object-or-array union; this API controller returns an array, even with the aya query. | +| Hadith range | API accepts a difference of 300, meaning 301 inclusive items. SDK checks a 300-item maximum when both bounds are present. | +| Search language | Latin-only queries can normalize to empty. English/fuzzy search claims are not supported by the controller. | +| Prayer fallback | pray.zone is used only for today's coordinate requests and does not receive method. | +| Readiness | Reports process and cache state, not upstream readiness. | + +These are documentation findings, not fixes to the API or SDK repositories. The OpenAPI files describe the reviewed controllers and types; they are maintained here because the API repository's current specification omits detailed response schemas. diff --git a/locales/en/guides/troubleshooting.mdx b/locales/en/guides/troubleshooting.mdx new file mode 100644 index 0000000..535375e --- /dev/null +++ b/locales/en/guides/troubleshooting.mdx @@ -0,0 +1,19 @@ +--- +title: "Troubleshooting" +description: "Diagnose failed requests without guessing at response shapes." +--- + +| Symptom | Check and action | +| --- | --- | +| Every hosted request returns 404 | Use `https://api.bonyanoss.org`; remove the old `/bonyan-api/v1` prefix. | +| Tafsir returns 400 | Get edition IDs from `/tafsir`. Use `muyassar`, not `ar.muyassar`, in the path. | +| SDK search gives undefined fields | Apply the [search helper](/locales/en/sdk/search) for SDK 1.0.2. | +| English search returns unrelated data | Submit Arabic text. Latin-only strings can normalize to an empty match. | +| Audio returns 404 | Choose a reciter with a first moshaf server. The fallback catalogue may omit it. | +| Audio URL exists but playback fails | Inspect the MP3 request itself; the API only constructs the URL. | +| Content request times out | Increase the per-attempt timeout for cold cache loads; avoid multiplying retry loops. | +| Prayer method is absent | Inspect apiName; pray.zone fallback does not forward the Aladhan method. | +| Health is green but content fails | Probe a content route and inspect provider errors. Health does not contact providers. | +| Hadith book returns 503 | Check the book ID against the current catalogue before assuming an outage. | + +When reporting an issue, include the route and query, status, request ID, SDK version and a minimal example. State whether you used the hosted service or your own server. Report API issues in [Bonyan-API](https://github.com/BonyanOSS/Bonyan-API/issues), SDK issues in [bonyan-sdk-js](https://github.com/BonyanOSS/bonyan-sdk-js/issues), and documentation corrections in [docs](https://github.com/BonyanOSS/docs/issues). diff --git a/locales/en/introduction.mdx b/locales/en/introduction.mdx new file mode 100644 index 0000000..0816c60 --- /dev/null +++ b/locales/en/introduction.mdx @@ -0,0 +1,29 @@ +--- +title: "Build with Bonyan" +description: "Quran and Islamic content through an HTTP API and a JavaScript SDK." +--- + +Bonyan API gives your application access to Quran text, tafsir, reciters, azkar, hadith, prayer times, Hijri dates and Qibla direction. The JavaScript and TypeScript SDK wraps the same HTTP endpoints. + + + Fetch a verse, read the response and handle errors. + Install the package and choose the methods you need. + Parameters, response fields and examples for every route. + Configure the server, build it and check its health. + + +## Choose an interface + +| Interface | Use it when | +| --- | --- | +| HTTP API | Your application uses any language with an HTTP client. | +| JavaScript SDK | You want typed methods, validation, timeouts and retries in Node.js or a browser application. | +| Self-hosted API | You need to control deployment, limits and provider configuration. | + +The public base URL is `https://api.bonyanoss.org`. These routes require no API key in the reviewed implementation. The default server limit is 120 requests per minute per IP; a deployment can change it. + +## English and Arabic + +Use the language selector to switch the documentation and navigation. API paths, SDK method names and JSON keys stay the same. Choosing English documentation does **not** translate Quran text, tafsir or hadith. The API has no general `lang` query parameter. + +These docs cover API source version 2.0.0 and SDK 1.0.2. See [source revisions and known differences](/locales/en/guides/source-status). diff --git a/locales/en/openapi.yaml b/locales/en/openapi.yaml new file mode 100644 index 0000000..4dc2c97 --- /dev/null +++ b/locales/en/openapi.yaml @@ -0,0 +1,2614 @@ +# Generated by pnpm generate. Edit scripts/api-catalog.mjs and scripts/api-schemas.mjs. +openapi: 3.1.0 +info: + title: Bonyan API + version: 2.0.0 + description: HTTP API for Quran, tafsir, reciters, azkar, hadith, prayer times, calendars and Qibla. Documentation language does not change content language. + license: + name: MIT + identifier: MIT + x-source-revision: e76bc4e114f2f174bc93d0c7f90b163f0721a9f4 +servers: + - url: https://api.bonyanoss.org + description: Hosted API + - url: http://localhost:3000 + description: Local development +security: [] +paths: + /: + get: + operationId: getCatalogue + tags: + - meta + summary: Route catalogue + description: Lists registered content routes and project metadata. The four operational routes are excluded from the catalogue. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/Catalogue" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /health: + get: + operationId: getHealth + tags: + - meta + summary: Liveness + description: Confirms the HTTP process responds. It does not contact content providers. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/Health" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ready: + get: + operationId: getReady + tags: + - meta + summary: Readiness and cache + description: Returns process readiness and current cache counts. This is not an upstream availability check. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/Ready" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /metrics: + get: + operationId: getMetrics + tags: + - meta + summary: Prometheus metrics + description: Returns uptime, cache gauges and upstream request counters as text. + parameters: [] + responses: + "200": + description: Success + content: + text/plain: + schema: + $ref: "#/components/schemas/Metrics" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /surah: + get: + operationId: listSurahs + tags: + - surah + summary: List surahs + description: Returns the chapter catalogue in data.surah. This endpoint returns names and metadata, not verse text. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/SurahListResponse" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /surah/{id}: + get: + operationId: getSurah + tags: + - surah + summary: Get a surah + description: Returns metadata for one surah. + parameters: + - name: id + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: Surah number, 1 through 114. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/SurahResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /surah/search: + get: + operationId: searchSurahs + tags: + - surah + summary: Search surah names + description: Matches a normalized Arabic substring and returns an array. No matches returns 404. + parameters: + - name: name + in: query + required: true + schema: + type: string + minLength: 1 + example: الفاتحة + description: Arabic name or substring. Use Arabic input; Latin-only input is not a supported search. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/SurahSearchResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ayat: + get: + operationId: listAyat + tags: + - ayat + summary: Full Quran text + description: Returns all available surahs and verses in data.surahs. This is a large response without pagination. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/AyatCorpusResponse" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ayat/{id}: + get: + operationId: getAyaByNumber + tags: + - ayat + summary: Aya by global number + description: Looks up a verse by its global Quran number, rather than its position within a surah. + parameters: + - name: id + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 6236 + example: 1 + description: Global verse number, 1 through 6236. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/AyaLookupResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ayat/{surah}/aya/{id}: + get: + operationId: getAyaBySurah + tags: + - ayat + summary: Aya within a surah + description: Returns one verse with its surah number and name. + parameters: + - name: surah + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: Surah number, 1 through 114. + - name: id + in: path + required: true + schema: + type: integer + minimum: 1 + example: 1 + description: Verse number within the surah. An empty lookup returns 404; tafsir provider rejection can instead produce 503 when every configured source fails. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/AyaLookupResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /ayat/search: + get: + operationId: searchAyat + tags: + - ayat + summary: Search Quran text + description: |- + Returns {success, total, data: [...]}. total counts returned matches after the limit, not all matches in the Quran. + + SDK 1.0.2 has an envelope mismatch in client.ayat.search(). Use the fetch example here or the compatibility helper in the SDK guide. + parameters: + - name: text + in: query + required: true + schema: + type: string + minLength: 1 + example: الرحمن + description: Arabic substring, URL-encoded. Blank input returns 400. + - name: limit + in: query + required: false + schema: + type: integer + default: 50 + minimum: 1 + maximum: 500 + example: 10 + description: Result cap, not pagination. The server clamps to 1..500; zero or an unparsable value falls back to 50. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/AyaSearchResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /reciters: + get: + operationId: listReciters + tags: + - reciters + summary: List reciters + description: Returns reciters in data.reciters. The fallback provider may omit moshaf and audio-server information. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/ReciterCollectionResponse" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /reciters/{id}: + get: + operationId: getReciter + tags: + - reciters + summary: Get a reciter + description: Looks up an ID in the currently cached provider catalogue. + parameters: + - name: id + in: path + required: true + schema: + type: integer + example: 1 + description: ID returned by the reciter catalogue. IDs depend on the provider. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/ReciterResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /reciters/search: + get: + operationId: searchReciters + tags: + - reciters + summary: Search reciter names + description: Returns matching reciters using Arabic substring matching. This is not fuzzy or English-language search. + parameters: + - name: name + in: query + required: true + schema: + type: string + minLength: 1 + example: العفاسي + description: Arabic name or substring. Use Arabic input; Latin-only input is not a supported search. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/ReciterSearchResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /reciters/{id}/surah/{surah}: + get: + operationId: getReciterAudio + tags: + - reciters + summary: Surah audio URL + description: |- + Builds a URL from the first moshaf server and a three-digit surah number. Returns JSON, not an audio stream. + + The API does not verify that the MP3 exists. A reciter from quran.com may have no moshaf, causing 404. Discover a reciter with moshaf before requesting audio. + parameters: + - name: id + in: path + required: true + schema: + type: integer + example: 1 + description: ID returned by the reciter catalogue. IDs depend on the provider. + - name: surah + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: Surah number, 1 through 114. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/ReciterAudioResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /tafsir: + get: + operationId: listTafsirEditions + tags: + - tafsir + summary: Tafsir editions + description: Lists the five configured public edition IDs and Arabic labels. The catalogue is local; it does not test provider availability. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/TafsirEditionListResponse" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /tafsir/{edition}/{surah}: + get: + operationId: getSurahTafsir + tags: + - tafsir + summary: Tafsir for a surah + description: Returns an array, including when the optional aya filter selects one verse. Returned edition is a provider-specific ID. + parameters: + - name: edition + in: path + required: true + schema: + type: string + enum: + - muyassar + - jalalayn + - saadi + - waseet + - qurtubi + example: muyassar + description: Public edition ID from GET /tafsir. Use muyassar, not ar.muyassar. + - name: surah + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: Surah number, 1 through 114. + - name: aya + in: query + required: false + schema: + type: integer + minimum: 1 + example: 1 + description: Optional verse within the surah. The response remains an array. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/TafsirListResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /tafsir/{edition}/{surah}/{aya}: + get: + operationId: getAyaTafsir + tags: + - tafsir + summary: Tafsir for an aya + description: Returns one tafsir object. muyassar can use two sources; the other configured editions each have one source. + parameters: + - name: edition + in: path + required: true + schema: + type: string + enum: + - muyassar + - jalalayn + - saadi + - waseet + - qurtubi + example: muyassar + description: Public edition ID from GET /tafsir. Use muyassar, not ar.muyassar. + - name: surah + in: path + required: true + schema: + type: integer + minimum: 1 + maximum: 114 + example: 1 + description: Surah number, 1 through 114. + - name: aya + in: path + required: true + schema: + type: integer + minimum: 1 + example: 1 + description: Verse number within the surah. An empty lookup returns 404; tafsir provider rejection can instead produce 503 when every configured source fails. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/TafsirItemResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /azkar: + get: + operationId: listAzkarCategories + tags: + - azkar + summary: Azkar categories + description: Lists category names, item counts and sources in data.categories. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/AzkarCategorySummaryResponse" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /azkar/{category}: + get: + operationId: getAzkarCategory + tags: + - azkar + summary: Azkar in a category + description: Returns the first category whose normalized Arabic name contains the supplied value. Use the full name from the catalogue to avoid ambiguous matches. + parameters: + - name: category + in: path + required: true + schema: + type: string + minLength: 1 + example: أذكار الصباح + description: Arabic category name, URL-encoded as one path segment. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/AzkarCategoryResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /azkar/search: + get: + operationId: searchAzkar + tags: + - azkar + summary: Search azkar text + description: |- + Returns {success, total, data: [...]}, with category and item for each hit. total is the number returned, capped by limit. + + SDK 1.0.2 has an envelope mismatch in client.azkar.search(). Use fetch or the compatibility helper in the SDK guide. + parameters: + - name: text + in: query + required: true + schema: + type: string + minLength: 1 + example: الله + description: Arabic substring, URL-encoded. Blank input returns 400. + - name: limit + in: query + required: false + schema: + type: integer + default: 50 + minimum: 1 + maximum: 200 + example: 10 + description: Result cap, not pagination. The server clamps to 1..200; zero or an unparsable value falls back to 50. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/AzkarSearchResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /azkar/random: + get: + operationId: getRandomZekr + tags: + - azkar + summary: Random zekr + description: Chooses one item from all cached categories. Random selection happens per request. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/AzkarPickResponse" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hadith: + get: + operationId: listHadithBooks + tags: + - hadith + summary: Hadith books + description: Returns book IDs, names and available counts from the active provider. Discover IDs here instead of assuming a fixed list. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/HadithBookListResponse" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hadith/{book}: + get: + operationId: getHadithBook + tags: + - hadith + summary: Hadith range + description: |- + Returns book, available and hadiths inside data. Both range endpoints are inclusive; omitted from defaults to 1 and omitted to defaults to from + 29. + + The API currently rejects to - from > 300, so it accepts 301 inclusive items. SDK 1.0.2 rejects more than 300 when both bounds are supplied. Use 300 or fewer for compatibility. An empty range can return 200 with hadiths: []. + parameters: + - name: book + in: path + required: true + schema: + type: string + minLength: 1 + example: bukhari + description: Book ID from GET /hadith. Unknown IDs can return 503 when both providers reject them. + - name: from + in: query + required: false + schema: + type: integer + minimum: 1 + default: 1 + example: 1 + description: First hadith number, inclusive. + - name: to + in: query + required: false + schema: + type: integer + minimum: 1 + example: 30 + description: "Last hadith number, inclusive. Use at most 300 items: to = from + 299." + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/HadithListResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hadith/{book}/{number}: + get: + operationId: getHadith + tags: + - hadith + summary: Get a hadith + description: Returns a narration by its book-local number. The response has no grading or chain-of-transmission fields. + parameters: + - name: book + in: path + required: true + schema: + type: string + minLength: 1 + example: bukhari + description: Book ID from GET /hadith. Unknown IDs can return 503 when both providers reject them. + - name: number + in: path + required: true + schema: + type: integer + minimum: 1 + example: 1 + description: Positive hadith number within the book. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/HadithResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hadith/random: + get: + operationId: getRandomHadith + tags: + - hadith + summary: Random hadith + description: Picks a book, then a number from its available count. Optionally restrict the book. The result contains book and hadith. + parameters: + - name: book + in: query + required: false + schema: + type: string + example: bukhari + description: Optional exact book ID. An unknown ID returns 404. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/RandomHadithResponse" + "404": + description: Requested item or matching result was not found. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /prayer/times: + get: + operationId: getPrayerTimes + tags: + - prayer + summary: Prayer times + description: |- + Provide latitude + longitude or city + country. With both pairs, Aladhan coordinates are tried before Aladhan city lookup. + + pray.zone fallback is available only for coordinate requests dated today on the API server. It does not receive method, and may omit method and coordinates. Inspect apiName before assuming identical calculation settings. This controller validates numeric coordinates but does not enforce geographic bounds; SDK validation does. + parameters: + - name: date + in: query + required: false + schema: + type: string + pattern: ^\d{2}-\d{2}-\d{4}$ + example: 01-01-2026 + description: Gregorian date in DD-MM-YYYY. Omitted or blank uses the API server’s current date. Validation checks the format, not calendar validity. + - name: latitude + in: query + required: false + schema: + type: number + example: 21.4225 + description: Latitude in decimal degrees; provide it together with longitude. + - name: longitude + in: query + required: false + schema: + type: number + example: 39.8262 + description: Longitude in decimal degrees; provide it together with latitude. + - name: city + in: query + required: false + schema: + type: string + example: Mecca + description: Required with country when coordinates are not supplied. + - name: country + in: query + required: false + schema: + type: string + example: SA + description: Country for city lookup. Send together with city. + - name: method + in: query + required: false + schema: + type: integer + example: 4 + description: Aladhan calculation method ID. Omitted uses the provider default. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/PrayerTimesResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hijri/today: + get: + operationId: getToday + tags: + - hijri + summary: Today in both calendars + description: Converts the API server’s current Gregorian date through Aladhan. It does not use the browser’s timezone. + parameters: [] + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/HijriResponse" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hijri/from-gregorian: + get: + operationId: fromGregorian + tags: + - hijri + summary: Gregorian to Hijri + description: Returns both calendar representations. Aladhan is the only configured source. + parameters: + - name: date + in: query + required: false + schema: + type: string + pattern: ^\d{2}-\d{2}-\d{4}$ + example: 01-01-2026 + description: Gregorian date in DD-MM-YYYY. Omitted or blank uses the API server’s current date. Validation checks the format, not calendar validity. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/HijriResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /hijri/to-gregorian: + get: + operationId: toGregorian + tags: + - hijri + summary: Hijri to Gregorian + description: Converts a required Hijri date. Returned month and weekday names come from the provider. + parameters: + - name: date + in: query + required: true + schema: + type: string + pattern: ^\d{2}-\d{2}-\d{4}$ + example: 01-09-1447 + description: Hijri date in DD-MM-YYYY. Required. Validation checks the format, not calendar validity. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/HijriResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + /qibla: + get: + operationId: getQibla + tags: + - qibla + summary: Qibla direction + description: |- + Returns degrees clockwise from true north. Tries Aladhan, then calculates the great-circle bearing locally. + + This is a geographic bearing, not a device compass reading. Magnetic declination and device orientation are outside this endpoint. + parameters: + - name: latitude + in: query + required: true + schema: + type: number + minimum: -90 + maximum: 90 + example: 21.4225 + description: Latitude in decimal degrees; provide it together with longitude. + - name: longitude + in: query + required: true + schema: + type: number + minimum: -180 + maximum: 180 + example: 39.8262 + description: Longitude in decimal degrees; provide it together with latitude. + responses: + "200": + description: Success + content: + application/json: + schema: + $ref: "#/components/schemas/QiblaResponse" + "400": + description: Invalid or missing input. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "429": + description: Request rate exceeded. Respect Retry-After when present. + headers: + Retry-After: + description: Wait duration in seconds, when supplied. + schema: + type: string + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "500": + description: Unexpected server error. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" + "503": + description: No result could be obtained from configured sources. + content: + application/json: + schema: + $ref: "#/components/schemas/Error" +components: + schemas: + Catalogue: + type: object + required: + - name + - description + - routes + properties: + name: + type: string + description: Service name. + description: + type: string + description: Service description. + routes: + type: array + items: + type: object + required: + - method + - url + properties: + method: + oneOf: + - type: string + - type: array + items: + type: string + url: + type: string + description: Registered route; path parameters use :name syntax. + schema: {} + Health: + type: object + required: + - status + - code + - timestamp + properties: + status: + type: string + const: ok + code: + type: integer + const: 200 + timestamp: + type: string + description: Current server time in ISO 8601. + format: date-time + Cache: + type: object + required: + - entries + - inflight + properties: + entries: + type: integer + description: Stored cache entries, including entries not yet evicted. + inflight: + type: integer + description: Cache loads currently in flight. + Ready: + type: object + required: + - status + - code + - timestamp + - cache + properties: + status: + type: string + const: ready + code: + type: integer + const: 200 + timestamp: + type: string + description: Current server time. + format: date-time + cache: + $ref: "#/components/schemas/Cache" + Metrics: + type: string + Error: + type: object + required: + - success + - message + - error + properties: + success: + type: boolean + const: false + message: + type: string + description: Human-readable error. Do not parse it for control flow. + error: + type: object + required: + - code + - message + - requestId + properties: + code: + type: string + description: Machine-readable code. Explicit 503 failures can use INTERNAL_SERVER_ERROR; exhausted sources use ALL_SOURCES_FAILED. + enum: + - BAD_REQUEST + - NOT_FOUND + - RATE_LIMITED + - ALL_SOURCES_FAILED + - INTERNAL_SERVER_ERROR + message: + type: string + description: Error message. + requestId: + type: string + description: Request identifier for troubleshooting. + Surah: + type: object + required: + - id + - name + - apiName + properties: + id: + type: integer + description: Surah number. + minimum: 1 + maximum: 114 + name: + type: string + description: Surah name from the provider. + makkia: + type: boolean + description: Whether the surah is Meccan, when supplied. + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - mp3quran.net + - alquran.cloud + - quran.com + Aya: + type: object + required: + - number + - text + - numberInSurah + properties: + number: + type: integer + description: Global verse number. + text: + type: string + description: Source text as returned by the API. Documentation language does not translate content. + numberInSurah: + type: integer + description: Verse number within its surah. + SurahWithAyat: + type: object + required: + - number + - name + - ayat + - apiName + properties: + number: + type: integer + description: Surah number. + name: + type: string + description: Surah name. + ayat: + type: array + items: + $ref: "#/components/schemas/Aya" + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - alquran.cloud + - cdn.jsdelivr.net/fawazahmed0/quran-api + AyaLookup: + type: object + required: + - surahNumber + - surahName + - aya + properties: + surahNumber: + type: integer + description: Surah number. + surahName: + type: string + description: Surah name. + aya: + $ref: "#/components/schemas/Aya" + Moshaf: + type: object + required: + - id + - name + - server + properties: + id: + type: integer + description: Provider moshaf ID. + name: + type: string + description: Moshaf name. + server: + type: string + description: Base audio-server URL. + format: uri + Reciter: + type: object + required: + - id + - name + - apiName + properties: + id: + type: integer + description: Provider-specific reciter ID. + name: + type: string + description: Reciter name. + date: + type: string + description: Provider date metadata. + moshaf: + type: array + items: + $ref: "#/components/schemas/Moshaf" + style: + type: + - string + - "null" + description: Recitation style, when provided. + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - mp3quran.net + - quran.com + ReciterAudio: + type: object + required: + - reciter + - surah + - audio + properties: + reciter: + type: string + description: Reciter name. + surah: + type: integer + description: Surah number. + audio: + type: string + description: Constructed MP3 URL; file availability is not checked. + format: uri + TafsirEdition: + type: object + required: + - id + - label + properties: + id: + type: string + description: Public edition key accepted in paths. + enum: + - muyassar + - jalalayn + - saadi + - waseet + - qurtubi + label: + type: string + description: Arabic edition name. + TafsirItem: + type: object + required: + - surah + - aya + - text + - edition + - apiName + properties: + surah: + type: integer + description: Surah number. + aya: + type: integer + description: Verse number within the surah. + text: + type: string + description: Source text as returned by the API. Documentation language does not translate content. + edition: + type: string + description: Provider edition ID, for example ar.muyassar or arabic_moyassar. This differs from the public path ID. + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - alquran.cloud + - quranenc.com + AzkarCategorySummary: + type: object + required: + - name + - count + - apiName + properties: + name: + type: string + description: Category name. + count: + type: integer + description: Number of items in this category. + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - github.com/nawafalqari + - hisnmuslim.com + AzkarItem: + type: object + required: + - id + - text + properties: + id: + type: integer + description: Item ID within its source/category; not a global ID. + text: + type: string + description: Source text as returned by the API. Documentation language does not translate content. + count: + type: integer + description: Suggested repetitions, when supplied. + reference: + type: string + description: Source reference, when supplied. + description: + type: string + description: Additional source description. + content: + type: string + description: Additional source content. + AzkarCategory: + type: object + required: + - category + - items + - apiName + properties: + category: + type: string + description: Category name. + items: + type: array + items: + $ref: "#/components/schemas/AzkarItem" + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - github.com/nawafalqari + - hisnmuslim.com + AzkarPick: + type: object + required: + - category + - item + properties: + category: + type: string + description: Category name. + item: + $ref: "#/components/schemas/AzkarItem" + HadithBook: + type: object + required: + - id + - name + - available + - apiName + properties: + id: + type: string + description: Book ID used in requests. + name: + type: string + description: Book name. + available: + type: integer + description: Provider-reported number of narrations. + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - hadith.gading.dev + - cdn.jsdelivr.net/sutanlab/hadith-api + Hadith: + type: object + required: + - number + - text + - book + - apiName + properties: + number: + type: integer + description: Hadith number within the book. + text: + type: string + description: Source text as returned by the API. Documentation language does not translate content. + book: + type: string + description: Book name returned by the provider. + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - hadith.gading.dev + - cdn.jsdelivr.net/sutanlab/hadith-api + HadithRange: + type: object + required: + - book + - available + - hadiths + properties: + book: + type: string + description: Book name. + available: + type: integer + description: Available count for the whole book, not the returned slice. + hadiths: + type: array + items: + $ref: "#/components/schemas/Hadith" + PrayerTimings: + type: object + required: + - Fajr + - Dhuhr + - Asr + - Maghrib + - Isha + properties: + Fajr: + type: string + description: Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp. + Sunrise: + type: string + description: Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp. + Dhuhr: + type: string + description: Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp. + Asr: + type: string + description: Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp. + Sunset: + type: string + description: Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp. + Maghrib: + type: string + description: Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp. + Isha: + type: string + description: Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp. + Imsak: + type: string + description: Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp. + Midnight: + type: string + description: Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp. + Coordinates: + type: object + required: + - latitude + - longitude + properties: + latitude: + type: number + description: Latitude in degrees. + longitude: + type: number + description: Longitude in degrees. + PrayerTimes: + type: object + required: + - date + - timings + - apiName + properties: + date: + type: string + description: Gregorian date in the provider’s format. + hijri: + type: string + description: Hijri date in the provider’s format. + timings: + $ref: "#/components/schemas/PrayerTimings" + method: + type: string + description: Calculation method name, if supplied. + coordinates: + $ref: "#/components/schemas/Coordinates" + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - aladhan.com + - pray.zone + HijriDate: + type: object + required: + - hijri + - gregorian + - apiName + properties: + hijri: + type: object + required: + - date + - day + - month + - monthAr + - year + - weekday + - weekdayAr + properties: + date: + type: string + description: Hijri date. + day: + type: string + description: Day as a string. + month: + type: string + description: Month name. + monthAr: + type: string + description: Arabic month name. + year: + type: string + description: Year as a string. + weekday: + type: string + description: Weekday name. + weekdayAr: + type: string + description: Arabic weekday name. + gregorian: + type: object + required: + - date + - day + - month + - year + properties: + date: + type: string + description: Gregorian date. + day: + type: string + description: Day as a string. + month: + type: string + description: Month name. + year: + type: string + description: Year as a string. + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - aladhan.com + Qibla: + type: object + required: + - latitude + - longitude + - direction + - apiName + properties: + latitude: + type: number + description: Latitude in degrees. + longitude: + type: number + description: Longitude in degrees. + direction: + type: number + description: Degrees clockwise from true north toward the Kaaba. + apiName: + type: string + description: Provider that supplied this result. Optional fields may vary by provider. + enum: + - aladhan.com + - local + SurahListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - surah + properties: + surah: + type: array + items: + $ref: "#/components/schemas/Surah" + SurahResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/Surah" + SurahSearchResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/Surah" + AyatCorpusResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - surahs + properties: + surahs: + type: array + items: + $ref: "#/components/schemas/SurahWithAyat" + AyaLookupResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/AyaLookup" + ReciterCollectionResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - reciters + properties: + reciters: + type: array + items: + $ref: "#/components/schemas/Reciter" + ReciterResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/Reciter" + ReciterSearchResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/Reciter" + ReciterAudioResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/ReciterAudio" + TafsirEditionListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/TafsirEdition" + TafsirListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/TafsirItem" + TafsirItemResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/TafsirItem" + AzkarCategorySummaryResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - categories + properties: + categories: + type: array + items: + $ref: "#/components/schemas/AzkarCategorySummary" + AzkarCategoryResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/AzkarCategory" + AzkarPickResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/AzkarPick" + HadithBookListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: array + items: + $ref: "#/components/schemas/HadithBook" + HadithResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/Hadith" + RandomHadithResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + type: object + required: + - book + - hadith + properties: + book: + type: string + description: Book name. + hadith: + $ref: "#/components/schemas/Hadith" + HadithListResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/HadithRange" + PrayerTimesResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/PrayerTimes" + HijriResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/HijriDate" + QiblaResponse: + type: object + required: + - success + - data + properties: + success: + type: boolean + const: true + data: + $ref: "#/components/schemas/Qibla" + AyaSearchResponse: + type: object + required: + - success + - total + - data + properties: + success: + type: boolean + const: true + total: + type: integer + description: Returned count after the limit. + data: + type: array + items: + $ref: "#/components/schemas/AyaLookup" + AzkarSearchResponse: + type: object + required: + - success + - total + - data + properties: + success: + type: boolean + const: true + total: + type: integer + description: Returned count after the limit. + data: + type: array + items: + $ref: "#/components/schemas/AzkarPick" diff --git a/locales/en/quickstart.mdx b/locales/en/quickstart.mdx new file mode 100644 index 0000000..9cd7eb4 --- /dev/null +++ b/locales/en/quickstart.mdx @@ -0,0 +1,53 @@ +--- +title: "First request" +description: "Fetch one verse using cURL, fetch or the SDK." +--- + +## 1. Call the API + +```bash +curl --fail-with-body 'https://api.bonyanoss.org/ayat/1' +``` + +Use `curl.exe` in Windows PowerShell if `curl` resolves to a PowerShell alias. The hosted URL has no `/bonyan-api/v1` prefix. For a local server, replace the origin with `http://localhost:3000`. + +## 2. Read the result + +A successful verse lookup contains `success: true` and `data`. Read the text at `data.aya.text`. `aya.number` is the global verse number; `aya.numberInSurah` is its position inside the surah. + +```js +const response = await fetch("https://api.bonyanoss.org/ayat/1", { + signal: AbortSignal.timeout(45000), +}); +const body = await response.json(); +if (!response.ok || body.success !== true) { + throw new Error(body.error?.message ?? body.message ?? "HTTP " + response.status); +} +console.log(body.data.aya.text); +``` + +This example gives cold provider requests 45 seconds. The SDK's default timeout is 10 seconds per attempt; that can be shorter than a full provider fallback sequence. + +## 3. Use the SDK in Node.js + +Use Node.js 22 or later and an ESM file such as `example.mjs`. + +```bash +npm install @bonyanoss/bonyan-api@1.0.2 +``` + +```ts +import { BonyanClient } from "@bonyanoss/bonyan-api"; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const result = await client.ayat.getById(1); +console.log(result.aya.text); +``` + +The SDK removes the success envelope, so use `result.aya.text`, without `result.data`. + +## 4. Handle failures + +HTTP 400 means invalid input. A lookup or search without a match may return 404. HTTP 429 means the request limit was reached. HTTP 503 means the server could not produce the result. See [error handling](/locales/en/concepts/errors) and [SDK errors](/locales/en/sdk/errors). + +Continue with [all endpoints](/locales/en/api-reference/overview), [SDK methods](/locales/en/sdk/resources), or [audio playback](/locales/en/guides/audio). diff --git a/locales/en/sdk/configuration.mdx b/locales/en/sdk/configuration.mdx new file mode 100644 index 0000000..7a07b91 --- /dev/null +++ b/locales/en/sdk/configuration.mdx @@ -0,0 +1,33 @@ +--- +title: "Client configuration" +description: "Base URL, timeout, retries, headers and custom fetch." +--- + +```ts +import { BonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ + baseUrl: 'https://api.bonyanoss.org', + timeoutMs: 45000, + retry: 1, + headers: { 'X-Application': 'my-app' }, + fetch: globalThis.fetch.bind(globalThis), +}); +console.log(await client.health()); +``` + + +| Option | Default | Meaning | +| --- | --- | --- | +| `baseUrl` | `https://api.bonyanoss.org` | Origin and optional deployment prefix; trailing slashes are removed. | +| `timeoutMs` | `10000` | Timeout in milliseconds for each attempt. | +| `retry` | `3` | Retries after the initial request. Use a nonnegative integer; 0 disables retries. | +| `headers` | `Accept: application/json` | Extra headers merged over defaults. | +| `fetch` | Global fetch | Replacement with the standard fetch signature, useful for tests and controlled transport. | +| `userAgent` | Unset | Optional User-Agent header; browser behavior is platform-dependent. | + +For a gateway mounted at a prefix, pass the full prefix in `baseUrl`. The SDK appends its resource paths. The public deployment reviewed here needs no prefix. + +Resource methods do not expose per-call timeout, headers or AbortSignal options in 1.0.2. Those options exist in the internal HTTP client but are not part of the exported resource methods. Use separate clients for different timeout policies or use fetch when you need per-request cancellation. + +The SDK has no response cache, authentication flow or runtime schema validation of every returned field. TypeScript declarations describe the expected data; validate fields your application relies on. diff --git a/locales/en/sdk/errors.mdx b/locales/en/sdk/errors.mdx new file mode 100644 index 0000000..3e95a77 --- /dev/null +++ b/locales/en/sdk/errors.mdx @@ -0,0 +1,38 @@ +--- +title: "SDK errors" +description: "Distinguish input, HTTP and transport failures." +--- + +```ts +import { + BonyanClient, BonyanApiError, BonyanRequestError, ValidationError, +} from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ retry: 1, timeoutMs: 45000 }); +try { + console.log(await client.surah.getById(1)); +} catch (error) { + if (error instanceof ValidationError) { + console.error(error.field, error.message); + } else if (error instanceof BonyanApiError) { + console.error(error.status, error.code, error.requestId, error.retryAfterMs); + } else if (error instanceof BonyanRequestError) { + console.error(error.message, error.cause); + } else { + throw error; + } +} +``` + + +| Error class | Meaning | Fields | +| --- | --- | --- | +| `ValidationError` | Rejected argument before HTTP is sent. | `field`, `message` | +| `BonyanApiError` | A non-2xx HTTP response, after configured retries. | `status`, `statusText`, `code`, `requestId`, `retryAfterMs`, `body` | +| `BonyanRequestError` | Network/timeout failure or an unexpected response envelope. | `message`, `cause` | + +The package also exports `isValidationError`, `isBonyanApiError` and `isBonyanRequestError` type guards. Error metadata such as code and request ID can be absent when a proxy supplies the error. + +Input validation is stricter than some API controllers: SDK verse numbers within a surah are limited to 1..286, coordinates are bounded, and explicit hadith ranges are capped at 300 items. A valid SDK input can still return 404 or 503 from the server. + +See [retry behavior](/locales/en/concepts/rate-limit). Avoid another automatic retry loop around SDK calls unless you account for its existing attempts. diff --git a/locales/en/sdk/overview.mdx b/locales/en/sdk/overview.mdx new file mode 100644 index 0000000..591db4d --- /dev/null +++ b/locales/en/sdk/overview.mdx @@ -0,0 +1,49 @@ +--- +title: "JavaScript and TypeScript SDK" +description: "Install SDK 1.0.2 and understand its return values." +--- + +The official package is `@bonyanoss/bonyan-api`. It supports ESM and CommonJS, includes TypeScript types, and declares Node.js 22 or later. Browser applications need fetch, AbortController and URL APIs; use your application's bundler. + +```bash +npm install @bonyanoss/bonyan-api@1.0.2 +``` + + +```ts +import { BonyanClient, createBonyanClient } from '@bonyanoss/bonyan-api'; + +const client = new BonyanClient({ timeoutMs: 45000, retry: 1 }); +const surahs = await client.surah.list(); +console.log(surahs[0]?.name); + +const local = createBonyanClient({ baseUrl: 'http://localhost:3000' }); +console.log(await local.health()); +``` + +`createBonyanClient(options)` is equivalent to `new BonyanClient(options)`. Reuse one client for a given configuration. + +## Return values + +Most resource methods remove `{ success, data }`. List methods also extract their list: `surah.list()` returns the array at `data.surah`, and `reciters.list()` returns `data.reciters`. Do not add another `.data` access. + +Operational methods return their raw JSON object; `metrics()` returns text. No method sends a write request. + + +In version 1.0.2, `ayat.search()` and `azkar.search()` expect a different envelope from the current API. Their typed result can contain undefined fields at runtime. Use the [search helper](/locales/en/sdk/search) until the package fixes that mismatch. + + +## CommonJS + +```js +const { BonyanClient } = require('@bonyanoss/bonyan-api'); + +async function main() { + const client = new BonyanClient(); + console.log(await client.health()); +} +main().catch(console.error); +``` + + +Continue with [configuration](/locales/en/sdk/configuration), [method reference](/locales/en/sdk/resources) or [error handling](/locales/en/sdk/errors). diff --git a/locales/en/sdk/resources.mdx b/locales/en/sdk/resources.mdx new file mode 100644 index 0000000..f7c543d --- /dev/null +++ b/locales/en/sdk/resources.mdx @@ -0,0 +1,95 @@ +--- +title: "SDK method reference" +description: "Resource methods, signatures and return types." +--- + +Every method below is called on `client` and returns a Promise of the listed type. `?` denotes an optional argument or option; table signatures are shorthand, not copyable code. + +Numeric arguments are JavaScript numbers; names, queries, book IDs and edition IDs are strings. Dates use `DD-MM-YYYY`. prayer.getTimes accepts coordinates or city/country, plus optional date and method. + + +The ayat and azkar search methods in 1.0.2 do not match the current API envelope. Their declared types do not make their runtime result valid. [Search adapter](/locales/en/sdk/search). + + +## Service operations + +| Method | Result type | HTTP | +| --- | --- | --- | +| `routes()` | `BonyanRouteCatalogue` | [`GET /`](/locales/en/api-reference/meta/catalogue) | +| `health()` | `HealthStatus` | [`GET /health`](/locales/en/api-reference/meta/health) | +| `ready()` | `ReadyStatus` | [`GET /ready`](/locales/en/api-reference/meta/ready) | +| `metrics()` | `string` | [`GET /metrics`](/locales/en/api-reference/meta/metrics) | + +## Surah metadata + +| Method | Result type | HTTP | +| --- | --- | --- | +| `surah.list()` | `Surah[]` | [`GET /surah`](/locales/en/api-reference/surah/list) | +| `surah.getById(id)` | `Surah` | [`GET /surah/{id}`](/locales/en/api-reference/surah/get) | +| `surah.search(name)` | `Surah[]` | [`GET /surah/search`](/locales/en/api-reference/surah/search) | + +## Quran text + +| Method | Result type | HTTP | +| --- | --- | --- | +| `ayat.list()` | `SurahWithAyat[]` | [`GET /ayat`](/locales/en/api-reference/ayat/all) | +| `ayat.getById(id)` | `AyaWithSurah` | [`GET /ayat/{id}`](/locales/en/api-reference/ayat/get-by-number) | +| `ayat.getBySurah(surah, aya)` | `AyaWithSurah` | [`GET /ayat/{surah}/aya/{id}`](/locales/en/api-reference/ayat/get-by-surah-aya) | +| `ayat.search(text, { limit? }?)` | `AyatSearchResult` | [`GET /ayat/search`](/locales/en/api-reference/ayat/search) | + +## Reciters and audio + +| Method | Result type | HTTP | +| --- | --- | --- | +| `reciters.list()` | `Reciter[]` | [`GET /reciters`](/locales/en/api-reference/reciters/list) | +| `reciters.getById(id)` | `Reciter` | [`GET /reciters/{id}`](/locales/en/api-reference/reciters/get) | +| `reciters.search(name)` | `Reciter[]` | [`GET /reciters/search`](/locales/en/api-reference/reciters/search) | +| `reciters.getSurah(reciterId, surah)` | `ReciterAudio` | [`GET /reciters/{id}/surah/{surah}`](/locales/en/api-reference/reciters/audio) | + +## Tafsir + +| Method | Result type | HTTP | +| --- | --- | --- | +| `tafsir.listEditions()` | `TafsirEdition[]` | [`GET /tafsir`](/locales/en/api-reference/tafsir/editions) | +| `tafsir.forSurah(edition, surah, { aya? }?)` | `TafsirItem[] \| TafsirItem` | [`GET /tafsir/{edition}/{surah}`](/locales/en/api-reference/tafsir/surah) | +| `tafsir.forAya(edition, surah, aya)` | `TafsirItem` | [`GET /tafsir/{edition}/{surah}/{aya}`](/locales/en/api-reference/tafsir/aya) | + +## Azkar + +| Method | Result type | HTTP | +| --- | --- | --- | +| `azkar.listCategories()` | `AzkarCategorySummary[]` | [`GET /azkar`](/locales/en/api-reference/azkar/categories) | +| `azkar.getByCategory(category)` | `AzkarCategory` | [`GET /azkar/{category}`](/locales/en/api-reference/azkar/category) | +| `azkar.search(text, { limit? }?)` | `AzkarSearchResult` | [`GET /azkar/search`](/locales/en/api-reference/azkar/search) | +| `azkar.random()` | `{ category: string; item: AzkarItem }` | [`GET /azkar/random`](/locales/en/api-reference/azkar/random) | + +## Hadith + +| Method | Result type | HTTP | +| --- | --- | --- | +| `hadith.listBooks()` | `HadithBook[]` | [`GET /hadith`](/locales/en/api-reference/hadith/books) | +| `hadith.getBook(bookId, { from?, to? }?)` | `HadithBookContent` | [`GET /hadith/{book}`](/locales/en/api-reference/hadith/book) | +| `hadith.getByNumber(bookId, number)` | `HadithItem` | [`GET /hadith/{book}/{number}`](/locales/en/api-reference/hadith/get) | +| `hadith.random({ book? }?)` | `HadithRandomResult` | [`GET /hadith/random`](/locales/en/api-reference/hadith/random) | + +## Prayer times + +| Method | Result type | HTTP | +| --- | --- | --- | +| `prayer.getTimes(options)` | `PrayerTimings` | [`GET /prayer/times`](/locales/en/api-reference/prayer/times) | + +## Hijri calendar + +| Method | Result type | HTTP | +| --- | --- | --- | +| `hijri.today()` | `HijriDate` | [`GET /hijri/today`](/locales/en/api-reference/hijri/today) | +| `hijri.fromGregorian(date?)` | `HijriDate` | [`GET /hijri/from-gregorian`](/locales/en/api-reference/hijri/from-gregorian) | +| `hijri.toGregorian(date)` | `HijriDate` | [`GET /hijri/to-gregorian`](/locales/en/api-reference/hijri/to-gregorian) | + +## Qibla + +| Method | Result type | HTTP | +| --- | --- | --- | +| `qibla.getDirection(latitude, longitude)` | `QiblaInfo` | [`GET /qibla`](/locales/en/api-reference/qibla/direction) | + +This API always returns an array for forSurah; the SDK declaration is broader. List methods return extracted arrays, and operational methods return raw data. Consult the [HTTP reference](/locales/en/api-reference/overview) for limits and failure cases. diff --git a/locales/en/sdk/search.mdx b/locales/en/sdk/search.mdx new file mode 100644 index 0000000..c3f050b --- /dev/null +++ b/locales/en/sdk/search.mdx @@ -0,0 +1,71 @@ +--- +title: "Search compatibility" +description: "A working search adapter for API 2.0.0 and SDK 1.0.2." +--- + +The API returns `{ success: true, total, data: [...] }`. In SDK 1.0.2, both search resources first unwrap `data`, then try to read `total` and `data` from the resulting array. A successful HTTP response can therefore become `{ total: undefined, results: undefined }`. + +Save this helper as `search.mjs`. It uses fetch directly and preserves SDK error classes. It makes one request without automatic retries; a 404 is still an error, not an empty list. + +```js +import { BonyanApiError, BonyanRequestError } from "@bonyanoss/bonyan-api"; + +// Compatibility helper for the flat search envelope returned by API 2.0.0. +export async function searchContent( + resource, + text, + { + limit = 10, + baseUrl = "https://api.bonyanoss.org", + fetch: fetchFn = globalThis.fetch, + signal = AbortSignal.timeout(45000), + } = {}, +) { + if (!["ayat", "azkar"].includes(resource)) + throw new TypeError("resource must be ayat or azkar"); + const maximum = resource === "ayat" ? 500 : 200; + if (!Number.isInteger(limit) || limit < 1 || limit > maximum) + throw new RangeError("Invalid limit"); + if (typeof text !== "string" || !/[\u0621-\u064A]/u.test(text)) + throw new TypeError("Use an Arabic query"); + const url = new URL(baseUrl.replace(/\/+$/, "") + "/" + resource + "/search"); + url.searchParams.set("text", text); + url.searchParams.set("limit", String(limit)); + let response; + try { + response = await fetchFn(url, { + signal, + headers: { Accept: "application/json" }, + }); + } catch (error) { + throw BonyanRequestError.from(error); + } + const body = await response.json().catch(() => null); + if (!response.ok) + throw BonyanApiError.fromResponse( + response.status, + body, + response.statusText, + ); + if ( + body?.success !== true || + !Array.isArray(body.data) || + !Number.isInteger(body.total) + ) { + throw new BonyanRequestError("Unexpected search response", body); + } + return { total: body.total, results: body.data }; +} +``` + + +```js +import { searchContent } from './search.mjs'; + +const { total, results } = await searchContent('ayat', 'الرحمن', { limit: 10 }); +console.log(total, results[0]?.aya.text); +``` + +Pass `'azkar'` for azkar search. Its hits contain `category` and `item`. The helper preserves a self-hosted base URL prefix and accepts an AbortSignal. Its error conversion does not populate `retryAfterMs`; use a transport policy that reads Retry-After if you add retries. + +This is a documented compatibility helper, not a change to the published SDK. Recheck the package before removing it. [Source versions](/locales/en/guides/source-status). diff --git a/openapi.yaml b/openapi.yaml deleted file mode 100644 index 265f082..0000000 --- a/openapi.yaml +++ /dev/null @@ -1,1074 +0,0 @@ -openapi: 3.1.0 -info: - title: Bonyan-API - version: "1.1.0" - summary: Multi-source-fallback REST API for Islamic digital content. - description: | - **Bonyan-API** is an enterprise-grade, type-safe, open-source REST - API for Islamic content. Content modules normalize upstream providers into - stable response shapes, and most modules use ordered fallback chains when a - provider fails or returns unusable data. - - - **Public** — no auth required. - - **Fair-use rate-limited** — 120 req/min per IP by default. - - **Open source** — MIT-licensed. - license: - name: MIT - identifier: MIT - contact: - name: BonyanOSS - url: https://github.com/BonyanOSS/Bonyan-API - -servers: - - url: https://api.bonyanoss.org/bonyan-api/v1 - description: Public hosted instance - - url: http://localhost:3000 - description: Local development - -tags: - - name: Meta - description: Service metadata and health checks. - - name: Surah - description: Index of the 114 surahs of the Quran. - - name: Ayat - description: Quranic verses (text + search). - - name: Reciters - description: Reciters and their audio moshafs. - - name: Tafsir - description: Quranic commentaries (multi-edition). - - name: Azkar - description: Daily supplications (morning/evening, sleep, prayer, etc). - - name: Hadith - description: The 9 books of Sunni hadith. - - name: Prayer - description: Daily prayer timings by location and date. - - name: Hijri - description: Hijri ↔ Gregorian calendar conversion. - - name: Qibla - description: Compass bearing toward the Kaaba. - -paths: - /: - get: - tags: [Meta] - operationId: getCatalogue - summary: Service catalogue - description: Returns a JSON catalogue of every registered route plus project metadata. - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/Catalogue" - example: - name: Bonyan-API - description: Quran & Azkar API with multi-source fallback - routes: - - method: GET - url: /surah - - method: GET - url: /ayat/:id - - method: GET - url: /prayer/times - - /health: - get: - tags: [Meta] - operationId: getHealth - summary: Liveness probe - responses: - "200": - description: OK - content: - application/json: - schema: - type: object - properties: - status: { type: string, enum: [ok] } - code: { type: integer, enum: [200] } - timestamp: { type: string, format: date-time } - example: - status: ok - code: 200 - timestamp: "2026-05-06T10:15:00.000Z" - - /surah: - get: - tags: [Surah] - operationId: listSurahs - summary: List all 114 surahs - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: "#/components/schemas/SurahListResponse" - "503": { $ref: "#/components/responses/AllSourcesFailed" } - "429": { $ref: "#/components/responses/RateLimited" } - - /surah/{id}: - get: - tags: [Surah] - operationId: getSurah - summary: Get a single surah - parameters: - - name: id - in: path - required: true - schema: { type: integer, minimum: 1, maximum: 114 } - example: 1 - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/SurahResponse" } - "400": { $ref: "#/components/responses/BadRequest" } - "404": { $ref: "#/components/responses/NotFound" } - "503": { $ref: "#/components/responses/AllSourcesFailed" } - - /surah/search: - get: - tags: [Surah] - operationId: searchSurah - summary: Search surah by Arabic name - parameters: - - name: name - in: query - required: true - schema: { type: string } - example: الفاتحة - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/SurahSearchResponse" } - "400": { $ref: "#/components/responses/BadRequest" } - - /ayat: - get: - tags: [Ayat] - operationId: listAyat - summary: Full Quran text - description: All 6,236 ayat. Cached for 24h. - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/AyatCorpusResponse" } - - /ayat/{id}: - get: - tags: [Ayat] - operationId: getAyaByNumber - summary: Single aya by absolute number - parameters: - - name: id - in: path - required: true - schema: { type: integer, minimum: 1, maximum: 6236 } - example: 1 - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/AyaLookupResponse" } - "404": { $ref: "#/components/responses/NotFound" } - - /ayat/{surah}/aya/{id}: - get: - tags: [Ayat] - operationId: getAyaInSurah - summary: Single aya by surah + verse-in-surah - parameters: - - name: surah - in: path - required: true - schema: { type: integer, minimum: 1, maximum: 114 } - example: 1 - - name: id - in: path - required: true - schema: { type: integer, minimum: 1 } - example: 1 - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/AyaLookupResponse" } - "404": { $ref: "#/components/responses/NotFound" } - - /ayat/search: - get: - tags: [Ayat] - operationId: searchAyat - summary: Search ayat by text - parameters: - - name: text - in: query - required: true - schema: { type: string } - example: الله - - name: limit - in: query - schema: { type: integer, default: 50, minimum: 1, maximum: 500 } - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/AyaSearchResponse" } - - /reciters: - get: - tags: [Reciters] - operationId: listReciters - summary: All reciters with their available moshafs - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/ReciterCollectionResponse" } - - /reciters/{id}: - get: - tags: [Reciters] - operationId: getReciter - parameters: - - name: id - in: path - required: true - schema: { type: integer } - example: 4 - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/ReciterResponse" } - "404": { $ref: "#/components/responses/NotFound" } - - /reciters/search: - get: - tags: [Reciters] - operationId: searchReciter - parameters: - - name: name - in: query - required: true - schema: { type: string } - example: العفاسي - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/ReciterSearchResponse" } - - /reciters/{id}/surah/{surah}: - get: - tags: [Reciters] - operationId: getReciterSurahAudio - summary: Resolve audio URL for reciter + surah - parameters: - - name: id - in: path - required: true - schema: { type: integer } - example: 4 - - name: surah - in: path - required: true - schema: { type: integer, minimum: 1, maximum: 114 } - example: 1 - responses: - "200": - description: OK - content: - application/json: - schema: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - reciter: { type: string } - surah: { type: integer } - audio: { type: string, format: uri } - example: - success: true - data: - reciter: Mishary Rashid Alafasy - surah: 1 - audio: https://server8.mp3quran.net/afs/001.mp3 - - /tafsir: - get: - tags: [Tafsir] - operationId: listTafsirEditions - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/TafsirEditionListResponse" } - - /tafsir/{edition}/{surah}: - get: - tags: [Tafsir] - operationId: getTafsirForSurah - parameters: - - name: edition - in: path - required: true - schema: { type: string, enum: [muyassar, jalalayn, saadi, waseet, qurtubi] } - - name: surah - in: path - required: true - schema: { type: integer, minimum: 1, maximum: 114 } - - name: aya - in: query - required: false - schema: { type: integer, minimum: 1 } - description: If set, returns tafsir for a single aya (alternative to the path-param form). - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/TafsirResponse" } - - /tafsir/{edition}/{surah}/{aya}: - get: - tags: [Tafsir] - operationId: getTafsirForAya - parameters: - - name: edition - in: path - required: true - schema: { type: string, enum: [muyassar, jalalayn, saadi, waseet, qurtubi] } - - name: surah - in: path - required: true - schema: { type: integer, minimum: 1, maximum: 114 } - - name: aya - in: path - required: true - schema: { type: integer, minimum: 1 } - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/TafsirResponse" } - - /azkar: - get: - tags: [Azkar] - operationId: listAzkarCategories - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/AzkarCategorySummaryResponse" } - - /azkar/{category}: - get: - tags: [Azkar] - operationId: getAzkarCategory - parameters: - - name: category - in: path - required: true - schema: { type: string } - example: أذكار الصباح - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/AzkarCategoryResponse" } - - /azkar/random: - get: - tags: [Azkar] - operationId: randomZekr - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/AzkarPickResponse" } - - /azkar/search: - get: - tags: [Azkar] - operationId: searchAzkar - parameters: - - name: text - in: query - required: true - schema: { type: string } - - name: limit - in: query - schema: { type: integer, default: 50, maximum: 200 } - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/AzkarSearchResponse" } - - /hadith: - get: - tags: [Hadith] - operationId: listHadithBooks - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/HadithBookListResponse" } - - /hadith/{book}: - get: - tags: [Hadith] - operationId: getHadithRange - parameters: - - name: book - in: path - required: true - schema: - type: string - enum: [bukhari, muslim, abu-dawud, tirmidhi, nasai, ibn-majah, ahmad, malik, darimi] - - name: from - in: query - schema: { type: integer, default: 1, minimum: 1 } - - name: to - in: query - schema: { type: integer, default: 30 } - description: Inclusive upper bound. `to - from + 1` must be ≤ 300. - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/HadithListResponse" } - "400": { $ref: "#/components/responses/BadRequest" } - - /hadith/{book}/{number}: - get: - tags: [Hadith] - operationId: getHadith - parameters: - - name: book - in: path - required: true - schema: - type: string - enum: [bukhari, muslim, abu-dawud, tirmidhi, nasai, ibn-majah, ahmad, malik, darimi] - - name: number - in: path - required: true - schema: { type: integer, minimum: 1 } - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/HadithResponse" } - "404": { $ref: "#/components/responses/NotFound" } - - /hadith/random: - get: - tags: [Hadith] - operationId: getRandomHadith - parameters: - - name: book - in: query - required: false - schema: - type: string - enum: [bukhari, muslim, abu-dawud, tirmidhi, nasai, ibn-majah, ahmad, malik, darimi] - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/RandomHadithResponse" } - - /prayer/times: - get: - tags: [Prayer] - operationId: getPrayerTimes - summary: Today's (or any date's) prayer times - description: | - You can specify location either by **coordinates** (`latitude` + `longitude`) or - by **city** (`city` + `country`). At least one of those two pairs is required. - parameters: - - name: latitude - in: query - schema: { type: number, format: double } - example: 21.4225 - - name: longitude - in: query - schema: { type: number, format: double } - example: 39.8262 - - name: city - in: query - schema: { type: string } - example: Mecca - - name: country - in: query - schema: { type: string } - example: SA - - name: date - in: query - schema: { type: string, pattern: '^\d{2}-\d{2}-\d{4}$' } - example: "06-05-2026" - - name: method - in: query - schema: { type: integer } - description: Aladhan calculation method ID. If omitted, the upstream default is used. - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/PrayerTimesResponse" } - "400": { $ref: "#/components/responses/BadRequest" } - "503": { $ref: "#/components/responses/AllSourcesFailed" } - - /hijri/today: - get: - tags: [Hijri] - operationId: getHijriToday - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/HijriResponse" } - - /hijri/from-gregorian: - get: - tags: [Hijri] - operationId: gregorianToHijri - parameters: - - name: date - in: query - required: false - schema: { type: string, pattern: '^\d{2}-\d{2}-\d{4}$' } - example: "06-05-2026" - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/HijriResponse" } - - /hijri/to-gregorian: - get: - tags: [Hijri] - operationId: hijriToGregorian - parameters: - - name: date - in: query - required: true - schema: { type: string, pattern: '^\d{2}-\d{2}-\d{4}$' } - example: "18-11-1447" - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/HijriResponse" } - - /qibla: - get: - tags: [Qibla] - operationId: getQiblaBearing - summary: Compass bearing toward the Kaaba - parameters: - - name: latitude - in: query - required: true - schema: { type: number, format: double } - example: 24.7136 - - name: longitude - in: query - required: true - schema: { type: number, format: double } - example: 46.6753 - responses: - "200": - description: OK - content: - application/json: - schema: { $ref: "#/components/schemas/QiblaResponse" } - -components: - responses: - BadRequest: - description: Validation error - content: - application/json: - schema: { $ref: "#/components/schemas/ErrorEnvelope" } - example: - success: false - message: 'invalid path param "id" — must be 1..114' - NotFound: - description: Resource not found - content: - application/json: - schema: { $ref: "#/components/schemas/ErrorEnvelope" } - example: - success: false - message: surah 999 not found - RateLimited: - description: Rate limit exceeded - content: - application/json: - schema: { $ref: "#/components/schemas/ErrorEnvelope" } - example: - success: false - message: "rate limit exceeded — try again in 28 s" - headers: - X-RateLimit-Limit: - schema: { type: integer } - X-RateLimit-Remaining: - schema: { type: integer } - X-RateLimit-Reset: - schema: { type: integer } - Retry-After: - schema: { type: integer } - AllSourcesFailed: - description: All upstream sources failed. - content: - application/json: - schema: { $ref: "#/components/schemas/ErrorEnvelope" } - example: - success: false - message: all upstream sources failed - - schemas: - SuccessEnvelope: - type: object - required: [success, data] - properties: - success: { type: boolean, enum: [true] } - data: {} - ErrorEnvelope: - type: object - required: [success, message] - properties: - success: { type: boolean, enum: [false] } - message: { type: string } - - Catalogue: - type: object - required: [name, description, routes] - properties: - name: { type: string, example: Bonyan-API } - description: { type: string } - routes: - type: array - items: - type: object - properties: - method: - oneOf: - - type: string - - type: array - items: { type: string } - url: { type: string } - schema: { type: object } - - SurahItem: - type: object - required: [id, name, apiName] - properties: - id: { type: integer, minimum: 1, maximum: 114 } - name: { type: string, example: Al-Fatiha } - makkia: { type: boolean } - apiName: - type: string - enum: [mp3quran.net, alquran.cloud, quran.com] - SurahListResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - surah: - type: array - items: { $ref: "#/components/schemas/SurahItem" } - SurahResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: { $ref: "#/components/schemas/SurahItem" } - SurahSearchResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: array - items: { $ref: "#/components/schemas/SurahItem" } - - AyaItem: - type: object - required: [number, text, numberInSurah] - properties: - number: { type: integer, example: 1 } - text: { type: string, example: In the name of Allah, the Entirely Merciful, the Especially Merciful } - numberInSurah: { type: integer, example: 1 } - SurahWithAyaItem: - type: object - required: [number, name, ayat, apiName] - properties: - number: { type: integer, minimum: 1, maximum: 114 } - name: { type: string, example: Al-Fatiha } - ayat: - type: array - items: { $ref: "#/components/schemas/AyaItem" } - apiName: - type: string - enum: [alquran.cloud, quran.gading.dev] - AyatCorpusResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - surahs: - type: array - items: { $ref: "#/components/schemas/SurahWithAyaItem" } - AyaLookup: - type: object - properties: - surahNumber: { type: integer, example: 1 } - surahName: { type: string, example: Al-Fatiha } - aya: { $ref: "#/components/schemas/AyaItem" } - AyaLookupResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: { $ref: "#/components/schemas/AyaLookup" } - AyaSearchResponse: - type: object - required: [success, total, data] - properties: - success: { type: boolean, enum: [true] } - total: { type: integer } - data: - type: array - items: { $ref: "#/components/schemas/AyaLookup" } - - Moshaf: - type: object - properties: - id: { type: integer } - name: { type: string } - server: { type: string, format: uri, example: "https://server8.mp3quran.net/afs/" } - Reciter: - type: object - properties: - id: { type: integer } - name: { type: string } - date: { type: string } - moshaf: - type: array - items: { $ref: "#/components/schemas/Moshaf" } - style: { type: string } - apiName: - type: string - enum: [mp3quran.net, quran.com] - ReciterResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: { $ref: "#/components/schemas/Reciter" } - ReciterCollectionResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - reciters: - type: array - items: { $ref: "#/components/schemas/Reciter" } - ReciterSearchResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: array - items: { $ref: "#/components/schemas/Reciter" } - ReciterAudioResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - reciter: { type: string } - surah: { type: integer } - audio: { type: string, format: uri } - - TafsirEdition: - type: object - properties: - id: { type: string, enum: [muyassar, jalalayn, saadi, waseet, qurtubi] } - label: { type: string } - TafsirEditionListResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: array - items: { $ref: "#/components/schemas/TafsirEdition" } - TafsirEntry: - type: object - properties: - surah: { type: integer } - aya: { type: integer } - text: { type: string } - edition: { type: string } - apiName: - type: string - enum: [alquran.cloud, quranenc.com] - TafsirResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - oneOf: - - $ref: "#/components/schemas/TafsirEntry" - - type: array - items: { $ref: "#/components/schemas/TafsirEntry" } - - AzkarCategorySummary: - type: object - properties: - name: { type: string } - count: { type: integer } - apiName: - type: string - enum: [github.com/nawafalqari, hisnmuslim.com] - AzkarCategorySummaryResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - categories: - type: array - items: { $ref: "#/components/schemas/AzkarCategorySummary" } - AzkarItem: - type: object - properties: - id: { type: integer } - text: { type: string } - count: { type: integer } - reference: { type: string } - description: { type: string } - AzkarCategory: - type: object - properties: - category: { type: string } - items: - type: array - items: { $ref: "#/components/schemas/AzkarItem" } - apiName: - type: string - enum: [github.com/nawafalqari, hisnmuslim.com] - AzkarCategoryResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: { $ref: "#/components/schemas/AzkarCategory" } - AzkarPick: - type: object - properties: - category: { type: string } - item: { $ref: "#/components/schemas/AzkarItem" } - AzkarPickResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: { $ref: "#/components/schemas/AzkarPick" } - AzkarSearchResponse: - type: object - required: [success, total, data] - properties: - success: { type: boolean, enum: [true] } - total: { type: integer } - data: - type: array - items: { $ref: "#/components/schemas/AzkarPick" } - - HadithBook: - type: object - properties: - id: { type: string } - name: { type: string } - available: { type: integer, example: 7563 } - apiName: - type: string - enum: [hadith.gading.dev] - HadithBookListResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: array - items: { $ref: "#/components/schemas/HadithBook" } - Hadith: - type: object - properties: - number: { type: integer, example: 1 } - text: { type: string } - book: { type: string } - apiName: - type: string - enum: [hadith.gading.dev] - HadithResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: { $ref: "#/components/schemas/Hadith" } - RandomHadithResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - book: { type: string } - hadith: { $ref: "#/components/schemas/Hadith" } - HadithListResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - book: { type: string } - available: { type: integer } - hadiths: - type: array - items: { $ref: "#/components/schemas/Hadith" } - - PrayerTimings: - type: object - properties: - Fajr: { type: string, example: "04:32" } - Sunrise: { type: string, example: "05:55" } - Dhuhr: { type: string, example: "12:18" } - Asr: { type: string, example: "15:42" } - Sunset: { type: string, example: "18:41" } - Maghrib: { type: string, example: "18:41" } - Isha: { type: string, example: "20:11" } - Imsak: { type: string, example: "04:22" } - Midnight: { type: string, example: "00:18" } - PrayerTimesResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - date: { type: string, example: "06-05-2026" } - hijri: { type: string, example: "18-11-1447" } - timings: { $ref: "#/components/schemas/PrayerTimings" } - method: { type: string } - coordinates: - type: object - properties: - latitude: { type: number, example: 21.4225 } - longitude: { type: number, example: 39.8262 } - apiName: - type: string - enum: [aladhan.com, pray.zone] - - HijriDate: - type: object - properties: - hijri: - type: object - properties: - date: { type: string, example: "18-11-1447" } - day: { type: string } - month: { type: string } - monthAr: { type: string } - year: { type: string } - weekday: { type: string } - weekdayAr: { type: string } - gregorian: - type: object - properties: - date: { type: string, example: "06-05-2026" } - day: { type: string } - month: { type: string } - year: { type: string } - apiName: - type: string - enum: [aladhan.com] - HijriResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: { $ref: "#/components/schemas/HijriDate" } - - QiblaResponse: - allOf: - - $ref: "#/components/schemas/SuccessEnvelope" - - type: object - properties: - data: - type: object - properties: - latitude: { type: number, example: 24.7136 } - longitude: { type: number, example: 46.6753 } - direction: - type: number - description: Degrees clockwise from true north toward the Kaaba. - example: 243.7 - apiName: - type: string - enum: [aladhan.com] diff --git a/package.json b/package.json index bd690d5..469fe0e 100644 --- a/package.json +++ b/package.json @@ -1,38 +1,37 @@ { - "name": "bonyan-docs", - "version": "1.0.0", - "private": true, - "description": "Documentation site for BonyanOSS developer docs and the Bonyan-API.", - "license": "MIT", - "author": "BonyanOSS", - "homepage": "https://docs.bonyanoss.org", - "repository": { - "type": "git", - "url": "https://github.com/BonyanOSS/docs.git" - }, - "packageManager": "pnpm@11.0.8", - "scripts": { - "dev": "mintlify dev", - "dev:port": "mintlify dev --port 3333", - "build": "mintlify validate", - "broken-links": "mintlify broken-links", - "openapi:check": "mintlify openapi-check ./openapi.yaml", - "rename": "mintlify rename" - }, - "devDependencies": { - "mintlify": "^4.2.590" - }, - "pnpm": { - "onlyBuiltDependencies": [ - "keytar" - ], - "ignoredBuiltDependencies": [ - "puppeteer", - "sharp" - ] - }, - "engines": { - "node": ">=20.0.0", - "pnpm": ">=10.0.0" - } + "name": "bonyan-docs", + "version": "1.0.0", + "private": true, + "description": "English and Arabic documentation for Bonyan API and its JavaScript SDK.", + "license": "MIT", + "author": "BonyanOSS", + "homepage": "https://docs.bonyanoss.org", + "repository": { + "type": "git", + "url": "https://github.com/BonyanOSS/docs.git" + }, + "packageManager": "pnpm@11.0.8", + "scripts": { + "dev": "mintlify dev --no-open", + "generate": "node scripts/generate-api.mjs && node scripts/generate-index.mjs", + "check": "node scripts/generate-api.mjs --check && node scripts/generate-index.mjs --check && node scripts/check-docs.mjs && node --test scripts/search.test.mjs", + "build": "mintlify validate", + "broken-links": "mintlify broken-links", + "check:source": "node scripts/check-source.mjs" + }, + "devDependencies": { + "@apidevtools/swagger-parser": "13.0.0", + "@bonyanoss/bonyan-api": "1.0.2", + "@mdx-js/mdx": "3.1.1", + "mintlify": "4.2.876", + "react": "19.2.3", + "react-dom": "19.2.3", + "typescript": "6.0.3", + "yaml": "2.9.0" + }, + "engines": { + "node": ">=22", + "pnpm": ">=11" + }, + "type": "module" } diff --git a/patches/@mintlify__link-rot@3.0.1334.patch b/patches/@mintlify__link-rot@3.0.1334.patch new file mode 100644 index 0000000..aff0a57 --- /dev/null +++ b/patches/@mintlify__link-rot@3.0.1334.patch @@ -0,0 +1,13 @@ +diff --git a/dist/graph.js b/dist/graph.js +index ba0894a10d4544b50fe054dbb2ff77204794dd15..d580cf292d527097672aface80c7dc9ddbb36d19 100644 +--- a/dist/graph.js ++++ b/dist/graph.js +@@ -81,7 +81,7 @@ export class MdxPath { + normalizedPath = join(this.relativeDir, this.filename); + urlPath.pathname = normalizedPath; + } +- path = parse(normalizedPath); ++ path = parse(join(normalizedPath)); + } + else { + try { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc3cc3b..c1e710d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,8574 +1,8894 @@ -lockfileVersion: '9.0' +lockfileVersion: "9.0" settings: - autoInstallPeers: true - excludeLinksFromLockfile: false + autoInstallPeers: true + excludeLinksFromLockfile: false -importers: +patchedDependencies: + "@mintlify/link-rot@3.0.1334": d26576946b6c3cdb6312a07b237398d0557e9a9970db114df92d0c395c0f76b2 - .: - devDependencies: - mintlify: - specifier: ^4.2.590 - version: 4.2.590(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@25.9.1)(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@6.0.3) +importers: + .: + devDependencies: + "@apidevtools/swagger-parser": + specifier: 13.0.0 + version: 13.0.0(openapi-types@12.1.3) + "@bonyanoss/bonyan-api": + specifier: 1.0.2 + version: 1.0.2 + "@mdx-js/mdx": + specifier: 3.1.1 + version: 3.1.1 + mintlify: + specifier: 4.2.876 + version: 4.2.876(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/node@25.9.1)(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(typescript@6.0.3) + react: + specifier: 19.2.3 + version: 19.2.3 + react-dom: + specifier: 19.2.3 + version: 19.2.3(react@19.2.3) + typescript: + specifier: 6.0.3 + version: 6.0.3 + yaml: + specifier: 2.9.0 + version: 2.9.0 packages: + "@alcalzone/ansi-tokenize@0.2.5": + resolution: { integrity: sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw== } + engines: { node: ">=18" } + + "@alloc/quick-lru@5.2.0": + resolution: { integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw== } + engines: { node: ">=10" } + + "@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.241": + resolution: { integrity: sha512-v26ta54lKFMFEZzbOE+6p3YhKERWnDiEA6OmkSAg+3fAQHOa1+aLTKw222cfgzxgiVixwFtHMk8c63zsDd8aXQ== } + cpu: [arm64] + os: [darwin] + + "@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.241": + resolution: { integrity: sha512-5jweT0vft1ZCaGSoxZHF9vJlHbx8Yxx4+x5aHAIXTd4lx7ZbT4o5buEF8kpmTeHUB+Fw9jtFIm4QDsRiBXgf+Q== } + cpu: [x64] + os: [darwin] + + "@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.241": + resolution: { integrity: sha512-GslvPvSzehfCZyzOaJAt4lgodznm5zpl/LMXN8ygD12z5qnpM+I9/eFnmAaISJ0L8/vyohtlAP1jjaeR2jz1AQ== } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.241": + resolution: { integrity: sha512-SxszQGffXiLzMEnAv+pJXEmQbA8haijKyRjjH/jOt1CLeMIfpjKcO9WQDv8dEA8nREWS3zJ103zjgecAF7oOQQ== } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.241": + resolution: { integrity: sha512-kZigJ5Ug2I2G/n7Cunmwy4TGr0lOGnWrz6TkzyWiDcUmJOodoTH6GZECNarWAtETfN03AAeLfrpiz8z3hOEDqA== } + cpu: [x64] + os: [linux] + libc: [musl] + + "@anthropic-ai/claude-agent-sdk-linux-x64@0.3.241": + resolution: { integrity: sha512-gJRa922Qcm7loumHcXMDFEFg//tz1aOi7Nx0sQa9I9lC1JSN8yL6i7/idzOU5Hp193tEDFOgqIMFL/yRiXg+rw== } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.241": + resolution: { integrity: sha512-/3yA9jQuCvHDVlILzhtslH6kFYOvydXyMZiKwnzqM8ZfvFTNO41w8TpiFpBLseyM+4A4E8QMeTKu3L01Xyb5IQ== } + cpu: [arm64] + os: [win32] + + "@anthropic-ai/claude-agent-sdk-win32-x64@0.3.241": + resolution: { integrity: sha512-cHYdAgORl9kynujMeYXyV1uj/hbmsBjRw9dRVkIW4/4sF7S6L4u/qDSzn1/wiNP7g2yWSJ4KbsvHDH2WWDnCBQ== } + cpu: [x64] + os: [win32] + + "@anthropic-ai/claude-agent-sdk@0.3.241": + resolution: { integrity: sha512-pIHdCSTywFe30H0oWDCKZzC4ipBLtF5YMDRKjf6PHyARg57O4l/72v3b6QKnnefwtKKMe6uWJ1Y9lUJg/sKWyA== } + engines: { node: ">=18.0.0" } + peerDependencies: + "@anthropic-ai/sdk": ">=0.93.0" + "@modelcontextprotocol/sdk": ^1.29.0 + zod: ^4.0.0 + + "@anthropic-ai/sdk@0.120.0": + resolution: { integrity: sha512-ZlvmNFT/iIF6JD13rxbbMWD8nvGR0RaUp6yMQnoc+4Af0YjVVe/bIdW1XSQQsoxXAtg1NaT6Vak0LKFlJ4d37Q== } + hasBin: true + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + zod: + optional: true + + "@apidevtools/json-schema-ref-parser@15.3.6": + resolution: { integrity: sha512-oPFDSviRrreUmCZn09LCD4S9QQa6j7zfEwBM1pkGa/kXY0O4sXsEXn4emLP/Tt6tik2+BtgwKk2eldAeOWZ2Rw== } + engines: { node: ">=20" } + peerDependencies: + "@types/json-schema": ^7.0.15 + + "@apidevtools/openapi-schemas@2.1.0": + resolution: { integrity: sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ== } + engines: { node: ">=10" } + + "@apidevtools/swagger-methods@3.0.2": + resolution: { integrity: sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg== } + + "@apidevtools/swagger-parser@13.0.0": + resolution: { integrity: sha512-TcvnmBzJD7DBREkc/2qaxMqbKpttOaHhOFsYRYKdYAv6HGY+iNlWY2IUA209C2/NmvL9z8RBZhkrESqvGkjqmw== } + engines: { node: ^20.19.0 || >=22.12.0 } + peerDependencies: + openapi-types: ">=7" + + "@ark/schema@0.56.0": + resolution: { integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA== } + + "@ark/util@0.56.0": + resolution: { integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA== } + + "@asyncapi/parser@3.4.0": + resolution: { integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ== } + + "@asyncapi/specs@6.8.1": + resolution: { integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA== } + + "@babel/code-frame@7.29.7": + resolution: { integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw== } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.29.7": + resolution: { integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg== } + engines: { node: ">=6.9.0" } + + "@babel/runtime@7.29.7": + resolution: { integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw== } + engines: { node: ">=6.9.0" } + + "@base-ui/react@1.8.0": + resolution: { integrity: sha512-P0/1sxo6SBVZOklKMIedvTWqw2s2IQzi9x5bIVsXu980cuSOD4NeuRSs+/L7LZQfDkZP/uRZyGPyfFl/B1oH+Q== } + engines: { node: ">=14.0.0" } + peerDependencies: + "@date-fns/tz": ^1.2.0 + "@types/react": ^17 || ^18 || ^19 + date-fns: ^4.0.0 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + "@date-fns/tz": + optional: true + "@types/react": + optional: true + date-fns: + optional: true + + "@base-ui/utils@0.4.0": + resolution: { integrity: sha512-bO9fz25kKtPf+aZVyfQrC0PDmJdmVni31W2hCS5/Owb+inwdIL3XU26pCPRPlt4LSxZrBgLwubXQXQlKaFEZzw== } + peerDependencies: + "@types/react": ^17 || ^18 || ^19 + react: ^17 || ^18 || ^19 + react-dom: ^17 || ^18 || ^19 + peerDependenciesMeta: + "@types/react": + optional: true + + "@bonyanoss/bonyan-api@1.0.2": + resolution: { integrity: sha512-sown/KBX7nGOT2By/Fw9sIqVNd9oiefee//rw+FTgCdqjK2vWfAzocnLWtAhYd+cBgeO3DHVlIht4O5Pp6HBxA== } + engines: { node: ">=22" } + + "@canvas/image-data@1.1.0": + resolution: { integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA== } + + "@emnapi/runtime@1.10.0": + resolution: { integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA== } + + "@floating-ui/core@1.8.0": + resolution: { integrity: sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ== } + + "@floating-ui/dom@1.8.0": + resolution: { integrity: sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg== } + + "@floating-ui/react-dom@2.1.9": + resolution: { integrity: sha512-JDjEFGCpImxDCA7JJKviA0M9+RtmJdj0m/NVU5IMgBK+AmZouAQQ7/+2GLH0GXXY0YMw9oXPB8hKdbPYg5QLYg== } + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + + "@floating-ui/utils@0.2.12": + resolution: { integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww== } + + "@hono/node-server@2.1.1": + resolution: { integrity: sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg== } + engines: { node: ">=20" } + peerDependencies: + hono: ^4 + + "@img/sharp-darwin-arm64@0.33.5": + resolution: { integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [darwin] + + "@img/sharp-darwin-x64@0.33.5": + resolution: { integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [darwin] + + "@img/sharp-libvips-darwin-arm64@1.0.4": + resolution: { integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg== } + cpu: [arm64] + os: [darwin] + + "@img/sharp-libvips-darwin-x64@1.0.4": + resolution: { integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ== } + cpu: [x64] + os: [darwin] + + "@img/sharp-libvips-linux-arm64@1.0.4": + resolution: { integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA== } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linux-arm@1.0.5": + resolution: { integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g== } + cpu: [arm] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linux-s390x@1.0.4": + resolution: { integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA== } + cpu: [s390x] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linux-x64@1.0.4": + resolution: { integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw== } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@img/sharp-libvips-linuxmusl-arm64@1.0.4": + resolution: { integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA== } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@img/sharp-libvips-linuxmusl-x64@1.0.4": + resolution: { integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw== } + cpu: [x64] + os: [linux] + libc: [musl] + + "@img/sharp-linux-arm64@0.33.5": + resolution: { integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@img/sharp-linux-arm@0.33.5": + resolution: { integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm] + os: [linux] + libc: [glibc] + + "@img/sharp-linux-s390x@0.33.5": + resolution: { integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [s390x] + os: [linux] + libc: [glibc] + + "@img/sharp-linux-x64@0.33.5": + resolution: { integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@img/sharp-linuxmusl-arm64@0.33.5": + resolution: { integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@img/sharp-linuxmusl-x64@0.33.5": + resolution: { integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [linux] + libc: [musl] + + "@img/sharp-wasm32@0.33.5": + resolution: { integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [wasm32] + + "@img/sharp-win32-ia32@0.33.5": + resolution: { integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [ia32] + os: [win32] + + "@img/sharp-win32-x64@0.33.5": + resolution: { integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } + cpu: [x64] + os: [win32] + + "@inquirer/ansi@1.0.2": + resolution: { integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ== } + engines: { node: ">=18" } + + "@inquirer/checkbox@4.3.2": + resolution: { integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/confirm@5.1.21": + resolution: { integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/core@10.3.2": + resolution: { integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/editor@4.2.23": + resolution: { integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/expand@4.0.23": + resolution: { integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/external-editor@1.0.3": + resolution: { integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/figures@1.0.15": + resolution: { integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g== } + engines: { node: ">=18" } + + "@inquirer/input@4.3.1": + resolution: { integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/number@3.0.23": + resolution: { integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/password@4.0.23": + resolution: { integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/prompts@7.9.0": + resolution: { integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/rawlist@4.1.11": + resolution: { integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/search@3.2.2": + resolution: { integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/select@4.4.2": + resolution: { integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@inquirer/type@3.0.10": + resolution: { integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + + "@isaacs/fs-minipass@4.0.1": + resolution: { integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== } + engines: { node: ">=18.0.0" } + + "@jridgewell/gen-mapping@0.3.13": + resolution: { integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== } + + "@jridgewell/resolve-uri@3.1.2": + resolution: { integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== } + engines: { node: ">=6.0.0" } + + "@jridgewell/sourcemap-codec@1.5.5": + resolution: { integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== } + + "@jridgewell/trace-mapping@0.3.31": + resolution: { integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== } + + "@jsep-plugin/assignment@1.3.0": + resolution: { integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ== } + engines: { node: ">= 10.16.0" } + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + "@jsep-plugin/regex@1.0.4": + resolution: { integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg== } + engines: { node: ">= 10.16.0" } + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + "@jsep-plugin/ternary@1.1.4": + resolution: { integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg== } + engines: { node: ">= 10.16.0" } + peerDependencies: + jsep: ^0.4.0||^1.0.0 + + "@leichtgewicht/ip-codec@2.0.5": + resolution: { integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== } + + "@mdx-js/mdx@3.1.1": + resolution: { integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ== } + + "@mdx-js/react@3.1.1": + resolution: { integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw== } + peerDependencies: + "@types/react": ">=16" + react: ">=16" + + "@mintlify/cli@4.0.1479": + resolution: { integrity: sha512-qv1tv/CCCqiRPLZtJqLsIaYRdT5QBvhhQvjXa3QxzYWSN4fWYnW5JN41p/BI6Eqf97/04DB93vzb2c0O0gLD+g== } + engines: { node: ">=18.0.0" } + hasBin: true + + "@mintlify/common@1.0.1132": + resolution: { integrity: sha512-EZPaJUOGeC/qgFJg36a9dRtQilgaVjyT9lo0wVPgK3e8yvbdKr8jXTbLKj7SL+Fxg/amqwjLeloUYRxHpza86w== } + + "@mintlify/link-rot@3.0.1334": + resolution: { integrity: sha512-T+IO23GlJoJCd59unJn5TYDKtV8KuGKwhlubf4OkTuGZ/zgWEbVwZ2s/3hmsTM6F6UpOfuZ8THfuYdopX3NHBA== } + engines: { node: ">=18.0.0" } + + "@mintlify/mdx@4.0.2": + resolution: { integrity: sha512-LrAE0fRxZSvB4POZ50Uy5LO0bKvWbPMciE/TKUyzRk4zbexQYYRhnzz9tdQ7zis//91oikrPnKbJxCco1UlawA== } + peerDependencies: + "@base-ui/react": ^1.6.0 + react: ^19.2.1 + react-dom: ^19.2.1 + + "@mintlify/models@0.0.353": + resolution: { integrity: sha512-2c1GpJGrxJkfNhcZmcF9ncNvMv1JJmuE8l6ExkcFL6hzTqKxct4r+y6Xz5n9n+ONtV+alSi1W5HBGxa6VBgokQ== } + engines: { node: ">=18.0.0" } + + "@mintlify/openapi-parser@0.0.8": + resolution: { integrity: sha512-9MBRq9lS4l4HITYCrqCL7T61MOb20q9IdU7HWhqYMNMM1jGO1nHjXasFy61yZ8V6gMZyyKQARGVoZ0ZrYN48Og== } + engines: { node: ">=18" } + + "@mintlify/prebuild@1.0.1286": + resolution: { integrity: sha512-I1pnMmiHplvth7PT7Gu6iIq8dp6NgntdO/O7N6lFGwUcmxh9CnCIrZCgBUEtMMSU3CLlyZBGb6LJGf7MdHXX5Q== } + + "@mintlify/previewing@4.0.1358": + resolution: { integrity: sha512-5cAjDVJoQXWLfqsA0FD1ivLLciVIDuzOMdnUu0tH0idxcz11FDuf1wT6+ixAuh40WNghL86WhgnkEcGO7d9Iiw== } + engines: { node: ">=18.0.0" } + + "@mintlify/scraping@4.0.1000": + resolution: { integrity: sha512-vhk2QT3h76uN4YHRdOJ41ORVA7j2Do9r+zLPkOc6bIA+ZiD6OY4NhhQfpwx/yzNnB7U1kSOwr4OHibJr2XD3Zw== } + engines: { node: ">=18.0.0" } + hasBin: true + + "@mintlify/validation@0.1.849": + resolution: { integrity: sha512-+w6cgETPkH6KPfGXva+csE9NGUYMd8m95B+464+hZwbz4C3CE3R1KDTAOM6q4wJA/U2maRgPt7k3TSZn+nhctA== } + + "@modelcontextprotocol/sdk@1.30.0": + resolution: { integrity: sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA== } + engines: { node: ">=18" } + peerDependencies: + "@cfworker/json-schema": ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + "@cfworker/json-schema": + optional: true + + "@nodable/entities@2.2.0": + resolution: { integrity: sha512-9uGyhaQavEUMC8AIddIjau4NsnsXhou+j5sBAGojCM1oxmQpVKTWR/9JxABD6UAv12vpIms55fPZKFQEhG6uBg== } + + "@nodelib/fs.scandir@2.1.5": + resolution: { integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== } + engines: { node: ">= 8" } + + "@nodelib/fs.stat@2.0.5": + resolution: { integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== } + engines: { node: ">= 8" } + + "@nodelib/fs.walk@1.2.8": + resolution: { integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== } + engines: { node: ">= 8" } + + "@openai/codex-sdk@0.149.1": + resolution: { integrity: sha512-R00Rz5327LefZggAxl28r7vFQq1vxa91OxtjZJOsQfAM/MyH8InW5qwwRu6pzUmRGp1E29XrOzm7u1TeV5Yz2A== } + engines: { node: ">=18" } + + "@openai/codex@0.149.1": + resolution: { integrity: sha512-6q5pbcpFbJbqOpkubSDBwXmktQ55aD8eUzGzBF1zASob2DjwhBKDSNGtdZKalfrNJUdTDTPDMmzCXEXs5tMBYA== } + engines: { node: ">=16" } + hasBin: true + + "@openai/codex@0.149.1-darwin-arm64": + resolution: { integrity: sha512-6X84kTCbnTgPIJ2EdcPsrvwS0Wxsqpa+bCswGmRf4BjhcQ5nPMnBC6yCAaCMj+vrbXQHj+L6sa9FaR4QkmA1qw== } + engines: { node: ">=16" } + cpu: [arm64] + os: [darwin] + + "@openai/codex@0.149.1-darwin-x64": + resolution: { integrity: sha512-MfLBQLfcElJL9tvj6y45qVHHMGSXCPnQOixuD3/Zq0g1BW/eFizkrGLdn48cFpc+l8cK+gt5nYG5pQYwVs6g4A== } + engines: { node: ">=16" } + cpu: [x64] + os: [darwin] + + "@openai/codex@0.149.1-linux-arm64": + resolution: { integrity: sha512-OqxUfZ1TVvHd18zHPKK/8ZRlpk8Vy11mg5CMHaLxNWldTbwVImDKtSLWT+m8m4NM5Sz4PbjtZMrVT/RfpBW/mQ== } + engines: { node: ">=16" } + cpu: [arm64] + os: [linux] + + "@openai/codex@0.149.1-linux-x64": + resolution: { integrity: sha512-Of5fGYgr7tAMsyj6vhXb4/RM/UoA3Zq8BLegUBDC09UNy1XTLGYP/2XD+UX8z3qh0NDwxYdCjFIWdDNijKZggQ== } + engines: { node: ">=16" } + cpu: [x64] + os: [linux] + + "@openai/codex@0.149.1-win32-arm64": + resolution: { integrity: sha512-5K0DmOKGK9Bos627p8sK8ATHjovPK0sDyT6h9Cb+4v+5CW5SGw1HLgjGxoLfJ8g3cg6mtg/pRCXXo2L/j71UVA== } + engines: { node: ">=16" } + cpu: [arm64] + os: [win32] + + "@openai/codex@0.149.1-win32-x64": + resolution: { integrity: sha512-G3QXGAg7nyyhqOeooAMUekBCeHd8a1QByhKcVAFyzNBaI06t6Ft7nsF+1SzFS0spuIdU4YyMi5YD26ukADBQUQ== } + engines: { node: ">=16" } + cpu: [x64] + os: [win32] + + "@openapi-contrib/openapi-schema-to-json-schema@3.2.0": + resolution: { integrity: sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw== } + + "@posthog/core@1.7.1": + resolution: { integrity: sha512-kjK0eFMIpKo9GXIbts8VtAknsoZ18oZorANdtuTj1CbgS28t4ZVq//HAWhnxEuXRTrtkd+SUJ6Ux3j2Af8NCuA== } + + "@puppeteer/browsers@2.7.1": + resolution: { integrity: sha512-MK7rtm8JjaxPN7Mf1JdZIZKPD2Z+W7osvrC1vjpvfOX1K0awDIHYbNi89f7eotp7eMUn2shWnt03HwVbriXtKQ== } + engines: { node: ">=18" } + hasBin: true + + "@shikijs/core@3.23.0": + resolution: { integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA== } + + "@shikijs/engine-javascript@3.23.0": + resolution: { integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA== } + + "@shikijs/engine-oniguruma@3.23.0": + resolution: { integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g== } + + "@shikijs/langs@3.23.0": + resolution: { integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg== } + + "@shikijs/themes@3.23.0": + resolution: { integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA== } + + "@shikijs/transformers@3.23.0": + resolution: { integrity: sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ== } + + "@shikijs/twoslash@3.23.0": + resolution: { integrity: sha512-pNaLJWMA3LU7PhT8tm9OQBZ1epy0jmdgeJzntBtr1EVXLbHxGzTj3mnf9vOdcl84l96qnlJXkJ/NGXZYBpXl5g== } + peerDependencies: + typescript: ">=5.5.0" + + "@shikijs/types@3.23.0": + resolution: { integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ== } - '@alcalzone/ansi-tokenize@0.2.5': - resolution: {integrity: sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==} - engines: {node: '>=18'} - - '@alloc/quick-lru@5.2.0': - resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} - engines: {node: '>=10'} - - '@ark/schema@0.55.0': - resolution: {integrity: sha512-IlSIc0FmLKTDGr4I/FzNHauMn0MADA6bCjT1wauu4k6MyxhC1R9gz0olNpIRvK7lGGDwtc/VO0RUDNvVQW5WFg==} - - '@ark/schema@0.56.0': - resolution: {integrity: sha512-ECg3hox/6Z/nLajxXqNhgPtNdHWC9zNsDyskwO28WinoFEnWow4IsERNz9AnXRhTZJnYIlAJ4uGn3nlLk65vZA==} - - '@ark/util@0.55.0': - resolution: {integrity: sha512-aWFNK7aqSvqFtVsl1xmbTjGbg91uqtJV7Za76YGNEwIO4qLjMfyY8flmmbhooYMuqPCO2jyxu8hve943D+w3bA==} - - '@ark/util@0.56.0': - resolution: {integrity: sha512-BghfRC8b9pNs3vBoDJhcta0/c1J1rsoS1+HgVUreMFPdhz/CRAKReAu57YEllNaSy98rWAdY1gE+gFup7OXpgA==} - - '@asyncapi/parser@3.4.0': - resolution: {integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==} - - '@asyncapi/specs@6.8.1': - resolution: {integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA==} - - '@babel/code-frame@7.29.7': - resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.29.7': - resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} - engines: {node: '>=6.9.0'} - - '@canvas/image-data@1.1.0': - resolution: {integrity: sha512-QdObRRjRbcXGmM1tmJ+MrHcaz1MftF2+W7YI+MsphnsCrmtyfS0d5qJbk0MeSbUeyM/jCb0hmnkXPsy026L7dA==} - - '@emnapi/runtime@1.10.0': - resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - - '@floating-ui/core@1.7.5': - resolution: {integrity: sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==} - - '@floating-ui/dom@1.7.6': - resolution: {integrity: sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==} - - '@floating-ui/react-dom@2.1.8': - resolution: {integrity: sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - - '@floating-ui/utils@0.2.11': - resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==} - - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [darwin] - - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} - cpu: [arm64] - os: [darwin] - - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} - cpu: [x64] - os: [darwin] - - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [s390x] - os: [linux] - libc: [glibc] - - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [linux] - libc: [musl] - - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [wasm32] - - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [ia32] - os: [win32] - - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} - cpu: [x64] - os: [win32] - - '@inquirer/ansi@1.0.2': - resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} - engines: {node: '>=18'} - - '@inquirer/checkbox@4.3.2': - resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@shikijs/vscode-textmate@10.0.2": + resolution: { integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg== } - '@inquirer/confirm@5.1.21': - resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@sindresorhus/is@5.6.0": + resolution: { integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== } + engines: { node: ">=14.16" } - '@inquirer/core@10.3.2': - resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@sindresorhus/slugify@2.2.0": + resolution: { integrity: sha512-9Vybc/qX8Kj6pxJaapjkFbiUJPk7MAkCh/GFCxIBnnsuYCFPIXKvnLidG8xlepht3i24L5XemUmGtrJ3UWrl6w== } + engines: { node: ">=12" } - '@inquirer/editor@4.2.23': - resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@sindresorhus/transliterate@1.6.0": + resolution: { integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ== } + engines: { node: ">=12" } - '@inquirer/expand@4.0.23': - resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@socket.io/component-emitter@3.1.2": + resolution: { integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== } - '@inquirer/external-editor@1.0.3': - resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@stablelib/base64@1.0.1": + resolution: { integrity: sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ== } - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} - engines: {node: '>=18'} - - '@inquirer/input@4.3.1': - resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@stoplight/better-ajv-errors@1.0.3": + resolution: { integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA== } + engines: { node: ^12.20 || >= 14.13 } + peerDependencies: + ajv: ">=8" - '@inquirer/number@3.0.23': - resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@stoplight/json-ref-readers@1.2.2": + resolution: { integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ== } + engines: { node: ">=8.3.0" } - '@inquirer/password@4.0.23': - resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@stoplight/json-ref-resolver@3.1.6": + resolution: { integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A== } + engines: { node: ">=8.3.0" } - '@inquirer/prompts@7.9.0': - resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@stoplight/json@3.21.0": + resolution: { integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g== } + engines: { node: ">=8.3.0" } - '@inquirer/rawlist@4.1.11': - resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@stoplight/ordered-object-literal@1.0.5": + resolution: { integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg== } + engines: { node: ">=8" } - '@inquirer/search@3.2.2': - resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@stoplight/path@1.3.2": + resolution: { integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ== } + engines: { node: ">=8" } - '@inquirer/select@4.4.2': - resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@stoplight/spectral-core@1.23.0": + resolution: { integrity: sha512-WvdgmiiJrjiMrcw7ByxfcYtUvAXNp2MhAfcEIXP3Mn8ZOVwyAWIsFjLlsE5zRqj0LuN8+7OQM/L+BMcHj6x/BQ== } + engines: { node: ^16.20 || ^18.18 || >= 20.17 } - '@inquirer/type@3.0.10': - resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true + "@stoplight/spectral-formats@1.8.2": + resolution: { integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw== } + engines: { node: ^16.20 || ^18.18 || >= 20.17 } - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} + "@stoplight/spectral-functions@1.10.2": + resolution: { integrity: sha512-PIfPUgTRo8EtAnL1MIrzhHoUuojSaE8shGSMaHS3BxGyc8d079BE5+TqJa1/WLUb9YT9JQnZ0Aj4xfi8NcJOIw== } + engines: { node: ^16.20 || ^18.18 || >= 20.17 } - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + "@stoplight/spectral-parsers@1.0.5": + resolution: { integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ== } + engines: { node: ^16.20 || ^18.18 || >= 20.17 } - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + "@stoplight/spectral-ref-resolver@1.0.5": + resolution: { integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA== } + engines: { node: ^16.20 || ^18.18 || >= 20.17 } - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + "@stoplight/spectral-runtime@1.1.5": + resolution: { integrity: sha512-6/HSCQBKnI4M5qonCKos2W7oggXv+U/ml+m/cAd4eJAYfIVEmaLUo03qSWIIl4cBc5ujJPmn2WnCiRrz1++P7Q== } + engines: { node: ^16.20 || ^18.18 || >= 20.17 } - '@jsep-plugin/assignment@1.3.0': - resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@jsep-plugin/regex@1.0.4': - resolution: {integrity: sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@jsep-plugin/ternary@1.1.4': - resolution: {integrity: sha512-ck5wiqIbqdMX6WRQztBL7ASDty9YLgJ3sSAK5ZpBzXeySvFGCzIvM6UiAI4hTZ22fEcYQVV/zhUbNscggW+Ukg==} - engines: {node: '>= 10.16.0'} - peerDependencies: - jsep: ^0.4.0||^1.0.0 - - '@leichtgewicht/ip-codec@2.0.5': - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - - '@mdx-js/mdx@3.1.1': - resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - - '@mdx-js/react@3.1.1': - resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' - - '@mintlify/cli@4.0.1193': - resolution: {integrity: sha512-rUkELVK/lXW8PZ5IXNGXR1UtVp1O+zG3VUASTVhCcbaeu55zhP/gZ3gA2/bggyYWryaRnBZY0S4J3sCbVwayFQ==} - engines: {node: '>=18.0.0'} - hasBin: true - - '@mintlify/common@1.0.920': - resolution: {integrity: sha512-dTcvSjoXNW/hZjDU+tzy9yavtFVnj1kbkCEB+qkKv3K+c0+1dncw7qkE1irz4HqJnYyU9/y75RY8Mnuih6L7Uw==} - - '@mintlify/link-rot@3.0.1100': - resolution: {integrity: sha512-VlMQ9Sk+kAorJK7/fqY2qU0Jr3lnFeDs8rcT9yglj69QT8/1oDbciqEUwBdm+qiS/RFYXdCn1IBh0E7mqFpfLA==} - engines: {node: '>=18.0.0'} - - '@mintlify/mdx@3.0.4': - resolution: {integrity: sha512-tJhdpnM5ReJLNJ2fuDRIEr0zgVd6id7/oAIfs26V46QlygiLsc8qx4Rz3LWIX51rUXW/cfakjj0EATxIciIw+g==} - peerDependencies: - '@radix-ui/react-popover': ^1.1.15 - react: ^18.3.1 - react-dom: ^18.3.1 - - '@mintlify/models@0.0.315': - resolution: {integrity: sha512-o6aELnbnDWHhX3M9nQuVVq1xr/aRDnW0PP2dd9RZognYiYVP6/qPCECd0PMsatZoy+R79JCySPP3RHrDg7s0/g==} - engines: {node: '>=18.0.0'} - - '@mintlify/openapi-parser@0.0.8': - resolution: {integrity: sha512-9MBRq9lS4l4HITYCrqCL7T61MOb20q9IdU7HWhqYMNMM1jGO1nHjXasFy61yZ8V6gMZyyKQARGVoZ0ZrYN48Og==} - engines: {node: '>=18'} - - '@mintlify/prebuild@1.0.1064': - resolution: {integrity: sha512-nMjEXOE1mf3jYSC3QrxTGdvZSvx1zn3EchKL58D8NwEq0/2ozlysJK4j6V0++Bi/RJk698zXDz2V96XI8iqbvQ==} - - '@mintlify/previewing@4.0.1125': - resolution: {integrity: sha512-ZCdSz2C0bPBcHhvYuDdGoR9cYVDZIS/CoItH4ymrtTNuk9J3cXwpmkXxGoINzghgWTXuYRBgQHrI/ouicyDCqQ==} - engines: {node: '>=18.0.0'} - - '@mintlify/scraping@4.0.784': - resolution: {integrity: sha512-AjeKPE+GxNtg0h2CBlwDGVGL/jX2rNw2ba4eNqryYHaNTMfEPJVlPesWNuOYGX46TaGSyqSq67Nyv9s467TCbg==} - engines: {node: '>=18.0.0'} - hasBin: true - - '@mintlify/validation@0.1.718': - resolution: {integrity: sha512-CX5zlcDCSXAn2uTC6bWcj5H455MFn8llpi6SQBE3af0zMWV4VEK5TL1EWimuACJyb5VFIQu1QhNvU2TeTPIbmA==} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@openapi-contrib/openapi-schema-to-json-schema@3.2.0': - resolution: {integrity: sha512-Gj6C0JwCr8arj0sYuslWXUBSP/KnUlEGnPW4qxlXvAl543oaNQgMgIgkQUA6vs5BCCvwTEiL8m/wdWzfl4UvSw==} - - '@posthog/core@1.7.1': - resolution: {integrity: sha512-kjK0eFMIpKo9GXIbts8VtAknsoZ18oZorANdtuTj1CbgS28t4ZVq//HAWhnxEuXRTrtkd+SUJ6Ux3j2Af8NCuA==} - - '@puppeteer/browsers@2.3.0': - resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==} - engines: {node: '>=18'} - hasBin: true - - '@radix-ui/primitive@1.1.3': - resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} - - '@radix-ui/react-arrow@1.1.7': - resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + "@stoplight/types@13.20.0": + resolution: { integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA== } + engines: { node: ^12.20 || >=14.13 } - '@radix-ui/react-compose-refs@1.1.2': - resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@stoplight/types@13.6.0": + resolution: { integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ== } + engines: { node: ^12.20 || >=14.13 } - '@radix-ui/react-context@1.1.2': - resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@stoplight/types@14.1.1": + resolution: { integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g== } + engines: { node: ^12.20 || >=14.13 } - '@radix-ui/react-dismissable-layer@1.1.11': - resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + "@stoplight/yaml-ast-parser@0.0.50": + resolution: { integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ== } - '@radix-ui/react-focus-guards@1.1.3': - resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@stoplight/yaml@4.3.0": + resolution: { integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w== } + engines: { node: ">=10.8" } - '@radix-ui/react-focus-scope@1.1.7': - resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + "@szmarczak/http-timer@5.0.1": + resolution: { integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== } + engines: { node: ">=14.16" } - '@radix-ui/react-id@1.1.1': - resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@tootallnate/quickjs-emscripten@0.23.0": + resolution: { integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA== } - '@radix-ui/react-popover@1.1.15': - resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + "@types/acorn@4.0.6": + resolution: { integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== } - '@radix-ui/react-popper@1.2.8': - resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + "@types/cors@2.8.19": + resolution: { integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== } - '@radix-ui/react-portal@1.1.9': - resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + "@types/debug@4.1.13": + resolution: { integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw== } - '@radix-ui/react-presence@1.1.5': - resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + "@types/es-aggregate-error@1.0.6": + resolution: { integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg== } - '@radix-ui/react-primitive@2.1.3': - resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} - peerDependencies: - '@types/react': '*' - '@types/react-dom': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true - '@types/react-dom': - optional: true + "@types/estree-jsx@1.0.5": + resolution: { integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== } - '@radix-ui/react-slot@1.2.3': - resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@types/estree@1.0.9": + resolution: { integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg== } - '@radix-ui/react-use-callback-ref@1.1.1': - resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@types/hast@3.0.4": + resolution: { integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== } - '@radix-ui/react-use-controllable-state@1.2.2': - resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@types/http-cache-semantics@4.2.0": + resolution: { integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q== } - '@radix-ui/react-use-effect-event@0.0.2': - resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@types/json-schema@7.0.15": + resolution: { integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== } - '@radix-ui/react-use-escape-keydown@1.1.1': - resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@types/katex@0.16.8": + resolution: { integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg== } - '@radix-ui/react-use-layout-effect@1.1.1': - resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@types/mdast@4.0.4": + resolution: { integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== } - '@radix-ui/react-use-rect@1.1.1': - resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@types/mdx@2.0.13": + resolution: { integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== } - '@radix-ui/react-use-size@1.1.1': - resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} - peerDependencies: - '@types/react': '*' - react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': - optional: true + "@types/mdx@2.0.14": + resolution: { integrity: sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg== } - '@radix-ui/rect@1.1.1': - resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + "@types/ms@2.1.0": + resolution: { integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== } - '@shikijs/core@3.23.0': - resolution: {integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==} + "@types/nlcst@2.0.3": + resolution: { integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA== } - '@shikijs/engine-javascript@3.23.0': - resolution: {integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==} + "@types/node@25.9.1": + resolution: { integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg== } - '@shikijs/engine-oniguruma@3.23.0': - resolution: {integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==} + "@types/react@19.2.14": + resolution: { integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w== } - '@shikijs/langs@3.23.0': - resolution: {integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==} + "@types/unist@2.0.11": + resolution: { integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== } - '@shikijs/themes@3.23.0': - resolution: {integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==} + "@types/unist@3.0.3": + resolution: { integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== } - '@shikijs/transformers@3.23.0': - resolution: {integrity: sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==} + "@types/urijs@1.19.26": + resolution: { integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg== } - '@shikijs/twoslash@3.23.0': - resolution: {integrity: sha512-pNaLJWMA3LU7PhT8tm9OQBZ1epy0jmdgeJzntBtr1EVXLbHxGzTj3mnf9vOdcl84l96qnlJXkJ/NGXZYBpXl5g==} - peerDependencies: - typescript: '>=5.5.0' + "@types/ws@8.18.1": + resolution: { integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== } - '@shikijs/types@3.23.0': - resolution: {integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==} + "@types/yauzl@2.10.3": + resolution: { integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== } - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + "@typescript/vfs@1.6.4": + resolution: { integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ== } + peerDependencies: + typescript: "*" - '@sindresorhus/is@5.6.0': - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} + "@ungap/structured-clone@1.3.1": + resolution: { integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ== } - '@sindresorhus/slugify@2.2.0': - resolution: {integrity: sha512-9Vybc/qX8Kj6pxJaapjkFbiUJPk7MAkCh/GFCxIBnnsuYCFPIXKvnLidG8xlepht3i24L5XemUmGtrJ3UWrl6w==} - engines: {node: '>=12'} + abort-controller@3.0.0: + resolution: { integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== } + engines: { node: ">=6.5" } - '@sindresorhus/transliterate@1.6.0': - resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} - engines: {node: '>=12'} + accepts@1.3.8: + resolution: { integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== } + engines: { node: ">= 0.6" } - '@socket.io/component-emitter@3.1.2': - resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + accepts@2.0.0: + resolution: { integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== } + engines: { node: ">= 0.6" } - '@stoplight/better-ajv-errors@1.0.3': - resolution: {integrity: sha512-0p9uXkuB22qGdNfy3VeEhxkU5uwvp/KrBTAbrLBURv6ilxIVwanKwjMc41lQfIVgPGcOkmLbTolfFrSsueu7zA==} - engines: {node: ^12.20 || >= 14.13} - peerDependencies: - ajv: '>=8' + acorn-jsx@5.3.2: + resolution: { integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@stoplight/json-ref-readers@1.2.2': - resolution: {integrity: sha512-nty0tHUq2f1IKuFYsLM4CXLZGHdMn+X/IwEUIpeSOXt0QjMUbL0Em57iJUDzz+2MkWG83smIigNZ3fauGjqgdQ==} - engines: {node: '>=8.3.0'} + acorn@8.11.2: + resolution: { integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== } + engines: { node: ">=0.4.0" } + hasBin: true - '@stoplight/json-ref-resolver@3.1.6': - resolution: {integrity: sha512-YNcWv3R3n3U6iQYBsFOiWSuRGE5su1tJSiX6pAPRVk7dP0L7lqCteXGzuVRQ0gMZqUl8v1P0+fAKxF6PLo9B5A==} - engines: {node: '>=8.3.0'} + address@1.2.2: + resolution: { integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== } + engines: { node: ">= 10.0.0" } - '@stoplight/json@3.21.0': - resolution: {integrity: sha512-5O0apqJ/t4sIevXCO3SBN9AHCEKKR/Zb4gaj7wYe5863jme9g02Q0n/GhM7ZCALkL+vGPTe4ZzTETP8TFtsw3g==} - engines: {node: '>=8.3.0'} + adm-zip@0.6.0: + resolution: { integrity: sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg== } + engines: { node: ">=14.0" } - '@stoplight/ordered-object-literal@1.0.5': - resolution: {integrity: sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==} - engines: {node: '>=8'} + agent-base@6.0.2: + resolution: { integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== } + engines: { node: ">= 6.0.0" } - '@stoplight/path@1.3.2': - resolution: {integrity: sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==} - engines: {node: '>=8'} + agent-base@7.1.4: + resolution: { integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== } + engines: { node: ">= 14" } - '@stoplight/spectral-core@1.23.0': - resolution: {integrity: sha512-WvdgmiiJrjiMrcw7ByxfcYtUvAXNp2MhAfcEIXP3Mn8ZOVwyAWIsFjLlsE5zRqj0LuN8+7OQM/L+BMcHj6x/BQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + aggregate-error@4.0.1: + resolution: { integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== } + engines: { node: ">=12" } - '@stoplight/spectral-formats@1.8.2': - resolution: {integrity: sha512-c06HB+rOKfe7tuxg0IdKDEA5XnjL2vrn/m/OVIIxtINtBzphZrOgtRn7epQ5bQF5SWp84Ue7UJWaGgDwVngMFw==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + ajv-draft-04@1.0.0: + resolution: { integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw== } + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true - '@stoplight/spectral-functions@1.10.2': - resolution: {integrity: sha512-PIfPUgTRo8EtAnL1MIrzhHoUuojSaE8shGSMaHS3BxGyc8d079BE5+TqJa1/WLUb9YT9JQnZ0Aj4xfi8NcJOIw==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + ajv-errors@3.0.0: + resolution: { integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ== } + peerDependencies: + ajv: ^8.0.1 - '@stoplight/spectral-parsers@1.0.5': - resolution: {integrity: sha512-ANDTp2IHWGvsQDAY85/jQi9ZrF4mRrA5bciNHX+PUxPr4DwS6iv4h+FVWJMVwcEYdpyoIdyL+SRmHdJfQEPmwQ==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + ajv-formats@2.1.1: + resolution: { integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== } + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true - '@stoplight/spectral-ref-resolver@1.0.5': - resolution: {integrity: sha512-gj3TieX5a9zMW29z3mBlAtDOCgN3GEc1VgZnCVlr5irmR4Qi5LuECuFItAq4pTn5Zu+sW5bqutsCH7D4PkpyAA==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + ajv-formats@3.0.1: + resolution: { integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== } + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true - '@stoplight/spectral-runtime@1.1.5': - resolution: {integrity: sha512-6/HSCQBKnI4M5qonCKos2W7oggXv+U/ml+m/cAd4eJAYfIVEmaLUo03qSWIIl4cBc5ujJPmn2WnCiRrz1++P7Q==} - engines: {node: ^16.20 || ^18.18 || >= 20.17} + ajv@8.20.0: + resolution: { integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA== } - '@stoplight/types@13.20.0': - resolution: {integrity: sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==} - engines: {node: ^12.20 || >=14.13} + ansi-escapes@4.3.2: + resolution: { integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== } + engines: { node: ">=8" } - '@stoplight/types@13.6.0': - resolution: {integrity: sha512-dzyuzvUjv3m1wmhPfq82lCVYGcXG0xUYgqnWfCq3PCVR4BKFhjdkHrnJ+jIDoMKvXb05AZP/ObQF6+NpDo29IQ==} - engines: {node: ^12.20 || >=14.13} + ansi-escapes@7.3.0: + resolution: { integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg== } + engines: { node: ">=18" } - '@stoplight/types@14.1.1': - resolution: {integrity: sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==} - engines: {node: ^12.20 || >=14.13} + ansi-regex@5.0.1: + resolution: { integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== } + engines: { node: ">=8" } + + ansi-regex@6.2.2: + resolution: { integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== } + engines: { node: ">=12" } + + ansi-styles@4.3.0: + resolution: { integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== } + engines: { node: ">=8" } + + ansi-styles@6.2.3: + resolution: { integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg== } + engines: { node: ">=12" } + + any-promise@1.3.0: + resolution: { integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== } + + anymatch@3.1.3: + resolution: { integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== } + engines: { node: ">= 8" } + + anynum@1.0.1: + resolution: { integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A== } + + arg@5.0.2: + resolution: { integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== } + + argparse@1.0.10: + resolution: { integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== } + + argparse@2.0.1: + resolution: { integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== } + + arkregex@0.0.5: + resolution: { integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw== } + + arktype@2.2.0: + resolution: { integrity: sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ== } + + array-buffer-byte-length@1.0.2: + resolution: { integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== } + engines: { node: ">= 0.4" } + + array-flatten@1.1.1: + resolution: { integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== } + + array-iterate@2.0.1: + resolution: { integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg== } + + arraybuffer.prototype.slice@1.0.4: + resolution: { integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== } + engines: { node: ">= 0.4" } + + ast-types@0.13.4: + resolution: { integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w== } + engines: { node: ">=4" } + + astring@1.9.0: + resolution: { integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== } + hasBin: true + + async-function@1.0.0: + resolution: { integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== } + engines: { node: ">= 0.4" } + + asynckit@0.4.0: + resolution: { integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== } + + auto-bind@5.0.1: + resolution: { integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + available-typed-arrays@1.0.7: + resolution: { integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== } + engines: { node: ">= 0.4" } + + avsc@5.7.9: + resolution: { integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg== } + engines: { node: ">=0.11" } + + axios@1.18.0: + resolution: { integrity: sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw== } + + b4a@1.8.1: + resolution: { integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw== } + peerDependencies: + react-native-b4a: "*" + peerDependenciesMeta: + react-native-b4a: + optional: true + + bail@2.0.2: + resolution: { integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw== } - '@stoplight/yaml-ast-parser@0.0.50': - resolution: {integrity: sha512-Pb6M8TDO9DtSVla9yXSTAxmo9GVEouq5P40DWXdOie69bXogZTkgvopCq+yEvTMA0F6PEvdJmbtTV3ccIp11VQ==} + balanced-match@1.0.2: + resolution: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== } - '@stoplight/yaml@4.3.0': - resolution: {integrity: sha512-JZlVFE6/dYpP9tQmV0/ADfn32L9uFarHWxfcRhReKUnljz1ZiUM5zpX+PH8h5CJs6lao3TuFqnPm9IJJCEkE2w==} - engines: {node: '>=10.8'} + bare-events@2.9.1: + resolution: { integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg== } + peerDependencies: + bare-abort-controller: "*" + peerDependenciesMeta: + bare-abort-controller: + optional: true - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} + bare-fs@4.7.2: + resolution: { integrity: sha512-aTvMFUWkBmjzKtEQMDGGDNF8bkfpD5N1b/FCwt7A3wrU4t1o/e/85Wzkluh6JlODCjqVESYCkQCdTXqZ9G7VFg== } + engines: { bare: ">=1.16.0" } + peerDependencies: + bare-buffer: "*" + peerDependenciesMeta: + bare-buffer: + optional: true - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + bare-os@3.9.1: + resolution: { integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ== } + engines: { bare: ">=1.14.0" } + + bare-path@3.0.1: + resolution: { integrity: sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ== } - '@types/acorn@4.0.6': - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + bare-stream@2.13.1: + resolution: { integrity: sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow== } + peerDependencies: + bare-abort-controller: "*" + bare-buffer: "*" + bare-events: "*" + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.4.3: + resolution: { integrity: sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ== } + + base64-js@1.5.1: + resolution: { integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== } + + base64id@2.0.0: + resolution: { integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== } + engines: { node: ^4.5.0 || >= 5.9 } + + basic-ftp@5.3.1: + resolution: { integrity: sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw== } + engines: { node: ">=10.0.0" } + + better-opn@3.0.2: + resolution: { integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== } + engines: { node: ">=12.0.0" } + + binary-extensions@2.3.0: + resolution: { integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== } + engines: { node: ">=8" } - '@types/cors@2.8.19': - resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} + bl@4.1.0: + resolution: { integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== } + + body-parser@1.20.5: + resolution: { integrity: sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA== } + engines: { node: ">= 0.8", npm: 1.2.8000 || >= 1.4.16 } + + body-parser@2.3.0: + resolution: { integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw== } + engines: { node: ">=18" } + + brace-expansion@1.1.15: + resolution: { integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg== } + + braces@3.0.3: + resolution: { integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== } + engines: { node: ">=8" } + + buffer-crc32@0.2.13: + resolution: { integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== } + + buffer@5.7.1: + resolution: { integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== } + + bytes@3.1.2: + resolution: { integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== } + engines: { node: ">= 0.8" } + + cacheable-lookup@7.0.0: + resolution: { integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== } + engines: { node: ">=14.16" } + + cacheable-request@10.2.14: + resolution: { integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== } + engines: { node: ">=14.16" } + + call-bind-apply-helpers@1.0.2: + resolution: { integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== } + engines: { node: ">= 0.4" } + + call-bind@1.0.9: + resolution: { integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== } + engines: { node: ">= 0.4" } - '@types/debug@4.1.13': - resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + call-bound@1.0.4: + resolution: { integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== } + engines: { node: ">= 0.4" } - '@types/es-aggregate-error@1.0.6': - resolution: {integrity: sha512-qJ7LIFp06h1QE1aVxbVd+zJP2wdaugYXYfd6JxsyRMrYHaxb6itXPogW2tz+ylUJ1n1b+JF1PHyYCfYHm0dvUg==} + call-me-maybe@1.0.2: + resolution: { integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ== } - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + callsites@3.1.0: + resolution: { integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== } + engines: { node: ">=6" } - '@types/estree@1.0.9': - resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + camelcase-css@2.0.1: + resolution: { integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== } + engines: { node: ">= 6" } - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + ccount@2.0.1: + resolution: { integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== } - '@types/http-cache-semantics@4.2.0': - resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} + chalk@5.2.0: + resolution: { integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA== } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + chalk@5.3.0: + resolution: { integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } - '@types/katex@0.16.8': - resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==} + chalk@5.6.2: + resolution: { integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + character-entities-html4@2.1.0: + resolution: { integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== } - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + character-entities-legacy@3.0.0: + resolution: { integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== } - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + character-entities@2.0.2: + resolution: { integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== } - '@types/nlcst@2.0.3': - resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} + character-reference-invalid@2.0.1: + resolution: { integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw== } - '@types/node@25.9.1': - resolution: {integrity: sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==} + chardet@2.1.1: + resolution: { integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ== } - '@types/react@19.2.14': - resolution: {integrity: sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==} + chokidar@3.5.3: + resolution: { integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== } + engines: { node: ">= 8.10.0" } - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} + chokidar@3.6.0: + resolution: { integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== } + engines: { node: ">= 8.10.0" } - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + chownr@1.1.4: + resolution: { integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== } - '@types/urijs@1.19.26': - resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==} + chownr@3.0.0: + resolution: { integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== } + engines: { node: ">=18" } - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + chromium-bidi@2.1.2: + resolution: { integrity: sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw== } + peerDependencies: + devtools-protocol: "*" - '@types/yauzl@2.10.3': - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + clean-stack@4.2.0: + resolution: { integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== } + engines: { node: ">=12" } - '@typescript/vfs@1.6.4': - resolution: {integrity: sha512-PJFXFS4ZJKiJ9Qiuix6Dz/OwEIqHD7Dme1UwZhTK11vR+5dqW2ACbdndWQexBzCx+CPuMe5WBYQWCsFyGlQLlQ==} - peerDependencies: - typescript: '*' + cli-boxes@3.0.0: + resolution: { integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== } + engines: { node: ">=10" } - '@ungap/structured-clone@1.3.1': - resolution: {integrity: sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==} + cli-cursor@4.0.0: + resolution: { integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + cli-spinners@2.9.2: + resolution: { integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== } + engines: { node: ">=6" } - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + cli-truncate@4.0.0: + resolution: { integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== } + engines: { node: ">=18" } - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + cli-width@4.1.0: + resolution: { integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== } + engines: { node: ">= 12" } - acorn@8.11.2: - resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} - engines: {node: '>=0.4.0'} - hasBin: true + cliui@8.0.1: + resolution: { integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== } + engines: { node: ">=12" } - address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} + code-excerpt@4.0.0: + resolution: { integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} - engines: {node: '>=12.0'} + collapse-white-space@2.1.0: + resolution: { integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw== } - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + color-convert@2.0.1: + resolution: { integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== } + engines: { node: ">=7.0.0" } - agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} + color-name@1.1.4: + resolution: { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== } - aggregate-error@4.0.1: - resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} - engines: {node: '>=12'} + color-string@1.9.1: + resolution: { integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== } - ajv-draft-04@1.0.0: - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true + color@4.2.3: + resolution: { integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== } + engines: { node: ">=12.5.0" } - ajv-errors@3.0.0: - resolution: {integrity: sha512-V3wD15YHfHz6y0KdhYFjyy9vWtEVALT9UrxfN3zqlI6dMioHnJrqOYfyPKol3oqrnCM9uwkcdCwkJ0WUcbLMTQ==} - peerDependencies: - ajv: ^8.0.1 - - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true + combined-stream@1.0.8: + resolution: { integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== } + engines: { node: ">= 0.8" } - ajv-formats@3.0.1: - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true + comma-separated-tokens@2.0.3: + resolution: { integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== } - ajv@8.20.0: - resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + commander@2.20.3: + resolution: { integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== } - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + commander@4.1.1: + resolution: { integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== } + engines: { node: ">= 6" } - ansi-escapes@7.3.0: - resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} - engines: {node: '>=18'} + commander@8.3.0: + resolution: { integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== } + engines: { node: ">= 12" } + + concat-map@0.0.1: + resolution: { integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== } + + content-disposition@0.5.4: + resolution: { integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== } + engines: { node: ">= 0.6" } + + content-disposition@1.1.0: + resolution: { integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g== } + engines: { node: ">=18" } + + content-type@1.0.5: + resolution: { integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== } + engines: { node: ">= 0.6" } + + content-type@2.1.0: + resolution: { integrity: sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag== } + engines: { node: ">=18" } + + convert-to-spaces@2.0.1: + resolution: { integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } + + cookie-signature@1.0.7: + resolution: { integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== } + + cookie-signature@1.2.2: + resolution: { integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== } + engines: { node: ">=6.6.0" } + + cookie@0.7.2: + resolution: { integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== } + engines: { node: ">= 0.6" } + + cors@2.8.6: + resolution: { integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw== } + engines: { node: ">= 0.10" } + + cosmiconfig@9.0.1: + resolution: { integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ== } + engines: { node: ">=14" } + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + + cross-spawn@7.0.6: + resolution: { integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== } + engines: { node: ">= 8" } + + cssesc@3.0.0: + resolution: { integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== } + engines: { node: ">=4" } + hasBin: true + + cssfilter@0.0.10: + resolution: { integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== } + + csstype@3.2.3: + resolution: { integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== } + + data-uri-to-buffer@6.0.2: + resolution: { integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw== } + engines: { node: ">= 14" } + + data-view-buffer@1.0.2: + resolution: { integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== } + engines: { node: ">= 0.4" } + + data-view-byte-length@1.0.2: + resolution: { integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== } + engines: { node: ">= 0.4" } + + data-view-byte-offset@1.0.1: + resolution: { integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== } + engines: { node: ">= 0.4" } + + debug@2.6.9: + resolution: { integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: { integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.3: + resolution: { integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + + decode-bmp@0.2.1: + resolution: { integrity: sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA== } + engines: { node: ">=8.6.0" } + + decode-ico@0.4.1: + resolution: { integrity: sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA== } + engines: { node: ">=8.6" } + + decode-named-character-reference@1.3.0: + resolution: { integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q== } + + decompress-response@6.0.0: + resolution: { integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== } + engines: { node: ">=10" } + + deep-extend@0.6.0: + resolution: { integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== } + engines: { node: ">=4.0.0" } + + defer-to-connect@2.0.1: + resolution: { integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== } + engines: { node: ">=10" } + + define-data-property@1.1.4: + resolution: { integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== } + engines: { node: ">= 0.4" } + + define-lazy-prop@2.0.0: + resolution: { integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== } + engines: { node: ">=8" } + + define-properties@1.2.1: + resolution: { integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== } + engines: { node: ">= 0.4" } + + degenerator@5.0.1: + resolution: { integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ== } + engines: { node: ">= 14" } + + delayed-stream@1.0.0: + resolution: { integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== } + engines: { node: ">=0.4.0" } - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + depd@2.0.0: + resolution: { integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== } + engines: { node: ">= 0.8" } - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} + dependency-graph@0.11.0: + resolution: { integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg== } + engines: { node: ">= 0.6.0" } - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + dequal@2.0.3: + resolution: { integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== } + engines: { node: ">=6" } - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} + destroy@1.2.0: + resolution: { integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== } + engines: { node: ">= 0.8", npm: 1.2.8000 || >= 1.4.16 } + + detect-libc@2.1.2: + resolution: { integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== } + engines: { node: ">=8" } + + detect-port@1.5.1: + resolution: { integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== } + hasBin: true - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + devlop@1.1.0: + resolution: { integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== } - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + devtools-protocol@0.0.1402036: + resolution: { integrity: sha512-JwAYQgEvm3yD45CHB+RmF5kMbWtXBaOGwuxa87sZogHcLCv8c/IqnThaoQ1y60d7pXWjSKWQphPEc+1rAScVdg== } - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + didyoumean@1.2.2: + resolution: { integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== } - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dlv@1.1.3: + resolution: { integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== } - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dns-packet@5.6.1: + resolution: { integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== } + engines: { node: ">=6" } - aria-hidden@1.2.6: - resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} - engines: {node: '>=10'} + dns-socket@4.2.2: + resolution: { integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg== } + engines: { node: ">=6" } - arkregex@0.0.3: - resolution: {integrity: sha512-bU21QJOJEFJK+BPNgv+5bVXkvRxyAvgnon75D92newgHxkBJTgiFwQxusyViYyJkETsddPlHyspshDQcCzmkNg==} + dunder-proto@1.0.1: + resolution: { integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== } + engines: { node: ">= 0.4" } - arkregex@0.0.5: - resolution: {integrity: sha512-ncYjBdLlh5/QnVsAA8De16Tc9EqmYM7y/WU9j+236KcyYNUXogpz3sC4ATIZYzzLxwI+0sEOaQLEmLmRleaEXw==} + ee-first@1.1.1: + resolution: { integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== } - arktype@2.1.27: - resolution: {integrity: sha512-enctOHxI4SULBv/TDtCVi5M8oLd4J5SVlPUblXDzSsOYQNMzmVbUosGBnJuZDKmFlN5Ie0/QVEuTE+Z5X1UhsQ==} + emoji-regex@10.6.0: + resolution: { integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A== } - arktype@2.2.0: - resolution: {integrity: sha512-t54MZ7ti5BhOEvzEkgKnWvqj+UbDfWig+DHr5I34xatymPusKLS0lQpNJd8M6DzmIto2QGszHfNKoFIT8tMCZQ==} + emoji-regex@8.0.0: + resolution: { integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== } - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + encodeurl@2.0.0: + resolution: { integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== } + engines: { node: ">= 0.8" } - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + end-of-stream@1.4.5: + resolution: { integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== } - array-iterate@2.0.1: - resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==} + engine.io-parser@5.2.3: + resolution: { integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== } + engines: { node: ">=10.0.0" } - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + engine.io@6.6.8: + resolution: { integrity: sha512-2agL3ueZhqxoVrfmntO8yuVj+uNSlIOnhykYHk3Cq0ShYPdUjjUiSJrQvXjq01I9jAuI0Zl2YO8Evv5Mqytm5g== } + engines: { node: ">=10.2.0" } - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} + entities@6.0.1: + resolution: { integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== } + engines: { node: ">=0.12" } - astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} - hasBin: true + env-paths@2.2.1: + resolution: { integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== } + engines: { node: ">=6" } - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} + environment@1.1.0: + resolution: { integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== } + engines: { node: ">=18" } - asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + error-ex@1.3.4: + resolution: { integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== } - auto-bind@5.0.1: - resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + es-abstract@1.24.2: + resolution: { integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg== } + engines: { node: ">= 0.4" } - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + es-aggregate-error@1.0.14: + resolution: { integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA== } + engines: { node: ">= 0.4" } - avsc@5.7.9: - resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==} - engines: {node: '>=0.11'} + es-define-property@1.0.1: + resolution: { integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== } + engines: { node: ">= 0.4" } - axios@1.16.1: - resolution: {integrity: sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==} + es-errors@1.3.0: + resolution: { integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== } + engines: { node: ">= 0.4" } - b4a@1.8.1: - resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} - peerDependencies: - react-native-b4a: '*' - peerDependenciesMeta: - react-native-b4a: - optional: true + es-object-atoms@1.1.2: + resolution: { integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw== } + engines: { node: ">= 0.4" } - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + es-set-tostringtag@2.1.0: + resolution: { integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== } + engines: { node: ">= 0.4" } - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + es-to-primitive@1.3.0: + resolution: { integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== } + engines: { node: ">= 0.4" } - bare-events@2.9.1: - resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} - peerDependencies: - bare-abort-controller: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true + es-toolkit@1.47.0: + resolution: { integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw== } - bare-fs@4.7.2: - resolution: {integrity: sha512-aTvMFUWkBmjzKtEQMDGGDNF8bkfpD5N1b/FCwt7A3wrU4t1o/e/85Wzkluh6JlODCjqVESYCkQCdTXqZ9G7VFg==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true + esast-util-from-estree@2.0.0: + resolution: { integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ== } - bare-os@3.9.1: - resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.1: - resolution: {integrity: sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ==} - - bare-stream@2.13.1: - resolution: {integrity: sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==} - peerDependencies: - bare-abort-controller: '*' - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - bare-buffer: - optional: true - bare-events: - optional: true + esast-util-from-js@2.0.1: + resolution: { integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw== } - bare-url@2.4.3: - resolution: {integrity: sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==} + escalade@3.2.0: + resolution: { integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== } + engines: { node: ">=6" } - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + escape-html@1.0.3: + resolution: { integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== } - base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} + escape-string-regexp@2.0.0: + resolution: { integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== } + engines: { node: ">=8" } - basic-ftp@5.3.1: - resolution: {integrity: sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==} - engines: {node: '>=10.0.0'} + escape-string-regexp@5.0.0: + resolution: { integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== } + engines: { node: ">=12" } - better-opn@3.0.2: - resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} - engines: {node: '>=12.0.0'} + escodegen@2.1.0: + resolution: { integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== } + engines: { node: ">=6.0" } + hasBin: true - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} + esprima@4.0.1: + resolution: { integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== } + engines: { node: ">=4" } + hasBin: true - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + estraverse@5.3.0: + resolution: { integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== } + engines: { node: ">=4.0" } - body-parser@1.20.5: - resolution: {integrity: sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + estree-util-attach-comments@3.0.0: + resolution: { integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw== } - brace-expansion@1.1.15: - resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==} + estree-util-build-jsx@3.0.1: + resolution: { integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ== } - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + estree-util-is-identifier-name@3.0.0: + resolution: { integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== } - buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + estree-util-scope@1.0.0: + resolution: { integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ== } - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + estree-util-to-js@2.0.0: + resolution: { integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg== } - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} + estree-util-visit@2.0.0: + resolution: { integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww== } - cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} + estree-walker@3.0.3: + resolution: { integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== } - cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} + esutils@2.0.3: + resolution: { integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== } + engines: { node: ">=0.10.0" } - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} + etag@1.8.1: + resolution: { integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== } + engines: { node: ">= 0.6" } - call-bind@1.0.9: - resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} - engines: {node: '>= 0.4'} + event-target-shim@5.0.1: + resolution: { integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== } + engines: { node: ">=6" } - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} + events-universal@1.0.1: + resolution: { integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw== } - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + eventsource-parser@3.1.1: + resolution: { integrity: sha512-EKN1vKAMcZ8MlYMpaNuxN6R9yakzH6uajHcHVTqWJzvu5pWw9DyhbP35HH8MVBQ+dZjAfDxk+A8NiR9KWaXiyQ== } + engines: { node: ">=18.0.0" } - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} + eventsource@3.0.7: + resolution: { integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA== } + engines: { node: ">=18.0.0" } - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} + expand-template@2.0.3: + resolution: { integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== } + engines: { node: ">=6" } - chalk@5.2.0: - resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + expr-eval-fork@3.0.3: + resolution: { integrity: sha512-BhC+hbc5lIVjygr840n5DEkW3MQq7H9o+mc1/N7Z5uIiCFVyESLL5DIE7LNq4CYUNxy+XjA+3jRrL/h0Kt2xcg== } + engines: { node: ">=16.9.0" } - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + express-rate-limit@8.7.0: + resolution: { integrity: sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g== } + engines: { node: ">= 16" } + peerDependencies: + express: ">= 4.11" - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + express@4.22.0: + resolution: { integrity: sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ== } + engines: { node: ">= 0.10.0" } - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} + express@5.2.1: + resolution: { integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw== } + engines: { node: ">= 18" } - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} + extend@3.0.2: + resolution: { integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== } - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} + extract-zip@2.0.1: + resolution: { integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== } + engines: { node: ">= 10.17.0" } + hasBin: true - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + fast-deep-equal@3.1.3: + resolution: { integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== } - chardet@2.1.1: - resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==} + fast-fifo@1.3.2: + resolution: { integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== } - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} + fast-glob@3.3.3: + resolution: { integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== } + engines: { node: ">=8.6.0" } - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + fast-memoize@2.5.2: + resolution: { integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw== } - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + fast-sha256@1.3.0: + resolution: { integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ== } - chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} + fast-uri@3.1.2: + resolution: { integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ== } - chromium-bidi@0.6.2: - resolution: {integrity: sha512-4WVBa6ijmUTVr9cZD4eicQD8Mdy/HCX3bzEIYYpmk0glqYLoWH+LqQEvV9RpDRzoQSbY1KJHloYXbDMXMbDPhg==} - peerDependencies: - devtools-protocol: '*' + fast-xml-builder@1.3.1: + resolution: { integrity: sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug== } - clean-stack@4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} - engines: {node: '>=12'} + fast-xml-parser@5.7.3: + resolution: { integrity: sha512-C0AaNuC+mscy6vrAQKAc/rMq+zAPHodfHGZu4sGVehvAQt/JLG1O5zEcYcXSY5zSqr4YVgxsB+pHXTq0i7eDlg== } + hasBin: true - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} + fastq@1.20.1: + resolution: { integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw== } - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + fault@2.0.1: + resolution: { integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ== } - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} + favicons@7.2.0: + resolution: { integrity: sha512-k/2rVBRIRzOeom3wI9jBPaSEvoTSQEW4iM0EveBmBBKFxO8mSyyRWtDlfC3VnEfu0avmjrMzy8/ZFPSe6F71Hw== } + engines: { node: ">=14.0.0" } - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + fd-slicer@1.1.0: + resolution: { integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== } - cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} + fdir@6.5.0: + resolution: { integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg== } + engines: { node: ">=12.0.0" } + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + fflate@0.8.3: + resolution: { integrity: sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA== } - code-excerpt@4.0.0: - resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + fill-range@7.1.1: + resolution: { integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== } + engines: { node: ">=8" } - collapse-white-space@2.1.0: - resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} + finalhandler@1.3.2: + resolution: { integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== } + engines: { node: ">= 0.8" } - color-blend@4.0.0: - resolution: {integrity: sha512-fYODTHhI/NG+B5GnzvuL3kiFrK/UnkUezWFTgEPBTY5V+kpyfAn95Vn9sJeeCX6omrCOdxnqCL3CvH+6sXtIbw==} - engines: {node: '>=10.0.0'} + finalhandler@2.1.1: + resolution: { integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA== } + engines: { node: ">= 18.0.0" } - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + follow-redirects@1.16.0: + resolution: { integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== } + engines: { node: ">=4.0" } + peerDependencies: + debug: "*" + peerDependenciesMeta: + debug: + optional: true - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + for-each@0.3.5: + resolution: { integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== } + engines: { node: ">= 0.4" } - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + form-data-encoder@2.1.4: + resolution: { integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== } + engines: { node: ">= 14.17" } - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} + form-data@4.0.5: + resolution: { integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== } + engines: { node: ">= 6" } - combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + format@0.2.2: + resolution: { integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww== } + engines: { node: ">=0.4.x" } - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + forwarded@0.2.0: + resolution: { integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== } + engines: { node: ">= 0.6" } - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + fractional-indexing@3.2.0: + resolution: { integrity: sha512-PcOxmqwYCW7O2ovKRU8OoQQj2yqTfEB/yeTYk4gPid6dN5ODRfU1hXd9tTVZzax/0NkO7AxpHykvZnT1aYp/BQ== } + engines: { node: ^14.13.1 || >=16.0.0 } - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} + fresh@0.5.2: + resolution: { integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== } + engines: { node: ">= 0.6" } - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} + fresh@2.0.0: + resolution: { integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== } + engines: { node: ">= 0.8" } - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + front-matter@4.0.2: + resolution: { integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg== } - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + fs-constants@1.0.0: + resolution: { integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== } - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} + fs-extra@11.1.0: + resolution: { integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== } + engines: { node: ">=14.14" } - convert-to-spaces@2.0.1: - resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + fs-extra@11.1.1: + resolution: { integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== } + engines: { node: ">=14.14" } - cookie-signature@1.0.7: - resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} + fs-extra@11.2.0: + resolution: { integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== } + engines: { node: ">=14.14" } - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} + fs.realpath@1.0.0: + resolution: { integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== } - cors@2.8.6: - resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} - engines: {node: '>= 0.10'} + fsevents@2.3.3: + resolution: { integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] - cosmiconfig@9.0.1: - resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true + function-bind@1.1.2: + resolution: { integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== } - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + function.prototype.name@1.1.8: + resolution: { integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== } + engines: { node: ">= 0.4" } - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true + functions-have-names@1.2.3: + resolution: { integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== } - cssfilter@0.0.10: - resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + gcd@0.0.1: + resolution: { integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw== } - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} + generator-function@2.0.1: + resolution: { integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== } + engines: { node: ">= 0.4" } - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} + get-caller-file@2.0.5: + resolution: { integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== } + engines: { node: 6.* || 8.* || >= 10.* } - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + get-east-asian-width@1.6.0: + resolution: { integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA== } + engines: { node: ">=18" } - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.3.0: + resolution: { integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== } + engines: { node: ">= 0.4" } - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + get-proto@1.0.1: + resolution: { integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== } + engines: { node: ">= 0.4" } - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + get-stream@5.2.0: + resolution: { integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== } + engines: { node: ">=8" } - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + get-stream@6.0.1: + resolution: { integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== } + engines: { node: ">=10" } - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + get-symbol-description@1.1.0: + resolution: { integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== } + engines: { node: ">= 0.4" } - decode-bmp@0.2.1: - resolution: {integrity: sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==} - engines: {node: '>=8.6.0'} + get-uri@6.0.5: + resolution: { integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg== } + engines: { node: ">= 14" } - decode-ico@0.4.1: - resolution: {integrity: sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==} - engines: {node: '>=8.6'} + github-from-package@0.0.0: + resolution: { integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== } - decode-named-character-reference@1.3.0: - resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} + glob-parent@5.1.2: + resolution: { integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== } + engines: { node: ">= 6" } - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} + glob-parent@6.0.2: + resolution: { integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== } + engines: { node: ">=10.13.0" } - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} + glob@7.1.6: + resolution: { integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== } + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} + globalthis@1.0.4: + resolution: { integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== } + engines: { node: ">= 0.4" } - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + gopd@1.2.0: + resolution: { integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== } + engines: { node: ">= 0.4" } - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} + got@12.6.1: + resolution: { integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== } + engines: { node: ">=14.16" } - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + got@13.0.0: + resolution: { integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA== } + engines: { node: ">=16" } - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} + graceful-fs@4.2.11: + resolution: { integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== } - delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} + graphql@16.11.0: + resolution: { integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== } + engines: { node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0 } - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} + has-bigints@1.1.0: + resolution: { integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== } + engines: { node: ">= 0.4" } - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} + has-property-descriptors@1.0.2: + resolution: { integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== } - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} + has-proto@1.2.0: + resolution: { integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== } + engines: { node: ">= 0.4" } - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + has-symbols@1.1.0: + resolution: { integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== } + engines: { node: ">= 0.4" } - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} + has-tostringtag@1.0.2: + resolution: { integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== } + engines: { node: ">= 0.4" } - detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + hasown@2.0.4: + resolution: { integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A== } + engines: { node: ">= 0.4" } - detect-port@1.5.1: - resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} - hasBin: true + hast-util-embedded@3.0.0: + resolution: { integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA== } - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + hast-util-from-dom@5.0.1: + resolution: { integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q== } - devtools-protocol@0.0.1312386: - resolution: {integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==} + hast-util-from-html-isomorphic@2.0.0: + resolution: { integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw== } - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + hast-util-from-html@2.0.3: + resolution: { integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw== } - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + hast-util-from-parse5@8.0.3: + resolution: { integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== } - dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} + hast-util-has-property@3.0.0: + resolution: { integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA== } - dns-socket@4.2.2: - resolution: {integrity: sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==} - engines: {node: '>=6'} + hast-util-is-body-ok-link@3.0.1: + resolution: { integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ== } - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + hast-util-is-element@3.0.0: + resolution: { integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g== } - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + hast-util-minify-whitespace@1.0.1: + resolution: { integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw== } - emoji-regex@10.6.0: - resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} + hast-util-parse-selector@4.0.0: + resolution: { integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A== } - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + hast-util-phrasing@3.0.1: + resolution: { integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ== } - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} + hast-util-to-estree@3.1.0: + resolution: { integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw== } - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + hast-util-to-estree@3.1.3: + resolution: { integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w== } - engine.io-parser@5.2.3: - resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} - engines: {node: '>=10.0.0'} + hast-util-to-html@9.0.4: + resolution: { integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA== } - engine.io@6.6.8: - resolution: {integrity: sha512-2agL3ueZhqxoVrfmntO8yuVj+uNSlIOnhykYHk3Cq0ShYPdUjjUiSJrQvXjq01I9jAuI0Zl2YO8Evv5Mqytm5g==} - engines: {node: '>=10.2.0'} + hast-util-to-html@9.0.5: + resolution: { integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw== } - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} + hast-util-to-jsx-runtime@2.3.6: + resolution: { integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== } - env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} + hast-util-to-mdast@10.1.0: + resolution: { integrity: sha512-DsL/SvCK9V7+vfc6SLQ+vKIyBDXTk2KLSbfBYkH4zeF/uR1yBajHRhkzuaUSGOB1WJSTieJBdHwxlC+HLKvZZw== } - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} + hast-util-to-string@3.0.1: + resolution: { integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A== } - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} + hast-util-to-text@4.0.2: + resolution: { integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A== } - es-abstract@1.24.2: - resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==} - engines: {node: '>= 0.4'} + hast-util-whitespace@3.0.0: + resolution: { integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== } - es-aggregate-error@1.0.14: - resolution: {integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==} - engines: {node: '>= 0.4'} + hastscript@9.0.1: + resolution: { integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== } - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} + hono@4.13.7: + resolution: { integrity: sha512-c8/gF9ac8Y78/agExVocyLevgR+JlpNB444Py0FSX8pJoPdYUfUzRcXtYEYGwt6l19qIlVZPN5Mfsw9jFShmQQ== } + engines: { node: ">=16.9.0" } - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} + html-void-elements@3.0.0: + resolution: { integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== } - es-object-atoms@1.1.2: - resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} - engines: {node: '>= 0.4'} + http-cache-semantics@4.2.0: + resolution: { integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ== } - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + http-errors@2.0.1: + resolution: { integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== } + engines: { node: ">= 0.8" } - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} + http-proxy-agent@7.0.2: + resolution: { integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== } + engines: { node: ">= 14" } - es-toolkit@1.47.0: - resolution: {integrity: sha512-n1GuoD0WEQZMBk5tttoZSqwgyLx01oqa5XsBmCHwPyNe1S9jPBEmtR2pSgp2kJuWE3ciFZ6yRHmY4pM4C3OOkw==} + http2-wrapper@2.2.1: + resolution: { integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== } + engines: { node: ">=10.19.0" } - esast-util-from-estree@2.0.0: - resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + https-proxy-agent@5.0.1: + resolution: { integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== } + engines: { node: ">= 6" } - esast-util-from-js@2.0.1: - resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + https-proxy-agent@7.0.6: + resolution: { integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== } + engines: { node: ">= 14" } - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + ico-endec@0.1.6: + resolution: { integrity: sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ== } - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + iconv-lite@0.4.24: + resolution: { integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== } + engines: { node: ">=0.10.0" } - escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} + iconv-lite@0.7.2: + resolution: { integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== } + engines: { node: ">=0.10.0" } - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} + ieee754@1.2.1: + resolution: { integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== } - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + ignore@7.0.5: + resolution: { integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== } + engines: { node: ">= 4" } - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true + immer@9.0.21: + resolution: { integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== } - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + import-fresh@3.3.1: + resolution: { integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== } + engines: { node: ">=6" } - estree-util-attach-comments@3.0.0: - resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} + indent-string@5.0.0: + resolution: { integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== } + engines: { node: ">=12" } - estree-util-build-jsx@3.0.1: - resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} + inflight@1.0.6: + resolution: { integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== } + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + inherits@2.0.4: + resolution: { integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== } - estree-util-scope@1.0.0: - resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + ini@1.3.8: + resolution: { integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== } - estree-util-to-js@2.0.0: - resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} + ink-spinner@5.0.0: + resolution: { integrity: sha512-EYEasbEjkqLGyPOUc8hBJZNuC5GvXGMLu0w5gdTNskPc7Izc5vO3tdQEYnzvshucyGCBXc86ig0ujXPMWaQCdA== } + engines: { node: ">=14.16" } + peerDependencies: + ink: ">=4.0.0" + react: ">=18.0.0" - estree-util-visit@2.0.0: - resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} + ink@6.3.0: + resolution: { integrity: sha512-2CbJAa7XeziZYe6pDS5RVLirRY28iSGMQuEV8jRU5NQsONQNfcR/BZHHc9vkMg2lGYTHTM2pskxC1YmY28p6bQ== } + engines: { node: ">=20" } + peerDependencies: + "@types/react": ">=19.0.0" + react: ">=19.0.0" + react-devtools-core: ^4.19.1 + peerDependenciesMeta: + "@types/react": + optional: true + react-devtools-core: + optional: true - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + inline-style-parser@0.1.1: + resolution: { integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== } - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + inline-style-parser@0.2.7: + resolution: { integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA== } - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} + inquirer@12.3.0: + resolution: { integrity: sha512-3NixUXq+hM8ezj2wc7wC37b32/rHq1MwNZDYdvx+d6jokOD+r+i8Q4Pkylh9tISYP114A128LCX8RKhopC5RfQ== } + engines: { node: ">=18" } + peerDependencies: + "@types/node": ">=18" - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} + internal-slot@1.1.0: + resolution: { integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== } + engines: { node: ">= 0.4" } - events-universal@1.0.1: - resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + ip-address@10.2.0: + resolution: { integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA== } + engines: { node: ">= 12" } - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} + ip-regex@4.3.0: + resolution: { integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== } + engines: { node: ">=8" } - expr-eval-fork@3.0.3: - resolution: {integrity: sha512-BhC+hbc5lIVjygr840n5DEkW3MQq7H9o+mc1/N7Z5uIiCFVyESLL5DIE7LNq4CYUNxy+XjA+3jRrL/h0Kt2xcg==} - engines: {node: '>=16.9.0'} + ipaddr.js@1.9.1: + resolution: { integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== } + engines: { node: ">= 0.10" } - express@4.22.0: - resolution: {integrity: sha512-c2iPh3xp5vvCLgaHK03+mWLFPhox7j1LwyxcZwFVApEv5i0X+IjPpbT50SJJwwLpdBVfp45AkK/v+AFgv/XlfQ==} - engines: {node: '>= 0.10.0'} + iregexp-check@0.1.2: + resolution: { integrity: sha512-RCcV2SFO5JKh+DdmWiY7yVyiZzzk6XZiHEJvTKbzVs8Z0u404gnoSqDtFqg6C5qJBEG4QseWBQz9zhI68zskEQ== } - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + is-alphabetical@2.0.1: + resolution: { integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ== } + + is-alphanumerical@2.0.1: + resolution: { integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw== } - extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true + is-array-buffer@3.0.5: + resolution: { integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== } + engines: { node: ">= 0.4" } - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + is-arrayish@0.2.1: + resolution: { integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== } - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + is-arrayish@0.3.4: + resolution: { integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA== } - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + is-async-function@2.1.1: + resolution: { integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== } + engines: { node: ">= 0.4" } - fast-memoize@2.5.2: - resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} + is-bigint@1.1.0: + resolution: { integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== } + engines: { node: ">= 0.4" } - fast-uri@3.1.2: - resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} + is-binary-path@2.1.0: + resolution: { integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== } + engines: { node: ">=8" } - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + is-boolean-object@1.2.2: + resolution: { integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== } + engines: { node: ">= 0.4" } + + is-callable@1.2.7: + resolution: { integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== } + engines: { node: ">= 0.4" } + + is-core-module@2.16.2: + resolution: { integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA== } + engines: { node: ">= 0.4" } + + is-data-view@1.0.2: + resolution: { integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== } + engines: { node: ">= 0.4" } + + is-date-object@1.1.0: + resolution: { integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== } + engines: { node: ">= 0.4" } + + is-decimal@2.0.1: + resolution: { integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A== } + + is-docker@2.2.1: + resolution: { integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== } + engines: { node: ">=8" } + hasBin: true - fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + is-extglob@2.1.1: + resolution: { integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== } + engines: { node: ">=0.10.0" } - favicons@7.2.0: - resolution: {integrity: sha512-k/2rVBRIRzOeom3wI9jBPaSEvoTSQEW4iM0EveBmBBKFxO8mSyyRWtDlfC3VnEfu0avmjrMzy8/ZFPSe6F71Hw==} - engines: {node: '>=14.0.0'} + is-finalizationregistry@1.1.1: + resolution: { integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== } + engines: { node: ">= 0.4" } - fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + is-fullwidth-code-point@3.0.0: + resolution: { integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== } + engines: { node: ">=8" } - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true + is-fullwidth-code-point@4.0.0: + resolution: { integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== } + engines: { node: ">=12" } - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@1.3.2: - resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} - engines: {node: '>= 0.8'} - - follow-redirects@1.16.0: - resolution: {integrity: sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true + is-fullwidth-code-point@5.1.0: + resolution: { integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ== } + engines: { node: ">=18" } - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} + is-generator-function@1.1.2: + resolution: { integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== } + engines: { node: ">= 0.4" } - form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} + is-glob@4.0.3: + resolution: { integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== } + engines: { node: ">=0.10.0" } - form-data@4.0.5: - resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} - engines: {node: '>= 6'} + is-hexadecimal@2.0.1: + resolution: { integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg== } - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} + is-in-ci@2.0.0: + resolution: { integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w== } + engines: { node: ">=20" } + hasBin: true - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} + is-ip@3.1.0: + resolution: { integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q== } + engines: { node: ">=8" } - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} + is-map@2.0.3: + resolution: { integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== } + engines: { node: ">= 0.4" } - front-matter@4.0.2: - resolution: {integrity: sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==} + is-negative-zero@2.0.3: + resolution: { integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== } + engines: { node: ">= 0.4" } - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + is-number-object@1.1.1: + resolution: { integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== } + engines: { node: ">= 0.4" } - fs-extra@11.1.0: - resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} - engines: {node: '>=14.14'} + is-number@7.0.0: + resolution: { integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== } + engines: { node: ">=0.12.0" } - fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} - engines: {node: '>=14.14'} + is-online@10.0.0: + resolution: { integrity: sha512-WCPdKwNDjXJJmUubf2VHLMDBkUZEtuOvpXUfUnUFbEnM6In9ByiScL4f4jKACz/fsb2qDkesFerW3snf/AYz3A== } + engines: { node: ">=14.16" } - fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + is-plain-obj@4.1.0: + resolution: { integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== } + engines: { node: ">=12" } - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + is-promise@4.0.0: + resolution: { integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== } - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] + is-regex@1.2.1: + resolution: { integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== } + engines: { node: ">= 0.4" } - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + is-set@2.0.3: + resolution: { integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== } + engines: { node: ">= 0.4" } - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.4: + resolution: { integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== } + engines: { node: ">= 0.4" } - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + is-string@1.1.1: + resolution: { integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== } + engines: { node: ">= 0.4" } - gcd@0.0.1: - resolution: {integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==} + is-symbol@1.1.1: + resolution: { integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== } + engines: { node: ">= 0.4" } - generator-function@2.0.1: - resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.15: + resolution: { integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== } + engines: { node: ">= 0.4" } - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + is-weakmap@2.0.2: + resolution: { integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== } + engines: { node: ">= 0.4" } - get-east-asian-width@1.6.0: - resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} - engines: {node: '>=18'} + is-weakref@1.1.1: + resolution: { integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== } + engines: { node: ">= 0.4" } - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} + is-weakset@2.0.4: + resolution: { integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== } + engines: { node: ">= 0.4" } - get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} + is-wsl@2.2.0: + resolution: { integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== } + engines: { node: ">=8" } - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + isarray@2.0.5: + resolution: { integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== } - get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + isexe@2.0.0: + resolution: { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== } - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + jiti@1.21.7: + resolution: { integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== } + hasBin: true - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + jose@6.2.3: + resolution: { integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw== } - get-uri@6.0.5: - resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} - engines: {node: '>= 14'} + js-tokens@4.0.0: + resolution: { integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== } - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + js-yaml@3.14.2: + resolution: { integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== } + hasBin: true - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + js-yaml@4.3.1: + resolution: { integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ== } + hasBin: true - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + js-yaml@4.3.2: + resolution: { integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA== } + hasBin: true - glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + jsep@1.4.0: + resolution: { integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw== } + engines: { node: ">= 10.16.0" } - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + json-buffer@3.0.1: + resolution: { integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== } - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} + json-p3@2.2.2: + resolution: { integrity: sha512-TmTgkx+C1ne8Wdm9dFQ4/jCeYYbSoeYJAkRpvTz6O+zWN1Dc3cKW8Mt52sa8mSRXy/+JykA5I6rmM+k8h+JRRg== } - got@12.6.1: - resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} - engines: {node: '>=14.16'} + json-parse-even-better-errors@2.3.1: + resolution: { integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== } - got@13.0.0: - resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} - engines: {node: '>=16'} + json-schema-to-ts@3.1.1: + resolution: { integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g== } + engines: { node: ">=16" } - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + json-schema-traverse@1.0.0: + resolution: { integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== } - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} + json-schema-typed@8.0.2: + resolution: { integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA== } - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + jsonc-parser@2.2.1: + resolution: { integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w== } - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} + jsonc-parser@3.3.1: + resolution: { integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== } - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} + jsonfile@6.2.1: + resolution: { integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q== } - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + jsonpath-plus@10.4.0: + resolution: { integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA== } + engines: { node: ">=18.0.0" } + hasBin: true - hasown@2.0.4: - resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} - engines: {node: '>= 0.4'} + jsonpointer@5.0.1: + resolution: { integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ== } + engines: { node: ">=0.10.0" } - hast-util-embedded@3.0.0: - resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} + katex@0.16.47: + resolution: { integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg== } + hasBin: true - hast-util-from-dom@5.0.1: - resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} + keytar@7.9.0: + resolution: { integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ== } - hast-util-from-html-isomorphic@2.0.0: - resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} + keyv@4.5.4: + resolution: { integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== } - hast-util-from-html@2.0.3: - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} + lcm@0.0.3: + resolution: { integrity: sha512-TB+ZjoillV6B26Vspf9l2L/vKaRY/4ep3hahcyVkCGFgsTNRUQdc24bQeNFiZeoxH0vr5+7SfNRMQuPHv/1IrQ== } - hast-util-from-parse5@8.0.3: - resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} + leven@3.1.0: + resolution: { integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== } + engines: { node: ">=6" } - hast-util-has-property@3.0.0: - resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} + leven@4.1.0: + resolution: { integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - hast-util-is-body-ok-link@3.0.1: - resolution: {integrity: sha512-0qpnzOBLztXHbHQenVB8uNuxTnm/QBFUOmdOSsEn7GnBtyY07+ENTWVFBAnXd/zEgd9/SUG3lRY7hSIBWRgGpQ==} + lilconfig@3.1.3: + resolution: { integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== } + engines: { node: ">=14" } - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} + lines-and-columns@1.2.4: + resolution: { integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== } - hast-util-minify-whitespace@1.0.1: - resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} + lodash.topath@4.5.2: + resolution: { integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg== } - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + lodash@4.18.1: + resolution: { integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== } - hast-util-phrasing@3.0.1: - resolution: {integrity: sha512-6h60VfI3uBQUxHqTyMymMZnEbNl1XmEGtOxxKYL7stY2o601COo62AWAYBQR9lZbYXYSBoxag8UpPRXK+9fqSQ==} + longest-streak@3.1.0: + resolution: { integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g== } - hast-util-to-estree@3.1.3: - resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} + lowercase-keys@3.0.0: + resolution: { integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - hast-util-to-html@9.0.4: - resolution: {integrity: sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==} + lru-cache@7.18.3: + resolution: { integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== } + engines: { node: ">=12" } - hast-util-to-html@9.0.5: - resolution: {integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==} + markdown-extensions@2.0.0: + resolution: { integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q== } + engines: { node: ">=16" } - hast-util-to-jsx-runtime@2.3.6: - resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} + markdown-table@3.0.4: + resolution: { integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== } - hast-util-to-mdast@10.1.0: - resolution: {integrity: sha512-DsL/SvCK9V7+vfc6SLQ+vKIyBDXTk2KLSbfBYkH4zeF/uR1yBajHRhkzuaUSGOB1WJSTieJBdHwxlC+HLKvZZw==} + math-intrinsics@1.1.0: + resolution: { integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== } + engines: { node: ">= 0.4" } - hast-util-to-string@3.0.1: - resolution: {integrity: sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==} + mdast-util-find-and-replace@3.0.2: + resolution: { integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== } - hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} + mdast-util-from-markdown@2.0.2: + resolution: { integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== } - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + mdast-util-from-markdown@2.0.3: + resolution: { integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q== } - hastscript@9.0.1: - resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + mdast-util-frontmatter@2.0.1: + resolution: { integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA== } - hex-rgb@5.0.0: - resolution: {integrity: sha512-NQO+lgVUCtHxZ792FodgW0zflK+ozS9X9dwGp9XvvmPlH7pyxd588cn24TD3rmPm/N0AIRXF10Otah8yKqGw4w==} - engines: {node: '>=12'} + mdast-util-gfm-autolink-literal@2.0.1: + resolution: { integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== } - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + mdast-util-gfm-footnote@2.1.0: + resolution: { integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== } - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + mdast-util-gfm-strikethrough@2.0.0: + resolution: { integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg== } - http-errors@2.0.1: - resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} - engines: {node: '>= 0.8'} + mdast-util-gfm-table@2.0.0: + resolution: { integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg== } - http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + mdast-util-gfm-task-list-item@2.0.0: + resolution: { integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ== } - http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} + mdast-util-gfm@3.0.0: + resolution: { integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== } - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + mdast-util-gfm@3.1.0: + resolution: { integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== } - https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + mdast-util-math@3.0.0: + resolution: { integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w== } - ico-endec@0.1.6: - resolution: {integrity: sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==} + mdast-util-mdx-expression@2.0.1: + resolution: { integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== } - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + mdast-util-mdx-jsx@3.1.3: + resolution: { integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ== } - iconv-lite@0.7.2: - resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} - engines: {node: '>=0.10.0'} + mdast-util-mdx-jsx@3.2.0: + resolution: { integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== } - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + mdast-util-mdx@3.0.0: + resolution: { integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w== } - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} + mdast-util-mdxjs-esm@2.0.1: + resolution: { integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg== } - immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + mdast-util-phrasing@4.1.0: + resolution: { integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w== } - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + mdast-util-to-hast@13.2.1: + resolution: { integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA== } - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} + mdast-util-to-markdown@2.1.2: + resolution: { integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== } - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + mdast-util-to-string@4.0.0: + resolution: { integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg== } - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + media-typer@0.3.0: + resolution: { integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== } + engines: { node: ">= 0.6" } - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + media-typer@1.1.1: + resolution: { integrity: sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ== } + engines: { node: ">= 0.8" } - ink-spinner@5.0.0: - resolution: {integrity: sha512-EYEasbEjkqLGyPOUc8hBJZNuC5GvXGMLu0w5gdTNskPc7Izc5vO3tdQEYnzvshucyGCBXc86ig0ujXPMWaQCdA==} - engines: {node: '>=14.16'} - peerDependencies: - ink: '>=4.0.0' - react: '>=18.0.0' + merge-descriptors@1.0.3: + resolution: { integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== } - ink@6.3.0: - resolution: {integrity: sha512-2CbJAa7XeziZYe6pDS5RVLirRY28iSGMQuEV8jRU5NQsONQNfcR/BZHHc9vkMg2lGYTHTM2pskxC1YmY28p6bQ==} - engines: {node: '>=20'} - peerDependencies: - '@types/react': '>=19.0.0' - react: '>=19.0.0' - react-devtools-core: ^4.19.1 - peerDependenciesMeta: - '@types/react': - optional: true - react-devtools-core: - optional: true + merge-descriptors@2.0.0: + resolution: { integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== } + engines: { node: ">=18" } - inline-style-parser@0.2.7: - resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + merge2@1.4.1: + resolution: { integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== } + engines: { node: ">= 8" } - inquirer@12.3.0: - resolution: {integrity: sha512-3NixUXq+hM8ezj2wc7wC37b32/rHq1MwNZDYdvx+d6jokOD+r+i8Q4Pkylh9tISYP114A128LCX8RKhopC5RfQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + methods@1.1.2: + resolution: { integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== } + engines: { node: ">= 0.6" } - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + micromark-core-commonmark@2.0.3: + resolution: { integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== } - ip-address@10.2.0: - resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} - engines: {node: '>= 12'} + micromark-extension-frontmatter@2.0.0: + resolution: { integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg== } - ip-regex@4.3.0: - resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} - engines: {node: '>=8'} + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: { integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== } - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} + micromark-extension-gfm-footnote@2.1.0: + resolution: { integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== } - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} + micromark-extension-gfm-strikethrough@2.1.0: + resolution: { integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== } - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} + micromark-extension-gfm-table@2.1.1: + resolution: { integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== } - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} + micromark-extension-gfm-tagfilter@2.0.0: + resolution: { integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg== } - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + micromark-extension-gfm-task-list-item@2.1.0: + resolution: { integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== } - is-arrayish@0.3.4: - resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} + micromark-extension-gfm@3.0.0: + resolution: { integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w== } - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} + micromark-extension-math@3.1.0: + resolution: { integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg== } - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} + micromark-extension-mdx-expression@3.0.1: + resolution: { integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q== } - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + micromark-extension-mdx-jsx@3.0.1: + resolution: { integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg== } - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} + micromark-extension-mdx-md@2.0.0: + resolution: { integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ== } - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} + micromark-extension-mdxjs-esm@3.0.0: + resolution: { integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A== } - is-core-module@2.16.2: - resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} - engines: {node: '>= 0.4'} + micromark-extension-mdxjs@3.0.0: + resolution: { integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ== } - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} + micromark-factory-destination@2.0.1: + resolution: { integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== } - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} + micromark-factory-label@2.0.1: + resolution: { integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== } - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + micromark-factory-mdx-expression@2.0.3: + resolution: { integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ== } - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true + micromark-factory-space@2.0.1: + resolution: { integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== } - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + micromark-factory-title@2.0.1: + resolution: { integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== } - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} + micromark-factory-whitespace@2.0.1: + resolution: { integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== } - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + micromark-util-character@2.1.1: + resolution: { integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== } - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} + micromark-util-chunked@2.0.1: + resolution: { integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== } - is-fullwidth-code-point@5.1.0: - resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} - engines: {node: '>=18'} + micromark-util-classify-character@2.0.1: + resolution: { integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== } - is-generator-function@1.1.2: - resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} - engines: {node: '>= 0.4'} + micromark-util-combine-extensions@2.0.1: + resolution: { integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== } - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + micromark-util-decode-numeric-character-reference@2.0.2: + resolution: { integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== } - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + micromark-util-decode-string@2.0.1: + resolution: { integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== } - is-in-ci@2.0.0: - resolution: {integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==} - engines: {node: '>=20'} - hasBin: true + micromark-util-encode@2.0.1: + resolution: { integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== } - is-ip@3.1.0: - resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} - engines: {node: '>=8'} + micromark-util-events-to-acorn@2.0.3: + resolution: { integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg== } - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} + micromark-util-html-tag-name@2.0.1: + resolution: { integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== } - is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} + micromark-util-normalize-identifier@2.0.1: + resolution: { integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== } - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} + micromark-util-resolve-all@2.0.1: + resolution: { integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== } - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + micromark-util-sanitize-uri@2.0.1: + resolution: { integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== } - is-online@10.0.0: - resolution: {integrity: sha512-WCPdKwNDjXJJmUubf2VHLMDBkUZEtuOvpXUfUnUFbEnM6In9ByiScL4f4jKACz/fsb2qDkesFerW3snf/AYz3A==} - engines: {node: '>=14.16'} + micromark-util-subtokenize@2.1.0: + resolution: { integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== } - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} + micromark-util-symbol@2.0.1: + resolution: { integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== } - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} + micromark-util-types@2.0.2: + resolution: { integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== } - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} + micromark@4.0.2: + resolution: { integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== } - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} + micromatch@4.0.8: + resolution: { integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== } + engines: { node: ">=8.6" } - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} + mime-db@1.52.0: + resolution: { integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== } + engines: { node: ">= 0.6" } - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} + mime-db@1.54.0: + resolution: { integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== } + engines: { node: ">= 0.6" } - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} + mime-types@2.1.35: + resolution: { integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== } + engines: { node: ">= 0.6" } - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} + mime-types@3.0.2: + resolution: { integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== } + engines: { node: ">=18" } - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} + mime@1.6.0: + resolution: { integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== } + engines: { node: ">=4" } + hasBin: true - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + mimic-fn@2.1.0: + resolution: { integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== } + engines: { node: ">=6" } - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + mimic-response@3.1.0: + resolution: { integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== } + engines: { node: ">=10" } - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + mimic-response@4.0.0: + resolution: { integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + minimatch@3.1.5: + resolution: { integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== } - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true + minimist@1.2.8: + resolution: { integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== } - jose@6.2.3: - resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + minipass@7.1.3: + resolution: { integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A== } + engines: { node: ">=16 || 14 >=14.17" } - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + minizlib@3.1.0: + resolution: { integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw== } + engines: { node: ">= 18" } - js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} - hasBin: true + mintlify@4.2.876: + resolution: { integrity: sha512-i/UfJbSBE7ra80loAknnwMLtzf1WRGabOTBMYd+n5oti0PzpQrCutuD4Q3qMrhVMthFsoFsMuD68lddX+Q+9Rw== } + engines: { node: ">=18.0.0" } + hasBin: true - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true + mitt@3.0.1: + resolution: { integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== } - jsep@1.4.0: - resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} - engines: {node: '>= 10.16.0'} + mkdirp-classic@0.5.3: + resolution: { integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== } - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + ms@2.0.0: + resolution: { integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== } - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + ms@2.1.3: + resolution: { integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== } - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + mute-stream@2.0.0: + resolution: { integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== } + engines: { node: ^18.17.0 || >=20.5.0 } - jsonc-parser@2.2.1: - resolution: {integrity: sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==} + mz@2.7.0: + resolution: { integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== } - jsonfile@6.2.1: - resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + nanoid@3.3.18: + resolution: { integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w== } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true - jsonpath-plus@10.4.0: - resolution: {integrity: sha512-T92WWatJXmhBbKsgH/0hl+jxjdXrifi5IKeMY02DWggRxX0UElcbVzPlmgLTbvsPeW1PasQ6xE2Q75stkhGbsA==} - engines: {node: '>=18.0.0'} - hasBin: true + napi-build-utils@2.0.0: + resolution: { integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== } - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} + negotiator@0.6.3: + resolution: { integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== } + engines: { node: ">= 0.6" } - katex@0.16.47: - resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} - hasBin: true + negotiator@1.1.0: + resolution: { integrity: sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg== } + engines: { node: ">=18" } - keytar@7.9.0: - resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} + neotraverse@0.6.18: + resolution: { integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA== } + engines: { node: ">= 10" } - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + netmask@2.1.1: + resolution: { integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA== } + engines: { node: ">= 0.4.0" } - lcm@0.0.3: - resolution: {integrity: sha512-TB+ZjoillV6B26Vspf9l2L/vKaRY/4ep3hahcyVkCGFgsTNRUQdc24bQeNFiZeoxH0vr5+7SfNRMQuPHv/1IrQ==} + next-mdx-remote-client@2.1.12: + resolution: { integrity: sha512-KDfhIk5aEM0kkZ0xQ8XBkmo4O5xmJeGWUomm40Ac/xhkt5sIDOTmTU/QFfmJGLJUJipD5o0BAHqVSIZKuXgNEw== } + engines: { node: ">=20.9.0" } + peerDependencies: + react: ">= 19.1.0" + react-dom: ">= 19.1.0" - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} + nimma@0.2.3: + resolution: { integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA== } + engines: { node: ^12.20 || >=14.13 } - leven@4.1.0: - resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + nlcst-to-string@4.0.0: + resolution: { integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA== } - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} + node-abi@3.92.0: + resolution: { integrity: sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ== } + engines: { node: ">=10" } - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + node-addon-api@4.3.0: + resolution: { integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== } - lodash.topath@4.5.2: - resolution: {integrity: sha512-1/W4dM+35DwvE/iEd1M9ekewOSTlpFekhw9mhAtrwjVqUr83/ilQiyAvmg4tVX7Unkcfl1KC+i9WdaT4B6aQcg==} + node-fetch@2.6.7: + resolution: { integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== } + engines: { node: 4.x || >=6.0.0 } + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true - lodash@4.18.1: - resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + node-fetch@2.7.0: + resolution: { integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== } + engines: { node: 4.x || >=6.0.0 } + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} + non-error@0.1.0: + resolution: { integrity: sha512-TMB1uHiGsHRGv1uYclfhivcnf0/PdFp2pNqRxXjncaAsjYMoisaQJI+SSZCqRq+VliwRTC8tsMQfmrWjDMhkPQ== } + engines: { node: ">=20" } - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + normalize-path@3.0.0: + resolution: { integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== } + engines: { node: ">=0.10.0" } - lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + normalize-url@8.1.1: + resolution: { integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ== } + engines: { node: ">=14.16" } - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} + oauth4webapi@3.8.6: + resolution: { integrity: sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ== } - markdown-extensions@2.0.0: - resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} - engines: {node: '>=16'} + object-assign@4.1.1: + resolution: { integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== } + engines: { node: ">=0.10.0" } - markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + object-hash@3.0.0: + resolution: { integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw== } + engines: { node: ">= 6" } - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} + object-inspect@1.13.4: + resolution: { integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== } + engines: { node: ">= 0.4" } - mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} + object-keys@1.1.1: + resolution: { integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== } + engines: { node: ">= 0.4" } - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + object.assign@4.1.7: + resolution: { integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== } + engines: { node: ">= 0.4" } - mdast-util-from-markdown@2.0.3: - resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} + on-finished@2.4.1: + resolution: { integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== } + engines: { node: ">= 0.8" } - mdast-util-frontmatter@2.0.1: - resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} + once@1.4.0: + resolution: { integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== } - mdast-util-gfm-autolink-literal@2.0.1: - resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} + onetime@5.1.2: + resolution: { integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== } + engines: { node: ">=6" } - mdast-util-gfm-footnote@2.1.0: - resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} + oniguruma-parser@0.12.2: + resolution: { integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw== } - mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} + oniguruma-to-es@4.3.6: + resolution: { integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA== } - mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} + open@8.4.2: + resolution: { integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== } + engines: { node: ">=12" } - mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} + openapi-types@12.1.3: + resolution: { integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw== } - mdast-util-gfm@3.0.0: - resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} + openid-client@6.8.2: + resolution: { integrity: sha512-uOvTCndr4udZsKihJ68H9bUICrriHdUVJ6Az+4Ns6cW55rwM5h0bjVIzDz2SxgOI84LKjFyjOFvERLzdTUROGA== } - mdast-util-gfm@3.1.0: - resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} + orderedmap@2.1.1: + resolution: { integrity: sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g== } - mdast-util-math@3.0.0: - resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} + own-keys@1.0.1: + resolution: { integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== } + engines: { node: ">= 0.4" } - mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} + p-any@4.0.0: + resolution: { integrity: sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw== } + engines: { node: ">=12.20" } - mdast-util-mdx-jsx@3.1.3: - resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} + p-cancelable@3.0.0: + resolution: { integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== } + engines: { node: ">=12.20" } - mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} + p-some@6.0.0: + resolution: { integrity: sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg== } + engines: { node: ">=12.20" } - mdast-util-mdx@3.0.0: - resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} + p-timeout@5.1.0: + resolution: { integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== } + engines: { node: ">=12" } - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} + pac-proxy-agent@7.2.0: + resolution: { integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA== } + engines: { node: ">= 14" } - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} + pac-resolver@7.0.1: + resolution: { integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg== } + engines: { node: ">= 14" } - mdast-util-to-hast@13.2.1: - resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} + parent-module@1.0.1: + resolution: { integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== } + engines: { node: ">=6" } - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} + parse-entities@4.0.2: + resolution: { integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== } - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + parse-json@5.2.0: + resolution: { integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== } + engines: { node: ">=8" } - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} + parse-latin@7.0.0: + resolution: { integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ== } - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + parse5@7.3.0: + resolution: { integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== } - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + parseurl@1.3.3: + resolution: { integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== } + engines: { node: ">= 0.8" } - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} + patch-console@2.0.0: + resolution: { integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} + path-expression-matcher@1.6.2: + resolution: { integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ== } + engines: { node: ">=14.0.0" } - micromark-extension-frontmatter@2.0.0: - resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} + path-is-absolute@1.0.1: + resolution: { integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== } + engines: { node: ">=0.10.0" } - micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} + path-key@3.1.1: + resolution: { integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== } + engines: { node: ">=8" } - micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} + path-parse@1.0.7: + resolution: { integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== } - micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} + path-to-regexp@0.1.13: + resolution: { integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA== } - micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} + path-to-regexp@8.4.2: + resolution: { integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA== } - micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} + pend@1.2.0: + resolution: { integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== } - micromark-extension-gfm-task-list-item@2.1.0: - resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} + picocolors@1.1.1: + resolution: { integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== } - micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} + picomatch@2.3.2: + resolution: { integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA== } + engines: { node: ">=8.6" } - micromark-extension-math@3.1.0: - resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} + picomatch@4.0.4: + resolution: { integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A== } + engines: { node: ">=12" } - micromark-extension-mdx-expression@3.0.1: - resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} + pify@2.3.0: + resolution: { integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== } + engines: { node: ">=0.10.0" } - micromark-extension-mdx-jsx@3.0.1: - resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} + pirates@4.0.7: + resolution: { integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== } + engines: { node: ">= 6" } - micromark-extension-mdx-md@2.0.0: - resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} + pkce-challenge@5.0.1: + resolution: { integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ== } + engines: { node: ">=16.20.0" } - micromark-extension-mdxjs-esm@3.0.0: - resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} + pony-cause@1.1.1: + resolution: { integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g== } + engines: { node: ">=12.0.0" } - micromark-extension-mdxjs@3.0.0: - resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} + possible-typed-array-names@1.1.0: + resolution: { integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== } + engines: { node: ">= 0.4" } - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} + postcss-import@15.1.0: + resolution: { integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew== } + engines: { node: ">=14.0.0" } + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.1.0: + resolution: { integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw== } + engines: { node: ^12 || ^14 || >= 16 } + peerDependencies: + postcss: ^8.4.21 - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} + postcss-load-config@4.0.2: + resolution: { integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== } + engines: { node: ">= 14" } + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true - micromark-factory-mdx-expression@2.0.3: - resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} + postcss-nested@6.2.0: + resolution: { integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ== } + engines: { node: ">=12.0" } + peerDependencies: + postcss: ^8.2.14 + + postcss-selector-parser@6.1.2: + resolution: { integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== } + engines: { node: ">=4" } + + postcss-value-parser@4.2.0: + resolution: { integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== } + + postcss@8.5.23: + resolution: { integrity: sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg== } + engines: { node: ^10 || ^12 || >=14 } + + posthog-node@5.17.2: + resolution: { integrity: sha512-lz3YJOr0Nmiz0yHASaINEDHqoV+0bC3eD8aZAG+Ky292dAnVYul+ga/dMX8KCBXg8hHfKdxw0SztYD5j6dgUqQ== } + engines: { node: ">=20" } + + prebuild-install@7.1.3: + resolution: { integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== } + engines: { node: ">=10" } + deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. + hasBin: true + + progress@2.0.3: + resolution: { integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== } + engines: { node: ">=0.4.0" } + + property-information@6.5.0: + resolution: { integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== } + + property-information@7.2.0: + resolution: { integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg== } + + prosemirror-model@1.25.11: + resolution: { integrity: sha512-QWg9RhnpLlogAmp3p96uEFrE5txQpFynd4vhBAELkwgOCWQs/X0yCzB3/hrHqiPwf91RG5KyWq6553zs9JqIOQ== } + + proxy-addr@2.0.7: + resolution: { integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== } + engines: { node: ">= 0.10" } + + proxy-agent@6.5.0: + resolution: { integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A== } + engines: { node: ">= 14" } + + proxy-from-env@1.1.0: + resolution: { integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== } + + proxy-from-env@2.1.0: + resolution: { integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA== } + engines: { node: ">=10" } + + public-ip@5.0.0: + resolution: { integrity: sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw== } + engines: { node: ^14.13.1 || >=16.0.0 } + + pump@3.0.4: + resolution: { integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA== } + + puppeteer-core@24.3.1: + resolution: { integrity: sha512-585ccfcTav4KmlSmYbwwOSeC8VdutQHn2Fuk0id/y/9OoeO7Gg5PK1aUGdZjEmos0TAq+pCpChqFurFbpNd3wA== } + engines: { node: ">=18" } + + puppeteer@24.3.1: + resolution: { integrity: sha512-k0OJ7itRwkr06owp0CP3f/PsRD7Pdw4DjoCUZvjGr+aNgS1z6n/61VajIp0uBjl+V5XAQO1v/3k9bzeZLWs9OQ== } + engines: { node: ">=18" } + deprecated: < 24.15.0 is no longer supported + hasBin: true + + qs@6.14.2: + resolution: { integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== } + engines: { node: ">=0.6" } - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} + qs@6.15.2: + resolution: { integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw== } + engines: { node: ">=0.6" } - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} + queue-microtask@1.2.3: + resolution: { integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== } - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} + quick-lru@5.1.1: + resolution: { integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== } + engines: { node: ">=10" } - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} + range-parser@1.2.1: + resolution: { integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== } + engines: { node: ">= 0.6" } - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} + raw-body@2.5.3: + resolution: { integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== } + engines: { node: ">= 0.8" } - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} + raw-body@3.0.2: + resolution: { integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== } + engines: { node: ">= 0.10" } - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} + rc@1.2.8: + resolution: { integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== } + hasBin: true - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} + re2js@2.8.6: + resolution: { integrity: sha512-xLgQil4kIUCrAzVk9fRSkxkFNwmygLFjVxXrLc65aE1F0+Zsb8rxumFBy4XKyvgMCTL6kilDq3EZ0piE2dP/Dg== } + engines: { node: ">=18.0.0" } - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} + react-dom@19.2.3: + resolution: { integrity: sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg== } + peerDependencies: + react: ^19.2.3 - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} + react-reconciler@0.32.0: + resolution: { integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ== } + engines: { node: ">=0.10.0" } + peerDependencies: + react: ^19.1.0 - micromark-util-events-to-acorn@2.0.3: - resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} + react@19.2.3: + resolution: { integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA== } + engines: { node: ">=0.10.0" } - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} + read-cache@1.0.0: + resolution: { integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA== } - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} + readable-stream@3.6.2: + resolution: { integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== } + engines: { node: ">= 6" } - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} + readdirp@3.6.0: + resolution: { integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== } + engines: { node: ">=8.10.0" } - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} + recma-build-jsx@1.0.0: + resolution: { integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew== } - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} + recma-jsx@1.0.1: + resolution: { integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w== } + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} + recma-parse@1.0.0: + resolution: { integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ== } - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} + recma-stringify@1.0.0: + resolution: { integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g== } - micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} + reflect.getprototypeof@1.0.10: + resolution: { integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== } + engines: { node: ">= 0.4" } - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + regex-recursion@6.0.2: + resolution: { integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg== } - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} + regex-utilities@2.3.0: + resolution: { integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng== } - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + regex@6.1.0: + resolution: { integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg== } - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true + regexp.prototype.flags@1.5.4: + resolution: { integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== } + engines: { node: ">= 0.4" } - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + rehype-katex@7.0.1: + resolution: { integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA== } - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} + rehype-minify-whitespace@6.0.2: + resolution: { integrity: sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw== } - mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + rehype-parse@9.0.1: + resolution: { integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag== } - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + rehype-recma@1.0.0: + resolution: { integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw== } - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + rehype-stringify@10.0.1: + resolution: { integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA== } - minipass@7.1.3: - resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} - engines: {node: '>=16 || 14 >=14.17'} + remark-frontmatter@5.0.0: + resolution: { integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ== } - minizlib@3.1.0: - resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} - engines: {node: '>= 18'} + remark-gfm@4.0.0: + resolution: { integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== } - mintlify@4.2.590: - resolution: {integrity: sha512-f8Il6o2BuKj7Q79fyURSqbSk1tysnD54+0ZV43D24uKHORV/UXM3mvEEVMEJoBCIHXO59Uh0EMhZf958p84sjA==} - engines: {node: '>=18.0.0'} - hasBin: true + remark-gfm@4.0.1: + resolution: { integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== } - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + remark-math@6.0.0: + resolution: { integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA== } - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + remark-mdx-remove-esm@1.3.2: + resolution: { integrity: sha512-BvL8VSdVXy9S7NlHP56nUJAHFc45h5E9HnHiLUGHe5tw3Yvm/3cVZvAzlkEEh2i+fkq2uKrf2xn5VmItBhMypA== } + peerDependencies: + unified: ^11 - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + remark-mdx@3.0.1: + resolution: { integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA== } - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + remark-mdx@3.1.0: + resolution: { integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA== } - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} + remark-mdx@3.1.1: + resolution: { integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg== } - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + remark-parse@11.0.0: + resolution: { integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA== } - nanoid@3.3.12: - resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true + remark-rehype@11.1.1: + resolution: { integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ== } - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + remark-smartypants@3.0.2: + resolution: { integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA== } + engines: { node: ">=16.0.0" } - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} + remark-stringify@11.0.0: + resolution: { integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw== } - neotraverse@0.6.18: - resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} - engines: {node: '>= 10'} + remark@15.0.1: + resolution: { integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A== } - netmask@2.1.1: - resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} - engines: {node: '>= 0.4.0'} + require-directory@2.1.1: + resolution: { integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== } + engines: { node: ">=0.10.0" } - next-mdx-remote-client@1.1.8: - resolution: {integrity: sha512-IElOrn02JjGQZxx+re7wMx/1AUG+Arte9aDImAtxjAfMw6xuSCaH5mTCunKelkWzFyFdRb565jO8jRICvvh96g==} - engines: {node: '>=20.9.0'} - peerDependencies: - react: '>= 18.3.0 < 19.0.0' - react-dom: '>= 18.3.0 < 19.0.0' + require-from-string@2.0.2: + resolution: { integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== } + engines: { node: ">=0.10.0" } - nimma@0.2.3: - resolution: {integrity: sha512-1ZOI8J+1PKKGceo/5CT5GfQOG6H8I2BencSK06YarZ2wXwH37BSSUWldqJmMJYA5JfqDqffxDXynt6f11AyKcA==} - engines: {node: ^12.20 || >=14.13} + reselect@5.3.0: + resolution: { integrity: sha512-XGoLeRAVzUTcJ1qkxPQhDJyIZ5d6zzZD9nT7AEZOaaU9UbWclhycElmhO+VD5bFeLuzhPBaOV2oXC8uG35ZSpg== } - nlcst-to-string@4.0.0: - resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + resolve-alpn@1.2.1: + resolution: { integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== } - node-abi@3.92.0: - resolution: {integrity: sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==} - engines: {node: '>=10'} + resolve-from@4.0.0: + resolution: { integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== } + engines: { node: ">=4" } - node-addon-api@4.3.0: - resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + resolve@1.22.12: + resolution: { integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== } + engines: { node: ">= 0.4" } + hasBin: true - node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + responselike@3.0.0: + resolution: { integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== } + engines: { node: ">=14.16" } - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + restore-cursor@4.0.0: + resolution: { integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - non-error@0.1.0: - resolution: {integrity: sha512-TMB1uHiGsHRGv1uYclfhivcnf0/PdFp2pNqRxXjncaAsjYMoisaQJI+SSZCqRq+VliwRTC8tsMQfmrWjDMhkPQ==} - engines: {node: '>=20'} + retext-latin@4.0.0: + resolution: { integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA== } - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} + retext-smartypants@6.2.0: + resolution: { integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ== } - normalize-url@8.1.1: - resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} - engines: {node: '>=14.16'} + retext-stringify@4.0.0: + resolution: { integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA== } - oauth4webapi@3.8.6: - resolution: {integrity: sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ==} + retext@9.0.0: + resolution: { integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA== } - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} + reusify@1.1.0: + resolution: { integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} + router@2.2.0: + resolution: { integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== } + engines: { node: ">= 18" } - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} + run-async@3.0.0: + resolution: { integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q== } + engines: { node: ">=0.12.0" } - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} + run-parallel@1.2.0: + resolution: { integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== } - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} + rxjs@7.8.2: + resolution: { integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== } - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + safe-array-concat@1.1.4: + resolution: { integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg== } + engines: { node: ">=0.4" } - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + safe-buffer@5.2.1: + resolution: { integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== } - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + safe-push-apply@1.0.0: + resolution: { integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== } + engines: { node: ">= 0.4" } - oniguruma-parser@0.12.2: - resolution: {integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==} + safe-regex-test@1.1.0: + resolution: { integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== } + engines: { node: ">= 0.4" } - oniguruma-to-es@4.3.6: - resolution: {integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==} + safe-stable-stringify@1.1.1: + resolution: { integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw== } - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + safer-buffer@2.1.2: + resolution: { integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== } - openapi-types@12.1.3: - resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + sax@1.6.0: + resolution: { integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA== } + engines: { node: ">=11.0.0" } - openid-client@6.8.2: - resolution: {integrity: sha512-uOvTCndr4udZsKihJ68H9bUICrriHdUVJ6Az+4Ns6cW55rwM5h0bjVIzDz2SxgOI84LKjFyjOFvERLzdTUROGA==} + scheduler@0.26.0: + resolution: { integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA== } - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + scheduler@0.27.0: + resolution: { integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q== } - p-any@4.0.0: - resolution: {integrity: sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==} - engines: {node: '>=12.20'} + semver@7.7.2: + resolution: { integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== } + engines: { node: ">=10" } + hasBin: true - p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} + send@0.19.2: + resolution: { integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg== } + engines: { node: ">= 0.8.0" } - p-some@6.0.0: - resolution: {integrity: sha512-CJbQCKdfSX3fIh8/QKgS+9rjm7OBNUTmwWswAFQAhc8j1NR1dsEDETUEuVUtQHZpV+J03LqWBEwvu0g1Yn+TYg==} - engines: {node: '>=12.20'} + send@1.2.1: + resolution: { integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ== } + engines: { node: ">= 18" } - p-timeout@5.1.0: - resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} - engines: {node: '>=12'} + serialize-error@13.0.1: + resolution: { integrity: sha512-bBZaRwLH9PN5HbLCjPId4dP5bNGEtumcErgOX952IsvOhVPrm3/AeK1y0UHA/QaPG701eg0yEnOKsCOC6X/kaA== } + engines: { node: ">=20" } - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} + serve-static@1.16.3: + resolution: { integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA== } + engines: { node: ">= 0.8.0" } - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} + serve-static@2.2.1: + resolution: { integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw== } + engines: { node: ">= 18" } - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + set-function-length@1.2.2: + resolution: { integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== } + engines: { node: ">= 0.4" } - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + set-function-name@2.0.2: + resolution: { integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== } + engines: { node: ">= 0.4" } - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + set-proto@1.0.0: + resolution: { integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== } + engines: { node: ">= 0.4" } - parse-latin@7.0.0: - resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} + setprototypeof@1.2.0: + resolution: { integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== } - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + sharp-ico@0.1.5: + resolution: { integrity: sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q== } - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} + sharp@0.33.5: + resolution: { integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw== } + engines: { node: ^18.17.0 || ^20.3.0 || >=21.0.0 } - patch-console@2.0.0: - resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + shebang-command@2.0.0: + resolution: { integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== } + engines: { node: ">=8" } - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + shebang-regex@3.0.0: + resolution: { integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== } + engines: { node: ">=8" } - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + shiki@3.23.0: + resolution: { integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA== } - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + side-channel-list@1.0.1: + resolution: { integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== } + engines: { node: ">= 0.4" } - path-to-regexp@0.1.13: - resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} + side-channel-map@1.0.1: + resolution: { integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== } + engines: { node: ">= 0.4" } - pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + side-channel-weakmap@1.0.2: + resolution: { integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== } + engines: { node: ">= 0.4" } - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + side-channel@1.1.0: + resolution: { integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== } + engines: { node: ">= 0.4" } - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} + signal-exit@3.0.7: + resolution: { integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== } - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} - engines: {node: '>=12'} + signal-exit@4.1.0: + resolution: { integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== } + engines: { node: ">=14" } - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} + simple-concat@1.0.1: + resolution: { integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== } - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} + simple-get@4.0.1: + resolution: { integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== } - pony-cause@1.1.1: - resolution: {integrity: sha512-PxkIc/2ZpLiEzQXu5YRDOUgBlfGYBY8156HY5ZcRAwwonMk5W/MrJP2LLkG/hF7GEQzaHo2aS7ho6ZLCOvf+6g==} - engines: {node: '>=12.0.0'} + simple-swizzle@0.2.4: + resolution: { integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw== } - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} + slice-ansi@5.0.0: + resolution: { integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== } + engines: { node: ">=12" } - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 + slice-ansi@7.1.2: + resolution: { integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w== } + engines: { node: ">=18" } - postcss-js@4.1.0: - resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + smart-buffer@4.2.0: + resolution: { integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== } + engines: { node: ">= 6.0.0", npm: ">= 3.0.0" } + + socket.io-adapter@2.5.7: + resolution: { integrity: sha512-e0LyK91f3cUxTmv95/KzoLg47+zF+s/sbxRGDNsyG4dmIP8ZSX8ax6byOxfJXeNNtS/8AZlfD+uP7gBeR7DLlg== } + + socket.io-parser@4.2.6: + resolution: { integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg== } + engines: { node: ">=10.0.0" } + + socket.io@4.8.0: + resolution: { integrity: sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA== } + engines: { node: ">=10.2.0" } + + socks-proxy-agent@8.0.5: + resolution: { integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== } + engines: { node: ">= 14" } + + socks@2.8.9: + resolution: { integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw== } + engines: { node: ">= 10.0.0", npm: ">= 3.0.0" } + + source-map-js@1.2.1: + resolution: { integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== } + engines: { node: ">=0.10.0" } + + source-map@0.6.1: + resolution: { integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== } + engines: { node: ">=0.10.0" } + + source-map@0.7.6: + resolution: { integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== } + engines: { node: ">= 12" } + + space-separated-tokens@2.0.2: + resolution: { integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== } + + sprintf-js@1.0.3: + resolution: { integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== } + + stack-utils@2.0.6: + resolution: { integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== } + engines: { node: ">=10" } + + standardwebhooks@1.1.1: + resolution: { integrity: sha512-bCbX9ZEyFkWPsRz7Bl3NuQUJohmwGSev/yhr7vhaGPlc4AfIrspIRa6cPTBuI1ItmrTDJ4d/S2hCsfe4+vQGnQ== } + + statuses@2.0.2: + resolution: { integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== } + engines: { node: ">= 0.8" } + + stop-iteration-iterator@1.1.0: + resolution: { integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== } + engines: { node: ">= 0.4" } + + streamx@2.26.0: + resolution: { integrity: sha512-VvNG1K72Po/xwJzxZFnZ++Tbrv4lwSptsbkFuzXCJAYZvCK5nnxsvXU6ajqkv7chyiI1Y0YXq2Jh8Iy8Y7NF/A== } + + string-width@4.2.3: + resolution: { integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== } + engines: { node: ">=8" } + + string-width@7.2.0: + resolution: { integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== } + engines: { node: ">=18" } + + string.prototype.trim@1.2.10: + resolution: { integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== } + engines: { node: ">= 0.4" } + + string.prototype.trimend@1.0.9: + resolution: { integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== } + engines: { node: ">= 0.4" } + + string.prototype.trimstart@1.0.8: + resolution: { integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== } + engines: { node: ">= 0.4" } + + string_decoder@1.3.0: + resolution: { integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== } + + stringify-entities@4.0.4: + resolution: { integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== } + + strip-ansi@6.0.1: + resolution: { integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== } + engines: { node: ">=8" } + + strip-ansi@7.2.0: + resolution: { integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w== } + engines: { node: ">=12" } + + strip-json-comments@2.0.1: + resolution: { integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== } + engines: { node: ">=0.10.0" } + + strnum@2.4.2: + resolution: { integrity: sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw== } + + style-to-js@1.1.21: + resolution: { integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ== } + + style-to-object@0.4.4: + resolution: { integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== } + + style-to-object@1.0.14: + resolution: { integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw== } + + sucrase@3.34.0: + resolution: { integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw== } + engines: { node: ">=8" } + hasBin: true + + sucrase@3.35.1: + resolution: { integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw== } + engines: { node: ">=16 || 14 >=14.17" } + hasBin: true + + supports-preserve-symlinks-flag@1.0.0: + resolution: { integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== } + engines: { node: ">= 0.4" } + + tagged-tag@1.0.0: + resolution: { integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng== } + engines: { node: ">=20" } + + tailwindcss@3.4.17: + resolution: { integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og== } + engines: { node: ">=14.0.0" } + hasBin: true + + tar-fs@2.1.4: + resolution: { integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== } + + tar-fs@3.1.2: + resolution: { integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw== } + + tar-stream@2.2.0: + resolution: { integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== } + engines: { node: ">=6" } + + tar-stream@3.2.0: + resolution: { integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg== } + + tar@7.5.21: + resolution: { integrity: sha512-XdhtCvlMywwxpCW8YEq3lOXBJpUPTR2OHHcwLPO3HwsJqOHa2Ok/oJ7ruGzp+JrKoRPVCzJwAdEjqLW/vNRPHA== } + engines: { node: ">=18" } + + teex@1.0.1: + resolution: { integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg== } + + text-decoder@1.2.7: + resolution: { integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ== } + + thenify-all@1.6.0: + resolution: { integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== } + engines: { node: ">=0.8" } + + thenify@3.3.1: + resolution: { integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== } + + tinyglobby@0.2.17: + resolution: { integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g== } + engines: { node: ">=12.0.0" } + + to-data-view@1.1.0: + resolution: { integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ== } + + to-regex-range@5.0.1: + resolution: { integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== } + engines: { node: ">=8.0" } + + toidentifier@1.0.1: + resolution: { integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== } + engines: { node: ">=0.6" } + + tr46@0.0.3: + resolution: { integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== } + + trim-lines@3.0.1: + resolution: { integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== } + + trim-trailing-lines@2.1.0: + resolution: { integrity: sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg== } + + trough@2.2.0: + resolution: { integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw== } + + ts-algebra@2.0.0: + resolution: { integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw== } + + ts-interface-checker@0.1.13: + resolution: { integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== } + + tslib@1.14.1: + resolution: { integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== } + + tslib@2.8.1: + resolution: { integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== } + + tunnel-agent@0.6.0: + resolution: { integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== } + + twoslash-protocol@0.3.8: + resolution: { integrity: sha512-HmvAHoiEviK8LqvAQyc9/irkdvwTUiR1fHmNwH/0gq8EHxyBt4PWVPixjEXg6wJu1u6yBrILEWXGK9Kw58/8yQ== } + + twoslash@0.3.8: + resolution: { integrity: sha512-OeDz0kDl8sqPUN3nr7gqcvOs70f5lZsdhKYTX3/SgB9OvdadzzoYJI/4SBXhXV1HG8E9fLc+e17itoRYTxmoig== } + peerDependencies: + typescript: ^5.5.0 || ^6.0.0 + + type-fest@0.21.3: + resolution: { integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== } + engines: { node: ">=10" } + + type-fest@4.41.0: + resolution: { integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== } + engines: { node: ">=16" } + + type-fest@5.7.0: + resolution: { integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg== } + engines: { node: ">=20" } + + type-is@1.6.18: + resolution: { integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== } + engines: { node: ">= 0.6" } + + type-is@2.1.0: + resolution: { integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA== } + engines: { node: ">= 18" } + + typed-array-buffer@1.0.3: + resolution: { integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== } + engines: { node: ">= 0.4" } + + typed-array-byte-length@1.0.3: + resolution: { integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== } + engines: { node: ">= 0.4" } + + typed-array-byte-offset@1.0.4: + resolution: { integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== } + engines: { node: ">= 0.4" } + + typed-array-length@1.0.8: + resolution: { integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g== } + engines: { node: ">= 0.4" } + + typed-query-selector@2.12.2: + resolution: { integrity: sha512-EOPFbyIub4ngnEdqi2yOcNeDLaX/0jcE1JoAXQDDMIthap7FoN795lc/SHfIq2d416VufXpM8z/lD+WRm2gfOQ== } + + typescript@6.0.3: + resolution: { integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw== } + engines: { node: ">=14.17" } + hasBin: true + + unbox-primitive@1.1.0: + resolution: { integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== } + engines: { node: ">= 0.4" } + + undici-types@7.24.6: + resolution: { integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg== } + + unified@11.0.5: + resolution: { integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== } + + unist-builder@4.0.0: + resolution: { integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg== } + + unist-util-find-after@5.0.0: + resolution: { integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ== } + + unist-util-is@5.2.1: + resolution: { integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw== } + + unist-util-is@6.0.1: + resolution: { integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== } - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 + unist-util-map@4.0.0: + resolution: { integrity: sha512-HJs1tpkSmRJUzj6fskQrS5oYhBYlmtcvy4SepdDEEsL04FjBrgF0Mgggvxc1/qGBGgW7hRh9+UBK1aqTEnBpIA== } - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} + unist-util-modify-children@4.0.0: + resolution: { integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw== } - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss@8.5.14: - resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} - engines: {node: ^10 || ^12 || >=14} - - posthog-node@5.17.2: - resolution: {integrity: sha512-lz3YJOr0Nmiz0yHASaINEDHqoV+0bC3eD8aZAG+Ky292dAnVYul+ga/dMX8KCBXg8hHfKdxw0SztYD5j6dgUqQ==} - engines: {node: '>=20'} - - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. - hasBin: true - - progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - - property-information@7.2.0: - resolution: {integrity: sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - proxy-from-env@2.1.0: - resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} - engines: {node: '>=10'} - - public-ip@5.0.0: - resolution: {integrity: sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw==} - engines: {node: ^14.13.1 || >=16.0.0} - - pump@3.0.4: - resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} - - puppeteer-core@22.14.0: - resolution: {integrity: sha512-rl4tOY5LcA3e374GAlsGGHc05HL3eGNf5rZ+uxkl6id9zVZKcwcp1Z+Nd6byb6WPiPeecT/dwz8f/iUm+AZQSw==} - engines: {node: '>=18'} - - puppeteer@22.14.0: - resolution: {integrity: sha512-MGTR6/pM8zmWbTdazb6FKnwIihzsSEXBPH49mFFU96DNZpQOevCAZMnjBZGlZRGRzRK6aADCavR6SQtrbv5dQw==} - engines: {node: '>=18'} - deprecated: < 24.15.0 is no longer supported - hasBin: true - - qs@6.14.2: - resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} - engines: {node: '>=0.6'} - - qs@6.15.2: - resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.5.3: - resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} - engines: {node: '>= 0.8'} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - - react-reconciler@0.32.0: - resolution: {integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==} - engines: {node: '>=0.10.0'} - peerDependencies: - react: ^19.1.0 - - react-remove-scroll-bar@2.3.8: - resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - peerDependenciesMeta: - '@types/react': + unist-util-position-from-estree@2.0.0: + resolution: { integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ== } + + unist-util-position@5.0.0: + resolution: { integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== } + + unist-util-remove-position@5.0.0: + resolution: { integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== } + + unist-util-remove@4.0.0: + resolution: { integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg== } + + unist-util-stringify-position@4.0.0: + resolution: { integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== } + + unist-util-visit-children@3.0.0: + resolution: { integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA== } + + unist-util-visit-parents@5.1.3: + resolution: { integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg== } + + unist-util-visit-parents@6.0.1: + resolution: { integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== } + + unist-util-visit-parents@6.0.2: + resolution: { integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== } + + unist-util-visit@4.1.2: + resolution: { integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg== } + + unist-util-visit@5.0.0: + resolution: { integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== } + + universalify@2.0.1: + resolution: { integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== } + engines: { node: ">= 10.0.0" } + + unpipe@1.0.0: + resolution: { integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== } + engines: { node: ">= 0.8" } + + urijs@1.19.11: + resolution: { integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ== } + + use-sync-external-store@1.6.0: + resolution: { integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== } + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + util-deprecate@1.0.2: + resolution: { integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== } + + utility-types@3.11.0: + resolution: { integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw== } + engines: { node: ">= 4" } + + utils-merge@1.0.1: + resolution: { integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== } + engines: { node: ">= 0.4.0" } + + uuid@11.1.1: + resolution: { integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ== } + hasBin: true + + vary@1.1.2: + resolution: { integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== } + engines: { node: ">= 0.8" } + + vfile-location@5.0.3: + resolution: { integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== } + + vfile-matter@5.0.1: + resolution: { integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw== } + + vfile-message@4.0.3: + resolution: { integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== } + + vfile@6.0.3: + resolution: { integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== } + + web-namespaces@2.0.1: + resolution: { integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ== } + + webidl-conversions@3.0.1: + resolution: { integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== } + + whatwg-url@5.0.0: + resolution: { integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== } + + which-boxed-primitive@1.1.1: + resolution: { integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== } + engines: { node: ">= 0.4" } + + which-builtin-type@1.2.1: + resolution: { integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== } + engines: { node: ">= 0.4" } + + which-collection@1.0.2: + resolution: { integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== } + engines: { node: ">= 0.4" } + + which-typed-array@1.1.21: + resolution: { integrity: sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw== } + engines: { node: ">= 0.4" } + + which@2.0.2: + resolution: { integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== } + engines: { node: ">= 8" } + hasBin: true + + widest-line@5.0.0: + resolution: { integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA== } + engines: { node: ">=18" } + + wrap-ansi@6.2.0: + resolution: { integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== } + engines: { node: ">=8" } + + wrap-ansi@7.0.0: + resolution: { integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== } + engines: { node: ">=10" } + + wrap-ansi@9.0.2: + resolution: { integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww== } + engines: { node: ">=18" } + + wrappy@1.0.2: + resolution: { integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== } + + ws@8.20.1: + resolution: { integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w== } + engines: { node: ">=10.0.0" } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.21.0: + resolution: { integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g== } + engines: { node: ">=10.0.0" } + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-naming@0.3.0: + resolution: { integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ== } + engines: { node: ">=16.0.0" } + + xml2js@0.6.2: + resolution: { integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== } + engines: { node: ">=4.0.0" } + + xmlbuilder@11.0.1: + resolution: { integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== } + engines: { node: ">=4.0" } + + xss@1.0.15: + resolution: { integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg== } + engines: { node: ">= 0.10.0" } + hasBin: true + + y18n@5.0.8: + resolution: { integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== } + engines: { node: ">=10" } + + yallist@5.0.0: + resolution: { integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== } + engines: { node: ">=18" } + + yaml@2.9.0: + resolution: { integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA== } + engines: { node: ">= 14.6" } + hasBin: true + + yargs-parser@21.1.1: + resolution: { integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== } + engines: { node: ">=12" } + + yargs@17.7.1: + resolution: { integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw== } + engines: { node: ">=12" } + + yargs@17.7.2: + resolution: { integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== } + engines: { node: ">=12" } + + yauzl@2.10.0: + resolution: { integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== } + + yoctocolors-cjs@2.1.3: + resolution: { integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw== } + engines: { node: ">=18" } + + yoga-layout@3.2.1: + resolution: { integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ== } + + zod-to-json-schema@3.20.4: + resolution: { integrity: sha512-Un9+kInJ2Zt63n6Z7mLqBifzzPcOyX+b+Exuzf7L1+xqck9Q2EPByyTRduV3kmSPaXaRer1JCsucubpgL1fipg== } + peerDependencies: + zod: ^3.20.0 + + zod-to-json-schema@3.25.2: + resolution: { integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA== } + peerDependencies: + zod: ^3.25.28 || ^4 + + zod@3.24.0: + resolution: { integrity: sha512-Hz+wiY8yD0VLA2k/+nsg2Abez674dDGTai33SwNvMPuf9uIrBC9eFgIMQxBBbHFxVXi8W+5nX9DcAh9YNSQm/w== } + + zod@3.25.76: + resolution: { integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== } + + zod@4.3.6: + resolution: { integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg== } + + zwitch@2.0.4: + resolution: { integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A== } + +snapshots: + "@alcalzone/ansi-tokenize@0.2.5": + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + "@alloc/quick-lru@5.2.0": {} + + "@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.241": optional: true - react-remove-scroll@2.7.2: - resolution: {integrity: sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': + "@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.241": optional: true - react-style-singleton@2.2.3: - resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': + "@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.241": optional: true - react@19.2.3: - resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==} - engines: {node: '>=0.10.0'} + "@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.241": + optional: true - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + "@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.241": + optional: true - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + "@anthropic-ai/claude-agent-sdk-linux-x64@0.3.241": + optional: true - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + "@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.241": + optional: true - recma-build-jsx@1.0.0: - resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + "@anthropic-ai/claude-agent-sdk-win32-x64@0.3.241": + optional: true - recma-jsx@1.0.1: - resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + "@anthropic-ai/claude-agent-sdk@0.3.241(@anthropic-ai/sdk@0.120.0(zod@4.3.6))(@modelcontextprotocol/sdk@1.30.0(zod@4.3.6))(zod@4.3.6)": + dependencies: + "@anthropic-ai/sdk": 0.120.0(zod@4.3.6) + "@modelcontextprotocol/sdk": 1.30.0(zod@4.3.6) + zod: 4.3.6 + optionalDependencies: + "@anthropic-ai/claude-agent-sdk-darwin-arm64": 0.3.241 + "@anthropic-ai/claude-agent-sdk-darwin-x64": 0.3.241 + "@anthropic-ai/claude-agent-sdk-linux-arm64": 0.3.241 + "@anthropic-ai/claude-agent-sdk-linux-arm64-musl": 0.3.241 + "@anthropic-ai/claude-agent-sdk-linux-x64": 0.3.241 + "@anthropic-ai/claude-agent-sdk-linux-x64-musl": 0.3.241 + "@anthropic-ai/claude-agent-sdk-win32-arm64": 0.3.241 + "@anthropic-ai/claude-agent-sdk-win32-x64": 0.3.241 + optional: true - recma-parse@1.0.0: - resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + "@anthropic-ai/sdk@0.120.0(zod@4.3.6)": + dependencies: + json-schema-to-ts: 3.1.1 + standardwebhooks: 1.1.1 + optionalDependencies: + zod: 4.3.6 + optional: true - recma-stringify@1.0.0: - resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + "@apidevtools/json-schema-ref-parser@15.3.6(@types/json-schema@7.0.15)": + dependencies: + "@types/json-schema": 7.0.15 + js-yaml: 4.3.2 + + "@apidevtools/openapi-schemas@2.1.0": {} + + "@apidevtools/swagger-methods@3.0.2": {} + + "@apidevtools/swagger-parser@13.0.0(openapi-types@12.1.3)": + dependencies: + "@apidevtools/json-schema-ref-parser": 15.3.6(@types/json-schema@7.0.15) + "@apidevtools/openapi-schemas": 2.1.0 + "@apidevtools/swagger-methods": 3.0.2 + "@types/json-schema": 7.0.15 + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + call-me-maybe: 1.0.2 + openapi-types: 12.1.3 + + "@ark/schema@0.56.0": + dependencies: + "@ark/util": 0.56.0 + + "@ark/util@0.56.0": {} + + "@asyncapi/parser@3.4.0": + dependencies: + "@asyncapi/specs": 6.8.1 + "@openapi-contrib/openapi-schema-to-json-schema": 3.2.0 + "@stoplight/json": 3.21.0 + "@stoplight/json-ref-readers": 1.2.2 + "@stoplight/json-ref-resolver": 3.1.6 + "@stoplight/spectral-core": 1.23.0 + "@stoplight/spectral-functions": 1.10.2 + "@stoplight/spectral-parsers": 1.0.5 + "@stoplight/spectral-ref-resolver": 1.0.5 + "@stoplight/types": 13.20.0 + "@types/json-schema": 7.0.15 + "@types/urijs": 1.19.26 + ajv: 8.20.0 + ajv-errors: 3.0.0(ajv@8.20.0) + ajv-formats: 2.1.1(ajv@8.20.0) + avsc: 5.7.9 + js-yaml: 4.3.2 + jsonpath-plus: 10.4.0 + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + + "@asyncapi/specs@6.8.1": + dependencies: + "@types/json-schema": 7.0.15 + + "@babel/code-frame@7.29.7": + dependencies: + "@babel/helper-validator-identifier": 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + "@babel/helper-validator-identifier@7.29.7": {} + + "@babel/runtime@7.29.7": {} + + "@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@babel/runtime": 7.29.7 + "@base-ui/utils": 0.4.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@floating-ui/react-dom": 2.1.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@floating-ui/utils": 0.2.12 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + use-sync-external-store: 1.6.0(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.14 + + "@base-ui/utils@0.4.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@babel/runtime": 7.29.7 + "@floating-ui/utils": 0.2.12 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + reselect: 5.3.0 + use-sync-external-store: 1.6.0(react@19.2.3) + optionalDependencies: + "@types/react": 19.2.14 + + "@bonyanoss/bonyan-api@1.0.2": {} + + "@canvas/image-data@1.1.0": {} + + "@emnapi/runtime@1.10.0": + dependencies: + tslib: 2.8.1 + optional: true - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + "@floating-ui/core@1.8.0": + dependencies: + "@floating-ui/utils": 0.2.12 - regex-recursion@6.0.2: - resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + "@floating-ui/dom@1.8.0": + dependencies: + "@floating-ui/core": 1.8.0 + "@floating-ui/utils": 0.2.12 - regex-utilities@2.3.0: - resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + "@floating-ui/react-dom@2.1.9(react-dom@19.2.3(react@19.2.3))(react@19.2.3)": + dependencies: + "@floating-ui/dom": 1.8.0 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) - regex@6.1.0: - resolution: {integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==} + "@floating-ui/utils@0.2.12": {} - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + "@hono/node-server@2.1.1(hono@4.13.7)": + dependencies: + hono: 4.13.7 + optional: true - rehype-katex@7.0.1: - resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} + "@img/sharp-darwin-arm64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-darwin-arm64": 1.0.4 + optional: true - rehype-minify-whitespace@6.0.2: - resolution: {integrity: sha512-Zk0pyQ06A3Lyxhe9vGtOtzz3Z0+qZ5+7icZ/PL/2x1SHPbKao5oB/g/rlc6BCTajqBb33JcOe71Ye1oFsuYbnw==} + "@img/sharp-darwin-x64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-darwin-x64": 1.0.4 + optional: true - rehype-parse@9.0.1: - resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==} + "@img/sharp-libvips-darwin-arm64@1.0.4": + optional: true - rehype-recma@1.0.0: - resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + "@img/sharp-libvips-darwin-x64@1.0.4": + optional: true - rehype-stringify@10.0.1: - resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==} + "@img/sharp-libvips-linux-arm64@1.0.4": + optional: true - remark-frontmatter@5.0.0: - resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} + "@img/sharp-libvips-linux-arm@1.0.5": + optional: true - remark-gfm@4.0.0: - resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} + "@img/sharp-libvips-linux-s390x@1.0.4": + optional: true - remark-math@6.0.0: - resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} + "@img/sharp-libvips-linux-x64@1.0.4": + optional: true - remark-mdx-remove-esm@1.3.2: - resolution: {integrity: sha512-BvL8VSdVXy9S7NlHP56nUJAHFc45h5E9HnHiLUGHe5tw3Yvm/3cVZvAzlkEEh2i+fkq2uKrf2xn5VmItBhMypA==} - peerDependencies: - unified: ^11 + "@img/sharp-libvips-linuxmusl-arm64@1.0.4": + optional: true - remark-mdx@3.0.1: - resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} + "@img/sharp-libvips-linuxmusl-x64@1.0.4": + optional: true - remark-mdx@3.1.0: - resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==} + "@img/sharp-linux-arm64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm64": 1.0.4 + optional: true - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} + "@img/sharp-linux-arm@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-arm": 1.0.5 + optional: true - remark-rehype@11.1.1: - resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} + "@img/sharp-linux-s390x@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-s390x": 1.0.4 + optional: true - remark-smartypants@3.0.2: - resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==} - engines: {node: '>=16.0.0'} + "@img/sharp-linux-x64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linux-x64": 1.0.4 + optional: true - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} + "@img/sharp-linuxmusl-arm64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-arm64": 1.0.4 + optional: true - remark@15.0.1: - resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} + "@img/sharp-linuxmusl-x64@0.33.5": + optionalDependencies: + "@img/sharp-libvips-linuxmusl-x64": 1.0.4 + optional: true - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + "@img/sharp-wasm32@0.33.5": + dependencies: + "@emnapi/runtime": 1.10.0 + optional: true - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} + "@img/sharp-win32-ia32@0.33.5": + optional: true - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + "@img/sharp-win32-x64@0.33.5": + optional: true - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + "@inquirer/ansi@1.0.2": {} + + "@inquirer/checkbox@4.3.2(@types/node@25.9.1)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@25.9.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/confirm@5.1.21(@types/node@25.9.1)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/type": 3.0.10(@types/node@25.9.1) + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/core@10.3.2(@types/node@25.9.1)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@25.9.1) + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/editor@4.2.23(@types/node@25.9.1)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/external-editor": 1.0.3(@types/node@25.9.1) + "@inquirer/type": 3.0.10(@types/node@25.9.1) + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/expand@4.0.23(@types/node@25.9.1)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/type": 3.0.10(@types/node@25.9.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/external-editor@1.0.3(@types/node@25.9.1)": + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/figures@1.0.15": {} + + "@inquirer/input@4.3.1(@types/node@25.9.1)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/type": 3.0.10(@types/node@25.9.1) + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/number@3.0.23(@types/node@25.9.1)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/type": 3.0.10(@types/node@25.9.1) + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/password@4.0.23(@types/node@25.9.1)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/type": 3.0.10(@types/node@25.9.1) + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/prompts@7.9.0(@types/node@25.9.1)": + dependencies: + "@inquirer/checkbox": 4.3.2(@types/node@25.9.1) + "@inquirer/confirm": 5.1.21(@types/node@25.9.1) + "@inquirer/editor": 4.2.23(@types/node@25.9.1) + "@inquirer/expand": 4.0.23(@types/node@25.9.1) + "@inquirer/input": 4.3.1(@types/node@25.9.1) + "@inquirer/number": 3.0.23(@types/node@25.9.1) + "@inquirer/password": 4.0.23(@types/node@25.9.1) + "@inquirer/rawlist": 4.1.11(@types/node@25.9.1) + "@inquirer/search": 3.2.2(@types/node@25.9.1) + "@inquirer/select": 4.4.2(@types/node@25.9.1) + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/rawlist@4.1.11(@types/node@25.9.1)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/type": 3.0.10(@types/node@25.9.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/search@3.2.2(@types/node@25.9.1)": + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@25.9.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/select@4.4.2(@types/node@25.9.1)": + dependencies: + "@inquirer/ansi": 1.0.2 + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/figures": 1.0.15 + "@inquirer/type": 3.0.10(@types/node@25.9.1) + yoctocolors-cjs: 2.1.3 + optionalDependencies: + "@types/node": 25.9.1 + + "@inquirer/type@3.0.10(@types/node@25.9.1)": + optionalDependencies: + "@types/node": 25.9.1 + + "@isaacs/fs-minipass@4.0.1": + dependencies: + minipass: 7.1.3 + + "@jridgewell/gen-mapping@0.3.13": + dependencies: + "@jridgewell/sourcemap-codec": 1.5.5 + "@jridgewell/trace-mapping": 0.3.31 + + "@jridgewell/resolve-uri@3.1.2": {} + + "@jridgewell/sourcemap-codec@1.5.5": {} + + "@jridgewell/trace-mapping@0.3.31": + dependencies: + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.5 + + "@jsep-plugin/assignment@1.3.0(jsep@1.4.0)": + dependencies: + jsep: 1.4.0 + + "@jsep-plugin/regex@1.0.4(jsep@1.4.0)": + dependencies: + jsep: 1.4.0 + + "@jsep-plugin/ternary@1.1.4(jsep@1.4.0)": + dependencies: + jsep: 1.4.0 + + "@leichtgewicht/ip-codec@2.0.5": {} + + "@mdx-js/mdx@3.1.1": + dependencies: + "@types/estree": 1.0.9 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdx": 2.0.13 + acorn: 8.11.2 + collapse-white-space: 2.1.0 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-util-scope: 1.0.0 + estree-walker: 3.0.3 + hast-util-to-jsx-runtime: 2.3.6 + markdown-extensions: 2.0.0 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.1(acorn@8.11.2) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.1 + source-map: 0.7.6 + unified: 11.0.5 + unist-util-position-from-estree: 2.0.0 + unist-util-stringify-position: 4.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + transitivePeerDependencies: + - supports-color + + "@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.3)": + dependencies: + "@types/mdx": 2.0.14 + "@types/react": 19.2.14 + react: 19.2.3 + + "@mintlify/cli@4.0.1479(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/node@25.9.1)(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(typescript@6.0.3)": + dependencies: + "@inquirer/prompts": 7.9.0(@types/node@25.9.1) + "@mintlify/common": 1.0.1132(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/link-rot": 3.0.1334(patch_hash=d26576946b6c3cdb6312a07b237398d0557e9a9970db114df92d0c395c0f76b2)(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/models": 0.0.353 + "@mintlify/prebuild": 1.0.1286(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/previewing": 4.0.1358(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(typescript@6.0.3) + "@mintlify/validation": 0.1.849(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + adm-zip: 0.6.0 + chalk: 5.2.0 + color: 4.2.3 + detect-port: 1.5.1 + fs-extra: 11.2.0 + ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) + inquirer: 12.3.0(@types/node@25.9.1) + js-yaml: 4.3.1 + jsonc-parser: 3.3.1 + mdast-util-mdx-jsx: 3.2.0 + open: 8.4.2 + openid-client: 6.8.2 + posthog-node: 5.17.2 + prosemirror-model: 1.25.11 + react: 19.2.3 + remark: 15.0.1 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.1 + remark-math: 6.0.0 + remark-mdx: 3.1.1 + remark-stringify: 11.0.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + yaml: 2.9.0 + yargs: 17.7.1 + zod: 4.3.6 + optionalDependencies: + "@anthropic-ai/claude-agent-sdk": 0.3.241(@anthropic-ai/sdk@0.120.0(zod@4.3.6))(@modelcontextprotocol/sdk@1.30.0(zod@4.3.6))(zod@4.3.6) + "@anthropic-ai/sdk": 0.120.0(zod@4.3.6) + "@modelcontextprotocol/sdk": 1.30.0(zod@4.3.6) + "@openai/codex-sdk": 0.149.1 + keytar: 7.9.0 + transitivePeerDependencies: + - "@base-ui/react" + - "@cfworker/json-schema" + - "@types/node" + - "@types/react" + - bare-abort-controller + - bare-buffer + - bufferutil + - debug + - encoding + - react-devtools-core + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + "@mintlify/common@1.0.1132(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3)": + dependencies: + "@asyncapi/parser": 3.4.0 + "@mintlify/mdx": 4.0.2(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/models": 0.0.353 + "@mintlify/openapi-parser": 0.0.8 + "@mintlify/validation": 0.1.849(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@sindresorhus/slugify": 2.2.0 + "@types/mdast": 4.0.4 + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + estree-util-to-js: 2.0.0 + estree-walker: 3.0.3 + front-matter: 4.0.2 + hast-util-from-html: 2.0.3 + hast-util-to-estree: 3.1.0 + hast-util-to-html: 9.0.4 + ignore: 7.0.5 + iregexp-check: 0.1.2 + js-yaml: 4.3.1 + json-p3: 2.2.2 + lodash: 4.18.1 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm: 3.0.0 + mdast-util-mdx: 3.0.0 + mdast-util-mdx-jsx: 3.1.3 + micromark-extension-gfm: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + openapi-types: 12.1.3 + postcss: 8.5.23 + re2js: 2.8.6 + rehype-katex: 7.0.1 + rehype-stringify: 10.0.1 + remark: 15.0.1 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.0 + remark-math: 6.0.0 + remark-mdx: 3.1.0 + remark-parse: 11.0.0 + remark-rehype: 11.1.1 + remark-smartypants: 3.0.2 + remark-stringify: 11.0.0 + sucrase: 3.34.0 + tailwindcss-v3: tailwindcss@3.4.17 + unified: 11.0.5 + unist-builder: 4.0.0 + unist-util-map: 4.0.0 + unist-util-remove: 4.0.0 + unist-util-remove-position: 5.0.0 + unist-util-visit: 5.0.0 + unist-util-visit-parents: 6.0.1 + vfile: 6.0.3 + xss: 1.0.15 + transitivePeerDependencies: + - "@base-ui/react" + - "@types/react" + - debug + - encoding + - react + - react-dom + - supports-color + - ts-node + - typescript + + "@mintlify/link-rot@3.0.1334(patch_hash=d26576946b6c3cdb6312a07b237398d0557e9a9970db114df92d0c395c0f76b2)(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3)": + dependencies: + "@mintlify/common": 1.0.1132(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/models": 0.0.353 + "@mintlify/prebuild": 1.0.1286(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/previewing": 4.0.1358(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(typescript@6.0.3) + "@mintlify/scraping": 4.0.1000(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/validation": 0.1.849(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + fs-extra: 11.1.0 + unist-util-visit: 4.1.2 + transitivePeerDependencies: + - "@base-ui/react" + - "@types/react" + - bare-abort-controller + - bare-buffer + - bufferutil + - debug + - encoding + - react + - react-devtools-core + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + "@mintlify/mdx@4.0.2(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3)": + dependencies: + "@base-ui/react": 1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + "@shikijs/transformers": 3.23.0 + "@shikijs/twoslash": 3.23.0(typescript@6.0.3) + arktype: 2.2.0 + hast-util-to-string: 3.0.1 + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm: 3.1.0 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-to-hast: 13.2.1 + next-mdx-remote-client: 2.1.12(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(unified@11.0.5) + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + rehype-katex: 7.0.1 + remark-gfm: 4.0.1 + remark-math: 6.0.0 + remark-smartypants: 3.0.2 + shiki: 3.23.0 + twoslash: 0.3.8(typescript@6.0.3) + unified: 11.0.5 + unist-util-visit: 5.0.0 + transitivePeerDependencies: + - "@types/react" + - supports-color + - typescript + + "@mintlify/models@0.0.353": + dependencies: + axios: 1.18.0 + openapi-types: 12.1.3 + transitivePeerDependencies: + - debug + - supports-color + + "@mintlify/openapi-parser@0.0.8": + dependencies: + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + ajv-formats: 3.0.1(ajv@8.20.0) + jsonpointer: 5.0.1 + leven: 4.1.0 + yaml: 2.9.0 + + "@mintlify/prebuild@1.0.1286(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3)": + dependencies: + "@mintlify/common": 1.0.1132(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/scraping": 4.0.1000(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/validation": 0.1.849(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + chalk: 5.3.0 + favicons: 7.2.0 + fflate: 0.8.3 + fs-extra: 11.1.0 + js-yaml: 4.3.1 + openapi-types: 12.1.3 + sharp: 0.33.5 + sharp-ico: 0.1.5 + uuid: 11.1.1 + transitivePeerDependencies: + - "@base-ui/react" + - "@types/react" + - bare-abort-controller + - bare-buffer + - bufferutil + - debug + - encoding + - react + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + "@mintlify/previewing@4.0.1358(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(typescript@6.0.3)": + dependencies: + "@mintlify/common": 1.0.1132(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/prebuild": 1.0.1286(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/validation": 0.1.849(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + adm-zip: 0.6.0 + better-opn: 3.0.2 + chalk: 5.2.0 + chokidar: 3.5.3 + express: 4.22.0 + fs-extra: 11.1.0 + got: 13.0.0 + ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) + ink-spinner: 5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) + is-online: 10.0.0 + js-yaml: 4.3.1 + react: 19.2.3 + socket.io: 4.8.0 + tar: 7.5.21 + yargs: 17.7.1 + transitivePeerDependencies: + - "@base-ui/react" + - "@types/react" + - bare-abort-controller + - bare-buffer + - bufferutil + - debug + - encoding + - react-devtools-core + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + "@mintlify/scraping@4.0.1000(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3)": + dependencies: + "@mintlify/common": 1.0.1132(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + fast-xml-parser: 5.7.3 + fs-extra: 11.1.1 + graphql: 16.11.0 + hast-util-to-mdast: 10.1.0 + js-yaml: 4.3.1 + mdast-util-mdx-jsx: 3.1.3 + neotraverse: 0.6.18 + puppeteer: 24.3.1(typescript@6.0.3) + rehype-parse: 9.0.1 + remark-gfm: 4.0.0 + remark-mdx: 3.0.1 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + yargs: 17.7.1 + zod: 3.24.0 + transitivePeerDependencies: + - "@base-ui/react" + - "@types/react" + - bare-abort-controller + - bare-buffer + - bufferutil + - debug + - encoding + - react + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + "@mintlify/validation@0.1.849(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3)": + dependencies: + "@mintlify/mdx": 4.0.2(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(typescript@6.0.3) + "@mintlify/models": 0.0.353 + fractional-indexing: 3.2.0 + js-yaml: 4.3.1 + lcm: 0.0.3 + lodash: 4.18.1 + neotraverse: 0.6.18 + object-hash: 3.0.0 + openapi-types: 12.1.3 + uuid: 11.1.1 + zod: 3.24.0 + zod-to-json-schema: 3.20.4(zod@3.24.0) + transitivePeerDependencies: + - "@base-ui/react" + - "@types/react" + - debug + - react + - react-dom + - supports-color + - typescript + + "@modelcontextprotocol/sdk@1.30.0(zod@4.3.6)": + dependencies: + "@hono/node-server": 2.1.1(hono@4.13.7) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.1.1 + express: 5.2.1 + express-rate-limit: 8.7.0(express@5.2.1) + hono: 4.13.7 + jose: 6.2.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.3.6 + zod-to-json-schema: 3.25.2(zod@4.3.6) + transitivePeerDependencies: + - supports-color + optional: true - resolve@1.22.12: - resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==} - engines: {node: '>= 0.4'} - hasBin: true + "@nodable/entities@2.2.0": {} - responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} + "@nodelib/fs.scandir@2.1.5": + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: 1.2.0 - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + "@nodelib/fs.stat@2.0.5": {} - retext-latin@4.0.0: - resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} + "@nodelib/fs.walk@1.2.8": + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: 1.20.1 - retext-smartypants@6.2.0: - resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==} + "@openai/codex-sdk@0.149.1": + dependencies: + "@openai/codex": 0.149.1 + optional: true - retext-stringify@4.0.0: - resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} + "@openai/codex@0.149.1": + optionalDependencies: + "@openai/codex-darwin-arm64": "@openai/codex@0.149.1-darwin-arm64" + "@openai/codex-darwin-x64": "@openai/codex@0.149.1-darwin-x64" + "@openai/codex-linux-arm64": "@openai/codex@0.149.1-linux-arm64" + "@openai/codex-linux-x64": "@openai/codex@0.149.1-linux-x64" + "@openai/codex-win32-arm64": "@openai/codex@0.149.1-win32-arm64" + "@openai/codex-win32-x64": "@openai/codex@0.149.1-win32-x64" + optional: true - retext@9.0.0: - resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + "@openai/codex@0.149.1-darwin-arm64": + optional: true - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + "@openai/codex@0.149.1-darwin-x64": + optional: true - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} - engines: {node: '>=0.12.0'} + "@openai/codex@0.149.1-linux-arm64": + optional: true - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + "@openai/codex@0.149.1-linux-x64": + optional: true - rxjs@7.8.2: - resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + "@openai/codex@0.149.1-win32-arm64": + optional: true - safe-array-concat@1.1.4: - resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} - engines: {node: '>=0.4'} + "@openai/codex@0.149.1-win32-x64": + optional: true - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + "@openapi-contrib/openapi-schema-to-json-schema@3.2.0": + dependencies: + fast-deep-equal: 3.1.3 + + "@posthog/core@1.7.1": + dependencies: + cross-spawn: 7.0.6 + + "@puppeteer/browsers@2.7.1": + dependencies: + debug: 4.4.3 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.2 + tar-fs: 3.1.2 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color + + "@shikijs/core@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + hast-util-to-html: 9.0.5 + + "@shikijs/engine-javascript@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + oniguruma-to-es: 4.3.6 + + "@shikijs/engine-oniguruma@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + + "@shikijs/langs@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + + "@shikijs/themes@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + + "@shikijs/transformers@3.23.0": + dependencies: + "@shikijs/core": 3.23.0 + "@shikijs/types": 3.23.0 + + "@shikijs/twoslash@3.23.0(typescript@6.0.3)": + dependencies: + "@shikijs/core": 3.23.0 + "@shikijs/types": 3.23.0 + twoslash: 0.3.8(typescript@6.0.3) + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color + + "@shikijs/types@3.23.0": + dependencies: + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + + "@shikijs/vscode-textmate@10.0.2": {} + + "@sindresorhus/is@5.6.0": {} + + "@sindresorhus/slugify@2.2.0": + dependencies: + "@sindresorhus/transliterate": 1.6.0 + escape-string-regexp: 5.0.0 + + "@sindresorhus/transliterate@1.6.0": + dependencies: + escape-string-regexp: 5.0.0 + + "@socket.io/component-emitter@3.1.2": {} + + "@stablelib/base64@1.0.1": + optional: true + + "@stoplight/better-ajv-errors@1.0.3(ajv@8.20.0)": + dependencies: + ajv: 8.20.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + + "@stoplight/json-ref-readers@1.2.2": + dependencies: + node-fetch: 2.7.0 + tslib: 1.14.1 + transitivePeerDependencies: + - encoding + + "@stoplight/json-ref-resolver@3.1.6": + dependencies: + "@stoplight/json": 3.21.0 + "@stoplight/path": 1.3.2 + "@stoplight/types": 13.20.0 + "@types/urijs": 1.19.26 + dependency-graph: 0.11.0 + fast-memoize: 2.5.2 + immer: 9.0.21 + lodash: 4.18.1 + tslib: 2.8.1 + urijs: 1.19.11 + + "@stoplight/json@3.21.0": + dependencies: + "@stoplight/ordered-object-literal": 1.0.5 + "@stoplight/path": 1.3.2 + "@stoplight/types": 13.20.0 + jsonc-parser: 2.2.1 + lodash: 4.18.1 + safe-stable-stringify: 1.1.1 + + "@stoplight/ordered-object-literal@1.0.5": {} + + "@stoplight/path@1.3.2": {} + + "@stoplight/spectral-core@1.23.0": + dependencies: + "@stoplight/better-ajv-errors": 1.0.3(ajv@8.20.0) + "@stoplight/json": 3.21.0 + "@stoplight/path": 1.3.2 + "@stoplight/spectral-parsers": 1.0.5 + "@stoplight/spectral-ref-resolver": 1.0.5 + "@stoplight/spectral-runtime": 1.1.5 + "@stoplight/types": 13.6.0 + "@types/es-aggregate-error": 1.0.6 + "@types/json-schema": 7.0.15 + ajv: 8.20.0 + ajv-errors: 3.0.0(ajv@8.20.0) + ajv-formats: 2.1.1(ajv@8.20.0) + es-aggregate-error: 1.0.14 + expr-eval-fork: 3.0.3 + jsonpath-plus: 10.4.0 + lodash: 4.18.1 + lodash.topath: 4.5.2 + minimatch: 3.1.5 + nimma: 0.2.3 + pony-cause: 1.1.1 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + "@stoplight/spectral-formats@1.8.2": + dependencies: + "@stoplight/json": 3.21.0 + "@stoplight/spectral-core": 1.23.0 + "@types/json-schema": 7.0.15 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + "@stoplight/spectral-functions@1.10.2": + dependencies: + "@stoplight/better-ajv-errors": 1.0.3(ajv@8.20.0) + "@stoplight/json": 3.21.0 + "@stoplight/spectral-core": 1.23.0 + "@stoplight/spectral-formats": 1.8.2 + "@stoplight/spectral-runtime": 1.1.5 + ajv: 8.20.0 + ajv-draft-04: 1.0.0(ajv@8.20.0) + ajv-errors: 3.0.0(ajv@8.20.0) + ajv-formats: 2.1.1(ajv@8.20.0) + lodash: 4.18.1 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + "@stoplight/spectral-parsers@1.0.5": + dependencies: + "@stoplight/json": 3.21.0 + "@stoplight/types": 14.1.1 + "@stoplight/yaml": 4.3.0 + tslib: 2.8.1 + + "@stoplight/spectral-ref-resolver@1.0.5": + dependencies: + "@stoplight/json-ref-readers": 1.2.2 + "@stoplight/json-ref-resolver": 3.1.6 + "@stoplight/spectral-runtime": 1.1.5 + dependency-graph: 0.11.0 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + "@stoplight/spectral-runtime@1.1.5": + dependencies: + "@stoplight/json": 3.21.0 + "@stoplight/path": 1.3.2 + "@stoplight/types": 13.20.0 + abort-controller: 3.0.0 + lodash: 4.18.1 + node-fetch: 2.7.0 + tslib: 2.8.1 + transitivePeerDependencies: + - encoding + + "@stoplight/types@13.20.0": + dependencies: + "@types/json-schema": 7.0.15 + utility-types: 3.11.0 + + "@stoplight/types@13.6.0": + dependencies: + "@types/json-schema": 7.0.15 + utility-types: 3.11.0 + + "@stoplight/types@14.1.1": + dependencies: + "@types/json-schema": 7.0.15 + utility-types: 3.11.0 + + "@stoplight/yaml-ast-parser@0.0.50": {} + + "@stoplight/yaml@4.3.0": + dependencies: + "@stoplight/ordered-object-literal": 1.0.5 + "@stoplight/types": 14.1.1 + "@stoplight/yaml-ast-parser": 0.0.50 + tslib: 2.8.1 + + "@szmarczak/http-timer@5.0.1": + dependencies: + defer-to-connect: 2.0.1 + + "@tootallnate/quickjs-emscripten@0.23.0": {} + + "@types/acorn@4.0.6": + dependencies: + "@types/estree": 1.0.9 + + "@types/cors@2.8.19": + dependencies: + "@types/node": 25.9.1 + + "@types/debug@4.1.13": + dependencies: + "@types/ms": 2.1.0 + + "@types/es-aggregate-error@1.0.6": + dependencies: + "@types/node": 25.9.1 + + "@types/estree-jsx@1.0.5": + dependencies: + "@types/estree": 1.0.9 + + "@types/estree@1.0.9": {} + + "@types/hast@3.0.4": + dependencies: + "@types/unist": 3.0.3 + + "@types/http-cache-semantics@4.2.0": {} + + "@types/json-schema@7.0.15": {} + + "@types/katex@0.16.8": {} + + "@types/mdast@4.0.4": + dependencies: + "@types/unist": 3.0.3 + + "@types/mdx@2.0.13": {} - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} + "@types/mdx@2.0.14": {} - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} + "@types/ms@2.1.0": {} - safe-stable-stringify@1.1.1: - resolution: {integrity: sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==} + "@types/nlcst@2.0.3": + dependencies: + "@types/unist": 3.0.3 - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + "@types/node@25.9.1": + dependencies: + undici-types: 7.24.6 - sax@1.6.0: - resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} - engines: {node: '>=11.0.0'} + "@types/react@19.2.14": + dependencies: + csstype: 3.2.3 - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + "@types/unist@2.0.11": {} - scheduler@0.26.0: - resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + "@types/unist@3.0.3": {} - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} - hasBin: true + "@types/urijs@1.19.26": {} - send@0.19.2: - resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} - engines: {node: '>= 0.8.0'} + "@types/ws@8.18.1": + dependencies: + "@types/node": 25.9.1 - serialize-error@13.0.1: - resolution: {integrity: sha512-bBZaRwLH9PN5HbLCjPId4dP5bNGEtumcErgOX952IsvOhVPrm3/AeK1y0UHA/QaPG701eg0yEnOKsCOC6X/kaA==} - engines: {node: '>=20'} + "@types/yauzl@2.10.3": + dependencies: + "@types/node": 25.9.1 + optional: true - serve-static@1.16.3: - resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} - engines: {node: '>= 0.8.0'} + "@typescript/vfs@1.6.4(typescript@6.0.3)": + dependencies: + debug: 4.4.3 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + "@ungap/structured-clone@1.3.1": {} - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.1.0 + optional: true - sharp-ico@0.1.5: - resolution: {integrity: sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q==} + acorn-jsx@5.3.2(acorn@8.11.2): + dependencies: + acorn: 8.11.2 - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} - engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + acorn@8.11.2: {} - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + address@1.2.2: {} - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + adm-zip@0.6.0: {} - shiki@3.23.0: - resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} + agent-base@6.0.2: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color - side-channel-list@1.0.1: - resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} - engines: {node: '>= 0.4'} + agent-base@7.1.4: {} - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + aggregate-error@4.0.1: + dependencies: + clean-stack: 4.2.0 + indent-string: 5.0.0 - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} + ajv-draft-04@1.0.0(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} + ajv-errors@3.0.0(ajv@8.20.0): + dependencies: + ajv: 8.20.0 - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + ajv-formats@2.1.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + ajv-formats@3.0.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.2 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 - simple-swizzle@0.2.4: - resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + ansi-regex@5.0.1: {} - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} + ansi-regex@6.2.2: {} - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 - socket.io-adapter@2.5.7: - resolution: {integrity: sha512-e0LyK91f3cUxTmv95/KzoLg47+zF+s/sbxRGDNsyG4dmIP8ZSX8ax6byOxfJXeNNtS/8AZlfD+uP7gBeR7DLlg==} + ansi-styles@6.2.3: {} - socket.io-parser@4.2.6: - resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==} - engines: {node: '>=10.0.0'} + any-promise@1.3.0: {} - socket.io@4.8.0: - resolution: {integrity: sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==} - engines: {node: '>=10.2.0'} + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.2 - socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} + anynum@1.0.1: {} - socks@2.8.9: - resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + arg@5.0.2: {} - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + argparse@2.0.1: {} - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} + arkregex@0.0.5: + dependencies: + "@ark/util": 0.56.0 - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + arktype@2.2.0: + dependencies: + "@ark/schema": 0.56.0 + "@ark/util": 0.56.0 + arkregex: 0.0.5 - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + array-flatten@1.1.1: {} - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} + array-iterate@2.0.1: {} - stop-iteration-iterator@1.1.0: - resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 - streamx@2.26.0: - resolution: {integrity: sha512-VvNG1K72Po/xwJzxZFnZ++Tbrv4lwSptsbkFuzXCJAYZvCK5nnxsvXU6ajqkv7chyiI1Y0YXq2Jh8Iy8Y7NF/A==} + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + astring@1.9.0: {} - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} + async-function@1.0.0: {} - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} + asynckit@0.4.0: {} - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} + auto-bind@5.0.1: {} - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + avsc@5.7.9: {} - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + axios@1.18.0: + dependencies: + follow-redirects: 1.16.0 + form-data: 4.0.5 + https-proxy-agent: 5.0.1 + proxy-from-env: 2.1.0 + transitivePeerDependencies: + - debug + - supports-color - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + b4a@1.8.1: {} - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} + bail@2.0.2: {} - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} + balanced-match@1.0.2: {} - style-to-js@1.1.21: - resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} + bare-events@2.9.1: {} - style-to-object@1.0.14: - resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} + bare-fs@4.7.2: + dependencies: + bare-events: 2.9.1 + bare-path: 3.0.1 + bare-stream: 2.13.1(bare-events@2.9.1) + bare-url: 2.4.3 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - hasBin: true + bare-os@3.9.1: {} - sucrase@3.35.1: - resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + bare-path@3.0.1: + dependencies: + bare-os: 3.9.1 - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} + bare-stream@2.13.1(bare-events@2.9.1): + dependencies: + streamx: 2.26.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - react-native-b4a - tagged-tag@1.0.0: - resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==} - engines: {node: '>=20'} + bare-url@2.4.3: + dependencies: + bare-path: 3.0.1 - tailwindcss@3.4.17: - resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} - engines: {node: '>=14.0.0'} - hasBin: true + base64-js@1.5.1: + optional: true - tar-fs@2.1.4: - resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} + base64id@2.0.0: {} - tar-fs@3.1.2: - resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} + basic-ftp@5.3.1: {} - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + better-opn@3.0.2: + dependencies: + open: 8.4.2 - tar-stream@3.2.0: - resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} + binary-extensions@2.3.0: {} - tar@7.5.15: - resolution: {integrity: sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==} - engines: {node: '>=18'} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + optional: true - teex@1.0.1: - resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + body-parser@1.20.5: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.15.2 + raw-body: 2.5.3 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + body-parser@2.3.0: + dependencies: + bytes: 3.1.2 + content-type: 2.1.0 + debug: 4.4.3 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + on-finished: 2.4.1 + qs: 6.15.2 + raw-body: 3.0.2 + type-is: 2.1.0 + transitivePeerDependencies: + - supports-color + optional: true - text-decoder@1.2.7: - resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + brace-expansion@1.1.15: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} + braces@3.0.3: + dependencies: + fill-range: 7.1.1 - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + buffer-crc32@0.2.13: {} - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + optional: true - tinyglobby@0.2.17: - resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} - engines: {node: '>=12.0.0'} + bytes@3.1.2: {} - to-data-view@1.1.0: - resolution: {integrity: sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==} + cacheable-lookup@7.0.0: {} - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + cacheable-request@10.2.14: + dependencies: + "@types/http-cache-semantics": 4.2.0 + get-stream: 6.0.1 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.1.1 + responselike: 3.0.0 - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 - trim-trailing-lines@2.1.0: - resolution: {integrity: sha512-5UR5Biq4VlVOtzqkm2AZlgvSlDJtME46uV0br0gENbwN4l5+mMKT4b9gJKqWtuL2zAIqajGJGuvbCbcAJUZqBg==} + call-me-maybe@1.0.2: {} - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + callsites@3.1.0: {} - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + camelcase-css@2.0.1: {} - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + ccount@2.0.1: {} - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + chalk@5.2.0: {} - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + chalk@5.3.0: {} - twoslash-protocol@0.3.8: - resolution: {integrity: sha512-HmvAHoiEviK8LqvAQyc9/irkdvwTUiR1fHmNwH/0gq8EHxyBt4PWVPixjEXg6wJu1u6yBrILEWXGK9Kw58/8yQ==} + chalk@5.6.2: {} - twoslash@0.3.8: - resolution: {integrity: sha512-OeDz0kDl8sqPUN3nr7gqcvOs70f5lZsdhKYTX3/SgB9OvdadzzoYJI/4SBXhXV1HG8E9fLc+e17itoRYTxmoig==} - peerDependencies: - typescript: ^5.5.0 || ^6.0.0 + character-entities-html4@2.1.0: {} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + character-entities-legacy@3.0.0: {} - type-fest@4.41.0: - resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} - engines: {node: '>=16'} + character-entities@2.0.2: {} - type-fest@5.7.0: - resolution: {integrity: sha512-1URUxUqfHFM1c+zfSPsa3gnkO7Aq21qyH75SIduNYz4SzY964rn1X2vCMQaHSHhktiw+0kPa2iyb6PUpXqB6Vg==} - engines: {node: '>=20'} + character-reference-invalid@2.0.1: {} - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + chardet@2.1.1: {} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} + chokidar@3.5.3: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} + chownr@1.1.4: + optional: true - typed-array-length@1.0.8: - resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==} - engines: {node: '>= 0.4'} + chownr@3.0.0: {} - typescript@6.0.3: - resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} - engines: {node: '>=14.17'} - hasBin: true + chromium-bidi@2.1.2(devtools-protocol@0.0.1402036): + dependencies: + devtools-protocol: 0.0.1402036 + mitt: 3.0.1 + zod: 3.25.76 - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + clean-stack@4.2.0: + dependencies: + escape-string-regexp: 5.0.0 - unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + cli-boxes@3.0.0: {} - undici-types@7.24.6: - resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + cli-spinners@2.9.2: {} - unist-builder@4.0.0: - resolution: {integrity: sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==} + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 - unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} + cli-width@4.1.0: {} - unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 - unist-util-is@6.0.1: - resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} + code-excerpt@4.0.0: + dependencies: + convert-to-spaces: 2.0.1 - unist-util-map@4.0.0: - resolution: {integrity: sha512-HJs1tpkSmRJUzj6fskQrS5oYhBYlmtcvy4SepdDEEsL04FjBrgF0Mgggvxc1/qGBGgW7hRh9+UBK1aqTEnBpIA==} + collapse-white-space@2.1.0: {} - unist-util-modify-children@4.0.0: - resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 - unist-util-position-from-estree@2.0.0: - resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} + color-name@1.1.4: {} - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.4 - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 - unist-util-remove@4.0.0: - resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + comma-separated-tokens@2.0.3: {} - unist-util-visit-children@3.0.0: - resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} + commander@2.20.3: {} - unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} + commander@4.1.1: {} - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + commander@8.3.0: {} - unist-util-visit-parents@6.0.2: - resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} + concat-map@0.0.1: {} - unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + content-disposition@1.1.0: + optional: true - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} + content-type@1.0.5: {} - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} + content-type@2.1.0: + optional: true - urijs@1.19.11: - resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} + convert-to-spaces@2.0.1: {} - urlpattern-polyfill@10.0.0: - resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + cookie-signature@1.0.7: {} - use-callback-ref@1.3.3: - resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': + cookie-signature@1.2.2: optional: true - use-sidecar@1.1.3: - resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc - peerDependenciesMeta: - '@types/react': + cookie@0.7.2: {} + + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@9.0.1(typescript@6.0.3): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.3.2 + parse-json: 5.2.0 + optionalDependencies: + typescript: 6.0.3 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + cssesc@3.0.0: {} + + cssfilter@0.0.10: {} + + csstype@3.2.3: {} + + data-uri-to-buffer@6.0.2: {} + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.7: + dependencies: + ms: 2.1.3 + + debug@4.4.3: + dependencies: + ms: 2.1.3 + + decode-bmp@0.2.1: + dependencies: + "@canvas/image-data": 1.1.0 + to-data-view: 1.1.0 + + decode-ico@0.4.1: + dependencies: + "@canvas/image-data": 1.1.0 + decode-bmp: 0.2.1 + to-data-view: 1.1.0 + + decode-named-character-reference@1.3.0: + dependencies: + character-entities: 2.0.2 + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + deep-extend@0.6.0: optional: true - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + defer-to-connect@2.0.1: {} - utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} + define-lazy-prop@2.0.0: {} - uuid@11.1.1: - resolution: {integrity: sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==} - hasBin: true + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + delayed-stream@1.0.0: {} - vfile-matter@5.0.1: - resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==} + depd@2.0.0: {} - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} + dependency-graph@0.11.0: {} + + dequal@2.0.3: {} + + destroy@1.2.0: {} + + detect-libc@2.1.2: {} + + detect-port@1.5.1: + dependencies: + address: 1.2.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + devtools-protocol@0.0.1402036: {} + + didyoumean@1.2.2: {} + + dlv@1.1.3: {} + + dns-packet@5.6.1: + dependencies: + "@leichtgewicht/ip-codec": 2.0.5 + + dns-socket@4.2.2: + dependencies: + dns-packet: 5.6.1 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + ee-first@1.1.1: {} + + emoji-regex@10.6.0: {} + + emoji-regex@8.0.0: {} + + encodeurl@2.0.0: {} + + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + engine.io-parser@5.2.3: {} + + engine.io@6.6.8: + dependencies: + "@types/cors": 2.8.19 + "@types/node": 25.9.1 + "@types/ws": 8.18.1 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.7.2 + cors: 2.8.6 + debug: 4.4.3 + engine.io-parser: 5.2.3 + ws: 8.20.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + entities@6.0.1: {} + + env-paths@2.2.1: {} + + environment@1.1.0: {} + + error-ex@1.3.4: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.24.2: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.4 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.8 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.21 + + es-aggregate-error@1.0.14: + dependencies: + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + function-bind: 1.1.2 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + set-function-name: 2.0.2 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + es-toolkit@1.47.0: {} + + esast-util-from-estree@2.0.0: + dependencies: + "@types/estree-jsx": 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + "@types/estree-jsx": 1.0.5 + acorn: 8.11.2 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.3 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@5.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + esprima@4.0.1: {} + + estraverse@5.3.0: {} + + estree-util-attach-comments@3.0.0: + dependencies: + "@types/estree": 1.0.9 + + estree-util-build-jsx@3.0.1: + dependencies: + "@types/estree-jsx": 1.0.5 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + estree-walker: 3.0.3 + + estree-util-is-identifier-name@3.0.0: {} + + estree-util-scope@1.0.0: + dependencies: + "@types/estree": 1.0.9 + devlop: 1.1.0 + + estree-util-to-js@2.0.0: + dependencies: + "@types/estree-jsx": 1.0.5 + astring: 1.9.0 + source-map: 0.7.6 + + estree-util-visit@2.0.0: + dependencies: + "@types/estree-jsx": 1.0.5 + "@types/unist": 3.0.3 + + estree-walker@3.0.3: + dependencies: + "@types/estree": 1.0.9 + + esutils@2.0.3: {} + + etag@1.8.1: {} - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + event-target-shim@5.0.1: {} - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + events-universal@1.0.1: + dependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - bare-abort-controller - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + eventsource-parser@3.1.1: + optional: true - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.1.1 + optional: true - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + expand-template@2.0.3: + optional: true - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} + expr-eval-fork@3.0.3: {} - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + express-rate-limit@8.7.0(express@5.2.1): + dependencies: + debug: 4.4.3 + express: 5.2.1 + ip-address: 10.2.0 + transitivePeerDependencies: + - supports-color + optional: true - which-typed-array@1.1.21: - resolution: {integrity: sha512-zbRA8cVm6io/d5W8uIe2hblzN76/Wm3v/yiythQvr+dpBWeqhPSWIDNj4zOyHi4zKbMK6DN34Xsr9jPHJERAEw==} - engines: {node: '>= 0.4'} + express@4.22.0: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.5 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.0.7 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.2 + fresh: 0.5.2 + http-errors: 2.0.1 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.13 + proxy-addr: 2.0.7 + qs: 6.14.2 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.2 + serve-static: 1.16.3 + setprototypeof: 1.2.0 + statuses: 2.0.2 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.3.0 + content-disposition: 1.1.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.15.2 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.1.0 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + optional: true - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + extend@3.0.2: {} - widest-line@5.0.0: - resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} - engines: {node: '>=18'} + extract-zip@2.0.1: + dependencies: + debug: 4.4.3 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + "@types/yauzl": 2.10.3 + transitivePeerDependencies: + - supports-color - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + fast-deep-equal@3.1.3: {} - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + fast-fifo@1.3.2: {} - wrap-ansi@9.0.2: - resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} - engines: {node: '>=18'} + fast-glob@3.3.3: + dependencies: + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + fast-memoize@2.5.2: {} - ws@8.20.1: - resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: + fast-sha256@1.3.0: optional: true - ws@8.21.0: - resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: + fast-uri@3.1.2: {} + + fast-xml-builder@1.3.1: + dependencies: + path-expression-matcher: 1.6.2 + xml-naming: 0.3.0 + + fast-xml-parser@5.7.3: + dependencies: + "@nodable/entities": 2.2.0 + fast-xml-builder: 1.3.1 + path-expression-matcher: 1.6.2 + strnum: 2.4.2 + + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + + fault@2.0.1: + dependencies: + format: 0.2.2 + + favicons@7.2.0: + dependencies: + escape-html: 1.0.3 + sharp: 0.33.5 + xml2js: 0.6.2 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + fflate@0.8.3: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.3.2: + dependencies: + debug: 2.6.9 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + finalhandler@2.1.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color optional: true - xml2js@0.6.2: - resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} - engines: {node: '>=4.0.0'} + follow-redirects@1.16.0: {} - xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 - xss@1.0.15: - resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} - engines: {node: '>= 0.10.0'} - hasBin: true + form-data-encoder@2.1.4: {} - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + form-data@4.0.5: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 - yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} + format@0.2.2: {} - yaml@2.9.0: - resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} - engines: {node: '>= 14.6'} - hasBin: true + forwarded@0.2.0: {} - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + fractional-indexing@3.2.0: {} - yargs@17.7.1: - resolution: {integrity: sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==} - engines: {node: '>=12'} + fresh@0.5.2: {} - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + fresh@2.0.0: + optional: true - yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + front-matter@4.0.2: + dependencies: + js-yaml: 3.14.2 - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} + fs-constants@1.0.0: + optional: true - yoga-layout@3.2.1: - resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} + fs-extra@11.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 - zod-to-json-schema@3.20.4: - resolution: {integrity: sha512-Un9+kInJ2Zt63n6Z7mLqBifzzPcOyX+b+Exuzf7L1+xqck9Q2EPByyTRduV3kmSPaXaRer1JCsucubpgL1fipg==} - peerDependencies: - zod: ^3.20.0 + fs-extra@11.1.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 - zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 - zod@3.24.0: - resolution: {integrity: sha512-Hz+wiY8yD0VLA2k/+nsg2Abez674dDGTai33SwNvMPuf9uIrBC9eFgIMQxBBbHFxVXi8W+5nX9DcAh9YNSQm/w==} + fs.realpath@1.0.0: {} - zod@4.3.6: - resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + fsevents@2.3.3: + optional: true - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.4 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gcd@0.0.1: {} + + generator-function@2.0.1: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.6.0: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + get-stream@5.2.0: + dependencies: + pump: 3.0.4 + + get-stream@6.0.1: {} + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-uri@6.0.5: + dependencies: + basic-ftp: 5.3.1 + data-uri-to-buffer: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + github-from-package@0.0.0: + optional: true -snapshots: + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@7.1.6: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.5 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + gopd@1.2.0: {} + + got@12.6.1: + dependencies: + "@sindresorhus/is": 5.6.0 + "@szmarczak/http-timer": 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + got@13.0.0: + dependencies: + "@sindresorhus/is": 5.6.0 + "@szmarczak/http-timer": 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + + graceful-fs@4.2.11: {} + + graphql@16.11.0: {} + + has-bigints@1.1.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + hast-util-embedded@3.0.0: + dependencies: + "@types/hast": 3.0.4 + hast-util-is-element: 3.0.0 + + hast-util-from-dom@5.0.1: + dependencies: + "@types/hast": 3.0.4 + hastscript: 9.0.1 + web-namespaces: 2.0.1 + + hast-util-from-html-isomorphic@2.0.0: + dependencies: + "@types/hast": 3.0.4 + hast-util-from-dom: 5.0.1 + hast-util-from-html: 2.0.3 + unist-util-remove-position: 5.0.0 + + hast-util-from-html@2.0.3: + dependencies: + "@types/hast": 3.0.4 + devlop: 1.1.0 + hast-util-from-parse5: 8.0.3 + parse5: 7.3.0 + vfile: 6.0.3 + vfile-message: 4.0.3 + + hast-util-from-parse5@8.0.3: + dependencies: + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 + devlop: 1.1.0 + hastscript: 9.0.1 + property-information: 7.2.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 + + hast-util-has-property@3.0.0: + dependencies: + "@types/hast": 3.0.4 + + hast-util-is-body-ok-link@3.0.1: + dependencies: + "@types/hast": 3.0.4 + + hast-util-is-element@3.0.0: + dependencies: + "@types/hast": 3.0.4 + + hast-util-minify-whitespace@1.0.1: + dependencies: + "@types/hast": 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-is-element: 3.0.0 + hast-util-whitespace: 3.0.0 + unist-util-is: 6.0.1 + + hast-util-parse-selector@4.0.0: + dependencies: + "@types/hast": 3.0.4 + + hast-util-phrasing@3.0.1: + dependencies: + "@types/hast": 3.0.4 + hast-util-embedded: 3.0.0 + hast-util-has-property: 3.0.0 + hast-util-is-body-ok-link: 3.0.1 + hast-util-is-element: 3.0.0 + + hast-util-to-estree@3.1.0: + dependencies: + "@types/estree": 1.0.9 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.4 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-estree@3.1.3: + dependencies: + "@types/estree": 1.0.9 + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-attach-comments: 3.0.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + zwitch: 2.0.4 + transitivePeerDependencies: + - supports-color + + hast-util-to-html@9.0.4: + dependencies: + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-html@9.0.5: + dependencies: + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-to-jsx-runtime@2.3.6: + dependencies: + "@types/estree": 1.0.9 + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + hast-util-whitespace: 3.0.0 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + style-to-js: 1.1.21 + unist-util-position: 5.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + hast-util-to-mdast@10.1.0: + dependencies: + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@ungap/structured-clone": 1.3.1 + hast-util-phrasing: 3.0.1 + hast-util-to-html: 9.0.5 + hast-util-to-text: 4.0.2 + hast-util-whitespace: 3.0.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-hast: 13.2.1 + mdast-util-to-string: 4.0.0 + rehype-minify-whitespace: 6.0.2 + trim-trailing-lines: 2.1.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + + hast-util-to-string@3.0.1: + dependencies: + "@types/hast": 3.0.4 + + hast-util-to-text@4.0.2: + dependencies: + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 + hast-util-is-element: 3.0.0 + unist-util-find-after: 5.0.0 + + hast-util-whitespace@3.0.0: + dependencies: + "@types/hast": 3.0.4 + + hastscript@9.0.1: + dependencies: + "@types/hast": 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 7.2.0 + space-separated-tokens: 2.0.2 + + hono@4.13.7: + optional: true + + html-void-elements@3.0.0: {} + + http-cache-semantics@4.2.0: {} + + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + ico-endec@0.1.6: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: + optional: true - '@alcalzone/ansi-tokenize@0.2.5': - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - '@alloc/quick-lru@5.2.0': {} - - '@ark/schema@0.55.0': - dependencies: - '@ark/util': 0.55.0 - - '@ark/schema@0.56.0': - dependencies: - '@ark/util': 0.56.0 - - '@ark/util@0.55.0': {} - - '@ark/util@0.56.0': {} - - '@asyncapi/parser@3.4.0': - dependencies: - '@asyncapi/specs': 6.8.1 - '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0 - '@stoplight/json': 3.21.0 - '@stoplight/json-ref-readers': 1.2.2 - '@stoplight/json-ref-resolver': 3.1.6 - '@stoplight/spectral-core': 1.23.0 - '@stoplight/spectral-functions': 1.10.2 - '@stoplight/spectral-parsers': 1.0.5 - '@stoplight/spectral-ref-resolver': 1.0.5 - '@stoplight/types': 13.20.0 - '@types/json-schema': 7.0.15 - '@types/urijs': 1.19.26 - ajv: 8.20.0 - ajv-errors: 3.0.0(ajv@8.20.0) - ajv-formats: 2.1.1(ajv@8.20.0) - avsc: 5.7.9 - js-yaml: 4.1.1 - jsonpath-plus: 10.4.0 - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding - - '@asyncapi/specs@6.8.1': - dependencies: - '@types/json-schema': 7.0.15 - - '@babel/code-frame@7.29.7': - dependencies: - '@babel/helper-validator-identifier': 7.29.7 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-validator-identifier@7.29.7': {} - - '@canvas/image-data@1.1.0': {} - - '@emnapi/runtime@1.10.0': - dependencies: - tslib: 2.8.1 - optional: true - - '@floating-ui/core@1.7.5': - dependencies: - '@floating-ui/utils': 0.2.11 - - '@floating-ui/dom@1.7.6': - dependencies: - '@floating-ui/core': 1.7.5 - '@floating-ui/utils': 0.2.11 - - '@floating-ui/react-dom@2.1.8(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': - dependencies: - '@floating-ui/dom': 1.7.6 - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - - '@floating-ui/utils@0.2.11': {} - - '@img/sharp-darwin-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 - optional: true - - '@img/sharp-darwin-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 - optional: true - - '@img/sharp-libvips-darwin-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-darwin-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linux-arm@1.0.5': - optional: true - - '@img/sharp-libvips-linux-s390x@1.0.4': - optional: true - - '@img/sharp-libvips-linux-x64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - optional: true - - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - optional: true - - '@img/sharp-linux-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 - optional: true - - '@img/sharp-linux-arm@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 - optional: true - - '@img/sharp-linux-s390x@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 - optional: true - - '@img/sharp-linux-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-arm64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - optional: true - - '@img/sharp-linuxmusl-x64@0.33.5': - optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - optional: true - - '@img/sharp-wasm32@0.33.5': - dependencies: - '@emnapi/runtime': 1.10.0 - optional: true - - '@img/sharp-win32-ia32@0.33.5': - optional: true - - '@img/sharp-win32-x64@0.33.5': - optional: true - - '@inquirer/ansi@1.0.2': {} - - '@inquirer/checkbox@4.3.2(@types/node@25.9.1)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.9.1) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/confirm@5.1.21(@types/node@25.9.1)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/core@10.3.2(@types/node@25.9.1)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.9.1) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/editor@4.2.23(@types/node@25.9.1)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/external-editor': 1.0.3(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/expand@4.0.23(@types/node@25.9.1)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/external-editor@1.0.3(@types/node@25.9.1)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/figures@1.0.15': {} - - '@inquirer/input@4.3.1(@types/node@25.9.1)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/number@3.0.23(@types/node@25.9.1)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/password@4.0.23(@types/node@25.9.1)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/prompts@7.9.0(@types/node@25.9.1)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@25.9.1) - '@inquirer/confirm': 5.1.21(@types/node@25.9.1) - '@inquirer/editor': 4.2.23(@types/node@25.9.1) - '@inquirer/expand': 4.0.23(@types/node@25.9.1) - '@inquirer/input': 4.3.1(@types/node@25.9.1) - '@inquirer/number': 3.0.23(@types/node@25.9.1) - '@inquirer/password': 4.0.23(@types/node@25.9.1) - '@inquirer/rawlist': 4.1.11(@types/node@25.9.1) - '@inquirer/search': 3.2.2(@types/node@25.9.1) - '@inquirer/select': 4.4.2(@types/node@25.9.1) - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/rawlist@4.1.11(@types/node@25.9.1)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/search@3.2.2(@types/node@25.9.1)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.9.1) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/select@4.4.2(@types/node@25.9.1)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@25.9.1) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 25.9.1 - - '@inquirer/type@3.0.10(@types/node@25.9.1)': - optionalDependencies: - '@types/node': 25.9.1 - - '@isaacs/fs-minipass@4.0.1': - dependencies: - minipass: 7.1.3 - - '@jridgewell/gen-mapping@0.3.13': - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/sourcemap-codec@1.5.5': {} - - '@jridgewell/trace-mapping@0.3.31': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - - '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@jsep-plugin/regex@1.0.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@jsep-plugin/ternary@1.1.4(jsep@1.4.0)': - dependencies: - jsep: 1.4.0 - - '@leichtgewicht/ip-codec@2.0.5': {} - - '@mdx-js/mdx@3.1.1': - dependencies: - '@types/estree': 1.0.9 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdx': 2.0.13 - acorn: 8.11.2 - collapse-white-space: 2.1.0 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-util-scope: 1.0.0 - estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 - markdown-extensions: 2.0.0 - recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.11.2) - recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.1.0 - remark-parse: 11.0.0 - remark-rehype: 11.1.1 - source-map: 0.7.6 - unified: 11.0.5 - unist-util-position-from-estree: 2.0.0 - unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@mdx-js/react@3.1.1(@types/react@19.2.14)(react@19.2.3)': - dependencies: - '@types/mdx': 2.0.13 - '@types/react': 19.2.14 - react: 19.2.3 - - '@mintlify/cli@4.0.1193(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@25.9.1)(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@6.0.3)': - dependencies: - '@inquirer/prompts': 7.9.0(@types/node@25.9.1) - '@mintlify/common': 1.0.920(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/link-rot': 3.0.1100(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/models': 0.0.315 - '@mintlify/prebuild': 1.0.1064(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/previewing': 4.0.1125(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@6.0.3) - '@mintlify/validation': 0.1.718(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - adm-zip: 0.5.16 - chalk: 5.2.0 - color: 4.2.3 - detect-port: 1.5.1 - front-matter: 4.0.2 - fs-extra: 11.2.0 - ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) - inquirer: 12.3.0(@types/node@25.9.1) - js-yaml: 4.1.1 - mdast-util-mdx-jsx: 3.2.0 - open: 8.4.2 - openid-client: 6.8.2 - posthog-node: 5.17.2 - react: 19.2.3 - semver: 7.7.2 - unist-util-visit: 5.0.0 - yargs: 17.7.1 - zod: 4.3.6 - optionalDependencies: - keytar: 7.9.0 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/node' - - '@types/react' - - bare-abort-controller - - bare-buffer - - bufferutil - - debug - - encoding - - react-devtools-core - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/common@1.0.920(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': - dependencies: - '@asyncapi/parser': 3.4.0 - '@asyncapi/specs': 6.8.1 - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/models': 0.0.315 - '@mintlify/openapi-parser': 0.0.8 - '@mintlify/validation': 0.1.718(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@sindresorhus/slugify': 2.2.0 - '@types/mdast': 4.0.4 - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - color-blend: 4.0.0 - estree-util-to-js: 2.0.0 - estree-walker: 3.0.3 - front-matter: 4.0.2 - hast-util-from-html: 2.0.3 - hast-util-to-html: 9.0.4 - hast-util-to-text: 4.0.2 - hex-rgb: 5.0.0 - ignore: 7.0.5 - js-yaml: 4.1.1 - lodash: 4.18.1 - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm: 3.0.0 - mdast-util-mdx: 3.0.0 - mdast-util-mdx-jsx: 3.1.3 - micromark-extension-gfm: 3.0.0 - micromark-extension-mdx-jsx: 3.0.1 - micromark-extension-mdxjs: 3.0.0 - openapi-types: 12.1.3 - postcss: 8.5.14 - rehype-stringify: 10.0.1 - remark: 15.0.1 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.0 - remark-math: 6.0.0 - remark-mdx: 3.1.0 - remark-parse: 11.0.0 - remark-rehype: 11.1.1 - remark-stringify: 11.0.0 - sucrase: 3.34.0 - tailwindcss: 3.4.17 - unified: 11.0.5 - unist-builder: 4.0.0 - unist-util-map: 4.0.0 - unist-util-remove: 4.0.0 - unist-util-remove-position: 5.0.0 - unist-util-visit: 5.0.0 - unist-util-visit-parents: 6.0.1 - vfile: 6.0.3 - xss: 1.0.15 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - debug - - encoding - - react - - react-dom - - supports-color - - ts-node - - typescript - - '@mintlify/link-rot@3.0.1100(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': - dependencies: - '@mintlify/common': 1.0.920(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/models': 0.0.315 - '@mintlify/prebuild': 1.0.1064(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/previewing': 4.0.1125(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@6.0.3) - '@mintlify/scraping': 4.0.784(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/validation': 0.1.718(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - fs-extra: 11.1.0 - unist-util-visit: 4.1.2 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - bare-abort-controller - - bare-buffer - - bufferutil - - debug - - encoding - - react - - react-devtools-core - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/mdx@3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': - dependencies: - '@radix-ui/react-popover': 1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@shikijs/transformers': 3.23.0 - '@shikijs/twoslash': 3.23.0(typescript@6.0.3) - arktype: 2.2.0 - hast-util-to-string: 3.0.1 - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm: 3.1.0 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-to-hast: 13.2.1 - next-mdx-remote-client: 1.1.8(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5) - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - rehype-katex: 7.0.1 - remark-gfm: 4.0.0 - remark-math: 6.0.0 - remark-smartypants: 3.0.2 - shiki: 3.23.0 - unified: 11.0.5 - unist-util-visit: 5.0.0 - transitivePeerDependencies: - - '@types/react' - - supports-color - - typescript - - '@mintlify/models@0.0.315': - dependencies: - axios: 1.16.1 - openapi-types: 12.1.3 - transitivePeerDependencies: - - debug - - supports-color - - '@mintlify/openapi-parser@0.0.8': - dependencies: - ajv: 8.20.0 - ajv-draft-04: 1.0.0(ajv@8.20.0) - ajv-formats: 3.0.1(ajv@8.20.0) - jsonpointer: 5.0.1 - leven: 4.1.0 - yaml: 2.9.0 - - '@mintlify/prebuild@1.0.1064(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': - dependencies: - '@mintlify/common': 1.0.920(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/openapi-parser': 0.0.8 - '@mintlify/scraping': 4.0.784(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/validation': 0.1.718(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - chalk: 5.3.0 - favicons: 7.2.0 - front-matter: 4.0.2 - fs-extra: 11.1.0 - js-yaml: 4.1.1 - openapi-types: 12.1.3 - sharp: 0.33.5 - sharp-ico: 0.1.5 - unist-util-visit: 4.1.2 - uuid: 11.1.1 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - bare-abort-controller - - bare-buffer - - bufferutil - - debug - - encoding - - react - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/previewing@4.0.1125(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@6.0.3)': - dependencies: - '@mintlify/common': 1.0.920(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/prebuild': 1.0.1064(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/validation': 0.1.718(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - adm-zip: 0.5.16 - better-opn: 3.0.2 - chalk: 5.2.0 - chokidar: 3.5.3 - express: 4.22.0 - front-matter: 4.0.2 - fs-extra: 11.1.0 - got: 13.0.0 - ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) - ink-spinner: 5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3) - is-online: 10.0.0 - js-yaml: 4.1.1 - openapi-types: 12.1.3 - react: 19.2.3 - socket.io: 4.8.0 - tar: 7.5.15 - unist-util-visit: 4.1.2 - yargs: 17.7.1 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - bare-abort-controller - - bare-buffer - - bufferutil - - debug - - encoding - - react-devtools-core - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/scraping@4.0.784(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': - dependencies: - '@mintlify/common': 1.0.920(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/openapi-parser': 0.0.8 - fs-extra: 11.1.1 - hast-util-to-mdast: 10.1.0 - js-yaml: 4.1.1 - mdast-util-mdx-jsx: 3.1.3 - neotraverse: 0.6.18 - puppeteer: 22.14.0(typescript@6.0.3) - rehype-parse: 9.0.1 - remark-gfm: 4.0.0 - remark-mdx: 3.0.1 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - unist-util-visit: 5.0.0 - yargs: 17.7.1 - zod: 3.24.0 - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - bare-abort-controller - - bare-buffer - - bufferutil - - debug - - encoding - - react - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - '@mintlify/validation@0.1.718(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3)': - dependencies: - '@mintlify/mdx': 3.0.4(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@6.0.3) - '@mintlify/models': 0.0.315 - arktype: 2.1.27 - js-yaml: 4.1.1 - lcm: 0.0.3 - lodash: 4.18.1 - neotraverse: 0.6.18 - object-hash: 3.0.0 - openapi-types: 12.1.3 - uuid: 11.1.1 - zod: 3.24.0 - zod-to-json-schema: 3.20.4(zod@3.24.0) - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/react' - - debug - - react - - react-dom - - supports-color - - typescript - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 - - '@openapi-contrib/openapi-schema-to-json-schema@3.2.0': - dependencies: - fast-deep-equal: 3.1.3 - - '@posthog/core@1.7.1': - dependencies: - cross-spawn: 7.0.6 - - '@puppeteer/browsers@2.3.0': - dependencies: - debug: 4.4.3 - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.7.2 - tar-fs: 3.1.2 - unbzip2-stream: 1.4.3 - yargs: 17.7.2 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color - - '@radix-ui/primitive@1.1.3': {} - - '@radix-ui/react-arrow@1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.14)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-context@1.1.2(@types/react@19.2.14)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-dismissable-layer@1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.14)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-focus-scope@1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-id@1.1.1(@types/react@19.2.14)(react@19.2.3)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-focus-scope': 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-id': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-popper': 1.2.8(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-portal': 1.1.9(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-presence': 1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.14)(react@19.2.3) - aria-hidden: 1.2.6 - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - react-remove-scroll: 2.7.2(@types/react@19.2.14)(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-popper@1.2.8(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': - dependencies: - '@floating-ui/react-dom': 2.1.8(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-arrow': 1.1.7(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-context': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/rect': 1.1.1 - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-portal@1.1.9(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-presence@1.1.5(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-primitive@2.1.3(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': - dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-slot@1.2.3(@types/react@19.2.14)(react@19.2.3)': - dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.14)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.14)(react@19.2.3)': - dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.14)(react@19.2.3) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.14)(react@19.2.3)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.14)(react@19.2.3)': - dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.14)(react@19.2.3)': - dependencies: - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.14)(react@19.2.3)': - dependencies: - '@radix-ui/rect': 1.1.1 - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/react-use-size@1.1.1(@types/react@19.2.14)(react@19.2.3)': - dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - optionalDependencies: - '@types/react': 19.2.14 - - '@radix-ui/rect@1.1.1': {} - - '@shikijs/core@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.5 - - '@shikijs/engine-javascript@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - oniguruma-to-es: 4.3.6 - - '@shikijs/engine-oniguruma@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - - '@shikijs/themes@3.23.0': - dependencies: - '@shikijs/types': 3.23.0 - - '@shikijs/transformers@3.23.0': - dependencies: - '@shikijs/core': 3.23.0 - '@shikijs/types': 3.23.0 - - '@shikijs/twoslash@3.23.0(typescript@6.0.3)': - dependencies: - '@shikijs/core': 3.23.0 - '@shikijs/types': 3.23.0 - twoslash: 0.3.8(typescript@6.0.3) - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - '@shikijs/types@3.23.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@sindresorhus/is@5.6.0': {} - - '@sindresorhus/slugify@2.2.0': - dependencies: - '@sindresorhus/transliterate': 1.6.0 - escape-string-regexp: 5.0.0 - - '@sindresorhus/transliterate@1.6.0': - dependencies: - escape-string-regexp: 5.0.0 - - '@socket.io/component-emitter@3.1.2': {} - - '@stoplight/better-ajv-errors@1.0.3(ajv@8.20.0)': - dependencies: - ajv: 8.20.0 - jsonpointer: 5.0.1 - leven: 3.1.0 - - '@stoplight/json-ref-readers@1.2.2': - dependencies: - node-fetch: 2.6.7 - tslib: 1.14.1 - transitivePeerDependencies: - - encoding - - '@stoplight/json-ref-resolver@3.1.6': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - '@types/urijs': 1.19.26 - dependency-graph: 0.11.0 - fast-memoize: 2.5.2 - immer: 9.0.21 - lodash: 4.18.1 - tslib: 2.8.1 - urijs: 1.19.11 - - '@stoplight/json@3.21.0': - dependencies: - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - jsonc-parser: 2.2.1 - lodash: 4.18.1 - safe-stable-stringify: 1.1.1 - - '@stoplight/ordered-object-literal@1.0.5': {} - - '@stoplight/path@1.3.2': {} - - '@stoplight/spectral-core@1.23.0': - dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.20.0) - '@stoplight/json': 3.21.0 - '@stoplight/path': 1.3.2 - '@stoplight/spectral-parsers': 1.0.5 - '@stoplight/spectral-ref-resolver': 1.0.5 - '@stoplight/spectral-runtime': 1.1.5 - '@stoplight/types': 13.6.0 - '@types/es-aggregate-error': 1.0.6 - '@types/json-schema': 7.0.15 - ajv: 8.20.0 - ajv-errors: 3.0.0(ajv@8.20.0) - ajv-formats: 2.1.1(ajv@8.20.0) - es-aggregate-error: 1.0.14 - expr-eval-fork: 3.0.3 - jsonpath-plus: 10.4.0 - lodash: 4.18.1 - lodash.topath: 4.5.2 - minimatch: 3.1.5 - nimma: 0.2.3 - pony-cause: 1.1.1 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-formats@1.8.2': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/spectral-core': 1.23.0 - '@types/json-schema': 7.0.15 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-functions@1.10.2': - dependencies: - '@stoplight/better-ajv-errors': 1.0.3(ajv@8.20.0) - '@stoplight/json': 3.21.0 - '@stoplight/spectral-core': 1.23.0 - '@stoplight/spectral-formats': 1.8.2 - '@stoplight/spectral-runtime': 1.1.5 - ajv: 8.20.0 - ajv-draft-04: 1.0.0(ajv@8.20.0) - ajv-errors: 3.0.0(ajv@8.20.0) - ajv-formats: 2.1.1(ajv@8.20.0) - lodash: 4.18.1 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-parsers@1.0.5': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/types': 14.1.1 - '@stoplight/yaml': 4.3.0 - tslib: 2.8.1 - - '@stoplight/spectral-ref-resolver@1.0.5': - dependencies: - '@stoplight/json-ref-readers': 1.2.2 - '@stoplight/json-ref-resolver': 3.1.6 - '@stoplight/spectral-runtime': 1.1.5 - dependency-graph: 0.11.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/spectral-runtime@1.1.5': - dependencies: - '@stoplight/json': 3.21.0 - '@stoplight/path': 1.3.2 - '@stoplight/types': 13.20.0 - abort-controller: 3.0.0 - lodash: 4.18.1 - node-fetch: 2.7.0 - tslib: 2.8.1 - transitivePeerDependencies: - - encoding - - '@stoplight/types@13.20.0': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/types@13.6.0': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/types@14.1.1': - dependencies: - '@types/json-schema': 7.0.15 - utility-types: 3.11.0 - - '@stoplight/yaml-ast-parser@0.0.50': {} - - '@stoplight/yaml@4.3.0': - dependencies: - '@stoplight/ordered-object-literal': 1.0.5 - '@stoplight/types': 14.1.1 - '@stoplight/yaml-ast-parser': 0.0.50 - tslib: 2.8.1 - - '@szmarczak/http-timer@5.0.1': - dependencies: - defer-to-connect: 2.0.1 - - '@tootallnate/quickjs-emscripten@0.23.0': {} - - '@types/acorn@4.0.6': - dependencies: - '@types/estree': 1.0.9 - - '@types/cors@2.8.19': - dependencies: - '@types/node': 25.9.1 - - '@types/debug@4.1.13': - dependencies: - '@types/ms': 2.1.0 - - '@types/es-aggregate-error@1.0.6': - dependencies: - '@types/node': 25.9.1 - - '@types/estree-jsx@1.0.5': - dependencies: - '@types/estree': 1.0.9 - - '@types/estree@1.0.9': {} - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/http-cache-semantics@4.2.0': {} - - '@types/json-schema@7.0.15': {} - - '@types/katex@0.16.8': {} - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdx@2.0.13': {} - - '@types/ms@2.1.0': {} + ignore@7.0.5: {} - '@types/nlcst@2.0.3': - dependencies: - '@types/unist': 3.0.3 + immer@9.0.21: {} - '@types/node@25.9.1': - dependencies: - undici-types: 7.24.6 + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 - '@types/react@19.2.14': - dependencies: - csstype: 3.2.3 + indent-string@5.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: + optional: true - '@types/unist@2.0.11': {} + ink-spinner@5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): + dependencies: + cli-spinners: 2.9.2 + ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) + react: 19.2.3 + + ink@6.3.0(@types/react@19.2.14)(react@19.2.3): + dependencies: + "@alcalzone/ansi-tokenize": 0.2.5 + ansi-escapes: 7.3.0 + ansi-styles: 6.2.3 + auto-bind: 5.0.1 + chalk: 5.6.2 + cli-boxes: 3.0.0 + cli-cursor: 4.0.0 + cli-truncate: 4.0.0 + code-excerpt: 4.0.0 + es-toolkit: 1.47.0 + indent-string: 5.0.0 + is-in-ci: 2.0.0 + patch-console: 2.0.0 + react: 19.2.3 + react-reconciler: 0.32.0(react@19.2.3) + signal-exit: 3.0.7 + slice-ansi: 7.1.2 + stack-utils: 2.0.6 + string-width: 7.2.0 + type-fest: 4.41.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.2 + ws: 8.21.0 + yoga-layout: 3.2.1 + optionalDependencies: + "@types/react": 19.2.14 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + inline-style-parser@0.1.1: {} + + inline-style-parser@0.2.7: {} + + inquirer@12.3.0(@types/node@25.9.1): + dependencies: + "@inquirer/core": 10.3.2(@types/node@25.9.1) + "@inquirer/prompts": 7.9.0(@types/node@25.9.1) + "@inquirer/type": 3.0.10(@types/node@25.9.1) + "@types/node": 25.9.1 + ansi-escapes: 4.3.2 + mute-stream: 2.0.0 + run-async: 3.0.0 + rxjs: 7.8.2 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.0 + + ip-address@10.2.0: {} + + ip-regex@4.3.0: {} + + ipaddr.js@1.9.1: {} + + iregexp-check@0.1.2: {} + + is-alphabetical@2.0.1: {} + + is-alphanumerical@2.0.1: + dependencies: + is-alphabetical: 2.0.1 + is-decimal: 2.0.1 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.4: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.16.2: + dependencies: + hasown: 2.0.4 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - '@types/unist@3.0.3': {} + is-decimal@2.0.1: {} - '@types/urijs@1.19.26': {} + is-docker@2.2.1: {} - '@types/ws@8.18.1': - dependencies: - '@types/node': 25.9.1 + is-extglob@2.1.1: {} - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 25.9.1 - optional: true + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 - '@typescript/vfs@1.6.4(typescript@6.0.3)': - dependencies: - debug: 4.4.3 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color + is-fullwidth-code-point@3.0.0: {} - '@ungap/structured-clone@1.3.1': {} + is-fullwidth-code-point@4.0.0: {} - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 + is-fullwidth-code-point@5.1.0: + dependencies: + get-east-asian-width: 1.6.0 - accepts@1.3.8: - dependencies: - mime-types: 2.1.35 - negotiator: 0.6.3 + is-generator-function@1.1.2: + dependencies: + call-bound: 1.0.4 + generator-function: 2.0.1 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 - acorn-jsx@5.3.2(acorn@8.11.2): - dependencies: - acorn: 8.11.2 + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 - acorn@8.11.2: {} + is-hexadecimal@2.0.1: {} - address@1.2.2: {} + is-in-ci@2.0.0: {} - adm-zip@0.5.16: {} + is-ip@3.1.0: + dependencies: + ip-regex: 4.3.0 - agent-base@6.0.2: - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color + is-map@2.0.3: {} - agent-base@7.1.4: {} + is-negative-zero@2.0.3: {} - aggregate-error@4.0.1: - dependencies: - clean-stack: 4.2.0 - indent-string: 5.0.0 + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - ajv-draft-04@1.0.0(ajv@8.20.0): - optionalDependencies: - ajv: 8.20.0 + is-number@7.0.0: {} - ajv-errors@3.0.0(ajv@8.20.0): - dependencies: - ajv: 8.20.0 + is-online@10.0.0: + dependencies: + got: 12.6.1 + p-any: 4.0.0 + p-timeout: 5.1.0 + public-ip: 5.0.0 - ajv-formats@2.1.1(ajv@8.20.0): - optionalDependencies: - ajv: 8.20.0 + is-plain-obj@4.1.0: {} - ajv-formats@3.0.1(ajv@8.20.0): - optionalDependencies: - ajv: 8.20.0 + is-promise@4.0.0: + optional: true - ajv@8.20.0: - dependencies: - fast-deep-equal: 3.1.3 - fast-uri: 3.1.2 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 + is-set@2.0.3: {} - ansi-escapes@7.3.0: - dependencies: - environment: 1.1.0 + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 - ansi-regex@5.0.1: {} + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 - ansi-regex@6.2.2: {} + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.21 - ansi-styles@6.2.3: {} + is-weakmap@2.0.2: {} - any-promise@1.3.0: {} + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 - anymatch@3.1.3: - dependencies: - normalize-path: 3.0.0 - picomatch: 2.3.2 + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 - arg@5.0.2: {} + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 + isarray@2.0.5: {} - argparse@2.0.1: {} + isexe@2.0.0: {} - aria-hidden@1.2.6: - dependencies: - tslib: 2.8.1 + jiti@1.21.7: {} - arkregex@0.0.3: - dependencies: - '@ark/util': 0.55.0 + jose@6.2.3: {} - arkregex@0.0.5: - dependencies: - '@ark/util': 0.56.0 + js-tokens@4.0.0: {} - arktype@2.1.27: - dependencies: - '@ark/schema': 0.55.0 - '@ark/util': 0.55.0 - arkregex: 0.0.3 + js-yaml@3.14.2: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 - arktype@2.2.0: - dependencies: - '@ark/schema': 0.56.0 - '@ark/util': 0.56.0 - arkregex: 0.0.5 + js-yaml@4.3.1: + dependencies: + argparse: 2.0.1 - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 + js-yaml@4.3.2: + dependencies: + argparse: 2.0.1 - array-flatten@1.1.1: {} + jsep@1.4.0: {} - array-iterate@2.0.1: {} + json-buffer@3.0.1: {} - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - - astring@1.9.0: {} - - async-function@1.0.0: {} - - asynckit@0.4.0: {} - - auto-bind@5.0.1: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - avsc@5.7.9: {} - - axios@1.16.1: - dependencies: - follow-redirects: 1.16.0 - form-data: 4.0.5 - https-proxy-agent: 5.0.1 - proxy-from-env: 2.1.0 - transitivePeerDependencies: - - debug - - supports-color + json-p3@2.2.2: {} - b4a@1.8.1: {} - - bail@2.0.2: {} + json-parse-even-better-errors@2.3.1: {} - balanced-match@1.0.2: {} - - bare-events@2.9.1: {} - - bare-fs@4.7.2: - dependencies: - bare-events: 2.9.1 - bare-path: 3.0.1 - bare-stream: 2.13.1(bare-events@2.9.1) - bare-url: 2.4.3 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - bare-os@3.9.1: {} - - bare-path@3.0.1: - dependencies: - bare-os: 3.9.1 - - bare-stream@2.13.1(bare-events@2.9.1): - dependencies: - streamx: 2.26.0 - teex: 1.0.1 - optionalDependencies: - bare-events: 2.9.1 - transitivePeerDependencies: - - react-native-b4a - - bare-url@2.4.3: - dependencies: - bare-path: 3.0.1 - - base64-js@1.5.1: {} + json-schema-to-ts@3.1.1: + dependencies: + "@babel/runtime": 7.29.7 + ts-algebra: 2.0.0 + optional: true - base64id@2.0.0: {} + json-schema-traverse@1.0.0: {} - basic-ftp@5.3.1: {} + json-schema-typed@8.0.2: + optional: true - better-opn@3.0.2: - dependencies: - open: 8.4.2 + jsonc-parser@2.2.1: {} - binary-extensions@2.3.0: {} + jsonc-parser@3.3.1: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - optional: true + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 - body-parser@1.20.5: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - http-errors: 2.0.1 - iconv-lite: 0.4.24 - on-finished: 2.4.1 - qs: 6.15.2 - raw-body: 2.5.3 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - brace-expansion@1.1.15: - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - - braces@3.0.3: - dependencies: - fill-range: 7.1.1 - - buffer-crc32@0.2.13: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - bytes@3.1.2: {} - - cacheable-lookup@7.0.0: {} - - cacheable-request@10.2.14: - dependencies: - '@types/http-cache-semantics': 4.2.0 - get-stream: 6.0.1 - http-cache-semantics: 4.2.0 - keyv: 4.5.4 - mimic-response: 4.0.0 - normalize-url: 8.1.1 - responselike: 3.0.0 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.9: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} - - camelcase-css@2.0.1: {} - - ccount@2.0.1: {} - - chalk@5.2.0: {} - - chalk@5.3.0: {} - - chalk@5.6.2: {} + jsonpath-plus@10.4.0: + dependencies: + "@jsep-plugin/assignment": 1.3.0(jsep@1.4.0) + "@jsep-plugin/regex": 1.0.4(jsep@1.4.0) + jsep: 1.4.0 - character-entities-html4@2.1.0: {} + jsonpointer@5.0.1: {} - character-entities-legacy@3.0.0: {} + katex@0.16.47: + dependencies: + commander: 8.3.0 - character-entities@2.0.2: {} + keytar@7.9.0: + dependencies: + node-addon-api: 4.3.0 + prebuild-install: 7.1.3 + optional: true - character-reference-invalid@2.0.1: {} + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + lcm@0.0.3: + dependencies: + gcd: 0.0.1 + + leven@3.1.0: {} + + leven@4.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lodash.topath@4.5.2: {} + + lodash@4.18.1: {} + + longest-streak@3.1.0: {} + + lowercase-keys@3.0.0: {} + + lru-cache@7.18.3: {} + + markdown-extensions@2.0.0: {} + + markdown-table@3.0.4: {} + + math-intrinsics@1.1.0: {} + + mdast-util-find-and-replace@3.0.2: + dependencies: + "@types/mdast": 4.0.4 + escape-string-regexp: 5.0.0 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + mdast-util-from-markdown@2.0.2: + dependencies: + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-from-markdown@2.0.3: + dependencies: + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.2 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-decode-string: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-frontmatter@2.0.1: + dependencies: + "@types/mdast": 4.0.4 + devlop: 1.1.0 + escape-string-regexp: 5.0.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-extension-frontmatter: 2.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-autolink-literal@2.0.1: + dependencies: + "@types/mdast": 4.0.4 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-find-and-replace: 3.0.2 + micromark-util-character: 2.1.1 + + mdast-util-gfm-footnote@2.1.0: + dependencies: + "@types/mdast": 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + micromark-util-normalize-identifier: 2.0.1 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-strikethrough@2.0.0: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-table@2.0.0: + dependencies: + "@types/mdast": 4.0.4 + devlop: 1.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm-task-list-item@2.0.0: + dependencies: + "@types/mdast": 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-gfm@3.1.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-gfm-autolink-literal: 2.0.1 + mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-strikethrough: 2.0.0 + mdast-util-gfm-table: 2.0.0 + mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-math@3.0.0: + dependencies: + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + devlop: 1.1.0 + longest-streak: 3.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + unist-util-remove-position: 5.0.0 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-expression@2.0.1: + dependencies: + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.1.3: + dependencies: + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx-jsx@3.2.0: + dependencies: + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + ccount: 2.0.1 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + parse-entities: 4.0.2 + stringify-entities: 4.0.4 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.3 + transitivePeerDependencies: + - supports-color + + mdast-util-mdx@3.0.0: + dependencies: + mdast-util-from-markdown: 2.0.3 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdxjs-esm: 2.0.1 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-mdxjs-esm@2.0.1: + dependencies: + "@types/estree-jsx": 1.0.5 + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + devlop: 1.1.0 + mdast-util-from-markdown: 2.0.3 + mdast-util-to-markdown: 2.1.2 + transitivePeerDependencies: + - supports-color + + mdast-util-phrasing@4.1.0: + dependencies: + "@types/mdast": 4.0.4 + unist-util-is: 6.0.1 + + mdast-util-to-hast@13.2.1: + dependencies: + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@ungap/structured-clone": 1.3.1 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + + mdast-util-to-markdown@2.1.2: + dependencies: + "@types/mdast": 4.0.4 + "@types/unist": 3.0.3 + longest-streak: 3.1.0 + mdast-util-phrasing: 4.1.0 + mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.1 + micromark-util-decode-string: 2.0.1 + unist-util-visit: 5.0.0 + zwitch: 2.0.4 + + mdast-util-to-string@4.0.0: + dependencies: + "@types/mdast": 4.0.4 + + media-typer@0.3.0: {} + + media-typer@1.1.1: + optional: true - chardet@2.1.1: {} + merge-descriptors@1.0.3: {} - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + merge-descriptors@2.0.0: + optional: true - chokidar@3.6.0: - dependencies: - anymatch: 3.1.3 - braces: 3.0.3 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromark-core-commonmark@2.0.3: + dependencies: + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-factory-destination: 2.0.1 + micromark-factory-label: 2.0.1 + micromark-factory-space: 2.0.1 + micromark-factory-title: 2.0.1 + micromark-factory-whitespace: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-html-tag-name: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-frontmatter@2.0.0: + dependencies: + fault: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-autolink-literal@2.1.0: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-footnote@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-strikethrough@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-classify-character: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-table@2.1.1: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm-tagfilter@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-gfm-task-list-item@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-gfm@3.0.0: + dependencies: + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-tagfilter: 2.0.0 + micromark-extension-gfm-task-list-item: 2.1.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-math@3.1.0: + dependencies: + "@types/katex": 0.16.8 + devlop: 1.1.0 + katex: 0.16.47 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-expression@3.0.1: + dependencies: + "@types/estree": 1.0.9 + devlop: 1.1.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-extension-mdx-jsx@3.0.1: + dependencies: + "@types/acorn": 4.0.6 + "@types/estree": 1.0.9 + devlop: 1.1.0 + estree-util-is-identifier-name: 3.0.0 + micromark-factory-mdx-expression: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-extension-mdx-md@2.0.0: + dependencies: + micromark-util-types: 2.0.2 + + micromark-extension-mdxjs-esm@3.0.0: + dependencies: + "@types/estree": 1.0.9 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-extension-mdxjs@3.0.0: + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + micromark-extension-mdx-expression: 3.0.1 + micromark-extension-mdx-jsx: 3.0.1 + micromark-extension-mdx-md: 2.0.0 + micromark-extension-mdxjs-esm: 3.0.0 + micromark-util-combine-extensions: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-destination@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-label@2.0.1: + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-mdx-expression@2.0.3: + dependencies: + "@types/estree": 1.0.9 + devlop: 1.1.0 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-events-to-acorn: 2.0.3 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + unist-util-position-from-estree: 2.0.0 + vfile-message: 4.0.3 + + micromark-factory-space@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-types: 2.0.2 + + micromark-factory-title@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-factory-whitespace@2.0.1: + dependencies: + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-chunked@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-classify-character@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-combine-extensions@2.0.1: + dependencies: + micromark-util-chunked: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-decode-numeric-character-reference@2.0.2: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-decode-string@2.0.1: + dependencies: + decode-named-character-reference: 1.3.0 + micromark-util-character: 2.1.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-symbol: 2.0.1 + + micromark-util-encode@2.0.1: {} + + micromark-util-events-to-acorn@2.0.3: + dependencies: + "@types/estree": 1.0.9 + "@types/unist": 3.0.3 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + vfile-message: 4.0.3 + + micromark-util-html-tag-name@2.0.1: {} + + micromark-util-normalize-identifier@2.0.1: + dependencies: + micromark-util-symbol: 2.0.1 + + micromark-util-resolve-all@2.0.1: + dependencies: + micromark-util-types: 2.0.2 + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-subtokenize@2.1.0: + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.1 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + micromark@4.0.2: + dependencies: + "@types/debug": 4.1.13 + debug: 4.4.3 + decode-named-character-reference: 1.3.0 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.3 + micromark-factory-space: 2.0.1 + micromark-util-character: 2.1.1 + micromark-util-chunked: 2.0.1 + micromark-util-combine-extensions: 2.0.1 + micromark-util-decode-numeric-character-reference: 2.0.2 + micromark-util-encode: 2.0.1 + micromark-util-normalize-identifier: 2.0.1 + micromark-util-resolve-all: 2.0.1 + micromark-util-sanitize-uri: 2.0.1 + micromark-util-subtokenize: 2.1.0 + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + transitivePeerDependencies: + - supports-color + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.2 + + mime-db@1.52.0: {} + + mime-db@1.54.0: + optional: true - chownr@1.1.4: - optional: true + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 - chownr@3.0.0: {} + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + optional: true - chromium-bidi@0.6.2(devtools-protocol@0.0.1312386): - dependencies: - devtools-protocol: 0.0.1312386 - mitt: 3.0.1 - urlpattern-polyfill: 10.0.0 - zod: 3.23.8 + mime@1.6.0: {} - clean-stack@4.2.0: - dependencies: - escape-string-regexp: 5.0.0 + mimic-fn@2.1.0: {} - cli-boxes@3.0.0: {} + mimic-response@3.1.0: {} - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 + mimic-response@4.0.0: {} - cli-spinners@2.9.2: {} + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.15 - cli-truncate@4.0.0: - dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 + minimist@1.2.8: + optional: true - cli-width@4.1.0: {} + minipass@7.1.3: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.3 + + mintlify@4.2.876(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/node@25.9.1)(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(typescript@6.0.3): + dependencies: + "@mintlify/cli": 4.0.1479(@base-ui/react@1.8.0(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/node@25.9.1)(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(typescript@6.0.3) + transitivePeerDependencies: + - "@base-ui/react" + - "@cfworker/json-schema" + - "@types/node" + - "@types/react" + - bare-abort-controller + - bare-buffer + - bufferutil + - debug + - encoding + - react-devtools-core + - react-dom + - react-native-b4a + - supports-color + - ts-node + - typescript + - utf-8-validate + + mitt@3.0.1: {} + + mkdirp-classic@0.5.3: + optional: true - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 + ms@2.0.0: {} - code-excerpt@4.0.0: - dependencies: - convert-to-spaces: 2.0.1 + ms@2.1.3: {} - collapse-white-space@2.1.0: {} + mute-stream@2.0.0: {} - color-blend@4.0.0: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 + nanoid@3.3.18: {} - color-name@1.1.4: {} + napi-build-utils@2.0.0: + optional: true - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.4 + negotiator@0.6.3: {} - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 + negotiator@1.1.0: + dependencies: + content-type: 2.1.0 + optional: true - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 + neotraverse@0.6.18: {} + + netmask@2.1.1: {} + + next-mdx-remote-client@2.1.12(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(unified@11.0.5): + dependencies: + "@babel/code-frame": 7.29.7 + "@mdx-js/mdx": 3.1.1 + "@mdx-js/react": 3.1.1(@types/react@19.2.14)(react@19.2.3) + "@types/mdx": 2.0.14 + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + remark-mdx-remove-esm: 1.3.2(unified@11.0.5) + serialize-error: 13.0.1 + vfile: 6.0.3 + vfile-matter: 5.0.1 + transitivePeerDependencies: + - "@types/react" + - supports-color + - unified + + nimma@0.2.3: + dependencies: + "@jsep-plugin/regex": 1.0.4(jsep@1.4.0) + "@jsep-plugin/ternary": 1.1.4(jsep@1.4.0) + astring: 1.9.0 + jsep: 1.4.0 + optionalDependencies: + jsonpath-plus: 10.4.0 + lodash.topath: 4.5.2 + + nlcst-to-string@4.0.0: + dependencies: + "@types/nlcst": 2.0.3 + + node-abi@3.92.0: + dependencies: + semver: 7.7.2 + optional: true - comma-separated-tokens@2.0.3: {} + node-addon-api@4.3.0: + optional: true - commander@2.20.3: {} + node-fetch@2.6.7: + dependencies: + whatwg-url: 5.0.0 - commander@4.1.1: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 - commander@8.3.0: {} + non-error@0.1.0: {} - concat-map@0.0.1: {} + normalize-path@3.0.0: {} - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 + normalize-url@8.1.1: {} - content-type@1.0.5: {} + oauth4webapi@3.8.6: {} - convert-to-spaces@2.0.1: {} + object-assign@4.1.1: {} - cookie-signature@1.0.7: {} + object-hash@3.0.0: {} - cookie@0.7.2: {} + object-inspect@1.13.4: {} - cors@2.8.6: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 - cosmiconfig@9.0.1(typescript@6.0.3): - dependencies: - env-paths: 2.2.1 - import-fresh: 3.3.1 - js-yaml: 4.1.1 - parse-json: 5.2.0 - optionalDependencies: - typescript: 6.0.3 + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 - cross-spawn@7.0.6: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 + openapi-types@12.1.3: {} - cssesc@3.0.0: {} + openid-client@6.8.2: + dependencies: + jose: 6.2.3 + oauth4webapi: 3.8.6 - cssfilter@0.0.10: {} + orderedmap@2.1.1: {} - csstype@3.2.3: {} + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 - data-uri-to-buffer@6.0.2: {} + p-any@4.0.0: + dependencies: + p-cancelable: 3.0.0 + p-some: 6.0.0 - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 + p-cancelable@3.0.0: {} - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 + p-some@6.0.0: + dependencies: + aggregate-error: 4.0.1 + p-cancelable: 3.0.0 - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 + p-timeout@5.1.0: {} - debug@2.6.9: - dependencies: - ms: 2.0.0 + pac-proxy-agent@7.2.0: + dependencies: + "@tootallnate/quickjs-emscripten": 0.23.0 + agent-base: 7.1.4 + debug: 4.4.3 + get-uri: 6.0.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color - debug@4.3.7: - dependencies: - ms: 2.1.3 + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.1.1 - debug@4.4.3: - dependencies: - ms: 2.1.3 + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 - decode-bmp@0.2.1: - dependencies: - '@canvas/image-data': 1.1.0 - to-data-view: 1.1.0 + parse-entities@4.0.2: + dependencies: + "@types/unist": 2.0.11 + character-entities-legacy: 3.0.0 + character-reference-invalid: 2.0.1 + decode-named-character-reference: 1.3.0 + is-alphanumerical: 2.0.1 + is-decimal: 2.0.1 + is-hexadecimal: 2.0.1 + + parse-json@5.2.0: + dependencies: + "@babel/code-frame": 7.29.7 + error-ex: 1.3.4 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-latin@7.0.0: + dependencies: + "@types/nlcst": 2.0.3 + "@types/unist": 3.0.3 + nlcst-to-string: 4.0.0 + unist-util-modify-children: 4.0.0 + unist-util-visit-children: 3.0.0 + vfile: 6.0.3 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + parseurl@1.3.3: {} + + patch-console@2.0.0: {} + + path-expression-matcher@1.6.2: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-to-regexp@0.1.13: {} + + path-to-regexp@8.4.2: + optional: true - decode-ico@0.4.1: - dependencies: - '@canvas/image-data': 1.1.0 - decode-bmp: 0.2.1 - to-data-view: 1.1.0 + pend@1.2.0: {} - decode-named-character-reference@1.3.0: - dependencies: - character-entities: 2.0.2 + picocolors@1.1.1: {} - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 + picomatch@2.3.2: {} - deep-extend@0.6.0: - optional: true + picomatch@4.0.4: {} - defer-to-connect@2.0.1: {} + pify@2.3.0: {} - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 + pirates@4.0.7: {} - define-lazy-prop@2.0.0: {} + pkce-challenge@5.0.1: + optional: true - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 + pony-cause@1.1.1: {} + + possible-typed-array-names@1.1.0: {} + + postcss-import@15.1.0(postcss@8.5.23): + dependencies: + postcss: 8.5.23 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.12 + + postcss-js@4.1.0(postcss@8.5.23): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.23 + + postcss-load-config@4.0.2(postcss@8.5.23): + dependencies: + lilconfig: 3.1.3 + yaml: 2.9.0 + optionalDependencies: + postcss: 8.5.23 + + postcss-nested@6.2.0(postcss@8.5.23): + dependencies: + postcss: 8.5.23 + postcss-selector-parser: 6.1.2 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.5.23: + dependencies: + nanoid: 3.3.18 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + posthog-node@5.17.2: + dependencies: + "@posthog/core": 1.7.1 + + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.1.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.92.0 + pump: 3.0.4 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.4 + tunnel-agent: 0.6.0 + optional: true - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - - delayed-stream@1.0.0: {} - - depd@2.0.0: {} - - dependency-graph@0.11.0: {} - - dequal@2.0.3: {} - - destroy@1.2.0: {} - - detect-libc@2.1.2: {} - - detect-node-es@1.1.0: {} - - detect-port@1.5.1: - dependencies: - address: 1.2.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - devtools-protocol@0.0.1312386: {} - - didyoumean@1.2.2: {} - - dlv@1.1.3: {} - - dns-packet@5.6.1: - dependencies: - '@leichtgewicht/ip-codec': 2.0.5 - - dns-socket@4.2.2: - dependencies: - dns-packet: 5.6.1 - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - - ee-first@1.1.1: {} - - emoji-regex@10.6.0: {} - - emoji-regex@8.0.0: {} - - encodeurl@2.0.0: {} - - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - - engine.io-parser@5.2.3: {} - - engine.io@6.6.8: - dependencies: - '@types/cors': 2.8.19 - '@types/node': 25.9.1 - '@types/ws': 8.18.1 - accepts: 1.3.8 - base64id: 2.0.0 - cookie: 0.7.2 - cors: 2.8.6 - debug: 4.4.3 - engine.io-parser: 5.2.3 - ws: 8.20.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - entities@6.0.1: {} - - env-paths@2.2.1: {} - - environment@1.1.0: {} - - error-ex@1.3.4: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.24.2: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-negative-zero: 2.0.3 - is-regex: 1.2.1 - is-set: 2.0.3 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.4 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - stop-iteration-iterator: 1.1.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.8 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.21 - - es-aggregate-error@1.0.14: - dependencies: - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - function-bind: 1.1.2 - globalthis: 1.0.4 - has-property-descriptors: 1.0.2 - set-function-name: 2.0.2 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.2: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - es-toolkit@1.47.0: {} - - esast-util-from-estree@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - unist-util-position-from-estree: 2.0.0 - - esast-util-from-js@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - acorn: 8.11.2 - esast-util-from-estree: 2.0.0 - vfile-message: 4.0.3 - - escalade@3.2.0: {} - - escape-html@1.0.3: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@5.0.0: {} - - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - - esprima@4.0.1: {} - - estraverse@5.3.0: {} - - estree-util-attach-comments@3.0.0: - dependencies: - '@types/estree': 1.0.9 - - estree-util-build-jsx@3.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - estree-walker: 3.0.3 - - estree-util-is-identifier-name@3.0.0: {} - - estree-util-scope@1.0.0: - dependencies: - '@types/estree': 1.0.9 - devlop: 1.1.0 - - estree-util-to-js@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - astring: 1.9.0 - source-map: 0.7.6 - - estree-util-visit@2.0.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/unist': 3.0.3 - - estree-walker@3.0.3: - dependencies: - '@types/estree': 1.0.9 - - esutils@2.0.3: {} - - etag@1.8.1: {} - - event-target-shim@5.0.1: {} - - events-universal@1.0.1: - dependencies: - bare-events: 2.9.1 - transitivePeerDependencies: - - bare-abort-controller - - expand-template@2.0.3: - optional: true - - expr-eval-fork@3.0.3: {} - - express@4.22.0: - dependencies: - accepts: 1.3.8 - array-flatten: 1.1.1 - body-parser: 1.20.5 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.0.7 - debug: 2.6.9 - depd: 2.0.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.3.2 - fresh: 0.5.2 - http-errors: 2.0.1 - merge-descriptors: 1.0.3 - methods: 1.1.2 - on-finished: 2.4.1 - parseurl: 1.3.3 - path-to-regexp: 0.1.13 - proxy-addr: 2.0.7 - qs: 6.14.2 - range-parser: 1.2.1 - safe-buffer: 5.2.1 - send: 0.19.2 - serve-static: 1.16.3 - setprototypeof: 1.2.0 - statuses: 2.0.2 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - - extend@3.0.2: {} - - extract-zip@2.0.1: - dependencies: - debug: 4.4.3 - get-stream: 5.2.0 - yauzl: 2.10.0 - optionalDependencies: - '@types/yauzl': 2.10.3 - transitivePeerDependencies: - - supports-color - - fast-deep-equal@3.1.3: {} - - fast-fifo@1.3.2: {} - - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fast-memoize@2.5.2: {} - - fast-uri@3.1.2: {} - - fastq@1.20.1: - dependencies: - reusify: 1.1.0 - - fault@2.0.1: - dependencies: - format: 0.2.2 - - favicons@7.2.0: - dependencies: - escape-html: 1.0.3 - sharp: 0.33.5 - xml2js: 0.6.2 - - fd-slicer@1.1.0: - dependencies: - pend: 1.2.0 - - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 - - fill-range@7.1.1: - dependencies: - to-regex-range: 5.0.1 - - finalhandler@1.3.2: - dependencies: - debug: 2.6.9 - encodeurl: 2.0.0 - escape-html: 1.0.3 - on-finished: 2.4.1 - parseurl: 1.3.3 - statuses: 2.0.2 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - follow-redirects@1.16.0: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - - form-data-encoder@2.1.4: {} - - form-data@4.0.5: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - es-set-tostringtag: 2.1.0 - hasown: 2.0.4 - mime-types: 2.1.35 - - format@0.2.2: {} - - forwarded@0.2.0: {} - - fresh@0.5.2: {} - - front-matter@4.0.2: - dependencies: - js-yaml: 3.14.2 - - fs-constants@1.0.0: - optional: true - - fs-extra@11.1.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 - - fs-extra@11.1.1: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 - - fs-extra@11.2.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.2.1 - universalify: 2.0.1 - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.4 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - gcd@0.0.1: {} - - generator-function@2.0.1: {} - - get-caller-file@2.0.5: {} - - get-east-asian-width@1.6.0: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.4 - math-intrinsics: 1.1.0 - - get-nonce@1.0.1: {} - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.2 - - get-stream@5.2.0: - dependencies: - pump: 3.0.4 - - get-stream@6.0.1: {} - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - - get-uri@6.0.5: - dependencies: - basic-ftp: 5.3.1 - data-uri-to-buffer: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - github-from-package@0.0.0: - optional: true - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - glob@7.1.6: - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.5 - once: 1.4.0 - path-is-absolute: 1.0.1 - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} - - got@12.6.1: - dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - - got@13.0.0: - dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.14 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.1 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - - graceful-fs@4.2.11: {} - - has-bigints@1.1.0: {} - - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.4: - dependencies: - function-bind: 1.1.2 - - hast-util-embedded@3.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-is-element: 3.0.0 - - hast-util-from-dom@5.0.1: - dependencies: - '@types/hast': 3.0.4 - hastscript: 9.0.1 - web-namespaces: 2.0.1 - - hast-util-from-html-isomorphic@2.0.0: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-dom: 5.0.1 - hast-util-from-html: 2.0.3 - unist-util-remove-position: 5.0.0 - - hast-util-from-html@2.0.3: - dependencies: - '@types/hast': 3.0.4 - devlop: 1.1.0 - hast-util-from-parse5: 8.0.3 - parse5: 7.3.0 - vfile: 6.0.3 - vfile-message: 4.0.3 - - hast-util-from-parse5@8.0.3: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - devlop: 1.1.0 - hastscript: 9.0.1 - property-information: 7.2.0 - vfile: 6.0.3 - vfile-location: 5.0.3 - web-namespaces: 2.0.1 - - hast-util-has-property@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-is-body-ok-link@3.0.1: - dependencies: - '@types/hast': 3.0.4 - - hast-util-is-element@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-minify-whitespace@1.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-is-element: 3.0.0 - hast-util-whitespace: 3.0.0 - unist-util-is: 6.0.1 - - hast-util-parse-selector@4.0.0: - dependencies: - '@types/hast': 3.0.4 - - hast-util-phrasing@3.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-embedded: 3.0.0 - hast-util-has-property: 3.0.0 - hast-util-is-body-ok-link: 3.0.1 - hast-util-is-element: 3.0.0 - - hast-util-to-estree@3.1.3: - dependencies: - '@types/estree': 1.0.9 - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-attach-comments: 3.0.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.2.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.21 - unist-util-position: 5.0.0 - zwitch: 2.0.4 - transitivePeerDependencies: - - supports-color - - hast-util-to-html@9.0.4: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-to-html@9.0.5: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.1 - property-information: 7.2.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-to-jsx-runtime@2.3.6: - dependencies: - '@types/estree': 1.0.9 - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - comma-separated-tokens: 2.0.3 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.2.0 - space-separated-tokens: 2.0.2 - style-to-js: 1.1.21 - unist-util-position: 5.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - hast-util-to-mdast@10.1.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.1 - hast-util-phrasing: 3.0.1 - hast-util-to-html: 9.0.5 - hast-util-to-text: 4.0.2 - hast-util-whitespace: 3.0.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-hast: 13.2.1 - mdast-util-to-string: 4.0.0 - rehype-minify-whitespace: 6.0.2 - trim-trailing-lines: 2.1.0 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - - hast-util-to-string@3.0.1: - dependencies: - '@types/hast': 3.0.4 - - hast-util-to-text@4.0.2: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - hast-util-is-element: 3.0.0 - unist-util-find-after: 5.0.0 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hastscript@9.0.1: - dependencies: - '@types/hast': 3.0.4 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 4.0.0 - property-information: 7.2.0 - space-separated-tokens: 2.0.2 - - hex-rgb@5.0.0: {} - - html-void-elements@3.0.0: {} - - http-cache-semantics@4.2.0: {} - - http-errors@2.0.1: - dependencies: - depd: 2.0.0 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: 2.0.2 - toidentifier: 1.0.1 - - http-proxy-agent@7.0.2: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - http2-wrapper@2.2.1: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - https-proxy-agent@7.0.6: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - ico-endec@0.1.6: {} - - iconv-lite@0.4.24: - dependencies: - safer-buffer: 2.1.2 - - iconv-lite@0.7.2: - dependencies: - safer-buffer: 2.1.2 - - ieee754@1.2.1: {} - - ignore@7.0.5: {} - - immer@9.0.21: {} - - import-fresh@3.3.1: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - indent-string@5.0.0: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - ini@1.3.8: - optional: true - - ink-spinner@5.0.0(ink@6.3.0(@types/react@19.2.14)(react@19.2.3))(react@19.2.3): - dependencies: - cli-spinners: 2.9.2 - ink: 6.3.0(@types/react@19.2.14)(react@19.2.3) - react: 19.2.3 - - ink@6.3.0(@types/react@19.2.14)(react@19.2.3): - dependencies: - '@alcalzone/ansi-tokenize': 0.2.5 - ansi-escapes: 7.3.0 - ansi-styles: 6.2.3 - auto-bind: 5.0.1 - chalk: 5.6.2 - cli-boxes: 3.0.0 - cli-cursor: 4.0.0 - cli-truncate: 4.0.0 - code-excerpt: 4.0.0 - es-toolkit: 1.47.0 - indent-string: 5.0.0 - is-in-ci: 2.0.0 - patch-console: 2.0.0 - react: 19.2.3 - react-reconciler: 0.32.0(react@19.2.3) - signal-exit: 3.0.7 - slice-ansi: 7.1.2 - stack-utils: 2.0.6 - string-width: 7.2.0 - type-fest: 4.41.0 - widest-line: 5.0.0 - wrap-ansi: 9.0.2 - ws: 8.21.0 - yoga-layout: 3.2.1 - optionalDependencies: - '@types/react': 19.2.14 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - inline-style-parser@0.2.7: {} - - inquirer@12.3.0(@types/node@25.9.1): - dependencies: - '@inquirer/core': 10.3.2(@types/node@25.9.1) - '@inquirer/prompts': 7.9.0(@types/node@25.9.1) - '@inquirer/type': 3.0.10(@types/node@25.9.1) - '@types/node': 25.9.1 - ansi-escapes: 4.3.2 - mute-stream: 2.0.0 - run-async: 3.0.0 - rxjs: 7.8.2 - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.4 - side-channel: 1.1.0 - - ip-address@10.2.0: {} - - ip-regex@4.3.0: {} - - ipaddr.js@1.9.1: {} - - is-alphabetical@2.0.1: {} - - is-alphanumerical@2.0.1: - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-arrayish@0.3.4: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.2: - dependencies: - hasown: 2.0.4 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-decimal@2.0.1: {} - - is-docker@2.2.1: {} - - is-extglob@2.1.1: {} + progress@2.0.3: {} + + property-information@6.5.0: {} + + property-information@7.2.0: {} + + prosemirror-model@1.25.11: + dependencies: + orderedmap: 2.1.1 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + proxy-from-env@2.1.0: {} + + public-ip@5.0.0: + dependencies: + dns-socket: 4.2.2 + got: 12.6.1 + is-ip: 3.1.0 + + pump@3.0.4: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + + puppeteer-core@24.3.1: + dependencies: + "@puppeteer/browsers": 2.7.1 + chromium-bidi: 2.1.2(devtools-protocol@0.0.1402036) + debug: 4.4.3 + devtools-protocol: 0.0.1402036 + typed-query-selector: 2.12.2 + ws: 8.21.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - bufferutil + - react-native-b4a + - supports-color + - utf-8-validate + + puppeteer@24.3.1(typescript@6.0.3): + dependencies: + "@puppeteer/browsers": 2.7.1 + chromium-bidi: 2.1.2(devtools-protocol@0.0.1402036) + cosmiconfig: 9.0.1(typescript@6.0.3) + devtools-protocol: 0.0.1402036 + puppeteer-core: 24.3.1 + typed-query-selector: 2.12.2 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - bufferutil + - react-native-b4a + - supports-color + - typescript + - utf-8-validate + + qs@6.14.2: + dependencies: + side-channel: 1.1.0 + + qs@6.15.2: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + quick-lru@5.1.1: {} + + range-parser@1.2.1: {} + + raw-body@2.5.3: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + optional: true - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + optional: true - is-fullwidth-code-point@3.0.0: {} + re2js@2.8.6: {} - is-fullwidth-code-point@4.0.0: {} + react-dom@19.2.3(react@19.2.3): + dependencies: + react: 19.2.3 + scheduler: 0.27.0 - is-fullwidth-code-point@5.1.0: - dependencies: - get-east-asian-width: 1.6.0 + react-reconciler@0.32.0(react@19.2.3): + dependencies: + react: 19.2.3 + scheduler: 0.26.0 - is-generator-function@1.1.2: - dependencies: - call-bound: 1.0.4 - generator-function: 2.0.1 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 + react@19.2.3: {} - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 + read-cache@1.0.0: + dependencies: + pify: 2.3.0 - is-hexadecimal@2.0.1: {} + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + optional: true - is-in-ci@2.0.0: {} + readdirp@3.6.0: + dependencies: + picomatch: 2.3.2 + + recma-build-jsx@1.0.0: + dependencies: + "@types/estree": 1.0.9 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 + + recma-jsx@1.0.1(acorn@8.11.2): + dependencies: + acorn: 8.11.2 + acorn-jsx: 5.3.2(acorn@8.11.2) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + + recma-parse@1.0.0: + dependencies: + "@types/estree": 1.0.9 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + "@types/estree": 1.0.9 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + rehype-katex@7.0.1: + dependencies: + "@types/hast": 3.0.4 + "@types/katex": 0.16.8 + hast-util-from-html-isomorphic: 2.0.0 + hast-util-to-text: 4.0.2 + katex: 0.16.47 + unist-util-visit-parents: 6.0.2 + vfile: 6.0.3 + + rehype-minify-whitespace@6.0.2: + dependencies: + "@types/hast": 3.0.4 + hast-util-minify-whitespace: 1.0.1 + + rehype-parse@9.0.1: + dependencies: + "@types/hast": 3.0.4 + hast-util-from-html: 2.0.3 + unified: 11.0.5 + + rehype-recma@1.0.0: + dependencies: + "@types/estree": 1.0.9 + "@types/hast": 3.0.4 + hast-util-to-estree: 3.1.3 + transitivePeerDependencies: + - supports-color + + rehype-stringify@10.0.1: + dependencies: + "@types/hast": 3.0.4 + hast-util-to-html: 9.0.5 + unified: 11.0.5 + + remark-frontmatter@5.0.0: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-frontmatter: 2.0.1 + micromark-extension-frontmatter: 2.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.0: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-gfm@4.0.1: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-gfm: 3.1.0 + micromark-extension-gfm: 3.0.0 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-math@6.0.0: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-math: 3.0.0 + micromark-extension-math: 3.1.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-mdx-remove-esm@1.3.2(unified@11.0.5): + dependencies: + "@types/mdast": 4.0.4 + unified: 11.0.5 + unist-util-remove: 4.0.0 + + remark-mdx@3.0.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.0: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-mdx@3.1.1: + dependencies: + mdast-util-mdx: 3.0.0 + micromark-extension-mdxjs: 3.0.0 + transitivePeerDependencies: + - supports-color + + remark-parse@11.0.0: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-from-markdown: 2.0.3 + micromark-util-types: 2.0.2 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + remark-rehype@11.1.1: + dependencies: + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + mdast-util-to-hast: 13.2.1 + unified: 11.0.5 + vfile: 6.0.3 + + remark-smartypants@3.0.2: + dependencies: + retext: 9.0.0 + retext-smartypants: 6.2.0 + unified: 11.0.5 + unist-util-visit: 5.0.0 + + remark-stringify@11.0.0: + dependencies: + "@types/mdast": 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 + + remark@15.0.1: + dependencies: + "@types/mdast": 4.0.4 + remark-parse: 11.0.0 + remark-stringify: 11.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + reselect@5.3.0: {} + + resolve-alpn@1.2.1: {} + + resolve-from@4.0.0: {} + + resolve@1.22.12: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.2 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retext-latin@4.0.0: + dependencies: + "@types/nlcst": 2.0.3 + parse-latin: 7.0.0 + unified: 11.0.5 + + retext-smartypants@6.2.0: + dependencies: + "@types/nlcst": 2.0.3 + nlcst-to-string: 4.0.0 + unist-util-visit: 5.0.0 + + retext-stringify@4.0.0: + dependencies: + "@types/nlcst": 2.0.3 + nlcst-to-string: 4.0.0 + unified: 11.0.5 + + retext@9.0.0: + dependencies: + "@types/nlcst": 2.0.3 + retext-latin: 4.0.0 + retext-stringify: 4.0.0 + unified: 11.0.5 + + reusify@1.1.0: {} + + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.4.2 + transitivePeerDependencies: + - supports-color + optional: true - is-ip@3.1.0: - dependencies: - ip-regex: 4.3.0 + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.4: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-stable-stringify@1.1.1: {} + + safer-buffer@2.1.2: {} + + sax@1.6.0: {} + + scheduler@0.26.0: {} + + scheduler@0.27.0: {} + + semver@7.7.2: {} + + send@0.19.2: + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.1 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + + send@1.2.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + optional: true - is-map@2.0.3: {} + serialize-error@13.0.1: + dependencies: + non-error: 0.1.0 + type-fest: 5.7.0 + + serve-static@1.16.3: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.2 + transitivePeerDependencies: + - supports-color + + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + optional: true - is-negative-zero@2.0.3: {} + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + + setprototypeof@1.2.0: {} + + sharp-ico@0.1.5: + dependencies: + decode-ico: 0.4.1 + ico-endec: 0.1.6 + sharp: 0.33.5 + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.1.2 + semver: 7.7.2 + optionalDependencies: + "@img/sharp-darwin-arm64": 0.33.5 + "@img/sharp-darwin-x64": 0.33.5 + "@img/sharp-libvips-darwin-arm64": 1.0.4 + "@img/sharp-libvips-darwin-x64": 1.0.4 + "@img/sharp-libvips-linux-arm": 1.0.5 + "@img/sharp-libvips-linux-arm64": 1.0.4 + "@img/sharp-libvips-linux-s390x": 1.0.4 + "@img/sharp-libvips-linux-x64": 1.0.4 + "@img/sharp-libvips-linuxmusl-arm64": 1.0.4 + "@img/sharp-libvips-linuxmusl-x64": 1.0.4 + "@img/sharp-linux-arm": 0.33.5 + "@img/sharp-linux-arm64": 0.33.5 + "@img/sharp-linux-s390x": 0.33.5 + "@img/sharp-linux-x64": 0.33.5 + "@img/sharp-linuxmusl-arm64": 0.33.5 + "@img/sharp-linuxmusl-x64": 0.33.5 + "@img/sharp-wasm32": 0.33.5 + "@img/sharp-win32-ia32": 0.33.5 + "@img/sharp-win32-x64": 0.33.5 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shiki@3.23.0: + dependencies: + "@shikijs/core": 3.23.0 + "@shikijs/engine-javascript": 3.23.0 + "@shikijs/engine-oniguruma": 3.23.0 + "@shikijs/langs": 3.23.0 + "@shikijs/themes": 3.23.0 + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-concat@1.0.1: + optional: true - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + optional: true - is-number@7.0.0: {} + simple-swizzle@0.2.4: + dependencies: + is-arrayish: 0.3.4 + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + + smart-buffer@4.2.0: {} + + socket.io-adapter@2.5.7: + dependencies: + debug: 4.4.3 + ws: 8.20.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.6: + dependencies: + "@socket.io/component-emitter": 3.1.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + socket.io@4.8.0: + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.6 + debug: 4.3.7 + engine.io: 6.6.8 + socket.io-adapter: 2.5.7 + socket.io-parser: 4.2.6 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.9 + transitivePeerDependencies: + - supports-color + + socks@2.8.9: + dependencies: + ip-address: 10.2.0 + smart-buffer: 4.2.0 + + source-map-js@1.2.1: {} + + source-map@0.6.1: + optional: true - is-online@10.0.0: - dependencies: - got: 12.6.1 - p-any: 4.0.0 - p-timeout: 5.1.0 - public-ip: 5.0.0 + source-map@0.7.6: {} - is-plain-obj@4.1.0: {} + space-separated-tokens@2.0.2: {} - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.4 + sprintf-js@1.0.3: {} - is-set@2.0.3: {} + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 + standardwebhooks@1.1.1: + dependencies: + "@stablelib/base64": 1.0.1 + fast-sha256: 1.3.0 + optional: true - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + statuses@2.0.2: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + streamx@2.26.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.6.0 + get-east-asian-width: 1.6.0 + strip-ansi: 7.2.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.2 + es-object-atoms: 1.1.2 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + optional: true - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.21 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 - is-weakmap@2.0.2: {} + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 + strip-json-comments@2.0.1: + optional: true - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 + strnum@2.4.2: + dependencies: + anynum: 1.0.1 + + style-to-js@1.1.21: + dependencies: + style-to-object: 1.0.14 + + style-to-object@0.4.4: + dependencies: + inline-style-parser: 0.1.1 + + style-to-object@1.0.14: + dependencies: + inline-style-parser: 0.2.7 + + sucrase@3.34.0: + dependencies: + "@jridgewell/gen-mapping": 0.3.13 + commander: 4.1.1 + glob: 7.1.6 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + + sucrase@3.35.1: + dependencies: + "@jridgewell/gen-mapping": 0.3.13 + commander: 4.1.1 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + tinyglobby: 0.2.17 + ts-interface-checker: 0.1.13 + + supports-preserve-symlinks-flag@1.0.0: {} + + tagged-tag@1.0.0: {} + + tailwindcss@3.4.17: + dependencies: + "@alloc/quick-lru": 5.2.0 + arg: 5.0.2 + chokidar: 3.6.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 3.1.3 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.23 + postcss-import: 15.1.0(postcss@8.5.23) + postcss-js: 4.1.0(postcss@8.5.23) + postcss-load-config: 4.0.2(postcss@8.5.23) + postcss-nested: 6.2.0(postcss@8.5.23) + postcss-selector-parser: 6.1.2 + resolve: 1.22.12 + sucrase: 3.35.1 + transitivePeerDependencies: + - ts-node + + tar-fs@2.1.4: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.4 + tar-stream: 2.2.0 + optional: true - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 + tar-fs@3.1.2: + dependencies: + pump: 3.0.4 + tar-stream: 3.2.0 + optionalDependencies: + bare-fs: 4.7.2 + bare-path: 3.0.1 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + optional: true - isarray@2.0.5: {} + tar-stream@3.2.0: + dependencies: + b4a: 1.8.1 + bare-fs: 4.7.2 + fast-fifo: 1.3.2 + streamx: 2.26.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a - isexe@2.0.0: {} + tar@7.5.21: + dependencies: + "@isaacs/fs-minipass": 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 - jiti@1.21.7: {} + teex@1.0.1: + dependencies: + streamx: 2.26.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a - jose@6.2.3: {} + text-decoder@1.2.7: + dependencies: + b4a: 1.8.1 + transitivePeerDependencies: + - react-native-b4a - js-tokens@4.0.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 - js-yaml@3.14.2: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 - js-yaml@4.1.1: - dependencies: - argparse: 2.0.1 + tinyglobby@0.2.17: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 - jsep@1.4.0: {} + to-data-view@1.1.0: {} - json-buffer@3.0.1: {} + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 - json-parse-even-better-errors@2.3.1: {} + toidentifier@1.0.1: {} - json-schema-traverse@1.0.0: {} + tr46@0.0.3: {} - jsonc-parser@2.2.1: {} + trim-lines@3.0.1: {} - jsonfile@6.2.1: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 + trim-trailing-lines@2.1.0: {} - jsonpath-plus@10.4.0: - dependencies: - '@jsep-plugin/assignment': 1.3.0(jsep@1.4.0) - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - jsep: 1.4.0 + trough@2.2.0: {} - jsonpointer@5.0.1: {} + ts-algebra@2.0.0: + optional: true - katex@0.16.47: - dependencies: - commander: 8.3.0 - - keytar@7.9.0: - dependencies: - node-addon-api: 4.3.0 - prebuild-install: 7.1.3 - optional: true - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - lcm@0.0.3: - dependencies: - gcd: 0.0.1 - - leven@3.1.0: {} - - leven@4.1.0: {} - - lilconfig@3.1.3: {} - - lines-and-columns@1.2.4: {} - - lodash.topath@4.5.2: {} - - lodash@4.18.1: {} - - longest-streak@3.1.0: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lowercase-keys@3.0.0: {} - - lru-cache@7.18.3: {} - - markdown-extensions@2.0.0: {} - - markdown-table@3.0.4: {} - - math-intrinsics@1.1.0: {} - - mdast-util-find-and-replace@3.0.2: - dependencies: - '@types/mdast': 4.0.4 - escape-string-regexp: 5.0.0 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.1 - - mdast-util-from-markdown@2.0.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.2 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-from-markdown@2.0.3: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.2 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-frontmatter@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - micromark-extension-frontmatter: 2.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-autolink-literal@2.0.1: - dependencies: - '@types/mdast': 4.0.4 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.2 - micromark-util-character: 2.1.1 - - mdast-util-gfm-footnote@2.1.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - micromark-util-normalize-identifier: 2.0.1 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-strikethrough@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-table@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm-task-list-item@2.0.0: - dependencies: - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm@3.0.0: - dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-gfm@3.1.0: - dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-math@3.0.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - unist-util-remove-position: 5.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-expression@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.1.3: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx-jsx@3.2.0: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 - stringify-entities: 4.0.4 - unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.3 - transitivePeerDependencies: - - supports-color - - mdast-util-mdx@3.0.0: - dependencies: - mdast-util-from-markdown: 2.0.2 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-mdxjs-esm@2.0.1: - dependencies: - '@types/estree-jsx': 1.0.5 - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 - mdast-util-to-markdown: 2.1.2 - transitivePeerDependencies: - - supports-color - - mdast-util-phrasing@4.1.0: - dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.1 - - mdast-util-to-hast@13.2.1: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.1 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - - mdast-util-to-markdown@2.1.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 - zwitch: 2.0.4 - - mdast-util-to-string@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - - media-typer@0.3.0: {} - - merge-descriptors@1.0.3: {} - - merge2@1.4.1: {} - - methods@1.1.2: {} - - micromark-core-commonmark@2.0.3: - dependencies: - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-frontmatter@2.0.0: - dependencies: - fault: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-autolink-literal@2.1.0: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-footnote@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-strikethrough@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-table@2.1.1: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-tagfilter@2.0.0: - dependencies: - micromark-util-types: 2.0.2 - - micromark-extension-gfm-task-list-item@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm@3.0.0: - dependencies: - micromark-extension-gfm-autolink-literal: 2.1.0 - micromark-extension-gfm-footnote: 2.1.0 - micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.1 - micromark-extension-gfm-tagfilter: 2.0.0 - micromark-extension-gfm-task-list-item: 2.1.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-math@3.1.0: - dependencies: - '@types/katex': 0.16.8 - devlop: 1.1.0 - katex: 0.16.47 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-mdx-expression@3.0.1: - dependencies: - '@types/estree': 1.0.9 - devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-mdx-jsx@3.0.1: - dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 1.0.9 - devlop: 1.1.0 - estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - - micromark-extension-mdx-md@2.0.0: - dependencies: - micromark-util-types: 2.0.2 - - micromark-extension-mdxjs-esm@3.0.0: - dependencies: - '@types/estree': 1.0.9 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 - - micromark-extension-mdxjs@3.0.0: - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - micromark-extension-mdx-expression: 3.0.1 - micromark-extension-mdx-jsx: 3.0.1 - micromark-extension-mdx-md: 2.0.0 - micromark-extension-mdxjs-esm: 3.0.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-destination@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-label@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-mdx-expression@2.0.3: - dependencies: - '@types/estree': 1.0.9 - devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 - - micromark-factory-space@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.2 - - micromark-factory-title@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-whitespace@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-chunked@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-classify-character@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-combine-extensions@2.0.1: - dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-decode-numeric-character-reference@2.0.2: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-decode-string@2.0.1: - dependencies: - decode-named-character-reference: 1.3.0 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 - - micromark-util-encode@2.0.1: {} - - micromark-util-events-to-acorn@2.0.3: - dependencies: - '@types/estree': 1.0.9 - '@types/unist': 3.0.3 - devlop: 1.1.0 - estree-util-visit: 2.0.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - - micromark-util-html-tag-name@2.0.1: {} - - micromark-util-normalize-identifier@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 - - micromark-util-resolve-all@2.0.1: - dependencies: - micromark-util-types: 2.0.2 - - micromark-util-sanitize-uri@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 - - micromark-util-subtokenize@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-util-symbol@2.0.1: {} - - micromark-util-types@2.0.2: {} - - micromark@4.0.2: - dependencies: - '@types/debug': 4.1.13 - debug: 4.4.3 - decode-named-character-reference: 1.3.0 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - transitivePeerDependencies: - - supports-color - - micromatch@4.0.8: - dependencies: - braces: 3.0.3 - picomatch: 2.3.2 - - mime-db@1.52.0: {} - - mime-types@2.1.35: - dependencies: - mime-db: 1.52.0 - - mime@1.6.0: {} - - mimic-fn@2.1.0: {} - - mimic-response@3.1.0: {} - - mimic-response@4.0.0: {} - - minimatch@3.1.5: - dependencies: - brace-expansion: 1.1.15 - - minimist@1.2.8: - optional: true - - minipass@7.1.3: {} - - minizlib@3.1.0: - dependencies: - minipass: 7.1.3 - - mintlify@4.2.590(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@25.9.1)(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@6.0.3): - dependencies: - '@mintlify/cli': 4.0.1193(@radix-ui/react-popover@1.1.15(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@25.9.1)(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(typescript@6.0.3) - transitivePeerDependencies: - - '@radix-ui/react-popover' - - '@types/node' - - '@types/react' - - bare-abort-controller - - bare-buffer - - bufferutil - - debug - - encoding - - react-devtools-core - - react-dom - - react-native-b4a - - supports-color - - ts-node - - typescript - - utf-8-validate - - mitt@3.0.1: {} - - mkdirp-classic@0.5.3: - optional: true - - ms@2.0.0: {} - - ms@2.1.3: {} - - mute-stream@2.0.0: {} - - mz@2.7.0: - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - - nanoid@3.3.12: {} - - napi-build-utils@2.0.0: - optional: true - - negotiator@0.6.3: {} - - neotraverse@0.6.18: {} - - netmask@2.1.1: {} - - next-mdx-remote-client@1.1.8(@types/react@19.2.14)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5): - dependencies: - '@babel/code-frame': 7.29.7 - '@mdx-js/mdx': 3.1.1 - '@mdx-js/react': 3.1.1(@types/react@19.2.14)(react@19.2.3) - '@types/mdx': 2.0.13 - react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) - remark-mdx-remove-esm: 1.3.2(unified@11.0.5) - serialize-error: 13.0.1 - vfile: 6.0.3 - vfile-matter: 5.0.1 - transitivePeerDependencies: - - '@types/react' - - supports-color - - unified + ts-interface-checker@0.1.13: {} - nimma@0.2.3: - dependencies: - '@jsep-plugin/regex': 1.0.4(jsep@1.4.0) - '@jsep-plugin/ternary': 1.1.4(jsep@1.4.0) - astring: 1.9.0 - jsep: 1.4.0 - optionalDependencies: - jsonpath-plus: 10.4.0 - lodash.topath: 4.5.2 + tslib@1.14.1: {} - nlcst-to-string@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 + tslib@2.8.1: {} - node-abi@3.92.0: - dependencies: - semver: 7.7.2 - optional: true - - node-addon-api@4.3.0: - optional: true - - node-fetch@2.6.7: - dependencies: - whatwg-url: 5.0.0 - - node-fetch@2.7.0: - dependencies: - whatwg-url: 5.0.0 - - non-error@0.1.0: {} - - normalize-path@3.0.0: {} - - normalize-url@8.1.1: {} - - oauth4webapi@3.8.6: {} - - object-assign@4.1.1: {} - - object-hash@3.0.0: {} - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - on-finished@2.4.1: - dependencies: - ee-first: 1.1.1 - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - - oniguruma-parser@0.12.2: {} - - oniguruma-to-es@4.3.6: - dependencies: - oniguruma-parser: 0.12.2 - regex: 6.1.0 - regex-recursion: 6.0.2 - - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - - openapi-types@12.1.3: {} - - openid-client@6.8.2: - dependencies: - jose: 6.2.3 - oauth4webapi: 3.8.6 + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + optional: true - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 + twoslash-protocol@0.3.8: {} - p-any@4.0.0: - dependencies: - p-cancelable: 3.0.0 - p-some: 6.0.0 + twoslash@0.3.8(typescript@6.0.3): + dependencies: + "@typescript/vfs": 1.6.4(typescript@6.0.3) + twoslash-protocol: 0.3.8 + typescript: 6.0.3 + transitivePeerDependencies: + - supports-color - p-cancelable@3.0.0: {} + type-fest@0.21.3: {} - p-some@6.0.0: - dependencies: - aggregate-error: 4.0.1 - p-cancelable: 3.0.0 + type-fest@4.41.0: {} - p-timeout@5.1.0: {} + type-fest@5.7.0: + dependencies: + tagged-tag: 1.0.0 - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.4 - debug: 4.4.3 - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.1.1 + type-is@2.1.0: + dependencies: + content-type: 2.1.0 + media-typer: 1.1.1 + mime-types: 3.0.2 + optional: true - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.8: + dependencies: + call-bind: 1.0.9 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typed-query-selector@2.12.2: {} + + typescript@6.0.3: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undici-types@7.24.6: {} + + unified@11.0.5: + dependencies: + "@types/unist": 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unist-builder@4.0.0: + dependencies: + "@types/unist": 3.0.3 + + unist-util-find-after@5.0.0: + dependencies: + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + + unist-util-is@5.2.1: + dependencies: + "@types/unist": 2.0.11 + + unist-util-is@6.0.1: + dependencies: + "@types/unist": 3.0.3 + + unist-util-map@4.0.0: + dependencies: + "@types/unist": 3.0.3 + + unist-util-modify-children@4.0.0: + dependencies: + "@types/unist": 3.0.3 + array-iterate: 2.0.1 + + unist-util-position-from-estree@2.0.0: + dependencies: + "@types/unist": 3.0.3 + + unist-util-position@5.0.0: + dependencies: + "@types/unist": 3.0.3 + + unist-util-remove-position@5.0.0: + dependencies: + "@types/unist": 3.0.3 + unist-util-visit: 5.0.0 + + unist-util-remove@4.0.0: + dependencies: + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + unist-util-stringify-position@4.0.0: + dependencies: + "@types/unist": 3.0.3 + + unist-util-visit-children@3.0.0: + dependencies: + "@types/unist": 3.0.3 + + unist-util-visit-parents@5.1.3: + dependencies: + "@types/unist": 2.0.11 + unist-util-is: 5.2.1 + + unist-util-visit-parents@6.0.1: + dependencies: + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit-parents@6.0.2: + dependencies: + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@4.1.2: + dependencies: + "@types/unist": 2.0.11 + unist-util-is: 5.2.1 + unist-util-visit-parents: 5.1.3 + + unist-util-visit@5.0.0: + dependencies: + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + urijs@1.19.11: {} + + use-sync-external-store@1.6.0(react@19.2.3): + dependencies: + react: 19.2.3 + + util-deprecate@1.0.2: {} + + utility-types@3.11.0: {} + + utils-merge@1.0.1: {} + + uuid@11.1.1: {} + + vary@1.1.2: {} + + vfile-location@5.0.3: + dependencies: + "@types/unist": 3.0.3 + vfile: 6.0.3 + + vfile-matter@5.0.1: + dependencies: + vfile: 6.0.3 + yaml: 2.9.0 + + vfile-message@4.0.3: + dependencies: + "@types/unist": 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + "@types/unist": 3.0.3 + vfile-message: 4.0.3 + + web-namespaces@2.0.1: {} + + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.2 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.21 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.21: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@9.0.2: + dependencies: + ansi-styles: 6.2.3 + string-width: 7.2.0 + strip-ansi: 7.2.0 + + wrappy@1.0.2: {} + + ws@8.20.1: {} + + ws@8.21.0: {} + + xml-naming@0.3.0: {} + + xml2js@0.6.2: + dependencies: + sax: 1.6.0 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + + xss@1.0.15: + dependencies: + commander: 2.20.3 + cssfilter: 0.0.10 + + y18n@5.0.8: {} + + yallist@5.0.0: {} + + yaml@2.9.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.1: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yoctocolors-cjs@2.1.3: {} + + yoga-layout@3.2.1: {} + + zod-to-json-schema@3.20.4(zod@3.24.0): + dependencies: + zod: 3.24.0 + + zod-to-json-schema@3.25.2(zod@4.3.6): + dependencies: + zod: 4.3.6 + optional: true - parse-entities@4.0.2: - dependencies: - '@types/unist': 2.0.11 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.3.0 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - - parse-json@5.2.0: - dependencies: - '@babel/code-frame': 7.29.7 - error-ex: 1.3.4 - json-parse-even-better-errors: 2.3.1 - lines-and-columns: 1.2.4 - - parse-latin@7.0.0: - dependencies: - '@types/nlcst': 2.0.3 - '@types/unist': 3.0.3 - nlcst-to-string: 4.0.0 - unist-util-modify-children: 4.0.0 - unist-util-visit-children: 3.0.0 - vfile: 6.0.3 - - parse5@7.3.0: - dependencies: - entities: 6.0.1 - - parseurl@1.3.3: {} - - patch-console@2.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-parse@1.0.7: {} - - path-to-regexp@0.1.13: {} - - pend@1.2.0: {} - - picocolors@1.1.1: {} - - picomatch@2.3.2: {} - - picomatch@4.0.4: {} - - pify@2.3.0: {} - - pirates@4.0.7: {} - - pony-cause@1.1.1: {} - - possible-typed-array-names@1.1.0: {} - - postcss-import@15.1.0(postcss@8.5.14): - dependencies: - postcss: 8.5.14 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.12 - - postcss-js@4.1.0(postcss@8.5.14): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.14 - - postcss-load-config@4.0.2(postcss@8.5.14): - dependencies: - lilconfig: 3.1.3 - yaml: 2.9.0 - optionalDependencies: - postcss: 8.5.14 - - postcss-nested@6.2.0(postcss@8.5.14): - dependencies: - postcss: 8.5.14 - postcss-selector-parser: 6.1.2 - - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-value-parser@4.2.0: {} - - postcss@8.5.14: - dependencies: - nanoid: 3.3.12 - picocolors: 1.1.1 - source-map-js: 1.2.1 - - posthog-node@5.17.2: - dependencies: - '@posthog/core': 1.7.1 - - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.1.2 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.92.0 - pump: 3.0.4 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.4 - tunnel-agent: 0.6.0 - optional: true - - progress@2.0.3: {} - - property-information@6.5.0: {} - - property-information@7.2.0: {} - - proxy-addr@2.0.7: - dependencies: - forwarded: 0.2.0 - ipaddr.js: 1.9.1 - - proxy-agent@6.5.0: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - proxy-from-env@1.1.0: {} - - proxy-from-env@2.1.0: {} - - public-ip@5.0.0: - dependencies: - dns-socket: 4.2.2 - got: 12.6.1 - is-ip: 3.1.0 - - pump@3.0.4: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - - puppeteer-core@22.14.0: - dependencies: - '@puppeteer/browsers': 2.3.0 - chromium-bidi: 0.6.2(devtools-protocol@0.0.1312386) - debug: 4.4.3 - devtools-protocol: 0.0.1312386 - ws: 8.21.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - bufferutil - - react-native-b4a - - supports-color - - utf-8-validate - - puppeteer@22.14.0(typescript@6.0.3): - dependencies: - '@puppeteer/browsers': 2.3.0 - cosmiconfig: 9.0.1(typescript@6.0.3) - devtools-protocol: 0.0.1312386 - puppeteer-core: 22.14.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - bufferutil - - react-native-b4a - - supports-color - - typescript - - utf-8-validate - - qs@6.14.2: - dependencies: - side-channel: 1.1.0 - - qs@6.15.2: - dependencies: - side-channel: 1.1.0 - - queue-microtask@1.2.3: {} - - quick-lru@5.1.1: {} - - range-parser@1.2.1: {} - - raw-body@2.5.3: - dependencies: - bytes: 3.1.2 - http-errors: 2.0.1 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - optional: true - - react-dom@18.3.1(react@19.2.3): - dependencies: - loose-envify: 1.4.0 - react: 19.2.3 - scheduler: 0.23.2 - - react-reconciler@0.32.0(react@19.2.3): - dependencies: - react: 19.2.3 - scheduler: 0.26.0 - - react-remove-scroll-bar@2.3.8(@types/react@19.2.14)(react@19.2.3): - dependencies: - react: 19.2.3 - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.3) - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.14 - - react-remove-scroll@2.7.2(@types/react@19.2.14)(react@19.2.3): - dependencies: - react: 19.2.3 - react-remove-scroll-bar: 2.3.8(@types/react@19.2.14)(react@19.2.3) - react-style-singleton: 2.2.3(@types/react@19.2.14)(react@19.2.3) - tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.2.14)(react@19.2.3) - use-sidecar: 1.1.3(@types/react@19.2.14)(react@19.2.3) - optionalDependencies: - '@types/react': 19.2.14 - - react-style-singleton@2.2.3(@types/react@19.2.14)(react@19.2.3): - dependencies: - get-nonce: 1.0.1 - react: 19.2.3 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.14 - - react@19.2.3: {} - - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - optional: true - - readdirp@3.6.0: - dependencies: - picomatch: 2.3.2 - - recma-build-jsx@1.0.0: - dependencies: - '@types/estree': 1.0.9 - estree-util-build-jsx: 3.0.1 - vfile: 6.0.3 - - recma-jsx@1.0.1(acorn@8.11.2): - dependencies: - acorn: 8.11.2 - acorn-jsx: 5.3.2(acorn@8.11.2) - estree-util-to-js: 2.0.0 - recma-parse: 1.0.0 - recma-stringify: 1.0.0 - unified: 11.0.5 - - recma-parse@1.0.0: - dependencies: - '@types/estree': 1.0.9 - esast-util-from-js: 2.0.1 - unified: 11.0.5 - vfile: 6.0.3 - - recma-stringify@1.0.0: - dependencies: - '@types/estree': 1.0.9 - estree-util-to-js: 2.0.0 - unified: 11.0.5 - vfile: 6.0.3 - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regex-recursion@6.0.2: - dependencies: - regex-utilities: 2.3.0 - - regex-utilities@2.3.0: {} - - regex@6.1.0: - dependencies: - regex-utilities: 2.3.0 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - rehype-katex@7.0.1: - dependencies: - '@types/hast': 3.0.4 - '@types/katex': 0.16.8 - hast-util-from-html-isomorphic: 2.0.0 - hast-util-to-text: 4.0.2 - katex: 0.16.47 - unist-util-visit-parents: 6.0.1 - vfile: 6.0.3 - - rehype-minify-whitespace@6.0.2: - dependencies: - '@types/hast': 3.0.4 - hast-util-minify-whitespace: 1.0.1 - - rehype-parse@9.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-from-html: 2.0.3 - unified: 11.0.5 - - rehype-recma@1.0.0: - dependencies: - '@types/estree': 1.0.9 - '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.3 - transitivePeerDependencies: - - supports-color - - rehype-stringify@10.0.1: - dependencies: - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.4 - unified: 11.0.5 - - remark-frontmatter@5.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-frontmatter: 2.0.1 - micromark-extension-frontmatter: 2.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-gfm@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-gfm: 3.0.0 - micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-math@6.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-math: 3.0.0 - micromark-extension-math: 3.1.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-mdx-remove-esm@1.3.2(unified@11.0.5): - dependencies: - '@types/mdast': 4.0.4 - unified: 11.0.5 - unist-util-remove: 4.0.0 - - remark-mdx@3.0.1: - dependencies: - mdast-util-mdx: 3.0.0 - micromark-extension-mdxjs: 3.0.0 - transitivePeerDependencies: - - supports-color - - remark-mdx@3.1.0: - dependencies: - mdast-util-mdx: 3.0.0 - micromark-extension-mdxjs: 3.0.0 - transitivePeerDependencies: - - supports-color - - remark-parse@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - micromark-util-types: 2.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-rehype@11.1.1: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.1 - unified: 11.0.5 - vfile: 6.0.3 - - remark-smartypants@3.0.2: - dependencies: - retext: 9.0.0 - retext-smartypants: 6.2.0 - unified: 11.0.5 - unist-util-visit: 5.0.0 - - remark-stringify@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.2 - unified: 11.0.5 - - remark@15.0.1: - dependencies: - '@types/mdast': 4.0.4 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - require-directory@2.1.1: {} - - require-from-string@2.0.2: {} - - resolve-alpn@1.2.1: {} - - resolve-from@4.0.0: {} - - resolve@1.22.12: - dependencies: - es-errors: 1.3.0 - is-core-module: 2.16.2 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - responselike@3.0.0: - dependencies: - lowercase-keys: 3.0.0 - - restore-cursor@4.0.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - retext-latin@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - parse-latin: 7.0.0 - unified: 11.0.5 - - retext-smartypants@6.2.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unist-util-visit: 5.0.0 - - retext-stringify@4.0.0: - dependencies: - '@types/nlcst': 2.0.3 - nlcst-to-string: 4.0.0 - unified: 11.0.5 - - retext@9.0.0: - dependencies: - '@types/nlcst': 2.0.3 - retext-latin: 4.0.0 - retext-stringify: 4.0.0 - unified: 11.0.5 - - reusify@1.1.0: {} - - run-async@3.0.0: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - rxjs@7.8.2: - dependencies: - tslib: 2.8.1 - - safe-array-concat@1.1.4: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-buffer@5.2.1: {} - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safe-stable-stringify@1.1.1: {} - - safer-buffer@2.1.2: {} - - sax@1.6.0: {} - - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - - scheduler@0.26.0: {} - - semver@7.7.2: {} - - send@0.19.2: - dependencies: - debug: 2.6.9 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 2.0.0 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 2.0.1 - mime: 1.6.0 - ms: 2.1.3 - on-finished: 2.4.1 - range-parser: 1.2.1 - statuses: 2.0.2 - transitivePeerDependencies: - - supports-color - - serialize-error@13.0.1: - dependencies: - non-error: 0.1.0 - type-fest: 5.7.0 - - serve-static@1.16.3: - dependencies: - encodeurl: 2.0.0 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.19.2 - transitivePeerDependencies: - - supports-color - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.2 - - setprototypeof@1.2.0: {} - - sharp-ico@0.1.5: - dependencies: - decode-ico: 0.4.1 - ico-endec: 0.1.6 - sharp: 0.33.5 - - sharp@0.33.5: - dependencies: - color: 4.2.3 - detect-libc: 2.1.2 - semver: 7.7.2 - optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shiki@3.23.0: - dependencies: - '@shikijs/core': 3.23.0 - '@shikijs/engine-javascript': 3.23.0 - '@shikijs/engine-oniguruma': 3.23.0 - '@shikijs/langs': 3.23.0 - '@shikijs/themes': 3.23.0 - '@shikijs/types': 3.23.0 - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - side-channel-list@1.0.1: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.1 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - simple-concat@1.0.1: - optional: true - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - optional: true - - simple-swizzle@0.2.4: - dependencies: - is-arrayish: 0.3.4 - - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 4.0.0 - - slice-ansi@7.1.2: - dependencies: - ansi-styles: 6.2.3 - is-fullwidth-code-point: 5.1.0 - - smart-buffer@4.2.0: {} - - socket.io-adapter@2.5.7: - dependencies: - debug: 4.4.3 - ws: 8.20.1 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - socket.io-parser@4.2.6: - dependencies: - '@socket.io/component-emitter': 3.1.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - socket.io@4.8.0: - dependencies: - accepts: 1.3.8 - base64id: 2.0.0 - cors: 2.8.6 - debug: 4.3.7 - engine.io: 6.6.8 - socket.io-adapter: 2.5.7 - socket.io-parser: 4.2.6 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - socks-proxy-agent@8.0.5: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3 - socks: 2.8.9 - transitivePeerDependencies: - - supports-color - - socks@2.8.9: - dependencies: - ip-address: 10.2.0 - smart-buffer: 4.2.0 - - source-map-js@1.2.1: {} - - source-map@0.6.1: - optional: true - - source-map@0.7.6: {} - - space-separated-tokens@2.0.2: {} - - sprintf-js@1.0.3: {} - - stack-utils@2.0.6: - dependencies: - escape-string-regexp: 2.0.0 - - statuses@2.0.2: {} - - stop-iteration-iterator@1.1.0: - dependencies: - es-errors: 1.3.0 - internal-slot: 1.1.0 - - streamx@2.26.0: - dependencies: - events-universal: 1.0.1 - fast-fifo: 1.3.2 - text-decoder: 1.2.7 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@7.2.0: - dependencies: - emoji-regex: 10.6.0 - get-east-asian-width: 1.6.0 - strip-ansi: 7.2.0 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.24.2 - es-object-atoms: 1.1.2 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.9 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.9 - define-properties: 1.2.1 - es-object-atoms: 1.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - optional: true - - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.2.0: - dependencies: - ansi-regex: 6.2.2 - - strip-json-comments@2.0.1: - optional: true - - style-to-js@1.1.21: - dependencies: - style-to-object: 1.0.14 - - style-to-object@1.0.14: - dependencies: - inline-style-parser: 0.2.7 - - sucrase@3.34.0: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - glob: 7.1.6 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - ts-interface-checker: 0.1.13 - - sucrase@3.35.1: - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - commander: 4.1.1 - lines-and-columns: 1.2.4 - mz: 2.7.0 - pirates: 4.0.7 - tinyglobby: 0.2.17 - ts-interface-checker: 0.1.13 - - supports-preserve-symlinks-flag@1.0.0: {} - - tagged-tag@1.0.0: {} - - tailwindcss@3.4.17: - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.3 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.5.14 - postcss-import: 15.1.0(postcss@8.5.14) - postcss-js: 4.1.0(postcss@8.5.14) - postcss-load-config: 4.0.2(postcss@8.5.14) - postcss-nested: 6.2.0(postcss@8.5.14) - postcss-selector-parser: 6.1.2 - resolve: 1.22.12 - sucrase: 3.35.1 - transitivePeerDependencies: - - ts-node - - tar-fs@2.1.4: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.4 - tar-stream: 2.2.0 - optional: true - - tar-fs@3.1.2: - dependencies: - pump: 3.0.4 - tar-stream: 3.2.0 - optionalDependencies: - bare-fs: 4.7.2 - bare-path: 3.0.1 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - optional: true - - tar-stream@3.2.0: - dependencies: - b4a: 1.8.1 - bare-fs: 4.7.2 - fast-fifo: 1.3.2 - streamx: 2.26.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - tar@7.5.15: - dependencies: - '@isaacs/fs-minipass': 4.0.1 - chownr: 3.0.0 - minipass: 7.1.3 - minizlib: 3.1.0 - yallist: 5.0.0 - - teex@1.0.1: - dependencies: - streamx: 2.26.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - text-decoder@1.2.7: - dependencies: - b4a: 1.8.1 - transitivePeerDependencies: - - react-native-b4a - - thenify-all@1.6.0: - dependencies: - thenify: 3.3.1 - - thenify@3.3.1: - dependencies: - any-promise: 1.3.0 - - through@2.3.8: {} - - tinyglobby@0.2.17: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 - - to-data-view@1.1.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - toidentifier@1.0.1: {} - - tr46@0.0.3: {} - - trim-lines@3.0.1: {} - - trim-trailing-lines@2.1.0: {} - - trough@2.2.0: {} - - ts-interface-checker@0.1.13: {} - - tslib@1.14.1: {} - - tslib@2.8.1: {} - - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - optional: true - - twoslash-protocol@0.3.8: {} - - twoslash@0.3.8(typescript@6.0.3): - dependencies: - '@typescript/vfs': 1.6.4(typescript@6.0.3) - twoslash-protocol: 0.3.8 - typescript: 6.0.3 - transitivePeerDependencies: - - supports-color - - type-fest@0.21.3: {} - - type-fest@4.41.0: {} - - type-fest@5.7.0: - dependencies: - tagged-tag: 1.0.0 - - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.8: - dependencies: - call-bind: 1.0.9 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typescript@6.0.3: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - unbzip2-stream@1.4.3: - dependencies: - buffer: 5.7.1 - through: 2.3.8 - - undici-types@7.24.6: {} - - unified@11.0.5: - dependencies: - '@types/unist': 3.0.3 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.3 - - unist-builder@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-find-after@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-is@5.2.1: - dependencies: - '@types/unist': 2.0.11 - - unist-util-is@6.0.1: - dependencies: - '@types/unist': 3.0.3 - - unist-util-map@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-modify-children@4.0.0: - dependencies: - '@types/unist': 3.0.3 - array-iterate: 2.0.1 - - unist-util-position-from-estree@2.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-visit: 5.0.0 - - unist-util-remove@4.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.1 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-children@3.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@5.1.3: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-visit-parents@6.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - - unist-util-visit@4.1.2: - dependencies: - '@types/unist': 2.0.11 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 - - universalify@2.0.1: {} - - unpipe@1.0.0: {} - - urijs@1.19.11: {} - - urlpattern-polyfill@10.0.0: {} - - use-callback-ref@1.3.3(@types/react@19.2.14)(react@19.2.3): - dependencies: - react: 19.2.3 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.14 - - use-sidecar@1.1.3(@types/react@19.2.14)(react@19.2.3): - dependencies: - detect-node-es: 1.1.0 - react: 19.2.3 - tslib: 2.8.1 - optionalDependencies: - '@types/react': 19.2.14 - - util-deprecate@1.0.2: {} - - utility-types@3.11.0: {} - - utils-merge@1.0.1: {} - - uuid@11.1.1: {} - - vary@1.1.2: {} - - vfile-location@5.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile: 6.0.3 - - vfile-matter@5.0.1: - dependencies: - vfile: 6.0.3 - yaml: 2.9.0 - - vfile-message@4.0.3: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.3 - - web-namespaces@2.0.1: {} - - webidl-conversions@3.0.1: {} - - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.2 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.21 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.21: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.9 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - widest-line@5.0.0: - dependencies: - string-width: 7.2.0 - - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@9.0.2: - dependencies: - ansi-styles: 6.2.3 - string-width: 7.2.0 - strip-ansi: 7.2.0 - - wrappy@1.0.2: {} - - ws@8.20.1: {} - - ws@8.21.0: {} - - xml2js@0.6.2: - dependencies: - sax: 1.6.0 - xmlbuilder: 11.0.1 - - xmlbuilder@11.0.1: {} - - xss@1.0.15: - dependencies: - commander: 2.20.3 - cssfilter: 0.0.10 - - y18n@5.0.8: {} - - yallist@5.0.0: {} - - yaml@2.9.0: {} - - yargs-parser@21.1.1: {} - - yargs@17.7.1: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yargs@17.7.2: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - - yauzl@2.10.0: - dependencies: - buffer-crc32: 0.2.13 - fd-slicer: 1.1.0 - - yoctocolors-cjs@2.1.3: {} - - yoga-layout@3.2.1: {} - - zod-to-json-schema@3.20.4(zod@3.24.0): - dependencies: - zod: 3.24.0 - - zod@3.23.8: {} + zod@3.24.0: {} - zod@3.24.0: {} + zod@3.25.76: {} - zod@4.3.6: {} + zod@4.3.6: {} - zwitch@2.0.4: {} + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 090df72..e1da252 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,6 @@ allowBuilds: - keytar: true - puppeteer: true - sharp: true + keytar: false + puppeteer: false + sharp: false +patchedDependencies: + "@mintlify/link-rot@3.0.1334": patches/@mintlify__link-rot@3.0.1334.patch diff --git a/projects.mdx b/projects.mdx deleted file mode 100644 index 08a248c..0000000 --- a/projects.mdx +++ /dev/null @@ -1,80 +0,0 @@ ---- -title: "Projects" -description: "How BonyanOSS groups and grows Islamic open-source projects." -mode: "wide" ---- - -BonyanOSS projects are treated as building blocks. Some are user-facing apps, -some are APIs, some are datasets, and some are internal tools that make the -rest of the ecosystem easier to maintain. - -## Project Families - - - - Quran text, tafsir, recitations, azkar, hadith, prayer times, Hijri dates, - and Qibla direction behind one API. - - - Hadith collections, search tools, metadata, study views, and future APIs. - - - Islamic learning platforms, lessons, study plans, and classroom-friendly - tools. - - - Public endpoints, normalized data, versioned schemas, and content - contracts. - - - SDKs, validation helpers, Arabic text utilities, deployment templates, and - reusable components. - - - Contribution workflows, dashboards, project boards, volunteer operations, - and status tooling. - - - -## Project Status - -| Status | Meaning | Expected docs | -| --- | --- | --- | -| Idea | A useful direction that still needs scope and validation. | Problem statement, intended users, proposed maintainers. | -| Draft | Early implementation or design work has started. | Architecture notes, setup steps, open questions. | -| Preview | Usable by contributors and early testers. | Quickstart, known limits, feedback path, breaking-change notes. | -| Stable | Public contract is reliable enough for wider use. | Full reference, changelog, status coverage, contribution guide. | -| Maintained | Active ownership and periodic review. | Roadmap, release process, issue triage expectations. | - -## How Projects Should Feel - - - - A project should have a small, understandable center. Related ideas can - become extensions, integrations, or separate projects. - - - If other people will build on an API, package, or dataset, its contract - belongs in the docs. - - - Setup, issue labels, contribution scope, and review expectations should be - clear before asking people for help. - - - A project should avoid hidden manual steps, one-person knowledge, and - avoidable infrastructure burden. - - - -## First Project Surface - -The first major docs surface is the [Bonyan-API](/bonyan-api), which includes: - -- `api.bonyanoss.org/bonyan-api/v1` for API consumers. -- `docs.bonyanoss.org/bonyan-api` for Bonyan-API-specific guides and reference. -- `github.com/BonyanOSS/Bonyan-API` for source code and contributions. - - - See how the first API project is shaped inside the larger BonyanOSS platform. - diff --git a/quickstart.mdx b/quickstart.mdx deleted file mode 100644 index 324ec24..0000000 --- a/quickstart.mdx +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: "Quickstart" -description: "Make your first Bonyan-API request in under a minute." ---- - -Bonyan-API is public, open-source, and designed for straightforward -integration. You do not need an account or API key to try it. - - - Base URL: `https://api.bonyanoss.org/bonyan-api/v1` - - - - - - **Hosted:** `https://api.bonyanoss.org/bonyan-api/v1` - - **Self-hosted:** `http://localhost:3000` when running your own API instance. - - - - ```bash cURL - curl https://api.bonyanoss.org/bonyan-api/v1/ayat/1 - ``` - - ```js JavaScript (fetch) - const res = await fetch("https://api.bonyanoss.org/bonyan-api/v1/ayat/1"); - const json = await res.json(); - console.log(json.data.aya.text); - ``` - - ```ts Node.js (axios) - import axios from "axios"; - - const { data } = await axios.get("https://api.bonyanoss.org/bonyan-api/v1/ayat/1"); - console.log(data.data.aya.text); - ``` - - ```py Python (requests) - import requests - - r = requests.get("https://api.bonyanoss.org/bonyan-api/v1/ayat/1") - print(r.json()["data"]["aya"]["text"]) - ``` - - ```php PHP - - - - Most module endpoints follow one of two shapes: - - ```json Success - { "success": true, "data": { "surahNumber": 1, "surahName": "الفاتحة", "aya": { "number": 1, "text": "...", "numberInSurah": 1 } } } - ``` - - ```json Failure - { "success": false, "message": "human-readable error" } - ``` - - Your client can keep one error path instead of handling many upstream API - formats. See [Errors](/concepts/errors) for the status-code matrix. - - - -## Try a Few More - - - - ```bash - curl https://api.bonyanoss.org/bonyan-api/v1/surah - ``` - - - ```bash - curl "https://api.bonyanoss.org/bonyan-api/v1/ayat/search?text=الرحمن&limit=20" - ``` - - - ```bash - curl "https://api.bonyanoss.org/bonyan-api/v1/prayer/times?latitude=21.4225&longitude=39.8262" - ``` - - - ```bash - curl "https://api.bonyanoss.org/bonyan-api/v1/qibla?latitude=24.7136&longitude=46.6753" - ``` - - - -## Where To Go Next - - - - Understand the project surface, modules, algorithms, and API contract. - - - Learn how the API keeps a stable response when upstream sources fail. - - - Browse every endpoint, parameter, and response. - - - - - The API reference includes an interactive playground, so you can test - endpoints without leaving the docs. - diff --git a/reference.mdx b/reference.mdx deleted file mode 100644 index da761f1..0000000 --- a/reference.mdx +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "API Reference" -description: "Endpoint-level reference for the Bonyan-API." ---- - -The Reference tab contains the endpoint-level documentation for the Bonyan-API. -Use it when you need exact parameters, response shapes, examples, -errors, and endpoint behavior. - -## Base URL - -```bash -https://api.bonyanoss.org/bonyan-api/v1 -``` - -## Reference Sections - -| Section | What it covers | -| --- | --- | -| Meta | Service catalogue and health checks. | -| Surah | The 114-surah index and Arabic name search. | -| Ayat | Quran text, absolute verse lookup, surah/ayah lookup, and text search. | -| Reciters | Reciters, moshafs, and audio URL resolution. | -| Tafsir | Tafsir editions and lookups. | -| Azkar | Supplication categories, random items, and search. | -| Hadith | Hadith book and range endpoints. | -| Prayer | Prayer time lookups by coordinates or city. | -| Hijri | Calendar conversion and today's Hijri date. | -| Qibla | Compass bearing toward the Kaaba. | - - - Open the Reference tab in the left navigation to browse individual endpoints. - The interactive playground is available from endpoint pages. - diff --git a/scripts/api-catalog.mjs b/scripts/api-catalog.mjs new file mode 100644 index 0000000..673b38d --- /dev/null +++ b/scripts/api-catalog.mjs @@ -0,0 +1,701 @@ +// Reviewed against the immutable revisions in sources.lock.json. +export const baseUrl = "https://api.bonyanoss.org"; +export const pair = (en, ar) => ({ en, ar }); +const p = (name, location, required, schema, example, en, ar) => ({ + name, + in: location, + required, + schema, + example, + description: pair(en, ar), +}); +const surah = (name = "surah") => + p( + name, + "path", + true, + { type: "integer", minimum: 1, maximum: 114 }, + 1, + "Surah number, 1 through 114.", + "رقم السورة من 1 إلى 114.", + ); +const aya = (name = "aya") => + p( + name, + "path", + true, + { type: "integer", minimum: 1 }, + 1, + "Verse number within the surah. An empty lookup returns 404; tafsir provider rejection can instead produce 503 when every configured source fails.", + "رقم الآية داخل السورة. النتيجة الفارغة تعيد 404؛ وقد يعيد رفض مصادر التفسير 503 عند فشل جميع المصادر المضبوطة.", + ); +const reciter = () => + p( + "id", + "path", + true, + { type: "integer" }, + 1, + "ID returned by the reciter catalogue. IDs depend on the provider.", + "المعرّف الذي يعيده فهرس القراء. المعرّفات مرتبطة بالمصدر.", + ); +const name = () => + p( + "name", + "query", + true, + { type: "string", minLength: 1 }, + "الفاتحة", + "Arabic name or substring. Use Arabic input; Latin-only input is not a supported search.", + "الاسم العربي أو جزء منه. استخدم العربية؛ البحث بحروف لاتينية فقط غير مدعوم.", + ); +const search = (max) => [ + p( + "text", + "query", + true, + { type: "string", minLength: 1 }, + "الرحمن", + "Arabic substring, URL-encoded. Blank input returns 400.", + "جزء من نص عربي مع ترميز URL. الإدخال الفارغ يعيد 400.", + ), + p( + "limit", + "query", + false, + { type: "integer", default: 50, minimum: 1, maximum: max }, + 10, + `Result cap, not pagination. The server clamps to 1..${max}; zero or an unparsable value falls back to 50.`, + `حد النتائج وليس ترقيم صفحات. يضبطه الخادم بين 1 و${max}؛ الصفر أو القيمة غير القابلة للتحليل تعود إلى 50.`, + ), +]; +const edition = () => + p( + "edition", + "path", + true, + { + type: "string", + enum: ["muyassar", "jalalayn", "saadi", "waseet", "qurtubi"], + }, + "muyassar", + "Public edition ID from GET /tafsir. Use muyassar, not ar.muyassar.", + "معرّف النسخة من GET /tafsir. استخدم muyassar وليس ar.muyassar.", + ); +const book = () => + p( + "book", + "path", + true, + { type: "string", minLength: 1 }, + "bukhari", + "Book ID from GET /hadith. Unknown IDs can return 503 when both providers reject them.", + "معرّف الكتاب من GET /hadith. قد يعيد المعرّف المجهول 503 إذا رفضه المصدران.", + ); +const date = (required = false, hijri = false) => + p( + "date", + "query", + required, + { type: "string", pattern: "^\\d{2}-\\d{2}-\\d{4}$" }, + hijri ? "01-09-1447" : "01-01-2026", + `${hijri ? "Hijri" : "Gregorian"} date in DD-MM-YYYY. ${required ? "Required." : "Omitted or blank uses the API server’s current date."} Validation checks the format, not calendar validity.`, + `تاريخ ${hijri ? "هجري" : "ميلادي"} بصيغة DD-MM-YYYY. ${required ? "مطلوب." : "عند حذفه أو تركه فارغًا يستخدم تاريخ خادم API الحالي."} التحقق من الصيغة فقط، وليس صحة اليوم في التقويم.`, + ); +const coords = (required, bounds) => [ + p( + "latitude", + "query", + required, + { type: "number", ...(bounds ? { minimum: -90, maximum: 90 } : {}) }, + 21.4225, + "Latitude in decimal degrees; provide it together with longitude.", + "خط العرض بالدرجات العشرية؛ أرسله مع خط الطول.", + ), + p( + "longitude", + "query", + required, + { type: "number", ...(bounds ? { minimum: -180, maximum: 180 } : {}) }, + 39.8262, + "Longitude in decimal degrees; provide it together with latitude.", + "خط الطول بالدرجات العشرية؛ أرسله مع خط العرض.", + ), +]; +const e = ( + path, + slug, + id, + title, + description, + schema, + params = [], + sdk = null, + errors = [503], + notes = null, +) => ({ + path, + slug, + id, + title: pair(...title), + description: pair(...description), + schema, + params, + sdk, + errors, + notes: notes ? pair(...notes) : null, +}); +export const endpoints = [ + e( + "/", + "meta/catalogue", + "getCatalogue", + ["Route catalogue", "فهرس المسارات"], + [ + "Lists registered content routes and project metadata. The four operational routes are excluded from the catalogue.", + "يعرض مسارات المحتوى المسجّلة وبيانات المشروع. لا يدرج مسارات التشغيل الأربعة.", + ], + "Catalogue", + [], + "client.routes()", + [], + ), + e( + "/health", + "meta/health", + "getHealth", + ["Liveness", "فحص الحياة"], + [ + "Confirms the HTTP process responds. It does not contact content providers.", + "يتحقق من استجابة عملية HTTP. لا يتصل بمصادر المحتوى.", + ], + "Health", + [], + "client.health()", + [], + ), + e( + "/ready", + "meta/ready", + "getReady", + ["Readiness and cache", "الجاهزية والكاش"], + [ + "Returns process readiness and current cache counts. This is not an upstream availability check.", + "يعيد جاهزية العملية وأعداد عناصر الكاش الحالية. لا يفحص توفر المصادر الخارجية.", + ], + "Ready", + [], + "client.ready()", + [], + ), + e( + "/metrics", + "meta/metrics", + "getMetrics", + ["Prometheus metrics", "مقاييس Prometheus"], + [ + "Returns uptime, cache gauges and upstream request counters as text.", + "يعيد مدة التشغيل ومقاييس الكاش وعدادات طلبات المصادر كنص.", + ], + "Metrics", + [], + "client.metrics()", + [], + ), + e( + "/surah", + "surah/list", + "listSurahs", + ["List surahs", "قائمة السور"], + [ + "Returns the chapter catalogue in data.surah. This endpoint returns names and metadata, not verse text.", + "يعيد فهرس السور داخل data.surah. يحتوي أسماء وبيانات السور دون نص الآيات.", + ], + "SurahListResponse", + [], + "client.surah.list()", + ), + e( + "/surah/{id}", + "surah/get", + "getSurah", + ["Get a surah", "بيانات سورة"], + ["Returns metadata for one surah.", "يعيد بيانات سورة واحدة."], + "SurahResponse", + [surah("id")], + "client.surah.getById(1)", + [400, 404, 503], + ), + e( + "/surah/search", + "surah/search", + "searchSurahs", + ["Search surah names", "البحث في أسماء السور"], + [ + "Matches a normalized Arabic substring and returns an array. No matches returns 404.", + "يطابق جزءًا من الاسم بعد تطبيع العربية ويعيد مصفوفة. تعاد 404 عند غياب النتائج.", + ], + "SurahSearchResponse", + [name()], + "client.surah.search('الفاتحة')", + [400, 404, 503], + ), + e( + "/ayat", + "ayat/all", + "listAyat", + ["Full Quran text", "نص القرآن كاملًا"], + [ + "Returns all available surahs and verses in data.surahs. This is a large response without pagination.", + "يعيد السور والآيات المتاحة داخل data.surahs. الاستجابة كبيرة ولا تدعم ترقيم الصفحات.", + ], + "AyatCorpusResponse", + [], + "client.ayat.list()", + ), + e( + "/ayat/{id}", + "ayat/get-by-number", + "getAyaByNumber", + ["Aya by global number", "آية برقمها العام"], + [ + "Looks up a verse by its global Quran number, rather than its position within a surah.", + "يبحث عن آية برقمها العام في القرآن، وليس ترتيبها داخل السورة.", + ], + "AyaLookupResponse", + [ + p( + "id", + "path", + true, + { type: "integer", minimum: 1, maximum: 6236 }, + 1, + "Global verse number, 1 through 6236.", + "رقم الآية العام من 1 إلى 6236.", + ), + ], + "client.ayat.getById(1)", + [400, 404, 503], + ), + e( + "/ayat/{surah}/aya/{id}", + "ayat/get-by-surah-aya", + "getAyaBySurah", + ["Aya within a surah", "آية داخل سورة"], + [ + "Returns one verse with its surah number and name.", + "يعيد آية واحدة مع رقم السورة واسمها.", + ], + "AyaLookupResponse", + [surah(), aya("id")], + "client.ayat.getBySurah(1, 1)", + [400, 404, 503], + ), + e( + "/ayat/search", + "ayat/search", + "searchAyat", + ["Search Quran text", "البحث في نص القرآن"], + [ + "Returns {success, total, data: [...]}. total counts returned matches after the limit, not all matches in the Quran.", + "يعيد {success, total, data: [...]}. يحسب total النتائج المعادة بعد تطبيق الحد، وليس جميع التطابقات في القرآن.", + ], + "AyaSearchResponse", + search(500), + null, + [400, 404, 503], + [ + "SDK 1.0.2 has an envelope mismatch in client.ayat.search(). Use the fetch example here or the compatibility helper in the SDK guide.", + "توجد مشكلة في فك الاستجابة داخل client.ayat.search() في SDK 1.0.2. استخدم مثال fetch هنا أو الدالة البديلة في دليل SDK.", + ], + ), + e( + "/reciters", + "reciters/list", + "listReciters", + ["List reciters", "قائمة القراء"], + [ + "Returns reciters in data.reciters. The fallback provider may omit moshaf and audio-server information.", + "يعيد القراء داخل data.reciters. قد يحذف المصدر البديل المصاحف وبيانات خادم الصوت.", + ], + "ReciterCollectionResponse", + [], + "client.reciters.list()", + ), + e( + "/reciters/{id}", + "reciters/get", + "getReciter", + ["Get a reciter", "بيانات قارئ"], + [ + "Looks up an ID in the currently cached provider catalogue.", + "يبحث عن المعرّف في فهرس المصدر المخزّن حاليًا.", + ], + "ReciterResponse", + [reciter()], + "client.reciters.getById(1)", + [400, 404, 503], + ), + e( + "/reciters/search", + "reciters/search", + "searchReciters", + ["Search reciter names", "البحث في أسماء القراء"], + [ + "Returns matching reciters using Arabic substring matching. This is not fuzzy or English-language search.", + "يعيد القراء المطابقين لجزء من الاسم العربي. لا يدعم البحث التقريبي أو البحث الإنجليزي.", + ], + "ReciterSearchResponse", + [{ ...name(), example: "العفاسي" }], + "client.reciters.search('العفاسي')", + [400, 404, 503], + ), + e( + "/reciters/{id}/surah/{surah}", + "reciters/audio", + "getReciterAudio", + ["Surah audio URL", "رابط صوت السورة"], + [ + "Builds a URL from the first moshaf server and a three-digit surah number. Returns JSON, not an audio stream.", + "ينشئ الرابط من خادم أول مصحف ورقم السورة بثلاث خانات. يعيد JSON وليس بثًا صوتيًا.", + ], + "ReciterAudioResponse", + [reciter(), surah()], + "client.reciters.getSurah(1, 1)", + [400, 404, 503], + [ + "The API does not verify that the MP3 exists. A reciter from quran.com may have no moshaf, causing 404. Discover a reciter with moshaf before requesting audio.", + "لا يتحقق API من وجود ملف MP3. قد يفتقد قارئ من quran.com بيانات المصحف فتُعاد 404. اختر قارئًا له moshaf قبل طلب الصوت.", + ], + ), + e( + "/tafsir", + "tafsir/editions", + "listTafsirEditions", + ["Tafsir editions", "نسخ التفسير"], + [ + "Lists the five configured public edition IDs and Arabic labels. The catalogue is local; it does not test provider availability.", + "يعرض معرّفات نسخ التفسير الخمس وأسماءها العربية. الفهرس محلي ولا يفحص توفر المصادر.", + ], + "TafsirEditionListResponse", + [], + "client.tafsir.listEditions()", + [], + ), + e( + "/tafsir/{edition}/{surah}", + "tafsir/surah", + "getSurahTafsir", + ["Tafsir for a surah", "تفسير سورة"], + [ + "Returns an array, including when the optional aya filter selects one verse. Returned edition is a provider-specific ID.", + "يعيد مصفوفة حتى عند تحديد آية واحدة بالمعامل aya. حقل edition المعاد يستخدم معرّف المصدر.", + ], + "TafsirListResponse", + [ + edition(), + surah(), + p( + "aya", + "query", + false, + { type: "integer", minimum: 1 }, + 1, + "Optional verse within the surah. The response remains an array.", + "آية اختيارية داخل السورة. تبقى الاستجابة مصفوفة.", + ), + ], + "client.tafsir.forSurah('muyassar', 1)", + [400, 404, 503], + ), + e( + "/tafsir/{edition}/{surah}/{aya}", + "tafsir/aya", + "getAyaTafsir", + ["Tafsir for an aya", "تفسير آية"], + [ + "Returns one tafsir object. muyassar can use two sources; the other configured editions each have one source.", + "يعيد كائن تفسير واحد. لنسخة muyassar مصدران، ولكل نسخة أخرى مصدر واحد.", + ], + "TafsirItemResponse", + [edition(), surah(), aya()], + "client.tafsir.forAya('muyassar', 1, 1)", + [400, 404, 503], + ), + e( + "/azkar", + "azkar/categories", + "listAzkarCategories", + ["Azkar categories", "تصنيفات الأذكار"], + [ + "Lists category names, item counts and sources in data.categories.", + "يعرض أسماء التصنيفات وأعداد الأذكار ومصادرها داخل data.categories.", + ], + "AzkarCategorySummaryResponse", + [], + "client.azkar.listCategories()", + ), + e( + "/azkar/{category}", + "azkar/category", + "getAzkarCategory", + ["Azkar in a category", "أذكار تصنيف"], + [ + "Returns the first category whose normalized Arabic name contains the supplied value. Use the full name from the catalogue to avoid ambiguous matches.", + "يعيد أول تصنيف يحتوي اسمه العربي المطبع على القيمة المدخلة. استخدم الاسم الكامل من الفهرس لتجنب التطابق الغامض.", + ], + "AzkarCategoryResponse", + [ + p( + "category", + "path", + true, + { type: "string", minLength: 1 }, + "أذكار الصباح", + "Arabic category name, URL-encoded as one path segment.", + "اسم التصنيف العربي، مرمّز كمقطع واحد من المسار.", + ), + ], + "client.azkar.getByCategory('أذكار الصباح')", + [400, 404, 503], + ), + e( + "/azkar/search", + "azkar/search", + "searchAzkar", + ["Search azkar text", "البحث في الأذكار"], + [ + "Returns {success, total, data: [...]}, with category and item for each hit. total is the number returned, capped by limit.", + "يعيد {success, total, data: [...]} مع التصنيف والذكر لكل نتيجة. total هو عدد النتائج المعادة بعد تطبيق limit.", + ], + "AzkarSearchResponse", + [{ ...search(200)[0], example: "الله" }, search(200)[1]], + null, + [400, 404, 503], + [ + "SDK 1.0.2 has an envelope mismatch in client.azkar.search(). Use fetch or the compatibility helper in the SDK guide.", + "توجد مشكلة في فك الاستجابة داخل client.azkar.search() في SDK 1.0.2. استخدم fetch أو الدالة البديلة في دليل SDK.", + ], + ), + e( + "/azkar/random", + "azkar/random", + "getRandomZekr", + ["Random zekr", "ذكر عشوائي"], + [ + "Chooses one item from all cached categories. Random selection happens per request.", + "يختار ذكرًا من جميع التصنيفات المخزّنة. يتم الاختيار العشوائي عند كل طلب.", + ], + "AzkarPickResponse", + [], + "client.azkar.random()", + [404, 503], + ), + e( + "/hadith", + "hadith/books", + "listHadithBooks", + ["Hadith books", "كتب الحديث"], + [ + "Returns book IDs, names and available counts from the active provider. Discover IDs here instead of assuming a fixed list.", + "يعيد معرّفات الكتب وأسماءها وأعداد الأحاديث من المصدر المستخدم. استخرج المعرّفات هنا بدل افتراض قائمة ثابتة.", + ], + "HadithBookListResponse", + [], + "client.hadith.listBooks()", + ), + e( + "/hadith/{book}", + "hadith/book", + "getHadithBook", + ["Hadith range", "نطاق أحاديث"], + [ + "Returns book, available and hadiths inside data. Both range endpoints are inclusive; omitted from defaults to 1 and omitted to defaults to from + 29.", + "يعيد book وavailable وhadiths داخل data. طرفا النطاق مشمولان؛ from الافتراضي 1 وto الافتراضي from + 29.", + ], + "HadithListResponse", + [ + book(), + p( + "from", + "query", + false, + { type: "integer", minimum: 1, default: 1 }, + 1, + "First hadith number, inclusive.", + "رقم أول حديث، وهو مشمول.", + ), + p( + "to", + "query", + false, + { type: "integer", minimum: 1 }, + 30, + "Last hadith number, inclusive. Use at most 300 items: to = from + 299.", + "رقم آخر حديث، وهو مشمول. استخدم 300 حديث كحد أقصى: to = from + 299.", + ), + ], + "client.hadith.getBook('bukhari', { from: 1, to: 30 })", + [400, 503], + [ + "The API currently rejects to - from > 300, so it accepts 301 inclusive items. SDK 1.0.2 rejects more than 300 when both bounds are supplied. Use 300 or fewer for compatibility. An empty range can return 200 with hadiths: [].", + "يرفض API حاليًا to - from > 300، فيقبل 301 عنصرًا عند شمول الطرفين. يرفض SDK 1.0.2 أكثر من 300 عند إرسال الطرفين. استخدم 300 أو أقل للتوافق. قد يعيد النطاق الفارغ 200 مع hadiths: [].", + ], + ), + e( + "/hadith/{book}/{number}", + "hadith/get", + "getHadith", + ["Get a hadith", "حديث برقم"], + [ + "Returns a narration by its book-local number. The response has no grading or chain-of-transmission fields.", + "يعيد الحديث برقم داخل الكتاب. الاستجابة لا تحتوي حقول الحكم على الحديث أو الإسناد.", + ], + "HadithResponse", + [ + book(), + p( + "number", + "path", + true, + { type: "integer", minimum: 1 }, + 1, + "Positive hadith number within the book.", + "رقم حديث موجب داخل الكتاب.", + ), + ], + "client.hadith.getByNumber('bukhari', 1)", + [400, 404, 503], + ), + e( + "/hadith/random", + "hadith/random", + "getRandomHadith", + ["Random hadith", "حديث عشوائي"], + [ + "Picks a book, then a number from its available count. Optionally restrict the book. The result contains book and hadith.", + "يختار كتابًا ثم رقم حديث وفق العدد المتاح. يمكن تقييد الكتاب. تحتوي النتيجة book وhadith.", + ], + "RandomHadithResponse", + [ + p( + "book", + "query", + false, + { type: "string" }, + "bukhari", + "Optional exact book ID. An unknown ID returns 404.", + "معرّف كتاب مطابق اختياري. المعرّف المجهول يعيد 404.", + ), + ], + "client.hadith.random({ book: 'bukhari' })", + [404, 503], + ), + e( + "/prayer/times", + "prayer/times", + "getPrayerTimes", + ["Prayer times", "مواقيت الصلاة"], + [ + "Provide latitude + longitude or city + country. With both pairs, Aladhan coordinates are tried before Aladhan city lookup.", + "أرسل latitude وlongitude أو city وcountry. عند إرسال الزوجين، تُجرّب إحداثيات Aladhan قبل البحث باسم المدينة.", + ], + "PrayerTimesResponse", + [ + date(), + ...coords(false, false), + p( + "city", + "query", + false, + { type: "string" }, + "Mecca", + "Required with country when coordinates are not supplied.", + "مطلوب مع country عند عدم إرسال الإحداثيات.", + ), + p( + "country", + "query", + false, + { type: "string" }, + "SA", + "Country for city lookup. Send together with city.", + "الدولة للبحث عن المدينة. أرسلها مع city.", + ), + p( + "method", + "query", + false, + { type: "integer" }, + 4, + "Aladhan calculation method ID. Omitted uses the provider default.", + "معرّف طريقة الحساب لدى Aladhan. عند حذفه يستخدم المصدر افتراضيه.", + ), + ], + "client.prayer.getTimes({ latitude: 21.4225, longitude: 39.8262, method: 4 })", + [400, 503], + [ + "pray.zone fallback is available only for coordinate requests dated today on the API server. It does not receive method, and may omit method and coordinates. Inspect apiName before assuming identical calculation settings. This controller validates numeric coordinates but does not enforce geographic bounds; SDK validation does.", + "يتاح بديل pray.zone لطلبات الإحداثيات بتاريخ اليوم على خادم API فقط. لا يستقبل method وقد يحذف method وcoordinates من النتيجة. افحص apiName قبل افتراض ثبات طريقة الحساب. يتحقق هذا المتحكم من كون الإحداثيات أرقامًا دون فرض حدودها الجغرافية؛ يفرض SDK الحدود.", + ], + ), + e( + "/hijri/today", + "hijri/today", + "getToday", + ["Today in both calendars", "تاريخ اليوم بالتقويمين"], + [ + "Converts the API server’s current Gregorian date through Aladhan. It does not use the browser’s timezone.", + "يحوّل تاريخ خادم API الميلادي الحالي عبر Aladhan. لا يستخدم المنطقة الزمنية للمتصفح.", + ], + "HijriResponse", + [], + "client.hijri.today()", + ), + e( + "/hijri/from-gregorian", + "hijri/from-gregorian", + "fromGregorian", + ["Gregorian to Hijri", "من الميلادي إلى الهجري"], + [ + "Returns both calendar representations. Aladhan is the only configured source.", + "يعيد تمثيل التاريخ بالتقويمين. Aladhan هو المصدر الوحيد المضبوط.", + ], + "HijriResponse", + [date()], + "client.hijri.fromGregorian('01-01-2026')", + [400, 503], + ), + e( + "/hijri/to-gregorian", + "hijri/to-gregorian", + "toGregorian", + ["Hijri to Gregorian", "من الهجري إلى الميلادي"], + [ + "Converts a required Hijri date. Returned month and weekday names come from the provider.", + "يحوّل تاريخًا هجريًا مطلوبًا. تأتي أسماء الأشهر وأيام الأسبوع من المصدر.", + ], + "HijriResponse", + [date(true, true)], + "client.hijri.toGregorian('01-09-1447')", + [400, 503], + ), + e( + "/qibla", + "qibla/direction", + "getQibla", + ["Qibla direction", "اتجاه القبلة"], + [ + "Returns degrees clockwise from true north. Tries Aladhan, then calculates the great-circle bearing locally.", + "يعيد الزاوية بالدرجات باتجاه عقارب الساعة من الشمال الحقيقي. يجرّب Aladhan ثم يحسب الاتجاه محليًا على الدائرة العظمى.", + ], + "QiblaResponse", + coords(true, true), + "client.qibla.getDirection(21.4225, 39.8262)", + [400, 503], + [ + "This is a geographic bearing, not a device compass reading. Magnetic declination and device orientation are outside this endpoint.", + "هذه زاوية جغرافية وليست قراءة بوصلة الجهاز. الانحراف المغناطيسي واتجاه الجهاز خارج وظيفة هذا المسار.", + ], + ), +]; diff --git a/scripts/api-schemas.mjs b/scripts/api-schemas.mjs new file mode 100644 index 0000000..a7027e4 --- /dev/null +++ b/scripts/api-schemas.mjs @@ -0,0 +1,387 @@ +import { pair } from "./api-catalog.mjs"; +const field = (type, en, ar, extra = {}) => ({ + type, + description: pair(en, ar), + ...extra, +}); +const str = (en, ar, extra) => field("string", en, ar, extra); +const int = (en, ar, extra) => field("integer", en, ar, extra); +const ref = (name) => ({ $ref: `#/components/schemas/${name}` }); +const arr = (items) => ({ + type: "array", + items: typeof items === "string" ? ref(items) : items, +}); +const obj = (properties, required = Object.keys(properties)) => ({ + type: "object", + required, + properties, +}); +const wrap = (data) => + obj({ + success: { type: "boolean", const: true }, + data: typeof data === "string" ? ref(data) : data, + }); +const source = (values) => + str( + "Provider that supplied this result. Optional fields may vary by provider.", + "المصدر الذي أعاد هذه النتيجة. قد تختلف الحقول الاختيارية حسب المصدر.", + { enum: values }, + ); +const text = () => + str( + "Source text as returned by the API. Documentation language does not translate content.", + "نص المصدر كما يعيده API. لغة التوثيق لا تترجم المحتوى.", + ); +const quranSources = [ + "alquran.cloud", + "cdn.jsdelivr.net/fawazahmed0/quran-api", +]; +const hadithSources = [ + "hadith.gading.dev", + "cdn.jsdelivr.net/sutanlab/hadith-api", +]; +export const schemas = { + Catalogue: obj({ + name: str("Service name.", "اسم الخدمة."), + description: str("Service description.", "وصف الخدمة."), + routes: arr( + obj( + { + method: { oneOf: [{ type: "string" }, arr({ type: "string" })] }, + url: str( + "Registered route; path parameters use :name syntax.", + "المسار المسجّل؛ تستخدم معاملات المسار صيغة :name.", + ), + schema: {}, + }, + ["method", "url"], + ), + ), + }), + Health: obj({ + status: { type: "string", const: "ok" }, + code: { type: "integer", const: 200 }, + timestamp: str( + "Current server time in ISO 8601.", + "وقت الخادم الحالي بصيغة ISO 8601.", + { format: "date-time" }, + ), + }), + Cache: obj({ + entries: int( + "Stored cache entries, including entries not yet evicted.", + "عناصر الكاش المخزّنة، بما فيها العناصر التي لم تُزل بعد.", + ), + inflight: int( + "Cache loads currently in flight.", + "عمليات تحميل الكاش الجارية.", + ), + }), + Ready: obj({ + status: { type: "string", const: "ready" }, + code: { type: "integer", const: 200 }, + timestamp: str("Current server time.", "وقت الخادم الحالي.", { + format: "date-time", + }), + cache: ref("Cache"), + }), + Metrics: { type: "string" }, + Error: obj({ + success: { type: "boolean", const: false }, + message: str( + "Human-readable error. Do not parse it for control flow.", + "رسالة خطأ مقروءة. لا تعتمد على نصها للتحكم بالبرنامج.", + ), + error: obj({ + code: str( + "Machine-readable code. Explicit 503 failures can use INTERNAL_SERVER_ERROR; exhausted sources use ALL_SOURCES_FAILED.", + "رمز قابل للمعالجة. قد تستخدم أخطاء 503 المباشرة INTERNAL_SERVER_ERROR؛ ويستخدم فشل المصادر ALL_SOURCES_FAILED.", + { + enum: [ + "BAD_REQUEST", + "NOT_FOUND", + "RATE_LIMITED", + "ALL_SOURCES_FAILED", + "INTERNAL_SERVER_ERROR", + ], + }, + ), + message: str("Error message.", "رسالة الخطأ."), + requestId: str( + "Request identifier for troubleshooting.", + "معرّف الطلب لتتبع المشكلة.", + ), + }), + }), + Surah: obj( + { + id: int("Surah number.", "رقم السورة.", { minimum: 1, maximum: 114 }), + name: str("Surah name from the provider.", "اسم السورة من المصدر."), + makkia: field( + "boolean", + "Whether the surah is Meccan, when supplied.", + "هل السورة مكية، إذا وفر المصدر القيمة.", + ), + apiName: source(["mp3quran.net", "alquran.cloud", "quran.com"]), + }, + ["id", "name", "apiName"], + ), + Aya: obj({ + number: int("Global verse number.", "رقم الآية العام."), + text: text(), + numberInSurah: int( + "Verse number within its surah.", + "رقم الآية داخل سورتها.", + ), + }), + SurahWithAyat: obj({ + number: int("Surah number.", "رقم السورة."), + name: str("Surah name.", "اسم السورة."), + ayat: arr("Aya"), + apiName: source(quranSources), + }), + AyaLookup: obj({ + surahNumber: int("Surah number.", "رقم السورة."), + surahName: str("Surah name.", "اسم السورة."), + aya: ref("Aya"), + }), + Moshaf: obj({ + id: int("Provider moshaf ID.", "معرّف المصحف لدى المصدر."), + name: str("Moshaf name.", "اسم المصحف."), + server: str("Base audio-server URL.", "الرابط الأساسي لخادم الصوت.", { + format: "uri", + }), + }), + Reciter: obj( + { + id: int("Provider-specific reciter ID.", "معرّف القارئ لدى المصدر."), + name: str("Reciter name.", "اسم القارئ."), + date: str("Provider date metadata.", "بيانات التاريخ من المصدر."), + moshaf: arr("Moshaf"), + style: { + type: ["string", "null"], + description: pair( + "Recitation style, when provided.", + "أسلوب التلاوة إذا توفر.", + ), + }, + apiName: source(["mp3quran.net", "quran.com"]), + }, + ["id", "name", "apiName"], + ), + ReciterAudio: obj({ + reciter: str("Reciter name.", "اسم القارئ."), + surah: int("Surah number.", "رقم السورة."), + audio: str( + "Constructed MP3 URL; file availability is not checked.", + "رابط MP3 منشأ؛ لا يجري التحقق من وجود الملف.", + { format: "uri" }, + ), + }), + TafsirEdition: obj({ + id: str( + "Public edition key accepted in paths.", + "معرّف النسخة العام المقبول في المسار.", + { enum: ["muyassar", "jalalayn", "saadi", "waseet", "qurtubi"] }, + ), + label: str("Arabic edition name.", "اسم النسخة بالعربية."), + }), + TafsirItem: obj({ + surah: int("Surah number.", "رقم السورة."), + aya: int("Verse number within the surah.", "رقم الآية داخل السورة."), + text: text(), + edition: str( + "Provider edition ID, for example ar.muyassar or arabic_moyassar. This differs from the public path ID.", + "معرّف النسخة لدى المصدر مثل ar.muyassar أو arabic_moyassar. يختلف عن المعرّف العام في المسار.", + ), + apiName: source(["alquran.cloud", "quranenc.com"]), + }), + AzkarCategorySummary: obj({ + name: str("Category name.", "اسم التصنيف."), + count: int("Number of items in this category.", "عدد الأذكار في التصنيف."), + apiName: source(["github.com/nawafalqari", "hisnmuslim.com"]), + }), + AzkarItem: obj( + { + id: int( + "Item ID within its source/category; not a global ID.", + "معرّف الذكر داخل المصدر أو التصنيف، وليس معرّفًا عامًا.", + ), + text: text(), + count: int( + "Suggested repetitions, when supplied.", + "عدد التكرارات عند توفره.", + ), + reference: str( + "Source reference, when supplied.", + "مرجع الذكر عند توفره.", + ), + description: str( + "Additional source description.", + "وصف إضافي من المصدر.", + ), + content: str("Additional source content.", "محتوى إضافي من المصدر."), + }, + ["id", "text"], + ), + AzkarCategory: obj({ + category: str("Category name.", "اسم التصنيف."), + items: arr("AzkarItem"), + apiName: source(["github.com/nawafalqari", "hisnmuslim.com"]), + }), + AzkarPick: obj({ + category: str("Category name.", "اسم التصنيف."), + item: ref("AzkarItem"), + }), + HadithBook: obj({ + id: str("Book ID used in requests.", "معرّف الكتاب المستخدم في الطلبات."), + name: str("Book name.", "اسم الكتاب."), + available: int( + "Provider-reported number of narrations.", + "عدد الأحاديث الذي يذكره المصدر.", + ), + apiName: source(hadithSources), + }), + Hadith: obj({ + number: int("Hadith number within the book.", "رقم الحديث داخل الكتاب."), + text: text(), + book: str( + "Book name returned by the provider.", + "اسم الكتاب الذي يعيده المصدر.", + ), + apiName: source(hadithSources), + }), + HadithRange: obj({ + book: str("Book name.", "اسم الكتاب."), + available: int( + "Available count for the whole book, not the returned slice.", + "العدد المتاح للكتاب كاملًا وليس للنطاق المعاد.", + ), + hadiths: arr("Hadith"), + }), + PrayerTimings: obj( + Object.fromEntries( + [ + "Fajr", + "Sunrise", + "Dhuhr", + "Asr", + "Sunset", + "Maghrib", + "Isha", + "Imsak", + "Midnight", + ].map((key) => [ + key, + str( + "Provider-formatted local time. It may include a timezone suffix; do not assume an ISO timestamp.", + "وقت محلي بصيغة المصدر. قد يحتوي لاحقة منطقة زمنية؛ ليس بالضرورة طابعًا زمنيًا بصيغة ISO.", + ), + ]), + ), + ["Fajr", "Dhuhr", "Asr", "Maghrib", "Isha"], + ), + Coordinates: obj({ + latitude: field("number", "Latitude in degrees.", "خط العرض بالدرجات."), + longitude: field("number", "Longitude in degrees.", "خط الطول بالدرجات."), + }), + PrayerTimes: obj( + { + date: str( + "Gregorian date in the provider’s format.", + "التاريخ الميلادي بصيغة المصدر.", + ), + hijri: str( + "Hijri date in the provider’s format.", + "التاريخ الهجري بصيغة المصدر.", + ), + timings: ref("PrayerTimings"), + method: str( + "Calculation method name, if supplied.", + "اسم طريقة الحساب إذا توفر.", + ), + coordinates: ref("Coordinates"), + apiName: source(["aladhan.com", "pray.zone"]), + }, + ["date", "timings", "apiName"], + ), + HijriDate: obj({ + hijri: obj({ + date: str("Hijri date.", "التاريخ الهجري."), + day: str("Day as a string.", "اليوم كنص."), + month: str("Month name.", "اسم الشهر."), + monthAr: str("Arabic month name.", "اسم الشهر بالعربية."), + year: str("Year as a string.", "السنة كنص."), + weekday: str("Weekday name.", "اسم يوم الأسبوع."), + weekdayAr: str("Arabic weekday name.", "اسم يوم الأسبوع بالعربية."), + }), + gregorian: obj({ + date: str("Gregorian date.", "التاريخ الميلادي."), + day: str("Day as a string.", "اليوم كنص."), + month: str("Month name.", "اسم الشهر."), + year: str("Year as a string.", "السنة كنص."), + }), + apiName: source(["aladhan.com"]), + }), + Qibla: obj({ + latitude: field("number", "Latitude in degrees.", "خط العرض بالدرجات."), + longitude: field("number", "Longitude in degrees.", "خط الطول بالدرجات."), + direction: field( + "number", + "Degrees clockwise from true north toward the Kaaba.", + "درجات باتجاه عقارب الساعة من الشمال الحقيقي نحو الكعبة.", + ), + apiName: source(["aladhan.com", "local"]), + }), +}; +Object.assign(schemas, { + SurahListResponse: wrap(obj({ surah: arr("Surah") })), + SurahResponse: wrap("Surah"), + SurahSearchResponse: wrap(arr("Surah")), + AyatCorpusResponse: wrap(obj({ surahs: arr("SurahWithAyat") })), + AyaLookupResponse: wrap("AyaLookup"), + ReciterCollectionResponse: wrap(obj({ reciters: arr("Reciter") })), + ReciterResponse: wrap("Reciter"), + ReciterSearchResponse: wrap(arr("Reciter")), + ReciterAudioResponse: wrap("ReciterAudio"), + TafsirEditionListResponse: wrap(arr("TafsirEdition")), + TafsirListResponse: wrap(arr("TafsirItem")), + TafsirItemResponse: wrap("TafsirItem"), + AzkarCategorySummaryResponse: wrap( + obj({ categories: arr("AzkarCategorySummary") }), + ), + AzkarCategoryResponse: wrap("AzkarCategory"), + AzkarPickResponse: wrap("AzkarPick"), + HadithBookListResponse: wrap(arr("HadithBook")), + HadithResponse: wrap("Hadith"), + RandomHadithResponse: wrap( + obj({ book: str("Book name.", "اسم الكتاب."), hadith: ref("Hadith") }), + ), + HadithListResponse: wrap("HadithRange"), + PrayerTimesResponse: wrap("PrayerTimes"), + HijriResponse: wrap("HijriDate"), + QiblaResponse: wrap("Qibla"), +}); +for (const [key, item] of [ + ["AyaSearchResponse", "AyaLookup"], + ["AzkarSearchResponse", "AzkarPick"], +]) + schemas[key] = obj({ + success: { type: "boolean", const: true }, + total: int( + "Returned count after the limit.", + "عدد النتائج المعادة بعد الحد.", + ), + data: arr(item), + }); +export function localize(value, lang) { + if (Array.isArray(value)) return value.map((v) => localize(v, lang)); + if (value && typeof value === "object") { + if (typeof value.en === "string" && typeof value.ar === "string") + return value[lang]; + return Object.fromEntries( + Object.entries(value).map(([k, v]) => [k, localize(v, lang)]), + ); + } + return value; +} diff --git a/scripts/check-docs.mjs b/scripts/check-docs.mjs new file mode 100644 index 0000000..b489eba --- /dev/null +++ b/scripts/check-docs.mjs @@ -0,0 +1,201 @@ +import assert from "node:assert/strict"; +import { readFileSync, readdirSync, existsSync } from "node:fs"; +import { resolve, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { parse } from "yaml"; +import SwaggerParser from "@apidevtools/swagger-parser"; +import { compile } from "@mdx-js/mdx"; +import ts from "typescript"; +import { endpoints } from "./api-catalog.mjs"; +import { locales, localeDirectory, localeFromFile } from "./locales.mjs"; +const root = resolve(dirname(fileURLToPath(import.meta.url)), ".."); +const read = (p) => readFileSync(resolve(root, p), "utf8"); +const walk = (p) => + readdirSync(resolve(root, p), { withFileTypes: true }).flatMap((e) => + e.isDirectory() ? walk(`${p}/${e.name}`) : [`${p}/${e.name}`], + ); +const docs = JSON.parse(read("docs.json")); +const pages = (lang) => + walk(localeDirectory(lang)) + .filter((p) => p.endsWith(".mdx")) + .sort(); +assert.deepEqual( + pages("en").map((p) => p.slice(localeDirectory("en").length)), + pages("ar").map((p) => p.slice(localeDirectory("ar").length)), + "Language page parity", +); +const allPages = [...pages("en"), ...pages("ar")]; +const navigated = []; +function visit(x) { + if (Array.isArray(x)) { + x.forEach(visit); + return; + } + if (x && typeof x === "object") { + for (const [key, value] of Object.entries(x)) { + if (key === "pages") + for (const item of value) { + if (typeof item === "string") navigated.push(item + ".mdx"); + else visit(item); + } + else visit(value); + } + } +} +visit(docs.navigation); +assert.equal( + new Set(navigated).size, + navigated.length, + "Duplicate navigation page", +); +assert.deepEqual( + [...navigated].sort(), + allPages.sort(), + "Missing or orphaned navigation pages", +); +function checkLink(link, origin) { + if (!link.startsWith("/") || link.startsWith("//")) return; + const path = decodeURIComponent(link.split(/[?#]/)[0]).slice(1); + if (!path || /[:*]/.test(path)) return; + assert( + existsSync(resolve(root, path)) || existsSync(resolve(root, path + ".mdx")), + `${origin}: broken link ${link}`, + ); +} +for (const r of docs.redirects ?? []) checkLink(r.destination, "redirect"); +const redirectSources = new Set((docs.redirects ?? []).map((r) => r.source)); +assert.equal( + redirectSources.size, + (docs.redirects ?? []).length, + "Duplicate redirects", +); +for (const r of docs.redirects ?? []) + assert(!redirectSources.has(r.destination), `Redirect chain: ${r.source}`); +for (const lang of locales) { + assert( + (docs.redirects ?? []).some( + (r) => + r.source === `/${lang}` && + r.destination === `/${localeDirectory(lang)}/introduction`, + ), + `Missing legacy ${lang} root redirect`, + ); + assert( + (docs.redirects ?? []).some( + (r) => + r.source === `/${lang}/:slug*` && + r.destination === `/${localeDirectory(lang)}/:slug*`, + ), + `Missing legacy ${lang} wildcard redirect`, + ); +} +const specs = {}; +for (const lang of locales) { + const spec = parse(read(`${localeDirectory(lang)}/openapi.yaml`)); + await SwaggerParser.validate(structuredClone(spec)); + specs[lang] = spec; + assert.equal( + Object.keys(spec.paths).length, + endpoints.length, + "Endpoint coverage", + ); + for (const e of endpoints) { + const operation = spec.paths[e.path]?.get; + assert(operation, e.path); + assert.equal(operation.operationId, e.id); + assert(operation.responses["200"].content, "Missing response schema"); + } +} +// Localization may change descriptions, but never the wire contract. +const withoutText = (v) => + Array.isArray(v) + ? v.map(withoutText) + : v && typeof v === "object" + ? Object.fromEntries( + Object.entries(v) + .filter(([k]) => !["description", "summary"].includes(k)) + .map(([k, x]) => [k, withoutText(x)]), + ) + : v; +assert.deepEqual( + withoutText(specs.en), + withoutText(specs.ar), + "Translated OpenAPI changed the wire contract", +); +const virtual = new Map(); +let snippets = 0; +for (const file of allPages) { + const raw = read(file); + assert(!raw.includes("\uFFFD"), `${file}: invalid text encoding`); + const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n/); + assert(match, `${file}: missing frontmatter`); + const meta = parse(match[1]); + assert(meta.title && meta.description, `${file}: title/description required`); + const body = raw.slice(match[0].length); + if (file.endsWith("/sdk/search.mdx")) + assert.equal( + body.match(/```js\r?\n([\s\S]*?)\r?\n```/)?.[1].trim(), + read("examples/search.mjs").trim(), + `${file}: search example differs from the tested helper`, + ); + await compile(body, { development: false }); + for (const match of body.matchAll(/(?:\]\(|href=["'])(\/[^\s"')]+)/g)) + checkLink(match[1], file); + const lang = localeFromFile(file); + assert(lang, `${file}: unknown locale path`); + if (lang === "ar") { + assert( + /[\u0600-\u06ff]/u.test(meta.title), + `${file}: Arabic title missing`, + ); + for (const m of body.matchAll(/(?:\]\(|href=["'])(\/locales\/en\/[^\s"')]+)/g)) + assert.fail(`${file}: cross-language link ${m[1]}`); + } + if (meta.openapi) { + const match = meta.openapi.match(/^(\S+) GET (\S+)$/); + assert(match, `${file}: invalid openapi binding`); + assert.equal(match[1], `${localeDirectory(lang)}/openapi.yaml`); + assert( + specs[lang].paths[match[2]], + `${file}: unknown operation`, + ); + } + if (lang === "en") + for (const m of body.matchAll(/```ts[^\n]*\n([\s\S]*?)\n```/g)) { + const filename = resolve(root, `__docs_example_${snippets++}.ts`); + virtual.set(filename, m[1] + "\nexport {};\n"); + } +} +const options = { + strict: true, + noEmit: true, + target: ts.ScriptTarget.ES2022, + module: ts.ModuleKind.NodeNext, + moduleResolution: ts.ModuleResolutionKind.NodeNext, + skipLibCheck: true, + types: [], +}; +const host = ts.createCompilerHost(options), + originalRead = host.readFile.bind(host), + originalExists = host.fileExists.bind(host), + originalSource = host.getSourceFile.bind(host); +host.readFile = (p) => virtual.get(resolve(p)) ?? originalRead(p); +host.fileExists = (p) => virtual.has(resolve(p)) || originalExists(p); +host.getSourceFile = (p, ...args) => + virtual.has(resolve(p)) + ? ts.createSourceFile(p, virtual.get(resolve(p)), args[0], true) + : originalSource(p, ...args); +const program = ts.createProgram([...virtual.keys()], options, host); +const diagnostics = ts.getPreEmitDiagnostics(program); +assert.equal( + diagnostics.length, + 0, + ts.formatDiagnosticsWithColorAndContext(diagnostics, { + getCurrentDirectory: () => root, + getCanonicalFileName: (p) => p, + getNewLine: () => "\n", + }), +); +console.log( + `Validated ${allPages.length} MDX pages, navigation, redirects, language parity, ${endpoints.length} operations per language and ${snippets} TypeScript examples.`, +); diff --git a/scripts/check-source.mjs b/scripts/check-source.mjs new file mode 100644 index 0000000..f30689a --- /dev/null +++ b/scripts/check-source.mjs @@ -0,0 +1,54 @@ +import { readFileSync, readdirSync } from "node:fs"; +import { resolve, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; +import { execFileSync } from "node:child_process"; +import assert from "node:assert/strict"; +import { endpoints } from "./api-catalog.mjs"; +const root = resolve(dirname(fileURLToPath(import.meta.url)), ".."); +const lock = JSON.parse( + readFileSync(resolve(root, "sources.lock.json"), "utf8"), +); +const [api, sdk] = process.argv.slice(2); +if (!api || !sdk) + throw new Error( + "Usage: node scripts/check-source.mjs /path/to/Bonyan-API /path/to/bonyan-sdk-js", + ); +for (const [key, path] of [ + ["api", api], + ["sdk", sdk], +]) + assert.equal( + execFileSync("git", ["rev-parse", "HEAD"], { + cwd: path, + encoding: "utf8", + }).trim(), + lock[key].commit, + `${key}: unexpected source revision`, + ); +const normalize = (p) => p.replace(/:[^/]+/g, "{}").replace(/\{[^}]+\}/g, "{}"); +const routes = []; +const files = [ + resolve(api, "src/server.ts"), + ...readdirSync(resolve(api, "src/modules")).map((group) => + resolve(api, `src/modules/${group}/${group}.route.ts`), + ), +]; +for (const file of files) + for (const match of readFileSync(file, "utf8").matchAll( + /(?:app|fastify)\.get\('([^']+)'/g, + )) + routes.push(normalize(match[1])); +assert.deepEqual( + [...new Set(routes)].sort(), + endpoints.map((e) => normalize(e.path)).sort(), + "Documented routes differ from registered GET routes", +); +assert.equal( + JSON.parse(readFileSync(resolve(sdk, "package.json"), "utf8")).version, + lock.sdk.version, +); +assert.equal( + JSON.parse(readFileSync(resolve(api, "package.json"), "utf8")).version, + lock.api.version, +); +console.log(`Source revisions and all ${routes.length} GET routes match.`); diff --git a/scripts/generate-api.mjs b/scripts/generate-api.mjs new file mode 100644 index 0000000..7b5255c --- /dev/null +++ b/scripts/generate-api.mjs @@ -0,0 +1,152 @@ +import { readFileSync, writeFileSync, mkdirSync } from "node:fs"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { stringify } from "yaml"; +import { endpoints, baseUrl } from "./api-catalog.mjs"; +import { schemas, localize } from "./api-schemas.mjs"; +import { locales, localeDirectory, localeRoute } from "./locales.mjs"; +const root = resolve(dirname(fileURLToPath(import.meta.url)), ".."); +const lock = JSON.parse( + readFileSync(resolve(root, "sources.lock.json"), "utf8"), +); +const check = process.argv.includes("--check"); +const ref = (name) => ({ $ref: `#/components/schemas/${name}` }); +const statuses = { + 400: ["Invalid or missing input.", "إدخال مفقود أو غير صالح."], + 404: [ + "Requested item or matching result was not found.", + "لم يوجد العنصر أو التطابق المطلوب.", + ], + 429: [ + "Request rate exceeded. Respect Retry-After when present.", + "تجاوز حد الطلبات. التزم بترويسة Retry-After عند وجودها.", + ], + 503: [ + "No result could be obtained from configured sources.", + "تعذر الحصول على نتيجة من المصادر المضبوطة.", + ], + 500: ["Unexpected server error.", "خطأ غير متوقع في الخادم."], +}; +function write(path, content) { + const target = resolve(root, path); + if (check) { + if (readFileSync(target, "utf8") !== content) + throw new Error(`Generated file is stale: ${path}`); + } else { + mkdirSync(dirname(target), { recursive: true }); + writeFileSync(target, content); + } +} +for (const lang of locales) { + const ar = lang === "ar", + prefix = `${localeDirectory(lang)}/`, + specFile = `${prefix}openapi.yaml`; + const spec = { + openapi: "3.1.0", + info: { + title: "Bonyan API", + version: lock.api.version, + description: ar + ? "واجهة HTTP للقرآن والتفسير والقراء والأذكار والحديث ومواقيت الصلاة والتقويم والقبلة. لغة التوثيق لا تغيّر لغة المحتوى." + : "HTTP API for Quran, tafsir, reciters, azkar, hadith, prayer times, calendars and Qibla. Documentation language does not change content language.", + license: { name: "MIT", identifier: "MIT" }, + "x-source-revision": lock.api.commit, + }, + servers: [ + { url: baseUrl, description: ar ? "الخدمة العامة" : "Hosted API" }, + { + url: "http://localhost:3000", + description: ar ? "التشغيل المحلي" : "Local development", + }, + ], + security: [], + paths: {}, + components: { schemas: localize(schemas, lang) }, + }; + for (const e of endpoints) { + const description = + e.description[lang] + (e.notes ? "\n\n" + e.notes[lang] : ""); + const responses = { + 200: { + description: ar ? "نجاح" : "Success", + content: { + [e.schema === "Metrics" ? "text/plain" : "application/json"]: { + schema: ref(e.schema), + }, + }, + }, + }; + for (const code of [...new Set([...e.errors, 429, 500])]) + responses[code] = { + description: statuses[code][ar ? 1 : 0], + ...(code === 429 + ? { + headers: { + "Retry-After": { + description: ar + ? "مدة الانتظار بالثواني إذا أرسلها الخادم." + : "Wait duration in seconds, when supplied.", + schema: { type: "string" }, + }, + }, + } + : {}), + content: { "application/json": { schema: ref("Error") } }, + }; + spec.paths[e.path] = { + get: { + operationId: e.id, + tags: [e.slug.split("/")[0]], + summary: e.title[lang], + description, + parameters: localize(e.params, lang), + responses, + }, + }; + let examplePath = e.path; + for (const p of e.params.filter((p) => p.in === "path")) + examplePath = examplePath.replace( + `{${p.name}}`, + encodeURIComponent(p.example), + ); + const query = e.params.filter((p) => p.in === "query"); + // A prayer request uses coordinates only; city/country are documented as an alternative. + const exampleQuery = query.filter( + (p) => + e.path !== "/prayer/times" || !["city", "country"].includes(p.name), + ); + const url = baseUrl + examplePath; + const curl = + `curl --fail-with-body${exampleQuery.length ? " --get" : ""} '${url}'` + + exampleQuery + .map((p) => ` \\\n --data-urlencode '${p.name}=${p.example}'`) + .join(""); + const fetchCode = + `const url = new URL(${JSON.stringify(url)});\n` + + exampleQuery + .map( + (p) => + `url.searchParams.set(${JSON.stringify(p.name)}, ${JSON.stringify(String(p.example))});\n`, + ) + .join("") + + `const response = await fetch(url, { signal: AbortSignal.timeout(45000) });\nif (!response.ok) throw new Error(\`HTTP \${response.status}: \${await response.text()}\`);\nconst body = await response.${e.schema === "Metrics" ? "text" : "json"}();\nconsole.log(body);`; + const sourcePath = e.slug.startsWith("meta/") + ? "src/server.ts" + : `src/modules/${e.slug.split("/")[0]}/${e.slug.split("/")[0]}.controller.ts`; + let body = `---\ntitle: ${JSON.stringify(e.title[lang])}\ndescription: ${JSON.stringify(e.description[lang])}\nopenapi: ${JSON.stringify(`${specFile} GET ${e.path}`)}\n---\n`; + if (e.notes) body += `\n\n${e.notes[lang]}\n\n`; + body += `\n## ${ar ? "مثال الطلب" : "Request example"}\n\n\n\n\`\`\`bash cURL\n${curl}\n\`\`\`\n\n\`\`\`js JavaScript\n${fetchCode}\n\`\`\`\n`; + if (e.sdk) + body += `\n\`\`\`ts SDK\nimport { BonyanClient } from '@bonyanoss/bonyan-api';\n\nconst client = new BonyanClient({ timeoutMs: 45000, retry: 1 });\nconst result = await ${e.sdk};\nconsole.log(result);\n\`\`\`\n`; + body += `\n\n\n[${ar ? "الاستجابات والأخطاء" : "Responses and errors"}](${localeRoute(lang, "/concepts/errors")}) · [${ar ? "دليل SDK" : "SDK guide"}](${localeRoute(lang, "/sdk/overview")}) · [${ar ? "كود المسار" : "Route implementation"}](${lock.api.repository}/blob/${lock.api.commit}/${sourcePath})\n`; + write(`${prefix}api-reference/${e.slug}.mdx`, body); + } + write( + specFile, + "# Generated by pnpm generate. Edit scripts/api-catalog.mjs and scripts/api-schemas.mjs.\n" + + stringify(spec, { lineWidth: 0 }), + ); +} +console.log( + `${check ? "Checked" : "Generated"} ${endpoints.length} operations in English and Arabic.`, +); diff --git a/scripts/generate-index.mjs b/scripts/generate-index.mjs new file mode 100644 index 0000000..57cfb06 --- /dev/null +++ b/scripts/generate-index.mjs @@ -0,0 +1,156 @@ +import { readFileSync, writeFileSync, mkdirSync } from "node:fs"; +import { dirname, resolve } from "node:path"; +import { fileURLToPath } from "node:url"; +import { endpoints } from "./api-catalog.mjs"; +import { locales, localeDirectory, localeRoute } from "./locales.mjs"; +const root = resolve(dirname(fileURLToPath(import.meta.url)), ".."); +const check = process.argv.includes("--check"); +function write(path, text) { + const file = resolve(root, path); + if (check) { + if (readFileSync(file, "utf8") !== text) + throw new Error(`Generated file is stale: ${path}`); + } else { + mkdirSync(dirname(file), { recursive: true }); + writeFileSync(file, text); + } +} +const groups = { + meta: ["Service operations", "تشغيل الخدمة"], + surah: ["Surah metadata", "بيانات السور"], + ayat: ["Quran text", "نص القرآن"], + reciters: ["Reciters and audio", "القراء والصوت"], + tafsir: ["Tafsir", "التفسير"], + azkar: ["Azkar", "الأذكار"], + hadith: ["Hadith", "الحديث"], + prayer: ["Prayer times", "مواقيت الصلاة"], + hijri: ["Hijri calendar", "التقويم الهجري"], + qibla: ["Qibla", "القبلة"], +}; +const returns = { + getCatalogue: "BonyanRouteCatalogue", + getHealth: "HealthStatus", + getReady: "ReadyStatus", + getMetrics: "string", + listSurahs: "Surah[]", + getSurah: "Surah", + searchSurahs: "Surah[]", + listAyat: "SurahWithAyat[]", + getAyaByNumber: "AyaWithSurah", + getAyaBySurah: "AyaWithSurah", + searchAyat: "AyatSearchResult", + listReciters: "Reciter[]", + getReciter: "Reciter", + searchReciters: "Reciter[]", + getReciterAudio: "ReciterAudio", + listTafsirEditions: "TafsirEdition[]", + getSurahTafsir: "TafsirItem[] | TafsirItem", + getAyaTafsir: "TafsirItem", + listAzkarCategories: "AzkarCategorySummary[]", + getAzkarCategory: "AzkarCategory", + searchAzkar: "AzkarSearchResult", + getRandomZekr: "{ category: string; item: AzkarItem }", + listHadithBooks: "HadithBook[]", + getHadithBook: "HadithBookContent", + getHadith: "HadithItem", + getRandomHadith: "HadithRandomResult", + getPrayerTimes: "PrayerTimings", + getToday: "HijriDate", + fromGregorian: "HijriDate", + toGregorian: "HijriDate", + getQibla: "QiblaInfo", +}; +const signatures = { + getCatalogue: "routes()", + getHealth: "health()", + getReady: "ready()", + getMetrics: "metrics()", + listSurahs: "surah.list()", + getSurah: "surah.getById(id)", + searchSurahs: "surah.search(name)", + listAyat: "ayat.list()", + getAyaByNumber: "ayat.getById(id)", + getAyaBySurah: "ayat.getBySurah(surah, aya)", + searchAyat: "ayat.search(text, { limit? }?)", + listReciters: "reciters.list()", + getReciter: "reciters.getById(id)", + searchReciters: "reciters.search(name)", + getReciterAudio: "reciters.getSurah(reciterId, surah)", + listTafsirEditions: "tafsir.listEditions()", + getSurahTafsir: "tafsir.forSurah(edition, surah, { aya? }?)", + getAyaTafsir: "tafsir.forAya(edition, surah, aya)", + listAzkarCategories: "azkar.listCategories()", + getAzkarCategory: "azkar.getByCategory(category)", + searchAzkar: "azkar.search(text, { limit? }?)", + getRandomZekr: "azkar.random()", + listHadithBooks: "hadith.listBooks()", + getHadithBook: "hadith.getBook(bookId, { from?, to? }?)", + getHadith: "hadith.getByNumber(bookId, number)", + getRandomHadith: "hadith.random({ book? }?)", + getPrayerTimes: "prayer.getTimes(options)", + getToday: "hijri.today()", + fromGregorian: "hijri.fromGregorian(date?)", + toGregorian: "hijri.toGregorian(date)", + getQibla: "qibla.getDirection(latitude, longitude)", +}; +for (const lang of locales) { + const ar = lang === "ar", + i = ar ? 1 : 0; + const front = (title, desc) => + `---\ntitle: ${JSON.stringify(title)}\ndescription: ${JSON.stringify(desc)}\n---\n\n`; + const link = (e) => + `[${e.title[lang]}](${localeRoute(lang, `/api-reference/${e.slug}`)})`; + let index = front( + ar ? "مرجع API" : "API reference", + ar + ? "جميع مسارات HTTP ومعاملاتها واستجاباتها." + : "Every HTTP route with parameters and response schemas.", + ); + index += ar + ? "الرابط الأساسي `https://api.bonyanoss.org`. جميع المسارات التالية تستخدم GET. لا تحتاج مفتاح API في التنفيذ الحالي. افتح صفحة المسار لتجربة الطلب ورؤية المعاملات وحقول الاستجابة.\n" + : "Base URL: `https://api.bonyanoss.org`. Every route below uses GET. No API key is required by the current implementation. Open an endpoint to try a request and inspect parameters and response fields.\n"; + index += `\n[${ar ? "تنزيل OpenAPI بالعربية" : "Download English OpenAPI"}](${localeRoute(lang, "/openapi.yaml")}) · [${ar ? "دليل الأخطاء" : "Error guide"}](${localeRoute(lang, "/concepts/errors")})\n`; + let sdk = front( + ar ? "مرجع دوال SDK" : "SDK method reference", + ar + ? "دوال الموارد والتواقيع والأنواع المعادة." + : "Resource methods, signatures and return types.", + ); + sdk += ar + ? "جميع الدوال أدناه تُستدعى على `client` وتعيد Promise بالنوع المذكور. يشير `?` إلى معامل أو خيار اختياري؛ التواقيع في الجدول مختصرة وليست كودًا للنسخ.\n" + : "Every method below is called on `client` and returns a Promise of the listed type. `?` denotes an optional argument or option; table signatures are shorthand, not copyable code.\n"; + sdk += ar + ? "\nالأرقام أعداد JavaScript؛ الأسماء والنصوص ومعرّفات الكتب والنسخ نصوص. التاريخ بصيغة `DD-MM-YYYY`. تقبل prayer.getTimes زوج إحداثيات أو مدينة ودولة، مع date وmethod اختياريين.\n" + : "\nNumeric arguments are JavaScript numbers; names, queries, book IDs and edition IDs are strings. Dates use `DD-MM-YYYY`. prayer.getTimes accepts coordinates or city/country, plus optional date and method.\n"; + sdk += `\n\n${ar ? "بحث ayat وazkar في الإصدار 1.0.2 لا يطابق غلاف API الحالي. لا تعتمد على النوع المعلن دون استخدام الدالة البديلة." : "The ayat and azkar search methods in 1.0.2 do not match the current API envelope. Their declared types do not make their runtime result valid."} [${ar ? "بديل البحث" : "Search adapter"}](${localeRoute(lang, "/sdk/search")}).\n\n`; + for (const [group, titles] of Object.entries(groups)) { + const members = endpoints.filter((e) => e.slug.startsWith(group + "/")); + const table = + `| ${ar ? "المسار" : "Route"} | ${ar ? "المرجع" : "Reference"} |\n| --- | --- |\n` + + members.map((e) => `| \`GET ${e.path}\` | ${link(e)} |`).join("\n") + + "\n"; + index += `\n## ${titles[i]}\n\n${table}`; + const desc = ar + ? `مسارات ${titles[i]} ومعاملاتها وأمثلتها.` + : `Routes, parameters and examples for ${titles[0].toLowerCase()}.`; + let overview = front(titles[i], desc) + desc + "\n\n" + table; + overview += `\n[${ar ? "سلوك المصادر البديلة" : "Provider fallback"}](${localeRoute(lang, "/concepts/fallback")}) · [${ar ? "مدد الكاش" : "Cache lifetimes"}](${localeRoute(lang, "/concepts/caching")})\n`; + write(`${localeDirectory(lang)}/api-reference/${group}/overview.mdx`, overview); + sdk += `\n## ${titles[i]}\n\n| ${ar ? "الدالة" : "Method"} | ${ar ? "نوع النتيجة" : "Result type"} | HTTP |\n| --- | --- | --- |\n`; + sdk += + members + .map( + (e) => + `| \`${signatures[e.id]}\` | \`${returns[e.id].replaceAll("|", "\\|")}\` | [\`GET ${e.path}\`](${localeRoute(lang, `/api-reference/${e.slug}`)}) |`, + ) + .join("\n") + "\n"; + } + sdk += ar + ? `\nتعيد forSurah في هذا API مصفوفة دائمًا؛ تعريف SDK أوسع. تعيد دوال القوائم المصفوفة المستخرجة من الغلاف، وتعاد بيانات التشغيل مباشرة. استخدم [مرجع المسار](${localeRoute(lang, "/api-reference/overview")}) لمعرفة الحدود وحالات الفشل.\n` + : `\nThis API always returns an array for forSurah; the SDK declaration is broader. List methods return extracted arrays, and operational methods return raw data. Consult the [HTTP reference](${localeRoute(lang, "/api-reference/overview")}) for limits and failure cases.\n`; + write(`${localeDirectory(lang)}/api-reference/overview.mdx`, index); + write(`${localeDirectory(lang)}/sdk/resources.mdx`, sdk); +} +console.log( + `${check ? "Checked" : "Generated"} API indexes and SDK method tables.`, +); diff --git a/scripts/locales.mjs b/scripts/locales.mjs new file mode 100644 index 0000000..baf0bf4 --- /dev/null +++ b/scripts/locales.mjs @@ -0,0 +1,9 @@ +export const locales = ["en", "ar"]; +export const localeRoot = "locales"; + +export const localeDirectory = (locale) => `${localeRoot}/${locale}`; +export const localeRoute = (locale, path = "") => + `/${localeDirectory(locale)}${path}`; + +export const localeFromFile = (file) => + locales.find((locale) => file.startsWith(`${localeDirectory(locale)}/`)); diff --git a/scripts/search.test.mjs b/scripts/search.test.mjs new file mode 100644 index 0000000..2a1172a --- /dev/null +++ b/scripts/search.test.mjs @@ -0,0 +1,108 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; +import { + BonyanClient, + BonyanApiError, + BonyanRequestError, +} from "@bonyanoss/bonyan-api"; +import { searchContent } from "../examples/search.mjs"; +const json = (body, status = 200) => + new Response(JSON.stringify(body), { + status, + headers: { "Content-Type": "application/json" }, + }); +for (const resource of ["ayat", "azkar"]) { + test(`${resource}: flat API search envelope survives the adapter`, async () => { + const hits = + resource === "ayat" + ? [ + { + surahNumber: 1, + surahName: "الفاتحة", + aya: { number: 1, numberInSurah: 1, text: "نص للاختبار" }, + }, + ] + : [ + { + category: "تصنيف للاختبار", + item: { id: 1, text: "نص للاختبار" }, + }, + ]; + const result = await searchContent(resource, "الله", { + baseUrl: "https://example.test/prefix/", + limit: 1, + fetch: async (url) => { + const actual = new URL(url); + assert.equal(actual.pathname, `/prefix/${resource}/search`); + assert.equal(actual.searchParams.get("text"), "الله"); + assert.equal(actual.searchParams.get("limit"), "1"); + return json({ success: true, total: 1, data: hits }); + }, + }); + assert.deepEqual(result, { total: 1, results: hits }); + }); + test(`${resource}: verify documented SDK 1.0.2 mismatch against the real flat body`, async () => { + const client = new BonyanClient({ + retry: 0, + fetch: async () => json({ success: true, total: 1, data: [{}] }), + }); + assert.deepEqual(await client[resource].search("الله"), { + total: undefined, + results: undefined, + }); + }); +} +test("HTTP failures preserve status and request ID", async () => { + await assert.rejects( + searchContent("ayat", "الله", { + fetch: async () => + json( + { + success: false, + error: { + code: "NOT_FOUND", + message: "No match", + requestId: "test-request", + }, + }, + 404, + ), + }), + (e) => + e instanceof BonyanApiError && + e.status === 404 && + e.requestId === "test-request", + ); +}); +test("malformed successful envelopes are rejected", async () => { + await assert.rejects( + searchContent("ayat", "الله", { + fetch: async () => json({ success: true, data: {} }), + }), + BonyanRequestError, + ); +}); +test("invalid Arabic input and limits are rejected before transport", async () => { + const fetch = () => { + throw new Error("Transport must not run"); + }; + await assert.rejects(searchContent("ayat", "latin", { fetch }), TypeError); + await assert.rejects( + searchContent("azkar", "الله", { limit: 201, fetch }), + RangeError, + ); +}); +test("caller cancellation signal is forwarded", async () => { + const controller = new AbortController(); + controller.abort(); + await assert.rejects( + searchContent("ayat", "الله", { + signal: controller.signal, + fetch: async (_url, options) => { + assert.equal(options.signal, controller.signal); + options.signal.throwIfAborted(); + }, + }), + BonyanRequestError, + ); +}); diff --git a/snippets/fallback-callout.mdx b/snippets/fallback-callout.mdx deleted file mode 100644 index 8c6594c..0000000 --- a/snippets/fallback-callout.mdx +++ /dev/null @@ -1,6 +0,0 @@ - - Bonyan API normalizes provider responses into stable client-facing shapes. - Most content modules use ordered fallback chains; modules without a second - trusted source document that limit in their overview. See - [Concepts -> Fallback](/concepts/fallback). - diff --git a/sources.lock.json b/sources.lock.json new file mode 100644 index 0000000..b7416b3 --- /dev/null +++ b/sources.lock.json @@ -0,0 +1,15 @@ +{ + "reviewedAt": "2026-09-07", + "api": { + "repository": "https://github.com/BonyanOSS/Bonyan-API", + "commit": "e76bc4e114f2f174bc93d0c7f90b163f0721a9f4", + "version": "2.0.0" + }, + "sdk": { + "repository": "https://github.com/BonyanOSS/bonyan-sdk-js", + "commit": "068e23cdbaeed8095a99c753b75412897905dd8a", + "package": "@bonyanoss/bonyan-api", + "version": "1.0.2" + }, + "hostedBaseUrl": "https://api.bonyanoss.org" +} diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..90b4b87 --- /dev/null +++ b/styles.css @@ -0,0 +1,32 @@ +/* Mintlify sets lang but the local renderer does not consistently set dir. */ +html[lang="ar"] { + font-family: Tahoma, Arial, sans-serif; +} +html[lang="ar"] + :is(#header, #content, .mdx-content, #mobile-nav, #sidebar-content, #table-of-contents-content, #footer, #pagination, .nav-tabs-item) { + direction: rtl; + text-align: right; +} +html[lang="ar"] :is(#content, .mdx-content) :is(ul, ol) { + padding-left: 0; + padding-right: 1.5em; +} +html[lang="ar"] :is(#content, .mdx-content) :is(th, td) { + text-align: right; +} +/* HTTP paths, source examples and diagram geometry stay left to right. */ +html[lang="ar"] :is(pre, .code-block, .code-group, .mermaid, [data-language], #request-example, #response-example) { + direction: ltr; + text-align: left; +} +html[lang="ar"] :not(pre) > code { + direction: ltr; + unicode-bidi: isolate; +} +html[lang="ar"] .mermaid .nodeLabel { + direction: rtl; + unicode-bidi: plaintext; +} +.mermaid { + overflow-x: auto; +} From ad61cecdfd4caf9baa0266546b4611ed3e1f95a2 Mon Sep 17 00:00:00 2001 From: RlxChap2 <133292635+RlxChap2@users.noreply.github.com> Date: Wed, 9 Sep 2026 15:27:41 +0300 Subject: [PATCH 2/2] ci: install native image tooling --- .github/workflows/docs.yml | 2 +- pnpm-workspace.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 3f9fc49..a33f5ac 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -18,7 +18,7 @@ jobs: with: node-version: 24 cache: pnpm - - run: pnpm install --frozen-lockfile --ignore-scripts --no-optional + - run: pnpm install --frozen-lockfile - run: pnpm check - run: pnpm build - run: pnpm broken-links diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e1da252..b8f28a3 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,6 @@ allowBuilds: keytar: false puppeteer: false - sharp: false + sharp: true patchedDependencies: "@mintlify/link-rot@3.0.1334": patches/@mintlify__link-rot@3.0.1334.patch