You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
New ArkosFile type — exported from arkos, extending Express.Multer.File with required pathname and url fields. ArkosRequest.file and ArkosRequest.files are now typed as ArkosFile / ArkosFile[] instead of the raw Multer type.
isProduction() helper exposed — returns whether the app is running via arkos start after arkos build (checks ARKOS_BUILD env var).
404 handling for missing uploaded files — the static file-serving middleware now catches ENOENT errors and throws a proper AppError (404, FileNotFound) instead of silently falling through. expressStatic.fallthrough now defaults to false.
Smarter OpenAPI generation for uploads:
Upload field descriptions now clarify "Single file field" vs "Array file field," in addition to size limits.
multipart/form-data is generated alone when upload fields are required; application/json is now also generated alongside it when uploads are optional.
Array-type binary fields no longer get an incorrect [0] suffix in flattened OpenAPI schemas.
Automatic type coercion in generated schemas:
Zod schemas generated by the CLI now use z.coerce.* for strings, numbers, booleans, dates, and bigints, so values arriving as strings (e.g. from multipart/form-data or query params) are coerced correctly.
class-validator DTOs now include @Transform decorators performing equivalent coercion for booleans, numbers, bigints, and dates.
Swagger router rebuilt on ArkosRouter — replaces the raw Express Router, using config-object route definitions ({ path, authentication }) instead of positional args.
Broader router handler typing — ArkosRouteMethodHandler, IArkosRouterMethodHandler, and UseMethodHandler now accept regular and error-handling middleware more flexibly, including arrays of mixed handler types and config objects on use.
UploadManager.isAllFieldRequired() — new helper to determine whether all fields in an upload config are required, used to decide whether application/json should also be offered as a request content type.
Documentation:
handling-relations guide expanded with a full single (one-to-one) relations section, clarifying that delete/disconnect don't require an id for single relations but do for array relations, plus new nested-relation examples.
router-upload guide reformatted and expanded with an attachToBody shape reference, showing exactly what lands on req.body for "pathname", "url", "file", and false.
Fixes
Email service — SMTP auth is only set when both user and pass are provided (previously threw if either was missing); the required-config check now only requires host. The from address is now correctly formatted with a display name when config.name is set.
Error handler — statusCode and status are now only preserved from the thrown error when err.isOperational is true; otherwise they're normalized to 500/"error".
Graceful shutdown — SIGTERM now also exits immediately when __SKIP_LISTEN is set, in addition to the existing ARKOS_BUILD check.
Swagger router authentication — fixed auth middleware chaining after the move to ArkosRouter.
Chores / Internal
Removed the unused arkos-prisma-input.bak.ts backup file.
Updated documentation links for the email service guide (/docs/guides/email-service).
1-6-beta blog post: reformatted the Multer error-mapping table.
APIFeatures constructor now typed against ArkosRequest instead of Express Request.
Various test-suite cleanups (unused parameter renames to _, swagger router tests updated for ArkosRouter mocking, updated expectations for the new fallthrough: false default and file-not-found handler).
Behavioral Changes for Scaffolded Projects (create-arkos)
The AuthPermissionAction enum has been removed from the scaffolded Prisma schema, DTOs, and Zod schemas. The action field on AuthPermission is now a plain String, validated as a non-empty string (z.string().min(1) / @IsString()) rather than a fixed enum. Existing scaffolded projects relying on the enum will need to migrate manually.