-module(aion_client). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/aion_client.gleam"). -export([connect/1, with_transport/2, start_raw/3, start/4, signal_raw/3, signal/4, query_payload/3, query_raw/4, 'query'/5, cancel/2, list/2, describe/2, latest_run/2, default_list_options/1, workflow_ids/1]). -export_type([config/0, client/0, workflow_handle/0, transport/0, start_options/0, signal_options/0, query_options/0, cancel_options/0, list_options/0, describe_options/0, start_request/0, start_response/0, signal_request/0, query_request/0, cancel_request/0, list_request/0, describe_request/0, workflow_summary/0, workflow_description/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC(" Caller-side SDK for aion-server workflow operations.\n"). -type config() :: {config, binary(), gleam@option:option(binary()), binary(), boolean()}. -type client() :: {client, config(), transport()}. -type workflow_handle() :: {workflow_handle, client(), binary(), binary()}. -type transport() :: {transport, fun((config(), start_request()) -> {ok, start_response()} | {error, aion_client@error:error()}), fun((config(), signal_request()) -> {ok, nil} | {error, aion_client@error:error()}), fun((config(), query_request()) -> {ok, aion_client@payload:payload()} | {error, aion_client@error:error()}), fun((config(), cancel_request()) -> {ok, nil} | {error, aion_client@error:error()}), fun((config(), list_request()) -> {ok, list(workflow_summary())} | {error, aion_client@error:error()}), fun((config(), describe_request()) -> {ok, workflow_description()} | {error, aion_client@error:error()})}. -type start_options() :: {start_options, binary(), binary(), binary(), gleam@option:option(binary())}. -type signal_options() :: {signal_options, binary(), gleam@option:option(binary()), binary()}. -type query_options() :: {query_options, binary(), gleam@option:option(binary()), binary()}. -type cancel_options() :: {cancel_options, binary(), gleam@option:option(binary()), binary()}. -type list_options() :: {list_options, gleam@option:option(binary())}. -type describe_options() :: {describe_options, binary(), gleam@option:option(binary())}. -type start_request() :: {start_request, start_options(), aion_client@payload:payload()}. -type start_response() :: {start_response, binary(), binary()}. -type signal_request() :: {signal_request, signal_options(), aion_client@payload:payload()}. -type query_request() :: {query_request, query_options(), aion_client@payload:payload()}. -type cancel_request() :: {cancel_request, cancel_options()}. -type list_request() :: {list_request, list_options()}. -type describe_request() :: {describe_request, describe_options()}. -type workflow_summary() :: {workflow_summary, binary(), binary(), binary(), binary()}. -type workflow_description() :: {workflow_description, binary(), binary(), binary(), binary()}. -file("src/aion_client.gleam", 256). -spec unavailable_transport() -> transport(). unavailable_transport() -> {transport, fun(_, _) -> {error, unavailable} end, fun(_, _) -> {error, unavailable} end, fun(_, _) -> {error, unavailable} end, fun(_, _) -> {error, unavailable} end, fun(_, _) -> {error, unavailable} end, fun(_, _) -> {error, unavailable} end}. -file("src/aion_client.gleam", 120). ?DOC( " Connect once to an aion-server deployment. The current implementation stores\n" " validated connection configuration and reuses it for all operations; concrete\n" " transport failures surface as operation Results, preserving branchable errors.\n" ). -spec connect(config()) -> {ok, client()} | {error, aion_client@error:error()}. connect(Config) -> case (erlang:element(2, Config) =:= <<""/utf8>>) orelse (erlang:element( 4, Config ) =:= <<""/utf8>>) of true -> {error, invalid_argument}; false -> {ok, {client, Config, unavailable_transport()}} end. -file("src/aion_client.gleam", 129). ?DOC( " Test/conformance hook for injecting an HTTP/WebSocket transport while keeping\n" " the public SDK semantics identical.\n" ). -spec with_transport(config(), transport()) -> {ok, client()} | {error, aion_client@error:error()}. with_transport(Config, Transport) -> case (erlang:element(2, Config) =:= <<""/utf8>>) orelse (erlang:element( 4, Config ) =:= <<""/utf8>>) of true -> {error, invalid_argument}; false -> {ok, {client, Config, Transport}} end. -file("src/aion_client.gleam", 148). -spec start_raw(client(), start_options(), aion_client@payload:payload()) -> {ok, workflow_handle()} | {error, aion_client@error:error()}. start_raw(Client, Options, Input) -> {client, Config, Transport} = Client, case (erlang:element(2, Transport))(Config, {start_request, Options, Input}) of {ok, {start_response, Workflow_id, Run_id}} -> {ok, {workflow_handle, Client, Workflow_id, Run_id}}; {error, Error} -> {error, Error} end. -file("src/aion_client.gleam", 139). -spec start(client(), start_options(), FFY, fun((FFY) -> gleam@json:json())) -> {ok, workflow_handle()} | {error, aion_client@error:error()}. start(Client, Options, Input, Encoder) -> start_raw(Client, Options, aion_client@payload:encode(Input, Encoder)). -file("src/aion_client.gleam", 175). -spec signal_raw(client(), signal_options(), aion_client@payload:payload()) -> {ok, nil} | {error, aion_client@error:error()}. signal_raw(Client, Options, Input) -> {client, Config, Transport} = Client, (erlang:element(3, Transport))(Config, {signal_request, Options, Input}). -file("src/aion_client.gleam", 166). -spec signal(client(), signal_options(), FGD, fun((FGD) -> gleam@json:json())) -> {ok, nil} | {error, aion_client@error:error()}. signal(Client, Options, Input, Encoder) -> signal_raw(Client, Options, aion_client@payload:encode(Input, Encoder)). -file("src/aion_client.gleam", 206). -spec query_payload(client(), query_options(), aion_client@payload:payload()) -> {ok, aion_client@payload:payload()} | {error, aion_client@error:error()}. query_payload(Client, Options, Args) -> {client, Config, Transport} = Client, (erlang:element(4, Transport))(Config, {query_request, Options, Args}). -file("src/aion_client.gleam", 194). -spec query_raw( client(), query_options(), aion_client@payload:payload(), gleam@dynamic@decode:decoder(FGN) ) -> {ok, FGN} | {error, aion_client@error:error()}. query_raw(Client, Options, Args, Decoder) -> case query_payload(Client, Options, Args) of {ok, Reply} -> aion_client@payload:decode(Reply, Decoder); {error, Error} -> {error, Error} end. -file("src/aion_client.gleam", 184). -spec 'query'( client(), query_options(), FGI, fun((FGI) -> gleam@json:json()), gleam@dynamic@decode:decoder(FGJ) ) -> {ok, FGJ} | {error, aion_client@error:error()}. 'query'(Client, Options, Args, Encoder, Decoder) -> query_raw( Client, Options, aion_client@payload:encode(Args, Encoder), Decoder ). -file("src/aion_client.gleam", 215). -spec cancel(client(), cancel_options()) -> {ok, nil} | {error, aion_client@error:error()}. cancel(Client, Options) -> {client, Config, Transport} = Client, (erlang:element(5, Transport))(Config, {cancel_request, Options}). -file("src/aion_client.gleam", 220). -spec list(client(), list_options()) -> {ok, list(workflow_summary())} | {error, aion_client@error:error()}. list(Client, Options) -> {client, Config, Transport} = Client, (erlang:element(6, Transport))(Config, {list_request, Options}). -file("src/aion_client.gleam", 228). -spec describe(client(), describe_options()) -> {ok, workflow_description()} | {error, aion_client@error:error()}. describe(Client, Options) -> {client, Config, Transport} = Client, (erlang:element(7, Transport))(Config, {describe_request, Options}). -file("src/aion_client.gleam", 236). -spec latest_run(gleam@option:option(binary()), binary()) -> binary(). latest_run(Run_id, Default_run_id) -> case Run_id of {some, Run_id@1} -> Run_id@1; none -> Default_run_id end. -file("src/aion_client.gleam", 243). -spec default_list_options(config()) -> list_options(). default_list_options(Config) -> {config, _, _, Namespace, _} = Config, {list_options, {some, Namespace}}. -file("src/aion_client.gleam", 248). -spec workflow_ids(list(workflow_summary())) -> list(binary()). workflow_ids(Summaries) -> _pipe = Summaries, gleam@list:map( _pipe, fun(Summary) -> {workflow_summary, Workflow_id, _, _, _} = Summary, Workflow_id end ).