leumas-axios v1.0.2
Leumas Axios
Leumas Axios is an advanced wrapper around Axios that extends the full capabilities of Axios with additional features designed for building conversational, multi-step API interactions. This package includes advanced methods, interactive helpers, and Express middleware to simplify the creation of multi-step POST endpoints.
Features
Full Axios API
Use all standard HTTP methods (get, post, put, delete, etc.) exactly as you would with Axios.Advanced Methods
- multiGet: Fetch data concurrently from multiple endpoints.
- multiPost: Perform multi-step POST requests with a built-in feedback loop to gather missing information.
- generativePost: Automatically complete your payload using a provided schema generator.
Interactive Helpers
- askQuestion: Prompt the user via the terminal for input.
- promptForMissingFields: Automatically prompt for and collect values for any missing fields during a multi-step request.
Express Middleware
- multiPostMiddleware: Easily integrate multi-step POST functionality into your Express server, managing sessions and data aggregation.
Installation
Install Leumas Axios via npm:
npm i leumas-axios
Usage
Importing Leumas Axios
const AdvancedAxios = require('leumas-axios');
Creating an AdvancedAxios Instance
const AdvancedAxios = require('leumas-axios');
// and then you can ...
const advancedAxios = new AdvancedAxios({ timeout: 5000 });
Using Standard Axios Methods
const results = await axiosInstance.get('https://api.github.com/users/octocat')
.then(response => console.log(response.data))
.catch(error => console.error(error));
Using multiGet
// test/multi-get-test.js
const AdvancedAxios = require('leumas-axios');
// const AdvancedAxios = require('../index');
const advancedAxios = new AdvancedAxios({ timeout: 5000 });
async function testMultiGet() {
try {
const urls = [
'https://api.github.com/users/octocat',
'https://api.github.com/users/defunkt',
];
const responses = await advancedAxios.multiGet(urls);
console.log('multiGet responses:');
console.log(responses);
} catch (error) {
console.error('Error in multiGet test:', error);
}
}
testMultiGet();
Using multiPost
- Leumas Axios supports multi-step POST requests with an interactive feedback loop.
// tests/multi-post-test.js
const AdvancedAxios = require('leumas-axios');
const advancedAxios = new AdvancedAxios({ timeout: 5000 });
const multiPostUrl = 'http://localhost:7643/api/multi-post';
async function testMultiPost() {
try {
// Start with initial data that is intentionally incomplete.
const initialData = { }; // Missing "email"
const result = await advancedAxios.multiPost(
multiPostUrl,
{ data: initialData },
{
// onFeedback is called when the server indicates more data is required.
onFeedback: async (missingFields) => {
console.log('\nServer requires additional information:', missingFields);
// Use the built-in helper to prompt the user for each missing field.
const additionalData = await AdvancedAxios.promptForMissingFields(missingFields);
console.log('Received additional data:', additionalData);
return additionalData;
},
}
);
console.log('\nMulti-post process complete. Final result:');
console.log(result);
} catch (error) {
console.error('Error during multiPost test:', error);
}
}
testMultiPost();
Server.js
const express = require('express');
const bodyParser = require('body-parser');
const AdvancedAxios = require('leumas-axios');
const app = express();
app.use(bodyParser.json());
// Multi-post route requiring "name" and "email"
app.post(
'/api/multi-post',
AdvancedAxios.multiPostMiddleware(['name', 'email']),
(req, res) => {
res.json({
sessionId: req.sessionId,
status: 'completed',
data: req.multiPostData,
});
}
);
// Another multi-post route requiring "username" and "password"
app.post(
'/api/another-multi-post',
AdvancedAxios.multiPostMiddleware(['username', 'password']),
(req, res) => {
res.json({
sessionId: req.sessionId,
status: 'completed',
data: req.multiPostData,
});
}
);
const PORT = process.env.PORT || 7643;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
Using generativePost
-Automatically complete your payload with a schema generator function.
// test/generative-post-test.js
const AdvancedAxios = require('leumas-axios');
const advancedAxios = new AdvancedAxios({ timeout: 5000 });
const generativePostUrl = 'http://localhost:3000/api/generative-post';
async function testGenerativePost() {
try {
const initialData = { name: 'Alice' }; // Intentionally missing "email"
const result = await advancedAxios.generativePost(
generativePostUrl,
{ data: initialData },
{
// schemaGenerator simulates AI-based schema completion.
schemaGenerator: async (currentData) => {
console.log('Schema generator received data:', currentData);
// For demonstration, we add a missing email.
return { ...currentData, email: 'alice@example.com' };
},
}
);
console.log('generativePost result:');
console.log(result);
} catch (error) {
console.error('Error in generativePost test:', error);
}
}
testGenerativePost();
Express Middleware for Multi-Post
-Leumas Axios includes Express middleware for creating multi-step POST endpoints. This middleware manages sessions, aggregates data, and validates required fields.
Example Express Sevrer
const express = require('express');
const bodyParser = require('body-parser');
const AdvancedAxios = require('leumas-axios');
const app = express();
app.use(bodyParser.json());
// Multi-post route requiring "name" and "email"
app.post(
'/api/multi-post',
AdvancedAxios.multiPostMiddleware(['name', 'email']),
(req, res) => {
res.json({
sessionId: req.sessionId,
status: 'completed',
data: req.multiPostData,
});
}
);
// Another multi-post route requiring "username" and "password"
app.post(
'/api/another-multi-post',
AdvancedAxios.multiPostMiddleware(['username', 'password']),
(req, res) => {
res.json({
sessionId: req.sessionId,
status: 'completed',
data: req.multiPostData,
});
}
);
const PORT = process.env.PORT || 7643;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
Interactive Helpers
- Leumas Axios provides built-in interactive helper methods:
askQuestion(query): Prompts the user with a question and returns their input. promptForMissingFields(missingFields): Iterates over an array of missing fields and prompts the user to supply values.
Example Usage of Interactive Helpers
(async () => {
// Ask a single question
const answer = await AdvancedAxios.askQuestion('What is your email? ');
console.log('You entered:', answer);
// Prompt for multiple missing fields
const missingFields = ['email', 'phone'];
const responses = await AdvancedAxios.promptForMissingFields(missingFields);
console.log('Collected responses:', responses);
})();
Contributing
- Contributions are welcome! Please open an issue or submit a pull request on our GitHub repository.
License
- This project is licensed under the ISC License.
Author
- William Bermudez
- https://leumas.tech
- https://github.com/leumas-tech