import type { HttpHandlerOptions as __HttpHandlerOptions, PaginationConfiguration, Paginator } from "@smithy/types"; import { type CreateActivityCommandInput, type CreateActivityCommandOutput } from "./commands/CreateActivityCommand"; import { type CreateStateMachineAliasCommandInput, type CreateStateMachineAliasCommandOutput } from "./commands/CreateStateMachineAliasCommand"; import { type CreateStateMachineCommandInput, type CreateStateMachineCommandOutput } from "./commands/CreateStateMachineCommand"; import { type DeleteActivityCommandInput, type DeleteActivityCommandOutput } from "./commands/DeleteActivityCommand"; import { type DeleteStateMachineAliasCommandInput, type DeleteStateMachineAliasCommandOutput } from "./commands/DeleteStateMachineAliasCommand"; import { type DeleteStateMachineCommandInput, type DeleteStateMachineCommandOutput } from "./commands/DeleteStateMachineCommand"; import { type DeleteStateMachineVersionCommandInput, type DeleteStateMachineVersionCommandOutput } from "./commands/DeleteStateMachineVersionCommand"; import { type DescribeActivityCommandInput, type DescribeActivityCommandOutput } from "./commands/DescribeActivityCommand"; import { type DescribeExecutionCommandInput, type DescribeExecutionCommandOutput } from "./commands/DescribeExecutionCommand"; import { type DescribeMapRunCommandInput, type DescribeMapRunCommandOutput } from "./commands/DescribeMapRunCommand"; import { type DescribeStateMachineAliasCommandInput, type DescribeStateMachineAliasCommandOutput } from "./commands/DescribeStateMachineAliasCommand"; import { type DescribeStateMachineCommandInput, type DescribeStateMachineCommandOutput } from "./commands/DescribeStateMachineCommand"; import { type DescribeStateMachineForExecutionCommandInput, type DescribeStateMachineForExecutionCommandOutput } from "./commands/DescribeStateMachineForExecutionCommand"; import { type GetActivityTaskCommandInput, type GetActivityTaskCommandOutput } from "./commands/GetActivityTaskCommand"; import { type GetExecutionHistoryCommandInput, type GetExecutionHistoryCommandOutput } from "./commands/GetExecutionHistoryCommand"; import { type ListActivitiesCommandInput, type ListActivitiesCommandOutput } from "./commands/ListActivitiesCommand"; import { type ListExecutionsCommandInput, type ListExecutionsCommandOutput } from "./commands/ListExecutionsCommand"; import { type ListMapRunsCommandInput, type ListMapRunsCommandOutput } from "./commands/ListMapRunsCommand"; import { type ListStateMachineAliasesCommandInput, type ListStateMachineAliasesCommandOutput } from "./commands/ListStateMachineAliasesCommand"; import { type ListStateMachinesCommandInput, type ListStateMachinesCommandOutput } from "./commands/ListStateMachinesCommand"; import { type ListStateMachineVersionsCommandInput, type ListStateMachineVersionsCommandOutput } from "./commands/ListStateMachineVersionsCommand"; import { type ListTagsForResourceCommandInput, type ListTagsForResourceCommandOutput } from "./commands/ListTagsForResourceCommand"; import { type PublishStateMachineVersionCommandInput, type PublishStateMachineVersionCommandOutput } from "./commands/PublishStateMachineVersionCommand"; import { type RedriveExecutionCommandInput, type RedriveExecutionCommandOutput } from "./commands/RedriveExecutionCommand"; import { type SendTaskFailureCommandInput, type SendTaskFailureCommandOutput } from "./commands/SendTaskFailureCommand"; import { type SendTaskHeartbeatCommandInput, type SendTaskHeartbeatCommandOutput } from "./commands/SendTaskHeartbeatCommand"; import { type SendTaskSuccessCommandInput, type SendTaskSuccessCommandOutput } from "./commands/SendTaskSuccessCommand"; import { type StartExecutionCommandInput, type StartExecutionCommandOutput } from "./commands/StartExecutionCommand"; import { type StartSyncExecutionCommandInput, type StartSyncExecutionCommandOutput } from "./commands/StartSyncExecutionCommand"; import { type StopExecutionCommandInput, type StopExecutionCommandOutput } from "./commands/StopExecutionCommand"; import { type TagResourceCommandInput, type TagResourceCommandOutput } from "./commands/TagResourceCommand"; import { type TestStateCommandInput, type TestStateCommandOutput } from "./commands/TestStateCommand"; import { type UntagResourceCommandInput, type UntagResourceCommandOutput } from "./commands/UntagResourceCommand"; import { type UpdateMapRunCommandInput, type UpdateMapRunCommandOutput } from "./commands/UpdateMapRunCommand"; import { type UpdateStateMachineAliasCommandInput, type UpdateStateMachineAliasCommandOutput } from "./commands/UpdateStateMachineAliasCommand"; import { type UpdateStateMachineCommandInput, type UpdateStateMachineCommandOutput } from "./commands/UpdateStateMachineCommand"; import { type ValidateStateMachineDefinitionCommandInput, type ValidateStateMachineDefinitionCommandOutput } from "./commands/ValidateStateMachineDefinitionCommand"; import { SFNClient } from "./SFNClient"; export interface SFN { /** * @see {@link CreateActivityCommand} */ createActivity(args: CreateActivityCommandInput, options?: __HttpHandlerOptions): Promise; createActivity(args: CreateActivityCommandInput, cb: (err: any, data?: CreateActivityCommandOutput) => void): void; createActivity(args: CreateActivityCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: CreateActivityCommandOutput) => void): void; /** * @see {@link CreateStateMachineCommand} */ createStateMachine(args: CreateStateMachineCommandInput, options?: __HttpHandlerOptions): Promise; createStateMachine(args: CreateStateMachineCommandInput, cb: (err: any, data?: CreateStateMachineCommandOutput) => void): void; createStateMachine(args: CreateStateMachineCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: CreateStateMachineCommandOutput) => void): void; /** * @see {@link CreateStateMachineAliasCommand} */ createStateMachineAlias(args: CreateStateMachineAliasCommandInput, options?: __HttpHandlerOptions): Promise; createStateMachineAlias(args: CreateStateMachineAliasCommandInput, cb: (err: any, data?: CreateStateMachineAliasCommandOutput) => void): void; createStateMachineAlias(args: CreateStateMachineAliasCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: CreateStateMachineAliasCommandOutput) => void): void; /** * @see {@link DeleteActivityCommand} */ deleteActivity(args: DeleteActivityCommandInput, options?: __HttpHandlerOptions): Promise; deleteActivity(args: DeleteActivityCommandInput, cb: (err: any, data?: DeleteActivityCommandOutput) => void): void; deleteActivity(args: DeleteActivityCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DeleteActivityCommandOutput) => void): void; /** * @see {@link DeleteStateMachineCommand} */ deleteStateMachine(args: DeleteStateMachineCommandInput, options?: __HttpHandlerOptions): Promise; deleteStateMachine(args: DeleteStateMachineCommandInput, cb: (err: any, data?: DeleteStateMachineCommandOutput) => void): void; deleteStateMachine(args: DeleteStateMachineCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DeleteStateMachineCommandOutput) => void): void; /** * @see {@link DeleteStateMachineAliasCommand} */ deleteStateMachineAlias(args: DeleteStateMachineAliasCommandInput, options?: __HttpHandlerOptions): Promise; deleteStateMachineAlias(args: DeleteStateMachineAliasCommandInput, cb: (err: any, data?: DeleteStateMachineAliasCommandOutput) => void): void; deleteStateMachineAlias(args: DeleteStateMachineAliasCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DeleteStateMachineAliasCommandOutput) => void): void; /** * @see {@link DeleteStateMachineVersionCommand} */ deleteStateMachineVersion(args: DeleteStateMachineVersionCommandInput, options?: __HttpHandlerOptions): Promise; deleteStateMachineVersion(args: DeleteStateMachineVersionCommandInput, cb: (err: any, data?: DeleteStateMachineVersionCommandOutput) => void): void; deleteStateMachineVersion(args: DeleteStateMachineVersionCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DeleteStateMachineVersionCommandOutput) => void): void; /** * @see {@link DescribeActivityCommand} */ describeActivity(args: DescribeActivityCommandInput, options?: __HttpHandlerOptions): Promise; describeActivity(args: DescribeActivityCommandInput, cb: (err: any, data?: DescribeActivityCommandOutput) => void): void; describeActivity(args: DescribeActivityCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DescribeActivityCommandOutput) => void): void; /** * @see {@link DescribeExecutionCommand} */ describeExecution(args: DescribeExecutionCommandInput, options?: __HttpHandlerOptions): Promise; describeExecution(args: DescribeExecutionCommandInput, cb: (err: any, data?: DescribeExecutionCommandOutput) => void): void; describeExecution(args: DescribeExecutionCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DescribeExecutionCommandOutput) => void): void; /** * @see {@link DescribeMapRunCommand} */ describeMapRun(args: DescribeMapRunCommandInput, options?: __HttpHandlerOptions): Promise; describeMapRun(args: DescribeMapRunCommandInput, cb: (err: any, data?: DescribeMapRunCommandOutput) => void): void; describeMapRun(args: DescribeMapRunCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DescribeMapRunCommandOutput) => void): void; /** * @see {@link DescribeStateMachineCommand} */ describeStateMachine(args: DescribeStateMachineCommandInput, options?: __HttpHandlerOptions): Promise; describeStateMachine(args: DescribeStateMachineCommandInput, cb: (err: any, data?: DescribeStateMachineCommandOutput) => void): void; describeStateMachine(args: DescribeStateMachineCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DescribeStateMachineCommandOutput) => void): void; /** * @see {@link DescribeStateMachineAliasCommand} */ describeStateMachineAlias(args: DescribeStateMachineAliasCommandInput, options?: __HttpHandlerOptions): Promise; describeStateMachineAlias(args: DescribeStateMachineAliasCommandInput, cb: (err: any, data?: DescribeStateMachineAliasCommandOutput) => void): void; describeStateMachineAlias(args: DescribeStateMachineAliasCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DescribeStateMachineAliasCommandOutput) => void): void; /** * @see {@link DescribeStateMachineForExecutionCommand} */ describeStateMachineForExecution(args: DescribeStateMachineForExecutionCommandInput, options?: __HttpHandlerOptions): Promise; describeStateMachineForExecution(args: DescribeStateMachineForExecutionCommandInput, cb: (err: any, data?: DescribeStateMachineForExecutionCommandOutput) => void): void; describeStateMachineForExecution(args: DescribeStateMachineForExecutionCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: DescribeStateMachineForExecutionCommandOutput) => void): void; /** * @see {@link GetActivityTaskCommand} */ getActivityTask(args: GetActivityTaskCommandInput, options?: __HttpHandlerOptions): Promise; getActivityTask(args: GetActivityTaskCommandInput, cb: (err: any, data?: GetActivityTaskCommandOutput) => void): void; getActivityTask(args: GetActivityTaskCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: GetActivityTaskCommandOutput) => void): void; /** * @see {@link GetExecutionHistoryCommand} */ getExecutionHistory(args: GetExecutionHistoryCommandInput, options?: __HttpHandlerOptions): Promise; getExecutionHistory(args: GetExecutionHistoryCommandInput, cb: (err: any, data?: GetExecutionHistoryCommandOutput) => void): void; getExecutionHistory(args: GetExecutionHistoryCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: GetExecutionHistoryCommandOutput) => void): void; /** * @see {@link ListActivitiesCommand} */ listActivities(): Promise; listActivities(args: ListActivitiesCommandInput, options?: __HttpHandlerOptions): Promise; listActivities(args: ListActivitiesCommandInput, cb: (err: any, data?: ListActivitiesCommandOutput) => void): void; listActivities(args: ListActivitiesCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: ListActivitiesCommandOutput) => void): void; /** * @see {@link ListExecutionsCommand} */ listExecutions(): Promise; listExecutions(args: ListExecutionsCommandInput, options?: __HttpHandlerOptions): Promise; listExecutions(args: ListExecutionsCommandInput, cb: (err: any, data?: ListExecutionsCommandOutput) => void): void; listExecutions(args: ListExecutionsCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: ListExecutionsCommandOutput) => void): void; /** * @see {@link ListMapRunsCommand} */ listMapRuns(args: ListMapRunsCommandInput, options?: __HttpHandlerOptions): Promise; listMapRuns(args: ListMapRunsCommandInput, cb: (err: any, data?: ListMapRunsCommandOutput) => void): void; listMapRuns(args: ListMapRunsCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: ListMapRunsCommandOutput) => void): void; /** * @see {@link ListStateMachineAliasesCommand} */ listStateMachineAliases(args: ListStateMachineAliasesCommandInput, options?: __HttpHandlerOptions): Promise; listStateMachineAliases(args: ListStateMachineAliasesCommandInput, cb: (err: any, data?: ListStateMachineAliasesCommandOutput) => void): void; listStateMachineAliases(args: ListStateMachineAliasesCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: ListStateMachineAliasesCommandOutput) => void): void; /** * @see {@link ListStateMachinesCommand} */ listStateMachines(): Promise; listStateMachines(args: ListStateMachinesCommandInput, options?: __HttpHandlerOptions): Promise; listStateMachines(args: ListStateMachinesCommandInput, cb: (err: any, data?: ListStateMachinesCommandOutput) => void): void; listStateMachines(args: ListStateMachinesCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: ListStateMachinesCommandOutput) => void): void; /** * @see {@link ListStateMachineVersionsCommand} */ listStateMachineVersions(args: ListStateMachineVersionsCommandInput, options?: __HttpHandlerOptions): Promise; listStateMachineVersions(args: ListStateMachineVersionsCommandInput, cb: (err: any, data?: ListStateMachineVersionsCommandOutput) => void): void; listStateMachineVersions(args: ListStateMachineVersionsCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: ListStateMachineVersionsCommandOutput) => void): void; /** * @see {@link ListTagsForResourceCommand} */ listTagsForResource(args: ListTagsForResourceCommandInput, options?: __HttpHandlerOptions): Promise; listTagsForResource(args: ListTagsForResourceCommandInput, cb: (err: any, data?: ListTagsForResourceCommandOutput) => void): void; listTagsForResource(args: ListTagsForResourceCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: ListTagsForResourceCommandOutput) => void): void; /** * @see {@link PublishStateMachineVersionCommand} */ publishStateMachineVersion(args: PublishStateMachineVersionCommandInput, options?: __HttpHandlerOptions): Promise; publishStateMachineVersion(args: PublishStateMachineVersionCommandInput, cb: (err: any, data?: PublishStateMachineVersionCommandOutput) => void): void; publishStateMachineVersion(args: PublishStateMachineVersionCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: PublishStateMachineVersionCommandOutput) => void): void; /** * @see {@link RedriveExecutionCommand} */ redriveExecution(args: RedriveExecutionCommandInput, options?: __HttpHandlerOptions): Promise; redriveExecution(args: RedriveExecutionCommandInput, cb: (err: any, data?: RedriveExecutionCommandOutput) => void): void; redriveExecution(args: RedriveExecutionCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: RedriveExecutionCommandOutput) => void): void; /** * @see {@link SendTaskFailureCommand} */ sendTaskFailure(args: SendTaskFailureCommandInput, options?: __HttpHandlerOptions): Promise; sendTaskFailure(args: SendTaskFailureCommandInput, cb: (err: any, data?: SendTaskFailureCommandOutput) => void): void; sendTaskFailure(args: SendTaskFailureCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: SendTaskFailureCommandOutput) => void): void; /** * @see {@link SendTaskHeartbeatCommand} */ sendTaskHeartbeat(args: SendTaskHeartbeatCommandInput, options?: __HttpHandlerOptions): Promise; sendTaskHeartbeat(args: SendTaskHeartbeatCommandInput, cb: (err: any, data?: SendTaskHeartbeatCommandOutput) => void): void; sendTaskHeartbeat(args: SendTaskHeartbeatCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: SendTaskHeartbeatCommandOutput) => void): void; /** * @see {@link SendTaskSuccessCommand} */ sendTaskSuccess(args: SendTaskSuccessCommandInput, options?: __HttpHandlerOptions): Promise; sendTaskSuccess(args: SendTaskSuccessCommandInput, cb: (err: any, data?: SendTaskSuccessCommandOutput) => void): void; sendTaskSuccess(args: SendTaskSuccessCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: SendTaskSuccessCommandOutput) => void): void; /** * @see {@link StartExecutionCommand} */ startExecution(args: StartExecutionCommandInput, options?: __HttpHandlerOptions): Promise; startExecution(args: StartExecutionCommandInput, cb: (err: any, data?: StartExecutionCommandOutput) => void): void; startExecution(args: StartExecutionCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: StartExecutionCommandOutput) => void): void; /** * @see {@link StartSyncExecutionCommand} */ startSyncExecution(args: StartSyncExecutionCommandInput, options?: __HttpHandlerOptions): Promise; startSyncExecution(args: StartSyncExecutionCommandInput, cb: (err: any, data?: StartSyncExecutionCommandOutput) => void): void; startSyncExecution(args: StartSyncExecutionCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: StartSyncExecutionCommandOutput) => void): void; /** * @see {@link StopExecutionCommand} */ stopExecution(args: StopExecutionCommandInput, options?: __HttpHandlerOptions): Promise; stopExecution(args: StopExecutionCommandInput, cb: (err: any, data?: StopExecutionCommandOutput) => void): void; stopExecution(args: StopExecutionCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: StopExecutionCommandOutput) => void): void; /** * @see {@link TagResourceCommand} */ tagResource(args: TagResourceCommandInput, options?: __HttpHandlerOptions): Promise; tagResource(args: TagResourceCommandInput, cb: (err: any, data?: TagResourceCommandOutput) => void): void; tagResource(args: TagResourceCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: TagResourceCommandOutput) => void): void; /** * @see {@link TestStateCommand} */ testState(args: TestStateCommandInput, options?: __HttpHandlerOptions): Promise; testState(args: TestStateCommandInput, cb: (err: any, data?: TestStateCommandOutput) => void): void; testState(args: TestStateCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: TestStateCommandOutput) => void): void; /** * @see {@link UntagResourceCommand} */ untagResource(args: UntagResourceCommandInput, options?: __HttpHandlerOptions): Promise; untagResource(args: UntagResourceCommandInput, cb: (err: any, data?: UntagResourceCommandOutput) => void): void; untagResource(args: UntagResourceCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: UntagResourceCommandOutput) => void): void; /** * @see {@link UpdateMapRunCommand} */ updateMapRun(args: UpdateMapRunCommandInput, options?: __HttpHandlerOptions): Promise; updateMapRun(args: UpdateMapRunCommandInput, cb: (err: any, data?: UpdateMapRunCommandOutput) => void): void; updateMapRun(args: UpdateMapRunCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: UpdateMapRunCommandOutput) => void): void; /** * @see {@link UpdateStateMachineCommand} */ updateStateMachine(args: UpdateStateMachineCommandInput, options?: __HttpHandlerOptions): Promise; updateStateMachine(args: UpdateStateMachineCommandInput, cb: (err: any, data?: UpdateStateMachineCommandOutput) => void): void; updateStateMachine(args: UpdateStateMachineCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: UpdateStateMachineCommandOutput) => void): void; /** * @see {@link UpdateStateMachineAliasCommand} */ updateStateMachineAlias(args: UpdateStateMachineAliasCommandInput, options?: __HttpHandlerOptions): Promise; updateStateMachineAlias(args: UpdateStateMachineAliasCommandInput, cb: (err: any, data?: UpdateStateMachineAliasCommandOutput) => void): void; updateStateMachineAlias(args: UpdateStateMachineAliasCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: UpdateStateMachineAliasCommandOutput) => void): void; /** * @see {@link ValidateStateMachineDefinitionCommand} */ validateStateMachineDefinition(args: ValidateStateMachineDefinitionCommandInput, options?: __HttpHandlerOptions): Promise; validateStateMachineDefinition(args: ValidateStateMachineDefinitionCommandInput, cb: (err: any, data?: ValidateStateMachineDefinitionCommandOutput) => void): void; validateStateMachineDefinition(args: ValidateStateMachineDefinitionCommandInput, options: __HttpHandlerOptions, cb: (err: any, data?: ValidateStateMachineDefinitionCommandOutput) => void): void; /** * @see {@link GetExecutionHistoryCommand} * @param args - command input. * @param paginationConfig - optional pagination config. * @returns AsyncIterable of {@link GetExecutionHistoryCommandOutput}. */ paginateGetExecutionHistory(args: GetExecutionHistoryCommandInput, paginationConfig?: Omit): Paginator; /** * @see {@link ListActivitiesCommand} * @param args - command input. * @param paginationConfig - optional pagination config. * @returns AsyncIterable of {@link ListActivitiesCommandOutput}. */ paginateListActivities(args?: ListActivitiesCommandInput, paginationConfig?: Omit): Paginator; /** * @see {@link ListExecutionsCommand} * @param args - command input. * @param paginationConfig - optional pagination config. * @returns AsyncIterable of {@link ListExecutionsCommandOutput}. */ paginateListExecutions(args?: ListExecutionsCommandInput, paginationConfig?: Omit): Paginator; /** * @see {@link ListMapRunsCommand} * @param args - command input. * @param paginationConfig - optional pagination config. * @returns AsyncIterable of {@link ListMapRunsCommandOutput}. */ paginateListMapRuns(args: ListMapRunsCommandInput, paginationConfig?: Omit): Paginator; /** * @see {@link ListStateMachinesCommand} * @param args - command input. * @param paginationConfig - optional pagination config. * @returns AsyncIterable of {@link ListStateMachinesCommandOutput}. */ paginateListStateMachines(args?: ListStateMachinesCommandInput, paginationConfig?: Omit): Paginator; } /** * Step Functions *

With Step Functions, you can create workflows, also called state machines, to build distributed applications, automate processes, orchestrate microservices, and create data and machine learning pipelines.

*

Through the Step Functions API, you can create, list, update, and delete state machines, activities, and other data types. You can start, stop, and redrive your state machines. Your activity workers can send task success, heartbeat, and failure responses.

*

With API calls, you can also manage other aspects of your workflow, such as tags, versions, and aliases.

*

For more information about developing solutions with Step Functions, see the * Step Functions Developer Guide * .

* *

If you use the Step Functions API actions using Amazon Web Services SDK integrations, make sure the API actions are in camel case and parameter names are in Pascal case. For example, you might use Step Functions API action startSyncExecution and specify its parameter as StateMachineArn.

*
* @public */ export declare class SFN extends SFNClient implements SFN { }