Merge branch 'releases/4.7.1-hotfix'

This commit is contained in:
Alexandre Bodin 2023-03-02 10:25:29 +01:00
commit 435362adab
45 changed files with 119 additions and 116 deletions

View File

@ -1,6 +1,6 @@
{
"name": "check-pr-status",
"version": "4.7.0",
"version": "4.7.1",
"main": "dist/index.js",
"license": "MIT",
"private": true,

View File

@ -1,7 +1,7 @@
{
"name": "getstarted",
"private": true,
"version": "4.7.0",
"version": "4.7.1",
"description": "A Strapi application.",
"scripts": {
"develop": "strapi develop",
@ -12,16 +12,16 @@
"strapi": "strapi"
},
"dependencies": {
"@strapi/plugin-color-picker": "4.7.0",
"@strapi/plugin-documentation": "4.7.0",
"@strapi/plugin-graphql": "4.7.0",
"@strapi/plugin-i18n": "4.7.0",
"@strapi/plugin-sentry": "4.7.0",
"@strapi/plugin-users-permissions": "4.7.0",
"@strapi/provider-email-mailgun": "4.7.0",
"@strapi/provider-upload-aws-s3": "4.7.0",
"@strapi/provider-upload-cloudinary": "4.7.0",
"@strapi/strapi": "4.7.0",
"@strapi/plugin-color-picker": "4.7.1",
"@strapi/plugin-documentation": "4.7.1",
"@strapi/plugin-graphql": "4.7.1",
"@strapi/plugin-i18n": "4.7.1",
"@strapi/plugin-sentry": "4.7.1",
"@strapi/plugin-users-permissions": "4.7.1",
"@strapi/provider-email-mailgun": "4.7.1",
"@strapi/provider-upload-aws-s3": "4.7.1",
"@strapi/provider-upload-cloudinary": "4.7.1",
"@strapi/strapi": "4.7.1",
"@vscode/sqlite3": "5.0.8",
"better-sqlite3": "8.0.1",
"lodash": "4.17.21",

View File

@ -1,7 +1,7 @@
{
"name": "kitchensink-ts",
"private": true,
"version": "4.7.0",
"version": "4.7.1",
"description": "A Strapi application",
"scripts": {
"develop": "strapi develop",
@ -10,9 +10,9 @@
"strapi": "strapi"
},
"dependencies": {
"@strapi/plugin-i18n": "4.7.0",
"@strapi/plugin-users-permissions": "4.7.0",
"@strapi/strapi": "4.7.0",
"@strapi/plugin-i18n": "4.7.1",
"@strapi/plugin-users-permissions": "4.7.1",
"@strapi/strapi": "4.7.1",
"better-sqlite3": "8.0.1"
},
"author": {

View File

@ -1,7 +1,7 @@
{
"name": "kitchensink",
"private": true,
"version": "4.7.0",
"version": "4.7.1",
"description": "A Strapi application.",
"scripts": {
"develop": "strapi develop",
@ -12,10 +12,10 @@
"strapi": "strapi"
},
"dependencies": {
"@strapi/provider-email-mailgun": "4.7.0",
"@strapi/provider-upload-aws-s3": "4.7.0",
"@strapi/provider-upload-cloudinary": "4.7.0",
"@strapi/strapi": "4.7.0",
"@strapi/provider-email-mailgun": "4.7.1",
"@strapi/provider-upload-aws-s3": "4.7.1",
"@strapi/provider-upload-cloudinary": "4.7.1",
"@strapi/strapi": "4.7.1",
"lodash": "4.17.21",
"mysql": "2.18.1",
"passport-google-oauth2": "0.2.0",

View File

@ -1,5 +1,5 @@
{
"version": "4.7.0",
"version": "4.7.1",
"packages": [
"packages/*",
"examples/*"

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/admin-test-utils",
"version": "4.7.0",
"version": "4.7.1",
"private": true,
"description": "Test utilities for the Strapi administration panel",
"license": "MIT",

View File

@ -1,9 +1,9 @@
{
"name": "create-strapi-app",
"version": "4.7.0",
"version": "4.7.1",
"description": "Generate a new Strapi application.",
"dependencies": {
"@strapi/generate-new": "4.7.0",
"@strapi/generate-new": "4.7.1",
"commander": "8.3.0",
"inquirer": "8.2.5"
},

View File

@ -1,6 +1,6 @@
{
"name": "create-strapi-starter",
"version": "4.7.0",
"version": "4.7.1",
"description": "Generate a new Strapi application.",
"keywords": [
"create-strapi-starter",
@ -38,7 +38,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/generate-new": "4.7.0",
"@strapi/generate-new": "4.7.1",
"chalk": "4.1.1",
"ci-info": "3.5.0",
"commander": "8.3.0",

View File

@ -7,6 +7,7 @@ import { useEffect } from 'react';
import { useIntl } from 'react-intl';
import { useLocation } from 'react-router';
import { useNotification } from '@strapi/helper-plugin';
import isNil from 'lodash/isNil';
import useLicenseLimits from '../useLicenseLimits';
const STORAGE_KEY_PREFIX = 'strapi-notification-seat-limit';
@ -29,7 +30,7 @@ const useLicenseLimitNotification = () => {
license?.data ?? {};
const shouldDisplayNotification =
permittedSeats &&
!isNil(permittedSeats) &&
!window.sessionStorage.getItem(`${STORAGE_KEY_PREFIX}-${pathname}`) &&
(licenseLimitStatus === 'AT_LIMIT' || licenseLimitStatus === 'OVER_LIMIT');

View File

@ -3,6 +3,7 @@ import { useIntl } from 'react-intl';
import PropTypes from 'prop-types';
import { Stack, Button, Tooltip, Icon } from '@strapi/design-system';
import { Envelop, ExclamationMarkCircle } from '@strapi/icons';
import isNil from 'lodash/isNil';
import { useLicenseLimits } from '../../../../../../hooks';
const CreateAction = ({ onClick }) => {
@ -12,7 +13,7 @@ const CreateAction = ({ onClick }) => {
return (
<Stack spacing={2} horizontal>
{permittedSeats && shouldStopCreate && (
{!isNil(permittedSeats) && shouldStopCreate && (
<Tooltip
description={formatMessage({
id: 'Settings.application.admin-seats.at-limit-tooltip',

View File

@ -1,5 +1,6 @@
'use strict';
const { isNil } = require('lodash/fp');
// eslint-disable-next-line node/no-extraneous-require
const ee = require('@strapi/strapi/lib/utils/ee');
const { env } = require('@strapi/utils');
@ -23,12 +24,12 @@ module.exports = {
enforcementUserCount = currentActiveUserCount;
}
if (enforcementUserCount > permittedSeats) {
if (!isNil(permittedSeats) && enforcementUserCount > permittedSeats) {
shouldNotify = true;
licenseLimitStatus = 'OVER_LIMIT';
}
if (enforcementUserCount === permittedSeats) {
if (!isNil(permittedSeats) && enforcementUserCount === permittedSeats) {
shouldNotify = true;
licenseLimitStatus = 'AT_LIMIT';
}
@ -38,7 +39,7 @@ module.exports = {
currentActiveUserCount,
permittedSeats,
shouldNotify,
shouldStopCreate: currentActiveUserCount >= permittedSeats,
shouldStopCreate: isNil(permittedSeats) ? false : currentActiveUserCount >= permittedSeats,
licenseLimitStatus,
isHostedOnStrapiCloud: env('STRAPI_HOSTING', null) === 'strapi.cloud',
};

View File

@ -3,7 +3,7 @@
// eslint-disable-next-line node/no-extraneous-require
const ee = require('@strapi/strapi/lib/utils/ee');
const _ = require('lodash');
const { pick } = require('lodash/fp');
const { pick, isNil } = require('lodash/fp');
const { ApplicationError, ForbiddenError } = require('@strapi/utils').errors;
const { validateUserCreationInput } = require('../validation/user');
const {
@ -20,7 +20,7 @@ const hasAdminSeatsAvaialble = async () => {
}
const permittedSeats = ee.seats;
if (!permittedSeats) {
if (isNil(permittedSeats)) {
return true;
}

View File

@ -2,7 +2,7 @@
// eslint-disable-next-line node/no-extraneous-require
const ee = require('@strapi/strapi/lib/utils/ee');
const { take, drop, map, prop, pick, reverse } = require('lodash/fp');
const { take, drop, map, prop, pick, reverse, isNil } = require('lodash/fp');
const { getService } = require('../../../server/utils');
const { SUPER_ADMIN_CODE } = require('../../../server/services/constants');
@ -90,7 +90,7 @@ const syncDisabledUserRecords = async () => {
const seatEnforcementWorkflow = async () => {
const adminSeats = ee.seats;
if (!adminSeats) {
if (isNil(adminSeats)) {
return;
}

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/admin",
"version": "4.7.0",
"version": "4.7.1",
"description": "Strapi Admin",
"repository": {
"type": "git",
@ -46,15 +46,15 @@
"@casl/ability": "^5.4.3",
"@fingerprintjs/fingerprintjs": "3.3.6",
"@pmmmwh/react-refresh-webpack-plugin": "0.5.10",
"@strapi/babel-plugin-switch-ee-ce": "4.7.0",
"@strapi/data-transfer": "4.7.0",
"@strapi/babel-plugin-switch-ee-ce": "4.7.1",
"@strapi/data-transfer": "4.7.1",
"@strapi/design-system": "1.6.3",
"@strapi/helper-plugin": "4.7.0",
"@strapi/helper-plugin": "4.7.1",
"@strapi/icons": "1.6.3",
"@strapi/permissions": "4.7.0",
"@strapi/provider-audit-logs-local": "4.7.0",
"@strapi/typescript-utils": "4.7.0",
"@strapi/utils": "4.7.0",
"@strapi/permissions": "4.7.1",
"@strapi/provider-audit-logs-local": "4.7.1",
"@strapi/typescript-utils": "4.7.1",
"@strapi/utils": "4.7.1",
"axios": "1.2.2",
"babel-loader": "^9.1.2",
"babel-plugin-styled-components": "2.0.2",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-content-manager",
"version": "4.7.0",
"version": "4.7.1",
"description": "A powerful UI to easily manage your data.",
"repository": {
"type": "git",
@ -24,7 +24,7 @@
},
"dependencies": {
"@sindresorhus/slugify": "1.1.0",
"@strapi/utils": "4.7.0",
"@strapi/utils": "4.7.1",
"lodash": "4.17.21"
},
"engines": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-content-type-builder",
"version": "4.7.0",
"version": "4.7.1",
"description": "Strapi plugin to create content type",
"repository": {
"type": "git",
@ -28,9 +28,9 @@
},
"dependencies": {
"@sindresorhus/slugify": "1.1.0",
"@strapi/generators": "4.7.0",
"@strapi/helper-plugin": "4.7.0",
"@strapi/utils": "4.7.0",
"@strapi/generators": "4.7.1",
"@strapi/helper-plugin": "4.7.1",
"@strapi/utils": "4.7.1",
"fs-extra": "10.0.0",
"lodash": "4.17.21",
"pluralize": "^8.0.0",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/data-transfer",
"version": "4.7.0",
"version": "4.7.1",
"description": "Data transfer capabilities for Strapi",
"keywords": [
"strapi",
@ -39,8 +39,8 @@
"lib": "./lib"
},
"dependencies": {
"@strapi/logger": "4.7.0",
"@strapi/strapi": "4.7.0",
"@strapi/logger": "4.7.1",
"@strapi/strapi": "4.7.1",
"chalk": "4.1.2",
"fs-extra": "10.0.0",
"lodash": "4.17.21",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/database",
"version": "4.7.0",
"version": "4.7.1",
"description": "Strapi's database layer",
"homepage": "https://strapi.io",
"bugs": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-email",
"version": "4.7.0",
"version": "4.7.1",
"description": "Easily configure your Strapi application to send emails.",
"repository": {
"type": "git",
@ -26,12 +26,12 @@
"test:front:watch:ce": "cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll"
},
"dependencies": {
"@strapi/provider-email-sendmail": "4.7.0",
"@strapi/utils": "4.7.0",
"@strapi/provider-email-sendmail": "4.7.1",
"@strapi/utils": "4.7.1",
"lodash": "4.17.21"
},
"devDependencies": {
"@strapi/helper-plugin": "4.7.0",
"@strapi/helper-plugin": "4.7.1",
"@testing-library/react": "12.1.4"
},
"engines": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/helper-plugin",
"version": "4.7.0",
"version": "4.7.1",
"description": "Helper for Strapi plugins development",
"repository": {
"type": "git",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/permissions",
"version": "4.7.0",
"version": "4.7.1",
"description": "Strapi's permission layer.",
"repository": {
"type": "git",
@ -25,7 +25,7 @@
},
"dependencies": {
"@casl/ability": "5.4.4",
"@strapi/utils": "4.7.0",
"@strapi/utils": "4.7.1",
"lodash": "4.17.21",
"sift": "16.0.0"
},

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/strapi",
"version": "4.7.0",
"version": "4.7.1",
"description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite",
"keywords": [
"strapi",
@ -81,19 +81,19 @@
"dependencies": {
"@koa/cors": "3.4.3",
"@koa/router": "10.1.1",
"@strapi/admin": "4.7.0",
"@strapi/data-transfer": "4.7.0",
"@strapi/database": "4.7.0",
"@strapi/generate-new": "4.7.0",
"@strapi/generators": "4.7.0",
"@strapi/logger": "4.7.0",
"@strapi/permissions": "4.7.0",
"@strapi/plugin-content-manager": "4.7.0",
"@strapi/plugin-content-type-builder": "4.7.0",
"@strapi/plugin-email": "4.7.0",
"@strapi/plugin-upload": "4.7.0",
"@strapi/typescript-utils": "4.7.0",
"@strapi/utils": "4.7.0",
"@strapi/admin": "4.7.1",
"@strapi/data-transfer": "4.7.1",
"@strapi/database": "4.7.1",
"@strapi/generate-new": "4.7.1",
"@strapi/generators": "4.7.1",
"@strapi/logger": "4.7.1",
"@strapi/permissions": "4.7.1",
"@strapi/plugin-content-manager": "4.7.1",
"@strapi/plugin-content-type-builder": "4.7.1",
"@strapi/plugin-email": "4.7.1",
"@strapi/plugin-upload": "4.7.1",
"@strapi/typescript-utils": "4.7.1",
"@strapi/utils": "4.7.1",
"bcryptjs": "2.4.3",
"boxen": "5.1.2",
"chalk": "4.1.2",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-upload",
"version": "4.7.0",
"version": "4.7.1",
"description": "Makes it easy to upload images and files to your Strapi Application.",
"license": "SEE LICENSE IN LICENSE",
"author": {
@ -23,9 +23,9 @@
"test:front:watch:ce": "cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll"
},
"dependencies": {
"@strapi/helper-plugin": "4.7.0",
"@strapi/provider-upload-local": "4.7.0",
"@strapi/utils": "4.7.0",
"@strapi/helper-plugin": "4.7.1",
"@strapi/provider-upload-local": "4.7.1",
"@strapi/utils": "4.7.1",
"byte-size": "7.0.1",
"cropperjs": "1.5.12",
"date-fns": "2.29.3",

View File

@ -99,8 +99,8 @@ const getPrivateAttributes = (model = {}) => {
);
};
const isPrivateAttribute = (model = {}, attributeName) => {
return model && model.privateAttributes && model.privateAttributes.includes(attributeName);
const isPrivateAttribute = (model, attributeName) => {
return model?.privateAttributes?.includes(attributeName) ?? false;
};
const isScalarAttribute = (attribute) => {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/utils",
"version": "4.7.0",
"version": "4.7.1",
"description": "Shared utilities for the Strapi packages",
"keywords": [
"strapi",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/generate-new",
"version": "4.7.0",
"version": "4.7.1",
"description": "Generate a new Strapi application.",
"keywords": [
"generate",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/generators",
"version": "4.7.0",
"version": "4.7.1",
"description": "Interactive API generator.",
"keywords": [
"strapi",
@ -30,8 +30,8 @@
"main": "lib/index.js",
"dependencies": {
"@sindresorhus/slugify": "1.1.0",
"@strapi/typescript-utils": "4.7.0",
"@strapi/utils": "4.7.0",
"@strapi/typescript-utils": "4.7.1",
"@strapi/utils": "4.7.1",
"chalk": "4.1.2",
"fs-extra": "10.0.0",
"node-plop": "0.26.3",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-color-picker",
"version": "4.7.0",
"version": "4.7.1",
"description": "Strapi maintained Custom Fields",
"strapi": {
"name": "color-picker",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-documentation",
"version": "4.7.0",
"version": "4.7.1",
"description": "Create an OpenAPI Document and visualize your API with SWAGGER UI.",
"repository": {
"type": "git",
@ -24,8 +24,8 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/helper-plugin": "4.7.0",
"@strapi/utils": "4.7.0",
"@strapi/helper-plugin": "4.7.1",
"@strapi/utils": "4.7.1",
"bcryptjs": "2.4.3",
"cheerio": "^1.0.0-rc.12",
"fs-extra": "10.0.0",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-graphql",
"version": "4.7.0",
"version": "4.7.1",
"description": "Adds GraphQL endpoint with default API methods.",
"repository": {
"type": "git",
@ -29,7 +29,7 @@
"dependencies": {
"@graphql-tools/schema": "8.5.1",
"@graphql-tools/utils": "^8.12.0",
"@strapi/utils": "4.7.0",
"@strapi/utils": "4.7.1",
"apollo-server-core": "3.11.1",
"apollo-server-koa": "3.10.0",
"glob": "^7.1.7",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-i18n",
"version": "4.7.0",
"version": "4.7.1",
"description": "This plugin enables to create, to read and to update content in different languages, both from the Admin Panel and from the API",
"repository": {
"type": "git",
@ -24,7 +24,7 @@
"test:unit": "jest --verbose"
},
"dependencies": {
"@strapi/utils": "4.7.0",
"@strapi/utils": "4.7.1",
"lodash": "4.17.21"
},
"devDependencies": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-sentry",
"version": "4.7.0",
"version": "4.7.1",
"description": "Send Strapi error events to Sentry",
"repository": {
"type": "git",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/plugin-users-permissions",
"version": "4.7.0",
"version": "4.7.1",
"description": "Protect your API with a full-authentication process based on JWT",
"repository": {
"type": "git",
@ -27,8 +27,8 @@
"test:front:watch:ce": "cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll"
},
"dependencies": {
"@strapi/helper-plugin": "4.7.0",
"@strapi/utils": "4.7.0",
"@strapi/helper-plugin": "4.7.1",
"@strapi/utils": "4.7.1",
"bcryptjs": "2.4.3",
"grant-koa": "5.4.8",
"jsonwebtoken": "9.0.0",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-audit-logs-local",
"version": "4.7.0",
"version": "4.7.1",
"description": "Local provider for strapi audit logs",
"keywords": [
"audit-logs",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-amazon-ses",
"version": "4.7.0",
"version": "4.7.1",
"description": "Amazon SES provider for strapi email",
"keywords": [
"email",
@ -36,7 +36,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.7.0",
"@strapi/utils": "4.7.1",
"node-ses": "^3.0.3"
},
"engines": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-mailgun",
"version": "4.7.0",
"version": "4.7.1",
"description": "Mailgun provider for strapi email plugin",
"keywords": [
"email",
@ -36,7 +36,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.7.0",
"@strapi/utils": "4.7.1",
"form-data": "^4.0.0",
"mailgun.js": "5.2.2"
},

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-nodemailer",
"version": "4.7.0",
"version": "4.7.1",
"description": "Nodemailer provider for Strapi 3",
"keywords": [
"strapi",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-sendgrid",
"version": "4.7.0",
"version": "4.7.1",
"description": "Sendgrid provider for strapi email",
"keywords": [
"email",
@ -37,7 +37,7 @@
},
"dependencies": {
"@sendgrid/mail": "7.7.0",
"@strapi/utils": "4.7.0"
"@strapi/utils": "4.7.1"
},
"engines": {
"node": ">=14.19.1 <=18.x.x",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-email-sendmail",
"version": "4.7.0",
"version": "4.7.1",
"description": "Sendmail provider for strapi email",
"keywords": [
"email",
@ -35,7 +35,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.7.0",
"@strapi/utils": "4.7.1",
"sendmail": "^1.6.1"
},
"engines": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-upload-aws-s3",
"version": "4.7.0",
"version": "4.7.1",
"description": "AWS S3 provider for strapi upload",
"keywords": [
"upload",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-upload-cloudinary",
"version": "4.7.0",
"version": "4.7.1",
"description": "Cloudinary provider for strapi upload",
"keywords": [
"upload",
@ -36,7 +36,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.7.0",
"@strapi/utils": "4.7.1",
"cloudinary": "^1.33.0",
"into-stream": "^5.1.0"
},

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/provider-upload-local",
"version": "4.7.0",
"version": "4.7.1",
"description": "Local provider for strapi upload",
"keywords": [
"upload",
@ -35,7 +35,7 @@
"test": "echo \"no tests yet\""
},
"dependencies": {
"@strapi/utils": "4.7.0",
"@strapi/utils": "4.7.1",
"fs-extra": "10.0.0"
},
"engines": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/babel-plugin-switch-ee-ce",
"version": "4.7.0",
"version": "4.7.1",
"private": false,
"description": "Babel plugin to switch from CE to EE at runtime",
"repository": "git://github.com/strapi/strapi.git",

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/logger",
"version": "4.7.0",
"version": "4.7.1",
"description": "Strapi's logger",
"homepage": "https://strapi.io",
"bugs": {

View File

@ -1,6 +1,6 @@
{
"name": "@strapi/typescript-utils",
"version": "4.7.0",
"version": "4.7.1",
"description": "Typescript support for Strapi",
"keywords": [
"strapi",