@mxtommy/kip 4.5.0 → 4.5.1

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 (71) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/package.json +16 -6
  3. package/plugin/duckdb-parquet-storage.service.js +78 -102
  4. package/plugin/index.js +60 -40
  5. package/public/{chunk-6XFWUUDD.js → chunk-EQ2N7KDA.js} +1 -1
  6. package/public/{chunk-EDNYYQIZ.js → chunk-IYRLINL7.js} +1 -1
  7. package/public/{chunk-UYIJND2R.js → chunk-JGGMFMY5.js} +1 -1
  8. package/public/{chunk-DD4F6F4S.js → chunk-RONXIZ2U.js} +8 -8
  9. package/public/{chunk-2ICAVOT2.js → chunk-VCY32MWT.js} +1 -1
  10. package/public/{chunk-J3LDKVIS.js → chunk-ZV7IYYEQ.js} +1 -1
  11. package/public/index.html +1 -1
  12. package/public/{main-EG2WF4EO.js → main-FQESQQV6.js} +1 -1
  13. package/.github/ISSUE_TEMPLATE/bug_report.yml +0 -84
  14. package/.github/ISSUE_TEMPLATE/config.yml +0 -5
  15. package/.github/ISSUE_TEMPLATE/feature_request.yml +0 -35
  16. package/.github/copilot-instructions.md +0 -218
  17. package/.github/instructions/angular.instructions.md +0 -123
  18. package/.github/instructions/best-practices.instructions.md +0 -59
  19. package/.github/instructions/project.instructions.md +0 -468
  20. package/.github/workflows/ci.yml +0 -37
  21. package/docs/widget-schematic.md +0 -102
  22. package/images/ActionSidenav.png +0 -0
  23. package/images/ChartplotterMode.png +0 -0
  24. package/images/KIPDemo.png +0 -0
  25. package/images/KipBrightness-1024.png +0 -0
  26. package/images/KipConfig-Units-1024.png +0 -0
  27. package/images/KipConfig-display-1024x488.png +0 -0
  28. package/images/KipFreeboard-SK-1024.png +0 -0
  29. package/images/KipGaugeSample1-1024x545.png +0 -0
  30. package/images/KipGaugeSample2-1024x488.png +0 -0
  31. package/images/KipGaugeSample3-1024x508.png +0 -0
  32. package/images/KipNightMode-1024.png +0 -0
  33. package/images/KipWidgetConfig-layout-1024.png +0 -0
  34. package/images/KipWidgetConfig-paths-1024x488.png +0 -0
  35. package/images/Options.png +0 -0
  36. package/images/exterior_user_installs.png +0 -0
  37. package/images/formfactor.png +0 -0
  38. package/plugin-config-data/kip/historicalData/kip-history.duckdb +0 -0
  39. package/plugin-config-data/kip/historicalData/parquet/chart-1/1772344583976-1772344583976.parquet +0 -0
  40. package/plugin-config-data/kip/historicalData/parquet/live-1/1771408800000-1771408890000.parquet +0 -0
  41. package/plugin-config-data/kip/historicalData/parquet/live-1/1771412400000-1771412490000.parquet +0 -0
  42. package/plugin-config-data/kip/historicalData/parquet/live-1/1771419600000-1771419650000.parquet +0 -0
  43. package/plugin-config-data/kip/historicalData/parquet/live-1/1772344584154-1772344584154.parquet +0 -0
  44. package/plugin-config-data/kip/historicalData/parquet/live-1/1772344584191-1772344584191.parquet +0 -0
  45. package/plugin-config-data/kip/historicalData/parquet/live-1/1772344584268-1772344584268.parquet +0 -0
  46. package/plugin-config-data/kip/historicalData/parquet/live-2/1771502400000-1771502400000.parquet +0 -0
  47. package/plugin-config-data/kip/historicalData/parquet/live-3/1771408800000-1771408890000.parquet +0 -0
  48. package/plugin-config-data/kip/historicalData/parquet/live-3/1771412400000-1771412490000.parquet +0 -0
  49. package/plugin-config-data/kip/historicalData/parquet/live-3/1771419600000-1771419650000.parquet +0 -0
  50. package/plugin-config-data/kip/historicalData/parquet/live-3/1772344584268-1772344584268.parquet +0 -0
  51. package/plugin-config-data/kip/historicalData/parquet/live-4/1771408800000-1771408890000.parquet +0 -0
  52. package/plugin-config-data/kip/historicalData/parquet/live-4/1771412400000-1771412490000.parquet +0 -0
  53. package/plugin-config-data/kip/historicalData/parquet/live-4/1771419600000-1771419650000.parquet +0 -0
  54. package/plugin-config-data/kip/historicalData/parquet/live-5/1771412400000-1771412490000.parquet +0 -0
  55. package/plugin-config-data/kip/historicalData/parquet/live-5/1771419600000-1771419650000.parquet +0 -0
  56. package/plugin-config-data/kip/historicalData/parquet/live-6/1771419600000-1771419650000.parquet +0 -0
  57. package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1771408800000-1771408890000.parquet +0 -0
  58. package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1771412400000-1771412490000.parquet +0 -0
  59. package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1771419600000-1771419650000.parquet +0 -0
  60. package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1772344584191-1772344584191.parquet +0 -0
  61. package/plugin-config-data/kip/historicalData/parquet/live-prefixed-1/1772344584268-1772344584268.parquet +0 -0
  62. package/tools/schematics/collection.json +0 -9
  63. package/tools/schematics/create-host2-widget/files/readme/README.md.template +0 -109
  64. package/tools/schematics/create-host2-widget/files/spec/widget-__name@dasherize__.component.spec.ts +0 -38
  65. package/tools/schematics/create-host2-widget/files/widget/widget-__name@dasherize__.component.html +0 -6
  66. package/tools/schematics/create-host2-widget/files/widget/widget-__name@dasherize__.component.scss +0 -5
  67. package/tools/schematics/create-host2-widget/files/widget/widget-__name@dasherize__.component.ts.template +0 -94
  68. package/tools/schematics/create-host2-widget/index.js +0 -138
  69. package/tools/schematics/create-host2-widget/schema.json +0 -89
  70. package/tools/schematics/create-host2-widget/test/create-host2-widget.spec.ts +0 -70
  71. package/tools/schematics/create-host2-widget/utils/formatting.js +0 -119
package/plugin/index.js CHANGED
@@ -34,10 +34,12 @@ var __importStar = (this && this.__importStar) || (function () {
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
36
  const server_api_1 = require("@signalk/server-api");
37
+ const module_1 = require("module");
37
38
  const openapi = __importStar(require("./openApi.json"));
38
39
  const history_series_service_1 = require("./history-series.service");
39
40
  const duckdb_parquet_storage_service_1 = require("./duckdb-parquet-storage.service");
40
41
  const start = (server) => {
42
+ const packageRequire = (0, module_1.createRequire)(__filename);
41
43
  const mutableOpenApi = JSON.parse(JSON.stringify(openapi.default ?? openapi));
42
44
  const API_PATHS = {
43
45
  DISPLAYS: `/displays`,
@@ -84,6 +86,23 @@ const start = (server) => {
84
86
  let historySeriesServiceEnabled = true;
85
87
  let registerAsHistoryApiProvider = true;
86
88
  let historyApiProviderRegistered = false;
89
+ function resolveDependencyIdentity(dependencyName) {
90
+ try {
91
+ const pkg = packageRequire(`${dependencyName}/package.json`);
92
+ const name = typeof pkg.name === 'string' && pkg.name.trim() ? pkg.name.trim() : dependencyName;
93
+ const version = typeof pkg.version === 'string' && pkg.version.trim() ? pkg.version.trim() : 'unknown';
94
+ return `${name}@${version}`;
95
+ }
96
+ catch {
97
+ return `${dependencyName}@unavailable`;
98
+ }
99
+ }
100
+ function logRuntimeDependencyVersions() {
101
+ const nodeIdentity = `node@${process.version}`;
102
+ const duckDbNodeIdentity = resolveDependencyIdentity('@duckdb/node-api');
103
+ const parquetIdentity = resolveDependencyIdentity('@dsnp/parquetjs');
104
+ server.debug(`[KIP][RUNTIME] ${nodeIdentity} duckdb=${duckDbNodeIdentity} parquet=${parquetIdentity}`);
105
+ }
87
106
  function resolveHistoryModeConfig(settings) {
88
107
  const root = (settings && typeof settings === 'object' ? settings : {});
89
108
  const historySeriesServiceEnabledSetting = typeof root.historySeriesServiceEnabled === 'boolean'
@@ -102,12 +121,12 @@ const start = (server) => {
102
121
  const tail = suffix ? `.${suffix}` : '';
103
122
  const want = `displays.${displayId}${tail}`;
104
123
  const full = server.getSelfPath(want);
105
- server.debug(`getDisplaySelfPath: displayId: ${displayId}, suffix: ${suffix}, want=${want}, fullPath=${JSON.stringify(full)}`);
124
+ server.debug(`[KIP][SELF_PATH] displayId=${displayId} suffix=${String(suffix ?? '')} requested=${want} resolved=${JSON.stringify(full)}`);
106
125
  return typeof full === 'object' && full !== null ? full : undefined;
107
126
  }
108
127
  function getAvailableDisplays() {
109
128
  const fullPath = server.getSelfPath('displays');
110
- server.debug(`getAvailableDisplays: fullPath=${JSON.stringify(fullPath)}`);
129
+ server.debug(`[KIP][DISPLAYS] resolved=${JSON.stringify(fullPath)}`);
111
130
  return typeof fullPath === 'object' && fullPath !== null ? fullPath : undefined;
112
131
  }
113
132
  function sendOk(res, body) {
@@ -212,7 +231,7 @@ const start = (server) => {
212
231
  }
213
232
  function applyDisplayWrite(displayId, suffix, value) {
214
233
  const path = suffix ? `displays.${displayId}.${suffix}` : `displays.${displayId}`;
215
- server.debug(`[WRITE TRACE] applyDisplayWrite path=${path} value=${JSON.stringify(value)}`);
234
+ server.debug(`[KIP][WRITE] applyDisplayWrite path=${path} value=${JSON.stringify(value)}`);
216
235
  try {
217
236
  server.handleMessage(plugin.id, {
218
237
  updates: [
@@ -226,7 +245,7 @@ const start = (server) => {
226
245
  }
227
246
  ]
228
247
  }, server_api_1.SKVersion.v1);
229
- server.debug(`[WRITE TRACE] handleMessage success path=${path}`);
248
+ server.debug(`[KIP][WRITE] handleMessage success path=${path}`);
230
249
  return completed(200);
231
250
  }
232
251
  catch (error) {
@@ -236,7 +255,7 @@ const start = (server) => {
236
255
  }
237
256
  }
238
257
  function handleSetDisplay(value) {
239
- server.debug(`[COMMAND TRACE] handleSetDisplay payload=${JSON.stringify(value)}`);
258
+ server.debug(`[KIP][COMMAND] handleSetDisplay payload=${JSON.stringify(value)}`);
240
259
  const command = value;
241
260
  if (!command || typeof command !== 'object') {
242
261
  return completed(400, 'Command payload is required');
@@ -251,7 +270,7 @@ const start = (server) => {
251
270
  return applyDisplayWrite(command.displayId, null, displayValue);
252
271
  }
253
272
  function handleScreenWrite(value, suffix) {
254
- server.debug(`[COMMAND TRACE] handleScreenWrite suffix=${suffix} payload=${JSON.stringify(value)}`);
273
+ server.debug(`[KIP][COMMAND] handleScreenWrite suffix=${suffix} payload=${JSON.stringify(value)}`);
255
274
  const command = value;
256
275
  if (!command || typeof command !== 'object') {
257
276
  return completed(400, 'Command payload is required');
@@ -266,7 +285,7 @@ const start = (server) => {
266
285
  return applyDisplayWrite(command.displayId, suffix, screenIdxValue);
267
286
  }
268
287
  function sendActionAsRest(res, result) {
269
- server.debug(`[REST TRACE] sendActionAsRest statusCode=${result.statusCode} message=${result.message ?? ''}`);
288
+ server.debug(`[KIP][REST] sendActionAsRest statusCode=${result.statusCode} message=${result.message ?? ''}`);
270
289
  if (result.statusCode === 200) {
271
290
  return res.status(200).json({ state: 'SUCCESS', statusCode: 200 });
272
291
  }
@@ -425,7 +444,7 @@ const start = (server) => {
425
444
  function registerHistoryProvider() {
426
445
  historyApiProviderRegistered = false;
427
446
  if (!isHistoryApiProviderEnabled()) {
428
- server.debug('[HISTORY PROVIDER] Registration disabled by plugin configuration');
447
+ server.debug('[KIP][HISTORY_PROVIDER] registration skipped reason=config-disabled');
429
448
  return;
430
449
  }
431
450
  const host = server;
@@ -459,10 +478,10 @@ const start = (server) => {
459
478
  if (typeof registry.unregisterHistoryApiProvider === 'function') {
460
479
  historyApiRegistry = { unregisterHistoryApiProvider: registry.unregisterHistoryApiProvider.bind(registry) };
461
480
  }
462
- server.debug('[HISTORY PROVIDER] Registered KIP as History API provider');
481
+ server.debug('[KIP][HISTORY_PROVIDER] registration success provider=kip');
463
482
  return;
464
483
  }
465
- server.debug('[HISTORY PROVIDER] Registration requested but no compatible registration API was found on server host');
484
+ server.debug('[KIP][HISTORY_PROVIDER] registration skipped reason=api-unavailable');
466
485
  }
467
486
  function rebuildSeriesCaptureSubscriptions() {
468
487
  stopSeriesCapture();
@@ -544,7 +563,7 @@ const start = (server) => {
544
563
  void storageService.flush()
545
564
  .then(result => {
546
565
  if (result.inserted > 0 || result.exported > 0) {
547
- server.debug(`[SERIES STORAGE] flushed inserted=${result.inserted} exported=${result.exported}`);
566
+ server.debug(`[KIP][STORAGE] flush inserted=${result.inserted} exported=${result.exported}`);
548
567
  }
549
568
  })
550
569
  .catch(error => {
@@ -558,7 +577,8 @@ const start = (server) => {
558
577
  name: 'KIP',
559
578
  description: 'KIP server plugin',
560
579
  start: (settings) => {
561
- server.debug(`Starting plugin with settings: ${JSON.stringify(settings)}`);
580
+ server.debug('[KIP][LIFECYCLE] start');
581
+ logRuntimeDependencyVersions();
562
582
  const modeConfig = resolveHistoryModeConfig(settings);
563
583
  historySeriesServiceEnabled = modeConfig.historySeriesServiceEnabled;
564
584
  registerAsHistoryApiProvider = modeConfig.registerAsHistoryApiProvider;
@@ -567,14 +587,14 @@ const start = (server) => {
567
587
  debug: (msg) => server.debug(msg),
568
588
  error: (msg) => server.error(msg)
569
589
  });
570
- const storageConfig = storageService.configure(settings);
571
- server.debug(`[SERIES STORAGE] engine=${storageConfig.engine} db=${storageConfig.databaseFile} parquetDir=${storageConfig.parquetDirectory} flushMs=${storageConfig.flushIntervalMs}`);
590
+ const storageConfig = storageService.configure();
591
+ server.debug(`[KIP][STORAGE] config engine=${storageConfig.engine} db=${storageConfig.databaseFile} parquetDir=${storageConfig.parquetDirectory} flushMs=${storageConfig.flushIntervalMs}`);
572
592
  historySeries.setSampleSink(sample => {
573
593
  storageService.enqueueSample(sample);
574
594
  });
575
595
  duckDbInitializationPromise = storageService.initialize();
576
596
  void duckDbInitializationPromise.then((ready) => {
577
- server.debug(`[SERIES STORAGE] duckdbReady=${ready}`);
597
+ server.debug(`[KIP][STORAGE] duckdbReady=${ready}`);
578
598
  if (ready && storageService.isDuckDbParquetEnabled()) {
579
599
  if (isHistorySeriesServiceEnabled()) {
580
600
  void storageService.getSeriesDefinitions()
@@ -624,12 +644,12 @@ const start = (server) => {
624
644
  void storageService.pruneExpiredSamples(Date.now(), lifecycleToken)
625
645
  .then(removedPersistedRows => {
626
646
  if (removedPersistedRows > 0) {
627
- server.debug(`[SERIES RETENTION] duckdbPrune removedRows=${removedPersistedRows}`);
647
+ server.debug(`[KIP][RETENTION] pruneExpired removedRows=${removedPersistedRows}`);
628
648
  }
629
649
  return storageService.pruneOrphanedSamples(lifecycleToken)
630
650
  .then(removedOrphanRows => {
631
651
  if (removedOrphanRows > 0) {
632
- server.debug(`[SERIES RETENTION] duckdbOrphanPrune removedRows=${removedOrphanRows}`);
652
+ server.debug(`[KIP][RETENTION] pruneOrphaned removedRows=${removedOrphanRows}`);
633
653
  }
634
654
  });
635
655
  })
@@ -645,21 +665,21 @@ const start = (server) => {
645
665
  retentionSweepTimer.unref?.();
646
666
  rebuildSeriesCaptureSubscriptions();
647
667
  if (server.registerPutHandler) {
648
- server.debug(`[COMMAND TRACE] Registering PUT handlers under context=${PUT_CONTEXT}`);
668
+ server.debug(`[KIP][COMMAND] registerPutHandlers context=${PUT_CONTEXT}`);
649
669
  server.registerPutHandler(PUT_CONTEXT, COMMAND_PATHS.SET_DISPLAY, (context, path, value) => {
650
- server.debug(`[COMMAND TRACE] PUT handler hit path=${String(path)} context=${String(context)} command=${COMMAND_PATHS.SET_DISPLAY}`);
670
+ server.debug(`[KIP][COMMAND] putHandlerHit command=${COMMAND_PATHS.SET_DISPLAY} path=${String(path)} context=${String(context)}`);
651
671
  void context;
652
672
  void path;
653
673
  return handleSetDisplay(value);
654
674
  }, plugin.id);
655
675
  server.registerPutHandler(PUT_CONTEXT, COMMAND_PATHS.SET_SCREEN_INDEX, (context, path, value) => {
656
- server.debug(`[COMMAND TRACE] PUT handler hit path=${String(path)} context=${String(context)} command=${COMMAND_PATHS.SET_SCREEN_INDEX}`);
676
+ server.debug(`[KIP][COMMAND] putHandlerHit command=${COMMAND_PATHS.SET_SCREEN_INDEX} path=${String(path)} context=${String(context)}`);
657
677
  void context;
658
678
  void path;
659
679
  return handleScreenWrite(value, 'screenIndex');
660
680
  }, plugin.id);
661
681
  server.registerPutHandler(PUT_CONTEXT, COMMAND_PATHS.REQUEST_ACTIVE_SCREEN, (context, path, value) => {
662
- server.debug(`[COMMAND TRACE] PUT handler hit path=${String(path)} context=${String(context)} command=${COMMAND_PATHS.REQUEST_ACTIVE_SCREEN}`);
682
+ server.debug(`[KIP][COMMAND] putHandlerHit command=${COMMAND_PATHS.REQUEST_ACTIVE_SCREEN} path=${String(path)} context=${String(context)}`);
663
683
  void context;
664
684
  void path;
665
685
  return handleScreenWrite(value, 'activeScreen');
@@ -670,7 +690,7 @@ const start = (server) => {
670
690
  server.setPluginStatus(`Starting...`);
671
691
  },
672
692
  stop: () => {
673
- server.debug(`Stopping plugin`);
693
+ server.debug('[KIP][LIFECYCLE] stop');
674
694
  stopSeriesCapture();
675
695
  if (retentionSweepTimer) {
676
696
  clearInterval(retentionSweepTimer);
@@ -688,7 +708,7 @@ const start = (server) => {
688
708
  if (historyApiRegistry) {
689
709
  try {
690
710
  historyApiRegistry.unregisterHistoryApiProvider();
691
- server.debug('[HISTORY PROVIDER] Unregistered KIP History API provider');
711
+ server.debug('[KIP][HISTORY_PROVIDER] unregister success provider=kip');
692
712
  }
693
713
  catch (error) {
694
714
  server.error(`[HISTORY PROVIDER] unregister failed: ${String(error.message || error)}`);
@@ -701,7 +721,7 @@ const start = (server) => {
701
721
  },
702
722
  schema: () => CONFIG_SCHEMA,
703
723
  registerWithRouter(router) {
704
- server.debug(`Registering plugin routes: ${API_PATHS.DISPLAYS}, ${API_PATHS.INSTANCE}, ${API_PATHS.SCREEN_INDEX}, ${API_PATHS.ACTIVATE_SCREEN}`);
724
+ server.debug(`[KIP][ROUTES] register displays=${API_PATHS.DISPLAYS} instance=${API_PATHS.INSTANCE} screenIndex=${API_PATHS.SCREEN_INDEX} activeScreen=${API_PATHS.ACTIVATE_SCREEN}`);
705
725
  // Validate/normalize :displayId where present
706
726
  router.param('displayId', (req, res, next, displayId) => {
707
727
  logAuthTrace(req, 'router.param:displayId:entry');
@@ -736,7 +756,7 @@ const start = (server) => {
736
756
  return sendFail(res, 400, 'Invalid displayId format');
737
757
  }
738
758
  req.displayId = id;
739
- server.debug(`[AUTH TRACE] router.param:displayId:normalized displayId=${id}`);
759
+ server.debug(`[KIP][AUTH] displayIdNormalized value=${id}`);
740
760
  next();
741
761
  }
742
762
  catch {
@@ -746,7 +766,7 @@ const start = (server) => {
746
766
  });
747
767
  router.put(`${API_PATHS.INSTANCE}`, async (req, res) => {
748
768
  logAuthTrace(req, 'route:PUT:INSTANCE:entry');
749
- server.debug(`** PUT ${API_PATHS.INSTANCE}. Params: ${JSON.stringify(req.params)} Body: ${JSON.stringify(req.body)}`);
769
+ server.debug(`[KIP][ROUTE] method=PUT path=${API_PATHS.INSTANCE} params=${JSON.stringify(req.params)} body=${JSON.stringify(req.body)}`);
750
770
  try {
751
771
  const displayId = req.displayId;
752
772
  if (!displayId) {
@@ -764,7 +784,7 @@ const start = (server) => {
764
784
  });
765
785
  router.put(`${API_PATHS.SCREEN_INDEX}`, async (req, res) => {
766
786
  logAuthTrace(req, 'route:PUT:SCREEN_INDEX:entry');
767
- server.debug(`** PUT ${API_PATHS.SCREEN_INDEX}. Params: ${JSON.stringify(req.params)} Body: ${JSON.stringify(req.body)}`);
787
+ server.debug(`[KIP][ROUTE] method=PUT path=${API_PATHS.SCREEN_INDEX} params=${JSON.stringify(req.params)} body=${JSON.stringify(req.body)}`);
768
788
  try {
769
789
  const displayId = req.displayId;
770
790
  if (!displayId) {
@@ -785,7 +805,7 @@ const start = (server) => {
785
805
  });
786
806
  router.put(`${API_PATHS.ACTIVATE_SCREEN}`, async (req, res) => {
787
807
  logAuthTrace(req, 'route:PUT:ACTIVATE_SCREEN:entry');
788
- server.debug(`** PUT ${API_PATHS.ACTIVATE_SCREEN}. Params: ${JSON.stringify(req.params)} Body: ${JSON.stringify(req.body)}`);
808
+ server.debug(`[KIP][ROUTE] method=PUT path=${API_PATHS.ACTIVATE_SCREEN} params=${JSON.stringify(req.params)} body=${JSON.stringify(req.body)}`);
789
809
  try {
790
810
  const displayId = req.displayId;
791
811
  if (!displayId) {
@@ -805,7 +825,7 @@ const start = (server) => {
805
825
  }
806
826
  });
807
827
  router.get(API_PATHS.DISPLAYS, (req, res) => {
808
- server.debug(`*** GET DISPLAY ${API_PATHS.DISPLAYS}. Params: ${JSON.stringify(req.params)}`);
828
+ server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.DISPLAYS} params=${JSON.stringify(req.params)}`);
809
829
  try {
810
830
  const displays = getAvailableDisplays();
811
831
  const items = displays && typeof displays === 'object'
@@ -817,8 +837,8 @@ const start = (server) => {
817
837
  displayName: v?.value?.displayName ?? null
818
838
  }))
819
839
  : [];
820
- server.debug(`getAvailableDisplays returned: ${JSON.stringify(displays)}`);
821
- server.debug(`Found ${items.length} displays: ${JSON.stringify(items)}`);
840
+ server.debug(`[KIP][DISPLAYS] raw=${JSON.stringify(displays)}`);
841
+ server.debug(`[KIP][DISPLAYS] count=${items.length} items=${JSON.stringify(items)}`);
822
842
  return res.status(200).json(items);
823
843
  }
824
844
  catch (error) {
@@ -827,7 +847,7 @@ const start = (server) => {
827
847
  }
828
848
  });
829
849
  router.get(`${API_PATHS.INSTANCE}`, (req, res) => {
830
- server.debug(`*** GET INSTANCE ${API_PATHS.INSTANCE}. Params: ${JSON.stringify(req.params)}`);
850
+ server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.INSTANCE} params=${JSON.stringify(req.params)}`);
831
851
  try {
832
852
  const displayId = req.displayId;
833
853
  if (!displayId) {
@@ -847,7 +867,7 @@ const start = (server) => {
847
867
  }
848
868
  });
849
869
  router.get(`${API_PATHS.SCREEN_INDEX}`, (req, res) => {
850
- server.debug(`*** GET SCREEN_INDEX ${API_PATHS.SCREEN_INDEX}. Params: ${JSON.stringify(req.params)}`);
870
+ server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.SCREEN_INDEX} params=${JSON.stringify(req.params)}`);
851
871
  try {
852
872
  const displayId = req.displayId;
853
873
  if (!displayId) {
@@ -867,7 +887,7 @@ const start = (server) => {
867
887
  }
868
888
  });
869
889
  router.get(`${API_PATHS.ACTIVATE_SCREEN}`, (req, res) => {
870
- server.debug(`*** GET ACTIVATE_SCREEN ${API_PATHS.ACTIVATE_SCREEN}. Params: ${JSON.stringify(req.params)}`);
890
+ server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.ACTIVATE_SCREEN} params=${JSON.stringify(req.params)}`);
871
891
  try {
872
892
  const displayId = req.displayId;
873
893
  if (!displayId) {
@@ -887,7 +907,7 @@ const start = (server) => {
887
907
  }
888
908
  });
889
909
  router.get(API_PATHS.SERIES, async (req, res) => {
890
- server.debug(`*** GET SERIES ${API_PATHS.SERIES}. Params: ${JSON.stringify(req.params)}`);
910
+ server.debug(`[KIP][ROUTE] method=GET path=${API_PATHS.SERIES} params=${JSON.stringify(req.params)}`);
891
911
  try {
892
912
  if (!ensureHistorySeriesServiceEnabledForRequest(res)) {
893
913
  return;
@@ -904,7 +924,7 @@ const start = (server) => {
904
924
  }
905
925
  });
906
926
  router.put(API_PATHS.SERIES_INSTANCE, async (req, res) => {
907
- server.debug(`** PUT ${API_PATHS.SERIES_INSTANCE}. Params: ${JSON.stringify(req.params)} Body: ${JSON.stringify(req.body)}`);
927
+ server.debug(`[KIP][ROUTE] method=PUT path=${API_PATHS.SERIES_INSTANCE} params=${JSON.stringify(req.params)} body=${JSON.stringify(req.body)}`);
908
928
  try {
909
929
  if (!ensureHistorySeriesServiceEnabledForRequest(res)) {
910
930
  return;
@@ -945,7 +965,7 @@ const start = (server) => {
945
965
  }
946
966
  });
947
967
  router.delete(API_PATHS.SERIES_INSTANCE, async (req, res) => {
948
- server.debug(`** DELETE ${API_PATHS.SERIES_INSTANCE}. Params: ${JSON.stringify(req.params)}`);
968
+ server.debug(`[KIP][ROUTE] method=DELETE path=${API_PATHS.SERIES_INSTANCE} params=${JSON.stringify(req.params)}`);
949
969
  try {
950
970
  if (!ensureHistorySeriesServiceEnabledForRequest(res)) {
951
971
  return;
@@ -973,7 +993,7 @@ const start = (server) => {
973
993
  }
974
994
  });
975
995
  router.post(API_PATHS.SERIES_RECONCILE, async (req, res) => {
976
- server.debug(`** POST ${API_PATHS.SERIES_RECONCILE}. Body: ${JSON.stringify(req.body)}`);
996
+ server.debug(`[KIP][ROUTE] method=POST path=${API_PATHS.SERIES_RECONCILE} body=${JSON.stringify(req.body)}`);
977
997
  try {
978
998
  if (!ensureHistorySeriesServiceEnabledForRequest(res)) {
979
999
  return;
@@ -997,7 +1017,7 @@ const start = (server) => {
997
1017
  await storageService.replaceSeriesDefinitions(nextSeries);
998
1018
  const seriesOutsideScope = historySeries.listSeries();
999
1019
  historySeries.reconcileSeries([...seriesOutsideScope, ...nextSeries]);
1000
- server.debug(`[SERIES RECONCILE] created=${result.created} updated=${result.updated} deleted=${result.deleted} total=${result.total}`);
1020
+ server.debug(`[KIP][SERIES_RECONCILE] created=${result.created} updated=${result.updated} deleted=${result.deleted} total=${result.total}`);
1001
1021
  rebuildSeriesCaptureSubscriptions();
1002
1022
  return sendOk(res, result);
1003
1023
  }
@@ -1011,7 +1031,7 @@ const start = (server) => {
1011
1031
  if (router.stack) {
1012
1032
  router.stack.forEach((layer) => {
1013
1033
  if (layer.route && layer.route.path) {
1014
- server.debug(`Registered route: ${layer.route.stack[0].method.toUpperCase()} ${layer.route.path}`);
1034
+ server.debug(`[KIP][ROUTES] registered method=${layer.route.stack[0].method.toUpperCase()} path=${layer.route.path}`);
1015
1035
  }
1016
1036
  });
1017
1037
  }