@objectstack/spec 0.1.1 → 0.1.2

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 (136) hide show
  1. package/README.md +73 -1
  2. package/dist/api/contract.zod.d.ts +1733 -0
  3. package/dist/api/contract.zod.d.ts.map +1 -0
  4. package/dist/api/contract.zod.js +138 -0
  5. package/dist/data/dataset.zod.d.ts +2 -2
  6. package/dist/data/field.zod.d.ts +1648 -10
  7. package/dist/data/field.zod.d.ts.map +1 -1
  8. package/dist/data/field.zod.js +149 -8
  9. package/dist/data/mapping.zod.d.ts +215 -2
  10. package/dist/data/mapping.zod.d.ts.map +1 -1
  11. package/dist/data/object.zod.d.ts +505 -25
  12. package/dist/data/object.zod.d.ts.map +1 -1
  13. package/dist/data/object.zod.js +32 -5
  14. package/dist/data/query.zod.d.ts +349 -0
  15. package/dist/data/query.zod.d.ts.map +1 -1
  16. package/dist/data/query.zod.js +77 -1
  17. package/dist/data/trigger.zod.d.ts +354 -0
  18. package/dist/data/trigger.zod.d.ts.map +1 -0
  19. package/dist/data/trigger.zod.js +195 -0
  20. package/dist/data/validation.zod.d.ts +83 -43
  21. package/dist/data/validation.zod.d.ts.map +1 -1
  22. package/dist/data/validation.zod.js +51 -5
  23. package/dist/index.d.ts +8 -0
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +9 -0
  26. package/dist/system/api.zod.d.ts +130 -4
  27. package/dist/system/api.zod.d.ts.map +1 -1
  28. package/dist/system/api.zod.js +4 -1
  29. package/dist/system/datasource.zod.d.ts +89 -6
  30. package/dist/system/datasource.zod.d.ts.map +1 -1
  31. package/dist/system/datasource.zod.js +33 -5
  32. package/dist/system/discovery.zod.d.ts +174 -0
  33. package/dist/system/discovery.zod.d.ts.map +1 -0
  34. package/dist/system/discovery.zod.js +53 -0
  35. package/dist/system/driver.zod.d.ts +1525 -0
  36. package/dist/system/driver.zod.d.ts.map +1 -0
  37. package/dist/system/driver.zod.js +290 -0
  38. package/dist/system/license.zod.d.ts +2 -2
  39. package/dist/system/manifest.zod.d.ts +323 -52
  40. package/dist/system/manifest.zod.d.ts.map +1 -1
  41. package/dist/system/manifest.zod.js +91 -17
  42. package/dist/system/plugin.zod.d.ts +3516 -0
  43. package/dist/system/plugin.zod.d.ts.map +1 -0
  44. package/dist/system/plugin.zod.js +226 -0
  45. package/dist/system/territory.zod.d.ts +1 -1
  46. package/dist/system/webhook.zod.d.ts +3 -3
  47. package/dist/ui/action.zod.d.ts +19 -12
  48. package/dist/ui/action.zod.d.ts.map +1 -1
  49. package/dist/ui/action.zod.js +7 -1
  50. package/dist/ui/app.zod.d.ts +109 -3
  51. package/dist/ui/app.zod.d.ts.map +1 -1
  52. package/dist/ui/app.zod.js +13 -2
  53. package/dist/ui/dashboard.zod.d.ts +9 -3
  54. package/dist/ui/dashboard.zod.d.ts.map +1 -1
  55. package/dist/ui/dashboard.zod.js +7 -1
  56. package/dist/ui/page.zod.d.ts +6 -6
  57. package/dist/ui/report.zod.d.ts +9 -0
  58. package/dist/ui/report.zod.d.ts.map +1 -1
  59. package/dist/ui/report.zod.js +7 -1
  60. package/dist/ui/theme.zod.d.ts +1221 -0
  61. package/dist/ui/theme.zod.d.ts.map +1 -0
  62. package/dist/ui/theme.zod.js +202 -0
  63. package/dist/ui/widget.zod.d.ts +350 -0
  64. package/dist/ui/widget.zod.d.ts.map +1 -0
  65. package/dist/ui/widget.zod.js +66 -0
  66. package/json-schema/Action.json +8 -2
  67. package/json-schema/ActionParam.json +8 -2
  68. package/json-schema/Address.json +40 -0
  69. package/json-schema/AggregationFunction.json +19 -0
  70. package/json-schema/AggregationNode.json +42 -0
  71. package/json-schema/Animation.json +56 -0
  72. package/json-schema/ApiCapabilities.json +28 -0
  73. package/json-schema/ApiError.json +27 -0
  74. package/json-schema/ApiRoutes.json +41 -0
  75. package/json-schema/App.json +13 -2
  76. package/json-schema/AsyncValidation.json +70 -0
  77. package/json-schema/BaseResponse.json +63 -0
  78. package/json-schema/BorderRadius.json +44 -0
  79. package/json-schema/Breakpoints.json +36 -0
  80. package/json-schema/BulkRequest.json +29 -0
  81. package/json-schema/BulkResponse.json +108 -0
  82. package/json-schema/ColorPalette.json +83 -0
  83. package/json-schema/ConditionalValidation.json +793 -0
  84. package/json-schema/CreateRequest.json +20 -0
  85. package/json-schema/CrossFieldValidation.json +56 -0
  86. package/json-schema/CustomValidator.json +57 -0
  87. package/json-schema/Datasource.json +0 -18
  88. package/json-schema/DeleteResponse.json +68 -0
  89. package/json-schema/Discovery.json +114 -0
  90. package/json-schema/DriverCapabilities.json +39 -0
  91. package/json-schema/DriverDefinition.json +66 -0
  92. package/json-schema/DriverInterface.json +58 -0
  93. package/json-schema/DriverOptions.json +23 -0
  94. package/json-schema/DriverType.json +1 -18
  95. package/json-schema/ExportRequest.json +786 -0
  96. package/json-schema/Field.json +75 -4
  97. package/json-schema/FieldType.json +8 -2
  98. package/json-schema/FieldWidgetProps.json +327 -0
  99. package/json-schema/I18nContext.json +12 -0
  100. package/json-schema/JoinNode.json +455 -0
  101. package/json-schema/JoinType.json +15 -0
  102. package/json-schema/ListRecordResponse.json +103 -0
  103. package/json-schema/LocationCoordinates.json +36 -0
  104. package/json-schema/Logger.json +25 -0
  105. package/json-schema/Manifest.json +243 -18
  106. package/json-schema/Mapping.json +328 -0
  107. package/json-schema/ModificationResult.json +46 -0
  108. package/json-schema/Object.json +103 -6
  109. package/json-schema/ObjectCapabilities.json +26 -0
  110. package/json-schema/ObjectQLClient.json +12 -0
  111. package/json-schema/Plugin.json +20 -0
  112. package/json-schema/PluginContext.json +91 -0
  113. package/json-schema/PluginLifecycle.json +11 -0
  114. package/json-schema/Query.json +328 -0
  115. package/json-schema/RecordData.json +11 -0
  116. package/json-schema/Router.json +12 -0
  117. package/json-schema/Scheduler.json +12 -0
  118. package/json-schema/ScopedStorage.json +12 -0
  119. package/json-schema/Shadow.json +44 -0
  120. package/json-schema/SingleRecordResponse.json +69 -0
  121. package/json-schema/Spacing.json +64 -0
  122. package/json-schema/SystemAPI.json +12 -0
  123. package/json-schema/Theme.json +543 -0
  124. package/json-schema/ThemeMode.json +14 -0
  125. package/json-schema/Trigger.json +73 -0
  126. package/json-schema/TriggerAction.json +14 -0
  127. package/json-schema/TriggerContext.json +61 -0
  128. package/json-schema/TriggerTiming.json +13 -0
  129. package/json-schema/Typography.json +142 -0
  130. package/json-schema/UpdateRequest.json +20 -0
  131. package/json-schema/ValidationRule.json +583 -0
  132. package/json-schema/WindowFunction.json +24 -0
  133. package/json-schema/WindowFunctionNode.json +104 -0
  134. package/json-schema/WindowSpec.json +65 -0
  135. package/json-schema/ZIndex.json +44 -0
  136. package/package.json +8 -3
@@ -21,6 +21,7 @@
21
21
  "password",
22
22
  "markdown",
23
23
  "html",
24
+ "richtext",
24
25
  "number",
25
26
  "currency",
26
27
  "percent",
@@ -29,7 +30,6 @@
29
30
  "time",
30
31
  "boolean",
31
32
  "select",
32
- "multiselect",
33
33
  "lookup",
34
34
  "master_detail",
35
35
  "image",
@@ -37,7 +37,13 @@
37
37
  "avatar",
38
38
  "formula",
39
39
  "summary",
40
- "autonumber"
40
+ "autonumber",
41
+ "location",
42
+ "address",
43
+ "code",
44
+ "color",
45
+ "rating",
46
+ "signature"
41
47
  ]
42
48
  },
43
49
  "required": {
@@ -0,0 +1,40 @@
1
+ {
2
+ "$ref": "#/definitions/Address",
3
+ "definitions": {
4
+ "Address": {
5
+ "type": "object",
6
+ "properties": {
7
+ "street": {
8
+ "type": "string",
9
+ "description": "Street address"
10
+ },
11
+ "city": {
12
+ "type": "string",
13
+ "description": "City name"
14
+ },
15
+ "state": {
16
+ "type": "string",
17
+ "description": "State/Province"
18
+ },
19
+ "postalCode": {
20
+ "type": "string",
21
+ "description": "Postal/ZIP code"
22
+ },
23
+ "country": {
24
+ "type": "string",
25
+ "description": "Country name or code"
26
+ },
27
+ "countryCode": {
28
+ "type": "string",
29
+ "description": "ISO country code (e.g., US, GB)"
30
+ },
31
+ "formatted": {
32
+ "type": "string",
33
+ "description": "Formatted address string"
34
+ }
35
+ },
36
+ "additionalProperties": false
37
+ }
38
+ },
39
+ "$schema": "http://json-schema.org/draft-07/schema#"
40
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "$ref": "#/definitions/AggregationFunction",
3
+ "definitions": {
4
+ "AggregationFunction": {
5
+ "type": "string",
6
+ "enum": [
7
+ "count",
8
+ "sum",
9
+ "avg",
10
+ "min",
11
+ "max",
12
+ "count_distinct",
13
+ "array_agg",
14
+ "string_agg"
15
+ ]
16
+ }
17
+ },
18
+ "$schema": "http://json-schema.org/draft-07/schema#"
19
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "$ref": "#/definitions/AggregationNode",
3
+ "definitions": {
4
+ "AggregationNode": {
5
+ "type": "object",
6
+ "properties": {
7
+ "function": {
8
+ "type": "string",
9
+ "enum": [
10
+ "count",
11
+ "sum",
12
+ "avg",
13
+ "min",
14
+ "max",
15
+ "count_distinct",
16
+ "array_agg",
17
+ "string_agg"
18
+ ],
19
+ "description": "Aggregation function"
20
+ },
21
+ "field": {
22
+ "type": "string",
23
+ "description": "Field to aggregate (optional for COUNT(*))"
24
+ },
25
+ "alias": {
26
+ "type": "string",
27
+ "description": "Result column alias"
28
+ },
29
+ "distinct": {
30
+ "type": "boolean",
31
+ "description": "Apply DISTINCT before aggregation"
32
+ }
33
+ },
34
+ "required": [
35
+ "function",
36
+ "alias"
37
+ ],
38
+ "additionalProperties": false
39
+ }
40
+ },
41
+ "$schema": "http://json-schema.org/draft-07/schema#"
42
+ }
@@ -0,0 +1,56 @@
1
+ {
2
+ "$ref": "#/definitions/Animation",
3
+ "definitions": {
4
+ "Animation": {
5
+ "type": "object",
6
+ "properties": {
7
+ "duration": {
8
+ "type": "object",
9
+ "properties": {
10
+ "fast": {
11
+ "type": "string",
12
+ "description": "Fast animation (e.g., 150ms)"
13
+ },
14
+ "base": {
15
+ "type": "string",
16
+ "description": "Base animation (e.g., 300ms)"
17
+ },
18
+ "slow": {
19
+ "type": "string",
20
+ "description": "Slow animation (e.g., 500ms)"
21
+ }
22
+ },
23
+ "additionalProperties": false
24
+ },
25
+ "timing": {
26
+ "type": "object",
27
+ "properties": {
28
+ "linear": {
29
+ "type": "string",
30
+ "description": "Linear timing function"
31
+ },
32
+ "ease": {
33
+ "type": "string",
34
+ "description": "Ease timing function"
35
+ },
36
+ "easeIn": {
37
+ "type": "string",
38
+ "description": "Ease-in timing function"
39
+ },
40
+ "easeOut": {
41
+ "type": "string",
42
+ "description": "Ease-out timing function"
43
+ },
44
+ "easeInOut": {
45
+ "type": "string",
46
+ "description": "Ease-in-out timing function"
47
+ }
48
+ },
49
+ "additionalProperties": false
50
+ }
51
+ },
52
+ "additionalProperties": false
53
+ }
54
+ },
55
+ "$schema": "http://json-schema.org/draft-07/schema#"
56
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "$ref": "#/definitions/ApiCapabilities",
3
+ "definitions": {
4
+ "ApiCapabilities": {
5
+ "type": "object",
6
+ "properties": {
7
+ "graphql": {
8
+ "type": "boolean",
9
+ "default": false
10
+ },
11
+ "search": {
12
+ "type": "boolean",
13
+ "default": false
14
+ },
15
+ "websockets": {
16
+ "type": "boolean",
17
+ "default": false
18
+ },
19
+ "files": {
20
+ "type": "boolean",
21
+ "default": true
22
+ }
23
+ },
24
+ "additionalProperties": false
25
+ }
26
+ },
27
+ "$schema": "http://json-schema.org/draft-07/schema#"
28
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "$ref": "#/definitions/ApiError",
3
+ "definitions": {
4
+ "ApiError": {
5
+ "type": "object",
6
+ "properties": {
7
+ "code": {
8
+ "type": "string",
9
+ "description": "Error code (e.g. validation_error)"
10
+ },
11
+ "message": {
12
+ "type": "string",
13
+ "description": "Readable error message"
14
+ },
15
+ "details": {
16
+ "description": "Additional error context (e.g. field validation errors)"
17
+ }
18
+ },
19
+ "required": [
20
+ "code",
21
+ "message"
22
+ ],
23
+ "additionalProperties": false
24
+ }
25
+ },
26
+ "$schema": "http://json-schema.org/draft-07/schema#"
27
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "$ref": "#/definitions/ApiRoutes",
3
+ "definitions": {
4
+ "ApiRoutes": {
5
+ "type": "object",
6
+ "properties": {
7
+ "data": {
8
+ "type": "string",
9
+ "description": "e.g. /api/v1/data"
10
+ },
11
+ "metadata": {
12
+ "type": "string",
13
+ "description": "e.g. /api/v1/meta"
14
+ },
15
+ "auth": {
16
+ "type": "string",
17
+ "description": "e.g. /api/v1/auth"
18
+ },
19
+ "actions": {
20
+ "type": "string",
21
+ "description": "e.g. /api/v1/p"
22
+ },
23
+ "storage": {
24
+ "type": "string",
25
+ "description": "e.g. /api/v1/storage"
26
+ },
27
+ "graphql": {
28
+ "type": "string",
29
+ "description": "e.g. /api/v1/graphql"
30
+ }
31
+ },
32
+ "required": [
33
+ "data",
34
+ "metadata",
35
+ "auth"
36
+ ],
37
+ "additionalProperties": false
38
+ }
39
+ },
40
+ "$schema": "http://json-schema.org/draft-07/schema#"
41
+ }
@@ -13,6 +13,10 @@
13
13
  "type": "string",
14
14
  "description": "App display label"
15
15
  },
16
+ "version": {
17
+ "type": "string",
18
+ "description": "App version"
19
+ },
16
20
  "description": {
17
21
  "type": "string",
18
22
  "description": "App description"
@@ -272,12 +276,19 @@
272
276
  "type": "string"
273
277
  },
274
278
  "description": "Permissions required to access this app"
279
+ },
280
+ "objects": {
281
+ "type": "array",
282
+ "description": "Objects belonging to this app"
283
+ },
284
+ "apis": {
285
+ "type": "array",
286
+ "description": "Custom APIs belonging to this app"
275
287
  }
276
288
  },
277
289
  "required": [
278
290
  "name",
279
- "label",
280
- "navigation"
291
+ "label"
281
292
  ],
282
293
  "additionalProperties": false
283
294
  }
@@ -0,0 +1,70 @@
1
+ {
2
+ "$ref": "#/definitions/AsyncValidation",
3
+ "definitions": {
4
+ "AsyncValidation": {
5
+ "type": "object",
6
+ "properties": {
7
+ "name": {
8
+ "type": "string",
9
+ "pattern": "^[a-z_][a-z0-9_]*$",
10
+ "description": "Unique rule name"
11
+ },
12
+ "active": {
13
+ "type": "boolean",
14
+ "default": true
15
+ },
16
+ "severity": {
17
+ "type": "string",
18
+ "enum": [
19
+ "error",
20
+ "warning",
21
+ "info"
22
+ ],
23
+ "default": "error"
24
+ },
25
+ "message": {
26
+ "type": "string",
27
+ "description": "Error message to display"
28
+ },
29
+ "type": {
30
+ "type": "string",
31
+ "const": "async"
32
+ },
33
+ "field": {
34
+ "type": "string",
35
+ "description": "Field to validate"
36
+ },
37
+ "validatorUrl": {
38
+ "type": "string",
39
+ "description": "External API endpoint for validation"
40
+ },
41
+ "validatorFunction": {
42
+ "type": "string",
43
+ "description": "Reference to custom validator function"
44
+ },
45
+ "timeout": {
46
+ "type": "number",
47
+ "default": 5000,
48
+ "description": "Timeout in milliseconds"
49
+ },
50
+ "debounce": {
51
+ "type": "number",
52
+ "description": "Debounce delay in milliseconds"
53
+ },
54
+ "params": {
55
+ "type": "object",
56
+ "additionalProperties": {},
57
+ "description": "Additional parameters to pass to validator"
58
+ }
59
+ },
60
+ "required": [
61
+ "name",
62
+ "message",
63
+ "type",
64
+ "field"
65
+ ],
66
+ "additionalProperties": false
67
+ }
68
+ },
69
+ "$schema": "http://json-schema.org/draft-07/schema#"
70
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "$ref": "#/definitions/BaseResponse",
3
+ "definitions": {
4
+ "BaseResponse": {
5
+ "type": "object",
6
+ "properties": {
7
+ "success": {
8
+ "type": "boolean",
9
+ "description": "Operation success status"
10
+ },
11
+ "error": {
12
+ "type": "object",
13
+ "properties": {
14
+ "code": {
15
+ "type": "string",
16
+ "description": "Error code (e.g. validation_error)"
17
+ },
18
+ "message": {
19
+ "type": "string",
20
+ "description": "Readable error message"
21
+ },
22
+ "details": {
23
+ "description": "Additional error context (e.g. field validation errors)"
24
+ }
25
+ },
26
+ "required": [
27
+ "code",
28
+ "message"
29
+ ],
30
+ "additionalProperties": false,
31
+ "description": "Error details if success is false"
32
+ },
33
+ "meta": {
34
+ "type": "object",
35
+ "properties": {
36
+ "timestamp": {
37
+ "type": "string"
38
+ },
39
+ "duration": {
40
+ "type": "number"
41
+ },
42
+ "requestId": {
43
+ "type": "string"
44
+ },
45
+ "traceId": {
46
+ "type": "string"
47
+ }
48
+ },
49
+ "required": [
50
+ "timestamp"
51
+ ],
52
+ "additionalProperties": false,
53
+ "description": "Response metadata"
54
+ }
55
+ },
56
+ "required": [
57
+ "success"
58
+ ],
59
+ "additionalProperties": false
60
+ }
61
+ },
62
+ "$schema": "http://json-schema.org/draft-07/schema#"
63
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "$ref": "#/definitions/BorderRadius",
3
+ "definitions": {
4
+ "BorderRadius": {
5
+ "type": "object",
6
+ "properties": {
7
+ "none": {
8
+ "type": "string",
9
+ "description": "No border radius (0)"
10
+ },
11
+ "sm": {
12
+ "type": "string",
13
+ "description": "Small border radius (e.g., 0.125rem)"
14
+ },
15
+ "base": {
16
+ "type": "string",
17
+ "description": "Base border radius (e.g., 0.25rem)"
18
+ },
19
+ "md": {
20
+ "type": "string",
21
+ "description": "Medium border radius (e.g., 0.375rem)"
22
+ },
23
+ "lg": {
24
+ "type": "string",
25
+ "description": "Large border radius (e.g., 0.5rem)"
26
+ },
27
+ "xl": {
28
+ "type": "string",
29
+ "description": "Extra large border radius (e.g., 0.75rem)"
30
+ },
31
+ "2xl": {
32
+ "type": "string",
33
+ "description": "2X large border radius (e.g., 1rem)"
34
+ },
35
+ "full": {
36
+ "type": "string",
37
+ "description": "Full border radius (50%)"
38
+ }
39
+ },
40
+ "additionalProperties": false
41
+ }
42
+ },
43
+ "$schema": "http://json-schema.org/draft-07/schema#"
44
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "$ref": "#/definitions/Breakpoints",
3
+ "definitions": {
4
+ "Breakpoints": {
5
+ "type": "object",
6
+ "properties": {
7
+ "xs": {
8
+ "type": "string",
9
+ "description": "Extra small breakpoint (e.g., 480px)"
10
+ },
11
+ "sm": {
12
+ "type": "string",
13
+ "description": "Small breakpoint (e.g., 640px)"
14
+ },
15
+ "md": {
16
+ "type": "string",
17
+ "description": "Medium breakpoint (e.g., 768px)"
18
+ },
19
+ "lg": {
20
+ "type": "string",
21
+ "description": "Large breakpoint (e.g., 1024px)"
22
+ },
23
+ "xl": {
24
+ "type": "string",
25
+ "description": "Extra large breakpoint (e.g., 1280px)"
26
+ },
27
+ "2xl": {
28
+ "type": "string",
29
+ "description": "2X large breakpoint (e.g., 1536px)"
30
+ }
31
+ },
32
+ "additionalProperties": false
33
+ }
34
+ },
35
+ "$schema": "http://json-schema.org/draft-07/schema#"
36
+ }
@@ -0,0 +1,29 @@
1
+ {
2
+ "$ref": "#/definitions/BulkRequest",
3
+ "definitions": {
4
+ "BulkRequest": {
5
+ "type": "object",
6
+ "properties": {
7
+ "records": {
8
+ "type": "array",
9
+ "items": {
10
+ "type": "object",
11
+ "additionalProperties": {},
12
+ "description": "Key-value map of record data"
13
+ },
14
+ "description": "Array of records to process"
15
+ },
16
+ "allOrNone": {
17
+ "type": "boolean",
18
+ "default": true,
19
+ "description": "If true, rollback entire transaction on any failure"
20
+ }
21
+ },
22
+ "required": [
23
+ "records"
24
+ ],
25
+ "additionalProperties": false
26
+ }
27
+ },
28
+ "$schema": "http://json-schema.org/draft-07/schema#"
29
+ }
@@ -0,0 +1,108 @@
1
+ {
2
+ "$ref": "#/definitions/BulkResponse",
3
+ "definitions": {
4
+ "BulkResponse": {
5
+ "type": "object",
6
+ "properties": {
7
+ "success": {
8
+ "type": "boolean",
9
+ "description": "Operation success status"
10
+ },
11
+ "error": {
12
+ "type": "object",
13
+ "properties": {
14
+ "code": {
15
+ "type": "string",
16
+ "description": "Error code (e.g. validation_error)"
17
+ },
18
+ "message": {
19
+ "type": "string",
20
+ "description": "Readable error message"
21
+ },
22
+ "details": {
23
+ "description": "Additional error context (e.g. field validation errors)"
24
+ }
25
+ },
26
+ "required": [
27
+ "code",
28
+ "message"
29
+ ],
30
+ "additionalProperties": false,
31
+ "description": "Error details if success is false"
32
+ },
33
+ "meta": {
34
+ "type": "object",
35
+ "properties": {
36
+ "timestamp": {
37
+ "type": "string"
38
+ },
39
+ "duration": {
40
+ "type": "number"
41
+ },
42
+ "requestId": {
43
+ "type": "string"
44
+ },
45
+ "traceId": {
46
+ "type": "string"
47
+ }
48
+ },
49
+ "required": [
50
+ "timestamp"
51
+ ],
52
+ "additionalProperties": false,
53
+ "description": "Response metadata"
54
+ },
55
+ "data": {
56
+ "type": "array",
57
+ "items": {
58
+ "type": "object",
59
+ "properties": {
60
+ "id": {
61
+ "type": "string",
62
+ "description": "Record ID if processed"
63
+ },
64
+ "success": {
65
+ "type": "boolean"
66
+ },
67
+ "errors": {
68
+ "type": "array",
69
+ "items": {
70
+ "type": "object",
71
+ "properties": {
72
+ "code": {
73
+ "type": "string",
74
+ "description": "Error code (e.g. validation_error)"
75
+ },
76
+ "message": {
77
+ "type": "string",
78
+ "description": "Readable error message"
79
+ },
80
+ "details": {
81
+ "description": "Additional error context (e.g. field validation errors)"
82
+ }
83
+ },
84
+ "required": [
85
+ "code",
86
+ "message"
87
+ ],
88
+ "additionalProperties": false
89
+ }
90
+ }
91
+ },
92
+ "required": [
93
+ "success"
94
+ ],
95
+ "additionalProperties": false
96
+ },
97
+ "description": "Results for each item in the batch"
98
+ }
99
+ },
100
+ "required": [
101
+ "success",
102
+ "data"
103
+ ],
104
+ "additionalProperties": false
105
+ }
106
+ },
107
+ "$schema": "http://json-schema.org/draft-07/schema#"
108
+ }