1import type * as xray from "@distilled.cloud/aws/xray";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4
5export interface GetTraceSummariesRequest
6 extends xray.GetTraceSummariesRequest {}
7
8/**
9 * Retrieve IDs and annotations for traces available in a time frame,
10 * optionally filtered by an X-Ray filter expression.
11 *
12 * Bind the operation in the function's init phase to get a runtime callable;
13 * provide the implementation with `Effect.provide(XRay.GetTraceSummariesHttp)`.
14 * Feed the returned trace IDs to `XRay.BatchGetTraces` to fetch the full
15 * segment documents.
16 *
17 * X-Ray trace reads are account-scoped: IAM does not support resource-level
18 * permissions for `xray:GetTraceSummaries`, so the binding grants the action
19 * on `*`.
20 * ### Reading Trace Summaries
21 * **Example:** Find recent traces from a Handler
22 * ```typescript
23 * import * as XRay from "alchemy/AWS/XRay";
24 *
25 * export default MyFunction.make(
26 * { main: import.meta.url, functionUrl: true, tracing: "Active" },
27 * Effect.gen(function* () {
28 * // init — bind the operation (grants xray:GetTraceSummaries)
29 * const getTraceSummaries = yield* XRay.GetTraceSummaries();
30 *
31 * return {
32 * fetch: Effect.gen(function* () {
33 * // runtime — find traces for a service in the last 5 minutes
34 * const now = yield* Effect.sync(() => Date.now());
35 * const result = yield* getTraceSummaries({
36 * StartTime: new Date(now - 5 * 60 * 1000),
37 * EndTime: new Date(now),
38 * FilterExpression: 'service("my-api")',
39 * });
40 * return yield* HttpServerResponse.json({
41 * traceIds: (result.TraceSummaries ?? []).flatMap((summary) =>
42 * summary.Id ? [summary.Id] : [],
43 * ),
44 * });
45 * }).pipe(Effect.orDie),
46 * };
47 * }).pipe(Effect.provide(XRay.GetTraceSummariesHttp)),
48 * );
49 * ```
50 *
51 * @binding
52 */
53export interface GetTraceSummaries extends Binding.Service<
54 GetTraceSummaries,
55 "AWS.XRay.GetTraceSummaries",
56 () => Effect.Effect<
57 (
58 request: GetTraceSummariesRequest,
59 ) => Effect.Effect<
60 xray.GetTraceSummariesResult,
61 xray.GetTraceSummariesError
62 >
63 >
64> {}
65export const GetTraceSummaries = Binding.Service<GetTraceSummaries>(
66 "AWS.XRay.GetTraceSummaries",
67);