-
Notifications
You must be signed in to change notification settings - Fork 662
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
replace axios with fetch #1525
Comments
Hi @jimmywarting, thanks for the suggestion! Although are not planning to work on the replacement in the short term (due to our priorities right now), I agree that we can make the API client package simpler in the interest of broader use cases in the future. |
It would be great if this were structured in such a way so that it could then work with runtimes that don't support Node, e.g. Cloudflare Workers/V8 isolates. |
often when i code things then i have this mindset of coding things in a more cross env friendlier way and i'm also following this guidelines: https://github.com/cross-js/cross-js The most fundamentals is to think of your application as an "onion" architecture that has different layers of supports. // Just one idea:
new WebClient({
/**
* - This option is required if you do not have globalThis.fetch or `globalThis.Response`
* - Omitting this option makes it so slack call `fetch()` for you.
*
* Same arguments you would use for making a `new Request(url, requestInit)`
* the config.headers is either a 2D array or an object instead of a `Headers` class
*
* @param {string} url
* @param {RequestInit} config
*/
onfetch (url, config) {
config.signal = signal // add your own abort signal
config.agent = agent // useful in NodeJS only
// check if it exist in localStorage and if so return a new Response() manually
return fetch(url, config)
}
}) this way the developer can use whatever they already might have as an dependency , they might already depend on some node-fetch, got, axios, request or undici version, so you would then also avoid some duplicate code |
it would also be grate if you could change buffer for uint8array instead. |
I agree this is a great suggestion, as the use of axios makes this package less portable (to other runtimes like Deno, among other use cases). However, axios provides many different configuration options, like proxy support, which, if I understand correctly, is an important option used by many Slack application developers today (particularly in corporate environments). So whatever replacement would be adequate, I just wanted to explicitly point out the need to maintain some amount of backwards compatibility for these secondary features like proxy support. |
And security 🧐 Snyk just posted this CSRF issue with Axios. |
Worth revisiting this issue as I am inching towards a new major release of web-api (with things like better type safety of API arguments). In the next release, web-api will require node v18 minimum. I wonder if in node 18+ it is easier to implement some of the more corporate-y features web-api provides like proxies. |
An update here is that axios 1.7 has a |
The trick to resolving this issue and enabling ☝️ , I suppose, is the balance between:
2.b. sounds unreasonable to me as many Slack customers heavily rely on this feature. Given that, I am not sure what approach could be taken to both support the more corporate-y / proxy requirements as well as enabling an http client adapter / override ability for developers. Open to suggestions, though! |
Is there any current way to use this in the cloudflare workers runtime? I'm trying to use it with the latest axios with the fetch runtime but I get |
(Describe your issue and goal here)
Packages:
Select all that apply:
@slack/web-api
@slack/rtm-api
@slack/webhooks
@slack/oauth
@slack/socket-mode
@slack/types
Requirements
could you replace axios with fetch instead?
And preferable don't depend on any FormData, Blob, XHR, fetch dependency? let users bring there own instances instead b/c they exist globally in NodeJS now and if they need they can polyfill this stuff by themself. using undici, node-fetch or anything else
The text was updated successfully, but these errors were encountered: