New:Microsoft Teams Notifications Are Now Available in Socket.Learn more
Get Started

@device-router/storage

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@device-router/storage

Storage adapters (memory, Redis) for persisting device profiles in DeviceRouter

latest
Source
npmnpm
Version
1.0.1
Version published
Maintainers
1
Created
Source

@device-router/storage

Storage adapters for persisting device profiles in DeviceRouter. Ships with in-memory and Redis adapters.

Installation

pnpm add @device-router/storage

For Redis support:

pnpm add @device-router/storage ioredis

Usage

In-memory (development)

Profiles are stored in a Map with automatic TTL expiration. Suitable for single-process development and testing.

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

const storage = new MemoryStorageAdapter();

Redis (production)

For multi-process and multi-server deployments. Uses Redis EX for TTL.

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

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

The client option accepts any object with get, set, del, exists, and keys methods matching the ioredis interface. This means you can use any Redis-compatible client.

The client may also provide an optional scan(cursor, ...args) method. When available, clear(), count(), and keys() use SCAN-based iteration instead of the blocking KEYS command. This is recommended for production to avoid blocking the Redis event loop on large datasets.

Custom adapter

Implement the StorageAdapter interface:

import type { StorageAdapter } from '@device-router/storage';
import type { DeviceProfile } from '@device-router/types';

class MyAdapter implements StorageAdapter {
  async get(sessionToken: string): Promise<DeviceProfile | null> {
    /* ... */
  }
  async set(sessionToken: string, profile: DeviceProfile, ttlSeconds: number): Promise<void> {
    /* ... */
  }
  async delete(sessionToken: string): Promise<void> {
    /* ... */
  }
  async exists(sessionToken: string): Promise<boolean> {
    /* ... */
  }
  async clear(): Promise<void> {
    /* ... */
  }
  async count(): Promise<number> {
    /* ... */
  }
  async keys(): Promise<string[]> {
    /* ... */
  }
}

API

StorageAdapter interface

MethodSignatureDescription
get(sessionToken: string) => Promise<DeviceProfile | null>Retrieve a profile
set(sessionToken: string, profile: DeviceProfile, ttl: number) => Promise<void>Store with TTL (seconds)
delete(sessionToken: string) => Promise<void>Remove a profile
exists(sessionToken: string) => Promise<boolean>Check if a profile exists
clear() => Promise<void>Remove all entries
count() => Promise<number>Count stored profiles
keys() => Promise<string[]>List session tokens

MemoryStorageAdapter

Implements StorageAdapter plus:

  • clear() — Remove all entries and cancel timers
  • count() — Count stored profiles
  • keys() — List session tokens

RedisStorageAdapter

Constructor options:

OptionTypeDefaultDescription
clientobject(required)Redis-compatible client
keyPrefixstring'dr:profile:'Key prefix for all entries

License

MIT

Keywords

device-router

FAQs

Package last updated on 04 Mar 2026

Related posts