Files
strapi/examples/getstarted/config/admin.js
Andrei L 1dd851498a feat(admin): add documentation helper link in HeaderLayout (revival of #23328) (#26422)
* feat(admin): add documentation helper link in HeaderLayout

Revival of #23328 (by @Mcastres), rebased on develop with review feedback
addressed and additional improvements:

- Replace hand-rolled find with react-router matchRoutes for proper path
  matching and specificity ranking
- Update doc URLs to canonical docs.strapi.io paths (drop redirected
  /user-docs/* and /dev-docs/* entries)
- Restore section anchors that were lost during doc-site reorganization
  (#providers, #email-templates, #advanced-settings, profile, rbac)
- Align array path entries with actual registered admin routes (rename
  /plugins/content-type-builder, /plugins/content-releases, settings
  prefix for purchase-content-releases and list-plugins, drop dead
  /marketplace external link)
- Add opt-out flag admin.flags.docLinks for white-label deployments
  (requested by @derrickmehaffy)
- Memoize getMatchingDocLink result per pathname
- Place doc link button next to primary action via gap on parent Flex
  (per @remidej review)
- Drop async from getMatchingDocLink, derive docLink synchronously from
  pathname (per @remidej review)

Closes #23328

Co-authored-by: Maxime Castres <17828745+Mcastres@users.noreply.github.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore(admin): move DocLink type to getMatchingDocLink module

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(admin): add docLinks flag to EE Window strapi type

The EE admin custom.d.ts redeclares window.strapi.flags and was missing
the docLinks property, causing test:ts:front to fail with TS2339 in
HeaderLayout.tsx.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test: add getMachingDocLink tests

---------

Co-authored-by: Maxime Castres <17828745+Mcastres@users.noreply.github.com>
Co-authored-by: Ben Irvin <ben@innerdvations.com>
2026-05-26 09:59:00 +02:00

56 lines
1.6 KiB
JavaScript

module.exports = ({ env }) => ({
// autoOpen: false,
auth: {
secret: env('ADMIN_JWT_SECRET', 'example-token'),
sessions: {
options: {
//algorithm: env('ADMIN_JWT_ALGORITHM', 'HS256'),
// Any other JWT options (issuer, audience, subject, etc.) can be added here
},
// Token and session lifespan configuration
accessTokenLifespan: 30 * 60, // 30 minutes
maxRefreshTokenLifespan: 30 * 24 * 60 * 60, // 30 days
idleRefreshTokenLifespan: 14 * 24 * 60 * 60, // 14 days
maxSessionLifespan: 24 * 60 * 60, // 1 day
idleSessionLifespan: 2 * 60 * 60, // 2 hours
},
},
apiToken: {
salt: env('API_TOKEN_SALT', 'example-salt'),
},
auditLogs: {
enabled: env.bool('AUDIT_LOGS_ENABLED', true),
},
transfer: {
token: {
salt: env('TRANSFER_TOKEN_SALT', 'example-salt'),
},
},
secrets: {
encryptionKey: env('ENCRYPTION_KEY', 'example-key'),
},
flags: {
nps: env.bool('FLAG_NPS', true),
promoteEE: env.bool('FLAG_PROMOTE_EE', true),
docLinks: env.bool('FLAG_DOC_LINKS', true),
},
preview: {
enabled: env.bool('PREVIEW_ENABLED', true),
config: {
handler: (uid, { documentId, locale, status }) => {
const contentType = strapi.contentType(uid);
const kind = contentType.kind === 'collectionType' ? 'collection-types' : 'single-types';
const apiName =
contentType.kind === 'collectionType'
? contentType.info.pluralName
: contentType.info.singularName;
return `/admin/preview/${kind}/${apiName}/${documentId}/${locale}/${status}`;
},
},
},
ai: {
enabled: true,
},
});