@metrone-io/sdk 1.0.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.
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ # @metrone-io/sdk
2
+
3
+ Privacy-first analytics SDK for the AI era. Track page views, custom events, and AI interactions without cookies, IP storage, or consent banners.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @metrone-io/sdk
9
+ ```
10
+
11
+ ## Quick start
12
+
13
+ ```js
14
+ import { Metrone } from '@metrone-io/sdk'
15
+
16
+ const metrone = new Metrone({
17
+ apiKey: 'metrone_live_YOUR_API_KEY',
18
+ endpoint: 'https://analytics.yoursite.com/v1/events',
19
+ })
20
+
21
+ // Page views are tracked automatically.
22
+ // Track custom events:
23
+ metrone.track('signup', { plan: 'growth' })
24
+
25
+ // Track conversions:
26
+ metrone.conversion('purchase', 99.00, { currency: 'USD' })
27
+ ```
28
+
29
+ ## AI tracking
30
+
31
+ ```js
32
+ // Voice agent call
33
+ metrone.trackAICall({
34
+ call_id: 'call_abc123',
35
+ provider: 'twilio',
36
+ duration: 142,
37
+ intent: 'book_appointment',
38
+ })
39
+
40
+ // Chat session
41
+ metrone.trackAIChat({
42
+ session_id: 'chat_xyz',
43
+ provider: 'openai',
44
+ intent: 'pricing_question',
45
+ resolved: true,
46
+ duration: 45,
47
+ })
48
+ ```
49
+
50
+ ## Configuration
51
+
52
+ ```js
53
+ const metrone = new Metrone({
54
+ apiKey: 'metrone_live_...', // Required
55
+ endpoint: '/v1/events', // Your analytics endpoint
56
+ autoTrack: true, // Auto-track page views (default: true)
57
+ batchSize: 10, // Batch events before sending (default: 10)
58
+ flushInterval: 5000, // Flush interval in ms (default: 5000)
59
+ respectDoNotTrack: true, // Honor DNT header (default: true)
60
+ debug: false, // Log events to console (default: false)
61
+ })
62
+ ```
63
+
64
+ ## API
65
+
66
+ | Method | Description |
67
+ |--------|-------------|
68
+ | `metrone.pageview(url?, title?)` | Track a page view |
69
+ | `metrone.track(name, data?)` | Track a custom event |
70
+ | `metrone.conversion(type, value?, data?)` | Track a conversion |
71
+ | `metrone.trackAICall(data)` | Track an AI voice call |
72
+ | `metrone.trackAIChat(data)` | Track an AI chat session |
73
+ | `metrone.trackAIIntent(data)` | Track AI intent detection |
74
+ | `metrone.trackAISession(data)` | Track AI session lifecycle |
75
+ | `metrone.flush()` | Send all queued events immediately |
76
+ | `metrone.destroy()` | Clean up and stop tracking |
77
+
78
+ ## Privacy
79
+
80
+ - Zero cookies
81
+ - No IP addresses stored (daily-salted hash at the edge)
82
+ - No browser fingerprinting
83
+ - No consent banner required
84
+ - GDPR, CCPA, and PECR compliant by design
85
+
86
+ ## Links
87
+
88
+ - [Documentation](https://metrone.io/docs)
89
+ - [Website](https://metrone.io)
90
+
91
+ ## License
92
+
93
+ MIT
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Metrone SDK - Core
3
+ * Privacy-first, first-party web analytics with multi-tenant support
4
+ */
5
+ export interface AnalyticsConfig {
6
+ apiKey: string;
7
+ projectId?: string;
8
+ endpoint?: string;
9
+ debug?: boolean;
10
+ autoTrack?: boolean;
11
+ autoUpdate?: boolean;
12
+ batchSize?: number;
13
+ flushInterval?: number;
14
+ offlineQueue?: boolean;
15
+ maxQueueSize?: number;
16
+ respectDoNotTrack?: boolean;
17
+ anonymizeIP?: boolean;
18
+ cookieConsent?: 'required' | 'optional' | 'none';
19
+ }
20
+ export interface EventData {
21
+ [key: string]: any;
22
+ }
23
+ export interface CampaignData {
24
+ campaign_source?: string;
25
+ campaign_medium?: string;
26
+ campaign_name?: string;
27
+ campaign_content?: string;
28
+ utm_source?: string;
29
+ utm_medium?: string;
30
+ utm_campaign?: string;
31
+ utm_content?: string;
32
+ utm_term?: string;
33
+ }
34
+ export interface UpdateInfo {
35
+ available: boolean;
36
+ current: string;
37
+ latest: string;
38
+ features: string[];
39
+ changelog: string[];
40
+ }
41
+ export declare class Metrone {
42
+ private config;
43
+ private sessionId;
44
+ private isInitialized;
45
+ private eventQueue;
46
+ private isOnline;
47
+ private version;
48
+ private updateCheckInterval;
49
+ constructor(config: AnalyticsConfig);
50
+ /**
51
+ * Track a page view
52
+ */
53
+ pageview(url?: string, title?: string, metadata?: EventData): void;
54
+ /**
55
+ * Track a custom event
56
+ */
57
+ track(eventName: string, data?: EventData): void;
58
+ /**
59
+ * Track a conversion event
60
+ */
61
+ conversion(conversionType: string, value?: number, data?: EventData): void;
62
+ /**
63
+ * Track user interaction (clicks, form submissions, etc.)
64
+ */
65
+ interaction(action: string, element?: string, data?: EventData): void;
66
+ /**
67
+ * Track campaign events
68
+ */
69
+ campaign(campaignData: CampaignData): void;
70
+ /**
71
+ * Track campaign with specific event
72
+ */
73
+ trackCampaign(eventName: string, campaignData: CampaignData, eventData?: EventData): void;
74
+ /**
75
+ * Track product view
76
+ */
77
+ productView(productId: string, productName: string, price?: number, metadata?: EventData): void;
78
+ /**
79
+ * Track WhatsApp click
80
+ */
81
+ whatsAppClick(productId?: string, productName?: string): void;
82
+ /**
83
+ * Track AI voice call
84
+ */
85
+ trackAICall(data: {
86
+ call_id: string;
87
+ provider?: string;
88
+ duration?: number;
89
+ intent?: string;
90
+ transcript_snippet?: string;
91
+ outcome?: string;
92
+ metadata?: EventData;
93
+ }): void;
94
+ /**
95
+ * Track AI chat interaction
96
+ */
97
+ trackAIChat(data: {
98
+ session_id: string;
99
+ provider?: string;
100
+ message_count?: number;
101
+ intent?: string;
102
+ resolved?: boolean;
103
+ duration?: number;
104
+ metadata?: EventData;
105
+ }): void;
106
+ /**
107
+ * Track AI intent detection
108
+ */
109
+ trackAIIntent(data: {
110
+ intent: string;
111
+ confidence?: number;
112
+ source?: 'voice' | 'chat' | 'assistant';
113
+ metadata?: EventData;
114
+ }): void;
115
+ /**
116
+ * Track AI session lifecycle
117
+ */
118
+ trackAISession(data: {
119
+ session_id: string;
120
+ provider?: string;
121
+ action: 'start' | 'end' | 'timeout';
122
+ duration?: number;
123
+ metadata?: EventData;
124
+ }): void;
125
+ /**
126
+ * Send event to analytics API
127
+ */
128
+ private sendEvent;
129
+ /**
130
+ * Send request to analytics API
131
+ */
132
+ private sendRequest;
133
+ /**
134
+ * Flush batch of events
135
+ */
136
+ private flushBatch;
137
+ private sendBatchRequest;
138
+ /**
139
+ * Queue event for offline processing
140
+ */
141
+ private queueEvent;
142
+ /**
143
+ * Process offline queue when back online
144
+ */
145
+ private processQueue;
146
+ /**
147
+ * Set up online/offline detection
148
+ */
149
+ private setupOnlineDetection;
150
+ /**
151
+ * Set up batch processing
152
+ */
153
+ private setupBatchProcessing;
154
+ /**
155
+ * Set up auto-updates
156
+ */
157
+ private setupAutoUpdates;
158
+ /**
159
+ * Check for SDK updates
160
+ */
161
+ checkForUpdates(): Promise<UpdateInfo>;
162
+ /**
163
+ * Handle SDK update
164
+ */
165
+ private handleUpdate;
166
+ /**
167
+ * Load new SDK version
168
+ */
169
+ private loadNewVersion;
170
+ /**
171
+ * Notify about available update
172
+ */
173
+ private notifyUpdate;
174
+ /**
175
+ * Generate session ID
176
+ */
177
+ private generateSessionId;
178
+ /**
179
+ * Check if Do Not Track is enabled
180
+ */
181
+ private isDoNotTrackEnabled;
182
+ /**
183
+ * Check if user has given consent
184
+ */
185
+ hasConsent(): boolean;
186
+ /**
187
+ * Request user consent
188
+ */
189
+ requestConsent(): Promise<boolean>;
190
+ /**
191
+ * Revoke user consent
192
+ */
193
+ revokeConsent(): void;
194
+ /**
195
+ * Anonymize data
196
+ */
197
+ anonymize(data: string): string;
198
+ /**
199
+ * Simple hash function
200
+ */
201
+ private simpleHash;
202
+ /**
203
+ * Check if running on mobile device
204
+ */
205
+ isMobile(): boolean;
206
+ /**
207
+ * Get screen size
208
+ */
209
+ getScreenSize(): string;
210
+ /**
211
+ * Flush pending events
212
+ */
213
+ flush(): void;
214
+ /**
215
+ * Destroy SDK instance
216
+ */
217
+ destroy(): void;
218
+ /**
219
+ * Get current version
220
+ */
221
+ getVersion(): string;
222
+ /**
223
+ * Get session ID
224
+ */
225
+ getSessionId(): string;
226
+ /**
227
+ * Get configuration
228
+ */
229
+ getConfig(): AnalyticsConfig;
230
+ }
231
+ export declare function initAnalytics(config: AnalyticsConfig): Metrone;
232
+ export declare function getAnalytics(): Metrone | null;
233
+ //# sourceMappingURL=Metrone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Metrone.d.ts","sourceRoot":"","sources":["../../src/core/Metrone.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Metrone SDK - Main Entry Point
3
+ * Privacy-first, first-party web analytics with edge-side includes
4
+ */
5
+ export { Metrone, initAnalytics, getAnalytics } from './core/Metrone';
6
+ export { Metrone as default } from './core/Metrone';
7
+ export type { AnalyticsConfig, EventData, CampaignData, UpdateInfo, } from './types';
8
+ export declare const VERSION = "1.0.0";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAEnD,YAAY,EACV,eAAe,EACf,SAAS,EACT,YAAY,EACZ,UAAU,GACX,MAAM,SAAS,CAAA;AAEhB,eAAO,MAAM,OAAO,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ class e{constructor(e){if(this.isInitialized=!1,this.eventQueue=[],this.isOnline=!0,this.version="1.0.0",this.updateCheckInterval=null,this.config={endpoint:"/v1/events",debug:!1,autoTrack:!0,autoUpdate:!1,batchSize:10,flushInterval:5e3,offlineQueue:!0,maxQueueSize:100,respectDoNotTrack:!0,anonymizeIP:!0,cookieConsent:"optional",...e},!this.config.apiKey)throw new Error("API key is required");if(!this.config.apiKey.startsWith("metrone_live_")&&!this.config.apiKey.startsWith("metrone_test_"))throw new Error('Invalid API key format. Must start with "metrone_live_" or "metrone_test_"');this.sessionId=this.generateSessionId(),this.isInitialized=!0,this.config.respectDoNotTrack&&this.isDoNotTrackEnabled()?this.config.debug&&console.log("🔒 Do Not Track is enabled, analytics disabled"):"required"!==this.config.cookieConsent||this.hasConsent()?(this.setupOnlineDetection(),this.config.autoTrack&&this.pageview(),this.config.batchSize&&this.config.batchSize>1&&this.setupBatchProcessing(),this.config.debug&&console.log("Metrone SDK initialized:",{apiKey:this.config.apiKey.substring(0,12)+"...",projectId:this.config.projectId,sessionId:this.sessionId,endpoint:this.config.endpoint,version:this.version})):this.config.debug&&console.log("🍪 Cookie consent required, analytics disabled")}pageview(e,t,i){this.isInitialized&&this.track("pageview",{page_url:e||window.location.pathname+window.location.search,page_path:window.location.pathname,page_title:t||document.title,referrer:document.referrer,source:"web",...i})}track(e,t){if(!this.isInitialized)return void console.warn("Analytics SDK not initialized");const{source:i,channel:n,ai_provider:s,ai_call_id:o,ai_session_id:a,ai_intent:r,ai_duration_sec:c,utm_source:h,utm_medium:d,utm_campaign:u,utm_term:l,utm_content:g,page_path:p,page_title:f,page_url:v,referrer:_,event_name:w,...m}=t??{},k={event_type:e,event_name:w,page_url:v||window.location.pathname+window.location.search,page_path:p||window.location.pathname,page_title:f||("undefined"!=typeof document?document.title:void 0),referrer:_||("undefined"!=typeof document?document.referrer:void 0),session_id:this.sessionId,sdk_version:this.version,timestamp:(new Date).toISOString(),source:i,channel:n,ai_provider:s,ai_call_id:o,ai_session_id:a,ai_intent:r,ai_duration_sec:c,utm_source:h,utm_medium:d,utm_campaign:u,utm_term:l,utm_content:g,properties:Object.keys(m).length>0?m:void 0};this.sendEvent(k)}conversion(e,t,i){this.track("conversion",{conversion_type:e,value:t,currency:"EUR",...i})}interaction(e,t,i){this.track("interaction",{action:e,element:t,...i})}campaign(e){this.track("campaign",e)}trackCampaign(e,t,i){this.track(e,{...t,...i})}productView(e,t,i,n){this.track("product_view",{product_id:e,product_name:t,price:i,category:"product",...n})}whatsAppClick(e,t){this.conversion("whatsapp_click",void 0,{product_id:e,product_name:t,contact_method:"whatsapp"})}trackAICall(e){this.track("ai_call",{source:"voice",channel:"phone",ai_provider:e.provider||"unknown",ai_call_id:e.call_id,ai_intent:e.intent,ai_duration_sec:e.duration,transcript_snippet:e.transcript_snippet,outcome:e.outcome,...e.metadata})}trackAIChat(e){this.track("ai_chat",{source:"chat",channel:"website",ai_provider:e.provider||"unknown",ai_session_id:e.session_id,ai_intent:e.intent,ai_duration_sec:e.duration,message_count:e.message_count,resolved:e.resolved,...e.metadata})}trackAIIntent(e){this.track("ai_intent",{source:e.source||"assistant",ai_intent:e.intent,confidence:e.confidence,...e.metadata})}trackAISession(e){this.track(`ai_session_${e.action}`,{source:"assistant",ai_provider:e.provider||"unknown",ai_session_id:e.session_id,ai_duration_sec:e.duration,...e.metadata})}async sendEvent(e){try{const t={...e,api_key:this.config.apiKey};this.config.batchSize&&this.config.batchSize>1?(this.eventQueue.push(t),this.eventQueue.length>=this.config.batchSize&&await this.flushBatch()):await this.sendRequest(t)}catch(t){this.config.debug&&console.error("Failed to send analytics event:",t),this.config.offlineQueue&&!this.isOnline&&this.queueEvent(e)}}async sendRequest(e){const t=await fetch(this.config.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Analytics API error: ${t.status} ${t.statusText}`);this.config.debug&&console.log("Analytics event sent:",e.event_type)}async flushBatch(){if(0===this.eventQueue.length)return;const e=[...this.eventQueue];this.eventQueue=[];try{const t=this.config.endpoint.replace(/\/events\/?$/,"/events/batch");await this.sendBatchRequest(t,e),this.config.debug&&console.log(`Batch sent: ${e.length} events`)}catch(t){this.config.debug&&console.error("Failed to send batch:",t),this.config.offlineQueue&&!this.isOnline&&this.eventQueue.unshift(...e)}}async sendBatchRequest(e,t){const i=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!i.ok)throw new Error(`Analytics API error: ${i.status} ${i.statusText}`)}queueEvent(e){this.eventQueue.length>=(this.config.maxQueueSize||100)&&this.eventQueue.shift(),this.eventQueue.push(e)}async processQueue(){if(0===this.eventQueue.length)return;const e=[...this.eventQueue];this.eventQueue=[];for(const t of e)try{await this.sendRequest(t)}catch(e){this.config.debug&&console.error("Failed to process queued event:",e),this.eventQueue.push(t)}this.config.debug&&console.log(`🔄 Processed ${e.length} queued events`)}setupOnlineDetection(){this.isOnline=navigator.onLine,window.addEventListener("online",()=>{this.isOnline=!0,this.config.debug&&console.log("🌐 Back online, processing queue"),this.processQueue()}),window.addEventListener("offline",()=>{this.isOnline=!1,this.config.debug&&console.log("📴 Gone offline, queuing events")})}setupBatchProcessing(){this.config.flushInterval&&this.config.flushInterval>0&&setInterval(()=>{this.flushBatch()},this.config.flushInterval)}setupAutoUpdates(){this.updateCheckInterval=window.setInterval(()=>{this.checkForUpdates()},36e5),this.checkForUpdates()}async checkForUpdates(){try{const e=await fetch("/api/analytics/version"),t=await e.json();return t.latest!==this.version&&this.handleUpdate(t),t}catch(e){return this.config.debug&&console.log("Update check failed:",e),{available:!1,current:this.version,latest:this.version,features:[],changelog:[]}}}handleUpdate(e){!1!==this.config.autoUpdate?this.loadNewVersion(e.latest):this.notifyUpdate(e)}loadNewVersion(e){this.config.debug&&console.log(`🔄 Updating SDK to version ${e}`);const t=document.createElement("script");t.src="/js/metrone.js",t.onload=()=>{this.config.debug&&console.log(`✅ SDK updated to version ${e}`)},document.head.appendChild(t)}notifyUpdate(e){this.config.debug&&(console.log(`📢 SDK update available: ${e.latest}`),console.log("New features:",e.features)),window.dispatchEvent(new CustomEvent("metrone-update",{detail:e}))}generateSessionId(){return`sess_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,15)}`}isDoNotTrackEnabled(){return"1"===navigator.doNotTrack||"yes"===navigator.doNotTrack||"1"===window.doNotTrack}hasConsent(){const e=localStorage.getItem("cookie-consent")||localStorage.getItem("gdpr-consent")||localStorage.getItem("cc-consent");return"accepted"===e||"true"===e}async requestConsent(){return new Promise(e=>{window.dispatchEvent(new CustomEvent("metrone-consent-request",{detail:{resolve:e}}))})}revokeConsent(){localStorage.removeItem("cookie-consent"),localStorage.removeItem("gdpr-consent"),localStorage.removeItem("cc-consent"),this.config.debug&&console.log("🔒 Consent revoked, analytics disabled")}anonymize(e){return`anon_${this.simpleHash(e)}`}simpleHash(e){let t=0;for(let i=0;i<e.length;i++){t=(t<<5)-t+e.charCodeAt(i),t&=t}return Math.abs(t).toString(36)}isMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}getScreenSize(){const e=window.screen.width;return e<768?"mobile":e<1024?"tablet":"desktop"}flush(){this.flushBatch()}destroy(){this.updateCheckInterval&&clearInterval(this.updateCheckInterval),this.flush(),this.isInitialized=!1,this.config.debug&&console.log("🗑️ Metrone SDK destroyed")}getVersion(){return this.version}getSessionId(){return this.sessionId}getConfig(){return{...this.config}}}function t(t){return new e(t)}let i=null;function n(){return i}if("undefined"!=typeof window){const t=window.MetroneConfig;t&&(i=new e(t))}"undefined"!=typeof window&&(window.Metrone=e(window).initAnalytics=t(window).getAnalytics=n);const s="1.0.0";export{e as Metrone,s as VERSION,e as default,n as getAnalytics,t as initAnalytics};
2
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../src/core/Metrone.ts","../src/index.ts"],"sourcesContent":[null,null],"names":["Metrone","constructor","config","this","isInitialized","eventQueue","isOnline","version","updateCheckInterval","endpoint","debug","autoTrack","autoUpdate","batchSize","flushInterval","offlineQueue","maxQueueSize","respectDoNotTrack","anonymizeIP","cookieConsent","apiKey","Error","startsWith","sessionId","generateSessionId","isDoNotTrackEnabled","console","log","hasConsent","setupOnlineDetection","pageview","setupBatchProcessing","substring","projectId","url","title","metadata","track","page_url","window","location","pathname","search","page_path","page_title","document","referrer","source","eventName","data","warn","channel","ai_provider","ai_call_id","ai_session_id","ai_intent","ai_duration_sec","utm_source","utm_medium","utm_campaign","utm_term","utm_content","dataPageUrl","dataReferrer","event_name","rest","eventData","event_type","undefined","session_id","sdk_version","timestamp","Date","toISOString","properties","Object","keys","length","sendEvent","conversion","conversionType","value","conversion_type","currency","interaction","action","element","campaign","campaignData","trackCampaign","productView","productId","productName","price","product_id","product_name","category","whatsAppClick","contact_method","trackAICall","provider","call_id","intent","duration","transcript_snippet","outcome","trackAIChat","message_count","resolved","trackAIIntent","confidence","trackAISession","requestData","api_key","push","flushBatch","sendRequest","error","queueEvent","response","fetch","method","headers","body","JSON","stringify","ok","status","statusText","batch","batchEndpoint","replace","sendBatchRequest","unshift","events","shift","processQueue","queue","event","navigator","onLine","addEventListener","setInterval","setupAutoUpdates","checkForUpdates","updateInfo","json","latest","handleUpdate","available","current","features","changelog","loadNewVersion","notifyUpdate","script","createElement","src","onload","head","appendChild","dispatchEvent","CustomEvent","detail","now","toString","Math","random","doNotTrack","consent","localStorage","getItem","requestConsent","Promise","resolve","revokeConsent","removeItem","anonymize","simpleHash","str","hash","i","charCodeAt","abs","isMobile","test","userAgent","getScreenSize","width","screen","flush","destroy","clearInterval","getVersion","getSessionId","getConfig","initAnalytics","globalAnalytics","getAnalytics","MetroneConfig","VERSION"],"mappings":"MA6CaA,EASX,WAAAC,CAAYC,GAiBV,GAvBMC,KAAAC,eAAyB,EACzBD,KAAAE,WAAoB,GACpBF,KAAAG,UAAoB,EACpBH,KAAAI,QAAkB,QAClBJ,KAAAK,oBAAqC,KAG3CL,KAAKD,OAAS,CACZO,SAAU,aACVC,OAAO,EACPC,WAAW,EACXC,YAAY,EACZC,UAAW,GACXC,cAAe,IACfC,cAAc,EACdC,aAAc,IACdC,mBAAmB,EACnBC,aAAa,EACbC,cAAe,cACZjB,IAIAC,KAAKD,OAAOkB,OACf,MAAM,IAAIC,MAAM,uBAGlB,IAAKlB,KAAKD,OAAOkB,OAAOE,WAAW,mBAAqBnB,KAAKD,OAAOkB,OAAOE,WAAW,iBACpF,MAAM,IAAID,MAAM,8EAGlBlB,KAAKoB,UAAYpB,KAAKqB,oBACtBrB,KAAKC,eAAgB,EAGjBD,KAAKD,OAAOe,mBAAqBd,KAAKsB,sBACpCtB,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,kDAMkB,aAA9BxB,KAAKD,OAAOiB,eAAiChB,KAAKyB,cAQtDzB,KAAK0B,uBAED1B,KAAKD,OAAOS,WACdR,KAAK2B,WAIH3B,KAAKD,OAAOW,WAAaV,KAAKD,OAAOW,UAAY,GACnDV,KAAK4B,uBAGH5B,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,2BAA4B,CACtCP,OAAQjB,KAAKD,OAAOkB,OAAOY,UAAU,EAAG,IAAM,MAC9CC,UAAW9B,KAAKD,OAAO+B,UACvBV,UAAWpB,KAAKoB,UAChBd,SAAUN,KAAKD,OAAOO,SACtBF,QAASJ,KAAKI,WAxBZJ,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,iDA0BlB,CAKA,QAAAG,CAASI,EAAcC,EAAgBC,GAChCjC,KAAKC,eAEVD,KAAKkC,MAAM,WAAY,CACrBC,SAAYJ,GAAQK,OAAOC,SAASC,SAAWF,OAAOC,SAASE,OAC/DC,UAAYJ,OAAOC,SAASC,SAC5BG,WAAYT,GAASU,SAASV,MAC9BW,SAAYD,SAASC,SACrBC,OAAY,SACTX,GAEP,CAKA,KAAAC,CAAMW,EAAmBC,GACvB,IAAK9C,KAAKC,cAER,YADAsB,QAAQwB,KAAK,iCAIf,MAAMH,OAAEA,EAAMI,QAAEA,EAAOC,YAAEA,EAAWC,WAAEA,EAAUC,cAAEA,EAAaC,UACvDA,EAASC,gBAAEA,EAAeC,WAAEA,EAAUC,WAAEA,EAAUC,aAAEA,EAAYC,SAChEA,EAAQC,YAAEA,EAAWlB,UAAEA,EAASC,WAAEA,EAAYN,SAAUwB,EACxDhB,SAAUiB,EAAYC,WAAEA,KAAeC,GAAUhB,GAAQ,CAAA,EAE3DiB,EAAY,CAChBC,WAAiBnB,EACjBgB,WAAiBA,EACjB1B,SAAkBwB,GAA2BvB,OAAOC,SAASC,SAAWF,OAAOC,SAASE,OACxFC,UAAkBA,GAAwBJ,OAAOC,SAASC,SAC1DG,WAAkBA,IAA8C,oBAAbC,SAA2BA,SAASV,WAAQiC,GAC/FtB,SAAkBiB,IAAgD,oBAAblB,SAA2BA,SAASC,cAAWsB,GACpGC,WAAiBlE,KAAKoB,UACtB+C,YAAiBnE,KAAKI,QACtBgE,WAAiB,IAAIC,MAAOC,cAC5B1B,OAAiBA,EACjBI,QAAiBA,EACjBC,YAAiBA,EACjBC,WAAiBA,EACjBC,cAAiBA,EACjBC,UAAiBA,EACjBC,gBAAiBA,EACjBC,WAAiBA,EACjBC,WAAiBA,EACjBC,aAAiBA,EACjBC,SAAiBA,EACjBC,YAAiBA,EACjBa,WAAiBC,OAAOC,KAAKX,GAAMY,OAAS,EAAIZ,OAAOG,GAGzDjE,KAAK2E,UAAUZ,EACjB,CAKA,UAAAa,CAAWC,EAAwBC,EAAgBhC,GACjD9C,KAAKkC,MAAM,aAAc,CACvB6C,gBAAiBF,EACjBC,MAAOA,EACPE,SAAU,SACPlC,GAEP,CAKA,WAAAmC,CAAYC,EAAgBC,EAAkBrC,GAC5C9C,KAAKkC,MAAM,cAAe,CACxBgD,SACAC,aACGrC,GAEP,CAKA,QAAAsC,CAASC,GACPrF,KAAKkC,MAAM,WAAYmD,EACzB,CAKA,aAAAC,CAAczC,EAAmBwC,EAA4BtB,GAC3D/D,KAAKkC,MAAMW,EAAW,IACjBwC,KACAtB,GAEP,CAKA,WAAAwB,CAAYC,EAAmBC,EAAqBC,EAAgBzD,GAClEjC,KAAKkC,MAAM,eAAgB,CACzByD,WAAYH,EACZI,aAAcH,EACdC,MAAOA,EACPG,SAAU,aACP5D,GAEP,CAKA,aAAA6D,CAAcN,EAAoBC,GAChCzF,KAAK4E,WAAW,sBAAkBX,EAAW,CAC3C0B,WAAYH,EACZI,aAAcH,EACdM,eAAgB,YAEpB,CAKA,WAAAC,CAAYlD,GASV9C,KAAKkC,MAAM,UAAW,CACpBU,OAAQ,QACRI,QAAS,QACTC,YAAaH,EAAKmD,UAAY,UAC9B/C,WAAYJ,EAAKoD,QACjB9C,UAAWN,EAAKqD,OAChB9C,gBAAiBP,EAAKsD,SACtBC,mBAAoBvD,EAAKuD,mBACzBC,QAASxD,EAAKwD,WACXxD,EAAKb,UAEZ,CAKA,WAAAsE,CAAYzD,GASV9C,KAAKkC,MAAM,UAAW,CACpBU,OAAQ,OACRI,QAAS,UACTC,YAAaH,EAAKmD,UAAY,UAC9B9C,cAAeL,EAAKoB,WACpBd,UAAWN,EAAKqD,OAChB9C,gBAAiBP,EAAKsD,SACtBI,cAAe1D,EAAK0D,cACpBC,SAAU3D,EAAK2D,YACZ3D,EAAKb,UAEZ,CAKA,aAAAyE,CAAc5D,GAMZ9C,KAAKkC,MAAM,YAAa,CACtBU,OAAQE,EAAKF,QAAU,YACvBQ,UAAWN,EAAKqD,OAChBQ,WAAY7D,EAAK6D,cACd7D,EAAKb,UAEZ,CAKA,cAAA2E,CAAe9D,GAOb9C,KAAKkC,MAAM,cAAcY,EAAKoC,SAAU,CACtCtC,OAAQ,YACRK,YAAaH,EAAKmD,UAAY,UAC9B9C,cAAeL,EAAKoB,WACpBb,gBAAiBP,EAAKsD,YACnBtD,EAAKb,UAEZ,CAKQ,eAAM0C,CAAUZ,GACtB,IAEE,MAAM8C,EAAc,IACf9C,EACH+C,QAAS9G,KAAKD,OAAOkB,QAGnBjB,KAAKD,OAAOW,WAAaV,KAAKD,OAAOW,UAAY,GAEnDV,KAAKE,WAAW6G,KAAKF,GAEjB7G,KAAKE,WAAWwE,QAAU1E,KAAKD,OAAOW,iBAClCV,KAAKgH,oBAIPhH,KAAKiH,YAAYJ,EAE3B,CAAE,MAAOK,GACHlH,KAAKD,OAAOQ,OACdgB,QAAQ2F,MAAM,kCAAmCA,GAI/ClH,KAAKD,OAAOa,eAAiBZ,KAAKG,UACpCH,KAAKmH,WAAWpD,EAEpB,CACF,CAKQ,iBAAMkD,CAAYnE,GACxB,MAAMsE,QAAiBC,MAAMrH,KAAKD,OAAOO,SAAW,CAClDgH,OAAQ,OACRC,QAAS,CACP,eAAgB,oBAElBC,KAAMC,KAAKC,UAAU5E,KAGvB,IAAKsE,EAASO,GACZ,MAAM,IAAIzG,MAAM,wBAAwBkG,EAASQ,UAAUR,EAASS,cAGlE7H,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,wBAAyBsB,EAAKkB,WAE9C,CAKQ,gBAAMgD,GACZ,GAA+B,IAA3BhH,KAAKE,WAAWwE,OAAc,OAElC,MAAMoD,EAAQ,IAAI9H,KAAKE,YACvBF,KAAKE,WAAa,GAElB,IACE,MAAM6H,EAAgB/H,KAAKD,OAAOO,SAAU0H,QAAQ,eAAgB,uBAC9DhI,KAAKiI,iBAAiBF,EAAeD,GAEvC9H,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,eAAesG,EAAMpD,gBAErC,CAAE,MAAOwC,GACHlH,KAAKD,OAAOQ,OACdgB,QAAQ2F,MAAM,wBAAyBA,GAGrClH,KAAKD,OAAOa,eAAiBZ,KAAKG,UACpCH,KAAKE,WAAWgI,WAAWJ,EAE/B,CACF,CAEQ,sBAAMG,CAAiB3H,EAAkB6H,GAC/C,MAAMf,QAAiBC,MAAM/G,EAAU,CACrCgH,OAAQ,OACRC,QAAS,CACP,eAAgB,oBAElBC,KAAMC,KAAKC,UAAUS,KAGvB,IAAKf,EAASO,GACZ,MAAM,IAAIzG,MAAM,wBAAwBkG,EAASQ,UAAUR,EAASS,aAExE,CAKQ,UAAAV,CAAWpD,GACb/D,KAAKE,WAAWwE,SAAW1E,KAAKD,OAAOc,cAAgB,MACzDb,KAAKE,WAAWkI,QAGlBpI,KAAKE,WAAW6G,KAAKhD,EACvB,CAKQ,kBAAMsE,GACZ,GAA+B,IAA3BrI,KAAKE,WAAWwE,OAAc,OAElC,MAAM4D,EAAQ,IAAItI,KAAKE,YACvBF,KAAKE,WAAa,GAElB,IAAK,MAAMqI,KAASD,EAClB,UACQtI,KAAKiH,YAAYsB,EACzB,CAAE,MAAOrB,GACHlH,KAAKD,OAAOQ,OACdgB,QAAQ2F,MAAM,kCAAmCA,GAGnDlH,KAAKE,WAAW6G,KAAKwB,EACvB,CAGEvI,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,gBAAgB8G,EAAM5D,uBAEtC,CAKQ,oBAAAhD,GACN1B,KAAKG,SAAWqI,UAAUC,OAE1BrG,OAAOsG,iBAAiB,SAAU,KAChC1I,KAAKG,UAAW,EACZH,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,oCAEdxB,KAAKqI,iBAGPjG,OAAOsG,iBAAiB,UAAW,KACjC1I,KAAKG,UAAW,EACZH,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,oCAGlB,CAKQ,oBAAAI,GACF5B,KAAKD,OAAOY,eAAiBX,KAAKD,OAAOY,cAAgB,GAC3DgI,YAAY,KACV3I,KAAKgH,cACJhH,KAAKD,OAAOY,cAEnB,CAKQ,gBAAAiI,GAEN5I,KAAKK,oBAAsB+B,OAAOuG,YAAY,KAC5C3I,KAAK6I,mBACJ,MAGH7I,KAAK6I,iBACP,CAKA,qBAAMA,GACJ,IACE,MAAMzB,QAAiBC,MAAM,0BACvByB,QAAmB1B,EAAS2B,OAMlC,OAJID,EAAWE,SAAWhJ,KAAKI,SAC7BJ,KAAKiJ,aAAaH,GAGbA,CACT,CAAE,MAAO5B,GAIP,OAHIlH,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,uBAAwB0F,GAE/B,CACLgC,WAAW,EACXC,QAASnJ,KAAKI,QACd4I,OAAQhJ,KAAKI,QACbgJ,SAAU,GACVC,UAAW,GAEf,CACF,CAKQ,YAAAJ,CAAaH,IACY,IAA3B9I,KAAKD,OAAOU,WACdT,KAAKsJ,eAAeR,EAAWE,QAE/BhJ,KAAKuJ,aAAaT,EAEtB,CAKQ,cAAAQ,CAAelJ,GACjBJ,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,8BAA8BpB,KAI5C,MAAMoJ,EAAS9G,SAAS+G,cAAc,UACtCD,EAAOE,IAAM,iBACbF,EAAOG,OAAS,KACV3J,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,4BAA4BpB,MAG5CsC,SAASkH,KAAKC,YAAYL,EAC5B,CAKQ,YAAAD,CAAaT,GACf9I,KAAKD,OAAOQ,QACdgB,QAAQC,IAAI,4BAA4BsH,EAAWE,UACnDzH,QAAQC,IAAI,gBAAiBsH,EAAWM,WAI1ChH,OAAO0H,cAAc,IAAIC,YAAY,iBAAkB,CACrDC,OAAQlB,IAEZ,CAKQ,iBAAAzH,GAGN,MAAO,QAFWgD,KAAK4F,MAAMC,SAAS,OACvBC,KAAKC,SAASF,SAAS,IAAIrI,UAAU,EAAG,KAEzD,CAKQ,mBAAAP,GACN,MAAgC,MAAzBkH,UAAU6B,YACe,QAAzB7B,UAAU6B,YACqB,MAA9BjI,OAAeiI,UACzB,CAKA,UAAA5I,GAEE,MAAM6I,EAAUC,aAAaC,QAAQ,mBACtBD,aAAaC,QAAQ,iBACrBD,aAAaC,QAAQ,cAEpC,MAAmB,aAAZF,GAAsC,SAAZA,CACnC,CAKA,oBAAMG,GACJ,OAAO,IAAIC,QAASC,IAElBvI,OAAO0H,cAAc,IAAIC,YAAY,0BAA2B,CAC9DC,OAAQ,CAAEW,eAGhB,CAKA,aAAAC,GACEL,aAAaM,WAAW,kBACxBN,aAAaM,WAAW,gBACxBN,aAAaM,WAAW,cAEpB7K,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,yCAEhB,CAKA,SAAAsJ,CAAUhI,GAER,MAAO,QADM9C,KAAK+K,WAAWjI,IAE/B,CAKQ,UAAAiI,CAAWC,GACjB,IAAIC,EAAO,EACX,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAItG,OAAQwG,IAAK,CAEnCD,GAASA,GAAQ,GAAKA,EADTD,EAAIG,WAAWD,GAE5BD,GAAcA,CAChB,CACA,OAAOd,KAAKiB,IAAIH,GAAMf,SAAS,GACjC,CAKA,QAAAmB,GACE,MAAO,iEAAiEC,KAAK9C,UAAU+C,UACzF,CAKA,aAAAC,GACE,MAAMC,EAAQrJ,OAAOsJ,OAAOD,MAG5B,OAAIA,EAAQ,IAAY,SACpBA,EAAQ,KAAa,SAClB,SACT,CAKA,KAAAE,GACE3L,KAAKgH,YACP,CAKA,OAAA4E,GACM5L,KAAKK,qBACPwL,cAAc7L,KAAKK,qBAGrBL,KAAK2L,QACL3L,KAAKC,eAAgB,EAEjBD,KAAKD,OAAOQ,OACdgB,QAAQC,IAAI,4BAEhB,CAKA,UAAAsK,GACE,OAAO9L,KAAKI,OACd,CAKA,YAAA2L,GACE,OAAO/L,KAAKoB,SACd,CAKA,SAAA4K,GACE,MAAO,IAAKhM,KAAKD,OACnB,EAII,SAAUkM,EAAclM,GAC5B,OAAO,IAAIF,EAAQE,EACrB,CAGA,IAAImM,EAAkC,cAEtBC,IACd,OAAOD,CACT,CAGA,GAAsB,oBAAX9J,OAAwB,CACjC,MAAMrC,EAAUqC,OAAegK,cAC3BrM,IACFmM,EAAkB,IAAIrM,EAAQE,GAElC,CAGsB,oBAAXqC,SACRA,OAAevC,QAAUA,EACzBuC,QAAe6J,cAAgBA,EAC/B7J,QAAe+J,aAAeA,GCztB1B,MAAME,EAAU"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});class e{constructor(e){if(this.isInitialized=!1,this.eventQueue=[],this.isOnline=!0,this.version="1.0.0",this.updateCheckInterval=null,this.config={endpoint:"/v1/events",debug:!1,autoTrack:!0,autoUpdate:!1,batchSize:10,flushInterval:5e3,offlineQueue:!0,maxQueueSize:100,respectDoNotTrack:!0,anonymizeIP:!0,cookieConsent:"optional",...e},!this.config.apiKey)throw new Error("API key is required");if(!this.config.apiKey.startsWith("metrone_live_")&&!this.config.apiKey.startsWith("metrone_test_"))throw new Error('Invalid API key format. Must start with "metrone_live_" or "metrone_test_"');this.sessionId=this.generateSessionId(),this.isInitialized=!0,this.config.respectDoNotTrack&&this.isDoNotTrackEnabled()?this.config.debug&&console.log("🔒 Do Not Track is enabled, analytics disabled"):"required"!==this.config.cookieConsent||this.hasConsent()?(this.setupOnlineDetection(),this.config.autoTrack&&this.pageview(),this.config.batchSize&&this.config.batchSize>1&&this.setupBatchProcessing(),this.config.debug&&console.log("Metrone SDK initialized:",{apiKey:this.config.apiKey.substring(0,12)+"...",projectId:this.config.projectId,sessionId:this.sessionId,endpoint:this.config.endpoint,version:this.version})):this.config.debug&&console.log("🍪 Cookie consent required, analytics disabled")}pageview(e,t,i){this.isInitialized&&this.track("pageview",{page_url:e||window.location.pathname+window.location.search,page_path:window.location.pathname,page_title:t||document.title,referrer:document.referrer,source:"web",...i})}track(e,t){if(!this.isInitialized)return void console.warn("Analytics SDK not initialized");const{source:i,channel:n,ai_provider:s,ai_call_id:o,ai_session_id:a,ai_intent:r,ai_duration_sec:c,utm_source:d,utm_medium:h,utm_campaign:u,utm_term:l,utm_content:g,page_path:p,page_title:f,page_url:v,referrer:_,event_name:w,...m}=t??{},y={event_type:e,event_name:w,page_url:v||window.location.pathname+window.location.search,page_path:p||window.location.pathname,page_title:f||("undefined"!=typeof document?document.title:void 0),referrer:_||("undefined"!=typeof document?document.referrer:void 0),session_id:this.sessionId,sdk_version:this.version,timestamp:(new Date).toISOString(),source:i,channel:n,ai_provider:s,ai_call_id:o,ai_session_id:a,ai_intent:r,ai_duration_sec:c,utm_source:d,utm_medium:h,utm_campaign:u,utm_term:l,utm_content:g,properties:Object.keys(m).length>0?m:void 0};this.sendEvent(y)}conversion(e,t,i){this.track("conversion",{conversion_type:e,value:t,currency:"EUR",...i})}interaction(e,t,i){this.track("interaction",{action:e,element:t,...i})}campaign(e){this.track("campaign",e)}trackCampaign(e,t,i){this.track(e,{...t,...i})}productView(e,t,i,n){this.track("product_view",{product_id:e,product_name:t,price:i,category:"product",...n})}whatsAppClick(e,t){this.conversion("whatsapp_click",void 0,{product_id:e,product_name:t,contact_method:"whatsapp"})}trackAICall(e){this.track("ai_call",{source:"voice",channel:"phone",ai_provider:e.provider||"unknown",ai_call_id:e.call_id,ai_intent:e.intent,ai_duration_sec:e.duration,transcript_snippet:e.transcript_snippet,outcome:e.outcome,...e.metadata})}trackAIChat(e){this.track("ai_chat",{source:"chat",channel:"website",ai_provider:e.provider||"unknown",ai_session_id:e.session_id,ai_intent:e.intent,ai_duration_sec:e.duration,message_count:e.message_count,resolved:e.resolved,...e.metadata})}trackAIIntent(e){this.track("ai_intent",{source:e.source||"assistant",ai_intent:e.intent,confidence:e.confidence,...e.metadata})}trackAISession(e){this.track(`ai_session_${e.action}`,{source:"assistant",ai_provider:e.provider||"unknown",ai_session_id:e.session_id,ai_duration_sec:e.duration,...e.metadata})}async sendEvent(e){try{const t={...e,api_key:this.config.apiKey};this.config.batchSize&&this.config.batchSize>1?(this.eventQueue.push(t),this.eventQueue.length>=this.config.batchSize&&await this.flushBatch()):await this.sendRequest(t)}catch(t){this.config.debug&&console.error("Failed to send analytics event:",t),this.config.offlineQueue&&!this.isOnline&&this.queueEvent(e)}}async sendRequest(e){const t=await fetch(this.config.endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!t.ok)throw new Error(`Analytics API error: ${t.status} ${t.statusText}`);this.config.debug&&console.log("Analytics event sent:",e.event_type)}async flushBatch(){if(0===this.eventQueue.length)return;const e=[...this.eventQueue];this.eventQueue=[];try{const t=this.config.endpoint.replace(/\/events\/?$/,"/events/batch");await this.sendBatchRequest(t,e),this.config.debug&&console.log(`Batch sent: ${e.length} events`)}catch(t){this.config.debug&&console.error("Failed to send batch:",t),this.config.offlineQueue&&!this.isOnline&&this.eventQueue.unshift(...e)}}async sendBatchRequest(e,t){const i=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!i.ok)throw new Error(`Analytics API error: ${i.status} ${i.statusText}`)}queueEvent(e){this.eventQueue.length>=(this.config.maxQueueSize||100)&&this.eventQueue.shift(),this.eventQueue.push(e)}async processQueue(){if(0===this.eventQueue.length)return;const e=[...this.eventQueue];this.eventQueue=[];for(const t of e)try{await this.sendRequest(t)}catch(e){this.config.debug&&console.error("Failed to process queued event:",e),this.eventQueue.push(t)}this.config.debug&&console.log(`🔄 Processed ${e.length} queued events`)}setupOnlineDetection(){this.isOnline=navigator.onLine,window.addEventListener("online",()=>{this.isOnline=!0,this.config.debug&&console.log("🌐 Back online, processing queue"),this.processQueue()}),window.addEventListener("offline",()=>{this.isOnline=!1,this.config.debug&&console.log("📴 Gone offline, queuing events")})}setupBatchProcessing(){this.config.flushInterval&&this.config.flushInterval>0&&setInterval(()=>{this.flushBatch()},this.config.flushInterval)}setupAutoUpdates(){this.updateCheckInterval=window.setInterval(()=>{this.checkForUpdates()},36e5),this.checkForUpdates()}async checkForUpdates(){try{const e=await fetch("/api/analytics/version"),t=await e.json();return t.latest!==this.version&&this.handleUpdate(t),t}catch(e){return this.config.debug&&console.log("Update check failed:",e),{available:!1,current:this.version,latest:this.version,features:[],changelog:[]}}}handleUpdate(e){!1!==this.config.autoUpdate?this.loadNewVersion(e.latest):this.notifyUpdate(e)}loadNewVersion(e){this.config.debug&&console.log(`🔄 Updating SDK to version ${e}`);const t=document.createElement("script");t.src="/js/metrone.js",t.onload=()=>{this.config.debug&&console.log(`✅ SDK updated to version ${e}`)},document.head.appendChild(t)}notifyUpdate(e){this.config.debug&&(console.log(`📢 SDK update available: ${e.latest}`),console.log("New features:",e.features)),window.dispatchEvent(new CustomEvent("metrone-update",{detail:e}))}generateSessionId(){return`sess_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,15)}`}isDoNotTrackEnabled(){return"1"===navigator.doNotTrack||"yes"===navigator.doNotTrack||"1"===window.doNotTrack}hasConsent(){const e=localStorage.getItem("cookie-consent")||localStorage.getItem("gdpr-consent")||localStorage.getItem("cc-consent");return"accepted"===e||"true"===e}async requestConsent(){return new Promise(e=>{window.dispatchEvent(new CustomEvent("metrone-consent-request",{detail:{resolve:e}}))})}revokeConsent(){localStorage.removeItem("cookie-consent"),localStorage.removeItem("gdpr-consent"),localStorage.removeItem("cc-consent"),this.config.debug&&console.log("🔒 Consent revoked, analytics disabled")}anonymize(e){return`anon_${this.simpleHash(e)}`}simpleHash(e){let t=0;for(let i=0;i<e.length;i++){t=(t<<5)-t+e.charCodeAt(i),t&=t}return Math.abs(t).toString(36)}isMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}getScreenSize(){const e=window.screen.width;return e<768?"mobile":e<1024?"tablet":"desktop"}flush(){this.flushBatch()}destroy(){this.updateCheckInterval&&clearInterval(this.updateCheckInterval),this.flush(),this.isInitialized=!1,this.config.debug&&console.log("🗑️ Metrone SDK destroyed")}getVersion(){return this.version}getSessionId(){return this.sessionId}getConfig(){return{...this.config}}}function t(t){return new e(t)}let i=null;function n(){return i}if("undefined"!=typeof window){const t=window.MetroneConfig;t&&(i=new e(t))}"undefined"!=typeof window&&(window.Metrone=e(window).initAnalytics=t(window).getAnalytics=n);exports.Metrone=e,exports.VERSION="1.0.0",exports.default=e,exports.getAnalytics=n,exports.initAnalytics=t;
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/core/Metrone.ts","../src/index.ts"],"sourcesContent":[null,null],"names":["Metrone","constructor","config","this","isInitialized","eventQueue","isOnline","version","updateCheckInterval","endpoint","debug","autoTrack","autoUpdate","batchSize","flushInterval","offlineQueue","maxQueueSize","respectDoNotTrack","anonymizeIP","cookieConsent","apiKey","Error","startsWith","sessionId","generateSessionId","isDoNotTrackEnabled","console","log","hasConsent","setupOnlineDetection","pageview","setupBatchProcessing","substring","projectId","url","title","metadata","track","page_url","window","location","pathname","search","page_path","page_title","document","referrer","source","eventName","data","warn","channel","ai_provider","ai_call_id","ai_session_id","ai_intent","ai_duration_sec","utm_source","utm_medium","utm_campaign","utm_term","utm_content","dataPageUrl","dataReferrer","event_name","rest","eventData","event_type","undefined","session_id","sdk_version","timestamp","Date","toISOString","properties","Object","keys","length","sendEvent","conversion","conversionType","value","conversion_type","currency","interaction","action","element","campaign","campaignData","trackCampaign","productView","productId","productName","price","product_id","product_name","category","whatsAppClick","contact_method","trackAICall","provider","call_id","intent","duration","transcript_snippet","outcome","trackAIChat","message_count","resolved","trackAIIntent","confidence","trackAISession","requestData","api_key","push","flushBatch","sendRequest","error","queueEvent","response","fetch","method","headers","body","JSON","stringify","ok","status","statusText","batch","batchEndpoint","replace","sendBatchRequest","unshift","events","shift","processQueue","queue","event","navigator","onLine","addEventListener","setInterval","setupAutoUpdates","checkForUpdates","updateInfo","json","latest","handleUpdate","available","current","features","changelog","loadNewVersion","notifyUpdate","script","createElement","src","onload","head","appendChild","dispatchEvent","CustomEvent","detail","now","toString","Math","random","doNotTrack","consent","localStorage","getItem","requestConsent","Promise","resolve","revokeConsent","removeItem","anonymize","simpleHash","str","hash","i","charCodeAt","abs","isMobile","test","userAgent","getScreenSize","width","screen","flush","destroy","clearInterval","getVersion","getSessionId","getConfig","initAnalytics","globalAnalytics","getAnalytics","MetroneConfig"],"mappings":"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"}
@@ -0,0 +1,515 @@
1
+ /**
2
+ * Metrone SDK - TypeScript Types
3
+ * Comprehensive type definitions for the analytics SDK
4
+ */
5
+ export interface AnalyticsConfig {
6
+ /** API key for authentication (required) */
7
+ apiKey: string;
8
+ /** Project ID for multi-tenant support (optional, derived from API key) */
9
+ projectId?: string;
10
+ /** Analytics API endpoint (default: '/api/analytics/events') */
11
+ endpoint?: string;
12
+ /** Enable debug logging (default: false) */
13
+ debug?: boolean;
14
+ /** Automatically track page views (default: true) */
15
+ autoTrack?: boolean;
16
+ /** Automatically update SDK (default: true) */
17
+ autoUpdate?: boolean;
18
+ /** Batch size for event sending (default: 10) */
19
+ batchSize?: number;
20
+ /** Flush interval in milliseconds (default: 5000) */
21
+ flushInterval?: number;
22
+ /** Queue events when offline (default: true) */
23
+ offlineQueue?: boolean;
24
+ /** Maximum queue size (default: 100) */
25
+ maxQueueSize?: number;
26
+ /** Respect Do Not Track header (default: true) */
27
+ respectDoNotTrack?: boolean;
28
+ /** Anonymize IP addresses (default: true) */
29
+ anonymizeIP?: boolean;
30
+ /** Cookie consent requirement (default: 'optional') */
31
+ cookieConsent?: 'required' | 'optional' | 'none';
32
+ }
33
+ export interface EventData {
34
+ /** Additional event properties */
35
+ [key: string]: any;
36
+ }
37
+ export interface CampaignData {
38
+ /** Custom campaign source (e.g., 'qr_code', 'flyer') */
39
+ campaign_source?: string;
40
+ /** Custom campaign medium (e.g., 'print', 'digital') */
41
+ campaign_medium?: string;
42
+ /** Custom campaign name (e.g., 'brussels_promo') */
43
+ campaign_name?: string;
44
+ /** Custom campaign content (e.g., 'location_a') */
45
+ campaign_content?: string;
46
+ /** Standard UTM source parameter */
47
+ utm_source?: string;
48
+ /** Standard UTM medium parameter */
49
+ utm_medium?: string;
50
+ /** Standard UTM campaign parameter */
51
+ utm_campaign?: string;
52
+ /** Standard UTM content parameter */
53
+ utm_content?: string;
54
+ /** Standard UTM term parameter */
55
+ utm_term?: string;
56
+ }
57
+ export interface UpdateInfo {
58
+ /** Whether an update is available */
59
+ available: boolean;
60
+ /** Current SDK version */
61
+ current: string;
62
+ /** Latest available version */
63
+ latest: string;
64
+ /** New features in the update */
65
+ features: string[];
66
+ /** Changelog entries */
67
+ changelog: string[];
68
+ }
69
+ export interface AnalyticsEvent {
70
+ /** Event type identifier */
71
+ event_type: string;
72
+ /** Page URL where event occurred */
73
+ page_url: string;
74
+ /** Referrer information */
75
+ referrer?: string;
76
+ /** User agent string */
77
+ user_agent?: string;
78
+ /** IP address (may be anonymized) */
79
+ ip_address?: string;
80
+ /** Country code */
81
+ country?: string;
82
+ /** City name */
83
+ city?: string;
84
+ /** Device type (mobile, tablet, desktop) */
85
+ device_type?: string;
86
+ /** Browser name */
87
+ browser?: string;
88
+ /** Operating system */
89
+ os?: string;
90
+ /** Session identifier */
91
+ session_id: string;
92
+ /** Additional event metadata */
93
+ metadata?: EventData;
94
+ /** API key for authentication */
95
+ api_key: string;
96
+ /** Event timestamp */
97
+ created_at?: string;
98
+ }
99
+ export interface BatchEvent {
100
+ /** Array of events to send */
101
+ events: AnalyticsEvent[];
102
+ /** Indicates this is a batch request */
103
+ batch: true;
104
+ }
105
+ export interface ConversionEvent extends EventData {
106
+ /** Type of conversion */
107
+ conversion_type: string;
108
+ /** Conversion value */
109
+ value?: number;
110
+ /** Currency code */
111
+ currency?: string;
112
+ }
113
+ export interface InteractionEvent extends EventData {
114
+ /** Interaction action */
115
+ action: string;
116
+ /** Element identifier */
117
+ element?: string;
118
+ }
119
+ export interface ProductViewEvent extends EventData {
120
+ /** Product identifier */
121
+ product_id: string;
122
+ /** Product name */
123
+ product_name: string;
124
+ /** Product price */
125
+ price?: number;
126
+ /** Product category */
127
+ category?: string;
128
+ }
129
+ export interface WhatsAppClickEvent extends EventData {
130
+ /** Product identifier (optional) */
131
+ product_id?: string;
132
+ /** Product name (optional) */
133
+ product_name?: string;
134
+ /** Contact method */
135
+ contact_method: 'whatsapp';
136
+ }
137
+ export interface PageViewEvent extends EventData {
138
+ /** Page URL */
139
+ url: string;
140
+ /** Page title */
141
+ title: string;
142
+ /** Referrer URL */
143
+ referrer?: string;
144
+ }
145
+ export interface DeviceInfo {
146
+ /** Device type */
147
+ type: 'mobile' | 'tablet' | 'desktop';
148
+ /** Screen width */
149
+ width: number;
150
+ /** Screen height */
151
+ height: number;
152
+ /** Browser name */
153
+ browser: string;
154
+ /** Operating system */
155
+ os: string;
156
+ /** User agent string */
157
+ userAgent: string;
158
+ }
159
+ export interface LocationInfo {
160
+ /** Country code */
161
+ country?: string;
162
+ /** Country name */
163
+ countryName?: string;
164
+ /** City name */
165
+ city?: string;
166
+ /** Region/state */
167
+ region?: string;
168
+ /** Timezone */
169
+ timezone?: string;
170
+ }
171
+ export interface SessionInfo {
172
+ /** Session identifier */
173
+ sessionId: string;
174
+ /** Session start time */
175
+ startTime: Date;
176
+ /** Last activity time */
177
+ lastActivity: Date;
178
+ /** Session duration in milliseconds */
179
+ duration: number;
180
+ /** Number of page views in session */
181
+ pageViews: number;
182
+ /** Number of events in session */
183
+ eventCount: number;
184
+ }
185
+ export interface AnalyticsStats {
186
+ /** Total number of events */
187
+ totalEvents: number;
188
+ /** Total number of page views */
189
+ pageViews: number;
190
+ /** Total number of unique visitors */
191
+ uniqueVisitors: number;
192
+ /** Total number of conversions */
193
+ conversions: number;
194
+ /** Pages per visitor */
195
+ pagesPerVisitor: number;
196
+ /** Top pages by views */
197
+ topPages: Array<{
198
+ page: string;
199
+ views: number;
200
+ uniqueVisitors: number;
201
+ }>;
202
+ /** Top referrers */
203
+ topReferrers: Array<{
204
+ referrer: string;
205
+ visits: number;
206
+ percentage: number;
207
+ }>;
208
+ /** Device type distribution */
209
+ deviceTypes: Array<{
210
+ type: string;
211
+ count: number;
212
+ percentage: number;
213
+ }>;
214
+ /** Top countries */
215
+ topCountries: Array<{
216
+ country: string;
217
+ visits: number;
218
+ percentage: number;
219
+ }>;
220
+ /** Top cities */
221
+ topCities: Array<{
222
+ city: string;
223
+ visits: number;
224
+ percentage: number;
225
+ }>;
226
+ /** Hourly traffic data */
227
+ hourlyData: Array<{
228
+ hour: number;
229
+ pageviews: number;
230
+ events: number;
231
+ }>;
232
+ }
233
+ export interface CampaignStats {
234
+ /** Campaign identifier */
235
+ campaignId: string;
236
+ /** Campaign type (custom or utm) */
237
+ campaignType: 'custom' | 'utm';
238
+ /** Number of visits */
239
+ visits: number;
240
+ /** Number of conversions */
241
+ conversions: number;
242
+ /** Conversion rate percentage */
243
+ conversionRate: number;
244
+ /** Last visit timestamp */
245
+ lastVisit: Date;
246
+ }
247
+ export interface ProjectInfo {
248
+ /** Project identifier */
249
+ id: string;
250
+ /** Project name */
251
+ name: string;
252
+ /** Project domain */
253
+ domain: string;
254
+ /** API key */
255
+ apiKey: string;
256
+ /** Project settings */
257
+ settings: {
258
+ autoUpdate: boolean;
259
+ dataRetention: string;
260
+ [key: string]: any;
261
+ };
262
+ /** Plan tier */
263
+ planTier: 'starter' | 'professional' | 'enterprise';
264
+ /** Creation date */
265
+ createdAt: Date;
266
+ /** Last update date */
267
+ updatedAt: Date;
268
+ }
269
+ export interface ErrorInfo {
270
+ /** Error message */
271
+ message: string;
272
+ /** Error code */
273
+ code?: string;
274
+ /** Error stack trace */
275
+ stack?: string;
276
+ /** Additional error context */
277
+ context?: EventData;
278
+ }
279
+ export interface ConsentInfo {
280
+ /** Whether consent has been given */
281
+ hasConsent: boolean;
282
+ /** Consent timestamp */
283
+ timestamp?: Date;
284
+ /** Consent method */
285
+ method?: 'explicit' | 'implied' | 'cookie';
286
+ /** Consent scope */
287
+ scope?: string[];
288
+ }
289
+ export interface UpdateNotificationEvent {
290
+ /** Event type */
291
+ type: 'metrone-update';
292
+ /** Update information */
293
+ detail: UpdateInfo;
294
+ }
295
+ export interface ConsentRequestEvent {
296
+ /** Event type */
297
+ type: 'metrone-consent-request';
298
+ /** Consent request details */
299
+ detail: {
300
+ resolve: (consent: boolean) => void;
301
+ };
302
+ }
303
+ export interface ConsentRevokedEvent {
304
+ /** Event type */
305
+ type: 'metrone-consent-revoked';
306
+ /** Revocation details */
307
+ detail: {
308
+ timestamp: Date;
309
+ };
310
+ }
311
+ export interface AnalyticsErrorEvent {
312
+ /** Event type */
313
+ type: 'metrone-error';
314
+ /** Error details */
315
+ detail: ErrorInfo;
316
+ }
317
+ export interface AnalyticsFlushEvent {
318
+ /** Event type */
319
+ type: 'metrone-flush';
320
+ /** Flush details */
321
+ detail: {
322
+ eventCount: number;
323
+ timestamp: Date;
324
+ };
325
+ }
326
+ export interface AnalyticsOnlineEvent {
327
+ /** Event type */
328
+ type: 'metrone-online';
329
+ /** Online event details */
330
+ detail: {
331
+ timestamp: Date;
332
+ };
333
+ }
334
+ export interface AnalyticsOfflineEvent {
335
+ /** Event type */
336
+ type: 'metrone-offline';
337
+ /** Offline event details */
338
+ detail: {
339
+ timestamp: Date;
340
+ queuedEvents: number;
341
+ };
342
+ }
343
+ export type AnalyticsCustomEvent = UpdateNotificationEvent | ConsentRequestEvent | ConsentRevokedEvent | AnalyticsErrorEvent | AnalyticsFlushEvent | AnalyticsOnlineEvent | AnalyticsOfflineEvent;
344
+ export interface AnalyticsEventListener {
345
+ (event: AnalyticsCustomEvent): void;
346
+ }
347
+ export interface AnalyticsSDK {
348
+ /** Track a page view */
349
+ pageview(url?: string, title?: string, metadata?: EventData): void;
350
+ /** Track a custom event */
351
+ track(eventName: string, data?: EventData): void;
352
+ /** Track a conversion event */
353
+ conversion(conversionType: string, value?: number, data?: EventData): void;
354
+ /** Track user interaction */
355
+ interaction(action: string, element?: string, data?: EventData): void;
356
+ /** Track campaign events */
357
+ campaign(campaignData: CampaignData): void;
358
+ /** Track campaign with specific event */
359
+ trackCampaign(eventName: string, campaignData: CampaignData, eventData?: EventData): void;
360
+ /** Track product view */
361
+ productView(productId: string, productName: string, price?: number, metadata?: EventData): void;
362
+ /** Track WhatsApp click */
363
+ whatsAppClick(productId?: string, productName?: string): void;
364
+ /** Flush pending events */
365
+ flush(): void;
366
+ /** Destroy SDK instance */
367
+ destroy(): void;
368
+ /** Get current version */
369
+ getVersion(): string;
370
+ /** Get session ID */
371
+ getSessionId(): string;
372
+ /** Get configuration */
373
+ getConfig(): AnalyticsConfig;
374
+ /** Check for updates */
375
+ checkForUpdates(): Promise<UpdateInfo>;
376
+ /** Check if user has given consent */
377
+ hasConsent(): boolean;
378
+ /** Request user consent */
379
+ requestConsent(): Promise<boolean>;
380
+ /** Revoke user consent */
381
+ revokeConsent(): void;
382
+ /** Check if running on mobile device */
383
+ isMobile(): boolean;
384
+ /** Get screen size */
385
+ getScreenSize(): string;
386
+ /** Anonymize data */
387
+ anonymize(data: string): string;
388
+ }
389
+ export interface AnalyticsProviderProps {
390
+ /** Analytics configuration */
391
+ config: AnalyticsConfig;
392
+ /** Child components */
393
+ children: React.ReactNode;
394
+ }
395
+ export interface AnalyticsContextValue {
396
+ /** Analytics SDK instance */
397
+ analytics: AnalyticsSDK | null;
398
+ /** Whether analytics is initialized */
399
+ isInitialized: boolean;
400
+ /** Current session info */
401
+ session: SessionInfo | null;
402
+ /** Device information */
403
+ device: DeviceInfo | null;
404
+ /** Location information */
405
+ location: LocationInfo | null;
406
+ }
407
+ export interface UseAnalyticsReturn {
408
+ /** Analytics SDK instance */
409
+ analytics: AnalyticsSDK | null;
410
+ /** Whether analytics is initialized */
411
+ isInitialized: boolean;
412
+ /** Track page view */
413
+ trackPageView: (url?: string, title?: string, metadata?: EventData) => void;
414
+ /** Track custom event */
415
+ trackEvent: (eventName: string, data?: EventData) => void;
416
+ /** Track conversion */
417
+ trackConversion: (conversionType: string, value?: number, data?: EventData) => void;
418
+ /** Track interaction */
419
+ trackInteraction: (action: string, element?: string, data?: EventData) => void;
420
+ /** Track campaign */
421
+ trackCampaign: (campaignData: CampaignData) => void;
422
+ /** Track product view */
423
+ trackProductView: (productId: string, productName: string, price?: number, metadata?: EventData) => void;
424
+ /** Track WhatsApp click */
425
+ trackWhatsAppClick: (productId?: string, productName?: string) => void;
426
+ /** Flush events */
427
+ flush: () => void;
428
+ /** Check consent */
429
+ hasConsent: () => boolean;
430
+ /** Request consent */
431
+ requestConsent: () => Promise<boolean>;
432
+ /** Revoke consent */
433
+ revokeConsent: () => void;
434
+ }
435
+ export interface AnalyticsHookOptions {
436
+ /** Whether to auto-track page views */
437
+ autoTrack?: boolean;
438
+ /** Whether to track route changes */
439
+ trackRouteChanges?: boolean;
440
+ /** Custom event prefix */
441
+ eventPrefix?: string;
442
+ }
443
+ export interface AnalyticsMiddleware {
444
+ /** Middleware name */
445
+ name: string;
446
+ /** Process event before sending */
447
+ processEvent?: (event: AnalyticsEvent) => AnalyticsEvent | null;
448
+ /** Process batch before sending */
449
+ processBatch?: (events: AnalyticsEvent[]) => AnalyticsEvent[];
450
+ /** Handle errors */
451
+ handleError?: (error: ErrorInfo) => void;
452
+ }
453
+ export interface AnalyticsPlugin {
454
+ /** Plugin name */
455
+ name: string;
456
+ /** Plugin version */
457
+ version: string;
458
+ /** Initialize plugin */
459
+ init?: (analytics: AnalyticsSDK) => void;
460
+ /** Track event */
461
+ track?: (event: AnalyticsEvent) => void;
462
+ /** Track page view */
463
+ pageview?: (event: PageViewEvent) => void;
464
+ /** Track conversion */
465
+ conversion?: (event: ConversionEvent) => void;
466
+ /** Track interaction */
467
+ interaction?: (event: InteractionEvent) => void;
468
+ /** Destroy plugin */
469
+ destroy?: () => void;
470
+ }
471
+ export interface AnalyticsConfigValidation {
472
+ /** Whether config is valid */
473
+ isValid: boolean;
474
+ /** Validation errors */
475
+ errors: string[];
476
+ /** Validation warnings */
477
+ warnings: string[];
478
+ }
479
+ export interface AnalyticsPerformanceMetrics {
480
+ /** SDK load time in milliseconds */
481
+ loadTime: number;
482
+ /** Event processing time in milliseconds */
483
+ eventProcessingTime: number;
484
+ /** Batch processing time in milliseconds */
485
+ batchProcessingTime: number;
486
+ /** Network request time in milliseconds */
487
+ networkTime: number;
488
+ /** Queue size */
489
+ queueSize: number;
490
+ /** Memory usage in bytes */
491
+ memoryUsage: number;
492
+ }
493
+ export interface AnalyticsDebugInfo {
494
+ /** SDK version */
495
+ version: string;
496
+ /** Configuration */
497
+ config: AnalyticsConfig;
498
+ /** Session info */
499
+ session: SessionInfo;
500
+ /** Device info */
501
+ device: DeviceInfo;
502
+ /** Location info */
503
+ location: LocationInfo;
504
+ /** Performance metrics */
505
+ performance: AnalyticsPerformanceMetrics;
506
+ /** Event queue */
507
+ eventQueue: AnalyticsEvent[];
508
+ /** Online status */
509
+ isOnline: boolean;
510
+ /** Consent status */
511
+ hasConsent: boolean;
512
+ /** Do Not Track status */
513
+ doNotTrack: boolean;
514
+ }
515
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@metrone-io/sdk",
3
+ "version": "1.0.0",
4
+ "description": "Metrone - Privacy-first analytics SDK",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.esm.js",
7
+ "types": "dist/index.d.ts",
8
+ "files": [
9
+ "dist",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "build": "rollup -c",
14
+ "build:watch": "rollup -c -w",
15
+ "dev": "rollup -c -w",
16
+ "test": "jest",
17
+ "test:watch": "jest --watch",
18
+ "lint": "eslint src --ext .ts,.tsx",
19
+ "lint:fix": "eslint src --ext .ts,.tsx --fix",
20
+ "type-check": "tsc --noEmit",
21
+ "clean": "rimraf dist",
22
+ "prepublishOnly": "npm run clean && npm run build"
23
+ },
24
+ "keywords": [
25
+ "analytics",
26
+ "privacy",
27
+ "first-party",
28
+ "gdpr",
29
+ "cookie-free",
30
+ "edge-side-includes",
31
+ "web-analytics",
32
+ "tracking",
33
+ "metrics",
34
+ "metrone"
35
+ ],
36
+ "author": "Metrone",
37
+ "license": "MIT",
38
+ "repository": {
39
+ "type": "git",
40
+ "url": "https://github.com/metrone-io/metrone.git",
41
+ "directory": "packages/sdk"
42
+ },
43
+ "bugs": {
44
+ "url": "https://github.com/metrone-io/metrone/issues"
45
+ },
46
+ "homepage": "https://metrone.io",
47
+ "engines": {
48
+ "node": ">=16.0.0"
49
+ },
50
+ "devDependencies": {
51
+ "@rollup/plugin-commonjs": "^25.0.7",
52
+ "@rollup/plugin-node-resolve": "^15.2.3",
53
+ "@rollup/plugin-typescript": "^11.1.5",
54
+ "@types/jest": "^29.5.8",
55
+ "@typescript-eslint/eslint-plugin": "^6.12.0",
56
+ "@typescript-eslint/parser": "^6.12.0",
57
+ "eslint": "^8.54.0",
58
+ "jest": "^29.7.0",
59
+ "rimraf": "^5.0.5",
60
+ "rollup": "^4.6.1",
61
+ "rollup-plugin-terser": "^7.0.2",
62
+ "ts-jest": "^29.1.1",
63
+ "typescript": "^5.3.2"
64
+ },
65
+ "dependencies": {},
66
+ "publishConfig": {
67
+ "access": "public"
68
+ }
69
+ }