{"_id":"@bingtang-rn/react-native-dns-lookup","_rev":"2-7392e83bd30d2c960f78d314a44b904d","name":"@bingtang-rn/react-native-dns-lookup","dist-tags":{"latest":"1.0.7"},"versions":{"1.0.6":{"name":"@bingtang-rn/react-native-dns-lookup","version":"1.0.6","keywords":["react-native","harmony","harmonyos","react-native-dns-lookup"],"license":"MIT","_id":"@bingtang-rn/react-native-dns-lookup@1.0.6","maintainers":[{"name":"luyizouyuan","email":"189605613@qq.com"}],"homepage":"https://gitcode.com/rn_ohos_plugin/react_native_dns_lookup","dist":{"shasum":"aea6dece19c034c61eca18da257e798349127122","tarball":"https://registry.npmjs.org/@bingtang-rn/react-native-dns-lookup/-/react-native-dns-lookup-1.0.6.tgz","fileCount":31,"integrity":"sha512-xmicF6KmBkMdegZGs50iduzH3me4/nzyUEfoQic6YTq6LYxBbQDXslBjj6di7f90b5qXbrZ3I7/XhSfRUA43uQ==","signatures":[{"sig":"MEUCIQCUwumYpbh5LdAmz3pPYvP0K7cRNm1SqeEBgFez56eQ3AIgP4kYeNIwzHbt+1V8w07It9EgkKST6P3TcBYrvC/OFkI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36216},"main":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18"},"gitHead":"572ecacfc4f280fecd4843ebf6da6efcf73a074e","harmony":{"alias":"react-native-dns-lookup","autolinking":{"ohPackageName":"@oh-rn/react-native-dns-lookup","cppPackageClassName":"DnsLookupPackage","etsPackageClassName":"DnsLookupPackage","cmakeLibraryTargetName":"dns_lookup"},"codegenConfig":[{"version":1,"specPaths":["./src/specs/v1"]}]},"private":false,"scripts":{"prepare":"echo skip","codegen-lib":"react-native codegen-harmony --cpp-output-path ./harmony/dns_lookup/src/main/cpp/generated --ets-output-path ./harmony/dns_lookup/src/main/ets/generated"},"_npmUser":{"name":"luyizouyuan","email":"189605613@qq.com"},"repository":{"url":"https://gitcode.com/rn_ohos_plugin/react_native_dns_lookup","type":"git"},"_npmVersion":"11.12.1","description":"适配鸿蒙版本，提供react_native_dns_lookup组件。","directories":{},"_nodeVersion":"24.15.0","react-native":"./src/index.ts","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.3","metro":"^0.81.0","react":"18.2.0","typescript":"5.0.4","@types/react":"18.2.79","react-native":"0.72.5","@react-native/typescript-config":"0.79.5","@react-native-oh/react-native-harmony-cli":"^0.77.50"},"peerDependencies":{"react-native":">=0.72"},"_npmOperationalInternal":{"tmp":"tmp/react-native-dns-lookup_1.0.6_1785417866104_0.16636250846108536","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"_id":"@bingtang-rn/react-native-dns-lookup@1.0.7","dist":{"shasum":"7e1bc80e516299a6d58f228aa0ff1a9d0b34fd52","tarball":"https://registry.npmjs.org/@bingtang-rn/react-native-dns-lookup/-/react-native-dns-lookup-1.0.7.tgz","fileCount":31,"integrity":"sha512-vfaQNnd0jzdbZPKskhTjioXnOs7hyrI3eZA16w9uoSoGlYQm/pjAcNu3Lb0RsnlomdKJzwX0hM4POqk4wbKXLA==","signatures":[{"sig":"MEQCIFRAx0OgJIYdizmd2e8GckxmT5SdtFLpqIAyuY/5VdrmAiB+8wyNYa6QRsofsnlJrT4vUZwSUPMYwIoR7rr6Ivlv1w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIGldPJ31WAGPsAJ5x6OVJzhzXLCMKGlm+O3QGoY26glFAiEAm+HOO2Uv1so1yxV4PRlT31rASlvTucPvnA8wga9wJBk="}],"unpackedSize":36323},"main":"./src/index.ts","name":"@bingtang-rn/react-native-dns-lookup","_from":"file:bingtang-rn-react-native-dns-lookup-1.0.7.tgz","module":"./src/index.ts","engines":{"node":">=18"},"harmony":{"alias":"react-native-dns-lookup","autolinking":{"ohPackageName":"@bingtang-rn/react-native-dns-lookup","cppPackageClassName":"DnsLookupPackage","etsPackageClassName":"DnsLookupPackage","cmakeLibraryTargetName":"dns_lookup"},"codegenConfig":[{"version":1,"specPaths":["./src/specs/v1"]}]},"license":"MIT","private":false,"scripts":{"prepare":"echo skip","codegen-lib":"react-native codegen-harmony --cpp-output-path ./harmony/dns_lookup/src/main/cpp/generated --ets-output-path ./harmony/dns_lookup/src/main/ets/generated"},"version":"1.0.7","_npmUser":{"name":"luyizouyuan","email":"189605613@qq.com"},"homepage":"https://gitcode.com/rn_ohos_plugin/react_native_dns_lookup","keywords":["react-native","harmony","harmonyos","react-native-dns-lookup"],"_resolved":"D:\\code\\rn\\npm\\batch\\react_native_dns_lookup\\bingtang-rn-react-native-dns-lookup-1.0.7.tgz","_integrity":"sha512-vfaQNnd0jzdbZPKskhTjioXnOs7hyrI3eZA16w9uoSoGlYQm/pjAcNu3Lb0RsnlomdKJzwX0hM4POqk4wbKXLA==","repository":{"url":"https://gitcode.com/rn_ohos_plugin/react_native_dns_lookup","type":"git"},"_npmVersion":"11.12.1","description":"适配鸿蒙版本，提供react_native_dns_lookup组件。","directories":{},"maintainers":[{"name":"luyizouyuan","email":"189605613@qq.com"}],"_nodeVersion":"24.15.0","react-native":"./src/index.ts","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.3","metro":"^0.81.0","react":"18.2.0","typescript":"5.0.4","@types/react":"18.2.79","react-native":"0.72.5","@react-native/typescript-config":"0.79.5","@react-native-oh/react-native-harmony-cli":"^0.77.50"},"peerDependencies":{"react-native":">=0.72"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-dns-lookup_1.0.7_1790568733738_0.23654637210320906"}}},"time":{"created":"2026-07-30T13:24:25.892Z","modified":"2026-09-28T04:12:14.016Z","1.0.6":"2026-07-30T13:24:26.261Z","1.0.7":"2026-09-28T04:12:13.832Z"},"license":"MIT","homepage":"https://gitcode.com/rn_ohos_plugin/react_native_dns_lookup","keywords":["react-native","harmony","harmonyos","react-native-dns-lookup"],"repository":{"url":"https://gitcode.com/rn_ohos_plugin/react_native_dns_lookup","type":"git"},"description":"适配鸿蒙版本，提供react_native_dns_lookup组件。","maintainers":[{"name":"luyizouyuan","email":"189605613@qq.com"}],"readme":"# @bingtang-rn/react-native-dns-lookup for HarmonyOS\r\n\r\n本项目基于 [react-native-dns-lookup](https://github.com/tableau/react-native-dns-lookup) 开发，为 React Native 鸿蒙（OpenHarmony）适配版本。如果在使用过程中有任何问题，可以在GitCode提Issue，会及时跟进。issue地址：[issues](https://gitcode.com/rn_ohos_plugin/react_native_dns_lookup/issues)。\r\n\r\n## 版本对应关系\r\n\r\n| 鸿蒙适配包版本 | 原始库版本 | 支持 RN 版本 | Autolink | 编译 API 版本 |\r\n| ------------ | ---------- | ------------ | -------- | ------------- |\r\n| 见发布记录 | 1.0.6 | 0.72+ | 是/否 | API17+ |\r\n\r\n## 安装\r\n\r\n```bash\r\nnpm install @bingtang-rn/react-native-dns-lookup\r\n```\r\n\r\n## 使用\r\n\r\n```tsx\r\nimport { getIpAddressesForHostname } from 'react-native-dns-lookup';\r\n\r\n// 解析主机名到全部 IP 地址字符串数组\r\nconst ips = await getIpAddressesForHostname('github.com');\r\nconsole.log(ips); // ['20.205.243.166', ...]\r\n\r\n// 空串/非法主机名会 reject（BusinessError 含 code+message）\r\ntry {\r\n  await getIpAddressesForHostname('');\r\n} catch (e) {\r\n  // code: 2100001, message: 'Invalid parameter value.'\r\n}\r\n```\r\n\r\n> import 时使用原库名 `'react-native-dns-lookup'`，鸿蒙侧由 RNOH alias 自动映射到 `@bingtang-rn/react-native-dns-lookup`，无需在业务代码中改包名。\r\n\r\n**平台差异**：\r\n- HarmonyOS 底层使用 Network Kit 的 `connection.getAddressesByName`（系统 DNS），返回的 `NetAddress.address` 已是数值化 IP 字符串，与原 Android `InetAddress.getAllByName` / iOS `CFHost + getnameinfo(NI_NUMERICHOST)` 行为对等。\r\n- 错误以 `BusinessError`（含 `code`+`message`）reject 透传：空串 → `2100001`（Invalid parameter value）；`null`/`undefined` → `401`（Parameter error）；未声明 INTERNET → `201`（Permission denied）；网络服务连接失败 → `2100002`；系统内部错误 → `2100003`。原两端是 generic `Error`/`NSError`，鸿蒙端错误信息更结构化。\r\n\r\n**权限要求**：\r\n- 需在 `module.json5` 的 `requestPermissions` 声明 `ohos.permission.INTERNET`（normal 级，安装时授予，无需运行时动态申请）。\r\n- HAR 与宿主 App 均需声明（HAR 已内置声明，宿主 App 在自身 `module.json5` 声明即可）。\r\n\r\n## Link\r\n\r\n| 版本 | 是否支持 Autolink |\r\n|------|------------------|\r\n| 当前版本 | 是/否 |\r\n\r\n如使用版本支持 Autolink 且工程已接入，可跳过手动配置。\r\n\r\n<details>\r\n<summary>Manual Link 配置</summary>\r\n\r\n> **说明**：本模块需要同时在 C++ 侧和 ETS 侧注册 Package。\r\n\r\n### 1. Overrides RN SDK\r\n\r\n在工程根目录 `oh-package.json5` 添加：\r\n\r\n```json\r\n{\r\n  \"overrides\": {\r\n    \"@rnoh/react-native-openharmony\": \"./react_native_openharmony\"\r\n  }\r\n}\r\n```\r\n\r\n### 2. 引入原生端依赖\r\n\r\n打开 `entry/oh-package.json5`，添加：\r\n\r\n```json\r\n\"dependencies\": {\r\n  \"@bingtang-rn/react-native-dns-lookup\": \"file:../../node_modules/@bingtang-rn/react-native-dns-lookup/harmony/dns_lookup.har\"\r\n}\r\n```\r\n\r\n执行 `ohpm install`。\r\n\r\n### 3. 配置 CMakeLists\r\n\r\n打开 `entry/src/main/cpp/CMakeLists.txt`，添加：\r\n\r\n```cmake\r\nset(OH_MODULES \"${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules\")\r\n\r\nadd_subdirectory(\"${OH_MODULES}/@bingtang-rn/react-native-dns-lookup/src/main/cpp\" ./dns_lookup)\r\n\r\ntarget_link_libraries(rnoh_app PUBLIC dns_lookup)\r\n```\r\n\r\n### 4. 注册 Package（C++ 侧）\r\n\r\n打开 `entry/src/main/cpp/PackageProvider.cpp`，添加：\r\n\r\n```cpp\r\n#include \"DnsLookupPackage.h\"\r\n\r\nstd::vector<std::shared_ptr<Package>> PackageProvider::getPackages(Package::Context ctx) {\r\n    return {\r\n        std::make_shared<DnsLookupPackage>(ctx),\r\n    };\r\n}\r\n```\r\n\r\n### 5. 注册 Package（ETS 侧）\r\n\r\n打开 `entry/src/main/ets/RNPackagesFactory.ets`，添加：\r\n\r\n```typescript\r\nimport { DnsLookupPackage } from '@bingtang-rn/react-native-dns-lookup/ts';\r\n\r\nexport function createRNPackages(ctx: RNPackageContext): RNPackage[] {\r\n  return [\r\n    new DnsLookupPackage(ctx),\r\n  ];\r\n}\r\n```\r\n\r\n</details>\r\n\r\n## 属性 / API\r\n\r\n| API | 描述 | 参数 | 返回值 | HarmonyOS 支持 |\r\n|-----|------|------|--------|----------------|\r\n| `getIpAddressesForHostname(hostname)` | 解析主机名到全部 IP 地址字符串数组 | `hostname: string` | `Promise<ReadonlyArray<string>>` | ✅ 完全支持 |\r\n\r\n### 平台差异\r\n- 错误码与原两端不同：HarmonyOS 以标准 `BusinessError`（`code`+`message`）reject，错误码为 `201`/`401`/`2100001`/`2100002`/`2100003`；原两端为通用 `Error`/`NSError`。功能行为对等（成功返回 IP 字符串数组，失败 reject）。\r\n- 非空校验由系统 API 完成：空串 → `2100001`，`null`/`undefined` → `401`；原两端在 native 层显式 `hostname == null` 校验后 reject。效果对等，错误信息更结构化。\r\n\r\n### 未实现功能\r\n无。本库为单方法纯数据型 NativeModule，鸿蒙端 `connection.getAddressesByName` 在能力、返回结构、错误码、设备形态覆盖上与原两端完全等价或更优，所有公开能力均已实现。\r\n\r\n### 使用限制\r\n- 需声明 `ohos.permission.INTERNET`（normal 级，安装时授予）。\r\n- 解析依赖系统默认网络与系统 DNS，设备需有可用网络连接；网络不可达或 DNS 服务异常时返回 `2100002`/`2100003`。\r\n\r\n## 快速验证（运行 Example）\r\n\r\n### 前置条件\r\n\r\n| 依赖 | 版本要求 |\r\n|------|----------|\r\n| Node.js | >= 18 |\r\n| DevEco Studio | 5.0+ / 6.0+ |\r\n| HarmonyOS SDK | API 17+ |\r\n\r\n### 运行步骤\r\n\r\n**1. 克隆仓库**\r\n\r\n```bash\r\ngit clone <仓库地址>\r\ncd <仓库目录>\r\n```\r\n\r\n**2. 安装依赖并构建**\r\n\r\n```bash\r\nnpm install --legacy-peer-deps\r\nnpm pack           # 生成 tgz 包（会自动触发 prepare 构建 JS 产物）\r\n```\r\n\r\n**3. 进入 example 目录，安装依赖**\r\n\r\n```bash\r\ncd example\r\nnpm install --legacy-peer-deps\r\n```\r\n\r\n**4. 生成 JS Bundle**\r\n\r\n```bash\r\nnpm run dev\r\n```\r\n\r\n产物：`harmony/entry/src/main/resources/rawfile/bundle.harmony.js`\r\n\r\n**5. 用 DevEco Studio 打开鸿蒙工程**\r\n\r\n- 打开 DevEco Studio\r\n- 选择 `example/harmony` 目录\r\n- 等待 Sync 完成\r\n\r\n**6. 编译并运行 HAP**\r\n\r\n在 DevEco Studio 中点击运行按钮，将 HAP 安装到设备/模拟器。\r\n\r\n> **注意**：Example 中已预置插件依赖和 Package 注册，无需手动配置 Link。\r\n\r\n## 约束与限制\r\n\r\n### 兼容性\r\n\r\n- RNOH: 0.72+\r\n- HarmonyOS SDK: API 17+\r\n- DevEco Studio: 5.0+\r\n\r\n## 遗留问题\r\n\r\n无（或列出已知问题）\r\n\r\n## 开源协议\r\n\r\n本项目基于 [MIT License](https://github.com/tableau/react-native-dns-lookup/blob/main/LICENSE)，详见 [LICENSE](./LICENSE) 文件。\r\n","readmeFilename":"README.md"}