vialink-react-native-sdk 1.0.9 → 2.0.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 +59 -3
- package/android/build.gradle +46 -0
- package/android/libs/vialink-sdk.aar +0 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/vialink/reactnative/ViaLinkModule.kt +106 -0
- package/android/src/main/java/com/vialink/reactnative/ViaLinkPackage.kt +13 -0
- package/dist/ViaLinkSDK.d.ts +19 -20
- package/dist/index.d.ts +1 -9
- package/dist/index.js +1 -1
- package/ios/Frameworks/ViaLinkCore.xcframework/Info.plist +44 -0
- package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64/ViaLinkSDK.framework/Info.plist +0 -0
- package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64/ViaLinkSDK.framework/ViaLinkSDK +0 -0
- package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64_x86_64-simulator/ViaLinkSDK.framework/Info.plist +0 -0
- package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64_x86_64-simulator/ViaLinkSDK.framework/ViaLinkSDK +0 -0
- package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64_x86_64-simulator/ViaLinkSDK.framework/_CodeSignature/CodeResources +101 -0
- package/ios/ViaLinkModule.m +19 -0
- package/ios/ViaLinkModule.swift +82 -0
- package/package.json +11 -14
- package/vialink-react-native-sdk.podspec +16 -0
- package/dist/DeepLinkHandler.d.ts +0 -21
- package/dist/DeferredMatcher.d.ts +0 -7
- package/dist/DeviceInfo.d.ts +0 -12
- package/dist/EventTracker.d.ts +0 -16
- package/dist/NetworkClient.d.ts +0 -12
- package/dist/Storage.d.ts +0 -12
- package/dist/models/DeepLinkData.d.ts +0 -5
- package/dist/models/DeviceInfoData.d.ts +0 -9
- package/dist/models/EventPayload.d.ts +0 -8
package/README.md
CHANGED
|
@@ -1,11 +1,49 @@
|
|
|
1
1
|
# ViaLink React Native SDK
|
|
2
2
|
|
|
3
3
|
ViaLink 딥링크 인프라 서비스를 위한 React Native SDK입니다.
|
|
4
|
+
v2.0부터 네이티브 브릿지 방식(Android .aar + iOS .xcframework)으로 동작합니다.
|
|
5
|
+
|
|
6
|
+
## 요구사항
|
|
7
|
+
|
|
8
|
+
- React Native 0.73+
|
|
9
|
+
- Android: minSdk 24, compileSdk 34
|
|
10
|
+
- iOS: 15.0+, Swift 5.9+
|
|
4
11
|
|
|
5
12
|
## 설치
|
|
6
13
|
|
|
7
14
|
```bash
|
|
8
|
-
npm install
|
|
15
|
+
npm install vialink-react-native-sdk
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### iOS 추가 설정
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
cd ios && pod install
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Android 추가 설정
|
|
25
|
+
|
|
26
|
+
`android/app/build.gradle`에서 설정 확인:
|
|
27
|
+
|
|
28
|
+
```groovy
|
|
29
|
+
android {
|
|
30
|
+
compileSdkVersion 34
|
|
31
|
+
defaultConfig {
|
|
32
|
+
minSdkVersion 24
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
`MainApplication.kt` (또는 `.java`)에 패키지 등록:
|
|
38
|
+
|
|
39
|
+
```kotlin
|
|
40
|
+
import com.vialink.reactnative.ViaLinkPackage
|
|
41
|
+
|
|
42
|
+
override fun getPackages(): List<ReactPackage> {
|
|
43
|
+
val packages = PackageList(this).packages.toMutableList()
|
|
44
|
+
packages.add(ViaLinkPackage())
|
|
45
|
+
return packages
|
|
46
|
+
}
|
|
9
47
|
```
|
|
10
48
|
|
|
11
49
|
## 사용법
|
|
@@ -13,13 +51,31 @@ npm install ./vialink-reactnative-sdk.tgz
|
|
|
13
51
|
```typescript
|
|
14
52
|
import { ViaLinkSDK } from 'vialink-react-native-sdk';
|
|
15
53
|
|
|
16
|
-
|
|
54
|
+
// 초기화 (App.tsx)
|
|
55
|
+
await ViaLinkSDK.shared.configure('YOUR_API_KEY');
|
|
17
56
|
|
|
57
|
+
// 딥링크 수신 콜백
|
|
18
58
|
ViaLinkSDK.shared.onDeepLink((data) => {
|
|
59
|
+
console.log('딥링크:', data.path, data.params);
|
|
60
|
+
navigation.navigate(data.path, data.params);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// 디퍼드 딥링크 (앱 첫 설치 후 실행 시)
|
|
64
|
+
ViaLinkSDK.shared.onDeferredDeepLink((data) => {
|
|
65
|
+
console.log('디퍼드 딥링크:', data.path);
|
|
19
66
|
navigation.navigate(data.path, data.params);
|
|
20
67
|
});
|
|
68
|
+
|
|
69
|
+
// 이벤트 추적
|
|
70
|
+
ViaLinkSDK.shared.track('purchase', { product_id: '123', revenue: 29900 });
|
|
71
|
+
|
|
72
|
+
// 딥링크 생성
|
|
73
|
+
const url = await ViaLinkSDK.shared.createLink('/product/123', { promo: 'FRIEND' }, 'referral');
|
|
74
|
+
|
|
75
|
+
// 정리 (앱 종료 시)
|
|
76
|
+
ViaLinkSDK.shared.destroy();
|
|
21
77
|
```
|
|
22
78
|
|
|
23
79
|
## 문서
|
|
24
80
|
|
|
25
|
-
- [SDK 가이드](https://vialink.app
|
|
81
|
+
- [SDK 가이드](https://docs.vialink.app)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
buildscript {
|
|
2
|
+
ext.kotlin_version = '2.0.0'
|
|
3
|
+
repositories {
|
|
4
|
+
google()
|
|
5
|
+
mavenCentral()
|
|
6
|
+
}
|
|
7
|
+
dependencies {
|
|
8
|
+
classpath "com.android.tools.build:gradle:8.7.0"
|
|
9
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
apply plugin: 'com.android.library'
|
|
14
|
+
apply plugin: 'kotlin-android'
|
|
15
|
+
|
|
16
|
+
android {
|
|
17
|
+
namespace "com.vialink.reactnative"
|
|
18
|
+
compileSdkVersion 34
|
|
19
|
+
|
|
20
|
+
defaultConfig {
|
|
21
|
+
minSdkVersion 24
|
|
22
|
+
targetSdkVersion 34
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
compileOptions {
|
|
26
|
+
sourceCompatibility JavaVersion.VERSION_11
|
|
27
|
+
targetCompatibility JavaVersion.VERSION_11
|
|
28
|
+
}
|
|
29
|
+
kotlinOptions {
|
|
30
|
+
jvmTarget = '11'
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
sourceSets {
|
|
34
|
+
main {
|
|
35
|
+
java.srcDirs = ['src/main/java']
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
dependencies {
|
|
41
|
+
implementation(files("libs/vialink-sdk.aar"))
|
|
42
|
+
implementation "androidx.core:core-ktx:1.13.0"
|
|
43
|
+
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0"
|
|
44
|
+
implementation "com.squareup.okhttp3:okhttp:4.12.0"
|
|
45
|
+
implementation "com.facebook.react:react-android:+"
|
|
46
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
package com.vialink.reactnative
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.*
|
|
4
|
+
import com.facebook.react.modules.core.DeviceEventManagerModule
|
|
5
|
+
import com.vialink.sdk.ViaLinkSDK
|
|
6
|
+
import com.vialink.sdk.model.DeepLinkData
|
|
7
|
+
import kotlinx.coroutines.*
|
|
8
|
+
|
|
9
|
+
class ViaLinkModule(reactContext: ReactApplicationContext) :
|
|
10
|
+
ReactContextBaseJavaModule(reactContext),
|
|
11
|
+
ActivityEventListener {
|
|
12
|
+
|
|
13
|
+
private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
|
|
14
|
+
private var pendingDeepLink: WritableMap? = null
|
|
15
|
+
private var pendingDeferred: WritableMap? = null
|
|
16
|
+
private var listenerCount = 0
|
|
17
|
+
|
|
18
|
+
override fun getName() = "ViaLinkSDK"
|
|
19
|
+
|
|
20
|
+
init {
|
|
21
|
+
reactContext.addActivityEventListener(this)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// 이벤트 전송
|
|
25
|
+
private fun sendEvent(eventName: String, params: WritableMap?) {
|
|
26
|
+
reactApplicationContext
|
|
27
|
+
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
|
|
28
|
+
.emit(eventName, params)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@ReactMethod
|
|
32
|
+
fun configure(apiKey: String, promise: Promise) {
|
|
33
|
+
val context = reactApplicationContext
|
|
34
|
+
ViaLinkSDK.init(context, apiKey)
|
|
35
|
+
|
|
36
|
+
ViaLinkSDK.onDeepLink { data ->
|
|
37
|
+
val map = data.toWritableMap()
|
|
38
|
+
if (listenerCount > 0) sendEvent("onDeepLink", map)
|
|
39
|
+
else pendingDeepLink = map
|
|
40
|
+
}
|
|
41
|
+
ViaLinkSDK.onDeferredDeepLink { data ->
|
|
42
|
+
val map = data.toWritableMap()
|
|
43
|
+
if (listenerCount > 0) sendEvent("onDeferredDeepLink", map)
|
|
44
|
+
else pendingDeferred = map
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
currentActivity?.intent?.let { ViaLinkSDK.handleIntent(it) }
|
|
48
|
+
promise.resolve(null)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@ReactMethod
|
|
52
|
+
fun track(eventName: String, data: ReadableMap?) {
|
|
53
|
+
val map = data?.toHashMap()?.mapValues { it.value as Any }
|
|
54
|
+
ViaLinkSDK.track(eventName, map)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@ReactMethod
|
|
58
|
+
fun createLink(path: String, data: ReadableMap?, campaign: String?, promise: Promise) {
|
|
59
|
+
scope.launch {
|
|
60
|
+
val result = ViaLinkSDK.createLink(path, data?.toHashMap()?.mapValues { it.value as Any }, campaign)
|
|
61
|
+
result.onSuccess { promise.resolve(it) }
|
|
62
|
+
result.onFailure { promise.reject("CREATE_LINK_ERROR", it.message) }
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@ReactMethod
|
|
67
|
+
fun addListener(eventName: String) {
|
|
68
|
+
listenerCount++
|
|
69
|
+
// pending 이벤트 flush
|
|
70
|
+
if (eventName == "onDeepLink") {
|
|
71
|
+
pendingDeepLink?.let { sendEvent("onDeepLink", it) }
|
|
72
|
+
pendingDeepLink = null
|
|
73
|
+
}
|
|
74
|
+
if (eventName == "onDeferredDeepLink") {
|
|
75
|
+
pendingDeferred?.let { sendEvent("onDeferredDeepLink", it) }
|
|
76
|
+
pendingDeferred = null
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@ReactMethod
|
|
81
|
+
fun removeListeners(count: Int) {
|
|
82
|
+
listenerCount -= count
|
|
83
|
+
if (listenerCount < 0) listenerCount = 0
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// ActivityEventListener -- 새 Intent 처리 (Warm Start)
|
|
87
|
+
override fun onNewIntent(intent: android.content.Intent?) {
|
|
88
|
+
intent?.let { ViaLinkSDK.handleIntent(it) }
|
|
89
|
+
}
|
|
90
|
+
override fun onActivityResult(activity: android.app.Activity?, requestCode: Int, resultCode: Int, data: android.content.Intent?) {}
|
|
91
|
+
|
|
92
|
+
override fun onCatalystInstanceDestroy() {
|
|
93
|
+
scope.cancel()
|
|
94
|
+
super.onCatalystInstanceDestroy()
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private fun DeepLinkData.toWritableMap(): WritableMap {
|
|
99
|
+
val map = Arguments.createMap()
|
|
100
|
+
map.putString("path", path)
|
|
101
|
+
val paramsMap = Arguments.createMap()
|
|
102
|
+
params.forEach { (k, v) -> paramsMap.putString(k, v) }
|
|
103
|
+
map.putMap("params", paramsMap)
|
|
104
|
+
shortCode?.let { map.putString("shortCode", it) }
|
|
105
|
+
return map
|
|
106
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package com.vialink.reactnative
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.ReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.uimanager.ViewManager
|
|
7
|
+
|
|
8
|
+
class ViaLinkPackage : ReactPackage {
|
|
9
|
+
override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> =
|
|
10
|
+
listOf(ViaLinkModule(reactContext))
|
|
11
|
+
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> =
|
|
12
|
+
emptyList()
|
|
13
|
+
}
|
package/dist/ViaLinkSDK.d.ts
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
export interface DeepLinkData {
|
|
2
|
+
path: string;
|
|
3
|
+
params: Record<string, string>;
|
|
4
|
+
shortCode?: string;
|
|
5
|
+
}
|
|
2
6
|
/**
|
|
3
7
|
* ViaLink React Native SDK
|
|
4
8
|
*
|
|
5
|
-
* 딥링크 라우팅, 디퍼드 딥링킹, 이벤트 추적을 제공합니다.
|
|
9
|
+
* 네이티브 브릿지 기반 딥링크 라우팅, 디퍼드 딥링킹, 이벤트 추적을 제공합니다.
|
|
10
|
+
* Android(.aar) 및 iOS(.xcframework) 네이티브 SDK를 호출합니다.
|
|
6
11
|
*
|
|
7
12
|
* ```typescript
|
|
8
13
|
* // 초기화 (App.tsx)
|
|
9
|
-
* ViaLinkSDK.shared.configure('YOUR_API_KEY');
|
|
14
|
+
* await ViaLinkSDK.shared.configure('YOUR_API_KEY');
|
|
10
15
|
*
|
|
11
16
|
* // 딥링크 콜백
|
|
12
17
|
* ViaLinkSDK.shared.onDeepLink((data) => {
|
|
@@ -15,28 +20,26 @@ import type { DeepLinkData } from './models/DeepLinkData';
|
|
|
15
20
|
* ```
|
|
16
21
|
*/
|
|
17
22
|
export declare class ViaLinkSDK {
|
|
18
|
-
private static readonly API_BASE_URL;
|
|
19
23
|
private static _instance;
|
|
20
|
-
private
|
|
21
|
-
private
|
|
22
|
-
private deepLinkHandler;
|
|
23
|
-
private storage;
|
|
24
|
-
private isConfigured;
|
|
25
|
-
private deepLinkCallback?;
|
|
26
|
-
private deferredCallback?;
|
|
27
|
-
private appStateSubscription?;
|
|
28
|
-
private linkingSubscription?;
|
|
29
|
-
private pendingFp?;
|
|
24
|
+
private deepLinkSub;
|
|
25
|
+
private deferredSub;
|
|
30
26
|
private constructor();
|
|
31
27
|
static get shared(): ViaLinkSDK;
|
|
32
28
|
/**
|
|
33
29
|
* SDK 초기화 - 앱 최상위(App.tsx)에서 호출
|
|
34
30
|
* @param apiKey 대시보드에서 발급받은 API Key
|
|
35
31
|
*/
|
|
36
|
-
configure(apiKey: string): void
|
|
32
|
+
configure(apiKey: string): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* 딥링크 수신 콜백 등록
|
|
35
|
+
* App Links / Universal Links로 앱이 열렸을 때 호출됩니다.
|
|
36
|
+
*/
|
|
37
37
|
onDeepLink(callback: (data: DeepLinkData) => void): void;
|
|
38
|
+
/**
|
|
39
|
+
* 디퍼드 딥링크 콜백 등록
|
|
40
|
+
* 앱 첫 설치 후 실행 시 fingerprint 매칭으로 딥링크 데이터를 전달합니다.
|
|
41
|
+
*/
|
|
38
42
|
onDeferredDeepLink(callback: (data: DeepLinkData) => void): void;
|
|
39
|
-
handleURL(url: string): void;
|
|
40
43
|
/**
|
|
41
44
|
* 커스텀 이벤트 추적
|
|
42
45
|
*
|
|
@@ -54,8 +57,4 @@ export declare class ViaLinkSDK {
|
|
|
54
57
|
*/
|
|
55
58
|
createLink(path: string, data?: Record<string, unknown>, campaign?: string): Promise<string>;
|
|
56
59
|
destroy(): void;
|
|
57
|
-
private setupLinkingListener;
|
|
58
|
-
private checkFirstLaunch;
|
|
59
|
-
private attemptDeferredMatch;
|
|
60
|
-
private handleAppStateChange;
|
|
61
60
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,2 @@
|
|
|
1
1
|
export { ViaLinkSDK } from './ViaLinkSDK';
|
|
2
|
-
export {
|
|
3
|
-
export { DeferredMatcher } from './DeferredMatcher';
|
|
4
|
-
export { EventTracker } from './EventTracker';
|
|
5
|
-
export { DeviceInfo } from './DeviceInfo';
|
|
6
|
-
export { NetworkClient } from './NetworkClient';
|
|
7
|
-
export { Storage } from './Storage';
|
|
8
|
-
export type { DeepLinkData } from './models/DeepLinkData';
|
|
9
|
-
export type { DeviceInfoData } from './models/DeviceInfoData';
|
|
10
|
-
export type { EventPayload } from './models/EventPayload';
|
|
2
|
+
export type { DeepLinkData } from './ViaLinkSDK';
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';const _0x49f1cf=_0x1358;(function(_0x490d90,_0x1f8454){const _0x3baeb1={_0x44d93c:0x1ef,_0x3e0790:0x170,_0x3828e3:0x1c1,_0x1ae4bb:0x157,_0xcbc810:0x205,_0x54a46:0x1d1,_0x836d35:0x1cb,_0x558232:0x195},_0x4352f3=_0x1358,_0x38e644=_0x490d90();while(!![]){try{const _0x410354=-parseInt(_0x4352f3(_0x3baeb1._0x44d93c))/(0x1fcc+-0x1c32*-0x1+-0x3bfd)*(parseInt(_0x4352f3(_0x3baeb1._0x3e0790))/(0x1e0a+-0x106d+-0x3*0x489))+-parseInt(_0x4352f3(0x14e))/(0x225d+0x1981+-0x3bdb)+parseInt(_0x4352f3(_0x3baeb1._0x3828e3))/(0x17+-0xbcb*-0x1+-0xbde)+parseInt(_0x4352f3(0x1d9))/(0x25bf+-0x3fc*-0x3+-0x31ae)*(-parseInt(_0x4352f3(_0x3baeb1._0x1ae4bb))/(0x2250+0x1724+0x1cb7*-0x2))+-parseInt(_0x4352f3(_0x3baeb1._0xcbc810))/(-0xdd9+-0x1*0x1ef1+0x2cd1)*(parseInt(_0x4352f3(0x18a))/(0x1af3+0x6d3*-0x5+-0x39a*-0x2))+parseInt(_0x4352f3(_0x3baeb1._0x54a46))/(-0x10b*-0xd+-0x4b3*0x1+0x1*-0x8d3)*(-parseInt(_0x4352f3(_0x3baeb1._0x836d35))/(-0x1*-0xcb6+-0xdba+-0x9*-0x1e))+parseInt(_0x4352f3(_0x3baeb1._0x558232))/(0x7d*-0x4+-0x2551*-0x1+0x16*-0x19b);if(_0x410354===_0x1f8454)break;else _0x38e644['push'](_0x38e644['shift']());}catch(_0xa6d8f6){_0x38e644['push'](_0x38e644['shift']());}}}(_0x557e,0x14a8a0+0x4e*0x31af+-0x186d66));function _0x1358(_0x300514,_0x18d57f){_0x300514=_0x300514-(-0x2321*0x1+-0x6*-0x376+0xfa0);const _0x20d375=_0x557e();let _0x28dce0=_0x20d375[_0x300514];if(_0x1358['abHYAQ']===undefined){var _0x278b86=function(_0x17f352){const _0x478b4b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2b8548='',_0x35a114='';for(let _0x23effa=0x70*0x31+-0x1e4f*-0x1+0x33bf*-0x1,_0x4dbfd,_0x76814,_0x26039f=-0x1b93+0x21ff+-0x66c;_0x76814=_0x17f352['charAt'](_0x26039f++);~_0x76814&&(_0x4dbfd=_0x23effa%(-0x667+0x2*0xee9+-0x1*0x1767)?_0x4dbfd*(-0xa92+0x1*-0x1d11+0x1*0x27e3)+_0x76814:_0x76814,_0x23effa++%(0x1bd1+-0x1*-0x7e7+-0x23b4))?_0x2b8548+=String['fromCharCode'](-0x269f*0x1+0x319*0x4+0x1b3a&_0x4dbfd>>(-(-0x3e*-0x84+0x121f*0x1+-0x3215)*_0x23effa&-0x6aa+-0x1111*0x1+0x17c1)):0x233*-0x5+-0x11be+-0x1*-0x1cbd){_0x76814=_0x478b4b['indexOf'](_0x76814);}for(let _0x384c48=-0x1*0x20c5+0x1602+0xac3,_0x187766=_0x2b8548['length'];_0x384c48<_0x187766;_0x384c48++){_0x35a114+='%'+('00'+_0x2b8548['charCodeAt'](_0x384c48)['toString'](-0xa7*0x21+-0x11f8+0xf7*0x29))['slice'](-(-0xca*-0x31+-0x187b*0x1+0xbf*-0x13));}return decodeURIComponent(_0x35a114);};_0x1358['pDoHLn']=_0x278b86,_0x1358['gbxhMj']={},_0x1358['abHYAQ']=!![];}const _0x19caee=_0x20d375[-0x158d+0x1091+0x4fc],_0x3c36e5=_0x300514+_0x19caee,_0x1d5d31=_0x1358['gbxhMj'][_0x3c36e5];return!_0x1d5d31?(_0x28dce0=_0x1358['pDoHLn'](_0x28dce0),_0x1358['gbxhMj'][_0x3c36e5]=_0x28dce0):_0x28dce0=_0x1d5d31,_0x28dce0;}var reactNative=require(_0x49f1cf(0x155)+'ve'),s=require(_0x49f1cf(0x1f6)+_0x49f1cf(0x192)+_0x49f1cf(0x167)+'ync-storag'+'e');function _interopDefault(_0xa07271){const _0x22808c=_0x49f1cf;return _0xa07271&&_0xa07271[_0x22808c(0x1d7)]?_0xa07271:{'default':_0xa07271};}var s__default=_interopDefault(s),l=class{constructor(_0x4eaf4d){const _0x553ef5={_0x241cec:0x204},_0x549919=_0x49f1cf;this[_0x549919(0x15e)+_0x549919(_0x553ef5._0x241cec)]=_0x4eaf4d;}['parseFp'](_0x53a998){const _0x19f38f={_0x2570c6:0x21d},_0x3274c2=_0x49f1cf;try{return new URL(_0x53a998)[_0x3274c2(0x1a7)+'ms'][_0x3274c2(_0x19f38f._0x2570c6)]('fp');}catch{return null;}}[_0x49f1cf(0x222)](_0x4f05ee){const _0xafdf20={_0x412e26:0x1e3,_0x668aef:0x1e0,_0x1a301d:0x144,_0x9d959a:0x217,_0x1653ed:0x1d8,_0xaef158:0x156,_0x43b761:0x186,_0x2b5d03:0x16e},_0x5c0336=_0x49f1cf,_0x469030={};_0x469030[_0x5c0336(_0xafdf20._0x412e26)]=function(_0x166629,_0x531b5c){return _0x166629>=_0x531b5c;},_0x469030[_0x5c0336(0x1fe)]=function(_0x411cf6,_0x17e262){return _0x411cf6===_0x17e262;},_0x469030[_0x5c0336(0x156)]=function(_0x33d68f,_0x4867c9){return _0x33d68f!==_0x4867c9;},_0x469030['oZBFQ']=_0x5c0336(0x212);const _0x5d710f=_0x469030;try{let _0x5d9250=new URL(_0x4f05ee)[_0x5c0336(_0xafdf20._0x668aef)][_0x5c0336(_0xafdf20._0x1a301d)]('/')[_0x5c0336(_0xafdf20._0x9d959a)](Boolean);return _0x5d710f[_0x5c0336(0x1e3)](_0x5d9250[_0x5c0336(_0xafdf20._0x1653ed)],0x16*-0xc1+-0xb*-0x1bb+-0x271)&&_0x5d710f[_0x5c0336(0x1fe)](_0x5d9250[-0xa4c+0x247d*-0x1+0x2ec9],'c')?_0x5d9250[-0xd03+0x211b+-0x1417]??null:null;}catch{return _0x5d710f[_0x5c0336(_0xafdf20._0xaef158)](_0x5d710f[_0x5c0336(_0xafdf20._0x43b761)],_0x5c0336(0x1cf))?(console[_0x5c0336(_0xafdf20._0x2b5d03)](_0x5c0336(0x20b)+'URL\x20파싱\x20실패:',_0x4f05ee),null):new _0xc36265(_0x26464)[_0x5c0336(0x1a7)+'ms']['get']('fp');}}async[_0x49f1cf(0x161)+_0x49f1cf(0x146)](_0x594af4){const _0x4b66e5={_0x563152:0x15e,_0x20cdcd:0x204,_0x3997fc:0x219,_0x464806:0x1b6,_0x23bf56:0x146,_0x4f8596:0x1c3,_0x49f0ad:0x1f5},_0x1965eb=_0x49f1cf;try{const _0x2f09f7={};_0x2f09f7['short_code']=_0x594af4;let _0x4cbce8=await this[_0x1965eb(_0x4b66e5._0x563152)+_0x1965eb(_0x4b66e5._0x20cdcd)][_0x1965eb(_0x4b66e5._0x3997fc)](_0x1965eb(0x1d3)+'e',_0x2f09f7),_0x24a9fb=JSON[_0x1965eb(0x16a)](_0x4cbce8);return _0x24a9fb[_0x1965eb(_0x4b66e5._0x464806)]?{'path':_0x24a9fb[_0x1965eb(0x171)+'ath']??'/','params':_0x24a9fb[_0x1965eb(0x19d)+_0x1965eb(_0x4b66e5._0x23bf56)]??{},'shortCode':_0x594af4}:null;}catch(_0x5b4753){return console[_0x1965eb(_0x4b66e5._0x4f8596)](_0x1965eb(0x20b)+_0x1965eb(0x1f4)+_0x1965eb(_0x4b66e5._0x49f0ad),_0x5b4753),null;}}},p=class i{static[_0x49f1cf(0x15d)](){const _0x46c210={_0x288715:0x14a,_0x151076:0x215,_0x125fc8:0x1f2,_0x39ee08:0x215,_0x20a2bd:0x1eb,_0x1fa596:0x1da,_0x13120e:0x20c,_0x119b69:0x182,_0x47e1f7:0x19e,_0x5bf74e:0x169},_0x1a4708=_0x49f1cf,_0x5538bc={};_0x5538bc['rxWaT']=_0x1a4708(_0x46c210._0x288715),_0x5538bc[_0x1a4708(0x181)]=function(_0x27dacf,_0x3b3ea0){return _0x27dacf*_0x3b3ea0;};const _0x2f9d2b=_0x5538bc;let {width:_0x8b531f,height:_0x3a6b36}=reactNative['Dimensions'][_0x1a4708(0x21d)](_0x1a4708(_0x46c210._0x151076)),_0xfbc419=reactNative[_0x1a4708(_0x46c210._0x125fc8)][_0x1a4708(0x21d)](_0x1a4708(_0x46c210._0x39ee08))['scale']??0x335*-0x5+0xa72*-0x1+0x2a6*0xa;return{'os':reactNative['Platform']['OS']===_0x1a4708(0x1a2)?_0x2f9d2b[_0x1a4708(_0x46c210._0x20a2bd)]:'Android','osVersion':i[_0x1a4708(_0x46c210._0x1fa596)+'on'](),'model':i[_0x1a4708(_0x46c210._0x13120e)](),'screenWidth':Math[_0x1a4708(0x182)](_0x2f9d2b['CTSxp'](_0x8b531f,_0xfbc419)),'screenHeight':Math[_0x1a4708(_0x46c210._0x119b69)](_0x3a6b36*_0xfbc419),'language':i[_0x1a4708(_0x46c210._0x47e1f7)+'e'](),'country':i[_0x1a4708(_0x46c210._0x5bf74e)]()};}static[_0x49f1cf(0x1da)+'on'](){const _0x25c543={_0x14b9a6:0x1cd,_0x2a2479:0x19c,_0x548c76:0x20d},_0x596daa=_0x49f1cf,_0x106a89={};_0x106a89['eSZbU']=function(_0x1c1837,_0x19df56){return _0x1c1837===_0x19df56;};const _0x3d0ced=_0x106a89;if(_0x3d0ced[_0x596daa(0x17e)](reactNative[_0x596daa(0x1cd)]['OS'],_0x596daa(0x188))){let _0x4ae2a9=reactNative[_0x596daa(_0x25c543._0x14b9a6)][_0x596daa(_0x25c543._0x2a2479)];if(_0x4ae2a9[_0x596daa(0x20a)])return String(_0x4ae2a9['Release']);}return String(reactNative['Platform'][_0x596daa(_0x25c543._0x548c76)]);}static[_0x49f1cf(0x20c)](){const _0x7ae50={_0x48fa84:0x1df,_0xd15f40:0x183,_0x389f44:0x1a2,_0x5b2c0c:0x1ff,_0x1bd3c2:0x209,_0x34b88e:0x1ca,_0x272e31:0x183,_0x377d29:0x19c,_0x1fd3a9:0x1fb,_0x22508e:0x1cd,_0x22607d:0x1de,_0x278163:0x209},_0x10040f=_0x49f1cf,_0xfa3fb5={};_0xfa3fb5[_0x10040f(_0x7ae50._0x48fa84)]=function(_0x1d848b,_0x3625e8){return _0x1d848b===_0x3625e8;},_0xfa3fb5[_0x10040f(_0x7ae50._0xd15f40)]='android',_0xfa3fb5[_0x10040f(0x216)]=_0x10040f(_0x7ae50._0x389f44),_0xfa3fb5['gFXAP']=_0x10040f(_0x7ae50._0x5b2c0c),_0xfa3fb5[_0x10040f(_0x7ae50._0x1bd3c2)]=_0x10040f(_0x7ae50._0x34b88e);const _0x589b42=_0xfa3fb5;if(_0x589b42[_0x10040f(0x1df)](reactNative[_0x10040f(0x1cd)]['OS'],_0x589b42[_0x10040f(_0x7ae50._0x272e31)])){let _0x50a29b=reactNative[_0x10040f(0x1cd)][_0x10040f(_0x7ae50._0x377d29)][_0x10040f(_0x7ae50._0x1fd3a9)];if(_0x50a29b)return String(_0x50a29b);}return reactNative[_0x10040f(_0x7ae50._0x22508e)]['OS']===_0x589b42['jWxMn']?_0x589b42[_0x10040f(_0x7ae50._0x22607d)]:_0x589b42[_0x10040f(_0x7ae50._0x278163)];}static[_0x49f1cf(0x19e)+'e'](){const _0x384132={_0x298e73:0x1b5,_0x4f0a7a:0x1cd,_0x3deb74:0x19c,_0x3e491e:0x1f9},_0x310917=_0x49f1cf,_0x2170bd={};_0x2170bd['Htoks']=_0x310917(0x1a2);const _0x41137f=_0x2170bd;return reactNative[_0x310917(0x1cd)]['OS']===_0x41137f[_0x310917(_0x384132._0x298e73)]?reactNative[_0x310917(_0x384132._0x4f0a7a)][_0x310917(_0x384132._0x3deb74)]?.[_0x310917(_0x384132._0x3e491e)+_0x310917(0x214)]??'ko':'ko';}static[_0x49f1cf(0x169)](){return'KR';}},d=class{constructor(_0x11896d){this['networkCli'+'ent']=_0x11896d;}async[_0x49f1cf(0x1ad)](_0x13ae6a){const _0x10c972={_0x1a8154:0x179,_0x520d9d:0x20b,_0x5d1b0a:0x1db,_0x1e43b8:0x1ba,_0x11faf0:0x204,_0x1f2c67:0x1ec,_0x2bc176:0x19d,_0x666205:0x146,_0xc985a9:0x15b,_0x5eb8b5:0x171,_0x9378ed:0x165,_0x19c94e:0x178,_0x1ec7cc:0x225},_0x4efeb4=_0x49f1cf,_0x4412f5={};_0x4412f5[_0x4efeb4(_0x10c972._0x1a8154)]='/v1/open',_0x4412f5['sSSbG']=_0x4efeb4(_0x10c972._0x520d9d)+_0x4efeb4(_0x10c972._0x5d1b0a);const _0x5d7d81=_0x4412f5;try{let _0xd63a61=p['collect'](),_0x4ac01f={'device_info':{'os':_0xd63a61['os'],'os_version':_0xd63a61['osVersion'],'device_model':_0xd63a61[_0x4efeb4(0x17d)],'screen_width':_0xd63a61[_0x4efeb4(_0x10c972._0x1e43b8)+'h'],'screen_height':_0xd63a61['screenHeig'+'ht'],'language':_0xd63a61[_0x4efeb4(0x176)],'country':_0xd63a61[_0x4efeb4(0x1d5)]},'is_first_launch':!(0x1ee3+-0x223c+0x1*0x359)};_0x13ae6a&&(_0x4ac01f['fp']=_0x13ae6a);let _0x48363e=await this[_0x4efeb4(0x15e)+_0x4efeb4(_0x10c972._0x11faf0)]['post'](_0x5d7d81[_0x4efeb4(_0x10c972._0x1a8154)],_0x4ac01f),_0x5c78ce=JSON['parse'](_0x48363e);if(!_0x5c78ce[_0x4efeb4(0x1b6)]||!_0x5c78ce['deeplink_p'+_0x4efeb4(_0x10c972._0x1f2c67)])return null;let _0x2d28a7={};if(_0x5c78ce[_0x4efeb4(_0x10c972._0x2bc176)+_0x4efeb4(_0x10c972._0x666205)]){for(let [_0x3958f4,_0x195b9a]of Object[_0x4efeb4(_0x10c972._0xc985a9)](_0x5c78ce['deeplink_d'+_0x4efeb4(_0x10c972._0x666205)]))_0x2d28a7[_0x3958f4]=String(_0x195b9a);}const _0x3f7607={};return _0x3f7607['path']=_0x5c78ce[_0x4efeb4(_0x10c972._0x5eb8b5)+_0x4efeb4(_0x10c972._0x1f2c67)],_0x3f7607['params']=_0x2d28a7,_0x3f7607[_0x4efeb4(_0x10c972._0x9378ed)]=_0x5c78ce[_0x4efeb4(0x1b7)+_0x4efeb4(_0x10c972._0x19c94e)],_0x3f7607;}catch(_0x30d0fa){return console['warn'](_0x5d7d81[_0x4efeb4(_0x10c972._0x1ec7cc)],_0x30d0fa),null;}}};function y(_0xd25f2d){const _0x2f73bd={_0x3256c7:0x191,_0x12fb0e:0x149},_0x1ef4bf=_0x49f1cf,_0x34505f={};return _0x34505f[_0x1ef4bf(_0x2f73bd._0x3256c7)]=_0xd25f2d[_0x1ef4bf(0x193)]??0x1af2+0x2*0x9c+-0x1c2a,_0x34505f[_0x1ef4bf(0x1c9)]=_0xd25f2d['eventName'],_0x34505f[_0x1ef4bf(_0x2f73bd._0x12fb0e)]=_0xd25f2d[_0x1ef4bf(0x1e5)]??{},_0x34505f;}function L(_0xbdf708){const _0x29656d={_0x5f3975:0x191,_0x5612f1:0x193},_0x537b8d=_0x49f1cf,_0x40c463={};return _0x40c463[_0x537b8d(_0x29656d._0x5f3975)]=_0xbdf708[_0x537b8d(_0x29656d._0x5612f1)]??-0x8*-0x312+-0xfe1+0x1*-0x8af,_0x40c463[_0x537b8d(0x1c9)]=_0xbdf708[_0x537b8d(0x1b9)],_0x40c463;}function _0x557e(){const _0x4a983e=['vMvYC2LVBG','C2f2zuzW','C3vIC3rYAw5N','y2XLyxjqzw5KAq','C19SyxvUy2HLza','EMzKsg8','C3rVCejHDgnOva','zgLVBq','C2nYzwvU','ALD4tw4','zMLSDgvY','yMDmreu','Cg9ZDa','Dgf0zunOyw5Nzq','65sL66Eb7ygSioYYMoUMRcdSI6tTJkG6','yMfZzvvsta','z2v0','vxnLCI1bz2vUDa','Dgv4Da','y3jLyxrLtgLUAW','qxbWu3rHDgu','CgfYC2vvuKW','BI9QC29U','AgfUzgXLqxbWuW','C1ntyKC','ywDdvMG','BMrPBMDFzxzLBG','C2nYAxb0Aw9U','C3bSAxq','C2HVCNrvCMW','yxrH','ywrKrxzLBNrmAq','BMrSzxi','zxzLBNrFzgf0yq','Au9t','zgvSyxK','tMv0D29YA0nSAq','l3yXl2v2zw50CW','mJy2oda2ofHZBLbRAG','y2HHBMDL','tKTIA0y','x2LUC3rHBMnL','BvnZD3a','zNaG7lAu7lACioYzHoUJJdOG','y3royxrPDMu','CMvHy3qTBMf0Aq','vhPPwg4','mtaYCLv1u0zx','yxbWu3rHDgvtDq','y2f0y2G','BMDmAxn0zw5LCG','zw50CMLLCW','C3rYAw5NAwz5','y29SBgvJDa','BMv0D29YA0nSAq','zxHLy3v0zvDPDa','Bg9HzezW','zMv0y2HmAw5Rra','zxjYzwrnyxrJAa','q1nfExi','CMvTB3zL','C2HVCNrdB2rL','DgHLBG','C3rVCMfNzs9HCW','CMvZDg9YzvbLBG','z2v0q291BNrYEq','CgfYC2u','Cg93','C2f2zvbLBMrPBG','Bg9HzfbLBMrPBG','D2fYBG','z2v0sw5PDgLHBa','nfjVuKHctq','zgvLCgXPBMTFCa','BwfW','AxndB25MAwD1CG','BujOC2O','lI4U','BgfUz3vHz2u','yNvPBgrizwfKzq','x2LK','DxzxBwy','Bwf4uMv0CMLLCW','vMLHtgLUA1nesW','C2v0sxrLBq','Bw9KzwW','zvnAyLu','C2v0tgf1BMnOzq','7jQu7lkTioYlPo2mQa','q1rtEha','CM91BMq','AMflDNm','ywXPBMSUyxbW','BMDfDMvUDhm','B1PcrLe','ufzIqLi','yw5KCM9Pza','CxvLDwu','nZmWnfPMDLj0wG','C2v0','zgvLCgXPBMTeyq','z2v0sxrLBq','u0rlioY0IoQ4So2zLcdSMytRO4W','CgvUzgLUz0zW','y2HLy2TgAxjZDa','BgLUA19Pza','AxzLlwfZEw5Jlq','BgLUA0LK','zgvZDhjVEq','ndy1mtC2mdnpqNrADfu','DMLHBgLUA19Wzq','rujmrue','l2fWAs9SAw5RCW','qvbjx0jbu0vFvq','v1fjs2K','yMLUza','y29UC3rHBNrZ','zgvLCgXPBMTFza','z2v0tgfUz3vHzW','zxzLBNruCMfJAW','sfruuca','vgLTzxi','Aw9Z','C3rVCMfNzq','DgnOzxi','z2zkuvG','7j2066+4ioY0IoQ4So2zLoUqMoYxIoYkTEUlIa','C2vHCMnOugfYyq','vK1qrhO','tgLUA2LUzW','u0rl6RcaioY0IoQ4So2zLoUqMoYNGa','Bg9N','rgv2AwnLsw5MBW','Bwf0y2G','BgLUA2LUz1n1yG','BM93','BgXIywnR','DKHrwNO','C3rHDhvZ','Aw5Hy3rPDMu','lZeUmc45ifjLyq','shrVA3m','Bwf0y2HLza','BgLUA19JBgLJAW','AhrrEge','zxzLBNroyw1L','C2nYzwvUv2LKDa','DMHTBfq','Aw5PDgLHBgL6zq','CMvTB3zLsxrLBq','Aw1LCG','A1zIDMq','D3j3t2u','odi1nJy0BNLwzeLu','EMLju04','zxjYB3i','s0vRqui','yNnJCMLWDgLVBG','ChvZAa','zgvMzxjYzwrdyq','Egzmzfe','zxzLBNrFBMfTzq','qw5KCM9Pza','mtb1zNzozLe','rgvLCeXPBMS','ugXHDgzVCM0','DhjHy2S','t0LAruy','Ahr0Chm6lY92Aq','nta4nZG4oxLjrLjvtW','zMX1C2G','l3yXl3jLC29SDG','ue9tva','y291BNrYEq','ywDrC1a','x19LC01VzhvSzq','BgvUz3rO','mtm1ndKWDe1PBNPj','z2v0t1nwzxjZAq','65su7y2865oCioUNPoY5RsdSI6tTJkG6','DxjS','Dw5ZAgLMDa','z0zyqva','vvrNs2C','Cgf0Ag5HBwu','u3rVCMfNzq','z0v2zw50CW','EwPZAKm','B25ezwvWtgLUAW','zxzLBNreyxrH','rxzLBNruCMfJAW','AfjLDhj5','B25ezwzLCNjLza','EuDcwMC','C2v0DxbmAw5RAq','CNHxyvq','yxrO','vvjmioYiMoYlOdOG','rgvLCeXPBMTiyq','mJK4ntm4CwXnDNf6','tgf1BMnO','AgfZtgf1BMnOzq','rgLTzw5ZAw9UCW','DgLTzxjjza','66Eb7ygSioUnSoYDTo2eScdSOBdTMOWG','7iUK7yYOoG','qhjLywn0lw5HDa','zgLUz0v2zw50CW','vLvtB3a','Aw50zxjMywnLsq','zgvLCeXPBMTiyq','tw9KzwW','zgvLCeXPBMTdyq','zgvMyxvSDa','A3zNs0K','AvbOB25L','7j2067kK7yQ4ioYGHoYgOsdSI6tTJkG6','icHHCgLlzxK6ia','yxbWBgLJyxrPBW','yMfJA2DYB3vUza','zw50','otaZmgH6CM5qBG','C3rLBMvY','C3rHCNrcyxrJAa','yxr0zw1WDerLzG','BvrSDLe','uMvSzwfZzq','w1zPyuXPBMTDia','z2v0tw9KzwW'];_0x557e=function(){return _0x4a983e;};return _0x557e();}var h=class{constructor(_0x2b9a8d,_0x22dd6d){const _0x293b7b={_0x2029ec:0x1a3,_0x117519:0x1f7},_0x6a0b2e=_0x49f1cf;this['queue']=[],this[_0x6a0b2e(0x1f3)]=null,this['maxQueueSi'+'ze']=-0x1*0x445+-0x46*-0x45+-0xe35,this['initialize'+'d']=![],(this[_0x6a0b2e(0x15e)+_0x6a0b2e(0x204)]=_0x2b9a8d,this[_0x6a0b2e(_0x293b7b._0x2029ec)]=_0x22dd6d,this[_0x6a0b2e(0x168)+_0x6a0b2e(_0x293b7b._0x117519)]());}async['restorePen'+_0x49f1cf(0x1f7)](){const _0x2bc074={_0x503009:0x1a3,_0x1c3e99:0x16d,_0x4fb394:0x1e2},_0x367307=_0x49f1cf;let _0x1b7566=await this[_0x367307(_0x2bc074._0x503009)][_0x367307(_0x2bc074._0x1c3e99)+_0x367307(_0x2bc074._0x4fb394)]();this[_0x367307(0x189)][_0x367307(0x1c6)](..._0x1b7566),this[_0x367307(0x1bc)+'d']=!![];}[_0x49f1cf(0x1ce)](_0x53b112,_0x29444c){const _0x11ce43={_0x1b88f4:0x1af,_0x532323:0x189,_0x4e471b:0x1c8,_0x32e323:0x1d8,_0x12579e:0x1d2},_0x3dae4a=_0x49f1cf,_0x122d6b={};_0x122d6b['xfLdQ']=function(_0x8ad7e5,_0x56f1e6){return _0x8ad7e5>=_0x56f1e6;};const _0x35a8da=_0x122d6b;let _0x2f0897={'eventName':_0x53b112,'eventData':_0x29444c,'timestamp':Date[_0x3dae4a(_0x11ce43._0x1b88f4)]()};this[_0x3dae4a(_0x11ce43._0x532323)][_0x3dae4a(0x1c6)](_0x2f0897),_0x35a8da[_0x3dae4a(_0x11ce43._0x4e471b)](this[_0x3dae4a(0x189)][_0x3dae4a(_0x11ce43._0x32e323)],this['maxQueueSi'+'ze'])&&this[_0x3dae4a(_0x11ce43._0x12579e)]();}[_0x49f1cf(0x207)+_0x49f1cf(0x1a1)](_0xc046a0=0x6449*0x1+0x9b46+-0x8a5f){const _0x20fc90={_0xd057cc:0x213,_0x37a75a:0x1a8},_0x52bda6=_0x49f1cf,_0x4cac81={'VMPDz':function(_0x3dcba3,_0x5c0714,_0x2ca065){return _0x3dcba3(_0x5c0714,_0x2ca065);}};this[_0x52bda6(_0x20fc90._0xd057cc)+'imer'](),this[_0x52bda6(0x1f3)]=_0x4cac81[_0x52bda6(_0x20fc90._0x37a75a)](setInterval,()=>{this['flush']();},_0xc046a0);}[_0x49f1cf(0x213)+_0x49f1cf(0x1be)](){const _0x50a0aa={_0x3aa49f:0x163,_0x5203e7:0x1f3},_0x51d314=_0x49f1cf,_0x4f0ab5={'CSEyr':function(_0x8caf8c,_0x4c9494){return _0x8caf8c(_0x4c9494);}};this['timerId']!==null&&(_0x4f0ab5[_0x51d314(_0x50a0aa._0x3aa49f)](clearInterval,this[_0x51d314(_0x50a0aa._0x5203e7)]),this[_0x51d314(0x1f3)]=null);}async[_0x49f1cf(0x1d2)](){const _0x44a2b0={_0x222f49:0x200,_0x44a234:0x1d8,_0x57bafa:0x1d8,_0x4d2295:0x14d,_0x52a83c:0x15e,_0x1cdaaf:0x189,_0x4174ba:0x16c,_0x13fa3a:0x1b8},_0x33f61c=_0x49f1cf,_0x41535a={'VUSop':function(_0x2c1ea6,_0x2a0e24){return _0x2c1ea6!==_0x2a0e24;},'kVbvd':function(_0x156064,_0x2ff621){return _0x156064(_0x2ff621);},'htQxa':'[ViaLink]\x20'+_0x33f61c(_0x44a2b0._0x222f49)};let _0x2febc2=[...this['queue']];if(this['queue']=[],_0x41535a[_0x33f61c(0x1f8)](_0x2febc2[_0x33f61c(_0x44a2b0._0x44a234)],0x2*0x2bd+0xf6*0x25+-0x34*0xca))try{if(_0x2febc2[_0x33f61c(_0x44a2b0._0x57bafa)]===0x1e02+0x91c+-0x271d){let _0x16c062=_0x2febc2[0x2f+0x30e+-0x33d];await this['networkCli'+_0x33f61c(0x204)][_0x33f61c(0x219)](_0x33f61c(_0x44a2b0._0x4d2295),_0x41535a[_0x33f61c(0x1bf)](y,_0x16c062));}else await this[_0x33f61c(_0x44a2b0._0x52a83c)+_0x33f61c(0x204)][_0x33f61c(0x219)](_0x33f61c(0x14d)+'/batch',{'events':_0x2febc2[_0x33f61c(0x172)](L)});await this[_0x33f61c(0x1a3)]['clearPendi'+_0x33f61c(0x185)]();}catch(_0x3d3733){this[_0x33f61c(_0x44a2b0._0x1cdaaf)][_0x33f61c(0x1dd)](..._0x2febc2),await this[_0x33f61c(0x1a3)][_0x33f61c(_0x44a2b0._0x4174ba)+_0x33f61c(0x1e2)](this[_0x33f61c(0x189)]),console[_0x33f61c(0x16e)](_0x41535a[_0x33f61c(_0x44a2b0._0x13fa3a)],_0x3d3733);}}},u=class{constructor(_0x7aa31d,_0x535253){const _0x36628a=_0x49f1cf;this['maxRetries']=0xfb*-0x7+-0xcce+0x13ae,(this[_0x36628a(0x21c)]=_0x7aa31d,this['apiKey']=_0x535253);}async['get'](_0x19924b){const _0x198d15={_0x4682a4:0x177,_0x272987:0x1a0,_0x220c5f:0x21f},_0x12dd6b=_0x49f1cf;return this[_0x12dd6b(0x15f)+'hRetry'](async()=>{const _0x339bd7=_0x12dd6b;let _0x4f1374=await fetch(''+this[_0x339bd7(0x21c)]+_0x19924b,{'method':'GET','headers':this[_0x339bd7(_0x198d15._0x4682a4)+'rs']()});if(!_0x4f1374['ok'])throw new Error(_0x339bd7(_0x198d15._0x272987)+_0x4f1374['status']);return _0x4f1374[_0x339bd7(_0x198d15._0x220c5f)]();});}async[_0x49f1cf(0x219)](_0x56ae11,_0x401e83){const _0xb07a02={_0x162654:0x1d4,_0x255b4e:0x15f},_0x1896b7={_0xa865d1:0x21c,_0x4bcddb:0x19a,_0x3ec497:0x15c},_0x1bc188=_0x49f1cf,_0x69db8d={'yGBZg':function(_0x75a8bd,_0x4f029d,_0x341713){return _0x75a8bd(_0x4f029d,_0x341713);},'WQIKi':_0x1bc188(_0xb07a02._0x162654)};return this[_0x1bc188(_0xb07a02._0x255b4e)+'hRetry'](async()=>{const _0x1fe405=_0x1bc188;let _0x499815=await _0x69db8d[_0x1fe405(0x1e9)](fetch,''+this[_0x1fe405(_0x1896b7._0xa865d1)]+_0x56ae11,{'method':_0x69db8d[_0x1fe405(_0x1896b7._0x4bcddb)],'headers':{...this['buildHeade'+'rs'](),'Content-Type':_0x1fe405(0x202)+_0x1fe405(0x223)},'body':JSON[_0x1fe405(_0x1896b7._0x3ec497)](_0x401e83)});if(!_0x499815['ok'])throw new Error(_0x1fe405(0x1a0)+_0x499815[_0x1fe405(0x1b2)]);return _0x499815['text']();});}async[_0x49f1cf(0x220)](_0x240bc7,_0x5456b3,_0x360fb4){const _0x4c58db={_0x59ba1a:0x18c,_0x5a2d81:0x16a,_0x74bdfc:0x145},_0x25c823=_0x49f1cf,_0xc2a079={};_0xc2a079['deeplinkPa'+'th']=_0x240bc7;let _0x4a25bf=_0xc2a079;_0x5456b3&&(_0x4a25bf[_0x25c823(_0x4c58db._0x59ba1a)+'ta']=_0x5456b3),_0x360fb4&&(_0x4a25bf['campaign']=_0x360fb4);let _0x5f1530=await this[_0x25c823(0x219)](_0x25c823(0x198),_0x4a25bf);return JSON[_0x25c823(_0x4c58db._0x5a2d81)](_0x5f1530)[_0x25c823(_0x4c58db._0x74bdfc)];}['buildHeade'+'rs'](){const _0x129958={_0x3b4c2d:0x223,_0x3ff8c5:0x21e,_0x357c0b:0x17b,_0x3ed800:0x154},_0x4b55de=_0x49f1cf,_0x12dcfd={};_0x12dcfd[_0x4b55de(0x174)]='applicatio'+_0x4b55de(_0x129958._0x3b4c2d);const _0x131969=_0x12dcfd,_0x5dec48={};return _0x5dec48['X-API-Key']=this['apiKey'],_0x5dec48[_0x4b55de(_0x129958._0x3ff8c5)]=_0x4b55de(_0x129958._0x357c0b)+_0x4b55de(0x1b4)+_0x4b55de(_0x129958._0x3ed800),_0x5dec48['Accept']=_0x131969[_0x4b55de(0x174)],_0x5dec48;}async[_0x49f1cf(0x15f)+_0x49f1cf(0x1e7)](_0x464784){const _0x5112be={_0x24c174:0x17a,_0x5e09e0:0x14b,_0x1ae673:0x180},_0x356190=_0x49f1cf,_0x460756={'vhmlT':function(_0x351a01,_0x2664fe){return _0x351a01<_0x2664fe;},'Eogte':function(_0x280b8e){return _0x280b8e();},'XHqWe':function(_0x226426,_0x25253e){return _0x226426(_0x25253e);},'agCVh':function(_0x1b83d5,_0x1ce951){return _0x1b83d5-_0x1ce951;}};let _0x40d6ae;for(let _0x5a7db1=-0x18b*0x6+0x9e9+-0xa7;_0x460756[_0x356190(0x1bb)](_0x5a7db1,this['maxRetries']);_0x5a7db1++)try{return await _0x460756['Eogte'](_0x464784);}catch(_0x3885e4){if(_0x40d6ae=_0x3885e4 instanceof Error?_0x3885e4:new Error(_0x460756['XHqWe'](String,_0x3885e4)),_0x5a7db1<_0x460756[_0x356190(0x226)](this[_0x356190(_0x5112be._0x24c174)],-0x9*-0xdd+0x1*-0x1285+0xac1)){let _0x3d9dec=Math[_0x356190(0x16b)](0x7eb*0x1+0x1233+-0x1a1c,_0x5a7db1)*(0xbf6*-0x2+0x15bb*0x1+0x619);await this[_0x356190(_0x5112be._0x5e09e0)](_0x3d9dec);}}throw _0x40d6ae??new Error(_0x356190(_0x5112be._0x1ae673));}[_0x49f1cf(0x14b)](_0x375374){return new Promise(_0xc52d3d=>setTimeout(_0xc52d3d,_0x375374));}},D='vialink_ha'+_0x49f1cf(0x211),m=_0x49f1cf(0x196)+_0x49f1cf(0x227)+'ts',k='vialink_fp',g=class{async[_0x49f1cf(0x21d)](_0x5db699){const _0x30d65c={_0x59316b:0x18d},_0x640c26=_0x49f1cf;return s__default['default'][_0x640c26(_0x30d65c._0x59316b)](_0x5db699);}async[_0x49f1cf(0x18b)](_0x5b779b,_0x2bb73c){const _0x237e1b={_0x2229ec:0x17c},_0x54da8a=_0x49f1cf;await s__default[_0x54da8a(0x1fd)][_0x54da8a(_0x237e1b._0x2229ec)](_0x5b779b,_0x2bb73c);}async[_0x49f1cf(0x1f1)+'d'](){const _0x568b4f={_0x2697fc:0x1a5,_0x4ebf05:0x1c2},_0x5ba4df=_0x49f1cf,_0x46463c={};_0x46463c['ziISN']=function(_0x9fb355,_0x5be514){return _0x9fb355===_0x5be514;},_0x46463c[_0x5ba4df(_0x568b4f._0x2697fc)]='true';const _0x1d4e8e=_0x46463c;return _0x1d4e8e[_0x5ba4df(_0x568b4f._0x4ebf05)](await s__default[_0x5ba4df(0x1fd)]['getItem'](D),_0x1d4e8e['gfJQX']);}async[_0x49f1cf(0x17f)+'d'](){await s__default['default']['setItem'](D,'true');}async[_0x49f1cf(0x16c)+'gEvents'](_0x409578){const _0x2f56f0={_0x5431f6:0x1fd,_0x4a7f0d:0x17c},_0x2395e9=_0x49f1cf;await s__default[_0x2395e9(_0x2f56f0._0x5431f6)][_0x2395e9(_0x2f56f0._0x4a7f0d)](m,JSON[_0x2395e9(0x15c)](_0x409578));}async[_0x49f1cf(0x16d)+_0x49f1cf(0x1e2)](){const _0x1c19af=_0x49f1cf;try{let _0x276b9b=await s__default[_0x1c19af(0x1fd)][_0x1c19af(0x18d)](m);return _0x276b9b?JSON['parse'](_0x276b9b):[];}catch{return[];}}async[_0x49f1cf(0x210)+_0x49f1cf(0x185)](){const _0x84913e=_0x49f1cf;await s__default[_0x84913e(0x1fd)]['removeItem'](m);}async[_0x49f1cf(0x20e)](_0x31cae3){const _0xfe7f57={_0x2aaa02:0x1fd},_0x45b89a=_0x49f1cf;await s__default[_0x45b89a(_0xfe7f57._0x2aaa02)]['setItem'](k,_0x31cae3);}async[_0x49f1cf(0x160)](){const _0x311706={_0x1bb0fe:0x1fd},_0x4fa5e9=_0x49f1cf;let _0x468d14=await s__default['default'][_0x4fa5e9(0x18d)](k);return _0x468d14&&await s__default[_0x4fa5e9(_0x311706._0x1bb0fe)][_0x4fa5e9(0x1bd)](k),_0x468d14;}},c=class c{constructor(){const _0x32e726=_0x49f1cf;this[_0x32e726(0x173)+'ed']=![];}static get['shared'](){const _0x3c25f3={_0xc7c49e:0x151},_0x3a9d56=_0x49f1cf;return c[_0x3a9d56(_0x3c25f3._0xc7c49e)]||(c[_0x3a9d56(_0x3c25f3._0xc7c49e)]=new c()),c['_instance'];}['configure'](_0x4d5c6a){const _0x151209={_0x13454e:0x1c4,_0xda7858:0x20b,_0x191959:0x1c4,_0x14c5ff:0x199,_0x55c37b:0x19f,_0x2c2caa:0x204,_0x62b464:0x1fa,_0x19ae40:0x147,_0x4d073d:0x224,_0x4d3e14:0x21a,_0x13b167:0x19b,_0x55908d:0x19f,_0x408e1f:0x1ab,_0x282940:0x20f,_0x22ee85:0x190},_0x4f0e1e=_0x49f1cf,_0x4f2435={};_0x4f2435[_0x4f0e1e(_0x151209._0x13454e)]=_0x4f0e1e(_0x151209._0xda7858)+_0x4f0e1e(0x1a6)+'다',_0x4f2435[_0x4f0e1e(0x1c0)]=_0x4f0e1e(0x14f);const _0x21b528=_0x4f2435;if(this['isConfigur'+'ed']){console[_0x4f0e1e(0x1ab)](_0x21b528[_0x4f0e1e(_0x151209._0x191959)]);return;}this['networkCli'+'ent']=new u(c[_0x4f0e1e(_0x151209._0x14c5ff)+'RL'],_0x4d5c6a),this[_0x4f0e1e(0x1a3)]=new g(),this[_0x4f0e1e(_0x151209._0x55c37b)+'er']=new h(this[_0x4f0e1e(0x15e)+_0x4f0e1e(_0x151209._0x2c2caa)],this[_0x4f0e1e(0x1a3)]),this[_0x4f0e1e(_0x151209._0x62b464)+_0x4f0e1e(0x148)]=new l(this[_0x4f0e1e(0x15e)+'ent']),this['isConfigur'+'ed']=!![],this['setupLinki'+_0x4f0e1e(0x15a)](),this['appStateSu'+_0x4f0e1e(0x1c5)]=reactNative[_0x4f0e1e(0x221)][_0x4f0e1e(_0x151209._0x19ae40)+'stener'](_0x21b528['wrwOe'],this[_0x4f0e1e(_0x151209._0x4d073d)+_0x4f0e1e(_0x151209._0x4d3e14)][_0x4f0e1e(_0x151209._0x13b167)](this)),this[_0x4f0e1e(_0x151209._0x55908d)+'er']['startBatch'+'Timer'](-0x3ce7+0x92a3+0x16*0x16e),console[_0x4f0e1e(_0x151209._0x408e1f)](_0x4f0e1e(0x20b)+_0x4f0e1e(0x18e)+_0x4f0e1e(0x201)+_0x4d5c6a[_0x4f0e1e(_0x151209._0x282940)](0x15cc+-0x4*-0x859+-0x3730*0x1,-0x3*0x161+-0x95*-0x42+-0x223f)+'...)'),this[_0x4f0e1e(_0x151209._0x22ee85)+_0x4f0e1e(0x1f0)]();}[_0x49f1cf(0x1e4)](_0x3b5d87){const _0x1bd1e5=_0x49f1cf;this['deepLinkCa'+_0x1bd1e5(0x1b0)]=_0x3b5d87;}[_0x49f1cf(0x1e8)+_0x49f1cf(0x1cc)](_0x58d89e){const _0x149703={_0x1376f8:0x1c7},_0x28900a=_0x49f1cf;this[_0x28900a(_0x149703._0x1376f8)+'llback']=_0x58d89e;}['handleURL'](_0x4d6835){const _0x42ec30={_0x2100b6:0x148,_0x46cb41:0x1ab,_0x46814f:0x20b,_0x596b85:0x20f,_0x3ccbda:0x175,_0xcfe281:0x1fa,_0x333530:0x166},_0x47caef={_0x2858b9:0x16e,_0x27fc8e:0x21b},_0x4f6571={_0x5ccac8:0x1b0},_0x18abb1=_0x49f1cf;let _0x82ad0c=this[_0x18abb1(0x1fa)+_0x18abb1(_0x42ec30._0x2100b6)]['parseFp'](_0x4d6835);_0x82ad0c&&(this[_0x18abb1(0x18f)]=_0x82ad0c,this[_0x18abb1(0x1a3)][_0x18abb1(0x20e)](_0x82ad0c),console[_0x18abb1(_0x42ec30._0x46cb41)](_0x18abb1(_0x42ec30._0x46814f)+_0x18abb1(0x153)+_0x82ad0c[_0x18abb1(_0x42ec30._0x596b85)](-0x2*0x6d9+0x1acd+-0xd1b,0x806+-0xd21+0x107*0x5)+_0x18abb1(_0x42ec30._0x3ccbda)));let _0x4beeaa=this[_0x18abb1(_0x42ec30._0xcfe281)+_0x18abb1(_0x42ec30._0x2100b6)]['parseURL'](_0x4d6835);_0x4beeaa&&(console[_0x18abb1(0x1ab)](_0x18abb1(_0x42ec30._0x46814f)+_0x18abb1(0x1ed)+_0x4beeaa),this[_0x18abb1(0x1fa)+_0x18abb1(0x148)][_0x18abb1(0x161)+'ata'](_0x4beeaa)[_0x18abb1(_0x42ec30._0x333530)](_0xa24976=>{const _0x241f70=_0x18abb1;_0xa24976&&this[_0x241f70(0x1fc)+_0x241f70(0x1b0)]&&this[_0x241f70(0x1fc)+_0x241f70(_0x4f6571._0x5ccac8)](_0xa24976);})[_0x18abb1(0x159)](_0x1c4f44=>{const _0x1e26f1=_0x18abb1;console[_0x1e26f1(_0x47caef._0x2858b9)](_0x1e26f1(0x20b)+_0x1e26f1(_0x47caef._0x27fc8e),_0x1c4f44);}));}[_0x49f1cf(0x1ce)](_0x17353a,_0x59dfa0){const _0x5a2364={_0x4cac90:0x152,_0x5d2690:0x20b,_0x29742f:0x16e,_0x4db5b3:0x19f},_0x29ea22=_0x49f1cf,_0x18aed1={};_0x18aed1[_0x29ea22(_0x5a2364._0x4cac90)]=_0x29ea22(_0x5a2364._0x5d2690)+_0x29ea22(0x1aa)+'\x20않았습니다';const _0x11a703=_0x18aed1;if(!this[_0x29ea22(0x173)+'ed']){console[_0x29ea22(_0x5a2364._0x29742f)](_0x11a703[_0x29ea22(0x152)]);return;}this[_0x29ea22(_0x5a2364._0x4db5b3)+'er']['track'](_0x17353a,_0x59dfa0);}async[_0x49f1cf(0x220)](_0x33d523,_0x262090,_0x191b89){const _0x51a032={_0x593425:0x218,_0xde47f2:0x173,_0x4b22ca:0x218},_0x1dd9ed=_0x49f1cf,_0x2b31fb={};_0x2b31fb[_0x1dd9ed(_0x51a032._0x593425)]=_0x1dd9ed(0x1aa)+'\x20않았습니다';const _0x319850=_0x2b31fb;if(!this[_0x1dd9ed(_0x51a032._0xde47f2)+'ed'])throw new Error(_0x319850[_0x1dd9ed(_0x51a032._0x4b22ca)]);return this['networkCli'+'ent'][_0x1dd9ed(0x220)](_0x33d523,_0x262090,_0x191b89);}[_0x49f1cf(0x194)](){const _0x340b5d={_0x17d58e:0x213,_0x2f2712:0x19f,_0x46e045:0x158,_0x4b5d2e:0x1c5},_0x6725a7=_0x49f1cf;this[_0x6725a7(0x19f)+'er'][_0x6725a7(_0x340b5d._0x17d58e)+'imer'](),this[_0x6725a7(_0x340b5d._0x2f2712)+'er']['flush'](),this[_0x6725a7(_0x340b5d._0x46e045)+_0x6725a7(_0x340b5d._0x4b5d2e)]?.[_0x6725a7(0x164)](),this['linkingSub'+'scription']?.[_0x6725a7(0x164)]();}[_0x49f1cf(0x1ea)+_0x49f1cf(0x15a)](){const _0xa37a64={_0x36e8c4:0x1ae,_0x516e95:0x143,_0x4eba6e:0x1a9,_0x2eb063:0x1dc,_0x4db4dd:0x16f},_0x5b8fe9={_0x4a9d4a:0x1dc},_0x1a920e=_0x49f1cf;this[_0x1a920e(_0xa37a64._0x36e8c4)+_0x1a920e(_0xa37a64._0x516e95)]=reactNative[_0x1a920e(_0xa37a64._0x4eba6e)]['addEventLi'+_0x1a920e(0x206)](_0x1a920e(_0xa37a64._0x2eb063),_0x17a353=>{const _0x122a66=_0x1a920e;this['handleURL'](_0x17a353[_0x122a66(_0x5b8fe9._0x4a9d4a)]);}),reactNative[_0x1a920e(_0xa37a64._0x4eba6e)][_0x1a920e(_0xa37a64._0x4db4dd)+'URL']()[_0x1a920e(0x166)](_0x368ed0=>{_0x368ed0&&this['handleURL'](_0x368ed0);});}async['checkFirst'+_0x49f1cf(0x1f0)](){const _0x3b75da={_0x33dd7b:0x1d6,_0x3be0ab:0x1a3,_0x26dc9c:0x1f1,_0x23e0f5:0x1ce,_0x107b7b:0x17f,_0x319edf:0x162},_0x1d5b16=_0x49f1cf,_0x32c5de={};_0x32c5de[_0x1d5b16(0x187)]='app.open',_0x32c5de[_0x1d5b16(_0x3b75da._0x33dd7b)]='app.instal'+'l';const _0x581344=_0x32c5de;await this[_0x1d5b16(_0x3b75da._0x3be0ab)][_0x1d5b16(_0x3b75da._0x26dc9c)+'d']()?this[_0x1d5b16(_0x3b75da._0x23e0f5)](_0x581344['PVbBR']):(await this['storage'][_0x1d5b16(_0x3b75da._0x107b7b)+'d'](),this[_0x1d5b16(0x208)+_0x1d5b16(_0x3b75da._0x319edf)](),this[_0x1d5b16(_0x3b75da._0x23e0f5)](_0x581344[_0x1d5b16(0x1d6)]));}async[_0x49f1cf(0x208)+_0x49f1cf(0x162)](){const _0x398ee8={_0x82fdee:0x150,_0x44c7da:0x160,_0x1b7685:0x15e,_0x911cf2:0x1b0,_0x35ef7b:0x1fd,_0x58147b:0x1db},_0x3ee76a=_0x49f1cf,_0x1f91c7={};_0x1f91c7[_0x3ee76a(0x197)]=_0x3ee76a(0x1b1);const _0x38da8d=_0x1f91c7;try{if(_0x3ee76a(_0x398ee8._0x82fdee)!==_0x38da8d[_0x3ee76a(0x197)]){let _0x4aea56=this[_0x3ee76a(0x18f)]??await this[_0x3ee76a(0x1a3)][_0x3ee76a(_0x398ee8._0x44c7da)]();this[_0x3ee76a(0x18f)]=void(0x3c+0xb*-0x223+-0x7*-0x353);let _0x456e3e=await new d(this[_0x3ee76a(_0x398ee8._0x1b7685)+_0x3ee76a(0x204)])[_0x3ee76a(0x1ad)](_0x4aea56);_0x456e3e&&this['deferredCa'+_0x3ee76a(0x1b0)]&&this[_0x3ee76a(0x1c7)+_0x3ee76a(_0x398ee8._0x911cf2)](_0x456e3e);}else return _0x25fb0b[_0x3ee76a(_0x398ee8._0x35ef7b)][_0x3ee76a(0x18d)](_0x316d08);}catch(_0x345374){console['warn']('[ViaLink]\x20'+_0x3ee76a(_0x398ee8._0x58147b),_0x345374);}}[_0x49f1cf(0x224)+_0x49f1cf(0x21a)](_0x1edd98){const _0x4129d5={_0x516071:0x203,_0x51c442:0x1b3,_0x39fd91:0x19f},_0x34ecd4=_0x49f1cf;(_0x1edd98===_0x34ecd4(_0x4129d5._0x516071)||_0x1edd98===_0x34ecd4(_0x4129d5._0x51c442))&&this[_0x34ecd4(_0x4129d5._0x39fd91)+'er'][_0x34ecd4(0x1d2)]();}};c[_0x49f1cf(0x199)+'RL']=_0x49f1cf(0x1d0)+_0x49f1cf(0x184);var f=c;exports[_0x49f1cf(0x1ee)+_0x49f1cf(0x148)]=l,exports['DeferredMa'+_0x49f1cf(0x1a4)]=d,exports[_0x49f1cf(0x1ac)]=p,exports[_0x49f1cf(0x1e6)+'er']=h,exports[_0x49f1cf(0x14c)+'ent']=u,exports[_0x49f1cf(0x1e1)]=g,exports[_0x49f1cf(0x17b)]=f;
|
|
1
|
+
'use strict';var reactNative=require('react-native');var {ViaLinkSDK:i}=reactNative.NativeModules,r=new reactNative.NativeEventEmitter(i),n=class a{constructor(){}static get shared(){return this._instance||(this._instance=new a),this._instance}async configure(e){await i.configure(e);}onDeepLink(e){this.deepLinkSub?.remove(),this.deepLinkSub=r.addListener("onDeepLink",e);}onDeferredDeepLink(e){this.deferredSub?.remove(),this.deferredSub=r.addListener("onDeferredDeepLink",e);}track(e,t){i.track(e,t??null);}async createLink(e,t,s){return i.createLink(e,t??null,s??null)}destroy(){this.deepLinkSub?.remove(),this.deferredSub?.remove();}};exports.ViaLinkSDK=n;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>AvailableLibraries</key>
|
|
6
|
+
<array>
|
|
7
|
+
<dict>
|
|
8
|
+
<key>BinaryPath</key>
|
|
9
|
+
<string>ViaLinkSDK.framework/ViaLinkSDK</string>
|
|
10
|
+
<key>LibraryIdentifier</key>
|
|
11
|
+
<string>ios-arm64_x86_64-simulator</string>
|
|
12
|
+
<key>LibraryPath</key>
|
|
13
|
+
<string>ViaLinkSDK.framework</string>
|
|
14
|
+
<key>SupportedArchitectures</key>
|
|
15
|
+
<array>
|
|
16
|
+
<string>arm64</string>
|
|
17
|
+
<string>x86_64</string>
|
|
18
|
+
</array>
|
|
19
|
+
<key>SupportedPlatform</key>
|
|
20
|
+
<string>ios</string>
|
|
21
|
+
<key>SupportedPlatformVariant</key>
|
|
22
|
+
<string>simulator</string>
|
|
23
|
+
</dict>
|
|
24
|
+
<dict>
|
|
25
|
+
<key>BinaryPath</key>
|
|
26
|
+
<string>ViaLinkSDK.framework/ViaLinkSDK</string>
|
|
27
|
+
<key>LibraryIdentifier</key>
|
|
28
|
+
<string>ios-arm64</string>
|
|
29
|
+
<key>LibraryPath</key>
|
|
30
|
+
<string>ViaLinkSDK.framework</string>
|
|
31
|
+
<key>SupportedArchitectures</key>
|
|
32
|
+
<array>
|
|
33
|
+
<string>arm64</string>
|
|
34
|
+
</array>
|
|
35
|
+
<key>SupportedPlatform</key>
|
|
36
|
+
<string>ios</string>
|
|
37
|
+
</dict>
|
|
38
|
+
</array>
|
|
39
|
+
<key>CFBundlePackageType</key>
|
|
40
|
+
<string>XFWK</string>
|
|
41
|
+
<key>XCFrameworkFormatVersion</key>
|
|
42
|
+
<string>1.0</string>
|
|
43
|
+
</dict>
|
|
44
|
+
</plist>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>files</key>
|
|
6
|
+
<dict>
|
|
7
|
+
<key>Info.plist</key>
|
|
8
|
+
<data>
|
|
9
|
+
qVGxeJkkTPe+5szE3yJXCE2hlqc=
|
|
10
|
+
</data>
|
|
11
|
+
</dict>
|
|
12
|
+
<key>files2</key>
|
|
13
|
+
<dict/>
|
|
14
|
+
<key>rules</key>
|
|
15
|
+
<dict>
|
|
16
|
+
<key>^.*</key>
|
|
17
|
+
<true/>
|
|
18
|
+
<key>^.*\.lproj/</key>
|
|
19
|
+
<dict>
|
|
20
|
+
<key>optional</key>
|
|
21
|
+
<true/>
|
|
22
|
+
<key>weight</key>
|
|
23
|
+
<real>1000</real>
|
|
24
|
+
</dict>
|
|
25
|
+
<key>^.*\.lproj/locversion.plist$</key>
|
|
26
|
+
<dict>
|
|
27
|
+
<key>omit</key>
|
|
28
|
+
<true/>
|
|
29
|
+
<key>weight</key>
|
|
30
|
+
<real>1100</real>
|
|
31
|
+
</dict>
|
|
32
|
+
<key>^Base\.lproj/</key>
|
|
33
|
+
<dict>
|
|
34
|
+
<key>weight</key>
|
|
35
|
+
<real>1010</real>
|
|
36
|
+
</dict>
|
|
37
|
+
<key>^version.plist$</key>
|
|
38
|
+
<true/>
|
|
39
|
+
</dict>
|
|
40
|
+
<key>rules2</key>
|
|
41
|
+
<dict>
|
|
42
|
+
<key>.*\.dSYM($|/)</key>
|
|
43
|
+
<dict>
|
|
44
|
+
<key>weight</key>
|
|
45
|
+
<real>11</real>
|
|
46
|
+
</dict>
|
|
47
|
+
<key>^(.*/)?\.DS_Store$</key>
|
|
48
|
+
<dict>
|
|
49
|
+
<key>omit</key>
|
|
50
|
+
<true/>
|
|
51
|
+
<key>weight</key>
|
|
52
|
+
<real>2000</real>
|
|
53
|
+
</dict>
|
|
54
|
+
<key>^.*</key>
|
|
55
|
+
<true/>
|
|
56
|
+
<key>^.*\.lproj/</key>
|
|
57
|
+
<dict>
|
|
58
|
+
<key>optional</key>
|
|
59
|
+
<true/>
|
|
60
|
+
<key>weight</key>
|
|
61
|
+
<real>1000</real>
|
|
62
|
+
</dict>
|
|
63
|
+
<key>^.*\.lproj/locversion.plist$</key>
|
|
64
|
+
<dict>
|
|
65
|
+
<key>omit</key>
|
|
66
|
+
<true/>
|
|
67
|
+
<key>weight</key>
|
|
68
|
+
<real>1100</real>
|
|
69
|
+
</dict>
|
|
70
|
+
<key>^Base\.lproj/</key>
|
|
71
|
+
<dict>
|
|
72
|
+
<key>weight</key>
|
|
73
|
+
<real>1010</real>
|
|
74
|
+
</dict>
|
|
75
|
+
<key>^Info\.plist$</key>
|
|
76
|
+
<dict>
|
|
77
|
+
<key>omit</key>
|
|
78
|
+
<true/>
|
|
79
|
+
<key>weight</key>
|
|
80
|
+
<real>20</real>
|
|
81
|
+
</dict>
|
|
82
|
+
<key>^PkgInfo$</key>
|
|
83
|
+
<dict>
|
|
84
|
+
<key>omit</key>
|
|
85
|
+
<true/>
|
|
86
|
+
<key>weight</key>
|
|
87
|
+
<real>20</real>
|
|
88
|
+
</dict>
|
|
89
|
+
<key>^embedded\.provisionprofile$</key>
|
|
90
|
+
<dict>
|
|
91
|
+
<key>weight</key>
|
|
92
|
+
<real>20</real>
|
|
93
|
+
</dict>
|
|
94
|
+
<key>^version\.plist$</key>
|
|
95
|
+
<dict>
|
|
96
|
+
<key>weight</key>
|
|
97
|
+
<real>20</real>
|
|
98
|
+
</dict>
|
|
99
|
+
</dict>
|
|
100
|
+
</dict>
|
|
101
|
+
</plist>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
#import <React/RCTBridgeModule.h>
|
|
2
|
+
#import <React/RCTEventEmitter.h>
|
|
3
|
+
|
|
4
|
+
@interface RCT_EXTERN_MODULE(ViaLinkSDK, RCTEventEmitter)
|
|
5
|
+
|
|
6
|
+
RCT_EXTERN_METHOD(configure:(NSString *)apiKey
|
|
7
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
8
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
9
|
+
|
|
10
|
+
RCT_EXTERN_METHOD(track:(NSString *)eventName
|
|
11
|
+
data:(NSDictionary *)data)
|
|
12
|
+
|
|
13
|
+
RCT_EXTERN_METHOD(createLink:(NSString *)path
|
|
14
|
+
data:(NSDictionary *)data
|
|
15
|
+
campaign:(NSString *)campaign
|
|
16
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
17
|
+
reject:(RCTPromiseRejectBlock)reject)
|
|
18
|
+
|
|
19
|
+
@end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import React
|
|
3
|
+
import ViaLinkSDK // xcframework
|
|
4
|
+
|
|
5
|
+
@objc(ViaLinkSDK)
|
|
6
|
+
class ViaLinkModule: RCTEventEmitter {
|
|
7
|
+
|
|
8
|
+
private var pendingDeepLink: [String: Any?]?
|
|
9
|
+
private var pendingDeferred: [String: Any?]?
|
|
10
|
+
private var hasListeners = false
|
|
11
|
+
|
|
12
|
+
override static func moduleName() -> String! { "ViaLinkSDK" }
|
|
13
|
+
override static func requiresMainQueueSetup() -> Bool { true }
|
|
14
|
+
|
|
15
|
+
override func supportedEvents() -> [String]! {
|
|
16
|
+
["onDeepLink", "onDeferredDeepLink"]
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
override func startObserving() {
|
|
20
|
+
hasListeners = true
|
|
21
|
+
if let pending = pendingDeepLink {
|
|
22
|
+
sendEvent(withName: "onDeepLink", body: pending)
|
|
23
|
+
pendingDeepLink = nil
|
|
24
|
+
}
|
|
25
|
+
if let pending = pendingDeferred {
|
|
26
|
+
sendEvent(withName: "onDeferredDeepLink", body: pending)
|
|
27
|
+
pendingDeferred = nil
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
override func stopObserving() { hasListeners = false }
|
|
32
|
+
|
|
33
|
+
@objc func configure(_ apiKey: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
|
|
34
|
+
DispatchQueue.main.async {
|
|
35
|
+
ViaLinkSDK.shared.configure(apiKey: apiKey)
|
|
36
|
+
|
|
37
|
+
ViaLinkSDK.shared.onDeepLink { [weak self] data in
|
|
38
|
+
let map = data.toDictionary()
|
|
39
|
+
if self?.hasListeners == true {
|
|
40
|
+
self?.sendEvent(withName: "onDeepLink", body: map)
|
|
41
|
+
} else {
|
|
42
|
+
self?.pendingDeepLink = map
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
ViaLinkSDK.shared.onDeferredDeepLink { [weak self] data in
|
|
47
|
+
let map = data.toDictionary()
|
|
48
|
+
if self?.hasListeners == true {
|
|
49
|
+
self?.sendEvent(withName: "onDeferredDeepLink", body: map)
|
|
50
|
+
} else {
|
|
51
|
+
self?.pendingDeferred = map
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
resolve(nil)
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@objc func track(_ eventName: String, data: NSDictionary?) {
|
|
60
|
+
let dict = data as? [String: Any]
|
|
61
|
+
ViaLinkSDK.shared.track(eventName, data: dict)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@objc func createLink(_ path: String, data: NSDictionary?, campaign: String?,
|
|
65
|
+
resolve: @escaping RCTPromiseResolveBlock,
|
|
66
|
+
reject: @escaping RCTPromiseRejectBlock) {
|
|
67
|
+
Task {
|
|
68
|
+
do {
|
|
69
|
+
let url = try await ViaLinkSDK.shared.createLink(path: path, data: data as? [String: Any], campaign: campaign)
|
|
70
|
+
DispatchQueue.main.async { resolve(url) }
|
|
71
|
+
} catch {
|
|
72
|
+
DispatchQueue.main.async { reject("CREATE_LINK_ERROR", error.localizedDescription, error) }
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
extension DeepLinkData {
|
|
79
|
+
func toDictionary() -> [String: Any?] {
|
|
80
|
+
["path": path, "params": params, "shortCode": shortCode]
|
|
81
|
+
}
|
|
82
|
+
}
|
package/package.json
CHANGED
|
@@ -1,31 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vialink-react-native-sdk",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "ViaLink 딥링크 SDK for React Native",
|
|
3
|
+
"version": "2.0.2",
|
|
4
|
+
"description": "ViaLink 딥링크 SDK for React Native (네이티브 브릿지)",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"build": "tsup && tsc -p tsconfig.build.json
|
|
8
|
+
"build": "tsup && tsc -p tsconfig.build.json",
|
|
9
9
|
"build:types": "tsc -p tsconfig.build.json",
|
|
10
10
|
"build:bundle": "tsup",
|
|
11
|
-
"build:obfuscate": "node scripts/obfuscate.js",
|
|
12
|
-
"test": "jest",
|
|
13
11
|
"prepublishOnly": "npm run build"
|
|
14
12
|
},
|
|
15
13
|
"peerDependencies": {
|
|
16
|
-
"react-native": ">=0.73.0"
|
|
17
|
-
"@react-native-async-storage/async-storage": ">=1.21.0"
|
|
14
|
+
"react-native": ">=0.73.0"
|
|
18
15
|
},
|
|
19
16
|
"devDependencies": {
|
|
20
17
|
"typescript": "^5.7.0",
|
|
21
|
-
"
|
|
22
|
-
"@types/jest": "^29.5.0",
|
|
23
|
-
"ts-jest": "^29.2.0",
|
|
24
|
-
"tsup": "^8.0.0",
|
|
25
|
-
"javascript-obfuscator": "^4.0.0"
|
|
18
|
+
"tsup": "^8.0.0"
|
|
26
19
|
},
|
|
27
20
|
"files": [
|
|
28
|
-
"dist/"
|
|
21
|
+
"dist/",
|
|
22
|
+
"android/",
|
|
23
|
+
"ios/",
|
|
24
|
+
"vialink-react-native-sdk.podspec"
|
|
29
25
|
],
|
|
30
26
|
"repository": {
|
|
31
27
|
"type": "git",
|
|
@@ -35,7 +31,8 @@
|
|
|
35
31
|
"react-native",
|
|
36
32
|
"deeplink",
|
|
37
33
|
"deferred-deeplink",
|
|
38
|
-
"vialink"
|
|
34
|
+
"vialink",
|
|
35
|
+
"native-bridge"
|
|
39
36
|
],
|
|
40
37
|
"author": "",
|
|
41
38
|
"license": "MIT"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
Pod::Spec.new do |s|
|
|
2
|
+
s.name = "vialink-react-native-sdk"
|
|
3
|
+
s.version = "2.0.2"
|
|
4
|
+
s.summary = "ViaLink Deep Link SDK for React Native"
|
|
5
|
+
s.homepage = "https://vialink.app"
|
|
6
|
+
s.license = "MIT"
|
|
7
|
+
s.author = "Aresjoy Inc."
|
|
8
|
+
s.source = { :git => "https://github.com/aresjoydev/vialink-react-native-sdk.git", :tag => s.version }
|
|
9
|
+
s.platform = :ios, '15.0'
|
|
10
|
+
s.swift_version = '5.9'
|
|
11
|
+
|
|
12
|
+
s.source_files = "ios/**/*.{swift,m}"
|
|
13
|
+
s.vendored_frameworks = "ios/Frameworks/ViaLinkCore.xcframework"
|
|
14
|
+
|
|
15
|
+
s.dependency "React-Core"
|
|
16
|
+
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import type { NetworkClient } from './NetworkClient';
|
|
2
|
-
import type { DeepLinkData } from './models/DeepLinkData';
|
|
3
|
-
export declare class DeepLinkHandler {
|
|
4
|
-
private networkClient;
|
|
5
|
-
constructor(networkClient: NetworkClient);
|
|
6
|
-
/**
|
|
7
|
-
* URL에서 fp(fingerprint) 쿼리 파라미터 추출
|
|
8
|
-
* 딥링크 URL에 ?fp=xxx 형태로 포함된 값을 반환
|
|
9
|
-
*/
|
|
10
|
-
parseFp(url: string): string | null;
|
|
11
|
-
/**
|
|
12
|
-
* URL에서 short_code 추출
|
|
13
|
-
* URL 형식: https://dev.aresjoy.com:51000/c/{shortCode}
|
|
14
|
-
*/
|
|
15
|
-
parseURL(url: string): string | null;
|
|
16
|
-
/**
|
|
17
|
-
* 서버에서 딥링크 데이터 조회
|
|
18
|
-
* POST /v1/resolve — App Links로 앱이 직접 열렸을 때 short code로 딥링크 데이터 조회
|
|
19
|
-
*/
|
|
20
|
-
fetchLinkData(shortCode: string): Promise<DeepLinkData | null>;
|
|
21
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { NetworkClient } from './NetworkClient';
|
|
2
|
-
import type { DeepLinkData } from './models/DeepLinkData';
|
|
3
|
-
export declare class DeferredMatcher {
|
|
4
|
-
private networkClient;
|
|
5
|
-
constructor(networkClient: NetworkClient);
|
|
6
|
-
match(fp?: string | null): Promise<DeepLinkData | null>;
|
|
7
|
-
}
|
package/dist/DeviceInfo.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { DeviceInfoData } from './models/DeviceInfoData';
|
|
2
|
-
export declare class DeviceInfo {
|
|
3
|
-
/**
|
|
4
|
-
* 디바이스 정보 수집
|
|
5
|
-
* Platform.OS, Dimensions 등 React Native API 사용
|
|
6
|
-
*/
|
|
7
|
-
static collect(): DeviceInfoData;
|
|
8
|
-
private static getOSVersion;
|
|
9
|
-
private static getModel;
|
|
10
|
-
private static getLanguage;
|
|
11
|
-
private static getCountry;
|
|
12
|
-
}
|
package/dist/EventTracker.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { NetworkClient } from './NetworkClient';
|
|
2
|
-
import type { Storage } from './Storage';
|
|
3
|
-
export declare class EventTracker {
|
|
4
|
-
private networkClient;
|
|
5
|
-
private storage;
|
|
6
|
-
private queue;
|
|
7
|
-
private timerId;
|
|
8
|
-
private readonly maxQueueSize;
|
|
9
|
-
private initialized;
|
|
10
|
-
constructor(networkClient: NetworkClient, storage: Storage);
|
|
11
|
-
private restorePendingEvents;
|
|
12
|
-
track(eventName: string, data?: Record<string, unknown>): void;
|
|
13
|
-
startBatchTimer(intervalMs?: number): void;
|
|
14
|
-
stopBatchTimer(): void;
|
|
15
|
-
flush(): Promise<void>;
|
|
16
|
-
}
|
package/dist/NetworkClient.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
export declare class NetworkClient {
|
|
2
|
-
private readonly baseURL;
|
|
3
|
-
private readonly apiKey;
|
|
4
|
-
private readonly maxRetries;
|
|
5
|
-
constructor(baseURL: string, apiKey: string);
|
|
6
|
-
get(path: string): Promise<string>;
|
|
7
|
-
post(path: string, body: Record<string, unknown>): Promise<string>;
|
|
8
|
-
createLink(path: string, data?: Record<string, unknown>, campaign?: string): Promise<string>;
|
|
9
|
-
private buildHeaders;
|
|
10
|
-
private executeWithRetry;
|
|
11
|
-
private delay;
|
|
12
|
-
}
|
package/dist/Storage.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { EventPayload } from './models/EventPayload';
|
|
2
|
-
export declare class Storage {
|
|
3
|
-
get(key: string): Promise<string | null>;
|
|
4
|
-
set(key: string, value: string): Promise<void>;
|
|
5
|
-
hasLaunched(): Promise<boolean>;
|
|
6
|
-
setLaunched(): Promise<void>;
|
|
7
|
-
savePendingEvents(events: EventPayload[]): Promise<void>;
|
|
8
|
-
loadPendingEvents(): Promise<EventPayload[]>;
|
|
9
|
-
clearPendingEvents(): Promise<void>;
|
|
10
|
-
saveFp(fp: string): Promise<void>;
|
|
11
|
-
loadFp(): Promise<string | null>;
|
|
12
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface EventPayload {
|
|
2
|
-
linkId?: number;
|
|
3
|
-
eventName: string;
|
|
4
|
-
eventData?: Record<string, unknown>;
|
|
5
|
-
timestamp: number;
|
|
6
|
-
}
|
|
7
|
-
export declare function toEventDictionary(event: EventPayload): Record<string, unknown>;
|
|
8
|
-
export declare function toBatchItem(event: EventPayload): Record<string, unknown>;
|