@loxtep/sdk 0.7.22 → 0.7.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +6 -1
  3. package/dist/cli/commands/connectors-cmd.d.ts +23 -0
  4. package/dist/cli/commands/connectors-cmd.d.ts.map +1 -0
  5. package/dist/cli/commands/connectors-cmd.js +32 -0
  6. package/dist/cli/commands/connectors-cmd.js.map +1 -0
  7. package/dist/cli/commands/deploy-cmd.d.ts +5 -1
  8. package/dist/cli/commands/deploy-cmd.d.ts.map +1 -1
  9. package/dist/cli/commands/deploy-cmd.js +25 -2
  10. package/dist/cli/commands/deploy-cmd.js.map +1 -1
  11. package/dist/cli/commands/ingest-cmd.d.ts +7 -2
  12. package/dist/cli/commands/ingest-cmd.d.ts.map +1 -1
  13. package/dist/cli/commands/ingest-cmd.js +119 -29
  14. package/dist/cli/commands/ingest-cmd.js.map +1 -1
  15. package/dist/cli/commands/lint-cmd.d.ts +17 -0
  16. package/dist/cli/commands/lint-cmd.d.ts.map +1 -0
  17. package/dist/cli/commands/lint-cmd.js +61 -0
  18. package/dist/cli/commands/lint-cmd.js.map +1 -0
  19. package/dist/cli/help.d.ts.map +1 -1
  20. package/dist/cli/help.js +11 -3
  21. package/dist/cli/help.js.map +1 -1
  22. package/dist/cli/index.js +24 -3
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/client/connectors.d.ts.map +1 -1
  25. package/dist/client/connectors.js +7 -1
  26. package/dist/client/connectors.js.map +1 -1
  27. package/dist/errors/parse-http.d.ts.map +1 -1
  28. package/dist/errors/parse-http.js +33 -10
  29. package/dist/errors/parse-http.js.map +1 -1
  30. package/dist/index.d.ts +5 -2
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +3 -1
  33. package/dist/index.js.map +1 -1
  34. package/dist/lib/entity-json-schemas/ajv-loader.cjs +17 -0
  35. package/dist/lib/entity-json-schemas/index.d.ts +5 -0
  36. package/dist/lib/entity-json-schemas/index.d.ts.map +1 -0
  37. package/dist/lib/entity-json-schemas/index.js +3 -0
  38. package/dist/lib/entity-json-schemas/index.js.map +1 -0
  39. package/dist/lib/entity-json-schemas/types.d.ts +21 -0
  40. package/dist/lib/entity-json-schemas/types.d.ts.map +1 -0
  41. package/dist/lib/entity-json-schemas/types.js +32 -0
  42. package/dist/lib/entity-json-schemas/types.js.map +1 -0
  43. package/dist/lib/entity-json-schemas/validate-entity.d.ts +39 -0
  44. package/dist/lib/entity-json-schemas/validate-entity.d.ts.map +1 -0
  45. package/dist/lib/entity-json-schemas/validate-entity.js +143 -0
  46. package/dist/lib/entity-json-schemas/validate-entity.js.map +1 -0
  47. package/dist/lib/sdk-ingest-bundle.d.ts +60 -4
  48. package/dist/lib/sdk-ingest-bundle.d.ts.map +1 -1
  49. package/dist/lib/sdk-ingest-bundle.js +144 -51
  50. package/dist/lib/sdk-ingest-bundle.js.map +1 -1
  51. package/dist/lib/workspace-lint.d.ts +28 -0
  52. package/dist/lib/workspace-lint.d.ts.map +1 -0
  53. package/dist/lib/workspace-lint.js +199 -0
  54. package/dist/lib/workspace-lint.js.map +1 -0
  55. package/docs/getting-started.md +2 -0
  56. package/docs/quick-reference.md +1 -0
  57. package/docs/sdk-first-ingest.md +19 -3
  58. package/package.json +6 -2
  59. package/schemas/entity-json-schemas/SCHEMA_SYNC.md +18 -0
  60. package/schemas/entity-json-schemas/connection.json +310 -0
  61. package/schemas/entity-json-schemas/connector.json +188 -0
  62. package/schemas/entity-json-schemas/container.json +71 -0
  63. package/schemas/entity-json-schemas/contract.json +228 -0
  64. package/schemas/entity-json-schemas/data-product.json +163 -0
  65. package/schemas/entity-json-schemas/domain.json +74 -0
  66. package/schemas/entity-json-schemas/export.json +126 -0
  67. package/schemas/entity-json-schemas/odps-product.json +150 -0
  68. package/schemas/entity-json-schemas/quality-rule.json +115 -0
  69. package/schemas/entity-json-schemas/schema.json +206 -0
  70. package/schemas/entity-json-schemas/transformation.json +166 -0
  71. package/schemas/entity-json-schemas/validation.json +152 -0
  72. package/schemas/entity-json-schemas/workflow-graph.json +116 -0
  73. package/schemas/entity-json-schemas/workflow.json +193 -0
@@ -0,0 +1,166 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://loxtep.io/schemas/entity/transformation.json",
4
+ "title": "Transformation Entity",
5
+ "description": "JSON Schema for Transformation entity in customer workspace. Transformations are pure functions that mutate/enrich events within a workflow flow. Each transformation references its workflow via workflow_id and its upstream entity (connection or previous transformation) via upstream_entity_id.",
6
+ "type": "object",
7
+ "required": [
8
+ "transformation_id",
9
+ "organization_id",
10
+ "project_id",
11
+ "workflow_id",
12
+ "name",
13
+ "transform_type",
14
+ "operation_config",
15
+ "created_at",
16
+ "updated_at"
17
+ ],
18
+ "properties": {
19
+ "transformation_id": {
20
+ "type": "string",
21
+ "format": "uuid",
22
+ "description": "Unique identifier for the transformation"
23
+ },
24
+ "organization_id": {
25
+ "type": "string",
26
+ "format": "uuid",
27
+ "description": "Organization that owns this transformation"
28
+ },
29
+ "project_id": {
30
+ "type": "string",
31
+ "format": "uuid",
32
+ "description": "Project that contains this transformation"
33
+ },
34
+ "workflow_id": {
35
+ "type": "string",
36
+ "format": "uuid",
37
+ "description": "Workflow this transformation belongs to"
38
+ },
39
+ "upstream_entity_id": {
40
+ "type": ["string", "null"],
41
+ "format": "uuid",
42
+ "description": "Reference to the upstream entity in the flow graph (connection or previous transformation). Null only when this is the first transformation directly after the trigger connection."
43
+ },
44
+ "upstream_entity_type": {
45
+ "type": ["string", "null"],
46
+ "enum": ["connections", "transformations", null],
47
+ "description": "Entity type of the upstream entity (connections or transformations)"
48
+ },
49
+ "name": {
50
+ "type": "string",
51
+ "minLength": 1,
52
+ "maxLength": 255,
53
+ "description": "Transformation name"
54
+ },
55
+ "description": {
56
+ "type": ["string", "null"],
57
+ "maxLength": 1000,
58
+ "description": "Transformation description"
59
+ },
60
+ "transform_type": {
61
+ "type": "string",
62
+ "enum": [
63
+ "drop_fields",
64
+ "select_fields",
65
+ "rename_field",
66
+ "drop_null_fields",
67
+ "drop_duplicates",
68
+ "flatten",
69
+ "explode_array",
70
+ "array_to_column",
71
+ "capitalize",
72
+ "format_timestamp",
73
+ "add_current_timestamp",
74
+ "parse_json",
75
+ "xml_to_json",
76
+ "extract_json_path",
77
+ "regex_extractor",
78
+ "concatenate_columns",
79
+ "derived_columns",
80
+ "fill_missing_values",
81
+ "detect_sensitive_data",
82
+ "evaluate_data_quality",
83
+ "change_schema",
84
+ "filter",
85
+ "batch",
86
+ "delay",
87
+ "split",
88
+ "execute_code_function",
89
+ "crypto",
90
+ "formatter",
91
+ "assign_identifier",
92
+ "remove_null_events",
93
+ "map",
94
+ "enrich",
95
+ "add_fields",
96
+ "rename_fields",
97
+ "custom"
98
+ ],
99
+ "description": "Type of transformation operation"
100
+ },
101
+ "operation_config": {
102
+ "type": "object",
103
+ "additionalProperties": true,
104
+ "description": "Transformation-specific configuration parameters",
105
+ "examples": [
106
+ {
107
+ "fields": ["field1", "field2"]
108
+ },
109
+ {
110
+ "condition": "status === 'active'"
111
+ },
112
+ {
113
+ "field": "name",
114
+ "case": "upper"
115
+ }
116
+ ]
117
+ },
118
+ "input_schema": {
119
+ "type": ["object", "null"],
120
+ "description": "Optional: JSON Schema of input events (for validation and type checking). Any JSON Schema object.",
121
+ "additionalProperties": true
122
+ },
123
+ "output_schema": {
124
+ "type": ["object", "null"],
125
+ "description": "Optional: JSON Schema of output events after transformation (typically inferred). Any JSON Schema object.",
126
+ "additionalProperties": true
127
+ },
128
+ "order": {
129
+ "type": ["integer", "null"],
130
+ "minimum": 0,
131
+ "description": "Default execution order when used in workflows (lower = earlier)"
132
+ },
133
+ "metadata": {
134
+ "type": "object",
135
+ "additionalProperties": true,
136
+ "default": {},
137
+ "description": "Additional metadata for the transformation"
138
+ },
139
+ "created_by": {
140
+ "type": ["string", "null"],
141
+ "format": "uuid",
142
+ "description": "User ID who created the transformation"
143
+ },
144
+ "updated_by": {
145
+ "type": ["string", "null"],
146
+ "format": "uuid",
147
+ "description": "User ID who last updated the transformation"
148
+ },
149
+ "created_at": {
150
+ "type": "string",
151
+ "format": "date-time",
152
+ "description": "ISO 8601 timestamp when transformation was created"
153
+ },
154
+ "updated_at": {
155
+ "type": "string",
156
+ "format": "date-time",
157
+ "description": "ISO 8601 timestamp when transformation was last updated"
158
+ },
159
+ "deleted_at": {
160
+ "type": ["string", "null"],
161
+ "format": "date-time",
162
+ "description": "ISO 8601 timestamp when transformation was deleted (soft delete)"
163
+ }
164
+ },
165
+ "additionalProperties": false
166
+ }
@@ -0,0 +1,152 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://loxtep.io/schemas/entity/validation.json",
4
+ "title": "Validation Entity",
5
+ "description": "JSON Schema for Validation entity in customer workspace. Validations are rules that assert data quality and reject invalid events within a workflow flow. Each validation references its workflow via workflow_id and the upstream entity it applies to via upstream_entity_id.",
6
+ "type": "object",
7
+ "required": [
8
+ "validation_id",
9
+ "organization_id",
10
+ "project_id",
11
+ "workflow_id",
12
+ "name",
13
+ "validation_type",
14
+ "rules",
15
+ "severity",
16
+ "created_at",
17
+ "updated_at"
18
+ ],
19
+ "properties": {
20
+ "validation_id": {
21
+ "type": "string",
22
+ "format": "uuid",
23
+ "description": "Unique identifier for the validation"
24
+ },
25
+ "organization_id": {
26
+ "type": "string",
27
+ "format": "uuid",
28
+ "description": "Organization that owns this validation"
29
+ },
30
+ "project_id": {
31
+ "type": "string",
32
+ "format": "uuid",
33
+ "description": "Project that contains this validation"
34
+ },
35
+ "workflow_id": {
36
+ "type": "string",
37
+ "format": "uuid",
38
+ "description": "Workflow this validation belongs to"
39
+ },
40
+ "upstream_entity_id": {
41
+ "type": ["string", "null"],
42
+ "format": "uuid",
43
+ "description": "Reference to the upstream entity this validation applies to (connection, transformation, or data product)"
44
+ },
45
+ "upstream_entity_type": {
46
+ "type": ["string", "null"],
47
+ "enum": ["connections", "transformations", "data-products", null],
48
+ "description": "Entity type of the upstream entity"
49
+ },
50
+ "name": {
51
+ "type": "string",
52
+ "minLength": 1,
53
+ "maxLength": 255,
54
+ "description": "Validation name"
55
+ },
56
+ "description": {
57
+ "type": ["string", "null"],
58
+ "maxLength": 1000,
59
+ "description": "Validation description"
60
+ },
61
+ "validation_type": {
62
+ "type": "string",
63
+ "enum": [
64
+ "schema",
65
+ "business_rule",
66
+ "data_quality",
67
+ "pii_check",
68
+ "completeness",
69
+ "format"
70
+ ],
71
+ "description": "Type of validation"
72
+ },
73
+ "schema_id": {
74
+ "type": "string",
75
+ "format": "uuid",
76
+ "description": "Org domain schema reference; deploy resolves latest active version into rules.schema when rules.schema is empty"
77
+ },
78
+ "schema_version_id": {
79
+ "type": "string",
80
+ "format": "uuid",
81
+ "description": "Pinned org domain schema version; deploy resolves definition into rules.schema when rules.schema is empty"
82
+ },
83
+ "rules": {
84
+ "type": "object",
85
+ "additionalProperties": true,
86
+ "description": "Validation rules (structure depends on validation_type). For validation_type schema, rules.schema holds the JSON Schema; rules.schema_id may reference org registry instead.",
87
+ "examples": [
88
+ {
89
+ "schema": {
90
+ "type": "object",
91
+ "description": "JSON Schema for validation"
92
+ }
93
+ },
94
+ {
95
+ "condition": "field > 100",
96
+ "message": "Field must be greater than 100"
97
+ },
98
+ {
99
+ "required_fields": ["email", "name"],
100
+ "completeness_threshold": 0.95
101
+ }
102
+ ]
103
+ },
104
+ "severity": {
105
+ "type": "string",
106
+ "enum": ["error", "warning", "info"],
107
+ "description": "Severity level when validation fails"
108
+ },
109
+ "error_message": {
110
+ "type": ["string", "null"],
111
+ "maxLength": 500,
112
+ "description": "Custom error message when validation fails"
113
+ },
114
+ "order": {
115
+ "type": ["integer", "null"],
116
+ "minimum": 0,
117
+ "description": "Default execution order when used in workflows (lower = earlier)"
118
+ },
119
+ "metadata": {
120
+ "type": "object",
121
+ "additionalProperties": true,
122
+ "default": {},
123
+ "description": "Additional metadata for the validation"
124
+ },
125
+ "created_by": {
126
+ "type": ["string", "null"],
127
+ "format": "uuid",
128
+ "description": "User ID who created the validation"
129
+ },
130
+ "updated_by": {
131
+ "type": ["string", "null"],
132
+ "format": "uuid",
133
+ "description": "User ID who last updated the validation"
134
+ },
135
+ "created_at": {
136
+ "type": "string",
137
+ "format": "date-time",
138
+ "description": "ISO 8601 timestamp when validation was created"
139
+ },
140
+ "updated_at": {
141
+ "type": "string",
142
+ "format": "date-time",
143
+ "description": "ISO 8601 timestamp when validation was last updated"
144
+ },
145
+ "deleted_at": {
146
+ "type": ["string", "null"],
147
+ "format": "date-time",
148
+ "description": "ISO 8601 timestamp when validation was deleted (soft delete)"
149
+ }
150
+ },
151
+ "additionalProperties": false
152
+ }
@@ -0,0 +1,116 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://loxtep.io/schemas/workflow-graph.json",
4
+ "title": "Workflow Graph",
5
+ "description": "Materialized read-only graph view for a workflow (flow). Built from per-entity S3 files; not a writable entity type.",
6
+ "type": "object",
7
+ "required": [
8
+ "workflow_id",
9
+ "organization_id",
10
+ "project_id",
11
+ "version",
12
+ "built_at",
13
+ "workflow",
14
+ "nodes",
15
+ "edges",
16
+ "connectors",
17
+ "deployment",
18
+ "metadata"
19
+ ],
20
+ "properties": {
21
+ "workflow_id": { "type": "string", "format": "uuid" },
22
+ "organization_id": { "type": "string", "format": "uuid" },
23
+ "project_id": { "type": "string", "format": "uuid" },
24
+ "version": { "type": "integer", "minimum": 1 },
25
+ "built_at": { "type": "string", "format": "date-time" },
26
+ "applied_template_digest": { "type": ["string", "null"] },
27
+ "workflow": {
28
+ "type": "object",
29
+ "description": "Full workflow.json entity snapshot"
30
+ },
31
+ "nodes": {
32
+ "type": "object",
33
+ "additionalProperties": {
34
+ "type": "object",
35
+ "required": ["entity_type", "entity_id", "data"],
36
+ "properties": {
37
+ "entity_type": { "type": "string" },
38
+ "entity_id": { "type": "string", "format": "uuid" },
39
+ "upstream_entity_id": { "type": ["string", "null"] },
40
+ "deployment_status": {
41
+ "type": "string",
42
+ "enum": ["undeployed", "deployed", "stale"]
43
+ },
44
+ "container_id": { "type": ["string", "null"] },
45
+ "data": { "type": "object" }
46
+ }
47
+ }
48
+ },
49
+ "edges": {
50
+ "type": "array",
51
+ "items": {
52
+ "type": "object",
53
+ "required": ["from", "to", "type"],
54
+ "properties": {
55
+ "from": { "type": "string" },
56
+ "to": { "type": "string" },
57
+ "type": { "type": "string", "enum": ["upstream"] }
58
+ }
59
+ }
60
+ },
61
+ "connectors": {
62
+ "type": "object",
63
+ "additionalProperties": { "type": "object" }
64
+ },
65
+ "deployment": {
66
+ "type": "object",
67
+ "required": [
68
+ "deployment_id",
69
+ "deployed_at",
70
+ "version_id",
71
+ "microservice_id",
72
+ "runtime_mapping"
73
+ ],
74
+ "properties": {
75
+ "deployment_id": { "type": ["string", "null"], "format": "uuid" },
76
+ "deployed_at": { "type": ["string", "null"], "format": "date-time" },
77
+ "version_id": { "type": ["string", "null"], "format": "uuid" },
78
+ "microservice_id": { "type": ["string", "null"] },
79
+ "runtime_mapping": {
80
+ "type": "object",
81
+ "properties": {
82
+ "containers": {
83
+ "type": "array",
84
+ "items": {
85
+ "type": "object",
86
+ "properties": {
87
+ "container_id": { "type": "string" },
88
+ "entity_id": { "type": "string" },
89
+ "entity_type": { "type": "string" },
90
+ "bot_ids": { "type": "array", "items": { "type": "string" } },
91
+ "queue_ids": {
92
+ "type": "array",
93
+ "items": { "type": "string" }
94
+ }
95
+ }
96
+ }
97
+ },
98
+ "all_bot_ids": { "type": "array", "items": { "type": "string" } },
99
+ "all_queue_ids": { "type": "array", "items": { "type": "string" } }
100
+ }
101
+ }
102
+ }
103
+ },
104
+ "metadata": {
105
+ "type": "object",
106
+ "properties": {
107
+ "node_count": { "type": "integer" },
108
+ "entity_type_counts": {
109
+ "type": "object",
110
+ "additionalProperties": { "type": "integer" }
111
+ },
112
+ "requires_redeployment": { "type": "boolean" }
113
+ }
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,193 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://loxtep.io/schemas/entity/workflow.json",
4
+ "title": "Workflow Entity",
5
+ "description": "JSON Schema for the root workflow entity in customer workspace. A workflow is a flow. Flow nodes (connection, transformation, validation, data product) reference the workflow via workflow_id and point upstream via upstream_entity_id; the workflow does not store node IDs. template_id identifies the flow starter template used to create this flow (e.g. blank, webhook-ingestion), distinct from connector catalog templates.",
6
+ "type": "object",
7
+ "required": [
8
+ "workflow_id",
9
+ "organization_id",
10
+ "project_id",
11
+ "name",
12
+ "template_id",
13
+ "workflow_type",
14
+ "domain_id",
15
+ "status",
16
+ "created_at",
17
+ "updated_at"
18
+ ],
19
+ "properties": {
20
+ "workflow_id": {
21
+ "type": "string",
22
+ "format": "uuid",
23
+ "description": "Unique identifier for the workflow"
24
+ },
25
+ "organization_id": {
26
+ "type": "string",
27
+ "format": "uuid",
28
+ "description": "Organization that owns this workflow"
29
+ },
30
+ "project_id": {
31
+ "type": "string",
32
+ "format": "uuid",
33
+ "description": "Project that contains this workflow"
34
+ },
35
+ "name": {
36
+ "type": "string",
37
+ "minLength": 1,
38
+ "maxLength": 255,
39
+ "description": "Workflow display name"
40
+ },
41
+ "description": {
42
+ "type": ["string", "null"],
43
+ "maxLength": 1000,
44
+ "description": "Workflow description"
45
+ },
46
+ "template_id": {
47
+ "type": "string",
48
+ "format": "uuid",
49
+ "description": "Workflow starter template identifier used when this flow was created (e.g. blank, webhook-ingestion). Distinct from connector catalog templates."
50
+ },
51
+ "workflow_type": {
52
+ "type": "string",
53
+ "enum": ["ingestion", "enrichment", "consumption"],
54
+ "description": "Type of flow: ingestion (ingest from external sources), enrichment (transform/join data), consumption (expose or consume data products)."
55
+ },
56
+ "domain_id": {
57
+ "type": "string",
58
+ "format": "uuid",
59
+ "description": "Domain this workflow belongs to (required)."
60
+ },
61
+ "segments": {
62
+ "type": "array",
63
+ "default": [],
64
+ "description": "Visual groupings of nodes in the graph editor.",
65
+ "items": {
66
+ "type": "object",
67
+ "properties": {
68
+ "segment_id": {
69
+ "type": "string",
70
+ "description": "Unique identifier for the segment"
71
+ },
72
+ "name": { "type": "string", "description": "Display name" },
73
+ "description": {
74
+ "type": ["string", "null"],
75
+ "description": "Optional description"
76
+ },
77
+ "node_ids": {
78
+ "type": "array",
79
+ "items": { "type": "string" },
80
+ "description": "Entity IDs of nodes in this segment"
81
+ },
82
+ "color": {
83
+ "type": ["string", "null"],
84
+ "description": "Optional color for UI"
85
+ }
86
+ },
87
+ "additionalProperties": false
88
+ }
89
+ },
90
+ "trigger": {
91
+ "type": ["object", "null"],
92
+ "description": "Workflow trigger configuration (event, schedule, or connector).",
93
+ "properties": {
94
+ "event": {
95
+ "type": ["string", "null"],
96
+ "description": "Event-based trigger (e.g. webhook, queue)"
97
+ },
98
+ "schedule": {
99
+ "type": ["string", "null"],
100
+ "description": "Cron or interval for scheduled execution"
101
+ },
102
+ "connector": {
103
+ "type": ["string", "null"],
104
+ "format": "uuid",
105
+ "description": "Connector ID for connector-driven triggers"
106
+ }
107
+ },
108
+ "additionalProperties": false
109
+ },
110
+ "configuration": {
111
+ "type": "object",
112
+ "description": "Workflow configuration (schedule, batch_size, etc.). Flow nodes are discovered by workflow_id and upstream_entity_id; the workflow does not store connection_id or transformation_ids.",
113
+ "properties": {
114
+ "schedule": {
115
+ "type": ["string", "null"],
116
+ "description": "Cron expression for scheduled execution (optional)"
117
+ },
118
+ "batch_size": {
119
+ "type": ["integer", "null"],
120
+ "minimum": 1,
121
+ "description": "Number of events to process per batch"
122
+ }
123
+ },
124
+ "additionalProperties": false
125
+ },
126
+ "deployment": {
127
+ "type": ["object", "null"],
128
+ "description": "Deployment information (set when workflow is deployed)",
129
+ "properties": {
130
+ "instance_id": {
131
+ "type": "string",
132
+ "format": "uuid"
133
+ },
134
+ "lambda_functions": {
135
+ "type": "array",
136
+ "items": {
137
+ "type": "string"
138
+ }
139
+ },
140
+ "queues": {
141
+ "type": "array",
142
+ "items": {
143
+ "type": "string"
144
+ }
145
+ }
146
+ },
147
+ "additionalProperties": false
148
+ },
149
+ "status": {
150
+ "type": "string",
151
+ "enum": ["active", "paused", "error", "pending", "inactive"],
152
+ "description": "Workflow status"
153
+ },
154
+ "metrics": {
155
+ "type": "object",
156
+ "additionalProperties": true,
157
+ "default": {},
158
+ "description": "Workflow metrics (events processed, error rate, etc.)"
159
+ },
160
+ "metadata": {
161
+ "type": "object",
162
+ "additionalProperties": true,
163
+ "default": {},
164
+ "description": "Additional metadata for the workflow"
165
+ },
166
+ "created_by": {
167
+ "type": ["string", "null"],
168
+ "format": "uuid",
169
+ "description": "User ID who created the workflow"
170
+ },
171
+ "updated_by": {
172
+ "type": ["string", "null"],
173
+ "format": "uuid",
174
+ "description": "User ID who last updated the workflow"
175
+ },
176
+ "created_at": {
177
+ "type": "string",
178
+ "format": "date-time",
179
+ "description": "ISO 8601 timestamp when workflow was created"
180
+ },
181
+ "updated_at": {
182
+ "type": "string",
183
+ "format": "date-time",
184
+ "description": "ISO 8601 timestamp when workflow was last updated"
185
+ },
186
+ "deleted_at": {
187
+ "type": ["string", "null"],
188
+ "format": "date-time",
189
+ "description": "ISO 8601 timestamp when workflow was deleted (soft delete)"
190
+ }
191
+ },
192
+ "additionalProperties": false
193
+ }