vialink-react-native-sdk 1.0.9 → 2.0.1

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 (28) hide show
  1. package/README.md +58 -2
  2. package/android/build.gradle +46 -0
  3. package/android/libs/vialink-sdk.aar +0 -0
  4. package/android/src/main/AndroidManifest.xml +2 -0
  5. package/android/src/main/java/com/vialink/reactnative/ViaLinkModule.kt +106 -0
  6. package/android/src/main/java/com/vialink/reactnative/ViaLinkPackage.kt +13 -0
  7. package/dist/ViaLinkSDK.d.ts +19 -20
  8. package/dist/index.d.ts +1 -9
  9. package/dist/index.js +1 -1
  10. package/ios/Frameworks/ViaLinkCore.xcframework/Info.plist +44 -0
  11. package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64/ViaLinkSDK.framework/Info.plist +0 -0
  12. package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64/ViaLinkSDK.framework/ViaLinkSDK +0 -0
  13. package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64_x86_64-simulator/ViaLinkSDK.framework/Info.plist +0 -0
  14. package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64_x86_64-simulator/ViaLinkSDK.framework/ViaLinkSDK +0 -0
  15. package/ios/Frameworks/ViaLinkCore.xcframework/ios-arm64_x86_64-simulator/ViaLinkSDK.framework/_CodeSignature/CodeResources +101 -0
  16. package/ios/ViaLinkModule.m +19 -0
  17. package/ios/ViaLinkModule.swift +82 -0
  18. package/package.json +11 -14
  19. package/vialink-react-native-sdk.podspec +16 -0
  20. package/dist/DeepLinkHandler.d.ts +0 -21
  21. package/dist/DeferredMatcher.d.ts +0 -7
  22. package/dist/DeviceInfo.d.ts +0 -12
  23. package/dist/EventTracker.d.ts +0 -16
  24. package/dist/NetworkClient.d.ts +0 -12
  25. package/dist/Storage.d.ts +0 -12
  26. package/dist/models/DeepLinkData.d.ts +0 -5
  27. package/dist/models/DeviceInfoData.d.ts +0 -9
  28. 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 ./vialink-reactnative-sdk.tgz
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,11 +51,29 @@ npm install ./vialink-reactnative-sdk.tgz
13
51
  ```typescript
14
52
  import { ViaLinkSDK } from 'vialink-react-native-sdk';
15
53
 
16
- ViaLinkSDK.shared.configure('YOUR_API_KEY');
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
  ## 문서
@@ -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,2 @@
1
+ <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ </manifest>
@@ -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
+ }
@@ -1,12 +1,17 @@
1
- import type { DeepLinkData } from './models/DeepLinkData';
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'); // 서버 주소는 SDK 내부에 고정
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 networkClient;
21
- private eventTracker;
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 { DeepLinkHandler } from './DeepLinkHandler';
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>
@@ -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": "1.0.9",
4
- "description": "ViaLink 딥링크 SDK for React Native",
3
+ "version": "2.0.1",
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 && node scripts/obfuscate.js",
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
- "jest": "^29.7.0",
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.1"
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
- }
@@ -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
- }
@@ -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
- }
@@ -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,5 +0,0 @@
1
- export interface DeepLinkData {
2
- path: string;
3
- params: Record<string, string>;
4
- shortCode?: string;
5
- }
@@ -1,9 +0,0 @@
1
- export interface DeviceInfoData {
2
- os: string;
3
- osVersion: string;
4
- model: string;
5
- screenWidth: number;
6
- screenHeight: number;
7
- language: string;
8
- country: string;
9
- }
@@ -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>;