@corellium/corellium-cli 1.0.3 → 1.0.6
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +5 -17
- package/docs/OVERVIEW.md +1 -1
- package/jenkinsbuild/build.sh +1 -1
- package/package.json +3 -3
- package/src/TrialAccount.js +76 -0
- package/src/commands/Client.js +2 -2
- package/src/commands/agent/Agent.js +10 -19
- package/src/commands/agent/apps.js +2 -1
- package/src/commands/agent/file.js +2 -1
- package/src/commands/agent/index.js +1 -0
- package/src/commands/agent/ready.js +43 -0
- package/src/commands/extensions/delete.js +2 -1
- package/src/commands/extensions/list.js +2 -1
- package/src/commands/extensions/load.js +2 -1
- package/src/commands/extensions/validate.js +2 -1
- package/src/commands/firmware/list.js +2 -1
- package/src/commands/firmware/load.js +2 -1
- package/src/commands/images/create.js +2 -1
- package/src/commands/images/delete.js +2 -1
- package/src/commands/images/list.js +2 -1
- package/src/commands/instances/Instance.js +27 -0
- package/src/commands/instances/create.js +11 -4
- package/src/commands/instances/delete.js +20 -5
- package/src/commands/instances/index.js +2 -1
- package/src/commands/instances/list.js +11 -5
- package/src/commands/instances/start.js +2 -1
- package/src/commands/instances/stop.js +2 -1
- package/src/commands/instances/upgrade.js +90 -0
- package/src/commands/login.js +14 -2
- package/src/commands/logout.js +2 -1
- package/src/commands/projects/create.js +2 -1
- package/src/commands/projects/delete.js +2 -1
- package/src/commands/projects/list.js +2 -1
- package/src/commands/signup.js +14 -5
- package/src/commands/webplayer/WebPlayer.js +2 -1
- package/src/commands/webplayer/create.js +8 -1
- package/src/commands/webplayer/destroy.js +2 -1
- package/src/commands/webplayer/list.js +19 -17
- package/src/commands/webplayer/login.js +2 -1
- package/src/error.js +14 -1
- package/src/logging.js +1 -1
- package/src/profile.js +12 -9
- package/src/resumable.js +1314 -0
- package/src/table.js +7 -2
- package/src/upload.js +64 -2
- package/src/utils.js +11 -4
- package/test/test.js +89 -0
- package/example/WebPlayerSample.js +0 -263
- package/node_modules/@corellium/corellium-api/README.md +0 -1210
- package/node_modules/@corellium/corellium-api/node_modules/form-data/License +0 -19
- package/node_modules/@corellium/corellium-api/node_modules/form-data/README.md.bak +0 -356
- package/node_modules/@corellium/corellium-api/node_modules/form-data/Readme.md +0 -356
- package/node_modules/@corellium/corellium-api/node_modules/form-data/index.d.ts +0 -62
- package/node_modules/@corellium/corellium-api/node_modules/form-data/lib/browser.js +0 -2
- package/node_modules/@corellium/corellium-api/node_modules/form-data/lib/form_data.js +0 -498
- package/node_modules/@corellium/corellium-api/node_modules/form-data/lib/populate.js +0 -10
- package/node_modules/@corellium/corellium-api/node_modules/form-data/package.json +0 -104
- package/node_modules/@corellium/corellium-api/node_modules/uuid/AUTHORS +0 -5
- package/node_modules/@corellium/corellium-api/node_modules/uuid/CHANGELOG.md +0 -119
- package/node_modules/@corellium/corellium-api/node_modules/uuid/LICENSE.md +0 -21
- package/node_modules/@corellium/corellium-api/node_modules/uuid/README.md +0 -276
- package/node_modules/@corellium/corellium-api/node_modules/uuid/bin/uuid +0 -65
- package/node_modules/@corellium/corellium-api/node_modules/uuid/index.js +0 -8
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/bytesToUuid.js +0 -26
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/md5-browser.js +0 -216
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/md5.js +0 -25
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/rng-browser.js +0 -34
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/rng.js +0 -8
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/sha1-browser.js +0 -89
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/sha1.js +0 -25
- package/node_modules/@corellium/corellium-api/node_modules/uuid/lib/v35.js +0 -57
- package/node_modules/@corellium/corellium-api/node_modules/uuid/package.json +0 -103
- package/node_modules/@corellium/corellium-api/node_modules/uuid/v1.js +0 -109
- package/node_modules/@corellium/corellium-api/node_modules/uuid/v3.js +0 -4
- package/node_modules/@corellium/corellium-api/node_modules/uuid/v4.js +0 -29
- package/node_modules/@corellium/corellium-api/node_modules/uuid/v5.js +0 -3
- package/node_modules/@corellium/corellium-api/package.json +0 -106
- package/node_modules/@corellium/corellium-api/resumable.js +0 -1312
- package/node_modules/@corellium/corellium-api/src/agent.js +0 -962
- package/node_modules/@corellium/corellium-api/src/corellium.js +0 -444
- package/node_modules/@corellium/corellium-api/src/images.js +0 -131
- package/node_modules/@corellium/corellium-api/src/input.js +0 -178
- package/node_modules/@corellium/corellium-api/src/instance-updater.js +0 -56
- package/node_modules/@corellium/corellium-api/src/instance.js +0 -1031
- package/node_modules/@corellium/corellium-api/src/netmon.js +0 -308
- package/node_modules/@corellium/corellium-api/src/project.js +0 -393
- package/node_modules/@corellium/corellium-api/src/role.js +0 -65
- package/node_modules/@corellium/corellium-api/src/snapshot.js +0 -77
- package/node_modules/@corellium/corellium-api/src/team.js +0 -29
- package/node_modules/@corellium/corellium-api/src/user.js +0 -51
- package/node_modules/@corellium/corellium-api/src/util/fetch.js +0 -62
- package/node_modules/@corellium/corellium-api/src/util/sleep.js +0 -7
- package/node_modules/@corellium/corellium-api/test/integration-tests.js +0 -1292
- package/node_modules/@corellium/corellium-api/test/root-hook-set-flag-if-test-failed.js +0 -7
- package/node_modules/async-limiter/.eslintignore +0 -2
- package/node_modules/async-limiter/.nycrc +0 -10
- package/node_modules/async-limiter/.travis.yml +0 -9
- package/node_modules/async-limiter/LICENSE +0 -8
- package/node_modules/async-limiter/index.js +0 -67
- package/node_modules/async-limiter/package.json +0 -72
- package/node_modules/async-limiter/readme.md +0 -132
- package/node_modules/buffer-crc32/LICENSE +0 -19
- package/node_modules/buffer-crc32/README.md +0 -47
- package/node_modules/buffer-crc32/index.js +0 -111
- package/node_modules/buffer-crc32/package.json +0 -72
- package/node_modules/cross-fetch/LICENSE +0 -21
- package/node_modules/cross-fetch/README.md +0 -169
- package/node_modules/cross-fetch/dist/browser-polyfill.js +0 -532
- package/node_modules/cross-fetch/dist/browser-ponyfill.js +0 -554
- package/node_modules/cross-fetch/dist/cross-fetch.js +0 -2
- package/node_modules/cross-fetch/dist/cross-fetch.js.map +0 -1
- package/node_modules/cross-fetch/dist/node-polyfill.js +0 -11
- package/node_modules/cross-fetch/dist/node-ponyfill.js +0 -22
- package/node_modules/cross-fetch/dist/react-native-polyfill.js +0 -12
- package/node_modules/cross-fetch/dist/react-native-ponyfill.js +0 -6
- package/node_modules/cross-fetch/index.d.ts +0 -14
- package/node_modules/cross-fetch/package.json +0 -160
- package/node_modules/cross-fetch/polyfill/package.json +0 -8
- package/node_modules/duplexify/.travis.yml +0 -6
- package/node_modules/duplexify/LICENSE +0 -21
- package/node_modules/duplexify/README.md +0 -97
- package/node_modules/duplexify/example.js +0 -21
- package/node_modules/duplexify/index.js +0 -234
- package/node_modules/duplexify/package.json +0 -69
- package/node_modules/duplexify/test.js +0 -295
- package/node_modules/end-of-stream/LICENSE +0 -21
- package/node_modules/end-of-stream/README.md +0 -54
- package/node_modules/end-of-stream/index.js +0 -94
- package/node_modules/end-of-stream/package.json +0 -69
- package/node_modules/fast-stable-stringify/.npmignore +0 -4
- package/node_modules/fast-stable-stringify/.travis.yml +0 -10
- package/node_modules/fast-stable-stringify/LICENSE +0 -21
- package/node_modules/fast-stable-stringify/README.md +0 -81
- package/node_modules/fast-stable-stringify/cli/files-to-comparison-results.js +0 -67
- package/node_modules/fast-stable-stringify/cli/format-table.js +0 -70
- package/node_modules/fast-stable-stringify/cli/index.js +0 -19
- package/node_modules/fast-stable-stringify/fixtures/index.js +0 -5
- package/node_modules/fast-stable-stringify/fixtures/input-data-types.js +0 -191
- package/node_modules/fast-stable-stringify/fixtures/log-result.json +0 -22
- package/node_modules/fast-stable-stringify/fixtures/log.txt +0 -24
- package/node_modules/fast-stable-stringify/index.js +0 -73
- package/node_modules/fast-stable-stringify/karma.conf.js +0 -124
- package/node_modules/fast-stable-stringify/karma.conf.travis.js +0 -95
- package/node_modules/fast-stable-stringify/package.json +0 -77
- package/node_modules/fast-stable-stringify/results/escape-long/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/IE 10.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/IE 11.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/IE 9.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-long/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/IE 10.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/IE 11.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/IE 9.0.0 (Windows 7 0.0.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape-short/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -57
- package/node_modules/fast-stable-stringify/results/escape.md +0 -20
- package/node_modules/fast-stable-stringify/results/itar-long/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-long/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar-short/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -35
- package/node_modules/fast-stable-stringify/results/itar.md +0 -20
- package/node_modules/fast-stable-stringify/results/iter/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Chrome Mobile 39.0.0 (Android 5.1.1).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Mobile Safari 9.0.0 (iOS 9.2.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter/Safari 9.1.2 (Mac OS X 10.11.6).json +0 -35
- package/node_modules/fast-stable-stringify/results/iter.md +0 -14
- package/node_modules/fast-stable-stringify/results/libs/Chrome 60.0.3112 (Windows 7 0.0.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/Chrome Mobile 55.0.2883 (Android 6.0.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/Edge 14.14393.0 (Windows 10 0.0.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/Firefox 54.0.0 (Windows 7 0.0.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/IE 10.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/libs/IE 11.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/libs/IE 9.0.0 (Windows 7 0.0.0).json +0 -35
- package/node_modules/fast-stable-stringify/results/libs/Mobile Safari 10.0.0 (iOS 10.3.0).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs/Safari 10.0.1 (Mac OS X 10.12.1).json +0 -46
- package/node_modules/fast-stable-stringify/results/libs.md +0 -15
- package/node_modules/fast-stable-stringify/test/escape-long.js +0 -147
- package/node_modules/fast-stable-stringify/test/escape-short.js +0 -147
- package/node_modules/fast-stable-stringify/test/index.js +0 -6
- package/node_modules/fast-stable-stringify/test/itar-long.js +0 -52
- package/node_modules/fast-stable-stringify/test/itar-short.js +0 -52
- package/node_modules/fast-stable-stringify/test/iter.js +0 -84
- package/node_modules/fast-stable-stringify/test/libs.js +0 -57
- package/node_modules/fast-stable-stringify/test/travis.js +0 -43
- package/node_modules/fast-stable-stringify/test/validate.js +0 -24
- package/node_modules/fast-stable-stringify/util/eachRecursive.js +0 -9
- package/node_modules/fast-stable-stringify/util/get-git-hash-sync.js +0 -21
- package/node_modules/fast-stable-stringify/util/get-lib-info.js +0 -22
- package/node_modules/fast-stable-stringify/util/object-path.js +0 -47
- package/node_modules/fast-stable-stringify/v8-profile/bench.js +0 -8
- package/node_modules/fast-stable-stringify/v8-profile/run.sh +0 -2
- package/node_modules/fast-stable-stringify/zuul-local.sh +0 -2
- package/node_modules/hkdf/.npmignore +0 -2
- package/node_modules/hkdf/README.md +0 -23
- package/node_modules/hkdf/hkdf.py +0 -171
- package/node_modules/hkdf/hkdf.pyc +0 -0
- package/node_modules/hkdf/index.js +0 -1
- package/node_modules/hkdf/lib/hkdf.js +0 -55
- package/node_modules/hkdf/package.json +0 -55
- package/node_modules/hkdf/scripts/run_all_tests.sh +0 -19
- package/node_modules/hkdf/test/all-test.js +0 -79
- package/node_modules/hkdf/test.py +0 -11
- package/node_modules/immediate/LICENSE.txt +0 -20
- package/node_modules/immediate/README.md +0 -93
- package/node_modules/immediate/dist/immediate.js +0 -75
- package/node_modules/immediate/dist/immediate.min.js +0 -1
- package/node_modules/immediate/lib/browser.js +0 -69
- package/node_modules/immediate/lib/index.js +0 -73
- package/node_modules/immediate/package.json +0 -86
- package/node_modules/isarray/.npmignore +0 -1
- package/node_modules/isarray/.travis.yml +0 -4
- package/node_modules/isarray/Makefile +0 -6
- package/node_modules/isarray/README.md +0 -60
- package/node_modules/isarray/component.json +0 -19
- package/node_modules/isarray/index.js +0 -5
- package/node_modules/isarray/package.json +0 -77
- package/node_modules/isarray/test.js +0 -20
- package/node_modules/jszip/.codeclimate.yml +0 -16
- package/node_modules/jszip/.editorconfig +0 -8
- package/node_modules/jszip/.github/workflows/pr.yaml +0 -41
- package/node_modules/jszip/.jshintignore +0 -1
- package/node_modules/jszip/.jshintrc +0 -21
- package/node_modules/jszip/.travis.yml +0 -17
- package/node_modules/jszip/CHANGES.md +0 -192
- package/node_modules/jszip/LICENSE.markdown +0 -651
- package/node_modules/jszip/README.markdown +0 -33
- package/node_modules/jszip/dist/jszip.js +0 -11583
- package/node_modules/jszip/dist/jszip.min.js +0 -13
- package/node_modules/jszip/index.d.ts +0 -335
- package/node_modules/jszip/lib/base64.js +0 -106
- package/node_modules/jszip/lib/compressedObject.js +0 -74
- package/node_modules/jszip/lib/compressions.js +0 -14
- package/node_modules/jszip/lib/crc32.js +0 -77
- package/node_modules/jszip/lib/defaults.js +0 -11
- package/node_modules/jszip/lib/external.js +0 -19
- package/node_modules/jszip/lib/flate.js +0 -85
- package/node_modules/jszip/lib/generate/ZipFileWorker.js +0 -540
- package/node_modules/jszip/lib/generate/index.js +0 -57
- package/node_modules/jszip/lib/index.js +0 -55
- package/node_modules/jszip/lib/license_header.js +0 -11
- package/node_modules/jszip/lib/load.js +0 -88
- package/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +0 -74
- package/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +0 -42
- package/node_modules/jszip/lib/nodejsUtils.js +0 -57
- package/node_modules/jszip/lib/object.js +0 -389
- package/node_modules/jszip/lib/readable-stream-browser.js +0 -9
- package/node_modules/jszip/lib/reader/ArrayReader.js +0 -57
- package/node_modules/jszip/lib/reader/DataReader.js +0 -116
- package/node_modules/jszip/lib/reader/NodeBufferReader.js +0 -19
- package/node_modules/jszip/lib/reader/StringReader.js +0 -38
- package/node_modules/jszip/lib/reader/Uint8ArrayReader.js +0 -22
- package/node_modules/jszip/lib/reader/readerFor.js +0 -28
- package/node_modules/jszip/lib/signature.js +0 -7
- package/node_modules/jszip/lib/stream/ConvertWorker.js +0 -26
- package/node_modules/jszip/lib/stream/Crc32Probe.js +0 -24
- package/node_modules/jszip/lib/stream/DataLengthProbe.js +0 -29
- package/node_modules/jszip/lib/stream/DataWorker.js +0 -116
- package/node_modules/jszip/lib/stream/GenericWorker.js +0 -263
- package/node_modules/jszip/lib/stream/StreamHelper.js +0 -212
- package/node_modules/jszip/lib/support.js +0 -38
- package/node_modules/jszip/lib/utf8.js +0 -275
- package/node_modules/jszip/lib/utils.js +0 -501
- package/node_modules/jszip/lib/zipEntries.js +0 -262
- package/node_modules/jszip/lib/zipEntry.js +0 -294
- package/node_modules/jszip/lib/zipObject.js +0 -133
- package/node_modules/jszip/package.json +0 -99
- package/node_modules/jszip/tsconfig.json +0 -101
- package/node_modules/jszip/vendor/FileSaver.js +0 -247
- package/node_modules/lie/README.md +0 -62
- package/node_modules/lie/dist/lie.js +0 -350
- package/node_modules/lie/dist/lie.min.js +0 -1
- package/node_modules/lie/dist/lie.polyfill.js +0 -358
- package/node_modules/lie/dist/lie.polyfill.min.js +0 -1
- package/node_modules/lie/lib/browser.js +0 -273
- package/node_modules/lie/lib/index.js +0 -298
- package/node_modules/lie/license.md +0 -7
- package/node_modules/lie/lie.d.ts +0 -244
- package/node_modules/lie/package.json +0 -98
- package/node_modules/lie/polyfill.js +0 -4
- package/node_modules/p-finally/index.js +0 -15
- package/node_modules/p-finally/license +0 -21
- package/node_modules/p-finally/package.json +0 -77
- package/node_modules/p-finally/readme.md +0 -47
- package/node_modules/p-retry/index.js +0 -52
- package/node_modules/p-retry/license +0 -9
- package/node_modules/p-retry/package.json +0 -83
- package/node_modules/p-retry/readme.md +0 -109
- package/node_modules/p-timeout/index.d.ts +0 -72
- package/node_modules/p-timeout/index.js +0 -57
- package/node_modules/p-timeout/license +0 -9
- package/node_modules/p-timeout/package.json +0 -80
- package/node_modules/p-timeout/readme.md +0 -87
- package/node_modules/pako/CHANGELOG.md +0 -164
- package/node_modules/pako/LICENSE +0 -21
- package/node_modules/pako/README.md +0 -191
- package/node_modules/pako/dist/pako.js +0 -6818
- package/node_modules/pako/dist/pako.min.js +0 -1
- package/node_modules/pako/dist/pako_deflate.js +0 -3997
- package/node_modules/pako/dist/pako_deflate.min.js +0 -1
- package/node_modules/pako/dist/pako_inflate.js +0 -3300
- package/node_modules/pako/dist/pako_inflate.min.js +0 -1
- package/node_modules/pako/index.js +0 -14
- package/node_modules/pako/lib/deflate.js +0 -400
- package/node_modules/pako/lib/inflate.js +0 -423
- package/node_modules/pako/lib/utils/common.js +0 -105
- package/node_modules/pako/lib/utils/strings.js +0 -187
- package/node_modules/pako/lib/zlib/README +0 -59
- package/node_modules/pako/lib/zlib/adler32.js +0 -51
- package/node_modules/pako/lib/zlib/constants.js +0 -68
- package/node_modules/pako/lib/zlib/crc32.js +0 -59
- package/node_modules/pako/lib/zlib/deflate.js +0 -1874
- package/node_modules/pako/lib/zlib/gzheader.js +0 -58
- package/node_modules/pako/lib/zlib/inffast.js +0 -345
- package/node_modules/pako/lib/zlib/inflate.js +0 -1556
- package/node_modules/pako/lib/zlib/inftrees.js +0 -343
- package/node_modules/pako/lib/zlib/messages.js +0 -32
- package/node_modules/pako/lib/zlib/trees.js +0 -1222
- package/node_modules/pako/lib/zlib/zstream.js +0 -47
- package/node_modules/pako/package.json +0 -94
- package/node_modules/process-nextick-args/index.js +0 -45
- package/node_modules/process-nextick-args/license.md +0 -19
- package/node_modules/process-nextick-args/package.json +0 -53
- package/node_modules/process-nextick-args/readme.md +0 -18
- package/node_modules/readable-stream/.travis.yml +0 -34
- package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
- package/node_modules/readable-stream/GOVERNANCE.md +0 -136
- package/node_modules/readable-stream/LICENSE +0 -47
- package/node_modules/readable-stream/README.md +0 -58
- package/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
- package/node_modules/readable-stream/duplex-browser.js +0 -1
- package/node_modules/readable-stream/duplex.js +0 -1
- package/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
- package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
- package/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
- package/node_modules/readable-stream/lib/_stream_transform.js +0 -214
- package/node_modules/readable-stream/lib/_stream_writable.js +0 -687
- package/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
- package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
- package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
- package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
- package/node_modules/readable-stream/package.json +0 -86
- package/node_modules/readable-stream/passthrough.js +0 -1
- package/node_modules/readable-stream/readable-browser.js +0 -7
- package/node_modules/readable-stream/readable.js +0 -19
- package/node_modules/readable-stream/transform.js +0 -1
- package/node_modules/readable-stream/writable-browser.js +0 -1
- package/node_modules/readable-stream/writable.js +0 -8
- package/node_modules/retry/.npmignore +0 -3
- package/node_modules/retry/.travis.yml +0 -15
- package/node_modules/retry/License +0 -21
- package/node_modules/retry/Makefile +0 -18
- package/node_modules/retry/README.md +0 -227
- package/node_modules/retry/equation.gif +0 -0
- package/node_modules/retry/example/dns.js +0 -31
- package/node_modules/retry/example/stop.js +0 -40
- package/node_modules/retry/index.js +0 -1
- package/node_modules/retry/lib/retry.js +0 -100
- package/node_modules/retry/lib/retry_operation.js +0 -158
- package/node_modules/retry/package.json +0 -67
- package/node_modules/retry/test/common.js +0 -10
- package/node_modules/retry/test/integration/test-forever.js +0 -24
- package/node_modules/retry/test/integration/test-retry-operation.js +0 -258
- package/node_modules/retry/test/integration/test-retry-wrap.js +0 -101
- package/node_modules/retry/test/integration/test-timeouts.js +0 -69
- package/node_modules/setimmediate/LICENSE.txt +0 -20
- package/node_modules/setimmediate/package.json +0 -77
- package/node_modules/setimmediate/setImmediate.js +0 -186
- package/node_modules/split/.npmignore +0 -3
- package/node_modules/split/.travis.yml +0 -3
- package/node_modules/split/LICENCE +0 -22
- package/node_modules/split/examples/pretty.js +0 -26
- package/node_modules/split/index.js +0 -63
- package/node_modules/split/package.json +0 -65
- package/node_modules/split/readme.markdown +0 -72
- package/node_modules/split/test/options.asynct.js +0 -46
- package/node_modules/split/test/partitioned_unicode.js +0 -34
- package/node_modules/split/test/split.asynct.js +0 -137
- package/node_modules/split/test/try_catch.asynct.js +0 -51
- package/node_modules/stream-shift/.travis.yml +0 -6
- package/node_modules/stream-shift/LICENSE +0 -21
- package/node_modules/stream-shift/README.md +0 -25
- package/node_modules/stream-shift/index.js +0 -20
- package/node_modules/stream-shift/package.json +0 -56
- package/node_modules/stream-shift/test.js +0 -48
- package/node_modules/ultron/LICENSE +0 -22
- package/node_modules/ultron/README.md +0 -113
- package/node_modules/ultron/index.js +0 -136
- package/node_modules/ultron/package.json +0 -71
- package/node_modules/websocket-stream/LICENSE +0 -8
- package/node_modules/websocket-stream/collaborators.md +0 -11
- package/node_modules/websocket-stream/echo-server.js +0 -51
- package/node_modules/websocket-stream/index.d.ts +0 -27
- package/node_modules/websocket-stream/index.js +0 -6
- package/node_modules/websocket-stream/package.json +0 -82
- package/node_modules/websocket-stream/readme.md +0 -148
- package/node_modules/websocket-stream/server.js +0 -29
- package/node_modules/websocket-stream/stream.js +0 -189
- package/node_modules/websocket-stream/test-client.js +0 -74
- package/node_modules/websocket-stream/test-server.js +0 -56
- package/node_modules/websocket-stream/test.js +0 -338
- package/node_modules/websocket-stream/ts-tests.ts +0 -69
- package/node_modules/websocket-stream/ws-fallback.js +0 -12
- package/node_modules/ws/LICENSE +0 -21
- package/node_modules/ws/README.md +0 -341
- package/node_modules/ws/index.js +0 -15
- package/node_modules/ws/lib/.DS_Store +0 -0
- package/node_modules/ws/lib/BufferUtil.js +0 -71
- package/node_modules/ws/lib/Constants.js +0 -10
- package/node_modules/ws/lib/ErrorCodes.js +0 -28
- package/node_modules/ws/lib/EventTarget.js +0 -151
- package/node_modules/ws/lib/Extensions.js +0 -203
- package/node_modules/ws/lib/PerMessageDeflate.js +0 -507
- package/node_modules/ws/lib/Receiver.js +0 -553
- package/node_modules/ws/lib/Sender.js +0 -412
- package/node_modules/ws/lib/Validation.js +0 -17
- package/node_modules/ws/lib/WebSocket.js +0 -717
- package/node_modules/ws/lib/WebSocketServer.js +0 -326
- package/node_modules/ws/package.json +0 -83
- package/node_modules/xhr2/CONTRIBUTING.md +0 -33
- package/node_modules/xhr2/Cakefile +0 -131
- package/node_modules/xhr2/LICENSE.txt +0 -19
- package/node_modules/xhr2/README.md +0 -142
- package/node_modules/xhr2/lib/browser.js +0 -1
- package/node_modules/xhr2/lib/xhr2.js +0 -1244
- package/node_modules/xhr2/package.json +0 -103
- package/node_modules/xhr2/src/000-xml_http_request_event_target.coffee +0 -89
- package/node_modules/xhr2/src/001-xml_http_request.coffee +0 -781
- package/node_modules/xhr2/src/errors.coffee +0 -31
- package/node_modules/xhr2/src/progress_event.coffee +0 -39
- package/node_modules/xhr2/src/xml_http_request_upload.coffee +0 -95
- package/node_modules/xhr2/test/fixtures/hello.json +0 -1
- package/node_modules/xhr2/test/fixtures/hello.txt +0 -1
- package/node_modules/xhr2/test/fixtures/xhr2.png +0 -0
- package/node_modules/xhr2/test/html/browser_test.html +0 -30
- package/node_modules/xhr2/test/src/event_target_test.coffee +0 -85
- package/node_modules/xhr2/test/src/events_test.coffee +0 -204
- package/node_modules/xhr2/test/src/headers_test.coffee +0 -168
- package/node_modules/xhr2/test/src/helpers/browser_mocha_runner.coffee +0 -10
- package/node_modules/xhr2/test/src/helpers/browser_mocha_setup.coffee +0 -1
- package/node_modules/xhr2/test/src/helpers/setup.coffee +0 -38
- package/node_modules/xhr2/test/src/helpers/xhr_server.coffee +0 -156
- package/node_modules/xhr2/test/src/nodejs_set_test.coffee +0 -162
- package/node_modules/xhr2/test/src/redirect_test.coffee +0 -57
- package/node_modules/xhr2/test/src/response_type_test.coffee +0 -88
- package/node_modules/xhr2/test/src/responseurl_test.coffee +0 -18
- package/node_modules/xhr2/test/src/send_test.coffee +0 -89
- package/node_modules/xhr2/test/src/status_test.coffee +0 -47
- package/node_modules/xhr2/test/src/xhr_test.coffee +0 -102
- package/node_modules/xtend/.jshintrc +0 -30
- package/node_modules/xtend/LICENSE +0 -20
- package/node_modules/xtend/README.md +0 -32
- package/node_modules/xtend/immutable.js +0 -19
- package/node_modules/xtend/mutable.js +0 -17
- package/node_modules/xtend/package.json +0 -89
- package/node_modules/xtend/test.js +0 -103
- package/node_modules/yazl/LICENSE +0 -21
- package/node_modules/yazl/README.md +0 -389
- package/node_modules/yazl/index.js +0 -749
- package/node_modules/yazl/package.json +0 -69
- package/src/commands/CorelliumAPI.js +0 -76
- package/src/subscriberInvite.js +0 -140
@@ -1,1031 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
const { fetchApi } = require("./util/fetch");
|
4
|
-
const EventEmitter = require("events");
|
5
|
-
const wsstream = require("websocket-stream");
|
6
|
-
const Snapshot = require("./snapshot");
|
7
|
-
const Agent = require("./agent");
|
8
|
-
const pTimeout = require("p-timeout");
|
9
|
-
const NetworkMonitor = require("./netmon");
|
10
|
-
const { sleep } = require("./util/sleep");
|
11
|
-
const util = require("util");
|
12
|
-
const fs = require("fs");
|
13
|
-
const { compress, uploadFile } = require("./images");
|
14
|
-
const uuidv4 = require("uuid/v4");
|
15
|
-
const split = require("split");
|
16
|
-
|
17
|
-
/**
|
18
|
-
* @typedef {object} ThreadInfo
|
19
|
-
* @property {string} pid - process PID
|
20
|
-
* @property {string} kernelId - process ID in kernel
|
21
|
-
* @property {string} name - process name
|
22
|
-
* @property {object[]} threads - process threads
|
23
|
-
* @property {string} threads[].tid - thread ID
|
24
|
-
* @property {string} threads[].kernelId - thread ID in kernel
|
25
|
-
*/
|
26
|
-
|
27
|
-
/**
|
28
|
-
* @typedef {object} PanicInfo
|
29
|
-
* @property {integer} flags
|
30
|
-
* @property {string} panic
|
31
|
-
* @property {string} stackshot
|
32
|
-
* @property {string} other
|
33
|
-
* @property {integer} ts
|
34
|
-
*/
|
35
|
-
|
36
|
-
/**
|
37
|
-
* @typedef {object} PeripheralData
|
38
|
-
* @property {string} gpsToffs - GPS time offset
|
39
|
-
* @property {string} gpsLat - GPS latitude
|
40
|
-
* @property {string} gpsLon - GPS longitude
|
41
|
-
* @property {string} gpsAlt - GPS altitude
|
42
|
-
* @property {string} acOnline - Is AC charger present, options ['0' , '1']
|
43
|
-
* @property {string} batteryPresent - Is battery present, options ['0' , '1']
|
44
|
-
* @property {string} batteryStatus - Battery charging status, options ['charging', 'discharging', 'not-charging']
|
45
|
-
* @property {string} batteryHealth - Battery health, options ['good', 'overheat', 'dead', 'overvolt', 'failure']
|
46
|
-
* @property {string} batteryCapacity - Battery capacity, options 0-100
|
47
|
-
* @property {string} acceleration - Acceleration sensor
|
48
|
-
* @property {string} gyroscope - Gyroscope sensor
|
49
|
-
* @property {string} magnetic - Magnetic sensor
|
50
|
-
* @property {string} orientation - Orientation sensor
|
51
|
-
* @property {string} temperature - Temperator sensor
|
52
|
-
* @property {string} proximity - Proximity sensor
|
53
|
-
* @property {string} light - Light sensor
|
54
|
-
* @property {string} pressure - Pressure sensor
|
55
|
-
* @property {string} humidity - Humidity sensor
|
56
|
-
*/
|
57
|
-
|
58
|
-
/**
|
59
|
-
* @typedef {object} RateInfo
|
60
|
-
* Convert microcents to USD using rate / 1000000 / 100 * seconds where rate is rateInfo.onRateMicrocents or rateInfo.offRateMicrocents and seconds is the number of seconds the instance is running.
|
61
|
-
* @property {integer} onRateMicrocents - The amount per second, in microcents (USD), that this instance charges to be running.
|
62
|
-
* @property {integer} offRateMicrocents - The amount per second, in microcents (USD), that this instance charges to be stored.
|
63
|
-
*/
|
64
|
-
|
65
|
-
/**
|
66
|
-
* Instances of this class are returned from {@link Project#instances}, {@link
|
67
|
-
* Project#getInstance}, and {@link Project#createInstance}. They should not be
|
68
|
-
* created using the constructor.
|
69
|
-
* @hideconstructor
|
70
|
-
*/
|
71
|
-
class Instance extends EventEmitter {
|
72
|
-
constructor(project, info) {
|
73
|
-
super();
|
74
|
-
|
75
|
-
this.project = project;
|
76
|
-
this.info = info;
|
77
|
-
this.infoDate = new Date();
|
78
|
-
this.id = info.id;
|
79
|
-
this.updating = false;
|
80
|
-
|
81
|
-
this.hash = null;
|
82
|
-
this.hypervisorStream = null;
|
83
|
-
this._agent = null;
|
84
|
-
this._netmon = null;
|
85
|
-
this.lastPanicLength = null;
|
86
|
-
this.volumeId = null;
|
87
|
-
|
88
|
-
this.on("newListener", (event) => {
|
89
|
-
if (event === "change") {
|
90
|
-
this.project.updater.add(this);
|
91
|
-
}
|
92
|
-
});
|
93
|
-
this.on("removeListener", (event) => {
|
94
|
-
if (event === "change" && this.listenerCount("change") == 0) {
|
95
|
-
this.project.updater.remove(this);
|
96
|
-
}
|
97
|
-
});
|
98
|
-
}
|
99
|
-
|
100
|
-
/**
|
101
|
-
* The instance name.
|
102
|
-
*/
|
103
|
-
get name() {
|
104
|
-
return this.info.name;
|
105
|
-
}
|
106
|
-
|
107
|
-
/**
|
108
|
-
* The instance state. Possible values include:
|
109
|
-
*
|
110
|
-
* State|Description
|
111
|
-
* -|-
|
112
|
-
* `on`|The instance is powered on.
|
113
|
-
* `off`|The instance is powered off.
|
114
|
-
* `creating`|The instance is in the process of creating.
|
115
|
-
* `deleting`|The instance is in the process of deleting.
|
116
|
-
* `deleted`|The instance is deleted, instance will set to undefined.
|
117
|
-
* `paused`|The instance is paused.
|
118
|
-
*
|
119
|
-
* A full list of possible values is available in the API documentation.
|
120
|
-
*/
|
121
|
-
get state() {
|
122
|
-
return this.info.state;
|
123
|
-
}
|
124
|
-
|
125
|
-
/**
|
126
|
-
* The timestamp when the state last changed.
|
127
|
-
*/
|
128
|
-
get stateChanged() {
|
129
|
-
return this.info.stateChanged;
|
130
|
-
}
|
131
|
-
|
132
|
-
/**
|
133
|
-
* The instance flavor, such as `iphone6`.
|
134
|
-
*/
|
135
|
-
get flavor() {
|
136
|
-
return this.info.flavor;
|
137
|
-
}
|
138
|
-
|
139
|
-
/**
|
140
|
-
* The instance type, such as `ios`.
|
141
|
-
*/
|
142
|
-
get type() {
|
143
|
-
return this.info.type;
|
144
|
-
}
|
145
|
-
|
146
|
-
/**
|
147
|
-
* The pending task that is being requested by the user and is being executed by the backend.
|
148
|
-
* This field is null when no tasks are pending. The returned object has two fields: name and options.
|
149
|
-
*
|
150
|
-
* Current options for name are start, stop, pause, unpause, snapshot, revert.
|
151
|
-
* For start and revert, options.bootOptions contains the boot options the instance is to be started with.
|
152
|
-
*
|
153
|
-
*/
|
154
|
-
get userTask() {
|
155
|
-
return this.info.userTask;
|
156
|
-
}
|
157
|
-
|
158
|
-
/**
|
159
|
-
* Return the current task state.
|
160
|
-
*/
|
161
|
-
get taskState() {
|
162
|
-
return this.info.taskState;
|
163
|
-
}
|
164
|
-
|
165
|
-
/**
|
166
|
-
* Rename an instance.
|
167
|
-
* @param {string} name - The new name of the instance.
|
168
|
-
* @example <caption>Renaming the first instance named `foo` to `bar`</caption>
|
169
|
-
* const instances = await project.instances();
|
170
|
-
* const instance = instances.find(instance => instance.name == 'foo');
|
171
|
-
* await instance.rename('bar');
|
172
|
-
*/
|
173
|
-
async rename(name) {
|
174
|
-
await this._fetch("", {
|
175
|
-
method: "PATCH",
|
176
|
-
json: { name },
|
177
|
-
});
|
178
|
-
}
|
179
|
-
|
180
|
-
/**
|
181
|
-
* The instance boot options.
|
182
|
-
*/
|
183
|
-
get bootOptions() {
|
184
|
-
return this.info.bootOptions;
|
185
|
-
}
|
186
|
-
|
187
|
-
/**
|
188
|
-
* Change boot options for an instance.
|
189
|
-
* @param {Object} bootOptions - The new boot options for the instance.
|
190
|
-
* @example <caption>Changing the boot arguments for the instance.</caption>
|
191
|
-
* const instances = await project.instances();
|
192
|
-
* const instance = instances.find(instance => instance.name == 'foo');
|
193
|
-
* await instance.modifyBootOptions(Object.assign({}, instance.bootOptions, {bootArgs: 'new-boot-args'}));
|
194
|
-
*/
|
195
|
-
async modifyBootOptions(bootOptions) {
|
196
|
-
await this._fetch("", {
|
197
|
-
method: "PATCH",
|
198
|
-
json: { bootOptions },
|
199
|
-
});
|
200
|
-
}
|
201
|
-
|
202
|
-
/**
|
203
|
-
* Change device peripheral/sensor values.
|
204
|
-
*
|
205
|
-
* Currently available for Android only.
|
206
|
-
* @param {PeripheralData} peripheralData - The new peripheral options for the instance.
|
207
|
-
* @example <caption>Changing the sensor values for the instance.</caption>
|
208
|
-
* const instances = await project.instances();
|
209
|
-
* const instance = instances.find(instance => instance.name == 'foo');
|
210
|
-
* await instance.modifyPeripherals({
|
211
|
-
* "gpsToffs": "0.000000",
|
212
|
-
* "gpsLat": "37.414300",
|
213
|
-
* "gpsLon": "-122.077400",
|
214
|
-
* "gpsAlt": "45.000000",
|
215
|
-
* "acOnline": "1",
|
216
|
-
* "batteryPresent": "1",
|
217
|
-
* "batteryStatus": "discharging",
|
218
|
-
* "batteryHealth": "overheat",
|
219
|
-
* "batteryCapacity": "99.000000",
|
220
|
-
* "acceleration": "0.000000,9.810000,0.000000",
|
221
|
-
* "gyroscope": "0.000000,0.000000,0.000000",
|
222
|
-
* "magnetic": "0.000000,45.000000,0.000000",
|
223
|
-
* "orientation": "0.000000,0.000000,0.000000",
|
224
|
-
* "temperature": "25.000000",
|
225
|
-
* "proximity": "50.000000",
|
226
|
-
* "light": "20.000000",
|
227
|
-
* "pressure": "1013.250000",
|
228
|
-
* "humidity": "55.000000"
|
229
|
-
* }));
|
230
|
-
*/
|
231
|
-
async modifyPeripherals(peripheralData) {
|
232
|
-
await this._fetch("", {
|
233
|
-
method: "PATCH",
|
234
|
-
json: { peripherals: peripheralData },
|
235
|
-
});
|
236
|
-
}
|
237
|
-
|
238
|
-
/**
|
239
|
-
* Get peripheral/sensor data
|
240
|
-
* @return {Promise<PeripheralData>}
|
241
|
-
* @example
|
242
|
-
* let peripherals = await instance.getPeripherals();
|
243
|
-
*/
|
244
|
-
async getPeripherals() {
|
245
|
-
return await this._fetch("/peripherals", { method: "GET" });
|
246
|
-
}
|
247
|
-
|
248
|
-
/**
|
249
|
-
* Return an array of this instance's {@link Snapshot}s.
|
250
|
-
* @returns {Snapshot[]} This instance's snapshots
|
251
|
-
* @example
|
252
|
-
* const instances = await project.instances();
|
253
|
-
* const instance = instances.find(instance => instance.name == 'foo');
|
254
|
-
* await instance.snapshots();
|
255
|
-
*/
|
256
|
-
async snapshots() {
|
257
|
-
const snapshots = await this._fetch("/snapshots");
|
258
|
-
return snapshots.map((snap) => new Snapshot(this, snap));
|
259
|
-
}
|
260
|
-
|
261
|
-
/**
|
262
|
-
* Take a new snapshot of this instance.
|
263
|
-
* @param {string} name - The name for the new snapshot.
|
264
|
-
* @returns {Snapshot} The new snapshot
|
265
|
-
* @example
|
266
|
-
* const instances = await project.instances();
|
267
|
-
* const instance = instances.find(instance => instance.name == 'foo');
|
268
|
-
* await instance.takeSnapshot("TestSnapshot");
|
269
|
-
*/
|
270
|
-
async takeSnapshot(name) {
|
271
|
-
const snapshot = await this._fetch("/snapshots", {
|
272
|
-
method: "POST",
|
273
|
-
json: { name },
|
274
|
-
});
|
275
|
-
await this.update();
|
276
|
-
await this.waitForUserTask(null);
|
277
|
-
|
278
|
-
return new Snapshot(this, snapshot);
|
279
|
-
}
|
280
|
-
|
281
|
-
/**
|
282
|
-
* Returns a dump of this instance's serial port log.
|
283
|
-
* @return {string}
|
284
|
-
* @example
|
285
|
-
* const instances = await project.instances();
|
286
|
-
* const instance = instances.find(instance => instance.name == 'foo');
|
287
|
-
* console.log(await instance.consoleLog());
|
288
|
-
*/
|
289
|
-
async consoleLog() {
|
290
|
-
const response = await this._fetch("/consoleLog", { response: "raw" });
|
291
|
-
return await response.text();
|
292
|
-
}
|
293
|
-
|
294
|
-
/**
|
295
|
-
* Return an array of recorded kernel panics.
|
296
|
-
* @return {Promise<PanicInfo[]>}
|
297
|
-
* @example
|
298
|
-
* const instances = await project.instances();
|
299
|
-
* const instance = instances.find(instance => instance.name == 'foo');
|
300
|
-
* console.log(await instance.panics());
|
301
|
-
*/
|
302
|
-
async panics() {
|
303
|
-
return await this._fetch("/panics");
|
304
|
-
}
|
305
|
-
|
306
|
-
/**
|
307
|
-
* Clear the recorded kernel panics of this instance.
|
308
|
-
* @example
|
309
|
-
* const instances = await project.instances();
|
310
|
-
* const instance = instances.find(instance => instance.name == 'foo');
|
311
|
-
* await instance.clearPanics();
|
312
|
-
*/
|
313
|
-
async clearPanics() {
|
314
|
-
await this._fetch("/panics", { method: "DELETE" });
|
315
|
-
}
|
316
|
-
|
317
|
-
/**
|
318
|
-
* Return an {@link Agent} connected to this instance. Calling this
|
319
|
-
* method multiple times will reuse the same agent connection.
|
320
|
-
* @returns {Agent}
|
321
|
-
* @example
|
322
|
-
* let agent = await instance.agent();
|
323
|
-
* await agent.ready();
|
324
|
-
*/
|
325
|
-
async agent() {
|
326
|
-
if (this._agent && !this._agent.connected && !this._agent.pendingConnect) {
|
327
|
-
this._agent.disconnect();
|
328
|
-
delete this._agent;
|
329
|
-
}
|
330
|
-
|
331
|
-
if (!this._agent) {
|
332
|
-
this._agent = await this.newAgent();
|
333
|
-
}
|
334
|
-
|
335
|
-
return this._agent;
|
336
|
-
}
|
337
|
-
|
338
|
-
async agentEndpoint() {
|
339
|
-
// Extra while loop to avoid races where info.agent gets unset again before we wake back up.
|
340
|
-
while (!this.info.agent) await this._waitFor(() => !!this.info.agent);
|
341
|
-
|
342
|
-
// We want to avoid a situation where we were not listening for updates, and the info we have is stale (from last boot),
|
343
|
-
// and the instance has started again but this time with no agent info yet or new agent info. Therefore, we can use
|
344
|
-
// cached if only if it's recent.
|
345
|
-
if (
|
346
|
-
new Date().getTime() - this.infoDate.getTime() >
|
347
|
-
2 * this.project.updater.updateInterval
|
348
|
-
) {
|
349
|
-
try {
|
350
|
-
await this.update();
|
351
|
-
} catch (err) {
|
352
|
-
if (err.stack.includes("500 Internal Server Error")) {
|
353
|
-
return undefined;
|
354
|
-
}
|
355
|
-
}
|
356
|
-
}
|
357
|
-
|
358
|
-
return this.project.api + "/agent/" + this.info.agent.info;
|
359
|
-
}
|
360
|
-
|
361
|
-
async waitForAgentReady() {
|
362
|
-
let agentObtained;
|
363
|
-
do {
|
364
|
-
try {
|
365
|
-
const endpoint = await this.agentEndpoint();
|
366
|
-
if (!endpoint) throw new Error("Instance likely does not exist");
|
367
|
-
|
368
|
-
const agent = await this.agent();
|
369
|
-
|
370
|
-
agentObtained = await pTimeout(
|
371
|
-
(async () => {
|
372
|
-
try {
|
373
|
-
await agent.ready();
|
374
|
-
return true;
|
375
|
-
} catch (e) {
|
376
|
-
// If the websocket threw an error, lets wait for the end of
|
377
|
-
// the timeout to give it some breathing room
|
378
|
-
await sleep(2 * 1000);
|
379
|
-
} finally {
|
380
|
-
agent.disconnect();
|
381
|
-
}
|
382
|
-
})(),
|
383
|
-
20 * 1000,
|
384
|
-
async () => {
|
385
|
-
// When this times out, it is likely that the instance isn't fully up yet
|
386
|
-
await sleep(5 * 1000);
|
387
|
-
return false;
|
388
|
-
},
|
389
|
-
);
|
390
|
-
} catch (e) {
|
391
|
-
console.log(`Caught error waiting for agent to be ready ${e}`);
|
392
|
-
if (e.stack.includes("Instance likely does not exist")) {
|
393
|
-
throw e;
|
394
|
-
}
|
395
|
-
}
|
396
|
-
} while (!agentObtained);
|
397
|
-
}
|
398
|
-
|
399
|
-
/**
|
400
|
-
* Create a new {@link Agent} connection to this instance. This is
|
401
|
-
* useful for agent tasks that don't finish and thus consume the
|
402
|
-
* connection, such as {@link Agent#crashes}.
|
403
|
-
* @returns {Agent}
|
404
|
-
* @example
|
405
|
-
* let crashListener = await instance.newAgent();
|
406
|
-
* crashListener.crashes('com.corellium.demoapp', (err, crashReport) => {
|
407
|
-
* if (err) {
|
408
|
-
* console.error(err);
|
409
|
-
* return;
|
410
|
-
* }
|
411
|
-
* console.log(crashReport);
|
412
|
-
* });
|
413
|
-
*/
|
414
|
-
async newAgent() {
|
415
|
-
return new Agent(this);
|
416
|
-
}
|
417
|
-
|
418
|
-
/**
|
419
|
-
* Return an {@link NetworkMonitor} connected to this instance. Calling this
|
420
|
-
* method multiple times will reuse the same agent connection.
|
421
|
-
* @returns {NetworkMonitor}
|
422
|
-
*/
|
423
|
-
async networkMonitor() {
|
424
|
-
if (!this._netmon) this._netmon = await this.newNetworkMonitor();
|
425
|
-
return this._netmon;
|
426
|
-
}
|
427
|
-
|
428
|
-
async netmonEndpoint() {
|
429
|
-
// Extra while loop to avoid races where info.netmon gets unset again before we wake back up.
|
430
|
-
while (!this.info.netmon) await this._waitFor(() => !!this.info.netmon);
|
431
|
-
|
432
|
-
// We want to avoid a situation where we were not listening for updates, and the info we have is stale (from last boot),
|
433
|
-
// and the instance has started again but this time with no agent info yet or new agent info. Therefore, we can use
|
434
|
-
// cached if only if it's recent.
|
435
|
-
if (
|
436
|
-
new Date().getTime() - this.infoDate.getTime() >
|
437
|
-
2 * this.project.updater.updateInterval
|
438
|
-
) {
|
439
|
-
try {
|
440
|
-
await this.update();
|
441
|
-
} catch (err) {
|
442
|
-
if (err.stack.includes("500 Internal Server Error")) {
|
443
|
-
return undefined;
|
444
|
-
}
|
445
|
-
}
|
446
|
-
}
|
447
|
-
|
448
|
-
return this.project.api + "/agent/" + this.info.netmon.info;
|
449
|
-
}
|
450
|
-
|
451
|
-
/**
|
452
|
-
* Create a new {@link NetworkMonitor} connection to this instance.
|
453
|
-
* @returns {NetworkMonitor}
|
454
|
-
*/
|
455
|
-
async newNetworkMonitor() {
|
456
|
-
return new NetworkMonitor(this);
|
457
|
-
}
|
458
|
-
|
459
|
-
/**
|
460
|
-
* Returns a bidirectional node stream for this instance's serial console.
|
461
|
-
* @return {WebSocket-Stream}
|
462
|
-
* @example
|
463
|
-
* const consoleStream = await instance.console();
|
464
|
-
* consoleStream.pipe(process.stdout);
|
465
|
-
*/
|
466
|
-
async console() {
|
467
|
-
const { url } = await this._fetch("/console");
|
468
|
-
return wsstream(url, ["binary"]);
|
469
|
-
}
|
470
|
-
|
471
|
-
/**
|
472
|
-
* Waits for a specified line on console.
|
473
|
-
* @example
|
474
|
-
* await instance.waitForLineOnConsole(line)
|
475
|
-
*/
|
476
|
-
async waitForLineOnConsole(line) {
|
477
|
-
const stream = await this.console();
|
478
|
-
await stream
|
479
|
-
.pipe(split())
|
480
|
-
.on("data", (l) => {
|
481
|
-
if (l === line) {
|
482
|
-
stream.destroy();
|
483
|
-
return;
|
484
|
-
}
|
485
|
-
})
|
486
|
-
.on("end", () => {
|
487
|
-
return;
|
488
|
-
});
|
489
|
-
}
|
490
|
-
|
491
|
-
/**
|
492
|
-
* Returns the cost, in microcents, for the instance in the on and off state. Instances are charged $0.25 / day for storage (off) and $0.25 per core per hour (on).
|
493
|
-
* @returns {RateInfo}
|
494
|
-
* @example
|
495
|
-
* const rateInfo = await instance.rate();
|
496
|
-
*/
|
497
|
-
async rate() {
|
498
|
-
return await this._fetch("/rate");
|
499
|
-
}
|
500
|
-
|
501
|
-
/**
|
502
|
-
* Send an input to this instance.
|
503
|
-
* @param {Input} input - The input to send.
|
504
|
-
* @see Input
|
505
|
-
* @example
|
506
|
-
* await instance.sendInput(I.pressRelease('home'));
|
507
|
-
*/
|
508
|
-
async sendInput(input) {
|
509
|
-
await this._fetch("/input", { method: "POST", json: input.points });
|
510
|
-
}
|
511
|
-
|
512
|
-
/**
|
513
|
-
* Start this instance.
|
514
|
-
* @example
|
515
|
-
* await instance.start();
|
516
|
-
*/
|
517
|
-
async start() {
|
518
|
-
await this._fetch("/start", { method: "POST" });
|
519
|
-
}
|
520
|
-
|
521
|
-
/**
|
522
|
-
* Stop this instance.
|
523
|
-
* @example
|
524
|
-
* await instance.stop();
|
525
|
-
*/
|
526
|
-
async stop() {
|
527
|
-
await this._fetch("/stop", { method: "POST" });
|
528
|
-
}
|
529
|
-
|
530
|
-
/**
|
531
|
-
* Pause this instance
|
532
|
-
* @example
|
533
|
-
* await instance.pause();
|
534
|
-
*/
|
535
|
-
async pause() {
|
536
|
-
await this._fetch("/pause", { method: "POST" });
|
537
|
-
}
|
538
|
-
|
539
|
-
/**
|
540
|
-
* Unpause this instance
|
541
|
-
* @example
|
542
|
-
* await instance.unpause();
|
543
|
-
*/
|
544
|
-
async unpause() {
|
545
|
-
await this._fetch("/unpause", { method: "POST" });
|
546
|
-
}
|
547
|
-
|
548
|
-
/**
|
549
|
-
* Reboot this instance.
|
550
|
-
* @example
|
551
|
-
* await instance.reboot();
|
552
|
-
*/
|
553
|
-
async reboot() {
|
554
|
-
await this._fetch("/reboot", { method: "POST" });
|
555
|
-
await this.waitForTaskState("rebooting");
|
556
|
-
await this.waitForTaskState("none");
|
557
|
-
}
|
558
|
-
|
559
|
-
/**
|
560
|
-
* Destroy this instance.
|
561
|
-
* @example <caption>delete all instances of the project</caption>
|
562
|
-
* let instances = await project.instances();
|
563
|
-
* instances.forEach(instance => {
|
564
|
-
* instance.destroy();
|
565
|
-
* });
|
566
|
-
*/
|
567
|
-
async destroy() {
|
568
|
-
await this._fetch("", { method: "DELETE" });
|
569
|
-
}
|
570
|
-
|
571
|
-
/**
|
572
|
-
* Send a message to an jailbroken iOS device
|
573
|
-
* @example
|
574
|
-
* await instance.message('123','321');
|
575
|
-
*
|
576
|
-
* @param {string} number - phone number to receive the message from
|
577
|
-
* @param {string} message - message to receive
|
578
|
-
*/
|
579
|
-
async message(sender, message) {
|
580
|
-
await this._fetch("/message", {
|
581
|
-
method: "POST",
|
582
|
-
json: { number: sender, message: message },
|
583
|
-
});
|
584
|
-
}
|
585
|
-
|
586
|
-
/**
|
587
|
-
* Send a raw message to an jailbroken iOS device
|
588
|
-
* @example
|
589
|
-
* await instance.messageRaw('AAAAAAAAAAAAAAAAA');
|
590
|
-
*
|
591
|
-
* @param {string} data - hex encoded data to send
|
592
|
-
*/
|
593
|
-
async messageRaw(data) {
|
594
|
-
await this._fetch("/message", { method: "POST", json: { raw: data } });
|
595
|
-
}
|
596
|
-
|
597
|
-
/**
|
598
|
-
* Get CoreTrace Thread List
|
599
|
-
* @return {Promise<ThreadInfo[]>}
|
600
|
-
* @example
|
601
|
-
* let procList = await instance.getCoreTraceThreadList();
|
602
|
-
* for (let p of procList) {
|
603
|
-
* console.log(p.pid, p.kernelId, p.name);
|
604
|
-
* for (let t of p.threads) {
|
605
|
-
* console.log(t.tid, t.kernelId);
|
606
|
-
* }
|
607
|
-
* }
|
608
|
-
*/
|
609
|
-
async getCoreTraceThreadList() {
|
610
|
-
return await this._fetch("/strace/thread-list", { method: "GET" });
|
611
|
-
}
|
612
|
-
|
613
|
-
/**
|
614
|
-
* Add List of PIDs/Names/TIDs to CoreTrace filter
|
615
|
-
* @param {integer[]} pids - array of process IDs to filter
|
616
|
-
* @param {string[]} names - array of process names to filter
|
617
|
-
* @param {integer[]} tids - array of thread IDs to filter
|
618
|
-
* @example
|
619
|
-
* await instance.setCoreTraceFilter([111, 222], ["proc_name"], [333]);
|
620
|
-
*/
|
621
|
-
async setCoreTraceFilter(pids, names, tids) {
|
622
|
-
let filter = [];
|
623
|
-
if (pids.length)
|
624
|
-
filter = filter.concat(
|
625
|
-
pids.map((pid) => {
|
626
|
-
return { trait: "pid", value: pid.toString() };
|
627
|
-
}),
|
628
|
-
);
|
629
|
-
if (names.length)
|
630
|
-
filter = filter.concat(
|
631
|
-
names.map((name) => {
|
632
|
-
return { trait: "name", value: name };
|
633
|
-
}),
|
634
|
-
);
|
635
|
-
if (tids.length)
|
636
|
-
filter = filter.concat(
|
637
|
-
tids.map((tid) => {
|
638
|
-
return { trait: "tid", value: tid.toString() };
|
639
|
-
}),
|
640
|
-
);
|
641
|
-
await this._fetch("", { method: "PATCH", json: { straceFilter: filter } });
|
642
|
-
}
|
643
|
-
|
644
|
-
/**
|
645
|
-
* Clear CoreTrace filter
|
646
|
-
* @example
|
647
|
-
* await instance.clearCoreTraceFilter();
|
648
|
-
*/
|
649
|
-
async clearCoreTraceFilter() {
|
650
|
-
await this._fetch("", { method: "PATCH", json: { straceFilter: [] } });
|
651
|
-
}
|
652
|
-
|
653
|
-
/**
|
654
|
-
* Start CoreTrace
|
655
|
-
* @example
|
656
|
-
* await instance.startCoreTrace();
|
657
|
-
*/
|
658
|
-
async startCoreTrace() {
|
659
|
-
await this._fetch("/strace/enable", { method: "POST" });
|
660
|
-
if (this.info.coreTrace) {
|
661
|
-
await this._waitFor(() => this.info.coreTrace.enabled === true);
|
662
|
-
}
|
663
|
-
}
|
664
|
-
|
665
|
-
/**
|
666
|
-
* Stop CoreTrace
|
667
|
-
* @example
|
668
|
-
* await instance.stopCoreTrace();
|
669
|
-
*/
|
670
|
-
async stopCoreTrace() {
|
671
|
-
await this._fetch("/strace/disable", { method: "POST" });
|
672
|
-
if (this.info.coreTrace) {
|
673
|
-
await this._waitFor(() => this.info.coreTrace.enabled === false);
|
674
|
-
}
|
675
|
-
}
|
676
|
-
|
677
|
-
/**
|
678
|
-
* Download CoreTrace Log
|
679
|
-
* @example
|
680
|
-
* let trace = await instance.downloadCoreTraceLog();
|
681
|
-
* console.log(trace.toString());
|
682
|
-
*/
|
683
|
-
async downloadCoreTraceLog() {
|
684
|
-
const token = await this._fetch("/strace-authorize", { method: "GET" });
|
685
|
-
const response = await fetchApi(
|
686
|
-
this.project,
|
687
|
-
`/preauthed/` + token.token + `/coretrace.log`,
|
688
|
-
{ response: "raw" },
|
689
|
-
);
|
690
|
-
return await response.buffer();
|
691
|
-
}
|
692
|
-
|
693
|
-
/**
|
694
|
-
* Clean CoreTrace log
|
695
|
-
* @example
|
696
|
-
* await instance.clearCoreTraceLog();
|
697
|
-
*/
|
698
|
-
async clearCoreTraceLog() {
|
699
|
-
await this._fetch("/strace", { method: "DELETE" });
|
700
|
-
}
|
701
|
-
|
702
|
-
/**
|
703
|
-
* Returns a bidirectional node stream for this instance's frida console.
|
704
|
-
* @return {WebSocket-Stream}
|
705
|
-
* @example
|
706
|
-
* const consoleStream = await instance.fridaConsole();
|
707
|
-
* consoleStream.pipe(process.stdout);
|
708
|
-
*/
|
709
|
-
async fridaConsole() {
|
710
|
-
const { url } = await this._fetch("/console?type=frida");
|
711
|
-
var fridaConsole = wsstream(url, ["binary"]);
|
712
|
-
|
713
|
-
await new Promise((resolve) => {
|
714
|
-
fridaConsole.socket.on("open", () => {
|
715
|
-
resolve();
|
716
|
-
});
|
717
|
-
});
|
718
|
-
|
719
|
-
return fridaConsole;
|
720
|
-
}
|
721
|
-
|
722
|
-
/**
|
723
|
-
* Execute FRIDA script by name
|
724
|
-
* @param {string} filePath - path to FRIDA script
|
725
|
-
* @example
|
726
|
-
* await instance.executeFridaScript("/data/corellium/frida/scripts/script.js");
|
727
|
-
*/
|
728
|
-
async executeFridaScript(filePath) {
|
729
|
-
const fridaConsoleStream = await this.fridaConsole();
|
730
|
-
fridaConsoleStream.socket.on("close", function () {
|
731
|
-
fridaConsoleStream.destroy();
|
732
|
-
});
|
733
|
-
|
734
|
-
fridaConsoleStream.socket.send("%load " + filePath + "\n", null, () =>
|
735
|
-
fridaConsoleStream.socket.close(),
|
736
|
-
);
|
737
|
-
|
738
|
-
fridaConsoleStream.socket.close();
|
739
|
-
}
|
740
|
-
|
741
|
-
/**
|
742
|
-
* Takes a screenshot of this instance's screen. Returns a Buffer containing image data.
|
743
|
-
* @param {Object} options
|
744
|
-
* @param {string} [options.format=png] - Either `png` or `jpg`.
|
745
|
-
* @param {int} [options.scale=1] - The image scale. Specifying 2 would result
|
746
|
-
* in an image with half the instance's native resolution. This is useful
|
747
|
-
* because smaller images are quicker to capture and transmit over the
|
748
|
-
* network.
|
749
|
-
* @example
|
750
|
-
* const screenshot = await instance.takeScreenshot();
|
751
|
-
* fs.writeFileSync('screenshot.png', screenshot);
|
752
|
-
*/
|
753
|
-
async takeScreenshot(options) {
|
754
|
-
const { format = "png", scale = 1 } = options || {};
|
755
|
-
const res = await this._fetch(`/screenshot.${format}?scale=${scale}`, {
|
756
|
-
response: "raw",
|
757
|
-
});
|
758
|
-
if (res.buffer) return await res.buffer();
|
759
|
-
// node
|
760
|
-
else return await res.blob(); // browser
|
761
|
-
}
|
762
|
-
|
763
|
-
/**
|
764
|
-
* Enable exposing a port for connecting to VM.
|
765
|
-
* For iOS, this would mean ssh, for Android, adb access.
|
766
|
-
*/
|
767
|
-
async enableExposedPort() {
|
768
|
-
await this._fetch("/exposeport/enable", { method: "POST" });
|
769
|
-
}
|
770
|
-
|
771
|
-
/**
|
772
|
-
* Disable exposing a port for connecting to VM.
|
773
|
-
* For iOS, this would mean ssh, for Android, adb access.
|
774
|
-
*/
|
775
|
-
async disableExposedPort() {
|
776
|
-
await this._fetch("/exposeport/disable", { method: "POST" });
|
777
|
-
}
|
778
|
-
|
779
|
-
async update() {
|
780
|
-
this.receiveUpdate(await this._fetch(""));
|
781
|
-
}
|
782
|
-
|
783
|
-
receiveUpdate(info) {
|
784
|
-
this.infoDate = new Date();
|
785
|
-
// one way of checking object equality
|
786
|
-
if (JSON.stringify(info) != JSON.stringify(this.info)) {
|
787
|
-
this.info = info;
|
788
|
-
/**
|
789
|
-
* Fired when a property of an instance changes, such as its name or its state.
|
790
|
-
* @event Instance#change
|
791
|
-
* @example
|
792
|
-
* instance.on('change', () => {
|
793
|
-
* console.log(instance.id, instance.name, instance.state);
|
794
|
-
* });
|
795
|
-
*/
|
796
|
-
this.emit("change");
|
797
|
-
if (info.panicked)
|
798
|
-
/**
|
799
|
-
* Fired when an instance panics. The panic information can be retrieved with {@link Instance#panics}.
|
800
|
-
* @event Instance#panic
|
801
|
-
* @example
|
802
|
-
* instance.on('panic', async () => {
|
803
|
-
* try {
|
804
|
-
* console.log('Panic detected!');
|
805
|
-
* // get the panic log(s)
|
806
|
-
* console.log(await instance.panics());
|
807
|
-
* // Download the console log.
|
808
|
-
* console.log(await instance.consoleLog());
|
809
|
-
* // Clear the panic log.
|
810
|
-
* await instance.clearPanics();
|
811
|
-
* // Reboot the instance.
|
812
|
-
* await instance.reboot();
|
813
|
-
* } catch (e) {
|
814
|
-
* // handle the error somehow to avoid an unhandled promise rejection
|
815
|
-
* }
|
816
|
-
* });
|
817
|
-
*/
|
818
|
-
this.emit("panic");
|
819
|
-
}
|
820
|
-
}
|
821
|
-
|
822
|
-
async _waitFor(callback) {
|
823
|
-
await this.update();
|
824
|
-
return new Promise((resolve) => {
|
825
|
-
const change = () => {
|
826
|
-
let done;
|
827
|
-
try {
|
828
|
-
done = callback();
|
829
|
-
} catch (e) {
|
830
|
-
done = false;
|
831
|
-
}
|
832
|
-
if (done) {
|
833
|
-
this.removeListener("change", change);
|
834
|
-
resolve();
|
835
|
-
}
|
836
|
-
};
|
837
|
-
|
838
|
-
this.on("change", change);
|
839
|
-
change();
|
840
|
-
});
|
841
|
-
}
|
842
|
-
|
843
|
-
/**
|
844
|
-
* Wait for the instance to finish restoring and start its first boot.
|
845
|
-
* @example <caption>Wait for VM to finish restore</caption>
|
846
|
-
* instance.finishRestore();
|
847
|
-
*/
|
848
|
-
async finishRestore() {
|
849
|
-
await this._waitFor(() => this.state !== "creating");
|
850
|
-
}
|
851
|
-
|
852
|
-
/**
|
853
|
-
* Wait for the instance to enter the given state.
|
854
|
-
* @param {string} state - state to wait
|
855
|
-
* @example <caption>Wait for VM to be ON</caption>
|
856
|
-
* instance.waitForState('on');
|
857
|
-
*/
|
858
|
-
async waitForState(state) {
|
859
|
-
await this._waitFor(() => this.state === state);
|
860
|
-
}
|
861
|
-
|
862
|
-
/**
|
863
|
-
* Wait for the instance task to enter the given state.
|
864
|
-
* @param {string} taskName
|
865
|
-
*/
|
866
|
-
async waitForTaskState(taskName) {
|
867
|
-
await this._waitFor(() => this.taskState === taskName);
|
868
|
-
}
|
869
|
-
|
870
|
-
/**
|
871
|
-
* Wait for the instance user task name to be a given state.
|
872
|
-
* @param {string} userTaskName
|
873
|
-
*/
|
874
|
-
async waitForUserTask(userTaskName) {
|
875
|
-
await this._waitFor(() => {
|
876
|
-
if (!userTaskName) {
|
877
|
-
return !this.userTask;
|
878
|
-
} else {
|
879
|
-
return this.userTask.name === userTaskName;
|
880
|
-
}
|
881
|
-
});
|
882
|
-
}
|
883
|
-
|
884
|
-
async _fetch(endpoint = "", options = {}) {
|
885
|
-
return await fetchApi(this.project, `/instances/${this.id}${endpoint}`, options);
|
886
|
-
}
|
887
|
-
|
888
|
-
/**
|
889
|
-
* Delete Iot Firmware that is attached to an instance
|
890
|
-
* @param {FirmwareImage} firmwareImage
|
891
|
-
*/
|
892
|
-
async deleteIotFirmware(firmwareImage) {
|
893
|
-
return await this.deleteImage(firmwareImage);
|
894
|
-
}
|
895
|
-
|
896
|
-
/**
|
897
|
-
* Delete kernel that is attached to an instance
|
898
|
-
* @param {KernelImage} kernelImage
|
899
|
-
*/
|
900
|
-
async deleteKernel(kernelImage) {
|
901
|
-
return await this.deleteImage(kernelImage);
|
902
|
-
}
|
903
|
-
|
904
|
-
/**
|
905
|
-
* Delete an image that is attached to an instance
|
906
|
-
* @param {Image | KernelImage | FirmwareImage} kernelImage
|
907
|
-
*/
|
908
|
-
async deleteImage(image) {
|
909
|
-
return await fetchApi(this, `/images/${image.id}`, {
|
910
|
-
method: "DELETE",
|
911
|
-
});
|
912
|
-
}
|
913
|
-
|
914
|
-
/**
|
915
|
-
* Upload a partition (e.g. flash) to an instance.
|
916
|
-
*
|
917
|
-
* @param {string} filePath - The path on the local file system to get the firmware file.
|
918
|
-
* @param {string} name - The name of the partition to load this file to.
|
919
|
-
* @param {Project~progressCallback} [progress] - The callback for file upload progress information.
|
920
|
-
*
|
921
|
-
* @returns {Promise<PartitionImage>}
|
922
|
-
*/
|
923
|
-
async uploadPartition(filePath, name, progress) {
|
924
|
-
return await this.compressAndUploadImage("partition", filePath, name, progress);
|
925
|
-
}
|
926
|
-
|
927
|
-
/**
|
928
|
-
* Add a custom IoT firmware image to a project for use in creating new instances.
|
929
|
-
*
|
930
|
-
* @param {string} filePath - The path on the local file system to get the firmware file.
|
931
|
-
* @param {string} name - The name of the file to identify the file on the server. Usually the basename of the path.
|
932
|
-
* @param {Project~progressCallback} [progress] - The callback for file upload progress information.
|
933
|
-
*
|
934
|
-
* @returns {Promise<FirmwareImage>}
|
935
|
-
*/
|
936
|
-
async uploadIotFirmware(filePath, name, progress) {
|
937
|
-
return await this.uploadKernel(filePath, name, progress);
|
938
|
-
}
|
939
|
-
|
940
|
-
/**
|
941
|
-
* compress an image and upload it to an instance
|
942
|
-
*
|
943
|
-
* @param {string} type - the type of image being uploaded ie. kernel, ramdisk, or devicetree
|
944
|
-
* @param {string} filePath - The path on the local file system to get the file.
|
945
|
-
* @param {string} name - The name of the file to identify the file on the server. Usually the basename of the path.
|
946
|
-
* @param {Project~progressCallback} [progress] - The callback for file upload progress information.
|
947
|
-
*
|
948
|
-
* @returns {Promise<Image>}
|
949
|
-
*/
|
950
|
-
async compressAndUploadImage(type, filePath, name, progress) {
|
951
|
-
let tmpfile = null;
|
952
|
-
const data = await util.promisify(fs.readFile)(filePath);
|
953
|
-
|
954
|
-
tmpfile = await compress(data, name);
|
955
|
-
|
956
|
-
let uploadedImage = await this.uploadImage(type, tmpfile, name, progress);
|
957
|
-
|
958
|
-
if (tmpfile) {
|
959
|
-
fs.unlinkSync(tmpfile);
|
960
|
-
}
|
961
|
-
|
962
|
-
return { id: uploadedImage.id, name: uploadedImage.name };
|
963
|
-
}
|
964
|
-
|
965
|
-
/**
|
966
|
-
* Add a kernel image to an instance
|
967
|
-
*
|
968
|
-
* @param {string} filePath - The path on the local file system to get the kernel file.
|
969
|
-
* @param {string} name - The name of the file to identify the file on the server. Usually the basename of the path.
|
970
|
-
* @param {Project~progressCallback} [progress] - The callback for file upload progress information.
|
971
|
-
*
|
972
|
-
* @returns {Promise<KernelImage>}
|
973
|
-
*/
|
974
|
-
async uploadKernel(filePath, name, progress) {
|
975
|
-
await this.compressAndUploadImage("kernel", filePath, name, progress);
|
976
|
-
}
|
977
|
-
|
978
|
-
/**
|
979
|
-
* Add a ram disk image to an instance
|
980
|
-
*
|
981
|
-
* @param {string} filePath - The path on the local file system to get the ram disk file.
|
982
|
-
* @param {string} name - The name of the file to identify the file on the server. Usually the basename of the path.
|
983
|
-
* @param {Project~progressCallback} [progress] - The callback for file upload progress information.
|
984
|
-
*
|
985
|
-
* @returns {Promise<RamDiskImage>}
|
986
|
-
*/
|
987
|
-
async uploadRamDisk(filePath, name, progress) {
|
988
|
-
await this.compressAndUploadImage("ramdisk", filePath, name, progress);
|
989
|
-
}
|
990
|
-
|
991
|
-
/**
|
992
|
-
* Add a device tree image to an instance.
|
993
|
-
*
|
994
|
-
* @param {string} filePath - The path on the local file system to get the device tree file.
|
995
|
-
* @param {string} name - The name of the file to identify the file on the server. Usually the basename of the path.
|
996
|
-
* @param {Project~progressCallback} [progress] - The callback for file upload progress information.
|
997
|
-
*
|
998
|
-
* @returns {Promise<DeviceTreeImage>}
|
999
|
-
*/
|
1000
|
-
async uploadDeviceTree(filePath, name, progress) {
|
1001
|
-
await this.compressAndUploadImage("devicetree", filePath, name, progress);
|
1002
|
-
}
|
1003
|
-
|
1004
|
-
/**
|
1005
|
-
* Add an image to the instance. These images may be removed at any time and are meant to facilitate creating a new Instance with images.
|
1006
|
-
*
|
1007
|
-
* @param {string} type - E.g. fw for the main firmware image.
|
1008
|
-
* @param {string} filePath - The path on the local file system to get the file.
|
1009
|
-
* @param {string} name - The name of the file to identify the file on the server. Usually the basename of the path.
|
1010
|
-
* @param {Project~progressCallback} [progress] - The callback for file upload progress information.
|
1011
|
-
*
|
1012
|
-
* @returns {Promise<Image>}
|
1013
|
-
*/
|
1014
|
-
async uploadImage(type, filePath, name, progress) {
|
1015
|
-
const token = await this.project.getToken();
|
1016
|
-
const url =
|
1017
|
-
this.project.api +
|
1018
|
-
"/instances/" +
|
1019
|
-
encodeURIComponent(this.id) +
|
1020
|
-
"/image-upload/" +
|
1021
|
-
encodeURIComponent(type) +
|
1022
|
-
"/" +
|
1023
|
-
encodeURIComponent(uuidv4()) +
|
1024
|
-
"/" +
|
1025
|
-
encodeURIComponent(name);
|
1026
|
-
|
1027
|
-
return await uploadFile(token, url, filePath, progress);
|
1028
|
-
}
|
1029
|
-
}
|
1030
|
-
|
1031
|
-
module.exports = Instance;
|