@magicpixel/rn-mp-client-sdk 1.13.0 → 1.13.20
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 +163 -14
- package/lib/commonjs/common/app-types.js.map +1 -1
- package/lib/commonjs/common/constants.js +11 -2
- package/lib/commonjs/common/constants.js.map +1 -1
- package/lib/commonjs/common/data-store.js +13 -30
- package/lib/commonjs/common/data-store.js.map +1 -1
- package/lib/commonjs/common/deeplink-helper.js +174 -0
- package/lib/commonjs/common/deeplink-helper.js.map +1 -0
- package/lib/commonjs/common/device-info-helper.js +168 -0
- package/lib/commonjs/common/device-info-helper.js.map +1 -0
- package/lib/commonjs/common/event-bus.js +39 -0
- package/lib/commonjs/common/event-bus.js.map +1 -1
- package/lib/commonjs/common/network-service.js +119 -15
- package/lib/commonjs/common/network-service.js.map +1 -1
- package/lib/commonjs/common/reporter.js +28 -10
- package/lib/commonjs/common/reporter.js.map +1 -1
- package/lib/commonjs/common/storage-helper.js +227 -0
- package/lib/commonjs/common/storage-helper.js.map +1 -0
- package/lib/commonjs/common/utils.js +20 -2
- package/lib/commonjs/common/utils.js.map +1 -1
- package/lib/commonjs/eedl/eedl.js +198 -44
- package/lib/commonjs/eedl/eedl.js.map +1 -1
- package/lib/commonjs/index.js +290 -48
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/models/mp-client-sdk.js +17 -10
- package/lib/commonjs/models/mp-client-sdk.js.map +1 -1
- package/lib/commonjs/processors/data-element.processor.js +51 -7
- package/lib/commonjs/processors/data-element.processor.js.map +1 -1
- package/lib/commonjs/processors/visit-id.processor.js +78 -15
- package/lib/commonjs/processors/visit-id.processor.js.map +1 -1
- package/lib/module/common/app-types.js.map +1 -1
- package/lib/module/common/constants.js +11 -2
- package/lib/module/common/constants.js.map +1 -1
- package/lib/module/common/data-store.js +13 -30
- package/lib/module/common/data-store.js.map +1 -1
- package/lib/module/common/deeplink-helper.js +168 -0
- package/lib/module/common/deeplink-helper.js.map +1 -0
- package/lib/module/common/device-info-helper.js +161 -0
- package/lib/module/common/device-info-helper.js.map +1 -0
- package/lib/module/common/event-bus.js +39 -0
- package/lib/module/common/event-bus.js.map +1 -1
- package/lib/module/common/network-service.js +119 -15
- package/lib/module/common/network-service.js.map +1 -1
- package/lib/module/common/reporter.js +29 -10
- package/lib/module/common/reporter.js.map +1 -1
- package/lib/module/common/storage-helper.js +221 -0
- package/lib/module/common/storage-helper.js.map +1 -0
- package/lib/module/common/utils.js +20 -2
- package/lib/module/common/utils.js.map +1 -1
- package/lib/module/eedl/eedl.js +198 -44
- package/lib/module/eedl/eedl.js.map +1 -1
- package/lib/module/index.js +279 -47
- package/lib/module/index.js.map +1 -1
- package/lib/module/models/mp-client-sdk.js +16 -9
- package/lib/module/models/mp-client-sdk.js.map +1 -1
- package/lib/module/processors/data-element.processor.js +51 -7
- package/lib/module/processors/data-element.processor.js.map +1 -1
- package/lib/module/processors/visit-id.processor.js +78 -15
- package/lib/module/processors/visit-id.processor.js.map +1 -1
- package/lib/typescript/{common → src/common}/app-types.d.ts +29 -9
- package/lib/typescript/{common → src/common}/constants.d.ts +0 -1
- package/lib/typescript/{common → src/common}/data-store.d.ts +3 -8
- package/lib/typescript/src/common/deeplink-helper.d.ts +60 -0
- package/lib/typescript/src/common/device-info-helper.d.ts +54 -0
- package/lib/typescript/src/common/event-bus.d.ts +21 -0
- package/lib/typescript/src/common/network-service.d.ts +32 -0
- package/lib/typescript/src/common/storage-helper.d.ts +47 -0
- package/lib/typescript/{common → src/common}/utils.d.ts +7 -0
- package/lib/typescript/{eedl → src/eedl}/eedl.d.ts +43 -1
- package/lib/typescript/{index.d.ts → src/index.d.ts} +39 -5
- package/lib/typescript/{models → src/models}/mp-client-sdk.d.ts +7 -0
- package/lib/typescript/src/processors/visit-id.processor.d.ts +23 -0
- package/package.json +26 -37
- package/src/common/app-types.ts +32 -10
- package/src/common/constants.ts +0 -6
- package/src/common/data-store.ts +8 -30
- package/src/common/deeplink-helper.ts +181 -0
- package/src/common/device-info-helper.ts +190 -0
- package/src/common/event-bus.ts +39 -0
- package/src/common/network-service.ts +154 -21
- package/src/common/reporter.ts +31 -10
- package/src/common/storage-helper.ts +266 -0
- package/src/common/utils.ts +20 -2
- package/src/eedl/eedl.ts +225 -51
- package/src/index.tsx +332 -67
- package/src/models/mp-client-sdk.ts +8 -0
- package/src/processors/data-element.processor.ts +85 -7
- package/src/processors/visit-id.processor.ts +92 -22
- package/lib/commonjs/processors/trans-function.processor.js +0 -73
- package/lib/commonjs/processors/trans-function.processor.js.map +0 -1
- package/lib/module/processors/trans-function.processor.js +0 -66
- package/lib/module/processors/trans-function.processor.js.map +0 -1
- package/lib/typescript/common/event-bus.d.ts +0 -6
- package/lib/typescript/common/network-service.d.ts +0 -8
- package/lib/typescript/processors/trans-function.processor.d.ts +0 -12
- package/lib/typescript/processors/visit-id.processor.d.ts +0 -9
- package/src/processors/trans-function.processor.ts +0 -85
- /package/lib/typescript/{common → src/common}/logger.d.ts +0 -0
- /package/lib/typescript/{common → src/common}/reporter.d.ts +0 -0
- /package/lib/typescript/{models → src/models}/geo-api-response.d.ts +0 -0
- /package/lib/typescript/{processors → src/processors}/data-element.processor.d.ts +0 -0
- /package/lib/typescript/{processors → src/processors}/geo-location.processor.d.ts +0 -0
- /package/lib/typescript/{processors → src/processors}/qc.processor.d.ts +0 -0
- /package/lib/typescript/{processors → src/processors}/tag.processor.d.ts +0 -0
|
@@ -5,12 +5,12 @@ import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
|
5
5
|
import { Logger } from './logger';
|
|
6
6
|
import { Platform } from 'react-native';
|
|
7
7
|
import { Utils } from './utils';
|
|
8
|
-
|
|
8
|
+
import { version as SDK_VERSION } from '../../package.json';
|
|
9
9
|
export class DataStore {
|
|
10
10
|
static async init(clientSdk) {
|
|
11
11
|
var _clientSdk$s;
|
|
12
12
|
this.clientSdk = clientSdk;
|
|
13
|
-
this.setMpEnv((clientSdk === null || clientSdk === void 0
|
|
13
|
+
this.setMpEnv((clientSdk === null || clientSdk === void 0 || (_clientSdk$s = clientSdk.s) === null || _clientSdk$s === void 0 ? void 0 : _clientSdk$s.ev) === 'staging' ? 'stg' : 'prd');
|
|
14
14
|
if (typeof Platform !== 'undefined' && typeof Platform.OS !== 'undefined') {
|
|
15
15
|
this.devicePlatform = Platform.OS.toLowerCase();
|
|
16
16
|
}
|
|
@@ -41,15 +41,6 @@ export class DataStore {
|
|
|
41
41
|
};
|
|
42
42
|
return true;
|
|
43
43
|
}
|
|
44
|
-
static enQueueTMFire(sseOnly, name, dcrName, eventId, dcrPayload) {
|
|
45
|
-
this.runQueue.push({
|
|
46
|
-
sseOnly,
|
|
47
|
-
name,
|
|
48
|
-
dcrName,
|
|
49
|
-
eventId,
|
|
50
|
-
dcrPayload
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
44
|
static isDataStoreReady() {
|
|
54
45
|
return this.isDataStoreInitialized;
|
|
55
46
|
}
|
|
@@ -77,15 +68,6 @@ export class DataStore {
|
|
|
77
68
|
static setSdkInitOptions(options) {
|
|
78
69
|
this.sdkInitOptions = options;
|
|
79
70
|
}
|
|
80
|
-
static deQueueTMFire() {
|
|
81
|
-
return this.runQueue.length > 0 ? this.runQueue.pop() : null;
|
|
82
|
-
}
|
|
83
|
-
static isTagManagerProcessing() {
|
|
84
|
-
return this.isProcessing;
|
|
85
|
-
}
|
|
86
|
-
static setTagManagerProcessing(status) {
|
|
87
|
-
this.isProcessing = status;
|
|
88
|
-
}
|
|
89
71
|
static getSdkDataElements() {
|
|
90
72
|
var _this$clientSdk;
|
|
91
73
|
return ((_this$clientSdk = this.clientSdk) === null || _this$clientSdk === void 0 ? void 0 : _this$clientSdk.d) || {};
|
|
@@ -121,6 +103,9 @@ export class DataStore {
|
|
|
121
103
|
static setVisitorInfo(visitorInfo) {
|
|
122
104
|
this.visitorInfo = visitorInfo;
|
|
123
105
|
}
|
|
106
|
+
static getVisitorInfo() {
|
|
107
|
+
return this.visitorInfo;
|
|
108
|
+
}
|
|
124
109
|
static getDebugId() {
|
|
125
110
|
return this.debugId;
|
|
126
111
|
}
|
|
@@ -138,8 +123,8 @@ export class DataStore {
|
|
|
138
123
|
this.debugId = dbgId;
|
|
139
124
|
}
|
|
140
125
|
static shouldFireSstForEvent(eventName) {
|
|
141
|
-
var _this$clientSdk3
|
|
142
|
-
return ((_this$clientSdk3 = this.clientSdk) === null || _this$clientSdk3 === void 0
|
|
126
|
+
var _this$clientSdk3;
|
|
127
|
+
return ((_this$clientSdk3 = this.clientSdk) === null || _this$clientSdk3 === void 0 || (_this$clientSdk3 = _this$clientSdk3.sseMpDlE) === null || _this$clientSdk3 === void 0 ? void 0 : _this$clientSdk3.indexOf(eventName)) > -1;
|
|
143
128
|
}
|
|
144
129
|
static addCommonCookie(key, value) {
|
|
145
130
|
this.commonCookies[key] = value;
|
|
@@ -152,11 +137,11 @@ export class DataStore {
|
|
|
152
137
|
}
|
|
153
138
|
static getSdkTags() {
|
|
154
139
|
var _this$clientSdk4;
|
|
155
|
-
return (this === null || this === void 0
|
|
140
|
+
return (this === null || this === void 0 || (_this$clientSdk4 = this.clientSdk) === null || _this$clientSdk4 === void 0 ? void 0 : _this$clientSdk4.t) ?? {};
|
|
156
141
|
}
|
|
157
142
|
static getSdkProviders() {
|
|
158
143
|
var _this$clientSdk5;
|
|
159
|
-
return (this === null || this === void 0
|
|
144
|
+
return (this === null || this === void 0 || (_this$clientSdk5 = this.clientSdk) === null || _this$clientSdk5 === void 0 ? void 0 : _this$clientSdk5.p) ?? {};
|
|
160
145
|
}
|
|
161
146
|
static getPrivacyCompliance() {
|
|
162
147
|
return this.prStatus;
|
|
@@ -230,7 +215,7 @@ export class DataStore {
|
|
|
230
215
|
}
|
|
231
216
|
static overrideDeviceType(deviceType) {
|
|
232
217
|
var _deviceType$trim;
|
|
233
|
-
this.deviceType = deviceType === null || deviceType === void 0
|
|
218
|
+
this.deviceType = deviceType === null || deviceType === void 0 || (_deviceType$trim = deviceType.trim()) === null || _deviceType$trim === void 0 ? void 0 : _deviceType$trim.toLowerCase();
|
|
234
219
|
}
|
|
235
220
|
static getDeviceType() {
|
|
236
221
|
return this.deviceType;
|
|
@@ -247,11 +232,11 @@ export class DataStore {
|
|
|
247
232
|
return this.visitorInfo ? JSON.stringify(this.visitorInfo) : undefined;
|
|
248
233
|
}
|
|
249
234
|
static getOrgId() {
|
|
250
|
-
var _this$clientSdk6
|
|
251
|
-
return this === null || this === void 0
|
|
235
|
+
var _this$clientSdk6;
|
|
236
|
+
return this === null || this === void 0 || (_this$clientSdk6 = this.clientSdk) === null || _this$clientSdk6 === void 0 || (_this$clientSdk6 = _this$clientSdk6.s) === null || _this$clientSdk6 === void 0 ? void 0 : _this$clientSdk6.v_id;
|
|
252
237
|
}
|
|
253
238
|
static getCoreVersion() {
|
|
254
|
-
return
|
|
239
|
+
return SDK_VERSION;
|
|
255
240
|
}
|
|
256
241
|
static getMpEnv() {
|
|
257
242
|
return this.mpEnvShort;
|
|
@@ -302,8 +287,6 @@ _defineProperty(DataStore, "pageLang", 'en');
|
|
|
302
287
|
_defineProperty(DataStore, "mpEnvShort", void 0);
|
|
303
288
|
_defineProperty(DataStore, "devicePlatform", 'unknown');
|
|
304
289
|
_defineProperty(DataStore, "deviceType", 'mobile');
|
|
305
|
-
_defineProperty(DataStore, "runQueue", []);
|
|
306
|
-
_defineProperty(DataStore, "isProcessing", false);
|
|
307
290
|
_defineProperty(DataStore, "sdkInitOptions", void 0);
|
|
308
291
|
_defineProperty(DataStore, "deviceInfo", void 0);
|
|
309
292
|
_defineProperty(DataStore, "geoInfo", void 0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AsyncStorage","Logger","Platform","Utils","CORE_VERSION","DataStore","init","clientSdk","_clientSdk$s","setMpEnv","s","ev","OS","devicePlatform","toLowerCase","isTablet","deviceType","interestedClientSideEvents","_makeUniqueStringArray","dtmE","ctmE","mpDlE","interestedServerSideEvents","sseDtmE","sseCtmE","sseMpDlE","interestedAllEvents","resetCollectorUrl","c_url","v_id","p_id","isDataStoreInitialized","baseCollectorUrl","sdkEnv","vendorId","projectId","tagsBaseUrl","urls","tfUrl","errUrl","rptUrl","infoUrl","baseUrl","attrInfoUrl","idlUrl","geoUrl","baseUrlV4","baseUrlV6","enQueueTMFire","sseOnly","name","dcrName","eventId","dcrPayload","runQueue","push","isDataStoreReady","shouldExecuteTMForEvent","eventName","indexOf","shouldExecuteSST","shouldExecuteClientSideTm","getSdkPcKey","pcKey","getSdkInitOptions","sdkInitOptions","setDeviceInfo","info","deviceInfo","getDeviceInfo","setSdkInitOptions","options","deQueueTMFire","length","pop","isTagManagerProcessing","isProcessing","setTagManagerProcessing","status","getSdkDataElements","_this$clientSdk","d","getSdkQC","_this$clientSdk2","qc","hasOneSSTTag","sst","getSSTDownStream","dws_s_t","getClientDownStream","dws_c_t","getClientSdk","getSSTUrl","getAttrInfoUrl","setVisitInfo","visitInfo","visitInfoToString","visitVer","visitId","visitTs","visitCt","visitDepth","undefined","setVisitorInfo","visitorInfo","getDebugId","debugId","getErrorReportUrl","getIdlUrl","_this$urls","getSdkVersion","v","setDebugId","dbgId","shouldFireSstForEvent","_this$clientSdk3","_this$clientSdk3$sseM","addCommonCookie","key","value","commonCookies","getCommonCookies","getUrlInfo","getSdkTags","_this$clientSdk4","t","getSdkProviders","_this$clientSdk5","p","getPrivacyCompliance","prStatus","setPrivacyCompliance","storeData","setItem","JSON","stringify","getDataFromStorage","getItem","parse","getDataElements","dataElements","setDataElements","de","getPageLang","pageLang","getDeviceOs","getDataElementHelpers","log","logDbg","err","logError","getPageName","getDataElementValue","param","setPageLang","lang","getSdkPageLangKey","langKey","setDataElement","setValidQc","qcList","qcInfo","validQcList","validQcInfoList","getValidQcList","getValidQcInfo","setTransFunctions","elements","transFunctions","getTransFunctions","getOperatingSystem","getVisitId","_this$visitInfo","overrideDeviceType","_deviceType$trim","trim","getDeviceType","getDeviceId","_this$visitorInfo","dId","getMpId","_this$visitorInfo2","mId","getVisitorInfoAsString","getOrgId","_this$clientSdk6","_this$clientSdk6$s","getCoreVersion","getMpEnv","mpEnvShort","shortEnv","setGeoInfo","geoInfo","getGeoInfo","isGeoLocationEnabledInSdk","getVisitInfo","getBrowser","getMpUserStatus","_defineProperty"],"sources":["data-store.ts"],"sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport type {\n DeJsvHelper,\n MapLike,\n MpDeviceInfo,\n QcInfoItem,\n RunQueueModel,\n SdkInitOptions,\n UrlInfo,\n VisitInfo,\n VisitorInfo,\n} from './app-types';\nimport type { GeoResponse } from '../models/geo-api-response';\nimport { Logger } from './logger';\nimport type {\n ClientSdkDeItem,\n ClientSdkPrItem,\n ClientSdkQcItem,\n ClientSdkTagItem,\n MpClientSdk,\n} from '../models/mp-client-sdk';\nimport { Platform } from 'react-native';\nimport { Utils } from './utils';\n\nconst CORE_VERSION = '0.8.6';\n\nexport class DataStore {\n private static isDataStoreInitialized = false;\n private static dataElements: MapLike = {};\n private static validQcList: string[];\n private static validQcInfoList: Array<QcInfoItem> = [];\n private static transFunctions: MapLike = {};\n private static prStatus = true;\n private static clientSdk: MpClientSdk;\n private static urls: UrlInfo;\n private static debugId: string;\n private static visitorInfo: VisitorInfo;\n private static visitInfo: VisitInfo;\n private static pageLang = 'en';\n private static mpEnvShort: 'stg' | 'prd';\n private static devicePlatform = 'unknown';\n private static deviceType = 'mobile';\n private static runQueue: RunQueueModel[] = [];\n private static isProcessing = false;\n private static sdkInitOptions: SdkInitOptions;\n private static deviceInfo: MpDeviceInfo;\n private static geoInfo: GeoResponse;\n\n private static interestedClientSideEvents: string[] = [];\n private static interestedServerSideEvents: string[] = [];\n private static interestedAllEvents: string[] = [];\n\n private static commonCookies: Record<string, string> = {};\n\n static async init(clientSdk: MpClientSdk): Promise<void> {\n this.clientSdk = clientSdk;\n this.setMpEnv(clientSdk?.s?.ev === 'staging' ? 'stg' : 'prd');\n if (typeof Platform !== 'undefined' && typeof Platform.OS !== 'undefined') {\n this.devicePlatform = Platform.OS.toLowerCase();\n }\n\n if (Utils.isTablet()) {\n this.deviceType = 'tablet';\n } else {\n this.deviceType = 'mobile';\n }\n\n this.interestedClientSideEvents = Utils._makeUniqueStringArray([\n ...(clientSdk.dtmE ?? []),\n ...(clientSdk.ctmE ?? []),\n ...(clientSdk.mpDlE ?? []),\n ]);\n\n this.interestedServerSideEvents = Utils._makeUniqueStringArray([\n ...(clientSdk.sseDtmE ?? []),\n ...(clientSdk.sseCtmE ?? []),\n ...(clientSdk.sseMpDlE ?? []),\n ]);\n\n this.interestedAllEvents = Utils._makeUniqueStringArray([\n ...this.interestedClientSideEvents,\n ...this.interestedServerSideEvents,\n ]);\n\n this.resetCollectorUrl(\n clientSdk.s.c_url,\n clientSdk.s.ev,\n clientSdk.s.v_id,\n clientSdk.s.p_id\n );\n this.isDataStoreInitialized = true;\n }\n\n static resetCollectorUrl(\n baseCollectorUrl: string,\n sdkEnv: string,\n vendorId: string,\n projectId: string\n ): boolean {\n const tagsBaseUrl = `${baseCollectorUrl}/${\n sdkEnv === 'staging' ? 's' : 'p'\n }/${vendorId}/${projectId}`;\n this.urls = {\n tfUrl: tagsBaseUrl + '/sst',\n errUrl: tagsBaseUrl + '/err',\n rptUrl: tagsBaseUrl + '/report',\n infoUrl: tagsBaseUrl + '/info',\n baseUrl: baseCollectorUrl,\n attrInfoUrl: baseCollectorUrl + `/idl/${vendorId}/attrInfo`,\n idlUrl:\n baseCollectorUrl +\n `/idl/${vendorId}/idl${sdkEnv === 'staging' ? '-staging' : ''}`,\n geoUrl: '/geo',\n baseUrlV4: baseCollectorUrl,\n baseUrlV6: baseCollectorUrl, // For React Native, we'll use the same URL for both IPv4 and IPv6\n };\n return true;\n }\n\n static enQueueTMFire(\n sseOnly: boolean,\n name: string,\n dcrName: string,\n eventId: string,\n dcrPayload?: Record<string, any>\n ): void {\n this.runQueue.push({ sseOnly, name, dcrName, eventId, dcrPayload });\n }\n\n static isDataStoreReady(): boolean {\n return this.isDataStoreInitialized;\n }\n\n static shouldExecuteTMForEvent(eventName: string): boolean {\n return this.interestedAllEvents.indexOf(eventName) > -1;\n }\n\n static shouldExecuteSST(eventName: string): boolean {\n return this.interestedServerSideEvents.indexOf(eventName) > -1;\n }\n\n static shouldExecuteClientSideTm(eventName: string): boolean {\n return this.interestedClientSideEvents.indexOf(eventName) > -1;\n }\n\n static getSdkPcKey(): string {\n return this.clientSdk.pcKey;\n }\n\n static getSdkInitOptions(): SdkInitOptions {\n return this.sdkInitOptions;\n }\n\n static setDeviceInfo(info: MpDeviceInfo): void {\n this.deviceInfo = info;\n }\n\n static getDeviceInfo(): MpDeviceInfo {\n return this.deviceInfo;\n }\n\n static setSdkInitOptions(options: SdkInitOptions): void {\n this.sdkInitOptions = options;\n }\n\n static deQueueTMFire(): RunQueueModel {\n return this.runQueue.length > 0 ? this.runQueue.pop() : null;\n }\n\n static isTagManagerProcessing(): boolean {\n return this.isProcessing;\n }\n\n static setTagManagerProcessing(status: boolean): void {\n this.isProcessing = status;\n }\n\n static getSdkDataElements(): MapLike<ClientSdkDeItem> {\n return this.clientSdk?.d || {};\n }\n\n static getSdkQC(): ClientSdkQcItem[] {\n return this.clientSdk?.qc || [];\n }\n\n static hasOneSSTTag(): boolean {\n return this.clientSdk.s.sst;\n }\n\n static getSSTDownStream(): 'j' | 'n' {\n return this.clientSdk.s.dws_s_t;\n }\n\n static getClientDownStream(): 'j' | 'n' {\n return this.clientSdk.s.dws_c_t;\n }\n\n static getClientSdk(): MpClientSdk {\n return this.clientSdk;\n }\n\n static getSSTUrl(): string {\n return this.urls.tfUrl;\n }\n\n static getAttrInfoUrl(): string {\n return this.urls.attrInfoUrl;\n }\n\n static setVisitInfo(visitInfo: VisitInfo): void {\n this.visitInfo = visitInfo;\n }\n\n static visitInfoToString(): string {\n return this.visitInfo\n ? `${this.visitInfo.visitVer}|${this.visitInfo.visitId}|${this.visitInfo.visitTs}|${this.visitInfo.visitCt}|${this.visitInfo.visitDepth}`\n : undefined;\n }\n\n static setVisitorInfo(visitorInfo: VisitorInfo): void {\n this.visitorInfo = visitorInfo;\n }\n\n static getDebugId(): string {\n return this.debugId;\n }\n\n static getErrorReportUrl(): string {\n return this.urls.errUrl;\n }\n\n static getIdlUrl(): string {\n return this.urls?.idlUrl;\n }\n\n static getSdkVersion(): string {\n return this.clientSdk.s.v;\n }\n\n static setDebugId(dbgId: string): void {\n this.debugId = dbgId;\n }\n\n static shouldFireSstForEvent(eventName: string): boolean {\n return this.clientSdk?.sseMpDlE?.indexOf(eventName) > -1;\n }\n\n static addCommonCookie(key: string, value: string): void {\n this.commonCookies[key] = value;\n }\n\n static getCommonCookies(): Record<string, string> {\n return this.commonCookies;\n }\n\n static getUrlInfo(): UrlInfo {\n return this.urls;\n }\n\n static getSdkTags(): MapLike<ClientSdkTagItem> {\n return this?.clientSdk?.t ?? {};\n }\n\n static getSdkProviders(): MapLike<ClientSdkPrItem> {\n return this?.clientSdk?.p ?? {};\n }\n\n static getPrivacyCompliance(): boolean {\n return this.prStatus;\n }\n\n static setPrivacyCompliance(status: boolean): void {\n this.prStatus = status;\n }\n\n static async storeData(key: string, value: any): Promise<void> {\n await AsyncStorage.setItem(key, JSON.stringify(value));\n }\n\n static async getDataFromStorage<T>(key: string): Promise<T> {\n const value = await AsyncStorage.getItem(key);\n return value ? JSON.parse(value) : value;\n }\n\n static getDataElements(): MapLike {\n return this.dataElements;\n }\n\n static setDataElements(de: MapLike): void {\n this.dataElements = de;\n }\n\n static getPageLang(): string {\n return this.pageLang;\n }\n\n static getDeviceOs(): string {\n return this.devicePlatform;\n }\n\n static getDataElementHelpers(): DeJsvHelper {\n return {\n log: Logger.logDbg,\n err: Logger.logError,\n };\n }\n\n static getPageName(): string {\n return (this.getDataElementValue('page_name') as string) || 'none';\n }\n\n static getDataElementValue(param: string): string | boolean | number {\n return this.dataElements[param];\n }\n\n static setPageLang(lang: string): void {\n this.pageLang = lang || 'en';\n }\n\n static getSdkPageLangKey(): string {\n return this.clientSdk.langKey;\n }\n\n static setDataElement(key: string, value: any): void {\n this.dataElements[key] = value;\n }\n\n static setValidQc(qcList: string[], qcInfo: QcInfoItem[]): void {\n this.validQcList = qcList;\n this.validQcInfoList = qcInfo;\n }\n\n static getValidQcList(): string[] {\n return this.validQcList || [];\n }\n\n static getValidQcInfo(): QcInfoItem[] {\n return this.validQcInfoList || [];\n }\n\n static setTransFunctions(elements: MapLike): MapLike {\n this.transFunctions = elements;\n return this.transFunctions;\n }\n\n static getTransFunctions(): MapLike {\n return this.transFunctions;\n }\n\n static getOperatingSystem(): string {\n return this.devicePlatform;\n }\n\n static getVisitId(): string {\n return this.visitInfo?.visitId;\n }\n\n static overrideDeviceType(deviceType: string): void {\n this.deviceType = deviceType?.trim()?.toLowerCase();\n }\n\n static getDeviceType(): string {\n return this.deviceType;\n }\n\n static getDeviceId(): string {\n return this.visitorInfo?.dId;\n }\n\n static getMpId(): string {\n return this.visitorInfo?.mId;\n }\n\n static getVisitorInfoAsString(): string | undefined {\n return this.visitorInfo ? JSON.stringify(this.visitorInfo) : undefined;\n }\n\n static getOrgId(): string {\n return this?.clientSdk?.s?.v_id;\n }\n\n static getCoreVersion(): string {\n return CORE_VERSION;\n }\n\n static getMpEnv(): 'stg' | 'prd' {\n return this.mpEnvShort;\n }\n\n static setMpEnv(shortEnv: 'stg' | 'prd'): void {\n this.mpEnvShort = shortEnv;\n }\n\n static setGeoInfo(geoInfo: GeoResponse): void {\n this.geoInfo = geoInfo;\n }\n\n static getGeoInfo(): GeoResponse | undefined {\n return this.geoInfo;\n }\n\n static isGeoLocationEnabledInSdk(): boolean {\n // TODO: Add geo location configuration to SDK settings\n // For now, return true to enable geo location by default\n return false;\n }\n\n static getVisitInfo(): VisitInfo | undefined {\n return this.visitInfo;\n }\n\n static getBrowser(): string {\n // In React Native, we return the platform as browser equivalent\n return this.devicePlatform;\n }\n\n static getMpUserStatus(): number {\n // Return user status based on visit count\n // 1 = new user (first visit), 0 = returning user\n const visitInfo = this.getVisitInfo();\n if (!visitInfo) {\n return 1; // Default to new user if no visit info\n }\n return visitInfo.visitCt === 1 ? 1 : 0;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["AsyncStorage","Logger","Platform","Utils","version","SDK_VERSION","DataStore","init","clientSdk","_clientSdk$s","setMpEnv","s","ev","OS","devicePlatform","toLowerCase","isTablet","deviceType","interestedClientSideEvents","_makeUniqueStringArray","dtmE","ctmE","mpDlE","interestedServerSideEvents","sseDtmE","sseCtmE","sseMpDlE","interestedAllEvents","resetCollectorUrl","c_url","v_id","p_id","isDataStoreInitialized","baseCollectorUrl","sdkEnv","vendorId","projectId","tagsBaseUrl","urls","tfUrl","errUrl","rptUrl","infoUrl","baseUrl","attrInfoUrl","idlUrl","geoUrl","baseUrlV4","baseUrlV6","isDataStoreReady","shouldExecuteTMForEvent","eventName","indexOf","shouldExecuteSST","shouldExecuteClientSideTm","getSdkPcKey","pcKey","getSdkInitOptions","sdkInitOptions","setDeviceInfo","info","deviceInfo","getDeviceInfo","setSdkInitOptions","options","getSdkDataElements","_this$clientSdk","d","getSdkQC","_this$clientSdk2","qc","hasOneSSTTag","sst","getSSTDownStream","dws_s_t","getClientDownStream","dws_c_t","getClientSdk","getSSTUrl","getAttrInfoUrl","setVisitInfo","visitInfo","visitInfoToString","visitVer","visitId","visitTs","visitCt","visitDepth","undefined","setVisitorInfo","visitorInfo","getVisitorInfo","getDebugId","debugId","getErrorReportUrl","getIdlUrl","_this$urls","getSdkVersion","v","setDebugId","dbgId","shouldFireSstForEvent","_this$clientSdk3","addCommonCookie","key","value","commonCookies","getCommonCookies","getUrlInfo","getSdkTags","_this$clientSdk4","t","getSdkProviders","_this$clientSdk5","p","getPrivacyCompliance","prStatus","setPrivacyCompliance","status","storeData","setItem","JSON","stringify","getDataFromStorage","getItem","parse","getDataElements","dataElements","setDataElements","de","getPageLang","pageLang","getDeviceOs","getDataElementHelpers","log","logDbg","err","logError","getPageName","getDataElementValue","param","setPageLang","lang","getSdkPageLangKey","langKey","setDataElement","setValidQc","qcList","qcInfo","validQcList","validQcInfoList","getValidQcList","getValidQcInfo","setTransFunctions","elements","transFunctions","getTransFunctions","getOperatingSystem","getVisitId","_this$visitInfo","overrideDeviceType","_deviceType$trim","trim","getDeviceType","getDeviceId","_this$visitorInfo","dId","getMpId","_this$visitorInfo2","mId","getVisitorInfoAsString","getOrgId","_this$clientSdk6","getCoreVersion","getMpEnv","mpEnvShort","shortEnv","setGeoInfo","geoInfo","getGeoInfo","isGeoLocationEnabledInSdk","getVisitInfo","getBrowser","getMpUserStatus","_defineProperty"],"sources":["data-store.ts"],"sourcesContent":["import AsyncStorage from '@react-native-async-storage/async-storage';\nimport type {\n DeJsvHelper,\n MapLike,\n MpDeviceInfo,\n QcInfoItem,\n SdkInitOptions,\n UrlInfo,\n VisitInfo,\n VisitorInfo,\n} from './app-types';\nimport type { GeoResponse } from '../models/geo-api-response';\nimport { Logger } from './logger';\nimport type {\n ClientSdkDeItem,\n ClientSdkPrItem,\n ClientSdkQcItem,\n ClientSdkTagItem,\n MpClientSdk,\n} from '../models/mp-client-sdk';\nimport { Platform } from 'react-native';\nimport { Utils } from './utils';\nimport { version as SDK_VERSION } from '../../package.json';\n\nexport class DataStore {\n private static isDataStoreInitialized = false;\n private static dataElements: MapLike = {};\n private static validQcList: string[];\n private static validQcInfoList: Array<QcInfoItem> = [];\n private static transFunctions: MapLike = {};\n private static prStatus = true;\n private static clientSdk: MpClientSdk;\n private static urls: UrlInfo;\n private static debugId: string;\n private static visitorInfo: VisitorInfo | null;\n private static visitInfo: VisitInfo;\n private static pageLang = 'en';\n private static mpEnvShort: 'stg' | 'prd';\n private static devicePlatform = 'unknown';\n private static deviceType = 'mobile';\n private static sdkInitOptions: SdkInitOptions;\n private static deviceInfo: MpDeviceInfo;\n private static geoInfo: GeoResponse;\n\n private static interestedClientSideEvents: string[] = [];\n private static interestedServerSideEvents: string[] = [];\n private static interestedAllEvents: string[] = [];\n\n private static commonCookies: Record<string, string> = {};\n\n static async init(clientSdk: MpClientSdk): Promise<void> {\n this.clientSdk = clientSdk;\n this.setMpEnv(clientSdk?.s?.ev === 'staging' ? 'stg' : 'prd');\n if (typeof Platform !== 'undefined' && typeof Platform.OS !== 'undefined') {\n this.devicePlatform = Platform.OS.toLowerCase();\n }\n\n if (Utils.isTablet()) {\n this.deviceType = 'tablet';\n } else {\n this.deviceType = 'mobile';\n }\n\n this.interestedClientSideEvents = Utils._makeUniqueStringArray([\n ...(clientSdk.dtmE ?? []),\n ...(clientSdk.ctmE ?? []),\n ...(clientSdk.mpDlE ?? []),\n ]);\n\n this.interestedServerSideEvents = Utils._makeUniqueStringArray([\n ...(clientSdk.sseDtmE ?? []),\n ...(clientSdk.sseCtmE ?? []),\n ...(clientSdk.sseMpDlE ?? []),\n ]);\n\n this.interestedAllEvents = Utils._makeUniqueStringArray([\n ...this.interestedClientSideEvents,\n ...this.interestedServerSideEvents,\n ]);\n\n this.resetCollectorUrl(\n clientSdk.s.c_url,\n clientSdk.s.ev,\n clientSdk.s.v_id,\n clientSdk.s.p_id\n );\n this.isDataStoreInitialized = true;\n }\n\n static resetCollectorUrl(\n baseCollectorUrl: string,\n sdkEnv: string,\n vendorId: string,\n projectId: string\n ): boolean {\n const tagsBaseUrl = `${baseCollectorUrl}/${\n sdkEnv === 'staging' ? 's' : 'p'\n }/${vendorId}/${projectId}`;\n this.urls = {\n tfUrl: tagsBaseUrl + '/sst',\n errUrl: tagsBaseUrl + '/err',\n rptUrl: tagsBaseUrl + '/report',\n infoUrl: tagsBaseUrl + '/info',\n baseUrl: baseCollectorUrl,\n attrInfoUrl: baseCollectorUrl + `/idl/${vendorId}/attrInfo`,\n idlUrl:\n baseCollectorUrl +\n `/idl/${vendorId}/idl${sdkEnv === 'staging' ? '-staging' : ''}`,\n geoUrl: '/geo',\n baseUrlV4: baseCollectorUrl,\n baseUrlV6: baseCollectorUrl, // For React Native, we'll use the same URL for both IPv4 and IPv6\n };\n return true;\n }\n\n static isDataStoreReady(): boolean {\n return this.isDataStoreInitialized;\n }\n\n static shouldExecuteTMForEvent(eventName: string): boolean {\n return this.interestedAllEvents.indexOf(eventName) > -1;\n }\n\n static shouldExecuteSST(eventName: string): boolean {\n return this.interestedServerSideEvents.indexOf(eventName) > -1;\n }\n\n static shouldExecuteClientSideTm(eventName: string): boolean {\n return this.interestedClientSideEvents.indexOf(eventName) > -1;\n }\n\n static getSdkPcKey(): string {\n return this.clientSdk.pcKey;\n }\n\n static getSdkInitOptions(): SdkInitOptions {\n return this.sdkInitOptions;\n }\n\n static setDeviceInfo(info: MpDeviceInfo): void {\n this.deviceInfo = info;\n }\n\n static getDeviceInfo(): MpDeviceInfo {\n return this.deviceInfo;\n }\n\n static setSdkInitOptions(options: SdkInitOptions): void {\n this.sdkInitOptions = options;\n }\n\n static getSdkDataElements(): MapLike<ClientSdkDeItem> {\n return this.clientSdk?.d || {};\n }\n\n static getSdkQC(): ClientSdkQcItem[] {\n return this.clientSdk?.qc || [];\n }\n\n static hasOneSSTTag(): boolean {\n return this.clientSdk.s.sst;\n }\n\n static getSSTDownStream(): 'j' | 'n' {\n return this.clientSdk.s.dws_s_t;\n }\n\n static getClientDownStream(): 'j' | 'n' {\n return this.clientSdk.s.dws_c_t;\n }\n\n static getClientSdk(): MpClientSdk {\n return this.clientSdk;\n }\n\n static getSSTUrl(): string {\n return this.urls.tfUrl;\n }\n\n static getAttrInfoUrl(): string {\n return this.urls.attrInfoUrl;\n }\n\n static setVisitInfo(visitInfo: VisitInfo): void {\n this.visitInfo = visitInfo;\n }\n\n static visitInfoToString(): string {\n return this.visitInfo\n ? `${this.visitInfo.visitVer}|${this.visitInfo.visitId}|${this.visitInfo.visitTs}|${this.visitInfo.visitCt}|${this.visitInfo.visitDepth}`\n : undefined;\n }\n\n static setVisitorInfo(visitorInfo: VisitorInfo | null): void {\n this.visitorInfo = visitorInfo;\n }\n\n static getVisitorInfo(): VisitorInfo | null {\n return this.visitorInfo;\n }\n\n static getDebugId(): string {\n return this.debugId;\n }\n\n static getErrorReportUrl(): string {\n return this.urls.errUrl;\n }\n\n static getIdlUrl(): string {\n return this.urls?.idlUrl;\n }\n\n static getSdkVersion(): string {\n return this.clientSdk.s.v;\n }\n\n static setDebugId(dbgId: string): void {\n this.debugId = dbgId;\n }\n\n static shouldFireSstForEvent(eventName: string): boolean {\n return this.clientSdk?.sseMpDlE?.indexOf(eventName) > -1;\n }\n\n static addCommonCookie(key: string, value: string): void {\n this.commonCookies[key] = value;\n }\n\n static getCommonCookies(): Record<string, string> {\n return this.commonCookies;\n }\n\n static getUrlInfo(): UrlInfo {\n return this.urls;\n }\n\n static getSdkTags(): MapLike<ClientSdkTagItem> {\n return this?.clientSdk?.t ?? {};\n }\n\n static getSdkProviders(): MapLike<ClientSdkPrItem> {\n return this?.clientSdk?.p ?? {};\n }\n\n static getPrivacyCompliance(): boolean {\n return this.prStatus;\n }\n\n static setPrivacyCompliance(status: boolean): void {\n this.prStatus = status;\n }\n\n static async storeData(key: string, value: any): Promise<void> {\n await AsyncStorage.setItem(key, JSON.stringify(value));\n }\n\n static async getDataFromStorage<T>(key: string): Promise<T> {\n const value = await AsyncStorage.getItem(key);\n return value ? JSON.parse(value) : value;\n }\n\n static getDataElements(): MapLike {\n return this.dataElements;\n }\n\n static setDataElements(de: MapLike): void {\n this.dataElements = de;\n }\n\n static getPageLang(): string {\n return this.pageLang;\n }\n\n static getDeviceOs(): string {\n return this.devicePlatform;\n }\n\n static getDataElementHelpers(): DeJsvHelper {\n return {\n log: Logger.logDbg,\n err: Logger.logError,\n };\n }\n\n static getPageName(): string {\n return (this.getDataElementValue('page_name') as string) || 'none';\n }\n\n static getDataElementValue(param: string): string | boolean | number {\n return this.dataElements[param];\n }\n\n static setPageLang(lang: string): void {\n this.pageLang = lang || 'en';\n }\n\n static getSdkPageLangKey(): string {\n return this.clientSdk.langKey;\n }\n\n static setDataElement(key: string, value: any): void {\n this.dataElements[key] = value;\n }\n\n static setValidQc(qcList: string[], qcInfo: QcInfoItem[]): void {\n this.validQcList = qcList;\n this.validQcInfoList = qcInfo;\n }\n\n static getValidQcList(): string[] {\n return this.validQcList || [];\n }\n\n static getValidQcInfo(): QcInfoItem[] {\n return this.validQcInfoList || [];\n }\n\n static setTransFunctions(elements: MapLike): MapLike {\n this.transFunctions = elements;\n return this.transFunctions;\n }\n\n static getTransFunctions(): MapLike {\n return this.transFunctions;\n }\n\n static getOperatingSystem(): string {\n return this.devicePlatform;\n }\n\n static getVisitId(): string {\n return this.visitInfo?.visitId;\n }\n\n static overrideDeviceType(deviceType: string): void {\n this.deviceType = deviceType?.trim()?.toLowerCase();\n }\n\n static getDeviceType(): string {\n return this.deviceType;\n }\n\n static getDeviceId(): string {\n return this.visitorInfo?.dId;\n }\n\n static getMpId(): string {\n return this.visitorInfo?.mId;\n }\n\n static getVisitorInfoAsString(): string | undefined {\n return this.visitorInfo ? JSON.stringify(this.visitorInfo) : undefined;\n }\n\n static getOrgId(): string {\n return this?.clientSdk?.s?.v_id;\n }\n\n static getCoreVersion(): string {\n return SDK_VERSION;\n }\n\n static getMpEnv(): 'stg' | 'prd' {\n return this.mpEnvShort;\n }\n\n static setMpEnv(shortEnv: 'stg' | 'prd'): void {\n this.mpEnvShort = shortEnv;\n }\n\n static setGeoInfo(geoInfo: GeoResponse): void {\n this.geoInfo = geoInfo;\n }\n\n static getGeoInfo(): GeoResponse | undefined {\n return this.geoInfo;\n }\n\n static isGeoLocationEnabledInSdk(): boolean {\n // TODO: Add geo location configuration to SDK settings\n // For now, return true to enable geo location by default\n return false;\n }\n\n static getVisitInfo(): VisitInfo | undefined {\n return this.visitInfo;\n }\n\n static getBrowser(): string {\n // In React Native, we return the platform as browser equivalent\n return this.devicePlatform;\n }\n\n static getMpUserStatus(): number {\n // Return user status based on visit count\n // 1 = new user (first visit), 0 = returning user\n const visitInfo = this.getVisitInfo();\n if (!visitInfo) {\n return 1; // Default to new user if no visit info\n }\n return visitInfo.visitCt === 1 ? 1 : 0;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
+
import { Linking } from 'react-native';
|
|
5
|
+
import { Logger } from './logger';
|
|
6
|
+
export let DeepLinkType = /*#__PURE__*/function (DeepLinkType) {
|
|
7
|
+
DeepLinkType["CUSTOM_SCHEME"] = "custom_scheme";
|
|
8
|
+
// myapp://
|
|
9
|
+
DeepLinkType["UNIVERSAL_LINK"] = "universal_link";
|
|
10
|
+
// https:// (iOS Universal Links)
|
|
11
|
+
DeepLinkType["APP_LINK"] = "app_link";
|
|
12
|
+
// https:// (Android App Links)
|
|
13
|
+
DeepLinkType["HTTP_LINK"] = "http_link"; // http://
|
|
14
|
+
return DeepLinkType;
|
|
15
|
+
}({});
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Helper class to automatically detect and handle deeplinks
|
|
19
|
+
*
|
|
20
|
+
* Supports multiple link types:
|
|
21
|
+
* 1. Custom URL Schemes: myapp://product/123
|
|
22
|
+
* 2. Universal Links (iOS): https://my-site.com/product/123
|
|
23
|
+
* 3. App Links (Android): https://my-site.com/product/123
|
|
24
|
+
* 4. HTTP Links: http://my-site.com/product/123
|
|
25
|
+
*
|
|
26
|
+
* Common use cases:
|
|
27
|
+
* - Ad clicks (Facebook, Google, TikTok ads with http/https URLs)
|
|
28
|
+
* - Push notification deep links
|
|
29
|
+
* - Email marketing links
|
|
30
|
+
* - SMS campaign links
|
|
31
|
+
* - QR codes
|
|
32
|
+
*/
|
|
33
|
+
export class DeepLinkHelper {
|
|
34
|
+
/**
|
|
35
|
+
* Determine the type of deeplink
|
|
36
|
+
* @param url The URL to analyze
|
|
37
|
+
* @returns The type of deeplink
|
|
38
|
+
*/
|
|
39
|
+
static getLinkType(url) {
|
|
40
|
+
try {
|
|
41
|
+
if (url.startsWith('https://')) {
|
|
42
|
+
// Universal Links (iOS) and App Links (Android) both use HTTPS
|
|
43
|
+
return DeepLinkType.UNIVERSAL_LINK;
|
|
44
|
+
} else if (url.startsWith('http://')) {
|
|
45
|
+
return DeepLinkType.HTTP_LINK;
|
|
46
|
+
} else {
|
|
47
|
+
// Custom URL scheme (e.g., myapp://)
|
|
48
|
+
return DeepLinkType.CUSTOM_SCHEME;
|
|
49
|
+
}
|
|
50
|
+
} catch (error) {
|
|
51
|
+
Logger.logError('Error determining link type:', error);
|
|
52
|
+
return DeepLinkType.CUSTOM_SCHEME;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Initialize deeplink detection
|
|
58
|
+
* - Checks if app was opened with initial URL (custom scheme, universal link, or HTTP link)
|
|
59
|
+
* - Sets up listener for deeplinks while app is running
|
|
60
|
+
* @param callback Optional callback to be notified when deeplink is detected
|
|
61
|
+
* @returns The initial URL if app was opened with deeplink, null otherwise
|
|
62
|
+
*/
|
|
63
|
+
static async initialize(callback) {
|
|
64
|
+
try {
|
|
65
|
+
// Store callback if provided
|
|
66
|
+
if (callback) {
|
|
67
|
+
this.onDeepLinkCallback = callback;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Check if app was opened with a deeplink
|
|
71
|
+
// This works for:
|
|
72
|
+
// - Custom schemes: myapp://product/123
|
|
73
|
+
// - Universal Links (iOS): https://my-site.com/product/123
|
|
74
|
+
// - App Links (Android): https://my-site.com/product/123
|
|
75
|
+
// - HTTP links: http://my-site.com/product/123
|
|
76
|
+
const initialUrl = await Linking.getInitialURL();
|
|
77
|
+
if (initialUrl) {
|
|
78
|
+
const linkType = this.getLinkType(initialUrl);
|
|
79
|
+
Logger.logDbg(`App opened with initial ${linkType}:`, initialUrl);
|
|
80
|
+
this.handleDeepLink(initialUrl);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// ALWAYS set up listener for deeplinks while app is running
|
|
84
|
+
// This ensures we can detect deeplinks even if app was opened with initial deeplink
|
|
85
|
+
this.setupListener();
|
|
86
|
+
return initialUrl;
|
|
87
|
+
} catch (error) {
|
|
88
|
+
Logger.logError('Error initializing deeplink detection:', error);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Set up listener for deeplinks received while app is running
|
|
95
|
+
* Works for all link types: custom schemes, universal links, app links, HTTP links
|
|
96
|
+
*/
|
|
97
|
+
static setupListener() {
|
|
98
|
+
// Remove existing listener if any
|
|
99
|
+
if (this.listener) {
|
|
100
|
+
this.listener.remove();
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Listen for deeplinks while app is running (e.g., user clicks link while app is open)
|
|
104
|
+
this.listener = Linking.addEventListener('url', event => {
|
|
105
|
+
const linkType = this.getLinkType(event.url);
|
|
106
|
+
Logger.logDbg(`Deeplink received (${linkType}):`, event.url);
|
|
107
|
+
this.handleDeepLink(event.url);
|
|
108
|
+
});
|
|
109
|
+
Logger.logDbg('Deeplink listener set up (supports custom schemes, universal/app links, HTTP links)');
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Handle deeplink URL - notify callback if registered
|
|
114
|
+
* @param url The deeplink URL
|
|
115
|
+
*/
|
|
116
|
+
static handleDeepLink(url) {
|
|
117
|
+
if (this.onDeepLinkCallback) {
|
|
118
|
+
const linkType = this.getLinkType(url);
|
|
119
|
+
this.onDeepLinkCallback(url, linkType);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Remove deeplink listener and clear callback
|
|
125
|
+
*/
|
|
126
|
+
static cleanup() {
|
|
127
|
+
if (this.listener) {
|
|
128
|
+
this.listener.remove();
|
|
129
|
+
this.listener = null;
|
|
130
|
+
}
|
|
131
|
+
this.onDeepLinkCallback = null;
|
|
132
|
+
Logger.logDbg('Deeplink listener and callback cleared');
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Parse UTM parameters and other campaign data from URL
|
|
137
|
+
* @param url The deeplink URL
|
|
138
|
+
* @returns Object containing campaign parameters
|
|
139
|
+
*/
|
|
140
|
+
static parseCampaignParams(url) {
|
|
141
|
+
try {
|
|
142
|
+
const urlObj = new URL(url);
|
|
143
|
+
const params = {};
|
|
144
|
+
|
|
145
|
+
// Common campaign parameters
|
|
146
|
+
const campaignParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'utm_id', 'gclid',
|
|
147
|
+
// Google Click ID
|
|
148
|
+
'fbclid',
|
|
149
|
+
// Facebook Click ID
|
|
150
|
+
'ttclid',
|
|
151
|
+
// TikTok Click ID
|
|
152
|
+
'campaign_id', 'ad_id', 'adset_id', 'creative_id'];
|
|
153
|
+
campaignParams.forEach(param => {
|
|
154
|
+
const value = urlObj.searchParams.get(param);
|
|
155
|
+
if (value) {
|
|
156
|
+
params[param] = value;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
return params;
|
|
160
|
+
} catch (error) {
|
|
161
|
+
Logger.logError('Error parsing campaign params from URL:', error);
|
|
162
|
+
return {};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
_defineProperty(DeepLinkHelper, "listener", null);
|
|
167
|
+
_defineProperty(DeepLinkHelper, "onDeepLinkCallback", null);
|
|
168
|
+
//# sourceMappingURL=deeplink-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Linking","Logger","DeepLinkType","DeepLinkHelper","getLinkType","url","startsWith","UNIVERSAL_LINK","HTTP_LINK","CUSTOM_SCHEME","error","logError","initialize","callback","onDeepLinkCallback","initialUrl","getInitialURL","linkType","logDbg","handleDeepLink","setupListener","listener","remove","addEventListener","event","cleanup","parseCampaignParams","urlObj","URL","params","campaignParams","forEach","param","value","searchParams","get","_defineProperty"],"sources":["deeplink-helper.ts"],"sourcesContent":["import { Linking } from 'react-native';\nimport { Logger } from './logger';\n\nexport enum DeepLinkType {\n CUSTOM_SCHEME = 'custom_scheme', // myapp://\n UNIVERSAL_LINK = 'universal_link', // https:// (iOS Universal Links)\n APP_LINK = 'app_link', // https:// (Android App Links)\n HTTP_LINK = 'http_link', // http://\n}\n\n/**\n * Helper class to automatically detect and handle deeplinks\n *\n * Supports multiple link types:\n * 1. Custom URL Schemes: myapp://product/123\n * 2. Universal Links (iOS): https://my-site.com/product/123\n * 3. App Links (Android): https://my-site.com/product/123\n * 4. HTTP Links: http://my-site.com/product/123\n *\n * Common use cases:\n * - Ad clicks (Facebook, Google, TikTok ads with http/https URLs)\n * - Push notification deep links\n * - Email marketing links\n * - SMS campaign links\n * - QR codes\n */\nexport class DeepLinkHelper {\n private static listener: any = null;\n private static onDeepLinkCallback:\n | ((url: string, linkType: DeepLinkType) => void)\n | null = null;\n\n /**\n * Determine the type of deeplink\n * @param url The URL to analyze\n * @returns The type of deeplink\n */\n static getLinkType(url: string): DeepLinkType {\n try {\n if (url.startsWith('https://')) {\n // Universal Links (iOS) and App Links (Android) both use HTTPS\n return DeepLinkType.UNIVERSAL_LINK;\n } else if (url.startsWith('http://')) {\n return DeepLinkType.HTTP_LINK;\n } else {\n // Custom URL scheme (e.g., myapp://)\n return DeepLinkType.CUSTOM_SCHEME;\n }\n } catch (error) {\n Logger.logError('Error determining link type:', error);\n return DeepLinkType.CUSTOM_SCHEME;\n }\n }\n\n /**\n * Initialize deeplink detection\n * - Checks if app was opened with initial URL (custom scheme, universal link, or HTTP link)\n * - Sets up listener for deeplinks while app is running\n * @param callback Optional callback to be notified when deeplink is detected\n * @returns The initial URL if app was opened with deeplink, null otherwise\n */\n static async initialize(\n callback?: (url: string, linkType: DeepLinkType) => void\n ): Promise<string | null> {\n try {\n // Store callback if provided\n if (callback) {\n this.onDeepLinkCallback = callback;\n }\n\n // Check if app was opened with a deeplink\n // This works for:\n // - Custom schemes: myapp://product/123\n // - Universal Links (iOS): https://my-site.com/product/123\n // - App Links (Android): https://my-site.com/product/123\n // - HTTP links: http://my-site.com/product/123\n const initialUrl = await Linking.getInitialURL();\n\n if (initialUrl) {\n const linkType = this.getLinkType(initialUrl);\n Logger.logDbg(`App opened with initial ${linkType}:`, initialUrl);\n this.handleDeepLink(initialUrl);\n }\n\n // ALWAYS set up listener for deeplinks while app is running\n // This ensures we can detect deeplinks even if app was opened with initial deeplink\n this.setupListener();\n\n return initialUrl;\n } catch (error) {\n Logger.logError('Error initializing deeplink detection:', error);\n return null;\n }\n }\n\n /**\n * Set up listener for deeplinks received while app is running\n * Works for all link types: custom schemes, universal links, app links, HTTP links\n */\n private static setupListener(): void {\n // Remove existing listener if any\n if (this.listener) {\n this.listener.remove();\n }\n\n // Listen for deeplinks while app is running (e.g., user clicks link while app is open)\n this.listener = Linking.addEventListener('url', (event) => {\n const linkType = this.getLinkType(event.url);\n Logger.logDbg(`Deeplink received (${linkType}):`, event.url);\n this.handleDeepLink(event.url);\n });\n\n Logger.logDbg(\n 'Deeplink listener set up (supports custom schemes, universal/app links, HTTP links)'\n );\n }\n\n /**\n * Handle deeplink URL - notify callback if registered\n * @param url The deeplink URL\n */\n private static handleDeepLink(url: string): void {\n if (this.onDeepLinkCallback) {\n const linkType = this.getLinkType(url);\n this.onDeepLinkCallback(url, linkType);\n }\n }\n\n /**\n * Remove deeplink listener and clear callback\n */\n static cleanup(): void {\n if (this.listener) {\n this.listener.remove();\n this.listener = null;\n }\n this.onDeepLinkCallback = null;\n Logger.logDbg('Deeplink listener and callback cleared');\n }\n\n /**\n * Parse UTM parameters and other campaign data from URL\n * @param url The deeplink URL\n * @returns Object containing campaign parameters\n */\n static parseCampaignParams(url: string): Record<string, string> {\n try {\n const urlObj = new URL(url);\n const params: Record<string, string> = {};\n\n // Common campaign parameters\n const campaignParams = [\n 'utm_source',\n 'utm_medium',\n 'utm_campaign',\n 'utm_term',\n 'utm_content',\n 'utm_id',\n 'gclid', // Google Click ID\n 'fbclid', // Facebook Click ID\n 'ttclid', // TikTok Click ID\n 'campaign_id',\n 'ad_id',\n 'adset_id',\n 'creative_id',\n ];\n\n campaignParams.forEach((param) => {\n const value = urlObj.searchParams.get(param);\n if (value) {\n params[param] = value;\n }\n });\n\n return params;\n } catch (error) {\n Logger.logError('Error parsing campaign params from URL:', error);\n return {};\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
2
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
3
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
4
|
+
import { Platform } from 'react-native';
|
|
5
|
+
import { Logger } from './logger';
|
|
6
|
+
/**
|
|
7
|
+
* Helper class to automatically detect device and app information
|
|
8
|
+
* Supports both Expo and bare React Native:
|
|
9
|
+
* 1. Tries Expo modules first (works in Expo Go)
|
|
10
|
+
* 2. Falls back to react-native-device-info (for bare RN)
|
|
11
|
+
* 3. Returns safe defaults if neither is available
|
|
12
|
+
*/
|
|
13
|
+
export class DeviceInfoHelper {
|
|
14
|
+
/**
|
|
15
|
+
* Try to load Expo modules and react-native-device-info
|
|
16
|
+
* This uses dynamic imports to avoid errors when modules aren't available
|
|
17
|
+
*/
|
|
18
|
+
static async initialize() {
|
|
19
|
+
if (this.initialized) return;
|
|
20
|
+
|
|
21
|
+
// Try to load Expo modules first (works in Expo Go)
|
|
22
|
+
try {
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
24
|
+
this.expoApplication = require('expo-application');
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
26
|
+
this.expoDevice = require('expo-device');
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
28
|
+
this.expoConstants = require('expo-constants').default;
|
|
29
|
+
Logger.logDbg('Using Expo modules for device info');
|
|
30
|
+
} catch (error) {
|
|
31
|
+
Logger.logDbg('Expo modules not available, will try react-native-device-info');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Fall back to react-native-device-info (for bare RN)
|
|
35
|
+
if (!this.expoApplication) {
|
|
36
|
+
try {
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
38
|
+
this.deviceInfo = require('react-native-device-info').default;
|
|
39
|
+
Logger.logDbg('Using react-native-device-info for device info');
|
|
40
|
+
} catch (error) {
|
|
41
|
+
Logger.logError('Neither Expo modules nor react-native-device-info available:', error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
this.initialized = true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Get comprehensive app and device information
|
|
49
|
+
* All methods are async-safe and handle errors gracefully
|
|
50
|
+
*/
|
|
51
|
+
static async getAppInfo() {
|
|
52
|
+
await this.initialize();
|
|
53
|
+
try {
|
|
54
|
+
// Try Expo modules first
|
|
55
|
+
if (this.expoApplication && this.expoDevice) {
|
|
56
|
+
return await this.getAppInfoFromExpo();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Fall back to react-native-device-info
|
|
60
|
+
if (this.deviceInfo) {
|
|
61
|
+
return await this.getAppInfoFromDeviceInfo();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Return safe fallback values
|
|
65
|
+
return this.getSafeDefaults();
|
|
66
|
+
} catch (error) {
|
|
67
|
+
Logger.logError('Error getting device info:', error);
|
|
68
|
+
return this.getSafeDefaults();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Get device info using Expo modules (works in Expo Go)
|
|
74
|
+
*/
|
|
75
|
+
static async getAppInfoFromExpo() {
|
|
76
|
+
var _Platform$Version;
|
|
77
|
+
const version = this.expoApplication.nativeApplicationVersion || 'unknown';
|
|
78
|
+
const buildNumber = this.expoApplication.nativeBuildVersion || 'unknown';
|
|
79
|
+
const packageName = this.expoApplication.applicationId || 'unknown';
|
|
80
|
+
return {
|
|
81
|
+
// App information
|
|
82
|
+
app_version: version,
|
|
83
|
+
build_number: buildNumber,
|
|
84
|
+
package_name: packageName,
|
|
85
|
+
// Device information
|
|
86
|
+
device_model_name: this.expoDevice.modelName || 'unknown',
|
|
87
|
+
device_manufacturer: this.expoDevice.manufacturer || 'unknown',
|
|
88
|
+
device_id: this.expoConstants.sessionId || 'unknown',
|
|
89
|
+
// OS information
|
|
90
|
+
os_name: Platform.OS,
|
|
91
|
+
os_version: this.expoDevice.osVersion || ((_Platform$Version = Platform.Version) === null || _Platform$Version === void 0 ? void 0 : _Platform$Version.toString()) || 'unknown',
|
|
92
|
+
// Additional useful info
|
|
93
|
+
// DeviceType enum: UNKNOWN=0, PHONE=1, TABLET=2, DESKTOP=3, TV=4
|
|
94
|
+
is_tablet: this.expoDevice.deviceType === 2,
|
|
95
|
+
// DeviceType.TABLET = 2
|
|
96
|
+
is_emulator: !this.expoDevice.isDevice
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Get device info using react-native-device-info (for bare RN)
|
|
102
|
+
*/
|
|
103
|
+
static async getAppInfoFromDeviceInfo() {
|
|
104
|
+
const [version, buildNumber, uniqueId, bundleId] = await Promise.all([this.deviceInfo.getVersion(), this.deviceInfo.getBuildNumber(), this.deviceInfo.getUniqueId(), this.deviceInfo.getBundleId()]);
|
|
105
|
+
return {
|
|
106
|
+
// App information
|
|
107
|
+
app_version: version,
|
|
108
|
+
build_number: buildNumber,
|
|
109
|
+
package_name: bundleId,
|
|
110
|
+
// Device information
|
|
111
|
+
device_model_name: this.deviceInfo.getModel(),
|
|
112
|
+
device_manufacturer: this.deviceInfo.getManufacturerSync(),
|
|
113
|
+
device_id: uniqueId,
|
|
114
|
+
// OS information
|
|
115
|
+
os_name: Platform.OS,
|
|
116
|
+
os_version: this.deviceInfo.getSystemVersion(),
|
|
117
|
+
// Additional useful info
|
|
118
|
+
is_tablet: this.deviceInfo.isTablet(),
|
|
119
|
+
is_emulator: await this.deviceInfo.isEmulator()
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Safe default values when no device info library is available
|
|
125
|
+
*/
|
|
126
|
+
static getSafeDefaults() {
|
|
127
|
+
var _Platform$Version2;
|
|
128
|
+
return {
|
|
129
|
+
app_version: 'unknown',
|
|
130
|
+
build_number: 'unknown',
|
|
131
|
+
package_name: 'unknown',
|
|
132
|
+
device_model_name: 'unknown',
|
|
133
|
+
device_manufacturer: 'unknown',
|
|
134
|
+
device_id: 'unknown',
|
|
135
|
+
os_name: Platform.OS,
|
|
136
|
+
os_version: ((_Platform$Version2 = Platform.Version) === null || _Platform$Version2 === void 0 ? void 0 : _Platform$Version2.toString()) || 'unknown',
|
|
137
|
+
is_tablet: false,
|
|
138
|
+
is_emulator: false
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Get app version in format: "1.0.0 (123)"
|
|
144
|
+
* Combines version and build number for better tracking
|
|
145
|
+
*/
|
|
146
|
+
static async getFormattedAppVersion() {
|
|
147
|
+
try {
|
|
148
|
+
const info = await this.getAppInfo();
|
|
149
|
+
return `${info.app_version} (${info.build_number})`;
|
|
150
|
+
} catch (error) {
|
|
151
|
+
Logger.logError('Error getting formatted app version:', error);
|
|
152
|
+
return 'unknown';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
_defineProperty(DeviceInfoHelper, "expoApplication", null);
|
|
157
|
+
_defineProperty(DeviceInfoHelper, "expoDevice", null);
|
|
158
|
+
_defineProperty(DeviceInfoHelper, "expoConstants", null);
|
|
159
|
+
_defineProperty(DeviceInfoHelper, "deviceInfo", null);
|
|
160
|
+
_defineProperty(DeviceInfoHelper, "initialized", false);
|
|
161
|
+
//# sourceMappingURL=device-info-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Platform","Logger","DeviceInfoHelper","initialize","initialized","expoApplication","require","expoDevice","expoConstants","default","logDbg","error","deviceInfo","logError","getAppInfo","getAppInfoFromExpo","getAppInfoFromDeviceInfo","getSafeDefaults","_Platform$Version","version","nativeApplicationVersion","buildNumber","nativeBuildVersion","packageName","applicationId","app_version","build_number","package_name","device_model_name","modelName","device_manufacturer","manufacturer","device_id","sessionId","os_name","OS","os_version","osVersion","Version","toString","is_tablet","deviceType","is_emulator","isDevice","uniqueId","bundleId","Promise","all","getVersion","getBuildNumber","getUniqueId","getBundleId","getModel","getManufacturerSync","getSystemVersion","isTablet","isEmulator","_Platform$Version2","getFormattedAppVersion","info","_defineProperty"],"sources":["device-info-helper.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport { Logger } from './logger';\n\ninterface DeviceAppInfo {\n app_version: string;\n build_number: string;\n package_name: string;\n device_model_name: string;\n device_manufacturer: string;\n device_id: string;\n os_name: string;\n os_version: string;\n is_tablet: boolean;\n is_emulator: boolean;\n}\n\n/**\n * Helper class to automatically detect device and app information\n * Supports both Expo and bare React Native:\n * 1. Tries Expo modules first (works in Expo Go)\n * 2. Falls back to react-native-device-info (for bare RN)\n * 3. Returns safe defaults if neither is available\n */\nexport class DeviceInfoHelper {\n private static expoApplication: any = null;\n private static expoDevice: any = null;\n private static expoConstants: any = null;\n private static deviceInfo: any = null;\n private static initialized = false;\n\n /**\n * Try to load Expo modules and react-native-device-info\n * This uses dynamic imports to avoid errors when modules aren't available\n */\n private static async initialize(): Promise<void> {\n if (this.initialized) return;\n\n // Try to load Expo modules first (works in Expo Go)\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n this.expoApplication = require('expo-application');\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n this.expoDevice = require('expo-device');\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n this.expoConstants = require('expo-constants').default;\n Logger.logDbg('Using Expo modules for device info');\n } catch (error) {\n Logger.logDbg(\n 'Expo modules not available, will try react-native-device-info'\n );\n }\n\n // Fall back to react-native-device-info (for bare RN)\n if (!this.expoApplication) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n this.deviceInfo = require('react-native-device-info').default;\n Logger.logDbg('Using react-native-device-info for device info');\n } catch (error) {\n Logger.logError(\n 'Neither Expo modules nor react-native-device-info available:',\n error\n );\n }\n }\n\n this.initialized = true;\n }\n\n /**\n * Get comprehensive app and device information\n * All methods are async-safe and handle errors gracefully\n */\n static async getAppInfo(): Promise<DeviceAppInfo> {\n await this.initialize();\n\n try {\n // Try Expo modules first\n if (this.expoApplication && this.expoDevice) {\n return await this.getAppInfoFromExpo();\n }\n\n // Fall back to react-native-device-info\n if (this.deviceInfo) {\n return await this.getAppInfoFromDeviceInfo();\n }\n\n // Return safe fallback values\n return this.getSafeDefaults();\n } catch (error) {\n Logger.logError('Error getting device info:', error);\n return this.getSafeDefaults();\n }\n }\n\n /**\n * Get device info using Expo modules (works in Expo Go)\n */\n private static async getAppInfoFromExpo(): Promise<DeviceAppInfo> {\n const version = this.expoApplication.nativeApplicationVersion || 'unknown';\n const buildNumber = this.expoApplication.nativeBuildVersion || 'unknown';\n const packageName = this.expoApplication.applicationId || 'unknown';\n\n return {\n // App information\n app_version: version,\n build_number: buildNumber,\n package_name: packageName,\n\n // Device information\n device_model_name: this.expoDevice.modelName || 'unknown',\n device_manufacturer: this.expoDevice.manufacturer || 'unknown',\n device_id: this.expoConstants.sessionId || 'unknown',\n\n // OS information\n os_name: Platform.OS,\n os_version:\n this.expoDevice.osVersion || Platform.Version?.toString() || 'unknown',\n\n // Additional useful info\n // DeviceType enum: UNKNOWN=0, PHONE=1, TABLET=2, DESKTOP=3, TV=4\n is_tablet: this.expoDevice.deviceType === 2, // DeviceType.TABLET = 2\n is_emulator: !this.expoDevice.isDevice,\n };\n }\n\n /**\n * Get device info using react-native-device-info (for bare RN)\n */\n private static async getAppInfoFromDeviceInfo(): Promise<DeviceAppInfo> {\n const [version, buildNumber, uniqueId, bundleId] = await Promise.all([\n this.deviceInfo.getVersion(),\n this.deviceInfo.getBuildNumber(),\n this.deviceInfo.getUniqueId(),\n this.deviceInfo.getBundleId(),\n ]);\n\n return {\n // App information\n app_version: version,\n build_number: buildNumber,\n package_name: bundleId,\n\n // Device information\n device_model_name: this.deviceInfo.getModel(),\n device_manufacturer: this.deviceInfo.getManufacturerSync(),\n device_id: uniqueId,\n\n // OS information\n os_name: Platform.OS,\n os_version: this.deviceInfo.getSystemVersion(),\n\n // Additional useful info\n is_tablet: this.deviceInfo.isTablet(),\n is_emulator: await this.deviceInfo.isEmulator(),\n };\n }\n\n /**\n * Safe default values when no device info library is available\n */\n private static getSafeDefaults(): DeviceAppInfo {\n return {\n app_version: 'unknown',\n build_number: 'unknown',\n package_name: 'unknown',\n device_model_name: 'unknown',\n device_manufacturer: 'unknown',\n device_id: 'unknown',\n os_name: Platform.OS,\n os_version: Platform.Version?.toString() || 'unknown',\n is_tablet: false,\n is_emulator: false,\n };\n }\n\n /**\n * Get app version in format: \"1.0.0 (123)\"\n * Combines version and build number for better tracking\n */\n static async getFormattedAppVersion(): Promise<string> {\n try {\n const info = await this.getAppInfo();\n return `${info.app_version} (${info.build_number})`;\n } catch (error) {\n Logger.logError('Error getting formatted app version:', error);\n return 'unknown';\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|