vedic-astrology-api
v1.0.9
Published
Node.js API for Vedic astrology calculations including Rasi, Nakshatra, Lagna and Birth Chart
Downloads
125
Maintainers
Readme
Vedic Astrology API
A comprehensive Node.js API for Vedic astrology calculations including Rasi, Nakshatra, Lagna, Birth Chart, Porutham compatibility, and Behavior predictions based on ancient Indian astrological principles.
✨ Features
- 🌙 Rasi (Moon Sign) Calculation
- ⭐ Nakshatra (Lunar Mansion) Analysis
- 🧭 Lagna (Ascendant) Determination
- 📊 Complete Birth Chart Generation
- 🔭 Navamsa Chart (D9) Calculations
- 💑 Porutham Compatibility Analysis
- 🧠 Behavior & Personality Predictions
- 🌍 Automatic Timezone Detection
- ⚡ High Performance with Caching
- 🛡️ Secure with Rate Limiting
🚀 Installation
Step 1: Install the package
npm install vedic-astrology-apiStep 2: Import it in your project
const { BirthChartGenerator } = require('vedic-astrology-api/lib/utils/birthchart');📖 Usage Guide
1. Generate Birth Chart
const { BirthChartGenerator, calculatePlanetaryPositions, calculateAscendant, createDate } = require('vedic-astrology-api/lib/utils');
// Create instance
const birthChartGenerator = new BirthChartGenerator();
// Create date
const date = createDate(1990, 5, 15, 10, 30, 5.5);
// Get planetary positions
const { positions, ayanamsa } = calculatePlanetaryPositions(date, 13.0827, 80.2707);
const ascendant = calculateAscendant(date, 13.0827, 80.2707);
// Generate chart
const birthChart = birthChartGenerator.generateBirthChart(positions, ascendant);
console.log('Houses:', birthChart.houses);
console.log('Planets:', birthChart.planets);2. Generate Navamsa Chart
const { ImprovedNavamsaChart } = require('vedic-astrology-api/lib/utils/navamsachart');
const navamsaCalculator = new ImprovedNavamsaChart();
const navamsaChart = navamsaCalculator.generateNavamsaChart(
Object.fromEntries(Object.entries(positions).map(([planet, data]) => [planet, data.longitude])),
ayanamsa,
ascendant,
{
date: '1990-05-15',
time: '10:30',
latitude: 13.0827,
longitude: 80.2707,
timezone: 5.5
}
);
console.log('Navamsa Chart:', navamsaChart);3. Porutham (Compatibility)
const { AccuratePoruthamCalculator } = require('vedic-astrology-api/lib/utils/porutham');
const poruthamCalculator = new AccuratePoruthamCalculator();
const person1Data = {
name: 'John',
gender: 'male',
date: new Date('1990-05-15T10:30:00'),
latitude: 13.0827,
longitude: 80.2707
};
const person2Data = {
name: 'Jane',
gender: 'female',
date: new Date('1992-08-22T14:45:00'),
latitude: 12.9716,
longitude: 77.5946
};
// Simplified
const simple = await poruthamCalculator.getSimplifiedCompatibility(person1Data, person2Data);
console.log('Compatibility %:', simple.compatibility.percentage);
// Detailed
const detailed = await poruthamCalculator.calculatePortuthamWithValidation(person1Data, person2Data);
console.log('Porutham Details:', detailed.poruthams);4. Behavior Predictions
const { BehaviorPredictor } = require('vedic-astrology-api/lib/utils/behaviorPredictor');
const behaviorPredictor = new BehaviorPredictor();
const behavior = behaviorPredictor.generateBehaviorPredictions(
birthChart,
{
ayanamsa,
ascendant,
rawPositions: Object.fromEntries(Object.entries(positions).map(([planet, data]) => [planet, data.longitude]))
},
ascendant,
{
birthDateTime: date.toISOString(),
coordinates: { latitude: 13.0827, longitude: 80.2707 },
timezone: 5.5
}
);
console.log('Behavior Predictions:', behavior);5. Utility Functions
const { getRashiFromLongitude, getNakshatraFromLongitude, validateInput } = require('vedic-astrology-api/lib/utils/common');
const moonLongitude = positions.Moon.longitude;
console.log('Moon Rashi:', getRashiFromLongitude(moonLongitude));
console.log('Moon Nakshatra:', getNakshatraFromLongitude(moonLongitude));
console.log('Lagna:', getRashiFromLongitude(ascendant));
// Validate
const errors = validateInput({
year: 1990,
month: 5,
day: 15,
hour: 10,
minute: 30,
latitude: 13.0827,
longitude: 80.2707,
timezone: 5.5
});
if (errors.length > 0) console.error(errors);6. Complete Service Example
const {
BirthChartGenerator,
ImprovedNavamsaChart,
AccuratePoruthamCalculator,
BehaviorPredictor,
calculatePlanetaryPositions,
calculateAscendant,
createDate,
validateInput
} = require('vedic-astrology-api/lib/utils');
class CustomAstrologyService {
constructor() {
this.birthChartGenerator = new BirthChartGenerator();
this.navamsaCalculator = new ImprovedNavamsaChart();
this.poruthamCalculator = new AccuratePoruthamCalculator();
this.behaviorPredictor = new BehaviorPredictor();
}
async generateCompleteReport(birthData) {
const errors = validateInput(birthData);
if (errors.length > 0) throw new Error(errors.join(', '));
const date = createDate(
birthData.year,
birthData.month,
birthData.day,
birthData.hour,
birthData.minute,
birthData.timezone
);
const { positions, ayanamsa } = calculatePlanetaryPositions(date, birthData.latitude, birthData.longitude);
const ascendant = calculateAscendant(date, birthData.latitude, birthData.longitude);
return {
birthChart: this.birthChartGenerator.generateBirthChart(positions, ascendant),
navamsaChart: this.navamsaCalculator.generateNavamsaChart(
Object.fromEntries(Object.entries(positions).map(([planet, data]) => [planet, data.longitude])),
ayanamsa,
ascendant,
{
date: `${birthData.year}-${birthData.month}-${birthData.day}`,
time: `${birthData.hour}:${birthData.minute}`,
latitude: birthData.latitude,
longitude: birthData.longitude,
timezone: birthData.timezone
}
),
behaviorPredictions: this.behaviorPredictor.generateBehaviorPredictions(
this.birthChartGenerator.generateBirthChart(positions, ascendant),
{
ayanamsa,
ascendant,
rawPositions: Object.fromEntries(Object.entries(positions).map(([planet, data]) => [planet, data.longitude]))
},
ascendant,
{
birthDateTime: date.toISOString(),
coordinates: { latitude: birthData.latitude, longitude: birthData.longitude },
timezone: birthData.timezone
}
),
planetaryPositions: positions,
ayanamsa,
ascendant
};
}
}
const astrologyService = new CustomAstrologyService();
const report = await astrologyService.generateCompleteReport({
year: 1990,
month: 5,
day: 15,
hour: 10,
minute: 30,
latitude: 13.0827,
longitude: 80.2707,
timezone: 5.5
});