/** * Cloudflare KV Usage Examples * * This file demonstrates how to use the CloudflareKVClient utility class */ import { CloudflareKVClient, cloudflareKV } from './cloudflareKV' // Example 1: Using the default instance async function basicUsageExample() { try { // Store a simple string value await cloudflareKV.put('user:123', 'John Doe') console.log('✅ Stored user name') // Store a JSON object const userData = { id: 123, name: 'John Doe', email: 'john@example.com', preferences: { theme: 'dark', language: 'en' } } await cloudflareKV.put('user:123:profile', userData) console.log('✅ Stored user profile') // Retrieve the data const name = await cloudflareKV.get('user:123', false) // Don't parse as JSON const profile = await cloudflareKV.get('user:123:profile') // Parse as JSON console.log('Retrieved name:', name) console.log('Retrieved profile:', profile) // Check if a key exists const exists = await cloudflareKV.exists('user:123') console.log('User exists:', exists) // List keys with prefix const keys = await cloudflareKV.listKeys('user:') console.log('User keys:', keys.result.keys) } catch (error) { console.error('❌ Error in basic usage example:', error) } } // Example 2: Using a custom configuration async function customConfigExample() { const customKV = new CloudflareKVClient({ // You can override any configuration values apiKey: 'your-custom-api-key', // Other values will use defaults }) try { await customKV.put('custom:test', { message: 'Hello from custom config!' }) const result = await customKV.get('custom:test') console.log('Custom config result:', result) } catch (error) { console.error('❌ Error in custom config example:', error) } } // Example 3: Batch operations async function batchOperationsExample() { try { // Store multiple values at once const entries = [ { key: 'batch:item1', value: { name: 'Item 1', price: 10.99 } }, { key: 'batch:item2', value: { name: 'Item 2', price: 15.50 } }, { key: 'batch:item3', value: { name: 'Item 3', price: 8.75 } } ] const results = await cloudflareKV.putBatch(entries) console.log('Batch put results:', results) // Retrieve all batch items for (const entry of entries) { const item = await cloudflareKV.get(entry.key) console.log(`Retrieved ${entry.key}:`, item) } } catch (error) { console.error('❌ Error in batch operations example:', error) } } // Example 4: Working with metadata async function metadataExample() { try { const value = { content: 'Important data' } const metadata = { created_at: new Date().toISOString(), created_by: 'user:123', version: '1.0' } await cloudflareKV.put('data:important', value, metadata) console.log('✅ Stored data with metadata') // Note: To retrieve metadata, you'd need to use the Cloudflare API directly // as the get method only returns the value, not metadata } catch (error) { console.error('❌ Error in metadata example:', error) } } // Example 5: Error handling and edge cases async function errorHandlingExample() { try { // Try to get a non-existent key const nonExistent = await cloudflareKV.get('does-not-exist') console.log('Non-existent key result:', nonExistent) // Should be null // Store and then delete a key await cloudflareKV.put('temp:data', 'temporary value') console.log('✅ Stored temporary data') const beforeDelete = await cloudflareKV.get('temp:data') console.log('Before delete:', beforeDelete) await cloudflareKV.delete('temp:data') console.log('✅ Deleted temporary data') const afterDelete = await cloudflareKV.get('temp:data') console.log('After delete:', afterDelete) // Should be null } catch (error) { console.error('❌ Error in error handling example:', error) } } // Example 6: Video template storage use case async function videoTemplateStorageExample() { try { const templateData = { id: 'template-001', name: 'Modern Intro Template', description: 'A sleek modern intro template with animations', duration: 5000, // 5 seconds assets: [ { type: 'video', url: 'https://example.com/intro.mp4' }, { type: 'audio', url: 'https://example.com/music.mp3' } ], settings: { resolution: '1920x1080', fps: 30, format: 'mp4' }, created_at: new Date().toISOString(), updated_at: new Date().toISOString() } // Store template await cloudflareKV.put(`template:${templateData.id}`, templateData) console.log('✅ Stored video template') // Store template index for quick listing const templateIndex = { id: templateData.id, name: templateData.name, description: templateData.description, thumbnail: 'https://example.com/thumbnail.jpg' } await cloudflareKV.put(`template:index:${templateData.id}`, templateIndex) console.log('✅ Stored template index') // Retrieve template const retrievedTemplate = await cloudflareKV.get(`template:${templateData.id}`) console.log('Retrieved template:', retrievedTemplate) // List all templates const templateKeys = await cloudflareKV.listKeys('template:index:', 100) console.log('Template list:', templateKeys.result.keys) } catch (error) { console.error('❌ Error in video template storage example:', error) } } // Run all examples async function runAllExamples() { console.log('🚀 Running Cloudflare KV Examples...\n') console.log('1. Basic Usage Example:') await basicUsageExample() console.log('\n') console.log('2. Custom Config Example:') await customConfigExample() console.log('\n') console.log('3. Batch Operations Example:') await batchOperationsExample() console.log('\n') console.log('4. Metadata Example:') await metadataExample() console.log('\n') console.log('5. Error Handling Example:') await errorHandlingExample() console.log('\n') console.log('6. Video Template Storage Example:') await videoTemplateStorageExample() console.log('\n') console.log('✅ All examples completed!') } // Export individual examples for selective testing export { basicUsageExample, customConfigExample, batchOperationsExample, metadataExample, errorHandlingExample, videoTemplateStorageExample, runAllExamples }