Files
tibi-types/schemas/config/project.schema.json
T
apairon 40b441df04 feat: add new JSON schemas for Tibi configuration including fields, hooks, jobs, and permissions
- Introduced `field-list.schema.json`, `field-meta.schema.json`, and `field.schema.json` for field configurations.
- Added `hooks.schema.json` for defining hooks in the Tibi project.
- Created `image-filter.schema.json` for image processing configurations.
- Implemented `job.schema.json` for job scheduling configurations.
- Added `openapi.schema.json` for OpenAPI metadata generation.
- Introduced `permissions.schema.json` for managing permissions in the project.
- Created `project.schema.json` for overall project configuration.
- Added `projections.schema.json` for defining projections in the project.
- Implemented a validation script `validate-schemas.mjs` to ensure schema compliance.
2026-07-01 09:23:43 +00:00

323 lines
7.2 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "project.schema.json",
"title": "Tibi project config",
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^x-": {}
},
"properties": {
"namespace": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]+$"
},
"meta": {
"type": "object",
"additionalProperties": false,
"properties": {
"imageUrl": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "defs.schema.json#/definitions/evalString"
}
]
},
"permissions": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"label": {
"$ref": "defs.schema.json#/definitions/i18nText"
}
},
"required": [
"name"
]
}
},
"collectionGroups": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"name": {
"type": "string"
},
"label": {
"$ref": "defs.schema.json#/definitions/i18nText"
},
"icon": {
"type": "string"
}
},
"required": [
"name"
]
}
},
"i18n": {
"type": "object",
"additionalProperties": false,
"properties": {
"defaultLanguage": {
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"code": {
"type": "string"
},
"label": {
"$ref": "defs.schema.json#/definitions/i18nText"
}
},
"required": [
"code"
]
}
}
},
"required": [
"defaultLanguage",
"languages"
]
}
}
},
"upload": {
"$ref": "project.schema.json#/definitions/uploadConfig"
},
"collections": {
"type": "array",
"items": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "collection.schema.json"
}
]
}
},
"jobs": {
"type": "array",
"items": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "job.schema.json"
}
]
}
},
"actions": {
"type": "array",
"items": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "action.schema.json"
}
]
}
},
"assets": {
"type": "array",
"items": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "asset.schema.json"
}
]
}
},
"cors": {
"type": "object",
"additionalProperties": false,
"properties": {
"merge": {
"type": "boolean"
},
"allowOrigins": {
"type": "array",
"items": {
"type": "string"
}
},
"allowCredentials": {
"type": "boolean"
},
"allowHeaders": {
"type": "array",
"items": {
"type": "string"
}
},
"allowMethods": {
"type": "array",
"items": {
"type": "string"
}
},
"exposeHeaders": {
"type": "array",
"items": {
"type": "string"
}
},
"maxAge": {
"type": "integer",
"minimum": 0
}
}
},
"admin": {
"type": "object",
"additionalProperties": false,
"properties": {
"tokens": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"token": {
"type": "string"
},
"allowReload": {
"type": "boolean"
},
"allowRegenerateSearch": {
"type": "boolean"
},
"allowBackup": {
"type": "boolean",
"description": "Allow this token to download and restore project backups via the backup/restore API."
},
"allowSnapshots": {
"type": "boolean",
"description": "Allow this token to trigger, list, delete, restore, and download snapshots."
}
},
"required": [
"token"
]
}
}
}
},
"hook": {
"type": "object",
"additionalProperties": false,
"properties": {
"cache": {
"type": "object",
"additionalProperties": false,
"properties": {
"maxEntries": {
"type": "integer",
"minimum": 0
},
"defaultTTL": {
"type": "string"
}
}
},
"ratelimit": {
"type": "object",
"additionalProperties": false,
"properties": {
"backoffInitialDelay": {
"type": "string"
},
"backoffMaxDelay": {
"type": "string"
},
"backoffResetAfter": {
"type": "string"
},
"windowSize": {
"type": "string"
},
"windowMaxHits": {
"type": "integer",
"minimum": 0
}
}
}
}
},
"strictFields": {
"type": "boolean"
},
"snapshotPath": {
"type": "string",
"description": "Base directory for snapshot data, relative to configDir. Default: '{configDir}/snapshots'."
},
"snapshots": {
"type": "array",
"description": "List of snapshot profiles for automated point-in-time backups.",
"items": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "snapshot.schema.json"
}
]
}
},
"legacy": {
"type": "object",
"additionalProperties": false,
"properties": {
"httpCodes": {
"type": "boolean"
}
}
}
},
"required": [
"namespace"
],
"definitions": {
"uploadConfig": {
"type": "object",
"additionalProperties": false,
"properties": {
"maxBodySize": {
"type": "string"
},
"allowedMimeTypes": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
}
}