mealz-hub
v0.6.0
Published
A core library for Mealz applications providing shared models, services, and HTTP utilities.
Downloads
517
Readme
Mealz Hub
A core library for Mealz applications providing shared models, services, and HTTP utilities.
Features
- Shared Models: Recipe, Ingredient, and other common data structures
- HTTP Service: Centralized HTTP client with automatic header management
- Configuration Service: Manages authentication, session, and API configuration
- Recipe Service: Example service showing how to make API calls
Installation
npm install mealz-hubQuick Start
1. Initialize the Library (Once at Startup)
import { initializeMealzHub } from 'mealz-hub';
// Initialize the entire library once at application startup
await initializeMealzHub({
apiUrl: 'https://api.miam.tech',
version: '1.0.0',
language: 'fr',
origin: 'web'
});2. Use Any Service
import { RecipeService } from 'mealz-hub';
// Get all recipes
const recipes = await RecipeService.getRecipes();
// Get a specific recipe
const recipe = await RecipeService.getRecipeById('recipe-123');
// Search recipes
const searchResults = await RecipeService.searchRecipes('pasta');3. Advanced Configuration
import { getMealzHub } from 'mealz-hub';
// Get the main service instance
const mealzHub = getMealzHub();
// Update authentication
mealzHub.updateAuth(
'your-jwt-token',
'user-id',
'authless-id'
);
// Update session configuration
mealzHub.updateSession(
'session-id',
true // enable profiling
);
// Reload configuration from localStorage/sessionStorage
mealzHub.reloadConfig();
// Check if initialized
if (mealzHub.initialized) {
console.log('mealz-hub is ready!');
}Configuration
The library automatically handles:
- Authentication Headers: Bearer tokens and user IDs
- Session Management: Session IDs and profiling preferences
- API Headers: Origin, version, language, and API version
- CORS: Automatic credentials inclusion
- Pagination: Automatic handling of pagination metadata
Storage Keys
The library reads from these storage keys:
localStorage['_miam/userToken']- JWT tokenlocalStorage['_miam/userId']- User IDlocalStorage['_miam/authlessId']- Authless user IDsessionStorage['_miam/sessionId']- Session IDlocalStorage['_miam/authless-forbid-profiling']- Profiling preference
Architecture
Services
- MealzHubService: Main service managing initialization and providing access to all other services
- ConfigService: Singleton managing all configuration
- HttpService: Singleton HTTP client with automatic header management
- RecipeService: Example service showing API integration
Initialization Flow
- Single Initialization: Call
initializeMealzHub()once at application startup - Shared HTTP Client: All services use the same HTTP client instance
- Centralized Configuration: All configuration managed in one place
Models
- Recipe: Recipe data structure
- Ingredient: Ingredient data structure
- ApiResponse: Standard API response wrapper
Development
# Build the library
npm run build
# Watch for changes
npm run dev
# Run tests
npm test
# Type checking
npm run type-checkIntegration with Angular Interceptor
This library provides the same functionality as the Angular interceptor service but in a framework-agnostic way. It handles:
- Authentication headers
- Session management
- API versioning
- CORS configuration
- Pagination metadata
- Error handling
Example Usage in Components
import { RecipeService, initializeMealzHub } from 'mealz-hub';
export class MyComponent {
async ngOnInit() {
// Initialize the library once (should be done at app startup)
await initializeMealzHub({
apiUrl: 'https://api.miam.tech',
version: '1.0.0',
language: 'fr',
origin: 'web'
});
// Use any service
const recipes = await RecipeService.getRecipes();
console.log('Recipes loaded:', recipes);
}
}Example Usage in App Startup
// In your main.ts or app initialization
import { initializeMealzHub } from 'mealz-hub';
async function bootstrap() {
// Initialize mealz-hub once
await initializeMealzHub({
apiUrl: 'https://api.miam.tech',
version: '1.0.0',
language: 'fr',
origin: 'web'
});
// Start your app
// ...
}