respectlytics-react-native 2.0.1 → 2.2.0

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.
Files changed (43) hide show
  1. package/LICENSE +17 -20
  2. package/README.md +77 -29
  3. package/lib/commonjs/EventQueue.js +1 -1
  4. package/lib/commonjs/NetworkClient.js +13 -14
  5. package/lib/commonjs/NetworkClient.js.map +1 -1
  6. package/lib/commonjs/Respectlytics.js +28 -85
  7. package/lib/commonjs/Respectlytics.js.map +1 -1
  8. package/lib/commonjs/SessionManager.js +4 -4
  9. package/lib/commonjs/Storage.js +1 -1
  10. package/lib/commonjs/index.js +3 -3
  11. package/lib/commonjs/index.js.map +1 -1
  12. package/lib/commonjs/types.js +12 -11
  13. package/lib/commonjs/types.js.map +1 -1
  14. package/lib/module/EventQueue.js +1 -1
  15. package/lib/module/NetworkClient.js +13 -14
  16. package/lib/module/NetworkClient.js.map +1 -1
  17. package/lib/module/Respectlytics.js +29 -86
  18. package/lib/module/Respectlytics.js.map +1 -1
  19. package/lib/module/SessionManager.js +4 -4
  20. package/lib/module/Storage.js +1 -1
  21. package/lib/module/index.js +3 -4
  22. package/lib/module/index.js.map +1 -1
  23. package/lib/module/types.js +12 -11
  24. package/lib/module/types.js.map +1 -1
  25. package/lib/typescript/EventQueue.d.ts +1 -1
  26. package/lib/typescript/NetworkClient.d.ts +6 -5
  27. package/lib/typescript/NetworkClient.d.ts.map +1 -1
  28. package/lib/typescript/Respectlytics.d.ts +15 -12
  29. package/lib/typescript/Respectlytics.d.ts.map +1 -1
  30. package/lib/typescript/SessionManager.d.ts +4 -4
  31. package/lib/typescript/Storage.d.ts +1 -1
  32. package/lib/typescript/index.d.ts +2 -2
  33. package/lib/typescript/index.d.ts.map +1 -1
  34. package/lib/typescript/types.d.ts +10 -14
  35. package/lib/typescript/types.d.ts.map +1 -1
  36. package/package.json +5 -2
  37. package/src/EventQueue.ts +4 -4
  38. package/src/NetworkClient.ts +12 -13
  39. package/src/Respectlytics.ts +31 -92
  40. package/src/SessionManager.ts +6 -6
  41. package/src/Storage.ts +1 -1
  42. package/src/index.ts +5 -6
  43. package/src/types.ts +12 -16
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * NetworkClient.ts
3
3
  * Respectlytics React Native SDK
4
- *
4
+ *
5
5
  * Handles HTTP communication with the Respectlytics API.
6
- * Copyright (c) 2025 Respectlytics. All rights reserved.
6
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
7
7
  */
8
8
 
9
- const API_ENDPOINT = 'https://respectlytics.com/api/v1/events/';
9
+ const DEFAULT_API_ENDPOINT = 'https://respectlytics.com/api/v1/events/';
10
10
  const MAX_RETRIES = 3;
11
11
  const TIMEOUT_MS = 30000;
12
12
  export let NetworkError = /*#__PURE__*/function (NetworkError) {
@@ -22,12 +22,16 @@ export let NetworkError = /*#__PURE__*/function (NetworkError) {
22
22
  }({});
23
23
  export class NetworkClient {
24
24
  apiKey = null;
25
+ apiEndpoint = DEFAULT_API_ENDPOINT;
25
26
 
26
27
  /**
27
- * Configure the network client with an API key
28
+ * Configure the network client with an API key and optional custom endpoint
28
29
  */
29
- configure(apiKey) {
30
+ configure(apiKey, apiEndpoint) {
30
31
  this.apiKey = apiKey;
32
+ if (apiEndpoint) {
33
+ this.apiEndpoint = apiEndpoint;
34
+ }
31
35
  }
32
36
 
33
37
  /**
@@ -59,7 +63,7 @@ export class NetworkClient {
59
63
  const controller = new AbortController();
60
64
  const timeoutId = setTimeout(() => controller.abort(), TIMEOUT_MS);
61
65
  try {
62
- const response = await fetch(API_ENDPOINT, {
66
+ const response = await fetch(this.apiEndpoint, {
63
67
  method: 'POST',
64
68
  headers: {
65
69
  'Content-Type': 'application/json',
@@ -123,20 +127,15 @@ export class NetworkClient {
123
127
  }
124
128
 
125
129
  /**
126
- * Convert Event object to API payload format
127
- * Note: As of v2.0.0, no user_id field is sent (session-based analytics only)
130
+ * Convert Event object to API payload format.
131
+ * The SDK sends 4 fields; the API stores 5 (adding country derived from IP).
128
132
  */
129
133
  eventToPayload(event) {
130
134
  return {
131
135
  event_name: event.eventName,
132
136
  timestamp: event.timestamp,
133
137
  session_id: event.sessionId,
134
- screen: event.screen || undefined,
135
- platform: event.platform,
136
- os_version: event.osVersion,
137
- app_version: event.appVersion,
138
- locale: event.locale,
139
- device_type: event.deviceType
138
+ platform: event.platform
140
139
  };
141
140
  }
142
141
 
@@ -1 +1 @@
1
- {"version":3,"names":["API_ENDPOINT","MAX_RETRIES","TIMEOUT_MS","NetworkError","NetworkClient","apiKey","configure","isConfigured","send","events","Error","NotConfigured","event","sendEvent","attempt","controller","AbortController","timeoutId","setTimeout","abort","response","fetch","method","headers","body","JSON","stringify","eventToPayload","signal","clearTimeout","ok","status","Unauthorized","BadRequest","delay","Math","pow","RateLimited","ServerError","InvalidResponse","error","message","name","Timeout","event_name","eventName","timestamp","session_id","sessionId","screen","undefined","platform","os_version","osVersion","app_version","appVersion","locale","device_type","deviceType","ms","Promise","resolve","networkClient"],"sourceRoot":"../../src","sources":["NetworkClient.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DEFAULT_API_ENDPOINT","MAX_RETRIES","TIMEOUT_MS","NetworkError","NetworkClient","apiKey","apiEndpoint","configure","isConfigured","send","events","Error","NotConfigured","event","sendEvent","attempt","controller","AbortController","timeoutId","setTimeout","abort","response","fetch","method","headers","body","JSON","stringify","eventToPayload","signal","clearTimeout","ok","status","Unauthorized","BadRequest","delay","Math","pow","RateLimited","ServerError","InvalidResponse","error","message","name","Timeout","event_name","eventName","timestamp","session_id","sessionId","platform","ms","Promise","resolve","networkClient"],"sourceRoot":"../../src","sources":["NetworkClient.ts"],"mappings":"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","ignoreList":[]}
@@ -1,33 +1,35 @@
1
1
  /**
2
2
  * Respectlytics.ts
3
3
  * Respectlytics React Native SDK
4
- *
4
+ *
5
5
  * Main entry point for the SDK.
6
- * Copyright (c) 2025 Respectlytics. All rights reserved.
6
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
7
7
  */
8
8
 
9
- import { Platform, Dimensions, NativeModules } from 'react-native';
9
+ import { Platform } from 'react-native';
10
10
  import { SessionManager } from './SessionManager';
11
11
  import { NetworkClient } from './NetworkClient';
12
12
  import { EventQueue } from './EventQueue';
13
13
 
14
14
  /**
15
15
  * Main entry point for the Respectlytics SDK.
16
- *
17
- * v2.0.0 uses session-based analytics only:
16
+ *
17
+ * v2.1.0 uses session-based analytics only:
18
18
  * - Session IDs are generated automatically in RAM
19
19
  * - Sessions rotate every 2 hours
20
20
  * - New session on every app restart
21
- * - No persistent user tracking (GDPR/ePrivacy compliant)
22
- *
21
+ * - Only 4 fields sent by SDK; 5 stored (country derived server-side)
22
+ *
23
23
  * Usage:
24
24
  * ```typescript
25
25
  * // 1. Configure at app launch
26
26
  * Respectlytics.configure('your-api-key');
27
- *
27
+ *
28
+ * // For self-hosted instances:
29
+ * Respectlytics.configure('your-api-key', { apiEndpoint: 'https://your-server.com/api/v1/events/' });
30
+ *
28
31
  * // 2. Track events
29
32
  * Respectlytics.track('purchase');
30
- * Respectlytics.track('view_product', 'ProductScreen');
31
33
  * ```
32
34
  */
33
35
  class RespectlyticsSDK {
@@ -36,35 +38,36 @@ class RespectlyticsSDK {
36
38
  this.networkClient = new NetworkClient();
37
39
  this.eventQueue = new EventQueue(this.networkClient);
38
40
  this.sessionManager = new SessionManager();
41
+ this.platform = Platform.OS === 'ios' ? 'iOS' : 'Android';
39
42
  }
40
43
 
41
44
  /**
42
45
  * Initialize the SDK with your API key.
43
46
  * Call once at app startup.
44
- *
47
+ *
45
48
  * @param apiKey Your Respectlytics API key from the dashboard
49
+ * @param options Optional configuration (e.g., apiEndpoint for self-hosted instances)
46
50
  */
47
- configure(apiKey) {
51
+ configure(apiKey, options) {
48
52
  if (!apiKey || apiKey.trim() === '') {
49
53
  console.log('[Respectlytics] ⚠️ API key cannot be empty');
50
54
  return;
51
55
  }
52
- this.networkClient.configure(apiKey);
56
+ this.networkClient.configure(apiKey, options?.apiEndpoint);
53
57
  this.eventQueue.start();
54
58
  this.isConfigured = true;
55
- console.log('[Respectlytics] ✓ SDK configured');
59
+ console.log('[Respectlytics] ✓ SDK configured (v2.2.0)');
56
60
  }
57
61
 
58
62
  /**
59
- * Track an event with an optional screen name.
60
- *
61
- * The SDK automatically collects privacy-safe metadata:
62
- * - timestamp, session_id, platform, os_version, app_version, locale
63
- *
63
+ * Track an event.
64
+ *
65
+ * Custom properties are NOT supported - this is by design for privacy.
66
+ * The API stores 5 fields (these 4 plus country derived server-side).
67
+ *
64
68
  * @param eventName Name of the event (e.g., "purchase", "button_clicked")
65
- * @param screen Optional screen name where the event occurred
66
69
  */
67
- track(eventName, screen) {
70
+ track(eventName) {
68
71
  if (!this.isConfigured) {
69
72
  console.log('[Respectlytics] ⚠️ SDK not configured. Call configure(apiKey) first.');
70
73
  return;
@@ -77,7 +80,12 @@ class RespectlyticsSDK {
77
80
  console.log('[Respectlytics] ⚠️ Event name too long (max 100 characters)');
78
81
  return;
79
82
  }
80
- const event = this.createEvent(eventName, screen);
83
+ const event = {
84
+ eventName,
85
+ timestamp: new Date().toISOString(),
86
+ sessionId: this.sessionManager.getSessionId(),
87
+ platform: this.platform
88
+ };
81
89
  this.eventQueue.add(event);
82
90
  }
83
91
 
@@ -88,71 +96,6 @@ class RespectlyticsSDK {
88
96
  async flush() {
89
97
  await this.eventQueue.flush();
90
98
  }
91
-
92
- // MARK: - Private Helpers
93
-
94
- createEvent(eventName, screen) {
95
- const metadata = this.collectMetadata();
96
- return {
97
- eventName,
98
- timestamp: new Date().toISOString(),
99
- sessionId: this.sessionManager.getSessionId(),
100
- screen: screen || null,
101
- ...metadata
102
- };
103
- }
104
- collectMetadata() {
105
- // Determine platform
106
- const platform = Platform.OS === 'ios' ? 'iOS' : 'Android';
107
-
108
- // Get OS version
109
- const osVersion = String(Platform.Version);
110
-
111
- // Get app version - try to get from native modules
112
- let appVersion = 'unknown';
113
- try {
114
- // React Native provides app info through different native modules
115
- const {
116
- PlatformConstants
117
- } = NativeModules;
118
- if (PlatformConstants?.reactNativeVersion) {
119
- // This is React Native version, not app version
120
- // App version should come from the host app
121
- }
122
- // For now, use 'unknown' as we can't reliably get app version without additional dependencies
123
- // In a real app, the developer would configure this
124
- } catch {
125
- appVersion = 'unknown';
126
- }
127
-
128
- // Get locale
129
- let locale = 'en_US';
130
- try {
131
- // React Native doesn't expose locale directly, but we can get it from platform
132
- if (Platform.OS === 'ios') {
133
- locale = NativeModules.SettingsManager?.settings?.AppleLocale || NativeModules.SettingsManager?.settings?.AppleLanguages?.[0] || 'en_US';
134
- } else {
135
- locale = NativeModules.I18nManager?.localeIdentifier || 'en_US';
136
- }
137
- } catch {
138
- locale = 'en_US';
139
- }
140
-
141
- // Determine device type based on screen size
142
- const {
143
- width,
144
- height
145
- } = Dimensions.get('window');
146
- const minDimension = Math.min(width, height);
147
- const deviceType = minDimension >= 600 ? 'tablet' : 'phone';
148
- return {
149
- platform,
150
- osVersion,
151
- appVersion,
152
- locale,
153
- deviceType
154
- };
155
- }
156
99
  }
157
100
 
158
101
  // Export singleton instance
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","Dimensions","NativeModules","SessionManager","NetworkClient","EventQueue","RespectlyticsSDK","isConfigured","constructor","networkClient","eventQueue","sessionManager","configure","apiKey","trim","console","log","start","track","eventName","screen","length","event","createEvent","add","flush","metadata","collectMetadata","timestamp","Date","toISOString","sessionId","getSessionId","platform","OS","osVersion","String","Version","appVersion","PlatformConstants","reactNativeVersion","locale","SettingsManager","settings","AppleLocale","AppleLanguages","I18nManager","localeIdentifier","width","height","get","minDimension","Math","min","deviceType","Respectlytics"],"sourceRoot":"../../src","sources":["Respectlytics.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Platform","SessionManager","NetworkClient","EventQueue","RespectlyticsSDK","isConfigured","constructor","networkClient","eventQueue","sessionManager","platform","OS","configure","apiKey","options","trim","console","log","apiEndpoint","start","track","eventName","length","event","timestamp","Date","toISOString","sessionId","getSessionId","add","flush","Respectlytics"],"sourceRoot":"../../src","sources":["Respectlytics.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,QAAQ,QAAQ,cAAc;AAEvC,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,UAAU,QAAQ,cAAc;;AAEzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,CAAC;EACbC,YAAY,GAAG,KAAK;EAM5BC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,aAAa,GAAG,IAAIL,aAAa,CAAC,CAAC;IACxC,IAAI,CAACM,UAAU,GAAG,IAAIL,UAAU,CAAC,IAAI,CAACI,aAAa,CAAC;IACpD,IAAI,CAACE,cAAc,GAAG,IAAIR,cAAc,CAAC,CAAC;IAC1C,IAAI,CAACS,QAAQ,GAAGV,QAAQ,CAACW,EAAE,KAAK,KAAK,GAAG,KAAK,GAAG,SAAS;EAC3D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEC,SAASA,CAACC,MAAc,EAAEC,OAAkC,EAAQ;IAClE,IAAI,CAACD,MAAM,IAAIA,MAAM,CAACE,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;MACnCC,OAAO,CAACC,GAAG,CAAC,4CAA4C,CAAC;MACzD;IACF;IAEA,IAAI,CAACV,aAAa,CAACK,SAAS,CAACC,MAAM,EAAEC,OAAO,EAAEI,WAAW,CAAC;IAC1D,IAAI,CAACV,UAAU,CAACW,KAAK,CAAC,CAAC;IACvB,IAAI,CAACd,YAAY,GAAG,IAAI;IAExBW,OAAO,CAACC,GAAG,CAAC,2CAA2C,CAAC;EAC1D;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACEG,KAAKA,CAACC,SAAiB,EAAQ;IAC7B,IAAI,CAAC,IAAI,CAAChB,YAAY,EAAE;MACtBW,OAAO,CAACC,GAAG,CAAC,sEAAsE,CAAC;MACnF;IACF;IAEA,IAAI,CAACI,SAAS,IAAIA,SAAS,CAACN,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;MACzCC,OAAO,CAACC,GAAG,CAAC,+CAA+C,CAAC;MAC5D;IACF;IAEA,IAAII,SAAS,CAACC,MAAM,GAAG,GAAG,EAAE;MAC1BN,OAAO,CAACC,GAAG,CAAC,6DAA6D,CAAC;MAC1E;IACF;IAEA,MAAMM,KAAY,GAAG;MACnBF,SAAS;MACTG,SAAS,EAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;MACnCC,SAAS,EAAE,IAAI,CAAClB,cAAc,CAACmB,YAAY,CAAC,CAAC;MAC7ClB,QAAQ,EAAE,IAAI,CAACA;IACjB,CAAC;IAED,IAAI,CAACF,UAAU,CAACqB,GAAG,CAACN,KAAK,CAAC;EAC5B;;EAEA;AACF;AACA;AACA;EACE,MAAMO,KAAKA,CAAA,EAAkB;IAC3B,MAAM,IAAI,CAACtB,UAAU,CAACsB,KAAK,CAAC,CAAC;EAC/B;AACF;;AAEA;AACA,MAAMC,aAAa,GAAG,IAAI3B,gBAAgB,CAAC,CAAC;AAC5C,eAAe2B,aAAa;AAC5B,SAAS3B,gBAAgB","ignoreList":[]}
@@ -3,10 +3,10 @@
3
3
  * Respectlytics React Native SDK
4
4
  *
5
5
  * Manages session ID generation and rotation.
6
- * Sessions are stored in RAM only (never persisted) for GDPR/ePrivacy compliance.
6
+ * Sessions are stored in RAM only (never persisted to disk).
7
7
  * Sessions automatically rotate every 2 hours.
8
8
  *
9
- * Copyright (c) 2025 Respectlytics. All rights reserved.
9
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
10
10
  */
11
11
 
12
12
  /**
@@ -29,8 +29,8 @@ function generateUUID() {
29
29
  * - Rotated automatically every 2 hours
30
30
  * - Regenerated on every app restart (new instance = new session)
31
31
  *
32
- * This RAM-only approach ensures GDPR/ePrivacy compliance:
33
- * - No device storage = No consent required under ePrivacy Directive Article 5(3)
32
+ * This RAM-only approach means session data never touches device storage:
33
+ * - Sessions exist only in memory and are lost on app restart
34
34
  * - Each app launch creates a fresh, unlinked session
35
35
  */
36
36
  export class SessionManager {
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Wrapper around AsyncStorage for persisting SDK data.
6
6
  *
7
- * Copyright (c) 2025 Respectlytics. All rights reserved.
7
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
8
8
  */
9
9
 
10
10
  import AsyncStorage from '@react-native-async-storage/async-storage';
@@ -5,13 +5,12 @@
5
5
  *
6
6
  * v2.0.0 Features:
7
7
  * - Session-based analytics (no persistent user tracking)
8
- * - RAM-only session storage (GDPR/ePrivacy compliant)
8
+ * - RAM-only session storage (never persisted to disk)
9
9
  * - Automatic 2-hour session rotation
10
10
  * - New session on every app restart
11
- *
12
- * Copyright (c) 2025 Respectlytics. All rights reserved.
11
+ *
12
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
13
13
  */
14
-
15
14
  import Respectlytics from './Respectlytics';
16
15
 
17
16
  // Default export - the main SDK instance
@@ -1 +1 @@
1
- {"version":3,"names":["Respectlytics","RespectlyticsSDK","Event"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,aAAa,MAAM,iBAAiB;;AAE3C;AACA,eAAeA,aAAa;;AAE5B;AACA,SAASC,gBAAgB,QAAQ,iBAAiB;AAClD,SAASC,KAAK,QAAQ,SAAS","ignoreList":[]}
1
+ {"version":3,"names":["Respectlytics","RespectlyticsSDK","Event"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,aAAa,MAAM,iBAAiB;;AAE3C;AACA,eAAeA,aAAa;;AAE5B;AACA,SAASC,gBAAgB,QAAQ,iBAAiB;AAClD,SAASC,KAAK,QAAQ,SAAS","ignoreList":[]}
@@ -2,26 +2,27 @@
2
2
  * types.ts
3
3
  * Respectlytics React Native SDK
4
4
  *
5
- * Copyright (c) 2025 Respectlytics. All rights reserved.
6
- * This SDK is provided under a proprietary license.
7
- * See LICENSE file for details.
5
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
8
6
  */
9
7
 
10
8
  /**
11
9
  * Represents an analytics event - flat structure matching API payload
12
10
  *
13
- * This interface only contains fields accepted by the Respectlytics API.
14
- * The API uses a strict allowlist for privacy protection.
15
- * Custom properties are NOT supported - this is by design for privacy.
16
- *
17
- * Note: As of v2.0.0, there is no userId field. Session-based analytics only.
11
+ * The SDK sends these 4 fields. The API stores 5 total
12
+ * (adding country, derived server-side from IP which is immediately discarded):
13
+ * - event_name (required)
14
+ * - timestamp
15
+ * - session_id
16
+ * - platform
17
+ *
18
+ * Country is derived server-side from IP (which is immediately discarded).
18
19
  */
19
20
 
20
21
  /**
21
22
  * Storage keys used by the SDK
22
- *
23
- * Note: As of v2.0.0, we only persist the event queue.
24
- * Session IDs are RAM-only for GDPR/ePrivacy compliance.
23
+ *
24
+ * Note: Only the event queue is persisted.
25
+ * Session IDs are RAM-only for privacy.
25
26
  */
26
27
  export const STORAGE_KEYS = {
27
28
  EVENT_QUEUE: 'com.respectlytics.eventQueue'
@@ -1 +1 @@
1
- {"version":3,"names":["STORAGE_KEYS","EVENT_QUEUE"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAaA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,YAAY,GAAG;EAC1BC,WAAW,EAAE;AACf,CAAU","ignoreList":[]}
1
+ {"version":3,"names":["STORAGE_KEYS","EVENT_QUEUE"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAQA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,YAAY,GAAG;EAC1BC,WAAW,EAAE;AACf,CAAU","ignoreList":[]}
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Manages event batching, persistence, and automatic flushing.
6
6
  * Events are NEVER lost - they are persisted immediately and retried on failure.
7
- * Copyright (c) 2025 Respectlytics. All rights reserved.
7
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
8
8
  */
9
9
  import { Event } from './types';
10
10
  import { NetworkClient } from './NetworkClient';
@@ -3,7 +3,7 @@
3
3
  * Respectlytics React Native SDK
4
4
  *
5
5
  * Handles HTTP communication with the Respectlytics API.
6
- * Copyright (c) 2025 Respectlytics. All rights reserved.
6
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
7
7
  */
8
8
  import { Event } from './types';
9
9
  export declare enum NetworkError {
@@ -18,10 +18,11 @@ export declare enum NetworkError {
18
18
  }
19
19
  export declare class NetworkClient {
20
20
  private apiKey;
21
+ private apiEndpoint;
21
22
  /**
22
- * Configure the network client with an API key
23
+ * Configure the network client with an API key and optional custom endpoint
23
24
  */
24
- configure(apiKey: string): void;
25
+ configure(apiKey: string, apiEndpoint?: string): void;
25
26
  /**
26
27
  * Check if the client is configured
27
28
  */
@@ -35,8 +36,8 @@ export declare class NetworkClient {
35
36
  */
36
37
  private sendEvent;
37
38
  /**
38
- * Convert Event object to API payload format
39
- * Note: As of v2.0.0, no user_id field is sent (session-based analytics only)
39
+ * Convert Event object to API payload format.
40
+ * The SDK sends 4 fields; the API stores 5 (adding country derived from IP).
40
41
  */
41
42
  private eventToPayload;
42
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkClient.d.ts","sourceRoot":"","sources":["../../src/NetworkClient.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAMhC,oBAAY,YAAY;IACtB,aAAa,mBAAmB;IAChC,eAAe,qBAAqB;IACpC,YAAY,iBAAiB;IAC7B,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAC5B,YAAY,kBAAkB;IAC9B,OAAO,YAAY;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IAErC;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C;;OAEG;YACW,SAAS;IAgFvB;;;OAGG;IACH,OAAO,CAAC,cAAc;IActB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"NetworkClient.d.ts","sourceRoot":"","sources":["../../src/NetworkClient.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAMhC,oBAAY,YAAY;IACtB,aAAa,mBAAmB;IAChC,eAAe,qBAAqB;IACpC,YAAY,iBAAiB;IAC7B,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;IAC5B,WAAW,iBAAiB;IAC5B,YAAY,kBAAkB;IAC9B,OAAO,YAAY;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,WAAW,CAAgC;IAEnD;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAOrD;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1C;;OAEG;YACW,SAAS;IAgFvB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd;AAED,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -3,25 +3,27 @@
3
3
  * Respectlytics React Native SDK
4
4
  *
5
5
  * Main entry point for the SDK.
6
- * Copyright (c) 2025 Respectlytics. All rights reserved.
6
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
7
7
  */
8
8
  /**
9
9
  * Main entry point for the Respectlytics SDK.
10
10
  *
11
- * v2.0.0 uses session-based analytics only:
11
+ * v2.1.0 uses session-based analytics only:
12
12
  * - Session IDs are generated automatically in RAM
13
13
  * - Sessions rotate every 2 hours
14
14
  * - New session on every app restart
15
- * - No persistent user tracking (GDPR/ePrivacy compliant)
15
+ * - Only 4 fields sent by SDK; 5 stored (country derived server-side)
16
16
  *
17
17
  * Usage:
18
18
  * ```typescript
19
19
  * // 1. Configure at app launch
20
20
  * Respectlytics.configure('your-api-key');
21
21
  *
22
+ * // For self-hosted instances:
23
+ * Respectlytics.configure('your-api-key', { apiEndpoint: 'https://your-server.com/api/v1/events/' });
24
+ *
22
25
  * // 2. Track events
23
26
  * Respectlytics.track('purchase');
24
- * Respectlytics.track('view_product', 'ProductScreen');
25
27
  * ```
26
28
  */
27
29
  declare class RespectlyticsSDK {
@@ -29,31 +31,32 @@ declare class RespectlyticsSDK {
29
31
  private networkClient;
30
32
  private eventQueue;
31
33
  private sessionManager;
34
+ private platform;
32
35
  constructor();
33
36
  /**
34
37
  * Initialize the SDK with your API key.
35
38
  * Call once at app startup.
36
39
  *
37
40
  * @param apiKey Your Respectlytics API key from the dashboard
41
+ * @param options Optional configuration (e.g., apiEndpoint for self-hosted instances)
38
42
  */
39
- configure(apiKey: string): void;
43
+ configure(apiKey: string, options?: {
44
+ apiEndpoint?: string;
45
+ }): void;
40
46
  /**
41
- * Track an event with an optional screen name.
47
+ * Track an event.
42
48
  *
43
- * The SDK automatically collects privacy-safe metadata:
44
- * - timestamp, session_id, platform, os_version, app_version, locale
49
+ * Custom properties are NOT supported - this is by design for privacy.
50
+ * The API stores 5 fields (these 4 plus country derived server-side).
45
51
  *
46
52
  * @param eventName Name of the event (e.g., "purchase", "button_clicked")
47
- * @param screen Optional screen name where the event occurred
48
53
  */
49
- track(eventName: string, screen?: string): void;
54
+ track(eventName: string): void;
50
55
  /**
51
56
  * Force send all queued events immediately.
52
57
  * Rarely needed - the SDK auto-flushes every 30 seconds or when the queue reaches 10 events.
53
58
  */
54
59
  flush(): Promise<void>;
55
- private createEvent;
56
- private collectMetadata;
57
60
  }
58
61
  declare const Respectlytics: RespectlyticsSDK;
59
62
  export default Respectlytics;
@@ -1 +1 @@
1
- {"version":3,"file":"Respectlytics.d.ts","sourceRoot":"","sources":["../../src/Respectlytics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;;;;;;;;;;;;;;;;GAkBG;AACH,cAAM,gBAAgB;IACpB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,cAAc,CAAiB;;IAQvC;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAa/B;;;;;;;;OAQG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAoB/C;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAM5B,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,eAAe;CAwDxB;AAGD,QAAA,MAAM,aAAa,kBAAyB,CAAC;AAC7C,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"Respectlytics.d.ts","sourceRoot":"","sources":["../../src/Respectlytics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,cAAM,gBAAgB;IACpB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAS;;IASzB;;;;;;OAMG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAanE;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IA0B9B;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B;AAGD,QAAA,MAAM,aAAa,kBAAyB,CAAC;AAC7C,eAAe,aAAa,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
@@ -3,10 +3,10 @@
3
3
  * Respectlytics React Native SDK
4
4
  *
5
5
  * Manages session ID generation and rotation.
6
- * Sessions are stored in RAM only (never persisted) for GDPR/ePrivacy compliance.
6
+ * Sessions are stored in RAM only (never persisted to disk).
7
7
  * Sessions automatically rotate every 2 hours.
8
8
  *
9
- * Copyright (c) 2025 Respectlytics. All rights reserved.
9
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
10
10
  */
11
11
  /**
12
12
  * Manages session ID generation and rotation.
@@ -17,8 +17,8 @@
17
17
  * - Rotated automatically every 2 hours
18
18
  * - Regenerated on every app restart (new instance = new session)
19
19
  *
20
- * This RAM-only approach ensures GDPR/ePrivacy compliance:
21
- * - No device storage = No consent required under ePrivacy Directive Article 5(3)
20
+ * This RAM-only approach means session data never touches device storage:
21
+ * - Sessions exist only in memory and are lost on app restart
22
22
  * - Each app launch creates a fresh, unlinked session
23
23
  */
24
24
  export declare class SessionManager {
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * Wrapper around AsyncStorage for persisting SDK data.
6
6
  *
7
- * Copyright (c) 2025 Respectlytics. All rights reserved.
7
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
8
8
  */
9
9
  /**
10
10
  * Storage wrapper providing typed access to AsyncStorage
@@ -5,11 +5,11 @@
5
5
  *
6
6
  * v2.0.0 Features:
7
7
  * - Session-based analytics (no persistent user tracking)
8
- * - RAM-only session storage (GDPR/ePrivacy compliant)
8
+ * - RAM-only session storage (never persisted to disk)
9
9
  * - Automatic 2-hour session rotation
10
10
  * - New session on every app restart
11
11
  *
12
- * Copyright (c) 2025 Respectlytics. All rights reserved.
12
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
13
13
  */
14
14
  import Respectlytics from './Respectlytics';
15
15
  export default Respectlytics;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAG5C,eAAe,aAAa,CAAC;AAG7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAG5C,eAAe,aAAa,CAAC;AAG7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
@@ -2,35 +2,31 @@
2
2
  * types.ts
3
3
  * Respectlytics React Native SDK
4
4
  *
5
- * Copyright (c) 2025 Respectlytics. All rights reserved.
6
- * This SDK is provided under a proprietary license.
7
- * See LICENSE file for details.
5
+ * Copyright (c) 2025 Respectlytics. Licensed under MIT.
8
6
  */
9
7
  /**
10
8
  * Represents an analytics event - flat structure matching API payload
11
9
  *
12
- * This interface only contains fields accepted by the Respectlytics API.
13
- * The API uses a strict allowlist for privacy protection.
14
- * Custom properties are NOT supported - this is by design for privacy.
10
+ * The SDK sends these 4 fields. The API stores 5 total
11
+ * (adding country, derived server-side from IP which is immediately discarded):
12
+ * - event_name (required)
13
+ * - timestamp
14
+ * - session_id
15
+ * - platform
15
16
  *
16
- * Note: As of v2.0.0, there is no userId field. Session-based analytics only.
17
+ * Country is derived server-side from IP (which is immediately discarded).
17
18
  */
18
19
  export interface Event {
19
20
  eventName: string;
20
21
  timestamp: string;
21
22
  sessionId: string;
22
- screen: string | null;
23
23
  platform: string;
24
- osVersion: string;
25
- appVersion: string;
26
- locale: string;
27
- deviceType: string;
28
24
  }
29
25
  /**
30
26
  * Storage keys used by the SDK
31
27
  *
32
- * Note: As of v2.0.0, we only persist the event queue.
33
- * Session IDs are RAM-only for GDPR/ePrivacy compliance.
28
+ * Note: Only the event queue is persisted.
29
+ * Session IDs are RAM-only for privacy.
34
30
  */
35
31
  export declare const STORAGE_KEYS: {
36
32
  readonly EVENT_QUEUE: "com.respectlytics.eventQueue";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;GAQG;AACH,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;CAEf,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,KAAK;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;CAEf,CAAC"}