@omniconvert/server-side-testing-sdk
Version:
TypeScript SDK for server-side A/B testing and experimentation
152 lines • 4.52 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.User = void 0;
const Bucket_1 = require("./Bucket");
const SessionParams_1 = require("./SessionParams");
/**
* User entity representing a website visitor
* Contains user data, session information, and experiment assignments
*/
class User {
constructor(id) {
this.pageviewCount = 0;
this.sessionCount = 0;
this.trafficAllocationBucket = new Bucket_1.Bucket();
this.experimentsBucket = new Bucket_1.Bucket();
this.variationsBucket = new Bucket_1.Bucket();
this.returningVisitor = false;
this.id = id;
}
// Getters
getId() {
return this.id;
}
getSessionParams() {
return this.sessionParams;
}
getLastActivityAt() {
return this.lastActivityAt;
}
getPageviewCount() {
return this.pageviewCount;
}
getSessionCount() {
return this.sessionCount;
}
getSessionViews() {
return this.pageviewCount;
}
getTrafficAllocationBucket() {
return this.trafficAllocationBucket;
}
getExperimentsBucket() {
return this.experimentsBucket;
}
getVariationsBucket() {
return this.variationsBucket;
}
getSessionId() {
return this.sessionId;
}
getIsReturning() {
return this.returningVisitor;
}
// Setters
setSessionParams(sessionParams) {
this.sessionParams = sessionParams;
}
setLastActivityAt(lastActivityAt) {
this.lastActivityAt = lastActivityAt;
}
setPageviewCount(pageviewCount) {
this.pageviewCount = pageviewCount;
}
setSessionCount(sessionCount) {
this.sessionCount = sessionCount;
}
setTrafficAllocationBucket(bucket) {
this.trafficAllocationBucket = bucket;
}
setExperimentsBucket(bucket) {
this.experimentsBucket = bucket;
}
setVariationsBucket(bucket) {
this.variationsBucket = bucket;
}
setSessionId(sessionId) {
this.sessionId = sessionId;
}
setIsReturning(isReturning) {
this.returningVisitor = isReturning;
}
// Increment methods
incrementPageviewCount() {
this.pageviewCount++;
}
incrementSessionCount() {
this.sessionCount++;
}
// Alias methods for backward compatibility
isReturning() {
return this.getIsReturning();
}
/**
* Convert to plain object for serialization
*/
toObject() {
return {
id: this.id,
sessionParams: this.sessionParams?.toObject(),
lastActivityAt: this.lastActivityAt?.toISOString(),
pageviewCount: this.pageviewCount,
sessionCount: this.sessionCount,
trafficAllocationBucket: this.trafficAllocationBucket.toObject(),
experimentsBucket: this.experimentsBucket.toObject(),
variationsBucket: this.variationsBucket.toObject(),
sessionId: this.sessionId,
isReturning: this.returningVisitor,
};
}
/**
* Create user from plain object (for deserialization)
*/
static fromObject(obj) {
const user = new User(obj.id);
if (obj.sessionParams) {
user.setSessionParams(SessionParams_1.SessionParams.fromObject(obj.sessionParams));
}
if (obj.lastActivityAt) {
user.setLastActivityAt(new Date(obj.lastActivityAt));
}
if (typeof obj.pageviewCount === 'number') {
user.setPageviewCount(obj.pageviewCount);
}
if (typeof obj.sessionCount === 'number') {
user.setSessionCount(obj.sessionCount);
}
if (obj.trafficAllocationBucket) {
user.setTrafficAllocationBucket(Bucket_1.Bucket.fromObject(obj.trafficAllocationBucket));
}
if (obj.experimentsBucket) {
user.setExperimentsBucket(Bucket_1.Bucket.fromObject(obj.experimentsBucket));
}
if (obj.variationsBucket) {
user.setVariationsBucket(Bucket_1.Bucket.fromObject(obj.variationsBucket));
}
if (obj.sessionId) {
user.setSessionId(obj.sessionId);
}
if (typeof obj.isReturning === 'boolean') {
user.setIsReturning(obj.isReturning);
}
return user;
}
/**
* Convert to JSON
*/
toJSON() {
return this.toObject();
}
}
exports.User = User;
//# sourceMappingURL=User.js.map