1import type * as iam from "@distilled.cloud/aws/iam";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4
5/**
6 * Runtime binding for `iam:GenerateServiceLastAccessedDetails` — start an
7 * access-advisor report for an IAM user, group, role, or policy, answering
8 * "which services has this entity actually used?". Pair with
9 * {@link GetServiceLastAccessedDetails} to poll the returned `JobId`.
10 *
11 * The target entity (`Arn`) is chosen per request — least-privilege tooling
12 * typically iterates entities discovered at runtime — so the binding takes no
13 * arguments and grants `iam:GenerateServiceLastAccessedDetails` on `*`.
14 * Provide the implementation with
15 * `Effect.provide(AWS.IAM.GenerateServiceLastAccessedDetailsHttp)`.
16 *
17 * ### Access Advisor
18 * **Example:** Start an Access Report for a Role
19 * ```typescript
20 * // init
21 * const generateServiceLastAccessedDetails =
22 * yield* IAM.GenerateServiceLastAccessedDetails();
23 *
24 * // runtime
25 * const { JobId } = yield* generateServiceLastAccessedDetails({
26 * Arn: roleArn,
27 * });
28 * ```
29 *
30 * @binding
31 */
32export interface GenerateServiceLastAccessedDetails extends Binding.Service<
33 GenerateServiceLastAccessedDetails,
34 "AWS.IAM.GenerateServiceLastAccessedDetails",
35 () => Effect.Effect<
36 (
37 request: iam.GenerateServiceLastAccessedDetailsRequest,
38 ) => Effect.Effect<
39 iam.GenerateServiceLastAccessedDetailsResponse,
40 iam.GenerateServiceLastAccessedDetailsError
41 >
42 >
43> {}
44export const GenerateServiceLastAccessedDetails =
45 Binding.Service<GenerateServiceLastAccessedDetails>(
46 "AWS.IAM.GenerateServiceLastAccessedDetails",
47 );