feat(cropper): move the Image Cropper into the tools app at /cropper

- Smart Photo Editor ported from id-image-bot: queue/by-ID picture
  loading, vue-croppa editing, carvekit background cleanup, nodered
  review flow, a2loft save — restyled to the tools design language
- unified login: YOUreka session identity, phone prefilled, OTP only at
  save (a2loft's requirement); artist-login step removed
- crop_image @ domain:idid OpenFGA gate on every cropper route: cached
  5-min on reads, live on save, fail closed
- credentials (minio/azure/nodered/carvekit) via env, sole exception to
  hardcoded config; 503 when unconfigured; native FormData replaces
  form-data; new deps minio + azure-storage
- 10 new tests (35 total) with fake minio/queue/nodered/removebg/a2loft
This commit is contained in:
2026-10-01 01:13:30 +01:00
parent 531c419e32
commit d689434047
13 changed files with 2496 additions and 21 deletions
+1 -1
View File
@@ -11,7 +11,7 @@ WORKDIR /app
COPY tools/package.json tools/package-lock.json ./
RUN npm ci --omit=dev && npm cache clean --force
COPY tools/server.js tools/yrka-auth.js tools/permit.js ./
COPY tools/server.js tools/yrka-auth.js tools/permit.js tools/cropper.js ./
COPY tools/public ./public
USER node