UNPKG

@iota-big3/sdk-middleware

Version:

Express and Fastify middleware for School OS SDK - TypeScript Edition

334 lines (265 loc) 8.11 kB
# @iota-big3/sdk-middleware Industry-aware middleware collection for Express and Fastify applications using the iota-big3 SDK. ## Installation ```bash npm install @iota-big3/sdk-middleware @iota-big3/sdk-core ``` ## Features - 🔒 **Authentication** - JWT, API key, and session support - 📊 **Philosophy Tracking** - Monitor teacher time saved and student empowerment - 📝 **Logging** - Request/response logging with telemetry integration - ❌ **Error Handling** - Beautiful error formatting with helpful suggestions - 🌐 **CORS** - Industry-specific CORS policies - ⏱️ **Rate Limiting** - Adaptive rate limiting based on industry - ✅ **Compliance** - FERPA, HIPAA, PCI, GDPR enforcement - 🛡️ **Policy** - OPA integration for fine-grained access control ## Quick Start ```typescript import { SDK } from '@iota-big3/sdk-core'; import { createAuthMiddleware, createPhilosophyMiddleware, createLoggingMiddleware, createErrorMiddleware } from '@iota-big3/sdk-middleware'; import express from 'express'; // Initialize SDK const sdk = new SDK({ serviceName: 'my-service', industry: 'education' }); // Create Express app const app = express(); // Apply middleware app.use(createLoggingMiddleware(sdk)); app.use(createAuthMiddleware( { serviceName: 'my-service', industry: 'education', sdk }, { enableJWT: true, enableApiKey: true } )); app.use(createPhilosophyMiddleware(sdk)); app.use(createErrorMiddleware({ serviceName: 'my-service', sdk })); // Your routes app.post('/api/grades', (req, res) => { // Track teacher time saved res.trackTeacherTimeSaved(300, 'automated-grading'); res.json({ success: true }); }); app.listen(3000); ``` ## Middleware Components ### Authentication Middleware Supports multiple authentication methods with industry-aware defaults: ```typescript const authMiddleware = createAuthMiddleware( { serviceName: 'my-service', industry: 'healthcare', // Strict security for healthcare sdk }, { enableJWT: true, enableApiKey: true, enableSession: false, publicPaths: ['/health', '/api/public/*'], secret: process.env.JWT_SECRET, apiKeys: new Map([ ['key-1', { id: '1', name: 'Mobile App', hash: 'sha256-hash' }] ]) } ); ``` ### Philosophy Middleware Track and celebrate educational philosophy metrics: ```typescript const philosophyMiddleware = createPhilosophyMiddleware(sdk, { trackingEnabled: true, milestones: { firstTeacherLiberation: 60, // 1 minute saved significantLiberation: 3600, // 1 hour saved transformativeLiberation: 86400 // 1 day saved } }); // In your routes app.post('/api/lesson', (req, res) => { // Track time saved res.trackTeacherTimeSaved(1800, 'lesson-planning-ai'); // Track student empowerment res.trackStudentEmpowerment(30, 'self-paced-learning'); res.json({ success: true }); }); ``` ### Error Middleware Beautiful error handling with suggestions: ```typescript const errorMiddleware = createErrorMiddleware( { serviceName: 'my-service', industry: 'education', sdk }, { enableStackTrace: process.env.NODE_ENV !== 'production', customFormatter: (error, req) => ({ error: { code: error.code, message: error.message, suggestions: error.suggestions, path: req.path } }) } ); // Must be last middleware app.use(errorMiddleware); ``` ### CORS Middleware Industry-specific CORS policies: ```typescript const corsMiddleware = createCorsMiddleware( { serviceName: 'my-service', industry: 'finance' }, // Strict for finance { allowedOrigins: ['https://app.example.com'], credentials: true, maxAge: 1800 // 30 minutes for finance } ); ``` ### Rate Limiting Adaptive rate limiting by industry: ```typescript const rateLimitMiddleware = createRateLimitMiddleware( { serviceName: 'my-service', industry: 'retail' }, { windowMs: 10 * 60 * 1000, // 10 minutes max: 200, // Retail allows more requests skipSuccessfulRequests: true } ); ``` ### Compliance Middleware Enforce compliance frameworks: ```typescript const complianceMiddleware = createComplianceMiddleware( { serviceName: 'my-service', industry: 'healthcare' }, { frameworks: ['HIPAA', 'HITECH'], enforceEncryption: true, requireAuth: true, auditLog: true, sensitiveFields: ['ssn', 'patientId', 'diagnosis'] } ); ``` ### Policy Middleware OPA integration for policy-based access: ```typescript const policyMiddleware = createPolicyMiddleware( { serviceName: 'my-service', industry: 'education' }, { opaUrl: 'http://opa:8181', enforcementMode: 'enforce', philosophyEnforcement: true, philosophyMinScore: 70 } ); ``` ## Industry Defaults Each industry has tailored defaults: | Industry | Auth | CORS | Rate Limit | Compliance | Philosophy | |----------|------|------|------------|------------|------------| | Education | All methods | Permissive | 100/15min | FERPA, COPPA | Enforced | | Healthcare | Strict | Strict | 50/5min | HIPAA, HITECH | Optional | | Finance | Strict | Strict | 30/1min | PCI-DSS, SOX | Optional | | Retail | Flexible | Permissive | 200/10min | PCI | Optional | | Government | Strict | Strict | 40/5min | FISMA, FedRAMP | Optional | ## Migration from v1 ### Before (v1 - JavaScript) ```javascript const middleware = createMiddleware({ tribe: 'education', // Old terminology // Limited options }); ``` ### After (v2 - TypeScript) ```typescript const middleware = createMiddleware( { serviceName: 'my-service', industry: 'education', // New terminology sdk // SDK integration }, { // Full type safety // Many more options // Industry-aware defaults } ); ``` ### Legacy Support All middleware supports legacy patterns: ```typescript // Old pattern still works const middleware = createLegacyMiddleware({ tribe: 'education' }); // Console warning: ⚠️ Using legacy pattern. Please migrate. ``` ## Fastify Support All middleware supports both Express and Fastify: ```typescript import Fastify from 'fastify'; const fastify = Fastify(); // Register middleware await fastify.register(authMiddleware.fastify); await fastify.register(loggingMiddleware.fastify); fastify.listen({ port: 3000 }); ``` ## TypeScript Support Full TypeScript support with enhanced types: ```typescript import type { AuthMiddleware, AuthConfig, PhilosophyRequest, PhilosophyResponse } from '@iota-big3/sdk-middleware'; // Type-safe configuration const config: AuthConfig = { enableJWT: true, secret: process.env.JWT_SECRET! }; // Enhanced request/response types app.post('/api/lesson', (req: PhilosophyRequest, res: PhilosophyResponse) => { res.trackTeacherTimeSaved(300, 'ai-assistance'); }); ``` ## Testing ```typescript import { createAuthMiddleware } from '@iota-big3/sdk-middleware'; describe('Auth Middleware', () => { it('should authenticate JWT', () => { const middleware = createAuthMiddleware( { serviceName: 'test', industry: 'education' }, { enableJWT: true } ); // Test implementation }); }); ``` ## Best Practices 1. **Order Matters**: Apply middleware in this order: ```typescript app.use(loggingMiddleware); // First - log all requests app.use(corsMiddleware); // Early - handle preflight app.use(rateLimitMiddleware); // Before auth - prevent abuse app.use(authMiddleware); // Authenticate users app.use(complianceMiddleware); // Check compliance app.use(policyMiddleware); // Fine-grained access app.use(philosophyMiddleware); // Track metrics // ... your routes ... app.use(errorMiddleware); // Last - catch all errors ``` 2. **Industry Selection**: Choose the right industry for appropriate defaults 3. **Environment Variables**: Use env vars for sensitive configuration 4. **Error Handling**: Always include error middleware as the last middleware 5. **Testing**: Test middleware with your specific industry requirements ## Contributing See [CONTRIBUTING.md](../../CONTRIBUTING.md) for details. ## License MIT