44import { AnalyticsBrowser } from '@segment/analytics-next'
55import { SignalsPlugin , ProcessSignal } from '@segment/analytics-signals'
66
7- export const analytics = new AnalyticsBrowser ( )
8- if ( ! process . env . WRITEKEY ) {
7+ // Function to get query string parameters
8+
9+ const STORAGE_TYPE : 'localStorage' | 'sessionStorage' = 'localStorage'
10+
11+ // Function to set localStorage from query string parameters
12+
13+ const queryParams = {
14+ STAGE_KEY_NAME : 'stage' ,
15+ WRITE_KEY_NAME : 'wk' ,
16+ RESET_KEY_NAME : 'reset' ,
17+ }
18+
19+ const Storage = ( ) => {
20+ const getQueryParams = ( ) => {
21+ const params = new URLSearchParams ( window . location . search )
22+ const stage = params . get ( queryParams . STAGE_KEY_NAME )
23+ const writeKey = params . get ( queryParams . WRITE_KEY_NAME )
24+ const reset = params . get ( queryParams . RESET_KEY_NAME )
25+ return { stage, writeKey, reset }
26+ }
27+
28+ const clearStorage = ( ) => {
29+ window [ STORAGE_TYPE ] . removeItem ( queryParams . STAGE_KEY_NAME )
30+ window [ STORAGE_TYPE ] . removeItem ( queryParams . WRITE_KEY_NAME )
31+ }
32+ const setStorage = ( ) => {
33+ const { stage, writeKey, reset } = getQueryParams ( )
34+
35+ if ( stage !== null ) {
36+ window [ STORAGE_TYPE ] . setItem ( queryParams . STAGE_KEY_NAME , stage )
37+ }
38+ if ( writeKey !== null ) {
39+ window [ STORAGE_TYPE ] . setItem ( queryParams . WRITE_KEY_NAME , writeKey )
40+ }
41+ if ( reset !== null ) {
42+ clearStorage ( )
43+ }
44+ }
45+
46+ setStorage ( )
47+ return {
48+ getStorage : ( ) => {
49+ return {
50+ stage : window [ STORAGE_TYPE ] . getItem ( queryParams . STAGE_KEY_NAME ) ,
51+ writeKey : window [ STORAGE_TYPE ] . getItem ( queryParams . WRITE_KEY_NAME ) ,
52+ }
53+ } ,
54+ }
55+ }
56+
57+ // Set localStorage from query string parameters
58+ const storage = Storage ( )
59+
60+ // Retrieve values from localStorage or fall back to environment variables
61+ const isStage =
62+ storage . getStorage ( ) . stage === 'true' || process . env . STAGE === 'true'
63+ const writeKey = storage . getStorage ( ) . writeKey || process . env . WRITEKEY
64+
65+ if ( ! writeKey ) {
966 throw new Error ( 'No writekey provided.' )
1067}
1168
69+ console . log ( 'Query params allowed:' , JSON . stringify ( Object . values ( queryParams ) ) )
70+
71+ export const analytics = new AnalyticsBrowser ( )
72+
1273const processSignalExample : ProcessSignal = (
1374 signal ,
1475 { analytics, signals }
@@ -29,8 +90,6 @@ const processSignalExample: ProcessSignal = (
2990 }
3091}
3192
32- const isStage = process . env . STAGE === 'true'
33-
3493const signalsPlugin = new SignalsPlugin ( {
3594 ...( isStage ? { apiHost : 'signals.segment.build/v1' } : { } ) ,
3695 // enableDebugLogging: true,
@@ -41,7 +100,7 @@ export const loadAnalytics = () =>
41100 analytics
42101 . load (
43102 {
44- writeKey : process . env . WRITEKEY ! ,
103+ writeKey : writeKey ,
45104 plugins : [ signalsPlugin ] ,
46105 ...( isStage ? { cdnURL : 'https://cdn.segment.build' } : { } ) ,
47106 } ,
@@ -58,7 +117,7 @@ export const loadAnalytics = () =>
58117 }
59118 )
60119 . then ( ( ) => {
61- console . log ( `Analytics loaded with WRITEKEY=${ process . env . WRITEKEY } ` )
120+ console . log ( `Analytics loaded with WRITEKEY=${ writeKey } ` )
62121 // @ts -ignore
63122 window . analytics = analytics // for debugging
64123 } )
0 commit comments