diff --git a/.github/workflows/ecs-frontend-deploy-prod-worker.yml b/.github/workflows/ecs-frontend-deploy-prod-worker.yml index ae8f8734f0d..63769265d2a 100644 --- a/.github/workflows/ecs-frontend-deploy-prod-worker.yml +++ b/.github/workflows/ecs-frontend-deploy-prod-worker.yml @@ -1,5 +1,4 @@ name: ECS FrontEnd Deployment - on: workflow_call: inputs: @@ -53,7 +52,6 @@ on: required: true DATADOG_API_KEY: required: true - jobs: build-and-deploy: environment: Production @@ -84,29 +82,16 @@ jobs: cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - - name: nx Install - run: pnpm add -g nx --silent - + run: pnpm add -g nx - name: Install Doppler - run: | - sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg - curl -sLf --retry 3 --tlsv1.2 --proto "=https" 'https://packages.doppler.com/public/cli/gpg.DE2A7741A397C129.key' | sudo apt-key add - - echo "deb https://packages.doppler.com/public/cli/deb/debian any-version main" | sudo tee /etc/apt/sources.list.d/doppler-cli.list - sudo apt-get update && sudo apt-get -y install doppler - - - name: Get affected apps - run: | - echo "apps=$(pnpm exec ts-node tools/scripts/affected-apps.ts --projects apps/${{ inputs.name }})" >> $GITHUB_OUTPUT - cat $GITHUB_OUTPUT - id: affected-apps + uses: dopplerhq/cli-action@v3 - name: Prisma Generate uses: mansagroup/nrwl-nx-action@v3 with: targets: prisma-generate all: true - name: Build ${{ inputs.name }} - if: contains(steps.affected-apps.outputs.apps, inputs.name) uses: mansagroup/nrwl-nx-action@v3 env: DOPPLER_API_ANALYTICS_TOKEN: ${{ secrets.DOPPLER_API_ANALYTICS_TOKEN }} @@ -139,27 +124,18 @@ jobs: with: targets: upload-sourcemaps projects: ${{ inputs.name }} - - # ECS Deployment - name: Configure ECS AWS credentials - if: contains(steps.affected-apps.outputs.apps, inputs.name) uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.JFP_AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.JFP_AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_DEFAULT_REGION }} - - name: Login to Amazon ECR - if: contains(steps.affected-apps.outputs.apps, inputs.name) id: login-ecr-ecs uses: aws-actions/amazon-ecr-login@v2 - - name: Set up Docker Buildx - if: contains(steps.affected-apps.outputs.apps, inputs.name) uses: docker/setup-buildx-action@v3 - - name: Build and push Docker image to Amazon ECR - if: contains(steps.affected-apps.outputs.apps, inputs.name) id: build-image-ecs uses: docker/build-push-action@v6 with: @@ -171,13 +147,9 @@ jobs: ${{ steps.login-ecr-ecs.outputs.registry }}/${{ env.ECR_REPOSITORY }}:latest build-args: | SERVICE_VERSION=${{ env.IMAGE_TAG }} - - name: Set image output - if: contains(steps.affected-apps.outputs.apps, inputs.name) run: | echo "image=${{ steps.login-ecr-ecs.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}" >> $GITHUB_OUTPUT - - name: Restart task definition - if: contains(steps.affected-apps.outputs.apps, inputs.name) run: | aws ecs update-service --force-new-deployment --service $ECS_SERVICE --cluster $ECS_CLUSTER diff --git a/.github/workflows/ecs-frontend-deploy-prod.yml b/.github/workflows/ecs-frontend-deploy-prod.yml index 6227d37f062..bf7d166d9d2 100644 --- a/.github/workflows/ecs-frontend-deploy-prod.yml +++ b/.github/workflows/ecs-frontend-deploy-prod.yml @@ -7,12 +7,9 @@ on: - main jobs: affected: - name: Detect affected projects runs-on: blacksmith-2vcpu-ubuntu-2204 outputs: - arclight: ${{ steps.set.outputs.arclight }} - journeys_admin: ${{ steps.set.outputs.journeys_admin }} - cms: ${{ steps.set.outputs.cms }} + matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - uses: actions/checkout@v4 with: @@ -28,29 +25,14 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - uses: nrwl/nx-set-shas@v4 - - id: set - name: compute if arclight is affected + - id: set-matrix + name: set matrix app to affected array run: | - set -euo pipefail - list=$(pnpm -s exec nx show projects --affected) - if echo "$list" | awk '{print $1}' | grep -xq 'arclight'; then - echo "arclight=true" >> "$GITHUB_OUTPUT" - else - echo "arclight=false" >> "$GITHUB_OUTPUT" - fi - if echo "$list" | awk '{print $1}' | grep -xq 'journeys-admin'; then - echo "journeys_admin=true" >> "$GITHUB_OUTPUT" - else - echo "journeys_admin=false" >> "$GITHUB_OUTPUT" - fi - if echo "$list" | awk '{print $1}' | grep -xq 'cms'; then - echo "cms=true" >> "$GITHUB_OUTPUT" - else - echo "cms=false" >> "$GITHUB_OUTPUT" - fi + echo "matrix=$(pnpm exec ts-node tools/scripts/affected-apps.ts --projects apps/*)" >> $GITHUB_OUTPUT + cat $GITHUB_OUTPUT arclight: needs: [affected] - if: ${{ needs.affected.outputs.arclight == 'true' }} + if: contains(needs.affected.outputs.matrix, 'arclight') uses: JesusFilm/core/.github/workflows/ecs-frontend-deploy-prod-worker.yml@main with: name: arclight @@ -79,7 +61,7 @@ jobs: DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }} journeys-admin: needs: [affected] - if: ${{ needs.affected.outputs.journeys_admin == 'true' }} + if: contains(needs.affected.outputs.matrix, 'journeys-admin') uses: JesusFilm/core/.github/workflows/ecs-frontend-deploy-prod-worker.yml@main with: name: journeys-admin @@ -108,7 +90,7 @@ jobs: DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }} cms: needs: [affected] - if: ${{ needs.affected.outputs.cms == 'true' }} + if: contains(needs.affected.outputs.matrix, 'cms') uses: JesusFilm/core/.github/workflows/ecs-frontend-deploy-prod-worker.yml@main with: name: cms diff --git a/.github/workflows/ecs-frontend-deploy-stage-worker.yml b/.github/workflows/ecs-frontend-deploy-stage-worker.yml index 7b302b895be..e65073abb82 100644 --- a/.github/workflows/ecs-frontend-deploy-stage-worker.yml +++ b/.github/workflows/ecs-frontend-deploy-stage-worker.yml @@ -1,5 +1,4 @@ name: ECS FrontEnd Deployment - on: workflow_call: inputs: @@ -53,7 +52,6 @@ on: required: true DATADOG_API_KEY: required: true - jobs: build-and-deploy: environment: Stage @@ -84,30 +82,16 @@ jobs: cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - - name: nx Install - run: pnpm add -g nx --silent - + run: pnpm add -g nx - name: Install Doppler - run: | - sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg - curl -sLf --retry 3 --tlsv1.2 --proto "=https" 'https://packages.doppler.com/public/cli/gpg.DE2A7741A397C129.key' | sudo apt-key add - - echo "deb https://packages.doppler.com/public/cli/deb/debian any-version main" | sudo tee /etc/apt/sources.list.d/doppler-cli.list - sudo apt-get update && sudo apt-get -y install doppler - - - name: Get affected apps - run: | - echo "apps=$(pnpm exec ts-node tools/scripts/affected-apps.ts --projects apps/${{ inputs.name }})" >> $GITHUB_OUTPUT - cat $GITHUB_OUTPUT - id: affected-apps - + uses: dopplerhq/cli-action@v3 - name: Prisma Generate uses: mansagroup/nrwl-nx-action@v3 with: targets: prisma-generate all: true - name: Build ${{ inputs.name }} - if: contains(steps.affected-apps.outputs.apps, inputs.name) uses: mansagroup/nrwl-nx-action@v3 env: DOPPLER_API_ANALYTICS_TOKEN: ${{ secrets.DOPPLER_API_ANALYTICS_TOKEN }} @@ -140,27 +124,18 @@ jobs: with: targets: upload-sourcemaps projects: ${{ inputs.name }} - - # ECS Deployment - name: Configure ECS AWS credentials - if: contains(steps.affected-apps.outputs.apps, inputs.name) uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.JFP_AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.JFP_AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_DEFAULT_REGION }} - - name: Login to Amazon ECR - if: contains(steps.affected-apps.outputs.apps, inputs.name) id: login-ecr-ecs uses: aws-actions/amazon-ecr-login@v2 - - name: Set up Docker Buildx - if: contains(steps.affected-apps.outputs.apps, inputs.name) uses: docker/setup-buildx-action@v3 - - name: Build and push Docker image to Amazon ECR - if: contains(steps.affected-apps.outputs.apps, inputs.name) id: build-image-ecs uses: docker/build-push-action@v6 with: @@ -172,13 +147,9 @@ jobs: ${{ steps.login-ecr-ecs.outputs.registry }}/${{ env.ECR_REPOSITORY }}:latest build-args: | SERVICE_VERSION=${{ env.IMAGE_TAG }} - - name: Set image output - if: contains(steps.affected-apps.outputs.apps, inputs.name) run: | echo "image=${{ steps.login-ecr-ecs.outputs.registry }}/${{ env.ECR_REPOSITORY }}:${{ env.IMAGE_TAG }}" >> $GITHUB_OUTPUT - - name: Restart task definition - if: contains(steps.affected-apps.outputs.apps, inputs.name) run: | aws ecs update-service --force-new-deployment --service $ECS_SERVICE --cluster $ECS_CLUSTER diff --git a/.github/workflows/ecs-frontend-deploy-stage.yml b/.github/workflows/ecs-frontend-deploy-stage.yml index 327757dd3df..3659c18cdf0 100644 --- a/.github/workflows/ecs-frontend-deploy-stage.yml +++ b/.github/workflows/ecs-frontend-deploy-stage.yml @@ -7,12 +7,9 @@ on: - stage jobs: affected: - name: Detect affected projects runs-on: blacksmith-2vcpu-ubuntu-2204 outputs: - arclight: ${{ steps.set.outputs.arclight }} - journeys_admin: ${{ steps.set.outputs.journeys_admin }} - cms: ${{ steps.set.outputs.cms }} + matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - uses: actions/checkout@v4 with: @@ -28,29 +25,14 @@ jobs: - name: Install dependencies run: pnpm install --frozen-lockfile - uses: nrwl/nx-set-shas@v4 - - id: set - name: compute if arclight is affected + - id: set-matrix + name: set matrix app to affected array run: | - set -euo pipefail - list=$(pnpm -s exec nx show projects --affected) - if echo "$list" | awk '{print $1}' | grep -xq 'arclight'; then - echo "arclight=true" >> "$GITHUB_OUTPUT" - else - echo "arclight=false" >> "$GITHUB_OUTPUT" - fi - if echo "$list" | awk '{print $1}' | grep -xq 'journeys-admin'; then - echo "journeys_admin=true" >> "$GITHUB_OUTPUT" - else - echo "journeys_admin=false" >> "$GITHUB_OUTPUT" - fi - if echo "$list" | awk '{print $1}' | grep -xq 'cms'; then - echo "cms=true" >> "$GITHUB_OUTPUT" - else - echo "cms=false" >> "$GITHUB_OUTPUT" - fi + echo "matrix=$(pnpm exec ts-node tools/scripts/affected-apps.ts --projects apps/*)" >> $GITHUB_OUTPUT + cat $GITHUB_OUTPUT arclight: needs: [affected] - if: ${{ needs.affected.outputs.arclight == 'true' }} + if: contains(needs.affected.outputs.matrix, 'arclight') uses: JesusFilm/core/.github/workflows/ecs-frontend-deploy-stage-worker.yml@stage with: name: arclight @@ -80,7 +62,7 @@ jobs: e2e-arclight: name: E2E Arclight (stage) needs: [affected, arclight] - if: ${{ needs.affected.outputs.arclight == 'true' }} + if: contains(needs.affected.outputs.matrix, 'arclight') runs-on: blacksmith-4vcpu-ubuntu-2204 steps: - uses: actions/checkout@v4 @@ -117,7 +99,7 @@ jobs: PLAYWRIGHT_PASSWORD5: ${{ secrets.PLAYWRIGHT_PASSWORD5 }} journeys-admin: needs: [affected] - if: ${{ needs.affected.outputs.journeys_admin == 'true' }} + if: contains(needs.affected.outputs.matrix, 'journeys-admin') uses: JesusFilm/core/.github/workflows/ecs-frontend-deploy-stage-worker.yml@stage with: name: journeys-admin @@ -146,7 +128,7 @@ jobs: DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }} cms: needs: [affected] - if: ${{ needs.affected.outputs.cms == 'true' }} + if: contains(needs.affected.outputs.matrix, 'cms') uses: JesusFilm/core/.github/workflows/ecs-frontend-deploy-stage-worker.yml@stage with: name: cms diff --git a/apps/cms/Dockerfile b/apps/cms/Dockerfile index b269b10f5be..2e832936e0f 100644 --- a/apps/cms/Dockerfile +++ b/apps/cms/Dockerfile @@ -1,28 +1,53 @@ -FROM node:22-alpine3.20 - -EXPOSE 1337 - +FROM node:22-alpine + +# ------------------------- +# System deps for sharp / vips +# ------------------------- +RUN apk add --no-cache \ + build-base \ + gcc \ + autoconf \ + automake \ + zlib-dev \ + libpng-dev \ + nasm \ + bash \ + vips-dev \ + git + +ARG NODE_ENV=production +ENV NODE_ENV=${NODE_ENV} ARG SERVICE_VERSION=0.0.1 ENV OTEL_RESOURCE_ATTRIBUTES="service.version=$SERVICE_VERSION" -ENV NODE_ENV=production -ENV PNPM_HOME="/usr/local/share/pnpm" -ENV PATH="$PNPM_HOME:$PATH" -RUN apk upgrade --update-cache --available && \ - apk add g++ make python3 py3-pip curl-dev && \ - rm -rf /var/cache/apk/* +# Enable pnpm +RUN corepack enable -WORKDIR /app +# ------------------------- +# Workspace root +# ------------------------- +WORKDIR /opt -COPY ./package.json ./package.json -COPY ./pnpm-lock.yaml* ./ +# Copy only what pnpm needs to resolve CMS +COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +COPY apps/cms/package.json ./apps/cms/package.json -RUN corepack enable && corepack prepare pnpm --activate -RUN pnpm install --frozen-lockfile +# Install ONLY cms deps +RUN pnpm install \ + --frozen-lockfile \ + --filter ./apps/cms... -COPY . . +# ------------------------- +# Copy CMS source only +# ------------------------- +COPY apps/cms ./apps/cms -RUN pnpm run build +WORKDIR /opt/apps/cms -CMD ["pnpm", "run", "start"] +RUN chown -R node:node /opt/apps/cms +USER node +RUN ["pnpm", "run", "build"] + +EXPOSE 1337 +CMD ["pnpm", "run", "start"] diff --git a/apps/cms/config/plugins.ts b/apps/cms/config/plugins.ts index 5e24352c133..84bc9a3baf8 100644 --- a/apps/cms/config/plugins.ts +++ b/apps/cms/config/plugins.ts @@ -1,4 +1,9 @@ const pluginsConfig = ({ env }) => ({ + 'users-permissions': { + config: { + jwtSecret: env('JWT_SECRET') + } + }, 'mux-video-uploader': { enabled: true, config: { diff --git a/apps/cms/infrastructure/locals.tf b/apps/cms/infrastructure/locals.tf index 361a63965ac..d759bb98b98 100644 --- a/apps/cms/infrastructure/locals.tf +++ b/apps/cms/infrastructure/locals.tf @@ -5,6 +5,7 @@ locals { "API_TOKEN_SALT", "APP_KEYS", "ENCRYPTION_KEY", + "JWT_SECRET", "MUX_ACCESS_TOKEN_ID", "MUX_PLAYBACK_SIGNING_ID", "MUX_PLAYBACK_SIGNING_SECRET", diff --git a/apps/cms/package.json b/apps/cms/package.json index 3904f73fe8d..d4fe821029c 100644 --- a/apps/cms/package.json +++ b/apps/cms/package.json @@ -9,6 +9,7 @@ }, "dependencies": { "@strapi/plugin-cloud": "5.33.3", + "@strapi/plugin-graphql": "5.33.3", "@strapi/plugin-users-permissions": "5.33.3", "@strapi/strapi": "5.33.3", "@strapi/types": "5.33.3", diff --git a/apps/cms/project.json b/apps/cms/project.json index 6cf05131599..fd6675805eb 100644 --- a/apps/cms/project.json +++ b/apps/cms/project.json @@ -56,6 +56,26 @@ } ] } + }, + "extract-translations": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "echo 'extract-translations not implemented for cms'" + } + ] + } + }, + "upload-sourcemaps": { + "executor": "nx:run-commands", + "options": { + "commands": [ + { + "command": "echo 'upload-sourcemaps not implemented for cms'" + } + ] + } } } } diff --git a/apps/cms/src/api/about/content-types/about/schema.json b/apps/cms/src/api/about/content-types/about/schema.json deleted file mode 100644 index 8bc7bd4f628..00000000000 --- a/apps/cms/src/api/about/content-types/about/schema.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "kind": "singleType", - "collectionName": "abouts", - "info": { - "singularName": "about", - "pluralName": "abouts", - "displayName": "About", - "description": "Write about yourself and the content you create" - }, - "options": { - "draftAndPublish": false - }, - "pluginOptions": {}, - "attributes": { - "title": { - "type": "string" - }, - "blocks": { - "type": "dynamiczone", - "components": [ - "shared.media", - "shared.quote", - "shared.rich-text", - "shared.slider" - ] - } - } -} diff --git a/apps/cms/src/api/about/controllers/about.ts b/apps/cms/src/api/about/controllers/about.ts deleted file mode 100644 index 4ad2d1c6dfc..00000000000 --- a/apps/cms/src/api/about/controllers/about.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * about controller - */ - -import { factories } from '@strapi/strapi' - -export default factories.createCoreController('api::about.about') diff --git a/apps/cms/src/api/about/routes/about.ts b/apps/cms/src/api/about/routes/about.ts deleted file mode 100644 index d6db40e7215..00000000000 --- a/apps/cms/src/api/about/routes/about.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * about router. - */ - -import { factories } from '@strapi/strapi' - -export default factories.createCoreRouter('api::about.about') diff --git a/apps/cms/src/api/about/services/about.ts b/apps/cms/src/api/about/services/about.ts deleted file mode 100644 index fb980fb754a..00000000000 --- a/apps/cms/src/api/about/services/about.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * about service. - */ - -import { factories } from '@strapi/strapi' - -export default factories.createCoreService('api::about.about') diff --git a/apps/cms/src/api/article/content-types/article/schema.json b/apps/cms/src/api/article/content-types/article/schema.json index 9ba2bd79725..5cd2c8412b0 100644 --- a/apps/cms/src/api/article/content-types/article/schema.json +++ b/apps/cms/src/api/article/content-types/article/schema.json @@ -13,15 +13,23 @@ "pluginOptions": {}, "attributes": { "title": { - "type": "string" + "type": "string", + "required": true }, - "description": { - "type": "text", - "maxLength": 80 + "clients": { + "type": "relation", + "relation": "manyToMany", + "target": "api::client.client", + "inversedBy": "articles" }, "slug": { "type": "uid", - "targetField": "title" + "targetField": "title", + "required": true + }, + "description": { + "type": "text", + "maxLength": 80 }, "cover": { "type": "media", diff --git a/apps/cms/src/api/author/content-types/author/schema.json b/apps/cms/src/api/author/content-types/author/schema.json index a2024828841..10cc7451c89 100644 --- a/apps/cms/src/api/author/content-types/author/schema.json +++ b/apps/cms/src/api/author/content-types/author/schema.json @@ -13,16 +13,22 @@ "pluginOptions": {}, "attributes": { "name": { - "type": "string" + "type": "string", + "required": true + }, + "slug": { + "type": "uid", + "targetField": "name", + "required": true + }, + "email": { + "type": "email" }, "avatar": { "type": "media", "multiple": false, "required": false, - "allowedTypes": ["images", "files", "videos"] - }, - "email": { - "type": "string" + "allowedTypes": ["images"] }, "articles": { "type": "relation", diff --git a/apps/cms/src/api/category/content-types/category/schema.json b/apps/cms/src/api/category/content-types/category/schema.json index 5121cdda137..d73089f531a 100644 --- a/apps/cms/src/api/category/content-types/category/schema.json +++ b/apps/cms/src/api/category/content-types/category/schema.json @@ -13,19 +13,21 @@ "pluginOptions": {}, "attributes": { "name": { - "type": "string" + "type": "string", + "required": true }, "slug": { - "type": "uid" + "type": "uid", + "required": true + }, + "description": { + "type": "text" }, "articles": { "type": "relation", "relation": "oneToMany", "target": "api::article.article", "mappedBy": "category" - }, - "description": { - "type": "text" } } } diff --git a/apps/cms/src/api/client/content-types/client/schema.json b/apps/cms/src/api/client/content-types/client/schema.json new file mode 100644 index 00000000000..fc6655bfd71 --- /dev/null +++ b/apps/cms/src/api/client/content-types/client/schema.json @@ -0,0 +1,42 @@ +{ + "kind": "collectionType", + "collectionName": "clients", + "info": { + "singularName": "client", + "pluralName": "clients", + "displayName": "Client" + }, + "options": { + "draftAndPublish": true + }, + "pluginOptions": {}, + "attributes": { + "name": { + "type": "string", + "required": true + }, + "slug": { + "type": "uid", + "required": true + }, + "favicon": { + "type": "media", + "multiple": false, + "allowedTypes": ["images"] + }, + "description": { + "type": "text" + }, + "defaultSeo": { + "type": "component", + "component": "shared.seo", + "repeatable": false + }, + "articles": { + "type": "relation", + "relation": "manyToMany", + "target": "api::article.article", + "mappedBy": "clients" + } + } +} diff --git a/apps/cms/src/api/client/controllers/client.ts b/apps/cms/src/api/client/controllers/client.ts new file mode 100644 index 00000000000..01cf83f83ab --- /dev/null +++ b/apps/cms/src/api/client/controllers/client.ts @@ -0,0 +1,7 @@ +/** + * client controller + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreController('api::client.client') diff --git a/apps/cms/src/api/client/routes/client.ts b/apps/cms/src/api/client/routes/client.ts new file mode 100644 index 00000000000..c25470e19ca --- /dev/null +++ b/apps/cms/src/api/client/routes/client.ts @@ -0,0 +1,7 @@ +/** + * client router + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreRouter('api::client.client') diff --git a/apps/cms/src/api/client/services/client.ts b/apps/cms/src/api/client/services/client.ts new file mode 100644 index 00000000000..62be90edf21 --- /dev/null +++ b/apps/cms/src/api/client/services/client.ts @@ -0,0 +1,7 @@ +/** + * client service + */ + +import { factories } from '@strapi/strapi' + +export default factories.createCoreService('api::client.client') diff --git a/apps/cms/src/api/global/content-types/global/schema.json b/apps/cms/src/api/global/content-types/global/schema.json deleted file mode 100644 index 3daa1e87a31..00000000000 --- a/apps/cms/src/api/global/content-types/global/schema.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "kind": "singleType", - "collectionName": "globals", - "info": { - "singularName": "global", - "pluralName": "globals", - "displayName": "Global", - "description": "Define global settings" - }, - "options": { - "draftAndPublish": false - }, - "pluginOptions": {}, - "attributes": { - "siteName": { - "type": "string", - "required": true - }, - "favicon": { - "type": "media", - "multiple": false, - "required": false, - "allowedTypes": ["images", "files", "videos"] - }, - "siteDescription": { - "type": "text", - "required": true - }, - "defaultSeo": { - "type": "component", - "repeatable": false, - "component": "shared.seo" - } - } -} diff --git a/apps/cms/src/api/global/controllers/global.ts b/apps/cms/src/api/global/controllers/global.ts deleted file mode 100644 index a5d03a29f28..00000000000 --- a/apps/cms/src/api/global/controllers/global.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * global controller - */ - -import { factories } from '@strapi/strapi' - -export default factories.createCoreController('api::global.global') diff --git a/apps/cms/src/api/global/routes/global.ts b/apps/cms/src/api/global/routes/global.ts deleted file mode 100644 index fdb56eeacc2..00000000000 --- a/apps/cms/src/api/global/routes/global.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * global router. - */ - -import { factories } from '@strapi/strapi' - -export default factories.createCoreRouter('api::global.global') diff --git a/apps/cms/src/api/global/services/global.ts b/apps/cms/src/api/global/services/global.ts deleted file mode 100644 index 1c2f5af29b3..00000000000 --- a/apps/cms/src/api/global/services/global.ts +++ /dev/null @@ -1,7 +0,0 @@ -/** - * global service. - */ - -import { factories } from '@strapi/strapi' - -export default factories.createCoreService('api::global.global') diff --git a/apps/cms/types/generated/contentTypes.d.ts b/apps/cms/types/generated/contentTypes.d.ts index 1922ff5cb3b..fdcafacb79f 100644 --- a/apps/cms/types/generated/contentTypes.d.ts +++ b/apps/cms/types/generated/contentTypes.d.ts @@ -430,35 +430,6 @@ export interface AdminUser extends Struct.CollectionTypeSchema { } } -export interface ApiAboutAbout extends Struct.SingleTypeSchema { - collectionName: 'abouts' - info: { - description: 'Write about yourself and the content you create' - displayName: 'About' - pluralName: 'abouts' - singularName: 'about' - } - options: { - draftAndPublish: false - } - attributes: { - blocks: Schema.Attribute.DynamicZone< - ['shared.media', 'shared.quote', 'shared.rich-text', 'shared.slider'] - > - createdAt: Schema.Attribute.DateTime - createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private - locale: Schema.Attribute.String & Schema.Attribute.Private - localizations: Schema.Attribute.Relation<'oneToMany', 'api::about.about'> & - Schema.Attribute.Private - publishedAt: Schema.Attribute.DateTime - title: Schema.Attribute.String - updatedAt: Schema.Attribute.DateTime - updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & - Schema.Attribute.Private - } -} - export interface ApiArticleArticle extends Struct.CollectionTypeSchema { collectionName: 'articles' info: { @@ -476,6 +447,7 @@ export interface ApiArticleArticle extends Struct.CollectionTypeSchema { ['shared.media', 'shared.quote', 'shared.rich-text', 'shared.slider'] > category: Schema.Attribute.Relation<'manyToOne', 'api::category.category'> + clients: Schema.Attribute.Relation<'manyToMany', 'api::client.client'> cover: Schema.Attribute.Media<'images' | 'files' | 'videos'> createdAt: Schema.Attribute.DateTime createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & @@ -491,8 +463,8 @@ export interface ApiArticleArticle extends Struct.CollectionTypeSchema { > & Schema.Attribute.Private publishedAt: Schema.Attribute.DateTime - slug: Schema.Attribute.UID<'title'> - title: Schema.Attribute.String + slug: Schema.Attribute.UID<'title'> & Schema.Attribute.Required + title: Schema.Attribute.String & Schema.Attribute.Required updatedAt: Schema.Attribute.DateTime updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private @@ -512,19 +484,20 @@ export interface ApiAuthorAuthor extends Struct.CollectionTypeSchema { } attributes: { articles: Schema.Attribute.Relation<'oneToMany', 'api::article.article'> - avatar: Schema.Attribute.Media<'images' | 'files' | 'videos'> + avatar: Schema.Attribute.Media<'images'> createdAt: Schema.Attribute.DateTime createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private - email: Schema.Attribute.String + email: Schema.Attribute.Email locale: Schema.Attribute.String & Schema.Attribute.Private localizations: Schema.Attribute.Relation< 'oneToMany', 'api::author.author' > & Schema.Attribute.Private - name: Schema.Attribute.String + name: Schema.Attribute.String & Schema.Attribute.Required publishedAt: Schema.Attribute.DateTime + slug: Schema.Attribute.UID<'name'> & Schema.Attribute.Required updatedAt: Schema.Attribute.DateTime updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private @@ -554,41 +527,42 @@ export interface ApiCategoryCategory extends Struct.CollectionTypeSchema { 'api::category.category' > & Schema.Attribute.Private - name: Schema.Attribute.String + name: Schema.Attribute.String & Schema.Attribute.Required publishedAt: Schema.Attribute.DateTime - slug: Schema.Attribute.UID + slug: Schema.Attribute.UID & Schema.Attribute.Required updatedAt: Schema.Attribute.DateTime updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private } } -export interface ApiGlobalGlobal extends Struct.SingleTypeSchema { - collectionName: 'globals' +export interface ApiClientClient extends Struct.CollectionTypeSchema { + collectionName: 'clients' info: { - description: 'Define global settings' - displayName: 'Global' - pluralName: 'globals' - singularName: 'global' + displayName: 'Client' + pluralName: 'clients' + singularName: 'client' } options: { - draftAndPublish: false + draftAndPublish: true } attributes: { + articles: Schema.Attribute.Relation<'manyToMany', 'api::article.article'> createdAt: Schema.Attribute.DateTime createdBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private defaultSeo: Schema.Attribute.Component<'shared.seo', false> - favicon: Schema.Attribute.Media<'images' | 'files' | 'videos'> + description: Schema.Attribute.Text + favicon: Schema.Attribute.Media<'images'> locale: Schema.Attribute.String & Schema.Attribute.Private localizations: Schema.Attribute.Relation< 'oneToMany', - 'api::global.global' + 'api::client.client' > & Schema.Attribute.Private + name: Schema.Attribute.String & Schema.Attribute.Required publishedAt: Schema.Attribute.DateTime - siteDescription: Schema.Attribute.Text & Schema.Attribute.Required - siteName: Schema.Attribute.String & Schema.Attribute.Required + slug: Schema.Attribute.UID & Schema.Attribute.Required updatedAt: Schema.Attribute.DateTime updatedBy: Schema.Attribute.Relation<'oneToOne', 'admin::user'> & Schema.Attribute.Private @@ -1214,11 +1188,10 @@ declare module '@strapi/strapi' { 'admin::transfer-token': AdminTransferToken 'admin::transfer-token-permission': AdminTransferTokenPermission 'admin::user': AdminUser - 'api::about.about': ApiAboutAbout 'api::article.article': ApiArticleArticle 'api::author.author': ApiAuthorAuthor 'api::category.category': ApiCategoryCategory - 'api::global.global': ApiGlobalGlobal + 'api::client.client': ApiClientClient 'plugin::content-releases.release': PluginContentReleasesRelease 'plugin::content-releases.release-action': PluginContentReleasesReleaseAction 'plugin::i18n.locale': PluginI18NLocale diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ccc4fa4a945..819fb7264a0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1149,6 +1149,9 @@ importers: '@strapi/plugin-cloud': specifier: 5.33.3 version: 5.33.3(c0333d2ed4cd4aefb4ac454f2e0e1e97) + '@strapi/plugin-graphql': + specifier: 5.33.3 + version: 5.33.3(9bef0d9be80bf808e78c5f9d1aabd3d8) '@strapi/plugin-users-permissions': specifier: 5.33.3 version: 5.33.3(79d05a6b464fb10cf185b6cfbdcfd571) @@ -1536,6 +1539,13 @@ packages: peerDependencies: '@apollo/server': ^4.0.0 + '@apollo/server@4.11.0': + resolution: {integrity: sha512-SWDvbbs0wl2zYhKG6aGLxwTJ72xpqp0awb2lotNpfezd9VcAvzaUizzKQqocephin2uMoaA8MguoyBmgtPzNWw==} + engines: {node: '>=14.16.0'} + deprecated: Apollo Server v4 is deprecated and will transition to end-of-life on January 26, 2026. As long as you are already using a non-EOL version of Node.js, upgrading to v5 should take only a few minutes. See https://www.apollographql.com/docs/apollo-server/previous-versions for details. + peerDependencies: + graphql: ^16.6.0 + '@apollo/server@4.11.3': resolution: {integrity: sha512-mW8idE2q0/BN14mimfJU5DAnoPHZRrAWgwsVLBEdACds+mxapIYxIbI6AH4AsOpxfrpvHts3PCYDbopy1XPW1g==} engines: {node: '>=14.16.0'} @@ -1637,6 +1647,13 @@ packages: resolution: {integrity: sha512-xhlTqH0m31mnsG0tIP4ETgfSB6gXDaYYsUWTrlUV93fFQPI9dd8hE0Ot6MHLCtqgB32hwJAC3YZMWlXZw7AleA==} engines: {node: '>=14'} + '@as-integrations/koa@1.1.1': + resolution: {integrity: sha512-v84cVhkLUxAH9l19pajbWp/Z9ZYTzO7jkAOiY1xndTclfpXZstiWDKejZYq7xpkBtUSSAKzNyM66uox8MP9qVg==} + engines: {node: '>=16.0'} + peerDependencies: + '@apollo/server': ^4.0.0 + koa: ^2.0.0 + '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} @@ -6076,6 +6093,12 @@ packages: peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/schema@10.0.3': + resolution: {integrity: sha512-p28Oh9EcOna6i0yLaCFOnkcBDQECVf3SCexT6ktb86QNj9idnkhI+tCxnwZDh58Qvjd2nURdkbevvoZkvxzCog==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + '@graphql-tools/schema@9.0.19': resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==} peerDependencies: @@ -11009,6 +11032,16 @@ packages: react-router-dom: ^6.0.0 styled-components: ^6.0.0 + '@strapi/plugin-graphql@5.33.3': + resolution: {integrity: sha512-12GHTit72SYHc7HemHgrfatUEN8FeBW6eiblG3VNXBkboK4zDPP2KkH7b6JXx9NOreIr8ER1/PQlk5J6UQOZnQ==} + engines: {node: '>=20.0.0 <=24.x.x', npm: '>=6.0.0'} + peerDependencies: + '@strapi/strapi': ^5.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + react-router-dom: ^6.0.0 + styled-components: ^6.0.0 + '@strapi/plugin-users-permissions@5.33.3': resolution: {integrity: sha512-1leY6dPxHIG1lyWySOLWgpT24pbwlw1speW+U54Cz+HF61MByuVpiPes8yfJ/8T9TQfmBqCMre29JpyE+8FOSA==} engines: {node: '>=20.0.0 <=24.x.x', npm: '>=6.0.0'} @@ -14398,6 +14431,9 @@ packages: copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + copy-to@2.0.1: + resolution: {integrity: sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==} + copy-webpack-plugin@10.2.4: resolution: {integrity: sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==} engines: {node: '>= 12.20.0'} @@ -17090,16 +17126,36 @@ packages: cosmiconfig-toml-loader: optional: true + graphql-depth-limit@1.1.0: + resolution: {integrity: sha512-+3B2BaG8qQ8E18kzk9yiSdAa75i/hnnOwgSeAxVJctGQPvmeiLtqKOYF6HETCyRjiF7Xfsyal0HbLlxCQkgkrw==} + engines: {node: '>=6.0.0'} + peerDependencies: + graphql: '*' + graphql-jit@0.8.7: resolution: {integrity: sha512-KGzCrsxQPfEiXOUIJCexWKiWF6ycjO89kAO6SdO8OWRGwYXbG0hsLuTnbFfMq0gj7d7/ib/Gh7jtst7FHZEEjw==} peerDependencies: graphql: '>=15' + graphql-playground-html@1.6.30: + resolution: {integrity: sha512-tpCujhsJMva4aqE8ULnF7/l3xw4sNRZcSHu+R00VV+W0mfp+Q20Plvcrp+5UXD+2yS6oyCXncA+zoQJQqhGCEw==} + + graphql-playground-middleware-koa@1.6.22: + resolution: {integrity: sha512-soVUM76ecq5GHk12H69Ce7afzbYuWWc73oKMOcEkmtAn/G9NUdsNvLjLdCnHQX1V0cOUeSbmcYcrebyBOIYGMQ==} + peerDependencies: + koa: ^2 + graphql-request@6.1.0: resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} peerDependencies: graphql: 14 - 16 + graphql-scalars@1.22.2: + resolution: {integrity: sha512-my9FB4GtghqXqi/lWSVAOPiTzTnnEzdOXCsAC2bb5V7EFNQjVjwy3cSSbUvgYOtDuDibd+ZsCDhz+4eykYOlhQ==} + engines: {node: '>=10'} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + graphql-scalars@1.24.2: resolution: {integrity: sha512-FoZ11yxIauEnH0E5rCUkhDXHVn/A6BBfovJdimRZCQlFCl+h7aVvarKmI15zG4VtQunmCDdqdtNs6ixThy3uAg==} engines: {node: '>=10'} @@ -18849,6 +18905,10 @@ packages: koa-body@6.0.1: resolution: {integrity: sha512-M8ZvMD8r+kPHy28aWP9VxL7kY8oPWA+C7ZgCljrCMeaU7uX6wsIQgDHskyrAr9sw+jqnIXyv4Mlxri5R4InIJg==} + koa-bodyparser@4.4.1: + resolution: {integrity: sha512-kBH3IYPMb+iAXnrxIhXnW+gXV8OTzCu8VPDqvcDHW9SQrbkHmqPQtiZwrltNmSq6/lpipHnT7k7PsjlVD7kK0w==} + engines: {node: '>=8.0.0'} + koa-compose@4.1.0: resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} @@ -20345,6 +20405,11 @@ packages: sass: optional: true + nexus@1.3.0: + resolution: {integrity: sha512-w/s19OiNOs0LrtP7pBmD9/FqJHvZLmCipVRt6v1PM8cRUYIbhEswyNKGHVoC4eHZGPSnD+bOf5A3+gnbt0A5/A==} + peerDependencies: + graphql: 15.x || 16.x + no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} @@ -26751,6 +26816,37 @@ snapshots: '@apollo/server': 4.11.3(encoding@0.1.13)(graphql@16.10.0) '@apollographql/graphql-playground-html': 1.6.29 + '@apollo/server@4.11.0(encoding@0.1.13)(graphql@16.10.0)': + dependencies: + '@apollo/cache-control-types': 1.0.3(graphql@16.10.0) + '@apollo/server-gateway-interface': 1.1.1(graphql@16.10.0) + '@apollo/usage-reporting-protobuf': 4.1.1 + '@apollo/utils.createhash': 2.0.2 + '@apollo/utils.fetcher': 2.0.1 + '@apollo/utils.isnodelike': 2.0.1 + '@apollo/utils.keyvaluecache': 2.1.1 + '@apollo/utils.logger': 2.0.1 + '@apollo/utils.usagereporting': 2.1.0(graphql@16.10.0) + '@apollo/utils.withrequired': 2.0.1 + '@graphql-tools/schema': 9.0.19(graphql@16.10.0) + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.7 + '@types/node-fetch': 2.6.13 + async-retry: 1.3.3 + cors: 2.8.5 + express: 4.21.2 + graphql: 16.10.0 + loglevel: 1.8.1 + lru-cache: 7.18.3 + negotiator: 0.6.3 + node-abort-controller: 3.1.1 + node-fetch: 2.7.0(encoding@0.1.13) + uuid: 9.0.1 + whatwg-mimetype: 3.0.0 + transitivePeerDependencies: + - encoding + - supports-color + '@apollo/server@4.11.3(encoding@0.1.13)(graphql@16.10.0)': dependencies: '@apollo/cache-control-types': 1.0.3(graphql@16.10.0) @@ -26876,6 +26972,11 @@ snapshots: transitivePeerDependencies: - encoding + '@as-integrations/koa@1.1.1(@apollo/server@4.11.0(encoding@0.1.13)(graphql@16.10.0))(koa@3.0.1)': + dependencies: + '@apollo/server': 4.11.0(encoding@0.1.13)(graphql@16.10.0) + koa: 3.0.1 + '@asamuzakjp/css-color@3.2.0': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) @@ -33032,7 +33133,7 @@ snapshots: '@graphql-codegen/schema-ast@4.0.2(graphql@16.10.0)': dependencies: '@graphql-codegen/plugin-helpers': 5.1.1(graphql@16.10.0) - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) graphql: 16.10.0 tslib: 2.6.3 @@ -33752,7 +33853,7 @@ snapshots: '@graphql-tools/batch-execute@9.0.6(graphql@16.10.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) dataloader: 2.2.3 graphql: 16.10.0 tslib: 2.8.1 @@ -33784,8 +33885,8 @@ snapshots: dependencies: '@graphql-tools/batch-execute': 9.0.6(graphql@16.10.0) '@graphql-tools/executor': 1.4.9(graphql@16.10.0) - '@graphql-tools/schema': 10.0.25(graphql@16.10.0) - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/schema': 10.0.29(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) '@repeaterjs/repeater': 3.0.6 dataloader: 2.2.3 dset: 3.1.4 @@ -33837,7 +33938,7 @@ snapshots: '@graphql-tools/executor-graphql-ws@1.3.2(graphql@16.10.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) '@types/ws': 8.5.12 graphql: 16.10.0 graphql-ws: 5.16.2(graphql@16.10.0) @@ -33897,7 +33998,7 @@ snapshots: '@graphql-tools/executor-legacy-ws@1.0.6(graphql@16.10.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) '@types/ws': 8.5.12 graphql: 16.10.0 isomorphic-ws: 5.0.0(ws@8.18.3) @@ -34001,7 +34102,7 @@ snapshots: '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4) '@babel/traverse': 7.28.4 '@babel/types': 7.28.2 - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 transitivePeerDependencies: @@ -34022,7 +34123,7 @@ snapshots: '@graphql-tools/import@7.0.1(graphql@16.10.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) graphql: 16.10.0 resolve-from: 5.0.0 tslib: 2.8.1 @@ -34077,13 +34178,13 @@ snapshots: '@graphql-tools/merge@9.0.24(graphql@16.10.0)': dependencies: - '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 '@graphql-tools/merge@9.1.1(graphql@16.10.0)': dependencies: - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 @@ -34135,7 +34236,7 @@ snapshots: '@graphql-tools/relay-operation-optimizer@7.0.19(encoding@0.1.13)(graphql@16.10.0)': dependencies: '@ardatan/relay-compiler': 12.0.3(encoding@0.1.13)(graphql@16.10.0) - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 transitivePeerDependencies: @@ -34144,14 +34245,14 @@ snapshots: '@graphql-tools/schema@10.0.23(graphql@16.10.0)': dependencies: '@graphql-tools/merge': 9.1.1(graphql@16.10.0) - '@graphql-tools/utils': 10.8.6(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 '@graphql-tools/schema@10.0.25(graphql@16.10.0)': dependencies: '@graphql-tools/merge': 9.1.1(graphql@16.10.0) - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 @@ -34162,6 +34263,14 @@ snapshots: graphql: 16.10.0 tslib: 2.8.1 + '@graphql-tools/schema@10.0.3(graphql@16.10.0)': + dependencies: + '@graphql-tools/merge': 9.1.5(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) + graphql: 16.10.0 + tslib: 2.8.1 + value-or-promise: 1.0.12 + '@graphql-tools/schema@9.0.19(graphql@16.10.0)': dependencies: '@graphql-tools/merge': 8.4.2(graphql@16.10.0) @@ -34255,8 +34364,8 @@ snapshots: '@graphql-tools/wrap@10.0.18(graphql@16.10.0)': dependencies: '@graphql-tools/delegate': 10.2.0(graphql@16.10.0) - '@graphql-tools/schema': 10.0.25(graphql@16.10.0) - '@graphql-tools/utils': 10.9.1(graphql@16.10.0) + '@graphql-tools/schema': 10.0.29(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) graphql: 16.10.0 tslib: 2.8.1 value-or-promise: 1.0.12 @@ -41155,6 +41264,46 @@ snapshots: - codemirror - typescript + '@strapi/plugin-graphql@5.33.3(9bef0d9be80bf808e78c5f9d1aabd3d8)': + dependencies: + '@apollo/server': 4.11.0(encoding@0.1.13)(graphql@16.10.0) + '@as-integrations/koa': 1.1.1(@apollo/server@4.11.0(encoding@0.1.13)(graphql@16.10.0))(koa@3.0.1) + '@graphql-tools/schema': 10.0.3(graphql@16.10.0) + '@graphql-tools/utils': 10.10.3(graphql@16.10.0) + '@koa/cors': 5.0.0 + '@strapi/design-system': 2.0.1(@babel/runtime@7.28.6)(@codemirror/autocomplete@6.20.0)(@codemirror/language@6.12.1)(@codemirror/lint@6.9.2)(@codemirror/search@6.5.11)(@codemirror/state@6.5.3)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.39.9)(@strapi/icons@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(codemirror@6.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@strapi/icons': 2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@strapi/strapi': 5.33.3(@babel/preset-env@7.28.3(@babel/core@7.28.6))(@babel/runtime@7.28.6)(@codemirror/autocomplete@6.20.0)(@codemirror/language@6.12.1)(@codemirror/lint@6.9.2)(@codemirror/search@6.5.11)(@codemirror/state@6.5.3)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.39.9)(@emotion/is-prop-valid@1.4.0)(@rspack/core@1.6.0(@swc/helpers@0.5.17))(@swc/core@1.5.29(@swc/helpers@0.5.17))(@swc/helpers@0.5.17)(@types/hoist-non-react-statics@3.3.6)(@types/node@20.5.1)(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(codemirror@6.0.2)(esbuild@0.27.2)(koa@3.0.1)(less@4.1.3)(lightningcss@1.30.1)(pg@8.8.0)(react-dom@18.3.1(react@18.3.1))(react-router-dom@6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)(redux@4.2.1)(sass-embedded@1.85.1)(sass@1.85.1)(styled-components@6.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(terser@5.31.5)(type-fest@4.41.0)(webpack-dev-server@5.2.2(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.27.2))) + '@strapi/utils': 5.33.3 + graphql: 16.10.0 + graphql-depth-limit: 1.1.0(graphql@16.10.0) + graphql-playground-middleware-koa: 1.6.22(koa@3.0.1) + graphql-scalars: 1.22.2(graphql@16.10.0) + koa-bodyparser: 4.4.1 + koa-compose: 4.1.0 + lodash: 4.17.21 + nexus: 1.3.0(graphql@16.10.0) + pluralize: 8.0.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router-dom: 6.30.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + styled-components: 6.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + transitivePeerDependencies: + - '@babel/runtime' + - '@codemirror/autocomplete' + - '@codemirror/language' + - '@codemirror/lint' + - '@codemirror/search' + - '@codemirror/state' + - '@codemirror/theme-one-dark' + - '@codemirror/view' + - '@types/react' + - '@types/react-dom' + - codemirror + - encoding + - koa + - supports-color + '@strapi/plugin-users-permissions@5.33.3(79d05a6b464fb10cf185b6cfbdcfd571)': dependencies: '@strapi/design-system': 2.0.1(@babel/runtime@7.28.6)(@codemirror/autocomplete@6.20.0)(@codemirror/language@6.12.1)(@codemirror/lint@6.9.2)(@codemirror/search@6.5.11)(@codemirror/state@6.5.3)(@codemirror/theme-one-dark@6.1.3)(@codemirror/view@6.39.9)(@strapi/icons@2.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)))(@types/react-dom@18.3.7(@types/react@18.3.27))(@types/react@18.3.27)(codemirror@6.0.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(styled-components@6.3.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) @@ -45588,6 +45737,8 @@ snapshots: dependencies: toggle-selection: 1.0.6 + copy-to@2.0.1: {} + copy-webpack-plugin@10.2.4(webpack@5.101.3(@swc/core@1.5.29(@swc/helpers@0.5.17))(esbuild@0.19.12)): dependencies: fast-glob: 3.3.3 @@ -49176,6 +49327,11 @@ snapshots: - typescript - utf-8-validate + graphql-depth-limit@1.1.0(graphql@16.10.0): + dependencies: + arrify: 1.0.1 + graphql: 16.10.0 + graphql-jit@0.8.7(graphql@16.10.0): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) @@ -49186,6 +49342,15 @@ snapshots: lodash.merge: 4.6.2 lodash.mergewith: 4.6.2 + graphql-playground-html@1.6.30: + dependencies: + xss: 1.0.15 + + graphql-playground-middleware-koa@1.6.22(koa@3.0.1): + dependencies: + graphql-playground-html: 1.6.30 + koa: 3.0.1 + graphql-request@6.1.0(encoding@0.1.13)(graphql@16.10.0): dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) @@ -49194,6 +49359,11 @@ snapshots: transitivePeerDependencies: - encoding + graphql-scalars@1.22.2(graphql@16.10.0): + dependencies: + graphql: 16.10.0 + tslib: 2.8.1 + graphql-scalars@1.24.2(graphql@16.10.0): dependencies: graphql: 16.10.0 @@ -51603,6 +51773,12 @@ snapshots: formidable: 2.1.5 zod: 3.25.76 + koa-bodyparser@4.4.1: + dependencies: + co-body: 6.2.0 + copy-to: 2.0.1 + type-is: 1.6.18 + koa-compose@4.1.0: {} koa-compress@5.1.1: @@ -53481,6 +53657,12 @@ snapshots: - '@babel/core' - babel-plugin-macros + nexus@1.3.0(graphql@16.10.0): + dependencies: + graphql: 16.10.0 + iterall: 1.3.0 + tslib: 2.8.1 + no-case@3.0.4: dependencies: lower-case: 2.0.2