npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@reaatech/session-continuity-storage-firestore

v0.1.0

Published

Firestore storage adapter for session-continuity-kit

Readme

@reaatech/session-continuity-storage-firestore

npm version License: MIT CI

Status: Pre-1.0 — APIs may change in minor versions. Pin to a specific version in production.

Google Cloud Firestore storage adapter implementing IStorageAdapter from @reaatech/session-continuity. Uses a collection for sessions with a message subcollection — ideal for serverless and GCP-native deployments.

Installation

npm install @reaatech/session-continuity-storage-firestore @google-cloud/firestore
# or
pnpm add @reaatech/session-continuity-storage-firestore @google-cloud/firestore

Feature Overview

  • Implements IStorageAdapter — drop-in replacement for any storage backend
  • Firestore TTL policies — native document expiration via a configurable TTL field
  • Batch operations — messages deleted in batches of 500 for efficiency
  • Server-side filtering — uses Firestore where() queries for user, status, and agent filters
  • Deterministic ordering — time-sortable, monotonic message document ids so the (createdAt, __name__) order yields insertion order even within the same millisecond — no hot-document counter
  • Optimistic concurrencyupdateSession honors expectedVersion via runTransaction, throwing ConcurrencyError on a stale write
  • No connection managementclose() is a no-op (Firestore manages its own connection pool)

Quick Start

import { FirestoreAdapter } from '@reaatech/session-continuity-storage-firestore';
import { SessionManager } from '@reaatech/session-continuity';
import { Firestore } from '@google-cloud/firestore';

const firestore = new Firestore({ projectId: 'my-project' });

const manager = new SessionManager({
  storage: new FirestoreAdapter({ firestore }),
  tokenCounter: myTokenCounter,
});

API Reference

FirestoreAdapter

Constructor

new FirestoreAdapter(config: FirestoreAdapterConfig)

FirestoreAdapterConfig

| Property | Type | Default | Description | | ----------- | ----------- | ------------- | ---------------------------------------- | | firestore | Firestore | (required) | Google Cloud Firestore instance | | ttlField | string | "expiresAt" | Field name used for Firestore TTL policy |

Data Model

sessions (collection)
  ├── {sessionId} (document)     — session metadata + fields
  └── messages (subcollection)
      └── {messageId} (document) — individual messages

Public Methods

| Method | Notes | | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | | createSession(session) | Auto-generates doc ID; serializes Dates to Firestore Timestamps | | getSession(id) | — | | updateSession(id, updates) | Re-reads after update to return current state | | deleteSession(id) | Batch-deletes all messages (chunks of 500), then deletes session doc | | listSessions(filters?) | Server-side where() for userId, status, activeAgentId; tags filtered client-side (OR semantics); supports limit and offset | | addMessage(sessionId, message) | Subcollection doc with auto-generated ID | | getMessages(sessionId, options?) | Orders by createdAt; roles filtered client-side; supports after, before, offset, limit | | updateMessage(sessionId, messageId, updates) | Re-reads after update | | deleteMessage(sessionId, messageId) | — | | deleteAllMessages(sessionId) | Batch deletes in chunks of 500 | | getExpiredSessions(before) | Queries ttlField < before | | health() | Lightweight limit(1).get() ping | | close() | No-op (Firestore manages its own pool) |

All methods throw StorageError("firestore") on failure.

Firestore TTL

Configure a Firestore TTL policy on the expiresAt field (default) to enable native document expiration:

// Custom TTL field name
const adapter = new FirestoreAdapter({
  firestore,
  ttlField: 'deleteAt', // Set a Firestore TTL policy on this field
});

Without a TTL policy, the cleanupExpiredSessions() method on SessionManager handles deletion in application code.

Related Packages

License

MIT