luci-base: properly handle promise targets in Request.request()
authorJo-Philipp Wich <jo@mein.io>
Mon, 21 Feb 2022 13:59:16 +0000 (14:59 +0100)
committerJo-Philipp Wich <jo@mein.io>
Mon, 21 Feb 2022 14:09:48 +0000 (15:09 +0100)
commit1b6c126293edc9abc3b23b195a1dbe2cedf1756e
tree2ab16e6916a95d0f44f301e0206d5307f3b0dd9a
parent36e5c1c24baace19ce5acda58bdd3ffddd5a7169
luci-base: properly handle promise targets in Request.request()

Under some circumstances, ubus RPC requests may be initiated while LuCI is
still resolving the `rpcBaseURL` value. In this situation, the `target`
argument of the `request()` call will be a pending promise object which
results in an invalid URL when serialized by `expandURL()`, leading to an
`Failed to execute 'open' on 'XMLHttpRequest': Invalid URL` exception.

This commonly occured on the index status page which immediately initiates
ubus RPC calls on load to discover existing status page partials.

Solve the issue by filtering the given `target` argument through
`Promise.resolve()` before expanding the URL and initiating the actual
request.

Fixes: #3747
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(backported from commit 5663fd596b567d53587fcc4052df3095520c08a7)
modules/luci-base/htdocs/luci-static/resources/luci.js