1import type * as Logs from "@distilled.cloud/aws/cloudwatch-logs";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { LogGroup } from "./LogGroup.ts";
5
6export interface CreateLogStreamRequest extends Omit<
7 Logs.CreateLogStreamRequest,
8 "logGroupName"
9> {}
10
11/**
12 * Runtime binding for `logs:CreateLogStream`.
13 *
14 * Bind this operation to a `LogGroup` inside a function runtime to create
15 * log streams dynamically (e.g. one stream per tenant or per day) before
16 * writing to them with `PutLogEvents`, automatically injecting the log group
17 * name. For a fixed stream known at deploy time, declare an
18 * `AWS.Logs.LogStream` resource instead.
19 * ### Writing Logs
20 * **Example:** Create a Per-Tenant Stream, Then Write
21 * ```typescript
22 * const createLogStream = yield* AWS.Logs.CreateLogStream(logGroup);
23 * const putLogEvents = yield* AWS.Logs.PutLogEvents(logGroup);
24 *
25 * yield* createLogStream({ logStreamName: `tenant-${tenantId}` }).pipe(
26 * Effect.catchTag("ResourceAlreadyExistsException", () => Effect.void),
27 * );
28 * yield* putLogEvents({
29 * logStreamName: `tenant-${tenantId}`,
30 * logEvents: [{ timestamp, message }],
31 * });
32 * ```
33 *
34 * @binding
35 */
36export interface CreateLogStream extends Binding.Service<
37 CreateLogStream,
38 "AWS.Logs.CreateLogStream",
39 <G extends LogGroup>(
40 logGroup: G,
41 ) => Effect.Effect<
42 (
43 request: CreateLogStreamRequest,
44 ) => Effect.Effect<Logs.CreateLogStreamResponse, Logs.CreateLogStreamError>
45 >
46> {}
47export const CreateLogStream = Binding.Service<CreateLogStream>(
48 "AWS.Logs.CreateLogStream",
49);