@objectstack/spec 0.8.2 → 0.9.0

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 (188) hide show
  1. package/dist/ai/devops-agent.zod.d.ts +1 -1
  2. package/dist/ai/feedback-loop.zod.d.ts +4293 -0
  3. package/dist/ai/feedback-loop.zod.d.ts.map +1 -0
  4. package/dist/ai/feedback-loop.zod.js +53 -0
  5. package/dist/ai/index.d.ts +1 -0
  6. package/dist/ai/index.d.ts.map +1 -1
  7. package/dist/ai/index.js +1 -0
  8. package/dist/api/documentation.zod.d.ts +1073 -0
  9. package/dist/api/documentation.zod.d.ts.map +1 -0
  10. package/dist/api/documentation.zod.js +487 -0
  11. package/dist/api/errors.zod.d.ts +6 -6
  12. package/dist/api/graphql.zod.d.ts +3 -3
  13. package/dist/api/hub.zod.d.ts +5239 -0
  14. package/dist/api/hub.zod.d.ts.map +1 -0
  15. package/dist/api/hub.zod.js +784 -0
  16. package/dist/api/index.d.ts +4 -0
  17. package/dist/api/index.d.ts.map +1 -1
  18. package/dist/api/index.js +4 -0
  19. package/dist/api/odata.zod.d.ts +1 -1
  20. package/dist/api/registry.example.d.ts +411 -0
  21. package/dist/api/registry.example.d.ts.map +1 -0
  22. package/dist/api/registry.example.js +470 -0
  23. package/dist/api/registry.zod.d.ts +2095 -0
  24. package/dist/api/registry.zod.d.ts.map +1 -0
  25. package/dist/api/registry.zod.js +755 -0
  26. package/dist/api/websocket.zod.d.ts +8 -8
  27. package/dist/auth/scim.zod.d.ts +3 -3
  28. package/dist/automation/flow.zod.d.ts +3 -3
  29. package/dist/contracts/index.d.ts +1 -0
  30. package/dist/contracts/index.d.ts.map +1 -1
  31. package/dist/contracts/index.js +1 -0
  32. package/dist/contracts/schema-driver.d.ts +21 -0
  33. package/dist/contracts/schema-driver.d.ts.map +1 -0
  34. package/dist/contracts/schema-driver.js +2 -0
  35. package/dist/hub/composer.zod.d.ts +226 -0
  36. package/dist/hub/composer.zod.d.ts.map +1 -1
  37. package/dist/hub/hub-federation.zod.d.ts +764 -0
  38. package/dist/hub/hub-federation.zod.d.ts.map +1 -0
  39. package/dist/hub/hub-federation.zod.js +441 -0
  40. package/dist/hub/index.d.ts +2 -0
  41. package/dist/hub/index.d.ts.map +1 -1
  42. package/dist/hub/index.js +3 -0
  43. package/dist/hub/plugin-security.zod.d.ts +1029 -0
  44. package/dist/hub/plugin-security.zod.d.ts.map +1 -0
  45. package/dist/hub/plugin-security.zod.js +637 -0
  46. package/dist/index.d.ts +1 -0
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +2 -1
  49. package/dist/integration/connector/vercel.zod.d.ts +2 -2
  50. package/dist/qa/index.d.ts +11 -0
  51. package/dist/qa/index.d.ts.map +1 -0
  52. package/dist/qa/index.js +26 -0
  53. package/dist/qa/testing.zod.d.ts +345 -0
  54. package/dist/qa/testing.zod.d.ts.map +1 -0
  55. package/dist/qa/testing.zod.js +69 -0
  56. package/dist/stack.zod.d.ts +576 -3
  57. package/dist/stack.zod.d.ts.map +1 -1
  58. package/dist/system/index.d.ts +2 -0
  59. package/dist/system/index.d.ts.map +1 -1
  60. package/dist/system/index.js +2 -0
  61. package/dist/system/manifest.zod.d.ts +226 -0
  62. package/dist/system/manifest.zod.d.ts.map +1 -1
  63. package/dist/system/manifest.zod.js +8 -0
  64. package/dist/system/message-queue.zod.d.ts +2 -2
  65. package/dist/system/metadata-loader.zod.d.ts +1 -1
  66. package/dist/system/migration.zod.d.ts +4205 -0
  67. package/dist/system/migration.zod.d.ts.map +1 -0
  68. package/dist/system/migration.zod.js +70 -0
  69. package/dist/system/plugin-loading.zod.d.ts +575 -0
  70. package/dist/system/plugin-loading.zod.d.ts.map +1 -0
  71. package/dist/system/plugin-loading.zod.js +612 -0
  72. package/json-schema/ai/FeedbackLoop.json +7 -0
  73. package/json-schema/ai/Issue.json +7 -0
  74. package/json-schema/ai/MetadataSource.json +7 -0
  75. package/json-schema/ai/Resolution.json +7 -0
  76. package/json-schema/api/ApiChangelogEntry.json +7 -0
  77. package/json-schema/api/ApiDiscoveryQuery.json +7 -0
  78. package/json-schema/api/ApiDiscoveryResponse.json +7 -0
  79. package/json-schema/api/ApiDocumentationConfig.json +7 -0
  80. package/json-schema/api/ApiEndpointRegistration.json +7 -0
  81. package/json-schema/api/ApiMetadata.json +7 -0
  82. package/json-schema/api/ApiParameter.json +7 -0
  83. package/json-schema/api/ApiProtocolType.json +7 -0
  84. package/json-schema/api/ApiRegistry.json +7 -0
  85. package/json-schema/api/ApiRegistryEntry.json +7 -0
  86. package/json-schema/api/ApiResponse.json +7 -0
  87. package/json-schema/api/ApiTestCollection.json +7 -0
  88. package/json-schema/api/ApiTestRequest.json +7 -0
  89. package/json-schema/api/ApiTestingUiConfig.json +7 -0
  90. package/json-schema/api/ApiTestingUiType.json +7 -0
  91. package/json-schema/api/BuildStatusResponse.json +7 -0
  92. package/json-schema/api/CodeGenerationTemplate.json +7 -0
  93. package/json-schema/api/CompileManifestRequest.json +7 -0
  94. package/json-schema/api/CompileManifestResponse.json +7 -0
  95. package/json-schema/api/ConflictResolutionStrategy.json +7 -0
  96. package/json-schema/api/CreateSpaceRequest.json +7 -0
  97. package/json-schema/api/CreateTenantRequest.json +7 -0
  98. package/json-schema/api/GeneratedApiDocumentation.json +7 -0
  99. package/json-schema/api/GetBuildStatusRequest.json +7 -0
  100. package/json-schema/api/GetMarketplacePluginRequest.json +7 -0
  101. package/json-schema/api/GetPluginVersionsRequest.json +7 -0
  102. package/json-schema/api/GetPluginVersionsResponse.json +7 -0
  103. package/json-schema/api/HttpStatusCode.json +7 -0
  104. package/json-schema/api/HubHealthResponse.json +7 -0
  105. package/json-schema/api/HubMetricsResponse.json +7 -0
  106. package/json-schema/api/IssueLicenseRequest.json +7 -0
  107. package/json-schema/api/LicenseResponse.json +7 -0
  108. package/json-schema/api/ListLicensesRequest.json +7 -0
  109. package/json-schema/api/ListLicensesResponse.json +7 -0
  110. package/json-schema/api/ListMarketplaceRequest.json +7 -0
  111. package/json-schema/api/ListMarketplaceResponse.json +7 -0
  112. package/json-schema/api/ListSpacesRequest.json +7 -0
  113. package/json-schema/api/ListSpacesResponse.json +7 -0
  114. package/json-schema/api/ListTenantsRequest.json +7 -0
  115. package/json-schema/api/ListTenantsResponse.json +7 -0
  116. package/json-schema/api/MarketplacePluginResponse.json +7 -0
  117. package/json-schema/api/ObjectQLReference.json +7 -0
  118. package/json-schema/api/OpenApiSecurityScheme.json +7 -0
  119. package/json-schema/api/OpenApiServer.json +7 -0
  120. package/json-schema/api/OpenApiSpec.json +7 -0
  121. package/json-schema/api/PaginationRequest.json +7 -0
  122. package/json-schema/api/PaginationResponse.json +7 -0
  123. package/json-schema/api/PluginResponse.json +7 -0
  124. package/json-schema/api/PluginVersionInfo.json +7 -0
  125. package/json-schema/api/PublishPluginRequest.json +7 -0
  126. package/json-schema/api/RevokeLicenseRequest.json +7 -0
  127. package/json-schema/api/SchemaDefinition.json +7 -0
  128. package/json-schema/api/SearchPluginsRequest.json +7 -0
  129. package/json-schema/api/SearchPluginsResponse.json +7 -0
  130. package/json-schema/api/SpaceResponse.json +7 -0
  131. package/json-schema/api/TenantResponse.json +7 -0
  132. package/json-schema/api/UpdatePluginRequest.json +7 -0
  133. package/json-schema/api/UpdateSpaceRequest.json +7 -0
  134. package/json-schema/api/UpdateTenantRequest.json +7 -0
  135. package/json-schema/api/ValidateLicenseRequest.json +7 -0
  136. package/json-schema/api/ValidateLicenseResponse.json +7 -0
  137. package/json-schema/hub/DependencyConflict.json +7 -0
  138. package/json-schema/hub/DependencyGraph.json +7 -0
  139. package/json-schema/hub/DependencyGraphNode.json +7 -0
  140. package/json-schema/hub/DependencyResolutionResult.json +7 -0
  141. package/json-schema/hub/EdgeLocation.json +7 -0
  142. package/json-schema/hub/FederationTopology.json +7 -0
  143. package/json-schema/hub/GlobalRegistryEntry.json +7 -0
  144. package/json-schema/hub/HubInstance.json +7 -0
  145. package/json-schema/hub/PackageDependency.json +7 -0
  146. package/json-schema/hub/PluginProvenance.json +7 -0
  147. package/json-schema/hub/PluginTrustScore.json +7 -0
  148. package/json-schema/hub/Region.json +7 -0
  149. package/json-schema/hub/ReplicationJob.json +7 -0
  150. package/json-schema/hub/SBOM.json +7 -0
  151. package/json-schema/hub/SBOMEntry.json +7 -0
  152. package/json-schema/hub/SecurityPolicy.json +7 -0
  153. package/json-schema/hub/SecurityScanResult.json +7 -0
  154. package/json-schema/hub/SecurityVulnerability.json +7 -0
  155. package/json-schema/hub/TenantPlacementPolicy.json +7 -0
  156. package/json-schema/hub/VulnerabilitySeverity.json +7 -0
  157. package/json-schema/qa/TestAction.json +7 -0
  158. package/json-schema/qa/TestActionType.json +7 -0
  159. package/json-schema/qa/TestAssertion.json +7 -0
  160. package/json-schema/qa/TestAssertionType.json +7 -0
  161. package/json-schema/qa/TestContext.json +7 -0
  162. package/json-schema/qa/TestScenario.json +7 -0
  163. package/json-schema/qa/TestStep.json +7 -0
  164. package/json-schema/qa/TestSuite.json +7 -0
  165. package/json-schema/system/AddFieldOperation.json +7 -0
  166. package/json-schema/system/ChangeSet.json +7 -0
  167. package/json-schema/system/CreateObjectOperation.json +7 -0
  168. package/json-schema/system/DeleteObjectOperation.json +7 -0
  169. package/json-schema/system/ExecuteSqlOperation.json +7 -0
  170. package/json-schema/system/MigrationDependency.json +7 -0
  171. package/json-schema/system/MigrationOperation.json +7 -0
  172. package/json-schema/system/ModifyFieldOperation.json +7 -0
  173. package/json-schema/system/PluginCaching.json +7 -0
  174. package/json-schema/system/PluginCodeSplitting.json +7 -0
  175. package/json-schema/system/PluginDependencyResolution.json +7 -0
  176. package/json-schema/system/PluginDynamicImport.json +7 -0
  177. package/json-schema/system/PluginHotReload.json +7 -0
  178. package/json-schema/system/PluginInitialization.json +7 -0
  179. package/json-schema/system/PluginLoadingConfig.json +7 -0
  180. package/json-schema/system/PluginLoadingEvent.json +7 -0
  181. package/json-schema/system/PluginLoadingState.json +7 -0
  182. package/json-schema/system/PluginLoadingStrategy.json +7 -0
  183. package/json-schema/system/PluginPerformanceMonitoring.json +7 -0
  184. package/json-schema/system/PluginPreloadConfig.json +7 -0
  185. package/json-schema/system/PluginSandboxing.json +7 -0
  186. package/json-schema/system/RemoveFieldOperation.json +7 -0
  187. package/json-schema/system/RenameObjectOperation.json +7 -0
  188. package/package.json +1 -1
@@ -0,0 +1,784 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HubAPIContract = exports.HubMetricsResponseSchema = exports.HubHealthResponseSchema = exports.BuildStatusResponseSchema = exports.GetBuildStatusRequestSchema = exports.CompileManifestResponseSchema = exports.CompileManifestRequestSchema = exports.ListLicensesResponseSchema = exports.ListLicensesRequestSchema = exports.RevokeLicenseRequestSchema = exports.ValidateLicenseResponseSchema = exports.ValidateLicenseRequestSchema = exports.LicenseResponseSchema = exports.IssueLicenseRequestSchema = exports.MarketplacePluginResponseSchema = exports.GetMarketplacePluginRequestSchema = exports.ListMarketplaceResponseSchema = exports.ListMarketplaceRequestSchema = exports.GetPluginVersionsResponseSchema = exports.PluginVersionInfoSchema = exports.GetPluginVersionsRequestSchema = exports.SearchPluginsResponseSchema = exports.SearchPluginsRequestSchema = exports.PluginResponseSchema = exports.UpdatePluginRequestSchema = exports.PublishPluginRequestSchema = exports.ListTenantsResponseSchema = exports.ListTenantsRequestSchema = exports.TenantResponseSchema = exports.UpdateTenantRequestSchema = exports.CreateTenantRequestSchema = exports.ListSpacesResponseSchema = exports.ListSpacesRequestSchema = exports.SpaceResponseSchema = exports.UpdateSpaceRequestSchema = exports.CreateSpaceRequestSchema = exports.PaginationResponseSchema = exports.PaginationRequestSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const index_1 = require("../hub/index");
6
+ /**
7
+ * # Hub Management API Protocol
8
+ *
9
+ * Defines RESTful API contracts for the ObjectStack Hub - the unified cloud
10
+ * management center for all tenants, plugins, spaces, and marketplace operations.
11
+ *
12
+ * This protocol enables:
13
+ * - Multi-tenant SaaS management
14
+ * - Plugin marketplace operations
15
+ * - Space/workspace lifecycle
16
+ * - License management and validation
17
+ * - Composer/builder services
18
+ *
19
+ * @see https://objectstack.ai/docs/api/hub
20
+ */
21
+ // ============================================================================
22
+ // Common Types
23
+ // ============================================================================
24
+ /**
25
+ * Pagination Request Parameters
26
+ */
27
+ exports.PaginationRequestSchema = zod_1.z.object({
28
+ /**
29
+ * Page number (1-indexed)
30
+ */
31
+ page: zod_1.z.number().int().min(1).default(1).optional(),
32
+ /**
33
+ * Number of items per page
34
+ */
35
+ perPage: zod_1.z.number().int().min(1).max(100).default(20).optional(),
36
+ /**
37
+ * Sort field
38
+ */
39
+ sortBy: zod_1.z.string().optional(),
40
+ /**
41
+ * Sort direction
42
+ */
43
+ sortOrder: zod_1.z.enum(['asc', 'desc']).default('desc').optional(),
44
+ });
45
+ /**
46
+ * Pagination Response Metadata
47
+ */
48
+ exports.PaginationResponseSchema = zod_1.z.object({
49
+ /**
50
+ * Current page number
51
+ */
52
+ page: zod_1.z.number().int().min(1),
53
+ /**
54
+ * Items per page
55
+ */
56
+ perPage: zod_1.z.number().int().min(1),
57
+ /**
58
+ * Total number of items
59
+ */
60
+ total: zod_1.z.number().int().min(0),
61
+ /**
62
+ * Total number of pages
63
+ */
64
+ totalPages: zod_1.z.number().int().min(0),
65
+ /**
66
+ * Whether there is a next page
67
+ */
68
+ hasNext: zod_1.z.boolean(),
69
+ /**
70
+ * Whether there is a previous page
71
+ */
72
+ hasPrev: zod_1.z.boolean(),
73
+ });
74
+ // ============================================================================
75
+ // Space Management API
76
+ // ============================================================================
77
+ /**
78
+ * Create Space Request
79
+ *
80
+ * @example
81
+ * ```json
82
+ * {
83
+ * "name": "Sales Team Workspace",
84
+ * "slug": "sales-team",
85
+ * "ownerId": "user_abc123",
86
+ * "runtime": {
87
+ * "isolation": "shared_schema",
88
+ * "quotas": {
89
+ * "maxUsers": 50,
90
+ * "maxStorage": 107374182400,
91
+ * "apiRateLimit": 10000
92
+ * }
93
+ * }
94
+ * }
95
+ * ```
96
+ */
97
+ exports.CreateSpaceRequestSchema = zod_1.z.object({
98
+ name: zod_1.z.string().min(1).max(255).describe('Space display name'),
99
+ slug: zod_1.z.string().regex(/^[a-z0-9-]+$/).min(1).max(100).describe('URL-friendly identifier'),
100
+ ownerId: zod_1.z.string().describe('Owner user/org ID'),
101
+ runtime: index_1.HubSpaceSchema.shape.runtime.optional(),
102
+ bom: index_1.BillOfMaterialsSchema.optional().describe('Initial Bill of Materials'),
103
+ subscription: index_1.HubSpaceSchema.shape.subscription.optional(),
104
+ deployment: index_1.HubSpaceSchema.shape.deployment.optional(),
105
+ });
106
+ /**
107
+ * Update Space Request
108
+ *
109
+ * @example
110
+ * ```json
111
+ * {
112
+ * "name": "Updated Sales Team",
113
+ * "bom": {
114
+ * "tenantId": "tenant_123",
115
+ * "dependencies": [
116
+ * { "id": "com.objectstack.crm", "version": "2.0.0" }
117
+ * ],
118
+ * "resolutionStrategy": "override"
119
+ * }
120
+ * }
121
+ * ```
122
+ */
123
+ exports.UpdateSpaceRequestSchema = exports.CreateSpaceRequestSchema.partial();
124
+ /**
125
+ * Space Response
126
+ *
127
+ * @example
128
+ * ```json
129
+ * {
130
+ * "id": "550e8400-e29b-41d4-a716-446655440000",
131
+ * "name": "Sales Team Workspace",
132
+ * "slug": "sales-team",
133
+ * "ownerId": "user_abc123",
134
+ * "runtime": {
135
+ * "isolation": "shared_schema",
136
+ * "quotas": {
137
+ * "maxUsers": 50,
138
+ * "maxStorage": 107374182400,
139
+ * "apiRateLimit": 10000
140
+ * }
141
+ * },
142
+ * "bom": {
143
+ * "tenantId": "tenant_123",
144
+ * "dependencies": [],
145
+ * "resolutionStrategy": "override"
146
+ * },
147
+ * "createdAt": "2024-01-01T00:00:00Z",
148
+ * "updatedAt": "2024-01-02T00:00:00Z"
149
+ * }
150
+ * ```
151
+ */
152
+ exports.SpaceResponseSchema = index_1.HubSpaceSchema;
153
+ /**
154
+ * List Spaces Request
155
+ */
156
+ exports.ListSpacesRequestSchema = exports.PaginationRequestSchema.extend({
157
+ ownerId: zod_1.z.string().optional().describe('Filter by owner'),
158
+ search: zod_1.z.string().optional().describe('Search in name and slug'),
159
+ });
160
+ /**
161
+ * List Spaces Response
162
+ *
163
+ * @example
164
+ * ```json
165
+ * {
166
+ * "data": [
167
+ * {
168
+ * "id": "550e8400-e29b-41d4-a716-446655440000",
169
+ * "name": "Sales Team",
170
+ * "slug": "sales-team",
171
+ * "ownerId": "user_123",
172
+ * "createdAt": "2024-01-01T00:00:00Z",
173
+ * "updatedAt": "2024-01-02T00:00:00Z"
174
+ * }
175
+ * ],
176
+ * "pagination": {
177
+ * "page": 1,
178
+ * "perPage": 20,
179
+ * "total": 1,
180
+ * "totalPages": 1,
181
+ * "hasNext": false,
182
+ * "hasPrev": false
183
+ * }
184
+ * }
185
+ * ```
186
+ */
187
+ exports.ListSpacesResponseSchema = zod_1.z.object({
188
+ data: zod_1.z.array(exports.SpaceResponseSchema),
189
+ pagination: exports.PaginationResponseSchema,
190
+ });
191
+ // ============================================================================
192
+ // Tenant Management API
193
+ // ============================================================================
194
+ /**
195
+ * Create Tenant Request
196
+ *
197
+ * @example
198
+ * ```json
199
+ * {
200
+ * "name": "Acme Corporation",
201
+ * "isolationLevel": "isolated_schema",
202
+ * "quotas": {
203
+ * "maxUsers": 100,
204
+ * "maxStorage": 214748364800,
205
+ * "apiRateLimit": 50000
206
+ * }
207
+ * }
208
+ * ```
209
+ */
210
+ exports.CreateTenantRequestSchema = zod_1.z.object({
211
+ name: zod_1.z.string().min(1).max(255).describe('Tenant display name'),
212
+ isolationLevel: index_1.TenantSchema.shape.isolationLevel,
213
+ customizations: index_1.TenantSchema.shape.customizations.optional(),
214
+ quotas: index_1.TenantSchema.shape.quotas.optional(),
215
+ });
216
+ /**
217
+ * Update Tenant Request
218
+ */
219
+ exports.UpdateTenantRequestSchema = exports.CreateTenantRequestSchema.partial();
220
+ /**
221
+ * Tenant Response
222
+ */
223
+ exports.TenantResponseSchema = index_1.TenantSchema;
224
+ /**
225
+ * List Tenants Request
226
+ */
227
+ exports.ListTenantsRequestSchema = exports.PaginationRequestSchema.extend({
228
+ isolationLevel: index_1.TenantSchema.shape.isolationLevel.optional(),
229
+ search: zod_1.z.string().optional(),
230
+ });
231
+ /**
232
+ * List Tenants Response
233
+ */
234
+ exports.ListTenantsResponseSchema = zod_1.z.object({
235
+ data: zod_1.z.array(exports.TenantResponseSchema),
236
+ pagination: exports.PaginationResponseSchema,
237
+ });
238
+ // ============================================================================
239
+ // Plugin Registry API
240
+ // ============================================================================
241
+ /**
242
+ * Publish Plugin Request
243
+ *
244
+ * @example
245
+ * ```json
246
+ * {
247
+ * "id": "com.acme.crm.advanced",
248
+ * "version": "1.0.0",
249
+ * "name": "Advanced CRM",
250
+ * "description": "Enterprise-grade CRM solution",
251
+ * "category": "data",
252
+ * "vendor": {
253
+ * "id": "com.acme",
254
+ * "name": "Acme Corporation",
255
+ * "verified": true,
256
+ * "trustLevel": "verified"
257
+ * }
258
+ * }
259
+ * ```
260
+ */
261
+ exports.PublishPluginRequestSchema = index_1.PluginRegistryEntrySchema.omit({
262
+ publishedAt: true,
263
+ updatedAt: true,
264
+ statistics: true,
265
+ quality: true,
266
+ });
267
+ /**
268
+ * Update Plugin Request
269
+ */
270
+ exports.UpdatePluginRequestSchema = exports.PublishPluginRequestSchema.partial();
271
+ /**
272
+ * Plugin Response
273
+ */
274
+ exports.PluginResponseSchema = index_1.PluginRegistryEntrySchema;
275
+ /**
276
+ * Search Plugins Request
277
+ *
278
+ * @example
279
+ * ```json
280
+ * {
281
+ * "query": "crm",
282
+ * "category": ["data", "integration"],
283
+ * "trustLevel": ["verified", "official"],
284
+ * "minRating": 4.0,
285
+ * "sortBy": "downloads",
286
+ * "page": 1,
287
+ * "limit": 20
288
+ * }
289
+ * ```
290
+ */
291
+ exports.SearchPluginsRequestSchema = index_1.PluginSearchFiltersSchema;
292
+ /**
293
+ * Search Plugins Response
294
+ *
295
+ * @example
296
+ * ```json
297
+ * {
298
+ * "data": [
299
+ * {
300
+ * "id": "com.acme.crm",
301
+ * "version": "1.0.0",
302
+ * "name": "Advanced CRM",
303
+ * "description": "Enterprise CRM",
304
+ * "category": "data",
305
+ * "vendor": {
306
+ * "id": "com.acme",
307
+ * "name": "Acme Corp",
308
+ * "verified": true,
309
+ * "trustLevel": "verified"
310
+ * },
311
+ * "statistics": {
312
+ * "downloads": 15000,
313
+ * "activeInstallations": 850,
314
+ * "ratings": {
315
+ * "average": 4.7,
316
+ * "count": 120
317
+ * }
318
+ * }
319
+ * }
320
+ * ],
321
+ * "pagination": {
322
+ * "page": 1,
323
+ * "perPage": 20,
324
+ * "total": 45,
325
+ * "totalPages": 3,
326
+ * "hasNext": true,
327
+ * "hasPrev": false
328
+ * }
329
+ * }
330
+ * ```
331
+ */
332
+ exports.SearchPluginsResponseSchema = zod_1.z.object({
333
+ data: zod_1.z.array(exports.PluginResponseSchema),
334
+ pagination: exports.PaginationResponseSchema,
335
+ });
336
+ /**
337
+ * Get Plugin Versions Request
338
+ */
339
+ exports.GetPluginVersionsRequestSchema = zod_1.z.object({
340
+ pluginId: zod_1.z.string().describe('Plugin identifier'),
341
+ });
342
+ /**
343
+ * Plugin Version Info
344
+ */
345
+ exports.PluginVersionInfoSchema = zod_1.z.object({
346
+ version: zod_1.z.string(),
347
+ publishedAt: zod_1.z.string().datetime(),
348
+ deprecated: zod_1.z.boolean().default(false),
349
+ yanked: zod_1.z.boolean().default(false).describe('Whether this version was removed'),
350
+ changelog: zod_1.z.string().optional(),
351
+ });
352
+ /**
353
+ * Get Plugin Versions Response
354
+ */
355
+ exports.GetPluginVersionsResponseSchema = zod_1.z.object({
356
+ pluginId: zod_1.z.string(),
357
+ versions: zod_1.z.array(exports.PluginVersionInfoSchema),
358
+ latest: zod_1.z.string().describe('Latest stable version'),
359
+ latestPrerelease: zod_1.z.string().optional().describe('Latest pre-release version'),
360
+ });
361
+ // ============================================================================
362
+ // Marketplace API
363
+ // ============================================================================
364
+ /**
365
+ * List Marketplace Plugins Request
366
+ */
367
+ exports.ListMarketplaceRequestSchema = exports.PaginationRequestSchema.extend({
368
+ category: zod_1.z.string().optional(),
369
+ tags: zod_1.z.array(zod_1.z.string()).optional(),
370
+ verified: zod_1.z.boolean().optional(),
371
+ search: zod_1.z.string().optional(),
372
+ });
373
+ /**
374
+ * List Marketplace Response
375
+ */
376
+ exports.ListMarketplaceResponseSchema = zod_1.z.object({
377
+ data: zod_1.z.array(index_1.MarketplacePluginSchema),
378
+ pagination: exports.PaginationResponseSchema,
379
+ categories: zod_1.z.array(zod_1.z.object({
380
+ id: zod_1.z.string(),
381
+ label: zod_1.z.string(),
382
+ count: zod_1.z.number().int(),
383
+ })).optional().describe('Available categories with counts'),
384
+ });
385
+ /**
386
+ * Get Marketplace Plugin Details Request
387
+ */
388
+ exports.GetMarketplacePluginRequestSchema = zod_1.z.object({
389
+ pluginId: zod_1.z.string(),
390
+ });
391
+ /**
392
+ * Marketplace Plugin Details Response
393
+ */
394
+ exports.MarketplacePluginResponseSchema = index_1.MarketplacePluginSchema;
395
+ // ============================================================================
396
+ // License Management API
397
+ // ============================================================================
398
+ /**
399
+ * Issue License Request
400
+ *
401
+ * @example
402
+ * ```json
403
+ * {
404
+ * "spaceId": "550e8400-e29b-41d4-a716-446655440000",
405
+ * "planCode": "enterprise_v1",
406
+ * "expiresAt": "2025-12-31T23:59:59Z",
407
+ * "customFeatures": ["advanced_analytics", "ai_insights"],
408
+ * "customLimits": {
409
+ * "storage_gb": 500,
410
+ * "api_calls": 1000000
411
+ * },
412
+ * "plugins": ["com.acme.crm", "com.acme.analytics"]
413
+ * }
414
+ * ```
415
+ */
416
+ exports.IssueLicenseRequestSchema = zod_1.z.object({
417
+ spaceId: zod_1.z.string().describe('Target space ID'),
418
+ planCode: zod_1.z.string().describe('Plan code'),
419
+ expiresAt: zod_1.z.string().datetime().optional(),
420
+ customFeatures: zod_1.z.array(zod_1.z.string()).optional(),
421
+ customLimits: zod_1.z.record(zod_1.z.string(), zod_1.z.number()).optional(),
422
+ plugins: zod_1.z.array(zod_1.z.string()).optional(),
423
+ });
424
+ /**
425
+ * License Response
426
+ */
427
+ exports.LicenseResponseSchema = index_1.LicenseSchema;
428
+ /**
429
+ * Validate License Request
430
+ *
431
+ * @example
432
+ * ```json
433
+ * {
434
+ * "spaceId": "550e8400-e29b-41d4-a716-446655440000",
435
+ * "signature": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
436
+ * }
437
+ * ```
438
+ */
439
+ exports.ValidateLicenseRequestSchema = zod_1.z.object({
440
+ spaceId: zod_1.z.string(),
441
+ signature: zod_1.z.string().describe('License signature/token'),
442
+ });
443
+ /**
444
+ * License Validation Response
445
+ *
446
+ * @example
447
+ * ```json
448
+ * {
449
+ * "valid": true,
450
+ * "license": {
451
+ * "spaceId": "550e8400-e29b-41d4-a716-446655440000",
452
+ * "planCode": "enterprise_v1",
453
+ * "status": "active",
454
+ * "issuedAt": "2024-01-01T00:00:00Z",
455
+ * "expiresAt": "2025-12-31T23:59:59Z"
456
+ * },
457
+ * "errors": []
458
+ * }
459
+ * ```
460
+ */
461
+ exports.ValidateLicenseResponseSchema = zod_1.z.object({
462
+ valid: zod_1.z.boolean(),
463
+ license: exports.LicenseResponseSchema.optional(),
464
+ errors: zod_1.z.array(zod_1.z.string()).default([]),
465
+ warnings: zod_1.z.array(zod_1.z.string()).default([]),
466
+ });
467
+ /**
468
+ * Revoke License Request
469
+ */
470
+ exports.RevokeLicenseRequestSchema = zod_1.z.object({
471
+ spaceId: zod_1.z.string(),
472
+ reason: zod_1.z.string().optional(),
473
+ });
474
+ /**
475
+ * List Licenses Request
476
+ */
477
+ exports.ListLicensesRequestSchema = exports.PaginationRequestSchema.extend({
478
+ spaceId: zod_1.z.string().optional(),
479
+ planCode: zod_1.z.string().optional(),
480
+ status: index_1.LicenseSchema.shape.status.optional(),
481
+ });
482
+ /**
483
+ * List Licenses Response
484
+ */
485
+ exports.ListLicensesResponseSchema = zod_1.z.object({
486
+ data: zod_1.z.array(exports.LicenseResponseSchema),
487
+ pagination: exports.PaginationResponseSchema,
488
+ });
489
+ // ============================================================================
490
+ // Composer Service API
491
+ // ============================================================================
492
+ /**
493
+ * Compile Manifest Request
494
+ *
495
+ * @example
496
+ * ```json
497
+ * {
498
+ * "bom": {
499
+ * "tenantId": "tenant_123",
500
+ * "dependencies": [
501
+ * {
502
+ * "id": "com.objectstack.crm",
503
+ * "version": "2.0.0",
504
+ * "configuration": {
505
+ * "currency": "USD",
506
+ * "region": "us-east-1"
507
+ * }
508
+ * }
509
+ * ],
510
+ * "resolutionStrategy": "override"
511
+ * },
512
+ * "runtimeVersion": "1.5.0",
513
+ * "dryRun": false
514
+ * }
515
+ * ```
516
+ */
517
+ exports.CompileManifestRequestSchema = index_1.ComposerRequestSchema;
518
+ /**
519
+ * Compile Manifest Response
520
+ */
521
+ exports.CompileManifestResponseSchema = index_1.ComposerResponseSchema;
522
+ /**
523
+ * Get Build Status Request
524
+ */
525
+ exports.GetBuildStatusRequestSchema = zod_1.z.object({
526
+ buildId: zod_1.z.string(),
527
+ });
528
+ /**
529
+ * Build Status Response
530
+ *
531
+ * @example
532
+ * ```json
533
+ * {
534
+ * "buildId": "build_abc123",
535
+ * "status": "success",
536
+ * "progress": 100,
537
+ * "startedAt": "2024-01-01T10:00:00Z",
538
+ * "completedAt": "2024-01-01T10:02:30Z",
539
+ * "duration": 150000,
540
+ * "logs": [
541
+ * { "timestamp": "2024-01-01T10:00:00Z", "level": "info", "message": "Starting compilation" },
542
+ * { "timestamp": "2024-01-01T10:02:30Z", "level": "info", "message": "Compilation complete" }
543
+ * ]
544
+ * }
545
+ * ```
546
+ */
547
+ exports.BuildStatusResponseSchema = zod_1.z.object({
548
+ buildId: zod_1.z.string(),
549
+ status: zod_1.z.enum(['pending', 'in_progress', 'success', 'failed']),
550
+ progress: zod_1.z.number().min(0).max(100).describe('Completion percentage'),
551
+ startedAt: zod_1.z.string().datetime().optional(),
552
+ completedAt: zod_1.z.string().datetime().optional(),
553
+ duration: zod_1.z.number().optional().describe('Duration in milliseconds'),
554
+ logs: zod_1.z.array(zod_1.z.object({
555
+ timestamp: zod_1.z.string().datetime(),
556
+ level: zod_1.z.enum(['debug', 'info', 'warn', 'error']),
557
+ message: zod_1.z.string(),
558
+ })).optional(),
559
+ error: zod_1.z.string().optional(),
560
+ });
561
+ // ============================================================================
562
+ // Health & Monitoring
563
+ // ============================================================================
564
+ /**
565
+ * Hub Health Check Response
566
+ *
567
+ * @example
568
+ * ```json
569
+ * {
570
+ * "status": "healthy",
571
+ * "version": "1.0.0",
572
+ * "uptime": 86400,
573
+ * "services": {
574
+ * "database": {
575
+ * "status": "healthy",
576
+ * "latency": 5
577
+ * },
578
+ * "cache": {
579
+ * "status": "healthy",
580
+ * "latency": 2
581
+ * },
582
+ * "composer": {
583
+ * "status": "healthy",
584
+ * "latency": 15
585
+ * }
586
+ * },
587
+ * "timestamp": "2024-01-01T12:00:00Z"
588
+ * }
589
+ * ```
590
+ */
591
+ exports.HubHealthResponseSchema = zod_1.z.object({
592
+ status: zod_1.z.enum(['healthy', 'degraded', 'unhealthy']),
593
+ version: zod_1.z.string(),
594
+ uptime: zod_1.z.number().describe('Uptime in seconds'),
595
+ services: zod_1.z.record(zod_1.z.string(), zod_1.z.object({
596
+ status: zod_1.z.enum(['healthy', 'degraded', 'unhealthy']),
597
+ latency: zod_1.z.number().optional().describe('Latency in milliseconds'),
598
+ message: zod_1.z.string().optional(),
599
+ })),
600
+ timestamp: zod_1.z.string().datetime(),
601
+ });
602
+ /**
603
+ * Hub Metrics Response
604
+ *
605
+ * @example
606
+ * ```json
607
+ * {
608
+ * "metrics": {
609
+ * "spaces": {
610
+ * "total": 1250,
611
+ * "active": 980,
612
+ * "created_last_30d": 45
613
+ * },
614
+ * "tenants": {
615
+ * "total": 320,
616
+ * "active": 285
617
+ * },
618
+ * "plugins": {
619
+ * "total": 156,
620
+ * "published_last_30d": 8,
621
+ * "total_downloads": 456789
622
+ * },
623
+ * "api": {
624
+ * "requests_per_minute": 850,
625
+ * "avg_response_time": 125,
626
+ * "error_rate": 0.002
627
+ * }
628
+ * },
629
+ * "timestamp": "2024-01-01T12:00:00Z"
630
+ * }
631
+ * ```
632
+ */
633
+ exports.HubMetricsResponseSchema = zod_1.z.object({
634
+ metrics: zod_1.z.object({
635
+ spaces: zod_1.z.object({
636
+ total: zod_1.z.number().int(),
637
+ active: zod_1.z.number().int(),
638
+ created_last_30d: zod_1.z.number().int().optional(),
639
+ }).optional(),
640
+ tenants: zod_1.z.object({
641
+ total: zod_1.z.number().int(),
642
+ active: zod_1.z.number().int(),
643
+ }).optional(),
644
+ plugins: zod_1.z.object({
645
+ total: zod_1.z.number().int(),
646
+ published_last_30d: zod_1.z.number().int().optional(),
647
+ total_downloads: zod_1.z.number().int().optional(),
648
+ }).optional(),
649
+ api: zod_1.z.object({
650
+ requests_per_minute: zod_1.z.number(),
651
+ avg_response_time: zod_1.z.number().describe('Milliseconds'),
652
+ error_rate: zod_1.z.number().min(0).max(1),
653
+ }).optional(),
654
+ }),
655
+ timestamp: zod_1.z.string().datetime(),
656
+ });
657
+ // ============================================================================
658
+ // Hub API Contracts Export
659
+ // ============================================================================
660
+ /**
661
+ * Complete Hub API Contract
662
+ *
663
+ * This object provides a centralized reference to all Hub API endpoints,
664
+ * request/response schemas, and types for building Hub management systems.
665
+ */
666
+ exports.HubAPIContract = {
667
+ // Space Management
668
+ spaces: {
669
+ create: {
670
+ request: exports.CreateSpaceRequestSchema,
671
+ response: exports.SpaceResponseSchema,
672
+ },
673
+ update: {
674
+ request: exports.UpdateSpaceRequestSchema,
675
+ response: exports.SpaceResponseSchema,
676
+ },
677
+ get: {
678
+ response: exports.SpaceResponseSchema,
679
+ },
680
+ list: {
681
+ request: exports.ListSpacesRequestSchema,
682
+ response: exports.ListSpacesResponseSchema,
683
+ },
684
+ delete: {
685
+ response: zod_1.z.object({ success: zod_1.z.boolean() }),
686
+ },
687
+ },
688
+ // Tenant Management
689
+ tenants: {
690
+ create: {
691
+ request: exports.CreateTenantRequestSchema,
692
+ response: exports.TenantResponseSchema,
693
+ },
694
+ update: {
695
+ request: exports.UpdateTenantRequestSchema,
696
+ response: exports.TenantResponseSchema,
697
+ },
698
+ get: {
699
+ response: exports.TenantResponseSchema,
700
+ },
701
+ list: {
702
+ request: exports.ListTenantsRequestSchema,
703
+ response: exports.ListTenantsResponseSchema,
704
+ },
705
+ delete: {
706
+ response: zod_1.z.object({ success: zod_1.z.boolean() }),
707
+ },
708
+ },
709
+ // Plugin Registry
710
+ plugins: {
711
+ publish: {
712
+ request: exports.PublishPluginRequestSchema,
713
+ response: exports.PluginResponseSchema,
714
+ },
715
+ update: {
716
+ request: exports.UpdatePluginRequestSchema,
717
+ response: exports.PluginResponseSchema,
718
+ },
719
+ get: {
720
+ response: exports.PluginResponseSchema,
721
+ },
722
+ search: {
723
+ request: exports.SearchPluginsRequestSchema,
724
+ response: exports.SearchPluginsResponseSchema,
725
+ },
726
+ versions: {
727
+ request: exports.GetPluginVersionsRequestSchema,
728
+ response: exports.GetPluginVersionsResponseSchema,
729
+ },
730
+ delete: {
731
+ response: zod_1.z.object({ success: zod_1.z.boolean() }),
732
+ },
733
+ },
734
+ // Marketplace
735
+ marketplace: {
736
+ list: {
737
+ request: exports.ListMarketplaceRequestSchema,
738
+ response: exports.ListMarketplaceResponseSchema,
739
+ },
740
+ get: {
741
+ request: exports.GetMarketplacePluginRequestSchema,
742
+ response: exports.MarketplacePluginResponseSchema,
743
+ },
744
+ },
745
+ // License Management
746
+ licenses: {
747
+ issue: {
748
+ request: exports.IssueLicenseRequestSchema,
749
+ response: exports.LicenseResponseSchema,
750
+ },
751
+ validate: {
752
+ request: exports.ValidateLicenseRequestSchema,
753
+ response: exports.ValidateLicenseResponseSchema,
754
+ },
755
+ revoke: {
756
+ request: exports.RevokeLicenseRequestSchema,
757
+ response: zod_1.z.object({ success: zod_1.z.boolean() }),
758
+ },
759
+ list: {
760
+ request: exports.ListLicensesRequestSchema,
761
+ response: exports.ListLicensesResponseSchema,
762
+ },
763
+ },
764
+ // Composer
765
+ composer: {
766
+ compile: {
767
+ request: exports.CompileManifestRequestSchema,
768
+ response: exports.CompileManifestResponseSchema,
769
+ },
770
+ buildStatus: {
771
+ request: exports.GetBuildStatusRequestSchema,
772
+ response: exports.BuildStatusResponseSchema,
773
+ },
774
+ },
775
+ // Health & Monitoring
776
+ health: {
777
+ check: {
778
+ response: exports.HubHealthResponseSchema,
779
+ },
780
+ metrics: {
781
+ response: exports.HubMetricsResponseSchema,
782
+ },
783
+ },
784
+ };