appium-adb 9.10.11 → 9.10.13

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.
Files changed (35) hide show
  1. package/build/index.js +1 -5
  2. package/build/lib/adb.js +1 -26
  3. package/build/lib/adb.js.map +1 -1
  4. package/build/lib/helpers.js +7 -211
  5. package/build/lib/helpers.js.map +1 -1
  6. package/build/lib/logcat.js +1 -46
  7. package/build/lib/logcat.js.map +1 -1
  8. package/build/lib/logger.js +1 -5
  9. package/build/lib/logger.js.map +1 -1
  10. package/build/lib/tools/aab-utils.js +1 -42
  11. package/build/lib/tools/aab-utils.js.map +1 -1
  12. package/build/lib/tools/adb-commands.js +6 -163
  13. package/build/lib/tools/adb-commands.js.map +1 -1
  14. package/build/lib/tools/adb-emu-commands.js +2 -66
  15. package/build/lib/tools/adb-emu-commands.js.map +1 -1
  16. package/build/lib/tools/android-manifest.js +1 -60
  17. package/build/lib/tools/android-manifest.js.map +1 -1
  18. package/build/lib/tools/apk-signing.js +1 -77
  19. package/build/lib/tools/apk-signing.js.map +1 -1
  20. package/build/lib/tools/apk-utils.js +4 -229
  21. package/build/lib/tools/apk-utils.js.map +1 -1
  22. package/build/lib/tools/apks-utils.js +1 -53
  23. package/build/lib/tools/apks-utils.js.map +1 -1
  24. package/build/lib/tools/index.js +1 -17
  25. package/build/lib/tools/index.js.map +1 -1
  26. package/build/lib/tools/keyboard-commands.js +1 -12
  27. package/build/lib/tools/keyboard-commands.js.map +1 -1
  28. package/build/lib/tools/lockmgmt.js +1 -46
  29. package/build/lib/tools/lockmgmt.js.map +1 -1
  30. package/build/lib/tools/settings-client-commands.js +3 -71
  31. package/build/lib/tools/settings-client-commands.js.map +1 -1
  32. package/build/lib/tools/system-calls.js +5 -190
  33. package/build/lib/tools/system-calls.js.map +1 -1
  34. package/lib/tools/settings-client-commands.js +2 -2
  35. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"logcat.js","names":["EventEmitter","events","log","logger","getLogger","MAX_BUFFER_SIZE","LOGCAT_PROC_STARTUP_TIMEOUT","SUPPORTED_FORMATS","SUPPORTED_PRIORITIES","DEFAULT_PRIORITY","DEFAULT_TAG","DEFAULT_FORMAT","requireFormat","format","includes","info","requireSpec","spec","tag","priority","split","resultTag","some","p","_","toLower","formatFilterSpecs","filterSpecs","isArray","filter","isString","startsWith","map","Logcat","constructor","opts","adb","clearLogs","clearDeviceLogsOnStart","debug","debugTrace","maxBufferSize","logs","logIdxSinceLastRequest","startCapture","started","B","_resolve","_reject","resolve","args","reject","clear","cmd","defaultArgs","util","quote","path","proc","SubProcess","on","code","signal","error","warn","lines","line","test","Error","outputHandler","trim","start","setTimeout","output","prefix","length","shift","outputObj","timestamp","Date","now","level","message","push","emit","isTrace","stopCapture","isRunning","removeAllListeners","stop","getLogs","result","slice","getAllLogs","exec","err","stderr"],"sources":["../../lib/logcat.js"],"sourcesContent":["import _ from 'lodash';\nimport { logger, util } from '@appium/support';\nimport B from 'bluebird';\nimport events from 'events';\nconst { EventEmitter } = events;\nimport { SubProcess, exec } from 'teen_process';\n\nconst log = logger.getLogger('Logcat');\nconst MAX_BUFFER_SIZE = 10000;\nconst LOGCAT_PROC_STARTUP_TIMEOUT = 10000;\nconst SUPPORTED_FORMATS = ['brief', 'process', 'tag', 'thread', 'raw', 'time', 'threadtime', 'long'];\nconst SUPPORTED_PRIORITIES = ['v', 'd', 'i', 'w', 'e', 'f', 's'];\nconst DEFAULT_PRIORITY = 'v';\nconst DEFAULT_TAG = '*';\nconst DEFAULT_FORMAT = 'threadtime';\n\nfunction requireFormat (format) {\n if (!SUPPORTED_FORMATS.includes(format)) {\n log.info(`The format value '${format}' is unknown. Supported values are: ${SUPPORTED_FORMATS}`);\n log.info(`Defaulting to '${DEFAULT_FORMAT}'`);\n return DEFAULT_FORMAT;\n }\n return format;\n}\n\nfunction requireSpec (spec) {\n const [tag, priority] = spec.split(':');\n let resultTag = tag;\n if (!resultTag) {\n log.info(`The tag value in spec '${spec}' cannot be empty`);\n log.info(`Defaulting to '${DEFAULT_TAG}'`);\n resultTag = DEFAULT_TAG;\n }\n if (!priority) {\n log.info(`The priority value in spec '${spec}' is empty. Defaulting to Verbose (${DEFAULT_PRIORITY})`);\n return `${resultTag}:${DEFAULT_PRIORITY}`;\n }\n if (!SUPPORTED_PRIORITIES.some((p) => _.toLower(priority) === _.toLower(p))) {\n log.info(`The priority value in spec '${spec}' is unknown. Supported values are: ${SUPPORTED_PRIORITIES}`);\n log.info(`Defaulting to Verbose (${DEFAULT_PRIORITY})`);\n return `${resultTag}:${DEFAULT_PRIORITY}`;\n }\n return spec;\n}\n\nfunction formatFilterSpecs (filterSpecs) {\n if (!_.isArray(filterSpecs)) {\n filterSpecs = [filterSpecs];\n }\n return filterSpecs\n .filter((spec) => spec && _.isString(spec) && !spec.startsWith('-'))\n .map((spec) => spec.includes(':') ? requireSpec(spec) : spec);\n}\n\n\nclass Logcat extends EventEmitter {\n constructor (opts = {}) {\n super();\n this.adb = opts.adb;\n this.clearLogs = opts.clearDeviceLogsOnStart || false;\n this.debug = opts.debug;\n this.debugTrace = opts.debugTrace;\n this.maxBufferSize = opts.maxBufferSize || MAX_BUFFER_SIZE;\n this.logs = [];\n this.logIdxSinceLastRequest = 0;\n }\n\n async startCapture (opts = {}) {\n let started = false;\n return await new B(async (_resolve, _reject) => { // eslint-disable-line promise/param-names\n const resolve = function (...args) {\n started = true;\n _resolve(...args);\n };\n const reject = function (...args) {\n started = true;\n _reject(...args);\n };\n\n if (this.clearLogs) {\n await this.clear();\n }\n\n const {\n format = DEFAULT_FORMAT,\n filterSpecs = [],\n } = opts;\n const cmd = [\n ...this.adb.defaultArgs,\n 'logcat',\n '-v', requireFormat(format),\n ...formatFilterSpecs(filterSpecs),\n ];\n log.debug(`Starting logs capture with command: ${util.quote([this.adb.path, ...cmd])}`);\n this.proc = new SubProcess(this.adb.path, cmd);\n this.proc.on('exit', (code, signal) => {\n log.error(`Logcat terminated with code ${code}, signal ${signal}`);\n this.proc = null;\n if (!started) {\n log.warn('Logcat not started. Continuing');\n resolve();\n }\n });\n this.proc.on('lines-stderr', (lines) => {\n for (let line of lines) {\n if (/execvp\\(\\)/.test(line)) {\n log.error('Logcat process failed to start');\n reject(new Error(`Logcat process failed to start. stderr: ${line}`));\n }\n this.outputHandler(_.trim(line), 'STDERR: ');\n }\n resolve();\n });\n this.proc.on('lines-stdout', (lines) => {\n resolve();\n for (let line of lines) {\n this.outputHandler(_.trim(line));\n }\n });\n await this.proc.start(0);\n // resolve after a timeout, even if no output was recorded\n setTimeout(resolve, LOGCAT_PROC_STARTUP_TIMEOUT);\n });\n }\n\n outputHandler (output, prefix = '') {\n if (!output) {\n return;\n }\n\n if (this.logs.length >= this.maxBufferSize) {\n this.logs.shift();\n if (this.logIdxSinceLastRequest > 0) {\n --this.logIdxSinceLastRequest;\n }\n }\n const outputObj = {\n timestamp: Date.now(),\n level: 'ALL',\n message: output,\n };\n this.logs.push(outputObj);\n this.emit('output', outputObj);\n const isTrace = /W\\/Trace/.test(output);\n if (this.debug && (!isTrace || this.debugTrace)) {\n log.debug(prefix + output);\n }\n }\n\n async stopCapture () {\n log.debug('Stopping logcat capture');\n if (!this.proc || !this.proc.isRunning) {\n log.debug('Logcat already stopped');\n this.proc = null;\n return;\n }\n this.proc.removeAllListeners('exit');\n await this.proc.stop();\n this.proc = null;\n }\n\n getLogs () {\n if (this.logIdxSinceLastRequest < this.logs.length) {\n const result = this.logs.slice(this.logIdxSinceLastRequest);\n this.logIdxSinceLastRequest = this.logs.length;\n return result;\n }\n return [];\n }\n\n getAllLogs () {\n return this.logs;\n }\n\n async clear () {\n log.debug('Clearing logcat logs from device');\n try {\n const args = [...this.adb.defaultArgs, 'logcat', '-c'];\n await exec(this.adb.path, args);\n } catch (err) {\n log.warn(`Failed to clear logcat logs: ${err.stderr || err.message}`);\n }\n }\n}\n\nexport default Logcat;\n"],"mappings":"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"}
1
+ {"version":3,"file":"logcat.js","names":["EventEmitter","events","log","logger","getLogger","MAX_BUFFER_SIZE","LOGCAT_PROC_STARTUP_TIMEOUT","SUPPORTED_FORMATS","SUPPORTED_PRIORITIES","DEFAULT_PRIORITY","DEFAULT_TAG","DEFAULT_FORMAT","requireFormat","format","includes","info","requireSpec","spec","tag","priority","split","resultTag","some","p","_","toLower","formatFilterSpecs","filterSpecs","isArray","filter","isString","startsWith","map","Logcat","constructor","opts","adb","clearLogs","clearDeviceLogsOnStart","debug","debugTrace","maxBufferSize","logs","logIdxSinceLastRequest","startCapture","started","B","_resolve","_reject","resolve","args","reject","clear","cmd","defaultArgs","util","quote","path","proc","SubProcess","on","code","signal","error","warn","lines","line","test","Error","outputHandler","trim","start","setTimeout","output","prefix","length","shift","outputObj","timestamp","Date","now","level","message","push","emit","isTrace","stopCapture","isRunning","removeAllListeners","stop","getLogs","result","slice","getAllLogs","exec","err","stderr"],"sources":["../../lib/logcat.js"],"sourcesContent":["import _ from 'lodash';\nimport { logger, util } from '@appium/support';\nimport B from 'bluebird';\nimport events from 'events';\nconst { EventEmitter } = events;\nimport { SubProcess, exec } from 'teen_process';\n\nconst log = logger.getLogger('Logcat');\nconst MAX_BUFFER_SIZE = 10000;\nconst LOGCAT_PROC_STARTUP_TIMEOUT = 10000;\nconst SUPPORTED_FORMATS = ['brief', 'process', 'tag', 'thread', 'raw', 'time', 'threadtime', 'long'];\nconst SUPPORTED_PRIORITIES = ['v', 'd', 'i', 'w', 'e', 'f', 's'];\nconst DEFAULT_PRIORITY = 'v';\nconst DEFAULT_TAG = '*';\nconst DEFAULT_FORMAT = 'threadtime';\n\nfunction requireFormat (format) {\n if (!SUPPORTED_FORMATS.includes(format)) {\n log.info(`The format value '${format}' is unknown. Supported values are: ${SUPPORTED_FORMATS}`);\n log.info(`Defaulting to '${DEFAULT_FORMAT}'`);\n return DEFAULT_FORMAT;\n }\n return format;\n}\n\nfunction requireSpec (spec) {\n const [tag, priority] = spec.split(':');\n let resultTag = tag;\n if (!resultTag) {\n log.info(`The tag value in spec '${spec}' cannot be empty`);\n log.info(`Defaulting to '${DEFAULT_TAG}'`);\n resultTag = DEFAULT_TAG;\n }\n if (!priority) {\n log.info(`The priority value in spec '${spec}' is empty. Defaulting to Verbose (${DEFAULT_PRIORITY})`);\n return `${resultTag}:${DEFAULT_PRIORITY}`;\n }\n if (!SUPPORTED_PRIORITIES.some((p) => _.toLower(priority) === _.toLower(p))) {\n log.info(`The priority value in spec '${spec}' is unknown. Supported values are: ${SUPPORTED_PRIORITIES}`);\n log.info(`Defaulting to Verbose (${DEFAULT_PRIORITY})`);\n return `${resultTag}:${DEFAULT_PRIORITY}`;\n }\n return spec;\n}\n\nfunction formatFilterSpecs (filterSpecs) {\n if (!_.isArray(filterSpecs)) {\n filterSpecs = [filterSpecs];\n }\n return filterSpecs\n .filter((spec) => spec && _.isString(spec) && !spec.startsWith('-'))\n .map((spec) => spec.includes(':') ? requireSpec(spec) : spec);\n}\n\n\nclass Logcat extends EventEmitter {\n constructor (opts = {}) {\n super();\n this.adb = opts.adb;\n this.clearLogs = opts.clearDeviceLogsOnStart || false;\n this.debug = opts.debug;\n this.debugTrace = opts.debugTrace;\n this.maxBufferSize = opts.maxBufferSize || MAX_BUFFER_SIZE;\n this.logs = [];\n this.logIdxSinceLastRequest = 0;\n }\n\n async startCapture (opts = {}) {\n let started = false;\n return await new B(async (_resolve, _reject) => { // eslint-disable-line promise/param-names\n const resolve = function (...args) {\n started = true;\n _resolve(...args);\n };\n const reject = function (...args) {\n started = true;\n _reject(...args);\n };\n\n if (this.clearLogs) {\n await this.clear();\n }\n\n const {\n format = DEFAULT_FORMAT,\n filterSpecs = [],\n } = opts;\n const cmd = [\n ...this.adb.defaultArgs,\n 'logcat',\n '-v', requireFormat(format),\n ...formatFilterSpecs(filterSpecs),\n ];\n log.debug(`Starting logs capture with command: ${util.quote([this.adb.path, ...cmd])}`);\n this.proc = new SubProcess(this.adb.path, cmd);\n this.proc.on('exit', (code, signal) => {\n log.error(`Logcat terminated with code ${code}, signal ${signal}`);\n this.proc = null;\n if (!started) {\n log.warn('Logcat not started. Continuing');\n resolve();\n }\n });\n this.proc.on('lines-stderr', (lines) => {\n for (let line of lines) {\n if (/execvp\\(\\)/.test(line)) {\n log.error('Logcat process failed to start');\n reject(new Error(`Logcat process failed to start. stderr: ${line}`));\n }\n this.outputHandler(_.trim(line), 'STDERR: ');\n }\n resolve();\n });\n this.proc.on('lines-stdout', (lines) => {\n resolve();\n for (let line of lines) {\n this.outputHandler(_.trim(line));\n }\n });\n await this.proc.start(0);\n // resolve after a timeout, even if no output was recorded\n setTimeout(resolve, LOGCAT_PROC_STARTUP_TIMEOUT);\n });\n }\n\n outputHandler (output, prefix = '') {\n if (!output) {\n return;\n }\n\n if (this.logs.length >= this.maxBufferSize) {\n this.logs.shift();\n if (this.logIdxSinceLastRequest > 0) {\n --this.logIdxSinceLastRequest;\n }\n }\n const outputObj = {\n timestamp: Date.now(),\n level: 'ALL',\n message: output,\n };\n this.logs.push(outputObj);\n this.emit('output', outputObj);\n const isTrace = /W\\/Trace/.test(output);\n if (this.debug && (!isTrace || this.debugTrace)) {\n log.debug(prefix + output);\n }\n }\n\n async stopCapture () {\n log.debug('Stopping logcat capture');\n if (!this.proc || !this.proc.isRunning) {\n log.debug('Logcat already stopped');\n this.proc = null;\n return;\n }\n this.proc.removeAllListeners('exit');\n await this.proc.stop();\n this.proc = null;\n }\n\n getLogs () {\n if (this.logIdxSinceLastRequest < this.logs.length) {\n const result = this.logs.slice(this.logIdxSinceLastRequest);\n this.logIdxSinceLastRequest = this.logs.length;\n return result;\n }\n return [];\n }\n\n getAllLogs () {\n return this.logs;\n }\n\n async clear () {\n log.debug('Clearing logcat logs from device');\n try {\n const args = [...this.adb.defaultArgs, 'logcat', '-c'];\n await exec(this.adb.path, args);\n } catch (err) {\n log.warn(`Failed to clear logcat logs: ${err.stderr || err.message}`);\n }\n }\n}\n\nexport default Logcat;\n"],"mappings":"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"}
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
-
8
7
  require("source-map-support/register");
9
-
10
8
  var _support = require("@appium/support");
11
-
12
9
  const log = _support.logger.getLogger('ADB');
13
-
14
10
  var _default = log;
15
11
  exports.default = _default;
16
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0FEQicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBOztBQUVBLE1BQU1BLEdBQUcsR0FBR0MsZUFBQSxDQUFPQyxTQUFQLENBQWlCLEtBQWpCLENBQVo7O2VBRWVGLEcifQ==
12
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJsb2dnZXIiLCJnZXRMb2dnZXIiXSwic291cmNlcyI6WyIuLi8uLi9saWIvbG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5cbmNvbnN0IGxvZyA9IGxvZ2dlci5nZXRMb2dnZXIoJ0FEQicpO1xuXG5leHBvcnQgZGVmYXVsdCBsb2c7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUVBLE1BQU1BLEdBQUcsR0FBR0MsZUFBTSxDQUFDQyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQUMsZUFFckJGLEdBQUc7QUFBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from '@appium/support';\n\nconst log = logger.getLogger('ADB');\n\nexport default log;\n"],"mappings":";;;;;;;;;AAAA;;AAEA,MAAMA,GAAG,GAAGC,eAAA,CAAOC,SAAP,CAAiB,KAAjB,CAAZ;;eAEeF,G"}
1
+ {"version":3,"file":"logger.js","names":["log","logger","getLogger"],"sources":["../../lib/logger.js"],"sourcesContent":["import { logger } from '@appium/support';\n\nconst log = logger.getLogger('ADB');\n\nexport default log;\n"],"mappings":";;;;;;;AAAA;AAEA,MAAMA,GAAG,GAAGC,eAAM,CAACC,SAAS,CAAC,KAAK,CAAC;AAAC,eAErBF,GAAG;AAAA"}
@@ -1,30 +1,19 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
-
10
8
  require("source-map-support/register");
11
-
12
9
  var _logger = _interopRequireDefault(require("../logger.js"));
13
-
14
10
  var _path = _interopRequireDefault(require("path"));
15
-
16
11
  var _support = require("@appium/support");
17
-
18
12
  var _lruCache = _interopRequireDefault(require("lru-cache"));
19
-
20
13
  var _helpers = require("../helpers.js");
21
-
22
14
  var _asyncLock = _interopRequireDefault(require("async-lock"));
23
-
24
15
  var _bluebird = _interopRequireDefault(require("bluebird"));
25
-
26
16
  var _crypto = _interopRequireDefault(require("crypto"));
27
-
28
17
  const AAB_CACHE = new _lruCache.default({
29
18
  max: 10,
30
19
  dispose: (hash, extractedFilesRoot) => _support.fs.rimraf(extractedFilesRoot)
@@ -36,11 +25,8 @@ process.on('exit', () => {
36
25
  if (!AAB_CACHE.size) {
37
26
  return;
38
27
  }
39
-
40
28
  const paths = [...AAB_CACHE.values()];
41
-
42
29
  _logger.default.debug(`Performing cleanup of ${paths.length} cached .aab ` + _support.util.pluralize('package', paths.length));
43
-
44
30
  for (const appPath of paths) {
45
31
  try {
46
32
  _support.fs.rimrafSync(appPath);
@@ -54,14 +40,10 @@ aabUtilsMethods.extractUniversalApk = async function extractUniversalApk(aabPath
54
40
  if (!(await _support.fs.exists(aabPath))) {
55
41
  throw new Error(`The file at '${aabPath}' either does not exist or is not accessible`);
56
42
  }
57
-
58
43
  const aabName = _path.default.basename(aabPath);
59
-
60
44
  const apkName = aabName.substring(0, aabName.length - _path.default.extname(aabName).length) + '.apk';
61
45
  const tmpRoot = await _support.tempDir.openDir();
62
-
63
46
  const tmpApksPath = _path.default.join(tmpRoot, `${aabName}.apks`);
64
-
65
47
  try {
66
48
  return await AAB_CACHE_GUARD.acquire(aabPath, async () => {
67
49
  const aabHash = await _support.fs.hash(aabPath);
@@ -72,74 +54,52 @@ aabUtilsMethods.extractUniversalApk = async function extractUniversalApk(aabPath
72
54
  keyPassword
73
55
  } = opts;
74
56
  let cacheHash = aabHash;
75
-
76
57
  if (keystore) {
77
58
  if (!(await _support.fs.exists(keystore))) {
78
59
  throw new Error(`The keystore file at '${keystore}' either does not exist ` + `or is not accessible`);
79
60
  }
80
-
81
61
  if (!keystorePassword || !keyAlias || !keyPassword) {
82
62
  throw new Error('It is mandatory to also provide keystore password, key alias, ' + 'and key password if the keystore path is set');
83
63
  }
84
-
85
64
  const keystoreHash = await _support.fs.hash(keystore);
86
-
87
65
  const keyAliasHash = _crypto.default.createHash('sha1');
88
-
89
66
  keyAliasHash.update(keyAlias);
90
67
  cacheHash = [cacheHash, keystoreHash, keyAliasHash.digest('hex')].join(':');
91
68
  }
92
-
93
69
  _logger.default.debug(`Calculated the cache key for '${aabPath}': ${cacheHash}`);
94
-
95
70
  if (AAB_CACHE.has(cacheHash)) {
96
71
  const resultPath = _path.default.resolve(AAB_CACHE.get(cacheHash), apkName);
97
-
98
72
  if (await _support.fs.exists(resultPath)) {
99
73
  return resultPath;
100
74
  }
101
-
102
75
  AAB_CACHE.del(cacheHash);
103
76
  }
104
-
105
77
  await this.initAapt2();
106
78
  const args = ['build-apks', '--aapt2', this.binaries.aapt2, '--bundle', aabPath, '--output', tmpApksPath, ...(keystore ? ['--ks', keystore, '--ks-pass', `pass:${keystorePassword}`, '--ks-key-alias', keyAlias, '--key-pass', `pass:${keyPassword}`] : []), '--mode=universal'];
107
-
108
79
  _logger.default.debug(`Preparing universal .apks bundle from '${aabPath}'`);
109
-
110
80
  await this.execBundletool(args, `Cannot build a universal .apks bundle from '${aabPath}'`);
111
-
112
81
  _logger.default.debug(`Unpacking universal application bundle at '${tmpApksPath}' to '${tmpRoot}'`);
113
-
114
82
  await (0, _helpers.unzipFile)(tmpApksPath, tmpRoot);
115
83
  let universalApkPath;
116
84
  const fileDeletionPromises = [];
117
85
  const allFileNames = await _support.fs.readdir(tmpRoot);
118
-
119
86
  for (const fileName of allFileNames) {
120
87
  const fullPath = _path.default.join(tmpRoot, fileName);
121
-
122
88
  if (fileName === UNIVERSAL_APK) {
123
89
  universalApkPath = fullPath;
124
90
  } else {
125
91
  fileDeletionPromises.push(_support.fs.rimraf(fullPath));
126
92
  }
127
93
  }
128
-
129
94
  try {
130
95
  await _bluebird.default.all(fileDeletionPromises);
131
96
  } catch (ign) {}
132
-
133
97
  if (!universalApkPath) {
134
98
  _logger.default.debug(`The following items were extracted from the .aab bundle: ${allFileNames}`);
135
-
136
99
  throw new Error(`${UNIVERSAL_APK} cannot be found in '${aabPath}' bundle. ` + `Does the archive contain a valid application bundle?`);
137
100
  }
138
-
139
101
  const resultPath = _path.default.join(tmpRoot, apkName);
140
-
141
102
  _logger.default.debug(`Found ${UNIVERSAL_APK} at '${universalApkPath}'. Caching it to '${resultPath}'`);
142
-
143
103
  await _support.fs.mv(universalApkPath, resultPath);
144
104
  AAB_CACHE.set(cacheHash, tmpRoot);
145
105
  return resultPath;
@@ -149,7 +109,6 @@ aabUtilsMethods.extractUniversalApk = async function extractUniversalApk(aabPath
149
109
  throw e;
150
110
  }
151
111
  };
152
-
153
112
  var _default = aabUtilsMethods;
154
113
  exports.default = _default;
155
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBQUJfQ0FDSEUiLCJMUlUiLCJtYXgiLCJkaXNwb3NlIiwiaGFzaCIsImV4dHJhY3RlZEZpbGVzUm9vdCIsImZzIiwicmltcmFmIiwiQUFCX0NBQ0hFX0dVQVJEIiwiQXN5bmNMb2NrIiwiVU5JVkVSU0FMX0FQSyIsImFhYlV0aWxzTWV0aG9kcyIsInByb2Nlc3MiLCJvbiIsInNpemUiLCJwYXRocyIsInZhbHVlcyIsImxvZyIsImRlYnVnIiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsImFwcFBhdGgiLCJyaW1yYWZTeW5jIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiZXh0cmFjdFVuaXZlcnNhbEFwayIsImFhYlBhdGgiLCJvcHRzIiwiZXhpc3RzIiwiRXJyb3IiLCJhYWJOYW1lIiwicGF0aCIsImJhc2VuYW1lIiwiYXBrTmFtZSIsInN1YnN0cmluZyIsImV4dG5hbWUiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ0bXBBcGtzUGF0aCIsImpvaW4iLCJhY3F1aXJlIiwiYWFiSGFzaCIsImtleXN0b3JlIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJjYWNoZUhhc2giLCJrZXlzdG9yZUhhc2giLCJrZXlBbGlhc0hhc2giLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwidXBkYXRlIiwiZGlnZXN0IiwiaGFzIiwicmVzdWx0UGF0aCIsInJlc29sdmUiLCJnZXQiLCJkZWwiLCJpbml0QWFwdDIiLCJhcmdzIiwiYmluYXJpZXMiLCJhYXB0MiIsImV4ZWNCdW5kbGV0b29sIiwidW56aXBGaWxlIiwidW5pdmVyc2FsQXBrUGF0aCIsImZpbGVEZWxldGlvblByb21pc2VzIiwiYWxsRmlsZU5hbWVzIiwicmVhZGRpciIsImZpbGVOYW1lIiwiZnVsbFBhdGgiLCJwdXNoIiwiQiIsImFsbCIsImlnbiIsIm12Iiwic2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Rvb2xzL2FhYi11dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7IHVuemlwRmlsZSB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgQUFCX0NBQ0hFID0gbmV3IExSVSh7XG4gIG1heDogMTAsXG4gIGRpc3Bvc2U6IChoYXNoLCBleHRyYWN0ZWRGaWxlc1Jvb3QpID0+IGZzLnJpbXJhZihleHRyYWN0ZWRGaWxlc1Jvb3QpLFxufSk7XG5jb25zdCBBQUJfQ0FDSEVfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5jb25zdCBVTklWRVJTQUxfQVBLID0gJ3VuaXZlcnNhbC5hcGsnO1xuXG5jb25zdCBhYWJVdGlsc01ldGhvZHMgPSB7fTtcblxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgaWYgKCFBQUJfQ0FDSEUuc2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gWy4uLkFBQl9DQUNIRS52YWx1ZXMoKV07XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBjbGVhbnVwIG9mICR7cGF0aHMubGVuZ3RofSBjYWNoZWQgLmFhYiBgICtcbiAgICB1dGlsLnBsdXJhbGl6ZSgncGFja2FnZScsIHBhdGhzLmxlbmd0aCkpO1xuICBmb3IgKGNvbnN0IGFwcFBhdGggb2YgcGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQXN5bmNocm9ub3VzIGNhbGxzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG9uRXhpdCBoYW5kbGVyXG4gICAgICBmcy5yaW1yYWZTeW5jKGFwcFBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcGtDcmVhdGlvbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlzdG9yZSBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGRlcGxveW1lbnQga2V5c3RvcmUgdXNlZFxuICogdG8gc2lnbiB0aGUgQVBLcy4gVGhpcyBmbGFnIGlzIG9wdGlvbmFsLiBJZiB5b3UgZG9uJ3QgaW5jbHVkZSBpdCxcbiAqIGJ1bmRsZXRvb2wgYXR0ZW1wdHMgdG8gc2lnbiB5b3VyIEFQS3Mgd2l0aCBhIGRlYnVnIHNpZ25pbmcga2V5LlxuICogSWYgdGhlIC5hcGsgaGFzIGJlZW4gYWxyZWFkeSBzaWduZWQgYW5kIGNhY2hlZCB0aGVuIGl0IGlzIG5vdCBnb2luZyB0byBiZSByZXNpZ25lZFxuICogdW5sZXNzIGEgZGlmZmVyZW50IGtleXN0b3JlIG9yIGtleSBhbGlhcyBpcyB1c2VkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleXN0b3JlUGFzc3dvcmQgU3BlY2lmaWVzIHlvdXIga2V5c3RvcmXigJlzIHBhc3N3b3JkLlxuICogSXQgaXMgbWFuZGF0b3J5IHRvIHByb3ZpZGUgdGhpcyB2YWx1ZSBpZiBga2V5c3RvcmVgIG9uZSBpcyBhc3NpZ25lZFxuICogb3RoZXJ3aXNlIGl0IGlzIGdvaW5nIHRvIGJlIGlnbm9yZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5QWxpYXMgU3BlY2lmaWVzIHRoZSBhbGlhcyBvZiB0aGUgc2lnbmluZyBrZXkgeW91IHdhbnQgdG8gdXNlLlxuICogSXQgaXMgbWFuZGF0b3J5IHRvIHByb3ZpZGUgdGhpcyB2YWx1ZSBpZiBga2V5c3RvcmVgIG9uZSBpcyBhc3NpZ25lZFxuICogb3RoZXJ3aXNlIGl0IGlzIGdvaW5nIHRvIGJlIGlnbm9yZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5UGFzc3dvcmQgU3BlY2lmaWVzIHRoZSBwYXNzd29yZCBmb3IgdGhlIHNpZ25pbmcga2V5LlxuICogSXQgaXMgbWFuZGF0b3J5IHRvIHByb3ZpZGUgdGhpcyB2YWx1ZSBpZiBga2V5c3RvcmVgIG9uZSBpcyBhc3NpZ25lZFxuICogb3RoZXJ3aXNlIGl0IGlzIGdvaW5nIHRvIGJlIGlnbm9yZWQuXG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgYSB1bml2ZXJzYWwgLmFwayBmcm9tIHRoZSBnaXZlbiAuYWFiIHBhY2thZ2UuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS9idW5kbGV0b29sI2dlbmVyYXRlX2Fwa3NcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFhYlBhdGggRnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgLmFhYiBwYWNrYWdlXG4gKiBAcGFyYW0ge0Fwa0NyZWF0aW9uT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMgVGhlIHBhdGggdG8gdGhlIHJlc3VsdGluZyB1bml2ZXJzYWwgLmFway4gVGhlIC5hcGsgaXMgc3RvcmVkIGluIHRoZSBpbnRlcm5hbCBjYWNoZVxuICogYnkgZGVmYXVsdC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIHVuaXZlcnNhbCAuYXBrXG4gKi9cbmFhYlV0aWxzTWV0aG9kcy5leHRyYWN0VW5pdmVyc2FsQXBrID0gYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFVuaXZlcnNhbEFwayAoYWFiUGF0aCwgb3B0cyA9IHt9KSB7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGFhYlBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHthYWJQYXRofScgZWl0aGVyIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cblxuICBjb25zdCBhYWJOYW1lID0gcGF0aC5iYXNlbmFtZShhYWJQYXRoKTtcbiAgY29uc3QgYXBrTmFtZSA9IGFhYk5hbWUuc3Vic3RyaW5nKDAsIGFhYk5hbWUubGVuZ3RoIC0gcGF0aC5leHRuYW1lKGFhYk5hbWUpLmxlbmd0aCkgKyAnLmFwayc7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgdG1wQXBrc1BhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgYCR7YWFiTmFtZX0uYXBrc2ApO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBBQUJfQ0FDSEVfR1VBUkQuYWNxdWlyZShhYWJQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhYWJIYXNoID0gYXdhaXQgZnMuaGFzaChhYWJQYXRoKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAga2V5c3RvcmUsXG4gICAgICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAgICAgIGtleUFsaWFzLFxuICAgICAgICBrZXlQYXNzd29yZCxcbiAgICAgIH0gPSBvcHRzO1xuICAgICAgbGV0IGNhY2hlSGFzaCA9IGFhYkhhc2g7XG4gICAgICBpZiAoa2V5c3RvcmUpIHtcbiAgICAgICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoa2V5c3RvcmUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUga2V5c3RvcmUgZmlsZSBhdCAnJHtrZXlzdG9yZX0nIGVpdGhlciBkb2VzIG5vdCBleGlzdCBgICtcbiAgICAgICAgICAgIGBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5c3RvcmVQYXNzd29yZCB8fCAha2V5QWxpYXMgfHwgIWtleVBhc3N3b3JkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyBtYW5kYXRvcnkgdG8gYWxzbyBwcm92aWRlIGtleXN0b3JlIHBhc3N3b3JkLCBrZXkgYWxpYXMsICcgK1xuICAgICAgICAgICAgJ2FuZCBrZXkgcGFzc3dvcmQgaWYgdGhlIGtleXN0b3JlIHBhdGggaXMgc2V0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5c3RvcmVIYXNoID0gYXdhaXQgZnMuaGFzaChrZXlzdG9yZSk7XG4gICAgICAgIGNvbnN0IGtleUFsaWFzSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJyk7XG4gICAgICAgIGtleUFsaWFzSGFzaC51cGRhdGUoa2V5QWxpYXMpO1xuICAgICAgICBjYWNoZUhhc2ggPSBbY2FjaGVIYXNoLCBrZXlzdG9yZUhhc2gsIGtleUFsaWFzSGFzaC5kaWdlc3QoJ2hleCcpXS5qb2luKCc6Jyk7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYENhbGN1bGF0ZWQgdGhlIGNhY2hlIGtleSBmb3IgJyR7YWFiUGF0aH0nOiAke2NhY2hlSGFzaH1gKTtcbiAgICAgIGlmIChBQUJfQ0FDSEUuaGFzKGNhY2hlSGFzaCkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShBQUJfQ0FDSEUuZ2V0KGNhY2hlSGFzaCksIGFwa05hbWUpO1xuICAgICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgQUFCX0NBQ0hFLmRlbChjYWNoZUhhc2gpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmluaXRBYXB0MigpO1xuICAgICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ2J1aWxkLWFwa3MnLFxuICAgICAgICAnLS1hYXB0MicsIHRoaXMuYmluYXJpZXMuYWFwdDIsXG4gICAgICAgICctLWJ1bmRsZScsIGFhYlBhdGgsXG4gICAgICAgICctLW91dHB1dCcsIHRtcEFwa3NQYXRoLFxuICAgICAgICAuLi4oa2V5c3RvcmUgPyBbXG4gICAgICAgICAgJy0ta3MnLCBrZXlzdG9yZSxcbiAgICAgICAgICAnLS1rcy1wYXNzJywgYHBhc3M6JHtrZXlzdG9yZVBhc3N3b3JkfWAsXG4gICAgICAgICAgJy0ta3Mta2V5LWFsaWFzJywga2V5QWxpYXMsXG4gICAgICAgICAgJy0ta2V5LXBhc3MnLCBgcGFzczoke2tleVBhc3N3b3JkfWAsXG4gICAgICAgIF0gOiBbXSksXG4gICAgICAgICctLW1vZGU9dW5pdmVyc2FsJ1xuICAgICAgXTtcbiAgICAgIGxvZy5kZWJ1ZyhgUHJlcGFyaW5nIHVuaXZlcnNhbCAuYXBrcyBidW5kbGUgZnJvbSAnJHthYWJQYXRofSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuZXhlY0J1bmRsZXRvb2woYXJncywgYENhbm5vdCBidWlsZCBhIHVuaXZlcnNhbCAuYXBrcyBidW5kbGUgZnJvbSAnJHthYWJQYXRofSdgKTtcblxuICAgICAgbG9nLmRlYnVnKGBVbnBhY2tpbmcgdW5pdmVyc2FsIGFwcGxpY2F0aW9uIGJ1bmRsZSBhdCAnJHt0bXBBcGtzUGF0aH0nIHRvICcke3RtcFJvb3R9J2ApO1xuICAgICAgYXdhaXQgdW56aXBGaWxlKHRtcEFwa3NQYXRoLCB0bXBSb290KTtcbiAgICAgIGxldCB1bml2ZXJzYWxBcGtQYXRoO1xuICAgICAgY29uc3QgZmlsZURlbGV0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGNvbnN0IGFsbEZpbGVOYW1lcyA9IGF3YWl0IGZzLnJlYWRkaXIodG1wUm9vdCk7XG4gICAgICBmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGFsbEZpbGVOYW1lcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbih0bXBSb290LCBmaWxlTmFtZSk7XG4gICAgICAgIGlmIChmaWxlTmFtZSA9PT0gVU5JVkVSU0FMX0FQSykge1xuICAgICAgICAgIHVuaXZlcnNhbEFwa1BhdGggPSBmdWxsUGF0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlRGVsZXRpb25Qcm9taXNlcy5wdXNoKGZzLnJpbXJhZihmdWxsUGF0aCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBCLmFsbChmaWxlRGVsZXRpb25Qcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICBpZiAoIXVuaXZlcnNhbEFwa1BhdGgpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIGl0ZW1zIHdlcmUgZXh0cmFjdGVkIGZyb20gdGhlIC5hYWIgYnVuZGxlOiAke2FsbEZpbGVOYW1lc31gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1VOSVZFUlNBTF9BUEt9IGNhbm5vdCBiZSBmb3VuZCBpbiAnJHthYWJQYXRofScgYnVuZGxlLiBgICtcbiAgICAgICAgICBgRG9lcyB0aGUgYXJjaGl2ZSBjb250YWluIGEgdmFsaWQgYXBwbGljYXRpb24gYnVuZGxlP2ApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGguam9pbih0bXBSb290LCBhcGtOYW1lKTtcbiAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgJHtVTklWRVJTQUxfQVBLfSBhdCAnJHt1bml2ZXJzYWxBcGtQYXRofScuIENhY2hpbmcgaXQgdG8gJyR7cmVzdWx0UGF0aH0nYCk7XG4gICAgICBhd2FpdCBmcy5tdih1bml2ZXJzYWxBcGtQYXRoLCByZXN1bHRQYXRoKTtcbiAgICAgIEFBQl9DQUNIRS5zZXQoY2FjaGVIYXNoLCB0bXBSb290KTtcbiAgICAgIHJldHVybiByZXN1bHRQYXRoO1xuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFhYlV0aWxzTWV0aG9kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxTQUFTLEdBQUcsSUFBSUMsaUJBQUosQ0FBUTtFQUN4QkMsR0FBRyxFQUFFLEVBRG1CO0VBRXhCQyxPQUFPLEVBQUUsQ0FBQ0MsSUFBRCxFQUFPQyxrQkFBUCxLQUE4QkMsV0FBQSxDQUFHQyxNQUFILENBQVVG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
114
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBQUJfQ0FDSEUiLCJMUlUiLCJtYXgiLCJkaXNwb3NlIiwiaGFzaCIsImV4dHJhY3RlZEZpbGVzUm9vdCIsImZzIiwicmltcmFmIiwiQUFCX0NBQ0hFX0dVQVJEIiwiQXN5bmNMb2NrIiwiVU5JVkVSU0FMX0FQSyIsImFhYlV0aWxzTWV0aG9kcyIsInByb2Nlc3MiLCJvbiIsInNpemUiLCJwYXRocyIsInZhbHVlcyIsImxvZyIsImRlYnVnIiwibGVuZ3RoIiwidXRpbCIsInBsdXJhbGl6ZSIsImFwcFBhdGgiLCJyaW1yYWZTeW5jIiwiZSIsIndhcm4iLCJtZXNzYWdlIiwiZXh0cmFjdFVuaXZlcnNhbEFwayIsImFhYlBhdGgiLCJvcHRzIiwiZXhpc3RzIiwiRXJyb3IiLCJhYWJOYW1lIiwicGF0aCIsImJhc2VuYW1lIiwiYXBrTmFtZSIsInN1YnN0cmluZyIsImV4dG5hbWUiLCJ0bXBSb290IiwidGVtcERpciIsIm9wZW5EaXIiLCJ0bXBBcGtzUGF0aCIsImpvaW4iLCJhY3F1aXJlIiwiYWFiSGFzaCIsImtleXN0b3JlIiwia2V5c3RvcmVQYXNzd29yZCIsImtleUFsaWFzIiwia2V5UGFzc3dvcmQiLCJjYWNoZUhhc2giLCJrZXlzdG9yZUhhc2giLCJrZXlBbGlhc0hhc2giLCJjcnlwdG8iLCJjcmVhdGVIYXNoIiwidXBkYXRlIiwiZGlnZXN0IiwiaGFzIiwicmVzdWx0UGF0aCIsInJlc29sdmUiLCJnZXQiLCJkZWwiLCJpbml0QWFwdDIiLCJhcmdzIiwiYmluYXJpZXMiLCJhYXB0MiIsImV4ZWNCdW5kbGV0b29sIiwidW56aXBGaWxlIiwidW5pdmVyc2FsQXBrUGF0aCIsImZpbGVEZWxldGlvblByb21pc2VzIiwiYWxsRmlsZU5hbWVzIiwicmVhZGRpciIsImZpbGVOYW1lIiwiZnVsbFBhdGgiLCJwdXNoIiwiQiIsImFsbCIsImlnbiIsIm12Iiwic2V0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3Rvb2xzL2FhYi11dGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbG9nIGZyb20gJy4uL2xvZ2dlci5qcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZzLCB0ZW1wRGlyLCB1dGlsIH0gZnJvbSAnQGFwcGl1bS9zdXBwb3J0JztcbmltcG9ydCBMUlUgZnJvbSAnbHJ1LWNhY2hlJztcbmltcG9ydCB7IHVuemlwRmlsZSB9IGZyb20gJy4uL2hlbHBlcnMuanMnO1xuaW1wb3J0IEFzeW5jTG9jayBmcm9tICdhc3luYy1sb2NrJztcbmltcG9ydCBCIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJztcblxuY29uc3QgQUFCX0NBQ0hFID0gbmV3IExSVSh7XG4gIG1heDogMTAsXG4gIGRpc3Bvc2U6IChoYXNoLCBleHRyYWN0ZWRGaWxlc1Jvb3QpID0+IGZzLnJpbXJhZihleHRyYWN0ZWRGaWxlc1Jvb3QpLFxufSk7XG5jb25zdCBBQUJfQ0FDSEVfR1VBUkQgPSBuZXcgQXN5bmNMb2NrKCk7XG5jb25zdCBVTklWRVJTQUxfQVBLID0gJ3VuaXZlcnNhbC5hcGsnO1xuXG5jb25zdCBhYWJVdGlsc01ldGhvZHMgPSB7fTtcblxucHJvY2Vzcy5vbignZXhpdCcsICgpID0+IHtcbiAgaWYgKCFBQUJfQ0FDSEUuc2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhdGhzID0gWy4uLkFBQl9DQUNIRS52YWx1ZXMoKV07XG4gIGxvZy5kZWJ1ZyhgUGVyZm9ybWluZyBjbGVhbnVwIG9mICR7cGF0aHMubGVuZ3RofSBjYWNoZWQgLmFhYiBgICtcbiAgICB1dGlsLnBsdXJhbGl6ZSgncGFja2FnZScsIHBhdGhzLmxlbmd0aCkpO1xuICBmb3IgKGNvbnN0IGFwcFBhdGggb2YgcGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgLy8gQXN5bmNocm9ub3VzIGNhbGxzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG9uRXhpdCBoYW5kbGVyXG4gICAgICBmcy5yaW1yYWZTeW5jKGFwcFBhdGgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZy53YXJuKGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBBcGtDcmVhdGlvbk9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBrZXlzdG9yZSBTcGVjaWZpZXMgdGhlIHBhdGggdG8gdGhlIGRlcGxveW1lbnQga2V5c3RvcmUgdXNlZFxuICogdG8gc2lnbiB0aGUgQVBLcy4gVGhpcyBmbGFnIGlzIG9wdGlvbmFsLiBJZiB5b3UgZG9uJ3QgaW5jbHVkZSBpdCxcbiAqIGJ1bmRsZXRvb2wgYXR0ZW1wdHMgdG8gc2lnbiB5b3VyIEFQS3Mgd2l0aCBhIGRlYnVnIHNpZ25pbmcga2V5LlxuICogSWYgdGhlIC5hcGsgaGFzIGJlZW4gYWxyZWFkeSBzaWduZWQgYW5kIGNhY2hlZCB0aGVuIGl0IGlzIG5vdCBnb2luZyB0byBiZSByZXNpZ25lZFxuICogdW5sZXNzIGEgZGlmZmVyZW50IGtleXN0b3JlIG9yIGtleSBhbGlhcyBpcyB1c2VkLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGtleXN0b3JlUGFzc3dvcmQgU3BlY2lmaWVzIHlvdXIga2V5c3RvcmXigJlzIHBhc3N3b3JkLlxuICogSXQgaXMgbWFuZGF0b3J5IHRvIHByb3ZpZGUgdGhpcyB2YWx1ZSBpZiBga2V5c3RvcmVgIG9uZSBpcyBhc3NpZ25lZFxuICogb3RoZXJ3aXNlIGl0IGlzIGdvaW5nIHRvIGJlIGlnbm9yZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5QWxpYXMgU3BlY2lmaWVzIHRoZSBhbGlhcyBvZiB0aGUgc2lnbmluZyBrZXkgeW91IHdhbnQgdG8gdXNlLlxuICogSXQgaXMgbWFuZGF0b3J5IHRvIHByb3ZpZGUgdGhpcyB2YWx1ZSBpZiBga2V5c3RvcmVgIG9uZSBpcyBhc3NpZ25lZFxuICogb3RoZXJ3aXNlIGl0IGlzIGdvaW5nIHRvIGJlIGlnbm9yZWQuXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5UGFzc3dvcmQgU3BlY2lmaWVzIHRoZSBwYXNzd29yZCBmb3IgdGhlIHNpZ25pbmcga2V5LlxuICogSXQgaXMgbWFuZGF0b3J5IHRvIHByb3ZpZGUgdGhpcyB2YWx1ZSBpZiBga2V5c3RvcmVgIG9uZSBpcyBhc3NpZ25lZFxuICogb3RoZXJ3aXNlIGl0IGlzIGdvaW5nIHRvIGJlIGlnbm9yZWQuXG4gKi9cblxuLyoqXG4gKiBCdWlsZHMgYSB1bml2ZXJzYWwgLmFwayBmcm9tIHRoZSBnaXZlbiAuYWFiIHBhY2thZ2UuIFNlZVxuICogaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vc3R1ZGlvL2NvbW1hbmQtbGluZS9idW5kbGV0b29sI2dlbmVyYXRlX2Fwa3NcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGFhYlBhdGggRnVsbCBwYXRoIHRvIHRoZSBzb3VyY2UgLmFhYiBwYWNrYWdlXG4gKiBAcGFyYW0ge0Fwa0NyZWF0aW9uT3B0aW9uc30gb3B0c1xuICogQHJldHVybnMgVGhlIHBhdGggdG8gdGhlIHJlc3VsdGluZyB1bml2ZXJzYWwgLmFway4gVGhlIC5hcGsgaXMgc3RvcmVkIGluIHRoZSBpbnRlcm5hbCBjYWNoZVxuICogYnkgZGVmYXVsdC5cbiAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGVyZSB3YXMgYW4gZXJyb3Igd2hpbGUgY3JlYXRpbmcgdGhlIHVuaXZlcnNhbCAuYXBrXG4gKi9cbmFhYlV0aWxzTWV0aG9kcy5leHRyYWN0VW5pdmVyc2FsQXBrID0gYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFVuaXZlcnNhbEFwayAoYWFiUGF0aCwgb3B0cyA9IHt9KSB7XG4gIGlmICghYXdhaXQgZnMuZXhpc3RzKGFhYlBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZmlsZSBhdCAnJHthYWJQYXRofScgZWl0aGVyIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBhY2Nlc3NpYmxlYCk7XG4gIH1cblxuICBjb25zdCBhYWJOYW1lID0gcGF0aC5iYXNlbmFtZShhYWJQYXRoKTtcbiAgY29uc3QgYXBrTmFtZSA9IGFhYk5hbWUuc3Vic3RyaW5nKDAsIGFhYk5hbWUubGVuZ3RoIC0gcGF0aC5leHRuYW1lKGFhYk5hbWUpLmxlbmd0aCkgKyAnLmFwayc7XG4gIGNvbnN0IHRtcFJvb3QgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgY29uc3QgdG1wQXBrc1BhdGggPSBwYXRoLmpvaW4odG1wUm9vdCwgYCR7YWFiTmFtZX0uYXBrc2ApO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBBQUJfQ0FDSEVfR1VBUkQuYWNxdWlyZShhYWJQYXRoLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBhYWJIYXNoID0gYXdhaXQgZnMuaGFzaChhYWJQYXRoKTtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAga2V5c3RvcmUsXG4gICAgICAgIGtleXN0b3JlUGFzc3dvcmQsXG4gICAgICAgIGtleUFsaWFzLFxuICAgICAgICBrZXlQYXNzd29yZCxcbiAgICAgIH0gPSBvcHRzO1xuICAgICAgbGV0IGNhY2hlSGFzaCA9IGFhYkhhc2g7XG4gICAgICBpZiAoa2V5c3RvcmUpIHtcbiAgICAgICAgaWYgKCFhd2FpdCBmcy5leGlzdHMoa2V5c3RvcmUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUga2V5c3RvcmUgZmlsZSBhdCAnJHtrZXlzdG9yZX0nIGVpdGhlciBkb2VzIG5vdCBleGlzdCBgICtcbiAgICAgICAgICAgIGBvciBpcyBub3QgYWNjZXNzaWJsZWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2V5c3RvcmVQYXNzd29yZCB8fCAha2V5QWxpYXMgfHwgIWtleVBhc3N3b3JkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdCBpcyBtYW5kYXRvcnkgdG8gYWxzbyBwcm92aWRlIGtleXN0b3JlIHBhc3N3b3JkLCBrZXkgYWxpYXMsICcgK1xuICAgICAgICAgICAgJ2FuZCBrZXkgcGFzc3dvcmQgaWYgdGhlIGtleXN0b3JlIHBhdGggaXMgc2V0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5c3RvcmVIYXNoID0gYXdhaXQgZnMuaGFzaChrZXlzdG9yZSk7XG4gICAgICAgIGNvbnN0IGtleUFsaWFzSGFzaCA9IGNyeXB0by5jcmVhdGVIYXNoKCdzaGExJyk7XG4gICAgICAgIGtleUFsaWFzSGFzaC51cGRhdGUoa2V5QWxpYXMpO1xuICAgICAgICBjYWNoZUhhc2ggPSBbY2FjaGVIYXNoLCBrZXlzdG9yZUhhc2gsIGtleUFsaWFzSGFzaC5kaWdlc3QoJ2hleCcpXS5qb2luKCc6Jyk7XG4gICAgICB9XG4gICAgICBsb2cuZGVidWcoYENhbGN1bGF0ZWQgdGhlIGNhY2hlIGtleSBmb3IgJyR7YWFiUGF0aH0nOiAke2NhY2hlSGFzaH1gKTtcbiAgICAgIGlmIChBQUJfQ0FDSEUuaGFzKGNhY2hlSGFzaCkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGgucmVzb2x2ZShBQUJfQ0FDSEUuZ2V0KGNhY2hlSGFzaCksIGFwa05hbWUpO1xuICAgICAgICBpZiAoYXdhaXQgZnMuZXhpc3RzKHJlc3VsdFBhdGgpKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdFBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgQUFCX0NBQ0hFLmRlbChjYWNoZUhhc2gpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCB0aGlzLmluaXRBYXB0MigpO1xuICAgICAgY29uc3QgYXJncyA9IFtcbiAgICAgICAgJ2J1aWxkLWFwa3MnLFxuICAgICAgICAnLS1hYXB0MicsIHRoaXMuYmluYXJpZXMuYWFwdDIsXG4gICAgICAgICctLWJ1bmRsZScsIGFhYlBhdGgsXG4gICAgICAgICctLW91dHB1dCcsIHRtcEFwa3NQYXRoLFxuICAgICAgICAuLi4oa2V5c3RvcmUgPyBbXG4gICAgICAgICAgJy0ta3MnLCBrZXlzdG9yZSxcbiAgICAgICAgICAnLS1rcy1wYXNzJywgYHBhc3M6JHtrZXlzdG9yZVBhc3N3b3JkfWAsXG4gICAgICAgICAgJy0ta3Mta2V5LWFsaWFzJywga2V5QWxpYXMsXG4gICAgICAgICAgJy0ta2V5LXBhc3MnLCBgcGFzczoke2tleVBhc3N3b3JkfWAsXG4gICAgICAgIF0gOiBbXSksXG4gICAgICAgICctLW1vZGU9dW5pdmVyc2FsJ1xuICAgICAgXTtcbiAgICAgIGxvZy5kZWJ1ZyhgUHJlcGFyaW5nIHVuaXZlcnNhbCAuYXBrcyBidW5kbGUgZnJvbSAnJHthYWJQYXRofSdgKTtcbiAgICAgIGF3YWl0IHRoaXMuZXhlY0J1bmRsZXRvb2woYXJncywgYENhbm5vdCBidWlsZCBhIHVuaXZlcnNhbCAuYXBrcyBidW5kbGUgZnJvbSAnJHthYWJQYXRofSdgKTtcblxuICAgICAgbG9nLmRlYnVnKGBVbnBhY2tpbmcgdW5pdmVyc2FsIGFwcGxpY2F0aW9uIGJ1bmRsZSBhdCAnJHt0bXBBcGtzUGF0aH0nIHRvICcke3RtcFJvb3R9J2ApO1xuICAgICAgYXdhaXQgdW56aXBGaWxlKHRtcEFwa3NQYXRoLCB0bXBSb290KTtcbiAgICAgIGxldCB1bml2ZXJzYWxBcGtQYXRoO1xuICAgICAgY29uc3QgZmlsZURlbGV0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGNvbnN0IGFsbEZpbGVOYW1lcyA9IGF3YWl0IGZzLnJlYWRkaXIodG1wUm9vdCk7XG4gICAgICBmb3IgKGNvbnN0IGZpbGVOYW1lIG9mIGFsbEZpbGVOYW1lcykge1xuICAgICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbih0bXBSb290LCBmaWxlTmFtZSk7XG4gICAgICAgIGlmIChmaWxlTmFtZSA9PT0gVU5JVkVSU0FMX0FQSykge1xuICAgICAgICAgIHVuaXZlcnNhbEFwa1BhdGggPSBmdWxsUGF0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlRGVsZXRpb25Qcm9taXNlcy5wdXNoKGZzLnJpbXJhZihmdWxsUGF0aCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBCLmFsbChmaWxlRGVsZXRpb25Qcm9taXNlcyk7XG4gICAgICB9IGNhdGNoIChpZ24pIHt9XG4gICAgICBpZiAoIXVuaXZlcnNhbEFwa1BhdGgpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBUaGUgZm9sbG93aW5nIGl0ZW1zIHdlcmUgZXh0cmFjdGVkIGZyb20gdGhlIC5hYWIgYnVuZGxlOiAke2FsbEZpbGVOYW1lc31gKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke1VOSVZFUlNBTF9BUEt9IGNhbm5vdCBiZSBmb3VuZCBpbiAnJHthYWJQYXRofScgYnVuZGxlLiBgICtcbiAgICAgICAgICBgRG9lcyB0aGUgYXJjaGl2ZSBjb250YWluIGEgdmFsaWQgYXBwbGljYXRpb24gYnVuZGxlP2ApO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzdWx0UGF0aCA9IHBhdGguam9pbih0bXBSb290LCBhcGtOYW1lKTtcbiAgICAgIGxvZy5kZWJ1ZyhgRm91bmQgJHtVTklWRVJTQUxfQVBLfSBhdCAnJHt1bml2ZXJzYWxBcGtQYXRofScuIENhY2hpbmcgaXQgdG8gJyR7cmVzdWx0UGF0aH0nYCk7XG4gICAgICBhd2FpdCBmcy5tdih1bml2ZXJzYWxBcGtQYXRoLCByZXN1bHRQYXRoKTtcbiAgICAgIEFBQl9DQUNIRS5zZXQoY2FjaGVIYXNoLCB0bXBSb290KTtcbiAgICAgIHJldHVybiByZXN1bHRQYXRoO1xuICAgIH0pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgYXdhaXQgZnMucmltcmFmKHRtcFJvb3QpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGFhYlV0aWxzTWV0aG9kcztcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUEsTUFBTUEsU0FBUyxHQUFHLElBQUlDLGlCQUFHLENBQUM7RUFDeEJDLEdBQUcsRUFBRSxFQUFFO0VBQ1BDLE9BQU8sRUFBRSxDQUFDQyxJQUFJLEVBQUVDLGtCQUFrQixLQUFLQyxXQUFFLENBQUNDLE1BQU0sQ0FBQ0Ysa0JBQWtCO0FBQ3JF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
@@ -1 +1 @@
1
- {"version":3,"file":"aab-utils.js","names":["AAB_CACHE","LRU","max","dispose","hash","extractedFilesRoot","fs","rimraf","AAB_CACHE_GUARD","AsyncLock","UNIVERSAL_APK","aabUtilsMethods","process","on","size","paths","values","log","debug","length","util","pluralize","appPath","rimrafSync","e","warn","message","extractUniversalApk","aabPath","opts","exists","Error","aabName","path","basename","apkName","substring","extname","tmpRoot","tempDir","openDir","tmpApksPath","join","acquire","aabHash","keystore","keystorePassword","keyAlias","keyPassword","cacheHash","keystoreHash","keyAliasHash","crypto","createHash","update","digest","has","resultPath","resolve","get","del","initAapt2","args","binaries","aapt2","execBundletool","unzipFile","universalApkPath","fileDeletionPromises","allFileNames","readdir","fileName","fullPath","push","B","all","ign","mv","set"],"sources":["../../../lib/tools/aab-utils.js"],"sourcesContent":["import log from '../logger.js';\nimport path from 'path';\nimport { fs, tempDir, util } from '@appium/support';\nimport LRU from 'lru-cache';\nimport { unzipFile } from '../helpers.js';\nimport AsyncLock from 'async-lock';\nimport B from 'bluebird';\nimport crypto from 'crypto';\n\nconst AAB_CACHE = new LRU({\n max: 10,\n dispose: (hash, extractedFilesRoot) => fs.rimraf(extractedFilesRoot),\n});\nconst AAB_CACHE_GUARD = new AsyncLock();\nconst UNIVERSAL_APK = 'universal.apk';\n\nconst aabUtilsMethods = {};\n\nprocess.on('exit', () => {\n if (!AAB_CACHE.size) {\n return;\n }\n\n const paths = [...AAB_CACHE.values()];\n log.debug(`Performing cleanup of ${paths.length} cached .aab ` +\n util.pluralize('package', paths.length));\n for (const appPath of paths) {\n try {\n // Asynchronous calls are not supported in onExit handler\n fs.rimrafSync(appPath);\n } catch (e) {\n log.warn(e.message);\n }\n }\n});\n\n/**\n * @typedef {Object} ApkCreationOptions\n * @property {string} keystore Specifies the path to the deployment keystore used\n * to sign the APKs. This flag is optional. If you don't include it,\n * bundletool attempts to sign your APKs with a debug signing key.\n * If the .apk has been already signed and cached then it is not going to be resigned\n * unless a different keystore or key alias is used.\n * @property {string} keystorePassword Specifies your keystore’s password.\n * It is mandatory to provide this value if `keystore` one is assigned\n * otherwise it is going to be ignored.\n * @property {string} keyAlias Specifies the alias of the signing key you want to use.\n * It is mandatory to provide this value if `keystore` one is assigned\n * otherwise it is going to be ignored.\n * @property {string} keyPassword Specifies the password for the signing key.\n * It is mandatory to provide this value if `keystore` one is assigned\n * otherwise it is going to be ignored.\n */\n\n/**\n * Builds a universal .apk from the given .aab package. See\n * https://developer.android.com/studio/command-line/bundletool#generate_apks\n * for more details.\n *\n * @param {string} aabPath Full path to the source .aab package\n * @param {ApkCreationOptions} opts\n * @returns The path to the resulting universal .apk. The .apk is stored in the internal cache\n * by default.\n * @throws {Error} If there was an error while creating the universal .apk\n */\naabUtilsMethods.extractUniversalApk = async function extractUniversalApk (aabPath, opts = {}) {\n if (!await fs.exists(aabPath)) {\n throw new Error(`The file at '${aabPath}' either does not exist or is not accessible`);\n }\n\n const aabName = path.basename(aabPath);\n const apkName = aabName.substring(0, aabName.length - path.extname(aabName).length) + '.apk';\n const tmpRoot = await tempDir.openDir();\n const tmpApksPath = path.join(tmpRoot, `${aabName}.apks`);\n try {\n return await AAB_CACHE_GUARD.acquire(aabPath, async () => {\n const aabHash = await fs.hash(aabPath);\n const {\n keystore,\n keystorePassword,\n keyAlias,\n keyPassword,\n } = opts;\n let cacheHash = aabHash;\n if (keystore) {\n if (!await fs.exists(keystore)) {\n throw new Error(`The keystore file at '${keystore}' either does not exist ` +\n `or is not accessible`);\n }\n if (!keystorePassword || !keyAlias || !keyPassword) {\n throw new Error('It is mandatory to also provide keystore password, key alias, ' +\n 'and key password if the keystore path is set');\n }\n const keystoreHash = await fs.hash(keystore);\n const keyAliasHash = crypto.createHash('sha1');\n keyAliasHash.update(keyAlias);\n cacheHash = [cacheHash, keystoreHash, keyAliasHash.digest('hex')].join(':');\n }\n log.debug(`Calculated the cache key for '${aabPath}': ${cacheHash}`);\n if (AAB_CACHE.has(cacheHash)) {\n const resultPath = path.resolve(AAB_CACHE.get(cacheHash), apkName);\n if (await fs.exists(resultPath)) {\n return resultPath;\n }\n AAB_CACHE.del(cacheHash);\n }\n\n await this.initAapt2();\n const args = [\n 'build-apks',\n '--aapt2', this.binaries.aapt2,\n '--bundle', aabPath,\n '--output', tmpApksPath,\n ...(keystore ? [\n '--ks', keystore,\n '--ks-pass', `pass:${keystorePassword}`,\n '--ks-key-alias', keyAlias,\n '--key-pass', `pass:${keyPassword}`,\n ] : []),\n '--mode=universal'\n ];\n log.debug(`Preparing universal .apks bundle from '${aabPath}'`);\n await this.execBundletool(args, `Cannot build a universal .apks bundle from '${aabPath}'`);\n\n log.debug(`Unpacking universal application bundle at '${tmpApksPath}' to '${tmpRoot}'`);\n await unzipFile(tmpApksPath, tmpRoot);\n let universalApkPath;\n const fileDeletionPromises = [];\n const allFileNames = await fs.readdir(tmpRoot);\n for (const fileName of allFileNames) {\n const fullPath = path.join(tmpRoot, fileName);\n if (fileName === UNIVERSAL_APK) {\n universalApkPath = fullPath;\n } else {\n fileDeletionPromises.push(fs.rimraf(fullPath));\n }\n }\n try {\n await B.all(fileDeletionPromises);\n } catch (ign) {}\n if (!universalApkPath) {\n log.debug(`The following items were extracted from the .aab bundle: ${allFileNames}`);\n throw new Error(`${UNIVERSAL_APK} cannot be found in '${aabPath}' bundle. ` +\n `Does the archive contain a valid application bundle?`);\n }\n const resultPath = path.join(tmpRoot, apkName);\n log.debug(`Found ${UNIVERSAL_APK} at '${universalApkPath}'. Caching it to '${resultPath}'`);\n await fs.mv(universalApkPath, resultPath);\n AAB_CACHE.set(cacheHash, tmpRoot);\n return resultPath;\n });\n } catch (e) {\n await fs.rimraf(tmpRoot);\n throw e;\n }\n};\n\nexport default aabUtilsMethods;\n"],"mappings":"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"}
1
+ {"version":3,"file":"aab-utils.js","names":["AAB_CACHE","LRU","max","dispose","hash","extractedFilesRoot","fs","rimraf","AAB_CACHE_GUARD","AsyncLock","UNIVERSAL_APK","aabUtilsMethods","process","on","size","paths","values","log","debug","length","util","pluralize","appPath","rimrafSync","e","warn","message","extractUniversalApk","aabPath","opts","exists","Error","aabName","path","basename","apkName","substring","extname","tmpRoot","tempDir","openDir","tmpApksPath","join","acquire","aabHash","keystore","keystorePassword","keyAlias","keyPassword","cacheHash","keystoreHash","keyAliasHash","crypto","createHash","update","digest","has","resultPath","resolve","get","del","initAapt2","args","binaries","aapt2","execBundletool","unzipFile","universalApkPath","fileDeletionPromises","allFileNames","readdir","fileName","fullPath","push","B","all","ign","mv","set"],"sources":["../../../lib/tools/aab-utils.js"],"sourcesContent":["import log from '../logger.js';\nimport path from 'path';\nimport { fs, tempDir, util } from '@appium/support';\nimport LRU from 'lru-cache';\nimport { unzipFile } from '../helpers.js';\nimport AsyncLock from 'async-lock';\nimport B from 'bluebird';\nimport crypto from 'crypto';\n\nconst AAB_CACHE = new LRU({\n max: 10,\n dispose: (hash, extractedFilesRoot) => fs.rimraf(extractedFilesRoot),\n});\nconst AAB_CACHE_GUARD = new AsyncLock();\nconst UNIVERSAL_APK = 'universal.apk';\n\nconst aabUtilsMethods = {};\n\nprocess.on('exit', () => {\n if (!AAB_CACHE.size) {\n return;\n }\n\n const paths = [...AAB_CACHE.values()];\n log.debug(`Performing cleanup of ${paths.length} cached .aab ` +\n util.pluralize('package', paths.length));\n for (const appPath of paths) {\n try {\n // Asynchronous calls are not supported in onExit handler\n fs.rimrafSync(appPath);\n } catch (e) {\n log.warn(e.message);\n }\n }\n});\n\n/**\n * @typedef {Object} ApkCreationOptions\n * @property {string} keystore Specifies the path to the deployment keystore used\n * to sign the APKs. This flag is optional. If you don't include it,\n * bundletool attempts to sign your APKs with a debug signing key.\n * If the .apk has been already signed and cached then it is not going to be resigned\n * unless a different keystore or key alias is used.\n * @property {string} keystorePassword Specifies your keystore’s password.\n * It is mandatory to provide this value if `keystore` one is assigned\n * otherwise it is going to be ignored.\n * @property {string} keyAlias Specifies the alias of the signing key you want to use.\n * It is mandatory to provide this value if `keystore` one is assigned\n * otherwise it is going to be ignored.\n * @property {string} keyPassword Specifies the password for the signing key.\n * It is mandatory to provide this value if `keystore` one is assigned\n * otherwise it is going to be ignored.\n */\n\n/**\n * Builds a universal .apk from the given .aab package. See\n * https://developer.android.com/studio/command-line/bundletool#generate_apks\n * for more details.\n *\n * @param {string} aabPath Full path to the source .aab package\n * @param {ApkCreationOptions} opts\n * @returns The path to the resulting universal .apk. The .apk is stored in the internal cache\n * by default.\n * @throws {Error} If there was an error while creating the universal .apk\n */\naabUtilsMethods.extractUniversalApk = async function extractUniversalApk (aabPath, opts = {}) {\n if (!await fs.exists(aabPath)) {\n throw new Error(`The file at '${aabPath}' either does not exist or is not accessible`);\n }\n\n const aabName = path.basename(aabPath);\n const apkName = aabName.substring(0, aabName.length - path.extname(aabName).length) + '.apk';\n const tmpRoot = await tempDir.openDir();\n const tmpApksPath = path.join(tmpRoot, `${aabName}.apks`);\n try {\n return await AAB_CACHE_GUARD.acquire(aabPath, async () => {\n const aabHash = await fs.hash(aabPath);\n const {\n keystore,\n keystorePassword,\n keyAlias,\n keyPassword,\n } = opts;\n let cacheHash = aabHash;\n if (keystore) {\n if (!await fs.exists(keystore)) {\n throw new Error(`The keystore file at '${keystore}' either does not exist ` +\n `or is not accessible`);\n }\n if (!keystorePassword || !keyAlias || !keyPassword) {\n throw new Error('It is mandatory to also provide keystore password, key alias, ' +\n 'and key password if the keystore path is set');\n }\n const keystoreHash = await fs.hash(keystore);\n const keyAliasHash = crypto.createHash('sha1');\n keyAliasHash.update(keyAlias);\n cacheHash = [cacheHash, keystoreHash, keyAliasHash.digest('hex')].join(':');\n }\n log.debug(`Calculated the cache key for '${aabPath}': ${cacheHash}`);\n if (AAB_CACHE.has(cacheHash)) {\n const resultPath = path.resolve(AAB_CACHE.get(cacheHash), apkName);\n if (await fs.exists(resultPath)) {\n return resultPath;\n }\n AAB_CACHE.del(cacheHash);\n }\n\n await this.initAapt2();\n const args = [\n 'build-apks',\n '--aapt2', this.binaries.aapt2,\n '--bundle', aabPath,\n '--output', tmpApksPath,\n ...(keystore ? [\n '--ks', keystore,\n '--ks-pass', `pass:${keystorePassword}`,\n '--ks-key-alias', keyAlias,\n '--key-pass', `pass:${keyPassword}`,\n ] : []),\n '--mode=universal'\n ];\n log.debug(`Preparing universal .apks bundle from '${aabPath}'`);\n await this.execBundletool(args, `Cannot build a universal .apks bundle from '${aabPath}'`);\n\n log.debug(`Unpacking universal application bundle at '${tmpApksPath}' to '${tmpRoot}'`);\n await unzipFile(tmpApksPath, tmpRoot);\n let universalApkPath;\n const fileDeletionPromises = [];\n const allFileNames = await fs.readdir(tmpRoot);\n for (const fileName of allFileNames) {\n const fullPath = path.join(tmpRoot, fileName);\n if (fileName === UNIVERSAL_APK) {\n universalApkPath = fullPath;\n } else {\n fileDeletionPromises.push(fs.rimraf(fullPath));\n }\n }\n try {\n await B.all(fileDeletionPromises);\n } catch (ign) {}\n if (!universalApkPath) {\n log.debug(`The following items were extracted from the .aab bundle: ${allFileNames}`);\n throw new Error(`${UNIVERSAL_APK} cannot be found in '${aabPath}' bundle. ` +\n `Does the archive contain a valid application bundle?`);\n }\n const resultPath = path.join(tmpRoot, apkName);\n log.debug(`Found ${UNIVERSAL_APK} at '${universalApkPath}'. Caching it to '${resultPath}'`);\n await fs.mv(universalApkPath, resultPath);\n AAB_CACHE.set(cacheHash, tmpRoot);\n return resultPath;\n });\n } catch (e) {\n await fs.rimraf(tmpRoot);\n throw e;\n }\n};\n\nexport default aabUtilsMethods;\n"],"mappings":"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"}