1.0.2 • Published 5 months ago

leumas-axios v1.0.2

Weekly downloads
-
License
ISC
Repository
-
Last release
5 months ago

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

1.0.2

5 months ago

1.0.1

5 months ago

1.0.0

5 months ago