UNPKG

@omniconvert/server-side-testing-sdk

Version:

TypeScript SDK for server-side A/B testing and experimentation

152 lines 4.52 kB
"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