1import type * as qbusiness from "@distilled.cloud/aws/qbusiness";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Application } from "./Application.ts";
5
6/**
7 * `AssociatePermission` request with `applicationId` injected from the bound application.
8 */
9export interface AssociatePermissionRequest extends Omit<
10 qbusiness.AssociatePermissionRequest,
11 "applicationId"
12> {}
13
14/**
15 * Runtime binding for the `AssociatePermission` operation (IAM action
16 * `qbusiness:AssociatePermission`), scoped to one {@link Application}.
17 *
18 * Adds a statement to the application's permission policy, granting
19 * a principal (e.g. an ISV data accessor) cross-account access to Q
20 * Business actions.
21 * Provide the implementation with
22 * `Effect.provide(AWS.QBusiness.AssociatePermissionHttp)`.
23 *
24 * ### Cross-Account Permissions
25 * **Example:** Grant an ISV SearchRelevantContent
26 * ```typescript
27 * const associate = yield* AWS.QBusiness.AssociatePermission(app);
28 *
29 * yield* associate({
30 * statementId: "isv-search",
31 * actions: ["qbusiness:SearchRelevantContent"],
32 * principal: "arn:aws:iam::123456789012:role/IsvRole",
33 * });
34 * ```
35 *
36 * @binding
37 */
38export interface AssociatePermission extends Binding.Service<
39 AssociatePermission,
40 "AWS.QBusiness.AssociatePermission",
41 (
42 application: Application,
43 ) => Effect.Effect<
44 (
45 request: AssociatePermissionRequest,
46 ) => Effect.Effect<
47 qbusiness.AssociatePermissionResponse,
48 qbusiness.AssociatePermissionError
49 >
50 >
51> {}
52export const AssociatePermission = Binding.Service<AssociatePermission>(
53 "AWS.QBusiness.AssociatePermission",
54);