Skip to content

Commit a799f1e

Browse files
committed
refactor(api): simplify request parameters in protocol methods and enhance type definitions
1 parent 028f465 commit a799f1e

3 files changed

Lines changed: 97 additions & 83 deletions

File tree

packages/objectql/src/protocol.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export class ObjectStackProtocolImplementation implements ObjectStackProtocol {
3232
this.engine = engine;
3333
}
3434

35-
async getDiscovery(_request: {}) {
35+
async getDiscovery() {
3636
return {
3737
version: '1.0',
3838
apiName: 'ObjectStack API',
@@ -42,7 +42,11 @@ export class ObjectStackProtocolImplementation implements ObjectStackProtocol {
4242
websockets: false,
4343
files: true,
4444
analytics: false,
45-
hub: false
45+
hub: false,
46+
ai: false,
47+
workflow: false,
48+
notifications: false,
49+
i18n: false,
4650
},
4751
endpoints: {
4852
data: '/api/data',
@@ -52,18 +56,18 @@ export class ObjectStackProtocolImplementation implements ObjectStackProtocol {
5256
};
5357
}
5458

55-
async getMetaTypes(_request: {}) {
59+
async getMetaTypes() {
5660
return {
5761
types: SchemaRegistry.getRegisteredTypes()
5862
};
5963
}
6064

61-
async getMetaItems(request: { type: string; packageId?: string }) {
62-
let items = SchemaRegistry.listItems(request.type, request.packageId);
65+
async getMetaItems(request: { type: string }) {
66+
let items = SchemaRegistry.listItems(request.type);
6367
// Normalize singular/plural: REST uses singular ('app') but registry may store as plural ('apps')
6468
if (items.length === 0) {
6569
const alt = request.type.endsWith('s') ? request.type.slice(0, -1) : request.type + 's';
66-
items = SchemaRegistry.listItems(alt, request.packageId);
70+
items = SchemaRegistry.listItems(alt);
6771
}
6872
return {
6973
type: request.type,

packages/runtime/src/rest-server.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ export class RestServer {
219219
path: basePath,
220220
handler: async (_req: any, res: any) => {
221221
try {
222-
const discovery = await this.protocol.getDiscovery({});
222+
const discovery = await this.protocol.getDiscovery();
223223

224224
// Override discovery information with actual server configuration
225225
discovery.version = this.config.api.version;
@@ -270,7 +270,7 @@ export class RestServer {
270270
path: metaPath,
271271
handler: async (_req: any, res: any) => {
272272
try {
273-
const types = await this.protocol.getMetaTypes({});
273+
const types = await this.protocol.getMetaTypes();
274274
res.json(types);
275275
} catch (error: any) {
276276
res.status(500).json({ error: error.message });
@@ -290,8 +290,7 @@ export class RestServer {
290290
path: `${metaPath}/:type`,
291291
handler: async (req: any, res: any) => {
292292
try {
293-
const packageId = req.query?.package || undefined;
294-
const items = await this.protocol.getMetaItems({ type: req.params.type, packageId });
293+
const items = await this.protocol.getMetaItems({ type: req.params.type });
295294
res.json(items);
296295
} catch (error: any) {
297296
res.status(404).json({ error: error.message });

packages/spec/src/api/protocol.zod.ts

Lines changed: 84 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1184,90 +1184,101 @@ export type {
11841184
PackageStatus,
11851185
};
11861186

1187-
export type ObjectStackProtocol = z.infer<typeof ObjectStackProtocolSchema>;
1187+
/**
1188+
* Zod-inferred protocol type (for runtime validation only).
1189+
* Use ObjectStackProtocol interface for implementation contracts.
1190+
*/
1191+
export type ObjectStackProtocolZod = z.infer<typeof ObjectStackProtocolSchema>;
11881192

11891193
/**
1190-
* Legacy Interface Export
1191-
* Maintained for backward compatibility
1192-
* @deprecated Use ObjectStackProtocol type from protocol.zod.ts instead
1194+
* ObjectStack Protocol Interface
1195+
*
1196+
* Properly typed interface for implementing the ObjectStack API protocol.
1197+
* The Zod schema (ObjectStackProtocolSchema) is used for runtime validation,
1198+
* while this interface provides compile-time type safety for implementations.
11931199
*/
1194-
export interface IObjectStackProtocolLegacy {
1195-
getDiscovery(): Promise<GetDiscoveryResponse>;
1196-
getMetaTypes(): Promise<GetMetaTypesResponse>;
1200+
export interface ObjectStackProtocol {
1201+
// Discovery & Metadata (core)
1202+
getDiscovery(request?: GetDiscoveryRequest): Promise<GetDiscoveryResponse>;
1203+
getMetaTypes(request?: GetMetaTypesRequest): Promise<GetMetaTypesResponse>;
11971204
getMetaItems(request: GetMetaItemsRequest): Promise<GetMetaItemsResponse>;
11981205
getMetaItem(request: GetMetaItemRequest): Promise<GetMetaItemResponse>;
11991206
saveMetaItem(request: SaveMetaItemRequest): Promise<SaveMetaItemResponse>;
1200-
getMetaItemCached(request: GetMetaItemCachedRequest): Promise<GetMetaItemCachedResponse>;
1201-
getUiView(request: GetUiViewRequest): Promise<GetUiViewResponse>;
1207+
getMetaItemCached?(request: GetMetaItemCachedRequest): Promise<GetMetaItemCachedResponse>;
1208+
getUiView?(request: GetUiViewRequest): Promise<GetUiViewResponse>;
12021209

1203-
analyticsQuery(request: AnalyticsQueryRequest): Promise<AnalyticsResultResponse>;
1204-
getAnalyticsMeta(request: GetAnalyticsMetaRequest): Promise<GetAnalyticsMetaResponse>;
1205-
1206-
triggerAutomation(request: AutomationTriggerRequest): Promise<AutomationTriggerResponse>;
1207-
1208-
// Package Management
1209-
listPackages(request: ListPackagesRequest): Promise<ListPackagesResponse>;
1210-
getPackage(request: GetPackageRequest): Promise<GetPackageResponse>;
1211-
installPackage(request: InstallPackageRequest): Promise<InstallPackageResponse>;
1212-
uninstallPackage(request: UninstallPackageRequest): Promise<UninstallPackageResponse>;
1213-
enablePackage(request: EnablePackageRequest): Promise<EnablePackageResponse>;
1214-
disablePackage(request: DisablePackageRequest): Promise<DisablePackageResponse>;
1215-
1210+
// Analytics (optional)
1211+
analyticsQuery?(request: AnalyticsQueryRequest): Promise<AnalyticsResultResponse>;
1212+
getAnalyticsMeta?(request: GetAnalyticsMetaRequest): Promise<GetAnalyticsMetaResponse>;
1213+
1214+
// Automation (optional)
1215+
triggerAutomation?(request: AutomationTriggerRequest): Promise<AutomationTriggerResponse>;
1216+
1217+
// Package Management (optional)
1218+
listPackages?(request: ListPackagesRequest): Promise<ListPackagesResponse>;
1219+
getPackage?(request: GetPackageRequest): Promise<GetPackageResponse>;
1220+
installPackage?(request: InstallPackageRequest): Promise<InstallPackageResponse>;
1221+
uninstallPackage?(request: UninstallPackageRequest): Promise<UninstallPackageResponse>;
1222+
enablePackage?(request: EnablePackageRequest): Promise<EnablePackageResponse>;
1223+
disablePackage?(request: DisablePackageRequest): Promise<DisablePackageResponse>;
1224+
1225+
// Data Operations (core)
12161226
findData(request: FindDataRequest): Promise<FindDataResponse>;
12171227
getData(request: GetDataRequest): Promise<GetDataResponse>;
12181228
createData(request: CreateDataRequest): Promise<CreateDataResponse>;
12191229
updateData(request: UpdateDataRequest): Promise<UpdateDataResponse>;
12201230
deleteData(request: DeleteDataRequest): Promise<DeleteDataResponse>;
12211231

1222-
batchData(request: BatchDataRequest): Promise<BatchDataResponse>;
1223-
createManyData(request: CreateManyDataRequest): Promise<CreateManyDataResponse>;
1224-
updateManyData(request: UpdateManyDataRequest): Promise<UpdateManyDataResponse>;
1225-
deleteManyData(request: DeleteManyDataRequest): Promise<DeleteManyDataResponse>;
1226-
1227-
// View Management
1228-
listViews(request: ListViewsRequest): Promise<ListViewsResponse>;
1229-
getView(request: GetViewRequest): Promise<GetViewResponse>;
1230-
createView(request: CreateViewRequest): Promise<CreateViewResponse>;
1231-
updateView(request: UpdateViewRequest): Promise<UpdateViewResponse>;
1232-
deleteView(request: DeleteViewRequest): Promise<DeleteViewResponse>;
1233-
1234-
// Permissions
1235-
checkPermission(request: CheckPermissionRequest): Promise<CheckPermissionResponse>;
1236-
getObjectPermissions(request: GetObjectPermissionsRequest): Promise<GetObjectPermissionsResponse>;
1237-
getEffectivePermissions(request: GetEffectivePermissionsRequest): Promise<GetEffectivePermissionsResponse>;
1238-
1239-
// Workflows
1240-
getWorkflowConfig(request: GetWorkflowConfigRequest): Promise<GetWorkflowConfigResponse>;
1241-
getWorkflowState(request: GetWorkflowStateRequest): Promise<GetWorkflowStateResponse>;
1242-
workflowTransition(request: WorkflowTransitionRequest): Promise<WorkflowTransitionResponse>;
1243-
workflowApprove(request: WorkflowApproveRequest): Promise<WorkflowApproveResponse>;
1244-
workflowReject(request: WorkflowRejectRequest): Promise<WorkflowRejectResponse>;
1245-
1246-
// Realtime
1247-
realtimeConnect(request: RealtimeConnectRequest): Promise<RealtimeConnectResponse>;
1248-
realtimeDisconnect(request: RealtimeDisconnectRequest): Promise<RealtimeDisconnectResponse>;
1249-
realtimeSubscribe(request: RealtimeSubscribeRequest): Promise<RealtimeSubscribeResponse>;
1250-
realtimeUnsubscribe(request: RealtimeUnsubscribeRequest): Promise<RealtimeUnsubscribeResponse>;
1251-
setPresence(request: SetPresenceRequest): Promise<SetPresenceResponse>;
1252-
getPresence(request: GetPresenceRequest): Promise<GetPresenceResponse>;
1253-
1254-
// Notifications
1255-
registerDevice(request: RegisterDeviceRequest): Promise<RegisterDeviceResponse>;
1256-
unregisterDevice(request: UnregisterDeviceRequest): Promise<UnregisterDeviceResponse>;
1257-
getNotificationPreferences(request: GetNotificationPreferencesRequest): Promise<GetNotificationPreferencesResponse>;
1258-
updateNotificationPreferences(request: UpdateNotificationPreferencesRequest): Promise<UpdateNotificationPreferencesResponse>;
1259-
listNotifications(request: ListNotificationsRequest): Promise<ListNotificationsResponse>;
1260-
markNotificationsRead(request: MarkNotificationsReadRequest): Promise<MarkNotificationsReadResponse>;
1261-
markAllNotificationsRead(request: MarkAllNotificationsReadRequest): Promise<MarkAllNotificationsReadResponse>;
1262-
1263-
// AI
1264-
aiNlq(request: AiNlqRequest): Promise<AiNlqResponse>;
1265-
aiChat(request: AiChatRequest): Promise<AiChatResponse>;
1266-
aiSuggest(request: AiSuggestRequest): Promise<AiSuggestResponse>;
1267-
aiInsights(request: AiInsightsRequest): Promise<AiInsightsResponse>;
1268-
1269-
// i18n
1270-
getLocales(request: GetLocalesRequest): Promise<GetLocalesResponse>;
1271-
getTranslations(request: GetTranslationsRequest): Promise<GetTranslationsResponse>;
1272-
getFieldLabels(request: GetFieldLabelsRequest): Promise<GetFieldLabelsResponse>;
1232+
// Batch Operations (optional)
1233+
batchData?(request: BatchDataRequest): Promise<BatchDataResponse>;
1234+
createManyData?(request: CreateManyDataRequest): Promise<CreateManyDataResponse>;
1235+
updateManyData?(request: UpdateManyDataRequest): Promise<UpdateManyDataResponse>;
1236+
deleteManyData?(request: DeleteManyDataRequest): Promise<DeleteManyDataResponse>;
1237+
1238+
// View Management (optional)
1239+
listViews?(request: ListViewsRequest): Promise<ListViewsResponse>;
1240+
getView?(request: GetViewRequest): Promise<GetViewResponse>;
1241+
createView?(request: CreateViewRequest): Promise<CreateViewResponse>;
1242+
updateView?(request: UpdateViewRequest): Promise<UpdateViewResponse>;
1243+
deleteView?(request: DeleteViewRequest): Promise<DeleteViewResponse>;
1244+
1245+
// Permissions (optional)
1246+
checkPermission?(request: CheckPermissionRequest): Promise<CheckPermissionResponse>;
1247+
getObjectPermissions?(request: GetObjectPermissionsRequest): Promise<GetObjectPermissionsResponse>;
1248+
getEffectivePermissions?(request: GetEffectivePermissionsRequest): Promise<GetEffectivePermissionsResponse>;
1249+
1250+
// Workflows (optional)
1251+
getWorkflowConfig?(request: GetWorkflowConfigRequest): Promise<GetWorkflowConfigResponse>;
1252+
getWorkflowState?(request: GetWorkflowStateRequest): Promise<GetWorkflowStateResponse>;
1253+
workflowTransition?(request: WorkflowTransitionRequest): Promise<WorkflowTransitionResponse>;
1254+
workflowApprove?(request: WorkflowApproveRequest): Promise<WorkflowApproveResponse>;
1255+
workflowReject?(request: WorkflowRejectRequest): Promise<WorkflowRejectResponse>;
1256+
1257+
// Realtime (optional)
1258+
realtimeConnect?(request: RealtimeConnectRequest): Promise<RealtimeConnectResponse>;
1259+
realtimeDisconnect?(request: RealtimeDisconnectRequest): Promise<RealtimeDisconnectResponse>;
1260+
realtimeSubscribe?(request: RealtimeSubscribeRequest): Promise<RealtimeSubscribeResponse>;
1261+
realtimeUnsubscribe?(request: RealtimeUnsubscribeRequest): Promise<RealtimeUnsubscribeResponse>;
1262+
setPresence?(request: SetPresenceRequest): Promise<SetPresenceResponse>;
1263+
getPresence?(request: GetPresenceRequest): Promise<GetPresenceResponse>;
1264+
1265+
// Notifications (optional)
1266+
registerDevice?(request: RegisterDeviceRequest): Promise<RegisterDeviceResponse>;
1267+
unregisterDevice?(request: UnregisterDeviceRequest): Promise<UnregisterDeviceResponse>;
1268+
getNotificationPreferences?(request: GetNotificationPreferencesRequest): Promise<GetNotificationPreferencesResponse>;
1269+
updateNotificationPreferences?(request: UpdateNotificationPreferencesRequest): Promise<UpdateNotificationPreferencesResponse>;
1270+
listNotifications?(request: ListNotificationsRequest): Promise<ListNotificationsResponse>;
1271+
markNotificationsRead?(request: MarkNotificationsReadRequest): Promise<MarkNotificationsReadResponse>;
1272+
markAllNotificationsRead?(request: MarkAllNotificationsReadRequest): Promise<MarkAllNotificationsReadResponse>;
1273+
1274+
// AI (optional)
1275+
aiNlq?(request: AiNlqRequest): Promise<AiNlqResponse>;
1276+
aiChat?(request: AiChatRequest): Promise<AiChatResponse>;
1277+
aiSuggest?(request: AiSuggestRequest): Promise<AiSuggestResponse>;
1278+
aiInsights?(request: AiInsightsRequest): Promise<AiInsightsResponse>;
1279+
1280+
// i18n (optional)
1281+
getLocales?(request: GetLocalesRequest): Promise<GetLocalesResponse>;
1282+
getTranslations?(request: GetTranslationsRequest): Promise<GetTranslationsResponse>;
1283+
getFieldLabels?(request: GetFieldLabelsRequest): Promise<GetFieldLabelsResponse>;
12731284
}

0 commit comments

Comments
 (0)