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.
Files changed (36) hide show
  1. package/README.md +841 -0
  2. package/lib/bridge/background-bridge.d.ts +22 -0
  3. package/lib/bridge/background-bridge.d.ts.map +1 -0
  4. package/lib/bridge/background-bridge.js +493 -0
  5. package/lib/bridge/index.d.ts +6 -0
  6. package/lib/bridge/index.d.ts.map +1 -0
  7. package/lib/bridge/index.js +23 -0
  8. package/lib/bridge/wifi-bridge.d.ts +16 -0
  9. package/lib/bridge/wifi-bridge.d.ts.map +1 -0
  10. package/lib/bridge/wifi-bridge.js +202 -0
  11. package/lib/modules/index.d.ts +41 -0
  12. package/lib/modules/index.d.ts.map +1 -0
  13. package/lib/modules/index.js +150 -0
  14. package/lib/types/background-module.d.ts +291 -0
  15. package/lib/types/background-module.d.ts.map +1 -0
  16. package/lib/types/background-module.js +5 -0
  17. package/lib/types/bridge.d.ts +22 -0
  18. package/lib/types/bridge.d.ts.map +1 -0
  19. package/lib/types/bridge.js +5 -0
  20. package/lib/types/index.d.ts +7 -0
  21. package/lib/types/index.d.ts.map +1 -0
  22. package/lib/types/index.js +5 -0
  23. package/lib/types/platform.d.ts +10 -0
  24. package/lib/types/platform.d.ts.map +1 -0
  25. package/lib/types/platform.js +2 -0
  26. package/lib/types/wifi-module.d.ts +146 -0
  27. package/lib/types/wifi-module.d.ts.map +1 -0
  28. package/lib/types/wifi-module.js +6 -0
  29. package/package.json +42 -0
  30. package/src/modules/android/build.gradle +64 -0
  31. package/src/modules/android/src/main/AndroidManifest.xml +28 -0
  32. package/src/modules/android/src/main/java/expo/modules/customwifi/WifiModule.kt +517 -0
  33. package/src/modules/android/src/main/java/expo/modules/customwifi/WifiStateReceiver.kt +46 -0
  34. package/src/modules/expo-module.config.json +9 -0
  35. package/src/modules/index.ts +166 -0
  36. 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,5 @@
1
+ "use strict";
2
+ /**
3
+ * 브릿지 통신 추상화 인터페이스
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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,5 @@
1
+ "use strict";
2
+ /**
3
+ * Type exports for rnww-plugin-wifi
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 플랫폼 추상화 인터페이스
3
+ */
4
+ export interface IPlatform {
5
+ /**
6
+ * 현재 실행 중인 플랫폼
7
+ */
8
+ OS: 'ios' | 'android' | 'windows' | 'macos' | 'web';
9
+ }
10
+ //# sourceMappingURL=platform.d.ts.map
@@ -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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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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"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * WiFi Module Types
4
+ * WiFi 관련 타입 정의
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
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>