well-known
A Nuxt module to add well-known URIs using middlewares
Nuxt Well-Known
Nuxt (v3.x) module to handle
.well-known
URIs with middlewaresSee https://www.iana.org/assignments/well-known-uris/well-known-uris.xhtml
⚠️ Only tested with SSR mode (not SSG and CSR)
Nuxt Well-Known module is integrated with the Nuxt Devtools.
Well-Known URIs Supported
security.txt
change-password
- Dynamic routes with content:
content-uris
Quick Setup
- Add
@zadigetvoltaire/nuxt-well-known
dependency to your project
# Using pnpmpnpm add -D @zadigetvoltaire/nuxt-well-known# Using yarnyarn add --dev @zadigetvoltaire/nuxt-well-known# Using npmnpm install --save-dev @zadigetvoltaire/nuxt-well-known
- Add
@zadigetvoltaire/nuxt-well-known
to themodules
section ofnuxt.config.ts
export default defineNuxtConfig({ modules: [ '@zadigetvoltaire/nuxt-well-known' ],})
- Add configuration in
nuxtConfig.wellKnown
or innuxtConfig.runtimeConfig.public.wellKnown
This module supports 2 ways of configuration:
- Directly in key
wellKnown
of the Nuxt config - In public runtimeConfig: useful to override the config with environment variables and handle multiple environments
export default defineNuxtConfig({ ... wellKnown: { devtools: true, securityTxt: { disabled: false, contacts: ['me@example.com'], expires: new Date('2025-02-03') }, changePassword: { disabled: false, redirectTo: 'https://example.com/password-recovery' } } ... runtimeConfig: { public: { wellKnown: { devtools: true, securityTxt: { disabled: false, contacts: ['me@example.com'], expires: new Date('2025-02-03').toISOString() // ⚠️ in runtime config, `expires` should be a string }, changePassword: { disabled: false, redirectTo: 'https://example.com/password-recovery' } } } }})
Module Options
interface ModuleOptions { /** * Enable Nuxt Devtools integration * * @default true */ devtools?: boolean securityTxt?: SecurityTxtOptions, changePassword?: ChangePasswordOptions, contentUris?: ContentUriOptions[],}
Middlewares
security.txt
This middleware will generate a security.txt
file available under /.well-known/security.txt
URI.
Model options:
type SecurityTxtOptions = { disabled?: boolean; contacts: string[]; // https://www.rfc-editor.org/rfc/rfc9116#section-2.5.3 expires: string | Date; // https://www.rfc-editor.org/rfc/rfc9116#section-2.5.5 encryption?: string[]; // https://www.rfc-editor.org/rfc/rfc9116#section-2.5.4 acknowledgments?: string[]; // https://www.rfc-editor.org/rfc/rfc9116#section-2.5.1 preferredLanguages?: string[]; // https://www.rfc-editor.org/rfc/rfc9116#section-2.5.8 canonical?: string[]; // https://www.rfc-editor.org/rfc/rfc9116#section-2.5.2 policy?: string[]; // https://www.rfc-editor.org/rfc/rfc9116#section-2.5.7 hiring?: string[]; // https://www.rfc-editor.org/rfc/rfc9116#section-2.5.6}
change-password
This middleware will redirect requests of /.well-known/change-password
to the configured target URL.
type ChangePasswordOptions = { disabled?: boolean; redirectTo: string;}
content-uris
With this middleware, you can generate uris with content
type ContentUriOptions = { disabled?: boolean; path: string; content: string;}
Example:
// nuxt.config.tsexport default defineNuxtConfig({ modules: [ '@zadigetvoltaire/nuxt-well-known', ], wellKnown: { contentUris: [ { path: 'apple-developer-merchantid-domain-association', content: 'merchantid' }, { path: 'content-uri.txt', content: 'content-uri' } ] }})
Will render:
https://example.com/.well-known/apple-developer-merchantid-domain-association
-->merchantid
https://example.com/.well-known/content-uri.txt
-->content-uri
That's it! You can now use Nuxt Well-Known in your Nuxt app ✨
Contributing
# Install dependencies, prepare apps & run dev servermake start# Run dev serverpnpm dev# Develop with playground, with bundled client uipnpm play:prod# Run ESLintpnpm lint# Run Vitestpnpm testpnpm test:watch
Release new version
- Execute release command
⚠ This command should be executed only on the main branch
This command will:
- Generate the CHANGELOG.md and push it with a release commit
- Bump the package version
- Create and push the new tag
- Create a GitHub release to trigger the library publish pipeline
pnpm release
© Zadig&Voltaire is a registered trademark of ZV FRANCE
Contributors 2