@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 +22 -117
- package/dist/index.js.map +1 -1
- package/dist/openapi.json +1 -105
- package/package.json +5 -5
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,
|