Skip to content

Latest commit

 

History

History
58 lines (40 loc) · 1.9 KB

File metadata and controls

58 lines (40 loc) · 1.9 KB

@device-router/storage API

StorageAdapter Interface

interface StorageAdapter {
  get(sessionToken: string): Promise<DeviceProfile | null>;
  set(sessionToken: string, profile: DeviceProfile, ttlSeconds: number): Promise<void>;
  delete(sessionToken: string): Promise<void>;
  exists(sessionToken: string): Promise<boolean>;
}

MemoryStorageAdapter

In-memory storage using a Map with TTL-based expiry. Suitable for development and single-process deployments.

import { MemoryStorageAdapter } from '@device-router/storage';

const storage = new MemoryStorageAdapter();

Methods

  • clear(): void — Removes all stored profiles

RedisStorageAdapter

Redis-backed storage using SET ... EX for TTL. Suitable for production multi-process deployments.

import Redis from 'ioredis';
import { RedisStorageAdapter } from '@device-router/storage';

const storage = new RedisStorageAdapter({
  client: new Redis(),
  keyPrefix: 'dr:profile:', // Default prefix
});

Options

Option Type Default Description
client Redis-compatible client required Must implement get, set, del, exists
keyPrefix string 'dr:profile:' Key prefix for Redis keys

Error handling

All methods catch errors gracefully instead of throwing. If Redis is unavailable or returns corrupted data:

  • get() returns null (treated as no stored profile)
  • exists() returns false
  • set() silently fails (the probe will re-run next session)
  • delete() silently fails (the key will expire via TTL)

This ensures middleware continues to work when Redis is temporarily down — requests proceed without a device profile rather than crashing.