@attryio/react-native 0.1.3 → 0.1.5

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/dist/index.d.ts CHANGED
@@ -53,11 +53,11 @@ export interface ReactNativeAttryConfig extends Omit<AttryConfig, "platform" | "
53
53
  }
54
54
  export { parseAttryUrl };
55
55
  export declare function createAttryReactNative(config: ReactNativeAttryConfig): Promise<Attry>;
56
- export declare function collectReactNativeContext(rn?: ReactNativeLike | undefined, configuredContext?: AttryConfig["context"]): Promise<AttryContext>;
56
+ export declare function collectReactNativeContext(rn?: ReactNativeLike, configuredContext?: AttryConfig["context"]): Promise<AttryContext>;
57
57
  export declare function attachReactNativeLifecycleTracking(client: Attry, rn: ReactNativeLike | undefined, storage: AttryStorage | undefined, options: {
58
58
  appId: string;
59
59
  sessionTimeoutMs?: number;
60
60
  }): Promise<void>;
61
- export declare function attachDeepLinkTracking(client: Attry, rn?: ReactNativeLike | undefined): Promise<void>;
62
- export declare function collectInstallAttribution(client: Attry, rn?: ReactNativeLike | undefined): Promise<void>;
61
+ export declare function attachDeepLinkTracking(client: Attry, rn?: ReactNativeLike): Promise<void>;
62
+ export declare function collectInstallAttribution(client: Attry, rn?: ReactNativeLike): Promise<void>;
63
63
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,13 +1,13 @@
1
1
  import { Attry, ATTRY_EVENTS, MemoryStorage, parseAttryUrl } from "@attryio/sdk-core";
2
2
  const SDK_NAME = "attry-react-native";
3
- const SDK_VERSION = "0.1.3";
3
+ const SDK_VERSION = "0.1.5";
4
4
  export { parseAttryUrl };
5
5
  export async function createAttryReactNative(config) {
6
- const rn = getReactNative();
6
+ const rn = await loadReactNative();
7
7
  const platform = rn?.Platform?.OS === "ios" || rn?.Platform?.OS === "android"
8
8
  ? rn.Platform.OS
9
9
  : "unknown";
10
- const storage = config.storage ?? createAsyncStorageAdapter() ?? new MemoryStorage();
10
+ const storage = config.storage ?? (await createAsyncStorageAdapter()) ?? new MemoryStorage();
11
11
  const context = await collectReactNativeContext(rn, config.context);
12
12
  const client = await new Attry({
13
13
  ...config,
@@ -29,18 +29,26 @@ export async function createAttryReactNative(config) {
29
29
  }
30
30
  return client;
31
31
  }
32
- export async function collectReactNativeContext(rn = getReactNative(), configuredContext = {}) {
33
- const modules = rn?.NativeModules;
32
+ export async function collectReactNativeContext(rn, configuredContext = {}) {
33
+ const native = rn ?? (await loadReactNative());
34
+ const modules = native?.NativeModules;
34
35
  const deviceInfo = modules?.RNDeviceInfo;
35
36
  const expoConstants = modules?.ExpoConstants ?? modules?.ExponentConstants;
36
37
  const platformConstants = modules?.PlatformConstants;
37
38
  const settings = modules?.SettingsManager;
38
- const screen = rn?.Dimensions?.get?.("screen");
39
+ const screen = native?.Dimensions?.get?.("screen");
39
40
  const locale = configuredContext?.locale ??
40
41
  readNestedString(settings?.settings, ["AppleLocale"]) ??
41
42
  readFirstString(readNestedUnknown(settings?.settings, ["AppleLanguages"])) ??
42
43
  readNestedString(deviceInfo, ["deviceLocale"]) ??
43
- rn?.I18nManager?.localeIdentifier;
44
+ native?.I18nManager?.localeIdentifier;
45
+ const timezone = configuredContext?.timezone ??
46
+ safeTimezone() ??
47
+ (await readMaybeString(deviceInfo?.timezone)) ??
48
+ (await readMaybeString(deviceInfo?.getTimezone));
49
+ const countryCode = configuredContext?.countryCode ??
50
+ readCountryCodeFromLocale(typeof locale === "string" ? locale : undefined) ??
51
+ readCountryCodeFromTimezone(timezone);
44
52
  return compactContext({
45
53
  sdkName: SDK_NAME,
46
54
  sdkVersion: SDK_VERSION,
@@ -74,10 +82,12 @@ export async function collectReactNativeContext(rn = getReactNative(), configure
74
82
  (await readMaybeString(deviceInfo?.getBuildNumber)) ??
75
83
  readNestedString(expoConstants, ["expoConfig", "ios", "buildNumber"]) ??
76
84
  readNestedString(expoConstants, ["expoConfig", "android", "versionCode"]),
77
- osVersion: rn?.Platform?.Version ? String(rn.Platform.Version) : undefined,
85
+ osVersion: native?.Platform?.Version
86
+ ? String(native.Platform.Version)
87
+ : undefined,
78
88
  systemName: configuredContext?.systemName ??
79
89
  (await readMaybeString(deviceInfo?.systemName)) ??
80
- (rn?.Platform?.OS ? String(rn.Platform.OS) : undefined),
90
+ (native?.Platform?.OS ? String(native.Platform.OS) : undefined),
81
91
  deviceModel: configuredContext?.deviceModel ??
82
92
  (await readMaybeString(deviceInfo?.model)) ??
83
93
  (await readMaybeString(deviceInfo?.getModel)) ??
@@ -106,13 +116,9 @@ export async function collectReactNativeContext(rn = getReactNative(), configure
106
116
  locale,
107
117
  language: configuredContext?.language ??
108
118
  (typeof locale === "string" ? locale.split(/[-_]/)[0] : undefined),
109
- timezone: configuredContext?.timezone ??
110
- safeTimezone() ??
111
- (await readMaybeString(deviceInfo?.timezone)) ??
112
- (await readMaybeString(deviceInfo?.getTimezone)),
113
- country: configuredContext?.country,
114
- countryCode: configuredContext?.countryCode ??
115
- readCountryCodeFromLocale(typeof locale === "string" ? locale : undefined),
119
+ timezone,
120
+ country: configuredContext?.country ?? countryNameFromCode(countryCode),
121
+ countryCode,
116
122
  region: configuredContext?.region,
117
123
  city: configuredContext?.city,
118
124
  carrier: configuredContext?.carrier ??
@@ -124,7 +130,8 @@ export async function collectReactNativeContext(rn = getReactNative(), configure
124
130
  ...configuredContext
125
131
  });
126
132
  }
127
- export async function attachReactNativeLifecycleTracking(client, rn = getReactNative(), storage = new MemoryStorage(), options) {
133
+ export async function attachReactNativeLifecycleTracking(client, rn, storage = new MemoryStorage(), options) {
134
+ const native = rn ?? (await loadReactNative());
128
135
  const installKey = `attry.${options.appId}.install_tracked`;
129
136
  const sessionStartedAt = Date.now();
130
137
  const sessionId = `ses_${sessionStartedAt.toString(36)}`;
@@ -143,7 +150,7 @@ export async function attachReactNativeLifecycleTracking(client, rn = getReactNa
143
150
  await client.track(ATTRY_EVENTS.OPEN, {
144
151
  properties: {
145
152
  auto: true,
146
- appState: rn?.AppState?.currentState ?? "active"
153
+ appState: native?.AppState?.currentState ?? "active"
147
154
  },
148
155
  context: {
149
156
  sessionId
@@ -157,10 +164,10 @@ export async function attachReactNativeLifecycleTracking(client, rn = getReactNa
157
164
  sessionId
158
165
  }
159
166
  });
160
- let active = rn?.AppState?.currentState !== "background";
167
+ let active = native?.AppState?.currentState !== "background";
161
168
  let lastActiveAt = sessionStartedAt;
162
169
  const sessionTimeoutMs = options.sessionTimeoutMs ?? 30 * 60 * 1000;
163
- rn?.AppState?.addEventListener?.("change", (state) => {
170
+ native?.AppState?.addEventListener?.("change", (state) => {
164
171
  const now = Date.now();
165
172
  if (state === "active" && !active) {
166
173
  active = true;
@@ -202,18 +209,20 @@ export async function attachReactNativeLifecycleTracking(client, rn = getReactNa
202
209
  }
203
210
  });
204
211
  }
205
- export async function attachDeepLinkTracking(client, rn = getReactNative()) {
206
- const initialUrl = await rn?.Linking?.getInitialURL?.();
212
+ export async function attachDeepLinkTracking(client, rn) {
213
+ const native = rn ?? (await loadReactNative());
214
+ const initialUrl = await native?.Linking?.getInitialURL?.();
207
215
  if (initialUrl) {
208
- await trackDeepLinkOpen(client, initialUrl, "initial_url", rn);
216
+ await trackDeepLinkOpen(client, initialUrl, "initial_url", native);
209
217
  }
210
- rn?.Linking?.addEventListener?.("url", ({ url }) => {
211
- void trackDeepLinkOpen(client, url, "linking_event", rn);
218
+ native?.Linking?.addEventListener?.("url", ({ url }) => {
219
+ void trackDeepLinkOpen(client, url, "linking_event", native);
212
220
  });
213
221
  }
214
- export async function collectInstallAttribution(client, rn = getReactNative()) {
215
- if (rn?.Platform?.OS === "ios") {
216
- const token = await rn.NativeModules?.AttryAppleAds?.attributionToken?.();
222
+ export async function collectInstallAttribution(client, rn) {
223
+ const native = rn ?? (await loadReactNative());
224
+ if (native?.Platform?.OS === "ios") {
225
+ const token = await native.NativeModules?.AttryAppleAds?.attributionToken?.();
217
226
  if (token) {
218
227
  const response = await client.submitAppleAdsToken(token);
219
228
  await client.track("apple_ads_token_collected", {
@@ -225,8 +234,8 @@ export async function collectInstallAttribution(client, rn = getReactNative()) {
225
234
  }
226
235
  return;
227
236
  }
228
- if (rn?.Platform?.OS === "android") {
229
- const payload = await rn.NativeModules?.AttryInstallReferrer?.getInstallReferrer?.();
237
+ if (native?.Platform?.OS === "android") {
238
+ const payload = await native.NativeModules?.AttryInstallReferrer?.getInstallReferrer?.();
230
239
  if (payload?.installReferrer) {
231
240
  const response = await client.resolveInstall({
232
241
  installReferrer: payload.installReferrer
@@ -242,10 +251,11 @@ export async function collectInstallAttribution(client, rn = getReactNative()) {
242
251
  }
243
252
  }
244
253
  }
245
- async function trackDeepLinkOpen(client, url, openType, rn = getReactNative()) {
254
+ async function trackDeepLinkOpen(client, url, openType, rn) {
255
+ const native = rn ?? (await loadReactNative());
246
256
  const parsed = parseAttryUrl(url);
247
- const openedFromUniversalLink = rn?.Platform?.OS === "ios";
248
- const openedFromAndroidAppLink = rn?.Platform?.OS === "android";
257
+ const openedFromUniversalLink = native?.Platform?.OS === "ios";
258
+ const openedFromAndroidAppLink = native?.Platform?.OS === "android";
249
259
  const resolved = await client.resolveDeepLink({
250
260
  url,
251
261
  openedFromUniversalLink,
@@ -329,9 +339,43 @@ function compactContext(context) {
329
339
  return Object.fromEntries(Object.entries(context).filter(([, value]) => value !== undefined && value !== null && value !== ""));
330
340
  }
331
341
  function readCountryCodeFromLocale(locale) {
332
- const normalized = locale?.replace("_", "-");
333
- const country = normalized?.split("-")[1];
334
- return country && country.length === 2 ? country.toUpperCase() : undefined;
342
+ if (!locale) {
343
+ return undefined;
344
+ }
345
+ try {
346
+ return normalizeCountryCode(new Intl.Locale(locale.replace("_", "-")).region);
347
+ }
348
+ catch {
349
+ const match = locale.match(/[-_]([A-Za-z]{2})(?:$|[-_])/);
350
+ return normalizeCountryCode(match?.[1]);
351
+ }
352
+ }
353
+ function readCountryCodeFromTimezone(timezone) {
354
+ return timezone ? TIMEZONE_COUNTRY_CODES[timezone] : undefined;
355
+ }
356
+ const TIMEZONE_COUNTRY_CODES = {
357
+ "Europe/Istanbul": "TR"
358
+ };
359
+ function normalizeCountryCode(countryCode) {
360
+ if (!countryCode || countryCode.length !== 2) {
361
+ return undefined;
362
+ }
363
+ const upper = countryCode.toUpperCase();
364
+ return upper === "XX" || upper === "T1" ? undefined : upper;
365
+ }
366
+ function countryNameFromCode(countryCode) {
367
+ if (!countryCode) {
368
+ return undefined;
369
+ }
370
+ if (countryCode === "TR") {
371
+ return "Turkey";
372
+ }
373
+ try {
374
+ return new Intl.DisplayNames(["en"], { type: "region" }).of(countryCode);
375
+ }
376
+ catch {
377
+ return countryCode;
378
+ }
335
379
  }
336
380
  function safeTimezone() {
337
381
  try {
@@ -341,19 +385,18 @@ function safeTimezone() {
341
385
  return undefined;
342
386
  }
343
387
  }
344
- function getReactNative() {
388
+ async function loadReactNative() {
345
389
  try {
346
- const dynamicRequire = eval("require");
347
- return dynamicRequire("react-native");
390
+ return (await import("react-native"));
348
391
  }
349
392
  catch {
350
393
  return undefined;
351
394
  }
352
395
  }
353
- function createAsyncStorageAdapter() {
396
+ async function createAsyncStorageAdapter() {
354
397
  try {
355
- const dynamicRequire = eval("require");
356
- const asyncStorage = dynamicRequire("@react-native-async-storage/async-storage").default;
398
+ const asyncStorageModule = (await import("@react-native-async-storage/async-storage"));
399
+ const asyncStorage = asyncStorageModule.default;
357
400
  return asyncStorage;
358
401
  }
359
402
  catch {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@attryio/react-native",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "private": false,
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -29,7 +29,8 @@
29
29
  "access": "public"
30
30
  },
31
31
  "dependencies": {
32
- "@attryio/sdk-core": "0.1.3"
32
+ "@attryio/sdk-core": "0.1.3",
33
+ "@react-native-async-storage/async-storage": "^2.2.0"
33
34
  },
34
35
  "peerDependencies": {
35
36
  "react-native": ">=0.72"