cdp-lite-sdk 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -224,7 +224,7 @@ const cdp = new CdpLiteSdk({
224
224
 
225
225
  ---
226
226
 
227
- <h2 id="user-tracking">🆔 ID Management</h2>
227
+ <h2 id="id-management">🆔 ID Management</h2>
228
228
 
229
229
  CDP Lite SDK manages **5 types of IDs** for comprehensive user tracking:
230
230
 
@@ -331,11 +331,16 @@
331
331
  type: type, // login, update, logout
332
332
  party_type: 'PERSON',
333
333
  traits: traits,
334
- profile_id: this.profileId,
334
+ // profile_id: this.profileId,
335
335
  platforms: this.platforms || this._convertDeviceInfoToPlatforms(),
336
336
  campaign: this.campaign,
337
- metadata: this.metadata
337
+ metadata: this.metadata,
338
+ device_id: this.deviceId, // Add device_id
339
+ session_id: this.sessionId, // Add session_id
338
340
  };
341
+ if (this.profileId) {
342
+ payload.profile_id = this.profileId;
343
+ }
339
344
 
340
345
  const headers = await this._getHeaders(payload);
341
346
 
@@ -1 +1 @@
1
- {"version":3,"file":"cdp-lite-sdk.umd.js","sources":["../src/cdp-lite-sdk.js"],"sourcesContent":["class CdpLiteSdk {\n constructor(config) {\n this.config = {\n apiKey: config.apiKey,\n secretKey: config.secretKey,\n source: config.source || 'Web',\n serviceName: config.serviceName || 'DefaultService',\n baseUrl: config.baseUrl || 'https://stg-ingestlog.vietcredit.com.vn',\n isTest: config.isTest !== undefined ? config.isTest : false,\n debug: config.debug || false,\n batchSize: config.batchSize || 10,\n batchInterval: config.batchInterval || 5000, // 5 seconds\n autoTrackDevice: config.autoTrackDevice !== undefined ? config.autoTrackDevice : true,\n enableEncryption: config.enableEncryption !== undefined ? config.enableEncryption : true,\n };\n console.log(config);\n\n if (!this.config.secretKey && this.config.enableEncryption) {\n this._logError('Warning: secretKey is required for encryption and signatures');\n }\n\n this.eventQueue = [];\n this.userId = null;\n this.profileId = this._getStoredProfileId(); // Profile ID from /v1/profiles/track response\n this.anonymousId = this._getOrCreateAnonymousId();\n this.deviceId = this._getOrCreateDeviceId(); // Persistent device ID\n this.sessionId = this._getOrCreateSessionId(); // Session ID\n this.userTraits = {};\n this.userIdentities = {};\n this.deviceInfo = this.config.autoTrackDevice ? this._getDeviceInfo() : {};\n this.platforms = {};\n this.campaign = {};\n this.metadata = { schema_version: '1.0' };\n this.crypto = this._initCrypto();\n\n // Start batch processor\n if (this.config.batchSize > 1) {\n this._startBatchProcessor();\n }\n\n this._log('CDP Lite SDK initialized', this.config);\n this._log('CDP Lite SDK initialized', {\n anonymousId: this.anonymousId,\n deviceId: this.deviceId,\n sessionId: this.sessionId\n });\n }\n\n // ============ MoEngage-like User Methods ============\n\n /**\n * Identify user (Login)\n * @param {string|object} userIdOrIdentities - User ID or identity object\n * @param {object} traits - User traits (optional)\n */\n async identifyUser(userIdOrIdentities, traits = {}) {\n if (typeof userIdOrIdentities === 'string') {\n // Simple user ID\n this.userId = userIdOrIdentities;\n } else if (typeof userIdOrIdentities === 'object') {\n // Identity object like { u_em: 'email@example.com' }\n this.userIdentities = { ...this.userIdentities, ...userIdOrIdentities };\n\n // Extract user ID from identities\n if (userIdOrIdentities.user_id) {\n this.userId = userIdOrIdentities.user_id;\n } else if (userIdOrIdentities.u_em) {\n this.userId = userIdOrIdentities.u_em; // Use email as ID if no user_id\n }\n }\n\n // Merge traits\n this.userTraits = { ...this.userTraits, ...traits };\n\n // Track profile with type: login\n const response = await this._trackProfile('login', this.userTraits);\n\n // Store profile_id from response\n if (response && response.profile_id) {\n this.profileId = response.profile_id;\n this._saveProfileId(response.profile_id);\n this._log('Profile ID received:', response.profile_id);\n }\n\n this._log('User identified', { userId: this.userId, traits });\n this._log('User identified', {\n userId: this.userId,\n profileId: this.profileId,\n transactionId: response?.transaction_id\n });\n return this;\n }\n\n /**\n * Get user identities\n */\n getUserIdentities() {\n return {\n user_id: this.userId,\n profile_id: this.profileId,\n anonymous_id: this.anonymousId,\n device_id: this.deviceId,\n session_id: this.sessionId,\n ...this.userIdentities\n };\n }\n\n /**\n * Get specific user attribute\n */\n getUserAttribute(attributeName) {\n return this.userTraits[attributeName] || null;\n }\n\n /**\n * Get profile ID\n */\n getProfileId() {\n return this.profileId;\n }\n\n /**\n * Get device ID\n */\n getDeviceId() {\n return this.deviceId;\n }\n\n /**\n * Get session ID\n */\n getSessionId() {\n return this.sessionId;\n }\n\n /**\n * Add first name\n */\n add_first_name(firstName) {\n this.userTraits.first_name = firstName;\n this._trackProfile('update', { first_name: firstName });\n return this;\n }\n\n /**\n * Add last name\n */\n add_last_name(lastName) {\n this.userTraits.last_name = lastName;\n this._trackProfile('update', { last_name: lastName });\n return this;\n }\n\n /**\n * Add email\n */\n add_email(email) {\n this.userTraits.email = email;\n this.userIdentities.u_em = email;\n this._trackProfile('update', { email });\n return this;\n }\n\n /**\n * Add mobile/phone\n */\n add_mobile(phone) {\n this.userTraits.phone = phone;\n this._trackProfile('update', { phone });\n return this;\n }\n\n /**\n * Add user name (full name)\n */\n add_user_name(fullName) {\n this.userTraits.full_name = fullName;\n this._trackProfile('update', { full_name: fullName });\n return this;\n }\n\n /**\n * Add gender\n */\n add_gender(gender) {\n this.userTraits.gender = gender;\n this._trackProfile('update', { gender });\n return this;\n }\n\n /**\n * Add birthday\n */\n add_birthday(birthday) {\n // Convert Date to YYYY-MM-DD format\n let dobString;\n if (birthday instanceof Date) {\n dobString = birthday.toISOString().split('T')[0];\n } else {\n dobString = birthday;\n }\n\n this.userTraits.dob = dobString;\n this._trackProfile('update', { dob: dobString });\n return this;\n }\n\n /**\n * Add ID card\n */\n add_idcard(idcard) {\n this.userTraits.idcard = idcard;\n this._trackProfile('update', { idcard });\n return this;\n }\n\n /**\n * Add old ID card\n */\n add_old_idcard(oldIdcard) {\n this.userTraits.old_idcard = oldIdcard;\n this._trackProfile('update', { old_idcard: oldIdcard });\n return this;\n }\n\n /**\n * Add address\n */\n add_address(address) {\n this.userTraits.address = address;\n this._trackProfile('update', { address });\n return this;\n }\n\n /**\n * Add religion\n */\n add_religion(religion) {\n this.userTraits.religion = religion;\n this._trackProfile('update', { religion });\n return this;\n }\n\n /**\n * Add custom user attribute\n */\n add_user_attribute(attributeName, value) {\n this.userTraits[attributeName] = value;\n this._trackProfile('update', { [attributeName]: value });\n return this;\n }\n\n /**\n * Add multiple user attributes\n */\n add_user_attributes(attributes) {\n this.userTraits = { ...this.userTraits, ...attributes };\n this._trackProfile('update', attributes);\n return this;\n }\n\n /**\n * Set platform info\n */\n setPlatform(platformInfo) {\n this.platforms = { ...this.platforms, ...platformInfo };\n return this;\n }\n\n /**\n * Set campaign info\n */\n setCampaign(campaignInfo) {\n this.campaign = { ...this.campaign, ...campaignInfo };\n return this;\n }\n\n /**\n * Destroy session (Logout)\n */\n async destroy_session() {\n // Track logout\n await this._trackProfile('logout', {});\n\n // Clear user data\n this.userId = null;\n this.profileId = null;\n this.userTraits = {};\n this.userIdentities = {};\n this.campaign = {};\n\n // Generate new anonymous ID\n this.anonymousId = this._generateUUID();\n this._saveAnonymousId(this.anonymousId);\n\n this.sessionId = this._generateUUID();\n this._saveSessionId(this.sessionId);\n\n // Clear stored profile ID\n this._clearProfileId();\n\n this._log('Session destroyed (logged out)');\n return this;\n }\n\n /**\n * Track user profile to /v1/profiles/track endpoint\n */\n async _trackProfile(type, traits) {\n const url = `${this.config.baseUrl}/v1/profiles/track`;\n\n const payload = {\n user_id: this.userId || this.anonymousId,\n type: type, // login, update, logout\n party_type: 'PERSON',\n traits: traits,\n profile_id: this.profileId,\n platforms: this.platforms || this._convertDeviceInfoToPlatforms(),\n campaign: this.campaign,\n metadata: this.metadata\n };\n\n const headers = await this._getHeaders(payload);\n\n try {\n const response = await this._makeRequest(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload)\n });\n\n this._log('Profile tracked', {\n type,\n userId: this.userId,\n profileId: response?.profile_id,\n transactionId: response?.transaction_id\n });\n return response;\n } catch (error) {\n this._logError('Failed to track profile', error);\n throw error;\n }\n }\n\n /**\n * Convert device info to platforms format\n */\n _convertDeviceInfoToPlatforms() {\n if (!this.deviceInfo || Object.keys(this.deviceInfo).length === 0) {\n return {};\n }\n\n return {\n device_type: this._detectDeviceType(),\n brand: this.deviceInfo.brand || 'Unknown',\n model: this.deviceInfo.model || 'Unknown',\n app_version: this.deviceInfo.app_version || '',\n os_name: this.deviceInfo.platform || 'Unknown',\n os_version: this.deviceInfo.os_version || 'Unknown'\n };\n }\n\n _detectDeviceType() {\n if (typeof window === 'undefined') return 'server';\n\n const ua = navigator.userAgent;\n if (/Mobile|Android|iPhone|iPad|iPod/.test(ua)) return 'mobile';\n if (/Tablet|iPad/.test(ua)) return 'tablet';\n return 'desktop';\n }\n\n // ============ Public Methods ============\n\n /**\n * Track an event\n * @param {string} eventName - Name of the event\n * @param {object} properties - Event properties\n * @param {object} options - Additional options (device, campaign, context, etc.)\n */\n track(eventName, properties = {}, options = {}) {\n const event = this._createEvent({\n type: 'track',\n event: eventName,\n properties,\n ...options\n });\n\n if (this.config.batchSize > 1) {\n this._addToQueue(event);\n } else {\n return this._sendEvent(event);\n }\n }\n\n /**\n * Identify a user\n * @param {string} userId - User ID\n * @param {object} traits - User traits/attributes\n */\n async identify(userId, traits = {}) {\n return this.identifyUser(userId, traits);\n // this.userId = userId;\n // this.userTraits = { ...this.userTraits, ...traits };\n //\n // // Encrypt sensitive traits\n // const encryptedTraits = await this._encryptTraits(traits);\n //\n // const event = this._createEvent({\n // type: 'identify',\n // event: 'user_identified',\n // traits: encryptedTraits,\n // _rawTraits: traits // Store raw for internal use, won't be sent\n // });\n //\n // // Remove raw traits before sending\n // delete event._rawTraits;\n //\n // this._log('User identified', { userId, traitsEncrypted: !!encryptedTraits });\n //\n // if (this.config.batchSize > 1) {\n // this._addToQueue(event);\n // } else {\n // return this._sendEvent(event);\n // }\n }\n\n /**\n * Track a page view\n * @param {string} pageName - Page name\n * @param {object} properties - Page properties\n */\n page(pageName, properties = {}) {\n return this.track('page_view', {\n page_name: pageName,\n ...properties\n });\n }\n\n /**\n * Track a screen view (for mobile apps)\n * @param {string} screenName - Screen name\n * @param {object} properties - Screen properties\n */\n screen(screenName, properties = {}) {\n return this.track('screen_view', {\n screen_name: screenName,\n ...properties\n });\n }\n\n /**\n * Set user properties\n * @param {object} traits - User traits\n */\n setUserAttributes(traits) {\n return this.add_user_attributes(traits);\n // this.userTraits = { ...this.userTraits, ...traits };\n // return this.identify(this.userId, traits);\n }\n\n /**\n * Set device information\n * @param {object} deviceInfo - Device information\n */\n setDeviceInfo(deviceInfo) {\n this.deviceInfo = { ...this.deviceInfo, ...deviceInfo };\n }\n\n /**\n * Manually flush the event queue\n */\n async flush() {\n if (this.eventQueue.length === 0) {\n return;\n }\n\n const events = [...this.eventQueue];\n this.eventQueue = [];\n\n return this._sendBatch(events);\n }\n\n /**\n * Reset user data (logout)\n */\n reset() {\n return this.destroy_session();\n // this.userId = null;\n // this.userTraits = {};\n // this.anonymousId = this._generateUUID();\n // this._saveAnonymousId(this.anonymousId);\n // this._log('User data reset');\n }\n\n // Cleanup\n async destroy() {\n if (this.batchInterval) {\n clearInterval(this.batchInterval);\n }\n await this.flush();\n }\n\n // ============ Private Methods ============\n\n _createEvent(data) {\n return {\n event_id: this._generateUUID(),\n trace_id: this._generateUUID(),\n type: data.type || 'track',\n event_name: data.event,\n service_name: this.config.serviceName,\n user_id: this.userId || '',\n profile_id: this.profileId || null, // Add profile_id\n anonymous_id: this.anonymousId,\n device_id: this.deviceId, // Add device_id\n session_id: this.sessionId, // Add session_id\n loan_code: data.loanCode || '',\n properties: data.properties || {\n \"hasFake\": true\n },\n traits: data.traits || '',\n device: data.device || this.deviceInfo,\n campaign: data.campaign || {},\n context: data.context || {},\n event_time: new Date().toISOString(),\n };\n }\n\n async _sendEvent(event) {\n const url = `${this.config.baseUrl}/v1/events/track`;\n const headers = await this._getHeaders(event);\n\n try {\n const response = await this._makeRequest(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(event),\n });\n\n this._log('Event tracked successfully', event.event);\n return response;\n } catch (error) {\n this._logError('Failed to track event', error);\n throw error;\n }\n }\n\n async _sendBatch(events) {\n if (events.length === 0) return;\n\n const url = `${this.config.baseUrl}/v1/events/batch`;\n const payload = { events };\n const headers = await this._getHeaders(payload);\n\n try {\n const response = await this._makeRequest(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n this._log(`Batch of ${events.length} events tracked successfully`);\n return response;\n } catch (error) {\n this._logError('Failed to track batch', error);\n this.eventQueue.unshift(...events);\n throw error;\n }\n }\n\n _addToQueue(event) {\n this.eventQueue.push(event);\n this._log('Event added to queue', { queueSize: this.eventQueue.length });\n\n if (this.eventQueue.length >= this.config.batchSize) {\n this.flush();\n }\n }\n\n _startBatchProcessor() {\n this.batchInterval = setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush();\n }\n }, this.config.batchInterval);\n\n if (typeof window !== 'undefined') {\n window.addEventListener('beforeunload', () => {\n this.flush();\n });\n }\n }\n\n async _getHeaders(payload) {\n const timestamp = Math.floor(Date.now() / 1000);\n const payloadString = typeof payload === 'string' ? payload : JSON.stringify(payload);\n\n // Generate signature if secret key is provided\n const signature = await this._generateSignature(\n this.config.source,\n timestamp.toString(),\n payloadString\n );\n\n return {\n 'X-Api-Key': this.config.apiKey,\n 'X-Source': this.config.source,\n 'X-Timestamp': timestamp.toString(),\n 'X-Signatures': signature,\n 'X-Trace-Id': this._generateUUID(),\n 'isTest': this.config.isTest.toString(),\n 'Content-Type': 'application/json',\n };\n }\n\n async _makeRequest(url, options) {\n if (typeof fetch !== 'undefined') {\n const response = await fetch(url, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return response.json();\n } else {\n const https = require('https');\n const urlObj = new URL(url);\n\n return new Promise((resolve, reject) => {\n const req = https.request({\n hostname: urlObj.hostname,\n path: urlObj.pathname + urlObj.search,\n method: options.method,\n headers: options.headers,\n }, (res) => {\n let data = '';\n res.on('data', chunk => data += chunk);\n res.on('end', () => {\n if (res.statusCode >= 200 && res.statusCode < 300) {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n resolve(data);\n }\n } else {\n reject(new Error(`HTTP error! status: ${res.statusCode}`));\n }\n });\n });\n\n req.on('error', reject);\n if (options.body) {\n req.write(options.body);\n }\n req.end();\n });\n }\n }\n\n _getDeviceInfo() {\n if (typeof window === 'undefined') {\n return {\n platform: process.platform,\n brand: 'Server',\n model: 'Node.js',\n app_version: '',\n os_version: process.version,\n };\n }\n\n const ua = navigator.userAgent;\n const platform = this._detectPlatform(ua);\n\n return {\n platform,\n brand: this._detectBrand(ua),\n model: this._detectModel(ua),\n app_version: '',\n os_version: this._detectOSVersion(ua),\n };\n }\n\n _detectPlatform(ua) {\n if (/iPhone|iPad|iPod/.test(ua)) return 'ios';\n if (/Android/.test(ua)) return 'android';\n if (/Windows/.test(ua)) return 'windows';\n if (/Mac/.test(ua)) return 'macos';\n if (/Linux/.test(ua)) return 'linux';\n return 'web';\n }\n\n _detectBrand(ua) {\n if (/iPhone|iPad|iPod/.test(ua)) return 'Apple';\n if (/Samsung/.test(ua)) return 'Samsung';\n if (/Huawei/.test(ua)) return 'Huawei';\n if (/Xiaomi/.test(ua)) return 'Xiaomi';\n if (/Oppo/.test(ua)) return 'Oppo';\n return 'Unknown';\n }\n\n _detectModel(ua) {\n const match = ua.match(/\\(([^)]+)\\)/);\n return match ? match[1].split(';')[0].trim() : 'Unknown';\n }\n\n _detectOSVersion(ua) {\n const match = ua.match(/(?:Android|iPhone OS|CPU OS|Mac OS X|Windows NT) ([\\d._]+)/);\n return match ? match[1].replace(/_/g, '.') : 'Unknown';\n }\n\n _getOrCreateAnonymousId() {\n if (typeof localStorage !== 'undefined') {\n let id = localStorage.getItem('cdp_anonymous_id');\n if (!id) {\n id = this._generateUUID();\n this._saveAnonymousId(id);\n }\n return id;\n }\n return this._generateUUID();\n }\n\n _saveAnonymousId(id) {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem('cdp_anonymous_id', id);\n }\n }\n\n _getOrCreateDeviceId() {\n if (typeof localStorage !== 'undefined') {\n let id = localStorage.getItem('cdp_device_id');\n if (!id) {\n id = this._generateUUID();\n this._saveDeviceId(id);\n }\n return id;\n }\n return this._generateUUID();\n }\n\n _saveDeviceId(id) {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem('cdp_device_id', id);\n }\n }\n\n _getOrCreateSessionId() {\n if (typeof sessionStorage !== 'undefined') {\n let id = sessionStorage.getItem('cdp_session_id');\n if (!id) {\n id = this._generateUUID();\n this._saveSessionId(id);\n }\n return id;\n }\n return this._generateUUID();\n }\n\n _saveSessionId(id) {\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.setItem('cdp_session_id', id);\n }\n }\n\n _getStoredProfileId() {\n if (typeof localStorage !== 'undefined') {\n return localStorage.getItem('cdp_profile_id');\n }\n return null;\n }\n\n _saveProfileId(id) {\n this.profileId = id;\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem('cdp_profile_id', id.toString());\n }\n }\n\n _clearProfileId() {\n this.profileId = null;\n if (typeof localStorage !== 'undefined') {\n localStorage.removeItem('cdp_profile_id');\n }\n }\n\n _generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n _log(...args) {\n if (this.config.debug) {\n console.log('[CDP Lite SDK]', ...args);\n }\n }\n\n _logError(...args) {\n if (this.config.debug) {\n console.error('[CDP Lite SDK]', ...args);\n }\n }\n\n // ============ Security Methods ============\n\n /**\n * Initialize crypto library\n */\n _initCrypto() {\n if (typeof window !== 'undefined' && window.crypto && window.crypto.subtle) {\n return window.crypto;\n }\n if (typeof require !== 'undefined') {\n try {\n return require('crypto');\n } catch (e) {\n this._logError('Crypto module not available');\n return null;\n }\n }\n return null;\n }\n\n /**\n * Encrypt traits using AES\n * AES Key = SHA256(SecretKey + X-Timestamp)\n */\n async _encryptTraits(traits) {\n if (!this.config.enableEncryption || !this.config.secretKey) {\n return typeof traits === 'string' ? traits : JSON.stringify(traits);\n }\n\n try {\n const timestamp = Math.floor(Date.now() / 1000).toString();\n const sensitiveTraits = this._extractSensitiveTraits(traits);\n\n if (Object.keys(sensitiveTraits).length === 0) {\n return '';\n }\n\n const traitsString = JSON.stringify(sensitiveTraits);\n\n // Browser environment\n if (typeof window !== 'undefined' && this.crypto && this.crypto.subtle) {\n return await this._encryptAESBrowser(traitsString, timestamp);\n }\n\n // Node.js environment\n if (typeof require !== 'undefined') {\n return this._encryptAESNode(traitsString, timestamp);\n }\n\n this._logError('Encryption not supported in this environment');\n return '';\n } catch (error) {\n this._logError('Failed to encrypt traits:', error);\n return '';\n }\n }\n\n /**\n * Extract only sensitive traits that need encryption\n */\n _extractSensitiveTraits(traits) {\n const sensitiveFields = [\n 'full_name', 'first_name', 'last_name',\n 'idcard', 'old_idcard', 'phone', 'email',\n 'gender', 'dob', 'address', 'religion'\n ];\n\n const sensitive = {};\n for (const field of sensitiveFields) {\n if (traits[field] !== undefined && traits[field] !== null && traits[field] !== '') {\n sensitive[field] = traits[field];\n }\n }\n return sensitive;\n }\n\n /**\n * AES encryption for browser using Web Crypto API\n */\n async _encryptAESBrowser(text, timestamp) {\n try {\n // Generate key: SHA256(SecretKey + Timestamp)\n const keyMaterial = this.config.secretKey + timestamp;\n const keyBuffer = new TextEncoder().encode(keyMaterial);\n\n const hashBuffer = await this.crypto.subtle.digest('SHA-256', keyBuffer);\n\n const key = await this.crypto.subtle.importKey(\n 'raw',\n hashBuffer,\n { name: 'AES-CBC', length: 256 },\n false,\n ['encrypt']\n );\n\n // Generate random IV\n const iv = this.crypto.getRandomValues(new Uint8Array(16));\n\n // Encrypt\n const encryptedBuffer = await this.crypto.subtle.encrypt(\n { name: 'AES-CBC', iv },\n key,\n new TextEncoder().encode(text)\n );\n\n // Combine IV + encrypted data\n const combined = new Uint8Array(iv.length + encryptedBuffer.byteLength);\n combined.set(iv, 0);\n combined.set(new Uint8Array(encryptedBuffer), iv.length);\n\n // Return Base64\n return this._arrayBufferToBase64(combined);\n } catch (error) {\n this._logError('Browser encryption failed:', error);\n return '';\n }\n }\n\n /**\n * AES encryption for Node.js\n */\n _encryptAESNode(text, timestamp) {\n try {\n const crypto = require('crypto');\n\n // Generate key: SHA256(SecretKey + Timestamp)\n const keyMaterial = this.config.secretKey + timestamp;\n const key = crypto.createHash('sha256').update(keyMaterial).digest();\n\n // Generate random IV\n const iv = crypto.randomBytes(16);\n\n // Encrypt\n const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);\n let encrypted = cipher.update(text, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n // Combine IV + encrypted data\n const combined = Buffer.concat([iv, Buffer.from(encrypted, 'hex')]);\n\n // Return Base64\n return combined.toString('base64');\n } catch (error) {\n this._logError('Node.js encryption failed:', error);\n return '';\n }\n }\n\n /**\n * Generate HMAC signature\n * X-Signatures = Base64(HMAC-SHA256(X-Source + \"|\" + X-Timestamp + \"|\" + Payload))\n */\n async _generateSignature(source, timestamp, payload) {\n if (!this.config.secretKey) {\n return '';\n }\n\n try {\n const message = `${source}|${timestamp}|${payload}`;\n\n // Browser environment\n if (typeof window !== 'undefined' && this.crypto && this.crypto.subtle) {\n return await this._hmacBrowser(message);\n }\n\n // Node.js environment\n if (typeof require !== 'undefined') {\n return this._hmacNode(message);\n }\n\n return '';\n } catch (error) {\n this._logError('Failed to generate signature:', error);\n return '';\n }\n }\n\n /**\n * HMAC for browser\n */\n async _hmacBrowser(message) {\n try {\n const encoder = new TextEncoder();\n const keyData = encoder.encode(this.config.secretKey);\n\n const key = await this.crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signature = await this.crypto.subtle.sign(\n 'HMAC',\n key,\n encoder.encode(message)\n );\n\n return this._arrayBufferToBase64(signature);\n } catch (error) {\n this._logError('Browser HMAC failed:', error);\n return '';\n }\n }\n\n /**\n * HMAC for Node.js\n */\n _hmacNode(message) {\n try {\n const crypto = require('crypto');\n const hmac = crypto.createHmac('sha256', this.config.secretKey);\n hmac.update(message);\n return hmac.digest('base64');\n } catch (error) {\n this._logError('Node.js HMAC failed:', error);\n return '';\n }\n }\n\n /**\n * Convert ArrayBuffer to Base64\n */\n _arrayBufferToBase64(buffer) {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n\n}\n\n// FIXED: Proper exports for both CommonJS and ES modules\n// This ensures compatibility with both import styles\n\n// Named export for flexibility\n// export { CdpLiteSdk };\n\n// ES Module export (default)\n// export default CdpLiteSdk;\n\n// CommonJS export (for Node.js require)\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = CdpLiteSdk;\n module.exports.default = CdpLiteSdk;\n module.exports.CdpLiteSdk = CdpLiteSdk;\n}\n\n// Browser global\nif (typeof window !== 'undefined') {\n window.CdpLiteSdk = CdpLiteSdk;\n}\n"],"names":["require"],"mappings":"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"}
1
+ {"version":3,"file":"cdp-lite-sdk.umd.js","sources":["../src/cdp-lite-sdk.js"],"sourcesContent":["class CdpLiteSdk {\n constructor(config) {\n this.config = {\n apiKey: config.apiKey,\n secretKey: config.secretKey,\n source: config.source || 'Web',\n serviceName: config.serviceName || 'DefaultService',\n baseUrl: config.baseUrl || 'https://stg-ingestlog.vietcredit.com.vn',\n isTest: config.isTest !== undefined ? config.isTest : false,\n debug: config.debug || false,\n batchSize: config.batchSize || 10,\n batchInterval: config.batchInterval || 5000, // 5 seconds\n autoTrackDevice: config.autoTrackDevice !== undefined ? config.autoTrackDevice : true,\n enableEncryption: config.enableEncryption !== undefined ? config.enableEncryption : true,\n };\n console.log(config);\n\n if (!this.config.secretKey && this.config.enableEncryption) {\n this._logError('Warning: secretKey is required for encryption and signatures');\n }\n\n this.eventQueue = [];\n this.userId = null;\n this.profileId = this._getStoredProfileId(); // Profile ID from /v1/profiles/track response\n this.anonymousId = this._getOrCreateAnonymousId();\n this.deviceId = this._getOrCreateDeviceId(); // Persistent device ID\n this.sessionId = this._getOrCreateSessionId(); // Session ID\n this.userTraits = {};\n this.userIdentities = {};\n this.deviceInfo = this.config.autoTrackDevice ? this._getDeviceInfo() : {};\n this.platforms = {};\n this.campaign = {};\n this.metadata = { schema_version: '1.0' };\n this.crypto = this._initCrypto();\n\n // Start batch processor\n if (this.config.batchSize > 1) {\n this._startBatchProcessor();\n }\n\n this._log('CDP Lite SDK initialized', this.config);\n this._log('CDP Lite SDK initialized', {\n anonymousId: this.anonymousId,\n deviceId: this.deviceId,\n sessionId: this.sessionId\n });\n }\n\n // ============ MoEngage-like User Methods ============\n\n /**\n * Identify user (Login)\n * @param {string|object} userIdOrIdentities - User ID or identity object\n * @param {object} traits - User traits (optional)\n */\n async identifyUser(userIdOrIdentities, traits = {}) {\n if (typeof userIdOrIdentities === 'string') {\n // Simple user ID\n this.userId = userIdOrIdentities;\n } else if (typeof userIdOrIdentities === 'object') {\n // Identity object like { u_em: 'email@example.com' }\n this.userIdentities = { ...this.userIdentities, ...userIdOrIdentities };\n\n // Extract user ID from identities\n if (userIdOrIdentities.user_id) {\n this.userId = userIdOrIdentities.user_id;\n } else if (userIdOrIdentities.u_em) {\n this.userId = userIdOrIdentities.u_em; // Use email as ID if no user_id\n }\n }\n\n // Merge traits\n this.userTraits = { ...this.userTraits, ...traits };\n\n // Track profile with type: login\n const response = await this._trackProfile('login', this.userTraits);\n\n // Store profile_id from response\n if (response && response.profile_id) {\n this.profileId = response.profile_id;\n this._saveProfileId(response.profile_id);\n this._log('Profile ID received:', response.profile_id);\n }\n\n this._log('User identified', { userId: this.userId, traits });\n this._log('User identified', {\n userId: this.userId,\n profileId: this.profileId,\n transactionId: response?.transaction_id\n });\n return this;\n }\n\n /**\n * Get user identities\n */\n getUserIdentities() {\n return {\n user_id: this.userId,\n profile_id: this.profileId,\n anonymous_id: this.anonymousId,\n device_id: this.deviceId,\n session_id: this.sessionId,\n ...this.userIdentities\n };\n }\n\n /**\n * Get specific user attribute\n */\n getUserAttribute(attributeName) {\n return this.userTraits[attributeName] || null;\n }\n\n /**\n * Get profile ID\n */\n getProfileId() {\n return this.profileId;\n }\n\n /**\n * Get device ID\n */\n getDeviceId() {\n return this.deviceId;\n }\n\n /**\n * Get session ID\n */\n getSessionId() {\n return this.sessionId;\n }\n\n /**\n * Add first name\n */\n add_first_name(firstName) {\n this.userTraits.first_name = firstName;\n this._trackProfile('update', { first_name: firstName });\n return this;\n }\n\n /**\n * Add last name\n */\n add_last_name(lastName) {\n this.userTraits.last_name = lastName;\n this._trackProfile('update', { last_name: lastName });\n return this;\n }\n\n /**\n * Add email\n */\n add_email(email) {\n this.userTraits.email = email;\n this.userIdentities.u_em = email;\n this._trackProfile('update', { email });\n return this;\n }\n\n /**\n * Add mobile/phone\n */\n add_mobile(phone) {\n this.userTraits.phone = phone;\n this._trackProfile('update', { phone });\n return this;\n }\n\n /**\n * Add user name (full name)\n */\n add_user_name(fullName) {\n this.userTraits.full_name = fullName;\n this._trackProfile('update', { full_name: fullName });\n return this;\n }\n\n /**\n * Add gender\n */\n add_gender(gender) {\n this.userTraits.gender = gender;\n this._trackProfile('update', { gender });\n return this;\n }\n\n /**\n * Add birthday\n */\n add_birthday(birthday) {\n // Convert Date to YYYY-MM-DD format\n let dobString;\n if (birthday instanceof Date) {\n dobString = birthday.toISOString().split('T')[0];\n } else {\n dobString = birthday;\n }\n\n this.userTraits.dob = dobString;\n this._trackProfile('update', { dob: dobString });\n return this;\n }\n\n /**\n * Add ID card\n */\n add_idcard(idcard) {\n this.userTraits.idcard = idcard;\n this._trackProfile('update', { idcard });\n return this;\n }\n\n /**\n * Add old ID card\n */\n add_old_idcard(oldIdcard) {\n this.userTraits.old_idcard = oldIdcard;\n this._trackProfile('update', { old_idcard: oldIdcard });\n return this;\n }\n\n /**\n * Add address\n */\n add_address(address) {\n this.userTraits.address = address;\n this._trackProfile('update', { address });\n return this;\n }\n\n /**\n * Add religion\n */\n add_religion(religion) {\n this.userTraits.religion = religion;\n this._trackProfile('update', { religion });\n return this;\n }\n\n /**\n * Add custom user attribute\n */\n add_user_attribute(attributeName, value) {\n this.userTraits[attributeName] = value;\n this._trackProfile('update', { [attributeName]: value });\n return this;\n }\n\n /**\n * Add multiple user attributes\n */\n add_user_attributes(attributes) {\n this.userTraits = { ...this.userTraits, ...attributes };\n this._trackProfile('update', attributes);\n return this;\n }\n\n /**\n * Set platform info\n */\n setPlatform(platformInfo) {\n this.platforms = { ...this.platforms, ...platformInfo };\n return this;\n }\n\n /**\n * Set campaign info\n */\n setCampaign(campaignInfo) {\n this.campaign = { ...this.campaign, ...campaignInfo };\n return this;\n }\n\n /**\n * Destroy session (Logout)\n */\n async destroy_session() {\n // Track logout\n await this._trackProfile('logout', {});\n\n // Clear user data\n this.userId = null;\n this.profileId = null;\n this.userTraits = {};\n this.userIdentities = {};\n this.campaign = {};\n\n // Generate new anonymous ID\n this.anonymousId = this._generateUUID();\n this._saveAnonymousId(this.anonymousId);\n\n this.sessionId = this._generateUUID();\n this._saveSessionId(this.sessionId);\n\n // Clear stored profile ID\n this._clearProfileId();\n\n this._log('Session destroyed (logged out)');\n return this;\n }\n\n /**\n * Track user profile to /v1/profiles/track endpoint\n */\n async _trackProfile(type, traits) {\n const url = `${this.config.baseUrl}/v1/profiles/track`;\n\n const payload = {\n user_id: this.userId || this.anonymousId,\n type: type, // login, update, logout\n party_type: 'PERSON',\n traits: traits,\n // profile_id: this.profileId,\n platforms: this.platforms || this._convertDeviceInfoToPlatforms(),\n campaign: this.campaign,\n metadata: this.metadata,\n device_id: this.deviceId, // Add device_id\n session_id: this.sessionId, // Add session_id\n };\n if (this.profileId) {\n payload.profile_id = this.profileId;\n }\n\n const headers = await this._getHeaders(payload);\n\n try {\n const response = await this._makeRequest(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload)\n });\n\n this._log('Profile tracked', {\n type,\n userId: this.userId,\n profileId: response?.profile_id,\n transactionId: response?.transaction_id\n });\n return response;\n } catch (error) {\n this._logError('Failed to track profile', error);\n throw error;\n }\n }\n\n /**\n * Convert device info to platforms format\n */\n _convertDeviceInfoToPlatforms() {\n if (!this.deviceInfo || Object.keys(this.deviceInfo).length === 0) {\n return {};\n }\n\n return {\n device_type: this._detectDeviceType(),\n brand: this.deviceInfo.brand || 'Unknown',\n model: this.deviceInfo.model || 'Unknown',\n app_version: this.deviceInfo.app_version || '',\n os_name: this.deviceInfo.platform || 'Unknown',\n os_version: this.deviceInfo.os_version || 'Unknown'\n };\n }\n\n _detectDeviceType() {\n if (typeof window === 'undefined') return 'server';\n\n const ua = navigator.userAgent;\n if (/Mobile|Android|iPhone|iPad|iPod/.test(ua)) return 'mobile';\n if (/Tablet|iPad/.test(ua)) return 'tablet';\n return 'desktop';\n }\n\n // ============ Public Methods ============\n\n /**\n * Track an event\n * @param {string} eventName - Name of the event\n * @param {object} properties - Event properties\n * @param {object} options - Additional options (device, campaign, context, etc.)\n */\n track(eventName, properties = {}, options = {}) {\n const event = this._createEvent({\n type: 'track',\n event: eventName,\n properties,\n ...options\n });\n\n if (this.config.batchSize > 1) {\n this._addToQueue(event);\n } else {\n return this._sendEvent(event);\n }\n }\n\n /**\n * Identify a user\n * @param {string} userId - User ID\n * @param {object} traits - User traits/attributes\n */\n async identify(userId, traits = {}) {\n return this.identifyUser(userId, traits);\n // this.userId = userId;\n // this.userTraits = { ...this.userTraits, ...traits };\n //\n // // Encrypt sensitive traits\n // const encryptedTraits = await this._encryptTraits(traits);\n //\n // const event = this._createEvent({\n // type: 'identify',\n // event: 'user_identified',\n // traits: encryptedTraits,\n // _rawTraits: traits // Store raw for internal use, won't be sent\n // });\n //\n // // Remove raw traits before sending\n // delete event._rawTraits;\n //\n // this._log('User identified', { userId, traitsEncrypted: !!encryptedTraits });\n //\n // if (this.config.batchSize > 1) {\n // this._addToQueue(event);\n // } else {\n // return this._sendEvent(event);\n // }\n }\n\n /**\n * Track a page view\n * @param {string} pageName - Page name\n * @param {object} properties - Page properties\n */\n page(pageName, properties = {}) {\n return this.track('page_view', {\n page_name: pageName,\n ...properties\n });\n }\n\n /**\n * Track a screen view (for mobile apps)\n * @param {string} screenName - Screen name\n * @param {object} properties - Screen properties\n */\n screen(screenName, properties = {}) {\n return this.track('screen_view', {\n screen_name: screenName,\n ...properties\n });\n }\n\n /**\n * Set user properties\n * @param {object} traits - User traits\n */\n setUserAttributes(traits) {\n return this.add_user_attributes(traits);\n // this.userTraits = { ...this.userTraits, ...traits };\n // return this.identify(this.userId, traits);\n }\n\n /**\n * Set device information\n * @param {object} deviceInfo - Device information\n */\n setDeviceInfo(deviceInfo) {\n this.deviceInfo = { ...this.deviceInfo, ...deviceInfo };\n }\n\n /**\n * Manually flush the event queue\n */\n async flush() {\n if (this.eventQueue.length === 0) {\n return;\n }\n\n const events = [...this.eventQueue];\n this.eventQueue = [];\n\n return this._sendBatch(events);\n }\n\n /**\n * Reset user data (logout)\n */\n reset() {\n return this.destroy_session();\n // this.userId = null;\n // this.userTraits = {};\n // this.anonymousId = this._generateUUID();\n // this._saveAnonymousId(this.anonymousId);\n // this._log('User data reset');\n }\n\n // Cleanup\n async destroy() {\n if (this.batchInterval) {\n clearInterval(this.batchInterval);\n }\n await this.flush();\n }\n\n // ============ Private Methods ============\n\n _createEvent(data) {\n return {\n event_id: this._generateUUID(),\n trace_id: this._generateUUID(),\n type: data.type || 'track',\n event_name: data.event,\n service_name: this.config.serviceName,\n user_id: this.userId || '',\n profile_id: this.profileId || null, // Add profile_id\n anonymous_id: this.anonymousId,\n device_id: this.deviceId, // Add device_id\n session_id: this.sessionId, // Add session_id\n loan_code: data.loanCode || '',\n properties: data.properties || {\n \"hasFake\": true\n },\n traits: data.traits || '',\n device: data.device || this.deviceInfo,\n campaign: data.campaign || {},\n context: data.context || {},\n event_time: new Date().toISOString(),\n };\n }\n\n async _sendEvent(event) {\n const url = `${this.config.baseUrl}/v1/events/track`;\n const headers = await this._getHeaders(event);\n\n try {\n const response = await this._makeRequest(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(event),\n });\n\n this._log('Event tracked successfully', event.event);\n return response;\n } catch (error) {\n this._logError('Failed to track event', error);\n throw error;\n }\n }\n\n async _sendBatch(events) {\n if (events.length === 0) return;\n\n const url = `${this.config.baseUrl}/v1/events/batch`;\n const payload = { events };\n const headers = await this._getHeaders(payload);\n\n try {\n const response = await this._makeRequest(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(payload),\n });\n\n this._log(`Batch of ${events.length} events tracked successfully`);\n return response;\n } catch (error) {\n this._logError('Failed to track batch', error);\n this.eventQueue.unshift(...events);\n throw error;\n }\n }\n\n _addToQueue(event) {\n this.eventQueue.push(event);\n this._log('Event added to queue', { queueSize: this.eventQueue.length });\n\n if (this.eventQueue.length >= this.config.batchSize) {\n this.flush();\n }\n }\n\n _startBatchProcessor() {\n this.batchInterval = setInterval(() => {\n if (this.eventQueue.length > 0) {\n this.flush();\n }\n }, this.config.batchInterval);\n\n if (typeof window !== 'undefined') {\n window.addEventListener('beforeunload', () => {\n this.flush();\n });\n }\n }\n\n async _getHeaders(payload) {\n const timestamp = Math.floor(Date.now() / 1000);\n const payloadString = typeof payload === 'string' ? payload : JSON.stringify(payload);\n\n // Generate signature if secret key is provided\n const signature = await this._generateSignature(\n this.config.source,\n timestamp.toString(),\n payloadString\n );\n\n return {\n 'X-Api-Key': this.config.apiKey,\n 'X-Source': this.config.source,\n 'X-Timestamp': timestamp.toString(),\n 'X-Signatures': signature,\n 'X-Trace-Id': this._generateUUID(),\n 'isTest': this.config.isTest.toString(),\n 'Content-Type': 'application/json',\n };\n }\n\n async _makeRequest(url, options) {\n if (typeof fetch !== 'undefined') {\n const response = await fetch(url, options);\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n return response.json();\n } else {\n const https = require('https');\n const urlObj = new URL(url);\n\n return new Promise((resolve, reject) => {\n const req = https.request({\n hostname: urlObj.hostname,\n path: urlObj.pathname + urlObj.search,\n method: options.method,\n headers: options.headers,\n }, (res) => {\n let data = '';\n res.on('data', chunk => data += chunk);\n res.on('end', () => {\n if (res.statusCode >= 200 && res.statusCode < 300) {\n try {\n resolve(JSON.parse(data));\n } catch (e) {\n resolve(data);\n }\n } else {\n reject(new Error(`HTTP error! status: ${res.statusCode}`));\n }\n });\n });\n\n req.on('error', reject);\n if (options.body) {\n req.write(options.body);\n }\n req.end();\n });\n }\n }\n\n _getDeviceInfo() {\n if (typeof window === 'undefined') {\n return {\n platform: process.platform,\n brand: 'Server',\n model: 'Node.js',\n app_version: '',\n os_version: process.version,\n };\n }\n\n const ua = navigator.userAgent;\n const platform = this._detectPlatform(ua);\n\n return {\n platform,\n brand: this._detectBrand(ua),\n model: this._detectModel(ua),\n app_version: '',\n os_version: this._detectOSVersion(ua),\n };\n }\n\n _detectPlatform(ua) {\n if (/iPhone|iPad|iPod/.test(ua)) return 'ios';\n if (/Android/.test(ua)) return 'android';\n if (/Windows/.test(ua)) return 'windows';\n if (/Mac/.test(ua)) return 'macos';\n if (/Linux/.test(ua)) return 'linux';\n return 'web';\n }\n\n _detectBrand(ua) {\n if (/iPhone|iPad|iPod/.test(ua)) return 'Apple';\n if (/Samsung/.test(ua)) return 'Samsung';\n if (/Huawei/.test(ua)) return 'Huawei';\n if (/Xiaomi/.test(ua)) return 'Xiaomi';\n if (/Oppo/.test(ua)) return 'Oppo';\n return 'Unknown';\n }\n\n _detectModel(ua) {\n const match = ua.match(/\\(([^)]+)\\)/);\n return match ? match[1].split(';')[0].trim() : 'Unknown';\n }\n\n _detectOSVersion(ua) {\n const match = ua.match(/(?:Android|iPhone OS|CPU OS|Mac OS X|Windows NT) ([\\d._]+)/);\n return match ? match[1].replace(/_/g, '.') : 'Unknown';\n }\n\n _getOrCreateAnonymousId() {\n if (typeof localStorage !== 'undefined') {\n let id = localStorage.getItem('cdp_anonymous_id');\n if (!id) {\n id = this._generateUUID();\n this._saveAnonymousId(id);\n }\n return id;\n }\n return this._generateUUID();\n }\n\n _saveAnonymousId(id) {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem('cdp_anonymous_id', id);\n }\n }\n\n _getOrCreateDeviceId() {\n if (typeof localStorage !== 'undefined') {\n let id = localStorage.getItem('cdp_device_id');\n if (!id) {\n id = this._generateUUID();\n this._saveDeviceId(id);\n }\n return id;\n }\n return this._generateUUID();\n }\n\n _saveDeviceId(id) {\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem('cdp_device_id', id);\n }\n }\n\n _getOrCreateSessionId() {\n if (typeof sessionStorage !== 'undefined') {\n let id = sessionStorage.getItem('cdp_session_id');\n if (!id) {\n id = this._generateUUID();\n this._saveSessionId(id);\n }\n return id;\n }\n return this._generateUUID();\n }\n\n _saveSessionId(id) {\n if (typeof sessionStorage !== 'undefined') {\n sessionStorage.setItem('cdp_session_id', id);\n }\n }\n\n _getStoredProfileId() {\n if (typeof localStorage !== 'undefined') {\n return localStorage.getItem('cdp_profile_id');\n }\n return null;\n }\n\n _saveProfileId(id) {\n this.profileId = id;\n if (typeof localStorage !== 'undefined') {\n localStorage.setItem('cdp_profile_id', id.toString());\n }\n }\n\n _clearProfileId() {\n this.profileId = null;\n if (typeof localStorage !== 'undefined') {\n localStorage.removeItem('cdp_profile_id');\n }\n }\n\n _generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n }\n\n _log(...args) {\n if (this.config.debug) {\n console.log('[CDP Lite SDK]', ...args);\n }\n }\n\n _logError(...args) {\n if (this.config.debug) {\n console.error('[CDP Lite SDK]', ...args);\n }\n }\n\n // ============ Security Methods ============\n\n /**\n * Initialize crypto library\n */\n _initCrypto() {\n if (typeof window !== 'undefined' && window.crypto && window.crypto.subtle) {\n return window.crypto;\n }\n if (typeof require !== 'undefined') {\n try {\n return require('crypto');\n } catch (e) {\n this._logError('Crypto module not available');\n return null;\n }\n }\n return null;\n }\n\n /**\n * Encrypt traits using AES\n * AES Key = SHA256(SecretKey + X-Timestamp)\n */\n async _encryptTraits(traits) {\n if (!this.config.enableEncryption || !this.config.secretKey) {\n return typeof traits === 'string' ? traits : JSON.stringify(traits);\n }\n\n try {\n const timestamp = Math.floor(Date.now() / 1000).toString();\n const sensitiveTraits = this._extractSensitiveTraits(traits);\n\n if (Object.keys(sensitiveTraits).length === 0) {\n return '';\n }\n\n const traitsString = JSON.stringify(sensitiveTraits);\n\n // Browser environment\n if (typeof window !== 'undefined' && this.crypto && this.crypto.subtle) {\n return await this._encryptAESBrowser(traitsString, timestamp);\n }\n\n // Node.js environment\n if (typeof require !== 'undefined') {\n return this._encryptAESNode(traitsString, timestamp);\n }\n\n this._logError('Encryption not supported in this environment');\n return '';\n } catch (error) {\n this._logError('Failed to encrypt traits:', error);\n return '';\n }\n }\n\n /**\n * Extract only sensitive traits that need encryption\n */\n _extractSensitiveTraits(traits) {\n const sensitiveFields = [\n 'full_name', 'first_name', 'last_name',\n 'idcard', 'old_idcard', 'phone', 'email',\n 'gender', 'dob', 'address', 'religion'\n ];\n\n const sensitive = {};\n for (const field of sensitiveFields) {\n if (traits[field] !== undefined && traits[field] !== null && traits[field] !== '') {\n sensitive[field] = traits[field];\n }\n }\n return sensitive;\n }\n\n /**\n * AES encryption for browser using Web Crypto API\n */\n async _encryptAESBrowser(text, timestamp) {\n try {\n // Generate key: SHA256(SecretKey + Timestamp)\n const keyMaterial = this.config.secretKey + timestamp;\n const keyBuffer = new TextEncoder().encode(keyMaterial);\n\n const hashBuffer = await this.crypto.subtle.digest('SHA-256', keyBuffer);\n\n const key = await this.crypto.subtle.importKey(\n 'raw',\n hashBuffer,\n { name: 'AES-CBC', length: 256 },\n false,\n ['encrypt']\n );\n\n // Generate random IV\n const iv = this.crypto.getRandomValues(new Uint8Array(16));\n\n // Encrypt\n const encryptedBuffer = await this.crypto.subtle.encrypt(\n { name: 'AES-CBC', iv },\n key,\n new TextEncoder().encode(text)\n );\n\n // Combine IV + encrypted data\n const combined = new Uint8Array(iv.length + encryptedBuffer.byteLength);\n combined.set(iv, 0);\n combined.set(new Uint8Array(encryptedBuffer), iv.length);\n\n // Return Base64\n return this._arrayBufferToBase64(combined);\n } catch (error) {\n this._logError('Browser encryption failed:', error);\n return '';\n }\n }\n\n /**\n * AES encryption for Node.js\n */\n _encryptAESNode(text, timestamp) {\n try {\n const crypto = require('crypto');\n\n // Generate key: SHA256(SecretKey + Timestamp)\n const keyMaterial = this.config.secretKey + timestamp;\n const key = crypto.createHash('sha256').update(keyMaterial).digest();\n\n // Generate random IV\n const iv = crypto.randomBytes(16);\n\n // Encrypt\n const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);\n let encrypted = cipher.update(text, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n // Combine IV + encrypted data\n const combined = Buffer.concat([iv, Buffer.from(encrypted, 'hex')]);\n\n // Return Base64\n return combined.toString('base64');\n } catch (error) {\n this._logError('Node.js encryption failed:', error);\n return '';\n }\n }\n\n /**\n * Generate HMAC signature\n * X-Signatures = Base64(HMAC-SHA256(X-Source + \"|\" + X-Timestamp + \"|\" + Payload))\n */\n async _generateSignature(source, timestamp, payload) {\n if (!this.config.secretKey) {\n return '';\n }\n\n try {\n const message = `${source}|${timestamp}|${payload}`;\n\n // Browser environment\n if (typeof window !== 'undefined' && this.crypto && this.crypto.subtle) {\n return await this._hmacBrowser(message);\n }\n\n // Node.js environment\n if (typeof require !== 'undefined') {\n return this._hmacNode(message);\n }\n\n return '';\n } catch (error) {\n this._logError('Failed to generate signature:', error);\n return '';\n }\n }\n\n /**\n * HMAC for browser\n */\n async _hmacBrowser(message) {\n try {\n const encoder = new TextEncoder();\n const keyData = encoder.encode(this.config.secretKey);\n\n const key = await this.crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign']\n );\n\n const signature = await this.crypto.subtle.sign(\n 'HMAC',\n key,\n encoder.encode(message)\n );\n\n return this._arrayBufferToBase64(signature);\n } catch (error) {\n this._logError('Browser HMAC failed:', error);\n return '';\n }\n }\n\n /**\n * HMAC for Node.js\n */\n _hmacNode(message) {\n try {\n const crypto = require('crypto');\n const hmac = crypto.createHmac('sha256', this.config.secretKey);\n hmac.update(message);\n return hmac.digest('base64');\n } catch (error) {\n this._logError('Node.js HMAC failed:', error);\n return '';\n }\n }\n\n /**\n * Convert ArrayBuffer to Base64\n */\n _arrayBufferToBase64(buffer) {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n\n}\n\n// FIXED: Proper exports for both CommonJS and ES modules\n// This ensures compatibility with both import styles\n\n// Named export for flexibility\n// export { CdpLiteSdk };\n\n// ES Module export (default)\n// export default CdpLiteSdk;\n\n// CommonJS export (for Node.js require)\nif (typeof module !== 'undefined' && module.exports) {\n module.exports = CdpLiteSdk;\n module.exports.default = CdpLiteSdk;\n module.exports.CdpLiteSdk = CdpLiteSdk;\n}\n\n// Browser global\nif (typeof window !== 'undefined') {\n window.CdpLiteSdk = CdpLiteSdk;\n}\n"],"names":["require"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("https")):"function"==typeof define&&define.amd?define(["https"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).CdpLiteSdk=t(e.require$$0)}(this,function(e){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function i(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var r={exports:{}};return function(t){class r{constructor(e){this.config={apiKey:e.apiKey,secretKey:e.secretKey,source:e.source||"Web",serviceName:e.serviceName||"DefaultService",baseUrl:e.baseUrl||"https://stg-ingestlog.vietcredit.com.vn",isTest:void 0!==e.isTest&&e.isTest,debug:e.debug||!1,batchSize:e.batchSize||10,batchInterval:e.batchInterval||5e3,autoTrackDevice:void 0===e.autoTrackDevice||e.autoTrackDevice,enableEncryption:void 0===e.enableEncryption||e.enableEncryption},!this.config.secretKey&&this.config.enableEncryption&&this._logError("Warning: secretKey is required for encryption and signatures"),this.eventQueue=[],this.userId=null,this.profileId=this._getStoredProfileId(),this.anonymousId=this._getOrCreateAnonymousId(),this.deviceId=this._getOrCreateDeviceId(),this.sessionId=this._getOrCreateSessionId(),this.userTraits={},this.userIdentities={},this.deviceInfo=this.config.autoTrackDevice?this._getDeviceInfo():{},this.platforms={},this.campaign={},this.metadata={schema_version:"1.0"},this.crypto=this._initCrypto(),this.config.batchSize>1&&this._startBatchProcessor(),this._log("CDP Lite SDK initialized",this.config),this._log("CDP Lite SDK initialized",{anonymousId:this.anonymousId,deviceId:this.deviceId,sessionId:this.sessionId})}async identifyUser(e,t={}){"string"==typeof e?this.userId=e:"object"==typeof e&&(this.userIdentities={...this.userIdentities,...e},e.user_id?this.userId=e.user_id:e.u_em&&(this.userId=e.u_em)),this.userTraits={...this.userTraits,...t};const i=await this._trackProfile("login",this.userTraits);return i&&i.profile_id&&(this.profileId=i.profile_id,this._saveProfileId(i.profile_id),this._log("Profile ID received:",i.profile_id)),this._log("User identified",{userId:this.userId,traits:t}),this._log("User identified",{userId:this.userId,profileId:this.profileId,transactionId:i?.transaction_id}),this}getUserIdentities(){return{user_id:this.userId,profile_id:this.profileId,anonymous_id:this.anonymousId,device_id:this.deviceId,session_id:this.sessionId,...this.userIdentities}}getUserAttribute(e){return this.userTraits[e]||null}getProfileId(){return this.profileId}getDeviceId(){return this.deviceId}getSessionId(){return this.sessionId}add_first_name(e){return this.userTraits.first_name=e,this._trackProfile("update",{first_name:e}),this}add_last_name(e){return this.userTraits.last_name=e,this._trackProfile("update",{last_name:e}),this}add_email(e){return this.userTraits.email=e,this.userIdentities.u_em=e,this._trackProfile("update",{email:e}),this}add_mobile(e){return this.userTraits.phone=e,this._trackProfile("update",{phone:e}),this}add_user_name(e){return this.userTraits.full_name=e,this._trackProfile("update",{full_name:e}),this}add_gender(e){return this.userTraits.gender=e,this._trackProfile("update",{gender:e}),this}add_birthday(e){let t;return t=e instanceof Date?e.toISOString().split("T")[0]:e,this.userTraits.dob=t,this._trackProfile("update",{dob:t}),this}add_idcard(e){return this.userTraits.idcard=e,this._trackProfile("update",{idcard:e}),this}add_old_idcard(e){return this.userTraits.old_idcard=e,this._trackProfile("update",{old_idcard:e}),this}add_address(e){return this.userTraits.address=e,this._trackProfile("update",{address:e}),this}add_religion(e){return this.userTraits.religion=e,this._trackProfile("update",{religion:e}),this}add_user_attribute(e,t){return this.userTraits[e]=t,this._trackProfile("update",{[e]:t}),this}add_user_attributes(e){return this.userTraits={...this.userTraits,...e},this._trackProfile("update",e),this}setPlatform(e){return this.platforms={...this.platforms,...e},this}setCampaign(e){return this.campaign={...this.campaign,...e},this}async destroy_session(){return await this._trackProfile("logout",{}),this.userId=null,this.profileId=null,this.userTraits={},this.userIdentities={},this.campaign={},this.anonymousId=this._generateUUID(),this._saveAnonymousId(this.anonymousId),this.sessionId=this._generateUUID(),this._saveSessionId(this.sessionId),this._clearProfileId(),this._log("Session destroyed (logged out)"),this}async _trackProfile(e,t){const i=`${this.config.baseUrl}/v1/profiles/track`,r={user_id:this.userId||this.anonymousId,type:e,party_type:"PERSON",traits:t,profile_id:this.profileId,platforms:this.platforms||this._convertDeviceInfoToPlatforms(),campaign:this.campaign,metadata:this.metadata},s=await this._getHeaders(r);try{const t=await this._makeRequest(i,{method:"POST",headers:s,body:JSON.stringify(r)});return this._log("Profile tracked",{type:e,userId:this.userId,profileId:t?.profile_id,transactionId:t?.transaction_id}),t}catch(e){throw this._logError("Failed to track profile",e),e}}_convertDeviceInfoToPlatforms(){return this.deviceInfo&&0!==Object.keys(this.deviceInfo).length?{device_type:this._detectDeviceType(),brand:this.deviceInfo.brand||"Unknown",model:this.deviceInfo.model||"Unknown",app_version:this.deviceInfo.app_version||"",os_name:this.deviceInfo.platform||"Unknown",os_version:this.deviceInfo.os_version||"Unknown"}:{}}_detectDeviceType(){if("undefined"==typeof window)return"server";const e=navigator.userAgent;return/Mobile|Android|iPhone|iPad|iPod/.test(e)?"mobile":/Tablet|iPad/.test(e)?"tablet":"desktop"}track(e,t={},i={}){const r=this._createEvent({type:"track",event:e,properties:t,...i});if(!(this.config.batchSize>1))return this._sendEvent(r);this._addToQueue(r)}async identify(e,t={}){return this.identifyUser(e,t)}page(e,t={}){return this.track("page_view",{page_name:e,...t})}screen(e,t={}){return this.track("screen_view",{screen_name:e,...t})}setUserAttributes(e){return this.add_user_attributes(e)}setDeviceInfo(e){this.deviceInfo={...this.deviceInfo,...e}}async flush(){if(0===this.eventQueue.length)return;const e=[...this.eventQueue];return this.eventQueue=[],this._sendBatch(e)}reset(){return this.destroy_session()}async destroy(){this.batchInterval&&clearInterval(this.batchInterval),await this.flush()}_createEvent(e){return{event_id:this._generateUUID(),trace_id:this._generateUUID(),type:e.type||"track",event_name:e.event,service_name:this.config.serviceName,user_id:this.userId||"",profile_id:this.profileId||null,anonymous_id:this.anonymousId,device_id:this.deviceId,session_id:this.sessionId,loan_code:e.loanCode||"",properties:e.properties||{hasFake:!0},traits:e.traits||"",device:e.device||this.deviceInfo,campaign:e.campaign||{},context:e.context||{},event_time:(new Date).toISOString()}}async _sendEvent(e){const t=`${this.config.baseUrl}/v1/events/track`,i=await this._getHeaders(e);try{const r=await this._makeRequest(t,{method:"POST",headers:i,body:JSON.stringify(e)});return this._log("Event tracked successfully",e.event),r}catch(e){throw this._logError("Failed to track event",e),e}}async _sendBatch(e){if(0===e.length)return;const t=`${this.config.baseUrl}/v1/events/batch`,i={events:e},r=await this._getHeaders(i);try{const s=await this._makeRequest(t,{method:"POST",headers:r,body:JSON.stringify(i)});return this._log(`Batch of ${e.length} events tracked successfully`),s}catch(t){throw this._logError("Failed to track batch",t),this.eventQueue.unshift(...e),t}}_addToQueue(e){this.eventQueue.push(e),this._log("Event added to queue",{queueSize:this.eventQueue.length}),this.eventQueue.length>=this.config.batchSize&&this.flush()}_startBatchProcessor(){this.batchInterval=setInterval(()=>{this.eventQueue.length>0&&this.flush()},this.config.batchInterval),"undefined"!=typeof window&&window.addEventListener("beforeunload",()=>{this.flush()})}async _getHeaders(e){const t=Math.floor(Date.now()/1e3),i="string"==typeof e?e:JSON.stringify(e),r=await this._generateSignature(this.config.source,t.toString(),i);return{"X-Api-Key":this.config.apiKey,"X-Source":this.config.source,"X-Timestamp":t.toString(),"X-Signatures":r,"X-Trace-Id":this._generateUUID(),isTest:this.config.isTest.toString(),"Content-Type":"application/json"}}async _makeRequest(t,i){if("undefined"!=typeof fetch){const e=await fetch(t,i);if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);return e.json()}{const r=e,s=new URL(t);return new Promise((e,t)=>{const n=r.request({hostname:s.hostname,path:s.pathname+s.search,method:i.method,headers:i.headers},i=>{let r="";i.on("data",e=>r+=e),i.on("end",()=>{if(i.statusCode>=200&&i.statusCode<300)try{e(JSON.parse(r))}catch(t){e(r)}else t(new Error(`HTTP error! status: ${i.statusCode}`))})});n.on("error",t),i.body&&n.write(i.body),n.end()})}}_getDeviceInfo(){if("undefined"==typeof window)return{platform:process.platform,brand:"Server",model:"Node.js",app_version:"",os_version:process.version};const e=navigator.userAgent;return{platform:this._detectPlatform(e),brand:this._detectBrand(e),model:this._detectModel(e),app_version:"",os_version:this._detectOSVersion(e)}}_detectPlatform(e){return/iPhone|iPad|iPod/.test(e)?"ios":/Android/.test(e)?"android":/Windows/.test(e)?"windows":/Mac/.test(e)?"macos":/Linux/.test(e)?"linux":"web"}_detectBrand(e){return/iPhone|iPad|iPod/.test(e)?"Apple":/Samsung/.test(e)?"Samsung":/Huawei/.test(e)?"Huawei":/Xiaomi/.test(e)?"Xiaomi":/Oppo/.test(e)?"Oppo":"Unknown"}_detectModel(e){const t=e.match(/\(([^)]+)\)/);return t?t[1].split(";")[0].trim():"Unknown"}_detectOSVersion(e){const t=e.match(/(?:Android|iPhone OS|CPU OS|Mac OS X|Windows NT) ([\d._]+)/);return t?t[1].replace(/_/g,"."):"Unknown"}_getOrCreateAnonymousId(){if("undefined"!=typeof localStorage){let e=localStorage.getItem("cdp_anonymous_id");return e||(e=this._generateUUID(),this._saveAnonymousId(e)),e}return this._generateUUID()}_saveAnonymousId(e){"undefined"!=typeof localStorage&&localStorage.setItem("cdp_anonymous_id",e)}_getOrCreateDeviceId(){if("undefined"!=typeof localStorage){let e=localStorage.getItem("cdp_device_id");return e||(e=this._generateUUID(),this._saveDeviceId(e)),e}return this._generateUUID()}_saveDeviceId(e){"undefined"!=typeof localStorage&&localStorage.setItem("cdp_device_id",e)}_getOrCreateSessionId(){if("undefined"!=typeof sessionStorage){let e=sessionStorage.getItem("cdp_session_id");return e||(e=this._generateUUID(),this._saveSessionId(e)),e}return this._generateUUID()}_saveSessionId(e){"undefined"!=typeof sessionStorage&&sessionStorage.setItem("cdp_session_id",e)}_getStoredProfileId(){return"undefined"!=typeof localStorage?localStorage.getItem("cdp_profile_id"):null}_saveProfileId(e){this.profileId=e,"undefined"!=typeof localStorage&&localStorage.setItem("cdp_profile_id",e.toString())}_clearProfileId(){this.profileId=null,"undefined"!=typeof localStorage&&localStorage.removeItem("cdp_profile_id")}_generateUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}_log(...e){this.config.debug}_logError(...e){this.config.debug}_initCrypto(){if("undefined"!=typeof window&&window.crypto&&window.crypto.subtle)return window.crypto;if(void 0!==i)try{return require("crypto")}catch(e){return this._logError("Crypto module not available"),null}return null}async _encryptTraits(e){if(!this.config.enableEncryption||!this.config.secretKey)return"string"==typeof e?e:JSON.stringify(e);try{const t=Math.floor(Date.now()/1e3).toString(),r=this._extractSensitiveTraits(e);if(0===Object.keys(r).length)return"";const s=JSON.stringify(r);return"undefined"!=typeof window&&this.crypto&&this.crypto.subtle?await this._encryptAESBrowser(s,t):void 0!==i?this._encryptAESNode(s,t):(this._logError("Encryption not supported in this environment"),"")}catch(e){return this._logError("Failed to encrypt traits:",e),""}}_extractSensitiveTraits(e){const t=["full_name","first_name","last_name","idcard","old_idcard","phone","email","gender","dob","address","religion"],i={};for(const r of t)void 0!==e[r]&&null!==e[r]&&""!==e[r]&&(i[r]=e[r]);return i}async _encryptAESBrowser(e,t){try{const i=this.config.secretKey+t,r=(new TextEncoder).encode(i),s=await this.crypto.subtle.digest("SHA-256",r),n=await this.crypto.subtle.importKey("raw",s,{name:"AES-CBC",length:256},!1,["encrypt"]),o=this.crypto.getRandomValues(new Uint8Array(16)),a=await this.crypto.subtle.encrypt({name:"AES-CBC",iv:o},n,(new TextEncoder).encode(e)),d=new Uint8Array(o.length+a.byteLength);return d.set(o,0),d.set(new Uint8Array(a),o.length),this._arrayBufferToBase64(d)}catch(e){return this._logError("Browser encryption failed:",e),""}}_encryptAESNode(e,t){try{const i=require("crypto"),r=this.config.secretKey+t,s=i.createHash("sha256").update(r).digest(),n=i.randomBytes(16),o=i.createCipheriv("aes-256-cbc",s,n);let a=o.update(e,"utf8","hex");a+=o.final("hex");return Buffer.concat([n,Buffer.from(a,"hex")]).toString("base64")}catch(e){return this._logError("Node.js encryption failed:",e),""}}async _generateSignature(e,t,r){if(!this.config.secretKey)return"";try{const s=`${e}|${t}|${r}`;return"undefined"!=typeof window&&this.crypto&&this.crypto.subtle?await this._hmacBrowser(s):void 0!==i?this._hmacNode(s):""}catch(e){return this._logError("Failed to generate signature:",e),""}}async _hmacBrowser(e){try{const t=new TextEncoder,i=t.encode(this.config.secretKey),r=await this.crypto.subtle.importKey("raw",i,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),s=await this.crypto.subtle.sign("HMAC",r,t.encode(e));return this._arrayBufferToBase64(s)}catch(e){return this._logError("Browser HMAC failed:",e),""}}_hmacNode(e){try{const t=require("crypto").createHmac("sha256",this.config.secretKey);return t.update(e),t.digest("base64")}catch(e){return this._logError("Node.js HMAC failed:",e),""}}_arrayBufferToBase64(e){const t=new Uint8Array(e);let i="";for(let e=0;e<t.length;e++)i+=String.fromCharCode(t[e]);return btoa(i)}}t.exports&&(t.exports=r,t.exports.default=r,t.exports.CdpLiteSdk=r),"undefined"!=typeof window&&(window.CdpLiteSdk=r)}(r),t(r.exports)});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("https")):"function"==typeof define&&define.amd?define(["https"],t):(e="undefined"!=typeof globalThis?globalThis:e||self).CdpLiteSdk=t(e.require$$0)}(this,function(e){"use strict";function t(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function i(e){throw new Error('Could not dynamically require "'+e+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var r={exports:{}};return function(t){class r{constructor(e){this.config={apiKey:e.apiKey,secretKey:e.secretKey,source:e.source||"Web",serviceName:e.serviceName||"DefaultService",baseUrl:e.baseUrl||"https://stg-ingestlog.vietcredit.com.vn",isTest:void 0!==e.isTest&&e.isTest,debug:e.debug||!1,batchSize:e.batchSize||10,batchInterval:e.batchInterval||5e3,autoTrackDevice:void 0===e.autoTrackDevice||e.autoTrackDevice,enableEncryption:void 0===e.enableEncryption||e.enableEncryption},!this.config.secretKey&&this.config.enableEncryption&&this._logError("Warning: secretKey is required for encryption and signatures"),this.eventQueue=[],this.userId=null,this.profileId=this._getStoredProfileId(),this.anonymousId=this._getOrCreateAnonymousId(),this.deviceId=this._getOrCreateDeviceId(),this.sessionId=this._getOrCreateSessionId(),this.userTraits={},this.userIdentities={},this.deviceInfo=this.config.autoTrackDevice?this._getDeviceInfo():{},this.platforms={},this.campaign={},this.metadata={schema_version:"1.0"},this.crypto=this._initCrypto(),this.config.batchSize>1&&this._startBatchProcessor(),this._log("CDP Lite SDK initialized",this.config),this._log("CDP Lite SDK initialized",{anonymousId:this.anonymousId,deviceId:this.deviceId,sessionId:this.sessionId})}async identifyUser(e,t={}){"string"==typeof e?this.userId=e:"object"==typeof e&&(this.userIdentities={...this.userIdentities,...e},e.user_id?this.userId=e.user_id:e.u_em&&(this.userId=e.u_em)),this.userTraits={...this.userTraits,...t};const i=await this._trackProfile("login",this.userTraits);return i&&i.profile_id&&(this.profileId=i.profile_id,this._saveProfileId(i.profile_id),this._log("Profile ID received:",i.profile_id)),this._log("User identified",{userId:this.userId,traits:t}),this._log("User identified",{userId:this.userId,profileId:this.profileId,transactionId:i?.transaction_id}),this}getUserIdentities(){return{user_id:this.userId,profile_id:this.profileId,anonymous_id:this.anonymousId,device_id:this.deviceId,session_id:this.sessionId,...this.userIdentities}}getUserAttribute(e){return this.userTraits[e]||null}getProfileId(){return this.profileId}getDeviceId(){return this.deviceId}getSessionId(){return this.sessionId}add_first_name(e){return this.userTraits.first_name=e,this._trackProfile("update",{first_name:e}),this}add_last_name(e){return this.userTraits.last_name=e,this._trackProfile("update",{last_name:e}),this}add_email(e){return this.userTraits.email=e,this.userIdentities.u_em=e,this._trackProfile("update",{email:e}),this}add_mobile(e){return this.userTraits.phone=e,this._trackProfile("update",{phone:e}),this}add_user_name(e){return this.userTraits.full_name=e,this._trackProfile("update",{full_name:e}),this}add_gender(e){return this.userTraits.gender=e,this._trackProfile("update",{gender:e}),this}add_birthday(e){let t;return t=e instanceof Date?e.toISOString().split("T")[0]:e,this.userTraits.dob=t,this._trackProfile("update",{dob:t}),this}add_idcard(e){return this.userTraits.idcard=e,this._trackProfile("update",{idcard:e}),this}add_old_idcard(e){return this.userTraits.old_idcard=e,this._trackProfile("update",{old_idcard:e}),this}add_address(e){return this.userTraits.address=e,this._trackProfile("update",{address:e}),this}add_religion(e){return this.userTraits.religion=e,this._trackProfile("update",{religion:e}),this}add_user_attribute(e,t){return this.userTraits[e]=t,this._trackProfile("update",{[e]:t}),this}add_user_attributes(e){return this.userTraits={...this.userTraits,...e},this._trackProfile("update",e),this}setPlatform(e){return this.platforms={...this.platforms,...e},this}setCampaign(e){return this.campaign={...this.campaign,...e},this}async destroy_session(){return await this._trackProfile("logout",{}),this.userId=null,this.profileId=null,this.userTraits={},this.userIdentities={},this.campaign={},this.anonymousId=this._generateUUID(),this._saveAnonymousId(this.anonymousId),this.sessionId=this._generateUUID(),this._saveSessionId(this.sessionId),this._clearProfileId(),this._log("Session destroyed (logged out)"),this}async _trackProfile(e,t){const i=`${this.config.baseUrl}/v1/profiles/track`,r={user_id:this.userId||this.anonymousId,type:e,party_type:"PERSON",traits:t,platforms:this.platforms||this._convertDeviceInfoToPlatforms(),campaign:this.campaign,metadata:this.metadata,device_id:this.deviceId,session_id:this.sessionId};this.profileId&&(r.profile_id=this.profileId);const s=await this._getHeaders(r);try{const t=await this._makeRequest(i,{method:"POST",headers:s,body:JSON.stringify(r)});return this._log("Profile tracked",{type:e,userId:this.userId,profileId:t?.profile_id,transactionId:t?.transaction_id}),t}catch(e){throw this._logError("Failed to track profile",e),e}}_convertDeviceInfoToPlatforms(){return this.deviceInfo&&0!==Object.keys(this.deviceInfo).length?{device_type:this._detectDeviceType(),brand:this.deviceInfo.brand||"Unknown",model:this.deviceInfo.model||"Unknown",app_version:this.deviceInfo.app_version||"",os_name:this.deviceInfo.platform||"Unknown",os_version:this.deviceInfo.os_version||"Unknown"}:{}}_detectDeviceType(){if("undefined"==typeof window)return"server";const e=navigator.userAgent;return/Mobile|Android|iPhone|iPad|iPod/.test(e)?"mobile":/Tablet|iPad/.test(e)?"tablet":"desktop"}track(e,t={},i={}){const r=this._createEvent({type:"track",event:e,properties:t,...i});if(!(this.config.batchSize>1))return this._sendEvent(r);this._addToQueue(r)}async identify(e,t={}){return this.identifyUser(e,t)}page(e,t={}){return this.track("page_view",{page_name:e,...t})}screen(e,t={}){return this.track("screen_view",{screen_name:e,...t})}setUserAttributes(e){return this.add_user_attributes(e)}setDeviceInfo(e){this.deviceInfo={...this.deviceInfo,...e}}async flush(){if(0===this.eventQueue.length)return;const e=[...this.eventQueue];return this.eventQueue=[],this._sendBatch(e)}reset(){return this.destroy_session()}async destroy(){this.batchInterval&&clearInterval(this.batchInterval),await this.flush()}_createEvent(e){return{event_id:this._generateUUID(),trace_id:this._generateUUID(),type:e.type||"track",event_name:e.event,service_name:this.config.serviceName,user_id:this.userId||"",profile_id:this.profileId||null,anonymous_id:this.anonymousId,device_id:this.deviceId,session_id:this.sessionId,loan_code:e.loanCode||"",properties:e.properties||{hasFake:!0},traits:e.traits||"",device:e.device||this.deviceInfo,campaign:e.campaign||{},context:e.context||{},event_time:(new Date).toISOString()}}async _sendEvent(e){const t=`${this.config.baseUrl}/v1/events/track`,i=await this._getHeaders(e);try{const r=await this._makeRequest(t,{method:"POST",headers:i,body:JSON.stringify(e)});return this._log("Event tracked successfully",e.event),r}catch(e){throw this._logError("Failed to track event",e),e}}async _sendBatch(e){if(0===e.length)return;const t=`${this.config.baseUrl}/v1/events/batch`,i={events:e},r=await this._getHeaders(i);try{const s=await this._makeRequest(t,{method:"POST",headers:r,body:JSON.stringify(i)});return this._log(`Batch of ${e.length} events tracked successfully`),s}catch(t){throw this._logError("Failed to track batch",t),this.eventQueue.unshift(...e),t}}_addToQueue(e){this.eventQueue.push(e),this._log("Event added to queue",{queueSize:this.eventQueue.length}),this.eventQueue.length>=this.config.batchSize&&this.flush()}_startBatchProcessor(){this.batchInterval=setInterval(()=>{this.eventQueue.length>0&&this.flush()},this.config.batchInterval),"undefined"!=typeof window&&window.addEventListener("beforeunload",()=>{this.flush()})}async _getHeaders(e){const t=Math.floor(Date.now()/1e3),i="string"==typeof e?e:JSON.stringify(e),r=await this._generateSignature(this.config.source,t.toString(),i);return{"X-Api-Key":this.config.apiKey,"X-Source":this.config.source,"X-Timestamp":t.toString(),"X-Signatures":r,"X-Trace-Id":this._generateUUID(),isTest:this.config.isTest.toString(),"Content-Type":"application/json"}}async _makeRequest(t,i){if("undefined"!=typeof fetch){const e=await fetch(t,i);if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);return e.json()}{const r=e,s=new URL(t);return new Promise((e,t)=>{const n=r.request({hostname:s.hostname,path:s.pathname+s.search,method:i.method,headers:i.headers},i=>{let r="";i.on("data",e=>r+=e),i.on("end",()=>{if(i.statusCode>=200&&i.statusCode<300)try{e(JSON.parse(r))}catch(t){e(r)}else t(new Error(`HTTP error! status: ${i.statusCode}`))})});n.on("error",t),i.body&&n.write(i.body),n.end()})}}_getDeviceInfo(){if("undefined"==typeof window)return{platform:process.platform,brand:"Server",model:"Node.js",app_version:"",os_version:process.version};const e=navigator.userAgent;return{platform:this._detectPlatform(e),brand:this._detectBrand(e),model:this._detectModel(e),app_version:"",os_version:this._detectOSVersion(e)}}_detectPlatform(e){return/iPhone|iPad|iPod/.test(e)?"ios":/Android/.test(e)?"android":/Windows/.test(e)?"windows":/Mac/.test(e)?"macos":/Linux/.test(e)?"linux":"web"}_detectBrand(e){return/iPhone|iPad|iPod/.test(e)?"Apple":/Samsung/.test(e)?"Samsung":/Huawei/.test(e)?"Huawei":/Xiaomi/.test(e)?"Xiaomi":/Oppo/.test(e)?"Oppo":"Unknown"}_detectModel(e){const t=e.match(/\(([^)]+)\)/);return t?t[1].split(";")[0].trim():"Unknown"}_detectOSVersion(e){const t=e.match(/(?:Android|iPhone OS|CPU OS|Mac OS X|Windows NT) ([\d._]+)/);return t?t[1].replace(/_/g,"."):"Unknown"}_getOrCreateAnonymousId(){if("undefined"!=typeof localStorage){let e=localStorage.getItem("cdp_anonymous_id");return e||(e=this._generateUUID(),this._saveAnonymousId(e)),e}return this._generateUUID()}_saveAnonymousId(e){"undefined"!=typeof localStorage&&localStorage.setItem("cdp_anonymous_id",e)}_getOrCreateDeviceId(){if("undefined"!=typeof localStorage){let e=localStorage.getItem("cdp_device_id");return e||(e=this._generateUUID(),this._saveDeviceId(e)),e}return this._generateUUID()}_saveDeviceId(e){"undefined"!=typeof localStorage&&localStorage.setItem("cdp_device_id",e)}_getOrCreateSessionId(){if("undefined"!=typeof sessionStorage){let e=sessionStorage.getItem("cdp_session_id");return e||(e=this._generateUUID(),this._saveSessionId(e)),e}return this._generateUUID()}_saveSessionId(e){"undefined"!=typeof sessionStorage&&sessionStorage.setItem("cdp_session_id",e)}_getStoredProfileId(){return"undefined"!=typeof localStorage?localStorage.getItem("cdp_profile_id"):null}_saveProfileId(e){this.profileId=e,"undefined"!=typeof localStorage&&localStorage.setItem("cdp_profile_id",e.toString())}_clearProfileId(){this.profileId=null,"undefined"!=typeof localStorage&&localStorage.removeItem("cdp_profile_id")}_generateUUID(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,e=>{const t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}_log(...e){this.config.debug}_logError(...e){this.config.debug}_initCrypto(){if("undefined"!=typeof window&&window.crypto&&window.crypto.subtle)return window.crypto;if(void 0!==i)try{return require("crypto")}catch(e){return this._logError("Crypto module not available"),null}return null}async _encryptTraits(e){if(!this.config.enableEncryption||!this.config.secretKey)return"string"==typeof e?e:JSON.stringify(e);try{const t=Math.floor(Date.now()/1e3).toString(),r=this._extractSensitiveTraits(e);if(0===Object.keys(r).length)return"";const s=JSON.stringify(r);return"undefined"!=typeof window&&this.crypto&&this.crypto.subtle?await this._encryptAESBrowser(s,t):void 0!==i?this._encryptAESNode(s,t):(this._logError("Encryption not supported in this environment"),"")}catch(e){return this._logError("Failed to encrypt traits:",e),""}}_extractSensitiveTraits(e){const t=["full_name","first_name","last_name","idcard","old_idcard","phone","email","gender","dob","address","religion"],i={};for(const r of t)void 0!==e[r]&&null!==e[r]&&""!==e[r]&&(i[r]=e[r]);return i}async _encryptAESBrowser(e,t){try{const i=this.config.secretKey+t,r=(new TextEncoder).encode(i),s=await this.crypto.subtle.digest("SHA-256",r),n=await this.crypto.subtle.importKey("raw",s,{name:"AES-CBC",length:256},!1,["encrypt"]),o=this.crypto.getRandomValues(new Uint8Array(16)),a=await this.crypto.subtle.encrypt({name:"AES-CBC",iv:o},n,(new TextEncoder).encode(e)),d=new Uint8Array(o.length+a.byteLength);return d.set(o,0),d.set(new Uint8Array(a),o.length),this._arrayBufferToBase64(d)}catch(e){return this._logError("Browser encryption failed:",e),""}}_encryptAESNode(e,t){try{const i=require("crypto"),r=this.config.secretKey+t,s=i.createHash("sha256").update(r).digest(),n=i.randomBytes(16),o=i.createCipheriv("aes-256-cbc",s,n);let a=o.update(e,"utf8","hex");a+=o.final("hex");return Buffer.concat([n,Buffer.from(a,"hex")]).toString("base64")}catch(e){return this._logError("Node.js encryption failed:",e),""}}async _generateSignature(e,t,r){if(!this.config.secretKey)return"";try{const s=`${e}|${t}|${r}`;return"undefined"!=typeof window&&this.crypto&&this.crypto.subtle?await this._hmacBrowser(s):void 0!==i?this._hmacNode(s):""}catch(e){return this._logError("Failed to generate signature:",e),""}}async _hmacBrowser(e){try{const t=new TextEncoder,i=t.encode(this.config.secretKey),r=await this.crypto.subtle.importKey("raw",i,{name:"HMAC",hash:"SHA-256"},!1,["sign"]),s=await this.crypto.subtle.sign("HMAC",r,t.encode(e));return this._arrayBufferToBase64(s)}catch(e){return this._logError("Browser HMAC failed:",e),""}}_hmacNode(e){try{const t=require("crypto").createHmac("sha256",this.config.secretKey);return t.update(e),t.digest("base64")}catch(e){return this._logError("Node.js HMAC failed:",e),""}}_arrayBufferToBase64(e){const t=new Uint8Array(e);let i="";for(let e=0;e<t.length;e++)i+=String.fromCharCode(t[e]);return btoa(i)}}t.exports&&(t.exports=r,t.exports.default=r,t.exports.CdpLiteSdk=r),"undefined"!=typeof window&&(window.CdpLiteSdk=r)}(r),t(r.exports)});
2
2
  //# sourceMappingURL=cdp-lite-sdk.umd.min.js.map