import * as agw2 from "@distilled.cloud/aws/apigatewayv2";
import * as Effect from "effect/Effect";
/**
* API Gateway v2 ARN helpers. Unlike most services the resource ARNs used
* for tagging omit the account id (`arn:aws:apigateway:{region}::/apis/{id}`).
*/
export declare const apiArn: (region: string, apiId: string) => string;
export declare const stageArn: (region: string, apiId: string, stageName: string) => string;
export declare const domainNameArn: (region: string, domainName: string) => string;
export declare const vpcLinkArn: (region: string, vpcLinkId: string) => string;
/**
* The `execute-api` ARN that IAM policies (Lambda resource policies,
* `execute-api:Invoke`/`ManageConnections` statements) use to scope access
* to an API. Wildcards match across path segments.
*/
export declare const executeApiArn: (region: string, accountId: string, apiId: string, suffix?: string) => string;
/**
* `Create/Update/Delete` operations across API Gateway v2 share an
* account-wide throttle; parallel test suites and deploys routinely see
* `TooManyRequestsException` outlast the blanket SDK retry budget. The
* schedule below (exponential base 1s capped at 20s, 10 attempts, ~60s
* total) rides out the throttle window without hiding real failures.
*
* The helper carries an EXPLICIT return annotation so the conditional type
* of `Effect.retry` never leaks into declaration emit (which would widen the
* provider layer to `unknown` for every consumer of `AWS.providers()`).
*/
export declare const retryOnTooManyRequests: (effect: Effect.Effect) => Effect.Effect;
/**
* Normalize the wire tag map (values may be `undefined`) to a plain record.
*/
export declare const tagRecord: (tags: {
[key: string]: string | undefined;
} | undefined) => Record;
/**
* API Gateway v2 collection operations (`getApis`, `getRoutes`, `getStages`,
* …) return `{ Items, NextToken }` pages without a Smithy pagination trait,
* so distilled exposes no `.pages` stream for them. Collect every page
* manually, bounded at 100 pages so a misbehaving token can never hang the
* engine.
*/
export declare const collectAllPages: (fetchPage: (nextToken: string | undefined) => Effect.Effect<{
Items?: readonly A[] | A[];
NextToken?: string;
}, E, R>) => Effect.Effect;
/**
* Diff observed tags against desired tags and apply only the delta via the
* v2 `tagResource`/`untagResource` operations.
*/
export declare const syncTags: (args_0: {
resourceArn: string;
oldTags: Record;
newTags: Record;
}) => Effect.Effect;
//# sourceMappingURL=common.d.ts.map