1import type * as personalizeevents from "@distilled.cloud/aws/personalize-events";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { EventTracker } from "./EventTracker.ts";
5
6/**
7 * `PutEvents` request with `trackingId` injected from the bound tracker.
8 */
9export interface PutEventsRequest extends Omit<
10 personalizeevents.PutEventsRequest,
11 "trackingId"
12> {}
13
14/**
15 * Runtime binding for `personalize:PutEvents`, scoped to one {@link EventTracker} —
16 * Records item-interaction events (clicks, views, purchases, …) in real
17 * time through the bound {@link EventTracker}. Events stream into the
18 * dataset group's Interactions dataset and are used by recommenders as
19 * they happen.
20 * Provide the implementation with
21 * `Effect.provide(AWS.Personalize.PutEventsHttp)`.
22 *
23 * ### Streaming Events
24 * **Example:** Record a Click Event
25 * ```typescript
26 * // init
27 * const putEvents = yield* Personalize.PutEvents(tracker);
28 *
29 * yield* putEvents({
30 * sessionId: "session-1",
31 * userId: "user-1",
32 * eventList: [{ eventType: "click", itemId: "item-42", sentAt: new Date() }],
33 * });
34 * ```
35 *
36 * @binding
37 */
38export interface PutEvents extends Binding.Service<
39 PutEvents,
40 "AWS.Personalize.PutEvents",
41 (
42 tracker: EventTracker,
43 ) => Effect.Effect<
44 (
45 request: PutEventsRequest,
46 ) => Effect.Effect<
47 personalizeevents.PutEventsResponse,
48 personalizeevents.PutEventsError
49 >
50 >
51> {}
52export const PutEvents = Binding.Service<PutEvents>(
53 "AWS.Personalize.PutEvents",
54);