***

title: SessionManager
slug: /reference/typescript/agents/configuration/session-manager
description: Stateless HMAC-SHA256 token manager for SWAIG function call authentication and per-session metadata storage.
max-toc-depth: 3
---------------------

For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

`SessionManager` provides stateless HMAC-SHA256 token generation and validation
for SWAIG function call authentication. Tokens encode a call ID, function name,
expiry, and nonce, signed with a shared secret. It also supports per-session
metadata storage with automatic cleanup.

```typescript {3}
import { SessionManager } from '@signalwire/sdk';

const sm = new SessionManager(900); // 15-minute token expiry
const token = sm.generateToken('get_weather', 'call-123');
const valid = sm.validateToken('call-123', 'get_weather', token);
```

## **Constructor**

<ParamField path="tokenExpirySecs" type="number" default="900" toc={true}>
  Token validity duration in seconds.
</ParamField>

<ParamField path="secretKey" type="string" toc={true}>
  HMAC signing secret. A random 32-byte key is generated if omitted.
</ParamField>

## **Methods**

<CardGroup cols={3}>
  <Card title="createSession" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/create-session">
    Return or generate a session identifier.
  </Card>

  <Card title="generateToken" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/generate-token">
    Generate a signed token binding a function to a call ID.
  </Card>

  <Card title="createToolToken" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/create-tool-token">
    Alias for generateToken.
  </Card>

  <Card title="validateToken" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/validate-token">
    Validate a token against expected call ID and function name.
  </Card>

  <Card title="validateToolToken" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/validate-tool-token">
    Alias for validateToken with reordered parameters.
  </Card>

  <Card title="debugToken" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/debug-token">
    Decode token components without validating the signature.
  </Card>

  <Card title="getSessionMetadata" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/get-session-metadata">
    Retrieve metadata for a session.
  </Card>

  <Card title="setSessionMetadata" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/set-session-metadata">
    Merge metadata into a session.
  </Card>

  <Card title="cleanup" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/cleanup">
    Remove expired session metadata entries.
  </Card>

  <Card title="deleteSessionMetadata" href="/docs/server-sdks/reference/typescript/agents/configuration/session-manager/delete-session-metadata">
    Delete all metadata for a session.
  </Card>
</CardGroup>

## **Example**

```typescript {3-4,7-8}
import { SessionManager } from '@signalwire/sdk';

const sm = new SessionManager();
const token = sm.generateToken('get_weather', 'call-abc123');

// Later, validate the token
const valid = sm.validateToken('call-abc123', 'get_weather', token);
console.log('Token valid:', valid); // true
```