devicely 2.0.10 → 2.0.12
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/bin/devicely.js +1 -1
- package/lib/androidDeviceDetection.js +1 -1
- package/lib/appMappings.js +1 -1
- package/lib/deviceDetection.js +1 -1
- package/lib/devices.js +1 -1
- package/lib/doctor.js +1 -1
- package/lib/executor.js +1 -1
- package/lib/frontend/static/js/main.96600727.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/server.js +1 -1
- package/package.json +1 -1
- package/scripts/shell/android_device_control.sh +23 -16
- package/scripts/shell/connect_android_usb_multi_final.sh +23 -16
- package/scripts/shell/connect_android_wireless.sh +23 -16
- package/scripts/shell/connect_android_wireless_multi_final.sh +23 -16
- package/scripts/shell/connect_ios_usb_multi_final.sh +23 -16
- package/scripts/shell/connect_ios_wireless_multi_final.sh +23 -16
- package/scripts/shell/create_production_scripts.sh +23 -16
- package/scripts/shell/install_uiautomator2.sh +23 -16
- package/scripts/shell/ios_device_control.sh +23 -16
- package/scripts/shell/organize_project.sh +23 -16
- package/scripts/shell/pre-publish-check.sh +23 -16
- package/scripts/shell/publish-to-npm.sh +23 -16
- package/scripts/shell/publish.sh +23 -16
- package/scripts/shell/setup.sh +23 -16
- package/scripts/shell/start.sh +23 -16
- package/scripts/shell/sync-to-npm-package-final.sh +23 -16
- package/scripts/shell/sync-to-npm-package.sh +23 -16
- package/scripts/shell/test-local-package.sh +23 -16
- package/scripts/shell/verify-shell-protection.sh +23 -16
|
@@ -29,32 +29,39 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '
|
|
32
|
+
iv: 'd6c491906073eb4a538242a9a966a62b',
|
|
33
|
+
content: '6bdf562c3ade6c0102339f0e6e138b8be5d46e45602c4315834dfc18f7a3cbdc9d20e566089d816ba552c34803044923e0821b3957dfd4b84c91931e2051f44fd9f8578c9554bed3fc11d536c80cc13fa7a43b03a6169f388dd60918d0fc05cbcbdb357d46b810f115cfc87e9490b026df2be6cc88d47c376b22c18044fa32e0446bda4e2932ede5d3ddd5ce4776fb52d9082aa03be3a2730dd40362e48320e590ef6138c6797845cfbe78f1f64a8920c7940420b59a11fdfa935e9ef935c501c3216d822ba965550a4e43d5da3bf46ae3126f2c4a9a15de36e5edf63150a5164a479ea4b8f011105ff460df243fc8ef249c0a82b18b0072f1d72a964cea2ccc666034f7407864a9eff722c2dde91b3a3f618de021205f0b797f83f65e0803673a64cfaf98623a2dbec92b647a8bcb5def902934cfd66d3ec926912a6250f94f8ce38b24ce6bd3e7d83d52cb2ce8201883c29cdc290f13d42aa2f6d05cc05163caef4520ce83857ab513fd8bf8377d304f87a8e11703d237aaa0ff15adf5d868c9d57f0037a2d7810574993871fc01bf8ca807ee0c0fa77c7453150adf2ba1515f453a45b2af0b3ba712a5a28862aa5e298a6fe5c05593c37758a0de2ddf368c2bfcb67d20785879cea3d746668f4283bdc720f2fe86853afc6aaca763c183a26006207ed4ed78dbe8b11b6a8ac1cc605b23594c7d6f846256ea842c7075a1069af8a5bb829f1b8905ba7d94993251c7fd6f8eb6b35390781964a3a49643ccb78aeba8eb90f06bbdfdb1f23d54ae4766a421717dfb5da2a9de642fa70d968c88812b3dd3fdbecea6b06d06a255dd26e519376b6c583c84179d05747c11f79767f4799de73c8d65c2ea19a1609df424eced096e8fdce2d97d6571db47d33983026249a5cffc593959c3a5a4bf826b418e9801a20d1be8a63f11613520ed2fffd239c4fbc3609f78feaca1599ef5d206bd49f767c7a6956d1791a460605d3daf00658668987659731cad78da8f3b67f225d0be19fb1130dc7ce53a85c1839839a9975d6e2b85e9fcb966e82dd7fd4550968ad1f46c134a609399b27e1e8a2a25a760030b0da76d8fe950509271089f07e24f6ae905c9256e388550848bd1404740a000386630218d5cf3d0ed68bc109b35afe26946cfe6d80ca3092e6f3d0846997ed39e2a005a92ad9afe25bfabf2e0b50673166ef51b3a295c706ebd92e058e63694bbb257f0b37fc90c1a94ced16fef22a76783f34346584418bbfdb22ecb1d633d6d196d26321bb09b28aa1ac9936194cf663b8077c4bda7bcf7ed8f3df4594f0ac945dce6b1a53c8f0cb5f9d0d5e50234b1d8a4cb0912bc234e018c6b494d83859f908b9745758bd98c9a214d030ab208fe09dc13a4e2214be90a59bdfbb2d0e4642ca91c02482fb19031d9f64f484ddb12e32bf3f1906640a518f7a781a6677954d655620e4e53c238209cf3d34ef17f9488fa1a6d0a12fa569bcb9556c4f14cab89312752eca829983d89cf6dbdd3290eadefc5f078e7af4f3a34a80d8f586a6232e4bbc2a3557519a5acbae97ed82cb992bc360ff6ec7c3239291c723ae01cecf344326b0533ff12bd13c60a9e2cc90430de1c2b9fc5c6b0d39e9338c28c188aea7204bfdb2d51d6acbc8486bc62877d6d97970134de86f1364f533bc28cb654fcab8fd7dab78f7ed49cbb40d72f4de70c16d4367084ec55bc48a5d28c2e1248ff44a4211cb90035949920cab49567f8df20de5b9f09de8614aa782a67dc12d6be656bee59af93360a402ae98168cac484db9788459631a7d43d44850a39ee1c142bd720960c12b9c097c6fe3c0c31ac95b823192c182140458e87807df0162c9e285f25709eb58163f484697650bf5c61ac991f40786dc5e3d14f75ce907b89b75dd2c12438a4f4cf4c9c10eeaf7552bbf7efdfc1b5140015d16f425bdb66d6b6bfaf5b571bd6b7ad6ff926a2c75349f815f73b8ab6cb40b48fc3c9cb8548ad31713f9632691111a5680ed15ead2fe23060d0528c0087e214f982f6d5d45c6f5209837872ce7459866d51a06dddf41c85bf8fadc528f25c4a0c45d9f6efd5d1b7cbdf21680faf6b741033d98cb4a4bb6f857811579632894ca039f6b6c6b268340595a50da394efa0c6e739f2d6d7f3207f2502383eae03e8600c643ad762fa41f2932a0b3efe1587411b40d6791a113c6d5dd2200762fe778daeb507f8d01871ccaeb75636ed2768120a6b9374ca26c47ed1ee62c70246bf204157b59823ec3054625c6ecb574a0379893710783fc7df42b391690e75f6f322bc1c4cf49db20555a639c6df67704126bbeac9623402f3e500bc5278067ccf60c88f3e27914c4f42181b5c00e22f9356cbd7cd2457c6d9157d2edc44ddee9b03c52cffa77862aed4380ded7661a082af2db5d4414cf25a0f9a27874a7020cef0139d587f87def2d4a90371029c98bc0adffac7898325e07b815e457f0b8f180099434dfa87610902095aa1e7fa853d8008fcd62df6ac5c0e1d303f79174a6085639b423239a689964d8521c81de9158d180c7c07935b3db08865beb7abd5cf6b2535433efd53b53546670492fd9f967da186f3dfa13a99e9fa5b4a5ed88671e82025dbe7daed88c848522b0f2cc267e1534e0094891559d288709159c52541b4d0711439ab9683ddc30a6757463ea95a51969c4a3de5f5f39d21c6ffc566a4a2385436219f8a34ebf1f7a0b69e53cd8c018e6be035864baff1ad6025083553cad10f81ba4aaf9500d360c9d8aceee5b659fcd96d1248f4cc65b8a00bdf6e3240a1d735b202898b76e23f654c5e5f86df16be2a7d3d2949373b3e70d299d66995c5a20ca6f87df506201e25b70c9a714177f525aa1587ccbdb56f6861a4af367eae935376da53f1a74ff9fec1ffd0494fc6e7727d7a3c50b3619499e9548efff960d0c2c70ab7d1ce242b311a9ca23a21c6978cec8c0b3b37c895e33a97fbe24c2c81dfb19b4e9324520bfab4543aae04e3d337f7a6dfa28d49a9bf94de337babf8d51a7986e6d36e43bb2b35ec1e6bba7e5da5c70f0bc5b81f33db6703dde124bd09676ad036597a202ef43fe26844b4c1a4bacc7f8e2643d71726b5f249b9d646429a2e34de03ef5d5136acd371a564c4d8c523fd11d707c62dd2b9c4c4a7ee3c2093b101480057b7c4618ef676d63131a11b50377bd1817e16b652aa3960febb26585debf23af6c07910b1cc3d25769b1c282c099e6a444a75a67d11e9c930e7872fef05f89708839f72c0d0bd4d3a280da331b45118c0bd242a87b5058f5c0319bb47de8ed260f8c3210c9b9917893b3ffefd083fbd03a047aabd5f0bb47d266fd8ee9a1ae8135816adcae61c5febf9ad5b2d5ae57496932a8f32bb9dd8aa6dcc81f1f70c0f694204758d604829515bfc1f55e966ef2978cfd29dec82889c1d63047a02d73ea5dadc75a309563fc290acd00d2abe28ec85cb4e5f7c88398359dc67545db93e5fe53d73f00a688f5136dccc67e87a81f2ef97259c74c77918006851ceae0409e982fb546783a3dd3898561c5c8de295008a9200ea47a4c71de5a76a4d2b80a002e3955577c836b9f9bce021e363ba687808cc036f2f9bb58609c0307729b7ca15d544a52752cec325b5ab2387c3997d8ab408d524b5c54d6d0cebef3d726260757a26a55b0dcc24d2fed13ee5106934ac29fa04c9fe5584d6c13bc54716bdd1a50ab09d74cada334d3f51703826c9b273f6e2abf387ea82d39a051cbadce6b1664b5d4bfe5fd0317a39ce8051347cc400422c20c9b08548ce8eed968ba67f134f8e2db67862072745347af5a60bd31a8ee516318895c261493406cf54ae0d3b5e27ffb1073d3cae0f5c3823ae28e89edb7456c464efc55f547fd7bcf6abde16ab61e2b3f06673bd9eac40b8a426a29f3ceb065f9d9319b33c6ca90515d60b3967fa62e2ff1c846f808521e60e0259556145b8a0634cb3be7a96c55876e1637fba8082b18ebc6cc85947d68a3e9632ac08f623e00b0af70051bca5268f61266f74397557abbd043a043831f12658b2b94b08d6ca0a8ffbfc026fd0f7cae3df719a2a036913c62831b8e785989ae6cd4c10b19e1ffcbbc01143ad7cbbeb3ce87e412940fc3636db15f9c652a75be539e7005e01e8ed0bef40f3dcb65d603021379c3b70453f5e7e9fc4186141e5fe916d64a33a8adaf733fe6626002d5771d2e3867a16ae309a6d2e7f8fb421354d1e0e5b8707d5e08c68d48a10a0143374c4b188e21607e380074750b281962cfc5435a88560c09adfffdbdfba51697e6976a30abfbefc6a04d35e6b0f333ad2e5b578dfb8f274a6d611403e73b505707f0f48272b692c1282e5d4599559db84bd099dfb2dbfd13556ed60ed2ac1ecc7f280650b4e8ea31d20c30adb4752cb85c6b10e8aaa4cb1fa2d7c9ca36730d22da0731be351cb9b5fe2ef10d778213e1ec1c9ef3343ac37cfbde2976248bc665c4c6efe8b75ec136ef6b4097a9eb19d53da875cf0f8afd660a675a47eba37d82e621852cd71d1e774ebb26f26a3cd9a654ab5415f0e83921cfb41d3b95c256efa8948979e19f1f4271eb8119263fd58d001f5b1b5b75a496dd8b71350a38c6615ee78369b5043e9bb960535940230cad430648cf524e9c1d234f87bacda90d46770b7632008029b6af3e56e38db9fcba1f2fec9b70301113f01ee03a04bbde88b59a3badce1520cb2ae26edd29198482739239ecf0b205c28ddf7eb4c81e0379aebdbc7f6ecfb5506465eea8986baf2ad742a81be5d4c4281c81c33853fac3ef7c792734c67a59b1a90eb5155368113f673862e558ffcdcb7f98b46b9bc4663b4db9d7815716f8056274ee494f0d2a51e487fcdb72ea0a4a353a4fb094bab7c69e62062abed451f9ad7dec9749c93d4bfe0ebbaa2579299ee7851c357cb7e16372082058251efbff8998dfd87d8fd9fda58be15d64b13036962759001615b3ed002f98b7405721db1086a09b61082fa46bd5fd1440f51a7c9403e583488da90d1ddebbec7b79e8fa3b966358fdd5e56'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
38
|
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
+
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
+
// So we need slice(1) not slice(2)
|
|
43
|
+
const args = process.argv.slice(1);
|
|
41
44
|
|
|
42
45
|
// Create a temporary file for the decrypted script
|
|
43
46
|
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
47
|
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
48
|
|
|
46
|
-
// Execute the decrypted script with arguments
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
// Execute the decrypted script with arguments using spawn
|
|
50
|
+
const child = spawn(tmpScript, args, {
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
env: process.env
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
child.on('exit', (code) => {
|
|
53
56
|
// Clean up temp file
|
|
54
|
-
require('fs').unlinkSync(tmpScript);
|
|
55
|
-
|
|
57
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
+
process.exit(code || 0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
child.on('error', (error) => {
|
|
56
62
|
// Clean up temp file on error
|
|
57
63
|
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
console.error('Error executing script:', error);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
60
67
|
"
|
|
@@ -29,32 +29,39 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '
|
|
32
|
+
iv: 'e27e34b98a90543da353a14fc75f2e1f',
|
|
33
|
+
content: 'f478d7c49ea6ef6069d2dc500ebf486df6e2109cf88ae942c68765aa06c1c9f73a488451ebf64ad41cfe7912b872d598bea2c52ac53c6b1868b7bd4ccbfdc9f5080ca9c8db58388c2a4ae7eef9e0724832c4ece1576ac8b7df4545f494beaee0c047cebb31305657b1f53cda09b2d5f16214dffb511175e241f8c0e4ef7ae2b704c5715c1e3da1c6689b8483579d529b3e04ecfa9a8a928b0e2fd33c2eb50a343c0bd0cd025e39db933f94e210df9bec8656e27b69067d589dfa74197e13b5299aa93a530c37725b9a7e65819934709936ce7e6a7024b7259d9411139a5f87312615f3698db9c4969369eb67ae73121cdda9e2bd64bb14ae329c4795c2c79ef804a8fec11728da7157a55aa084587b3688b2a2814662f301f0ad0ed2f87c7dd95b7559099851797293f0e71db8e0c698261e5fa1532dc453f4d1ccde654adc303cb91807c99940db2700b4c9f001c1e83afc1c386c077c2e3020c83f402bbdd04f38c702697f568d9aa5c5eba5c1dc0e349f5fa33b74dd678fa0a83c9683da57b4cd394d4b2bd564c3ea04d63e7f3c309bc955b48a0797597de72536239a74895c129e54a15c10f5dc515729c82a6b78d1f44aa0ff07e1dec30759dc6b408689176496dd7b7b2b6139b9d52c3099179a05ee874e68ddfe18a4d5ab890b7da35572a198bad9d8b0db3212d02fa4f911871b16de521e47f95258cfffdb433dc22d01bf552de65bf0b990d7dda611dc1b65eb11d4790aad57df89d1f66e14665e5dd644d52a499179b12d10380828eebf6e881b20f5dc425f6bc2b0075c7221dce106f1d4507146a520c5491a5932967bcfa1eb813590e7b47a54bdaeb218a0af449e9357523a7f9ad5fa3e48b69dae8cec58cebf54ff2eaa692b0c81bc2c1e86a5d65e44ab83ebd7bfd5ce22fe3655ddb5b8ee6cb3ca41f11a2c2fc0a6cda38054dfc256c458b8edf5592f8be3a42965b270ed74964f30568245323b32b5e86ccdb6257db3eed103a253c896bc5f917f3000fe24f3c66722c47498b6fc5023ab5086662edffc04b4de06a39425734300d736db3d8bb369bd645b4a8b3a9d84aefe8252b8b2e26aab64769a8a9eeb4468dc5cae3dafbefb22a266bd150573dfec8909fe81b9f25b08050354e0b2d8e0e007584710990217faf8b9d0b46b935c3addf3eac947f389c4b6c1b42f5c3150922b95a4b20273abb035f0c17b45d320a13ccc80d5974b35e69037325b5f0dce3a99372fab9b5e75459f517d82cde5e0e4ceefe5953a1a5d8ab57f8cf8df61c27469d2639fa558ba91a9fb7955db88183a4c5ed70200bad2c5413c6387b7f9ecd94ee7a7f2707be590896129e1688483c4852bf5be50aa6a8f772b18b6decbf747cca3cf70888784b53d1ded7be05c821102b2b4d34cb4415343095c285c91b1a46ff7a52dfcbb4da5990029823a44aa39f2af156dd714ecfb3012f41f7fa510e646863eba124d9b175d4b71c5075a14298dff257a3283492199eecc97628886e7f502862ea2b489dea0fb935dc515224e14c229ed4607b078d24abfa57d88e76b67f6b72f8e2586291faf25baec0bb3d19e893e8e69b58d68b9468039be614322ad109ac93d1e91244a7a3003d1a3544ed55b630cafb2419bf584e425a1c60e7b55b3aa5cf33f70a370440c7ecd1535fcf6f8e314c84e4dad7c11cd9f6d5ed10aa3cfb26cf5befd6e8d71333c1a0fc20bbe9e0797b9fece833a39008a5d54c778a617d227577bb78e9c2e0bf211096f139ae2cd30fc30151dbe13839e141a273e03b3eee507fa51422a1aec54ea52d6a65c62f18f42af27db46d75d3d234b53e76f0bdb23025fef20fa59f1d8be27b0c62a4bb0b8dea64d56e23d544052ecbd4d432713905d14eff4e9039e053e848f8ffec59b370d546b8d3548fa20e34c0ed18e6ac86ebe641e480b23b38bb58e4fc9840724c08a432c651614f149d269ee48f77ba550174b62590bf55617248736728c73cb4c33426c083b693413d3bd275f781ddc453822068ff7c159ff131dde2c61394b0356de2e1733e152798974fb3f5cc1451fadf5fe0ab247820276e7338e0e06513329688b8495f6d729b697147437608bc3321cbd84a1bd85d09523e11383cb93ab0828ba0d3e07e03a7fdc4a050a1ba6135f8ed969477d1b9fd245b8146fbefd30be0879ea9a7fca1838a2d4fbcd959178c57de9d5d5a8e41ac8392f17f115a733b9bac31a16e193c8412d795e52bb45ebc0d043c8e8bc72c7d1c1a1bea0a3c8fe4a235b23341eafbc0b1a5685e7d0f061dc7ecfce70ff870bcf3322360806d35b15c19df2001b1b827944295f92f6004481e954a60c3833c349fd38028dc82ca6bf47252bd41922495067992457380920cee1fc2c4cd351c3a9db608e37780a2698b15c748443f63495db84992fe519700bb1620a075a85a2b4ee4d13a6aa6f67927f16b3354a4271142714a82cc7672fde3cc38645a84471f9871a6fd4436306097233154511e45430f248cae286d8e03f6a7141e81150134776f9970f875bfd8225ad779099a680983852d43c743a991ce3da0746c93920c2ac68309bfdb826efc43cb86573972ad34274fdf9d84f9ef7fc142550143fa5e34fcfd215cd96f269c30c694ce7c523e0e761979517de4440480db65472d08992f0256da0cf346710b241fe4f81aad8d977bc805b12c2586c60d35fbf6c812115891f604f47802bd4efa88317a0ba916843c9a176ceefa0e59f83e6ef49ea82426c19d4262c0ab08654cebf9c37474b17d17f28a01407cf94d8b59b5c18e5ec07b2c72453a8c960a7ca816513b45e819c10e172a1bc6cf203e9dc945f1c17307a7fa9ca48b804f21c061406a93040d4b09210f3ae28359172a0746abe7bd7db0c68a37739480482b4a143703bbc8123e32c4391f863d5911d5b44b370385b1dfb7f492d20b141d08ffc7e8635152b3f08e4f7816cd34e0924fd05fe8710674e606fa304463ed0fab79e755c7ef9233f50c1d5ed5347d6f0a48ce703bd4973268b9adc120ebf4e3a173df47a57e3338512babd88b35e69aae9f311df1169df5965ae9f93fd68b0cc3e1a1077f11cb5bb729f62d0d5429410b9593d8601113f5eb2b4b84171311e320cb353e589c8651b4ba2d06a1f7ccdb380cc8124b4dbf5b697b8b87a3d30aed6eada4a41aab911eb423e08b61359b61f0fefcb05515bb717479537507287106fd3177c27393b6d109157b3ba4ad21d26410d0b6761506453ed357ae745a7cafbd96864454132cd01d56aa8107d7736390e499a748fd2b2232e633d1a90d942eaf329f42d0b84c61a209e3ace8c013c578bca0245fd1889c0017f5c5b963b392e12c0ab76561868e056b3887a9282efdc943b2f0bdda2b84d6ffe0bf8ff33f485a51e3230ea7f75516426902d952018fe8c143d3dc29f362720ce6083999460f3ac7aae6667a2730fe6f01e6338abf7f73cb2f110012649ea5d947b3065aaeedf43e2884eb9f8bfeec4d793b268a684506e75ba4964d3cd581c830569b0'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
38
|
|
|
39
|
-
// Get arguments passed to this wrapper
|
|
40
|
-
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
// When called as: node -e "..." -- arg1 arg2
|
|
41
|
+
// process.argv is: ['/path/to/node', 'arg1', 'arg2', ...]
|
|
42
|
+
// So we need slice(1) not slice(2)
|
|
43
|
+
const args = process.argv.slice(1);
|
|
41
44
|
|
|
42
45
|
// Create a temporary file for the decrypted script
|
|
43
46
|
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
47
|
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
48
|
|
|
46
|
-
// Execute the decrypted script with arguments
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
// Execute the decrypted script with arguments using spawn
|
|
50
|
+
const child = spawn(tmpScript, args, {
|
|
51
|
+
stdio: 'inherit',
|
|
52
|
+
env: process.env
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
child.on('exit', (code) => {
|
|
53
56
|
// Clean up temp file
|
|
54
|
-
require('fs').unlinkSync(tmpScript);
|
|
55
|
-
|
|
57
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
+
process.exit(code || 0);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
child.on('error', (error) => {
|
|
56
62
|
// Clean up temp file on error
|
|
57
63
|
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
58
|
-
|
|
59
|
-
|
|
64
|
+
console.error('Error executing script:', error);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
60
67
|
"
|