blume 2.0.3 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +1 -0
- package/CHANGELOG.md +48 -0
- package/README.md +1 -1
- package/dist/cli/{chunk-1d7ve1dm.js → chunk-0gz36akr.js} +18 -2
- package/dist/cli/{chunk-1d7ve1dm.js.map → chunk-0gz36akr.js.map} +3 -3
- package/dist/cli/{chunk-2eytanqx.js → chunk-1n228xqb.js} +2 -2
- package/dist/cli/{chunk-yfyb25rh.js → chunk-2f3ndkpw.js} +24 -8
- package/dist/cli/chunk-2f3ndkpw.js.map +14 -0
- package/dist/cli/{chunk-r20tn01b.js → chunk-2f7n4qzt.js} +8 -2
- package/dist/cli/{chunk-r20tn01b.js.map → chunk-2f7n4qzt.js.map} +3 -3
- package/dist/cli/{chunk-35d4wj9f.js → chunk-2n4ps1b3.js} +7 -7
- package/dist/cli/{chunk-j85vccga.js → chunk-43zcf4gz.js} +97 -57
- package/dist/cli/{chunk-j85vccga.js.map → chunk-43zcf4gz.js.map} +6 -6
- package/dist/cli/{chunk-e04dxsz1.js → chunk-4ejxbzee.js} +1 -1
- package/dist/cli/{chunk-5m5nmvyq.js → chunk-4h8z9vv5.js} +233 -39
- package/dist/cli/chunk-4h8z9vv5.js.map +16 -0
- package/dist/cli/{chunk-5f86nr5m.js → chunk-5cg2rzgf.js} +18 -16
- package/dist/cli/{chunk-5f86nr5m.js.map → chunk-5cg2rzgf.js.map} +2 -2
- package/dist/cli/{chunk-tzmab476.js → chunk-5ffywsmb.js} +4 -4
- package/dist/cli/{chunk-2z928egk.js → chunk-5wj2qwn2.js} +5 -5
- package/dist/cli/chunk-6bm0xpgd.js +18 -0
- package/dist/cli/chunk-6bm0xpgd.js.map +10 -0
- package/dist/cli/{chunk-vg9r4eb9.js → chunk-713mngdq.js} +12 -5
- package/dist/cli/{chunk-vg9r4eb9.js.map → chunk-713mngdq.js.map} +3 -3
- package/dist/cli/{chunk-5xvm6tfj.js → chunk-9geymqns.js} +17 -15
- package/dist/cli/{chunk-5xvm6tfj.js.map → chunk-9geymqns.js.map} +2 -2
- package/dist/cli/{chunk-q58y5e6a.js → chunk-9xr4dgee.js} +26 -17
- package/dist/cli/chunk-9xr4dgee.js.map +10 -0
- package/dist/cli/{chunk-b07cmahc.js → chunk-amrb6hgh.js} +2 -2
- package/dist/cli/chunk-cm89scdv.js +443 -0
- package/dist/cli/chunk-cm89scdv.js.map +11 -0
- package/dist/cli/{chunk-akbpwfxc.js → chunk-cmtcnh9f.js} +2 -2
- package/dist/cli/chunk-cy5bm0j0.js +104 -0
- package/dist/cli/chunk-cy5bm0j0.js.map +11 -0
- package/dist/cli/{chunk-crgn1q09.js → chunk-e7vvk5ya.js} +4 -4
- package/dist/cli/{chunk-pehfxfta.js → chunk-g2z9x01v.js} +6 -98
- package/dist/cli/chunk-g2z9x01v.js.map +10 -0
- package/dist/cli/{chunk-tkacnehg.js → chunk-gp84za0h.js} +2 -2
- package/dist/cli/{chunk-wrr3j9w9.js → chunk-h2a48yhd.js} +186 -63
- package/dist/cli/chunk-h2a48yhd.js.map +36 -0
- package/dist/cli/{chunk-hm3vjy5s.js → chunk-jnwj5kjj.js} +14 -9
- package/dist/cli/{chunk-hm3vjy5s.js.map → chunk-jnwj5kjj.js.map} +4 -4
- package/dist/cli/chunk-kwrg63tm.js +31 -0
- package/dist/cli/chunk-kwrg63tm.js.map +10 -0
- package/dist/cli/{chunk-2hsdwb9n.js → chunk-nd1821sk.js} +18 -16
- package/dist/cli/{chunk-2hsdwb9n.js.map → chunk-nd1821sk.js.map} +2 -2
- package/dist/cli/{chunk-6dsbexzp.js → chunk-ntv4qrt7.js} +17 -15
- package/dist/cli/{chunk-6dsbexzp.js.map → chunk-ntv4qrt7.js.map} +2 -2
- package/dist/cli/{chunk-r9rcc4w7.js → chunk-p804f3pe.js} +7 -7
- package/dist/cli/{chunk-ey84smr6.js → chunk-py62fewh.js} +6 -6
- package/dist/cli/{chunk-ey84smr6.js.map → chunk-py62fewh.js.map} +1 -1
- package/dist/cli/chunk-q3wxxq39.js +126 -0
- package/dist/cli/chunk-q3wxxq39.js.map +11 -0
- package/dist/cli/{chunk-9t7a85s3.js → chunk-rekqz4qg.js} +23 -13
- package/dist/cli/chunk-rekqz4qg.js.map +10 -0
- package/dist/cli/{chunk-8ktnccpt.js → chunk-ta27feev.js} +1 -1
- package/dist/cli/{chunk-pv29h0wf.js → chunk-xkz5xbtv.js} +3476 -822
- package/dist/cli/chunk-xkz5xbtv.js.map +213 -0
- package/dist/cli/{chunk-a58773jm.js → chunk-y4ykbark.js} +2 -2
- package/dist/cli/{chunk-p3v96n38.js → chunk-y5h4r2y0.js} +4 -4
- package/dist/cli/{chunk-acanzt5p.js → chunk-yj17vs39.js} +6 -6
- package/dist/cli/{chunk-p73c0m7w.js → chunk-yxmk4pec.js} +16 -14
- package/dist/cli/{chunk-p73c0m7w.js.map → chunk-yxmk4pec.js.map} +2 -2
- package/dist/cli/{chunk-3em5wd2y.js → chunk-zccbjcj0.js} +4 -3
- package/dist/cli/{chunk-3em5wd2y.js.map → chunk-zccbjcj0.js.map} +2 -2
- package/dist/cli/{chunk-c8chx29p.js → chunk-zf748avv.js} +384 -207
- package/dist/cli/chunk-zf748avv.js.map +37 -0
- package/dist/cli/{chunk-g4hq16wv.js → chunk-zhvd6adm.js} +16 -14
- package/dist/cli/{chunk-g4hq16wv.js.map → chunk-zhvd6adm.js.map} +2 -2
- package/dist/cli/index.js +26 -20
- package/dist/cli/index.js.map +5 -5
- package/dist/types/ai/agent-surface.d.ts +8 -7
- package/dist/types/ai/ai-catalog.d.ts +7 -0
- package/dist/types/ai/ask-context.d.ts +22 -0
- package/dist/types/ai/ask.d.ts +271 -58
- package/dist/types/ai/index.d.ts +2 -2
- package/dist/types/ai/site-skill.d.ts +26 -0
- package/dist/types/ai/skills.d.ts +16 -0
- package/dist/types/astro/integration.d.ts +8 -0
- package/dist/types/captcha/hcaptcha.d.ts +27 -0
- package/dist/types/captcha/index.d.ts +28 -0
- package/dist/types/captcha/schema.d.ts +29 -0
- package/dist/types/captcha/turnstile.d.ts +28 -0
- package/dist/types/components/content/api-field.d.ts +59 -0
- package/dist/types/components/content/api-page.d.ts +95 -0
- package/dist/types/components/layout/nav-utils.d.ts +26 -0
- package/dist/types/components/openapi/helpers.d.ts +137 -0
- package/dist/types/components/openapi/security.d.ts +85 -0
- package/dist/types/consent/ethyca.d.ts +48 -0
- package/dist/types/consent/index.d.ts +37 -0
- package/dist/types/consent/native.d.ts +28 -0
- package/dist/types/consent/osano.d.ts +42 -0
- package/dist/types/consent/schema.d.ts +110 -0
- package/dist/types/core/config-input.d.ts +187 -20
- package/dist/types/core/data.d.ts +49 -4
- package/dist/types/core/footer.d.ts +8 -0
- package/dist/types/core/i18n-ui.d.ts +86 -0
- package/dist/types/core/includes.d.ts +8 -2
- package/dist/types/core/localizable.d.ts +7 -0
- package/dist/types/core/page-modes.d.ts +29 -0
- package/dist/types/core/redirect-patterns.d.ts +144 -0
- package/dist/types/core/related.d.ts +40 -0
- package/dist/types/core/schema.d.ts +551 -56
- package/dist/types/core/sources/read.d.ts +5 -0
- package/dist/types/core/types.d.ts +1 -1
- package/dist/types/core/variables.d.ts +42 -0
- package/dist/types/deploy/node-headers.d.ts +13 -2
- package/dist/types/deploy/platforms/cloudflare.d.ts +5 -0
- package/dist/types/deploy/platforms/netlify.d.ts +7 -0
- package/dist/types/deploy/platforms/vercel.d.ts +6 -0
- package/dist/types/deploy/redirects.d.ts +39 -11
- package/dist/types/deploy/vercel-negotiation.d.ts +9 -0
- package/dist/types/markdown/code-title.d.ts +17 -0
- package/dist/types/markdown/features.d.ts +3 -2
- package/dist/types/narration/build.d.ts +70 -0
- package/dist/types/narration/provider.d.ts +26 -0
- package/dist/types/narration/script.d.ts +154 -0
- package/dist/types/openapi/model.d.ts +12 -6
- package/dist/types/openapi/overlay.d.ts +54 -0
- package/dist/types/openapi/parse.d.ts +13 -0
- package/dist/types/openapi/references.d.ts +14 -4
- package/dist/types/ratelimit/cloudflare.d.ts +39 -0
- package/dist/types/ratelimit/index.d.ts +27 -0
- package/dist/types/ratelimit/memory.d.ts +36 -0
- package/dist/types/ratelimit/schema.d.ts +111 -0
- package/dist/types/ratelimit/upstash.d.ts +21 -0
- package/dist/types/ratelimit/wrangler.d.ts +23 -0
- package/dist/types/reference/asyncapi.d.ts +10 -10
- package/dist/types/reference/graphql.d.ts +13 -10
- package/dist/types/reference/openapi.d.ts +33 -12
- package/dist/types/reference/options.d.ts +45 -5
- package/dist/types/reference/scalar.d.ts +13 -0
- package/dist/types/reference/schema.d.ts +60 -36
- package/dist/types/search/documents.d.ts +12 -1
- package/dist/types/search/orama-index.d.ts +4 -0
- package/dist/types/seo/metatags.d.ts +20 -0
- package/docs/02-deployment.mdx +41 -5
- package/docs/03-upgrading.mdx +4 -4
- package/docs/04-migrating.mdx +1 -1
- package/docs/advanced/changelog.mdx +2 -2
- package/docs/advanced/skills.mdx +14 -0
- package/docs/cli/audit.mdx +21 -1
- package/docs/cli/index.mdx +1 -0
- package/docs/configuration/analytics.mdx +3 -1
- package/docs/configuration/assistant.mdx +188 -36
- package/docs/configuration/consent.mdx +100 -0
- package/docs/configuration/customization.mdx +4 -4
- package/docs/configuration/index.mdx +63 -5
- package/docs/configuration/meta.ts +3 -0
- package/docs/configuration/narration.mdx +119 -0
- package/docs/configuration/rate-limiting.mdx +69 -0
- package/docs/configuration/search.mdx +29 -1
- package/docs/configuration/theming.mdx +3 -1
- package/docs/content/components.mdx +106 -0
- package/docs/content/frontmatter.mdx +76 -0
- package/docs/content/i18n.mdx +38 -3
- package/docs/content/includes.mdx +16 -0
- package/docs/content/meta.mdx +1 -0
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +28 -6
- package/docs/content/sources/contentful.mdx +32 -0
- package/docs/content/sources/custom.mdx +39 -0
- package/docs/content/sources/github-releases.mdx +31 -0
- package/docs/content/sources/index.mdx +91 -0
- package/docs/content/sources/meta.ts +16 -0
- package/docs/content/sources/notion.mdx +32 -0
- package/docs/content/sources/obsidian.mdx +37 -0
- package/docs/content/sources/payload.mdx +30 -0
- package/docs/content/sources/remote-mdx.mdx +40 -0
- package/docs/content/sources/sanity.mdx +29 -0
- package/docs/content/sources/strapi.mdx +31 -0
- package/docs/content/syntax.mdx +67 -2
- package/docs/content/variables.mdx +41 -0
- package/docs/discoverability/agent-discovery.mdx +29 -2
- package/docs/discoverability/index.mdx +1 -1
- package/docs/discoverability/llms-txt.mdx +1 -1
- package/docs/discoverability/metadata.mdx +17 -0
- package/docs/references/api-pages.mdx +74 -0
- package/docs/references/asyncapi.mdx +1 -1
- package/docs/references/graphql.mdx +2 -2
- package/docs/references/meta.ts +1 -1
- package/docs/references/openapi.mdx +102 -3
- package/docs/references/scalar.mdx +3 -1
- package/package.json +36 -1
- package/skills/blume/SKILL.md +3 -0
- package/skills/blume-migrate/SKILL.md +5 -5
- package/skills/blume-migrate/references/docusaurus.md +3 -3
- package/skills/blume-migrate/references/mintlify.md +37 -19
- package/skills/blume-migrate/references/nextra.md +2 -2
- package/skills/blume-migrate/references/starlight.md +2 -1
- package/skills/blume-migrate/scripts/mintlify-codemod.mjs +60 -14
- package/skills/blume-write-skill/SKILL.md +82 -0
- package/src/ai/agent-readability.ts +2 -1
- package/src/ai/agent-surface.ts +9 -7
- package/src/ai/ai-catalog.ts +6 -3
- package/src/ai/ask-context.ts +73 -20
- package/src/ai/ask-data.ts +6 -0
- package/src/ai/ask-tools.ts +142 -0
- package/src/ai/ask.ts +354 -76
- package/src/ai/component-markdown.ts +75 -0
- package/src/ai/cors.ts +2 -0
- package/src/ai/index.ts +12 -0
- package/src/ai/llms.ts +6 -2
- package/src/ai/markdown.ts +2 -1
- package/src/ai/mcp/data.ts +6 -0
- package/src/ai/openapi-components.ts +9 -3
- package/src/ai/site-skill.ts +274 -0
- package/src/ai/skills.ts +35 -2
- package/src/ai/write-skill.ts +97 -0
- package/src/astro/generate.ts +132 -18
- package/src/astro/index.ts +1 -0
- package/src/astro/integration.ts +35 -0
- package/src/astro/module-types.ts +6 -0
- package/src/astro/templates.ts +283 -30
- package/src/astro/variables.ts +31 -0
- package/src/audit/catalog.ts +19 -0
- package/src/audit/checks/contrast.ts +183 -0
- package/src/audit/checks/i18n.ts +2 -3
- package/src/audit/checks/indexability.ts +2 -3
- package/src/audit/checks/links.ts +5 -12
- package/src/audit/checks/sitemap.ts +2 -3
- package/src/audit/redirects.ts +46 -15
- package/src/audit/run.ts +2 -0
- package/src/audit/types.ts +2 -1
- package/src/blume-modules.d.ts +7 -0
- package/src/captcha/client.ts +152 -0
- package/src/captcha/hcaptcha.ts +36 -0
- package/src/captcha/index.ts +28 -0
- package/src/captcha/schema.ts +32 -0
- package/src/captcha/turnstile.ts +38 -0
- package/src/captcha/verify.ts +71 -0
- package/src/cli/command-meta.ts +5 -0
- package/src/cli/commands/doctor.ts +22 -16
- package/src/cli/commands/skill.ts +96 -0
- package/src/cli/index.ts +5 -0
- package/src/cli/required-secrets.ts +71 -29
- package/src/components/BlumePage.astro +2 -0
- package/src/components/content/ApiEndpoint.astro +18 -0
- package/src/components/content/ApiField.astro +79 -0
- package/src/components/content/ApiPlayground.astro +62 -0
- package/src/components/content/ApiRail.astro +19 -0
- package/src/components/content/Color.astro +1 -0
- package/src/components/content/FileTree.astro +1 -0
- package/src/components/content/GithubInfo.astro +1 -0
- package/src/components/content/Panel.astro +1 -0
- package/src/components/content/ParamField.astro +25 -0
- package/src/components/content/RequestExample.astro +17 -0
- package/src/components/content/ResponseExample.astro +17 -0
- package/src/components/content/ResponseField.astro +32 -0
- package/src/components/content/Step.astro +1 -0
- package/src/components/content/Tile.astro +1 -0
- package/src/components/content/Tooltip.astro +1 -0
- package/src/components/content/Tree.astro +1 -0
- package/src/components/content/TypeTable.astro +4 -1
- package/src/components/content/View.astro +21 -0
- package/src/components/content/ViewSwitcher.astro +168 -0
- package/src/components/content/api-field.ts +100 -0
- package/src/components/content/api-page.ts +224 -0
- package/src/components/content/view-switcher.ts +71 -0
- package/src/components/index.ts +2 -0
- package/src/components/islands/Assistant.astro +10 -1
- package/src/components/islands/assistant.tsx +104 -14
- package/src/components/islands/code-question.ts +62 -0
- package/src/components/islands/hooks.ts +110 -21
- package/src/components/islands/support-link.ts +68 -0
- package/src/components/layout/Analytics.astro +11 -2
- package/src/components/layout/Banner.astro +14 -10
- package/src/components/layout/Breadcrumbs.astro +6 -2
- package/src/components/layout/ConsentBanner.astro +62 -0
- package/src/components/layout/ConsentHead.astro +38 -0
- package/src/components/layout/Directory.astro +94 -0
- package/src/components/layout/DrawerSwitchers.astro +51 -0
- package/src/components/layout/Empty.astro +2 -2
- package/src/components/layout/Header.astro +122 -80
- package/src/components/layout/LanguageSwitcher.astro +48 -15
- package/src/components/layout/NarrationPlayer.astro +1085 -0
- package/src/components/layout/NavSelector.astro +33 -7
- package/src/components/layout/PageFeedback.astro +54 -49
- package/src/components/layout/PageLayout.astro +71 -3
- package/src/components/layout/ReferenceLayout.astro +17 -6
- package/src/components/layout/RelatedPages.astro +42 -0
- package/src/components/layout/RootLayout.astro +308 -45
- package/src/components/layout/Search.astro +31 -17
- package/src/components/layout/SiteFooter.astro +124 -0
- package/src/components/layout/SiteMetatags.astro +16 -0
- package/src/components/layout/consent/native.ts +79 -0
- package/src/components/layout/consent/types.ts +37 -0
- package/src/components/layout/footer-links.ts +53 -0
- package/src/components/layout/footer-socials.ts +87 -0
- package/src/components/layout/locale-redirect.ts +107 -0
- package/src/components/layout/nav-utils.ts +83 -0
- package/src/components/layout/page-feedback.ts +96 -0
- package/src/components/layout/search/analytics.ts +98 -0
- package/src/components/layout/search/flexsearch.ts +17 -5
- package/src/components/layout/search/orama-cloud.ts +26 -14
- package/src/components/layout/search/types.ts +20 -0
- package/src/components/layout/search/typesense.ts +5 -1
- package/src/components/openapi/Operation.astro +161 -13
- package/src/components/openapi/RequestBody.astro +6 -4
- package/src/components/openapi/RequestPanel.astro +59 -7
- package/src/components/openapi/Responses.astro +6 -4
- package/src/components/openapi/async-snippets.ts +4 -4
- package/src/components/openapi/code-samples.ts +97 -0
- package/src/components/openapi/security.ts +6 -3
- package/src/components/openapi/snippets.ts +869 -8
- package/src/components/props.ts +6 -0
- package/src/consent/client.ts +95 -0
- package/src/consent/clients.ts +19 -0
- package/src/consent/ethyca.ts +71 -0
- package/src/consent/head.ts +24 -0
- package/src/consent/index.ts +37 -0
- package/src/consent/init.ts +29 -0
- package/src/consent/native.ts +36 -0
- package/src/consent/osano.ts +59 -0
- package/src/consent/schema.ts +30 -0
- package/src/core/builtin-tags.ts +5 -0
- package/src/core/client-address.ts +19 -0
- package/src/core/config-input.ts +194 -20
- package/src/core/data.ts +44 -4
- package/src/core/diagnostics.ts +3 -2
- package/src/core/footer.ts +26 -0
- package/src/core/graph.ts +39 -36
- package/src/core/i18n-ui.ts +82 -2
- package/src/core/includes.ts +20 -3
- package/src/core/links.ts +16 -2
- package/src/core/localizable.ts +26 -0
- package/src/core/navigation.ts +43 -12
- package/src/core/page-modes.ts +56 -0
- package/src/core/project-graph.ts +111 -5
- package/src/core/redirect-patterns.ts +491 -0
- package/src/core/related.ts +131 -0
- package/src/core/schema.ts +318 -64
- package/src/core/sources/normalize.ts +2 -1
- package/src/core/sources/read.ts +8 -3
- package/src/core/types.ts +1 -1
- package/src/core/ui-packs/ar.ts +43 -0
- package/src/core/ui-packs/bg.ts +45 -0
- package/src/core/ui-packs/bn.ts +43 -0
- package/src/core/ui-packs/ca.ts +46 -0
- package/src/core/ui-packs/cs.ts +44 -0
- package/src/core/ui-packs/da.ts +45 -0
- package/src/core/ui-packs/de.ts +46 -0
- package/src/core/ui-packs/el.ts +45 -0
- package/src/core/ui-packs/es.ts +46 -0
- package/src/core/ui-packs/fa.ts +45 -0
- package/src/core/ui-packs/fi.ts +45 -0
- package/src/core/ui-packs/fr.ts +46 -0
- package/src/core/ui-packs/he.ts +43 -0
- package/src/core/ui-packs/hi.ts +44 -0
- package/src/core/ui-packs/hr.ts +45 -0
- package/src/core/ui-packs/hu.ts +44 -0
- package/src/core/ui-packs/id.ts +45 -0
- package/src/core/ui-packs/it.ts +45 -0
- package/src/core/ui-packs/ja.ts +45 -0
- package/src/core/ui-packs/ko.ts +44 -0
- package/src/core/ui-packs/nl.ts +46 -0
- package/src/core/ui-packs/no.ts +44 -0
- package/src/core/ui-packs/pl.ts +45 -0
- package/src/core/ui-packs/pt-br.ts +46 -0
- package/src/core/ui-packs/pt.ts +45 -0
- package/src/core/ui-packs/ro.ts +45 -0
- package/src/core/ui-packs/ru.ts +45 -0
- package/src/core/ui-packs/sk.ts +44 -0
- package/src/core/ui-packs/sr.ts +45 -0
- package/src/core/ui-packs/sv.ts +44 -0
- package/src/core/ui-packs/th.ts +43 -0
- package/src/core/ui-packs/tr.ts +45 -0
- package/src/core/ui-packs/uk.ts +45 -0
- package/src/core/ui-packs/vi.ts +45 -0
- package/src/core/ui-packs/zh-tw.ts +43 -0
- package/src/core/ui-packs/zh.ts +43 -0
- package/src/core/variables.ts +103 -0
- package/src/deploy/artifacts.ts +77 -8
- package/src/deploy/cloudflare-negotiation.ts +35 -5
- package/src/deploy/headers.ts +2 -1
- package/src/deploy/node-headers.ts +63 -9
- package/src/deploy/platforms/cloudflare.ts +32 -0
- package/src/deploy/platforms/netlify.ts +33 -1
- package/src/deploy/platforms/vercel.ts +37 -2
- package/src/deploy/redirects.ts +91 -24
- package/src/deploy/vercel-negotiation.ts +36 -0
- package/src/markdown/api-rail.ts +259 -0
- package/src/markdown/code-title.ts +35 -9
- package/src/markdown/features.ts +3 -2
- package/src/markdown/fence-meta.ts +2 -0
- package/src/markdown/include.ts +11 -1
- package/src/markdown/index.ts +28 -5
- package/src/markdown/math.ts +4 -4
- package/src/markdown/variables.ts +56 -0
- package/src/markdown/views.ts +82 -0
- package/src/narration/build.ts +412 -0
- package/src/narration/player.ts +249 -0
- package/src/narration/provider.ts +29 -0
- package/src/narration/script.ts +592 -0
- package/src/og/card.ts +7 -6
- package/src/openapi/model.ts +57 -24
- package/src/openapi/overlay.ts +256 -0
- package/src/openapi/parse.ts +55 -2
- package/src/openapi/references.ts +21 -5
- package/src/openapi/render-mdx.ts +5 -1
- package/src/openapi/scalar.ts +40 -6
- package/src/openapi/source.ts +1 -1
- package/src/ratelimit/cloudflare.ts +54 -0
- package/src/ratelimit/index.ts +30 -0
- package/src/ratelimit/memory.ts +45 -0
- package/src/ratelimit/runtime.ts +229 -0
- package/src/ratelimit/schema.ts +28 -0
- package/src/ratelimit/upstash.ts +30 -0
- package/src/ratelimit/wrangler.ts +70 -0
- package/src/reference/asyncapi.ts +2 -2
- package/src/reference/graphql.ts +5 -2
- package/src/reference/openapi.ts +21 -7
- package/src/reference/options.ts +51 -7
- package/src/reference/scalar.ts +33 -8
- package/src/registry/eject.ts +20 -4
- package/src/registry/registry.ts +7 -0
- package/src/search/documents.ts +26 -2
- package/src/search/orama-index.ts +28 -3
- package/src/search/pagefind-ranking.ts +39 -0
- package/src/search/sync/algolia.ts +15 -4
- package/src/search/sync/orama-cloud.ts +3 -0
- package/src/search/sync/typesense.ts +5 -0
- package/src/seo/metatags.ts +67 -0
- package/src/theme/chrome-icons.ts +1 -0
- package/src/theme/color.ts +500 -0
- package/src/theme/entry.ts +56 -3
- package/src/theme/palette.ts +121 -45
- package/src/translate/prompts.ts +1 -0
- package/src/translate/validate.ts +8 -2
- package/src/upgrade/upgrade.ts +4 -171
- package/dist/cli/chunk-364znk6q.js +0 -75
- package/dist/cli/chunk-364znk6q.js.map +0 -11
- package/dist/cli/chunk-5m5nmvyq.js.map +0 -13
- package/dist/cli/chunk-9t7a85s3.js.map +0 -10
- package/dist/cli/chunk-c8chx29p.js.map +0 -36
- package/dist/cli/chunk-pehfxfta.js.map +0 -10
- package/dist/cli/chunk-pv29h0wf.js.map +0 -190
- package/dist/cli/chunk-q58y5e6a.js.map +0 -10
- package/dist/cli/chunk-wrr3j9w9.js.map +0 -35
- package/dist/cli/chunk-yfyb25rh.js.map +0 -14
- package/docs/content/sources.mdx +0 -334
- /package/dist/cli/{chunk-2eytanqx.js.map → chunk-1n228xqb.js.map} +0 -0
- /package/dist/cli/{chunk-35d4wj9f.js.map → chunk-2n4ps1b3.js.map} +0 -0
- /package/dist/cli/{chunk-e04dxsz1.js.map → chunk-4ejxbzee.js.map} +0 -0
- /package/dist/cli/{chunk-tzmab476.js.map → chunk-5ffywsmb.js.map} +0 -0
- /package/dist/cli/{chunk-2z928egk.js.map → chunk-5wj2qwn2.js.map} +0 -0
- /package/dist/cli/{chunk-b07cmahc.js.map → chunk-amrb6hgh.js.map} +0 -0
- /package/dist/cli/{chunk-akbpwfxc.js.map → chunk-cmtcnh9f.js.map} +0 -0
- /package/dist/cli/{chunk-crgn1q09.js.map → chunk-e7vvk5ya.js.map} +0 -0
- /package/dist/cli/{chunk-tkacnehg.js.map → chunk-gp84za0h.js.map} +0 -0
- /package/dist/cli/{chunk-r9rcc4w7.js.map → chunk-p804f3pe.js.map} +0 -0
- /package/dist/cli/{chunk-8ktnccpt.js.map → chunk-ta27feev.js.map} +0 -0
- /package/dist/cli/{chunk-a58773jm.js.map → chunk-y4ykbark.js.map} +0 -0
- /package/dist/cli/{chunk-p3v96n38.js.map → chunk-y5h4r2y0.js.map} +0 -0
- /package/dist/cli/{chunk-acanzt5p.js.map → chunk-yj17vs39.js.map} +0 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The props `<ParamField>` and `<ResponseField>` take, in Mintlify's shape: a
|
|
3
|
+
* parameter names its location with the attribute that carries its name
|
|
4
|
+
* (`<ParamField query="limit">`), and both take `type`, `required`,
|
|
5
|
+
* `deprecated`, and `default`; a response field adds `pre` and `post` labels
|
|
6
|
+
* around its name. Pure, so the Markdown downlevel and the playground can
|
|
7
|
+
* read fields the way the components render them.
|
|
8
|
+
*/
|
|
9
|
+
/** Where a `<ParamField>` parameter goes, in the order the attributes are checked. */
|
|
10
|
+
export declare const PARAM_LOCATIONS: readonly ["path", "query", "header", "body"];
|
|
11
|
+
/** A parameter's location. */
|
|
12
|
+
export type ParamLocation = (typeof PARAM_LOCATIONS)[number];
|
|
13
|
+
/** A literal value as MDX passes it: a string attribute, or an expression's data. */
|
|
14
|
+
export type FieldValue = string | number | boolean | null | undefined | FieldValue[] | {
|
|
15
|
+
[key: string]: FieldValue;
|
|
16
|
+
};
|
|
17
|
+
/** A boolean prop: MDX shorthand (`required`) is `true`, `required="true"` a string. */
|
|
18
|
+
export type FlagProp = boolean | string;
|
|
19
|
+
/** What both field components take. */
|
|
20
|
+
export interface FieldProps {
|
|
21
|
+
/** The value used when none is given. */
|
|
22
|
+
default?: FieldValue;
|
|
23
|
+
deprecated?: FlagProp;
|
|
24
|
+
required?: FlagProp;
|
|
25
|
+
/** Free text: `string`, `integer`, `string[]`, `object`. */
|
|
26
|
+
type?: string;
|
|
27
|
+
}
|
|
28
|
+
/** `<ParamField>`: a request parameter, named by its location attribute. */
|
|
29
|
+
export interface ParamFieldProps extends FieldProps {
|
|
30
|
+
body?: string;
|
|
31
|
+
header?: string;
|
|
32
|
+
/** The name, for a field with no location attribute. */
|
|
33
|
+
name?: string;
|
|
34
|
+
path?: string;
|
|
35
|
+
/** Placeholder text for the parameter's playground input. */
|
|
36
|
+
placeholder?: string;
|
|
37
|
+
query?: string;
|
|
38
|
+
}
|
|
39
|
+
/** `<ResponseField>`: a field of the response. */
|
|
40
|
+
export interface ResponseFieldProps extends FieldProps {
|
|
41
|
+
name: string;
|
|
42
|
+
/** Labels after the name. */
|
|
43
|
+
post?: string | string[];
|
|
44
|
+
/** Labels before the name. */
|
|
45
|
+
pre?: string | string[];
|
|
46
|
+
}
|
|
47
|
+
/** Whether a flag prop is on. */
|
|
48
|
+
export declare const isOn: (value?: FlagProp) => boolean;
|
|
49
|
+
/** Where a parameter goes, and what it's called. */
|
|
50
|
+
export interface ParamFieldName {
|
|
51
|
+
location?: ParamLocation;
|
|
52
|
+
name?: string;
|
|
53
|
+
}
|
|
54
|
+
/** A parameter's location and name: the first location attribute set, else `name`. */
|
|
55
|
+
export declare const paramField: (props: ParamFieldProps) => ParamFieldName;
|
|
56
|
+
/** A default value as shown: text as written, anything else as JSON; `null` when there is none. */
|
|
57
|
+
export declare const defaultLabel: (value?: FieldValue) => string | null;
|
|
58
|
+
/** `pre`/`post` labels as a list, whether one was written or several. */
|
|
59
|
+
export declare const fieldLabels: (value?: string | string[]) => string[];
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { ParameterLike, SchemaLike } from "../openapi/helpers.ts";
|
|
2
|
+
import type { OperationSecurity } from "../openapi/security.ts";
|
|
3
|
+
import type { FieldValue, ParamLocation } from "./api-field.ts";
|
|
4
|
+
/**
|
|
5
|
+
* A hand-written API page's endpoint, as its `api` frontmatter and its
|
|
6
|
+
* `<ParamField>`s describe it, turned into the OpenAPI-shaped pieces the
|
|
7
|
+
* operation playground and code samples are built from: a page with
|
|
8
|
+
* `api: "POST /v1/users"` gets the same Try it panel and request samples as
|
|
9
|
+
* a spec'd operation, with no spec. Mintlify's frontmatter, so migrated pages
|
|
10
|
+
* keep it as written.
|
|
11
|
+
*/
|
|
12
|
+
/** How a hand-written endpoint authenticates (`authMethod`, `api.auth.method`). */
|
|
13
|
+
export declare const AUTH_METHODS: readonly ["bearer", "basic", "key", "none"];
|
|
14
|
+
export type AuthMethod = (typeof AUTH_METHODS)[number];
|
|
15
|
+
/** What a page's playground shows: all of it, the samples only, or none. */
|
|
16
|
+
export declare const PLAYGROUND_MODES: readonly ["interactive", "simple", "none"];
|
|
17
|
+
export type PlaygroundMode = (typeof PLAYGROUND_MODES)[number];
|
|
18
|
+
/** `api` frontmatter: an HTTP method, then a path or a full URL. */
|
|
19
|
+
export declare const API_ENDPOINT: RegExp;
|
|
20
|
+
/** The site's default auth for hand-written endpoints (`api.auth`). */
|
|
21
|
+
export interface EndpointAuth {
|
|
22
|
+
method: AuthMethod;
|
|
23
|
+
/** The header an API key goes in. */
|
|
24
|
+
name?: string;
|
|
25
|
+
}
|
|
26
|
+
/** One `<ParamField>`, as the page's plugin collected it. */
|
|
27
|
+
export interface EndpointField {
|
|
28
|
+
default?: FieldValue;
|
|
29
|
+
deprecated?: boolean;
|
|
30
|
+
/** Body fields nested in this one's `<Expandable>`. */
|
|
31
|
+
fields?: EndpointField[];
|
|
32
|
+
location: ParamLocation;
|
|
33
|
+
name: string;
|
|
34
|
+
placeholder?: string;
|
|
35
|
+
required?: boolean;
|
|
36
|
+
type?: string;
|
|
37
|
+
}
|
|
38
|
+
/** What the page's plugin hands the endpoint components. */
|
|
39
|
+
export interface EndpointSpec {
|
|
40
|
+
authMethod?: AuthMethod;
|
|
41
|
+
fields: EndpointField[];
|
|
42
|
+
method: string;
|
|
43
|
+
playground?: PlaygroundMode;
|
|
44
|
+
/** The page has a `<RequestExample>`, which stands in for generated samples. */
|
|
45
|
+
requestExample: boolean;
|
|
46
|
+
/** The `api` target as written: a path, or a full URL. */
|
|
47
|
+
target: string;
|
|
48
|
+
}
|
|
49
|
+
/** The method and target of an `api` value, or `null` when it isn't one. */
|
|
50
|
+
export declare const parseApiEndpoint: (value: string) => {
|
|
51
|
+
method: string;
|
|
52
|
+
target: string;
|
|
53
|
+
} | null;
|
|
54
|
+
/** An endpoint's target, split the way the operation model takes it. */
|
|
55
|
+
export interface EndpointTarget {
|
|
56
|
+
path: string;
|
|
57
|
+
servers: {
|
|
58
|
+
url: string;
|
|
59
|
+
}[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The target split into a server and a path: a full URL is its own server,
|
|
63
|
+
* and a path joins the site's `api.server`, or stays relative to the docs
|
|
64
|
+
* when there is none.
|
|
65
|
+
*/
|
|
66
|
+
export declare const endpointTarget: (target: string, server?: string) => EndpointTarget;
|
|
67
|
+
/**
|
|
68
|
+
* A field's JSON schema from its `type`: `string[]` an array of strings, a
|
|
69
|
+
* field with nested fields an object with those properties, and anything
|
|
70
|
+
* that isn't a JSON type (`enum<string>`, `Date`) a string, which is what it
|
|
71
|
+
* goes over the wire as. A default and placeholder carry over, the
|
|
72
|
+
* placeholder as the example the samples show.
|
|
73
|
+
*/
|
|
74
|
+
export declare const fieldSchema: (field: EndpointField) => SchemaLike;
|
|
75
|
+
/** The path, query, and header fields as OpenAPI parameters. */
|
|
76
|
+
export declare const endpointParameters: (fields: EndpointField[]) => ParameterLike[];
|
|
77
|
+
/** The body fields as a JSON request body, or `undefined` when there are none. */
|
|
78
|
+
export declare const endpointBody: (fields: EndpointField[]) => {
|
|
79
|
+
content: {
|
|
80
|
+
"application/json": {
|
|
81
|
+
schema: SchemaLike;
|
|
82
|
+
};
|
|
83
|
+
};
|
|
84
|
+
} | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* The security an endpoint enforces: its page's `authMethod`, else the
|
|
87
|
+
* site's `api.auth`, else none. An API key goes in the configured header,
|
|
88
|
+
* `x-api-key` when none is named.
|
|
89
|
+
*/
|
|
90
|
+
export declare const endpointSecurity: (authMethod?: AuthMethod, siteAuth?: EndpointAuth) => OperationSecurity;
|
|
91
|
+
/**
|
|
92
|
+
* The endpoint spec the page's plugin wrote into the `spec` attribute of
|
|
93
|
+
* `<ApiEndpoint>` and `<ApiPlayground>`.
|
|
94
|
+
*/
|
|
95
|
+
export declare const readEndpointSpec: (json: string) => EndpointSpec;
|
|
@@ -69,6 +69,32 @@ export declare const getPagination: (flat: FlatPage[], route: string) => {
|
|
|
69
69
|
next: FlatPage | null;
|
|
70
70
|
prev: FlatPage | null;
|
|
71
71
|
};
|
|
72
|
+
/** A group node in the sidebar tree. */
|
|
73
|
+
export type NavGroup = Extract<NavNode, {
|
|
74
|
+
kind: "group";
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* The group whose own page `route` is, when that page lists the group's
|
|
78
|
+
* pages: its `directory` (inherited when the group sets none) is `card` or
|
|
79
|
+
* `accordion`. `null` on every other page.
|
|
80
|
+
*/
|
|
81
|
+
export declare const directoryGroupForRoute: (nodes: NavNode[], route: string) => NavGroup | null;
|
|
82
|
+
/** One entry in a group page's directory: a page, or a subgroup and its pages. */
|
|
83
|
+
export interface DirectoryEntry {
|
|
84
|
+
description?: string;
|
|
85
|
+
/** The page, or the subgroup's own page (its first page when it has none). */
|
|
86
|
+
href: string;
|
|
87
|
+
icon?: string;
|
|
88
|
+
label: string;
|
|
89
|
+
/** A subgroup's pages in sidebar order, its own page first; absent for a page. */
|
|
90
|
+
pages?: FlatPage[];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* What a group's page lists: the group's pages and subgroups, in sidebar
|
|
94
|
+
* order, without the page itself or external links. A subgroup is described
|
|
95
|
+
* by its own page, and one with no page to link to is left out.
|
|
96
|
+
*/
|
|
97
|
+
export declare const directoryEntries: (group: NavGroup) => DirectoryEntry[];
|
|
72
98
|
/**
|
|
73
99
|
* A stable id for every group in a sidebar — `g<n>` by pre-order position in
|
|
74
100
|
* the full tree. The layout hands `NavTree` a scoped view of that tree (a
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime helpers for the OpenAPI components. These operate on the parsed spec
|
|
3
|
+
* behind the `blume:openapi` alias — resolving `$ref`s (kept intact at parse
|
|
4
|
+
* time to avoid circular graphs), labelling types, and generating request
|
|
5
|
+
* examples and code samples. Browser-safe (no server-only imports); example
|
|
6
|
+
* values come from openapi-sampler, which is likewise browser-safe.
|
|
7
|
+
*/
|
|
8
|
+
/** Any value a parsed OpenAPI document can hold: JSON, nested schemas included. */
|
|
9
|
+
export type SpecValue = string | number | boolean | null | undefined | SpecValue[] | {
|
|
10
|
+
[key: string]: SpecValue;
|
|
11
|
+
};
|
|
12
|
+
/** A permissive view of an OpenAPI 3.1 schema — only the fields we render. */
|
|
13
|
+
export interface SchemaLike {
|
|
14
|
+
$ref?: string;
|
|
15
|
+
type?: string | string[];
|
|
16
|
+
format?: string;
|
|
17
|
+
title?: string;
|
|
18
|
+
description?: string;
|
|
19
|
+
properties?: Record<string, SchemaLike>;
|
|
20
|
+
required?: string[];
|
|
21
|
+
items?: SchemaLike;
|
|
22
|
+
enum?: SpecValue[];
|
|
23
|
+
const?: SpecValue;
|
|
24
|
+
default?: SpecValue;
|
|
25
|
+
example?: SpecValue;
|
|
26
|
+
examples?: SpecValue[];
|
|
27
|
+
allOf?: SchemaLike[];
|
|
28
|
+
oneOf?: SchemaLike[];
|
|
29
|
+
anyOf?: SchemaLike[];
|
|
30
|
+
additionalProperties?: boolean | SchemaLike;
|
|
31
|
+
nullable?: boolean;
|
|
32
|
+
deprecated?: boolean;
|
|
33
|
+
readOnly?: boolean;
|
|
34
|
+
writeOnly?: boolean;
|
|
35
|
+
minimum?: number;
|
|
36
|
+
maximum?: number;
|
|
37
|
+
minLength?: number;
|
|
38
|
+
maxLength?: number;
|
|
39
|
+
minItems?: number;
|
|
40
|
+
maxItems?: number;
|
|
41
|
+
pattern?: string;
|
|
42
|
+
[key: string]: SpecValue;
|
|
43
|
+
}
|
|
44
|
+
/** A permissive view of an operation parameter — only the fields we render. */
|
|
45
|
+
export interface ParameterLike {
|
|
46
|
+
$ref?: string;
|
|
47
|
+
name?: string;
|
|
48
|
+
in?: string;
|
|
49
|
+
description?: string;
|
|
50
|
+
required?: boolean;
|
|
51
|
+
deprecated?: boolean;
|
|
52
|
+
schema?: SchemaLike;
|
|
53
|
+
example?: SpecValue;
|
|
54
|
+
[key: string]: SpecValue;
|
|
55
|
+
}
|
|
56
|
+
/** The `components` object of a parsed spec: section name → named-node table. */
|
|
57
|
+
export type ComponentsLike = Record<string, Record<string, SpecValue> | undefined>;
|
|
58
|
+
/**
|
|
59
|
+
* Resolve one level of `$ref` against a named `components` section
|
|
60
|
+
* (`parameters`, `requestBodies`, `responses`). Mirrors {@link resolveSchema}:
|
|
61
|
+
* an unknown ref — or one pointing into a different section — is returned
|
|
62
|
+
* as-is.
|
|
63
|
+
*/
|
|
64
|
+
export declare const resolveComponentRef: <T extends {
|
|
65
|
+
$ref?: string;
|
|
66
|
+
}>(node: T, components: ComponentsLike | undefined, section: string) => T;
|
|
67
|
+
/**
|
|
68
|
+
* Path-level and operation-level parameters merged into one render list.
|
|
69
|
+
* `$ref`s resolve against `components.parameters` first; then an operation
|
|
70
|
+
* parameter overrides a path-level one with the same `name` + `in` (the
|
|
71
|
+
* OpenAPI override rule), so a re-declared parameter appears once.
|
|
72
|
+
*/
|
|
73
|
+
export declare const mergeParameters: (pathParameters: ParameterLike[] | undefined, operationParameters: ParameterLike[] | undefined, components?: ComponentsLike) => ParameterLike[];
|
|
74
|
+
/** The display name of a `$ref`, e.g. `#/components/schemas/Pet` -> `Pet`. */
|
|
75
|
+
export declare const refName: (ref: string) => string;
|
|
76
|
+
/** Resolve one level of `$ref` against the document's component schemas. */
|
|
77
|
+
export declare const resolveSchema: (schemas: Record<string, SchemaLike>, schema?: SchemaLike) => SchemaLike;
|
|
78
|
+
/**
|
|
79
|
+
* A short, human-readable type label for a schema row. `$ref`s label by name
|
|
80
|
+
* (`Pet`, `Pet[]`) without resolving — which also means circular refs through
|
|
81
|
+
* array items can't recurse forever. A `null` member stays out of a union's
|
|
82
|
+
* label: rows mark it with {@link isNullable}, as they do `type: [T, "null"]`.
|
|
83
|
+
*/
|
|
84
|
+
export declare const typeLabel: (schema: SchemaLike) => string;
|
|
85
|
+
/**
|
|
86
|
+
* Whether this schema is nullable: 3.0 `nullable`, a 3.1 `"null"` in `type`,
|
|
87
|
+
* or a `{ type: "null" }` member of a `oneOf`/`anyOf` union.
|
|
88
|
+
*/
|
|
89
|
+
export declare const isNullable: (schema: SchemaLike) => boolean;
|
|
90
|
+
/** Human-readable validation constraints for a schema, in display order. */
|
|
91
|
+
export declare const constraints: (schema: SchemaLike) => string[];
|
|
92
|
+
/** The merged property list and required set a schema exposes. */
|
|
93
|
+
export interface ObjectPropertySet {
|
|
94
|
+
properties: [string, SchemaLike][];
|
|
95
|
+
required: Set<string>;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* The object properties a schema exposes, merging `allOf` branches so an
|
|
99
|
+
* `allOf`-composed model still lists every field. Returns the properties plus
|
|
100
|
+
* the merged required set.
|
|
101
|
+
*/
|
|
102
|
+
export declare const objectProperties: (schema: SchemaLike, schemas: Record<string, SchemaLike>) => ObjectPropertySet;
|
|
103
|
+
/**
|
|
104
|
+
* Build a representative example value for a schema via openapi-sampler
|
|
105
|
+
* (Redoc's generator): declared `example`/`const`/`default`/`enum` values
|
|
106
|
+
* win, formats produce realistic placeholders (`email`, `uuid`, `date-time`),
|
|
107
|
+
* and circular `$ref` chains — which keeping refs intact allows — terminate
|
|
108
|
+
* safely. A request sample skips `readOnly` fields (a server-generated field
|
|
109
|
+
* has no place in one); a response sample skips `writeOnly` fields (a
|
|
110
|
+
* password the client sends never comes back) and keeps the `readOnly` ones.
|
|
111
|
+
*/
|
|
112
|
+
export declare const exampleValue: (schema: SchemaLike | undefined, schemas: Record<string, SchemaLike>, direction?: "request" | "response") => SpecValue;
|
|
113
|
+
/** Where an author can declare an example: a parameter or a media type. */
|
|
114
|
+
export interface ExampleCarrier {
|
|
115
|
+
example?: SpecValue;
|
|
116
|
+
examples?: SpecValue;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* The example a parameter or media type declares: its `example`, else the
|
|
120
|
+
* first `value` in its `examples` map — inline, or behind a `$ref` to
|
|
121
|
+
* `#/components/examples`, resolved against `components`. Scalar's upgrade
|
|
122
|
+
* moves every OpenAPI 3.0 and Swagger 2.0 `example` into
|
|
123
|
+
* `examples.default.value`, and 3.1 authors write that map directly, so
|
|
124
|
+
* reading `example` alone would drop them all. `undefined` when nothing is
|
|
125
|
+
* declared.
|
|
126
|
+
*/
|
|
127
|
+
export declare const declaredExample: (carrier: ExampleCarrier, components?: ComponentsLike) => SpecValue;
|
|
128
|
+
/**
|
|
129
|
+
* A response media type's example for the Response panel: the declared one,
|
|
130
|
+
* else a sample built for the response direction (`readOnly` kept,
|
|
131
|
+
* `writeOnly` skipped).
|
|
132
|
+
*/
|
|
133
|
+
export declare const responseExample: (media: ExampleCarrier & {
|
|
134
|
+
schema?: SchemaLike;
|
|
135
|
+
}, schemas: Record<string, SchemaLike>, components?: ComponentsLike) => SpecValue;
|
|
136
|
+
/** Pretty-print a JSON value for an example/code block. */
|
|
137
|
+
export declare const toJson: <T>(value: T) => string;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Security (authorization) resolution for the OpenAPI components. An operation
|
|
3
|
+
* enforces its own `security` when declared — an empty array explicitly makes
|
|
4
|
+
* it public — and inherits the document's root `security` otherwise. Within the
|
|
5
|
+
* resolved list, each requirement object is one way to authorize (OR between
|
|
6
|
+
* entries), and every scheme named inside a single requirement is needed
|
|
7
|
+
* together (AND). Pure and dependency-free like `helpers.ts`, so it runs in the
|
|
8
|
+
* browser build with no server-only imports.
|
|
9
|
+
*/
|
|
10
|
+
/** A permissive view of an OpenAPI security scheme — only the fields we render. */
|
|
11
|
+
export interface SecuritySchemeLike {
|
|
12
|
+
type?: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
/** `apiKey`: the parameter name the key is sent as. */
|
|
15
|
+
name?: string;
|
|
16
|
+
/** `apiKey`: where the key goes — `header`, `query`, or `cookie`. */
|
|
17
|
+
in?: string;
|
|
18
|
+
/** `http`: the HTTP auth scheme, e.g. `bearer` or `basic`. */
|
|
19
|
+
scheme?: string;
|
|
20
|
+
/** `http` bearer: a hint at the token format, e.g. `JWT`. */
|
|
21
|
+
bearerFormat?: string;
|
|
22
|
+
}
|
|
23
|
+
/** One security requirement: scheme name -> required scopes (empty outside OAuth). */
|
|
24
|
+
export type SecurityRequirementLike = Record<string, string[]>;
|
|
25
|
+
/** A scheme resolved out of `components.securitySchemes`, with its scopes. */
|
|
26
|
+
export interface ResolvedScheme {
|
|
27
|
+
/** The scheme's component name, e.g. `bearerAuth`. */
|
|
28
|
+
key: string;
|
|
29
|
+
/** The scheme object; undefined when the requirement names an unknown one. */
|
|
30
|
+
scheme?: SecuritySchemeLike;
|
|
31
|
+
scopes: string[];
|
|
32
|
+
}
|
|
33
|
+
/** The security state one operation renders. */
|
|
34
|
+
export interface OperationSecurity {
|
|
35
|
+
/** Ways to authorize (OR); every scheme within one entry is required (AND). */
|
|
36
|
+
alternatives: ResolvedScheme[][];
|
|
37
|
+
/** True when an empty requirement also allows unauthenticated calls. */
|
|
38
|
+
optional: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The requirement list an operation actually enforces: its own `security` when
|
|
42
|
+
* declared — the OpenAPI override rule, where `[]` removes the default and
|
|
43
|
+
* makes the operation public — else the document's root `security`. A webhook
|
|
44
|
+
* takes only its own: the API sends it, so the root requirements, which guard
|
|
45
|
+
* calls to the API, say nothing about what the receiving endpoint checks.
|
|
46
|
+
*/
|
|
47
|
+
export declare const effectiveSecurity: (operation?: SecurityRequirementLike[], document?: SecurityRequirementLike[], webhook?: boolean) => SecurityRequirementLike[];
|
|
48
|
+
/**
|
|
49
|
+
* Resolve requirement names against `components.securitySchemes`. A name with
|
|
50
|
+
* no matching component is kept (with `scheme` undefined) so an inconsistent
|
|
51
|
+
* spec still renders the requirement instead of silently dropping it. An empty
|
|
52
|
+
* requirement object — the spec idiom for "auth optional" — contributes no
|
|
53
|
+
* alternative and flips `optional` instead.
|
|
54
|
+
*/
|
|
55
|
+
export declare const resolveSecurity: (requirements: SecurityRequirementLike[], schemes: Record<string, SecuritySchemeLike> | undefined) => OperationSecurity;
|
|
56
|
+
/**
|
|
57
|
+
* One AsyncAPI 3.x security entry: a `$ref` into
|
|
58
|
+
* `components.securitySchemes`, or an inline scheme object (the shape the
|
|
59
|
+
* official 2.x converter emits for scoped requirements, `scopes` on the
|
|
60
|
+
* scheme itself).
|
|
61
|
+
*/
|
|
62
|
+
export interface AsyncApiSecurityEntryLike {
|
|
63
|
+
$ref?: string;
|
|
64
|
+
type?: string;
|
|
65
|
+
scopes?: unknown;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Resolve an AsyncAPI 3.x security list. Unlike OpenAPI's requirement maps,
|
|
69
|
+
* each entry names a single scheme and any one entry satisfies the operation
|
|
70
|
+
* — so every entry becomes its own one-scheme "or" alternative. A `$ref`
|
|
71
|
+
* pointing at an undeclared scheme is kept (with `scheme` undefined),
|
|
72
|
+
* matching {@link resolveSecurity}'s render-don't-drop rule.
|
|
73
|
+
*/
|
|
74
|
+
export declare const resolveAsyncApiSecurity: (entries: AsyncApiSecurityEntryLike[], schemes: Record<string, SecuritySchemeLike> | undefined) => OperationSecurity;
|
|
75
|
+
/** A short human label for a scheme row, e.g. `Bearer token` or `API key`. */
|
|
76
|
+
export declare const schemeLabel: (resolved: ResolvedScheme) => string;
|
|
77
|
+
/**
|
|
78
|
+
* Where the credential travels: the header/query/cookie parameter it occupies.
|
|
79
|
+
* Undefined for schemes with no request parameter (mutual TLS) and for unknown
|
|
80
|
+
* refs, where guessing a location would be misleading.
|
|
81
|
+
*/
|
|
82
|
+
export declare const schemeCarrier: (resolved: ResolvedScheme) => {
|
|
83
|
+
name: string;
|
|
84
|
+
in: string;
|
|
85
|
+
} | undefined;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { HeadScript } from "../analytics/head.ts";
|
|
3
|
+
import type { AdapterDescriptor } from "../core/adapter.ts";
|
|
4
|
+
/** Options for {@link ethyca}. */
|
|
5
|
+
export interface EthycaOptions {
|
|
6
|
+
/**
|
|
7
|
+
* The key of the privacy notice that covers analytics, as you named it in
|
|
8
|
+
* Fides. Defaults to `analytics`.
|
|
9
|
+
*/
|
|
10
|
+
notice?: string;
|
|
11
|
+
/** Your Fides privacy center's origin, which serves `fides.js`. */
|
|
12
|
+
privacyCenter: string;
|
|
13
|
+
/** The Fides property to load, when you have more than one. */
|
|
14
|
+
propertyId?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare const ethycaOptionsSchema: z.ZodObject<{
|
|
17
|
+
notice: z.ZodOptional<z.ZodString>;
|
|
18
|
+
privacyCenter: z.ZodURL;
|
|
19
|
+
propertyId: z.ZodOptional<z.ZodString>;
|
|
20
|
+
}, z.core.$strict>;
|
|
21
|
+
export type EthycaAdapter = AdapterDescriptor<"ethyca", EthycaOptions>;
|
|
22
|
+
export declare const ethycaAdapterSchema: z.ZodObject<{
|
|
23
|
+
kind: z.ZodLiteral<"ethyca">;
|
|
24
|
+
options: z.ZodObject<{
|
|
25
|
+
notice: z.ZodOptional<z.ZodString>;
|
|
26
|
+
privacyCenter: z.ZodURL;
|
|
27
|
+
propertyId: z.ZodOptional<z.ZodString>;
|
|
28
|
+
}, z.core.$strict>;
|
|
29
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
30
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
31
|
+
}, z.core.$strict>;
|
|
32
|
+
/**
|
|
33
|
+
* Ethyca's Fides consent manager, loaded from your privacy center. Fides
|
|
34
|
+
* shows its own banner and modal, set up in Fides, and Blume runs the
|
|
35
|
+
* analytics once the reader's analytics notice is on. Nothing here is
|
|
36
|
+
* secret.
|
|
37
|
+
*/
|
|
38
|
+
export declare const ethyca: (options: EthycaOptions) => EthycaAdapter;
|
|
39
|
+
/**
|
|
40
|
+
* Reports the analytics notice to `window.blumeConsent` when Fides is ready
|
|
41
|
+
* and whenever the reader saves a change, and reopens Fides' modal from the
|
|
42
|
+
* Cookie settings link. The notice key rides in as `data-notice`. It counts
|
|
43
|
+
* as allowed when on (`true`), opted in, or a notice that only asks for
|
|
44
|
+
* acknowledgment.
|
|
45
|
+
*/
|
|
46
|
+
export declare const ETHYCA_BRIDGE = "(()=>{const c=window.blumeConsent;if(!c){return;}const k=document.currentScript?.dataset.notice??\"analytics\";const sync=(e)=>{const v=(e?.detail?.consent??window.Fides?.consent??{})[k];c.set({analytics:v===true||v===\"opt_in\"||v===\"acknowledge\"});};c.open=()=>window.Fides?.showModal();addEventListener(\"FidesReady\",sync);addEventListener(\"FidesUpdated\",sync);if(window.Fides?.initialized){sync();}})();";
|
|
47
|
+
/** Fides' script from the privacy center, then the bridge. */
|
|
48
|
+
export declare const ethycaHead: (options: EthycaOptions) => HeadScript[];
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consent adapters for `blume.config.ts`:
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import { defineConfig } from "blume";
|
|
6
|
+
* import { googleAnalytics } from "blume/analytics";
|
|
7
|
+
* import { native } from "blume/consent";
|
|
8
|
+
*
|
|
9
|
+
* export default defineConfig({
|
|
10
|
+
* analytics: [googleAnalytics({ id: "G-XXXXXXXXXX" })],
|
|
11
|
+
* consent: native({ policy: "/privacy" }),
|
|
12
|
+
* });
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* With `consent` set, analytics waits for the reader: every adapter's tags are
|
|
16
|
+
* held until the consent adapter reports that analytics is allowed. Each
|
|
17
|
+
* factory returns a plain descriptor (see `core/adapter.ts`).
|
|
18
|
+
*
|
|
19
|
+
* Adding a consent manager: a factory and option schema in its own module,
|
|
20
|
+
* and a member of `consentAdapterSchema` (`schema.ts`). Then connect it to
|
|
21
|
+
* `window.blumeConsent` (see `init.ts` for the contract): report the reader's
|
|
22
|
+
* choice with `set({ analytics })` on load and on every change, and set
|
|
23
|
+
* `open` to reopen the manager's preferences. A hosted manager does that
|
|
24
|
+
* with tags in `consentHead` (`head.ts`): its loader, then a constant bridge
|
|
25
|
+
* script (`osano.ts` is an example). A manager that ships as an npm package
|
|
26
|
+
* does it in a browser module instead, registered in `clients.ts`, with its
|
|
27
|
+
* packages in the factory's `runtimeDeps` (`native()`'s banner is the
|
|
28
|
+
* example).
|
|
29
|
+
*/
|
|
30
|
+
export type { AdapterDescriptor, JsonValue } from "../core/adapter.ts";
|
|
31
|
+
export { ethyca } from "./ethyca.ts";
|
|
32
|
+
export type { EthycaAdapter, EthycaOptions } from "./ethyca.ts";
|
|
33
|
+
export { native } from "./native.ts";
|
|
34
|
+
export type { NativeAdapter, NativeOptions } from "./native.ts";
|
|
35
|
+
export { osano } from "./osano.ts";
|
|
36
|
+
export type { OsanoAdapter, OsanoOptions } from "./osano.ts";
|
|
37
|
+
export type { ConsentAdapter } from "./schema.ts";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { AdapterDescriptor } from "../core/adapter.ts";
|
|
3
|
+
/** Options for {@link native}. */
|
|
4
|
+
export interface NativeOptions {
|
|
5
|
+
/** Where the banner's privacy policy link goes: a page route or a URL. */
|
|
6
|
+
policy?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const nativeOptionsSchema: z.ZodObject<{
|
|
9
|
+
policy: z.ZodOptional<z.ZodString>;
|
|
10
|
+
}, z.core.$strict>;
|
|
11
|
+
export type NativeAdapter = AdapterDescriptor<"native", NativeOptions>;
|
|
12
|
+
export declare const nativeAdapterSchema: z.ZodObject<{
|
|
13
|
+
kind: z.ZodLiteral<"native">;
|
|
14
|
+
options: z.ZodObject<{
|
|
15
|
+
policy: z.ZodOptional<z.ZodString>;
|
|
16
|
+
}, z.core.$strict>;
|
|
17
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
18
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
19
|
+
}, z.core.$strict>;
|
|
20
|
+
/**
|
|
21
|
+
* Blume's own consent banner: a card at the foot of the page asking to use
|
|
22
|
+
* analytics cookies, with Accept and Decline side by side and an optional
|
|
23
|
+
* link to your privacy policy. The answer stays in the reader's browser, and
|
|
24
|
+
* the footer's Cookie settings link brings the banner back to change it. Its
|
|
25
|
+
* text comes from the `consent` UI strings, translated in every built-in
|
|
26
|
+
* language.
|
|
27
|
+
*/
|
|
28
|
+
export declare const native: (options?: NativeOptions) => NativeAdapter;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { HeadScript } from "../analytics/head.ts";
|
|
3
|
+
import type { AdapterDescriptor } from "../core/adapter.ts";
|
|
4
|
+
/** Options for {@link osano}. */
|
|
5
|
+
export interface OsanoOptions {
|
|
6
|
+
/** The configuration ID from the script tag Osano gives you. */
|
|
7
|
+
configId: string;
|
|
8
|
+
/** The customer ID from the script tag Osano gives you. */
|
|
9
|
+
customerId: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const osanoOptionsSchema: z.ZodObject<{
|
|
12
|
+
configId: z.ZodString;
|
|
13
|
+
customerId: z.ZodString;
|
|
14
|
+
}, z.core.$strict>;
|
|
15
|
+
export type OsanoAdapter = AdapterDescriptor<"osano", OsanoOptions>;
|
|
16
|
+
export declare const osanoAdapterSchema: z.ZodObject<{
|
|
17
|
+
kind: z.ZodLiteral<"osano">;
|
|
18
|
+
options: z.ZodObject<{
|
|
19
|
+
configId: z.ZodString;
|
|
20
|
+
customerId: z.ZodString;
|
|
21
|
+
}, z.core.$strict>;
|
|
22
|
+
requiredSecrets: z.ZodArray<z.ZodString>;
|
|
23
|
+
runtimeDeps: z.ZodArray<z.ZodString>;
|
|
24
|
+
}, z.core.$strict>;
|
|
25
|
+
/**
|
|
26
|
+
* Osano Cookie Consent. Osano shows its own banner and drawer, set up in the
|
|
27
|
+
* Osano dashboard, and Blume runs the analytics once Osano reports the
|
|
28
|
+
* reader's `ANALYTICS` consent. Both IDs come from the script tag Osano
|
|
29
|
+
* gives you, and neither is secret.
|
|
30
|
+
*/
|
|
31
|
+
export declare const osano: (options: OsanoOptions) => OsanoAdapter;
|
|
32
|
+
/**
|
|
33
|
+
* Reports Osano's analytics consent to `window.blumeConsent` now (`Osano.cm`
|
|
34
|
+
* is ready as soon as its script ran) and on every Osano consent event, and
|
|
35
|
+
* reopens Osano's drawer from the Cookie settings link.
|
|
36
|
+
*/
|
|
37
|
+
export declare const OSANO_BRIDGE = "(()=>{const o=window.Osano?.cm;const c=window.blumeConsent;if(!o||!c){return;}const sync=()=>c.set({analytics:o.analytics===true});c.open=()=>o.showDrawer();for(const e of [\"osano-cm-initialized\",\"osano-cm-consent-saved\",\"osano-cm-consent-changed\"]){o.addEventListener(e,sync);}sync();})();";
|
|
38
|
+
/**
|
|
39
|
+
* Osano's loader, synchronous as its install guide requires, then the
|
|
40
|
+
* bridge. The IDs are path segments, so each is encoded.
|
|
41
|
+
*/
|
|
42
|
+
export declare const osanoHead: (options: OsanoOptions) => HeadScript[];
|