389 Commits
Author SHA1 Message Date
markkaylor d31768cb7e chore(upload): remove aiMetadataJobsCleanup cron job (#26442)
chore(upload): remove aiMetadataJobsCleanup cron job
2026-05-27 09:52:02 +02:00
Andrei L b5452ab89f chore(eslint): migrate .eslintrc + .eslintignore to .eslintrc.cjs (#26216)
* chore(eslint): migrate .eslintrc + .eslintignore to .eslintrc.cjs

Consolidates the per-package ESLint setup into a single typed
`.eslintrc.cjs` file across the monorepo (177 files touched).

Why
- `.eslintignore` is removed in ESLint v9/v10. Folding ignore patterns
  into `ignorePatterns` inside the rc file is the supported migration
  path and unblocks future ESLint upgrades (which will likely be needed
  alongside the in-flight TypeScript 6 migration).
- `.cjs` extension is explicit about module format, so the configs keep
  working if any package later adopts `"type": "module"` (no CJS/ESM
  surprises).
- Wrapping each config in `// @ts-check` + a `Linter.Config`-typed
  `const config` block gives editor autocomplete and catches typos.
  Surfaced two real duplicates in
  `eslint-config-custom/back/typescript.js`
  (`node/no-unsupported-features/es-syntax`,
  `node/no-missing-import`), now deduplicated.
- `extends` references switched from the `custom/*` shorthand to the
  explicit `eslint-config-custom/*` package name. ESLint resolves both,
  but the explicit form makes the source unambiguous.
- Added `coverage/` to `ignorePatterns` so coverage output produced
  inside a workspace is not linted.

Misc
- `examples/kitchensink` had ESLint configured but no `lint` script;
  added one so the config actually runs.
- `nx.json` hash inputs updated:
  - removed `.eslintignore` (no longer exists)
  - replaced `{projectRoot}/.eslintrc.js` with
    `{projectRoot}/**/.eslintrc.cjs` so nested package configs are also
    part of the cache key (the previous glob missed them).
- `packages/utils/upgrade/tsconfig.eslint.json` include path updated
  from `.eslintrc.js` to `.eslintrc.cjs`.

Verification
- `eslint --print-config` resolves cleanly on sampled back/front
  packages (admin, users-permissions, upload).
- Full `pnpm -r lint` is clean.

* chore(eslint): set tsconfigRootDir for vscode-eslint typed linting

CLI lint resolved tsconfig paths via cwd, but vscode-eslint runs from
the workspace root and could not locate per-package tsconfigs. Set
parserOptions.tsconfigRootDir to __dirname in each package's
.eslintrc.cjs so the editor resolves typed-lint configs correctly.

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

* chore(eslint): self-ignore configs, scope coverage to jest packages

- Replace `env: { es6: true }` workaround with `.eslintrc.cjs` in
  ignorePatterns so eslint never lints the config file itself
  (root cause of the "const is not a keyword" parse error in es5)
- Add `.eslintrc.cjs` to ignorePatterns across all configs that
  were missing it
- Restrict `coverage/` ignorePatterns to workspace roots that
  actually run jest; drop from non-test packages and admin/server
  subdir configs (tests run from the workspace root)
2026-05-12 07:32:12 +00:00
markkaylorandBen Irvin c06b10cad4 chore(upload): add concurrentUploadSize config (#26053)
Co-authored-by: Ben Irvin <ben@innerdvations.com>
2026-05-11 14:18:57 +02:00
markkaylorandBen Irvin 403491df80 fix(upload): sharp concurrency and cache leads to OOM (#26046)
Co-authored-by: Ben Irvin <ben@innerdvations.com>
2026-04-29 10:01:23 +02:00
markkaylor 7f17643db5 fix(upload): content-api does not return signed urls (#26034) 2026-04-17 10:17:51 +02:00
Nico André bc0b0e9449 feat(core/*): introduce strapi.ai namespace (#25886) 2026-04-17 08:46:33 +02:00
Ben Irvin 38049559a0 fix: use strapi.fetch for remote uploads (#25661) 2026-03-18 12:34:39 +01:00
Ben Irvin 484b494b02 security(upload): improve mimetype detection for uploads (#25177) 2026-03-04 10:39:09 +01:00
markkaylor c1b52ed675 chore(upload): add import from url (#25496) 2026-02-27 09:33:24 +01:00
Ben Irvin 79a590a581 security(feat): add strictParam, addQueryParams, addBodyParams (#25528) 2026-02-24 13:51:33 +01:00
markkaylor e5475e965e future(upload): add upload progress dialog (#25378) 2026-02-13 15:23:15 +01:00
Schero D. 0fa379f225 feat(upload): add focal point picker for images (#25267) 2026-01-30 10:10:05 +01:00
markkaylor 732dcee636 feat(upload): add retroactive ai metadata generation (#25066) 2026-01-23 16:54:40 +01:00
markkaylor 8bcbfc344d fix(upload): content-api does not check file type restriction config (#25167) 2026-01-13 09:43:58 +01:00
Nico André ea7b84e4df fix(core/upload): rollback file name to string (#25004) 2025-12-09 10:36:44 +00:00
DMehaffy d6c899e30a fix: change several file field types from string to text (#24931) 2025-12-05 15:00:11 +01:00
markkaylor 4310e958c5 chore(admin): isolate ai apis to ee folder (#24834) 2025-11-20 11:01:48 +01:00
markkaylor 70ef79ae70 fix(upload): file-type does not support commonjs (#24848) 2025-11-14 15:26:05 +01:00
Bassel Kanso 19187c080b chore: add support for node 24 (#24586) 2025-11-10 14:35:56 +02:00
Araksya Gevorgyan ce8ed0c8aa feat(upload): upload file type restriction (#24573)
feat(upload): upload file type restriction
2025-11-04 16:41:22 +01:00
markkaylor cababa5cb1 chore: update ai tracking events (#24758) 2025-11-03 15:13:11 +01:00
markkaylor 88e2effa81 chore(upload): add isAIMediaLibraryConfigured to every tracking event (#24671) 2025-10-24 17:10:32 +02:00
Araksya Gevorgyan 84c7138193 feat(upload): fixing ordering issue (#24554)
feat(upload): fixing ordering issue
2025-10-14 14:50:24 +02:00
markkaylor 14544b7e46 chore(upload): track ai usage (#24552) 2025-10-13 16:42:47 +02:00
Rémi de Juvigny 593477f7fc fix(upload): use absolute server url for file url (#24522) 2025-10-07 10:55:55 -04:00
+3 5e751dbf11 feat: ai generated image metadata (#24422)
* feat: chat

feat: apply changes
feat: integrate with ctb

feat: marker

chore: remove comment

feat: new chat

feat: copy message

feat: upload modal

feat: upload file

feat: errors and stop chat

chore: refactor transforms
chore: format relations

chore: chat title

chore: remove architect dependency

feat: empt state

chore: improve text area focus

* feat: chat imports

feat: resizable text area
fix: re add chat
chore: translations
feat: env vars

fix: minor chat issues

feat: feedback

fix: rebase

feat: import folder

feat: limits

feat: attachments dropzone

chore: file attachments cleanup
chore: track chat id

feat: figma import

fix :token

feat: figma token
fix: attribute status when chat makes updates

feat: image upload

* feat: staging integration

* chore: remove logs

* feat: use tool call result instead of annotation

* fix: invalid component uid

* chore: chat input focus ring

* fix: ui issues

* fix: default draft and publish and do not modify singular name

* fix: minor transforms

* fix: linting

* test(front): update snapshots

* chore: fix misplaced getstarted project schema

* chore: remove unused import

* security: validate exact path of host

* fix: define process better for playwright to work

* fix: process env in vite config for playwright

* chore: use production url

* feat(ctb): Tracking events for AI Chat interaction (#23731)

* feat(content-type-builder): WIP tracking events for chat interactions

* fix: typescript build errors

* fix: event name and build errors

* chore: send ai key with analytics

* chore: actually send licenseKey

* chore: send ailicensekey with groupproperties

* fix: didStartNewChat

* chore: track new chats

* feat: enhance attachment type management in AI chat components

* fix: update chat status handling in ChatProvider component

* feat: add optional aiLicenseKey to Strapi interface

---------

Co-authored-by: Jamie Howard <jhoward1994@gmail.com>

* refactor: remove didusersendmessage tracking event (#23777)

* fix: merge conflict

* fix: send projectId to AI server

* feat: add a enabled config for AI features (#24060)

* feat: add getAiToken endpoint (#24172)

* feat: add getAiToken route

* fix: change route name, remove project id

* fix: type issue and fix schema

* feat: retrieve ai token from frontend (#24226)

---------

Co-authored-by: Jamie Howard <jhoward1994@gmail.com>

* fix: use primary500 for links in ai chat

* chore: migrate to AI SDK v5 (#24252)

* fix: migrate code for v5

* t:wq

* feat: push schemas to ctb

* chore: remove old code

* chore: remove ts-no-check

* chore: fix comment

* fix: ai server logs (#24318)

* test(back): fix error log tests

---------

Co-authored-by: Marc Roig <marc12info@gmail.com>

* fix: configure ai ctb csp middleware without overriding user or default config

* future(upload): generate image metadata on file upload (#24365)

* chore: create aiMetadata service with isEnabled

* chore: extract getAiToken to service

* fix: unit test

* future(upload): generate metadata with ai

* fix: ts build

* fix: only send images to ai server

* test: add unit tests

* fix: unit test

---------

Co-authored-by: markkaylor <mark.kaylor@strapi.io>

* AI media lib bulk update (#24414)

* feat(packages): adding endpoint for bulk update

* feat(packages): linting

* feat(packages): adding tests

* feat(packages): cleanup

* feat: guided tour for ai ctb (#24411)

* feat(upload): adding aiMetadata into settings (#24468)

feat(upload): adding aiMetadata into settings

* feat: add AI upload modal (#24407)

* chore: create aiMetadata service with isEnabled

* chore: extract getAiToken to service

* fix: unit test

* future(upload): generate metadata with ai

* feat: add AI upload modal

* feat: add edit and delete to upload modal

* fix: remove sparkle icon on edit

* fix: add error handling

* chore: refactor ai upload modal reducer

* fix: catch ai token generation error

* chore: add useBulkEdit hook

* feat: connect to bulk edit endpoint

* fix: e2e test

* fix: ci in both ce and ee

---------

Co-authored-by: Rémi de Juvigny <remi.dejuvigny@strapi.io>
Co-authored-by: Rémi de Juvigny <8087692+remidej@users.noreply.github.com>

* feat(upload): applying ai enabled logic for media library (#24486)

feat(upload): applying ai enabled logic for media library

* fix: sparkle icon

* fix: set ai server prod url

* fix: default config to enabled

* fix: cursor moving to the end when editing text

* fix: upload in the right folder

* fix: close modal when deleting last item

* chore: use STRAPI_AI_URL everywhere

* fix: bulk upload from frontend

* fix: restore sparkle icon on inputs

* fix: unit test ci

* feat(upload): generating metadata from thumbnail (#24515)

* feat(upload): generating metadata from thumbnail

* feat(upload): fixing linting issue

* feat(upload): fixing tests and addressiing feedback

* feat(upload): fixing lint

* fix: check for cms-ai entitlement

* fix: tests

* fix: race condition failing front unit tests

---------

Co-authored-by: Marc-Roig <marc12info@gmail.com>
Co-authored-by: Ben Irvin <ben@innerdvations.com>
Co-authored-by: Bassel Kanso <bassel.kanso@strapi.io>
Co-authored-by: Ben Irvin <ben.irvin@strapi.io>
Co-authored-by: Jamie Howard <jhoward1994@gmail.com>
Co-authored-by: Jamie Howard <48524071+jhoward1994@users.noreply.github.com>
Co-authored-by: Bassel Kanso <basselkanso82@gmail.com>
Co-authored-by: Ziyi <daydreamnation@live.com>
Co-authored-by: markkaylor <mark.kaylor@strapi.io>
Co-authored-by: Araksya Gevorgyan <31159659+araksyagevorgyan@users.noreply.github.com>
Co-authored-by: Adrien L <thewebsdoor@gmail.com>
2025-10-07 06:14:34 -04:00
Jamie HowardandZiyi Yuan e5d4b412da Fix plugin content-api route extensions (#24147)
* fix: content-api route extension for i18n and users-permissions

* refactor: simplify tests to catch breaking change

* test: cli for openapi plugin routes

* refactor: implement createcontentapiroutesfactory for content-api routes across multiple packages

* fix: more accurate message

* chore: formatting

* chore: cleanup backward compatibility tests

---------

Co-authored-by: Ziyi Yuan <daydreamnation@live.com>
2025-08-18 12:28:39 +01:00
7af2e99241 Add new @strapi/openapi package (#24024)
* chore(openapi): add new @strapi/openapi package with initial setup (#23173)

* enhancement(openapi): add routes collection (#23182)

* chore(openapi): add new @strapi/openapi package with initial setup and configuration

* fix: lint the test folder

* chore(openapi): add coverage/ to .eslintignore for better linting exclusion

* test(openapi): update Jest config with refined test paths and coverage

* chore: remove unused test and update openapi dependencies

* feat(openapi): add route providers, collector, and matcher

* test(openapi): add unit tests for route matching and providers

* fix: make the AbstractRoutesProvider constructor public

* chore: update test paths and imports to simplify structure

* test: update route provider tests to use dynamic fixture lengths

* feat: add basic openapi document generation (#23365)

* chore: update openapi dependencies

* feat(openapi): advanced schema generation (#23467)

* chore: rename openapi:generate CLI command to openapi generate (#23610)

* chore(openapi): add experimental warning message for OpenAPI generation feature (#23608)

Co-authored-by: Jamie Howard <jhoward1994@gmail.com>

* chore: update OpenAPI types to OpenAPIV3_1 across the codebase (#23609)

* chore: merge origin/develop

* chore: update zod dependency from beta version to 3.25.67 across the codebase using zod/v4 where needed

* fix(strapi): add output option for openapi generation command (#23849)

* feat(core): add uid transformation utility for openapi compliant names (#23833)

* feat(core): add uid transformation utility for openapi compliant names

* chore: version openapi to 5.16.1

* chore(core): update uid parameter to use internal types

* fix(core): simplify global registry check

* fix(core): remove unnecessary type assertion

* fix(core): add type assertions in validation attributes

* fix(core): remove unused import

* chore: update @strapi/openapi to 5.18.1

* Add zod schema validation to content api routes (#23886)

* feat(i18n): zod validation for locale content api routes

* feat(email): integrate zod for email content api routes

* feat(upload): wip partial zod route validation

* feat: add validation for upload and ctb content api routes (#23924)

* feat: add validation for content API routes and upload

* fix: fix linting errors and prettier error

* fix: add missing schemas

* chore(content-type-builder): more accurate zod descriptions

* Centralise AbstractRouteValidator to strapi utils (#23962)

* chore(utils): centralise abstractroutevalidator in utils for package use and schema aware extension in strapi core

* chore(core): update query parameter transformer usage in convert-query-params tests

* feat(core): enhance schema validation error handling and logging

* fix: revert incorrect changes

---------

Co-authored-by: Jamie Howard <jhoward1994@gmail.com>
Co-authored-by: Jamie Howard <48524071+jhoward1994@users.noreply.github.com>

* feat(users-permissions): zod schemas for content-api routes (#23997)

* feat(users-permissions): zod schemas for content-api routes

* fix(users-permissions): formatting

* chore: include content type for API route request body

---------

Co-authored-by: Ziyi <ziyi.yuan@strapi.io>

* chore: minor clean up

---------

Co-authored-by: Jean-Sébastien Herbaux <jean-sebastien.herbaux@epitech.eu>
Co-authored-by: Ziyi <ziyi.yuan@strapi.io>
2025-07-28 12:02:09 +01:00
Rémi de Juvigny 68883a121b fix: sign file URLs in upload service and in graphql (#23834)
* fix: add URL signing support for media files in upload service and GraphQL resolvers

* fix: graphql api test

* fix: graphql association

* chore: remove unnecessary tests

* fix: sign when querying media files directly

* chore: removed signedData

* fix: backend ci

* fix: pr feedback

* fix: signed images not loading in media input

* fix: make gql unit test pass ci

* chore: move rawData
2025-07-15 12:16:33 -04:00
Alexandre BODIN 9e6d59bbf9 Merge branch 'develop' into feature/generate-file-name 2025-06-06 09:00:38 +02:00
Laurens Kling 9c04fd0da8 chore: create strapi mock for test 2025-06-05 19:33:15 +02:00
Laurens Kling 7de63df3ae chore: move generateFileName to image-manipulation to allow overriding 2025-06-04 19:40:09 +02:00
Marc-Roig 08528cceda fix: run cronjobs closer to app start 2025-03-17 19:49:40 +01:00
Alexandre Bodin cffeb3f30b chore: touch ups 2025-01-28 19:17:55 +01:00
Alexandre Bodin 92055a7fb1 chore: use rollup
chore: fetch template only if name matches name convention

chore: linting

chore: fix tests

chore: fix npm scripts

test: try to fix test
2025-01-23 16:28:23 +01:00
Alexandre BODIN 55dabf6295 Merge pull request #21407 from strapi/chore/fixInternalCronTasks
enhancement: change all internal cron tasks to named tasks
2024-09-24 17:22:20 +02:00
Simone c7b2b2abcc chore: migrate media-library initial setup (#21375)
* chore: migrate and create config files for the migration

* chore: migrate test utils to TS

* chore: fix the typo

* chore: fix eslint errors

* chore: fix prettier error
2024-09-24 11:01:14 +02:00
Derrick Mehaffy 6e4ffcae2c chore: change all internal cron tasks to named tasks 2024-09-20 21:06:51 -07:00
Marc Roig ae299ee651 feat: Private s3 buckets (#20861)
* feat: sign media files

* fix: bootstrap test
2024-07-23 09:40:57 +02:00
Mark Kaylor 94657d7e77 Merge branch 'develop' of github.com:strapi/strapi into chore/merge-develop-to-v5-main 2024-06-06 17:03:30 +02:00
Jean-Sébastien HerbauxandBen Irvin adb9db5660 Fix: Query Validation in Files' Admin API (#20389)
Co-authored-by: Ben Irvin <ben.irvin@strapi.io>
2024-06-05 15:47:11 +02:00
Convly 33413bf56c fix: style 2024-05-30 13:34:00 +02:00
Convly 481550a0d4 Merge branch 'refs/heads/develop' into v5/main
# Conflicts:
#	.github/actions/check-pr-status/package.json
#	docs/docs/docs/01-core/admin/05-features/authentication.md
#	docs/docusaurus.config.js
#	docs/yarn.lock
#	examples/getstarted/package.json
#	examples/kitchensink-ts/package.json
#	examples/kitchensink/package.json
#	examples/plugins/workspace-plugin/package.json
#	lerna.json
#	package.json
#	packages/admin-test-utils/package.json
#	packages/cli/create-strapi-app/package.json
#	packages/cli/create-strapi-starter/package.json
#	packages/cli/create-strapi/package.json
#	packages/core/admin/admin/src/App.tsx
#	packages/core/admin/admin/src/components/AuthenticatedApp.tsx
#	packages/core/admin/admin/src/components/Context.tsx
#	packages/core/admin/admin/src/components/LeftMenu.tsx
#	packages/core/admin/admin/src/components/PrivateRoute.tsx
#	packages/core/admin/admin/src/content-manager/pages/ListSettingsView/index.jsx
#	packages/core/admin/admin/src/content-manager/pages/ListView/components/BulkActions/PublishAction.tsx
#	packages/core/admin/admin/src/content-manager/pages/ListView/components/TableCells/CellContent.tsx
#	packages/core/admin/admin/src/features/Configuration.tsx
#	packages/core/admin/admin/src/index.ts
#	packages/core/admin/admin/src/pages/ProfilePage.tsx
#	packages/core/admin/admin/src/pages/UseCasePage.tsx
#	packages/core/admin/ee/server/src/services/metrics.ts
#	packages/core/admin/package.json
#	packages/core/admin/server/src/bootstrap.ts
#	packages/core/content-manager/package.json
#	packages/core/content-releases/admin/src/components/CMReleasesContainer.tsx
#	packages/core/content-releases/admin/src/components/ReleaseListCell.tsx
#	packages/core/content-releases/admin/src/index.ts
#	packages/core/content-releases/admin/src/pages/ReleaseDetailsPage.tsx
#	packages/core/content-releases/admin/src/pages/tests/ReleaseDetailsPage.test.tsx
#	packages/core/content-releases/admin/src/services/release.ts
#	packages/core/content-releases/package.json
#	packages/core/content-releases/server/src/controllers/release.ts
#	packages/core/content-type-builder/package.json
#	packages/core/core/.gitignore
#	packages/core/data-transfer/package.json
#	packages/core/database/package.json
#	packages/core/database/src/query/helpers/populate/apply.ts
#	packages/core/email/package.json
#	packages/core/helper-plugin/package.json
#	packages/core/permissions/package.json
#	packages/core/strapi/package.json
#	packages/core/types/package.json
#	packages/core/upload/admin/src/components/AssetDialog/BrowseStep/tests/__snapshots__/index.test.jsx.snap
#	packages/core/upload/admin/src/pages/App/ConfigureTheView/components/tests/__snapshots__/Settings.test.jsx.snap
#	packages/core/upload/admin/src/pages/App/ConfigureTheView/tests/__snapshots__/ConfigureTheView.test.jsx.snap
#	packages/core/upload/package.json
#	packages/core/upload/server/services/provider.js
#	packages/core/upload/server/services/upload.js
#	packages/core/upload/server/src/services/image-manipulation.ts
#	packages/core/upload/server/tsconfig.eslint.json
#	packages/core/utils/package.json
#	packages/generators/app/package.json
#	packages/generators/app/src/utils/db-client-dependencies.ts
#	packages/generators/generators/package.json
#	packages/plugins/cloud/package.json
#	packages/plugins/color-picker/package.json
#	packages/plugins/documentation/package.json
#	packages/plugins/graphql/package.json
#	packages/plugins/i18n/admin/src/components/LocaleListCell.tsx
#	packages/plugins/i18n/admin/src/contentReleasesHooks/releaseDetailsView.ts
#	packages/plugins/i18n/admin/src/index.ts
#	packages/plugins/i18n/package.json
#	packages/plugins/sentry/package.json
#	packages/plugins/users-permissions/package.json
#	packages/providers/email-amazon-ses/package.json
#	packages/providers/email-mailgun/package.json
#	packages/providers/email-nodemailer/package.json
#	packages/providers/email-sendgrid/package.json
#	packages/providers/email-sendmail/package.json
#	packages/providers/upload-aws-s3/package.json
#	packages/providers/upload-cloudinary/package.json
#	packages/providers/upload-local/package.json
#	packages/utils/api-tests/package.json
#	packages/utils/eslint-config-custom/package.json
#	packages/utils/logger/package.json
#	packages/utils/tsconfig/package.json
#	packages/utils/typescript/package.json
#	packages/utils/upgrade/LICENSE
#	packages/utils/upgrade/bin/upgrade.js
#	packages/utils/upgrade/package.json
#	packages/utils/upgrade/packup.config.ts
#	scripts/front/package.json
#	tests/e2e/constants.ts
#	tests/e2e/tests/content-releases/releases-page.spec.ts
#	yarn.lock
2024-05-30 13:12:27 +02:00
Ben IrvinandJean-Sébastien Herbaux 7a6d9a2b0e enhancement!: validate input in content API create and update controllers
Co-authored-by: Jean-Sébastien Herbaux <Convly@users.noreply.github.com>
2024-05-07 11:22:22 +02:00
Alexandre BODINandDMehaffy 0742c5784d enhancement: use file path in place of streams to optimize sharp fragmentation & libvips caching (#20080)
Co-authored-by: DMehaffy <derrickmehaffy@gmail.com>
2024-04-17 16:27:48 +02:00
Ben Irvin 18019758d6 enhancement!: create sends 201 status code 2024-04-15 14:03:47 +02:00
JoshandBen Irvin bc71a96d76 chore(pack-up): remove from monorepo (v5) (#20092)
* chore(pack-up): remove from repo

* chore: type fixes

* chore: add suggestions to tighten types

Co-authored-by: Ben Irvin <ben.irvin@strapi.io>

---------

Co-authored-by: Ben Irvin <ben.irvin@strapi.io>
2024-04-12 13:39:49 +01:00
Alexandre Bodin bf35cde68f chore: update koa-body 2024-04-03 22:48:48 +02:00
Alexandre Bodin 55ae34e5dc chore: introduce providers to simplify main class 2024-04-03 14:24:15 +02:00
Alexandre Bodin eb61511884 chore: use strapi.service instead of strapi.admin.services 2024-04-03 14:24:15 +02:00