@digia-engage/core 1.1.1 → 2.0.0-rc.2

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 (109) hide show
  1. package/README.md +134 -51
  2. package/android/build.gradle +3 -3
  3. package/android/src/main/java/com/digia/engage/rn/DigiaModule.kt +52 -8
  4. package/android/src/main/java/com/digia/engage/rn/DigiaSlotViewManager.kt +6 -2
  5. package/android/src/main/java/com/digia/engage/rn/DigiaViewManager.kt +1 -0
  6. package/ios/DigiaEngageModule.m +7 -1
  7. package/ios/DigiaHostViewManager.swift +20 -20
  8. package/ios/DigiaModule.swift +8 -4
  9. package/lib/commonjs/Digia.js +390 -4
  10. package/lib/commonjs/Digia.js.map +1 -1
  11. package/lib/commonjs/DigiaAnchorView.js +35 -3
  12. package/lib/commonjs/DigiaAnchorView.js.map +1 -1
  13. package/lib/commonjs/DigiaGuideController.js +59 -0
  14. package/lib/commonjs/DigiaGuideController.js.map +1 -0
  15. package/lib/commonjs/DigiaHealthReporter.js +45 -0
  16. package/lib/commonjs/DigiaHealthReporter.js.map +1 -0
  17. package/lib/commonjs/DigiaProvider.js +1081 -0
  18. package/lib/commonjs/DigiaProvider.js.map +1 -0
  19. package/lib/commonjs/DigiaSlotView.js +18 -3
  20. package/lib/commonjs/DigiaSlotView.js.map +1 -1
  21. package/lib/commonjs/NativeDigiaEngage.js +14 -8
  22. package/lib/commonjs/NativeDigiaEngage.js.map +1 -1
  23. package/lib/commonjs/actionHandler.js +316 -0
  24. package/lib/commonjs/actionHandler.js.map +1 -0
  25. package/lib/commonjs/defaultInAppBrowser.js +31 -0
  26. package/lib/commonjs/defaultInAppBrowser.js.map +1 -0
  27. package/lib/commonjs/digiaAnchorRegistry.js +32 -0
  28. package/lib/commonjs/digiaAnchorRegistry.js.map +1 -0
  29. package/lib/commonjs/frequencyEvaluator.js +70 -0
  30. package/lib/commonjs/frequencyEvaluator.js.map +1 -0
  31. package/lib/commonjs/frequencyStore.js +70 -0
  32. package/lib/commonjs/frequencyStore.js.map +1 -0
  33. package/lib/commonjs/index.js +7 -0
  34. package/lib/commonjs/index.js.map +1 -1
  35. package/lib/commonjs/templateTypes.js +2 -0
  36. package/lib/commonjs/templateTypes.js.map +1 -0
  37. package/lib/module/Digia.js +389 -4
  38. package/lib/module/Digia.js.map +1 -1
  39. package/lib/module/DigiaAnchorView.js +33 -1
  40. package/lib/module/DigiaAnchorView.js.map +1 -1
  41. package/lib/module/DigiaGuideController.js +53 -0
  42. package/lib/module/DigiaGuideController.js.map +1 -0
  43. package/lib/module/DigiaHealthReporter.js +38 -0
  44. package/lib/module/DigiaHealthReporter.js.map +1 -0
  45. package/lib/module/DigiaProvider.js +1074 -0
  46. package/lib/module/DigiaProvider.js.map +1 -0
  47. package/lib/module/DigiaSlotView.js +20 -5
  48. package/lib/module/DigiaSlotView.js.map +1 -1
  49. package/lib/module/NativeDigiaEngage.js +14 -8
  50. package/lib/module/NativeDigiaEngage.js.map +1 -1
  51. package/lib/module/actionHandler.js +311 -0
  52. package/lib/module/actionHandler.js.map +1 -0
  53. package/lib/module/defaultInAppBrowser.js +25 -0
  54. package/lib/module/defaultInAppBrowser.js.map +1 -0
  55. package/lib/module/digiaAnchorRegistry.js +26 -0
  56. package/lib/module/digiaAnchorRegistry.js.map +1 -0
  57. package/lib/module/frequencyEvaluator.js +61 -0
  58. package/lib/module/frequencyEvaluator.js.map +1 -0
  59. package/lib/module/frequencyStore.js +64 -0
  60. package/lib/module/frequencyStore.js.map +1 -0
  61. package/lib/module/index.js +1 -0
  62. package/lib/module/index.js.map +1 -1
  63. package/lib/module/templateTypes.js +2 -0
  64. package/lib/module/templateTypes.js.map +1 -0
  65. package/lib/typescript/Digia.d.ts +35 -3
  66. package/lib/typescript/Digia.d.ts.map +1 -1
  67. package/lib/typescript/DigiaAnchorView.d.ts +5 -1
  68. package/lib/typescript/DigiaAnchorView.d.ts.map +1 -1
  69. package/lib/typescript/DigiaGuideController.d.ts +30 -0
  70. package/lib/typescript/DigiaGuideController.d.ts.map +1 -0
  71. package/lib/typescript/DigiaHealthReporter.d.ts +24 -0
  72. package/lib/typescript/DigiaHealthReporter.d.ts.map +1 -0
  73. package/lib/typescript/DigiaProvider.d.ts +3 -0
  74. package/lib/typescript/DigiaProvider.d.ts.map +1 -0
  75. package/lib/typescript/DigiaSlotView.d.ts.map +1 -1
  76. package/lib/typescript/NativeDigiaEngage.d.ts +10 -6
  77. package/lib/typescript/NativeDigiaEngage.d.ts.map +1 -1
  78. package/lib/typescript/actionHandler.d.ts +20 -0
  79. package/lib/typescript/actionHandler.d.ts.map +1 -0
  80. package/lib/typescript/defaultInAppBrowser.d.ts +3 -0
  81. package/lib/typescript/defaultInAppBrowser.d.ts.map +1 -0
  82. package/lib/typescript/digiaAnchorRegistry.d.ts +15 -0
  83. package/lib/typescript/digiaAnchorRegistry.d.ts.map +1 -0
  84. package/lib/typescript/frequencyEvaluator.d.ts +14 -0
  85. package/lib/typescript/frequencyEvaluator.d.ts.map +1 -0
  86. package/lib/typescript/frequencyStore.d.ts +7 -0
  87. package/lib/typescript/frequencyStore.d.ts.map +1 -0
  88. package/lib/typescript/index.d.ts +1 -0
  89. package/lib/typescript/index.d.ts.map +1 -1
  90. package/lib/typescript/templateTypes.d.ts +140 -0
  91. package/lib/typescript/templateTypes.d.ts.map +1 -0
  92. package/lib/typescript/types.d.ts +163 -4
  93. package/lib/typescript/types.d.ts.map +1 -1
  94. package/package.json +15 -3
  95. package/src/Digia.ts +439 -4
  96. package/src/DigiaAnchorView.tsx +30 -2
  97. package/src/DigiaGuideController.ts +61 -0
  98. package/src/DigiaHealthReporter.ts +43 -0
  99. package/src/DigiaProvider.tsx +778 -0
  100. package/src/DigiaSlotView.tsx +26 -6
  101. package/src/NativeDigiaEngage.ts +28 -13
  102. package/src/actionHandler.ts +311 -0
  103. package/src/defaultInAppBrowser.ts +31 -0
  104. package/src/digiaAnchorRegistry.ts +27 -0
  105. package/src/frequencyEvaluator.ts +57 -0
  106. package/src/frequencyStore.ts +79 -0
  107. package/src/index.ts +1 -0
  108. package/src/templateTypes.ts +121 -0
  109. package/src/types.ts +132 -6
@@ -6,6 +6,13 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Digia = void 0;
7
7
  var _reactNative = require("react-native");
8
8
  var _NativeDigiaEngage = require("./NativeDigiaEngage");
9
+ var _DigiaHealthReporter = require("./DigiaHealthReporter");
10
+ var _DigiaGuideController = require("./DigiaGuideController");
11
+ var _actionHandler = require("./actionHandler");
12
+ var _reactNativeUuid = _interopRequireDefault(require("react-native-uuid"));
13
+ var _frequencyStore = require("./frequencyStore");
14
+ var _frequencyEvaluator = require("./frequencyEvaluator");
15
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
16
  /**
10
17
  * High-level Digia Engage SDK wrapper.
11
18
  *
@@ -15,7 +22,7 @@ var _NativeDigiaEngage = require("./NativeDigiaEngage");
15
22
  * import { Digia } from '@digia/engage-react-native';
16
23
  *
17
24
  * // In your App entry point (e.g. App.tsx):
18
- * await Digia.initialize({ apiKey: 'YOUR_API_KEY' });
25
+ * await Digia.initialize({ projectId: 'YOUR_PROJECT_ID' });
19
26
  *
20
27
  * // Whenever your navigation screen changes:
21
28
  * Digia.setCurrentScreen('Home');
@@ -23,6 +30,9 @@ var _NativeDigiaEngage = require("./NativeDigiaEngage");
23
30
  * ```
24
31
  */
25
32
 
33
+ const PRODUCTION_API_ROOT = 'https://app.digia.tech';
34
+ const SANDBOX_API_ROOT = 'https://dev.digia.tech';
35
+ const DIGIA_SDK_VERSION = '1.0.0';
26
36
  class DigiaClass {
27
37
  _plugins = new Map();
28
38
  // Tracks whether the native bridge plugin (RNEventBridgePlugin) has been
@@ -32,6 +42,13 @@ class DigiaClass {
32
42
  // the full InAppPayload when overlay lifecycle events arrive from native.
33
43
  _activePayloads = new Map();
34
44
  _engageSubscription = null;
45
+ _projectId = '';
46
+ _deviceId = '';
47
+ _apiBaseUrl = '';
48
+ _logLevel = 'error';
49
+ _currentScreen = null;
50
+ _campaignsByKey = new Map();
51
+ _registeredAnchorKeys = new Set();
35
52
 
36
53
  /**
37
54
  * Initialise the Digia Engage SDK.
@@ -42,7 +59,26 @@ class DigiaClass {
42
59
  async initialize(config) {
43
60
  const environment = config.environment ?? 'production';
44
61
  const logLevel = config.logLevel ?? 'error';
45
- await _NativeDigiaEngage.nativeDigiaModule.initialize(config.apiKey, environment, logLevel);
62
+ this._projectId = config.projectId;
63
+ this._apiBaseUrl = this._resolveApiBaseUrl(config);
64
+ this._logLevel = logLevel;
65
+ this._fontFamily = config.fontFamily?.trim() || undefined;
66
+ _DigiaHealthReporter.digiaHealthReporter.init(config.projectId, this._apiBaseUrl);
67
+ _actionHandler.digiaActionHandler.configure({
68
+ onAction: config.onAction,
69
+ routeViaSystemLinking: config.linking?.routeViaSystemLinking ?? true,
70
+ inAppBrowser: config.linking?.inAppBrowser
71
+ });
72
+ try {
73
+ await _NativeDigiaEngage.nativeDigiaModule.initialize(config.projectId, environment, logLevel, config.baseUrl, config.fontFamily);
74
+ } catch (e) {
75
+ // TODO: TO BE PICKED LATER @aditya-digia — health event reporting being removed
76
+ // digiaHealthReporter.report(HealthEventType.fetch_failed, { error_code: 0, platform: 'react_native' });
77
+ throw e;
78
+ }
79
+ this._deviceId = await this._loadOrCreateDeviceId();
80
+ await _frequencyStore.frequencyStore.checkProjectId(config.projectId);
81
+ await this._refreshCampaignStore();
46
82
  }
47
83
 
48
84
  /**
@@ -56,7 +92,7 @@ class DigiaClass {
56
92
  * ```ts
57
93
  * import { DigiaMoEngagePlugin } from '@digia/moengage-plugin';
58
94
  *
59
- * await Digia.initialize({ apiKey: 'YOUR_KEY' });
95
+ * await Digia.initialize({ projectId: 'YOUR_PROJECT_ID' });
60
96
  * Digia.register(new DigiaMoEngagePlugin({ moEngage: MoEngage }));
61
97
  * ```
62
98
  */
@@ -72,6 +108,7 @@ class DigiaClass {
72
108
  this._nativeBridgeWired = true;
73
109
  }
74
110
  plugin.setup(this);
111
+ plugin.reportHealth?.(_DigiaHealthReporter.digiaHealthReporter);
75
112
  this._plugins.set(plugin.identifier, plugin);
76
113
  }
77
114
 
@@ -93,20 +130,104 @@ class DigiaClass {
93
130
  * All registered plugins will have forwardScreen() called automatically.
94
131
  */
95
132
  setCurrentScreen(name) {
133
+ this._currentScreen = name;
96
134
  _NativeDigiaEngage.nativeDigiaModule.setCurrentScreen(name);
97
135
  this._plugins.forEach(plugin => plugin.forwardScreen(name));
98
136
  }
137
+ registerAnchor(anchorKey, _screenName) {
138
+ const cleanAnchorKey = anchorKey.trim();
139
+ if (!cleanAnchorKey) return;
140
+ this._registeredAnchorKeys.add(cleanAnchorKey);
141
+ }
142
+ unregisterAnchor(anchorKey) {
143
+ this._registeredAnchorKeys.delete(anchorKey);
144
+ }
145
+
146
+ /**
147
+ * Global font family configured via {@link initialize}, or `undefined` when
148
+ * none was set. Used by the JS-rendered guide overlays (tooltip/spotlight)
149
+ * so their text matches native-rendered campaigns.
150
+ */
151
+ get fontFamily() {
152
+ return this._fontFamily;
153
+ }
99
154
 
100
155
  // ── DigiaDelegate ────────────────────────────────────────────────────────
101
156
  // Mirrors DigiaCEPDelegate on Android.
102
157
  // Forwards to the native DigiaCEPDelegate via the bridge.
103
158
 
104
- onCampaignTriggered(payload) {
159
+ async onCampaignTriggered(payload) {
160
+ if (!this._nativeBridgeWired) {
161
+ _DigiaHealthReporter.digiaHealthReporter.report(_DigiaHealthReporter.HealthEventType.plugin_not_registered, {
162
+ campaign_key: payload.id
163
+ });
164
+ }
165
+ const campaignKey = this._extractCampaignKey(payload);
166
+ this._log(`onCampaignTriggered payloadId=${payload.id} extractedKey=${campaignKey} knownKeys=[${[...this._campaignsByKey.keys()].join(', ')}]`);
167
+ if (campaignKey) {
168
+ const campaign = this._campaignsByKey.get(campaignKey);
169
+ if (campaign && (0, _frequencyEvaluator.hasPolicy)(campaign.frequency)) {
170
+ const policy = campaign.frequency;
171
+ const isSession = (0, _frequencyEvaluator.isSessionPolicy)(policy);
172
+ const state = await this._getFrequencyState(campaignKey, isSession);
173
+ const result = (0, _frequencyEvaluator.evaluate)(policy, state, Date.now());
174
+ if (!result.allow) {
175
+ this._log(`frequency_capped campaign_key=${campaignKey} reason=${result.reason}`);
176
+ return;
177
+ }
178
+ }
179
+ if (campaign?.campaign_type === 'inline' || campaign?.campaign_type === 'survey') {
180
+ this._log(`${campaign.campaign_type} campaign triggered campaign_key=${campaignKey}, forwarding to native`);
181
+ this._activePayloads.set(payload.id, payload);
182
+ if (campaign.campaign_type === 'inline') {
183
+ this._emitSlotWidth(campaign);
184
+ }
185
+ _NativeDigiaEngage.nativeDigiaModule.triggerCampaign(payload.id, payload.content, payload.cepContext);
186
+ return;
187
+ }
188
+ if (campaign?.campaign_type === 'guide') {
189
+ const config = this._parseTemplateConfig(campaign);
190
+ if (!config || config.templateType !== 'tooltip' && config.templateType !== 'spotlight' || config.steps.length === 0) {
191
+ _DigiaHealthReporter.digiaHealthReporter.report(_DigiaHealthReporter.HealthEventType.anchor_not_on_screen, {
192
+ campaign_key: campaignKey,
193
+ reason: 'guide_campaign_has_no_steps'
194
+ });
195
+ return;
196
+ }
197
+ this._activePayloads.set(payload.id, payload);
198
+ const digiaId = campaign._id ?? campaign.id ?? campaignKey;
199
+ const mounted = _DigiaGuideController.digiaGuideController.start({
200
+ payloadId: payload.id,
201
+ campaignKey,
202
+ campaignId: digiaId,
203
+ config,
204
+ onExperienceEvent: event => this._onGuideLifecycleEvent(event, payload.id, campaignKey, digiaId)
205
+ });
206
+ this._log(`guide trigger campaign_key=${campaignKey} mounted=${mounted}`);
207
+ if (!mounted) {
208
+ _DigiaHealthReporter.digiaHealthReporter.report(_DigiaHealthReporter.HealthEventType.host_not_mounted, {
209
+ campaign_key: campaignKey,
210
+ payload_id: payload.id
211
+ });
212
+ }
213
+ return;
214
+ }
215
+ if (!campaign) {
216
+ this._log(`campaign_key_mismatch: no campaign found for key="${campaignKey}"`);
217
+ _DigiaHealthReporter.digiaHealthReporter.report(_DigiaHealthReporter.HealthEventType.campaign_key_mismatch, {
218
+ campaign_key: campaignKey,
219
+ payload_id: payload.id,
220
+ available_campaign_keys: [...this._campaignsByKey.keys()]
221
+ });
222
+ return;
223
+ }
224
+ }
105
225
  this._activePayloads.set(payload.id, payload);
106
226
  _NativeDigiaEngage.nativeDigiaModule.triggerCampaign(payload.id, payload.content, payload.cepContext);
107
227
  }
108
228
  onCampaignInvalidated(campaignId) {
109
229
  this._activePayloads.delete(campaignId);
230
+ _DigiaGuideController.digiaGuideController.cancel(campaignId);
110
231
  _NativeDigiaEngage.nativeDigiaModule.invalidateCampaign(campaignId);
111
232
  }
112
233
 
@@ -127,23 +248,27 @@ class DigiaClass {
127
248
  _forwardExperienceEvent(data) {
128
249
  const payload = this._activePayloads.get(data.campaignId);
129
250
  if (!payload) return;
251
+ const campaignKey = this._extractCampaignKey(payload);
130
252
  let event;
131
253
  switch (data.type) {
132
254
  case 'impressed':
133
255
  event = {
134
256
  type: 'impressed'
135
257
  };
258
+ if (campaignKey) void this._bumpFrequencyImpression(campaignKey);
136
259
  break;
137
260
  case 'clicked':
138
261
  event = {
139
262
  type: 'clicked',
140
263
  elementId: data.elementId
141
264
  };
265
+ if (campaignKey) void this._applyStopOn(campaignKey, 'click');
142
266
  break;
143
267
  case 'dismissed':
144
268
  event = {
145
269
  type: 'dismissed'
146
270
  };
271
+ if (campaignKey) void this._applyStopOn(campaignKey, 'dismiss');
147
272
  this._activePayloads.delete(data.campaignId);
148
273
  break;
149
274
  default:
@@ -151,6 +276,267 @@ class DigiaClass {
151
276
  }
152
277
  this._plugins.forEach(plugin => plugin.notifyEvent(event, payload));
153
278
  }
279
+ _onGuideLifecycleEvent(event, payloadId, campaignKey, campaignId) {
280
+ const eventName = this._guideEventName(event.type);
281
+ const properties = this._buildGuideProperties(event, campaignId, campaignKey);
282
+ this._plugins.forEach(p => p.track?.(eventName, properties));
283
+ if (event.type === 'viewed') {
284
+ void this._bumpFrequencyImpression(campaignKey);
285
+ }
286
+ if (event.type === 'clicked' || event.type === 'completed') {
287
+ void this._applyStopOn(campaignKey, 'click');
288
+ }
289
+ if (event.type === 'dismissed') {
290
+ void this._applyStopOn(campaignKey, 'dismiss');
291
+ }
292
+
293
+ // Notify plugins of CEP lifecycle termination (template cleanup) on exit events.
294
+ if (event.type === 'dismissed' || event.type === 'completed') {
295
+ const storedPayload = this._activePayloads.get(payloadId);
296
+ if (storedPayload) {
297
+ this._plugins.forEach(p => p.notifyEvent({
298
+ type: 'dismissed'
299
+ }, storedPayload));
300
+ this._activePayloads.delete(payloadId);
301
+ }
302
+ }
303
+ }
304
+ _guideEventName(type) {
305
+ switch (type) {
306
+ case 'viewed':
307
+ return 'Digia Experience Viewed';
308
+ case 'step_viewed':
309
+ return 'Digia Step Viewed';
310
+ case 'clicked':
311
+ return 'Digia Experience Clicked';
312
+ case 'step_clicked':
313
+ return 'Digia Step Clicked';
314
+ case 'dismissed':
315
+ return 'Digia Experience Dismissed';
316
+ case 'step_dismissed':
317
+ return 'Digia Step Dismissed';
318
+ case 'completed':
319
+ return 'Digia Experience Completed';
320
+ }
321
+ }
322
+ _buildGuideProperties(event, campaignId, campaignKey) {
323
+ const base = {
324
+ campaign_id: campaignId,
325
+ campaign_key: campaignKey,
326
+ campaign_type: 'guide',
327
+ display_style: event.displayStyle,
328
+ step_index: event.stepIndex + 1,
329
+ step_total: event.stepTotal,
330
+ anchor_key: event.anchorKey,
331
+ slot_key: null,
332
+ element_id: null,
333
+ cta_label: null,
334
+ action_type: null,
335
+ action_url: null,
336
+ dismiss_reason: null,
337
+ abandoned_at_step: null,
338
+ digia_sdk_version: DIGIA_SDK_VERSION,
339
+ digia_platform: 'react_native'
340
+ };
341
+ if (event.type === 'clicked' || event.type === 'step_clicked') {
342
+ base.element_id = event.elementId ?? null;
343
+ base.cta_label = event.ctaLabel;
344
+ base.action_type = event.actionType;
345
+ base.action_url = event.actionUrl ?? null;
346
+ } else if (event.type === 'dismissed' || event.type === 'step_dismissed') {
347
+ base.dismiss_reason = event.dismissReason;
348
+ base.abandoned_at_step = event.stepIndex + 1;
349
+ }
350
+ return base;
351
+ }
352
+ _resolveApiBaseUrl(config) {
353
+ const root = (config.baseUrl ?? (config.environment === 'sandbox' ? SANDBOX_API_ROOT : PRODUCTION_API_ROOT)).trim();
354
+ const cleanRoot = root.replace(/\/+$/, '');
355
+ return cleanRoot.endsWith('/api/v1') ? cleanRoot : `${cleanRoot}/api/v1`;
356
+ }
357
+ async _refreshCampaignStore() {
358
+ try {
359
+ this._log(`fetching campaigns from ${this._apiBaseUrl}/engage/sdk/getCampaigns`);
360
+ const campaigns = await this._sdkPost('getCampaigns');
361
+ this._campaignsByKey.clear();
362
+ if (campaigns.length > 0) {
363
+ this._log(`campaign[0] raw keys: ${JSON.stringify(Object.keys(campaigns[0]))}`);
364
+ }
365
+ campaigns.forEach(campaign => {
366
+ const raw = campaign;
367
+ const key = typeof raw.campaign_key === 'string' && raw.campaign_key || typeof raw.campaignKey === 'string' && raw.campaignKey || null;
368
+ const type = typeof raw.campaign_type === 'string' && raw.campaign_type || typeof raw.campaignType === 'string' && raw.campaignType || '';
369
+ if (key) {
370
+ this._campaignsByKey.set(key, {
371
+ ...campaign,
372
+ campaign_key: key,
373
+ campaign_type: type
374
+ });
375
+ }
376
+ });
377
+ this._log(`loaded ${campaigns.length} campaign(s): [${[...this._campaignsByKey.keys()].join(', ')}]`);
378
+ } catch (e) {
379
+ const reason = e instanceof Error ? e.message : String(e);
380
+ this._log(`getCampaigns FAILED: ${reason}`);
381
+ _DigiaHealthReporter.digiaHealthReporter.report(_DigiaHealthReporter.HealthEventType.fetch_failed, {
382
+ error_code: 0,
383
+ platform: 'react_native',
384
+ reason
385
+ });
386
+ }
387
+ }
388
+ async _sdkPost(path, body = {}) {
389
+ const res = await fetch(`${this._apiBaseUrl}/engage/sdk/${path}`, {
390
+ method: 'POST',
391
+ headers: {
392
+ 'Content-Type': 'application/json',
393
+ 'x-digia-project-id': this._projectId,
394
+ 'x-digia-device-id': this._deviceId
395
+ },
396
+ body: JSON.stringify(body)
397
+ });
398
+ if (!res.ok) {
399
+ throw new Error(`${path} failed: HTTP ${res.status}`);
400
+ }
401
+ const json = await res.json();
402
+ return this._extractApiResponse(json);
403
+ }
404
+ _extractApiResponse(json) {
405
+ if (Array.isArray(json)) return json;
406
+ if (json && typeof json === 'object') {
407
+ const obj = json;
408
+ const data = obj.data;
409
+ if (data && typeof data === 'object' && 'response' in data) {
410
+ const value = data.response;
411
+ if (value == null) throw new Error('SDK response.data.response is null');
412
+ return value;
413
+ }
414
+ if ('response' in obj) {
415
+ const value = obj.response;
416
+ if (value == null) throw new Error('SDK response.response is null');
417
+ return value;
418
+ }
419
+ }
420
+ throw new Error('SDK response missing data.response');
421
+ }
422
+ _emitSlotWidth(campaign) {
423
+ const raw = campaign;
424
+ const config = raw.templateConfig;
425
+ if (!config) {
426
+ this._log(`_emitSlotWidth: no templateConfig for campaign ${campaign.campaign_key}`);
427
+ return;
428
+ }
429
+ const slotKey = typeof config.slotKey === 'string' ? config.slotKey : null;
430
+ const width = typeof config.width === 'number' && config.width > 0 ? config.width : null;
431
+ this._log(`_emitSlotWidth slotKey=${slotKey} width=${width} campaign=${campaign.campaign_key}`);
432
+ if (slotKey) {
433
+ _reactNative.DeviceEventEmitter.emit('digiaSlotWidth', {
434
+ slotKey,
435
+ width
436
+ });
437
+ } else {
438
+ this._log(`_emitSlotWidth: no slotKey in templateConfig ${JSON.stringify(config)}`);
439
+ }
440
+ }
441
+ _extractCampaignKey(payload) {
442
+ const fromContent = this._extractString(payload.content, 'digiaKey', 'campaign_key', 'campaignKey');
443
+ if (fromContent) return fromContent;
444
+ const args = payload.content.args;
445
+ if (args && typeof args === 'object' && !Array.isArray(args)) {
446
+ const fromArgs = this._extractString(args, 'digiaKey', 'campaign_key', 'campaignKey');
447
+ if (fromArgs) return fromArgs;
448
+ }
449
+ if (this._campaignsByKey.has(payload.id)) return payload.id;
450
+ return null;
451
+ }
452
+ _extractString(data, ...keys) {
453
+ for (const key of keys) {
454
+ const value = data[key];
455
+ if (typeof value === 'string' && value.trim()) return value.trim();
456
+ }
457
+ return null;
458
+ }
459
+ _parseTemplateConfig(campaign) {
460
+ const c = campaign;
461
+ const raw = c.templateConfig;
462
+ if (!raw || typeof raw !== 'object') return null;
463
+ const type = raw.templateType;
464
+ if (type !== 'tooltip' && type !== 'spotlight' && type !== 'carousel') {
465
+ this._log(`unknown templateType="${type}" for campaign_key=${campaign.campaign_key}`);
466
+ return null;
467
+ }
468
+ if (type === 'carousel') {
469
+ return raw;
470
+ }
471
+ const steps = Array.isArray(raw.steps) ? raw.steps : [];
472
+ return {
473
+ ...raw,
474
+ templateType: type,
475
+ steps
476
+ };
477
+ }
478
+
479
+ // ── Device ID ────────────────────────────────────────────────────────────
480
+
481
+ async _loadOrCreateDeviceId() {
482
+ const DEVICE_ID_KEY = 'digia:device_id';
483
+ try {
484
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
485
+ const AsyncStorage = require('@react-native-async-storage/async-storage').default;
486
+ const stored = await AsyncStorage.getItem(DEVICE_ID_KEY);
487
+ if (stored) return stored;
488
+ const id = _reactNativeUuid.default.v4();
489
+ await AsyncStorage.setItem(DEVICE_ID_KEY, id);
490
+ return id;
491
+ } catch {
492
+ return _reactNativeUuid.default.v4();
493
+ }
494
+ }
495
+
496
+ // ── Frequency capping ────────────────────────────────────────────────────
497
+
498
+ async _getFrequencyState(campaignKey, isSession) {
499
+ return _frequencyStore.frequencyStore.get(campaignKey, isSession);
500
+ }
501
+ async _bumpFrequencyImpression(campaignKey) {
502
+ const campaign = this._campaignsByKey.get(campaignKey);
503
+ if (!campaign || !(0, _frequencyEvaluator.hasPolicy)(campaign.frequency)) return;
504
+ const isSession = (0, _frequencyEvaluator.isSessionPolicy)(campaign.frequency);
505
+ const now = Date.now();
506
+ const prev = await _frequencyStore.frequencyStore.get(campaignKey, isSession);
507
+ const next = {
508
+ shown_count: (prev?.shown_count ?? 0) + 1,
509
+ first_shown_at: prev?.first_shown_at ?? now,
510
+ last_shown_at: now,
511
+ stopped_at: prev?.stopped_at ?? null,
512
+ stopped_reason: prev?.stopped_reason ?? null
513
+ };
514
+ await _frequencyStore.frequencyStore.set(campaignKey, next, isSession);
515
+ }
516
+ async _applyStopOn(campaignKey, interactionType) {
517
+ const campaign = this._campaignsByKey.get(campaignKey);
518
+ const stopOn = campaign?.frequency?.stop_on;
519
+ if (!stopOn) return;
520
+ const matches = stopOn === 'any_action' || stopOn === interactionType;
521
+ if (!matches) return;
522
+ const isSession = (0, _frequencyEvaluator.isSessionPolicy)(campaign.frequency);
523
+ const prev = await _frequencyStore.frequencyStore.get(campaignKey, isSession);
524
+ if (prev?.stopped_at) return;
525
+ const now = Date.now();
526
+ const next = {
527
+ shown_count: prev?.shown_count ?? 0,
528
+ first_shown_at: prev?.first_shown_at ?? null,
529
+ last_shown_at: prev?.last_shown_at ?? null,
530
+ stopped_at: now,
531
+ stopped_reason: interactionType
532
+ };
533
+ await _frequencyStore.frequencyStore.set(campaignKey, next, isSession);
534
+ }
535
+ _log(message) {
536
+ if (this._logLevel !== 'verbose') return;
537
+ // eslint-disable-next-line no-console
538
+ console.log(`[Digia] ${message}`);
539
+ }
154
540
  }
155
541
  const Digia = exports.Digia = new DigiaClass();
156
542
  //# sourceMappingURL=Digia.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_NativeDigiaEngage","DigiaClass","_plugins","Map","_nativeBridgeWired","_activePayloads","_engageSubscription","initialize","config","environment","logLevel","nativeDigiaModule","apiKey","register","plugin","has","identifier","get","teardown","registerBridge","_startEngageListener","setup","set","unregister","pluginOrId","id","delete","setCurrentScreen","name","forEach","forwardScreen","onCampaignTriggered","payload","triggerCampaign","content","cepContext","onCampaignInvalidated","campaignId","invalidateCampaign","DeviceEventEmitter","addListener","data","_forwardExperienceEvent","event","type","elementId","notifyEvent","Digia","exports"],"sourceRoot":"../../src","sources":["Digia.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_NativeDigiaEngage","_DigiaHealthReporter","_DigiaGuideController","_actionHandler","_reactNativeUuid","_interopRequireDefault","_frequencyStore","_frequencyEvaluator","e","__esModule","default","PRODUCTION_API_ROOT","SANDBOX_API_ROOT","DIGIA_SDK_VERSION","DigiaClass","_plugins","Map","_nativeBridgeWired","_activePayloads","_engageSubscription","_projectId","_deviceId","_apiBaseUrl","_logLevel","_currentScreen","_campaignsByKey","_registeredAnchorKeys","Set","initialize","config","environment","logLevel","projectId","_resolveApiBaseUrl","_fontFamily","fontFamily","trim","undefined","digiaHealthReporter","init","digiaActionHandler","configure","onAction","routeViaSystemLinking","linking","inAppBrowser","nativeDigiaModule","baseUrl","_loadOrCreateDeviceId","frequencyStore","checkProjectId","_refreshCampaignStore","register","plugin","has","identifier","get","teardown","registerBridge","_startEngageListener","setup","reportHealth","set","unregister","pluginOrId","id","delete","setCurrentScreen","name","forEach","forwardScreen","registerAnchor","anchorKey","_screenName","cleanAnchorKey","add","unregisterAnchor","onCampaignTriggered","payload","report","HealthEventType","plugin_not_registered","campaign_key","campaignKey","_extractCampaignKey","_log","keys","join","campaign","hasPolicy","frequency","policy","isSession","isSessionPolicy","state","_getFrequencyState","result","evaluate","Date","now","allow","reason","campaign_type","_emitSlotWidth","triggerCampaign","content","cepContext","_parseTemplateConfig","templateType","steps","length","anchor_not_on_screen","digiaId","_id","mounted","digiaGuideController","start","payloadId","campaignId","onExperienceEvent","event","_onGuideLifecycleEvent","host_not_mounted","payload_id","campaign_key_mismatch","available_campaign_keys","onCampaignInvalidated","cancel","invalidateCampaign","DeviceEventEmitter","addListener","data","_forwardExperienceEvent","type","_bumpFrequencyImpression","elementId","_applyStopOn","notifyEvent","eventName","_guideEventName","properties","_buildGuideProperties","p","track","storedPayload","base","campaign_id","display_style","displayStyle","step_index","stepIndex","step_total","stepTotal","anchor_key","slot_key","element_id","cta_label","action_type","action_url","dismiss_reason","abandoned_at_step","digia_sdk_version","digia_platform","ctaLabel","actionType","actionUrl","dismissReason","root","cleanRoot","replace","endsWith","campaigns","_sdkPost","clear","JSON","stringify","Object","raw","key","campaignType","Error","message","String","fetch_failed","error_code","platform","path","body","res","fetch","method","headers","ok","status","json","_extractApiResponse","Array","isArray","obj","value","response","templateConfig","slotKey","width","emit","fromContent","_extractString","args","fromArgs","c","DEVICE_ID_KEY","AsyncStorage","stored","getItem","uuid","v4","setItem","prev","next","shown_count","first_shown_at","last_shown_at","stopped_at","stopped_reason","interactionType","stopOn","stop_on","matches","console","log","Digia","exports"],"sourceRoot":"../../src","sources":["Digia.ts"],"mappings":"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","ignoreList":[]}
@@ -4,19 +4,51 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.DigiaAnchorView = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
7
8
  var _reactNative = require("react-native");
8
- /**
9
+ var _digiaAnchorRegistry = require("./digiaAnchorRegistry");
10
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
11
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /**
9
12
  * DigiaAnchorView
10
13
  *
11
14
  * Registers a native Android DigiaAnchorView (FrameLayout) in AnchorRegistry by anchorKey.
12
15
  * When a SHOW_TOOLTIP or SHOW_SPOTLIGHT campaign fires, the native SDK looks up this view
13
16
  * via AnchorRegistry and uses getLocationOnScreen() for accurate pixel-perfect coordinates.
14
17
  *
18
+ * Also reports layout into the JS digiaAnchorRegistry so JS-rendered guides (tooltip/spotlight)
19
+ * can position themselves relative to this anchor.
20
+ *
15
21
  * Usage:
16
22
  * <DigiaAnchorView anchorKey="pdp_add_to_cart" style={{ alignSelf: 'flex-start' }}>
17
23
  * <TouchableOpacity ...>Add to Cart</TouchableOpacity>
18
24
  * </DigiaAnchorView>
19
25
  */
20
-
21
- const DigiaAnchorView = exports.DigiaAnchorView = (0, _reactNative.requireNativeComponent)('DigiaAnchorView');
26
+ const NativeDigiaAnchorView = (0, _reactNative.requireNativeComponent)('DigiaAnchorView');
27
+ const DigiaAnchorView = ({
28
+ anchorKey,
29
+ onLayout,
30
+ ...rest
31
+ }) => {
32
+ const viewRef = (0, _react.useRef)(null);
33
+ const handleLayout = (0, _react.useCallback)(e => {
34
+ onLayout?.(e);
35
+ // Use measure() for absolute screen coordinates (onLayout gives relative coords)
36
+ viewRef.current?.measure((_x, _y, width, height, pageX, pageY) => {
37
+ if (width > 0 && height > 0) {
38
+ _digiaAnchorRegistry.digiaAnchorRegistry.setLayout(anchorKey, {
39
+ pageX,
40
+ pageY,
41
+ width,
42
+ height
43
+ });
44
+ }
45
+ });
46
+ }, [anchorKey, onLayout]);
47
+ return /*#__PURE__*/_react.default.createElement(NativeDigiaAnchorView, _extends({
48
+ ref: viewRef,
49
+ anchorKey: anchorKey,
50
+ onLayout: handleLayout
51
+ }, rest));
52
+ };
53
+ exports.DigiaAnchorView = DigiaAnchorView;
22
54
  //# sourceMappingURL=DigiaAnchorView.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","DigiaAnchorView","exports","requireNativeComponent"],"sourceRoot":"../../src","sources":["DigiaAnchorView.tsx"],"mappings":";;;;;;AAaA,IAAAA,YAAA,GAAAC,OAAA;AAbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAUO,MAAMC,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG,IAAAE,mCAAsB,EAAuB,iBAAiB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_digiaAnchorRegistry","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_extends","assign","bind","arguments","length","apply","NativeDigiaAnchorView","requireNativeComponent","DigiaAnchorView","anchorKey","onLayout","rest","viewRef","useRef","handleLayout","useCallback","current","measure","_x","_y","width","height","pageX","pageY","digiaAnchorRegistry","setLayout","createElement","ref","exports"],"sourceRoot":"../../src","sources":["DigiaAnchorView.tsx"],"mappings":"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","ignoreList":[]}