@origostudio/core 0.0.40

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 (40) hide show
  1. package/CHANGELOG.md +365 -0
  2. package/README.md +11 -0
  3. package/package.json +25 -0
  4. package/package.json.bak +25 -0
  5. package/src/extension-api/extension-manager.d.ts +35 -0
  6. package/src/extension-api/extension-manager.js +300 -0
  7. package/src/extension-api/extension-manager.js.map +1 -0
  8. package/src/extension-api/index.d.ts +2 -0
  9. package/src/extension-api/index.js +6 -0
  10. package/src/extension-api/index.js.map +1 -0
  11. package/src/extension-api/types.d.ts +34 -0
  12. package/src/extension-api/types.js +3 -0
  13. package/src/extension-api/types.js.map +1 -0
  14. package/src/index.d.ts +3 -0
  15. package/src/index.js +7 -0
  16. package/src/index.js.map +1 -0
  17. package/src/schemas/capability.schema.json +104 -0
  18. package/src/schemas/contract.schema.json +52 -0
  19. package/src/schemas/domain.schema.json +47 -0
  20. package/src/schemas/entity.schema.json +72 -0
  21. package/src/schemas/extension.schema.json +39 -0
  22. package/src/schemas/permission.schema.json +21 -0
  23. package/src/types/ast.d.ts +17 -0
  24. package/src/types/ast.js +3 -0
  25. package/src/types/ast.js.map +1 -0
  26. package/src/types/domain.d.ts +101 -0
  27. package/src/types/domain.js +8 -0
  28. package/src/types/domain.js.map +1 -0
  29. package/src/types/validation.d.ts +12 -0
  30. package/src/types/validation.js +16 -0
  31. package/src/types/validation.js.map +1 -0
  32. package/src/validator/ast-validator.d.ts +11 -0
  33. package/src/validator/ast-validator.js +388 -0
  34. package/src/validator/ast-validator.js.map +1 -0
  35. package/src/validator/index.d.ts +23 -0
  36. package/src/validator/index.js +143 -0
  37. package/src/validator/index.js.map +1 -0
  38. package/src/validator/serializer.d.ts +11 -0
  39. package/src/validator/serializer.js +99 -0
  40. package/src/validator/serializer.js.map +1 -0
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExtensionManager = exports.ExtensionState = exports.ExtensionError = void 0;
4
+ const tslib_1 = require("tslib");
5
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
6
+ const semver = tslib_1.__importStar(require("semver"));
7
+ class ExtensionError extends Error {
8
+ code;
9
+ constructor(message, code) {
10
+ super(message);
11
+ this.code = code;
12
+ this.name = 'ExtensionError';
13
+ }
14
+ }
15
+ exports.ExtensionError = ExtensionError;
16
+ var ExtensionState;
17
+ (function (ExtensionState) {
18
+ ExtensionState["REGISTERED"] = "REGISTERED";
19
+ ExtensionState["INITIALIZED"] = "INITIALIZED";
20
+ ExtensionState["CONFIGURED"] = "CONFIGURED";
21
+ ExtensionState["VALIDATED"] = "VALIDATED";
22
+ ExtensionState["ACTIVATED"] = "ACTIVATED";
23
+ })(ExtensionState || (exports.ExtensionState = ExtensionState = {}));
24
+ class ExtensionManager {
25
+ extensions = new Map();
26
+ capabilities = new Set();
27
+ grantedPermissions = new Map();
28
+ registerExtension(manifest, lifecycle) {
29
+ if (!manifest)
30
+ throw new ExtensionError('Manifest is required', 'INVALID_MANIFEST');
31
+ if (!lifecycle)
32
+ throw new ExtensionError('Lifecycle is required', 'INVALID_LIFECYCLE');
33
+ if (this.extensions.has(manifest.id)) {
34
+ throw new ExtensionError(`Extension already registered: ${manifest.id}`, 'DUPLICATE_EXTENSION');
35
+ }
36
+ this.validateManifest(manifest);
37
+ this.grantedPermissions.set(manifest.id, new Set());
38
+ this.extensions.set(manifest.id, { manifest, lifecycle, state: ExtensionState.REGISTERED });
39
+ }
40
+ registerCapability(capability) {
41
+ if (!/^[a-z0-9-]+:[a-z0-9-]+$/i.test(capability)) {
42
+ throw new ExtensionError(`Invalid capability format: ${capability}. Must be namespace:name`, 'INVALID_CAPABILITY_NAMESPACE');
43
+ }
44
+ this.capabilities.add(capability);
45
+ }
46
+ validateManifest(manifest) {
47
+ if (!manifest.id || !manifest.name || !manifest.version || !manifest.type) {
48
+ throw new ExtensionError('Invalid manifest: missing required fields', 'INVALID_MANIFEST');
49
+ }
50
+ if (!semver.valid(manifest.version)) {
51
+ throw new ExtensionError(`Invalid semver version: ${manifest.version}`, 'INVALID_VERSION');
52
+ }
53
+ if (manifest.grammarRanges) {
54
+ if (typeof manifest.grammarRanges !== 'object' || Array.isArray(manifest.grammarRanges)) {
55
+ throw new ExtensionError('grammarRanges must be an object', 'INVALID_MANIFEST');
56
+ }
57
+ for (const [key, range] of Object.entries(manifest.grammarRanges)) {
58
+ if (typeof range !== 'string' || !semver.validRange(range)) {
59
+ throw new ExtensionError(`Invalid semver range for grammar ${key}: ${range}`, 'INVALID_GRAMMAR_RANGE');
60
+ }
61
+ }
62
+ }
63
+ if (manifest.apiRanges) {
64
+ if (typeof manifest.apiRanges !== 'object' || Array.isArray(manifest.apiRanges)) {
65
+ throw new ExtensionError('apiRanges must be an object', 'INVALID_MANIFEST');
66
+ }
67
+ for (const [key, range] of Object.entries(manifest.apiRanges)) {
68
+ if (typeof range !== 'string' || !semver.validRange(range)) {
69
+ throw new ExtensionError(`Invalid semver range for API ${key}: ${range}`, 'INVALID_API_RANGE');
70
+ }
71
+ }
72
+ }
73
+ if (manifest.dependencies) {
74
+ if (typeof manifest.dependencies !== 'object' || Array.isArray(manifest.dependencies)) {
75
+ throw new ExtensionError('dependencies must be an object', 'INVALID_MANIFEST');
76
+ }
77
+ for (const [key, range] of Object.entries(manifest.dependencies)) {
78
+ if (typeof range !== 'string' || !semver.validRange(range)) {
79
+ throw new ExtensionError(`Invalid dependency range for ${key}: ${range}`, 'INVALID_DEPENDENCY_RANGE');
80
+ }
81
+ }
82
+ }
83
+ if (manifest.permissions !== undefined) {
84
+ if (!Array.isArray(manifest.permissions) ||
85
+ manifest.permissions.some(p => typeof p !== 'string' || !p.trim())) {
86
+ throw new ExtensionError('permissions must be an array of non-empty strings', 'INVALID_MANIFEST');
87
+ }
88
+ }
89
+ }
90
+ negotiateCapabilities(manifest) {
91
+ if (manifest.capabilities) {
92
+ if (!Array.isArray(manifest.capabilities)) {
93
+ throw new ExtensionError('Capabilities must be an array', 'INVALID_MANIFEST');
94
+ }
95
+ for (const cap of manifest.capabilities) {
96
+ if (!this.capabilities.has(cap)) {
97
+ throw new ExtensionError(`Missing required capability: ${cap}`, 'MISSING_CAPABILITY');
98
+ }
99
+ }
100
+ }
101
+ }
102
+ grantPermission(id, permission) {
103
+ const ext = this.extensions.get(id);
104
+ if (!ext)
105
+ throw new ExtensionError(`Extension not found: ${id}`, 'NOT_FOUND');
106
+ if (ext.state !== ExtensionState.REGISTERED) {
107
+ throw new ExtensionError(`Cannot grant permissions after extension initialization (current state: ${ext.state})`, 'INVALID_LIFECYCLE');
108
+ }
109
+ const declaredPermissions = ext.manifest.permissions || [];
110
+ if (!declaredPermissions.includes(permission)) {
111
+ throw new ExtensionError(`Permission not declared in manifest: ${permission}`, 'UNDECLARED_PERMISSION');
112
+ }
113
+ const granted = this.grantedPermissions.get(id);
114
+ granted.add(permission);
115
+ }
116
+ getDeclaredPermissions(id) {
117
+ const ext = this.extensions.get(id);
118
+ if (!ext)
119
+ throw new ExtensionError(`Extension not found: ${id}`, 'NOT_FOUND');
120
+ return ext.manifest.permissions || [];
121
+ }
122
+ getGrantedPermissions(id) {
123
+ const ext = this.extensions.get(id);
124
+ if (!ext)
125
+ throw new ExtensionError(`Extension not found: ${id}`, 'NOT_FOUND');
126
+ return Array.from(this.grantedPermissions.get(id));
127
+ }
128
+ hasPermission(id, permission) {
129
+ const ext = this.extensions.get(id);
130
+ if (!ext)
131
+ throw new ExtensionError(`Extension not found: ${id}`, 'NOT_FOUND');
132
+ return this.grantedPermissions.get(id).has(permission);
133
+ }
134
+ checkPermission(id, permission) {
135
+ if (!this.hasPermission(id, permission)) {
136
+ throw new ExtensionError(`Unauthorized access: Missing permission ${permission}`, 'UNAUTHORIZED_ACCESS');
137
+ }
138
+ }
139
+ createSandboxContext(id, baseContext) {
140
+ const context = baseContext || {};
141
+ return {
142
+ getEnv: context.getEnv
143
+ ? (key) => {
144
+ this.checkPermission(id, 'env:read');
145
+ return context.getEnv(key);
146
+ }
147
+ : undefined,
148
+ fetch: context.fetch
149
+ ? ((...args) => {
150
+ this.checkPermission(id, 'network:fetch');
151
+ return context.fetch(...args);
152
+ })
153
+ : undefined,
154
+ readFile: context.readFile
155
+ ? (path) => {
156
+ this.checkPermission(id, 'fs:read');
157
+ return context.readFile(path);
158
+ }
159
+ : undefined,
160
+ writeFile: context.writeFile
161
+ ? (path, data) => {
162
+ this.checkPermission(id, 'fs:write');
163
+ return context.writeFile(path, data);
164
+ }
165
+ : undefined,
166
+ };
167
+ }
168
+ enforcePermissionsBeforeExecution(manifest) {
169
+ const id = manifest.id;
170
+ const declared = manifest.permissions || [];
171
+ const granted = this.grantedPermissions.get(id);
172
+ for (const perm of declared) {
173
+ if (!granted.has(perm)) {
174
+ throw new ExtensionError(`Cannot execute extension ${id}: Missing required permission ${perm}`, 'UNAUTHORIZED_ACCESS');
175
+ }
176
+ }
177
+ }
178
+ resolveDependencyGraph() {
179
+ const adjList = new Map();
180
+ for (const [id, { manifest }] of this.extensions.entries()) {
181
+ const deps = manifest.dependencies ? Object.keys(manifest.dependencies) : [];
182
+ for (const [depId, range] of Object.entries(manifest.dependencies || {})) {
183
+ const target = this.extensions.get(depId);
184
+ if (!target) {
185
+ throw new ExtensionError(`Missing required dependency: ${depId}`, 'MISSING_DEPENDENCY');
186
+ }
187
+ if (!semver.satisfies(target.manifest.version, range)) {
188
+ throw new ExtensionError(`Dependency version mismatch for ${depId}. Expected ${range}, got ${target.manifest.version}`, 'DEPENDENCY_VERSION_MISMATCH');
189
+ }
190
+ }
191
+ adjList.set(id, deps);
192
+ }
193
+ const visited = new Set();
194
+ const visiting = new Set();
195
+ const sorted = [];
196
+ const dfs = (node, path) => {
197
+ if (visiting.has(node)) {
198
+ const cycleStartIndex = path.indexOf(node);
199
+ const loop = cycleStartIndex >= 0 ? path.slice(cycleStartIndex) : path;
200
+ const cyclePath = [...loop, node].join(' -> ');
201
+ throw new ExtensionError(`Cyclic dependency detected: ${cyclePath}`, 'CYCLIC_DEPENDENCY');
202
+ }
203
+ if (visited.has(node))
204
+ return;
205
+ visiting.add(node);
206
+ path.push(node);
207
+ const deps = adjList.get(node) || [];
208
+ for (const dep of deps) {
209
+ dfs(dep, path);
210
+ }
211
+ path.pop();
212
+ visiting.delete(node);
213
+ visited.add(node);
214
+ sorted.push(node); // post-order (dependencies added before the node that depends on them)
215
+ };
216
+ for (const id of this.extensions.keys()) {
217
+ if (!visited.has(id)) {
218
+ dfs(id, []);
219
+ }
220
+ }
221
+ return sorted;
222
+ }
223
+ async initializeExtension(id, context) {
224
+ const ext = this.extensions.get(id);
225
+ if (!ext)
226
+ throw new ExtensionError(`Extension not found: ${id}`, 'NOT_FOUND');
227
+ if (ext.state !== ExtensionState.REGISTERED) {
228
+ throw new ExtensionError(`Cannot initialize extension in state ${ext.state}`, 'INVALID_LIFECYCLE');
229
+ }
230
+ this.enforcePermissionsBeforeExecution(ext.manifest);
231
+ this.negotiateCapabilities(ext.manifest);
232
+ const sandboxedContext = this.createSandboxContext(id, context);
233
+ await ext.lifecycle.initialize(sandboxedContext);
234
+ ext.state = ExtensionState.INITIALIZED;
235
+ }
236
+ async configureExtension(id, config) {
237
+ const ext = this.extensions.get(id);
238
+ if (!ext)
239
+ throw new ExtensionError(`Extension not found: ${id}`, 'NOT_FOUND');
240
+ if (ext.state !== ExtensionState.INITIALIZED) {
241
+ throw new ExtensionError(`Cannot configure extension in state ${ext.state}`, 'INVALID_LIFECYCLE');
242
+ }
243
+ this.enforcePermissionsBeforeExecution(ext.manifest);
244
+ await ext.lifecycle.configure(config);
245
+ ext.state = ExtensionState.CONFIGURED;
246
+ }
247
+ async validateExtension(id) {
248
+ const ext = this.extensions.get(id);
249
+ if (!ext)
250
+ throw new ExtensionError(`Extension not found: ${id}`, 'NOT_FOUND');
251
+ if (ext.state !== ExtensionState.CONFIGURED) {
252
+ throw new ExtensionError(`Cannot validate extension in state ${ext.state}`, 'INVALID_LIFECYCLE');
253
+ }
254
+ this.enforcePermissionsBeforeExecution(ext.manifest);
255
+ const isValid = await ext.lifecycle.validate();
256
+ if (!isValid) {
257
+ throw new ExtensionError(`Extension failed validation: ${id}`, 'VALIDATION_FAILED');
258
+ }
259
+ ext.state = ExtensionState.VALIDATED;
260
+ }
261
+ async activateExtension(id) {
262
+ const ext = this.extensions.get(id);
263
+ if (!ext)
264
+ throw new ExtensionError(`Extension not found: ${id}`, 'NOT_FOUND');
265
+ if (ext.state !== ExtensionState.VALIDATED) {
266
+ throw new ExtensionError(`Cannot activate extension in state ${ext.state}`, 'INVALID_LIFECYCLE');
267
+ }
268
+ this.enforcePermissionsBeforeExecution(ext.manifest);
269
+ await ext.lifecycle.activate();
270
+ ext.state = ExtensionState.ACTIVATED;
271
+ }
272
+ async loadAll(context, config) {
273
+ const sortedIds = this.resolveDependencyGraph();
274
+ for (const id of sortedIds) {
275
+ if (this.getExtensionState(id) === ExtensionState.REGISTERED) {
276
+ await this.initializeExtension(id, context);
277
+ }
278
+ }
279
+ for (const id of sortedIds) {
280
+ if (this.getExtensionState(id) === ExtensionState.INITIALIZED) {
281
+ await this.configureExtension(id, config);
282
+ }
283
+ }
284
+ for (const id of sortedIds) {
285
+ if (this.getExtensionState(id) === ExtensionState.CONFIGURED) {
286
+ await this.validateExtension(id);
287
+ }
288
+ }
289
+ for (const id of sortedIds) {
290
+ if (this.getExtensionState(id) === ExtensionState.VALIDATED) {
291
+ await this.activateExtension(id);
292
+ }
293
+ }
294
+ }
295
+ getExtensionState(id) {
296
+ return this.extensions.get(id)?.state;
297
+ }
298
+ }
299
+ exports.ExtensionManager = ExtensionManager;
300
+ //# sourceMappingURL=extension-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-manager.js","sourceRoot":"","sources":["../../../../../packages/core/src/extension-api/extension-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './types';
2
+ export * from './extension-manager';
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./types"), exports);
5
+ tslib_1.__exportStar(require("./extension-manager"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/core/src/extension-api/index.ts"],"names":[],"mappings":";;;AAAA,kDAAwB;AACxB,8DAAoC"}
@@ -0,0 +1,34 @@
1
+ export type CorePermission = 'network:fetch' | 'fs:read' | 'fs:write' | 'env:read';
2
+ export interface ExtensionContext {
3
+ fetch?: typeof fetch;
4
+ readFile?: (path: string) => Promise<string>;
5
+ writeFile?: (path: string, data: string) => Promise<void>;
6
+ getEnv?: (key: string) => string | undefined;
7
+ [key: string]: unknown;
8
+ }
9
+ export interface ExtensionManifest {
10
+ /** The unique identifier of the extension */
11
+ id: string;
12
+ /** Name of the extension */
13
+ name: string;
14
+ /** Semantic version of the extension */
15
+ version: string;
16
+ /** Type of the extension */
17
+ type: string;
18
+ /** Grammar ranges required */
19
+ grammarRanges?: Record<string, string>;
20
+ /** API ranges required */
21
+ apiRanges?: Record<string, string>;
22
+ /** Capabilities required by this extension */
23
+ capabilities?: string[];
24
+ /** Permissions required by this extension for sandbox access */
25
+ permissions?: CorePermission[];
26
+ /** Dependencies on other extensions (map of extension id to semver range) */
27
+ dependencies?: Record<string, string>;
28
+ }
29
+ export interface ExtensionLifecycle {
30
+ initialize(context?: ExtensionContext): Promise<void> | void;
31
+ configure(config?: unknown): Promise<void> | void;
32
+ validate(): Promise<boolean> | boolean;
33
+ activate(): Promise<void> | void;
34
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../packages/core/src/extension-api/types.ts"],"names":[],"mappings":""}
package/src/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './validator';
2
+ export * from './types/domain';
3
+ export * from './types/ast';
package/src/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./validator"), exports);
5
+ tslib_1.__exportStar(require("./types/domain"), exports);
6
+ tslib_1.__exportStar(require("./types/ast"), exports);
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/core/src/index.ts"],"names":[],"mappings":";;;AAAA,sDAA4B;AAC5B,yDAA+B;AAC/B,sDAA4B"}
@@ -0,0 +1,104 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://origo.design/schemas/v1/capability.schema.json",
4
+ "title": "Capability",
5
+ "description": "BADL Capability Definition",
6
+ "type": "object",
7
+ "properties": {
8
+ "id": {
9
+ "type": "string",
10
+ "minLength": 1
11
+ },
12
+ "name": {
13
+ "type": "string",
14
+ "enum": ["Create", "Read", "Update", "Delete", "List"],
15
+ "description": "Strict vocabulary of core capability verbs"
16
+ },
17
+ "description": {
18
+ "type": "string"
19
+ },
20
+ "type": {
21
+ "type": "string",
22
+ "enum": ["Command", "Query"]
23
+ },
24
+ "entityId": {
25
+ "type": "string",
26
+ "minLength": 1,
27
+ "description": "Target entity for this capability"
28
+ },
29
+ "outcome_ref": {
30
+ "type": "array",
31
+ "items": {
32
+ "type": "string"
33
+ }
34
+ },
35
+ "preconditions": {
36
+ "type": "array",
37
+ "items": {
38
+ "type": "string"
39
+ }
40
+ },
41
+ "postconditions": {
42
+ "type": "array",
43
+ "items": {
44
+ "type": "string"
45
+ }
46
+ },
47
+ "permissions": {
48
+ "type": "array",
49
+ "items": {
50
+ "$ref": "permission.schema.json"
51
+ }
52
+ },
53
+ "risk_level": {
54
+ "type": "string",
55
+ "enum": ["low", "medium", "high", "critical"]
56
+ },
57
+ "interaction_contract_ref": {
58
+ "type": "string"
59
+ },
60
+ "async": {
61
+ "type": "boolean"
62
+ }
63
+ },
64
+ "required": [
65
+ "id",
66
+ "name",
67
+ "description",
68
+ "type",
69
+ "entityId",
70
+ "outcome_ref",
71
+ "preconditions",
72
+ "postconditions",
73
+ "permissions",
74
+ "risk_level",
75
+ "async"
76
+ ],
77
+ "additionalProperties": false,
78
+ "allOf": [
79
+ {
80
+ "if": {
81
+ "properties": {
82
+ "name": { "enum": ["Create", "Update", "Delete"] }
83
+ }
84
+ },
85
+ "then": {
86
+ "properties": {
87
+ "type": { "const": "Command" }
88
+ }
89
+ }
90
+ },
91
+ {
92
+ "if": {
93
+ "properties": {
94
+ "name": { "enum": ["Read", "List"] }
95
+ }
96
+ },
97
+ "then": {
98
+ "properties": {
99
+ "type": { "const": "Query" }
100
+ }
101
+ }
102
+ }
103
+ ]
104
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://origo.design/schemas/v1/contract.schema.json",
4
+ "title": "Contract",
5
+ "description": "BADL Contract Definition",
6
+ "type": "object",
7
+ "properties": {
8
+ "id": {
9
+ "type": "string"
10
+ },
11
+ "name": {
12
+ "type": "string"
13
+ },
14
+ "requiredFields": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "object",
18
+ "properties": {
19
+ "name": {
20
+ "type": "string"
21
+ },
22
+ "type": {
23
+ "type": "string",
24
+ "enum": ["string", "boolean", "date", "number", "array", "object"]
25
+ }
26
+ },
27
+ "required": ["name", "type"],
28
+ "additionalProperties": false
29
+ }
30
+ },
31
+ "requiredCapabilities": {
32
+ "type": "array",
33
+ "items": {
34
+ "type": "object",
35
+ "properties": {
36
+ "name": {
37
+ "type": "string",
38
+ "enum": ["Create", "Read", "Update", "Delete", "List"]
39
+ },
40
+ "type": {
41
+ "type": "string",
42
+ "enum": ["Command", "Query"]
43
+ }
44
+ },
45
+ "required": ["name", "type"],
46
+ "additionalProperties": false
47
+ }
48
+ }
49
+ },
50
+ "required": ["id", "name", "requiredFields", "requiredCapabilities"],
51
+ "additionalProperties": false
52
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://origo.design/schemas/v1/domain.schema.json",
4
+ "title": "Domain",
5
+ "description": "BADL Domain Definition",
6
+ "type": "object",
7
+ "properties": {
8
+ "id": {
9
+ "type": "string"
10
+ },
11
+ "name": {
12
+ "type": "string"
13
+ },
14
+ "version": {
15
+ "type": "string"
16
+ },
17
+ "domain": {
18
+ "type": "string"
19
+ },
20
+ "entities": {
21
+ "type": "array",
22
+ "items": {
23
+ "$ref": "entity.schema.json"
24
+ }
25
+ },
26
+ "capabilities": {
27
+ "type": "array",
28
+ "items": {
29
+ "$ref": "capability.schema.json"
30
+ }
31
+ },
32
+ "contracts": {
33
+ "type": "array",
34
+ "items": {
35
+ "$ref": "contract.schema.json"
36
+ }
37
+ },
38
+ "extensions": {
39
+ "type": "array",
40
+ "items": {
41
+ "$ref": "extension.schema.json"
42
+ }
43
+ }
44
+ },
45
+ "required": ["id", "name", "version", "domain", "entities"],
46
+ "additionalProperties": false
47
+ }