Fetching Session Users
Ductape allows you to retrieve users associated with a specific session in your product. This is useful for analytics, auditing, or managing user access and activity within sessions.
Fetch All Users for a Session
To fetch all users associated with a particular session, use ductape.sessions.fetchUsers(). It returns paginated results.
Example
- TypeScript
- Java
- Go
- .NET
import Ductape from '@ductape/sdk';
const ductape = new Ductape({
accessKey: 'your-access-key',
});
const result = await ductape.sessions.fetchUsers({
session: 'user-session',
page: 1,
limit: 20,
});
console.log('Total users:', result.total);
console.log('Total pages:', result.totalPages);
for (const user of result.users) {
console.log('User ID:', user.ductape_user_id);
console.log('Identifier:', user.identifier);
console.log('Last seen:', user.last_seen);
}
import app.ductape.sdk.Ductape;
import app.ductape.sdk.core.EnvType;
import app.ductape.sdk.core.RequestContext;
RequestContext auth = new RequestContext(null, null, null, null, 'your-access-key');
Ductape ductape = new Ductape(EnvType.PRODUCTION, auth);
Map<String, Object> result = ductape.sessions.fetchUsers(Map.of(
"session", "user-session",
"page", 1,
"limit", 20
));
System.out.println('Total "users", ", result.total);
System.out.println("Total "pages", ", result.totalPages);
for (Map<String, Object> user of result.users) Map.of(
System.out.println("User "ID", ", user.ductape_user_id);
System.out.println(""Identifier", ", user.identifier);
System.out.println("Last seen:', user.last_seen);
)
import (
"context"
"github.com/ductape/ductape/sdk/go/core"
ductapesdk "github.com/ductape/ductape/sdk/go/ductape"
)
auth := core.NewRequestContext("", "", "", "", 'your-access-key')
client, err := ductapesdk.New(core.EnvProduction, auth)
if err != nil {
return err
}
result := client.sessions.fetchUsers({
"session": "user-session",
"page": 1,
"limit": 20,
});
fmt.Println('Total "users": ", result.total);
fmt.Println("Total "pages": ", result.totalPages);
for (const user of result.users) {
fmt.Println("User "ID": ", user.ductape_user_id);
fmt.Println(""Identifier": ", user.identifier);
fmt.Println("Last seen:', user.last_seen);
}
using Ductape.Sdk;
using Ductape.Sdk.Core;
var auth = new RequestContext(null, null, null, null, 'your-access-key', null);
var ductape = new Ductape(EnvType.Production, auth);
var result = await ductape.sessions.fetchUsers({
["session"] = "user-session",
["page"] = 1,
["limit"] = 20,
});
Console.WriteLine('Total ["users"] = ", result.total);
Console.WriteLine("Total ["pages"] = ", result.totalPages);
for (var user of result.users) {
Console.WriteLine("User ["ID"] = ", user.ductape_user_id);
Console.WriteLine("["Identifier"] = ", user.identifier);
Console.WriteLine("Last seen:', user.last_seen);
}
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
product | string | No* | Product tag (inherits from constructor). |
session | string | Yes | The tag of the session to query users from. |
env | string | No* | Environment slug (inherits from constructor). |
page | number | No | The page number for pagination (default: 1). |
limit | number | No | The number of users per page (default: 20). |
Response
Returns a paginated result object:
- TypeScript
- Java
- Go
- .NET
{
users: ISessionUser[]; // Array of user objects
total: number; // Total number of users
page: number; // Current page
limit: number; // Users per page
totalPages: number; // Total number of pages
}
Map.of(
users: ISessionUser[]; // Array of user objects
total: number; // Total number of users
page: number; // Current page
limit: number; // Users per page
totalPages: number; // Total number of pages
)
{
users: ISessionUser[]; // Array of user objects
total: number; // Total number of users
page: number; // Current page
limit: number; // Users per page
totalPages: number; // Total number of pages
}
{
users: ISessionUser[]; // Array of user objects
total: number; // Total number of users
page: number; // Current page
limit: number; // Users per page
totalPages: number; // Total number of pages
}
Each user object includes:
_id- MongoDB document IDductape_user_id- Unique Ductape user identifierproduct_tag- The product tagsession_tag- The session tagidentifier- User identifier (from session selector)env- Environmentfirst_seen- First session timestamplast_seen- Most recent activity timestampcreatedAt- Record creation timestampupdatedAt- Record update timestamp
Fetch a Specific User's Details
Get detailed information about a specific session user, including their session history:
- TypeScript
- Java
- Go
- .NET
const userDetails = await ductape.sessions.fetchUserDetails({
session: 'user-session',
identifier: 'user@example.com',
});
console.log('User ID:', userDetails.ductape_user_id);
console.log('Total sessions:', userDetails.totalSessions);
console.log('Active sessions:', userDetails.activeSessionsCount);
// View session history
for (const session of userDetails.sessions) {
console.log('Session ID:', session.session_id);
console.log('Started:', session.start_at);
console.log('Expires:', session.end_at);
console.log('Active:', session.active);
}
Map<String, Object> userDetails = ductape.sessions.fetchUserDetails(Map.of(
"session", "user-session",
"identifier", "user@example.com"
));
System.out.println('User "ID", ", userDetails.ductape_user_id);
System.out.println("Total "sessions", ", userDetails.totalSessions);
System.out.println("Active "sessions", ", userDetails.activeSessionsCount);
// View session history
for (Map<String, Object> session of userDetails.sessions) Map.of(
System.out.println("Session "ID", ", session.session_id);
System.out.println(""Started", ", session.start_at);
System.out.println(""Expires", ", session.end_at);
System.out.println("Active:', session.active);
)
userDetails := client.sessions.fetchUserDetails({
"session": "user-session",
"identifier": "user@example.com",
});
fmt.Println('User "ID": ", userDetails.ductape_user_id);
fmt.Println("Total "sessions": ", userDetails.totalSessions);
fmt.Println("Active "sessions": ", userDetails.activeSessionsCount);
// View session history
for (const session of userDetails.sessions) {
fmt.Println("Session "ID": ", session.session_id);
fmt.Println(""Started": ", session.start_at);
fmt.Println(""Expires": ", session.end_at);
fmt.Println("Active:', session.active);
}
var userDetails = await ductape.sessions.fetchUserDetails({
["session"] = "user-session",
["identifier"] = "user@example.com",
});
Console.WriteLine('User ["ID"] = ", userDetails.ductape_user_id);
Console.WriteLine("Total ["sessions"] = ", userDetails.totalSessions);
Console.WriteLine("Active ["sessions"] = ", userDetails.activeSessionsCount);
// View session history
for (var session of userDetails.sessions) {
Console.WriteLine("Session ["ID"] = ", session.session_id);
Console.WriteLine("["Started"] = ", session.start_at);
Console.WriteLine("["Expires"] = ", session.end_at);
Console.WriteLine("Active:', session.active);
}
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
product | string | Yes | The tag of your product. |
session | string | Yes | The tag of the session. |
identifier | string | Yes | The user's unique identifier. |
env | string | No | Filter by environment. |
Response
Returns the user object with additional session information:
- TypeScript
- Java
- Go
- .NET
{
// All ISessionUser fields plus:
sessions: IUserSessionInfo[]; // Array of session records
totalSessions: number; // Total number of sessions
activeSessionsCount: number; // Currently active sessions
}
Map.of(
// All ISessionUser fields plus:
sessions: IUserSessionInfo[]; // Array of session records
totalSessions: number; // Total number of sessions
activeSessionsCount: number; // Currently active sessions
)
{
// All ISessionUser fields plus:
sessions: IUserSessionInfo[]; // Array of session records
totalSessions: number; // Total number of sessions
activeSessionsCount: number; // Currently active sessions
}
{
// All ISessionUser fields plus:
sessions: IUserSessionInfo[]; // Array of session records
totalSessions: number; // Total number of sessions
activeSessionsCount: number; // Currently active sessions
}
Each session info object includes:
session_id- Unique session identifierstart_at- Session start timestampend_at- Session expiry timestampactive- Whether the session is currently active
All of these methods are on ductape.sessions after initializing Ductape with your access key:
- TypeScript
- Java
- Go
- .NET
// Fetch paginated users
const users = await ductape.sessions.fetchUsers({
session: 'user-session',
page: 1,
limit: 20,
});
// Fetch specific user details
const userDetails = await ductape.sessions.fetchUserDetails({
session: 'user-session',
identifier: 'user@example.com',
});
// Fetch dashboard metrics
const dashboard = await ductape.sessions.fetchDashboard({
session: 'user-session',
});
// Fetch paginated users
Map<String, Object> users = ductape.sessions.fetchUsers(Map.of(
"session", "user-session",
"page", 1,
"limit", 20
));
// Fetch specific user details
Map<String, Object> userDetails = ductape.sessions.fetchUserDetails(Map.of(
"session", "user-session",
"identifier", "user@example.com"
));
// Fetch dashboard metrics
Map<String, Object> dashboard = ductape.sessions.fetchDashboard(Map.of(
"session", "user-session"
));
// Fetch paginated users
users := client.sessions.fetchUsers({
"session": "user-session",
"page": 1,
"limit": 20,
});
// Fetch specific user details
userDetails := client.sessions.fetchUserDetails({
"session": "user-session",
"identifier": "user@example.com",
});
// Fetch dashboard metrics
dashboard := client.sessions.fetchDashboard({
"session": "user-session",
});
// Fetch paginated users
var users = await ductape.sessions.fetchUsers({
["session"] = "user-session",
["page"] = 1,
["limit"] = 20,
});
// Fetch specific user details
var userDetails = await ductape.sessions.fetchUserDetails({
["session"] = "user-session",
["identifier"] = "user@example.com",
});
// Fetch dashboard metrics
var dashboard = await ductape.sessions.fetchDashboard({
["session"] = "user-session",
});