devicely 2.0.9 → 2.0.11
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 +30 -15
- package/scripts/shell/connect_android_usb_multi_final.sh +30 -15
- package/scripts/shell/connect_android_wireless.sh +30 -15
- package/scripts/shell/connect_android_wireless_multi_final.sh +30 -15
- package/scripts/shell/connect_ios_usb_multi_final.sh +30 -15
- package/scripts/shell/connect_ios_wireless_multi_final.sh +30 -15
- package/scripts/shell/create_production_scripts.sh +30 -15
- package/scripts/shell/install_uiautomator2.sh +30 -15
- package/scripts/shell/ios_device_control.sh +30 -15
- package/scripts/shell/organize_project.sh +30 -15
- package/scripts/shell/pre-publish-check.sh +30 -15
- package/scripts/shell/publish-to-npm.sh +30 -15
- package/scripts/shell/publish.sh +30 -15
- package/scripts/shell/setup.sh +30 -15
- package/scripts/shell/start.sh +30 -15
- package/scripts/shell/sync-to-npm-package-final.sh +30 -15
- package/scripts/shell/sync-to-npm-package.sh +30 -15
- package/scripts/shell/test-local-package.sh +30 -15
- package/scripts/shell/verify-shell-protection.sh +30 -15
|
@@ -29,21 +29,36 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '
|
|
32
|
+
iv: 'f7ed8271877d0018eaaf14381f9caa8e',
|
|
33
|
+
content: 'cb365b38b0806afe32a6b2c341332257134767057cf47cb13583fe41153bad0a08d955e528464ad19699fc420ed9a0feafc21e6454eb71e7a71bf3a78c007c5594d47106e6579dd8429f6d2124963918d8fa33a097ec88806adc41e2daf579ac395c419855fc5a1e1c59116a54a4877cf97786345950ea0257f074903407bdbf30529f5bc2780725a5de88e432ceb66ff2fa0451f066335e31b72a8bc4e57ed81c3c5481483bc87f548fa33bf986b88b055c4229485ebd1ede270cd94fd9f144f6880efcf0d453d2e8144e2d6216170195db3210319bd55a568e3ed112a23d331b9e0c2079bc260d08c64af34b68ad2080ab12e5e46fb67d1ad7e8b409af149307fa61935135260988b09faab820cea5bfa32b7726c39fb482d07326c605334a63ac49fde31a45a05130a67958d379f327b42760cbac3fd6807702f198c20e19711e795252b9a31de1a6e6ec877b527c0c923afd944b6ddb4353c5fe59bc7983a61666696c73785303d130a3135ce5df2ee3c1563cbbc4911ac8d254c571e9253b12ad5f5cc48f09a994ba2626476f1d64677e4ca1aaf9499513d15ca889f7d864f33fb67e90f638ca57d7dbe434db07b6359c4e22882d3535a612cfdf0a2b39eaf730508187270b0e1c142d11bf5ba3e1dd490ca6ae5a5b6e5f045f5ca26453bc130d3de1e897a2a3638f2e7ce0fe2ba16e6fbdb265b4d3456cd6b2968de51ef595ccc1af30a51ed3371b9d922aa74e90858334a3754dfc9dd08f17095cf6dfeb5b4b0965d962667c3d0d342de4f76517883900cd866f74f936bf21dccfe2a047f3ce1fb39afe488a716d76116b50c6e43fcd9fb2977b168e6bb47833ffaeb32e1219ed9b604eef7c6278c6e5a9ccb42fd3cf81bd59c2cd3b1b96a50359a7f9226f995220461675b709106f99b4a7fe9f237fd29fa8abc64f61ab19ebda6b42198089362f34b747ec0c77cffba9a58fdcd0cd8d1ef69846e117ea5902e1f8616435be94c5fdc69985cd815dae03caf542497888c297ca1bf958e4ff013c48730da4b55942b70180dfc999adaa8a17dcb3214e73304142ebee68beaa79988e45ca2b71c68bf4ad26799802d57c423b01e306f7ead89537fb8adb9ec79873a8a7fb2752552734ee9f194648768a1d8934805261eee463211afa93405a1f7af89accae10600fe676eb967c0e781606c5ddd2693589e6253dde62a9e1060938869a0f2e255fafd578f6f6cf1360afa1dd0d08872172338185efbea382bdae5ceb49a011acb401c888550dd2e620187a037090bd3aed6e5683b5e31f9ef62df84270151268fd92f936b47487f6effe4a3cec2e9c28e088b460c10328c308a9677c46d17387490d7340f970e7efc6ed9933415705e938424dbff3fa7dbff77fcc3afc7df94acbc4fa00b2dbd634eef703fba487c3d78a0bbbb5703b9f596e935a9bf6671d5ec86d42354384fd4c18fcf698c044a89f729a0c1aecc69e069a96918ac78ebef24621d64d397e21e12de1990a829cb7eedb18599041143306c0a020a4696caf9d79891f91f578ec35ef309cb2f70e7368e2bc106d220063bd97c08fb468cfba020dd43de820a848d7f98dee3ad9bc858d4666178936a88fe2702f386fbab3be86372a2259a44fc91faeb5a7db6fb1af262a1341f86f8474f8a8745cf44e08445d38643342299b920778119707a9a7fa431e314ed098bbedf7139ec92ee1ad8df81c6e61096669688af7ebd34f8d45b8df46172756a2db73556f7e98a685ab8ce54fc38d98c7e13fbbd54dad171454decc7a9eb44cfadb267a58da8a77bebb8ffb24e44514b304e43417119e380448a50fdcd6d8625cd8d029bd88c5131d578d6ee4ff13a64141bb8c94fb56556a69b2c467a238557656d40af84f0a40fed36ce2eb7234e8ccbbbd90aa962813fa5a3c2453364decb0fabecbd3064b8ca7b1a7fddc18d782587a53737e4b44bae27fd4a639a8b92948cf808471e2260d8364452eaefc70b0425fc7e460b635518e7dd573f44112e1c079319042de61414848e944f7df8100d7118a27a7b97ef189b92ccba24d7b1fd93ba1084d2fc5177b55037af16a2dca929680660255f3cf054376b8deeedae39b9e593f62c0d5e7ed2185a766b1825e7690ea20bcbf505954fe7476314e870ffa8da79f129caaa1a30306e978d7a4b48227b172fa93f4a932b706fab350f7bfad0a951f15daf420716d1038b16363a5efa0eec154c2ef65dcc7df6ab352fa8cdd065ed74046ac4254353f1101b414dc9685fd83bccc530fbce303ee42d3055b47126634427af3667d5153574d0b905f7ce1366ce699cbe209f7f3ad37575211577207e86d22348f53d220222e6231c8e073caeb92b487f37db0bf61a6e1f3722be798aeb9d197a776340ee1ff37832e7b8b9413ac145e33cefb44e52a799d2b3528ec5657bab7cde5a8670627933a64ab18e1ec37f00d019c26f4e1be6e12a5d8bc4833ef4efb32e1b4562f94b424f2340fade8b204f2e8e88d51e10d8f36c98219622fdd676892b2248365c70a5895d88c54d176b815631e9815cf913982e26cc06d695a46ac41c4032e6f1c6cce93e9312cf54efdb668ae8a0e258b38c3c5f0325c641ed66aeadf6d254eca7c1fb313f58d046a890849bd709f785701f97f9126fb8f673ed7d04c3aee077ef4c251767f3552f03a6596893b0446f96d1febb48c08fd1343de291eb813f332f4bcad00828bbea13265b6bd072a6341fd1a9a54516e5976abb424771ec423686a12f682475ec8600f08f46bc5002761c36308a2ab5ab43da7cba56e688bec072bdd493366f9aa2ed4d321ac0ebe192366511aafa6b01dd45cb5e9ef2529b6854cb92189c61d9d9060de319d3925981d83468c00cb7aaaab9ad999cdf307668d98235d89e052eff38a5fc8b24e89ff8c4f0dae2d86d6b5acf6777ba964350c18e0a04aa12682a88f71cd472856d9d27c50abc532db87fd31bc094040435ac0fe32d4911f53683a389838619acd364036927dd91e707d4b580d4e96d9bc6d979b0083206396cf9eedb9553f0109087c4be91f760c55d9d9ffd133f5252aadc8084af5eb03832c6d0b4853c60c5b14975409be1869d11ccb8bbf18c882bfbb3649b97b20fee0e5ed8da99ff4ad2450e18fb27081582d87ea07aa90e31e761cc90be9243c83d60415e4cb6c3e50eb1d0f437fa375401371c92c3504c27f6f7bcb69cb29bdf738f280d48c6dc2b49e30ac82c0c4a69948cf0fb70fc9594fbd01f485d3d998ce06e7e64a0b4b42806bf18d7514d3bea304d4823bcdfacdb28574244ca223c0d94dac8d225849c82907449e1bf6be183db36f0e85d2103a32c1d840f4a3a983060ea5cd7c35fe75babff350be4c074fed9727aa664ca0aa59f7a4bf11157edf4ed3ea756d496a0635e64d21205bba586231dd73be46e68ad82364d79096869c09fe9e871af2aafa7c91bd9aa6a81b3b7e58d187148293da26fd497a3eeca55381052d7a4f020922a3bdc9ae8d9e7a902599ef5a39aa8035db5a8dc4a837e5c33e1b27cb80ba79a7647e31e4c40e1f0da5eb9cd2dba8b978b09dc959eeef16993e5e3417a5cbd728322841d3dd3c8b0a8ec8e1328e60018d98ac30ae3259f790f625a73a1c22795251540d06e1c4c704b9dfdfc7d130468df235228fae765ffb7c54f30154b2977fff915aab1074f7248cee8e5703413390df47abed9f1e6595d95ad5e82845bf415027505fea42866f2bfe6d271012ebfe7f7076d81d373bf4635c6c45c0b957633e51fdec213fc55b8dd9bd55f2b8f7437537d70cdf134b1df99ff6579c6117218f654b4730c614eab101bfe2c14f2aaac04b38695114ef6e0b702e4554756f8d95f365b59b11f237a15ad6353b70aead665da1f29a732c38cfa75e4b9cd3a007115e8baa0a6ce9eab766c12f686900282de745c0f46f7e6192c44ab89069d3b4bc6e612402536e28d181158a2a1e8d224f853a78d317eb95868351e077a12adc57df198af8760d5370caff4d040a2346215511ac45a370d7a8dd0c50a44e9fc3142a027a2edce9cf6e68453f1b38da76f67f67766e1b963246bd3af244d178a56bb843955632af721935a913b87b61eed5aaafeff615f5ecce45b19567a4d2522e3a68390e6207ae6945c2874faa70f29de0f23f59fc90e37b684c3565843fb368a3bee85fb604e0f4745aed88909bc78b382dac60a9a43170bb93eb15a1f62d26514b3f750b238c601ee64116c80d1997a8aaa56d0cc4612decd2f728ebc90c6b717479a2e9d5f81e30aff1de53b9d3c30970119c4b56ae835ea79e129521adad3e204d7a057bd07659c4d3428e2e26b92f1ae10f8cdb5c3c9517449180a008703d20d6e26cfdd1b141d5691bbfbe5f57f6768b6c277ace957e5604cf21868994ab08ded1453e35522769a693c23b7b414a05f35a2566945d2077cb1dbbfd72d7346a6128c733be9f5c044e5033995f5810a225173d3c2471f66d909eae455df8ea73a7047144e8d320982570f9895b7b079de5c7a08421292dcf60489a87cb8b8c06df5694f428c6e117010fbf42f1bfc0af86ec0e10c46232bc728b612666aa41e78eb90c9e077f7c4e4bd522d099ad1cbb375b5efdd772ea33192094c892695b73043281bfca14228a4d4bdfb749e7a88a13a74b1bf846228ba1323c837d411ecfefd3f71eb400b889b65cf9719fdaea79101452c057e0e3b86a2f5557fd59f12356fe3c375b5972f286ec3dbe4efe8074645bebc4550d2419003a0fd1d8f3ca5e6bcf9604b8345d3da747ce26ad05f9e60bce990e1147ea5c22803cee711c1ebb7ed386afd03076daccad11b8976541cf2410375d6729c391f8d28c602509e49db16cabca2caee946f856a0eb6cac11c545bed85e956a4a86372acd69d8614b108918b2329aa78cd9a7f479b89c39a9a8f508f2ccd8fe814fe276d50dd95e41e100011a7f0533de3511bb16d569021edba207928a3634250c391d574b0a524f37c03b09eb8d026434f2a4624baf995d95c7ee133c1818d7cc4232750ee45a'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
const args = process.argv.slice(2);
|
|
41
|
+
|
|
42
|
+
// Create a temporary file for the decrypted script
|
|
43
|
+
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
|
+
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
|
+
|
|
46
|
+
// Execute the decrypted script with arguments using spawn
|
|
47
|
+
const child = spawn(tmpScript, args, {
|
|
48
|
+
stdio: 'inherit',
|
|
49
|
+
env: process.env
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
child.on('exit', (code) => {
|
|
53
|
+
// Clean up temp file
|
|
54
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
55
|
+
process.exit(code || 0);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
child.on('error', (error) => {
|
|
59
|
+
// Clean up temp file on error
|
|
60
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
61
|
+
console.error('Error executing script:', error);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
});
|
|
64
|
+
"
|
|
@@ -29,21 +29,36 @@ function decrypt(iv, content) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const encrypted = {
|
|
32
|
-
iv: '
|
|
33
|
-
content: '
|
|
32
|
+
iv: '1cfdad418b88ce4c9562bba7a0f96bc4',
|
|
33
|
+
content: '71ccf8dfcab371a79f7556aa5108a36b241b83e7e56dedcf544d5569f20c8afd93d4edada2edf715ad3b06e4838a1af94f4f35d7e15fbbb1cbfc4dcdff1011d5e2d2d28ed6f563915978712c6a03df6a1813a591dd40714935f6a2f9fc24ed60dedbbc80d86f5b10a5c6889f6dbecb54328ac2152303034951ef8b6d13f91e772d7e27d313821ec9d7b53474355cff7588dcb79d5eb576b150fc61f0e5fe856225d5dd2da0e38246c4a8df5179212b8be114c46de1f79e4e0f67ee3028379d4f250fa61813d1b3462d02e57df316bbba973ef172afcaf61d6801cbf01f44af8ca67b31dfa5cdbf843dc64c9670d69b97798c48d47b06fd346ea041fe137b5fa62ba7be4eb681e248489473569a2feb3e8913afa25be714e85e3a4214f4df4bd970d989be2bc24025b7fa746286f21fd66127aed5e6db717084f4f3ec5f02746ddb49d6136d3ac4a5394518a1fed9ebc3f0822ae0f0b6155e7a416cecad70fda2e99a818d86fecd7de38d58bcfdfe1bcd3b643aa9f2d728b27d3487e5346d767b5d76dbaa938c03660691be313b1fefb7b2c9b10ce91251be981a798d4e398d72bfaaee7f9ad7b7bc5edab0c892dc528c911e163a5d493485a6584783cc2577759134643003009ff1bf1513d49c3811eb2d5c60c2f0b028c1775dfd67356e1d8fc5744efa80e06e96673d509be8f7253b97119ab69cf682d6dfd0a766247760736d8f8b60d606a09763ec625a0c92f9d9113f791ed58576bc075781f554af7208945f27055f65839c1b2d5542af37c9d9ff3598199229724b20586a4b0c8440b045cdef877a4440b3eda9d4a44a3ad943d9be58dee72c1e69fc3ab7d834a8af851d3542ac59028e409fcea2f9dfdefc4985b349d160c730f28104ef8923ac80eddca137602cf9a79bd499ba7acfa524b04bfbb455dec241152b8bbd5446fa12afc0ac5e99e6f9524d5974cceccb2bad4e4879cfd2c88938f972f564fa7dee26d2891f5aafea9abbf295914727533aff3990cc777527a41302b853e048b513ad4f2f5ed4d01c4ed6bda59cf13a02a21f4320f06a6656558a1e143202b5ab973a19cb62eee7582b51cb83b8e8a790625a7252ff7e6a7a0a60273e694f2af4418ea35bd4b0e6d5a18e0f48a1ead96b8180a5f373679bf093aefc592234c3558f10fc9b73d6c37cbf16fc903b3baa64315389845904f2dc39b754fe8e3b6af07e407c332358ceb99c99e27d2c98a17fd6495cd4a9faf56b282982cc95d05d829a19273a0612ef0047875ffdfcadca0c4b2800d8fbb67bb182eb2d031a22ece1a1215e099892f05d89d0a8fe49805d680f25b20af4f7c0c0dd4d5a68111e15719711fc1d36e403beffa6ec0e773db828b6f2e4e0d63507870b4d428dd9d8ad78718379e082039b835212d98500ae3c3b5454259e667a357a881390bfb24050605f665cef1bbe1c259a443cb6e670c54674f7538331573fd764ce421ceb09a00fe05484f63e1b8b2946fb8514f0f0717a902a48d1a51d463649101435e4a892067f8cea971315841c1674cafa23a48a28bb2e387c3b1fcad909f127668293695d035e363cf7b67d3713b49ffca673a6a65a3420da190f1b23f46ee40ed4803b4c88dcadf187f0cdadad9fe7fa82a445af5cb3595c792a90330f46ec0c26a8c900b30e1dbc63470543c6cd15186528faded08273d039430caa0a2d0b3eb93e98e1182cfdad595c4a3efb12e26322030c6f25d191847ac2ef02c30f59af5c9b44f9854537c8fc5f671fb9196a87f3db3ec91e9b3ae1d899f6e6fe4d0d56bff87c161615ff4f1b5a2c02c337926170a70902e96993687406610801e2c6604a81972bb7c57428e8d94d9cca5af08a4480996d4ec8cb9e39de0c3e0f434ec966c5c1023e3676473faf0a8405514501965e30478cbe24d59588db4894cdb66caeb8bf62048355b4ac3def87c2f57a396c1c3b328c76a331c5d9d5b3c7905082898eb378ae708858c85a299d4b28f89c23feca5b8e0e2ffa00ab524ba16b3512d0ddc4926846a68eadda97e4d5337f57ea4aac083a6be9833fe50b79c4057303207a94c1f564fce7dcffa0d4f1db7203774f441705021caf909eba890b54b7e835f74c938be1317e0b468d9689596521dc1af4bceab45fdfa93aca25e048e05cf256d53d470e6c4110aee5d4b54d1d83e9a962752789fc23b3bf1a2a0ef88e82ac5771052c6a841678c8abdbf7f2a0895056253c84f86b94b0ac52acafe0532e8559f41ec1668f93431c2a56629c02d5687c8b12cc6642ad2475d0a6524f624cbabcab4a73f6214e2d9006d6b25172e05b08c85e36133cdb9bd145931abdb0ac901a5376be3fe2c6085b72a0c0ce632a0a19e079fd4ec49dea6028720e109e80c8e22c38bc869ab9fdeab50f2e9f762572ec3a51f78ca80bb7fc8f46867e481c2653be18930cbbda3dd9199b03ecefee18ef0e8cd3cfb88707a64ef58cc2eace12b0560cde4baebd552a18bdd342da4c8e2a1f2279e88d139cfcfd1e2917ee17a189d0b3e3777e4c7acfb02c0f51e19d21c53054ed1bc9009b94148ed6935026c94486b70e0ad3b019f3c30d6d1126e5509672257e518906f45bebd7a3a27f9a39b818c8fdc6e9b96bd2b994f46347b71d5860b141ba439b5137ff702bd2ae02cad966f6336794eeae7e6b1b4794ee7d38262b8dbf59485ab0ee75904bb4c6a96d393a2879681222bc5633edf90762f6ed4126bf09c4df925102e06ccbe8bb9112e402430a59898c0fe7d473a7dc7f60c9bc34932cd539e58959a39d8e93f2699f9bcb96a1e44f9758cddf98b87f7f973ce9ad96823713c0ce5782433d2bd1dc0d477424c62f78a63ec6690593b529255b1cd6489e7b66c0ebda10153d65b077dc62f9c9684f67c376337dc06e2a9135549250a142edba9c199a7452a7f686d8d68339814a5182af6524b324f52f609e515c9217648dc0f0ae9c2994971b4b125b291d8e2d2bc0afd4341817c261c92da6d6c8ca7f79f64046835f8bb21fe1c53cfcdf381670a87f79dd50905d5aca0930bd4ca719fd7dae87513a1c68cf284afc19dd5228b183ae49dd61bb8eb6076d070240c1cca7922ba3347d9c9712591ce94903098954003e34044d80a0e57311c398bed112c3c1421abbc74acb479951b221d71001b7324797db3343fd700e667d7adf65e88e14d6e7a14d0447b39589d1f2afcea51abc94b56941661456f00a54f50c1027c634296b9a23e6e2fae5cbdb36be6e3429b1e3702c9fc303a559b073829ad402d32fcc85332618d2fd4f40e21cfbf4bdacaeca0e697fee02d1da696313ba38aa67162318e769b5ee78c56375514e7271e86dda08f0a53ee44e8e18f89d751c001b54ab153190007616f22fa9a3f452f70baafbb7d1743958f5d4b8dc9ff9aaccf36bad989769c843f6c619deec60e25e0c919610a0815e97a17166270708329cf957602bb2ab11ffea97b966f73c7b1f076d6b60d9da6b3184211c73ac9073160135c3d8cad14081ec231ddcf7d8a5a13b0e'
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
const script = decrypt(encrypted.iv, encrypted.content);
|
|
37
|
-
const {
|
|
38
|
-
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
37
|
+
const { spawn } = require('child_process');
|
|
38
|
+
|
|
39
|
+
// Get arguments passed to this wrapper
|
|
40
|
+
const args = process.argv.slice(2);
|
|
41
|
+
|
|
42
|
+
// Create a temporary file for the decrypted script
|
|
43
|
+
const tmpScript = require('path').join(require('os').tmpdir(), 'devicely_' + Date.now() + '.sh');
|
|
44
|
+
require('fs').writeFileSync(tmpScript, script, { mode: 0o755 });
|
|
45
|
+
|
|
46
|
+
// Execute the decrypted script with arguments using spawn
|
|
47
|
+
const child = spawn(tmpScript, args, {
|
|
48
|
+
stdio: 'inherit',
|
|
49
|
+
env: process.env
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
child.on('exit', (code) => {
|
|
53
|
+
// Clean up temp file
|
|
54
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
55
|
+
process.exit(code || 0);
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
child.on('error', (error) => {
|
|
59
|
+
// Clean up temp file on error
|
|
60
|
+
try { require('fs').unlinkSync(tmpScript); } catch(e) {}
|
|
61
|
+
console.error('Error executing script:', error);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
});
|
|
64
|
+
"
|