Available Extensions
List of available extensions for DeesseJS
Available Extensions
Complete list of official extensions available for DeesseJS.
Cache Extension
Manages application caching with multiple provider options.
Installation
npm install @deessejs/extensions-cacheProviders
| Provider | Package | Best For |
|---|---|---|
| Memory | Included | Development, single-server |
| Redis | @deessejs/extensions-cache-redis | Production, distributed |
| Memcached | @deessejs/extensions-cache-memcached | Production, legacy systems |
| Vercel KV | @deessejs/extensions-cache-vercel-kv | Vercel deployments |
Configuration
// deesse.config.ts
import { defineConfig } from '@deessejs/core'
import { RedisCacheProvider } from '@deessejs/extensions-cache-redis'
export const config = defineConfig({
extensions: {
cache: {
provider: new RedisCacheProvider({
host: process.env.REDIS_HOST,
port: parseInt(process.env.REDIS_PORT || '6379'),
password: process.env.REDIS_PASSWORD,
}),
options: {
prefix: 'deesse:',
defaultTTL: 3600,
},
},
},
})Usage
import { cache } from '@deessejs/extensions'
// Set with TTL
await cache.set('user:123', user, 3600)
// Get
const user = await cache.get<User>('user:123')
// Delete
await cache.delete('user:123')
// Clear all
await cache.clear()Queue Extension
Background job processing with persistent queues.
Installation
npm install @deessejs/extensions-queueProviders
| Provider | Package | Best For |
|---|---|---|
| Memory | Included | Development, testing |
| BullMQ | @deessejs/extensions-queue-bullmq | Production, Redis |
| Bull | @deessejs/extensions-queue-bull | Production, Redis (legacy) |
| AWS SQS | @deessejs/extensions-queue-sqs | AWS infrastructure |
Configuration
import { BullMQQueueProvider } from '@deessejs/extensions-queue-bullmq'
export const config = defineConfig({
extensions: {
queue: {
provider: new BullMQQueueProvider({
connection: {
host: process.env.REDIS_HOST,
port: 6379,
},
}),
options: {
defaultJobOptions: {
attempts: 3,
backoff: {
type: 'exponential',
delay: 1000,
},
},
},
},
},
})Usage
import { queue } from '@deessejs/extensions'
// Add job
await queue.add('send-email', {
to: 'user@example.com',
subject: 'Welcome',
})
// Add with options
await queue.add('process-image', { imageId: '123' }, {
priority: 1,
delay: 5000,
})
// Register worker
queue.process('send-email', async (job) => {
await sendEmail(job.data.to, job.data.subject)
})Logger Extension
Structured logging with multiple outputs and levels.
Installation
npm install @deessejs/extensions-loggerProviders
| Provider | Package | Best For |
|---|---|---|
| Console | Included | Development |
| Pino | @deessejs/extensions-logger-pino | Production, high performance |
| Winston | @deessejs/extensions-logger-winston | Production, flexible |
| Datadog | @deessejs/extensions-logger-datadog | Datadog monitoring |
Configuration
import { PinoLoggerProvider } from '@deessejs/extensions-logger-pino'
export const config = defineConfig({
extensions: {
logger: {
provider: new PinoLoggerProvider({
level: process.env.LOG_LEVEL || 'info',
transport: {
target: 'pino/file',
options: {
destination: './logs/app.log',
},
},
}),
},
},
})Usage
import { logger } from '@deessejs/extensions'
// Log levels
logger.debug('Cache stats', { hits: 100, misses: 5 })
logger.info('User logged in', { userId: '123' })
logger.warn('High memory usage', { usage: '90%' })
logger.error('Database error', { error: err.message })
// With context
const childLogger = logger.child({ component: 'auth' })
childLogger.info('Login attempt', { email: user.email })Storage Extension
File storage for uploads, assets, and static files.
Installation
npm install @deessejs/extensions-storageProviders
| Provider | Package | Best For |
|---|---|---|
| Local | Included | Development |
| AWS S3 | @deessejs/extensions-storage-s3 | Production, AWS |
| Cloudflare R2 | @deessejs/extensions-storage-r2 | Production, Cloudflare |
| Azure Blob | @deessejs/extensions-storage-azure | Production, Azure |
| Vercel Blob | @deessejs/extensions-storage-vercel | Vercel deployments |
Configuration
import { S3StorageProvider } from '@deessejs/extensions-storage-s3'
export const config = defineConfig({
extensions: {
storage: {
provider: new S3StorageProvider({
region: process.env.AWS_REGION,
credentials: {
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
},
bucket: process.env.S3_BUCKET,
}),
},
},
})Usage
import { storage } from '@deessejs/extensions'
// Upload file
const url = await storage.upload('uploads/avatar.jpg', file, {
contentType: 'image/jpeg',
metadata: { userId: '123' },
})
// Download file
const stream = await storage.download('uploads/avatar.jpg')
// Delete file
await storage.delete('uploads/avatar.jpg')
// Get signed URL (for private files)
const signedUrl = await storage.getSignedUrl('uploads/avatar.jpg', {
expiresIn: 3600,
})
// List files
const files = await storage.list('uploads/', { limit: 100 })Search Extension
Full-text search with indexing and querying.
Installation
npm install @deessejs/extensions-searchProviders
| Provider | Package | Best For |
|---|---|---|
| Meilisearch | @deessejs/extensions-search-meilisearch | Open source, self-hosted |
| Algolia | @deessejs/extensions-search-algolia | Managed service |
| Typesense | @deessejs/extensions-search-typesense | Open source, fast |
| Elasticsearch | @deessejs/extensions-search-elasticsearch | Enterprise search |
Configuration
import { MeilisearchProvider } from '@deessejs/extensions-search-meilisearch'
export const config = defineConfig({
extensions: {
search: {
provider: new MeilisearchProvider({
host: process.env.MEILISEARCH_HOST,
apiKey: process.env.MEILISEARCH_MASTER_KEY,
}),
},
},
})Usage
import { search } from '@deessejs/extensions'
// Create index
await search.createIndex('posts', {
searchableAttributes: ['title', 'content'],
sortableAttributes: ['createdAt'],
filterableAttributes: ['category', 'published'],
})
// Add documents
await search.index('posts').addDocuments([
{ id: 1, title: 'Hello World', content: '...', category: 'tech' },
{ id: 2, title: 'Getting Started', content: '...', category: 'guide' },
])
// Search
const results = await search.index('posts').search('hello', {
limit: 20,
filter: 'category = tech',
})
// Update document
await search.index('posts').updateDocuments([{ id: 1, title: 'Updated' }])
// Delete document
await search.index('posts').deleteDocument(1)Lock Extension
Distributed locking for concurrent operations.
Installation
npm install @deessejs/extensions-lockProviders
| Provider | Package | Best For |
|---|---|---|
| Memory | Included | Development, single-server |
| Redis | @deessejs/extensions-lock-redis | Production, distributed |
| PostgreSQL | @deessejs/extensions-lock-postgres | Production, database locks |
Configuration
import { RedisLockProvider } from '@deessejs/extensions-lock-redis'
export const config = defineConfig({
extensions: {
lock: {
provider: new RedisLockProvider({
host: process.env.REDIS_HOST,
port: 6379,
}),
},
},
})Usage
import { lock } from '@deessejs/extensions'
// Acquire lock
await lock.acquire('process-payment:123', async () => {
// Only one execution at a time
await processPayment(123)
}, { ttl: 30000 })
// Manual lock management
const acquired = await lock.acquire('export-data', {
ttl: 60000,
})
if (acquired) {
try {
await exportLargeDataset()
} finally {
await lock.release('export-data')
}
}Events Extension
Event bus for pub/sub messaging and real-time updates.
Installation
npm install @deessejs/extensions-eventsProviders
| Provider | Package | Best For |
|---|---|---|
| EventEmitter | Included | Development, single-server |
| Redis | @deessejs/extensions-events-redis | Production, pub/sub |
| Kafka | @deessejs/extensions-events-kafka | Production, event streaming |
| Ably | @deessejs/extensions-events-ably | Real-time features |
Configuration
import { RedisEventsProvider } from '@deessejs/extensions-events-redis'
export const config = defineConfig({
extensions: {
events: {
provider: new RedisEventsProvider({
host: process.env.REDIS_HOST,
port: 6379,
}),
},
},
})Usage
import { events } from '@deessejs/extensions'
// Publish event
await events.publish('user.created', {
userId: '123',
email: 'user@example.com',
timestamp: new Date(),
})
// Subscribe to events
events.subscribe('user.created', async (data) => {
await sendWelcomeEmail(data.email)
await updateAnalytics(data)
})
// Subscribe with pattern
events.subscribe('user.*', async (data, event) => {
console.log('User event:', event, data)
})
// Unsubscribe
const unsubscribe = events.subscribe('user.created', handler)
// Later...
unsubscribe()Mail Extension
Email sending with multiple providers.
Installation
npm install @deessejs/extensions-mailProviders
| Provider | Package | Best For |
|---|---|---|
| Nodemailer | Included | Development, SMTP |
| Resend | @deessejs/extensions-mail-resend | Production, API |
| SendGrid | @deessejs/extensions-mail-sendgrid | Production, API |
| AWS SES | @deessejs/extensions-mail-ses | AWS infrastructure |
| Postmark | @deessejs/extensions-mail-postmark | Production, transactional |
Configuration
import { ResendMailProvider } from '@deessejs/extensions-mail-resend'
export const config = defineConfig({
extensions: {
mail: {
provider: new ResendMailProvider({
apiKey: process.env.RESEND_API_KEY,
}),
options: {
from: 'noreply@example.com',
fromName: 'MyApp',
},
},
},
})Usage
import { mail } from '@deessejs/extensions'
// Send email
await mail.send({
to: 'user@example.com',
subject: 'Welcome to MyApp',
html: '<h1>Welcome!</h1><p>Thanks for signing up.</p>',
})
// Send with template
await mail.sendTemplate({
to: 'user@example.com',
templateId: 'welcome-email',
data: {
name: 'John',
confirmUrl: 'https://example.com/confirm',
},
})
// Send batch
await mail.sendBatch([
{ to: 'user1@example.com', subject: 'Hello 1' },
{ to: 'user2@example.com', subject: 'Hello 2' },
])SMS Extension
SMS sending for notifications and 2FA.
Installation
npm install @deessejs/extensions-smsProviders
| Provider | Package | Best For |
|---|---|---|
| Twilio | @deessejs/extensions-sms-twilio | Global reach |
| Vonage | @deessejs/extensions-sms-vonage | Alternative to Twilio |
| AWS SNS | @deessejs/extensions-sms-sns | AWS infrastructure |
Configuration
import { TwilioSMSProvider } from '@deessejs/extensions-sms-twilio'
export const config = defineConfig({
extensions: {
sms: {
provider: new TwilioSMSProvider({
accountSid: process.env.TWILIO_ACCOUNT_SID,
authToken: process.env.TWILIO_AUTH_TOKEN,
from: process.env.TWILIO_PHONE_NUMBER,
}),
},
},
})Usage
import { sms } from '@deessejs/extensions'
// Send SMS
await sms.send('+1234567890', 'Your verification code is 123456')
// Send with options
await sms.send('+1234567890', 'Your code is 123456', {
priority: 'high',
metadata: { campaign: 'signup' },
})Combining Extensions
Extensions work together seamlessly:
// Example: Queue + Logger + Cache
queue.process('process-order', async (job) => {
logger.info('Processing order', { orderId: job.data.orderId })
const order = await db.orders.findUnique({
where: { id: job.data.orderId },
})
// Cache the result
await cache.set(`order:${order.id}`, order, 3600)
logger.info('Order processed', { orderId: order.id })
})Next Steps
- Learn about Creating Extensions
- Explore Extension Providers
- Return to Extensions Overview