@beignet/core 0.0.3 → 0.0.5
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 +159 -0
- package/README.md +792 -50
- package/dist/application/index.d.ts +28 -2
- package/dist/application/index.d.ts.map +1 -1
- package/dist/application/index.js +140 -12
- package/dist/application/index.js.map +1 -1
- package/dist/client/client.d.ts +2 -2
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +136 -48
- package/dist/client/client.js.map +1 -1
- package/dist/client/error-messages.d.ts +14 -0
- package/dist/client/error-messages.d.ts.map +1 -0
- package/dist/client/error-messages.js +23 -0
- package/dist/client/error-messages.js.map +1 -0
- package/dist/client/index.d.ts +8 -4
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +6 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/types.d.ts +35 -5
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client-only.d.ts +8 -0
- package/dist/client-only.d.ts.map +1 -0
- package/dist/client-only.js +8 -0
- package/dist/client-only.js.map +1 -0
- package/dist/config/index.d.ts +5 -5
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +2 -2
- package/dist/config/index.js.map +1 -1
- package/dist/contracts/catalog-errors.d.ts +27 -0
- package/dist/contracts/catalog-errors.d.ts.map +1 -0
- package/dist/contracts/catalog-errors.js +69 -0
- package/dist/contracts/catalog-errors.js.map +1 -0
- package/dist/contracts/contract-builder.d.ts +15 -12
- package/dist/contracts/contract-builder.d.ts.map +1 -1
- package/dist/contracts/contract-builder.js +15 -41
- package/dist/contracts/contract-builder.js.map +1 -1
- package/dist/contracts/contract-group.d.ts +11 -8
- package/dist/contracts/contract-group.d.ts.map +1 -1
- package/dist/contracts/contract-group.js +13 -40
- package/dist/contracts/contract-group.js.map +1 -1
- package/dist/contracts/contract-like.d.ts +1 -1
- package/dist/contracts/contract-like.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +13 -9
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +9 -5
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/openapi-meta.d.ts +48 -0
- package/dist/contracts/openapi-meta.d.ts.map +1 -1
- package/dist/contracts/openapi-meta.js +3 -0
- package/dist/contracts/openapi-meta.js.map +1 -1
- package/dist/contracts/path-template.d.ts +1 -1
- package/dist/contracts/path-template.js +2 -2
- package/dist/contracts/path-template.js.map +1 -1
- package/dist/contracts/schema-shape.d.ts +37 -0
- package/dist/contracts/schema-shape.d.ts.map +1 -0
- package/dist/contracts/schema-shape.js +61 -0
- package/dist/contracts/schema-shape.js.map +1 -0
- package/dist/contracts/success-status.d.ts +32 -0
- package/dist/contracts/success-status.d.ts.map +1 -0
- package/dist/contracts/success-status.js +18 -0
- package/dist/contracts/success-status.js.map +1 -0
- package/dist/contracts/types.d.ts +25 -5
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/contracts/types.js.map +1 -1
- package/dist/contracts/utils.d.ts +1 -1
- package/dist/contracts/utils.d.ts.map +1 -1
- package/dist/contracts/utils.js +1 -1
- package/dist/contracts/utils.js.map +1 -1
- package/dist/domain/events.d.ts +1 -1
- package/dist/domain/events.d.ts.map +1 -1
- package/dist/domain/events.js +1 -1
- package/dist/domain/events.js.map +1 -1
- package/dist/domain/index.d.ts +3 -3
- package/dist/domain/index.d.ts.map +1 -1
- package/dist/domain/index.js +3 -3
- package/dist/domain/index.js.map +1 -1
- package/dist/errors/catalog.d.ts +9 -1
- package/dist/errors/catalog.d.ts.map +1 -1
- package/dist/errors/catalog.js +7 -1
- package/dist/errors/catalog.js.map +1 -1
- package/dist/errors/http.d.ts +10 -0
- package/dist/errors/http.d.ts.map +1 -1
- package/dist/errors/http.js +11 -1
- package/dist/errors/http.js.map +1 -1
- package/dist/errors/index.d.ts +4 -4
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +4 -4
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/response.d.ts +4 -1
- package/dist/errors/response.d.ts.map +1 -1
- package/dist/errors/response.js.map +1 -1
- package/dist/events/index.d.ts +10 -12
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +10 -10
- package/dist/events/index.js.map +1 -1
- package/dist/idempotency/index.d.ts +5 -3
- package/dist/idempotency/index.d.ts.map +1 -1
- package/dist/idempotency/index.js.map +1 -1
- package/dist/jobs/index.d.ts +12 -14
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js +13 -13
- package/dist/jobs/index.js.map +1 -1
- package/dist/notifications/index.d.ts +14 -16
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +14 -14
- package/dist/notifications/index.js.map +1 -1
- package/dist/openapi/index.d.ts +8 -3
- package/dist/openapi/index.d.ts.map +1 -1
- package/dist/openapi/index.js +41 -29
- package/dist/openapi/index.js.map +1 -1
- package/dist/openapi/schema-introspector.d.ts +37 -0
- package/dist/openapi/schema-introspector.d.ts.map +1 -1
- package/dist/openapi/schema-introspector.js +23 -17
- package/dist/openapi/schema-introspector.js.map +1 -1
- package/dist/outbox/index.d.ts +15 -6
- package/dist/outbox/index.d.ts.map +1 -1
- package/dist/outbox/index.js +60 -16
- package/dist/outbox/index.js.map +1 -1
- package/dist/ports/audit.d.ts +56 -10
- package/dist/ports/audit.d.ts.map +1 -1
- package/dist/ports/audit.js +71 -3
- package/dist/ports/audit.js.map +1 -1
- package/dist/ports/auth.d.ts +92 -0
- package/dist/ports/auth.d.ts.map +1 -1
- package/dist/ports/auth.js +92 -0
- package/dist/ports/auth.js.map +1 -1
- package/dist/ports/events.d.ts +2 -2
- package/dist/ports/events.d.ts.map +1 -1
- package/dist/ports/index.d.ts +62 -33
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +28 -34
- package/dist/ports/index.js.map +1 -1
- package/dist/ports/policy.d.ts +32 -3
- package/dist/ports/policy.d.ts.map +1 -1
- package/dist/ports/policy.js +13 -2
- package/dist/ports/policy.js.map +1 -1
- package/dist/ports/testing.d.ts +1030 -2
- package/dist/ports/testing.d.ts.map +1 -1
- package/dist/ports/testing.js +1031 -1
- package/dist/ports/testing.js.map +1 -1
- package/dist/ports/unbound.d.ts +21 -0
- package/dist/ports/unbound.d.ts.map +1 -0
- package/dist/ports/unbound.js +57 -0
- package/dist/ports/unbound.js.map +1 -0
- package/dist/ports/unit-of-work.d.ts +1 -1
- package/dist/ports/unit-of-work.d.ts.map +1 -1
- package/dist/ports/unit-of-work.js +1 -1
- package/dist/ports/unit-of-work.js.map +1 -1
- package/dist/providers/index.d.ts +3 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -2
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/instrumentation.d.ts +45 -4
- package/dist/providers/instrumentation.d.ts.map +1 -1
- package/dist/providers/instrumentation.js +25 -6
- package/dist/providers/instrumentation.js.map +1 -1
- package/dist/providers/metadata.d.ts +39 -0
- package/dist/providers/metadata.d.ts.map +1 -0
- package/dist/providers/metadata.js +169 -0
- package/dist/providers/metadata.js.map +1 -0
- package/dist/providers/provider.d.ts +114 -9
- package/dist/providers/provider.d.ts.map +1 -1
- package/dist/providers/provider.js +3 -20
- package/dist/providers/provider.js.map +1 -1
- package/dist/schedules/index.d.ts +94 -13
- package/dist/schedules/index.d.ts.map +1 -1
- package/dist/schedules/index.js +66 -12
- package/dist/schedules/index.js.map +1 -1
- package/dist/server/audit-context.d.ts +29 -0
- package/dist/server/audit-context.d.ts.map +1 -0
- package/dist/server/audit-context.js +44 -0
- package/dist/server/audit-context.js.map +1 -0
- package/dist/server/context.d.ts +141 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +39 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/contract-like.d.ts +1 -1
- package/dist/server/contract-like.d.ts.map +1 -1
- package/dist/server/contract-like.js +1 -1
- package/dist/server/contract-like.js.map +1 -1
- package/dist/server/health.d.ts +2 -2
- package/dist/server/health.d.ts.map +1 -1
- package/dist/server/hooks/auth.d.ts +49 -10
- package/dist/server/hooks/auth.d.ts.map +1 -1
- package/dist/server/hooks/auth.js +77 -37
- package/dist/server/hooks/auth.js.map +1 -1
- package/dist/server/hooks/cors.d.ts +1 -1
- package/dist/server/hooks/cors.d.ts.map +1 -1
- package/dist/server/hooks/errors.d.ts +2 -2
- package/dist/server/hooks/errors.d.ts.map +1 -1
- package/dist/server/hooks/errors.js +2 -2
- package/dist/server/hooks/errors.js.map +1 -1
- package/dist/server/hooks/idempotency.d.ts +78 -0
- package/dist/server/hooks/idempotency.d.ts.map +1 -0
- package/dist/server/hooks/idempotency.js +154 -0
- package/dist/server/hooks/idempotency.js.map +1 -0
- package/dist/server/hooks/index.d.ts +8 -7
- package/dist/server/hooks/index.d.ts.map +1 -1
- package/dist/server/hooks/index.js +6 -5
- package/dist/server/hooks/index.js.map +1 -1
- package/dist/server/hooks/logging.d.ts +2 -2
- package/dist/server/hooks/logging.d.ts.map +1 -1
- package/dist/server/hooks/logging.js +1 -1
- package/dist/server/hooks/logging.js.map +1 -1
- package/dist/server/hooks/rate-limit.d.ts +25 -7
- package/dist/server/hooks/rate-limit.d.ts.map +1 -1
- package/dist/server/hooks/rate-limit.js +47 -12
- package/dist/server/hooks/rate-limit.js.map +1 -1
- package/dist/server/hooks.d.ts +1 -1
- package/dist/server/hooks.d.ts.map +1 -1
- package/dist/server/hooks.js +1 -1
- package/dist/server/hooks.js.map +1 -1
- package/dist/server/http.d.ts +61 -35
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +1 -20
- package/dist/server/http.js.map +1 -1
- package/dist/server/index.d.ts +36 -12
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +24 -8
- package/dist/server/index.js.map +1 -1
- package/dist/server/instrumentation.d.ts +108 -0
- package/dist/server/instrumentation.d.ts.map +1 -0
- package/dist/server/instrumentation.js +297 -0
- package/dist/server/instrumentation.js.map +1 -0
- package/dist/server/openapi.d.ts +3 -3
- package/dist/server/openapi.d.ts.map +1 -1
- package/dist/server/openapi.js +1 -1
- package/dist/server/openapi.js.map +1 -1
- package/dist/server/providers/index.d.ts +3 -3
- package/dist/server/providers/index.d.ts.map +1 -1
- package/dist/server/providers/index.js +3 -3
- package/dist/server/providers/index.js.map +1 -1
- package/dist/server/providers/loadProviderConfig.d.ts +2 -2
- package/dist/server/providers/loadProviderConfig.d.ts.map +1 -1
- package/dist/server/providers/loadProviderConfig.js +2 -2
- package/dist/server/providers/loadProviderConfig.js.map +1 -1
- package/dist/server/request-context.d.ts +67 -0
- package/dist/server/request-context.d.ts.map +1 -0
- package/dist/server/request-context.js +79 -0
- package/dist/server/request-context.js.map +1 -0
- package/dist/server/server-context.d.ts +38 -0
- package/dist/server/server-context.d.ts.map +1 -0
- package/dist/server/server-context.js +38 -0
- package/dist/server/server-context.js.map +1 -0
- package/dist/server/server.d.ts +105 -33
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +434 -118
- package/dist/server/server.js.map +1 -1
- package/dist/server/types.d.ts +2 -2
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +2 -2
- package/dist/server/types.js.map +1 -1
- package/dist/server/use-case-route.d.ts +263 -0
- package/dist/server/use-case-route.d.ts.map +1 -0
- package/dist/server/use-case-route.js +77 -0
- package/dist/server/use-case-route.js.map +1 -0
- package/dist/server-only.d.ts +8 -0
- package/dist/server-only.d.ts.map +1 -0
- package/dist/server-only.js +8 -0
- package/dist/server-only.js.map +1 -0
- package/dist/tasks/index.d.ts +139 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +98 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/testing/index.d.ts +607 -5
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +426 -4
- package/dist/testing/index.js.map +1 -1
- package/dist/tracing/index.d.ts +89 -0
- package/dist/tracing/index.d.ts.map +1 -0
- package/dist/tracing/index.js +101 -0
- package/dist/tracing/index.js.map +1 -0
- package/dist/uploads/client.d.ts +1 -1
- package/dist/uploads/client.d.ts.map +1 -1
- package/dist/uploads/index.d.ts +2 -2
- package/dist/uploads/index.d.ts.map +1 -1
- package/dist/uploads/index.js +1 -1
- package/dist/uploads/index.js.map +1 -1
- package/package.json +24 -2
- package/src/application/index.ts +193 -10
- package/src/client/client.ts +148 -150
- package/src/client/error-messages.ts +35 -0
- package/src/client/index.ts +12 -4
- package/src/client/types.ts +44 -5
- package/src/client-only.ts +7 -0
- package/src/config/index.ts +6 -6
- package/src/contracts/catalog-errors.ts +115 -0
- package/src/contracts/contract-builder.ts +39 -76
- package/src/contracts/contract-group.ts +33 -68
- package/src/contracts/contract-like.ts +1 -1
- package/src/contracts/index.ts +24 -11
- package/src/contracts/openapi-meta.ts +55 -0
- package/src/contracts/path-template.ts +2 -2
- package/src/contracts/schema-shape.ts +75 -0
- package/src/contracts/success-status.ts +68 -0
- package/src/contracts/types.ts +32 -5
- package/src/contracts/utils.ts +5 -2
- package/src/domain/events.ts +6 -2
- package/src/domain/index.ts +3 -3
- package/src/errors/catalog.ts +9 -1
- package/src/errors/http.ts +11 -1
- package/src/errors/index.ts +4 -4
- package/src/errors/response.ts +4 -1
- package/src/events/index.ts +12 -26
- package/src/idempotency/index.ts +5 -3
- package/src/jobs/index.ts +14 -24
- package/src/notifications/index.ts +17 -27
- package/src/openapi/index.ts +73 -38
- package/src/openapi/schema-introspector.ts +68 -17
- package/src/outbox/index.ts +84 -19
- package/src/ports/audit.ts +120 -11
- package/src/ports/auth.ts +132 -0
- package/src/ports/events.ts +2 -2
- package/src/ports/index.ts +104 -35
- package/src/ports/policy.ts +50 -3
- package/src/ports/testing.ts +2220 -33
- package/src/ports/unbound.ts +64 -0
- package/src/ports/unit-of-work.ts +6 -2
- package/src/providers/index.ts +16 -3
- package/src/providers/instrumentation.ts +86 -7
- package/src/providers/metadata.ts +234 -0
- package/src/providers/provider.ts +168 -9
- package/src/schedules/index.ts +173 -23
- package/src/server/audit-context.ts +45 -0
- package/src/server/context.ts +224 -0
- package/src/server/contract-like.ts +1 -1
- package/src/server/health.ts +2 -2
- package/src/server/hooks/auth.ts +141 -51
- package/src/server/hooks/cors.ts +1 -1
- package/src/server/hooks/errors.ts +7 -4
- package/src/server/hooks/idempotency.ts +263 -0
- package/src/server/hooks/index.ts +14 -7
- package/src/server/hooks/logging.ts +3 -3
- package/src/server/hooks/rate-limit.ts +85 -17
- package/src/server/hooks.ts +1 -1
- package/src/server/http.ts +78 -51
- package/src/server/index.ts +62 -12
- package/src/server/instrumentation.ts +470 -0
- package/src/server/openapi.ts +4 -4
- package/src/server/providers/index.ts +6 -3
- package/src/server/providers/loadProviderConfig.ts +4 -4
- package/src/server/request-context.ts +116 -0
- package/src/server/server-context.ts +44 -0
- package/src/server/server.ts +886 -238
- package/src/server/types.ts +2 -2
- package/src/server/use-case-route.ts +430 -0
- package/src/server-only.ts +7 -0
- package/src/tasks/index.ts +275 -0
- package/src/testing/index.ts +1142 -6
- package/src/tracing/index.ts +176 -0
- package/src/uploads/client.ts +1 -1
- package/src/uploads/index.ts +7 -3
- package/dist/ports/mailer.d.ts +0 -6
- package/dist/ports/mailer.d.ts.map +0 -1
- package/dist/ports/mailer.js +0 -2
- package/dist/ports/mailer.js.map +0 -1
- package/dist/ports/schedules.d.ts +0 -9
- package/dist/ports/schedules.d.ts.map +0 -1
- package/dist/ports/schedules.js +0 -2
- package/dist/ports/schedules.js.map +0 -1
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
import { BEIGNET_ERROR_OWNER_HEADER, } from "../contracts/index.js";
|
|
2
|
+
import { redactValue } from "../ports/redaction.js";
|
|
3
|
+
import { resolveProviderInstrumentationPort, } from "../providers/instrumentation.js";
|
|
4
|
+
import { createTraceContext, parseTraceparent, } from "../tracing/index.js";
|
|
5
|
+
import { clearActiveRequestContext, enterActiveRequestContext, readContextActor, readContextTenant, } from "./request-context.js";
|
|
6
|
+
function getContextRequestId(ctx) {
|
|
7
|
+
if (!ctx || typeof ctx !== "object")
|
|
8
|
+
return undefined;
|
|
9
|
+
const requestId = ctx.requestId;
|
|
10
|
+
return typeof requestId === "string" ? requestId : undefined;
|
|
11
|
+
}
|
|
12
|
+
function getContextTraceContext(ctx) {
|
|
13
|
+
if (!ctx || typeof ctx !== "object")
|
|
14
|
+
return undefined;
|
|
15
|
+
const context = ctx;
|
|
16
|
+
if (!context.traceId &&
|
|
17
|
+
!context.spanId &&
|
|
18
|
+
!context.parentSpanId &&
|
|
19
|
+
!context.traceparent) {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
traceId: context.traceId,
|
|
24
|
+
spanId: context.spanId,
|
|
25
|
+
parentSpanId: context.parentSpanId,
|
|
26
|
+
traceparent: context.traceparent,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function getErrorMessage(error) {
|
|
30
|
+
if (error instanceof Error)
|
|
31
|
+
return error.message;
|
|
32
|
+
if (typeof error === "string")
|
|
33
|
+
return error;
|
|
34
|
+
return "Unknown error";
|
|
35
|
+
}
|
|
36
|
+
function getErrorStack(error) {
|
|
37
|
+
return error instanceof Error ? error.stack : undefined;
|
|
38
|
+
}
|
|
39
|
+
function createRequestId() {
|
|
40
|
+
if (typeof crypto !== "undefined" && "randomUUID" in crypto) {
|
|
41
|
+
return crypto.randomUUID();
|
|
42
|
+
}
|
|
43
|
+
return `${Date.now()}-${Math.random().toString(16).slice(2)}`;
|
|
44
|
+
}
|
|
45
|
+
function getPathname(req) {
|
|
46
|
+
try {
|
|
47
|
+
return new URL(req.url).pathname;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return req.url;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function isIgnoredPath(pathname, ignorePaths) {
|
|
54
|
+
return ignorePaths.some((ignorePath) => {
|
|
55
|
+
const normalized = ignorePath.replace(/\/+$/, "");
|
|
56
|
+
return pathname === normalized || pathname.startsWith(`${normalized}/`);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function requestHeadersToRecord(headers) {
|
|
60
|
+
const record = {};
|
|
61
|
+
headers.forEach((value, key) => {
|
|
62
|
+
record[key] = value;
|
|
63
|
+
});
|
|
64
|
+
return record;
|
|
65
|
+
}
|
|
66
|
+
function getResponseHeader(headers, name) {
|
|
67
|
+
if (!headers)
|
|
68
|
+
return undefined;
|
|
69
|
+
const direct = headers[name];
|
|
70
|
+
if (direct !== undefined)
|
|
71
|
+
return direct;
|
|
72
|
+
const normalized = name.toLowerCase();
|
|
73
|
+
const entry = Object.entries(headers).find(([key]) => key.toLowerCase() === normalized);
|
|
74
|
+
return entry?.[1];
|
|
75
|
+
}
|
|
76
|
+
function getResponseOwner(response) {
|
|
77
|
+
return getResponseHeader(response.headers, BEIGNET_ERROR_OWNER_HEADER) ===
|
|
78
|
+
"framework"
|
|
79
|
+
? "framework"
|
|
80
|
+
: "route";
|
|
81
|
+
}
|
|
82
|
+
function isWatcherEnabled(port, name) {
|
|
83
|
+
return port.isWatcherEnabled?.(name) ?? true;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create the server-owned instrumentation runtime for `createServer(...)`.
|
|
87
|
+
*
|
|
88
|
+
* Correlation values (request ID and trace context) are always resolved so
|
|
89
|
+
* context factories receive stable `requestId`/`trace` arguments, even when
|
|
90
|
+
* instrumentation is disabled. Headers and event recording only run when
|
|
91
|
+
* instrumentation is enabled.
|
|
92
|
+
*/
|
|
93
|
+
export function createServerInstrumentation(options) {
|
|
94
|
+
const enabled = options !== false;
|
|
95
|
+
const resolvedOptions = options === false || options === undefined ? {} : options;
|
|
96
|
+
const requestIdHeader = resolvedOptions.requestIdHeader ?? "x-request-id";
|
|
97
|
+
const traceContextHeader = resolvedOptions.traceContextHeader ?? "traceparent";
|
|
98
|
+
const ignorePaths = resolvedOptions.ignorePaths ?? ["/api/devtools"];
|
|
99
|
+
let port;
|
|
100
|
+
const correlations = new WeakMap();
|
|
101
|
+
const prepareRequest = (req) => {
|
|
102
|
+
const cached = correlations.get(req);
|
|
103
|
+
if (cached)
|
|
104
|
+
return cached;
|
|
105
|
+
const headerRequestId = requestIdHeader === false
|
|
106
|
+
? undefined
|
|
107
|
+
: (req.headers.get(requestIdHeader) ?? undefined);
|
|
108
|
+
const headerTraceparent = traceContextHeader === false
|
|
109
|
+
? undefined
|
|
110
|
+
: (req.headers.get(traceContextHeader) ?? undefined);
|
|
111
|
+
const correlation = {
|
|
112
|
+
requestId: headerRequestId ?? createRequestId(),
|
|
113
|
+
trace: createTraceContext({
|
|
114
|
+
traceparent: parseTraceparent(headerTraceparent)?.traceparent,
|
|
115
|
+
}),
|
|
116
|
+
};
|
|
117
|
+
correlations.set(req, correlation);
|
|
118
|
+
return correlation;
|
|
119
|
+
};
|
|
120
|
+
const resolveRequestId = (args) => getContextRequestId(args.ctx) ?? prepareRequest(args.req).requestId;
|
|
121
|
+
const resolveTraceContext = (args) => {
|
|
122
|
+
const contextTrace = getContextTraceContext(args.ctx);
|
|
123
|
+
if (contextTrace) {
|
|
124
|
+
return createTraceContext(contextTrace);
|
|
125
|
+
}
|
|
126
|
+
return prepareRequest(args.req).trace;
|
|
127
|
+
};
|
|
128
|
+
const record = (event) => {
|
|
129
|
+
if (!port)
|
|
130
|
+
return;
|
|
131
|
+
let prepared = redactValue(event);
|
|
132
|
+
if (resolvedOptions.redact) {
|
|
133
|
+
try {
|
|
134
|
+
prepared = resolvedOptions.redact(prepared);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
try {
|
|
138
|
+
port.record({
|
|
139
|
+
type: "error",
|
|
140
|
+
message: "Server instrumentation redactor failed",
|
|
141
|
+
owner: "framework",
|
|
142
|
+
details: {
|
|
143
|
+
message: getErrorMessage(error),
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Instrumentation sinks must never affect responses.
|
|
149
|
+
}
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
port.record(prepared);
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// Instrumentation sinks must never affect responses.
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
const enterAmbientContext = (args) => {
|
|
161
|
+
if (isIgnoredPath(getPathname(args.req), ignorePaths))
|
|
162
|
+
return;
|
|
163
|
+
const trace = resolveTraceContext(args);
|
|
164
|
+
enterActiveRequestContext({
|
|
165
|
+
requestId: resolveRequestId(args),
|
|
166
|
+
traceId: trace.traceId,
|
|
167
|
+
spanId: trace.spanId,
|
|
168
|
+
parentSpanId: trace.parentSpanId,
|
|
169
|
+
traceparent: trace.traceparent,
|
|
170
|
+
actor: readContextActor(args.ctx),
|
|
171
|
+
tenant: readContextTenant(args.ctx),
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
const hook = {
|
|
175
|
+
name: "beignet.instrumentation",
|
|
176
|
+
onRequest: ({ req }) => {
|
|
177
|
+
enterAmbientContext({ req });
|
|
178
|
+
return undefined;
|
|
179
|
+
},
|
|
180
|
+
beforeHandle: ({ req, ctx }) => {
|
|
181
|
+
// Re-enter with context values so app-owned overrides win for ambient
|
|
182
|
+
// correlation inheritance.
|
|
183
|
+
enterAmbientContext({ req, ctx });
|
|
184
|
+
return undefined;
|
|
185
|
+
},
|
|
186
|
+
beforeSend: ({ req, ctx, response }) => {
|
|
187
|
+
if (requestIdHeader === false && traceContextHeader === false) {
|
|
188
|
+
return undefined;
|
|
189
|
+
}
|
|
190
|
+
const requestId = resolveRequestId({ req, ctx });
|
|
191
|
+
const trace = resolveTraceContext({ req, ctx });
|
|
192
|
+
return {
|
|
193
|
+
...response,
|
|
194
|
+
headers: {
|
|
195
|
+
...response.headers,
|
|
196
|
+
...(requestIdHeader === false
|
|
197
|
+
? {}
|
|
198
|
+
: { [requestIdHeader]: requestId }),
|
|
199
|
+
...(traceContextHeader === false
|
|
200
|
+
? {}
|
|
201
|
+
: { [traceContextHeader]: trace.traceparent }),
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
},
|
|
205
|
+
afterSend: ({ req, ctx, contract, response, error, durationMs }) => {
|
|
206
|
+
try {
|
|
207
|
+
if (!port)
|
|
208
|
+
return;
|
|
209
|
+
const path = getPathname(req);
|
|
210
|
+
if (isIgnoredPath(path, ignorePaths))
|
|
211
|
+
return;
|
|
212
|
+
const shouldCaptureRequest = isWatcherEnabled(port, "requests");
|
|
213
|
+
const shouldCaptureError = Boolean(error) && isWatcherEnabled(port, "errors");
|
|
214
|
+
if (!shouldCaptureRequest && !shouldCaptureError)
|
|
215
|
+
return;
|
|
216
|
+
if (resolvedOptions.shouldCapture &&
|
|
217
|
+
!resolvedOptions.shouldCapture({
|
|
218
|
+
req,
|
|
219
|
+
ctx: ctx,
|
|
220
|
+
contract,
|
|
221
|
+
response,
|
|
222
|
+
error,
|
|
223
|
+
})) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
const requestId = resolveRequestId({ req, ctx });
|
|
227
|
+
const trace = resolveTraceContext({ req, ctx });
|
|
228
|
+
const responseOwner = getResponseOwner(response);
|
|
229
|
+
if (shouldCaptureRequest) {
|
|
230
|
+
record({
|
|
231
|
+
type: "request",
|
|
232
|
+
requestId,
|
|
233
|
+
traceId: trace.traceId,
|
|
234
|
+
spanId: trace.spanId,
|
|
235
|
+
parentSpanId: trace.parentSpanId,
|
|
236
|
+
traceparent: trace.traceparent,
|
|
237
|
+
method: req.method,
|
|
238
|
+
path,
|
|
239
|
+
contractName: contract.name,
|
|
240
|
+
responseOwner,
|
|
241
|
+
status: response.status,
|
|
242
|
+
durationMs,
|
|
243
|
+
details: {
|
|
244
|
+
headers: requestHeadersToRecord(req.headers),
|
|
245
|
+
route: {
|
|
246
|
+
contractName: contract.name,
|
|
247
|
+
method: req.method,
|
|
248
|
+
path,
|
|
249
|
+
},
|
|
250
|
+
response: {
|
|
251
|
+
owner: responseOwner,
|
|
252
|
+
status: response.status,
|
|
253
|
+
},
|
|
254
|
+
hookPhases: [
|
|
255
|
+
"onRequest",
|
|
256
|
+
"beforeHandle",
|
|
257
|
+
"beforeSend",
|
|
258
|
+
"afterSend",
|
|
259
|
+
],
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
if (error && shouldCaptureError) {
|
|
264
|
+
record({
|
|
265
|
+
type: "error",
|
|
266
|
+
requestId,
|
|
267
|
+
traceId: trace.traceId,
|
|
268
|
+
spanId: trace.spanId,
|
|
269
|
+
parentSpanId: trace.parentSpanId,
|
|
270
|
+
traceparent: trace.traceparent,
|
|
271
|
+
message: getErrorMessage(error),
|
|
272
|
+
stack: getErrorStack(error),
|
|
273
|
+
contractName: contract.name,
|
|
274
|
+
owner: responseOwner === "framework" ? "framework" : "route",
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
finally {
|
|
279
|
+
clearActiveRequestContext();
|
|
280
|
+
}
|
|
281
|
+
},
|
|
282
|
+
};
|
|
283
|
+
return {
|
|
284
|
+
attachPorts(ports) {
|
|
285
|
+
if (!enabled)
|
|
286
|
+
return;
|
|
287
|
+
port = resolveProviderInstrumentationPort(ports);
|
|
288
|
+
},
|
|
289
|
+
prepareRequest,
|
|
290
|
+
createServiceCorrelation: () => ({
|
|
291
|
+
requestId: createRequestId(),
|
|
292
|
+
trace: createTraceContext(),
|
|
293
|
+
}),
|
|
294
|
+
hook: enabled ? hook : undefined,
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/server/instrumentation.ts"],"names":[],"mappings":"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"}
|
package/dist/server/openapi.d.ts
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* OpenAPI generation handler
|
|
3
3
|
* OpenAPI helpers for the Beignet server runtime.
|
|
4
4
|
*/
|
|
5
|
-
import type { HttpContractConfig } from "../contracts";
|
|
6
|
-
import type { AppEnvironment } from "./health";
|
|
7
|
-
import type { HttpRequestLike, HttpResponseLike } from "./types";
|
|
5
|
+
import type { HttpContractConfig } from "../contracts/index.js";
|
|
6
|
+
import type { AppEnvironment } from "./health.js";
|
|
7
|
+
import type { HttpRequestLike, HttpResponseLike } from "./types.js";
|
|
8
8
|
/**
|
|
9
9
|
* OpenAPI route handler configuration.
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/server/openapi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../src/server/openapi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,kBAAkB,EAAE,EACxC,aAAa,EAAE,aAAa,GAAG,SAAS,EACxC,IAAI,EAAE,cAAc,GACnB,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAkCrD"}
|
package/dist/server/openapi.js
CHANGED
|
@@ -16,7 +16,7 @@ export function createOpenAPIHandler(contracts, openapiConfig, _env) {
|
|
|
16
16
|
if (!cachedSpec) {
|
|
17
17
|
try {
|
|
18
18
|
// Dynamic import to avoid hard dependency
|
|
19
|
-
const { contractsToOpenAPI } = await import("../openapi");
|
|
19
|
+
const { contractsToOpenAPI } = await import("../openapi/index.js");
|
|
20
20
|
cachedSpec = contractsToOpenAPI(contracts, {
|
|
21
21
|
title: openapiConfig?.title ?? "Beignet API",
|
|
22
22
|
version: openapiConfig?.version ?? "1.0.0",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/server/openapi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAwC,EACxC,aAAwC,EACxC,IAAoB;IAEpB,gDAAgD;IAChD,IAAI,UAAU,GAAkB,IAAI,CAAC;IAErC,OAAO,KAAK,EAAE,IAAqB,EAA6B,EAAE;QAChE,8BAA8B;QAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../src/server/openapi.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAwC,EACxC,aAAwC,EACxC,IAAoB;IAEpB,gDAAgD;IAChD,IAAI,UAAU,GAAkB,IAAI,CAAC;IAErC,OAAO,KAAK,EAAE,IAAqB,EAA6B,EAAE;QAChE,8BAA8B;QAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,0CAA0C;gBAC1C,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;gBACnE,UAAU,GAAG,kBAAkB,CAAC,SAAS,EAAE;oBACzC,KAAK,EAAE,aAAa,EAAE,KAAK,IAAI,aAAa;oBAC5C,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,OAAO;oBAC1C,WAAW,EAAE,aAAa,EAAE,WAAW;iBACxC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,4BAA4B;gBAC5B,OAAO;oBACL,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE;wBACJ,KAAK,EAAE,2BAA2B;wBAClC,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;qBAClE;oBACD,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,MAAM,EAAE,GAAG;YACX,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ConfigValidationError, readEnv } from "../../config";
|
|
2
|
-
export { SchemaValidationError } from "../../errors";
|
|
3
|
-
export { loadProviderConfig, parseStandardSchema } from "./loadProviderConfig";
|
|
1
|
+
export { ConfigValidationError, readEnv } from "../../config/index.js";
|
|
2
|
+
export { SchemaValidationError } from "../../errors/index.js";
|
|
3
|
+
export { loadProviderConfig, parseStandardSchema, } from "./loadProviderConfig.js";
|
|
4
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { ConfigValidationError, readEnv } from "../../config";
|
|
2
|
-
export { SchemaValidationError } from "../../errors";
|
|
3
|
-
export { loadProviderConfig, parseStandardSchema } from "./loadProviderConfig";
|
|
1
|
+
export { ConfigValidationError, readEnv } from "../../config/index.js";
|
|
2
|
+
export { SchemaValidationError } from "../../errors/index.js";
|
|
3
|
+
export { loadProviderConfig, parseStandardSchema, } from "./loadProviderConfig.js";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
-
import type { AnyPorts } from "../../ports";
|
|
3
|
-
import type { ServiceProvider } from "../../providers";
|
|
2
|
+
import type { AnyPorts } from "../../ports/index.js";
|
|
3
|
+
import type { ServiceProvider } from "../../providers/index.js";
|
|
4
4
|
declare function parseStandardSchema<Schema extends StandardSchemaV1<unknown, unknown>>(schema: Schema, input: unknown): Promise<StandardSchemaV1.InferOutput<Schema>>;
|
|
5
5
|
/**
|
|
6
6
|
* Load and validate config for a provider.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadProviderConfig.d.ts","sourceRoot":"","sources":["../../../src/server/providers/loadProviderConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAO9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"loadProviderConfig.d.ts","sourceRoot":"","sources":["../../../src/server/providers/loadProviderConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAO9D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAOhE,iBAAe,mBAAmB,CAChC,MAAM,SAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAEjD,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAU/C;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,SAAS,QAAQ,EACtB,MAAM,SAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,EAEjD,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,EACxC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,CA8B3D;AAED;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ConfigValidationError, parseStandardSchemaAsync, readEnv, } from "../../config";
|
|
2
|
-
import { SchemaValidationError } from "../../errors";
|
|
1
|
+
import { ConfigValidationError, parseStandardSchemaAsync, readEnv, } from "../../config/index.js";
|
|
2
|
+
import { SchemaValidationError } from "../../errors/index.js";
|
|
3
3
|
async function parseStandardSchema(schema, input) {
|
|
4
4
|
try {
|
|
5
5
|
return await parseStandardSchemaAsync(schema, input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadProviderConfig.js","sourceRoot":"","sources":["../../../src/server/providers/loadProviderConfig.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,GACR,MAAM,
|
|
1
|
+
{"version":3,"file":"loadProviderConfig.js","sourceRoot":"","sources":["../../../src/server/providers/loadProviderConfig.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,OAAO,GACR,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAS9D,KAAK,UAAU,mBAAmB,CAGhC,MAAc,EACd,KAAc;IAEd,IAAI,CAAC;QACH,OAAO,MAAM,wBAAwB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;YAC3C,MAAM,IAAI,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAItC,QAAwC,EACxC,GAAuC,EACvC,SAAkC;IAElC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAA+C,CAAC;IAC3E,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IAEjC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,WAAW;QACvB,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1B,CAAC,CAAC,SAAS;YACT,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;YACrC,CAAC,CAAC,EAAE,CAAC;IAET,IAAI,CAAC;QACH,OAAO,MAAM,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,eAAe,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5D,MAAM,KAAK,GAAG,SAAS;YACrB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CACvD;YACH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,GAAG,SAAS;YACpB,CAAC,CAAC,KAAK,CAAC,MAAM;gBACZ,CAAC,CAAC,mCAAmC,SAAS,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACtE,CAAC,CAAC,sCAAsC,SAAS,GAAG;YACtD,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,CAAC,IAAI,IAAI,MAAM,KAAM,KAAe,CAAC,OAAO,GAAG,IAAI,EAAE,CACrG,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ActivityActor, ActivityTenant } from "../ports/audit.js";
|
|
2
|
+
/**
|
|
3
|
+
* Ambient correlation values for the request currently being handled.
|
|
4
|
+
*
|
|
5
|
+
* The server enters this context before user hooks run so instrumentation
|
|
6
|
+
* sinks can correlate events recorded anywhere in the request lifecycle.
|
|
7
|
+
* Identity values (`actor`, `tenant`) are refreshed by the server whenever
|
|
8
|
+
* hooks finalize a new context, so wrappers such as `createAmbientAuditLog`
|
|
9
|
+
* observe the elevated identity at record time.
|
|
10
|
+
*/
|
|
11
|
+
export interface ActiveRequestContext {
|
|
12
|
+
requestId?: string;
|
|
13
|
+
traceId?: string;
|
|
14
|
+
spanId?: string;
|
|
15
|
+
parentSpanId?: string;
|
|
16
|
+
traceparent?: string;
|
|
17
|
+
/**
|
|
18
|
+
* Actor for the current request or service execution, when known.
|
|
19
|
+
*/
|
|
20
|
+
actor?: ActivityActor;
|
|
21
|
+
/**
|
|
22
|
+
* Tenant scope for the current request or service execution, when known.
|
|
23
|
+
*/
|
|
24
|
+
tenant?: ActivityTenant;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Enter the ambient request context for the current async execution.
|
|
28
|
+
*/
|
|
29
|
+
export declare function enterActiveRequestContext(context: ActiveRequestContext): void;
|
|
30
|
+
/**
|
|
31
|
+
* Clear the ambient request context for the current async execution.
|
|
32
|
+
*/
|
|
33
|
+
export declare function clearActiveRequestContext(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Read the ambient request context, when one is active.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getActiveRequestContext(): ActiveRequestContext | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Read a normalized actor from an app context object, when present.
|
|
40
|
+
*/
|
|
41
|
+
export declare function readContextActor(ctx: unknown): ActivityActor | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Read a normalized tenant from an app context object, when present.
|
|
44
|
+
*/
|
|
45
|
+
export declare function readContextTenant(ctx: unknown): ActivityTenant | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Update identity fields on the active ambient request context in place.
|
|
48
|
+
*
|
|
49
|
+
* The server calls this after hooks finalize a new request context so the
|
|
50
|
+
* elevated actor/tenant become visible to ambient consumers, including async
|
|
51
|
+
* frames that captured the context object before the update. No-op when no
|
|
52
|
+
* ambient context is active.
|
|
53
|
+
*/
|
|
54
|
+
export declare function setActiveRequestIdentity(identity: {
|
|
55
|
+
actor?: ActivityActor;
|
|
56
|
+
tenant?: ActivityTenant;
|
|
57
|
+
}): void;
|
|
58
|
+
/**
|
|
59
|
+
* Fill missing correlation fields on an event from the ambient request
|
|
60
|
+
* context.
|
|
61
|
+
*/
|
|
62
|
+
export declare function inheritActiveRequestContext<Event extends {
|
|
63
|
+
requestId?: string;
|
|
64
|
+
traceId?: string;
|
|
65
|
+
traceparent?: string;
|
|
66
|
+
}>(event: Event): Event;
|
|
67
|
+
//# sourceMappingURL=request-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/server/request-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;OAEG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAMD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAE7E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,oBAAoB,GAAG,SAAS,CAE1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAOxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAO1E;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE;IACjD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,GAAG,IAAI,CAKP;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,SAAS;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,EACD,KAAK,EAAE,KAAK,GAAG,KAAK,CAUrB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
const activeRequestContext = new AsyncLocalStorage();
|
|
3
|
+
/**
|
|
4
|
+
* Enter the ambient request context for the current async execution.
|
|
5
|
+
*/
|
|
6
|
+
export function enterActiveRequestContext(context) {
|
|
7
|
+
activeRequestContext.enterWith(context);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Clear the ambient request context for the current async execution.
|
|
11
|
+
*/
|
|
12
|
+
export function clearActiveRequestContext() {
|
|
13
|
+
activeRequestContext.enterWith(undefined);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Read the ambient request context, when one is active.
|
|
17
|
+
*/
|
|
18
|
+
export function getActiveRequestContext() {
|
|
19
|
+
return activeRequestContext.getStore();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Read a normalized actor from an app context object, when present.
|
|
23
|
+
*/
|
|
24
|
+
export function readContextActor(ctx) {
|
|
25
|
+
if (!ctx || typeof ctx !== "object")
|
|
26
|
+
return undefined;
|
|
27
|
+
const actor = ctx.actor;
|
|
28
|
+
if (!actor || typeof actor !== "object")
|
|
29
|
+
return undefined;
|
|
30
|
+
return typeof actor.type === "string"
|
|
31
|
+
? actor
|
|
32
|
+
: undefined;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Read a normalized tenant from an app context object, when present.
|
|
36
|
+
*/
|
|
37
|
+
export function readContextTenant(ctx) {
|
|
38
|
+
if (!ctx || typeof ctx !== "object")
|
|
39
|
+
return undefined;
|
|
40
|
+
const tenant = ctx.tenant;
|
|
41
|
+
if (!tenant || typeof tenant !== "object")
|
|
42
|
+
return undefined;
|
|
43
|
+
return typeof tenant.id === "string"
|
|
44
|
+
? tenant
|
|
45
|
+
: undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Update identity fields on the active ambient request context in place.
|
|
49
|
+
*
|
|
50
|
+
* The server calls this after hooks finalize a new request context so the
|
|
51
|
+
* elevated actor/tenant become visible to ambient consumers, including async
|
|
52
|
+
* frames that captured the context object before the update. No-op when no
|
|
53
|
+
* ambient context is active.
|
|
54
|
+
*/
|
|
55
|
+
export function setActiveRequestIdentity(identity) {
|
|
56
|
+
const context = activeRequestContext.getStore();
|
|
57
|
+
if (!context)
|
|
58
|
+
return;
|
|
59
|
+
if (identity.actor)
|
|
60
|
+
context.actor = identity.actor;
|
|
61
|
+
if (identity.tenant)
|
|
62
|
+
context.tenant = identity.tenant;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Fill missing correlation fields on an event from the ambient request
|
|
66
|
+
* context.
|
|
67
|
+
*/
|
|
68
|
+
export function inheritActiveRequestContext(event) {
|
|
69
|
+
const context = getActiveRequestContext();
|
|
70
|
+
if (!context)
|
|
71
|
+
return event;
|
|
72
|
+
return {
|
|
73
|
+
...event,
|
|
74
|
+
requestId: event.requestId ?? context.requestId,
|
|
75
|
+
traceId: event.traceId ?? context.traceId,
|
|
76
|
+
traceparent: event.traceparent ?? context.traceparent,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=request-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../src/server/request-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AA4BrD,MAAM,oBAAoB,GAAG,IAAI,iBAAiB,EAE/C,CAAC;AAEJ;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAA6B;IACrE,oBAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB;IACvC,oBAAoB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,oBAAoB,CAAC,QAAQ,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,KAAK,GAAI,GAA2B,CAAC,KAAK,CAAC;IACjD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,OAAO,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ;QAC3D,CAAC,CAAE,KAAuB;QAC1B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,MAAM,GAAI,GAA4B,CAAC,MAAM,CAAC;IACpD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,OAAQ,MAA2B,CAAC,EAAE,KAAK,QAAQ;QACxD,CAAC,CAAE,MAAyB;QAC5B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,QAGxC;IACC,MAAM,OAAO,GAAG,oBAAoB,CAAC,QAAQ,EAAE,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,IAAI,QAAQ,CAAC,KAAK;QAAE,OAAO,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IACnD,IAAI,QAAQ,CAAC,MAAM;QAAE,OAAO,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAMzC,KAAY;IACZ,MAAM,OAAO,GAAG,uBAAuB,EAAE,CAAC;IAC1C,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAE3B,OAAO;QACL,GAAG,KAAK;QACR,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;QAC/C,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;QACzC,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW;KACtD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { AnyPorts } from "../ports/index.js";
|
|
2
|
+
import type { ServerContextConfig } from "./context.js";
|
|
3
|
+
/**
|
|
4
|
+
* Declare a server context blueprint once and share it between the runtime
|
|
5
|
+
* server and tests.
|
|
6
|
+
*
|
|
7
|
+
* The helper preserves the blueprint exactly as written — `request`,
|
|
8
|
+
* `service`, and `gate` keep their inferred types — so apps can keep the
|
|
9
|
+
* blueprint in a canonical `server/context.ts` file and pass the same value to
|
|
10
|
+
* `createServer(...)` (through an adapter such as `createNextServer` or
|
|
11
|
+
* `createFetchServer`) and to `createTestApp(...)`.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* // server/context.ts
|
|
16
|
+
* export const appContext = defineServerContext<AppContext, AppPorts>()({
|
|
17
|
+
* gate: (ports) => ports.gate,
|
|
18
|
+
* request: async ({ req, ports, requestId, trace }) => ({
|
|
19
|
+
* actor: await resolveActor(req),
|
|
20
|
+
* auth: null,
|
|
21
|
+
* requestId,
|
|
22
|
+
* ...trace,
|
|
23
|
+
* ports,
|
|
24
|
+
* }),
|
|
25
|
+
* service: ({ ports, requestId, trace }) => ({
|
|
26
|
+
* actor: createServiceActor("app-service"),
|
|
27
|
+
* auth: null,
|
|
28
|
+
* requestId,
|
|
29
|
+
* ...trace,
|
|
30
|
+
* ports,
|
|
31
|
+
* }),
|
|
32
|
+
* });
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @returns A function that collects and returns the typed context blueprint.
|
|
36
|
+
*/
|
|
37
|
+
export declare function defineServerContext<Ctx, Ports extends AnyPorts = AnyPorts>(): <ServiceInput = void>(blueprint: ServerContextConfig<Ctx, Ports, ServiceInput>) => ServerContextConfig<Ctx, Ports, ServiceInput>;
|
|
38
|
+
//# sourceMappingURL=server-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-context.d.ts","sourceRoot":"","sources":["../../src/server/server-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,KAAK,SAAS,QAAQ,GAAG,QAAQ,KAAK,CAC7E,YAAY,GAAG,IAAI,EAEnB,SAAS,EAAE,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,KACrD,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC,CAEjD"}
|