@beignet/core 0.0.32 → 0.0.33

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 (115) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +344 -19
  3. package/dist/application/index.d.ts.map +1 -1
  4. package/dist/application/index.js +63 -47
  5. package/dist/application/index.js.map +1 -1
  6. package/dist/events/index.d.ts +6 -0
  7. package/dist/events/index.d.ts.map +1 -1
  8. package/dist/events/index.js +20 -10
  9. package/dist/events/index.js.map +1 -1
  10. package/dist/jobs/index.d.ts +415 -4
  11. package/dist/jobs/index.d.ts.map +1 -1
  12. package/dist/jobs/index.js +392 -3
  13. package/dist/jobs/index.js.map +1 -1
  14. package/dist/outbox/index.d.ts +150 -1
  15. package/dist/outbox/index.d.ts.map +1 -1
  16. package/dist/outbox/index.js +170 -1
  17. package/dist/outbox/index.js.map +1 -1
  18. package/dist/ports/index.d.ts +6 -1
  19. package/dist/ports/index.d.ts.map +1 -1
  20. package/dist/ports/index.js +1 -0
  21. package/dist/ports/index.js.map +1 -1
  22. package/dist/providers/instrumentation.d.ts +4 -0
  23. package/dist/providers/instrumentation.d.ts.map +1 -1
  24. package/dist/providers/instrumentation.js.map +1 -1
  25. package/dist/schedules/index.d.ts +8 -7
  26. package/dist/schedules/index.d.ts.map +1 -1
  27. package/dist/schedules/index.js +47 -16
  28. package/dist/schedules/index.js.map +1 -1
  29. package/dist/server/hooks/index.d.ts +1 -0
  30. package/dist/server/hooks/index.d.ts.map +1 -1
  31. package/dist/server/hooks/index.js +1 -0
  32. package/dist/server/hooks/index.js.map +1 -1
  33. package/dist/server/hooks/rate-limit.d.ts +26 -13
  34. package/dist/server/hooks/rate-limit.d.ts.map +1 -1
  35. package/dist/server/hooks/rate-limit.js +28 -34
  36. package/dist/server/hooks/rate-limit.js.map +1 -1
  37. package/dist/server/hooks/security.d.ts +179 -0
  38. package/dist/server/hooks/security.d.ts.map +1 -0
  39. package/dist/server/hooks/security.js +225 -0
  40. package/dist/server/hooks/security.js.map +1 -0
  41. package/dist/server/index.d.ts +8 -0
  42. package/dist/server/index.d.ts.map +1 -1
  43. package/dist/server/index.js +8 -0
  44. package/dist/server/index.js.map +1 -1
  45. package/dist/server/instrumentation.d.ts.map +1 -1
  46. package/dist/server/instrumentation.js +22 -6
  47. package/dist/server/instrumentation.js.map +1 -1
  48. package/dist/server/request-context.d.ts +4 -0
  49. package/dist/server/request-context.d.ts.map +1 -1
  50. package/dist/server/request-context.js +3 -0
  51. package/dist/server/request-context.js.map +1 -1
  52. package/dist/server/runtime-integrity.d.ts +84 -0
  53. package/dist/server/runtime-integrity.d.ts.map +1 -0
  54. package/dist/server/runtime-integrity.js +160 -0
  55. package/dist/server/runtime-integrity.js.map +1 -0
  56. package/dist/server/server.d.ts +10 -0
  57. package/dist/server/server.d.ts.map +1 -1
  58. package/dist/server/server.js +55 -1
  59. package/dist/server/server.js.map +1 -1
  60. package/dist/server/trusted-proxy.d.ts +77 -0
  61. package/dist/server/trusted-proxy.d.ts.map +1 -0
  62. package/dist/server/trusted-proxy.js +129 -0
  63. package/dist/server/trusted-proxy.js.map +1 -0
  64. package/dist/tasks/index.d.ts +6 -7
  65. package/dist/tasks/index.d.ts.map +1 -1
  66. package/dist/tasks/index.js +22 -5
  67. package/dist/tasks/index.js.map +1 -1
  68. package/dist/tenancy/index.d.ts +41 -0
  69. package/dist/tenancy/index.d.ts.map +1 -0
  70. package/dist/tenancy/index.js +34 -0
  71. package/dist/tenancy/index.js.map +1 -0
  72. package/dist/tracing/execution.d.ts +14 -0
  73. package/dist/tracing/execution.d.ts.map +1 -0
  74. package/dist/tracing/execution.js +17 -0
  75. package/dist/tracing/execution.js.map +1 -0
  76. package/dist/tracing/index.d.ts +49 -0
  77. package/dist/tracing/index.d.ts.map +1 -1
  78. package/dist/tracing/index.js +59 -0
  79. package/dist/tracing/index.js.map +1 -1
  80. package/dist/uploads/client.d.ts.map +1 -1
  81. package/dist/uploads/client.js +44 -6
  82. package/dist/uploads/client.js.map +1 -1
  83. package/dist/uploads/index.d.ts +71 -0
  84. package/dist/uploads/index.d.ts.map +1 -1
  85. package/dist/uploads/index.js +344 -15
  86. package/dist/uploads/index.js.map +1 -1
  87. package/dist/webhooks/index.d.ts +55 -4
  88. package/dist/webhooks/index.d.ts.map +1 -1
  89. package/dist/webhooks/index.js +106 -2
  90. package/dist/webhooks/index.js.map +1 -1
  91. package/package.json +5 -1
  92. package/skills/app-architecture/SKILL.md +23 -2
  93. package/src/application/index.ts +88 -56
  94. package/src/events/index.ts +27 -14
  95. package/src/jobs/index.ts +895 -7
  96. package/src/outbox/index.ts +358 -2
  97. package/src/ports/index.ts +17 -0
  98. package/src/providers/instrumentation.ts +4 -0
  99. package/src/schedules/index.ts +60 -26
  100. package/src/server/hooks/index.ts +10 -0
  101. package/src/server/hooks/rate-limit.ts +52 -46
  102. package/src/server/hooks/security.ts +503 -0
  103. package/src/server/index.ts +8 -0
  104. package/src/server/instrumentation.ts +25 -5
  105. package/src/server/request-context.ts +7 -0
  106. package/src/server/runtime-integrity.ts +322 -0
  107. package/src/server/server.ts +86 -1
  108. package/src/server/trusted-proxy.ts +249 -0
  109. package/src/tasks/index.ts +29 -12
  110. package/src/tenancy/index.ts +55 -0
  111. package/src/tracing/execution.ts +37 -0
  112. package/src/tracing/index.ts +137 -0
  113. package/src/uploads/client.ts +65 -6
  114. package/src/uploads/index.ts +539 -14
  115. package/src/webhooks/index.ts +238 -9
@@ -82,10 +82,56 @@ export interface DefineWebhookOptions<Events extends WebhookEventSchemas = Webho
82
82
  /**
83
83
  * Options accepted by `verifyWebhook(...)`.
84
84
  */
85
- export interface VerifyWebhookOptions {
85
+ export interface VerifyWebhookOptions<AllowUnknownEvents extends boolean = boolean> {
86
86
  verifier?: WebhookVerifier;
87
- allowUnknownEvents?: boolean;
87
+ allowUnknownEvents?: AllowUnknownEvents;
88
88
  }
89
+ type InferWebhookVerificationResult<TWebhook extends WebhookDef<string, WebhookEventSchemas>, AllowUnknownEvents extends boolean> = true extends AllowUnknownEvents ? InferWebhookEvent<TWebhook> | WebhookEvent : InferWebhookEvent<TWebhook>;
90
+ /**
91
+ * Timestamp formats accepted by the generic HMAC webhook verifier.
92
+ */
93
+ export type HmacWebhookTimestampFormat = "unix-seconds" | "unix-milliseconds" | "iso8601";
94
+ /**
95
+ * Timestamp source and tolerance for generic HMAC replay protection.
96
+ */
97
+ export type HmacWebhookTimestampOptions = {
98
+ /**
99
+ * Header that carries the provider event timestamp.
100
+ */
101
+ header: string;
102
+ payloadPath?: never;
103
+ /**
104
+ * Timestamp format.
105
+ *
106
+ * @default "unix-seconds"
107
+ */
108
+ format?: HmacWebhookTimestampFormat;
109
+ /**
110
+ * Maximum absolute clock skew between the event timestamp and receipt.
111
+ *
112
+ * @default 300
113
+ */
114
+ toleranceSec?: number;
115
+ } | {
116
+ header?: never;
117
+ /**
118
+ * Dot path used to read the provider event timestamp from the JSON
119
+ * payload.
120
+ */
121
+ payloadPath: string;
122
+ /**
123
+ * Timestamp format.
124
+ *
125
+ * @default "unix-seconds"
126
+ */
127
+ format?: HmacWebhookTimestampFormat;
128
+ /**
129
+ * Maximum absolute clock skew between the event timestamp and receipt.
130
+ *
131
+ * @default 300
132
+ */
133
+ toleranceSec?: number;
134
+ };
89
135
  /**
90
136
  * Options for the in-memory webhook verifier.
91
137
  */
@@ -137,6 +183,10 @@ export interface CreateHmacWebhookVerifierOptions {
137
183
  * @default "type"
138
184
  */
139
185
  eventTypePath?: string;
186
+ /**
187
+ * Optional timestamp source used to reject replayed generic HMAC webhooks.
188
+ */
189
+ timestamp?: HmacWebhookTimestampOptions;
140
190
  }
141
191
  /**
142
192
  * Error thrown for invalid webhook definitions and inputs.
@@ -180,11 +230,11 @@ export declare function defineWebhook<Name extends string, Events extends Webhoo
180
230
  /**
181
231
  * Verify a raw webhook request and validate the matching event payload schema.
182
232
  */
183
- export declare function verifyWebhook<TWebhook extends WebhookDef<string, WebhookEventSchemas>>(webhook: TWebhook, input: VerifyWebhookInput, options?: VerifyWebhookOptions): Promise<InferWebhookEvent<TWebhook> | WebhookEvent>;
233
+ export declare function verifyWebhook<TWebhook extends WebhookDef<string, WebhookEventSchemas>, AllowUnknownEvents extends boolean = false>(webhook: TWebhook, input: VerifyWebhookInput, options?: VerifyWebhookOptions<AllowUnknownEvents>): Promise<InferWebhookVerificationResult<TWebhook, AllowUnknownEvents>>;
184
234
  /**
185
235
  * Validate a verified webhook event against its catalog entry.
186
236
  */
187
- export declare function parseWebhookEvent<TWebhook extends WebhookDef<string, WebhookEventSchemas>>(webhook: TWebhook, event: WebhookEvent, options?: Pick<VerifyWebhookOptions, "allowUnknownEvents">): Promise<InferWebhookEvent<TWebhook> | WebhookEvent>;
237
+ export declare function parseWebhookEvent<TWebhook extends WebhookDef<string, WebhookEventSchemas>, AllowUnknownEvents extends boolean = false>(webhook: TWebhook, event: WebhookEvent, options?: Pick<VerifyWebhookOptions<AllowUnknownEvents>, "allowUnknownEvents">): Promise<InferWebhookVerificationResult<TWebhook, AllowUnknownEvents>>;
188
238
  /**
189
239
  * Create an in-memory verifier for tests.
190
240
  */
@@ -193,4 +243,5 @@ export declare function createMemoryWebhookVerifier(options?: CreateMemoryWebhoo
193
243
  * Create a generic JSON + HMAC verifier.
194
244
  */
195
245
  export declare function createHmacWebhookVerifier(options: CreateHmacWebhookVerifierOptions): WebhookVerifier;
246
+ export {};
196
247
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"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"}
@@ -93,8 +93,9 @@ export async function parseWebhookEvent(webhook, event, options = {}) {
93
93
  validateEvent(webhook, event);
94
94
  const schema = webhook.events[event.type];
95
95
  if (!schema) {
96
- if (options.allowUnknownEvents ?? true)
96
+ if (options.allowUnknownEvents === true) {
97
97
  return event;
98
+ }
98
99
  throw new WebhookVerificationError({
99
100
  message: `Webhook "${webhook.name}" received unknown event type "${event.type}".`,
100
101
  webhookName: webhook.name,
@@ -159,6 +160,7 @@ export function createHmacWebhookVerifier(options) {
159
160
  const algorithm = options.algorithm ?? "SHA-256";
160
161
  const eventIdPath = options.eventIdPath ?? "id";
161
162
  const eventTypePath = options.eventTypePath ?? "type";
163
+ const timestamp = normalizeHmacTimestampOptions(options.timestamp);
162
164
  return {
163
165
  async verify(input) {
164
166
  const signature = input.signature ?? input.headers?.[signatureHeader];
@@ -179,6 +181,12 @@ export function createHmacWebhookVerifier(options) {
179
181
  });
180
182
  }
181
183
  const payload = parseJsonBody(input.rawBody);
184
+ const createdAt = validateHmacTimestamp({
185
+ input,
186
+ payload,
187
+ provider: options.provider,
188
+ timestamp,
189
+ });
182
190
  const id = readStringPath(payload, eventIdPath);
183
191
  const type = readStringPath(payload, eventTypePath);
184
192
  if (!id) {
@@ -199,6 +207,7 @@ export function createHmacWebhookVerifier(options) {
199
207
  id,
200
208
  type,
201
209
  provider: options.provider,
210
+ ...(createdAt ? { createdAt } : {}),
202
211
  payload,
203
212
  raw: payload,
204
213
  };
@@ -277,7 +286,7 @@ function parseJsonBody(rawBody) {
277
286
  });
278
287
  }
279
288
  }
280
- function readStringPath(input, path) {
289
+ function readPath(input, path) {
281
290
  let value = input;
282
291
  for (const segment of path.split(".")) {
283
292
  if (!value || typeof value !== "object" || Array.isArray(value)) {
@@ -285,8 +294,103 @@ function readStringPath(input, path) {
285
294
  }
286
295
  value = value[segment];
287
296
  }
297
+ return value;
298
+ }
299
+ function readStringPath(input, path) {
300
+ const value = readPath(input, path);
288
301
  return typeof value === "string" && value.length > 0 ? value : undefined;
289
302
  }
303
+ function normalizeHmacTimestampOptions(timestamp) {
304
+ if (!timestamp)
305
+ return undefined;
306
+ const format = timestamp.format ?? "unix-seconds";
307
+ if (format !== "unix-seconds" &&
308
+ format !== "unix-milliseconds" &&
309
+ format !== "iso8601") {
310
+ throw new WebhookOptionsError("Webhook HMAC timestamp format must be unix-seconds, unix-milliseconds, or iso8601.");
311
+ }
312
+ const toleranceSec = timestamp.toleranceSec ?? 300;
313
+ if (!Number.isInteger(toleranceSec) || toleranceSec <= 0) {
314
+ throw new WebhookOptionsError("Webhook HMAC timestamp toleranceSec must be a positive integer.");
315
+ }
316
+ if ("header" in timestamp) {
317
+ if (!timestamp.header) {
318
+ throw new WebhookOptionsError("Webhook HMAC timestamp header is required.");
319
+ }
320
+ return {
321
+ source: "header",
322
+ key: normalizeHeaderName(timestamp.header),
323
+ format,
324
+ toleranceSec,
325
+ };
326
+ }
327
+ if (!timestamp.payloadPath) {
328
+ throw new WebhookOptionsError("Webhook HMAC timestamp payloadPath is required.");
329
+ }
330
+ return {
331
+ source: "payload",
332
+ path: timestamp.payloadPath,
333
+ format,
334
+ toleranceSec,
335
+ };
336
+ }
337
+ function validateHmacTimestamp(args) {
338
+ const { timestamp } = args;
339
+ if (!timestamp)
340
+ return undefined;
341
+ const value = timestamp.source === "header"
342
+ ? args.input.headers?.[timestamp.key]
343
+ : readPath(args.payload, timestamp.path);
344
+ if (value === undefined || value === null || value === "") {
345
+ throw new WebhookVerificationError({
346
+ message: timestamp.source === "header"
347
+ ? `Missing ${timestamp.key} header.`
348
+ : `Webhook payload is missing timestamp at "${timestamp.path}".`,
349
+ provider: args.provider,
350
+ code: "missing_timestamp",
351
+ });
352
+ }
353
+ const createdAt = parseHmacTimestampValue(value, timestamp.format, args.provider);
354
+ const receivedAt = args.input.receivedAt ?? new Date();
355
+ const skewMs = Math.abs(receivedAt.getTime() - createdAt.getTime());
356
+ if (skewMs > timestamp.toleranceSec * 1000) {
357
+ throw new WebhookVerificationError({
358
+ message: `Webhook timestamp is outside the ${timestamp.toleranceSec}s tolerance.`,
359
+ provider: args.provider,
360
+ code: "timestamp_outside_tolerance",
361
+ });
362
+ }
363
+ return createdAt;
364
+ }
365
+ function parseHmacTimestampValue(value, format, provider) {
366
+ const fail = () => new WebhookVerificationError({
367
+ message: "Webhook timestamp is invalid.",
368
+ provider,
369
+ code: "invalid_timestamp",
370
+ });
371
+ let millis;
372
+ if (format === "iso8601") {
373
+ if (typeof value !== "string")
374
+ throw fail();
375
+ millis = Date.parse(value);
376
+ }
377
+ else {
378
+ const numeric = typeof value === "number"
379
+ ? value
380
+ : typeof value === "string"
381
+ ? Number(value)
382
+ : Number.NaN;
383
+ if (!Number.isFinite(numeric))
384
+ throw fail();
385
+ millis = format === "unix-seconds" ? numeric * 1000 : numeric;
386
+ }
387
+ if (!Number.isFinite(millis))
388
+ throw fail();
389
+ const date = new Date(millis);
390
+ if (Number.isNaN(date.getTime()))
391
+ throw fail();
392
+ return date;
393
+ }
290
394
  async function hmacHex(algorithm, secret, rawBody) {
291
395
  const key = await crypto.subtle.importKey("raw", new TextEncoder().encode(secret), { name: "HMAC", hash: algorithm ?? "SHA-256" }, false, ["sign"]);
292
396
  const bytes = rawBodyBytes(rawBody);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/webhooks/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beignet/core",
3
- "version": "0.0.32",
3
+ "version": "0.0.33",
4
4
  "type": "module",
5
5
  "description": "Core framework primitives for Beignet",
6
6
  "exports": {
@@ -118,6 +118,10 @@
118
118
  "types": "./dist/tasks/index.d.ts",
119
119
  "default": "./dist/tasks/index.js"
120
120
  },
121
+ "./tenancy": {
122
+ "types": "./dist/tenancy/index.d.ts",
123
+ "default": "./dist/tenancy/index.js"
124
+ },
121
125
  "./testing": {
122
126
  "types": "./dist/testing/index.d.ts",
123
127
  "default": "./dist/testing/index.js"
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: app-architecture
3
- description: "Build Beignet app feature slices with @beignet/core primitives: schemas, contracts, use cases, app errors, ports, policies, context, providers, domain events, listeners, jobs, schedules, tasks, notifications, outbox, mail, uploads, seeds, tests, auth helpers, audit, idempotency, storage, cache, rate limits, flags, entitlements, payments, search, webhooks, and explicit core subpath imports. Use when adding or fixing Beignet application behavior, dependency boundaries, app-facing ports, authorization, workflow primitives, or app-bound lib builders."
3
+ description: "Build Beignet app feature slices with @beignet/core primitives: schemas, contracts, use cases, app errors, ports, policies, TenantScope, context, providers, runtime integrity, domain events, listeners, jobs, schedules, tasks, notifications, outbox, mail, uploads, seeds, tests, auth helpers, audit, idempotency, storage, cache, rate limits, flags, entitlements, payments, search, webhooks, and explicit core subpath imports. Use when adding or fixing Beignet application behavior, dependency boundaries, tenant-owned repository access, app-facing ports, authorization, workflow primitives, or app-bound lib builders."
4
4
  ---
5
5
 
6
6
  # Beignet App Architecture
@@ -56,6 +56,14 @@ generator or deliberate feature change introduces that concern.
56
56
  clients.
57
57
  - UI and feature client modules call server behavior through contracts and a
58
58
  typed client, not by importing use cases.
59
+ - Server-only request context helpers may bridge Server Components to
60
+ Beignet's request-scoped `AppContext`. Keep them outside `client/`, usually
61
+ in `lib/server-context.ts`, and mark them with `@beignet/core/server-only`.
62
+ Layouts may read `ctx.auth`, `ctx.tenant`, and request metadata for redirects
63
+ and shell state; feature data still belongs behind use cases.
64
+ - Server-only React Query prefetch helpers may consume that context for
65
+ hydrated client state. Use them only for direct `{ contract, useCase }` route
66
+ bindings whose use-case output matches the contract success body.
59
67
  - Server, provider, and infra code may import `@beignet/core/server-only`;
60
68
  browser-reachable client helpers may import `@beignet/core/client-only` as
61
69
  lint markers when the app uses them.
@@ -138,6 +146,13 @@ or outbox records must commit together.
138
146
  Do not import provider packages from contracts, use cases, routes, UI, or
139
147
  feature client modules.
140
148
 
149
+ Tenant-owned repository methods should accept `TenantScope` instead of raw
150
+ tenant IDs. Use cases derive it with `requireTenantScope(ctx)` or
151
+ `createTenantScope(...)`; adapters unwrap it with `tenantScopeId(scope)` and
152
+ include that storage ID in read, write, update, and delete predicates.
153
+ Provider-correlation lookups such as webhook customer IDs are not tenant
154
+ authorization by themselves.
155
+
141
156
  ## Workflows
142
157
 
143
158
  Feature-owned workflow definitions belong under the feature:
@@ -165,12 +180,18 @@ for example `createJobs<AppContext>()`, `createListeners<AppContext>()`,
165
180
 
166
181
  Register workflow artifacts explicitly:
167
182
 
168
- - listeners through `registerListeners(...)` in provider or infra wiring
183
+ - listeners in `server/listeners.ts`, then through `registerListeners(...)` in server provider wiring
169
184
  - schedules in `server/schedules.ts`
170
185
  - tasks in `server/tasks.ts`
171
186
  - outbox events and jobs in `server/outbox.ts`
172
187
  - seeds through the app's seed entrypoint, usually `server/seed.ts`
173
188
 
189
+ For apps that opt into runtime boot checks, declare workflow artifacts in
190
+ `server/runtime-integrity.ts` with `defineRuntimeManifest(...)`, compare them
191
+ to the central registries with `defineRuntimeRegistries(...)`, and pass the
192
+ resulting `runtimeIntegrity` check to server startup. This check is pure and
193
+ serverless-safe: it proves registry coverage, not worker deployment health.
194
+
174
195
  Uploads are feature-owned definitions under `features/<feature>/uploads/`,
175
196
  then exposed through an app route with `createUploadRouter(...)` and the
176
197
  platform adapter. Webhooks and payment webhooks are inbound transport concerns:
@@ -5,6 +5,8 @@ import {
5
5
  } from "../providers/instrumentation.js";
6
6
  import {
7
7
  createChildTraceContext,
8
+ resolveTracingPort,
9
+ runWithTracing,
8
10
  type TraceContextInput,
9
11
  } from "../tracing/index.js";
10
12
 
@@ -482,6 +484,7 @@ function getInstrumentationTrace(ctx: unknown): TraceContextInput | undefined {
482
484
  spanId: context.spanId,
483
485
  parentSpanId: context.parentSpanId,
484
486
  traceparent: context.traceparent,
487
+ tracestate: context.tracestate,
485
488
  };
486
489
  }
487
490
 
@@ -517,9 +520,9 @@ function startUseCaseRunInstrumentation(args: {
517
520
  if (!useCasesEnabled && !errorsEnabled) return undefined;
518
521
 
519
522
  const requestId = getInstrumentationRequestId(args.ctx);
520
- const trace = createChildTraceContext(
521
- getInstrumentationTrace(args.ctx) ?? {},
522
- );
523
+ const trace =
524
+ resolveTracingPort(ports)?.current() ??
525
+ createChildTraceContext(getInstrumentationTrace(args.ctx) ?? {});
523
526
 
524
527
  const record = (event: ProviderInstrumentationEventInput) => {
525
528
  try {
@@ -542,6 +545,7 @@ function startUseCaseRunInstrumentation(args: {
542
545
  spanId: trace.spanId,
543
546
  parentSpanId: trace.parentSpanId,
544
547
  traceparent: trace.traceparent,
548
+ tracestate: trace.tracestate,
545
549
  name: args.name,
546
550
  kind: args.kind,
547
551
  phase,
@@ -558,6 +562,7 @@ function startUseCaseRunInstrumentation(args: {
558
562
  spanId: trace.spanId,
559
563
  parentSpanId: trace.parentSpanId,
560
564
  traceparent: trace.traceparent,
565
+ tracestate: trace.tracestate,
561
566
  message: getRunErrorMessage(error),
562
567
  stack: error instanceof Error ? error.stack : undefined,
563
568
  useCaseName: args.name,
@@ -725,61 +730,88 @@ class UseCaseBuilder<
725
730
  : never,
726
731
  parseInput: boolean,
727
732
  ) => {
728
- const startedAt = Date.now();
729
- const instrumentation = instrumented
730
- ? startUseCaseRunInstrumentation({
731
- ctx: args.ctx,
733
+ const traceAttributes = {
734
+ "beignet.use_case.name": useCaseName,
735
+ "beignet.use_case.kind": useCaseKind,
736
+ } as const;
737
+
738
+ return await runWithTracing(
739
+ args.ctx,
740
+ {
741
+ name: `beignet.use_case ${useCaseName}`,
742
+ type: "useCase",
743
+ kind: "internal",
744
+ attributes: traceAttributes,
745
+ metricAttributes: traceAttributes,
746
+ },
747
+ async () => {
748
+ const startedAt = Date.now();
749
+ const instrumentation = instrumented
750
+ ? startUseCaseRunInstrumentation({
751
+ ctx: args.ctx,
752
+ name: useCaseName,
753
+ kind: useCaseKind,
754
+ })
755
+ : undefined;
756
+ onRun?.({
732
757
  name: useCaseName,
733
758
  kind: useCaseKind,
734
- })
735
- : undefined;
736
- onRun?.({
737
- name: useCaseName,
738
- kind: useCaseKind,
739
- phase: "start",
740
- ctx: args.ctx,
741
- });
742
-
743
- try {
744
- const parsedInput =
745
- parseInput && validation.input
746
- ? await parseSchema(inputSchema, args.input, useCaseName, "input")
747
- : (args.input as SchemaOutput<InputSchema>);
748
-
749
- const rawResult = await fn({
750
- ctx: args.ctx,
751
- input: parsedInput,
752
- events: eventHelpers,
753
- });
754
-
755
- const result = validation.output
756
- ? await parseSchema(outputSchema, rawResult, useCaseName, "output")
757
- : (rawResult as SchemaOutput<OutputSchema>);
758
-
759
- const durationMs = Date.now() - startedAt;
760
- instrumentation?.end(durationMs);
761
- onRun?.({
762
- name: useCaseName,
763
- kind: useCaseKind,
764
- phase: "end",
765
- durationMs,
766
- ctx: args.ctx,
767
- });
768
-
769
- return result;
770
- } catch (err) {
771
- const durationMs = Date.now() - startedAt;
772
- instrumentation?.error(durationMs, err);
773
- onRun?.({
774
- name: useCaseName,
775
- kind: useCaseKind,
776
- phase: "error",
777
- durationMs,
778
- error: err,
779
- ctx: args.ctx,
780
- });
781
- throw err;
782
- }
759
+ phase: "start",
760
+ ctx: args.ctx,
761
+ });
762
+
763
+ try {
764
+ const parsedInput =
765
+ parseInput && validation.input
766
+ ? await parseSchema(
767
+ inputSchema,
768
+ args.input,
769
+ useCaseName,
770
+ "input",
771
+ )
772
+ : (args.input as SchemaOutput<InputSchema>);
773
+
774
+ const rawResult = await fn({
775
+ ctx: args.ctx,
776
+ input: parsedInput,
777
+ events: eventHelpers,
778
+ });
779
+
780
+ const result = validation.output
781
+ ? await parseSchema(
782
+ outputSchema,
783
+ rawResult,
784
+ useCaseName,
785
+ "output",
786
+ )
787
+ : (rawResult as SchemaOutput<OutputSchema>);
788
+
789
+ const durationMs = Date.now() - startedAt;
790
+ instrumentation?.end(durationMs);
791
+ onRun?.({
792
+ name: useCaseName,
793
+ kind: useCaseKind,
794
+ phase: "end",
795
+ durationMs,
796
+ ctx: args.ctx,
797
+ });
798
+
799
+ return result;
800
+ } catch (err) {
801
+ const durationMs = Date.now() - startedAt;
802
+ instrumentation?.error(durationMs, err);
803
+ onRun?.({
804
+ name: useCaseName,
805
+ kind: useCaseKind,
806
+ phase: "error",
807
+ durationMs,
808
+ error: err,
809
+ ctx: args.ctx,
810
+ });
811
+ throw err;
812
+ }
813
+ },
814
+ );
783
815
  };
784
816
 
785
817
  type RunArgs = Parameters<typeof execute>[0];
@@ -1,4 +1,6 @@
1
1
  import type { StandardSchemaV1 } from "@standard-schema/spec";
2
+ import { runWithResolvedTracingContext } from "../tracing/execution.js";
3
+ import type { TracingPort } from "../tracing/index.js";
2
4
 
3
5
  /**
4
6
  * Any Standard Schema compatible validator.
@@ -160,6 +162,11 @@ export interface RegisterListenersOptions<Ctx> {
160
162
  * Static listener context or factory evaluated for each delivered event.
161
163
  */
162
164
  ctx?: Ctx | (() => MaybePromise<Ctx>);
165
+ /**
166
+ * Runtime tracing port used to start the listener span before a lazy context
167
+ * factory runs.
168
+ */
169
+ tracing?: TracingPort;
163
170
  /**
164
171
  * Called when a listener fails. When omitted, listener errors are rethrown to
165
172
  * the event bus subscription callback.
@@ -243,16 +250,6 @@ async function parsePayload<Schema extends StandardSchemaV1>(
243
250
  throw new Error("Invalid Standard Schema result: missing value");
244
251
  }
245
252
 
246
- async function resolveCtx<Ctx>(
247
- ctx: Ctx | (() => MaybePromise<Ctx>) | undefined,
248
- ): Promise<Ctx> {
249
- if (typeof ctx === "function") {
250
- return (ctx as () => MaybePromise<Ctx>)();
251
- }
252
-
253
- return ctx as Ctx;
254
- }
255
-
256
253
  /**
257
254
  * Define a typed event.
258
255
  *
@@ -326,10 +323,26 @@ export function registerListeners<Ctx>(
326
323
  eventBus.subscribe(listener.event, async (rawPayload) => {
327
324
  try {
328
325
  const payload = await parseEventPayload(listener.event, rawPayload);
329
- await listener.handle({
330
- event: listener.event,
331
- payload,
332
- ctx: await resolveCtx(options.ctx),
326
+ const traceAttributes = {
327
+ "beignet.listener.name": listener.name,
328
+ "beignet.event.name": listener.event.name,
329
+ } as const;
330
+ await runWithResolvedTracingContext({
331
+ tracing: options.tracing,
332
+ ctx: options.ctx as Ctx | (() => MaybePromise<Ctx>),
333
+ operation: {
334
+ name: `beignet.listener ${listener.name}`,
335
+ type: "listener",
336
+ kind: "consumer",
337
+ attributes: traceAttributes,
338
+ metricAttributes: traceAttributes,
339
+ },
340
+ run: (ctx) =>
341
+ listener.handle({
342
+ event: listener.event,
343
+ payload,
344
+ ctx,
345
+ }),
333
346
  });
334
347
  } catch (error) {
335
348
  options.onError?.(error, listener);