@objectstack/plugin-hono-server 0.8.1 → 0.8.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @objectstack/plugin-hono-server
2
2
 
3
+ ## 0.8.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [555e6a7]
8
+ - @objectstack/spec@0.8.2
9
+ - @objectstack/core@0.8.2
10
+ - @objectstack/types@0.8.2
11
+
3
12
  ## 0.8.1
4
13
 
5
14
  ### Patch Changes
@@ -256,104 +256,17 @@ class HonoServerPlugin {
256
256
  res.status(404).json({ error: e.message });
257
257
  }
258
258
  });
259
- // View Storage Routes
260
- this.server.post('/api/v1/ui/views', async (req, res) => {
261
- ctx.logger.debug('Create view request', { name: req.body?.name, object: req.body?.object });
262
- try {
263
- const result = await p.createView(req.body);
264
- if (result.success) {
265
- ctx.logger.info('View created', { id: result.data?.id, name: result.data?.name });
266
- res.status(201).json(result);
267
- }
268
- else {
269
- ctx.logger.warn('View creation failed', { error: result.error });
270
- res.status(400).json(result);
271
- }
272
- }
273
- catch (e) {
274
- ctx.logger.error('View creation error', e);
275
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
276
- }
277
- });
278
- this.server.get('/api/v1/ui/views/:id', async (req, res) => {
279
- ctx.logger.debug('Get view request', { id: req.params.id });
280
- try {
281
- const result = await p.getView({ id: req.params.id });
282
- if (result.success) {
283
- ctx.logger.debug('View retrieved', { id: req.params.id });
284
- res.json(result);
285
- }
286
- else {
287
- ctx.logger.warn('View not found', { id: req.params.id });
288
- res.status(404).json(result);
289
- }
290
- }
291
- catch (e) {
292
- ctx.logger.error('Get view error', e, { id: req.params.id });
293
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
294
- }
295
- });
296
- this.server.get('/api/v1/ui/views', async (req, res) => {
297
- ctx.logger.debug('List views request', { query: req.query });
298
- try {
299
- const request = {};
300
- if (req.query.object)
301
- request.object = req.query.object;
302
- if (req.query.type)
303
- request.type = req.query.type;
304
- if (req.query.visibility)
305
- request.visibility = req.query.visibility;
306
- if (req.query.createdBy)
307
- request.createdBy = req.query.createdBy;
308
- if (req.query.isDefault !== undefined)
309
- request.isDefault = req.query.isDefault === 'true';
310
- if (req.query.limit)
311
- request.limit = parseInt(req.query.limit);
312
- if (req.query.offset)
313
- request.offset = parseInt(req.query.offset);
314
- const result = await p.listViews(request);
315
- ctx.logger.debug('Views listed', { count: result.data?.length, total: result.pagination?.total });
316
- res.json(result);
317
- }
318
- catch (e) {
319
- ctx.logger.error('List views error', e);
320
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
321
- }
322
- });
323
- this.server.patch('/api/v1/ui/views/:id', async (req, res) => {
324
- ctx.logger.debug('Update view request', { id: req.params.id });
325
- try {
326
- const result = await p.updateView({ ...req.body, id: req.params.id });
327
- if (result.success) {
328
- ctx.logger.info('View updated', { id: req.params.id });
329
- res.json(result);
330
- }
331
- else {
332
- ctx.logger.warn('View update failed', { id: req.params.id, error: result.error });
333
- res.status(result.error?.code === 'resource_not_found' ? 404 : 400).json(result);
334
- }
335
- }
336
- catch (e) {
337
- ctx.logger.error('Update view error', e, { id: req.params.id });
338
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
339
- }
340
- });
341
- this.server.delete('/api/v1/ui/views/:id', async (req, res) => {
342
- ctx.logger.debug('Delete view request', { id: req.params.id });
259
+ // UI Protocol endpoint
260
+ this.server.get('/api/v1/ui/view/:object', async (req, res) => {
261
+ ctx.logger.debug('Get UI view request', { object: req.params.object, type: req.query.type });
343
262
  try {
344
- const result = await p.deleteView({ id: req.params.id });
345
- if (result.success) {
346
- ctx.logger.info('View deleted', { id: req.params.id });
347
- res.json(result);
348
- }
349
- else {
350
- ctx.logger.warn('View deletion failed', { id: req.params.id });
351
- res.status(404).json(result);
352
- }
263
+ const viewType = req.query.type || 'list';
264
+ const view = await p.getUiView({ object: req.params.object, type: viewType });
265
+ res.json(view);
353
266
  }
354
267
  catch (e) {
355
- ctx.logger.error('Delete view error', e, { id: req.params.id });
356
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
268
+ ctx.logger.warn('UI view not found', { object: req.params.object, error: e.message });
269
+ res.status(404).json({ error: e.message });
357
270
  }
358
271
  });
359
272
  ctx.logger.info('All API routes registered');
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@objectstack/plugin-hono-server",
3
- "version": "0.8.1",
3
+ "version": "0.8.2",
4
4
  "description": "Standard Hono Server Adapter for ObjectStack Runtime",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "dependencies": {
8
8
  "@hono/node-server": "^1.2.0",
9
9
  "hono": "^4.0.0",
10
- "@objectstack/core": "0.8.1",
11
- "@objectstack/spec": "0.8.1",
12
- "@objectstack/types": "0.8.1"
10
+ "@objectstack/core": "0.8.2",
11
+ "@objectstack/spec": "0.8.2",
12
+ "@objectstack/types": "0.8.2"
13
13
  },
14
14
  "devDependencies": {
15
15
  "@types/node": "^25.1.0",
@@ -276,95 +276,20 @@ export class HonoServerPlugin implements Plugin {
276
276
  }
277
277
  });
278
278
 
279
- // View Storage Routes
280
- this.server.post('/api/v1/ui/views', async (req, res) => {
281
- ctx.logger.debug('Create view request', { name: req.body?.name, object: req.body?.object });
282
- try {
283
- const result = await p.createView(req.body);
284
- if (result.success) {
285
- ctx.logger.info('View created', { id: result.data?.id, name: result.data?.name });
286
- res.status(201).json(result);
287
- } else {
288
- ctx.logger.warn('View creation failed', { error: result.error });
289
- res.status(400).json(result);
290
- }
291
- } catch (e: any) {
292
- ctx.logger.error('View creation error', e);
293
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
294
- }
295
- });
296
-
297
- this.server.get('/api/v1/ui/views/:id', async (req, res) => {
298
- ctx.logger.debug('Get view request', { id: req.params.id });
299
- try {
300
- const result = await p.getView({ id: req.params.id });
301
- if (result.success) {
302
- ctx.logger.debug('View retrieved', { id: req.params.id });
303
- res.json(result);
304
- } else {
305
- ctx.logger.warn('View not found', { id: req.params.id });
306
- res.status(404).json(result);
307
- }
308
- } catch (e: any) {
309
- ctx.logger.error('Get view error', e, { id: req.params.id });
310
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
311
- }
312
- });
313
-
314
- this.server.get('/api/v1/ui/views', async (req, res) => {
315
- ctx.logger.debug('List views request', { query: req.query });
279
+ // UI Protocol endpoint
280
+ this.server.get('/api/v1/ui/view/:object', async (req, res) => {
281
+ ctx.logger.debug('Get UI view request', { object: req.params.object, type: req.query.type });
316
282
  try {
317
- const request: any = {};
318
- if (req.query.object) request.object = req.query.object as string;
319
- if (req.query.type) request.type = req.query.type;
320
- if (req.query.visibility) request.visibility = req.query.visibility;
321
- if (req.query.createdBy) request.createdBy = req.query.createdBy as string;
322
- if (req.query.isDefault !== undefined) request.isDefault = req.query.isDefault === 'true';
323
- if (req.query.limit) request.limit = parseInt(req.query.limit as string);
324
- if (req.query.offset) request.offset = parseInt(req.query.offset as string);
325
-
326
- const result = await p.listViews(request);
327
- ctx.logger.debug('Views listed', { count: result.data?.length, total: result.pagination?.total });
328
- res.json(result);
283
+ const viewType = (req.query.type as 'list' | 'form') || 'list';
284
+ const view = await p.getUiView({ object: req.params.object, type: viewType });
285
+ res.json(view);
329
286
  } catch (e: any) {
330
- ctx.logger.error('List views error', e);
331
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
287
+ ctx.logger.warn('UI view not found', { object: req.params.object, error: e.message });
288
+ res.status(404).json({ error: e.message });
332
289
  }
333
290
  });
334
291
 
335
- this.server.patch('/api/v1/ui/views/:id', async (req, res) => {
336
- ctx.logger.debug('Update view request', { id: req.params.id });
337
- try {
338
- const result = await p.updateView({ ...req.body, id: req.params.id });
339
- if (result.success) {
340
- ctx.logger.info('View updated', { id: req.params.id });
341
- res.json(result);
342
- } else {
343
- ctx.logger.warn('View update failed', { id: req.params.id, error: result.error });
344
- res.status(result.error?.code === 'resource_not_found' ? 404 : 400).json(result);
345
- }
346
- } catch (e: any) {
347
- ctx.logger.error('Update view error', e, { id: req.params.id });
348
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
349
- }
350
- });
351
292
 
352
- this.server.delete('/api/v1/ui/views/:id', async (req, res) => {
353
- ctx.logger.debug('Delete view request', { id: req.params.id });
354
- try {
355
- const result = await p.deleteView({ id: req.params.id });
356
- if (result.success) {
357
- ctx.logger.info('View deleted', { id: req.params.id });
358
- res.json(result);
359
- } else {
360
- ctx.logger.warn('View deletion failed', { id: req.params.id });
361
- res.status(404).json(result);
362
- }
363
- } catch (e: any) {
364
- ctx.logger.error('Delete view error', e, { id: req.params.id });
365
- res.status(500).json({ success: false, error: { code: 'internal_error', message: e.message } });
366
- }
367
- });
368
293
 
369
294
  ctx.logger.info('All API routes registered');
370
295
  }