sitepong 0.0.8 → 0.0.12
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 +9 -5
- package/dist/index.d.mts +25 -1
- package/dist/index.d.ts +25 -1
- package/dist/index.js +90 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +87 -5
- package/dist/index.mjs.map +1 -1
- package/dist/nextjs/index.d.mts +2 -3
- package/dist/nextjs/index.d.ts +2 -3
- package/dist/react/index.d.mts +22 -22
- package/dist/react/index.d.ts +22 -22
- package/dist/react/index.js +228 -950
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +219 -945
- package/dist/react/index.mjs.map +1 -1
- package/dist/server/index.d.mts +16 -3
- package/dist/server/index.d.ts +16 -3
- package/dist/{breadcrumbs-Cydh62b1.d.mts → types-B-SQ044s.d.mts} +1 -14
- package/dist/{breadcrumbs-DRlJ9h_B.d.ts → types-oS9oupfF.d.ts} +1 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -381,9 +381,11 @@ function App() {
|
|
|
381
381
|
return (
|
|
382
382
|
<SitePongProvider
|
|
383
383
|
apiKey="your-api-key"
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
384
|
+
config={{
|
|
385
|
+
environment: 'production',
|
|
386
|
+
analytics: { enabled: true, autocapturePageviews: true },
|
|
387
|
+
replay: { enabled: true },
|
|
388
|
+
}}
|
|
387
389
|
>
|
|
388
390
|
<SitePongErrorBoundary fallback={<ErrorPage />}>
|
|
389
391
|
<YourApp />
|
|
@@ -459,8 +461,10 @@ export function Providers({ children }) {
|
|
|
459
461
|
return (
|
|
460
462
|
<SitePongProvider
|
|
461
463
|
apiKey={process.env.NEXT_PUBLIC_SITEPONG_KEY}
|
|
462
|
-
|
|
463
|
-
|
|
464
|
+
config={{
|
|
465
|
+
environment: process.env.NODE_ENV,
|
|
466
|
+
replay: { enabled: true },
|
|
467
|
+
}}
|
|
464
468
|
>
|
|
465
469
|
{children}
|
|
466
470
|
</SitePongProvider>
|
package/dist/index.d.mts
CHANGED
|
@@ -443,6 +443,8 @@ declare class SitePongClient {
|
|
|
443
443
|
private flushTimer;
|
|
444
444
|
private context;
|
|
445
445
|
private initialized;
|
|
446
|
+
private flushFailures;
|
|
447
|
+
private disabled;
|
|
446
448
|
private flagManager;
|
|
447
449
|
private analyticsManager;
|
|
448
450
|
private fingerprintManager;
|
|
@@ -454,6 +456,10 @@ declare class SitePongClient {
|
|
|
454
456
|
private profiler;
|
|
455
457
|
constructor();
|
|
456
458
|
init(config: SitePongInitConfig): void;
|
|
459
|
+
/**
|
|
460
|
+
* Check if the SDK is initialized
|
|
461
|
+
*/
|
|
462
|
+
isInitialized(): boolean;
|
|
457
463
|
/**
|
|
458
464
|
* Get a feature flag value
|
|
459
465
|
* Returns the cached evaluated result or default value
|
|
@@ -529,6 +535,14 @@ declare class SitePongClient {
|
|
|
529
535
|
setContext(context: ErrorContext): void;
|
|
530
536
|
setUser(user: ErrorContext['user']): void;
|
|
531
537
|
setTags(tags: Record<string, string>): void;
|
|
538
|
+
clearUser(): void;
|
|
539
|
+
addBreadcrumb(breadcrumb: {
|
|
540
|
+
type?: 'default' | 'http' | 'navigation' | 'ui' | 'console' | 'error';
|
|
541
|
+
category?: string;
|
|
542
|
+
message?: string;
|
|
543
|
+
level?: 'fatal' | 'error' | 'warning' | 'info' | 'debug';
|
|
544
|
+
data?: Record<string, unknown>;
|
|
545
|
+
}): void;
|
|
532
546
|
captureError(error: Error | string, additionalContext?: ErrorContext): void;
|
|
533
547
|
captureMessage(message: string, level?: 'info' | 'warning' | 'error', additionalContext?: ErrorContext): void;
|
|
534
548
|
flush(): Promise<void>;
|
|
@@ -549,6 +563,16 @@ declare const setContext: (context: ErrorContext) => void;
|
|
|
549
563
|
declare const setUser: (user: ErrorContext["user"]) => void;
|
|
550
564
|
declare const setTags: (tags: Record<string, string>) => void;
|
|
551
565
|
declare const flush: () => Promise<void>;
|
|
566
|
+
declare const isInitialized: () => boolean;
|
|
567
|
+
declare const clearUser: () => void;
|
|
568
|
+
declare const addBreadcrumb: (breadcrumb: {
|
|
569
|
+
type?: "default" | "http" | "navigation" | "ui" | "console" | "error";
|
|
570
|
+
category?: string;
|
|
571
|
+
message?: string;
|
|
572
|
+
level?: "fatal" | "error" | "warning" | "info" | "debug";
|
|
573
|
+
data?: Record<string, unknown>;
|
|
574
|
+
}) => void;
|
|
575
|
+
|
|
552
576
|
declare const getFlag: (key: string, defaultValue?: boolean) => boolean;
|
|
553
577
|
declare const getAllFlags: () => Record<string, boolean>;
|
|
554
578
|
declare const getVariant: (key: string, defaultValue?: string | null) => string | null;
|
|
@@ -599,4 +623,4 @@ declare const getProfiles: () => ProfileData[];
|
|
|
599
623
|
declare const getLatestProfile: () => ProfileData | null;
|
|
600
624
|
declare const flushProfiles: () => Promise<void>;
|
|
601
625
|
|
|
602
|
-
export { type CapturedError, type CronCheckinOptions, type CronHandle, type DatabaseQueryEvent, type DatabaseTrackerConfig, type DeviceSignals, type ErrorContext, type FraudCheckResult, GroupTraits, type MetricOptions, type PerformanceConfig, type PerformanceSpan, type PerformanceTransaction, type ProfileData, type ProfileFrame, type ProfilerConfig, type SitePongConfig, type SitePongInitConfig, type TraceContext, TracePropagator, TrackProperties, UserTraits, type VisitorIdResult, type WebVitals, areFlagsReady, captureError, captureMessage, clearAnonymousId, createTraceContext, cronCheckin, cronStart, cronWrap, dbTrack, dbTrackSync, sitepong as default, endSpan, endTransaction, extractTrace, flush, flushMetrics, flushProfiles, generateSpanId, generateTraceId, getAllFlags, getAnonymousId, getDbNPlusOnePatterns, getDbQueryCount, getDeviceSignals, getFlag, getFraudCheck, getLatestProfile, getProfiles, getReplaySessionId, getVariant, getVariantPayload, getVisitorId, getWebVitals, group, identify, init, isReplayRecording, metricDistribution, metricGauge, metricHistogram, metricIncrement, metricStartTimer, metricTime, profile, propagateTrace, refreshFlags, resetAnalytics, resetDbQueryCount, setAnonymousId, setContext, setTags, setUser, startProfileSpan, startReplay, startSpan, startTransaction, stopReplay, track, trackPageView, waitForFlags };
|
|
626
|
+
export { type CapturedError, type CronCheckinOptions, type CronHandle, type DatabaseQueryEvent, type DatabaseTrackerConfig, type DeviceSignals, type ErrorContext, type FraudCheckResult, GroupTraits, type MetricOptions, type PerformanceConfig, type PerformanceSpan, type PerformanceTransaction, type ProfileData, type ProfileFrame, type ProfilerConfig, type SitePongConfig, type SitePongInitConfig, type TraceContext, TracePropagator, TrackProperties, UserTraits, type VisitorIdResult, type WebVitals, addBreadcrumb, areFlagsReady, captureError, captureMessage, clearAnonymousId, clearUser, sitepong as client, createTraceContext, cronCheckin, cronStart, cronWrap, dbTrack, dbTrackSync, sitepong as default, endSpan, endTransaction, extractTrace, flush, flushMetrics, flushProfiles, generateSpanId, generateTraceId, getAllFlags, getAnonymousId, getDbNPlusOnePatterns, getDbQueryCount, getDeviceSignals, getFlag, getFraudCheck, getLatestProfile, getProfiles, getReplaySessionId, getVariant, getVariantPayload, getVisitorId, getWebVitals, group, identify, init, isInitialized, isReplayRecording, metricDistribution, metricGauge, metricHistogram, metricIncrement, metricStartTimer, metricTime, profile, propagateTrace, refreshFlags, resetAnalytics, resetDbQueryCount, setAnonymousId, setContext, setTags, setUser, startProfileSpan, startReplay, startSpan, startTransaction, stopReplay, track, trackPageView, waitForFlags };
|
package/dist/index.d.ts
CHANGED
|
@@ -443,6 +443,8 @@ declare class SitePongClient {
|
|
|
443
443
|
private flushTimer;
|
|
444
444
|
private context;
|
|
445
445
|
private initialized;
|
|
446
|
+
private flushFailures;
|
|
447
|
+
private disabled;
|
|
446
448
|
private flagManager;
|
|
447
449
|
private analyticsManager;
|
|
448
450
|
private fingerprintManager;
|
|
@@ -454,6 +456,10 @@ declare class SitePongClient {
|
|
|
454
456
|
private profiler;
|
|
455
457
|
constructor();
|
|
456
458
|
init(config: SitePongInitConfig): void;
|
|
459
|
+
/**
|
|
460
|
+
* Check if the SDK is initialized
|
|
461
|
+
*/
|
|
462
|
+
isInitialized(): boolean;
|
|
457
463
|
/**
|
|
458
464
|
* Get a feature flag value
|
|
459
465
|
* Returns the cached evaluated result or default value
|
|
@@ -529,6 +535,14 @@ declare class SitePongClient {
|
|
|
529
535
|
setContext(context: ErrorContext): void;
|
|
530
536
|
setUser(user: ErrorContext['user']): void;
|
|
531
537
|
setTags(tags: Record<string, string>): void;
|
|
538
|
+
clearUser(): void;
|
|
539
|
+
addBreadcrumb(breadcrumb: {
|
|
540
|
+
type?: 'default' | 'http' | 'navigation' | 'ui' | 'console' | 'error';
|
|
541
|
+
category?: string;
|
|
542
|
+
message?: string;
|
|
543
|
+
level?: 'fatal' | 'error' | 'warning' | 'info' | 'debug';
|
|
544
|
+
data?: Record<string, unknown>;
|
|
545
|
+
}): void;
|
|
532
546
|
captureError(error: Error | string, additionalContext?: ErrorContext): void;
|
|
533
547
|
captureMessage(message: string, level?: 'info' | 'warning' | 'error', additionalContext?: ErrorContext): void;
|
|
534
548
|
flush(): Promise<void>;
|
|
@@ -549,6 +563,16 @@ declare const setContext: (context: ErrorContext) => void;
|
|
|
549
563
|
declare const setUser: (user: ErrorContext["user"]) => void;
|
|
550
564
|
declare const setTags: (tags: Record<string, string>) => void;
|
|
551
565
|
declare const flush: () => Promise<void>;
|
|
566
|
+
declare const isInitialized: () => boolean;
|
|
567
|
+
declare const clearUser: () => void;
|
|
568
|
+
declare const addBreadcrumb: (breadcrumb: {
|
|
569
|
+
type?: "default" | "http" | "navigation" | "ui" | "console" | "error";
|
|
570
|
+
category?: string;
|
|
571
|
+
message?: string;
|
|
572
|
+
level?: "fatal" | "error" | "warning" | "info" | "debug";
|
|
573
|
+
data?: Record<string, unknown>;
|
|
574
|
+
}) => void;
|
|
575
|
+
|
|
552
576
|
declare const getFlag: (key: string, defaultValue?: boolean) => boolean;
|
|
553
577
|
declare const getAllFlags: () => Record<string, boolean>;
|
|
554
578
|
declare const getVariant: (key: string, defaultValue?: string | null) => string | null;
|
|
@@ -599,4 +623,4 @@ declare const getProfiles: () => ProfileData[];
|
|
|
599
623
|
declare const getLatestProfile: () => ProfileData | null;
|
|
600
624
|
declare const flushProfiles: () => Promise<void>;
|
|
601
625
|
|
|
602
|
-
export { type CapturedError, type CronCheckinOptions, type CronHandle, type DatabaseQueryEvent, type DatabaseTrackerConfig, type DeviceSignals, type ErrorContext, type FraudCheckResult, GroupTraits, type MetricOptions, type PerformanceConfig, type PerformanceSpan, type PerformanceTransaction, type ProfileData, type ProfileFrame, type ProfilerConfig, type SitePongConfig, type SitePongInitConfig, type TraceContext, TracePropagator, TrackProperties, UserTraits, type VisitorIdResult, type WebVitals, areFlagsReady, captureError, captureMessage, clearAnonymousId, createTraceContext, cronCheckin, cronStart, cronWrap, dbTrack, dbTrackSync, sitepong as default, endSpan, endTransaction, extractTrace, flush, flushMetrics, flushProfiles, generateSpanId, generateTraceId, getAllFlags, getAnonymousId, getDbNPlusOnePatterns, getDbQueryCount, getDeviceSignals, getFlag, getFraudCheck, getLatestProfile, getProfiles, getReplaySessionId, getVariant, getVariantPayload, getVisitorId, getWebVitals, group, identify, init, isReplayRecording, metricDistribution, metricGauge, metricHistogram, metricIncrement, metricStartTimer, metricTime, profile, propagateTrace, refreshFlags, resetAnalytics, resetDbQueryCount, setAnonymousId, setContext, setTags, setUser, startProfileSpan, startReplay, startSpan, startTransaction, stopReplay, track, trackPageView, waitForFlags };
|
|
626
|
+
export { type CapturedError, type CronCheckinOptions, type CronHandle, type DatabaseQueryEvent, type DatabaseTrackerConfig, type DeviceSignals, type ErrorContext, type FraudCheckResult, GroupTraits, type MetricOptions, type PerformanceConfig, type PerformanceSpan, type PerformanceTransaction, type ProfileData, type ProfileFrame, type ProfilerConfig, type SitePongConfig, type SitePongInitConfig, type TraceContext, TracePropagator, TrackProperties, UserTraits, type VisitorIdResult, type WebVitals, addBreadcrumb, areFlagsReady, captureError, captureMessage, clearAnonymousId, clearUser, sitepong as client, createTraceContext, cronCheckin, cronStart, cronWrap, dbTrack, dbTrackSync, sitepong as default, endSpan, endTransaction, extractTrace, flush, flushMetrics, flushProfiles, generateSpanId, generateTraceId, getAllFlags, getAnonymousId, getDbNPlusOnePatterns, getDbQueryCount, getDeviceSignals, getFlag, getFraudCheck, getLatestProfile, getProfiles, getReplaySessionId, getVariant, getVariantPayload, getVisitorId, getWebVitals, group, identify, init, isInitialized, isReplayRecording, metricDistribution, metricGauge, metricHistogram, metricIncrement, metricStartTimer, metricTime, profile, propagateTrace, refreshFlags, resetAnalytics, resetDbQueryCount, setAnonymousId, setContext, setTags, setUser, startProfileSpan, startReplay, startSpan, startTransaction, stopReplay, track, trackPageView, waitForFlags };
|
package/dist/index.js
CHANGED
|
@@ -693,10 +693,13 @@ var AutocaptureModule = class {
|
|
|
693
693
|
var DEFAULT_ENDPOINT2 = "https://ingest.sitepong.com";
|
|
694
694
|
var DEFAULT_BATCH_SIZE = 20;
|
|
695
695
|
var DEFAULT_FLUSH_INTERVAL = 1e4;
|
|
696
|
+
var MAX_FLUSH_FAILURES = 3;
|
|
696
697
|
var AnalyticsManager = class {
|
|
697
698
|
constructor(config) {
|
|
698
699
|
this.eventQueue = [];
|
|
699
700
|
this.flushTimer = null;
|
|
701
|
+
this.flushFailures = 0;
|
|
702
|
+
this.disabled = false;
|
|
700
703
|
this.userId = null;
|
|
701
704
|
this.groupId = null;
|
|
702
705
|
this.userTraits = null;
|
|
@@ -814,6 +817,10 @@ var AnalyticsManager = class {
|
|
|
814
817
|
}
|
|
815
818
|
async flush() {
|
|
816
819
|
if (this.eventQueue.length === 0) return;
|
|
820
|
+
if (this.disabled) {
|
|
821
|
+
this.eventQueue = [];
|
|
822
|
+
return;
|
|
823
|
+
}
|
|
817
824
|
const events = [...this.eventQueue];
|
|
818
825
|
this.eventQueue = [];
|
|
819
826
|
const endpoint = this.config.eventsEndpoint || `${this.config.endpoint}/api/events`;
|
|
@@ -829,10 +836,19 @@ var AnalyticsManager = class {
|
|
|
829
836
|
if (!response.ok) {
|
|
830
837
|
throw new Error(`HTTP ${response.status}`);
|
|
831
838
|
}
|
|
839
|
+
this.flushFailures = 0;
|
|
832
840
|
this.log(`Flushed ${events.length} events`);
|
|
833
841
|
} catch (err) {
|
|
842
|
+
this.flushFailures++;
|
|
843
|
+
if (this.flushFailures >= MAX_FLUSH_FAILURES) {
|
|
844
|
+
this.disabled = true;
|
|
845
|
+
console.warn(
|
|
846
|
+
`[SitePong Analytics] Disabled after ${MAX_FLUSH_FAILURES} consecutive failures. Check that ${endpoint} is accessible and has proper CORS headers.`
|
|
847
|
+
);
|
|
848
|
+
return;
|
|
849
|
+
}
|
|
834
850
|
this.eventQueue.unshift(...events);
|
|
835
|
-
this.log(
|
|
851
|
+
this.log(`Failed to flush events (attempt ${this.flushFailures}/${MAX_FLUSH_FAILURES}):`, err);
|
|
836
852
|
}
|
|
837
853
|
}
|
|
838
854
|
destroy() {
|
|
@@ -2574,12 +2590,15 @@ var DEFAULT_ENDPOINT4 = "https://ingest.sitepong.com";
|
|
|
2574
2590
|
var DEFAULT_FLUSH_INTERVAL2 = 5e3;
|
|
2575
2591
|
var DEFAULT_MAX_BATCH_SIZE = 100;
|
|
2576
2592
|
var DEFAULT_MAX_SESSION_DURATION = 60 * 60 * 1e3;
|
|
2593
|
+
var MAX_FLUSH_FAILURES2 = 3;
|
|
2577
2594
|
var ReplayManager = class {
|
|
2578
2595
|
constructor(config) {
|
|
2579
2596
|
this.recording = false;
|
|
2580
2597
|
this.sessionId = null;
|
|
2581
2598
|
this.events = [];
|
|
2582
2599
|
this.flushTimer = null;
|
|
2600
|
+
this.flushFailures = 0;
|
|
2601
|
+
this.disabled = false;
|
|
2583
2602
|
this.sessionStartTime = 0;
|
|
2584
2603
|
this.observer = null;
|
|
2585
2604
|
this.mouseMoveBuffer = [];
|
|
@@ -2913,6 +2932,10 @@ var ReplayManager = class {
|
|
|
2913
2932
|
}
|
|
2914
2933
|
async flush() {
|
|
2915
2934
|
if (this.events.length === 0 || !this.sessionId) return;
|
|
2935
|
+
if (this.disabled) {
|
|
2936
|
+
this.events = [];
|
|
2937
|
+
return;
|
|
2938
|
+
}
|
|
2916
2939
|
const events = [...this.events];
|
|
2917
2940
|
this.events = [];
|
|
2918
2941
|
const endpoint = this.config.replayEndpoint || `${this.config.endpoint}/api/replays`;
|
|
@@ -2936,10 +2959,19 @@ var ReplayManager = class {
|
|
|
2936
2959
|
if (!response.ok) {
|
|
2937
2960
|
throw new Error(`HTTP ${response.status}`);
|
|
2938
2961
|
}
|
|
2962
|
+
this.flushFailures = 0;
|
|
2939
2963
|
this.log(`Flushed ${events.length} replay events`);
|
|
2940
2964
|
} catch (err) {
|
|
2965
|
+
this.flushFailures++;
|
|
2966
|
+
if (this.flushFailures >= MAX_FLUSH_FAILURES2) {
|
|
2967
|
+
this.disabled = true;
|
|
2968
|
+
console.warn(
|
|
2969
|
+
`[SitePong Replay] Disabled after ${MAX_FLUSH_FAILURES2} consecutive failures. Check that ${endpoint} is accessible and has proper CORS headers.`
|
|
2970
|
+
);
|
|
2971
|
+
return;
|
|
2972
|
+
}
|
|
2941
2973
|
this.events.unshift(...events);
|
|
2942
|
-
this.log(
|
|
2974
|
+
this.log(`Failed to flush replay events (attempt ${this.flushFailures}/${MAX_FLUSH_FAILURES2}):`, err);
|
|
2943
2975
|
}
|
|
2944
2976
|
}
|
|
2945
2977
|
takeInteractionSnapshot() {
|
|
@@ -2993,10 +3025,13 @@ var ReplayManager = class {
|
|
|
2993
3025
|
// src/performance/manager.ts
|
|
2994
3026
|
var DEFAULT_ENDPOINT5 = "https://ingest.sitepong.com";
|
|
2995
3027
|
var DEFAULT_FLUSH_INTERVAL3 = 1e4;
|
|
3028
|
+
var MAX_FLUSH_FAILURES3 = 3;
|
|
2996
3029
|
var PerformanceManager = class {
|
|
2997
3030
|
constructor(config) {
|
|
2998
3031
|
this.metrics = [];
|
|
2999
3032
|
this.flushTimer = null;
|
|
3033
|
+
this.flushFailures = 0;
|
|
3034
|
+
this.disabled = false;
|
|
3000
3035
|
this.vitals = {};
|
|
3001
3036
|
this.activeTransactions = /* @__PURE__ */ new Map();
|
|
3002
3037
|
this.config = {
|
|
@@ -3251,6 +3286,10 @@ var PerformanceManager = class {
|
|
|
3251
3286
|
}
|
|
3252
3287
|
async flush() {
|
|
3253
3288
|
if (this.metrics.length === 0) return;
|
|
3289
|
+
if (this.disabled) {
|
|
3290
|
+
this.metrics = [];
|
|
3291
|
+
return;
|
|
3292
|
+
}
|
|
3254
3293
|
const metrics = [...this.metrics];
|
|
3255
3294
|
this.metrics = [];
|
|
3256
3295
|
const endpoint = this.config.performanceEndpoint || `${this.config.endpoint}/api/performance`;
|
|
@@ -3264,10 +3303,19 @@ var PerformanceManager = class {
|
|
|
3264
3303
|
body: JSON.stringify({ metrics })
|
|
3265
3304
|
});
|
|
3266
3305
|
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
3306
|
+
this.flushFailures = 0;
|
|
3267
3307
|
this.log(`Flushed ${metrics.length} performance metrics`);
|
|
3268
3308
|
} catch (err) {
|
|
3309
|
+
this.flushFailures++;
|
|
3310
|
+
if (this.flushFailures >= MAX_FLUSH_FAILURES3) {
|
|
3311
|
+
this.disabled = true;
|
|
3312
|
+
console.warn(
|
|
3313
|
+
`[SitePong Performance] Disabled after ${MAX_FLUSH_FAILURES3} consecutive failures. Check that ${endpoint} is accessible and has proper CORS headers.`
|
|
3314
|
+
);
|
|
3315
|
+
return;
|
|
3316
|
+
}
|
|
3269
3317
|
this.metrics.unshift(...metrics);
|
|
3270
|
-
this.log(
|
|
3318
|
+
this.log(`Failed to flush metrics (attempt ${this.flushFailures}/${MAX_FLUSH_FAILURES3}):`, err);
|
|
3271
3319
|
}
|
|
3272
3320
|
}
|
|
3273
3321
|
log(...args) {
|
|
@@ -4019,12 +4067,15 @@ function countFrames(frames) {
|
|
|
4019
4067
|
var DEFAULT_ENDPOINT6 = "https://ingest.sitepong.com";
|
|
4020
4068
|
var DEFAULT_BATCH_SIZE2 = 10;
|
|
4021
4069
|
var DEFAULT_FLUSH_INTERVAL4 = 5e3;
|
|
4070
|
+
var MAX_FLUSH_FAILURES4 = 3;
|
|
4022
4071
|
var SitePongClient = class {
|
|
4023
4072
|
constructor() {
|
|
4024
4073
|
this.errorQueue = [];
|
|
4025
4074
|
this.flushTimer = null;
|
|
4026
4075
|
this.context = {};
|
|
4027
4076
|
this.initialized = false;
|
|
4077
|
+
this.flushFailures = 0;
|
|
4078
|
+
this.disabled = false;
|
|
4028
4079
|
this.flagManager = null;
|
|
4029
4080
|
this.analyticsManager = null;
|
|
4030
4081
|
this.fingerprintManager = null;
|
|
@@ -4176,6 +4227,12 @@ var SitePongClient = class {
|
|
|
4176
4227
|
});
|
|
4177
4228
|
}
|
|
4178
4229
|
}
|
|
4230
|
+
/**
|
|
4231
|
+
* Check if the SDK is initialized
|
|
4232
|
+
*/
|
|
4233
|
+
isInitialized() {
|
|
4234
|
+
return this.initialized;
|
|
4235
|
+
}
|
|
4179
4236
|
/**
|
|
4180
4237
|
* Get a feature flag value
|
|
4181
4238
|
* Returns the cached evaluated result or default value
|
|
@@ -4447,6 +4504,15 @@ var SitePongClient = class {
|
|
|
4447
4504
|
setTags(tags) {
|
|
4448
4505
|
this.context.tags = { ...this.context.tags, ...tags };
|
|
4449
4506
|
}
|
|
4507
|
+
clearUser() {
|
|
4508
|
+
this.context.user = void 0;
|
|
4509
|
+
if (this.replayManager) {
|
|
4510
|
+
this.replayManager.setUser(null);
|
|
4511
|
+
}
|
|
4512
|
+
}
|
|
4513
|
+
addBreadcrumb(breadcrumb) {
|
|
4514
|
+
this.log("Breadcrumb added:", breadcrumb);
|
|
4515
|
+
}
|
|
4450
4516
|
captureError(error, additionalContext) {
|
|
4451
4517
|
if (!this.initialized) {
|
|
4452
4518
|
console.warn("[SitePong] SDK not initialized. Call init() first.");
|
|
@@ -4485,6 +4551,10 @@ var SitePongClient = class {
|
|
|
4485
4551
|
if (this.errorQueue.length === 0) {
|
|
4486
4552
|
return;
|
|
4487
4553
|
}
|
|
4554
|
+
if (this.disabled) {
|
|
4555
|
+
this.errorQueue = [];
|
|
4556
|
+
return;
|
|
4557
|
+
}
|
|
4488
4558
|
const errors = [...this.errorQueue];
|
|
4489
4559
|
this.errorQueue = [];
|
|
4490
4560
|
try {
|
|
@@ -4499,10 +4569,19 @@ var SitePongClient = class {
|
|
|
4499
4569
|
if (!response.ok) {
|
|
4500
4570
|
throw new Error(`HTTP ${response.status}`);
|
|
4501
4571
|
}
|
|
4572
|
+
this.flushFailures = 0;
|
|
4502
4573
|
this.log(`Flushed ${errors.length} errors`);
|
|
4503
4574
|
} catch (err) {
|
|
4575
|
+
this.flushFailures++;
|
|
4576
|
+
if (this.flushFailures >= MAX_FLUSH_FAILURES4) {
|
|
4577
|
+
this.disabled = true;
|
|
4578
|
+
console.warn(
|
|
4579
|
+
`[SitePong] SDK disabled after ${MAX_FLUSH_FAILURES4} consecutive failures. Events will no longer be sent. This may be due to CORS issues or network problems. Check that ${this.config.endpoint} is accessible and has proper CORS headers.`
|
|
4580
|
+
);
|
|
4581
|
+
return;
|
|
4582
|
+
}
|
|
4504
4583
|
this.errorQueue.unshift(...errors);
|
|
4505
|
-
this.log(
|
|
4584
|
+
this.log(`Failed to flush errors (attempt ${this.flushFailures}/${MAX_FLUSH_FAILURES4}):`, err);
|
|
4506
4585
|
}
|
|
4507
4586
|
}
|
|
4508
4587
|
formatError(error, additionalContext) {
|
|
@@ -4612,6 +4691,9 @@ var setContext = sitepong.setContext.bind(sitepong);
|
|
|
4612
4691
|
var setUser = sitepong.setUser.bind(sitepong);
|
|
4613
4692
|
var setTags = sitepong.setTags.bind(sitepong);
|
|
4614
4693
|
var flush = sitepong.flush.bind(sitepong);
|
|
4694
|
+
var isInitialized = sitepong.isInitialized.bind(sitepong);
|
|
4695
|
+
var clearUser = sitepong.clearUser.bind(sitepong);
|
|
4696
|
+
var addBreadcrumb = sitepong.addBreadcrumb.bind(sitepong);
|
|
4615
4697
|
var getFlag = sitepong.getFlag.bind(sitepong);
|
|
4616
4698
|
var getAllFlags = sitepong.getAllFlags.bind(sitepong);
|
|
4617
4699
|
var getVariant = sitepong.getVariant.bind(sitepong);
|
|
@@ -4659,10 +4741,13 @@ var flushProfiles = sitepong.flushProfiles.bind(sitepong);
|
|
|
4659
4741
|
var src_default = sitepong;
|
|
4660
4742
|
|
|
4661
4743
|
exports.TracePropagator = TracePropagator;
|
|
4744
|
+
exports.addBreadcrumb = addBreadcrumb;
|
|
4662
4745
|
exports.areFlagsReady = areFlagsReady;
|
|
4663
4746
|
exports.captureError = captureError;
|
|
4664
4747
|
exports.captureMessage = captureMessage;
|
|
4665
4748
|
exports.clearAnonymousId = clearAnonymousId;
|
|
4749
|
+
exports.clearUser = clearUser;
|
|
4750
|
+
exports.client = sitepong;
|
|
4666
4751
|
exports.createTraceContext = createTraceContext;
|
|
4667
4752
|
exports.cronCheckin = cronCheckin;
|
|
4668
4753
|
exports.cronStart = cronStart;
|
|
@@ -4695,6 +4780,7 @@ exports.getWebVitals = getWebVitals;
|
|
|
4695
4780
|
exports.group = group;
|
|
4696
4781
|
exports.identify = identify;
|
|
4697
4782
|
exports.init = init;
|
|
4783
|
+
exports.isInitialized = isInitialized;
|
|
4698
4784
|
exports.isReplayRecording = isReplayRecording;
|
|
4699
4785
|
exports.metricDistribution = metricDistribution;
|
|
4700
4786
|
exports.metricGauge = metricGauge;
|