vialink-react-native-sdk 1.0.8 → 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 -19
  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 -16
  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 -10
  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,27 +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?;
24
+ private deepLinkSub;
25
+ private deferredSub;
29
26
  private constructor();
30
27
  static get shared(): ViaLinkSDK;
31
28
  /**
32
29
  * SDK 초기화 - 앱 최상위(App.tsx)에서 호출
33
30
  * @param apiKey 대시보드에서 발급받은 API Key
34
31
  */
35
- configure(apiKey: string): void;
32
+ configure(apiKey: string): Promise<void>;
33
+ /**
34
+ * 딥링크 수신 콜백 등록
35
+ * App Links / Universal Links로 앱이 열렸을 때 호출됩니다.
36
+ */
36
37
  onDeepLink(callback: (data: DeepLinkData) => void): void;
38
+ /**
39
+ * 디퍼드 딥링크 콜백 등록
40
+ * 앱 첫 설치 후 실행 시 fingerprint 매칭으로 딥링크 데이터를 전달합니다.
41
+ */
37
42
  onDeferredDeepLink(callback: (data: DeepLinkData) => void): void;
38
- handleURL(url: string): void;
39
43
  /**
40
44
  * 커스텀 이벤트 추적
41
45
  *
@@ -53,8 +57,4 @@ export declare class ViaLinkSDK {
53
57
  */
54
58
  createLink(path: string, data?: Record<string, unknown>, campaign?: string): Promise<string>;
55
59
  destroy(): void;
56
- private setupLinkingListener;
57
- private checkFirstLaunch;
58
- private attemptDeferredMatch;
59
- private handleAppStateChange;
60
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';function _0x1839(){const _0x61b39c=['C3rHCNrcyxrJAa','z2v0tgfUz3vHzW','z2v0','7iUK7yYOoG','vgLTzxi','vvjm','C2nYzwvU','zgvMzxjYzwrdyq','qKTqzxK','65sL66Eb7ygSioYYMoUMRcdSI6tTJkG6','DeXSthy','Cg9ZDa','zxzLBNrFzgf0yq','yMfJA2DYB3vUza','BgLUA2LUz1n1yG','rgvLCeXPBMS','zxzLBNroyw1L','zw50CMLLCW','tgP4t2e','rhDUwfy','seDkz1C','CMvZDg9YzvbLBG','rg12ANi','mtjuB3jjC0e','C2HVCNrFy29Kzq','C19SyxvUy2HLza','C3bSAxq','C2nYAxb0Aw9U','BMrSzxi','zLDjy00','qwzzyMO','Bg9HzfbLBMrPBG','Bwf4uxvLDwvtAq','Aw9Z','rLrfEeS','x19LC01VzhvSzq','yxbWlM9Wzw4','C2nYzwvUsgvPzW','EhDltwO','CMPZChC','AgfUzgXLqxbWuW','Bwf4uMv0CMLLCW','zgvZDhjVEq','z2v0tw9KzwW','ChvZAa','CM91BMq','z2v0t1nwzxjZAq','AfjLDhj5','txjAsK4','C2v0DxbmAw5RAq','yxrH','ywrKrxzLBNrmAq','vvjmio2mJoYlSsdSI6tTJkG6','BM93','Dgv4Da','uMvSzwfZzq','sfrgqM8','ndC0ne1SBMfTBa','wfr4Dhm','vMvYC2LVBG','BLn4B08','z2v0q291BNrYEq','ioYvIUYvMoYkTEUlIoUlPa','rgLTzw5ZAw9UCW','C3rHDhvZ','BI9QC29U','zNbhq1y','Bwf0y2HLza','66Eb7ygSioUnSoYDTo2eScdSOBdTMOWG','tgf1BMnO','CeHOAhm','lI4Ukq','Bg9N','AgfZtgf1BMnOzq','zgLVBq','zgvLCeXPBMTdyq','7jQu7lkTioYlPo2mQa','ue9tva','qw5KCM9Pza','rxzLBNruCMfJAW','txfKqMe','BMDmAxn0zw5LCG','C2HHCMvK','z2v0sw5PDgLHBa','Ahr0Chm6lY92Aq','DgnOzxi','DhjHy2S','rgvLCeXPBMTiyq','sfruuca','C3rVCMfNzs9HCW','qxbWu3rHDgu','Bw9KzwW','CMvTB3zL','CgfYC2u','tgLUA2LUzW','l3yXl3jLC29SDG','z2v0sxrLBq','yxbPs2v5','u3rVCMfNzq','CxvLDwu','wwXOtMe','zxzLBNruCMfJAW','y3royxrPDMu','qvbjx0jbu0vFvq','CgfYC2vvuKW','tMv0D29YA0nSAq','Aw5PDgLHBgL6zq','7j2066+4ioY0IoQ4So2zLoUqMoYxIoYkTEUlIa','BgXIywnR','yMfZzvvsta','tw9KzwW','y3jLyxrLtgLUAW','y2fTCgfPz24','AxzLlwfZEw5Jlq','C2v0','DMLHBgLUA19Oyq','yxbWu3rHDgvtDq','65su7y2865oCioUNPoY5RsdSI6tTJkG6','AxndB25MAwD1CG','zxzLBNreyxrH','BwHUCMS','Aw1LCG','DgHLBG','vfbkAei','zMX1C2G','7j2067kK7yQ4ioYGHoYgOsdSI6tTJkG6','yxr0zw1WDerLzG','BgfUz3vHz2u','zxjYzwrnyxrJAa','C2nYzwvUv2LKDa','Dhj1zq','zxHLy3v0zvDPDa','u0rl6RcaioY0IoQ4So2zLoUqMoYNGa','mZe3nJKZB1LXwwLR','B25ezwzLCNjLza','r3P5B1m','rMnWzhK','BMDfDMvUDhm','BMv0D29YA0nSAq','r0vu','ru1mDKK','rwrVyMC','nZeZmty1vLrxA1LR','x2LUC3rHBMnL','AKziug4','yxrO','yMzeCuG','DxjS','B3nwzxjZAw9U','mtm1nJeYoefpr1DKCq','BMrPBMDFzxzLBG','C3rVCejHDgnOva','yNvPBgrizwfKzq','vxnLCI1bz2vUDa','zgvLCgXPBMTFCa','AgfUzgXLvvjm','y2HLy2TgAxjZDa','mtqZodGYofrirMTouq','Aw5Hy3rPDMu','DgLTzxjjza','zgvMyxvSDa','t1rgvxq','Cgf0Ag5HBwu','zxzLBNrFBMfTzq','CfHiEe8','zMv0y2HmAw5Rra','BwfW','zgvLCeXPBMTiyq','qwnJzxb0','BgvUz3rO','zw50','y2XLyxjqzw5KAq','C2nHBgu','rKH1wxe','mZyZotyWm1rywMPKra','yufbwLm','yNnJCMLWDgLVBG','CMvHy3qTBMf0Aq','Dgf0zunOyw5Nzq','vLLTsgO','qhjLywn0lw5HDa','C2v0sxrLBq','ugXHDgzVCM0','ufzStxy','CgfYyw1Z','vuXPsu4','mZuZmdDcy3fbtK4','zMLSDgvY','CLr3wgy','Bwf0y2G','vvjmioYiMoYlOdOG','l2jHDgnO','DMLHBgLUA19Wzq','z2T0Ahm','C2f2zvbLBMrPBG','DhPIBve','y29SBgvJDa','q0PmA3m','BgLUA0LK','zgvSyxK','zgvLCgXPBMTeyq','w1zPyuXPBMTDia','BgLUA19Pza','icHHCgLlzxK6ia','vMLHtgLUA1nesW','ANPjthm','wNfnvva','A0Hewwm','zgvLCgXPBMTFza','odKZntaXA2XYCLHl','z0v2zw50CW','C3rVCMfNzq','CMvTB3zLsxrLBq','Dw5ZAgLMDa','C3rYAw5NAwz5','C2v0tgf1BMnOzq','y29UC3rHBNrZ','l3yXl29Wzw4','BvDbsxu','BvLxzK8','D2fYBG','ywDvyNm','z29AAxy','DwPry2O','y2HHBMDL'];_0x1839=function(){return _0x61b39c;};return _0x1839();}const _0x1cc356=_0x1e49;(function(_0xc85040,_0x456523){const _0x38176e={_0x1d9dc2:0x189,_0x198040:0x1a1,_0x3be62b:0x192,_0x1da66a:0x1d5},_0x4ecb10=_0x1e49,_0xdf3fbe=_0xc85040();while(!![]){try{const _0x217761=parseInt(_0x4ecb10(_0x38176e._0x1d9dc2))/(-0x7*0x3f5+-0x26a2*0x1+0x4256)+parseInt(_0x4ecb10(0x199))/(0x8b3+0x125*0x1f+0x2*-0x1616)+parseInt(_0x4ecb10(0x1b2))/(0x95+-0x8a4+-0x1*-0x812)+parseInt(_0x4ecb10(_0x38176e._0x198040))/(-0x11a7*0x1+-0x257+0x1402)+parseInt(_0x4ecb10(_0x38176e._0x3be62b))/(-0xcb2+0x5*-0x53e+-0x1*-0x26ed)+-parseInt(_0x4ecb10(0x1fc))/(0x4*-0x58f+0x1eda+-0xb*0xc8)*(-parseInt(_0x4ecb10(_0x38176e._0x1da66a))/(-0x169c+-0x51c+0x1*0x1bbf))+parseInt(_0x4ecb10(0x21e))/(0x10a1+0xe*-0x1ee+0xa6b)*(-parseInt(_0x4ecb10(0x1be))/(-0x13b6+0x25f+0x116*0x10));if(_0x217761===_0x456523)break;else _0xdf3fbe['push'](_0xdf3fbe['shift']());}catch(_0x31a4ca){_0xdf3fbe['push'](_0xdf3fbe['shift']());}}}(_0x1839,-0x5a01*0x16+0x11087b*-0x1+0x228986));var reactNative=require(_0x1cc356(0x1b5)+'ve'),o=require(_0x1cc356(0x1b8)+_0x1cc356(0x175)+_0x1cc356(0x23e)+'ync-storag'+'e');function _interopDefault(_0x24b33e){const _0x3ef9ab={_0x52818d:0x208},_0x1a4380=_0x1cc356;return _0x24b33e&&_0x24b33e[_0x1a4380(_0x3ef9ab._0x52818d)]?_0x24b33e:{'default':_0x24b33e};}var o__default=_interopDefault(o),l=class{constructor(_0x472642){this['networkCli'+'ent']=_0x472642;}[_0x1cc356(0x16c)](_0x26a326){const _0x30fc82={_0x42b4b4:0x1d3,_0x3974b4:0x17c,_0x586ad6:0x1d1,_0x15db41:0x17c,_0x3665d7:0x18b,_0x40df8a:0x1a2,_0x5491a1:0x1bf,_0x5ecac5:0x1ad,_0x592fe1:0x219},_0xfe3a1d=_0x1cc356,_0xd0411c={};_0xd0411c[_0xfe3a1d(0x18b)]=function(_0x888e33,_0x1e39ac){return _0x888e33===_0x1e39ac;},_0xd0411c[_0xfe3a1d(_0x30fc82._0x42b4b4)]=function(_0x3204ad,_0x1afdfd){return _0x3204ad===_0x1afdfd;},_0xd0411c[_0xfe3a1d(_0x30fc82._0x3974b4)]=_0xfe3a1d(0x1b7),_0xd0411c[_0xfe3a1d(_0x30fc82._0x586ad6)]=function(_0x55a498,_0x25a6cf){return _0x55a498>=_0x25a6cf;};const _0x2b89ca=_0xd0411c;try{if(_0x2b89ca[_0xfe3a1d(_0x30fc82._0x15db41)]!==_0x2b89ca['mhnrk'])(_0x2b89ca[_0xfe3a1d(_0x30fc82._0x3665d7)](_0x5d283b,_0xfe3a1d(0x1f2))||_0x2b89ca[_0xfe3a1d(0x1d3)](_0x5cfd07,_0xfe3a1d(_0x30fc82._0x40df8a)))&&this['eventTrack'+'er'][_0xfe3a1d(0x180)]();else{let _0xa6f879=new URL(_0x26a326)[_0xfe3a1d(0x1a6)][_0xfe3a1d(0x1ff)]('/')[_0xfe3a1d(_0x30fc82._0x5491a1)](Boolean);return _0x2b89ca[_0xfe3a1d(0x1d1)](_0xa6f879[_0xfe3a1d(_0x30fc82._0x5ecac5)],-0xf5b*0x1+0x2566+0x1609*-0x1)&&_0xa6f879[0x2293+-0x221+0x1*-0x2072]==='c'?_0xa6f879[-0x166*0x7+0x1*0x16e9+-0x49*0x2e]??null:null;}}catch{return console[_0xfe3a1d(0x1e0)](_0xfe3a1d(0x1cd)+_0xfe3a1d(_0x30fc82._0x592fe1),_0x26a326),null;}}async[_0x1cc356(0x1a9)+'ata'](_0x53c652){const _0x5cc1e0={_0xcd8661:0x229,_0xbca730:0x1fd,_0x300aa5:0x244,_0x109a04:0x228,_0x22544a:0x217},_0x1da457=_0x1cc356,_0x158efa={};_0x158efa[_0x1da457(0x221)]=_0x1da457(0x1cd)+_0x1da457(_0x5cc1e0._0xcd8661)+_0x1da457(0x1e8);const _0x1812a2=_0x158efa;try{const _0x2e7213={};_0x2e7213[_0x1da457(_0x5cc1e0._0xbca730)]=_0x53c652;let _0x414619=await this[_0x1da457(0x18e)+'ent'][_0x1da457(0x1f0)](_0x1da457(_0x5cc1e0._0x300aa5)+'e',_0x2e7213),_0x1f13d3=JSON['parse'](_0x414619);return _0x1f13d3[_0x1da457(_0x5cc1e0._0x109a04)]?{'path':_0x1f13d3[_0x1da457(0x19e)+_0x1da457(0x195)]??'/','params':_0x1f13d3[_0x1da457(0x1d4)+_0x1da457(_0x5cc1e0._0x22544a)]??{},'shortCode':_0x53c652}:null;}catch(_0x47ee63){return console['error'](_0x1812a2[_0x1da457(0x221)],_0x47ee63),null;}}},d=class i{static[_0x1cc356(0x1c8)](){const _0x65e8d0={_0x22e273:0x206,_0x5d5979:0x1b1,_0x589fb7:0x1e7,_0x392b85:0x1bd,_0x4cf9b6:0x1eb,_0x158e49:0x1b0,_0xb8306d:0x1ba,_0x35f6a0:0x21d,_0x386e38:0x233,_0x2852ef:0x212,_0x18435e:0x1e6,_0x3534ec:0x222},_0xc44ac8=_0x1cc356,_0x361aab={};_0x361aab['ULiIN']=_0xc44ac8(0x1eb),_0x361aab['HTFBo']=_0xc44ac8(_0x65e8d0._0x22e273),_0x361aab['IpSGN']='iOS',_0x361aab[_0xc44ac8(_0x65e8d0._0x5d5979)]=function(_0x1cc0bb,_0x3f3ed2){return _0x1cc0bb*_0x3f3ed2;};const _0x540834=_0x361aab;let {width:_0x180943,height:_0x29e92a}=reactNative[_0xc44ac8(0x224)][_0xc44ac8(_0x65e8d0._0x589fb7)](_0x540834[_0xc44ac8(_0x65e8d0._0x392b85)]),_0x5beaa2=reactNative['Dimensions']['get'](_0xc44ac8(_0x65e8d0._0x4cf9b6))[_0xc44ac8(_0x65e8d0._0x158e49)]??-0x17d+0xf9e+-0x10*0xe2;return{'os':reactNative[_0xc44ac8(_0x65e8d0._0xb8306d)]['OS']===_0x540834[_0xc44ac8(_0x65e8d0._0x35f6a0)]?_0x540834['IpSGN']:_0xc44ac8(_0x65e8d0._0x386e38),'osVersion':i[_0xc44ac8(0x213)+'on'](),'model':i[_0xc44ac8(0x210)](),'screenWidth':Math['round'](_0x540834[_0xc44ac8(0x1b1)](_0x180943,_0x5beaa2)),'screenHeight':Math[_0xc44ac8(_0x65e8d0._0x2852ef)](_0x29e92a*_0x5beaa2),'language':i[_0xc44ac8(_0x65e8d0._0x18435e)+'e'](),'country':i[_0xc44ac8(_0x65e8d0._0x3534ec)]()};}static[_0x1cc356(0x213)+'on'](){const _0x20f314={_0x2164c6:0x1dc,_0x4a51cf:0x21c,_0x386656:0x1ba,_0x518514:0x220},_0x6c6968=_0x1cc356,_0x1d2d41={};_0x1d2d41[_0x6c6968(0x1d2)]='android';const _0x4e854c=_0x1d2d41;if(reactNative[_0x6c6968(0x1ba)]['OS']===_0x4e854c[_0x6c6968(0x1d2)]){let _0xffe255=reactNative[_0x6c6968(0x1ba)][_0x6c6968(_0x20f314._0x2164c6)];if(_0xffe255[_0x6c6968(_0x20f314._0x4a51cf)])return String(_0xffe255['Release']);}return String(reactNative[_0x6c6968(_0x20f314._0x386656)][_0x6c6968(_0x20f314._0x518514)]);}static[_0x1cc356(0x210)](){const _0x4223a6={_0x2a464e:0x1b3,_0x23e332:0x1ba,_0x1bf011:0x172,_0x776ae6:0x206,_0x1365c3:0x233},_0x12b4f2=_0x1cc356,_0x5297d8={};_0x5297d8[_0x12b4f2(0x1b3)]=function(_0x585f2c,_0xbbcc69){return _0x585f2c===_0xbbcc69;},_0x5297d8['oHIWZ']='iPhone';const _0x4d6dec=_0x5297d8;if(_0x4d6dec[_0x12b4f2(_0x4223a6._0x2a464e)](reactNative[_0x12b4f2(_0x4223a6._0x23e332)]['OS'],'android')){let _0x403567=reactNative[_0x12b4f2(_0x4223a6._0x23e332)][_0x12b4f2(0x1dc)][_0x12b4f2(_0x4223a6._0x1bf011)];if(_0x403567)return String(_0x403567);}return reactNative[_0x12b4f2(0x1ba)]['OS']===_0x12b4f2(_0x4223a6._0x776ae6)?_0x4d6dec['oHIWZ']:_0x12b4f2(_0x4223a6._0x1365c3);}static[_0x1cc356(0x1e6)+'e'](){const _0x5b21e7={_0x65165f:0x202,_0x356070:0x1ba,_0x1747e7:0x1dc},_0x2ec823=_0x1cc356,_0x5cc23e={};_0x5cc23e[_0x2ec823(_0x5b21e7._0x65165f)]=function(_0xec967e,_0x4e65b7){return _0xec967e===_0x4e65b7;},_0x5cc23e[_0x2ec823(0x1c0)]=_0x2ec823(0x206);const _0x2c8574=_0x5cc23e;return _0x2c8574[_0x2ec823(_0x5b21e7._0x65165f)](reactNative[_0x2ec823(_0x5b21e7._0x356070)]['OS'],_0x2c8574['rTwXf'])?reactNative[_0x2ec823(0x1ba)][_0x2ec823(_0x5b21e7._0x1747e7)]?.['interfaceI'+_0x2ec823(0x22f)]??'ko':'ko';}static[_0x1cc356(0x222)](){return'KR';}},p=class{constructor(_0x2b3149){const _0x480bc6={_0x406a73:0x1ae},_0x13a052=_0x1cc356;this[_0x13a052(0x18e)+_0x13a052(_0x480bc6._0x406a73)]=_0x2b3149;}async[_0x1cc356(0x1c1)](){const _0x2e641c={_0x3470c3:0x1cd,_0x5f17e6:0x1c8,_0x41d57a:0x20a,_0x24e245:0x1ae,_0x29212f:0x228,_0x32ad96:0x19e,_0x4c9d90:0x1e0,_0x286b38:0x1f7},_0x46e70b=_0x1cc356,_0x4e4642={};_0x4e4642[_0x46e70b(0x196)]=_0x46e70b(0x1dd),_0x4e4642['LjxOa']=_0x46e70b(_0x2e641c._0x3470c3)+'디퍼드\x20매칭\x20실패:';const _0x5cbfff=_0x4e4642;try{let _0x4a8dd4=d[_0x46e70b(_0x2e641c._0x5f17e6)](),_0x148843={'device_info':{'os':_0x4a8dd4['os'],'os_version':_0x4a8dd4[_0x46e70b(0x198)],'device_model':_0x4a8dd4[_0x46e70b(0x240)],'screen_width':_0x4a8dd4[_0x46e70b(0x185)+'h'],'screen_height':_0x4a8dd4[_0x46e70b(_0x2e641c._0x41d57a)+'ht'],'language':_0x4a8dd4[_0x46e70b(0x183)],'country':_0x4a8dd4['country']},'is_first_launch':!(0x23e3+-0x1ca*0x11+0x3*-0x1d3)},_0x1c030e=await this[_0x46e70b(0x18e)+_0x46e70b(_0x2e641c._0x24e245)][_0x46e70b(0x1f0)](_0x5cbfff['bfDqH'],_0x148843),_0x2d889c=JSON['parse'](_0x1c030e);if(!_0x2d889c[_0x46e70b(_0x2e641c._0x29212f)]||!_0x2d889c[_0x46e70b(_0x2e641c._0x32ad96)+_0x46e70b(0x195)])return null;let _0x5542b6={};if(_0x2d889c['deeplink_d'+'ata']){for(let [_0x165130,_0x555211]of Object[_0x46e70b(0x1f6)](_0x2d889c['deeplink_d'+_0x46e70b(0x217)]))_0x5542b6[_0x165130]=String(_0x555211);}const _0x28b508={};return _0x28b508['path']=_0x2d889c['deeplink_p'+'ath'],_0x28b508[_0x46e70b(0x1bc)]=_0x5542b6,_0x28b508['shortCode']=_0x2d889c['link_click'+'_id'],_0x28b508;}catch(_0xa97f92){return console[_0x46e70b(_0x2e641c._0x4c9d90)](_0x5cbfff[_0x46e70b(_0x2e641c._0x286b38)],_0xa97f92),null;}}};function _0x1e49(_0x265371,_0x96cb82){_0x265371=_0x265371-(-0x23d6+0xb8e+0x19b0);const _0x587fd1=_0x1839();let _0x476eab=_0x587fd1[_0x265371];if(_0x1e49['pqYwwk']===undefined){var _0x25a5e5=function(_0x3e9898){const _0x9ab27b='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x220134='',_0x2dbeec='';for(let _0x271df3=0x2*-0xe09+-0xd1d+-0xd*-0x32b,_0x1f3772,_0x385750,_0x37d87e=-0x371+-0x1*0x59f+-0xe8*-0xa;_0x385750=_0x3e9898['charAt'](_0x37d87e++);~_0x385750&&(_0x1f3772=_0x271df3%(-0x101*0x12+-0x1f7b+-0x1*-0x3191)?_0x1f3772*(-0x1d*-0x101+-0x1f72+-0x1*-0x295)+_0x385750:_0x385750,_0x271df3++%(0x589*-0x7+-0x1954+0x4017))?_0x220134+=String['fromCharCode'](-0x1*-0xe59+0x12d9+0x1*-0x2033&_0x1f3772>>(-(0x1394+-0x11c9+-0x1c9)*_0x271df3&-0x833*0x1+0x2*-0xdfa+0x1b9*0x15)):0x3*0xb69+-0x13c5+-0xe76){_0x385750=_0x9ab27b['indexOf'](_0x385750);}for(let _0xc1b653=0x1*0xbdf+0x5*0x755+-0x3088,_0x427200=_0x220134['length'];_0xc1b653<_0x427200;_0xc1b653++){_0x2dbeec+='%'+('00'+_0x220134['charCodeAt'](_0xc1b653)['toString'](0x1*0xe21+-0x204c+0x123b*0x1))['slice'](-(0x281+-0x15fb+0x1*0x137c));}return decodeURIComponent(_0x2dbeec);};_0x1e49['ktWKuv']=_0x25a5e5,_0x1e49['jpVQdg']={},_0x1e49['pqYwwk']=!![];}const _0x392ba5=_0x587fd1[0x33c*0x3+-0x959+0x1*-0x5b],_0x18272e=_0x265371+_0x392ba5,_0x192c00=_0x1e49['jpVQdg'][_0x18272e];return!_0x192c00?(_0x476eab=_0x1e49['ktWKuv'](_0x476eab),_0x1e49['jpVQdg'][_0x18272e]=_0x476eab):_0x476eab=_0x192c00,_0x476eab;}function w(_0x802ab7){const _0x4bccd0={_0xb1ada8:0x1ca,_0x1651fc:0x1f1},_0xfa1a76=_0x1cc356,_0x19ff2c={};return _0x19ff2c[_0xfa1a76(0x1ce)]=_0x802ab7[_0xfa1a76(_0x4bccd0._0xb1ada8)]??0x2224+0x569+0x4b*-0x87,_0x19ff2c[_0xfa1a76(0x1a7)]=_0x802ab7[_0xfa1a76(0x1f5)],_0x19ff2c[_0xfa1a76(_0x4bccd0._0x1651fc)]=_0x802ab7[_0xfa1a76(0x17b)]??{},_0x19ff2c;}function y(_0xa817a8){const _0x4ba803={_0x5daeaa:0x1ca,_0x42e80b:0x1a7,_0x4ee77e:0x1f5},_0x35524c=_0x1cc356,_0x505f37={};return _0x505f37[_0x35524c(0x1ce)]=_0xa817a8[_0x35524c(_0x4ba803._0x5daeaa)]??0x11*-0x241+0x1*-0x269+-0x1*-0x28ba,_0x505f37[_0x35524c(_0x4ba803._0x42e80b)]=_0xa817a8[_0x35524c(_0x4ba803._0x4ee77e)],_0x505f37;}var h=class{constructor(_0x186e54,_0x215f00){const _0x14fe18={_0x3fcf1f:0x248,_0x40ab90:0x18e,_0x44ef09:0x1ae,_0x5bdd76:0x1fa},_0x4ea735=_0x1cc356;this[_0x4ea735(_0x14fe18._0x3fcf1f)]=[],this[_0x4ea735(0x1a3)]=null,this[_0x4ea735(0x205)+'ze']=-0x15+-0x2d2*-0xb+-0xed*0x21,this[_0x4ea735(0x16e)+'d']=![],(this[_0x4ea735(_0x14fe18._0x40ab90)+_0x4ea735(_0x14fe18._0x44ef09)]=_0x186e54,this['storage']=_0x215f00,this[_0x4ea735(_0x14fe18._0x5bdd76)+'dingEvents']());}async['restorePen'+'dingEvents'](){const _0x5589c5={_0x44b992:0x204,_0xcfb99b:0x248},_0x42833c=_0x1cc356;let _0x502878=await this[_0x42833c(0x1d7)][_0x42833c(_0x5589c5._0x44b992)+_0x42833c(0x1d6)]();this[_0x42833c(_0x5589c5._0xcfb99b)][_0x42833c(0x211)](..._0x502878),this[_0x42833c(0x16e)+'d']=!![];}['track'](_0xc2f319,_0x6b96a2){const _0x5bb319={_0x271a00:0x180},_0x49f9e0=_0x1cc356;let _0x133c5f={'eventName':_0xc2f319,'eventData':_0x6b96a2,'timestamp':Date[_0x49f9e0(0x21a)]()};this[_0x49f9e0(0x248)]['push'](_0x133c5f),this[_0x49f9e0(0x248)][_0x49f9e0(0x1ad)]>=this[_0x49f9e0(0x205)+'ze']&&this[_0x49f9e0(_0x5bb319._0x271a00)]();}[_0x1cc356(0x1e5)+_0x1cc356(0x1e9)](_0x15ef13=-0x84c*0x16+0xd3ad*-0x1+0x1ff65){const _0xbffe65={_0xe4a957:0x1ef,_0x3029fd:0x19b,_0x36c823:0x1a3},_0x29ede4={_0x2c36c9:0x1df,_0x348acf:0x178,_0xcadd4d:0x1b4,_0x15f30d:0x1f3,_0xfed79b:0x200},_0x51d4be=_0x1cc356,_0x220faa={};_0x220faa[_0x51d4be(_0xbffe65._0xe4a957)]=function(_0x57bb42,_0x54a277){return _0x57bb42===_0x54a277;},_0x220faa[_0x51d4be(0x1df)]=_0x51d4be(0x1e2);const _0x349d9d=_0x220faa;this[_0x51d4be(_0xbffe65._0x3029fd)+'imer'](),this[_0x51d4be(_0xbffe65._0x36c823)]=setInterval(()=>{const _0x21dde4=_0x51d4be;_0x349d9d['tLlLv'](_0x349d9d[_0x21dde4(_0x29ede4._0x2c36c9)],_0x349d9d[_0x21dde4(0x1df)])?this[_0x21dde4(0x180)]():(this[_0x21dde4(0x169)+'er']['stopBatchT'+_0x21dde4(0x17d)](),this[_0x21dde4(0x169)+'er']['flush'](),this[_0x21dde4(_0x29ede4._0x348acf)+_0x21dde4(_0x29ede4._0xcadd4d)]?.[_0x21dde4(0x241)](),this[_0x21dde4(_0x29ede4._0x15f30d)+_0x21dde4(_0x29ede4._0xfed79b)]?.['remove']());},_0x15ef13);}['stopBatchT'+_0x1cc356(0x17d)](){const _0x41c6e1={_0x54f5d7:0x1c7},_0x2d3498=_0x1cc356,_0x1576d2={};_0x1576d2['tzbmQ']=function(_0x498faa,_0x3b210f){return _0x498faa!==_0x3b210f;};const _0x5e45de=_0x1576d2;_0x5e45de[_0x2d3498(_0x41c6e1._0x54f5d7)](this['timerId'],null)&&(clearInterval(this[_0x2d3498(0x1a3)]),this[_0x2d3498(0x1a3)]=null);}async[_0x1cc356(0x180)](){const _0x33c9d7={_0x4fa93c:0x1e1,_0x48d4be:0x248,_0x41874f:0x1ed,_0x456315:0x1a5,_0x413a7d:0x248,_0x48fd1e:0x248,_0x59b854:0x18e,_0x53a67a:0x1f0,_0x469601:0x1c3,_0x655557:0x1af,_0x3bb757:0x18d,_0x52c703:0x1a7,_0x21e0db:0x1f5,_0x465ee3:0x1d9,_0x2787be:0x1c6,_0x531ec5:0x1d6,_0x24a0a3:0x1e0,_0x2458eb:0x1cd},_0x39ae6d=_0x1cc356,_0x17734a={'BKPey':function(_0x554d54,_0x535c77){return _0x554d54!==_0x535c77;},'OTFUt':'lLXHr','rjspw':_0x39ae6d(_0x33c9d7._0x4fa93c),'IuqKw':function(_0x2f4b3b,_0x315d6f){return _0x2f4b3b(_0x315d6f);}};let _0x29e70a=[...this[_0x39ae6d(0x248)]];if(this[_0x39ae6d(_0x33c9d7._0x48d4be)]=[],_0x17734a[_0x39ae6d(_0x33c9d7._0x41874f)](_0x29e70a[_0x39ae6d(0x1ad)],-0x725*-0x5+-0x1f*-0x13e+-0x1*0x4a3b))try{if(_0x17734a[_0x39ae6d(_0x33c9d7._0x456315)]===_0x17734a[_0x39ae6d(0x20c)]){let _0x2b3fde={'eventName':_0x257969,'eventData':_0x31e250,'timestamp':_0x66082e[_0x39ae6d(0x21a)]()};this[_0x39ae6d(_0x33c9d7._0x413a7d)]['push'](_0x2b3fde),this[_0x39ae6d(_0x33c9d7._0x48fd1e)][_0x39ae6d(0x1ad)]>=this['maxQueueSi'+'ze']&&this[_0x39ae6d(0x180)]();}else{if(_0x29e70a[_0x39ae6d(0x1ad)]===-0x1479+0x1*-0x1445+0x28bf){let _0x4081d5=_0x29e70a[-0xdb*-0x7+-0x1ae4+0x14e7];await this[_0x39ae6d(_0x33c9d7._0x59b854)+'ent'][_0x39ae6d(_0x33c9d7._0x53a67a)]('/v1/events',_0x17734a['IuqKw'](w,_0x4081d5));}else await this[_0x39ae6d(0x18e)+_0x39ae6d(0x1ae)]['post']('/v1/events'+_0x39ae6d(_0x33c9d7._0x469601),{'events':_0x29e70a[_0x39ae6d(0x1aa)](y)});await this[_0x39ae6d(0x1d7)][_0x39ae6d(_0x33c9d7._0x655557)+_0x39ae6d(_0x33c9d7._0x3bb757)]();}}catch(_0x13ace1){if(_0x39ae6d(0x168)!=='YlhNa'){const _0x4c85ba={};return _0x4c85ba[_0x39ae6d(0x1ce)]=_0x3de6cc['linkId']??-0x128+-0x1cb2+-0x1*-0x1dda,_0x4c85ba[_0x39ae6d(_0x33c9d7._0x52c703)]=_0x1bf69f[_0x39ae6d(_0x33c9d7._0x21e0db)],_0x4c85ba[_0x39ae6d(0x1f1)]=_0x50b0ae[_0x39ae6d(0x17b)]??{},_0x4c85ba;}else this[_0x39ae6d(_0x33c9d7._0x48d4be)][_0x39ae6d(_0x33c9d7._0x465ee3)](..._0x29e70a),await this['storage'][_0x39ae6d(_0x33c9d7._0x2787be)+_0x39ae6d(_0x33c9d7._0x531ec5)](this[_0x39ae6d(0x248)]),console[_0x39ae6d(_0x33c9d7._0x24a0a3)](_0x39ae6d(_0x33c9d7._0x2458eb)+_0x39ae6d(0x181),_0x13ace1);}}},u=class{constructor(_0x5454b5,_0x1ca180){const _0x40d65d=_0x1cc356;this[_0x40d65d(0x20e)]=-0x69f+-0x1042+0x16e4,(this[_0x40d65d(0x171)]=_0x5454b5,this['apiKey']=_0x1ca180);}async['get'](_0x3dd802){const _0x3c6ece={_0x281852:0x214},_0x410f10={_0x4ded9c:0x1f8,_0x47f96d:0x23d},_0x308701=_0x1cc356,_0x6a40a5={};_0x6a40a5[_0x308701(0x1f8)]=_0x308701(0x18f);const _0x3fba5d=_0x6a40a5;return this[_0x308701(0x187)+_0x308701(_0x3c6ece._0x281852)](async()=>{const _0x47afd3=_0x308701;let _0x534174=await fetch(''+this[_0x47afd3(0x171)]+_0x3dd802,{'method':_0x3fba5d[_0x47afd3(_0x410f10._0x4ded9c)],'headers':this[_0x47afd3(0x19c)+'rs']()});if(!_0x534174['ok'])throw new Error(_0x47afd3(_0x410f10._0x47f96d)+_0x534174[_0x47afd3(0x225)]);return _0x534174[_0x47afd3(0x21b)]();});}async[_0x1cc356(0x1f0)](_0x2e8290,_0x112541){const _0x53b240={_0x17e11f:0x187},_0x5dc3e1={_0x3606b3:0x171,_0x15a7e7:0x232,_0x3950cd:0x23d},_0x5d6755=_0x1cc356;return this[_0x5d6755(_0x53b240._0x17e11f)+_0x5d6755(0x214)](async()=>{const _0xe7c9af=_0x5d6755;let _0xadb8bd=await fetch(''+this[_0xe7c9af(_0x5dc3e1._0x3606b3)]+_0x2e8290,{'method':_0xe7c9af(_0x5dc3e1._0x15a7e7),'headers':{...this[_0xe7c9af(0x19c)+'rs'](),'Content-Type':'applicatio'+_0xe7c9af(0x226)},'body':JSON[_0xe7c9af(0x1da)](_0x112541)});if(!_0xadb8bd['ok'])throw new Error(_0xe7c9af(_0x5dc3e1._0x3950cd)+_0xadb8bd['status']);return _0xadb8bd[_0xe7c9af(0x21b)]();});}async[_0x1cc356(0x173)](_0x3f0b86,_0xd1a882,_0x15ac72){const _0x2c2b5e={_0x48ac12:0x174,_0x49a05c:0x242},_0x5e509b=_0x1cc356,_0x591142={};_0x591142['deeplinkPa'+'th']=_0x3f0b86;let _0x437ac4=_0x591142;_0xd1a882&&(_0x437ac4[_0x5e509b(0x1cc)+'ta']=_0xd1a882),_0x15ac72&&(_0x437ac4[_0x5e509b(_0x2c2b5e._0x48ac12)]=_0x15ac72);let _0x4006f6=await this[_0x5e509b(0x1f0)]('/api/links',_0x437ac4);return JSON[_0x5e509b(_0x2c2b5e._0x49a05c)](_0x4006f6)['shortUrl'];}['buildHeade'+'rs'](){const _0x50cea9={_0x2ff104:0x1c5,_0x191d19:0x226},_0x286165=_0x1cc356,_0x54b7c4={};_0x54b7c4[_0x286165(_0x50cea9._0x2ff104)]=_0x286165(0x1d0)+'/1.0.8\x20Rea'+_0x286165(0x16a),_0x54b7c4['SRIkV']='applicatio'+_0x286165(_0x50cea9._0x191d19);const _0x437ae6=_0x54b7c4,_0x2dbc13={};return _0x2dbc13['X-API-Key']=this[_0x286165(0x246)],_0x2dbc13[_0x286165(0x19d)]=_0x437ae6['gkths'],_0x2dbc13[_0x286165(0x1ac)]=_0x437ae6['SRIkV'],_0x2dbc13;}async[_0x1cc356(0x187)+_0x1cc356(0x214)](_0x1add36){const _0x15a106={_0x364760:0x1bb,_0x4acc7a:0x194,_0x144e70:0x1e3,_0x4b8046:0x231},_0x48514a=_0x1cc356,_0x319a6f={'ujQcj':function(_0x264ef9,_0x34e43a){return _0x264ef9>=_0x34e43a;},'xwKMj':function(_0xcce1d0){return _0xcce1d0();},'PVlMv':'NvzVf','jFHPn':function(_0x2e1e3f,_0x19a1d4){return _0x2e1e3f(_0x19a1d4);},'Dmvjr':function(_0x1a6a8d,_0x278267){return _0x1a6a8d<_0x278267;},'VLxVA':function(_0x3b60ec,_0x40d7aa){return _0x3b60ec-_0x40d7aa;}};let _0x47fe59;for(let _0x5940ce=0x12e4+0x1e2*-0x10+0xb3c;_0x5940ce<this['maxRetries'];_0x5940ce++)try{return await _0x319a6f[_0x48514a(0x20b)](_0x1add36);}catch(_0xc0d338){if(_0x48514a(0x1f9)!==_0x319a6f[_0x48514a(_0x15a106._0x364760)]){if(_0x47fe59=_0xc0d338 instanceof Error?_0xc0d338:new Error(_0x319a6f[_0x48514a(_0x15a106._0x4acc7a)](String,_0xc0d338)),_0x319a6f[_0x48514a(0x1fb)](_0x5940ce,_0x319a6f['VLxVA'](this['maxRetries'],0x886*-0x4+-0x24b2+0x46cb))){let _0x519327=Math['pow'](-0x1*0x114d+0x1a99*0x1+-0x94a,_0x5940ce)*(0x1925+0x16a9*-0x1+0x16c);await this[_0x48514a(0x1cb)](_0x519327);}}else{let _0x2aa9f4=new _0x3e6d29(_0x1dab15)[_0x48514a(0x1a6)][_0x48514a(0x1ff)]('/')[_0x48514a(0x1bf)](_0x24ddc0);return rtGVtN[_0x48514a(_0x15a106._0x144e70)](_0x2aa9f4['length'],0x283*-0xf+-0x21ca+0x4779)&&_0x2aa9f4[-0x1d75+-0x13*0x191+0x3b38*0x1]==='c'?_0x2aa9f4[0x24c+0xb*0x19d+-0x140a]??null:null;}}throw _0x47fe59??new Error(_0x48514a(_0x15a106._0x4b8046));}['delay'](_0x1ef5e5){return new Promise(_0x29c33d=>setTimeout(_0x29c33d,_0x1ef5e5));}},L=_0x1cc356(0x177)+_0x1cc356(0x1fe),m=_0x1cc356(0x1c4)+_0x1cc356(0x19a)+'ts',v=class{async[_0x1cc356(0x1e7)](_0x562f4f){const _0x49cdd2=_0x1cc356;return o__default[_0x49cdd2(0x1a4)]['getItem'](_0x562f4f);}async[_0x1cc356(0x176)](_0x2cfe56,_0x6e9067){const _0x5dd0fa=_0x1cc356;await o__default[_0x5dd0fa(0x1a4)]['setItem'](_0x2cfe56,_0x6e9067);}async[_0x1cc356(0x22e)+'d'](){const _0x9b4ab5={_0x26713c:0x235,_0x3a16f6:0x186,_0x13df64:0x1a4,_0x1bc12d:0x245},_0x4bc2a1=_0x1cc356,_0xd9560f={};_0xd9560f[_0x4bc2a1(_0x9b4ab5._0x26713c)]=function(_0x4f3a76,_0x1a7c55){return _0x4f3a76===_0x1a7c55;},_0xd9560f[_0x4bc2a1(0x1de)]=_0x4bc2a1(_0x9b4ab5._0x3a16f6);const _0x2dbeb0=_0xd9560f;return _0x2dbeb0[_0x4bc2a1(_0x9b4ab5._0x26713c)](await o__default[_0x4bc2a1(_0x9b4ab5._0x13df64)][_0x4bc2a1(_0x9b4ab5._0x1bc12d)](L),_0x2dbeb0['mWAIu']);}async[_0x1cc356(0x1db)+'d'](){const _0x2d2a7c={_0x2480c6:0x203,_0x572915:0x1b9},_0x2023a3=_0x1cc356,_0x42f908={};_0x42f908[_0x2023a3(_0x2d2a7c._0x2480c6)]=_0x2023a3(0x186);const _0x3e35d9=_0x42f908;await o__default['default'][_0x2023a3(_0x2d2a7c._0x572915)](L,_0x3e35d9[_0x2023a3(_0x2d2a7c._0x2480c6)]);}async['savePendin'+_0x1cc356(0x1d6)](_0x2aecc0){const _0x28826b=_0x1cc356;await o__default[_0x28826b(0x1a4)]['setItem'](m,JSON['stringify'](_0x2aecc0));}async['loadPendin'+'gEvents'](){const _0x18f2a3={_0x51426f:0x207,_0x5b6b01:0x1a4,_0x359f32:0x191,_0x1a6c07:0x1e0,_0xbdecb7:0x1cd,_0x6549c9:0x188,_0x152415:0x169,_0x15a27f:0x23b},_0x358102=_0x1cc356,_0x39d8b2={};_0x39d8b2[_0x358102(0x191)]=_0x358102(_0x18f2a3._0x51426f);const _0xb54979=_0x39d8b2;try{let _0x38ca9e=await o__default[_0x358102(_0x18f2a3._0x5b6b01)][_0x358102(0x245)](m);return _0x38ca9e?JSON[_0x358102(0x242)](_0x38ca9e):[];}catch{if(_0xb54979[_0x358102(0x191)]===_0xb54979[_0x358102(_0x18f2a3._0x359f32)])return[];else{if(!this['isConfigur'+'ed']){_0x3ff9a8[_0x358102(_0x18f2a3._0x1a6c07)](_0x358102(_0x18f2a3._0xbdecb7)+_0x358102(_0x18f2a3._0x6549c9)+_0x358102(0x223));return;}this[_0x358102(_0x18f2a3._0x152415)+'er'][_0x358102(_0x18f2a3._0x15a27f)](_0x57f123,_0x5cddef);}}}async[_0x1cc356(0x1af)+_0x1cc356(0x18d)](){const _0x18f310=_0x1cc356;await o__default[_0x18f310(0x1a4)][_0x18f310(0x1d8)](m);}},s=class s{constructor(){const _0x37642d={_0x391696:0x17a},_0xe9dc42=_0x1cc356;this[_0xe9dc42(_0x37642d._0x391696)+'ed']=![];}static get[_0x1cc356(0x237)](){const _0x44ae42={_0x1840a7:0x193},_0x35446e=_0x1cc356;return s[_0x35446e(_0x44ae42._0x1840a7)]||(s[_0x35446e(_0x44ae42._0x1840a7)]=new s()),s[_0x35446e(0x193)];}['configure'](_0x269648){const _0x3db4d2={_0x37e9bb:0x1e4,_0x157f0d:0x22d,_0x434a74:0x1d7,_0xfcd868:0x1ab,_0x3c497d:0x1ae,_0x332c78:0x17a,_0x3e4dc1:0x1b4,_0x10b9e:0x23f,_0x5aa321:0x190,_0x4a6296:0x20d,_0x518e75:0x1b6,_0x3a200e:0x1e5,_0x311a7d:0x22d,_0x2891d4:0x1a0,_0x2c674f:0x22a},_0x149d07=_0x1cc356,_0x3ee541={};_0x3ee541[_0x149d07(0x190)]=_0x149d07(_0x3db4d2._0x37e9bb);const _0xef0ef9=_0x3ee541;if(this[_0x149d07(0x17a)+'ed']){console[_0x149d07(_0x3db4d2._0x157f0d)](_0x149d07(0x1cd)+_0x149d07(0x16f)+'다');return;}this[_0x149d07(0x18e)+'ent']=new u(s[_0x149d07(0x16b)+'RL'],_0x269648),this['storage']=new v(),this[_0x149d07(0x169)+'er']=new h(this[_0x149d07(0x18e)+'ent'],this[_0x149d07(_0x3db4d2._0x434a74)]),this[_0x149d07(_0x3db4d2._0xfcd868)+_0x149d07(0x201)]=new l(this[_0x149d07(0x18e)+_0x149d07(_0x3db4d2._0x3c497d)]),this[_0x149d07(_0x3db4d2._0x332c78)+'ed']=!![],this[_0x149d07(0x216)+_0x149d07(0x236)](),this[_0x149d07(0x178)+_0x149d07(_0x3db4d2._0x3e4dc1)]=reactNative[_0x149d07(_0x3db4d2._0x10b9e)][_0x149d07(0x218)+'stener'](_0xef0ef9[_0x149d07(_0x3db4d2._0x5aa321)],this[_0x149d07(_0x3db4d2._0x4a6296)+_0x149d07(_0x3db4d2._0x518e75)]['bind'](this)),this[_0x149d07(0x169)+'er'][_0x149d07(_0x3db4d2._0x3a200e)+'Timer'](0x48fa+0xb*-0x455+-0xa35*-0x9),console[_0x149d07(_0x3db4d2._0x311a7d)](_0x149d07(0x1cd)+'SDK\x20초기화\x20완료'+_0x149d07(0x1cf)+_0x269648['substring'](0x1*-0x141a+-0x1*0x21dd+-0x5ff*-0x9,-0x3*-0xa2b+-0x1*-0xae7+0x10*-0x296)+_0x149d07(0x22c)),this[_0x149d07(_0x3db4d2._0x2891d4)+_0x149d07(_0x3db4d2._0x2c674f)]();}['onDeepLink'](_0x569372){const _0x3a147b={_0xbf7b1a:0x230},_0x1bf0dc=_0x1cc356;this[_0x1bf0dc(_0x3a147b._0xbf7b1a)+'llback']=_0x569372;}[_0x1cc356(0x18a)+_0x1cc356(0x1f4)](_0x544f77){const _0x30a93d={_0x2596e0:0x1ec},_0x2ce813=_0x1cc356;this[_0x2ce813(_0x30a93d._0x2596e0)+_0x2ce813(0x170)]=_0x544f77;}[_0x1cc356(0x19f)](_0x387d5f){const _0x17cca1={_0x3eb266:0x1ee,_0x5aadbd:0x1ab,_0x2094f2:0x1cd,_0x23db76:0x1a9},_0x5e0792={_0xd727f6:0x1e0,_0x1c766c:0x227},_0x6e4612={_0x27c536:0x230},_0x169041=_0x1cc356,_0x58fd38={};_0x58fd38[_0x169041(0x227)]=_0x169041(0x1cd)+_0x169041(_0x17cca1._0x3eb266);const _0x56234b=_0x58fd38;let _0x19bf5a=this[_0x169041(_0x17cca1._0x5aadbd)+_0x169041(0x201)]['parseURL'](_0x387d5f);_0x19bf5a&&(console[_0x169041(0x22d)](_0x169041(_0x17cca1._0x2094f2)+_0x169041(0x1c2)+_0x19bf5a),this[_0x169041(0x1ab)+_0x169041(0x201)][_0x169041(_0x17cca1._0x23db76)+_0x169041(0x217)](_0x19bf5a)[_0x169041(0x17e)](_0x1624c5=>{const _0x18be32=_0x169041;_0x1624c5&&this[_0x18be32(_0x6e4612._0x27c536)+_0x18be32(0x170)]&&this[_0x18be32(0x230)+_0x18be32(0x170)](_0x1624c5);})['catch'](_0x506e75=>{const _0x6ea7bd=_0x169041;console[_0x6ea7bd(_0x5e0792._0xd727f6)](_0x56234b[_0x6ea7bd(_0x5e0792._0x1c766c)],_0x506e75);}));}[_0x1cc356(0x23b)](_0x85c90c,_0x3f05ce){const _0x1f2333={_0xda4d9:0x223,_0x5ec849:0x169,_0x1a9eaf:0x23b},_0x3b29d8=_0x1cc356,_0x4f0610={};_0x4f0610['pXHxO']=_0x3b29d8(0x1cd)+'SDK가\x20초기화되지'+_0x3b29d8(_0x1f2333._0xda4d9);const _0x1abaeb=_0x4f0610;if(!this[_0x3b29d8(0x17a)+'ed']){console[_0x3b29d8(0x1e0)](_0x1abaeb[_0x3b29d8(0x1a8)]);return;}this[_0x3b29d8(_0x1f2333._0x5ec849)+'er'][_0x3b29d8(_0x1f2333._0x1a9eaf)](_0x85c90c,_0x3f05ce);}async[_0x1cc356(0x173)](_0x2cc6b4,_0x487b45,_0xb664b5){const _0x313758={_0x21b54d:0x18e,_0x5e2bb9:0x1ae},_0x272035=_0x1cc356;if(!this[_0x272035(0x17a)+'ed'])throw new Error(_0x272035(0x188)+_0x272035(0x223));return this[_0x272035(_0x313758._0x21b54d)+_0x272035(_0x313758._0x5e2bb9)][_0x272035(0x173)](_0x2cc6b4,_0x487b45,_0xb664b5);}[_0x1cc356(0x20f)](){const _0x2e9a41={_0x51dfc0:0x17d,_0x1cfaf5:0x180,_0x57ecae:0x178,_0xdf621e:0x241,_0x25d8d3:0x1f3},_0x26c38a=_0x1cc356;this[_0x26c38a(0x169)+'er'][_0x26c38a(0x19b)+_0x26c38a(_0x2e9a41._0x51dfc0)](),this[_0x26c38a(0x169)+'er'][_0x26c38a(_0x2e9a41._0x1cfaf5)](),this[_0x26c38a(_0x2e9a41._0x57ecae)+'bscription']?.[_0x26c38a(_0x2e9a41._0xdf621e)](),this[_0x26c38a(_0x2e9a41._0x25d8d3)+_0x26c38a(0x200)]?.[_0x26c38a(0x241)]();}['setupLinki'+_0x1cc356(0x236)](){const _0x84d219={_0x4128c2:0x243,_0x44dcf5:0x238,_0x3cca78:0x17e},_0x491cda={_0x1e71bd:0x19f,_0x5e3574:0x197},_0x167376=_0x1cc356;this[_0x167376(0x1f3)+'scription']=reactNative[_0x167376(_0x84d219._0x4128c2)]['addEventLi'+'stener'](_0x167376(0x197),_0x427f15=>{const _0x9c224c=_0x167376;this[_0x9c224c(_0x491cda._0x1e71bd)](_0x427f15[_0x9c224c(_0x491cda._0x5e3574)]);}),reactNative[_0x167376(0x243)][_0x167376(_0x84d219._0x44dcf5)+_0x167376(0x1ea)]()[_0x167376(_0x84d219._0x3cca78)](_0x210b5b=>{const _0x3a855e=_0x167376;_0x210b5b&&this[_0x3a855e(0x19f)](_0x210b5b);});}async[_0x1cc356(0x1a0)+_0x1cc356(0x22a)](){const _0xe8345e={_0x3e6f24:0x1d7,_0x65537:0x23b},_0x4b55c1=_0x1cc356,_0x250853={};_0x250853[_0x4b55c1(0x215)]=_0x4b55c1(0x209);const _0x4f1fc9=_0x250853;await this[_0x4b55c1(_0xe8345e._0x3e6f24)]['hasLaunche'+'d']()?this[_0x4b55c1(_0xe8345e._0x65537)](_0x4f1fc9['MrZJN']):(await this['storage']['setLaunche'+'d'](),this[_0x4b55c1(0x182)+_0x4b55c1(0x184)](),this[_0x4b55c1(_0xe8345e._0x65537)]('app.instal'+'l'));}async[_0x1cc356(0x182)+'erredMatch'](){const _0x37f9b2={_0x21eb62:0x17f,_0x198921:0x21f,_0x46004c:0x17d,_0x962660:0x1c1,_0x56f9c7:0x1cd},_0x47863b=_0x1cc356,_0x47c171={};_0x47c171['XTxts']=function(_0x1308b5,_0x3e6eac){return _0x1308b5!==_0x3e6eac;},_0x47c171[_0x47863b(0x22b)]=_0x47863b(_0x37f9b2._0x21eb62);const _0x40ffd7=_0x47c171;try{if(_0x40ffd7[_0x47863b(_0x37f9b2._0x198921)](_0x47863b(0x17f),_0x40ffd7['pHhhs']))this[_0x47863b(0x19b)+_0x47863b(_0x37f9b2._0x46004c)](),this[_0x47863b(0x1a3)]=_0x7e7110(()=>{const _0x460747=_0x47863b;this[_0x460747(0x180)]();},_0x3c873d);else{let _0x3185d8=await new p(this[_0x47863b(0x18e)+'ent'])[_0x47863b(_0x37f9b2._0x962660)]();_0x3185d8&&this[_0x47863b(0x1ec)+_0x47863b(0x170)]&&this['deferredCa'+'llback'](_0x3185d8);}}catch(_0x3c784c){console['warn'](_0x47863b(_0x37f9b2._0x56f9c7)+_0x47863b(0x179),_0x3c784c);}}['handleAppS'+_0x1cc356(0x1b6)](_0x36077a){const _0x4bfe29={_0x42f5bc:0x18c,_0xe8444e:0x1c9,_0x1736b0:0x1f2},_0x3f9e11=_0x1cc356,_0x2f1b99={};_0x2f1b99[_0x3f9e11(0x1c9)]=function(_0x5448a4,_0x2fe4b4){return _0x5448a4===_0x2fe4b4;},_0x2f1b99[_0x3f9e11(_0x4bfe29._0x42f5bc)]=_0x3f9e11(0x1a2);const _0xb8d353=_0x2f1b99;(_0xb8d353[_0x3f9e11(_0x4bfe29._0xe8444e)](_0x36077a,_0x3f9e11(_0x4bfe29._0x1736b0))||_0x36077a===_0xb8d353[_0x3f9e11(0x18c)])&&this[_0x3f9e11(0x169)+'er'][_0x3f9e11(0x180)]();}};s[_0x1cc356(0x16b)+'RL']=_0x1cc356(0x239)+'alink.app';var g=s;exports[_0x1cc356(0x23c)+_0x1cc356(0x201)]=l,exports['DeferredMa'+_0x1cc356(0x23a)]=p,exports['DeviceInfo']=d,exports[_0x1cc356(0x234)+'er']=h,exports[_0x1cc356(0x16d)+_0x1cc356(0x1ae)]=u,exports[_0x1cc356(0x247)]=v,exports[_0x1cc356(0x1d0)]=g;
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.8",
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,16 +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에서 short_code 추출
8
- * URL 형식: https://dev.aresjoy.com:51000/c/{shortCode}
9
- */
10
- parseURL(url: string): string | null;
11
- /**
12
- * 서버에서 딥링크 데이터 조회
13
- * POST /v1/resolve — App Links로 앱이 직접 열렸을 때 short code로 딥링크 데이터 조회
14
- */
15
- fetchLinkData(shortCode: string): Promise<DeepLinkData | null>;
16
- }
@@ -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(): 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,10 +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
- }
@@ -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>;