orquestador/schemas/api.schema.json

928 lines
20 KiB
JSON

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "REST DTO contracts v1",
"$defs": {
"Key": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"Revision": {
"type": "integer",
"minimum": 0
},
"Data": {
"type": "object"
},
"UtcTimestamp": {
"type": "string",
"format": "date-time",
"pattern": "Z$"
},
"ExecutionStatus": {
"type": "string",
"enum": [
"PENDING",
"RUNNING",
"RETRY_WAIT",
"SUCCEEDED",
"FAILED",
"RECONCILIATION_REQUIRED"
]
},
"FlowRef": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"flowKey": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"version": {
"type": "integer",
"minimum": 1
}
},
"required": [
"id",
"flowKey",
"version"
],
"additionalProperties": false
},
"CreateRequest": {
"type": "object",
"properties": {
"typeKey": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"data": {
"$ref": "#/$defs/Data"
}
},
"required": [
"typeKey",
"data"
],
"additionalProperties": false
},
"EventCommand": {
"type": "object",
"properties": {
"event": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"data": {
"$ref": "#/$defs/Data"
}
},
"required": [
"event",
"data"
],
"additionalProperties": false
},
"RequestView": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"typeKey": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"flow": {
"$ref": "#/$defs/FlowRef"
},
"currentState": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"data": {
"$ref": "#/$defs/Data"
},
"revision": {
"$ref": "#/$defs/Revision"
},
"activeExecutionId": {
"type": "string",
"format": "uuid"
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "Z$"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"pattern": "Z$"
}
},
"required": [
"id",
"typeKey",
"flow",
"currentState",
"data",
"revision",
"createdAt",
"updatedAt"
],
"additionalProperties": false
},
"AcceptedEvent": {
"type": "object",
"properties": {
"executionId": {
"type": "string",
"format": "uuid"
},
"requestId": {
"type": "string",
"format": "uuid"
},
"status": {
"$ref": "#/$defs/ExecutionStatus"
}
},
"required": [
"executionId",
"requestId",
"status"
],
"additionalProperties": false
},
"BusinessResult": {
"type": "object",
"properties": {
"outcome": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"fromState": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"toState": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"reasonCodes": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"minItems": 0,
"maxItems": 100
}
},
"required": [
"outcome",
"fromState",
"toState"
],
"additionalProperties": false
},
"ExecutionError": {
"type": "object",
"properties": {
"code": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"message": {
"type": "string",
"maxLength": 2000
}
},
"required": [
"code"
],
"additionalProperties": false
},
"ExecutionView": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"requestId": {
"type": "string",
"format": "uuid"
},
"event": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"status": {
"$ref": "#/$defs/ExecutionStatus"
},
"result": {
"$ref": "#/$defs/BusinessResult"
},
"error": {
"$ref": "#/$defs/ExecutionError"
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "Z$"
},
"updatedAt": {
"type": "string",
"format": "date-time",
"pattern": "Z$"
}
},
"required": [
"id",
"requestId",
"event",
"status",
"createdAt",
"updatedAt"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"const": "SUCCEEDED"
}
}
},
"then": {
"required": [
"result"
],
"not": {
"required": [
"error"
]
}
},
"else": {
"not": {
"required": [
"result"
]
}
}
}
]
},
"AvailableEvent": {
"type": "object",
"properties": {
"event": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"inputSchema": {
"$ref": "flow-definition.schema.json#/$defs/InlineSchema"
},
"ui": {
"$ref": "flow-definition.schema.json#/$defs/Ui"
}
},
"required": [
"event",
"inputSchema"
],
"additionalProperties": false
},
"BlockedEvent": {
"type": "object",
"properties": {
"event": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"reasonCode": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
}
},
"required": [
"event",
"reasonCode"
],
"additionalProperties": false
},
"AvailableEvents": {
"type": "object",
"properties": {
"requestId": {
"type": "string",
"format": "uuid"
},
"revision": {
"type": "integer",
"minimum": 0
},
"events": {
"type": "array",
"items": {
"$ref": "#/$defs/AvailableEvent"
},
"minItems": 0,
"maxItems": 500
},
"blocked": {
"type": "array",
"items": {
"$ref": "#/$defs/BlockedEvent"
},
"minItems": 0,
"maxItems": 500
},
"blockedByExecutionId": {
"type": "string",
"format": "uuid"
}
},
"required": [
"requestId",
"revision",
"events",
"blocked"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"required": [
"blockedByExecutionId"
]
},
"then": {
"properties": {
"events": {
"maxItems": 0
}
}
}
}
]
},
"Violation": {
"type": "object",
"properties": {
"pointer": {
"type": "string",
"pattern": "^(?:/(?:[^~/]|~[01])*)*$"
},
"code": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"message": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"pointer",
"code",
"message"
],
"additionalProperties": false
},
"ValidationReport": {
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"errors": {
"type": "array",
"items": {
"$ref": "#/$defs/Violation"
},
"minItems": 0,
"maxItems": 1000
}
},
"required": [
"valid",
"errors"
],
"additionalProperties": false,
"oneOf": [
{
"properties": {
"valid": {
"const": true
},
"errors": {
"maxItems": 0
}
}
},
{
"properties": {
"valid": {
"const": false
},
"errors": {
"minItems": 1
}
}
}
]
},
"Problem": {
"type": "object",
"properties": {
"type": {
"type": "string",
"format": "uri-reference"
},
"title": {
"type": "string",
"minLength": 1
},
"status": {
"type": "integer",
"minimum": 400,
"maximum": 599
},
"detail": {
"type": "string",
"maxLength": 2000
},
"instance": {
"type": "string",
"format": "uri-reference"
},
"code": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"correlationId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"errors": {
"type": "array",
"items": {
"$ref": "#/$defs/Violation"
},
"minItems": 0,
"maxItems": 1000
}
},
"required": [
"type",
"title",
"status",
"code",
"correlationId"
],
"additionalProperties": false
},
"AuditEntry": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"requestId": {
"type": "string",
"format": "uuid"
},
"executionId": {
"type": "string",
"format": "uuid"
},
"kind": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"actorSubject": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"flowId": {
"type": "string",
"format": "uuid"
},
"fromState": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"toState": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"detail": {
"$ref": "#/$defs/Data"
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "Z$"
}
},
"required": [
"id",
"requestId",
"kind",
"actorSubject",
"flowId",
"detail",
"createdAt"
],
"additionalProperties": false
},
"HistoryPage": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/$defs/AuditEntry"
},
"minItems": 0,
"maxItems": 100
},
"nextCursor": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"items"
],
"additionalProperties": false
},
"FlowView": {
"type": "object",
"properties": {
"id": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string",
"enum": [
"DRAFT",
"PUBLISHED",
"RETIRED"
]
},
"revision": {
"type": "integer",
"minimum": 0
},
"definition": {
"$ref": "flow-definition.schema.json"
},
"checksum": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"createdAt": {
"type": "string",
"format": "date-time",
"pattern": "Z$"
},
"createdBy": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"publishedAt": {
"type": "string",
"format": "date-time",
"pattern": "Z$"
}
},
"required": [
"id",
"status",
"revision",
"definition",
"createdAt",
"createdBy"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"status": {
"type": "string",
"enum": [
"PUBLISHED",
"RETIRED"
]
}
}
},
"then": {
"required": [
"checksum",
"publishedAt"
]
}
}
]
},
"ActivateFlow": {
"type": "object",
"properties": {
"flowId": {
"type": "string",
"format": "uuid"
}
},
"required": [
"flowId"
],
"additionalProperties": false
},
"RequestTypeView": {
"type": "object",
"properties": {
"typeKey": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"activeFlowId": {
"type": "string",
"format": "uuid"
},
"enabled": {
"type": "boolean"
},
"revision": {
"type": "integer",
"minimum": 0
}
},
"required": [
"typeKey",
"activeFlowId",
"enabled",
"revision"
],
"additionalProperties": false
},
"SimulationInput": {
"type": "object",
"properties": {
"state": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"requestData": {
"$ref": "#/$defs/Data"
},
"event": {
"$ref": "#/$defs/EventCommand"
},
"actor": {
"type": "object",
"properties": {
"subject": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"roles": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"minItems": 0,
"uniqueItems": true,
"maxItems": 100
},
"businessScope": {
"type": "string",
"minLength": 1,
"maxLength": 100
}
},
"required": [
"subject",
"roles",
"businessScope"
],
"additionalProperties": false
},
"results": {
"type": "object",
"propertyNames": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"additionalProperties": {
"type": "object"
}
}
},
"required": [
"state",
"requestData",
"event",
"actor",
"results"
],
"additionalProperties": false
},
"SimulationResult": {
"type": "object",
"properties": {
"transitionId": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"outcome": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"toState": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"data": {
"$ref": "#/$defs/Data"
},
"matchedRuleIds": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"minItems": 0,
"maxItems": 1000
}
},
"required": [
"transitionId",
"outcome",
"toState",
"data",
"matchedRuleIds"
],
"additionalProperties": false
},
"ReconciliationCommand": {
"oneOf": [
{
"type": "object",
"properties": {
"mode": {
"const": "RESUME"
},
"evidence": {
"type": "object",
"properties": {
"reference": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"reference",
"reason"
],
"additionalProperties": false
},
"verifiedActions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"actionId": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,99}$"
},
"result": {
"$ref": "#/$defs/Data"
},
"providerReference": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"actionId",
"result"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 50
}
},
"required": [
"mode",
"evidence",
"verifiedActions"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"mode": {
"const": "CLOSE_WITHOUT_TRANSITION"
},
"evidence": {
"type": "object",
"properties": {
"reference": {
"type": "string",
"minLength": 1,
"maxLength": 500
},
"reason": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [
"reference",
"reason"
],
"additionalProperties": false
},
"effectStatus": {
"type": "string",
"enum": [
"ABSENT_VERIFIED",
"COMPENSATED_VERIFIED"
]
}
},
"required": [
"mode",
"evidence",
"effectStatus"
],
"additionalProperties": false
}
]
},
"ReconciliationView": {
"type": "object",
"properties": {
"resolutionId": {
"type": "string",
"format": "uuid"
},
"executionId": {
"type": "string",
"format": "uuid"
},
"status": {
"type": "string",
"enum": [
"PENDING",
"FAILED"
]
},
"resolvedAt": {
"type": "string",
"format": "date-time",
"pattern": "Z$"
}
},
"required": [
"resolutionId",
"executionId",
"status",
"resolvedAt"
],
"additionalProperties": false
}
}
}