@semiont/backend 0.4.18 → 0.4.20

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/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import winston from 'winston';
3
3
  import { z } from 'zod';
4
4
  import jwt from 'jsonwebtoken';
5
- import { email, userId, googleCredential, annotationId, resourceId, userToDid, EventBus, accessToken, jobId, entityType, assembleAnnotation, userToAgent, PERSISTED_EVENT_TYPES, STREAM_COMMAND_RESULT_TYPES } from '@semiont/core';
5
+ import { email, userId, googleCredential, annotationId, resourceId, userToDid, EventBus, accessToken, errField, jobId, entityType, assembleAnnotation, userToAgent, PERSISTED_EVENT_TYPES, STREAM_COMMAND_RESULT_TYPES } from '@semiont/core';
6
6
  import { cors } from 'hono/cors';
7
7
  import { serve } from '@hono/node-server';
8
8
  import { Hono } from 'hono';
@@ -12104,7 +12104,7 @@ var openapi_default = {
12104
12104
  },
12105
12105
  EventMetadata: {
12106
12106
  type: "object",
12107
- description: "Metadata added at persistence time. Part of every StoredEvent.",
12107
+ description: "Metadata added at persistence time. Part of every StoredEvent. Integrity is provided by git at the commit level (when gitSync is enabled), not by in-event metadata fields.",
12108
12108
  properties: {
12109
12109
  sequenceNumber: {
12110
12110
  type: "integer",
@@ -12114,14 +12114,6 @@ var openapi_default = {
12114
12114
  type: "integer",
12115
12115
  description: "Byte offset in the JSONL file"
12116
12116
  },
12117
- prevEventHash: {
12118
- type: "string",
12119
- description: "SHA-256 of the previous event (hash chain)"
12120
- },
12121
- checksum: {
12122
- type: "string",
12123
- description: "SHA-256 of this event (integrity verification)"
12124
- },
12125
12117
  correlationId: {
12126
12118
  type: "string",
12127
12119
  description: "Optional correlation id propagated from a command. Lets clients match command-result events back to the POST that initiated them. Set by EventStore.appendEvent's options when a route handler passes one through."
@@ -12664,49 +12656,6 @@ var openapi_default = {
12664
12656
  "error"
12665
12657
  ]
12666
12658
  },
12667
- EmbeddingComputedPayload: {
12668
- type: "object",
12669
- description: "Payload for embedding:computed domain event",
12670
- properties: {
12671
- annotationId: {
12672
- type: "string"
12673
- },
12674
- chunkIndex: {
12675
- type: "integer"
12676
- },
12677
- chunkText: {
12678
- type: "string"
12679
- },
12680
- embedding: {
12681
- type: "array",
12682
- items: {
12683
- type: "number"
12684
- }
12685
- },
12686
- model: {
12687
- type: "string"
12688
- },
12689
- dimensions: {
12690
- type: "integer"
12691
- }
12692
- },
12693
- required: [
12694
- "chunkIndex",
12695
- "chunkText",
12696
- "embedding",
12697
- "model",
12698
- "dimensions"
12699
- ]
12700
- },
12701
- EmbeddingDeletedPayload: {
12702
- type: "object",
12703
- description: "Payload for embedding:deleted domain event",
12704
- properties: {
12705
- annotationId: {
12706
- type: "string"
12707
- }
12708
- }
12709
- },
12710
12659
  AnnotateHighlightsStreamRequest: {
12711
12660
  type: "object",
12712
12661
  properties: {
@@ -14957,59 +14906,6 @@ var openapi_default = {
14957
14906
  "path"
14958
14907
  ]
14959
14908
  },
14960
- EmbeddingComputeCommand: {
14961
- type: "object",
14962
- description: "Command to store a computed embedding for a resource chunk",
14963
- properties: {
14964
- resourceId: {
14965
- type: "string"
14966
- },
14967
- annotationId: {
14968
- type: "string"
14969
- },
14970
- chunkIndex: {
14971
- type: "integer"
14972
- },
14973
- chunkText: {
14974
- type: "string"
14975
- },
14976
- embedding: {
14977
- type: "array",
14978
- items: {
14979
- type: "number"
14980
- }
14981
- },
14982
- model: {
14983
- type: "string"
14984
- },
14985
- dimensions: {
14986
- type: "integer"
14987
- }
14988
- },
14989
- required: [
14990
- "resourceId",
14991
- "chunkIndex",
14992
- "chunkText",
14993
- "embedding",
14994
- "model",
14995
- "dimensions"
14996
- ]
14997
- },
14998
- EmbeddingDeleteCommand: {
14999
- type: "object",
15000
- description: "Command to delete embeddings for a resource or annotation",
15001
- properties: {
15002
- resourceId: {
15003
- type: "string"
15004
- },
15005
- annotationId: {
15006
- type: "string"
15007
- }
15008
- },
15009
- required: [
15010
- "resourceId"
15011
- ]
15012
- },
15013
14909
  FragmentSelector: {
15014
14910
  type: "object",
15015
14911
  description: "W3C Web Annotation FragmentSelector for media fragment identifiers (RFC 3778 for PDFs)",
@@ -17545,8 +17441,7 @@ exchangeRouter.post("/api/admin/exchange/restore", async (c) => {
17545
17441
  send({
17546
17442
  phase: "complete",
17547
17443
  result: {
17548
- stats: result.stats,
17549
- hashChainValid: result.hashChainValid
17444
+ stats: result.stats
17550
17445
  }
17551
17446
  });
17552
17447
  } catch (err) {
@@ -18791,8 +18686,6 @@ async function buildEnrichedEvent(storedEvent, kb, rId) {
18791
18686
  metadata: {
18792
18687
  sequenceNumber: storedEvent.metadata.sequenceNumber,
18793
18688
  streamPosition: storedEvent.metadata.streamPosition,
18794
- ...storedEvent.metadata.prevEventHash !== void 0 && { prevEventHash: storedEvent.metadata.prevEventHash },
18795
- ...storedEvent.metadata.checksum !== void 0 && { checksum: storedEvent.metadata.checksum },
18796
18689
  ...storedEvent.metadata.correlationId !== void 0 && { correlationId: storedEvent.metadata.correlationId }
18797
18690
  }
18798
18691
  };
@@ -18876,7 +18769,7 @@ function registerGetEventStream(router) {
18876
18769
  logger2.error("Error writing event to SSE stream", {
18877
18770
  streamId,
18878
18771
  eventType: storedEvent.type,
18879
- error
18772
+ error: errField(error)
18880
18773
  });
18881
18774
  cleanup();
18882
18775
  }
@@ -18936,7 +18829,7 @@ function registerGetEventStream(router) {
18936
18829
  logger2.error("Error writing command-result event to SSE stream", {
18937
18830
  streamId,
18938
18831
  eventType,
18939
- error
18832
+ error: errField(error)
18940
18833
  });
18941
18834
  cleanup();
18942
18835
  }
@@ -19451,9 +19344,7 @@ globalEventsRouter.get("/api/events/stream", async (c) => {
19451
19344
  resourceId: storedEvent.resourceId,
19452
19345
  payload: storedEvent.payload,
19453
19346
  metadata: {
19454
- sequenceNumber: storedEvent.metadata.sequenceNumber,
19455
- prevEventHash: storedEvent.metadata.prevEventHash,
19456
- checksum: storedEvent.metadata.checksum
19347
+ sequenceNumber: storedEvent.metadata.sequenceNumber
19457
19348
  }
19458
19349
  };
19459
19350
  await stream.writeSSE({
@@ -19465,7 +19356,7 @@ globalEventsRouter.get("/api/events/stream", async (c) => {
19465
19356
  logger2.error("Error writing event to global SSE stream", {
19466
19357
  streamId,
19467
19358
  eventType: storedEvent.type,
19468
- error
19359
+ error: errField(error)
19469
19360
  });
19470
19361
  cleanup();
19471
19362
  }
@@ -19600,7 +19491,7 @@ function registerAttentionStream(router) {
19600
19491
  id: String(Date.now())
19601
19492
  });
19602
19493
  } catch (error) {
19603
- logger2.error("Error writing beckon signal to attention stream", { error });
19494
+ logger2.error("Error writing beckon signal to attention stream", { error: errField(error) });
19604
19495
  cleanup();
19605
19496
  }
19606
19497
  });
@@ -19795,6 +19686,20 @@ if (!config.services.backend.corsOrigin) {
19795
19686
  var backendService = config.services.backend;
19796
19687
  initializeLogger(config.logLevel);
19797
19688
  var logger = getLogger();
19689
+ {
19690
+ const { monitorEventLoopDelay } = await import('perf_hooks');
19691
+ const h = monitorEventLoopDelay({ resolution: 20 });
19692
+ h.enable();
19693
+ const monitorLogger = logger.child({ component: "event-loop-monitor" });
19694
+ setInterval(() => {
19695
+ const maxMs = Number((h.max / 1e6).toFixed(1));
19696
+ const p99Ms = Number((h.percentile(99) / 1e6).toFixed(1));
19697
+ const meanMs = Number((h.mean / 1e6).toFixed(1));
19698
+ const level = p99Ms > 100 ? "warn" : "info";
19699
+ monitorLogger.log(level, "event-loop delay", { meanMs, p99Ms, maxMs });
19700
+ h.reset();
19701
+ }, 3e4).unref();
19702
+ }
19798
19703
  if (databaseUrlConstructed) {
19799
19704
  logger.info("DATABASE_URL constructed from environment components", {
19800
19705
  host: process.env.DB_HOST,