@casoon/auditmysite
Version:
Professional website analysis suite with robust accessibility testing, Core Web Vitals performance monitoring, SEO analysis, and content optimization insights. Features isolated browser contexts, retry mechanisms, and comprehensive API endpoints for profe
368 lines (299 loc) • 9.3 kB
Markdown
# 🚀 AuditMySite SDK Examples
This directory contains comprehensive examples showing how to integrate the AuditMySite SDK into various environments and use cases.
## 📁 Examples Overview
### [`basic-usage.js`](./basic-usage.js) - Getting Started
Simple examples for beginners:
- Quick audit setup
- Fluent API usage
- Event listeners
- Error handling
### [`express-integration.js`](./express-integration.js) - Web Applications
Complete Express.js web application with:
- Web interface for audit submission
- Job queue management
- Real-time progress tracking
- Report download endpoints
### [`ci-cd-integration.js`](./ci-cd-integration.js) - CI/CD Pipelines
Production-ready CI/CD integration:
- Quality gates and thresholds
- JUnit test reports
- PR summary generation
- Slack/Teams notifications
- Badge generation
## 🔧 Quick Start
### 1. Basic SDK Usage
```javascript
const { AuditSDK } = require('auditmysite');
// Simple audit
const audit = new AuditSDK();
const result = await audit.quickAudit('https://example.com/sitemap.xml', {
maxPages: 5,
formats: ['html', 'json']
});
console.log(`Success Rate: ${result.summary.passedPages / result.summary.testedPages * 100}%`);
```
### 2. Fluent API with Events
```javascript
const audit = new AuditSDK();
const result = await audit.audit()
.sitemap('https://example.com/sitemap.xml')
.maxPages(10)
.formats(['html', 'markdown', 'csv'])
.includePerformance()
.on('audit:progress', (event) => {
console.log(`Progress: ${event.data.percentage}%`);
})
.on('audit:page:complete', (event) => {
const status = event.data.result.passed ? '✅' : '❌';
console.log(`${status} ${event.data.url}`);
})
.run();
```
### 3. REST API Server
```javascript
const { AuditAPIServer } = require('auditmysite');
const server = new AuditAPIServer({
port: 3000,
maxConcurrentJobs: 5
});
await server.start();
console.log('API Server running at http://localhost:3000');
// Visit http://localhost:3000/api-docs for Swagger documentation
```
## 🌐 Integration Guides
### Node.js Application
```javascript
const { AuditSDK } = require('auditmysite');
class AccessibilityService {
constructor() {
this.audit = new AuditSDK({
defaultOutputDir: './reports',
verbose: true
});
}
async auditWebsite(sitemapUrl, options = {}) {
try {
const result = await this.audit.quickAudit(sitemapUrl, {
maxPages: options.maxPages || 5,
formats: options.formats || ['json'],
includePerformance: true
});
return {
success: true,
summary: result.summary,
reports: result.reports
};
} catch (error) {
return {
success: false,
error: error.message
};
}
}
}
module.exports = AccessibilityService;
```
### Next.js API Route
```javascript
// pages/api/audit.js
import { AuditSDK } from 'auditmysite';
const audit = new AuditSDK({
defaultOutputDir: './public/reports'
});
export default async function handler(req, res) {
if (req.method !== 'POST') {
return res.status(405).json({ error: 'Method not allowed' });
}
const { sitemapUrl, maxPages = 5 } = req.body;
try {
const result = await audit.quickAudit(sitemapUrl, {
maxPages,
formats: ['html', 'json']
});
res.json({
success: true,
summary: result.summary,
reports: result.reports.map(r => ({
...r,
url: `/reports/${path.basename(r.path)}`
}))
});
} catch (error) {
res.status(500).json({
success: false,
error: error.message
});
}
}
```
### GitHub Actions Workflow
```yaml
# .github/workflows/accessibility.yml
name: Accessibility Testing
on: [push, pull_request]
jobs:
accessibility-audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
- name: Install dependencies
run: npm install auditmysite
- name: Run accessibility audit
run: node examples/ci-cd-integration.js https://your-site.com/sitemap.xml
env:
AUDIT_MAX_PAGES: 20
AUDIT_FORMATS: json,html
AUDIT_FAIL_ON_ERRORS: true
AUDIT_SUCCESS_RATE_THRESHOLD: 85
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
- name: Upload reports
uses: actions/upload-artifact@v3
if: always()
with:
name: accessibility-reports
path: audit-reports/
- name: Comment PR
if: github.event_name == 'pull_request'
uses: actions/github-script@v6
with:
script: |
const fs = require('fs');
const summary = fs.readFileSync('audit-reports/pr-summary.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: summary
});
```
### Docker Container
```dockerfile
FROM node:18-alpine
WORKDIR /app
# Install AuditMySite
RUN npm install auditmysite
# Copy your script
COPY audit-script.js .
# Run audit
CMD ["node", "audit-script.js"]
```
```bash
# Build and run
docker build -t my-accessibility-audit .
docker run -e SITEMAP_URL=https://example.com/sitemap.xml my-accessibility-audit
```
## 🔧 Configuration Options
### SDK Configuration
```javascript
const audit = new AuditSDK({
timeout: 30000, // Request timeout
maxConcurrency: 3, // Concurrent page tests
defaultOutputDir: './reports', // Report output directory
verbose: true, // Enable verbose logging
userAgent: 'MyBot/1.0', // Custom user agent
proxy: { // Proxy configuration
host: 'proxy.example.com',
port: 8080,
auth: {
username: 'user',
password: 'pass'
}
}
});
```
### Audit Options
```javascript
const options = {
maxPages: 20, // Maximum pages to test
standard: 'WCAG2AA', // Accessibility standard
formats: ['html', 'json', 'csv'], // Report formats
includePerformance: true, // Include performance metrics
includeSeo: false, // Include SEO analysis
includeSecurity: false, // Include security checks
viewport: { // Custom viewport
width: 1920,
height: 1080,
isMobile: false
},
performanceBudget: { // Performance thresholds
lcp: { good: 2500, poor: 4000 },
cls: { good: 0.1, poor: 0.25 }
}
};
```
## 📊 Event System
The SDK provides comprehensive event tracking for real-time monitoring:
```javascript
audit.audit()
.sitemap(url)
.on('audit:start', (event) => {
console.log('🚀 Audit started');
})
.on('audit:progress', (event) => {
const { current, total, percentage, currentUrl } = event.data;
console.log(`📊 ${percentage}% (${current}/${total}) - ${currentUrl}`);
})
.on('audit:page:start', (event) => {
console.log(`🔍 Testing: ${event.data.url}`);
})
.on('audit:page:complete', (event) => {
const { url, result, duration } = event.data;
console.log(`✅ ${url} - ${result.errors.length} errors (${duration}ms)`);
})
.on('audit:page:error', (event) => {
console.log(`❌ ${event.data.url} - ${event.data.error.message}`);
})
.on('report:start', (event) => {
console.log(`📄 Generating ${event.data.format} report...`);
})
.on('report:complete', (event) => {
console.log(`✅ Report generated: ${event.data.path}`);
})
.on('audit:complete', (event) => {
console.log('🎉 Audit completed!');
})
.on('audit:error', (event) => {
console.error('💥 Audit failed:', event.data.message);
})
.run();
```
## 🛡️ Error Handling
```javascript
try {
const result = await audit.quickAudit(sitemapUrl, options);
} catch (error) {
if (error.code === 'INVALID_SITEMAP') {
console.error('Invalid sitemap URL provided');
} else if (error.code === 'TIMEOUT') {
console.error('Audit timed out - try reducing maxPages');
} else if (error.code === 'NETWORK_ERROR') {
console.error('Network connection failed');
} else {
console.error('Unexpected error:', error.message);
}
}
```
## 📈 Performance Tips
1. **Optimize Concurrency**: Adjust `maxConcurrency` based on target server capacity
2. **Use Appropriate Limits**: Set realistic `maxPages` for your needs
3. **Choose Formats Wisely**: Only generate reports you actually need
4. **Implement Caching**: Cache sitemap parsing results for repeated audits
5. **Monitor Resources**: Track memory usage for large audits
## 🔗 Additional Resources
- [SDK API Documentation](../docs/sdk-api.md)
- [REST API Documentation](../docs/rest-api.md)
- [Configuration Reference](../docs/configuration.md)
- [Performance Guide](../docs/performance.md)
- [Troubleshooting](../docs/troubleshooting.md)
## 🤝 Contributing
Found an issue or want to contribute an example?
1. Fork the repository
2. Create a feature branch
3. Add your example with documentation
4. Submit a pull request
## 📝 License
MIT License - see [LICENSE](../LICENSE) for details.