rnww-plugin-wifi 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +841 -0
- package/lib/bridge/background-bridge.d.ts +22 -0
- package/lib/bridge/background-bridge.d.ts.map +1 -0
- package/lib/bridge/background-bridge.js +493 -0
- package/lib/bridge/index.d.ts +6 -0
- package/lib/bridge/index.d.ts.map +1 -0
- package/lib/bridge/index.js +23 -0
- package/lib/bridge/wifi-bridge.d.ts +16 -0
- package/lib/bridge/wifi-bridge.d.ts.map +1 -0
- package/lib/bridge/wifi-bridge.js +202 -0
- package/lib/modules/index.d.ts +41 -0
- package/lib/modules/index.d.ts.map +1 -0
- package/lib/modules/index.js +150 -0
- package/lib/types/background-module.d.ts +291 -0
- package/lib/types/background-module.d.ts.map +1 -0
- package/lib/types/background-module.js +5 -0
- package/lib/types/bridge.d.ts +22 -0
- package/lib/types/bridge.d.ts.map +1 -0
- package/lib/types/bridge.js +5 -0
- package/lib/types/index.d.ts +7 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +5 -0
- package/lib/types/platform.d.ts +10 -0
- package/lib/types/platform.d.ts.map +1 -0
- package/lib/types/platform.js +2 -0
- package/lib/types/wifi-module.d.ts +146 -0
- package/lib/types/wifi-module.d.ts.map +1 -0
- package/lib/types/wifi-module.js +6 -0
- package/package.json +42 -0
- package/src/modules/android/build.gradle +64 -0
- package/src/modules/android/src/main/AndroidManifest.xml +28 -0
- package/src/modules/android/src/main/java/expo/modules/customwifi/WifiModule.kt +517 -0
- package/src/modules/android/src/main/java/expo/modules/customwifi/WifiStateReceiver.kt +46 -0
- package/src/modules/expo-module.config.json +9 -0
- package/src/modules/index.ts +166 -0
- package/src/modules/ios/WifiModule.swift +399 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 브릿지 통신 추상화 인터페이스
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 브릿지 통신 인터페이스
|
|
6
|
+
* 기존 프로젝트와의 호환성을 위해 타입을 느슨하게 설정
|
|
7
|
+
*/
|
|
8
|
+
export interface IBridge {
|
|
9
|
+
/**
|
|
10
|
+
* 네이티브에서 호출할 수 있는 핸들러를 등록합니다
|
|
11
|
+
* @param eventName 이벤트 이름
|
|
12
|
+
* @param handler 핸들러 함수
|
|
13
|
+
*/
|
|
14
|
+
registerHandler(eventName: string, handler: any): void;
|
|
15
|
+
/**
|
|
16
|
+
* 웹으로 메시지를 전송합니다
|
|
17
|
+
* @param eventName 이벤트 이름
|
|
18
|
+
* @param data 전송할 데이터
|
|
19
|
+
*/
|
|
20
|
+
sendToWeb(eventName: string, data: any): void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/types/bridge.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB;;;;OAIG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IAEvD;;;;OAIG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;CAC/C"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type exports for rnww-plugin-wifi
|
|
3
|
+
*/
|
|
4
|
+
export type { IBridge } from './bridge';
|
|
5
|
+
export type { IPlatform } from './platform';
|
|
6
|
+
export type { WifiInfo, WifiNetwork, WifiSecurityType, WifiState, ConnectionState, PermissionStatus, ConnectOptions, WifiResult, WifiInfoResult, WifiListResult, WifiStateResult, ConnectResult, WifiErrorCode, WifiStateChangeEvent, } from './wifi-module';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,YAAY,EACV,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACb,aAAa,EACb,oBAAoB,GACrB,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,EAAE,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,KAAK,CAAC;CACrD"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WiFi Module Types
|
|
3
|
+
* WiFi 관련 타입 정의
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 현재 연결된 WiFi 정보
|
|
7
|
+
*/
|
|
8
|
+
export interface WifiInfo {
|
|
9
|
+
/** WiFi SSID (네트워크 이름) */
|
|
10
|
+
ssid: string | null;
|
|
11
|
+
/** WiFi BSSID (MAC 주소) */
|
|
12
|
+
bssid: string | null;
|
|
13
|
+
/** 신호 강도 (dBm, 일반적으로 -100 ~ 0) */
|
|
14
|
+
rssi: number | null;
|
|
15
|
+
/** 신호 강도 레벨 (0-4 또는 0-100) */
|
|
16
|
+
signalLevel: number | null;
|
|
17
|
+
/** 주파수 (MHz) */
|
|
18
|
+
frequency: number | null;
|
|
19
|
+
/** 링크 속도 (Mbps) */
|
|
20
|
+
linkSpeed: number | null;
|
|
21
|
+
/** IP 주소 */
|
|
22
|
+
ipAddress: string | null;
|
|
23
|
+
/** 연결 상태 */
|
|
24
|
+
isConnected: boolean;
|
|
25
|
+
/** 네트워크 ID (Android) */
|
|
26
|
+
networkId?: number;
|
|
27
|
+
/** 보안 타입 */
|
|
28
|
+
security?: WifiSecurityType;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 스캔된 WiFi 네트워크 정보
|
|
32
|
+
*/
|
|
33
|
+
export interface WifiNetwork {
|
|
34
|
+
/** WiFi SSID */
|
|
35
|
+
ssid: string;
|
|
36
|
+
/** WiFi BSSID */
|
|
37
|
+
bssid: string;
|
|
38
|
+
/** 신호 강도 (dBm) */
|
|
39
|
+
rssi: number;
|
|
40
|
+
/** 신호 강도 레벨 (0-100) */
|
|
41
|
+
signalLevel: number;
|
|
42
|
+
/** 주파수 (MHz) */
|
|
43
|
+
frequency: number;
|
|
44
|
+
/** 보안 타입 */
|
|
45
|
+
security: WifiSecurityType;
|
|
46
|
+
/** 채널 */
|
|
47
|
+
channel?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* WiFi 보안 타입
|
|
51
|
+
*/
|
|
52
|
+
export type WifiSecurityType = 'OPEN' | 'WEP' | 'WPA' | 'WPA2' | 'WPA3' | 'WPA_WPA2' | 'WPA2_WPA3' | 'UNKNOWN';
|
|
53
|
+
/**
|
|
54
|
+
* WiFi 상태
|
|
55
|
+
*/
|
|
56
|
+
export type WifiState = 'DISABLED' | 'DISABLING' | 'ENABLED' | 'ENABLING' | 'UNKNOWN';
|
|
57
|
+
/**
|
|
58
|
+
* WiFi 연결 상태
|
|
59
|
+
*/
|
|
60
|
+
export type ConnectionState = 'DISCONNECTED' | 'CONNECTING' | 'CONNECTED' | 'DISCONNECTING' | 'UNKNOWN';
|
|
61
|
+
/**
|
|
62
|
+
* 권한 상태
|
|
63
|
+
*/
|
|
64
|
+
export interface PermissionStatus {
|
|
65
|
+
/** 위치 권한 허용 여부 */
|
|
66
|
+
locationGranted: boolean;
|
|
67
|
+
/** WiFi 정보 접근 가능 여부 */
|
|
68
|
+
canAccessWifiInfo: boolean;
|
|
69
|
+
/** 필요한 권한 목록 */
|
|
70
|
+
requiredPermissions: string[];
|
|
71
|
+
/** 권한 상태 상세 */
|
|
72
|
+
details?: {
|
|
73
|
+
fineLocation?: boolean;
|
|
74
|
+
coarseLocation?: boolean;
|
|
75
|
+
backgroundLocation?: boolean;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* WiFi 연결 요청 옵션
|
|
80
|
+
*/
|
|
81
|
+
export interface ConnectOptions {
|
|
82
|
+
/** WiFi SSID */
|
|
83
|
+
ssid: string;
|
|
84
|
+
/** 비밀번호 (OPEN 네트워크의 경우 생략) */
|
|
85
|
+
password?: string;
|
|
86
|
+
/** 보안 타입 (자동 감지 시 생략) */
|
|
87
|
+
security?: WifiSecurityType;
|
|
88
|
+
/** 숨겨진 네트워크 여부 */
|
|
89
|
+
isHidden?: boolean;
|
|
90
|
+
/** 타임아웃 (ms) */
|
|
91
|
+
timeout?: number;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* 일반 결과 타입
|
|
95
|
+
*/
|
|
96
|
+
export interface WifiResult {
|
|
97
|
+
success: boolean;
|
|
98
|
+
error?: string;
|
|
99
|
+
errorCode?: WifiErrorCode;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* WiFi 정보 조회 결과
|
|
103
|
+
*/
|
|
104
|
+
export interface WifiInfoResult extends WifiResult {
|
|
105
|
+
data?: WifiInfo;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* WiFi 목록 조회 결과
|
|
109
|
+
*/
|
|
110
|
+
export interface WifiListResult extends WifiResult {
|
|
111
|
+
data?: WifiNetwork[];
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* WiFi 상태 결과
|
|
115
|
+
*/
|
|
116
|
+
export interface WifiStateResult extends WifiResult {
|
|
117
|
+
wifiState?: WifiState;
|
|
118
|
+
isEnabled?: boolean;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 연결 결과
|
|
122
|
+
*/
|
|
123
|
+
export interface ConnectResult extends WifiResult {
|
|
124
|
+
/** 연결된 네트워크 정보 */
|
|
125
|
+
wifiInfo?: WifiInfo;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* WiFi 에러 코드
|
|
129
|
+
*/
|
|
130
|
+
export type WifiErrorCode = 'PERMISSION_DENIED' | 'WIFI_DISABLED' | 'NETWORK_NOT_FOUND' | 'AUTHENTICATION_FAILED' | 'CONNECTION_FAILED' | 'TIMEOUT' | 'INVALID_SSID' | 'INVALID_PASSWORD' | 'NOT_SUPPORTED' | 'MODULE_NOT_AVAILABLE' | 'UNKNOWN';
|
|
131
|
+
/**
|
|
132
|
+
* WiFi 상태 변경 이벤트
|
|
133
|
+
*/
|
|
134
|
+
export interface WifiStateChangeEvent {
|
|
135
|
+
/** 이벤트 타입 */
|
|
136
|
+
type: 'WIFI_STATE_CHANGED' | 'CONNECTION_STATE_CHANGED' | 'NETWORK_INFO_CHANGED';
|
|
137
|
+
/** WiFi 상태 */
|
|
138
|
+
wifiState?: WifiState;
|
|
139
|
+
/** 연결 상태 */
|
|
140
|
+
connectionState?: ConnectionState;
|
|
141
|
+
/** WiFi 정보 (연결된 경우) */
|
|
142
|
+
wifiInfo?: WifiInfo;
|
|
143
|
+
/** 타임스탬프 */
|
|
144
|
+
timestamp: number;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=wifi-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wifi-module.d.ts","sourceRoot":"","sources":["../../src/types/wifi-module.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "rnww-plugin-wifi",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "React Native WebView WiFi Plugin with Expo support - Get WiFi information and manage connections",
|
|
5
|
+
"main": "lib/bridge/index.js",
|
|
6
|
+
"types": "lib/bridge/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"prepare": "npm run build",
|
|
10
|
+
"clean": "rimraf lib"
|
|
11
|
+
},
|
|
12
|
+
"keywords": [
|
|
13
|
+
"react-native",
|
|
14
|
+
"expo",
|
|
15
|
+
"wifi",
|
|
16
|
+
"network",
|
|
17
|
+
"webview",
|
|
18
|
+
"bridge",
|
|
19
|
+
"expo-module"
|
|
20
|
+
],
|
|
21
|
+
"author": "",
|
|
22
|
+
"license": "MIT",
|
|
23
|
+
"files": [
|
|
24
|
+
"lib/",
|
|
25
|
+
"src/modules/expo-module.config.json",
|
|
26
|
+
"src/modules/index.ts",
|
|
27
|
+
"src/modules/android/build.gradle",
|
|
28
|
+
"src/modules/android/src/",
|
|
29
|
+
"src/modules/ios/",
|
|
30
|
+
"README.md"
|
|
31
|
+
],
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"expo": "*",
|
|
34
|
+
"expo-modules-core": "*"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/react": "^19.0.0",
|
|
38
|
+
"@types/react-native": "^0.73.0",
|
|
39
|
+
"rimraf": "^5.0.10",
|
|
40
|
+
"typescript": "^5.9.3"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
apply plugin: 'com.android.library'
|
|
2
|
+
apply plugin: 'kotlin-android'
|
|
3
|
+
apply plugin: 'maven-publish'
|
|
4
|
+
|
|
5
|
+
group = 'expo.modules.customwifi'
|
|
6
|
+
version = '1.0.0'
|
|
7
|
+
|
|
8
|
+
buildscript {
|
|
9
|
+
def expoModulesCoreProject = rootProject.findProject(":expo-modules-core")
|
|
10
|
+
if (expoModulesCoreProject != null) {
|
|
11
|
+
def expoModulesCorePlugin = new File(expoModulesCoreProject.projectDir.absolutePath, "ExpoModulesCorePlugin.gradle")
|
|
12
|
+
if (expoModulesCorePlugin.exists()) {
|
|
13
|
+
apply from: expoModulesCorePlugin
|
|
14
|
+
applyKotlinExpoModulesCorePlugin()
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
afterEvaluate {
|
|
20
|
+
publishing {
|
|
21
|
+
publications {
|
|
22
|
+
release(MavenPublication) {
|
|
23
|
+
from components.release
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
repositories {
|
|
27
|
+
maven {
|
|
28
|
+
url = mavenLocal().url
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
android {
|
|
35
|
+
namespace "expo.modules.customwifi"
|
|
36
|
+
compileSdkVersion safeExtGet("compileSdkVersion", 34)
|
|
37
|
+
|
|
38
|
+
defaultConfig {
|
|
39
|
+
minSdkVersion safeExtGet("minSdkVersion", 23)
|
|
40
|
+
targetSdkVersion safeExtGet("targetSdkVersion", 34)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
compileOptions {
|
|
44
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
45
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
kotlinOptions {
|
|
49
|
+
jvmTarget = JavaVersion.VERSION_17
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
repositories {
|
|
54
|
+
mavenCentral()
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
dependencies {
|
|
58
|
+
implementation project(':expo-modules-core')
|
|
59
|
+
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion"
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
def safeExtGet(prop, fallback) {
|
|
63
|
+
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
|
64
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
2
|
+
<!-- WiFi 상태 확인 -->
|
|
3
|
+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
|
4
|
+
|
|
5
|
+
<!-- WiFi 상태 변경 -->
|
|
6
|
+
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
|
7
|
+
|
|
8
|
+
<!-- 네트워크 상태 확인 -->
|
|
9
|
+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
10
|
+
|
|
11
|
+
<!-- 위치 권한 (Android 8.0+ 에서 SSID 접근에 필요) -->
|
|
12
|
+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
13
|
+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
14
|
+
|
|
15
|
+
<application>
|
|
16
|
+
<!-- WiFi State Change Receiver -->
|
|
17
|
+
<receiver
|
|
18
|
+
android:name="expo.modules.customwifi.WifiStateReceiver"
|
|
19
|
+
android:enabled="true"
|
|
20
|
+
android:exported="false">
|
|
21
|
+
<intent-filter>
|
|
22
|
+
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
|
|
23
|
+
<action android:name="android.net.wifi.STATE_CHANGE" />
|
|
24
|
+
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
|
|
25
|
+
</intent-filter>
|
|
26
|
+
</receiver>
|
|
27
|
+
</application>
|
|
28
|
+
</manifest>
|