@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.
- package/README.md +134 -51
- package/android/build.gradle +3 -3
- package/android/src/main/java/com/digia/engage/rn/DigiaModule.kt +52 -8
- package/android/src/main/java/com/digia/engage/rn/DigiaSlotViewManager.kt +6 -2
- package/android/src/main/java/com/digia/engage/rn/DigiaViewManager.kt +1 -0
- package/ios/DigiaEngageModule.m +7 -1
- package/ios/DigiaHostViewManager.swift +20 -20
- package/ios/DigiaModule.swift +8 -4
- package/lib/commonjs/Digia.js +390 -4
- package/lib/commonjs/Digia.js.map +1 -1
- package/lib/commonjs/DigiaAnchorView.js +35 -3
- package/lib/commonjs/DigiaAnchorView.js.map +1 -1
- package/lib/commonjs/DigiaGuideController.js +59 -0
- package/lib/commonjs/DigiaGuideController.js.map +1 -0
- package/lib/commonjs/DigiaHealthReporter.js +45 -0
- package/lib/commonjs/DigiaHealthReporter.js.map +1 -0
- package/lib/commonjs/DigiaProvider.js +1081 -0
- package/lib/commonjs/DigiaProvider.js.map +1 -0
- package/lib/commonjs/DigiaSlotView.js +18 -3
- package/lib/commonjs/DigiaSlotView.js.map +1 -1
- package/lib/commonjs/NativeDigiaEngage.js +14 -8
- package/lib/commonjs/NativeDigiaEngage.js.map +1 -1
- package/lib/commonjs/actionHandler.js +316 -0
- package/lib/commonjs/actionHandler.js.map +1 -0
- package/lib/commonjs/defaultInAppBrowser.js +31 -0
- package/lib/commonjs/defaultInAppBrowser.js.map +1 -0
- package/lib/commonjs/digiaAnchorRegistry.js +32 -0
- package/lib/commonjs/digiaAnchorRegistry.js.map +1 -0
- package/lib/commonjs/frequencyEvaluator.js +70 -0
- package/lib/commonjs/frequencyEvaluator.js.map +1 -0
- package/lib/commonjs/frequencyStore.js +70 -0
- package/lib/commonjs/frequencyStore.js.map +1 -0
- package/lib/commonjs/index.js +7 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/templateTypes.js +2 -0
- package/lib/commonjs/templateTypes.js.map +1 -0
- package/lib/module/Digia.js +389 -4
- package/lib/module/Digia.js.map +1 -1
- package/lib/module/DigiaAnchorView.js +33 -1
- package/lib/module/DigiaAnchorView.js.map +1 -1
- package/lib/module/DigiaGuideController.js +53 -0
- package/lib/module/DigiaGuideController.js.map +1 -0
- package/lib/module/DigiaHealthReporter.js +38 -0
- package/lib/module/DigiaHealthReporter.js.map +1 -0
- package/lib/module/DigiaProvider.js +1074 -0
- package/lib/module/DigiaProvider.js.map +1 -0
- package/lib/module/DigiaSlotView.js +20 -5
- package/lib/module/DigiaSlotView.js.map +1 -1
- package/lib/module/NativeDigiaEngage.js +14 -8
- package/lib/module/NativeDigiaEngage.js.map +1 -1
- package/lib/module/actionHandler.js +311 -0
- package/lib/module/actionHandler.js.map +1 -0
- package/lib/module/defaultInAppBrowser.js +25 -0
- package/lib/module/defaultInAppBrowser.js.map +1 -0
- package/lib/module/digiaAnchorRegistry.js +26 -0
- package/lib/module/digiaAnchorRegistry.js.map +1 -0
- package/lib/module/frequencyEvaluator.js +61 -0
- package/lib/module/frequencyEvaluator.js.map +1 -0
- package/lib/module/frequencyStore.js +64 -0
- package/lib/module/frequencyStore.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/templateTypes.js +2 -0
- package/lib/module/templateTypes.js.map +1 -0
- package/lib/typescript/Digia.d.ts +35 -3
- package/lib/typescript/Digia.d.ts.map +1 -1
- package/lib/typescript/DigiaAnchorView.d.ts +5 -1
- package/lib/typescript/DigiaAnchorView.d.ts.map +1 -1
- package/lib/typescript/DigiaGuideController.d.ts +30 -0
- package/lib/typescript/DigiaGuideController.d.ts.map +1 -0
- package/lib/typescript/DigiaHealthReporter.d.ts +24 -0
- package/lib/typescript/DigiaHealthReporter.d.ts.map +1 -0
- package/lib/typescript/DigiaProvider.d.ts +3 -0
- package/lib/typescript/DigiaProvider.d.ts.map +1 -0
- package/lib/typescript/DigiaSlotView.d.ts.map +1 -1
- package/lib/typescript/NativeDigiaEngage.d.ts +10 -6
- package/lib/typescript/NativeDigiaEngage.d.ts.map +1 -1
- package/lib/typescript/actionHandler.d.ts +20 -0
- package/lib/typescript/actionHandler.d.ts.map +1 -0
- package/lib/typescript/defaultInAppBrowser.d.ts +3 -0
- package/lib/typescript/defaultInAppBrowser.d.ts.map +1 -0
- package/lib/typescript/digiaAnchorRegistry.d.ts +15 -0
- package/lib/typescript/digiaAnchorRegistry.d.ts.map +1 -0
- package/lib/typescript/frequencyEvaluator.d.ts +14 -0
- package/lib/typescript/frequencyEvaluator.d.ts.map +1 -0
- package/lib/typescript/frequencyStore.d.ts +7 -0
- package/lib/typescript/frequencyStore.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +1 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/templateTypes.d.ts +140 -0
- package/lib/typescript/templateTypes.d.ts.map +1 -0
- package/lib/typescript/types.d.ts +163 -4
- package/lib/typescript/types.d.ts.map +1 -1
- package/package.json +15 -3
- package/src/Digia.ts +439 -4
- package/src/DigiaAnchorView.tsx +30 -2
- package/src/DigiaGuideController.ts +61 -0
- package/src/DigiaHealthReporter.ts +43 -0
- package/src/DigiaProvider.tsx +778 -0
- package/src/DigiaSlotView.tsx +26 -6
- package/src/NativeDigiaEngage.ts +28 -13
- package/src/actionHandler.ts +311 -0
- package/src/defaultInAppBrowser.ts +31 -0
- package/src/digiaAnchorRegistry.ts +27 -0
- package/src/frequencyEvaluator.ts +57 -0
- package/src/frequencyStore.ts +79 -0
- package/src/index.ts +1 -0
- package/src/templateTypes.ts +121 -0
- package/src/types.ts +132 -6
package/lib/commonjs/Digia.js
CHANGED
|
@@ -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({
|
|
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
|
-
|
|
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({
|
|
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 =
|
|
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":["
|
|
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":[]}
|