import * as datasync from "@distilled.cloud/aws/datasync";
import * as Effect from "effect/Effect";
/**
* A freshly-created IAM role (or a just-attached inline policy) takes a
* while to propagate to DataSync: `CreateLocation*` transiently rejects it
* as `LocationRoleNotAssumable` (patched from `InvalidRequestException` +
* "Invalid IAM role") or fails its location access test as
* `LocationAccessTestFailed` (patched from `InvalidRequestException` +
* "location access test failed"). Bounded retry (~60s), explicitly typed so
* declaration emit never widens the provider layer (see PATTERNS ยง7).
*/
export declare const retryWhileRoleNotAssumable: (self: Effect.Effect) => Effect.Effect;
/** Convert a DataSync tag list to a plain record. */
export declare const dsTagsToRecord: (tags: readonly datasync.TagListEntry[] | undefined) => Record;
/** Read the observed tags currently attached to a DataSync resource. */
export declare const readObservedTags: (resourceArn: string) => Effect.Effect, datasync.ListTagsForResourceError, import("@distilled.cloud/aws/Credentials").Credentials | import("effect/unstable/http/HttpClient").HttpClient>;
/**
* Diff observed cloud tags against the desired set and apply the delta.
* DataSync `tagResource` upserts; `untagResource` removes by key.
*/
export declare const syncTags: (resourceArn: string, observed: Record, desired: Record) => Effect.Effect;
/**
* Scan every DataSync location and return the ARN of the one whose
* `LocationUri` matches (ignoring a trailing slash). DataSync has no
* create-idempotency token, so this makes reconcile idempotent across state
* loss.
*/
export declare const findLocationArnByUri: (expectedUri: string) => Effect.Effect;
//# sourceMappingURL=internal.d.ts.map