# JS HttpAgent.create timeout

**URL:** <https://forum.dfinity.org/t/js-httpagent-create-timeout/39594>\
**Category:** Developers\
**Created:** [January 2, 2025, 3:35pm UTC](https://forum.dfinity.org/t/js-httpagent-create-timeout/39594 "2025-01-02T15:35:33Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![dariuszdawidowski](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/dariuszdawidowski/32/16243_2.png) [@dariuszdawidowski](https://forum.dfinity.org/u/dariuszdawidowski)\
**Post date:** [January 2, 2025, 3:35pm UTC](https://forum.dfinity.org/t/js-httpagent-create-timeout/39594/1 "2025-01-02T15:35:33Z")

</div>

Today I’m experiencing IC overload and it is a good opportunity to handle this in my apps.  
But actually for the best user experience I’d like to display message after 10 seconds of waiting.  
At this monent it throws errors after a very long peroid - many minutes. From user’s point of view it looks like frozen app.

I see there is some idle timeouts already but what about first connection timeout?

Most popular error message is:  
Failed to load resource: net::ERR\_CONNECTION\_TIMED\_OUT  
[icp-api.io/api/v2/canister/ryjl3-tyaaa-aaaaa-aaaba-cai/read\_state:1](http://icp-api.io/api/v2/canister/ryjl3-tyaaa-aaaaa-aaaba-cai/read_state:1)

---

<div class="post-metadata">

**Author:** ![sea-snake](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/sea-snake/32/7243_2.png) [@sea-snake](https://forum.dfinity.org/u/sea-snake)\
**Post date:** [January 3, 2025, 12:49am UTC](https://forum.dfinity.org/t/js-httpagent-create-timeout/39594/2 "2025-01-03T00:49:16Z")

</div>

You can try to implement and pass a custom backoff strategy as `backoffStrategy` option while creating a HttpAgent instance.

The default strategy seems to have an exponential backoff with a timeout at 5 minutes, it can be found here: [agent-js/packages/agent/src/polling/strategy.ts at main · dfinity/agent-js · GitHub](https://github.com/dfinity/agent-js/blob/main/packages/agent/src/polling/strategy.ts#L19)

---

<div class="post-metadata">

**Author:** ![dariuszdawidowski](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/dariuszdawidowski/32/16243_2.png) [@dariuszdawidowski](https://forum.dfinity.org/u/dariuszdawidowski)\
**Post date:** [January 6, 2025, 10:06am UTC](https://forum.dfinity.org/t/js-httpagent-create-timeout/39594/3 "2025-01-06T10:06:38Z")

</div>

Thank you for response ! I’ll test it.

---

<div class="post-metadata">

**Author:** ![Vivienne](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/vivienne/32/29170_2.png) [@Vivienne](https://forum.dfinity.org/u/Vivienne)\
**Post date:** [January 6, 2025, 1:29pm UTC](https://forum.dfinity.org/t/js-httpagent-create-timeout/39594/4 "2025-01-06T13:29:51Z")

</div>

Word of warning: if you manually timeout your request after e.g. 10 seconds this does not necessarily mean that the request will not happen. If the agent retries (automatically, or manually if a user retries the failed operation) you may end up with duplicate transactions. In that case I would suggest that you use idempotency keys like the ledger’s `created_at_time` key

---

<div class="post-metadata">

**Author:** ![dariuszdawidowski](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.dfinity.org/dariuszdawidowski/32/16243_2.png) [@dariuszdawidowski](https://forum.dfinity.org/u/dariuszdawidowski)\
**Post date:** [January 6, 2025, 2:30pm UTC](https://forum.dfinity.org/t/js-httpagent-create-timeout/39594/5 "2025-01-06T14:30:02Z")

</div>

thank you for the information, I will remember about it.
