Open name-jerry opened 1 month ago
@name-jerry Are you thinking this is something that would be added in the config, and put in an environment variable?
@name-jerry Are you thinking this is something that would be added in the config, and put in an environment variable?
I have seen how to configure environment variables using config. I want to add a default variable such as response; It is used to store the returned results and then run lua to retrieve the variables for later requests
@oysandvik94 I also think this would be a nice to have feature.
@name-jerry Are you thinking this is something that would be added in the config, and put in an environment variable?
I think, the easiest method would be to have the ability to define a script per collection. I'm thinking it would look something like this,
:CurlCollection post-request
would ask for user to select the collection they want the script for, or use the currently opened one or be explicit :CurlCollection post-request <collection-name>
. lua
file in the data directory which would be executed after every curl request made in that collection.And if the user wants the script to be only executed on a specific curl request, they could add specific conditions inside the script like this
if req.path == "/api/v1/login" and req.method == "POST" then
vim.fn.setenv("TOKEN", res.json.token)
return
end
Now that I'm thinking about it, this method could solve #29 and #12
i.e, you could define a pre-request
command, that would create a lua script which will be executed before every single curl request in a collection.
And in that file could define your envs, tokens etc like so
vim.fn.setenv("HOST", "http://localhost:8080")
vim.fn.setenv("TOKEN", "....")
@oysandvik94 I also think this would be a nice to have feature.
@name-jerry Are you thinking this is something that would be added in the config, and put in an environment variable?
I think, the easiest method would be to have the ability to define a script per collection. I'm thinking it would look something like this,
:CurlCollection post-request
would ask for user to select the collection they want the script for, or use the currently opened one or be explicit:CurlCollection post-request <collection-name>
.- This would then create a
lua
file in the data directory which would be executed after every curl request made in that collection.And if the user wants the script to be only executed on a specific curl request, they could add specific conditions inside the script like this
if req.path == "/api/v1/login" and req.method == "POST" then vim.fn.setenv("TOKEN", res.json.token) return end
Now that I thinking about it, this method could solve #29 and #12 i.e, you could define a
pre-request
command, that would create a lua script which will be executed before every single curl request in a collection. And in that file could define your envs, tokens etc like sovim.fn.setenv("HOST", "http://localhost:8080") vim.fn.setenv("TOKEN", "....")
It's a great idea to reuse code, but my idea is more like resty's implementation;or something like the following:
curl http://url/api/v1/login
-H 'Content-Type: application/json'
-d
{
username: "admin",
password:"xx"
-- username: "user",
-- password:"xx"
}
###lua
-- The response variable contains the result returned by the above cURL command.
ctx.token=response.json().token
###
curl http://url/api/v1/resource-name
-H "Authorization: Bearer $token"
-H 'Content-Type: application/json'
-d
{
id:xx
}
This way I can quickly switch accounts as needed.
I see what you guys mean! This is probably possible, I like both suggestions. Biggest issue at the moment is that curl.nvim is kinda dumb when it comes to parsing. It really just grabs the curl command under the cursor, does some minor cleanup before executing it, then seperates the response body from the headers and just shows the response to the user. So it doesn't do any parsing really to get things such as method, path, headers or whatever. I do want to implement that at some point though.
But it shouldnt be hard to just grab a field from the response json using lua's json thing.
Just a wild idea: I'm guessing 99% of use cases of adding lua scripts is to store something from the respone to use it in another request, which in 90% of cases is a bearer token. Can we just add some syntax to the curl stuff itself?
const tokenResponse = curl http://url/api/v1/login
-H 'Content-Type: application/json'
-d
{
username: "admin",
password:"xx"
}
curl http://url/api/v1/resource-name
-H "Authorization: Bearer $tokenRespones.token"
-H 'Content-Type: application/json'
-d
{
id:xx
}
I see what you guys mean! This is probably possible, I like both suggestions. Biggest issue at the moment is that curl.nvim is kinda dumb when it comes to parsing. It really just grabs the curl command under the cursor, does some minor cleanup before executing it, then seperates the response body from the headers and just shows the response to the user. So it doesn't do any parsing really to get things such as method, path, headers or whatever. I do want to implement that at some point though.
But it shouldnt be hard to just grab a field from the response json using lua's json thing.
Just a wild idea: I'm guessing 99% of use cases of adding lua scripts is to store something from the respone to use it in another request, which in 90% of cases is a bearer token. Can we just add some syntax to the curl stuff itself?
const tokenResponse = curl http://url/api/v1/login -H 'Content-Type: application/json' -d { username: "admin", password:"xx" } curl http://url/api/v1/resource-name -H "Authorization: Bearer $tokenRespones.token" -H 'Content-Type: application/json' -d { id:xx }
It's a great idea to let curl just be curl;I'm pretty sure that's what I want
I see what you guys mean! This is probably possible, I like both suggestions. Biggest issue at the moment is that curl.nvim is kinda dumb when it comes to parsing. It really just grabs the curl command under the cursor, does some minor cleanup before executing it, then seperates the response body from the headers and just shows the response to the user. So it doesn't do any parsing really to get things such as method, path, headers or whatever. I do want to implement that at some point though.
But it shouldnt be hard to just grab a field from the response json using lua's json thing.
Just a wild idea: I'm guessing 99% of use cases of adding lua scripts is to store something from the respone to use it in another request, which in 90% of cases is a bearer token. Can we just add some syntax to the curl stuff itself?
const tokenResponse = curl http://url/api/v1/login -H 'Content-Type: application/json' -d { username: "admin", password:"xx" } curl http://url/api/v1/resource-name -H "Authorization: Bearer $tokenRespones.token" -H 'Content-Type: application/json' -d { id:xx }
It's a great idea to let curl just be curl;I'm pretty sure that's what I want
Yup, I agree as well
Sweet, I'll try this weekend. With this I can eventually formalize the syntax and create an LSP too maybe for autocompletion and stuff.
Just an update on this:
Sorry this got delayed. I had some problems with the test setup, so I decided to switch to mini.test and rewrite all the tests. I've done that now, so I'll continue on this.
Just an update on this:
Sorry this got delayed. I had some problems with the test setup, so I decided to switch to mini.test and rewrite all the tests. I've done that now, so I'll continue on this.
Thank you for your work on the project. I'm looking forward to seeing the results.
Since I went MIA for so long last time I thought I'd give a little update: I'm very close now, so hopefully I'll be finished early next week. I'm in the process of starting a new job, so I've been a bit busy lately,
For example, save the token from the response result into a variable for future use.