com.cprot.ead 1.0.5764 → 1.0.6788

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.
@@ -87,5 +87,5 @@ project.afterEvaluate {
87
87
  dependencies {
88
88
  implementation("com.facebook.react:react-native:+")
89
89
  implementation("org.jetbrains.kotlin:kotlin-stdlib:1.9.24")
90
- implementation("com.cprot:ead:1.0.5764")
90
+ implementation("com.cprot:ead:1.0.6787")
91
91
  }
@@ -1,39 +1,30 @@
1
1
  package com.cproteadmodule
2
2
 
3
- import com.facebook.react.bridge.ReactApplicationContext
4
- import com.facebook.react.bridge.ReactContextBaseJavaModule
5
- import com.facebook.react.bridge.ReactMethod
6
- import com.facebook.react.bridge.Promise
7
-
3
+ import android.telephony.TelephonyManager
4
+ import android.util.Log
8
5
  import com.cprot.ead.CProtEadModule
9
6
  import com.cprot.ead.helpers.HttpsHelper
10
- import com.cprot.ead.helpers.ConstantHelper
11
7
  import com.cprot.ead.models.DeepblackInfo
12
8
  import com.cprot.ead.models.ICProtEvent
13
9
  import com.cprot.ead.models.IncomingNumber
14
10
  import com.cprot.ead.models.InfectedApp
15
11
  import com.cprot.ead.models.Language
12
+ import com.cprot.ead.models.MalwareEntry
16
13
  import com.cprot.ead.models.OverlayApp
17
- import android.telephony.TelephonyManager
18
- import com.facebook.react.modules.core.DeviceEventManagerModule
19
- import java.util.ArrayList
20
- import android.os.Environment
21
- import android.provider.Settings
22
- import com.cproteadmodule.UninstallHandler
23
14
  import com.cprot.ead.models.SecurityFeatureCheck
24
15
  import com.cprot.ead.models.UpdateStatus
25
-
26
- import android.os.Build
27
- import android.util.Log
28
- import androidx.core.app.ActivityCompat
29
- import androidx.core.content.ContextCompat
30
- import java.util.Date
31
- import java.text.SimpleDateFormat
32
- import java.util.Locale
33
-
16
+ import com.facebook.react.bridge.ReactApplicationContext
17
+ import com.facebook.react.bridge.ReactContextBaseJavaModule
18
+ import com.facebook.react.bridge.ReactMethod
19
+ import com.facebook.react.modules.core.DeviceEventManagerModule
34
20
  import kotlinx.coroutines.CoroutineScope
35
21
  import kotlinx.coroutines.Dispatchers
36
22
  import kotlinx.coroutines.launch
23
+ import java.text.SimpleDateFormat
24
+ import java.util.ArrayList
25
+ import java.util.Date
26
+ import java.util.Locale
27
+ import java.lang.StringBuilder
37
28
 
38
29
  class CProtEadModuleModule(reactContext: ReactApplicationContext) :
39
30
  ReactContextBaseJavaModule(reactContext), ICProtEvent {
@@ -93,7 +84,7 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
93
84
  it.setIncomingCallEnabled(value);
94
85
  }
95
86
  }
96
- }
87
+ }
97
88
 
98
89
  @ReactMethod
99
90
  fun addEvent() {
@@ -104,7 +95,7 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
104
95
  }
105
96
  }
106
97
  }
107
-
98
+
108
99
  @ReactMethod
109
100
  fun setScreenModule(value: Boolean) {
110
101
  val currentActivity = reactApplicationContext.currentActivity
@@ -116,49 +107,61 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
116
107
  }
117
108
  }
118
109
  }
119
-
110
+
111
+ @ReactMethod
112
+ fun setVirtualTouchDetection(value: Boolean) {
113
+ val currentActivity = reactApplicationContext.currentActivity
114
+ module?.let {
115
+ if (currentActivity != null) {
116
+ CoroutineScope(Dispatchers.Main).launch {
117
+ it.setVirtualTouchDetection(currentActivity, value)
118
+ }
119
+ }
120
+ }
121
+ }
122
+
120
123
  @ReactMethod
121
124
  fun setUserId(userId: String) {
122
125
  module?.let {
123
126
  it.setUserId(userId)
124
127
  }
125
128
  }
126
-
129
+
127
130
  @ReactMethod
128
131
  fun setNoHistoryOnThreatDetection(value: Boolean) {
129
132
  module?.let {
130
133
  it.setNoHistoryOnThreatDetection(value)
131
134
  }
132
135
  }
133
-
136
+
134
137
  @ReactMethod
135
138
  fun showThreatDetectionScreenWithoutPermission(value: Boolean) {
136
139
  module?.let {
137
140
  it.showThreatDetectionScreenWithoutPermission(value)
138
141
  }
139
142
  }
140
-
143
+
141
144
  @ReactMethod
142
145
  fun startConnection() {
143
146
  module?.let {
144
147
  it.startConnection()
145
148
  }
146
149
  }
147
-
150
+
148
151
  @ReactMethod
149
152
  fun startRealtime() {
150
153
  module?.let {
151
154
  it.startRealtime()
152
155
  }
153
156
  }
154
-
157
+
155
158
  @ReactMethod
156
159
  fun enableDeviceProtection(value: Boolean) {
157
160
  module?.let {
158
161
  it.enableDeviceProtection(value)
159
162
  }
160
163
  }
161
-
164
+
162
165
  @ReactMethod
163
166
  fun setLanguage(languageCode: Int) {
164
167
  module?.let {
@@ -178,49 +181,49 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
178
181
  it.isDeviceProtectionEnabled()
179
182
  } ?: false
180
183
  }
181
-
184
+
182
185
  @ReactMethod
183
186
  fun reInitRegister() {
184
187
  module?.let {
185
188
  it.reInitRegister()
186
189
  }
187
190
  }
188
-
191
+
189
192
  @ReactMethod
190
193
  fun getSslCertHash(): String? {
191
194
  return module?.let {
192
195
  it.getSslCertHash()
193
196
  } ?: ""
194
197
  }
195
-
198
+
196
199
  @ReactMethod
197
200
  fun getDeviceFingerprint(): String? {
198
201
  return module?.let {
199
202
  it.getDeviceFingerprint()
200
203
  } ?: ""
201
204
  }
202
-
205
+
203
206
  @ReactMethod
204
207
  fun isRunInEmulator(): Boolean {
205
208
  return module?.let {
206
209
  it.isRunInEmulator()
207
210
  } ?: false
208
211
  }
209
-
212
+
210
213
  @ReactMethod
211
214
  fun isRootedDevice(): Boolean {
212
215
  return module?.let {
213
216
  it.isRootedDevice()
214
217
  } ?: false
215
218
  }
216
-
219
+
217
220
  @ReactMethod
218
221
  fun isFingerprintChanged(): Boolean {
219
222
  return module?.let {
220
223
  it.isFingerprintChanged()
221
224
  } ?: false
222
225
  }
223
-
226
+
224
227
  @ReactMethod
225
228
  fun getSignatures(): ArrayList<String>? {
226
229
  return module?.let {
@@ -228,11 +231,11 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
228
231
  ArrayList(it.getSignatures(reactApplicationContext).toList())
229
232
  } catch (e: Exception) {
230
233
  e.printStackTrace()
231
- null
234
+ null
232
235
  }
233
236
  } ?: ArrayList()
234
237
  }
235
-
238
+
236
239
  @ReactMethod
237
240
  fun getDexCRC(): Long {
238
241
  return module?.let {
@@ -244,14 +247,45 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
244
247
  }
245
248
  } ?: -1L // Module null ise -1 döndürülür
246
249
  }
247
-
250
+
248
251
  @ReactMethod
249
- fun getSecurityFeatureChecks(): SecurityFeatureCheck? {
250
- return module?.let {
251
- it.getSecurityFeatureChecks()
252
- } ?: null // Module null ise null döndürülür
252
+ fun getSecurityFeatureChecks(): String? {
253
+ return module?.let {
254
+ val securityCheck = it.getSecurityFeatureChecks() ?: return@let null
255
+ val sb = StringBuilder()
256
+
257
+ sb.append("{")
258
+ sb.append("\"isMalwareDetected\":").append(securityCheck.isMalwareDetected()).append(",")
259
+ sb.append("\"isDebuggerDetected\":").append(securityCheck.isDebuggerDetected()).append(",")
260
+ sb.append("\"isEmulationDetected\":").append(securityCheck.isEmulationDetected()).append(",")
261
+ sb.append("\"emulationDetectionDescription\":").append("\"").append(securityCheck.getEmulationDetectionDescription()).append("\"").append(",")
262
+ sb.append("\"isRootDetected\":").append(securityCheck.isRootDetected()).append(",")
263
+ sb.append("\"rootDetectionDescription\":").append("\"").append(securityCheck.getRootDetectionDescription()).append("\"").append(",")
264
+ //sb.append("\"isIntegrityBroken\":").append(securityCheck.isIntegrityBroken()).append(",")
265
+ sb.append("\"isFingerprintChanged\":").append(securityCheck.isFingerprintChanged()).append(",")
266
+ sb.append("\"isScreenReaderAppsDetected\":").append(securityCheck.isScreenReaderAppsDetected()).append(",")
267
+ sb.append("\"isOverlayedAppsDetected\":").append(securityCheck.isOverlayedAppsDetected()).append(",")
268
+ sb.append("\"isDevModeEnabled\":").append(securityCheck.isDevModeEnabled()).append(",")
269
+ sb.append("\"factoryResetTime\":").append(securityCheck.getFactoryResetTime() ?: "null").append(",")
270
+ sb.append("\"isVpnActive\":").append(securityCheck.getIsVpnActive()).append(",")
271
+ sb.append("\"isDefaultSmsAppChanged\":").append(securityCheck.isDefaultSmsAppChanged()).append(",")
272
+ sb.append("\"isSimChanged\":").append(securityCheck.isSimChanged()).append(",")
273
+ sb.append("\"isProxyActive\":").append(securityCheck.isProxyActive()).append(",")
274
+ sb.append("\"isMockLocation\":").append(securityCheck.isMockLocation()).append(",")
275
+ //sb.append("\"isKeyloggerDetected\":").append(securityCheck.isKeyloggerDetected()).append(",")
276
+ sb.append("\"isVirtualTouch\":").append(securityCheck.isVirtualTouch()).append(",")
277
+ sb.append("\"isCallForwardActive\":").append(securityCheck.isCallForwardActive())
278
+ sb.append("}")
279
+
280
+ val jsonString = sb.toString()
281
+ sendLogEvent(jsonString)
282
+ jsonString
283
+ } ?: run {
284
+ sendLogEvent("Security check module is null")
285
+ null
286
+ }
253
287
  }
254
-
288
+
255
289
  @ReactMethod
256
290
  fun getLastScanTime(): String? {
257
291
  return module?.let {
@@ -260,14 +294,13 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
260
294
  dateFormat.format(lastScanTime) // Tarihi String formatına çevirir
261
295
  } ?: "" // Module null ise boş string döndürülür
262
296
  }
263
-
297
+
264
298
  @ReactMethod
265
299
  fun getUpdateStatus(): UpdateStatus? {
266
300
  return module?.let {
267
301
  it.getUpdateStatus()
268
302
  } ?: null // Module null ise null döndürülür
269
303
  }
270
-
271
304
 
272
305
  //Send log message when ovveride functions worked.
273
306
  private fun sendLogEvent(message: String) {
@@ -292,8 +325,10 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
292
325
  sendLogEvent("Register fail: $message")
293
326
  }
294
327
 
295
- override fun onRunningInEmulator(value: Boolean) {
296
- sendLogEvent("Run in emulator: $value")
328
+ override fun onRunningInEmulator(value: Boolean, description: String) {
329
+ sendLogEvent("Run in emulator: $value")
330
+ val output: String = if (description.isEmpty()) "Tespit edilemedi" else description
331
+ sendLogEvent("Run in emulator description: $output")
297
332
  }
298
333
 
299
334
  override fun onIntegrityCheck(b: Boolean) {
@@ -304,50 +339,62 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
304
339
  sendLogEvent("Keyloggers detected: $p0")
305
340
  }
306
341
 
307
- override fun onRootedDeviceDetected(value: Boolean) {
308
- sendLogEvent("Rooted device detected: $value")
342
+ override fun onRootedDeviceDetected(value: Boolean, description: String) {
343
+ sendLogEvent("Rooted device detected: $value")
344
+ val output: String = if (description.isEmpty()) "Tespit edilemedi" else description
345
+ sendLogEvent("Rooted device description: $output")
309
346
  }
310
347
 
311
348
  override fun onThreatDetected(infectedApps: ArrayList<InfectedApp>) {
312
- sendLogEvent("Threat detected: $infectedApps")
349
+ sendLogEvent("Threat detected: $infectedApps")
350
+
351
+ if (ConstHelper.DetectedThreats == null) {
352
+ ConstHelper.DetectedThreats = ArrayList<String>()
353
+ }
313
354
 
314
- if (ConstHelper.DetectedThreats == null) {
315
- ConstHelper.DetectedThreats = ArrayList<String>()
355
+ for (infectedApp in infectedApps) {
356
+ if (ConstHelper.DetectedThreats.contains(infectedApp.getPackageName())) {
357
+ continue
316
358
  }
317
359
 
318
- for (infectedApp in infectedApps) {
319
- if (ConstHelper.DetectedThreats.contains(infectedApp.getPackageName())) {
320
- continue
360
+ if (infectedApp.getPackageName() != null) {
361
+ val detectedTypes = StringBuilder()
362
+ val malwareEntries: ArrayList<MalwareEntry>? = infectedApp.getMalwareTypes()
363
+
364
+ if (malwareEntries != null && malwareEntries.isNotEmpty()) {
365
+ for (entry in malwareEntries) {
366
+ detectedTypes.append(entry.getMalwareType().name)
367
+ .append(" - ").append("%")
368
+ .append(String.format(Locale.US, "%.2f", entry.getPercentage()))
369
+ .append(", ")
321
370
  }
371
+ }
322
372
 
323
- if (infectedApp.getPackageName() != null) {
324
- sendLogEvent(
325
- "Threat detected: ${infectedApp.getPackageName()} - ${infectedApp.getThreatName()}")
326
- //Uninstall when app infected
327
- val uninstallHandler = UninstallHandler(
328
- getCurrentActivity() ?: reactApplicationContext,
329
- infectedApp.getName(),
330
- infectedApp.getPackageName(),
331
- infectedApp.getVersion(),
332
- infectedApp.getThreatName()
333
- )
334
-
335
- CoroutineScope(Dispatchers.Main).launch {
336
- try {
337
- uninstallHandler.showDialog()
338
- sendLogEvent("Uninstall dialog shown for ${infectedApp.getPackageName()}")
339
- } catch (e: Exception) {
340
- sendLogEvent("Error showing uninstall dialog: ${e.message}")
341
- }
342
- }
373
+ if (!infectedApp.getPackageName().isNullOrEmpty()) {
374
+ sendLogEvent("Threat detected: ${infectedApp.getPackageName()} - ${infectedApp.getThreatName()} - [${detectedTypes}]")
375
+ } else {
376
+ sendLogEvent("Threat detected: ${infectedApp.getThreatName()} - ${infectedApp.getName()}")
377
+ }
343
378
 
344
- } else {
345
- sendLogEvent(
346
- "Threat detected: ${infectedApp.getName()} - ${infectedApp.getThreatName()}")
379
+ CoroutineScope(Dispatchers.Main).launch {
380
+ try {
381
+ val uninstallHandler = UninstallHandler(
382
+ context = reactApplicationContext,
383
+ installedAppName = infectedApp.getName() ?: "Unknown App",
384
+ installedAppPackageName = infectedApp.getPackageName(),
385
+ installedAppVersion = infectedApp.getVersion() ?: "Unknown Version",
386
+ threatName = infectedApp.getThreatName() ?: "Unknown Threat"
387
+ )
388
+ uninstallHandler.showDialog()
389
+ sendLogEvent("Uninstall dialog shown for ${infectedApp.getPackageName()}")
390
+ } catch (e: Exception) {
391
+ sendLogEvent("Error showing uninstall dialog: ${e.message}")
347
392
  }
348
-
349
-
393
+ }
394
+ } else {
395
+ sendLogEvent("Threat detected: ${infectedApp.getName()} - ${infectedApp.getThreatName()}")
350
396
  }
397
+ }
351
398
  }
352
399
 
353
400
  override fun onIncomingCall(state: Int, phoneNumber: String?, incomingNumber: IncomingNumber?) {
@@ -361,7 +408,7 @@ class CProtEadModuleModule(reactContext: ReactApplicationContext) :
361
408
  if (incomingNumber != null) {
362
409
  isSpam = incomingNumber.isSpam
363
410
  }
364
-
411
+
365
412
  sendLogEvent("Incoming Call detected: $phoneNumber -> Is Spam: $isSpam")
366
413
  }
367
414
 
package/package.json CHANGED
@@ -1,179 +1,191 @@
1
- {
2
- "name": "com.cprot.ead",
3
- "version": "1.0.5764",
4
- "description": "c-prot ead android module",
5
- "source": "./src/index.tsx",
6
- "main": "./lib/commonjs/index.js",
7
- "module": "./lib/module/index.js",
8
- "exports": {
9
- ".": {
10
- "import": {
11
- "types": "./lib/typescript/module/src/index.d.ts",
12
- "default": "./lib/module/index.js"
13
- },
14
- "require": {
15
- "types": "./lib/typescript/commonjs/src/index.d.ts",
16
- "default": "./lib/commonjs/index.js"
17
- }
18
- }
19
- },
20
- "files": [
21
- "src",
22
- "lib",
23
- "android",
24
- "!ios/build",
25
- "!android/build",
26
- "!android/gradle",
27
- "!android/gradlew",
28
- "!android/gradlew.bat",
29
- "!android/local.properties",
30
- "!**/__tests__",
31
- "!**/__fixtures__",
32
- "!**/__mocks__",
33
- "!**/.*"
34
- ],
35
- "scripts": {
36
- "example": "yarn workspace c-prot-ead-module-example",
37
- "test": "jest",
38
- "typecheck": "tsc",
39
- "lint": "eslint \"**/*.{js,ts,tsx}\"",
40
- "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
41
- "prepare": "bob build",
42
- "release": "release-it"
43
- },
44
- "keywords": [
45
- "react-native",
46
- "android"
47
- ],
48
- "author": "C-Prot",
49
- "license": "MIT",
50
- "bugs": {
51
- "url": "https://www.npmjs.com/issues"
52
- },
53
- "homepage": "https://www.npmjs.com#readme",
54
- "publishConfig": {
55
- "registry": "https://registry.npmjs.org/"
56
- },
57
- "devDependencies": {
58
- "@commitlint/config-conventional": "^17.0.2",
59
- "@evilmartians/lefthook": "^1.5.0",
60
- "@react-native/eslint-config": "0.74.0",
61
- "@release-it/conventional-changelog": "^5.0.0",
62
- "@types/jest": "^29.5.5",
63
- "@types/react": "^18.2.6",
64
- "commitlint": "^17.0.2",
65
- "del-cli": "^5.1.0",
66
- "eslint": "^8.51.0",
67
- "eslint-config-prettier": "^9.0.0",
68
- "eslint-plugin-prettier": "^5.0.1",
69
- "jest": "^29.7.0",
70
- "prettier": "^3.0.3",
71
- "react": "18.2.0",
72
- "react-native": "0.74.5",
73
- "react-native-builder-bob": "^0.30.0",
74
- "release-it": "^15.0.0",
75
- "turbo": "^1.10.7",
76
- "typescript": "^5.2.2"
77
- },
78
- "resolutions": {
79
- "@types/react": "^18.2.44"
80
- },
81
- "peerDependencies": {
82
- "react": "*",
83
- "react-native": "*"
84
- },
85
- "workspaces": [
86
- "example"
87
- ],
88
- "packageManager": "yarn@3.6.1",
89
- "jest": {
90
- "preset": "react-native",
91
- "modulePathIgnorePatterns": [
92
- "<rootDir>/example/node_modules",
93
- "<rootDir>/lib/"
94
- ]
95
- },
96
- "commitlint": {
97
- "extends": [
98
- "@commitlint/config-conventional"
99
- ]
100
- },
101
- "release-it": {
102
- "git": {
103
- "commitMessage": "chore: release ${version}",
104
- "tagName": "v${version}"
105
- },
106
- "npm": {
107
- "publish": true
108
- },
109
- "github": {
110
- "release": true
111
- },
112
- "plugins": {
113
- "@release-it/conventional-changelog": {
114
- "preset": "angular"
115
- }
116
- }
117
- },
118
- "eslintConfig": {
119
- "root": true,
120
- "extends": [
121
- "@react-native",
122
- "prettier"
123
- ],
124
- "rules": {
125
- "react/react-in-jsx-scope": "off",
126
- "prettier/prettier": [
127
- "error",
128
- {
129
- "quoteProps": "consistent",
130
- "singleQuote": true,
131
- "tabWidth": 2,
132
- "trailingComma": "es5",
133
- "useTabs": false
134
- }
135
- ]
136
- }
137
- },
138
- "eslintIgnore": [
139
- "node_modules/",
140
- "lib/"
141
- ],
142
- "prettier": {
143
- "quoteProps": "consistent",
144
- "singleQuote": true,
145
- "tabWidth": 2,
146
- "trailingComma": "es5",
147
- "useTabs": false
148
- },
149
- "react-native-builder-bob": {
150
- "source": "src",
151
- "output": "lib",
152
- "targets": [
153
- [
154
- "commonjs",
155
- {
156
- "esm": true
157
- }
158
- ],
159
- [
160
- "module",
161
- {
162
- "esm": true
163
- }
164
- ],
165
- [
166
- "typescript",
167
- {
168
- "project": "tsconfig.build.json",
169
- "esm": true
170
- }
171
- ]
172
- ]
173
- },
174
- "create-react-native-library": {
175
- "type": "module-legacy",
176
- "languages": "kotlin-objc",
177
- "version": "0.41.0"
178
- }
179
- }
1
+ {
2
+ "name": "com.cprot.ead",
3
+ "version": "1.0.6788",
4
+ "description": "c-prot ead android module",
5
+ "source": "./src/index.tsx",
6
+ "main": "lib/commonjs/index.js",
7
+ "module": "lib/module/index.js",
8
+ "exports": {
9
+ ".": {
10
+ "import": {
11
+ "types": "./lib/typescript/module/src/index.d.ts",
12
+ "default": "./lib/module/index.js"
13
+ },
14
+ "require": {
15
+ "types": "./lib/typescript/commonjs/src/index.d.ts",
16
+ "default": "./lib/commonjs/index.js"
17
+ }
18
+ }
19
+ },
20
+ "files": [
21
+ "src",
22
+ "lib",
23
+ "!**/__tests__",
24
+ "!**/__fixtures__",
25
+ "!**/__mocks__",
26
+ "android",
27
+ "!ios/build",
28
+ "!android/build",
29
+ "!android/gradle",
30
+ "!android/gradlew",
31
+ "!android/gradlew.bat",
32
+ "!android/local.properties",
33
+ "!**/.*"
34
+ ],
35
+ "scripts": {
36
+ "example": "yarn workspace c-prot-ead-module-example",
37
+ "test": "jest",
38
+ "typecheck": "tsc",
39
+ "lint": "eslint \"**/*.{js,ts,tsx}\"",
40
+ "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
41
+ "prepare": "bob build",
42
+ "release": "release-it"
43
+ },
44
+ "keywords": [
45
+ "react-native",
46
+ "android"
47
+ ],
48
+ "author": "C-Prot",
49
+ "license": "MIT",
50
+ "bugs": {
51
+ "url": "https://www.npmjs.com/issues"
52
+ },
53
+ "homepage": "https://www.npmjs.com#readme",
54
+ "publishConfig": {
55
+ "registry": "https://registry.npmjs.org/"
56
+ },
57
+ "devDependencies": {
58
+ "@commitlint/config-conventional": "^17.0.2",
59
+ "@evilmartians/lefthook": "^1.5.0",
60
+ "@react-native-community/bob": "^0.17.1",
61
+ "@react-native/eslint-config": "0.74.0",
62
+ "@release-it/conventional-changelog": "^5.0.0",
63
+ "@types/jest": "^29.5.5",
64
+ "@types/react": "^18.2.6",
65
+ "commitlint": "^17.0.2",
66
+ "del-cli": "^5.1.0",
67
+ "eslint": "^8.51.0",
68
+ "eslint-config-prettier": "^9.0.0",
69
+ "eslint-plugin-prettier": "^5.0.1",
70
+ "jest": "^29.7.0",
71
+ "prettier": "^3.0.3",
72
+ "react": "18.2.0",
73
+ "react-native": "0.74.5",
74
+ "react-native-builder-bob": "^0.30.0",
75
+ "release-it": "^15.0.0",
76
+ "turbo": "^1.10.7",
77
+ "typescript": "^5.7.2"
78
+ },
79
+ "resolutions": {
80
+ "@types/react": "^18.2.44"
81
+ },
82
+ "peerDependencies": {
83
+ "react": "*",
84
+ "react-native": "*"
85
+ },
86
+ "workspaces": [
87
+ "example"
88
+ ],
89
+ "packageManager": "yarn@3.6.1",
90
+ "jest": {
91
+ "preset": "react-native",
92
+ "modulePathIgnorePatterns": [
93
+ "<rootDir>/example/node_modules",
94
+ "<rootDir>/lib/"
95
+ ]
96
+ },
97
+ "commitlint": {
98
+ "extends": [
99
+ "@commitlint/config-conventional"
100
+ ]
101
+ },
102
+ "release-it": {
103
+ "git": {
104
+ "commitMessage": "chore: release ${version}",
105
+ "tagName": "v${version}"
106
+ },
107
+ "npm": {
108
+ "publish": true
109
+ },
110
+ "github": {
111
+ "release": true
112
+ },
113
+ "plugins": {
114
+ "@release-it/conventional-changelog": {
115
+ "preset": "angular"
116
+ }
117
+ }
118
+ },
119
+ "eslintConfig": {
120
+ "root": true,
121
+ "extends": [
122
+ "@react-native",
123
+ "prettier"
124
+ ],
125
+ "rules": {
126
+ "react/react-in-jsx-scope": "off",
127
+ "prettier/prettier": [
128
+ "error",
129
+ {
130
+ "quoteProps": "consistent",
131
+ "singleQuote": true,
132
+ "tabWidth": 2,
133
+ "trailingComma": "es5",
134
+ "useTabs": false
135
+ }
136
+ ]
137
+ }
138
+ },
139
+ "eslintIgnore": [
140
+ "node_modules/",
141
+ "lib/"
142
+ ],
143
+ "prettier": {
144
+ "quoteProps": "consistent",
145
+ "singleQuote": true,
146
+ "tabWidth": 2,
147
+ "trailingComma": "es5",
148
+ "useTabs": false
149
+ },
150
+ "react-native-builder-bob": {
151
+ "source": "src",
152
+ "output": "lib",
153
+ "targets": [
154
+ [
155
+ "commonjs",
156
+ {
157
+ "esm": true
158
+ }
159
+ ],
160
+ [
161
+ "module",
162
+ {
163
+ "esm": true
164
+ }
165
+ ],
166
+ [
167
+ "typescript",
168
+ {
169
+ "project": "tsconfig.build.json",
170
+ "esm": true
171
+ }
172
+ ]
173
+ ]
174
+ },
175
+ "create-react-native-library": {
176
+ "type": "module-legacy",
177
+ "languages": "kotlin-objc",
178
+ "version": "0.41.0"
179
+ },
180
+ "react-native": "src/index.tsx",
181
+ "types": "lib/typescript/commonjs/src/index.d.ts",
182
+ "@react-native-community/bob": {
183
+ "source": "src",
184
+ "output": "lib",
185
+ "targets": [
186
+ "commonjs",
187
+ "module",
188
+ "typescript"
189
+ ]
190
+ }
191
+ }