1 /*
2 * Copyright (c) 2021-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include <cstdio>
17 #include <string>
18
19 #include "napi/native_api.h"
20 #include "napi/native_node_api.h"
21 #include "parameter.h"
22 #include "sysversion.h"
23 #ifdef DEPENDENT_APPEXECFWK_BASE
24 #include "bundlemgr/bundle_mgr_proxy.h"
25 #endif
26 #include "iservice_registry.h"
27 #include "if_system_ability_manager.h"
28 #include "system_ability_definition.h"
29 #include "beget_ext.h"
30 #include "init_error.h"
31 #include "securec.h"
32
33 #ifndef DEVICEINFO_JS_DOMAIN
34 #define DEVICEINFO_JS_DOMAIN (BASE_DOMAIN + 8)
35 #endif
36
37 #ifndef DINFO_TAG
38 #define DINFO_TAG "DEVICEINFO_JS"
39 #endif
40
41 #define DEVINFO_LOGV(fmt, ...) STARTUP_LOGV(DEVICEINFO_JS_DOMAIN, DINFO_TAG, fmt, ##__VA_ARGS__)
42 #define DEVINFO_LOGI(fmt, ...) STARTUP_LOGI(DEVICEINFO_JS_DOMAIN, DINFO_TAG, fmt, ##__VA_ARGS__)
43 #define DEVINFO_LOGW(fmt, ...) STARTUP_LOGW(DEVICEINFO_JS_DOMAIN, DINFO_TAG, fmt, ##__VA_ARGS__)
44 #define DEVINFO_LOGE(fmt, ...) STARTUP_LOGE(DEVICEINFO_JS_DOMAIN, DINFO_TAG, fmt, ##__VA_ARGS__)
45
46 const int UDID_LEN = 65;
47 const int ODID_LEN = 37;
48 constexpr int DISK_SN_LEN = 20;
49
50 typedef enum {
51 DEV_INFO_OK,
52 DEV_INFO_ENULLPTR,
53 DEV_INFO_EGETODID,
54 DEV_INFO_ESTRCOPY
55 } DevInfoError;
56
GetDeviceType(napi_env env,napi_callback_info info)57 static napi_value GetDeviceType(napi_env env, napi_callback_info info)
58 {
59 napi_value deviceType = nullptr;
60 const char *value = GetDeviceType();
61 if (value == nullptr) {
62 value = "";
63 }
64
65 NAPI_CALL(env, napi_create_string_utf8(env, value, strlen(value), &deviceType));
66 return deviceType;
67 }
68
GetManufacture(napi_env env,napi_callback_info info)69 static napi_value GetManufacture(napi_env env, napi_callback_info info)
70 {
71 napi_value napiValue = nullptr;
72 const char *manfactureName = GetManufacture();
73 if (manfactureName == nullptr) {
74 manfactureName = "";
75 }
76
77 NAPI_CALL(env, napi_create_string_utf8(env, manfactureName, strlen(manfactureName), &napiValue));
78 return napiValue;
79 }
80
GetBrand(napi_env env,napi_callback_info info)81 static napi_value GetBrand(napi_env env, napi_callback_info info)
82 {
83 napi_value napiValue = nullptr;
84 const char *productBrand = GetBrand();
85 if (productBrand == nullptr) {
86 productBrand = "";
87 }
88
89 NAPI_CALL(env, napi_create_string_utf8(env, productBrand, strlen(productBrand), &napiValue));
90 return napiValue;
91 }
92
GetMarketName(napi_env env,napi_callback_info info)93 static napi_value GetMarketName(napi_env env, napi_callback_info info)
94 {
95 napi_value napiValue = nullptr;
96 const char *marketName = GetMarketName();
97 if (marketName == nullptr) {
98 marketName = "";
99 }
100
101 NAPI_CALL(env, napi_create_string_utf8(env, marketName, strlen(marketName), &napiValue));
102 return napiValue;
103 }
104
GetProductSeries(napi_env env,napi_callback_info info)105 static napi_value GetProductSeries(napi_env env, napi_callback_info info)
106 {
107 napi_value napiValue = nullptr;
108 const char *productSeries = GetProductSeries();
109 if (productSeries == nullptr) {
110 productSeries = "";
111 }
112
113 NAPI_CALL(env, napi_create_string_utf8(env, productSeries, strlen(productSeries), &napiValue));
114 return napiValue;
115 }
116
GetProductModel(napi_env env,napi_callback_info info)117 static napi_value GetProductModel(napi_env env, napi_callback_info info)
118 {
119 napi_value napiValue = nullptr;
120 const char *productModel = GetProductModel();
121 if (productModel == nullptr) {
122 productModel = "";
123 }
124
125 NAPI_CALL(env, napi_create_string_utf8(env, productModel, strlen(productModel), &napiValue));
126 return napiValue;
127 }
128
GetProductModelAlias(napi_env env,napi_callback_info info)129 static napi_value GetProductModelAlias(napi_env env, napi_callback_info info)
130 {
131 napi_value napiValue = nullptr;
132 const char *productModel = GetProductModelAlias();
133 if (productModel == nullptr) {
134 productModel = "";
135 }
136
137 NAPI_CALL(env, napi_create_string_utf8(env, productModel, strlen(productModel), &napiValue));
138 return napiValue;
139 }
140
GetSoftwareModel(napi_env env,napi_callback_info info)141 static napi_value GetSoftwareModel(napi_env env, napi_callback_info info)
142 {
143 napi_value napiValue = nullptr;
144 const char *softwareModel = GetSoftwareModel();
145 if (softwareModel == nullptr) {
146 softwareModel = "";
147 }
148
149 NAPI_CALL(env, napi_create_string_utf8(env, softwareModel, strlen(softwareModel), &napiValue));
150 return napiValue;
151 }
152
GetHardwareModel(napi_env env,napi_callback_info info)153 static napi_value GetHardwareModel(napi_env env, napi_callback_info info)
154 {
155 napi_value napiValue = nullptr;
156 const char *hardwareModel = GetHardwareModel();
157 if (hardwareModel == nullptr) {
158 hardwareModel = "";
159 }
160
161 NAPI_CALL(env, napi_create_string_utf8(env, hardwareModel, strlen(hardwareModel), &napiValue));
162 return napiValue;
163 }
164
GetHardwareProfile(napi_env env,napi_callback_info info)165 static napi_value GetHardwareProfile(napi_env env, napi_callback_info info)
166 {
167 napi_value napiValue = nullptr;
168 const char *hardwareProfile = GetHardwareProfile();
169 if (hardwareProfile == nullptr) {
170 hardwareProfile = "";
171 }
172
173 NAPI_CALL(env, napi_create_string_utf8(env, hardwareProfile, strlen(hardwareProfile), &napiValue));
174 return napiValue;
175 }
176
GetSerial(napi_env env,napi_callback_info info)177 static napi_value GetSerial(napi_env env, napi_callback_info info)
178 {
179 napi_value napiValue = nullptr;
180 const char *serialNumber = AclGetSerial();
181 if (serialNumber == nullptr) {
182 serialNumber = "";
183 }
184
185 NAPI_CALL(env, napi_create_string_utf8(env, serialNumber, strlen(serialNumber), &napiValue));
186 return napiValue;
187 }
188
GetBootloaderVersion(napi_env env,napi_callback_info info)189 static napi_value GetBootloaderVersion(napi_env env, napi_callback_info info)
190 {
191 napi_value napiValue = nullptr;
192 const char *bootloaderVersion = GetBootloaderVersion();
193 if (bootloaderVersion == nullptr) {
194 bootloaderVersion = "";
195 }
196
197 NAPI_CALL(env, napi_create_string_utf8(env, bootloaderVersion, strlen(bootloaderVersion), &napiValue));
198 return napiValue;
199 }
200
GetAbiList(napi_env env,napi_callback_info info)201 static napi_value GetAbiList(napi_env env, napi_callback_info info)
202 {
203 napi_value napiValue = nullptr;
204 const char *abiList = GetAbiList();
205 if (abiList == nullptr) {
206 abiList = "";
207 }
208
209 NAPI_CALL(env, napi_create_string_utf8(env, abiList, strlen(abiList), &napiValue));
210 return napiValue;
211 }
212
GetSecurityPatchTag(napi_env env,napi_callback_info info)213 static napi_value GetSecurityPatchTag(napi_env env, napi_callback_info info)
214 {
215 napi_value napiValue = nullptr;
216 const char *securityPatchTag = GetSecurityPatchTag();
217 if (securityPatchTag == nullptr) {
218 securityPatchTag = "";
219 }
220
221 NAPI_CALL(env, napi_create_string_utf8(env, securityPatchTag, strlen(securityPatchTag), &napiValue));
222 return napiValue;
223 }
224
GetDisplayVersion(napi_env env,napi_callback_info info)225 static napi_value GetDisplayVersion(napi_env env, napi_callback_info info)
226 {
227 napi_value napiValue = nullptr;
228 const char *productVersion = GetDisplayVersion();
229 if (productVersion == nullptr) {
230 productVersion = "";
231 }
232
233 NAPI_CALL(env, napi_create_string_utf8(env, productVersion, strlen(productVersion), &napiValue));
234 return napiValue;
235 }
236
GetIncrementalVersion(napi_env env,napi_callback_info info)237 static napi_value GetIncrementalVersion(napi_env env, napi_callback_info info)
238 {
239 napi_value napiValue = nullptr;
240 const char *incrementalVersion = GetIncrementalVersion();
241 if (incrementalVersion == nullptr) {
242 incrementalVersion = "";
243 }
244
245 NAPI_CALL(env, napi_create_string_utf8(env, incrementalVersion, strlen(incrementalVersion), &napiValue));
246 return napiValue;
247 }
248
GetOsReleaseType(napi_env env,napi_callback_info info)249 static napi_value GetOsReleaseType(napi_env env, napi_callback_info info)
250 {
251 napi_value napiValue = nullptr;
252 const char *osReleaseType = GetOsReleaseType();
253 if (osReleaseType == nullptr) {
254 osReleaseType = "";
255 }
256
257 NAPI_CALL(env, napi_create_string_utf8(env, osReleaseType, strlen(osReleaseType), &napiValue));
258 return napiValue;
259 }
260
GetOSFullName(napi_env env,napi_callback_info info)261 static napi_value GetOSFullName(napi_env env, napi_callback_info info)
262 {
263 napi_value napiValue = nullptr;
264 const char *osVersion = GetOSFullName();
265 if (osVersion == nullptr) {
266 osVersion = "";
267 }
268
269 NAPI_CALL(env, napi_create_string_utf8(env, osVersion, strlen(osVersion), &napiValue));
270 return napiValue;
271 }
272
GetMajorVersion(napi_env env,napi_callback_info info)273 static napi_value GetMajorVersion(napi_env env, napi_callback_info info)
274 {
275 napi_value napiValue = nullptr;
276 int majorVersion = GetMajorVersion();
277
278 NAPI_CALL(env, napi_create_int32(env, majorVersion, &napiValue));
279 return napiValue;
280 }
281
GetSeniorVersion(napi_env env,napi_callback_info info)282 static napi_value GetSeniorVersion(napi_env env, napi_callback_info info)
283 {
284 napi_value napiValue = nullptr;
285 int seniorVersion = GetSeniorVersion();
286
287 NAPI_CALL(env, napi_create_int32(env, seniorVersion, &napiValue));
288 return napiValue;
289 }
290
GetFeatureVersion(napi_env env,napi_callback_info info)291 static napi_value GetFeatureVersion(napi_env env, napi_callback_info info)
292 {
293 napi_value napiValue = nullptr;
294 int featureVersion = GetFeatureVersion();
295
296 NAPI_CALL(env, napi_create_int32(env, featureVersion, &napiValue));
297 return napiValue;
298 }
299
GetBuildVersion(napi_env env,napi_callback_info info)300 static napi_value GetBuildVersion(napi_env env, napi_callback_info info)
301 {
302 napi_value napiValue = nullptr;
303 int buildVersion = GetBuildVersion();
304
305 NAPI_CALL(env, napi_create_int32(env, buildVersion, &napiValue));
306 return napiValue;
307 }
308
GetSdkApiVersion(napi_env env,napi_callback_info info)309 static napi_value GetSdkApiVersion(napi_env env, napi_callback_info info)
310 {
311 napi_value napiValue = nullptr;
312 int sdkApiVersion = GetSdkApiVersion();
313
314 NAPI_CALL(env, napi_create_int32(env, sdkApiVersion, &napiValue));
315 return napiValue;
316 }
317
GetFirstApiVersion(napi_env env,napi_callback_info info)318 static napi_value GetFirstApiVersion(napi_env env, napi_callback_info info)
319 {
320 napi_value napiValue = nullptr;
321 int firstApiVersion = GetFirstApiVersion();
322
323 NAPI_CALL(env, napi_create_int32(env, firstApiVersion, &napiValue));
324 return napiValue;
325 }
326
GetVersionId(napi_env env,napi_callback_info info)327 static napi_value GetVersionId(napi_env env, napi_callback_info info)
328 {
329 napi_value napiValue = nullptr;
330 const char *versionId = GetVersionId();
331 if (versionId == nullptr) {
332 versionId = "";
333 }
334
335 NAPI_CALL(env, napi_create_string_utf8(env, versionId, strlen(versionId), &napiValue));
336 return napiValue;
337 }
338
GetBuildType(napi_env env,napi_callback_info info)339 static napi_value GetBuildType(napi_env env, napi_callback_info info)
340 {
341 napi_value napiValue = nullptr;
342 const char *buildType = GetBuildType();
343 if (buildType == nullptr) {
344 buildType = "";
345 }
346
347 NAPI_CALL(env, napi_create_string_utf8(env, buildType, strlen(buildType), &napiValue));
348 return napiValue;
349 }
350
GetBuildUser(napi_env env,napi_callback_info info)351 static napi_value GetBuildUser(napi_env env, napi_callback_info info)
352 {
353 napi_value napiValue = nullptr;
354 const char *buildUser = GetBuildUser();
355 if (buildUser == nullptr) {
356 buildUser = "";
357 }
358
359 NAPI_CALL(env, napi_create_string_utf8(env, buildUser, strlen(buildUser), &napiValue));
360 return napiValue;
361 }
362
GetBuildHost(napi_env env,napi_callback_info info)363 static napi_value GetBuildHost(napi_env env, napi_callback_info info)
364 {
365 napi_value napiValue = nullptr;
366 const char *buildHost = GetBuildHost();
367 if (buildHost == nullptr) {
368 buildHost = "";
369 }
370
371 NAPI_CALL(env, napi_create_string_utf8(env, buildHost, strlen(buildHost), &napiValue));
372 return napiValue;
373 }
374
GetBuildTime(napi_env env,napi_callback_info info)375 static napi_value GetBuildTime(napi_env env, napi_callback_info info)
376 {
377 napi_value napiValue = nullptr;
378 const char *buildTime = GetBuildTime();
379 if (buildTime == nullptr) {
380 buildTime = "";
381 }
382
383 NAPI_CALL(env, napi_create_string_utf8(env, buildTime, strlen(buildTime), &napiValue));
384 return napiValue;
385 }
386
GetBuildRootHash(napi_env env,napi_callback_info info)387 static napi_value GetBuildRootHash(napi_env env, napi_callback_info info)
388 {
389 napi_value napiValue = nullptr;
390 const char *buildRootHash = GetBuildRootHash();
391 if (buildRootHash == nullptr) {
392 buildRootHash = "";
393 }
394
395 NAPI_CALL(env, napi_create_string_utf8(env, buildRootHash, strlen(buildRootHash), &napiValue));
396 return napiValue;
397 }
398
GetDevUdid(napi_env env,napi_callback_info info)399 static napi_value GetDevUdid(napi_env env, napi_callback_info info)
400 {
401 napi_value napiValue = nullptr;
402 char localDeviceId[UDID_LEN] = {0};
403 AclGetDevUdid(localDeviceId, UDID_LEN);
404
405 NAPI_CALL(env, napi_create_string_utf8(env, localDeviceId, strlen(localDeviceId), &napiValue));
406 return napiValue;
407 }
408
NAPI_GetDistributionOSName(napi_env env,napi_callback_info info)409 static napi_value NAPI_GetDistributionOSName(napi_env env, napi_callback_info info)
410 {
411 napi_value napiValue = nullptr;
412 const char *val = GetDistributionOSName();
413
414 NAPI_CALL(env, napi_create_string_utf8(env, val, strlen(val), &napiValue));
415 return napiValue;
416 }
417
NAPI_GetDistributionOSVersion(napi_env env,napi_callback_info info)418 static napi_value NAPI_GetDistributionOSVersion(napi_env env, napi_callback_info info)
419 {
420 napi_value napiValue = nullptr;
421 const char *val = GetDistributionOSVersion();
422
423 NAPI_CALL(env, napi_create_string_utf8(env, val, strlen(val), &napiValue));
424 return napiValue;
425 }
426
NAPI_GetDistributionOSApiVersion(napi_env env,napi_callback_info info)427 static napi_value NAPI_GetDistributionOSApiVersion(napi_env env, napi_callback_info info)
428 {
429 napi_value napiValue = nullptr;
430 int sdkApiVersion = GetDistributionOSApiVersion();
431
432 NAPI_CALL(env, napi_create_int32(env, sdkApiVersion, &napiValue));
433 return napiValue;
434 }
435
NAPI_GetDistributionOSApiName(napi_env env,napi_callback_info info)436 static napi_value NAPI_GetDistributionOSApiName(napi_env env, napi_callback_info info)
437 {
438 napi_value napiValue = nullptr;
439 const char *val = GetDistributionOSApiName();
440
441 NAPI_CALL(env, napi_create_string_utf8(env, val, strlen(val), &napiValue));
442 return napiValue;
443 }
444
NAPI_GetDistributionOSReleaseType(napi_env env,napi_callback_info info)445 static napi_value NAPI_GetDistributionOSReleaseType(napi_env env, napi_callback_info info)
446 {
447 napi_value napiValue = nullptr;
448 const char *val = GetDistributionOSReleaseType();
449
450 NAPI_CALL(env, napi_create_string_utf8(env, val, strlen(val), &napiValue));
451 return napiValue;
452 }
453
AclGetDevOdid(char * odid,int size)454 static DevInfoError AclGetDevOdid(char *odid, int size)
455 {
456 DevInfoError ret = DEV_INFO_OK;
457 if (odid[0] != '\0') {
458 return DEV_INFO_OK;
459 }
460 auto systemAbilityManager = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
461 if (!systemAbilityManager) {
462 return DEV_INFO_ENULLPTR;
463 }
464
465 auto remoteObject = systemAbilityManager->GetSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID);
466 if (!remoteObject) {
467 return DEV_INFO_ENULLPTR;
468 }
469
470 #ifdef DEPENDENT_APPEXECFWK_BASE
471 auto bundleMgrProxy = OHOS::iface_cast<OHOS::AppExecFwk::BundleMgrProxy>(remoteObject);
472 if (!bundleMgrProxy) {
473 return DEV_INFO_ENULLPTR;
474 }
475
476 std::string odidStr;
477 if (bundleMgrProxy->GetOdid(odidStr) != 0) {
478 return DEV_INFO_EGETODID;
479 }
480
481 if (strcpy_s(odid, size, odidStr.c_str()) != EOK) {
482 return DEV_INFO_ESTRCOPY;
483 }
484 #else
485 DEVINFO_LOGE("DEPENDENT_APPEXECFWK_BASE does not exist, The ODID could not be obtained");
486 ret = DEV_INFO_EGETODID;
487 #endif
488
489 return ret;
490 }
491
GetDevOdid(napi_env env,napi_callback_info info)492 static napi_value GetDevOdid(napi_env env, napi_callback_info info)
493 {
494 napi_value napiValue = nullptr;
495 static char odid[ODID_LEN] = {0};
496 DevInfoError ret = AclGetDevOdid(odid, ODID_LEN);
497 if (ret != DEV_INFO_OK) {
498 DEVINFO_LOGE("GetDevOdid ret:%d", ret);
499 }
500
501 NAPI_CALL(env, napi_create_string_utf8(env, odid, strlen(odid), &napiValue));
502 return napiValue;
503 }
504
GetDiskSN(napi_env env,napi_callback_info info)505 static napi_value GetDiskSN(napi_env env, napi_callback_info info)
506 {
507 napi_value napiValue = nullptr;
508 static char diskSN[DISK_SN_LEN] = {0};
509 AclGetDiskSN(diskSN, DISK_SN_LEN);
510
511 NAPI_CALL(env, napi_create_string_utf8(env, diskSN, strlen(diskSN), &napiValue));
512 return napiValue;
513 }
514
515 EXTERN_C_START
516 /*
517 * Module init
518 */
Init(napi_env env,napi_value exports)519 static napi_value Init(napi_env env, napi_value exports)
520 {
521 /*
522 * Attribute definition
523 */
524 napi_property_descriptor desc[] = {
525 {"deviceType", nullptr, nullptr, GetDeviceType, nullptr, nullptr, napi_default, nullptr},
526 {"manufacture", nullptr, nullptr, GetManufacture, nullptr, nullptr, napi_default, nullptr},
527 {"brand", nullptr, nullptr, GetBrand, nullptr, nullptr, napi_default, nullptr},
528 {"marketName", nullptr, nullptr, GetMarketName, nullptr, nullptr, napi_default, nullptr},
529 {"productSeries", nullptr, nullptr, GetProductSeries, nullptr, nullptr, napi_default, nullptr},
530 {"productModel", nullptr, nullptr, GetProductModel, nullptr, nullptr, napi_default, nullptr},
531 {"softwareModel", nullptr, nullptr, GetSoftwareModel, nullptr, nullptr, napi_default, nullptr},
532 {"hardwareModel", nullptr, nullptr, GetHardwareModel, nullptr, nullptr, napi_default, nullptr},
533 {"hardwareProfile", nullptr, nullptr, GetHardwareProfile, nullptr, nullptr, napi_default, nullptr},
534 {"serial", nullptr, nullptr, GetSerial, nullptr, nullptr, napi_default, nullptr},
535 {"bootloaderVersion", nullptr, nullptr, GetBootloaderVersion, nullptr, nullptr, napi_default, nullptr},
536 {"abiList", nullptr, nullptr, GetAbiList, nullptr, nullptr, napi_default, nullptr},
537 {"securityPatchTag", nullptr, nullptr, GetSecurityPatchTag, nullptr, nullptr, napi_default, nullptr},
538 {"displayVersion", nullptr, nullptr, GetDisplayVersion, nullptr, nullptr, napi_default, nullptr},
539 {"incrementalVersion", nullptr, nullptr, GetIncrementalVersion, nullptr, nullptr, napi_default, nullptr},
540 {"osReleaseType", nullptr, nullptr, GetOsReleaseType, nullptr, nullptr, napi_default, nullptr},
541 {"osFullName", nullptr, nullptr, GetOSFullName, nullptr, nullptr, napi_default, nullptr},
542 {"majorVersion", nullptr, nullptr, GetMajorVersion, nullptr, nullptr, napi_default, nullptr},
543 {"seniorVersion", nullptr, nullptr, GetSeniorVersion, nullptr, nullptr, napi_default, nullptr},
544 {"featureVersion", nullptr, nullptr, GetFeatureVersion, nullptr, nullptr, napi_default, nullptr},
545 {"buildVersion", nullptr, nullptr, GetBuildVersion, nullptr, nullptr, napi_default, nullptr},
546 {"sdkApiVersion", nullptr, nullptr, GetSdkApiVersion, nullptr, nullptr, napi_default, nullptr},
547 {"firstApiVersion", nullptr, nullptr, GetFirstApiVersion, nullptr, nullptr, napi_default, nullptr},
548 {"versionId", nullptr, nullptr, GetVersionId, nullptr, nullptr, napi_default, nullptr},
549 {"buildType", nullptr, nullptr, GetBuildType, nullptr, nullptr, napi_default, nullptr},
550 {"buildUser", nullptr, nullptr, GetBuildUser, nullptr, nullptr, napi_default, nullptr},
551 {"buildHost", nullptr, nullptr, GetBuildHost, nullptr, nullptr, napi_default, nullptr},
552 {"buildTime", nullptr, nullptr, GetBuildTime, nullptr, nullptr, napi_default, nullptr},
553 {"buildRootHash", nullptr, nullptr, GetBuildRootHash, nullptr, nullptr, napi_default, nullptr},
554 {"udid", nullptr, nullptr, GetDevUdid, nullptr, nullptr, napi_default, nullptr},
555 {"distributionOSName", nullptr, nullptr, NAPI_GetDistributionOSName, nullptr, nullptr, napi_default, nullptr},
556 {"distributionOSVersion", nullptr, nullptr, NAPI_GetDistributionOSVersion, nullptr, nullptr, napi_default,
557 nullptr},
558 {"distributionOSApiVersion", nullptr, nullptr, NAPI_GetDistributionOSApiVersion, nullptr, nullptr,
559 napi_default, nullptr},
560 {"distributionOSApiName", nullptr, nullptr, NAPI_GetDistributionOSApiName, nullptr, nullptr, napi_default,
561 nullptr},
562 {"distributionOSReleaseType", nullptr, nullptr, NAPI_GetDistributionOSReleaseType, nullptr, nullptr,
563 napi_default, nullptr},
564 {"ODID", nullptr, nullptr, GetDevOdid, nullptr, nullptr, napi_default, nullptr},
565 {"productModelAlias", nullptr, nullptr, GetProductModelAlias, nullptr, nullptr, napi_default, nullptr},
566 {"diskSN", nullptr, nullptr, GetDiskSN, nullptr, nullptr, napi_default, nullptr},
567 };
568 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(napi_property_descriptor), desc));
569
570 return exports;
571 }
572 EXTERN_C_END
573
574 /*
575 * Module definition
576 */
577 static napi_module _module = {
578 .nm_version = 1,
579 .nm_flags = 0,
580 .nm_filename = NULL,
581 .nm_register_func = Init,
582 .nm_modname = "deviceInfo",
583 .nm_priv = ((void *)0),
584 .reserved = { 0 }
585 };
586 /*
587 * Module registration function
588 */
RegisterModule(void)589 extern "C" __attribute__((constructor)) void RegisterModule(void)
590 {
591 napi_module_register(&_module);
592 }
593