@datalyr/react-native 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/CHANGELOG.md +24 -141
  2. package/LICENSE +21 -0
  3. package/README.md +405 -217
  4. package/datalyr-react-native.podspec +31 -0
  5. package/ios/DatalyrNative.m +70 -0
  6. package/ios/DatalyrNative.swift +275 -0
  7. package/ios/DatalyrSKAdNetwork.m +26 -0
  8. package/lib/datalyr-sdk.d.ts +64 -3
  9. package/lib/datalyr-sdk.js +322 -3
  10. package/lib/index.d.ts +1 -0
  11. package/lib/index.js +4 -2
  12. package/lib/integrations/index.d.ts +6 -0
  13. package/lib/integrations/index.js +6 -0
  14. package/lib/integrations/meta-integration.d.ts +76 -0
  15. package/lib/integrations/meta-integration.js +218 -0
  16. package/lib/integrations/tiktok-integration.d.ts +82 -0
  17. package/lib/integrations/tiktok-integration.js +356 -0
  18. package/lib/native/DatalyrNativeBridge.d.ts +31 -0
  19. package/lib/native/DatalyrNativeBridge.js +168 -0
  20. package/lib/native/index.d.ts +5 -0
  21. package/lib/native/index.js +5 -0
  22. package/lib/types.d.ts +29 -0
  23. package/package.json +10 -5
  24. package/src/datalyr-sdk-expo.ts +957 -0
  25. package/src/datalyr-sdk.ts +419 -19
  26. package/src/expo.ts +38 -18
  27. package/src/index.ts +5 -2
  28. package/src/integrations/index.ts +7 -0
  29. package/src/integrations/meta-integration.ts +238 -0
  30. package/src/integrations/tiktok-integration.ts +360 -0
  31. package/src/native/DatalyrNativeBridge.ts +271 -0
  32. package/src/native/index.ts +11 -0
  33. package/src/types.ts +39 -0
  34. package/src/utils-expo.ts +25 -3
  35. package/src/utils-interface.ts +38 -0
  36. package/EXPO_INSTALL.md +0 -297
  37. package/INSTALL.md +0 -402
  38. package/examples/attribution-example.tsx +0 -377
  39. package/examples/auto-events-example.tsx +0 -403
  40. package/examples/example.tsx +0 -250
  41. package/examples/skadnetwork-example.tsx +0 -380
  42. package/examples/test-implementation.tsx +0 -163
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Native Bridge for Meta and TikTok SDKs
3
+ * Uses bundled native modules instead of separate npm packages
4
+ */
5
+ import { NativeModules, Platform } from 'react-native';
6
+ // Native module is only available on iOS
7
+ const DatalyrNative = Platform.OS === 'ios' ? NativeModules.DatalyrNative : null;
8
+ /**
9
+ * Check if native module is available
10
+ */
11
+ export const isNativeModuleAvailable = () => {
12
+ return DatalyrNative !== null;
13
+ };
14
+ /**
15
+ * Get SDK availability status
16
+ */
17
+ export const getSDKAvailability = async () => {
18
+ if (!DatalyrNative) {
19
+ return { meta: false, tiktok: false };
20
+ }
21
+ try {
22
+ return await DatalyrNative.getSDKAvailability();
23
+ }
24
+ catch (_a) {
25
+ return { meta: false, tiktok: false };
26
+ }
27
+ };
28
+ // MARK: - Meta SDK Bridge
29
+ export const MetaNativeBridge = {
30
+ async initialize(appId, clientToken, advertiserTrackingEnabled = false) {
31
+ if (!DatalyrNative)
32
+ return false;
33
+ try {
34
+ return await DatalyrNative.initializeMetaSDK(appId, clientToken || null, advertiserTrackingEnabled);
35
+ }
36
+ catch (error) {
37
+ console.error('[Datalyr/MetaNative] Initialize failed:', error);
38
+ return false;
39
+ }
40
+ },
41
+ async fetchDeferredAppLink() {
42
+ if (!DatalyrNative)
43
+ return null;
44
+ try {
45
+ return await DatalyrNative.fetchDeferredAppLink();
46
+ }
47
+ catch (_a) {
48
+ return null;
49
+ }
50
+ },
51
+ async logEvent(eventName, valueToSum, parameters) {
52
+ if (!DatalyrNative)
53
+ return false;
54
+ try {
55
+ return await DatalyrNative.logMetaEvent(eventName, valueToSum !== null && valueToSum !== void 0 ? valueToSum : null, parameters || null);
56
+ }
57
+ catch (error) {
58
+ console.error('[Datalyr/MetaNative] Log event failed:', error);
59
+ return false;
60
+ }
61
+ },
62
+ async logPurchase(amount, currency, parameters) {
63
+ if (!DatalyrNative)
64
+ return false;
65
+ try {
66
+ return await DatalyrNative.logMetaPurchase(amount, currency, parameters || null);
67
+ }
68
+ catch (error) {
69
+ console.error('[Datalyr/MetaNative] Log purchase failed:', error);
70
+ return false;
71
+ }
72
+ },
73
+ async setUserData(userData) {
74
+ if (!DatalyrNative)
75
+ return false;
76
+ try {
77
+ return await DatalyrNative.setMetaUserData(userData);
78
+ }
79
+ catch (error) {
80
+ console.error('[Datalyr/MetaNative] Set user data failed:', error);
81
+ return false;
82
+ }
83
+ },
84
+ async clearUserData() {
85
+ if (!DatalyrNative)
86
+ return false;
87
+ try {
88
+ return await DatalyrNative.clearMetaUserData();
89
+ }
90
+ catch (error) {
91
+ console.error('[Datalyr/MetaNative] Clear user data failed:', error);
92
+ return false;
93
+ }
94
+ },
95
+ async updateTrackingAuthorization(enabled) {
96
+ if (!DatalyrNative)
97
+ return false;
98
+ try {
99
+ return await DatalyrNative.updateMetaTrackingAuthorization(enabled);
100
+ }
101
+ catch (error) {
102
+ console.error('[Datalyr/MetaNative] Update tracking failed:', error);
103
+ return false;
104
+ }
105
+ },
106
+ };
107
+ // MARK: - TikTok SDK Bridge
108
+ export const TikTokNativeBridge = {
109
+ async initialize(appId, tiktokAppId, accessToken, debug = false) {
110
+ if (!DatalyrNative)
111
+ return false;
112
+ try {
113
+ return await DatalyrNative.initializeTikTokSDK(appId, tiktokAppId, accessToken || null, debug);
114
+ }
115
+ catch (error) {
116
+ console.error('[Datalyr/TikTokNative] Initialize failed:', error);
117
+ return false;
118
+ }
119
+ },
120
+ async trackEvent(eventName, eventId, properties) {
121
+ if (!DatalyrNative)
122
+ return false;
123
+ try {
124
+ return await DatalyrNative.trackTikTokEvent(eventName, eventId || null, properties || null);
125
+ }
126
+ catch (error) {
127
+ console.error('[Datalyr/TikTokNative] Track event failed:', error);
128
+ return false;
129
+ }
130
+ },
131
+ async identify(externalId, email, phone) {
132
+ if (!DatalyrNative)
133
+ return false;
134
+ // Only call if we have at least one value
135
+ if (!externalId && !email && !phone)
136
+ return false;
137
+ try {
138
+ return await DatalyrNative.identifyTikTokUser(externalId || '', '', // externalUserName - not typically available
139
+ phone || '', email || '');
140
+ }
141
+ catch (error) {
142
+ console.error('[Datalyr/TikTokNative] Identify failed:', error);
143
+ return false;
144
+ }
145
+ },
146
+ async logout() {
147
+ if (!DatalyrNative)
148
+ return false;
149
+ try {
150
+ return await DatalyrNative.logoutTikTok();
151
+ }
152
+ catch (error) {
153
+ console.error('[Datalyr/TikTokNative] Logout failed:', error);
154
+ return false;
155
+ }
156
+ },
157
+ async updateTrackingAuthorization(enabled) {
158
+ if (!DatalyrNative)
159
+ return false;
160
+ try {
161
+ return await DatalyrNative.updateTikTokTrackingAuthorization(enabled);
162
+ }
163
+ catch (error) {
164
+ console.error('[Datalyr/TikTokNative] Update tracking failed:', error);
165
+ return false;
166
+ }
167
+ },
168
+ };
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Native Module Exports
3
+ */
4
+ export { SKAdNetworkBridge } from './SKAdNetworkBridge';
5
+ export { isNativeModuleAvailable, getSDKAvailability, MetaNativeBridge, TikTokNativeBridge, } from './DatalyrNativeBridge';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Native Module Exports
3
+ */
4
+ export { SKAdNetworkBridge } from './SKAdNetworkBridge';
5
+ export { isNativeModuleAvailable, getSDKAvailability, MetaNativeBridge, TikTokNativeBridge, } from './DatalyrNativeBridge';
package/lib/types.d.ts CHANGED
@@ -5,6 +5,33 @@ export interface AutoEventConfig {
5
5
  trackPerformance?: boolean;
6
6
  sessionTimeoutMs?: number;
7
7
  }
8
+ export interface MetaConfig {
9
+ appId: string;
10
+ clientToken?: string;
11
+ enableDeferredDeepLink?: boolean;
12
+ enableAppEvents?: boolean;
13
+ advertiserTrackingEnabled?: boolean;
14
+ }
15
+ export interface TikTokConfig {
16
+ appId: string;
17
+ tiktokAppId: string;
18
+ accessToken?: string;
19
+ enableAppEvents?: boolean;
20
+ }
21
+ export interface DeferredDeepLinkResult {
22
+ url?: string;
23
+ source?: string;
24
+ fbclid?: string;
25
+ ttclid?: string;
26
+ utmSource?: string;
27
+ utmMedium?: string;
28
+ utmCampaign?: string;
29
+ utmContent?: string;
30
+ utmTerm?: string;
31
+ campaignId?: string;
32
+ adsetId?: string;
33
+ adId?: string;
34
+ }
8
35
  export interface DatalyrConfig {
9
36
  apiKey: string;
10
37
  workspaceId?: string;
@@ -30,6 +57,8 @@ export interface DatalyrConfig {
30
57
  retryDelay: number;
31
58
  };
32
59
  skadTemplate?: 'ecommerce' | 'gaming' | 'subscription';
60
+ meta?: MetaConfig;
61
+ tiktok?: TikTokConfig;
33
62
  }
34
63
  export interface EventData {
35
64
  [key: string]: any;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@datalyr/react-native",
3
- "version": "1.1.1",
4
- "description": "Datalyr SDK for React Native & Expo - Server-side attribution tracking",
3
+ "version": "1.2.0",
4
+ "description": "Datalyr SDK for React Native & Expo - Server-side attribution tracking with bundled Meta and TikTok SDKs",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
7
7
  "scripts": {
@@ -14,8 +14,11 @@
14
14
  "files": [
15
15
  "lib/",
16
16
  "src/",
17
- "*.md",
18
- "examples/"
17
+ "ios/",
18
+ "README.md",
19
+ "CHANGELOG.md",
20
+ "LICENSE",
21
+ "*.podspec"
19
22
  ],
20
23
  "keywords": [
21
24
  "react-native",
@@ -36,7 +39,9 @@
36
39
  "google-attribution",
37
40
  "ios-attribution",
38
41
  "conversion-tracking",
39
- "revenue-optimization"
42
+ "revenue-optimization",
43
+ "deferred-deep-linking",
44
+ "fbclid"
40
45
  ],
41
46
  "author": "Datalyr",
42
47
  "license": "MIT",