/**
 * @since 4.0.0
 */
import type { NonEmptyReadonlyArray } from "../../Array.ts";
import * as Cause from "../../Cause.ts";
import * as Context from "../../Context.ts";
import * as Effect from "../../Effect.ts";
import * as Schedule from "../../Schedule.ts";
import * as Schema from "../../Schema.ts";
import type { Scope } from "../../Scope.ts";
import type * as Types from "../../Types.ts";
import type { WorkflowEngine, WorkflowInstance } from "./WorkflowEngine.ts";
declare const TypeId = "~effect/workflow/Activity";
/**
 * @since 4.0.0
 * @category Models
 */
export interface Activity<Success extends Schema.Top = Schema.Void, Error extends Schema.Top = Schema.Never, R = never> extends Effect.Effect<Success["Type"], Error["Type"], Success["DecodingServices"] | Error["DecodingServices"] | R | WorkflowEngine | WorkflowInstance> {
    readonly [TypeId]: typeof TypeId;
    readonly name: string;
    readonly successSchema: Success;
    readonly errorSchema: Error;
    readonly exitSchema: Schema.Exit<Success, Error, Schema.Defect>;
    readonly annotations: Context.Context<never>;
    annotate<I, S>(key: Context.Key<I, S>, value: S): Activity<Success, Error, R>;
    annotateMerge<I>(annotations: Context.Context<I>): Activity<Success, Error, R>;
    readonly execute: Effect.Effect<Success["Type"], Error["Type"], Success["DecodingServices"] | Success["EncodingServices"] | Error["DecodingServices"] | Error["EncodingServices"] | R | Scope | WorkflowEngine | WorkflowInstance>;
    readonly executeEncoded: Effect.Effect<unknown, unknown, Success["DecodingServices"] | Success["EncodingServices"] | Error["DecodingServices"] | Error["EncodingServices"] | R | Scope | WorkflowEngine | WorkflowInstance>;
}
/**
 * @since 4.0.0
 * @category Models
 */
export interface Any {
    readonly [TypeId]: typeof TypeId;
    readonly name: string;
    readonly executeEncoded: Effect.Effect<any, any, any>;
    readonly annotations: Context.Context<never>;
}
/**
 * @since 4.0.0
 * @category Models
 */
export interface AnyWithProps {
    readonly [TypeId]: typeof TypeId;
    readonly name: string;
    readonly successSchema: Schema.Top;
    readonly errorSchema: Schema.Top;
    readonly executeEncoded: Effect.Effect<any, any, any>;
}
/**
 * @since 4.0.0
 * @category Constructors
 */
export declare const make: <R, Success extends Schema.Top = Schema.Void, Error extends Schema.Top = Schema.Never>(options: {
    readonly name: string;
    readonly success?: Success | undefined;
    readonly error?: Error | undefined;
    readonly execute: Effect.Effect<Success["Type"], Error["Type"], R>;
    readonly interruptRetryPolicy?: Schedule.Schedule<any, Cause.Cause<unknown>> | undefined;
    readonly annotations?: Context.Context<never> | undefined;
}) => Activity<Success, Error, Exclude<R, WorkflowInstance | WorkflowEngine | Scope>>;
/**
 * @since 4.0.0
 * @category Error handling
 */
export declare const retry: {
    /**
     * @since 4.0.0
     * @category Error handling
     */
    <E, O extends Types.NoExcessProperties<Omit<Effect.Retry.Options<E>, "schedule">, O>>(options: O): <A, R>(self: Effect.Effect<A, E, R>) => Effect.Retry.Return<R, E, A, O>;
    /**
     * @since 4.0.0
     * @category Error handling
     */
    <A, E, R, O extends Types.NoExcessProperties<Omit<Effect.Retry.Options<E>, "schedule">, O>>(self: Effect.Effect<A, E, R>, options: O): Effect.Retry.Return<R, E, A, O>;
};
/**
 * @since 4.0.0
 * @category Attempts
 */
export declare const CurrentAttempt: Context.Reference<number>;
/**
 * @since 4.0.0
 * @category Idempotency
 */
export declare const idempotencyKey: (name: string, options?: {
    readonly includeAttempt?: boolean | undefined;
} | undefined) => Effect.Effect<string, never, WorkflowInstance>;
/**
 * @since 4.0.0
 * @category Racing
 */
export declare const raceAll: <const Activities extends NonEmptyReadonlyArray<Any>>(name: string, activities: Activities) => Effect.Effect<Activities[number] extends Activity<infer _A, infer _E, infer _R> ? _A["Type"] : never, Activities[number] extends Activity<infer _A, infer _E_1, infer _R_1> ? _E_1["Type"] : never, (Activities[number] extends Activity<infer Success, infer Error, infer R> ? Success["DecodingServices"] | Error["DecodingServices"] | R : never) | WorkflowEngine | WorkflowInstance>;
export {};
//# sourceMappingURL=Activity.d.ts.map