@active-reach/web-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.
Files changed (80) hide show
  1. package/README.md +576 -0
  2. package/dist/aegis-sw.js +1 -0
  3. package/dist/aegis.min.js +2 -0
  4. package/dist/aegis.min.js.map +1 -0
  5. package/dist/analytics-B11keZ55.mjs +1854 -0
  6. package/dist/analytics-B11keZ55.mjs.map +1 -0
  7. package/dist/cdn.d.ts +18 -0
  8. package/dist/cdn.d.ts.map +1 -0
  9. package/dist/core/analytics.d.ts +47 -0
  10. package/dist/core/analytics.d.ts.map +1 -0
  11. package/dist/core/queue.d.ts +35 -0
  12. package/dist/core/queue.d.ts.map +1 -0
  13. package/dist/core/sdk-config-poller.d.ts +59 -0
  14. package/dist/core/sdk-config-poller.d.ts.map +1 -0
  15. package/dist/core/session.d.ts +41 -0
  16. package/dist/core/session.d.ts.map +1 -0
  17. package/dist/core/transport.d.ts +50 -0
  18. package/dist/core/transport.d.ts.map +1 -0
  19. package/dist/inapp/AegisInAppManager.d.ts +126 -0
  20. package/dist/inapp/AegisInAppManager.d.ts.map +1 -0
  21. package/dist/inapp/index.d.ts +4 -0
  22. package/dist/inapp/index.d.ts.map +1 -0
  23. package/dist/inapp/renderPreview.d.ts +25 -0
  24. package/dist/inapp/renderPreview.d.ts.map +1 -0
  25. package/dist/index.d.ts +23 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +4296 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/integrations/react.d.ts +19 -0
  30. package/dist/integrations/react.d.ts.map +1 -0
  31. package/dist/placements/AegisPlacementManager.d.ts +88 -0
  32. package/dist/placements/AegisPlacementManager.d.ts.map +1 -0
  33. package/dist/plugins/registry.d.ts +13 -0
  34. package/dist/plugins/registry.d.ts.map +1 -0
  35. package/dist/push/AegisWebPush.d.ts +51 -0
  36. package/dist/push/AegisWebPush.d.ts.map +1 -0
  37. package/dist/push/AegisWebPush.js +203 -0
  38. package/dist/push/AegisWebPush.js.map +1 -0
  39. package/dist/react.js +70 -0
  40. package/dist/react.js.map +1 -0
  41. package/dist/snippet.min.js +1 -0
  42. package/dist/triggers/TriggerEngine.d.ts +114 -0
  43. package/dist/triggers/TriggerEngine.d.ts.map +1 -0
  44. package/dist/triggers/index.d.ts +3 -0
  45. package/dist/triggers/index.d.ts.map +1 -0
  46. package/dist/types/config.d.ts +73 -0
  47. package/dist/types/config.d.ts.map +1 -0
  48. package/dist/types/events.d.ts +127 -0
  49. package/dist/types/events.d.ts.map +1 -0
  50. package/dist/types/index.d.ts +5 -0
  51. package/dist/types/index.d.ts.map +1 -0
  52. package/dist/types/plugin.d.ts +21 -0
  53. package/dist/types/plugin.d.ts.map +1 -0
  54. package/dist/types/type-safe-events.d.ts +14 -0
  55. package/dist/types/type-safe-events.d.ts.map +1 -0
  56. package/dist/utils/canonical-identity.d.ts +29 -0
  57. package/dist/utils/canonical-identity.d.ts.map +1 -0
  58. package/dist/utils/consent.d.ts +40 -0
  59. package/dist/utils/consent.d.ts.map +1 -0
  60. package/dist/utils/debounce.d.ts +3 -0
  61. package/dist/utils/debounce.d.ts.map +1 -0
  62. package/dist/utils/device.d.ts +6 -0
  63. package/dist/utils/device.d.ts.map +1 -0
  64. package/dist/utils/identity.d.ts +27 -0
  65. package/dist/utils/identity.d.ts.map +1 -0
  66. package/dist/utils/index.d.ts +7 -0
  67. package/dist/utils/index.d.ts.map +1 -0
  68. package/dist/utils/logger.d.ts +15 -0
  69. package/dist/utils/logger.d.ts.map +1 -0
  70. package/dist/utils/storage.d.ts +20 -0
  71. package/dist/utils/storage.d.ts.map +1 -0
  72. package/dist/utils/url-parser.d.ts +23 -0
  73. package/dist/utils/url-parser.d.ts.map +1 -0
  74. package/dist/utils/uuid.d.ts +4 -0
  75. package/dist/utils/uuid.d.ts.map +1 -0
  76. package/dist/widgets/AegisWidgetManager.d.ts +194 -0
  77. package/dist/widgets/AegisWidgetManager.d.ts.map +1 -0
  78. package/dist/widgets/index.d.ts +3 -0
  79. package/dist/widgets/index.d.ts.map +1 -0
  80. package/package.json +73 -0
@@ -0,0 +1,126 @@
1
+ /**
2
+ * AegisInAppManager - Web SDK In-App Messaging Module
3
+ *
4
+ * Real-time SSE architecture with client-side evaluation.
5
+ *
6
+ * Security:
7
+ * - XSS Protection: Uses DOM APIs (createElement, textContent) instead of innerHTML
8
+ * - URL Validation: Prevents javascript: protocol injection
9
+ * - CSP Compatible: No inline styles in HTML strings
10
+ *
11
+ * Architecture:
12
+ * - Connects to SSE endpoint for real-time campaign updates
13
+ * - Initial fetch on load, then SSE for updates
14
+ * - Caches campaigns locally in memory
15
+ * - Evaluates trigger rules client-side
16
+ * - Tracks events (impression, click, dismiss) asynchronously
17
+ */
18
+ export interface InAppCampaign {
19
+ id: string;
20
+ type: 'modal' | 'banner' | 'tooltip' | 'full_screen' | 'half_interstitial' | 'alert' | 'pip';
21
+ sub_type?: string;
22
+ title: string;
23
+ body: string;
24
+ image_url?: string;
25
+ video_url?: string;
26
+ action_url?: string;
27
+ button_text?: string;
28
+ background_color?: string;
29
+ text_color?: string;
30
+ priority: number;
31
+ expires_at?: string;
32
+ frequency?: {
33
+ max_impressions?: number;
34
+ max_impressions_per_day?: number;
35
+ cooldown_seconds?: number;
36
+ };
37
+ interactive_config?: Record<string, unknown>;
38
+ client_trigger?: {
39
+ type: string;
40
+ config?: Record<string, unknown>;
41
+ };
42
+ assigned_variant_id?: string;
43
+ }
44
+ export interface AegisInAppConfig {
45
+ writeKey: string;
46
+ apiHost?: string;
47
+ userId?: string;
48
+ contactId?: string;
49
+ organizationId?: string;
50
+ debugMode?: boolean;
51
+ enableSSE?: boolean;
52
+ }
53
+ export declare class AegisInAppManager {
54
+ private writeKey;
55
+ private apiHost;
56
+ private userId?;
57
+ private contactId?;
58
+ private organizationId?;
59
+ private debugMode;
60
+ private enableSSE;
61
+ private campaigns;
62
+ private displayedCampaigns;
63
+ private eventSource?;
64
+ private isInitialized;
65
+ private reconnectAttempts;
66
+ private maxReconnectAttempts;
67
+ constructor(config: AegisInAppConfig);
68
+ initialize(): Promise<void>;
69
+ updateUserId(userId: string): void;
70
+ updateContactId(contactId: string): void;
71
+ private connectSSE;
72
+ private disconnectSSE;
73
+ private attemptReconnect;
74
+ private refreshCampaigns;
75
+ private detectDeviceType;
76
+ private isNewUser;
77
+ private getABAssignments;
78
+ private processABAssignments;
79
+ private getVariantId;
80
+ private tryDisplayNextCampaign;
81
+ private displayCampaign;
82
+ /**
83
+ * Renders interactive sub-type campaigns (spin wheel, NPS, quiz, etc.)
84
+ * using DOM-safe rendering. These sub-types use the campaign's
85
+ * interactive_config payload for type-specific behavior.
86
+ */
87
+ private renderInteractive;
88
+ private renderNPSSurvey;
89
+ private renderCountdownOffer;
90
+ private renderStarRating;
91
+ private renderQuickPoll;
92
+ private renderQuiz;
93
+ private createOverlay;
94
+ private createCTAButton;
95
+ private addCloseButton;
96
+ private renderBanner;
97
+ private renderModal;
98
+ private renderFullScreen;
99
+ private renderHalfInterstitial;
100
+ private renderAlert;
101
+ private renderPIP;
102
+ private removeBanner;
103
+ private removeModal;
104
+ private renderTooltip;
105
+ private addAnimationStyles;
106
+ private sanitizeUrl;
107
+ private sanitizeColor;
108
+ /**
109
+ * Track in-app event via the standard Event Ingress pipeline.
110
+ *
111
+ * Events flow: SDK → Event Ingress → Kafka → Governance Consumer
112
+ * → Event Engine → ClickHouse (in_app_events + events_with_ttl)
113
+ *
114
+ * The event_type uses the canonical prefix `in_app.` so the event
115
+ * switchboard maps it to the correct canonical form:
116
+ * in_app.impression → engagement.view
117
+ * in_app.clicked → engagement.click
118
+ * in_app.dismissed → engagement.dismiss
119
+ */
120
+ private trackEvent;
121
+ private log;
122
+ destroy(options?: {
123
+ clearABState?: boolean;
124
+ }): void;
125
+ }
126
+ //# sourceMappingURL=AegisInAppManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AegisInAppManager.d.ts","sourceRoot":"","sources":["../../src/inapp/AegisInAppManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { AegisInAppManager } from './AegisInAppManager';
2
+ export type { InAppCampaign, AegisInAppConfig } from './AegisInAppManager';
3
+ export { renderPreview } from './renderPreview';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/inapp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * renderPreview — Static Preview Renderer for Dashboard iframe (Critical Fix A)
3
+ *
4
+ * Used exclusively by the sandboxed iframe preview route
5
+ * (`/api/preview/in-app/route.tsx`). Renders a single campaign into the
6
+ * current document body using the same rendering logic as the production SDK.
7
+ *
8
+ * Data flow:
9
+ * editor-sidebar.tsx → onChange → formState → postMessage({type:'preview_update', config})
10
+ * → iframe receives message → calls renderPreview(config)
11
+ *
12
+ * This ensures 100% fidelity between the dashboard editor preview and
13
+ * production rendering — both use the same SDK code.
14
+ */
15
+ import type { InAppCampaign } from './AegisInAppManager';
16
+ /**
17
+ * Renders a single in-app campaign into the current document for preview.
18
+ *
19
+ * Creates a temporary AegisInAppManager with preview-only config (no tracking,
20
+ * no SSE, no network requests). Calls the same rendering pipeline as production.
21
+ */
22
+ export declare function renderPreview(config: InAppCampaign & {
23
+ interactive_config?: Record<string, unknown>;
24
+ }): void;
25
+ //# sourceMappingURL=renderPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderPreview.d.ts","sourceRoot":"","sources":["../../src/inapp/renderPreview.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG;IAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAAG,IAAI,CAoC5G"}
@@ -0,0 +1,23 @@
1
+ import { Aegis } from './core/analytics';
2
+ declare const aegis: Aegis;
3
+ export default aegis;
4
+ export { Aegis } from './core/analytics';
5
+ export type { AegisConfig, CellEndpoint, CellRegion } from './types/config';
6
+ export type { AegisEvent, TrackEvent, IdentifyEvent, PageEvent, GroupEvent, AliasEvent, EventContext, BatchPayload, BatchResponse, } from './types/events';
7
+ export type { Plugin, PluginRegistry } from './types/plugin';
8
+ export { debounce, throttle } from './utils/debounce';
9
+ export type { ConsentPreferences, ConsentCategory, ConsentStatus, } from './utils/consent';
10
+ export { AegisInAppManager } from './inapp';
11
+ export type { InAppCampaign, AegisInAppConfig } from './inapp';
12
+ export { renderPreview } from './inapp';
13
+ export { AegisPlacementManager } from './placements/AegisPlacementManager';
14
+ export type { PlacementContent, PlacementSlot, AegisPlacementConfig, } from './placements/AegisPlacementManager';
15
+ export { AegisWidgetManager } from './widgets';
16
+ export type { WidgetConfig, GamificationPrize, AegisWidgetConfig, } from './widgets';
17
+ export { TriggerEngine } from './triggers';
18
+ export type { TriggerRule, ScrollDepthConfig, TimeOnPageConfig, ExitIntentConfig, InactivityConfig, TriggerEvent, } from './triggers';
19
+ export { SdkConfigPoller } from './core/sdk-config-poller';
20
+ export type { SdkConfig, SdkConfigPollerOptions, ConfigChangeCallback } from './core/sdk-config-poller';
21
+ export { AegisWebPush } from './push/AegisWebPush';
22
+ export type { AegisWebPushConfig, AegisAPIClient, ContactIdentity, PushEventTracker, } from './push/AegisWebPush';
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,QAAA,MAAM,KAAK,OAAc,CAAC;AAE1B,eAAe,KAAK,CAAC;AAErB,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5E,YAAY,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACV,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,YAAY,EACV,gBAAgB,EAChB,aAAa,EACb,oBAAoB,GACrB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EACV,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACb,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,YAAY,EAAE,SAAS,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAExG,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,gBAAgB,GACjB,MAAM,qBAAqB,CAAC"}