@1selfworld/adchain-sdk-react-native 1.0.26 → 1.0.27-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,5 +21,5 @@ Pod::Spec.new do |s|
21
21
  s.swift_version = '5.5'
22
22
 
23
23
  s.dependency "React-Core"
24
- s.dependency "AdChainSDK", "1.0.51"
24
+ s.dependency "AdChainSDK", "1.0.52-rc.2"
25
25
  end
@@ -35,5 +35,5 @@ dependencies {
35
35
  implementation 'com.facebook.react:react-native:+'
36
36
  implementation "org.jetbrains.kotlin:kotlin-stdlib:1.9.21"
37
37
  // AdChain Android SDK via JitPack
38
- implementation 'com.github.1selfworld-labs:adchain-sdk-android:v1.0.34'
38
+ implementation 'com.github.1selfworld-labs:adchain-sdk-android:v1.0.36-rc.2'
39
39
  }
@@ -1,6 +1,5 @@
1
1
  package com.adchain.exposdk
2
2
 
3
- import android.util.Log
4
3
  import com.facebook.react.bridge.Arguments
5
4
  import com.facebook.react.bridge.ReactContext
6
5
  import com.facebook.react.bridge.ReadableArray
@@ -21,7 +20,7 @@ import kotlinx.coroutines.withContext
21
20
  class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
22
21
 
23
22
  companion object {
24
- private const val TAG = "OfferwallViewManager"
23
+ private const val TAG = "OfferwallVM"
25
24
  private const val REACT_CLASS = "AdchainOfferwallView"
26
25
  private const val COMMAND_LOAD_OFFERWALL = 1
27
26
  private const val COMMAND_HANDLE_BACK_PRESS = 2
@@ -34,12 +33,12 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
34
33
  override fun getName() = REACT_CLASS
35
34
 
36
35
  override fun createViewInstance(reactContext: ThemedReactContext): AdchainOfferwallView {
37
- Log.d(TAG, "createViewInstance called")
36
+ AdchainRNLog.d(TAG, "createViewInstance called")
38
37
  return AdchainOfferwallView(reactContext)
39
38
  }
40
39
 
41
40
  override fun getCommandsMap(): Map<String, Int> {
42
- Log.d(TAG, "getCommandsMap called")
41
+ AdchainRNLog.d(TAG, "getCommandsMap called")
43
42
  return mapOf(
44
43
  "loadOfferwall" to COMMAND_LOAD_OFFERWALL,
45
44
  "handleBackPress" to COMMAND_HANDLE_BACK_PRESS,
@@ -55,54 +54,54 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
55
54
  commandId: String?,
56
55
  args: ReadableArray?
57
56
  ) {
58
- Log.d(TAG, "receiveCommand called - commandId: $commandId, args: $args")
57
+ AdchainRNLog.d(TAG, "receiveCommand called - commandId: $commandId")
59
58
  when (commandId) {
60
59
  "loadOfferwall" -> {
61
60
  val placementId = args?.getString(0) ?: ""
62
- Log.d(TAG, "loadOfferwall command - placementId: $placementId")
61
+ AdchainRNLog.d(TAG, "loadOfferwall command - placementId: $placementId")
63
62
  loadOfferwall(root, placementId)
64
63
  }
65
64
  "handleBackPress" -> {
66
- Log.d(TAG, "handleBackPress command")
65
+ AdchainRNLog.d(TAG, "handleBackPress command")
67
66
  val handled = root.handleBackPress()
68
- Log.d(TAG, "handleBackPress result: $handled")
67
+ AdchainRNLog.d(TAG, "handleBackPress result: $handled")
69
68
 
70
69
  // Send event to React Native based on result
71
70
  if (!handled) {
72
71
  // WebView stack has only 1 item (first page)
73
- Log.d(TAG, "Sending onBackPressOnFirstPage event")
72
+ AdchainRNLog.d(TAG, "Sending onBackPressOnFirstPage event")
74
73
  sendEvent(root, "onBackPressOnFirstPage", Arguments.createMap())
75
74
  } else {
76
75
  // WebView stack has 2+ items (navigated back)
77
- Log.d(TAG, "Sending onBackNavigated event")
76
+ AdchainRNLog.d(TAG, "Sending onBackNavigated event")
78
77
  sendEvent(root, "onBackNavigated", Arguments.createMap())
79
78
  }
80
79
  }
81
80
  "sendDataResponse" -> { // NEW
82
81
  val requestId = args?.getString(0) ?: ""
83
82
  val responseData = args?.getMap(1)?.toHashMap()
84
- Log.d(TAG, "sendDataResponse command - requestId: $requestId, data: $responseData")
83
+ AdchainRNLog.d(TAG, "sendDataResponse command - requestId: $requestId")
85
84
  if (responseData != null) {
86
85
  pendingDataResponses[requestId] = responseData
87
86
  }
88
87
  }
89
88
  else -> {
90
- Log.w(TAG, "Unknown command: $commandId")
89
+ AdchainRNLog.w(TAG, "Unknown command: $commandId")
91
90
  }
92
91
  }
93
92
  }
94
93
 
95
94
  private fun loadOfferwall(view: AdchainOfferwallView, placementId: String) {
96
- Log.d(TAG, "loadOfferwall method called - placementId: $placementId")
95
+ AdchainRNLog.d(TAG, "loadOfferwall method called - placementId: $placementId")
97
96
 
98
97
  if (placementId.isEmpty()) {
99
- Log.w(TAG, "placementId is empty, returning")
98
+ AdchainRNLog.w(TAG, "placementId is empty, returning")
100
99
  return
101
100
  }
102
101
 
103
102
  try {
104
103
  // Set callback for offerwall events
105
- Log.d(TAG, "Setting callback...")
104
+ AdchainRNLog.d(TAG, "Setting callback...")
106
105
  view.setCallback(object : OfferwallCallback {
107
106
  override fun onOpened() {
108
107
  sendEvent(view, "onOfferwallOpened", Arguments.createMap())
@@ -127,7 +126,7 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
127
126
  }
128
127
 
129
128
  override fun onHeightChanged(height: Int) {
130
- Log.d(TAG, "onHeightChanged callback received - height: $height")
129
+ AdchainRNLog.d(TAG, "onHeightChanged callback received - height: $height")
131
130
  val map = Arguments.createMap().apply {
132
131
  putInt("height", height)
133
132
  }
@@ -136,10 +135,10 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
136
135
  })
137
136
 
138
137
  // NEW: Set event callback for custom events
139
- Log.d(TAG, "Setting event callback...")
138
+ AdchainRNLog.d(TAG, "Setting event callback...")
140
139
  view.setEventCallback(object : OfferwallEventCallback {
141
140
  override fun onCustomEvent(eventType: String, payload: Map<String, Any?>) {
142
- Log.d(TAG, "onCustomEvent received - type: $eventType, payload: $payload")
141
+ AdchainRNLog.d(TAG, "onCustomEvent received - type: $eventType")
143
142
  // Sample 앱에서 처리하도록 이벤트만 전달 (Toast 표시 안 함)
144
143
 
145
144
  val map = Arguments.createMap().apply {
@@ -154,7 +153,7 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
154
153
  requestType: String,
155
154
  params: Map<String, Any?>
156
155
  ): Map<String, Any?>? {
157
- Log.d(TAG, "onDataRequest received - id: $requestId, type: $requestType, params: $params")
156
+ AdchainRNLog.d(TAG, "onDataRequest received - id: $requestId, type: $requestType")
158
157
 
159
158
  // Send event to React Native
160
159
  val map = Arguments.createMap().apply {
@@ -171,41 +170,40 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
171
170
  while (System.currentTimeMillis() - startTime < timeout) {
172
171
  val response = pendingDataResponses.remove(requestId)
173
172
  if (response != null) {
174
- Log.d(TAG, "Data response received for request: $requestId")
173
+ AdchainRNLog.d(TAG, "Data response received for request: $requestId")
175
174
  return response
176
175
  }
177
176
  Thread.sleep(10)
178
177
  }
179
178
 
180
- Log.w(TAG, "Data request timeout: $requestId")
179
+ AdchainRNLog.w(TAG, "Data request timeout: $requestId")
181
180
  return null
182
181
  }
183
182
  })
184
183
 
185
184
  // Simply call the native method with placementId
186
185
  // Native SDK handles URL fetching internally
187
- Log.d(TAG, "Calling view.loadOfferwall(placementId)...")
186
+ AdchainRNLog.d(TAG, "Calling view.loadOfferwall(placementId)...")
188
187
  view.loadOfferwall(placementId)
189
- Log.d(TAG, "view.loadOfferwall() call completed")
188
+ AdchainRNLog.d(TAG, "view.loadOfferwall() call completed")
190
189
 
191
190
  } catch (e: Exception) {
192
- Log.e(TAG, "Exception in loadOfferwall", e)
193
- e.printStackTrace()
191
+ AdchainRNLog.e(TAG, "Exception in loadOfferwall", e)
194
192
  sendErrorEvent(view, "Failed to load offerwall: ${e.message}")
193
+ AdchainRNTelemetry.report("loadOfferwall failed", e)
195
194
  }
196
195
  }
197
196
 
198
197
  private fun sendEvent(view: AdchainOfferwallView, eventName: String, params: WritableMap) {
199
- Log.d(TAG, "sendEvent called - eventName: $eventName, params: $params")
198
+ AdchainRNLog.d(TAG, "sendEvent called - eventName: $eventName")
200
199
  val reactContext = view.context as ReactContext
201
200
  try {
202
201
  reactContext
203
202
  .getJSModule(com.facebook.react.uimanager.events.RCTEventEmitter::class.java)
204
203
  .receiveEvent(view.id, eventName, params)
205
- Log.d(TAG, "sendEvent completed successfully")
204
+ AdchainRNLog.d(TAG, "sendEvent completed successfully")
206
205
  } catch (e: Exception) {
207
- Log.e(TAG, "sendEvent failed", e)
208
- e.printStackTrace()
206
+ AdchainRNLog.e(TAG, "sendEvent failed", e)
209
207
  }
210
208
  }
211
209
 
@@ -247,7 +245,7 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
247
245
  is List<*> -> {
248
246
  writableMap.putArray(key, convertListToWritableArray(value))
249
247
  }
250
- else -> Log.w(TAG, "Unsupported value type for key: $key")
248
+ else -> AdchainRNLog.w(TAG, "Unsupported value type for key: $key")
251
249
  }
252
250
  }
253
251
  return writableMap
@@ -269,7 +267,7 @@ class AdchainOfferwallViewManager : SimpleViewManager<AdchainOfferwallView>() {
269
267
  is List<*> -> {
270
268
  writableArray.pushArray(convertListToWritableArray(item))
271
269
  }
272
- else -> Log.w(TAG, "Unsupported item type in list")
270
+ else -> AdchainRNLog.w(TAG, "Unsupported item type in list")
273
271
  }
274
272
  }
275
273
  return writableArray
@@ -0,0 +1,101 @@
1
+ package com.adchain.exposdk
2
+
3
+ import android.util.Log
4
+
5
+ /**
6
+ * Thin logging utility for the AdChain React Native bridge.
7
+ *
8
+ * This is intentionally a *thin* wrapper around [android.util.Log] — it is the
9
+ * bridge's own logging chokepoint, independent of the core SDK's `AdchainLogger`.
10
+ * It provides only:
11
+ * 1. console gating via [logLevel] (defaults to [LogLevel.WARNING] for production), and
12
+ * 2. a fixed `"AdchainRN-"` TAG prefix so bridge logs are unambiguous in logcat
13
+ * (e.g. tag "Sdk" => logcat tag "AdchainRN-Sdk").
14
+ *
15
+ * It deliberately does NOT carry the PII scrub or telemetry seams that the core
16
+ * `AdchainLogger` has — keeping it thin. Data-exposure values must be omitted at
17
+ * the call site instead.
18
+ */
19
+ object AdchainRNLog {
20
+ private const val TAG_PREFIX = "AdchainRN-"
21
+
22
+ /**
23
+ * Current log level — defaults to WARNING for production safety.
24
+ */
25
+ @JvmStatic
26
+ var logLevel: LogLevel = LogLevel.WARNING
27
+
28
+ private fun prefixed(tag: String): String = TAG_PREFIX + tag
29
+
30
+ /**
31
+ * Log an error message with optional throwable.
32
+ */
33
+ @JvmStatic
34
+ fun e(tag: String, message: String, throwable: Throwable? = null) {
35
+ if (logLevel.value >= LogLevel.ERROR.value) {
36
+ if (throwable != null) {
37
+ Log.e(prefixed(tag), message, throwable)
38
+ } else {
39
+ Log.e(prefixed(tag), message)
40
+ }
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Log a warning message.
46
+ */
47
+ @JvmStatic
48
+ fun w(tag: String, message: String) {
49
+ if (logLevel.value >= LogLevel.WARNING.value) {
50
+ Log.w(prefixed(tag), message)
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Log an info message.
56
+ */
57
+ @JvmStatic
58
+ fun i(tag: String, message: String) {
59
+ if (logLevel.value >= LogLevel.INFO.value) {
60
+ Log.i(prefixed(tag), message)
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Log a debug message.
66
+ */
67
+ @JvmStatic
68
+ fun d(tag: String, message: String) {
69
+ if (logLevel.value >= LogLevel.DEBUG.value) {
70
+ Log.d(prefixed(tag), message)
71
+ }
72
+ }
73
+
74
+ /**
75
+ * Log a verbose message.
76
+ */
77
+ @JvmStatic
78
+ fun v(tag: String, message: String) {
79
+ if (logLevel.value >= LogLevel.VERBOSE.value) {
80
+ Log.v(prefixed(tag), message)
81
+ }
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Log levels for the React Native bridge logger.
87
+ */
88
+ enum class LogLevel(val value: Int) {
89
+ /** No logs will be printed */
90
+ NONE(0),
91
+ /** Only errors will be printed */
92
+ ERROR(1),
93
+ /** Errors and warnings will be printed (Default) */
94
+ WARNING(2),
95
+ /** Errors, warnings, and info messages will be printed */
96
+ INFO(3),
97
+ /** All except verbose messages will be printed */
98
+ DEBUG(4),
99
+ /** All messages will be printed */
100
+ VERBOSE(5)
101
+ }
@@ -0,0 +1,83 @@
1
+ package com.adchain.exposdk
2
+
3
+ import java.lang.reflect.Method
4
+
5
+ /**
6
+ * Telemetry bridge for the AdChain React Native layer.
7
+ *
8
+ * Forwards exceptions that the RN bridge *catches and swallows* onto the core SDK's
9
+ * self-contained telemetry rail (`sdk_error`, category `sdk_diagnostic`) so bridge-side
10
+ * failures land next to native ones — tagged `layer = "rn"`.
11
+ *
12
+ * The core hook (`com.adchain.sdk.telemetry.SdkTelemetry.reportSdkError`) is resolved via
13
+ * **reflection** (lazy, once, cached). This keeps the RN bridge free of any compile-time
14
+ * dependency on that symbol: older core pins that lack the method simply make every call a
15
+ * permanent no-op. There is no third-party observability SDK here — this only relays into
16
+ * first-party (`com.adchain.*`) code, per `OBSERVABILITY-ADR.md`.
17
+ *
18
+ * Fail-safe (highest priority): no path here may ever propagate a throwable to the caller.
19
+ * Every call into [report] is fully guarded; a failure to relay is silently dropped.
20
+ */
21
+ object AdchainRNTelemetry {
22
+
23
+ /** Layer tag carried in the diagnostic event so RN-origin errors are distinguishable. */
24
+ private const val LAYER_RN = "rn"
25
+
26
+ /**
27
+ * Lazily-resolved, cached reflection handle to the core hook
28
+ * `SdkTelemetry.reportSdkError(String, Throwable, String)` — `@JvmStatic`, so it is
29
+ * invoked with a `null` receiver. Resolves to `null` (permanent no-op) when the core
30
+ * class/method is absent on the current pin.
31
+ */
32
+ private val reportMethod: Method? by lazy { resolveReportMethod() }
33
+
34
+ private fun resolveReportMethod(): Method? {
35
+ return try {
36
+ Class.forName("com.adchain.sdk.telemetry.SdkTelemetry")
37
+ .getMethod(
38
+ "reportSdkError",
39
+ String::class.java,
40
+ Throwable::class.java,
41
+ String::class.java
42
+ )
43
+ } catch (t: Throwable) {
44
+ // Class or method missing on this core pin → permanent no-op.
45
+ null
46
+ }
47
+ }
48
+
49
+ /**
50
+ * Relay a caught bridge exception onto the core diagnostic rail with `layer = "rn"`.
51
+ *
52
+ * Network failures are excluded (they reflect the user's connectivity, not an SDK
53
+ * malfunction). The core scrubs the throwable/message for PII, so call sites must not
54
+ * pass PII in [message].
55
+ */
56
+ @JvmStatic
57
+ fun report(message: String, throwable: Throwable?) {
58
+ try {
59
+ // Network failures are not SDK malfunctions — drop them (mirrors core).
60
+ if (isNetworkThrowable(throwable)) return
61
+ reportMethod?.invoke(null, message, throwable, LAYER_RN)
62
+ } catch (t: Throwable) {
63
+ // fail-safe: never let telemetry relay disturb the bridge.
64
+ }
65
+ }
66
+
67
+ /**
68
+ * True when the throwable (or any cause in its chain) is a [java.io.IOException] — a
69
+ * network/transport failure rather than an SDK malfunction. Bounded, cycle-guarded
70
+ * cause-chain walk (mirrors core `SdkTelemetry.isNetworkThrowable`).
71
+ */
72
+ private fun isNetworkThrowable(throwable: Throwable?): Boolean {
73
+ var current: Throwable? = throwable
74
+ var depth = 0
75
+ val seen = java.util.Collections.newSetFromMap(java.util.IdentityHashMap<Throwable, Boolean>())
76
+ while (current != null && depth < 16 && seen.add(current)) {
77
+ if (current is java.io.IOException) return true
78
+ current = try { current.cause } catch (t: Throwable) { null }
79
+ depth++
80
+ }
81
+ return false
82
+ }
83
+ }
@@ -87,6 +87,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
87
87
 
88
88
  } catch (t: Throwable) {
89
89
  promise.reject("INIT_ERROR", t.message, t)
90
+ AdchainRNTelemetry.report("initialize failed", t)
90
91
  }
91
92
  }
92
93
 
@@ -151,6 +152,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
151
152
  })
152
153
  } catch (t: Throwable) {
153
154
  promise.reject("LOGIN_ERROR", t.message, t)
155
+ AdchainRNTelemetry.report("login failed", t)
154
156
  }
155
157
  }
156
158
 
@@ -161,6 +163,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
161
163
  promise.resolve(createResponse(true, "Logout successful"))
162
164
  } catch (t: Throwable) {
163
165
  promise.reject("LOGOUT_ERROR", t.message, t)
166
+ AdchainRNTelemetry.report("logout failed", t)
164
167
  }
165
168
  }
166
169
 
@@ -170,6 +173,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
170
173
  promise.resolve(AdchainSdk.isLoggedIn)
171
174
  } catch (t: Throwable) {
172
175
  promise.reject("ERROR", t.message, t)
176
+ AdchainRNTelemetry.report("isLoggedIn failed", t)
173
177
  }
174
178
  }
175
179
 
@@ -189,6 +193,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
189
193
  }
190
194
  } catch (t: Throwable) {
191
195
  promise.reject("ERROR", t.message, t)
196
+ AdchainRNTelemetry.report("getCurrentUser failed", t)
192
197
  }
193
198
  }
194
199
 
@@ -236,6 +241,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
236
241
  )
237
242
  } catch (t: Throwable) {
238
243
  promise.reject("QUIZ_ERROR", t.message, t)
244
+ AdchainRNTelemetry.report("loadQuizList failed", t)
239
245
  }
240
246
  }
241
247
 
@@ -272,6 +278,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
272
278
  promise.resolve(createResponse(true, "Quiz clicked"))
273
279
  } catch (t: Throwable) {
274
280
  promise.reject("QUIZ_ERROR", t.message, t)
281
+ AdchainRNTelemetry.report("clickQuiz failed", t)
275
282
  }
276
283
  }
277
284
 
@@ -416,6 +423,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
416
423
  )
417
424
  } catch (t: Throwable) {
418
425
  promise.reject("MISSION_ERROR", t.message, t)
426
+ AdchainRNTelemetry.report("loadMissionList failed", t)
419
427
  }
420
428
  }
421
429
 
@@ -477,6 +485,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
477
485
  promise.resolve(createResponse(true, "Mission clicked"))
478
486
  } catch (t: Throwable) {
479
487
  promise.reject("MISSION_ERROR", t.message, t)
488
+ AdchainRNTelemetry.report("clickMission failed", t)
480
489
  }
481
490
  }
482
491
 
@@ -491,6 +500,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
491
500
  promise.resolve(createResponse(true, "Reward claimed"))
492
501
  } catch (t: Throwable) {
493
502
  promise.reject("MISSION_ERROR", t.message, t)
503
+ AdchainRNTelemetry.report("claimReward failed", t)
494
504
  }
495
505
  }
496
506
 
@@ -502,6 +512,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
502
512
  promise.resolve(AdchainSdk.isInitialized())
503
513
  } catch (t: Throwable) {
504
514
  promise.reject("ERROR", t.message, t)
515
+ AdchainRNTelemetry.report("isInitialized failed", t)
505
516
  }
506
517
  }
507
518
 
@@ -512,6 +523,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
512
523
  promise.resolve(userId)
513
524
  } catch (t: Throwable) {
514
525
  promise.reject("ERROR", t.message, t)
526
+ AdchainRNTelemetry.report("getUserId failed", t)
515
527
  }
516
528
  }
517
529
 
@@ -525,6 +537,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
525
537
  promise.resolve(ifa)
526
538
  } catch (t: Throwable) {
527
539
  promise.reject("ERROR", t.message, t)
540
+ AdchainRNTelemetry.report("getIFA failed", t)
528
541
  }
529
542
  }
530
543
 
@@ -553,6 +566,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
553
566
  }
554
567
  } catch (t: Throwable) {
555
568
  promise.reject("BANNER_ERROR", t.message, t)
569
+ AdchainRNTelemetry.report("getBannerInfo failed", t)
556
570
  }
557
571
  }
558
572
 
@@ -562,17 +576,27 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
562
576
  fun openOfferwall(placementId: String?, promise: Promise) {
563
577
  try {
564
578
  reactContext.currentActivity?.let { activity ->
579
+ val finalPlacementId = placementId ?: ""
565
580
  val callback = object : OfferwallCallback {
566
581
  override fun onOpened() {
567
582
  promise.resolve(createResponse(true, "Offerwall opened"))
568
583
  }
569
584
 
570
585
  override fun onClosed() {
571
- // 이미 resolve 되었으므로 무시
586
+ reactContext
587
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
588
+ .emit("onOfferwallClosed", Arguments.createMap().apply {
589
+ putString("placementId", finalPlacementId)
590
+ })
572
591
  }
573
592
 
574
593
  override fun onError(message: String) {
575
- // 이미 resolve 되었으므로 무시
594
+ reactContext
595
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
596
+ .emit("onOfferwallError", Arguments.createMap().apply {
597
+ putString("placementId", finalPlacementId)
598
+ putString("message", message)
599
+ })
576
600
  }
577
601
 
578
602
  override fun onRewardEarned(amount: Int) {
@@ -583,12 +607,18 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
583
607
  // Event callback for custom events
584
608
  val eventCallback = object : OfferwallEventCallback {
585
609
  override fun onCustomEvent(eventType: String, payload: Map<String, Any?>) {
586
- android.util.Log.d("AdchainSdk", "[WebView → App] Custom Event: type=$eventType, payload=$payload")
587
- // Sample 앱에서 처리하도록 이벤트만 전달 (Toast/Alert 표시 )
610
+ AdchainRNLog.d("Sdk", "[WebView → App] Custom Event: type=$eventType")
611
+ // 웹뷰 customEvent를 JS 리스너로 전달 (onOfferwallClosed emit과 동일 방식)
612
+ reactContext
613
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
614
+ .emit("onOfferwallCustomEvent", Arguments.createMap().apply {
615
+ putString("eventType", eventType)
616
+ putMap("payload", Arguments.makeNativeMap(payload))
617
+ })
588
618
  }
589
619
 
590
620
  override fun onDataRequest(requestId: String, requestType: String, params: Map<String, Any?>): Map<String, Any?>? {
591
- android.util.Log.d("AdchainSdk", "[WebView → App] Data Request: type=$requestType, params=$params")
621
+ AdchainRNLog.d("Sdk", "[WebView → App] Data Request: type=$requestType")
592
622
 
593
623
  // Return mock data based on request type
594
624
  val response = when (requestType) {
@@ -598,16 +628,16 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
598
628
  else -> null
599
629
  }
600
630
 
601
- android.util.Log.d("AdchainSdk", "[App → WebView] Data Response: $response")
631
+ AdchainRNLog.d("Sdk", "[App → WebView] Data Response sent")
602
632
  return response
603
633
  }
604
634
  }
605
635
 
606
- val finalPlacementId = placementId ?: ""
607
636
  AdchainSdk.openOfferwall(activity, finalPlacementId, callback, eventCallback)
608
637
  } ?: promise.reject("OFFERWALL_ERROR", "Current activity is null")
609
638
  } catch (t: Throwable) {
610
639
  promise.reject("OFFERWALL_ERROR", t.message, t)
640
+ AdchainRNTelemetry.report("openOfferwall failed", t)
611
641
  }
612
642
  }
613
643
 
@@ -636,12 +666,18 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
636
666
  // Event callback for custom events
637
667
  val eventCallback = object : OfferwallEventCallback {
638
668
  override fun onCustomEvent(eventType: String, payload: Map<String, Any?>) {
639
- android.util.Log.d("AdchainSdk", "[WebView → App] Custom Event: type=$eventType, payload=$payload")
640
- // Sample 앱에서 처리하도록 이벤트만 전달 (Toast/Alert 표시 )
669
+ AdchainRNLog.d("Sdk", "[WebView → App] Custom Event: type=$eventType")
670
+ // 웹뷰 customEvent를 JS 리스너로 전달 (onOfferwallClosed emit과 동일 방식)
671
+ reactContext
672
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
673
+ .emit("onOfferwallCustomEvent", Arguments.createMap().apply {
674
+ putString("eventType", eventType)
675
+ putMap("payload", Arguments.makeNativeMap(payload))
676
+ })
641
677
  }
642
678
 
643
679
  override fun onDataRequest(requestId: String, requestType: String, params: Map<String, Any?>): Map<String, Any?>? {
644
- android.util.Log.d("AdchainSdk", "[WebView → App] Data Request: type=$requestType, params=$params")
680
+ AdchainRNLog.d("Sdk", "[WebView → App] Data Request: type=$requestType")
645
681
 
646
682
  // Return mock data based on request type
647
683
  val response = when (requestType) {
@@ -651,7 +687,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
651
687
  else -> null
652
688
  }
653
689
 
654
- android.util.Log.d("AdchainSdk", "[App → WebView] Data Response: $response")
690
+ AdchainRNLog.d("Sdk", "[App → WebView] Data Response sent")
655
691
  return response
656
692
  }
657
693
  }
@@ -661,6 +697,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
661
697
  } ?: promise.reject("OFFERWALL_ERROR", "Current activity is null")
662
698
  } catch (t: Throwable) {
663
699
  promise.reject("OFFERWALL_ERROR", t.message, t)
700
+ AdchainRNTelemetry.report("openOfferwallWithUrl failed", t)
664
701
  }
665
702
  }
666
703
 
@@ -679,6 +716,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
679
716
  } ?: promise.reject("BROWSER_ERROR", "Current activity is null")
680
717
  } catch (t: Throwable) {
681
718
  promise.reject("BROWSER_ERROR", t.message, t)
719
+ AdchainRNTelemetry.report("openExternalBrowser failed", t)
682
720
  }
683
721
  }
684
722
 
@@ -709,6 +747,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
709
747
  } ?: promise.reject("ADJOE_ERROR", "Current activity is null")
710
748
  } catch (t: Throwable) {
711
749
  promise.reject("ADJOE_ERROR", t.message, t)
750
+ AdchainRNTelemetry.report("openAdjoeOfferwall failed", t)
712
751
  }
713
752
  }
714
753
 
@@ -738,6 +777,7 @@ class AdchainSdkModule(private val reactContext: ReactApplicationContext)
738
777
  } ?: promise.reject("NESTADS_ERROR", "Current activity is null")
739
778
  } catch (t: Throwable) {
740
779
  promise.reject("NESTADS_ERROR", t.message, t)
780
+ AdchainRNTelemetry.report("openOfferwallNestAds failed", t)
741
781
  }
742
782
  }
743
783
 
@@ -0,0 +1,69 @@
1
+ //
2
+ // AdchainRNLog.swift
3
+ // AdchainSdk React Native bridge
4
+ //
5
+ // Thin logging utility for the AdChain React Native bridge.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ /// Log level for the React Native bridge logger.
11
+ enum RNLogLevel: Int, Comparable {
12
+ case none = 0
13
+ case error = 1
14
+ case warning = 2
15
+ case info = 3
16
+ case debug = 4
17
+ case verbose = 5
18
+
19
+ static func < (lhs: RNLogLevel, rhs: RNLogLevel) -> Bool {
20
+ return lhs.rawValue < rhs.rawValue
21
+ }
22
+ }
23
+
24
+ /// Thin logger for the AdChain React Native bridge.
25
+ ///
26
+ /// This is intentionally a *thin* wrapper around `print` — it is the bridge's own
27
+ /// logging chokepoint, independent of the core SDK's `AdchainLogger`. It provides
28
+ /// only:
29
+ /// 1. console gating via `logLevel` (defaults to `.warning` for production), and
30
+ /// 2. a fixed `[AdchainRN-<tag>]` prefix so bridge logs are unambiguous in the
31
+ /// console (e.g. tag "Sdk" => "[AdchainRN-Sdk]").
32
+ ///
33
+ /// It deliberately does NOT carry the PII scrub or telemetry seams that the core
34
+ /// `AdchainLogger` has — keeping it thin. Data-exposure values must be omitted at
35
+ /// the call site instead.
36
+ enum AdchainRNLog {
37
+ /// Current log level — defaults to WARNING for production safety.
38
+ static var logLevel: RNLogLevel = .warning
39
+
40
+ /// Log error message.
41
+ static func e(_ tag: String, _ message: String) {
42
+ emit(.error, tag: tag, message: message)
43
+ }
44
+
45
+ /// Log warning message.
46
+ static func w(_ tag: String, _ message: String) {
47
+ emit(.warning, tag: tag, message: message)
48
+ }
49
+
50
+ /// Log info message.
51
+ static func i(_ tag: String, _ message: String) {
52
+ emit(.info, tag: tag, message: message)
53
+ }
54
+
55
+ /// Log debug message.
56
+ static func d(_ tag: String, _ message: String) {
57
+ emit(.debug, tag: tag, message: message)
58
+ }
59
+
60
+ /// Log verbose message.
61
+ static func v(_ tag: String, _ message: String) {
62
+ emit(.verbose, tag: tag, message: message)
63
+ }
64
+
65
+ private static func emit(_ level: RNLogLevel, tag: String, message: String) {
66
+ guard logLevel >= level else { return }
67
+ print("[AdchainRN-\(tag)] \(message)")
68
+ }
69
+ }
@@ -35,7 +35,7 @@ class AdchainSdkModule: RCTEventEmitter {
35
35
  @objc override static func requiresMainQueueSetup() -> Bool { true }
36
36
 
37
37
  override func supportedEvents() -> [String]! {
38
- return ["onQuizCompleted", "onMissionCompleted", "onMissionProgressed", "onMissionRefreshed"] // Quiz, Mission 이벤트 지원
38
+ return ["onQuizCompleted", "onMissionCompleted", "onMissionProgressed", "onMissionRefreshed", "onOfferwallClosed", "onOfferwallError", "onOfferwallCustomEvent"] // Quiz, Mission, Offerwall 이벤트 지원
39
39
  }
40
40
 
41
41
  // MARK: - 1. SDK 초기화
@@ -561,9 +561,13 @@ class AdchainSdkModule: RCTEventEmitter {
561
561
  class OfferwallCallbackImpl: NSObject, OfferwallCallback {
562
562
  let resolver: RCTPromiseResolveBlock
563
563
  var hasResolved = false
564
+ weak var module: AdchainSdkModule?
565
+ let pid: String
564
566
 
565
- init(resolver: @escaping RCTPromiseResolveBlock) {
567
+ init(resolver: @escaping RCTPromiseResolveBlock, module: AdchainSdkModule?, pid: String) {
566
568
  self.resolver = resolver
569
+ self.module = module
570
+ self.pid = pid
567
571
  }
568
572
 
569
573
  func onOpened() {
@@ -577,11 +581,11 @@ class AdchainSdkModule: RCTEventEmitter {
577
581
  }
578
582
 
579
583
  func onClosed() {
580
- // 이미 resolve 되었으므로 무시
584
+ module?.sendEvent(withName: "onOfferwallClosed", body: ["placementId": pid])
581
585
  }
582
586
 
583
587
  func onError(_ message: String) {
584
- // 이미 resolve 되었으므로 무시
588
+ module?.sendEvent(withName: "onOfferwallError", body: ["placementId": pid, "message": message])
585
589
  }
586
590
 
587
591
  func onRewardEarned(_ amount: Int) {
@@ -590,13 +594,20 @@ class AdchainSdkModule: RCTEventEmitter {
590
594
  }
591
595
 
592
596
  class OfferwallEventCallbackImpl: NSObject, OfferwallEventCallback {
597
+ weak var module: AdchainSdkModule?
598
+
599
+ init(module: AdchainSdkModule?) {
600
+ self.module = module
601
+ }
602
+
593
603
  func onCustomEvent(eventType: String, payload: [String : Any]) {
594
- print("[AdchainSdk] [WebView → App] Custom Event: type=\(eventType), payload=\(payload)")
595
- // Sample 앱에서 처리하도록 이벤트만 전달 (Alert/Toast 표시 )
604
+ AdchainRNLog.d("Sdk", "[WebView → App] Custom Event: type=\(eventType)")
605
+ // 웹뷰 customEvent를 JS 리스너로 전달 (onOfferwallClosed emit과 동일 방식)
606
+ module?.sendEvent(withName: "onOfferwallCustomEvent", body: ["eventType": eventType, "payload": payload])
596
607
  }
597
608
 
598
609
  func onDataRequest(requestId: String, requestType: String, params: [String : Any]) -> [String : Any]? {
599
- print("[AdchainSdk] [WebView → App] Data Request: type=\(requestType), params=\(params)")
610
+ AdchainRNLog.d("Sdk", "[WebView → App] Data Request: type=\(requestType)")
600
611
 
601
612
  // Return mock data based on request type
602
613
  let response: [String: Any]?
@@ -611,16 +622,16 @@ class AdchainSdkModule: RCTEventEmitter {
611
622
  response = nil
612
623
  }
613
624
 
614
- print("[AdchainSdk] [App → WebView] Data Response: \(response ?? [:])")
625
+ AdchainRNLog.d("Sdk", "[App → WebView] Data Response sent")
615
626
  return response
616
627
  }
617
628
  }
618
629
 
619
630
  DispatchQueue.main.async { [weak self] in
620
631
  if let topVC = self?.getTopViewController() {
621
- let callback = OfferwallCallbackImpl(resolver: resolver)
622
- let eventCallback = OfferwallEventCallbackImpl()
623
632
  let finalPlacementId = (placementId as String?) ?? ""
633
+ let callback = OfferwallCallbackImpl(resolver: resolver, module: self, pid: finalPlacementId)
634
+ let eventCallback = OfferwallEventCallbackImpl(module: self)
624
635
  AdchainSdk.shared.openOfferwall(
625
636
  presentingViewController: topVC,
626
637
  placementId: finalPlacementId,
@@ -669,13 +680,20 @@ class AdchainSdkModule: RCTEventEmitter {
669
680
  }
670
681
 
671
682
  class OfferwallEventCallbackImpl: NSObject, OfferwallEventCallback {
683
+ weak var module: AdchainSdkModule?
684
+
685
+ init(module: AdchainSdkModule?) {
686
+ self.module = module
687
+ }
688
+
672
689
  func onCustomEvent(eventType: String, payload: [String : Any]) {
673
- print("[AdchainSdk] [WebView → App] Custom Event: type=\(eventType), payload=\(payload)")
674
- // Sample 앱에서 처리하도록 이벤트만 전달 (Alert/Toast 표시 )
690
+ AdchainRNLog.d("Sdk", "[WebView → App] Custom Event: type=\(eventType)")
691
+ // 웹뷰 customEvent를 JS 리스너로 전달 (onOfferwallClosed emit과 동일 방식)
692
+ module?.sendEvent(withName: "onOfferwallCustomEvent", body: ["eventType": eventType, "payload": payload])
675
693
  }
676
694
 
677
695
  func onDataRequest(requestId: String, requestType: String, params: [String : Any]) -> [String : Any]? {
678
- print("[AdchainSdk] [WebView → App] Data Request: type=\(requestType), params=\(params)")
696
+ AdchainRNLog.d("Sdk", "[WebView → App] Data Request: type=\(requestType)")
679
697
 
680
698
  // Return mock data based on request type
681
699
  let response: [String: Any]?
@@ -690,7 +708,7 @@ class AdchainSdkModule: RCTEventEmitter {
690
708
  response = nil
691
709
  }
692
710
 
693
- print("[AdchainSdk] [App → WebView] Data Response: \(response ?? [:])")
711
+ AdchainRNLog.d("Sdk", "[App → WebView] Data Response sent")
694
712
  return response
695
713
  }
696
714
  }
@@ -698,7 +716,7 @@ class AdchainSdkModule: RCTEventEmitter {
698
716
  DispatchQueue.main.async { [weak self] in
699
717
  if let topVC = self?.getTopViewController() {
700
718
  let callback = OfferwallCallbackImpl(resolver: resolver)
701
- let eventCallback = OfferwallEventCallbackImpl()
719
+ let eventCallback = OfferwallEventCallbackImpl(module: self)
702
720
  let finalPlacementId = (placementId as String?) ?? ""
703
721
  AdchainSdk.shared.openOfferwallWithUrl(
704
722
  url as String,
@@ -191,6 +191,15 @@ export function addMissionProgressedListener(callback) {
191
191
  export function addMissionRefreshedListener(callback) {
192
192
  return adchainEventEmitter.addListener('onMissionRefreshed', callback);
193
193
  }
194
+ export function addOfferwallClosedListener(callback) {
195
+ return adchainEventEmitter.addListener('onOfferwallClosed', callback);
196
+ }
197
+ export function addOfferwallErrorListener(callback) {
198
+ return adchainEventEmitter.addListener('onOfferwallError', callback);
199
+ }
200
+ export function addOfferwallCustomEventListener(callback) {
201
+ return adchainEventEmitter.addListener('onOfferwallCustomEvent', e => callback(e?.eventType, e?.payload));
202
+ }
194
203
 
195
204
  // ===== Export =====
196
205
 
@@ -1 +1 @@
1
- {"version":3,"names":["NativeModules","Platform","NativeEventEmitter","hasExpoNative","ExponentConstants","AdchainOfferwallView","LINKING_ERROR","select","ios","default","AdchainSdk","Proxy","get","Error","adchainEventEmitter","AdchainSDK","initialize","config","options","environment","timeout","appKey","appSecret","autoInitialize","OS","Constants","require","e","expoConfig","adchainAndroidAppKey","adchainAndroidAppSecret","adchainIosAppKey","adchainIosAppSecret","adchainEnvironment","adchainTimeout","extra","isIOS","console","log","error","login","user","userInfo","gender","birthYear","customProperties","userId","logout","isLoggedIn","getCurrentUser","loadQuizList","unitId","clickQuiz","quizId","loadMissionList","clickMission","missionId","claimReward","openOfferwall","placementId","openOfferwallWithUrl","url","openExternalBrowser","openAdjoeOfferwall","openOfferwallNestAds","isInitialized","getUserId","getIFA","getBannerInfo","addQuizCompletedListener","callback","addListener","addMissionCompletedListener","addMissionProgressedListener","addMissionRefreshedListener","sdk"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NativeModules","Platform","NativeEventEmitter","hasExpoNative","ExponentConstants","AdchainOfferwallView","LINKING_ERROR","select","ios","default","AdchainSdk","Proxy","get","Error","adchainEventEmitter","AdchainSDK","initialize","config","options","environment","timeout","appKey","appSecret","autoInitialize","OS","Constants","require","e","expoConfig","adchainAndroidAppKey","adchainAndroidAppSecret","adchainIosAppKey","adchainIosAppSecret","adchainEnvironment","adchainTimeout","extra","isIOS","console","log","error","login","user","userInfo","gender","birthYear","customProperties","userId","logout","isLoggedIn","getCurrentUser","loadQuizList","unitId","clickQuiz","quizId","loadMissionList","clickMission","missionId","claimReward","openOfferwall","placementId","openOfferwallWithUrl","url","openExternalBrowser","openAdjoeOfferwall","openOfferwallNestAds","isInitialized","getUserId","getIFA","getBannerInfo","addQuizCompletedListener","callback","addListener","addMissionCompletedListener","addMissionProgressedListener","addMissionRefreshedListener","addOfferwallClosedListener","addOfferwallErrorListener","addOfferwallCustomEventListener","eventType","payload","sdk"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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","ignoreList":[]}
@@ -10,6 +10,7 @@ export interface AdchainUser {
10
10
  userId: string;
11
11
  gender?: 'MALE' | 'FEMALE' | 'OTHER' | 'M' | 'F';
12
12
  birthYear?: number;
13
+ /** @deprecated 현재 어디에도 전달되지 않습니다(무효과). 향후 제거 예정 — 사용하지 마세요. */
13
14
  customProperties?: Record<string, string>;
14
15
  }
15
16
  export interface Quiz {
@@ -86,6 +87,14 @@ export declare function addMissionProgressedListener(callback: (event: {
86
87
  export declare function addMissionRefreshedListener(callback: (event: {
87
88
  unitId: string;
88
89
  }) => void): import("react-native").EmitterSubscription;
90
+ export declare function addOfferwallClosedListener(callback: (event: {
91
+ placementId?: string;
92
+ }) => void): import("react-native").EmitterSubscription;
93
+ export declare function addOfferwallErrorListener(callback: (event: {
94
+ placementId?: string;
95
+ message?: string;
96
+ }) => void): import("react-native").EmitterSubscription;
97
+ export declare function addOfferwallCustomEventListener(callback: (eventType: string, payload: any) => void): import("react-native").EmitterSubscription;
89
98
  declare const sdk: AdchainSDK;
90
99
  export default sdk;
91
100
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1selfworld/adchain-sdk-react-native",
3
- "version": "1.0.26",
3
+ "version": "1.0.27-rc.2",
4
4
  "description": "AdChain SDK for React Native with Expo support",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -28,10 +28,10 @@ function withAdchainIOS(config) {
28
28
  if (targetMatch) {
29
29
  const targetName = targetMatch[1];
30
30
  const podDeclaration = `
31
- # AdChain SDK (Git Pod) - v1.0.51
31
+ # AdChain SDK (Git Pod) - v1.0.52-rc.2
32
32
  # CocoaPods Trunk에 없으므로 Git 방식 사용
33
33
  # Swift 5.5 (5.9 optional 파라미터 버그 회피)
34
- pod 'AdChainSDK', :git => 'https://github.com/1selfworld-labs/adchain-sdk-ios-release.git', :tag => 'v1.0.51'
34
+ pod 'AdChainSDK', :git => 'https://github.com/1selfworld-labs/adchain-sdk-ios-release.git', :tag => 'v1.0.52-rc.2'
35
35
  `;
36
36
 
37
37
  podfile = podfile.replace(
@@ -41,8 +41,8 @@ function withAdchainIOS(config) {
41
41
  } else {
42
42
  // Fallback
43
43
  const podDeclaration = `
44
- # AdChain SDK (Git Pod) - v1.0.51
45
- pod 'AdChainSDK', :git => 'https://github.com/1selfworld-labs/adchain-sdk-ios-release.git', :tag => 'v1.0.51'
44
+ # AdChain SDK (Git Pod) - v1.0.52-rc.2
45
+ pod 'AdChainSDK', :git => 'https://github.com/1selfworld-labs/adchain-sdk-ios-release.git', :tag => 'v1.0.52-rc.2'
46
46
  `;
47
47
 
48
48
  podfile = podfile.replace(
package/src/index.tsx CHANGED
@@ -55,6 +55,7 @@ export interface AdchainUser {
55
55
  userId: string;
56
56
  gender?: 'MALE' | 'FEMALE' | 'OTHER' | 'M' | 'F';
57
57
  birthYear?: number;
58
+ /** @deprecated 현재 어디에도 전달되지 않습니다(무효과). 향후 제거 예정 — 사용하지 마세요. */
58
59
  customProperties?: Record<string, string>;
59
60
  }
60
61
 
@@ -334,6 +335,26 @@ export function addMissionRefreshedListener(
334
335
  return adchainEventEmitter.addListener('onMissionRefreshed', callback as any);
335
336
  }
336
337
 
338
+ export function addOfferwallClosedListener(
339
+ callback: (event: { placementId?: string }) => void
340
+ ) {
341
+ return adchainEventEmitter.addListener('onOfferwallClosed', callback as any);
342
+ }
343
+
344
+ export function addOfferwallErrorListener(
345
+ callback: (event: { placementId?: string; message?: string }) => void
346
+ ) {
347
+ return adchainEventEmitter.addListener('onOfferwallError', callback as any);
348
+ }
349
+
350
+ export function addOfferwallCustomEventListener(
351
+ callback: (eventType: string, payload: any) => void
352
+ ) {
353
+ return adchainEventEmitter.addListener('onOfferwallCustomEvent', (e: any) =>
354
+ callback(e?.eventType, e?.payload)
355
+ );
356
+ }
357
+
337
358
  // ===== Export =====
338
359
 
339
360
  const sdk = new AdchainSDK();