fleek-track-analytics 1.17.36 → 1.17.40

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 (41) hide show
  1. package/README.md +0 -69
  2. package/lib/node/analytics-tool/node-rudderstack.d.ts +10 -0
  3. package/lib/node/analytics-tool/node-rudderstack.js +76 -0
  4. package/lib/node/analytics-tool/node-rudderstack.js.map +1 -0
  5. package/lib/node/analytics-tool/rudderstack-default-config.js.map +1 -0
  6. package/lib/node/analytics-tool/rudderstack-event-routing.js +18 -0
  7. package/lib/node/analytics-tool/rudderstack-event-routing.js.map +1 -0
  8. package/lib/node/track-analytics/track-analytics-types.d.ts +1 -0
  9. package/lib/node/track-analytics/track-analytics.d.ts +2 -0
  10. package/lib/node/track-analytics/track-analytics.js +102 -11
  11. package/lib/node/track-analytics/track-analytics.js.map +1 -1
  12. package/lib/react-native/track-analytics/track-analytics.d.ts +0 -2
  13. package/lib/react-native/track-analytics/track-analytics.js +32 -152
  14. package/lib/react-native/track-analytics/track-analytics.js.map +1 -1
  15. package/lib/track-analytics-types.d.ts +0 -5
  16. package/lib/web/track-analytics/track-analytics.d.ts +0 -2
  17. package/lib/web/track-analytics/track-analytics.js +38 -139
  18. package/lib/web/track-analytics/track-analytics.js.map +1 -1
  19. package/package.json +3 -3
  20. package/EXPO_RN_TESTING_GUIDE.md +0 -283
  21. package/lib/react-native/analytics-tool/react-native-rudderstack.d.ts +0 -12
  22. package/lib/react-native/analytics-tool/react-native-rudderstack.js +0 -87
  23. package/lib/react-native/analytics-tool/react-native-rudderstack.js.map +0 -1
  24. package/lib/react-native/analytics-tool/rudderstack-default-config.js +0 -8
  25. package/lib/react-native/analytics-tool/rudderstack-default-config.js.map +0 -1
  26. package/lib/react-native/analytics-tool/rudderstack-event-routing.d.ts +0 -6
  27. package/lib/react-native/analytics-tool/rudderstack-event-routing.js +0 -17
  28. package/lib/react-native/analytics-tool/rudderstack-event-routing.js.map +0 -1
  29. package/lib/web/analytics-tool/rudderstack-default-config.d.ts +0 -4
  30. package/lib/web/analytics-tool/rudderstack-default-config.js.map +0 -1
  31. package/lib/web/analytics-tool/rudderstack-event-routing.js +0 -16
  32. package/lib/web/analytics-tool/rudderstack-event-routing.js.map +0 -1
  33. package/lib/web/analytics-tool/web-rudderstack.d.ts +0 -17
  34. package/lib/web/analytics-tool/web-rudderstack.js +0 -76
  35. package/lib/web/analytics-tool/web-rudderstack.js.map +0 -1
  36. package/spec-files/rudderstack-migration/HLD_LLD.md +0 -353
  37. package/spec-files/rudderstack-migration/RUDDERSTACK_SELF_HOSTED_PARAMETERS.md +0 -283
  38. package/spec-files/rudderstack-migration/SEGMENT_VS_RUDDERSTACK_SDK_COMPARISON.md +0 -140
  39. /package/lib/{react-native → node}/analytics-tool/rudderstack-default-config.d.ts +0 -0
  40. /package/lib/{web → node}/analytics-tool/rudderstack-default-config.js +0 -0
  41. /package/lib/{web → node}/analytics-tool/rudderstack-event-routing.d.ts +0 -0
@@ -1,87 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.reactNativeRudderstack = void 0;
7
- const rudder_sdk_react_native_1 = __importDefault(require("@rudderstack/rudder-sdk-react-native"));
8
- const package_json_1 = require("../../../package.json");
9
- let isInitialized = false;
10
- let currentWriteKey = null;
11
- let currentDataPlaneUrl = null;
12
- const reactNativeRudderstack = async ({ writeKey, dataPlaneUrl, app, dimensionsManager, }) => {
13
- const normalizedDataPlaneUrl = dataPlaneUrl.endsWith('/') ? dataPlaneUrl.slice(0, -1) : dataPlaneUrl;
14
- if (!isInitialized || currentWriteKey !== writeKey || currentDataPlaneUrl !== normalizedDataPlaneUrl) {
15
- try {
16
- await rudder_sdk_react_native_1.default.setup(writeKey, {
17
- dataPlaneUrl: normalizedDataPlaneUrl,
18
- trackAppLifecycleEvents: true,
19
- recordScreenViews: true,
20
- flushQueueSize: 5,
21
- sleepTimeOut: 10,
22
- });
23
- try {
24
- await rudder_sdk_react_native_1.default.optOut(false);
25
- }
26
- catch (optOutError) {
27
- }
28
- isInitialized = true;
29
- currentWriteKey = writeKey;
30
- currentDataPlaneUrl = normalizedDataPlaneUrl;
31
- }
32
- catch (error) {
33
- throw error;
34
- }
35
- }
36
- const trackWrapper = async (eventName, eventParams) => {
37
- const data = eventParams;
38
- const eventData = Object.assign(Object.assign({}, data), { anlaytics_lib_version: package_json_1.version, fleek_platform: app, time_stamp: Date.now(), ads_params: dimensionsManager.adsDimensionValues, url_params: dimensionsManager.urlDimensionValues, internetStats: dimensionsManager.internetDimensions });
39
- console.log('RUDDERSTACK CHECK: [TRACK] eventName:', eventName, 'eventData:', JSON.stringify(eventData));
40
- try {
41
- rudder_sdk_react_native_1.default.track(eventName, eventData);
42
- }
43
- catch (error) {
44
- throw error;
45
- }
46
- return Promise.resolve();
47
- };
48
- const screenWrapper = async (name, options) => {
49
- const screenData = Object.assign(Object.assign({}, (options || {})), { anlaytics_lib_version: package_json_1.version, fleek_platform: app, time_stamp: Date.now(), ads_params: dimensionsManager.adsDimensionValues, url_params: dimensionsManager.urlDimensionValues, internetStats: dimensionsManager.internetDimensions });
50
- console.log('RUDDERSTACK CHECK: [SCREEN] name:', name, 'screenData:', JSON.stringify(screenData));
51
- try {
52
- rudder_sdk_react_native_1.default.screen(name, screenData);
53
- }
54
- catch (error) {
55
- throw error;
56
- }
57
- return Promise.resolve();
58
- };
59
- const identifyWrapper = async (id, traits) => {
60
- const traitsObj = traits || {};
61
- const options = {};
62
- console.log('RUDDERSTACK CHECK: [IDENTIFY] id:', id, 'traits:', JSON.stringify(traits));
63
- try {
64
- if (id) {
65
- await rudder_sdk_react_native_1.default.identify(id, traitsObj, options);
66
- }
67
- else {
68
- await rudder_sdk_react_native_1.default.identify(traitsObj, options);
69
- }
70
- }
71
- catch (error) {
72
- throw error;
73
- }
74
- };
75
- const getUserId = () => {
76
- return '';
77
- };
78
- return {
79
- track: trackWrapper,
80
- screen: screenWrapper,
81
- identify: identifyWrapper,
82
- type: 'RN_RUDDERSTACK',
83
- getUserId,
84
- };
85
- };
86
- exports.reactNativeRudderstack = reactNativeRudderstack;
87
- //# sourceMappingURL=react-native-rudderstack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"react-native-rudderstack.js","sourceRoot":"","sources":["../../../src/react-native/analytics-tool/react-native-rudderstack.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RUDDERSTACK_DEFAULT_CONFIG = void 0;
4
- exports.RUDDERSTACK_DEFAULT_CONFIG = {
5
- dataPlaneUrl: 'https://rudderstack.joinfleek.com',
6
- writeKey: '37NdqKQQY295HrNiIdLWniUMmKU',
7
- };
8
- //# sourceMappingURL=rudderstack-default-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rudderstack-default-config.js","sourceRoot":"","sources":["../../../src/react-native/analytics-tool/rudderstack-default-config.ts"],"names":[],"mappings":";;;AAAa,QAAA,0BAA0B,GAAG;IACxC,YAAY,EAAE,mCAAmC;IACjD,QAAQ,EAAE,6BAA6B;CACxC,CAAC"}
@@ -1,6 +0,0 @@
1
- export interface IRudderstackEventRouting {
2
- sendToRudderstack?: string[];
3
- eventPatterns?: string[];
4
- enableAllEvents?: boolean;
5
- }
6
- export declare const rudderstackEventRouting: IRudderstackEventRouting;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rudderstackEventRouting = void 0;
4
- exports.rudderstackEventRouting = {
5
- sendToRudderstack: [
6
- 'identify',
7
- 'screen',
8
- 'product_detail_page_viewed',
9
- 'homescreen',
10
- 'homescreen_viewed',
11
- 'product_tile_clicked',
12
- 'session_started',
13
- 'collection_viewed',
14
- ],
15
- enableAllEvents: true,
16
- };
17
- //# sourceMappingURL=rudderstack-event-routing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rudderstack-event-routing.js","sourceRoot":"","sources":["../../../src/react-native/analytics-tool/rudderstack-event-routing.ts"],"names":[],"mappings":";;;AAWa,QAAA,uBAAuB,GAA6B;IAC/D,iBAAiB,EAAE;QACjB,UAAU;QACV,QAAQ;QACR,4BAA4B;QAC5B,YAAY;QACZ,mBAAmB;QACnB,sBAAsB;QACtB,iBAAiB;QACjB,mBAAmB;KACpB;IACD,eAAe,EAAE,IAAI;CACtB,CAAC"}
@@ -1,4 +0,0 @@
1
- export declare const RUDDERSTACK_DEFAULT_CONFIG: {
2
- dataPlaneUrl: string;
3
- writeKey: string;
4
- };
@@ -1 +0,0 @@
1
- {"version":3,"file":"rudderstack-default-config.js","sourceRoot":"","sources":["../../../src/web/analytics-tool/rudderstack-default-config.ts"],"names":[],"mappings":";;;AAAa,QAAA,0BAA0B,GAAG;IACxC,YAAY,EAAE,mCAAmC;IACjD,QAAQ,EAAE,6BAA6B;CACxC,CAAC"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rudderstackEventRouting = void 0;
4
- exports.rudderstackEventRouting = {
5
- sendToRudderstack: [
6
- 'product_detail_page_viewed',
7
- 'identify',
8
- 'page',
9
- 'homescreen',
10
- 'homescreen_viewed',
11
- 'product_tile_clicked',
12
- 'session_started',
13
- 'collection_viewed',
14
- ],
15
- };
16
- //# sourceMappingURL=rudderstack-event-routing.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rudderstack-event-routing.js","sourceRoot":"","sources":["../../../src/web/analytics-tool/rudderstack-event-routing.ts"],"names":[],"mappings":";;;AAUa,QAAA,uBAAuB,GAA6B;IAC/D,iBAAiB,EAAE;QACjB,4BAA4B;QAC5B,UAAU;QACV,MAAM;QACN,YAAY;QACZ,mBAAmB;QACnB,sBAAsB;QACtB,iBAAiB;QACjB,mBAAmB;KACpB;CACF,CAAC"}
@@ -1,17 +0,0 @@
1
- import { tWebToolWraperFunction } from './analytics-tool-types';
2
- import { tWebTrack, tWebIdentify, tWebPage } from '../track-analytics/track-analytics-types';
3
- interface IRudderstackWrapperParams {
4
- writeKey: string;
5
- dataPlaneUrl: string;
6
- app: Parameters<tWebToolWraperFunction>[0]['app'];
7
- debug?: boolean;
8
- dimenstionsManager: Parameters<tWebToolWraperFunction>[0]['dimenstionsManager'];
9
- }
10
- export declare const webRudderstack: ({ writeKey, dataPlaneUrl, app, debug, dimenstionsManager }: IRudderstackWrapperParams) => {
11
- track: tWebTrack;
12
- page: tWebPage;
13
- identify: tWebIdentify;
14
- getAnonymousId: () => Promise<string | undefined>;
15
- type: string;
16
- };
17
- export {};
@@ -1,76 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.webRudderstack = void 0;
4
- const analytics_js_1 = require("@rudderstack/analytics-js");
5
- const package_json_1 = require("../../../package.json");
6
- const webRudderstack = ({ writeKey, dataPlaneUrl, app, debug, dimenstionsManager }) => {
7
- const rudderanalytics = new analytics_js_1.RudderAnalytics();
8
- const normalizedDataPlaneUrl = dataPlaneUrl.endsWith('/') ? dataPlaneUrl.slice(0, -1) : dataPlaneUrl;
9
- rudderanalytics.load(writeKey, normalizedDataPlaneUrl, {
10
- anonymousIdOptions: {
11
- autoCapture: {
12
- enabled: true,
13
- source: 'segment',
14
- },
15
- },
16
- });
17
- const analytics = rudderanalytics.getAnalyticsInstance(writeKey);
18
- if (!analytics) {
19
- throw new Error('Failed to initialize RudderStack analytics instance');
20
- }
21
- return {
22
- track: (async (eventName, eventParams, _options, callback) => {
23
- const eventData = Object.assign(Object.assign({}, eventParams), { anlaytics_lib_version: package_json_1.version, fleek_platform: app, time_stamp: Date.now(), ads_params: dimenstionsManager.adsDimensionValues, url_params: dimenstionsManager.urlDimensionValues });
24
- const userTraits = analytics.getUserTraits() || {};
25
- if (debug) {
26
- console.log('RUDDERSTACK TRACK EVENT', eventName, eventData, userTraits);
27
- }
28
- analytics.track({
29
- name: eventName,
30
- properties: Object.assign(Object.assign({}, eventData), { webUserTraits: userTraits }),
31
- });
32
- if (callback && typeof callback === 'function') {
33
- callback();
34
- }
35
- return Promise.resolve();
36
- }),
37
- page: (async (name, props) => {
38
- if (debug) {
39
- console.log('RUDDERSTACK PAGE EVENT', name, props);
40
- }
41
- if (typeof name === 'object' && name !== null) {
42
- analytics.page({
43
- name: undefined,
44
- properties: Object.assign(Object.assign({}, name), { fleek_platform: app }),
45
- });
46
- }
47
- else {
48
- analytics.page({
49
- name: name || undefined,
50
- properties: Object.assign(Object.assign({}, props), { fleek_platform: app }),
51
- });
52
- }
53
- return Promise.resolve();
54
- }),
55
- identify: (async (...args) => {
56
- if (debug) {
57
- console.log('RUDDERSTACK IDENTIFY EVENT', ...args);
58
- }
59
- if (args.length >= 1) {
60
- const userId = args[0];
61
- const traits = args[1] || {};
62
- analytics.identify({
63
- userId: userId || null,
64
- traits: traits || null,
65
- });
66
- }
67
- return Promise.resolve();
68
- }),
69
- getAnonymousId: async () => {
70
- return analytics.getAnonymousId();
71
- },
72
- type: 'WEB_RUDDERSTACK',
73
- };
74
- };
75
- exports.webRudderstack = webRudderstack;
76
- //# sourceMappingURL=web-rudderstack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"web-rudderstack.js","sourceRoot":"","sources":["../../../src/web/analytics-tool/web-rudderstack.ts"],"names":[],"mappings":"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"}
@@ -1,353 +0,0 @@
1
- # RudderStack Migration - High-Level Design (HLD) and Low-Level Design (LLD)
2
-
3
- ## High-Level Design (HLD)
4
-
5
- ### System Architecture
6
-
7
- ```mermaid
8
- graph TB
9
- subgraph Client["Client Application"]
10
- TA[TrackAnalytics Class]
11
- ER[Event Router]
12
- EM[Event Enrichment Module]
13
- DM[Dimension Manager]
14
- TM[Trace Manager]
15
- end
16
-
17
- subgraph SDKs["Analytics SDKs"]
18
- SS[Segment SDK]
19
- RS[RudderStack SDK]
20
- end
21
-
22
- subgraph Backend["Backend Infrastructure"]
23
- CP[Control Plane<br/>Hosted/Self-hosted]
24
- DP[Data Plane<br/>Self-hosted]
25
- PG[(PostgreSQL)]
26
- end
27
-
28
- subgraph Destinations["Destinations"]
29
- D1[Warehouse]
30
- D2[Third-party Tools]
31
- end
32
-
33
- TA --> EM
34
- EM --> DM
35
- EM --> TM
36
- EM --> ER
37
- ER -->|"All Events"| SS
38
- ER -->|"Config-based"| RS
39
- SS -->|"Events"| CP
40
- RS -->|"Events"| DP
41
- CP --> DP
42
- DP --> PG
43
- DP --> D1
44
- DP --> D2
45
- ```
46
-
47
- ### Component Responsibilities
48
-
49
- 1. **TrackAnalytics Class**: Main entry point, maintains existing API unchanged
50
- 2. **Event Router**: New component that routes events based on internal library configuration
51
- 3. **Event Enrichment**: Existing module (unchanged) - adds trace context, dimensions
52
- 4. **Dimension Manager**: Existing module (unchanged) - manages ads and URL dimensions
53
- 5. **Trace Manager**: Existing module (unchanged) - manages session and trace IDs
54
- 6. **SDK Wrappers**: Separate wrappers for Segment and RudderStack
55
-
56
- ### Data Flow
57
-
58
- 1. Application calls `trackAnalytics.track(eventName, properties)`
59
- 2. `enrichEvent()` adds trace context and dimensions (unchanged)
60
- 3. Event Router checks internal library configuration:
61
- - Always sends to Segment (existing behavior, unchanged)
62
- - Conditionally sends to RudderStack if event matches internal routing config
63
- 4. Each SDK wrapper formats and sends events to respective endpoints
64
- 5. RudderStack data plane processes and routes to destinations
65
-
66
- ### Key Design Principles
67
-
68
- - **Non-Breaking**: Segment integration remains completely unchanged
69
- - **Dual-Send**: Events can be sent to both platforms simultaneously
70
- - **Config-Driven**: Routing controlled by internal library configuration
71
- - **Fail-Safe**: RudderStack failures do not affect Segment sending
72
- - **Isolated**: RudderStack logic is isolated from Segment logic
73
-
74
- ## Low-Level Design (LLD)
75
-
76
- ### File Structure
77
-
78
- ```
79
- src/web/
80
- ├── analytics-tool/
81
- │ ├── web-segment.ts (unchanged)
82
- │ ├── web-rudderstack.ts (new)
83
- │ ├── rudderstack-event-routing.ts (new - internal routing config)
84
- │ └── analytics-tool-types.ts (unchanged)
85
- ├── track-analytics/
86
- │ ├── track-analytics.ts (modified - add routing)
87
- │ └── track-analytics-types.ts (unchanged)
88
- └── index.ts (unchanged)
89
- ```
90
-
91
- ### Component Details
92
-
93
- #### 1. Event Routing Configuration (`rudderstack-event-routing.ts`)
94
-
95
- **Purpose**: Internal library configuration for event routing
96
-
97
- **Location**: `src/web/analytics-tool/rudderstack-event-routing.ts`
98
-
99
- **Structure**:
100
- ```typescript
101
- export interface IRudderstackEventRouting {
102
- sendToRudderstack?: string[]; // List of event names
103
- eventPatterns?: string[]; // Regex patterns for event names
104
- }
105
-
106
- export const rudderstackEventRouting: IRudderstackEventRouting = {
107
- sendToRudderstack: [
108
- // Event names to send to RudderStack
109
- ],
110
- // eventPatterns: ['^test_', '^poc_']
111
- };
112
- ```
113
-
114
- **Key Points**:
115
- - Managed within library repository
116
- - Not passed from application layer
117
- - Can be modified without application changes
118
-
119
- #### 2. RudderStack Wrapper (`web-rudderstack.ts`)
120
-
121
- **Purpose**: Wrapper around RudderStack SDK, similar to `web-segment.ts`
122
-
123
- **Location**: `src/web/analytics-tool/web-rudderstack.ts`
124
-
125
- **Responsibilities**:
126
- - Initialize RudderStack SDK
127
- - Format events with metadata (version, platform, timestamp, dimensions)
128
- - Implement `IWebAnalyticsWrapper` interface
129
- - Handle anonymous ID synchronization with Segment
130
-
131
- **Key Implementation Details**:
132
- - Uses `@rudderstack/rudder-sdk-js` package
133
- - Initializes with write key and data plane URL
134
- - Syncs anonymousId from Segment for migration continuity
135
- - Adds same metadata as Segment wrapper (analytics_lib_version, fleek_platform, etc.)
136
-
137
- #### 3. TrackAnalytics Modifications (`track-analytics.ts`)
138
-
139
- **Changes Required**:
140
-
141
- 1. **New Property**: Add `rudderstackWrapper` property
142
- ```typescript
143
- private rudderstackWrapper: IWebAnalyticsWrapper | null = null;
144
- ```
145
-
146
- 2. **Modified `initAnalytics()` Method**:
147
- - Keep existing Segment initialization (unchanged)
148
- - Add RudderStack initialization if enabled
149
- - Wrap RudderStack init in try-catch for error handling
150
-
151
- 3. **Modified `track()` Method**:
152
- - Keep existing Segment call (unchanged)
153
- - Add conditional RudderStack call based on routing config
154
- - Wrap RudderStack call in try-catch
155
-
156
- 4. **Modified `identify()` Method**:
157
- - Keep existing Segment call (unchanged)
158
- - Add conditional RudderStack call based on routing config
159
- - Wrap RudderStack call in try-catch
160
-
161
- 5. **Modified `page()` Method**:
162
- - Keep existing Segment call (unchanged)
163
- - Add conditional RudderStack call based on routing config
164
- - Wrap RudderStack call in try-catch
165
-
166
- 6. **New Method**: `shouldSendToRudderstack()`
167
- - Checks internal routing configuration
168
- - Supports event name list and regex patterns
169
- - Returns boolean
170
-
171
- #### 4. Type Definitions (`track-analytics-types.ts`)
172
-
173
- **Changes Required**:
174
-
175
- Extend `IAnalyticsInit` interface:
176
- ```typescript
177
- export interface IAnalyticsInit {
178
- // ... existing fields
179
- rudderstack?: {
180
- enabled: boolean;
181
- writeKey: string;
182
- dataPlaneUrl: string;
183
- // Note: eventRouting is NOT part of this interface
184
- };
185
- }
186
- ```
187
-
188
- ### Implementation Flow
189
-
190
- #### Initialization Flow
191
-
192
- ```
193
- 1. Application creates TrackAnalytics instance
194
-
195
- 2. Application calls initAnalytics()
196
-
197
- 3. Initialize Dimension Manager (unchanged)
198
-
199
- 4. Initialize Segment SDK (unchanged)
200
-
201
- 5. Check if RudderStack enabled
202
- ├─→ No: Continue with Segment only
203
- └─→ Yes: Initialize RudderStack SDK
204
- ├─→ Success: Store wrapper reference
205
- └─→ Failure: Log error, continue with Segment only
206
-
207
- 6. Initialize Trace Manager (unchanged)
208
- ```
209
-
210
- #### Event Tracking Flow
211
-
212
- ```
213
- 1. Application calls track(eventName, properties)
214
-
215
- 2. Check if initialized (unchanged)
216
-
217
- 3. Check if bot/crawler (unchanged)
218
-
219
- 4. enrichEvent() - Add trace context (unchanged)
220
-
221
- 5. Send to Segment (unchanged)
222
-
223
- 6. Check shouldSendToRudderstack(eventName)
224
- ├─→ No: End
225
- └─→ Yes: Send to RudderStack
226
- ├─→ Success: Event sent
227
- └─→ Failure: Log error, continue (don't affect Segment)
228
- ```
229
-
230
- ### Error Handling Strategy
231
-
232
- 1. **Initialization Errors**:
233
- - RudderStack init failures are caught and logged
234
- - Application continues with Segment only
235
- - No impact on existing functionality
236
-
237
- 2. **Event Sending Errors**:
238
- - RudderStack send failures are caught and logged
239
- - Segment sending continues normally
240
- - Errors logged via existing errorHandler
241
-
242
- 3. **Configuration Errors**:
243
- - Invalid routing config defaults to not sending to RudderStack
244
- - No impact on Segment functionality
245
-
246
- ### Testing Strategy
247
-
248
- #### Unit Tests
249
-
250
- 1. **Event Routing Logic**:
251
- - Test `shouldSendToRudderstack()` with various configurations
252
- - Test event name matching
253
- - Test regex pattern matching
254
-
255
- 2. **Wrapper Tests**:
256
- - Test RudderStack wrapper initialization
257
- - Test event formatting
258
- - Test metadata addition
259
-
260
- #### Integration Tests
261
-
262
- 1. **Dual-Send Tests**:
263
- - Verify events sent to both platforms
264
- - Verify events sent only to Segment when not in config
265
- - Verify error handling doesn't affect Segment
266
-
267
- 2. **End-to-End Tests**:
268
- - Test full initialization flow
269
- - Test event tracking flow
270
- - Test error scenarios
271
-
272
- ### Migration Path
273
-
274
- #### Phase 1: PoC (Current Implementation)
275
- - Web platform only
276
- - Internal routing configuration
277
- - Dual-send for selected events
278
- - No changes to Segment integration
279
-
280
- #### Phase 2: Validation
281
- - Monitor event delivery to both platforms
282
- - Compare data quality
283
- - Validate routing logic
284
-
285
- #### Phase 3: Expansion
286
- - Extend to React Native platform
287
- - Extend to Node.js platform
288
- - Add more events to routing config
289
-
290
- #### Phase 4: Full Migration
291
- - Gradually move all events to RudderStack
292
- - Remove Segment integration
293
- - Clean up code
294
-
295
- ### Performance Considerations
296
-
297
- 1. **Dual-Send Overhead**:
298
- - Minimal - both SDKs send asynchronously
299
- - No blocking operations
300
- - Failures don't cascade
301
-
302
- 2. **Memory Usage**:
303
- - Both SDKs loaded in memory
304
- - Similar memory footprint to Segment alone
305
- - No significant impact
306
-
307
- 3. **Network Traffic**:
308
- - Events sent to both platforms
309
- - Consider bandwidth for high-volume events
310
- - Can be controlled via routing config
311
-
312
- ### Security Considerations
313
-
314
- 1. **Credentials**:
315
- - Write keys stored securely
316
- - Data plane URL should use HTTPS
317
- - No credentials in routing config
318
-
319
- 2. **Data Privacy**:
320
- - Same data sent to both platforms
321
- - Ensure compliance with both platforms
322
- - Consider data residency requirements
323
-
324
- ### Monitoring and Observability
325
-
326
- 1. **Metrics to Track**:
327
- - Events sent to Segment (existing)
328
- - Events sent to RudderStack (new)
329
- - Routing decision counts
330
- - Error rates for RudderStack
331
-
332
- 2. **Logging**:
333
- - RudderStack initialization status
334
- - Routing decisions (optional, for debugging)
335
- - Error logs for RudderStack operations
336
-
337
- ### Rollback Strategy
338
-
339
- If issues arise:
340
- 1. Disable RudderStack via configuration (enabled: false)
341
- 2. Remove RudderStack initialization code
342
- 3. Revert to Segment-only implementation
343
- 4. No data loss - Segment continues working
344
-
345
- ### Success Criteria
346
-
347
- - ✅ Segment integration unchanged and working
348
- - ✅ RudderStack integration working for configured events
349
- - ✅ Events correctly routed based on configuration
350
- - ✅ No breaking changes to existing API
351
- - ✅ Error handling prevents RudderStack issues from affecting Segment
352
- - ✅ PoC validates event delivery to both platforms
353
-