[ {lager, [ {error_logger_hwm, 600}, {log_root, "/var/log/fistful-server"}, {crash_log, "crash.log"}, {handlers, [ {lager_file_backend, [ {file, "console.json"}, {level, debug}, {formatter, lager_logstash_formatter} ]} ]} ]}, {scoper, [ {storage, scoper_storage_lager} ]}, {dmt_client, [ {max_cache_size, #{ elements => 1 }}, {service_urls, #{ 'Repository' => <<"http://dominant:8022/v1/domain/repository">>, 'RepositoryClient' => <<"http://dominant:8022/v1/domain/repository_client">> }} ]}, {fistful, [ {providers, #{ <<"ncoeps">> => #{ payment_institution_id => 100, routes => [<<"mocketbank">>], identity_classes => #{ <<"person">> => #{ name => <<"Person">>, contract_template_id => 10000, initial_level => <<"anonymous">>, levels => #{ <<"anonymous">> => #{ name => <<"Anonymous">>, contractor_level => none }, <<"partly-identified">> => #{ name => <<"Partially identified">>, contractor_level => partial }, <<"identified">> => #{ name => <<"Fully identified">>, contractor_level => full } }, challenges => #{ <<"esia">> => #{ name => <<"ЕСИА">>, base => <<"anonymous">>, target => <<"partly-identified">> } } } } } }}, {services, #{ 'partymgmt' => "http://hellgate:8022/v1/processing/partymgmt", 'accounter' => "http://shumway:8022/accounter", 'identification' => "http://identification:8022/v1/identification" }} ]}, {ff_transfer, [ {withdrawal, #{provider => #{ <<"mocketbank">> => #{ adapter => #{ event_handler => scoper_woody_event_handler, url => <<"http://adapter-mocketbank:8022/proxy/mocketbank/p2p-credit">> }, adapter_opts => #{}, accounts => #{ <<"RUB">> => #{ id => <<"some_id">>, identity => <<"some_other_id">>, currency => <<"RUB">>, accounter_account_id => 123 } }, fee => #{<<"RUB">> => #{postings => []}} } }, system => #{ accounts => #{ settlement => #{ <<"RUB">> => #{ id => <<"system_some_id">>, identity => <<"system_some_other_id">>, currency => <<"RUB">>, accounter_account_id => <<"system_some_third_id">> } }, subagent => #{ <<"RUB">> => #{ id => <<"system_some_id">>, identity => <<"system_some_other_id">>, currency => <<"RUB">>, accounter_account_id => <<"system_some_third_id">> } } } } }}, {max_session_poll_timeout, 14400} %% 4h ]}, %% wapi {wapi, [ {ip, "::"}, {port, 8080}, %% To send ASCII text in 5xx replies %% {oops_bodies, #{ %% 500 => "oops_bodies/500_body" %% }}, {realm, <<"external">>}, {public_endpoint, <<"http://wapi">>}, {authorizers, #{ jwt => #{ signee => wapi, keyset => #{ wapi => {pem_file, "var/keys/wapi/private.pem"} } } }}, {health_checkers, [ {erl_health, service , [<<"wapi">>]} ]}, {max_deadline, 60000}, % milliseconds {file_storage_url_lifetime, 60} % seconds ]}, {wapi_woody_client, [ {service_urls, #{ webhook_manager => "http://hooker:8022/hook", cds_storage => "http://cds:8022/v1/storage", identdoc_storage => "http://cds:8022/v1/identity_document_storage", fistful_stat => "http://fistful-magista:8022/stat" }}, {api_deadlines, #{ wallet => 5000 % millisec }}, {service_retries, #{ party_management => #{ % function => retry strategy % '_' work as "any" % default value is 'finish' % for more info look genlib_retry :: strategy() % https://github.com/rbkmoney/genlib/blob/master/src/genlib_retry.erl#L19 'Get' => {linear, 3, 1000}, '_' => finish } }} ]}, {ff_server, [ {ip, "::"}, {port, 8022}, {woody_opts, #{ net_opts => [ % Bump keepalive timeout up to a minute {timeout, 60000} ] }}, {services, #{ 'eventsink' => "http://machinegun:8022/v1/event_sink", 'automaton' => "http://machinegun:8022/v1/automaton" }}, {admin, #{ %% handler_limits => #{}, path => <<"/v1/admin">> }}, {net_opts, [ % Bump keepalive timeout up to a minute {timeout, 60000} ]}, {health_checkers, [ {erl_health, disk , ["/", 99] }, {erl_health, cg_memory, [99] }, {erl_health, service , [<<"fistful-server">>]} ]}, {eventsink, #{ identity => #{ namespace => <<"ff/identity">>, path => <<"/v1/eventsink/identity">> }, wallet => #{ namespace => <<"ff/wallet_v2">>, path => <<"/v1/eventsink/wallet">> }, withdrawal => #{ namespace => <<"ff/withdrawal_v2">>, path => <<"/v1/eventsink/withdrawal">> }, deposit => #{ namespace => <<"ff/deposit_v1">>, path => <<"/v1/eventsink/deposit">> }, destination => #{ namespace => <<"ff/destination_v2">>, path => <<"/v1/eventsink/destination">> }, source => #{ namespace => <<"ff/source_v1">>, path => <<"/v1/eventsink/source">> }, withdrawal_session => #{ namespace => <<"ff/withdrawal/session_v2">>, path => <<"/v1/eventsink/withdrawal/session">> } }} ]} ].