@mcesystems/apple-kit 1.0.94 → 1.0.95

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1213,14 +1213,14 @@ function createLoggers(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
1213
1213
  const logInfo8 = (0, import_debug.default)(`${namespace}:info`);
1214
1214
  const logTask5 = (0, import_debug.default)(`${namespace}:task`);
1215
1215
  const logError4 = (0, import_debug.default)(`${namespace}:error`);
1216
- const logDetail4 = (0, import_debug.default)(`${namespace}:detail`);
1216
+ const logDetail3 = (0, import_debug.default)(`${namespace}:detail`);
1217
1217
  const logDebug = (0, import_debug.default)(`${namespace}:debug`);
1218
1218
  const logWarning2 = (0, import_debug.default)(`${namespace}:warning`);
1219
1219
  const logColor = (0, import_debug.default)(`${namespace}:color`);
1220
1220
  logInfo8.color = "19";
1221
1221
  logTask5.color = "25";
1222
1222
  logError4.color = "1";
1223
- logDetail4.color = "199";
1223
+ logDetail3.color = "199";
1224
1224
  logWarning2.color = "186";
1225
1225
  logDebug.color = "211";
1226
1226
  logColor.enabled = true;
@@ -1228,7 +1228,7 @@ function createLoggers(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
1228
1228
  logInfo8.namespace = `${namespace2}:info`;
1229
1229
  logTask5.namespace = `${namespace2}:task`;
1230
1230
  logError4.namespace = `${namespace2}:error`;
1231
- logDetail4.namespace = `${namespace2}:detail`;
1231
+ logDetail3.namespace = `${namespace2}:detail`;
1232
1232
  logWarning2.namespace = `${namespace2}:warning`;
1233
1233
  logDebug.namespace = `${namespace2}:debug`;
1234
1234
  }
@@ -1239,7 +1239,7 @@ function createLoggers(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
1239
1239
  logTask5.enabled = true;
1240
1240
  logError4.enabled = true;
1241
1241
  logWarning2.enabled = true;
1242
- logDetail4.enabled = false;
1242
+ logDetail3.enabled = false;
1243
1243
  logDebug.enabled = false;
1244
1244
  break;
1245
1245
  case "debug":
@@ -1247,7 +1247,7 @@ function createLoggers(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
1247
1247
  logTask5.enabled = true;
1248
1248
  logError4.enabled = true;
1249
1249
  logWarning2.enabled = true;
1250
- logDetail4.enabled = true;
1250
+ logDetail3.enabled = true;
1251
1251
  logDebug.enabled = true;
1252
1252
  break;
1253
1253
  case "none":
@@ -1255,7 +1255,7 @@ function createLoggers(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
1255
1255
  logTask5.enabled = false;
1256
1256
  logError4.enabled = false;
1257
1257
  logWarning2.enabled = false;
1258
- logDetail4.enabled = false;
1258
+ logDetail3.enabled = false;
1259
1259
  logDebug.enabled = false;
1260
1260
  break;
1261
1261
  }
@@ -1273,7 +1273,7 @@ function createLoggers(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
1273
1273
  logError4.color = color;
1274
1274
  break;
1275
1275
  case "detail":
1276
- logDetail4.color = color;
1276
+ logDetail3.color = color;
1277
1277
  break;
1278
1278
  case "warning":
1279
1279
  logWarning2.color = color;
@@ -1331,7 +1331,7 @@ ${" ".repeat(padding)}${"=".repeat(80)}`;
1331
1331
  function logHeader(title) {
1332
1332
  logInfo8(`${header(title, 2)}`);
1333
1333
  }
1334
- function logDataObject2(title, ...args) {
1334
+ function logDataObject3(title, ...args) {
1335
1335
  const stack = new Error().stack?.split("\n")[2] || "";
1336
1336
  const stackMatch = stack.match(/\((.*):(\d+):(\d+)\)$/) || stack.match(/at (.*):(\d+):(\d+)$/);
1337
1337
  let callerDetails = "";
@@ -1340,7 +1340,7 @@ ${" ".repeat(padding)}${"=".repeat(80)}`;
1340
1340
  const functionName = functionMatch ? functionMatch[1] : "<anonymous>";
1341
1341
  callerDetails = `${functionName}`;
1342
1342
  }
1343
- logDetail4(`${header(`*${title}* ${callerDetails}`)}
1343
+ logDetail3(`${header(`*${title}* ${callerDetails}`)}
1344
1344
  ${args.reduce((acc, arg) => `${acc}
1345
1345
  ${logDataDetail(arg)}`, "")}
1346
1346
 
@@ -1363,14 +1363,14 @@ ${"=".repeat(80)}`);
1363
1363
  logInfo: logInfo8,
1364
1364
  logTask: logTask5,
1365
1365
  logError: logError4,
1366
- logDetail: logDetail4,
1366
+ logDetail: logDetail3,
1367
1367
  logDebug,
1368
1368
  logWarning: logWarning2,
1369
1369
  logColor,
1370
1370
  setColors,
1371
1371
  printColors,
1372
1372
  logHeader,
1373
- logDataObject: logDataObject2,
1373
+ logDataObject: logDataObject3,
1374
1374
  logErrorObject,
1375
1375
  setLogLevel,
1376
1376
  setNamespace: setNamespace7
@@ -37006,14 +37006,14 @@ function createLoggers2(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
37006
37006
  const logInfo222 = (0, import_debug2.default)(`${namespace}:info`);
37007
37007
  const logTask5 = (0, import_debug2.default)(`${namespace}:task`);
37008
37008
  const logError22 = (0, import_debug2.default)(`${namespace}:error`);
37009
- const logDetail4 = (0, import_debug2.default)(`${namespace}:detail`);
37009
+ const logDetail3 = (0, import_debug2.default)(`${namespace}:detail`);
37010
37010
  const logDebug = (0, import_debug2.default)(`${namespace}:debug`);
37011
37011
  const logWarning2 = (0, import_debug2.default)(`${namespace}:warning`);
37012
37012
  const logColor = (0, import_debug2.default)(`${namespace}:color`);
37013
37013
  logInfo222.color = "19";
37014
37014
  logTask5.color = "25";
37015
37015
  logError22.color = "1";
37016
- logDetail4.color = "199";
37016
+ logDetail3.color = "199";
37017
37017
  logWarning2.color = "186";
37018
37018
  logDebug.color = "211";
37019
37019
  logColor.enabled = true;
@@ -37021,7 +37021,7 @@ function createLoggers2(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
37021
37021
  logInfo222.namespace = `${namespace2}:info`;
37022
37022
  logTask5.namespace = `${namespace2}:task`;
37023
37023
  logError22.namespace = `${namespace2}:error`;
37024
- logDetail4.namespace = `${namespace2}:detail`;
37024
+ logDetail3.namespace = `${namespace2}:detail`;
37025
37025
  logWarning2.namespace = `${namespace2}:warning`;
37026
37026
  logDebug.namespace = `${namespace2}:debug`;
37027
37027
  }
@@ -37032,7 +37032,7 @@ function createLoggers2(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
37032
37032
  logTask5.enabled = true;
37033
37033
  logError22.enabled = true;
37034
37034
  logWarning2.enabled = true;
37035
- logDetail4.enabled = false;
37035
+ logDetail3.enabled = false;
37036
37036
  logDebug.enabled = false;
37037
37037
  break;
37038
37038
  case "debug":
@@ -37040,7 +37040,7 @@ function createLoggers2(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
37040
37040
  logTask5.enabled = true;
37041
37041
  logError22.enabled = true;
37042
37042
  logWarning2.enabled = true;
37043
- logDetail4.enabled = true;
37043
+ logDetail3.enabled = true;
37044
37044
  logDebug.enabled = true;
37045
37045
  break;
37046
37046
  case "none":
@@ -37048,7 +37048,7 @@ function createLoggers2(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
37048
37048
  logTask5.enabled = false;
37049
37049
  logError22.enabled = false;
37050
37050
  logWarning2.enabled = false;
37051
- logDetail4.enabled = false;
37051
+ logDetail3.enabled = false;
37052
37052
  logDebug.enabled = false;
37053
37053
  break;
37054
37054
  }
@@ -37066,7 +37066,7 @@ function createLoggers2(namespace, logLevel = process.env.LOG_LEVEL ?? "none") {
37066
37066
  logError22.color = color;
37067
37067
  break;
37068
37068
  case "detail":
37069
- logDetail4.color = color;
37069
+ logDetail3.color = color;
37070
37070
  break;
37071
37071
  case "warning":
37072
37072
  logWarning2.color = color;
@@ -37124,7 +37124,7 @@ ${" ".repeat(padding)}${"=".repeat(80)}`;
37124
37124
  function logHeader(title) {
37125
37125
  logInfo222(`${header(title, 2)}`);
37126
37126
  }
37127
- function logDataObject2(title, ...args) {
37127
+ function logDataObject22(title, ...args) {
37128
37128
  const stack = new Error().stack?.split("\n")[2] || "";
37129
37129
  const stackMatch = stack.match(/\((.*):(\d+):(\d+)\)$/) || stack.match(/at (.*):(\d+):(\d+)$/);
37130
37130
  let callerDetails = "";
@@ -37133,7 +37133,7 @@ ${" ".repeat(padding)}${"=".repeat(80)}`;
37133
37133
  const functionName = functionMatch ? functionMatch[1] : "<anonymous>";
37134
37134
  callerDetails = `${functionName}`;
37135
37135
  }
37136
- logDetail4(`${header(`*${title}* ${callerDetails}`)}
37136
+ logDetail3(`${header(`*${title}* ${callerDetails}`)}
37137
37137
  ${args.reduce((acc, arg) => `${acc}
37138
37138
  ${logDataDetail(arg)}`, "")}
37139
37139
 
@@ -37156,14 +37156,14 @@ ${"=".repeat(80)}`);
37156
37156
  logInfo: logInfo222,
37157
37157
  logTask: logTask5,
37158
37158
  logError: logError22,
37159
- logDetail: logDetail4,
37159
+ logDetail: logDetail3,
37160
37160
  logDebug,
37161
37161
  logWarning: logWarning2,
37162
37162
  logColor,
37163
37163
  setColors,
37164
37164
  printColors,
37165
37165
  logHeader,
37166
- logDataObject: logDataObject2,
37166
+ logDataObject: logDataObject22,
37167
37167
  logErrorObject,
37168
37168
  setLogLevel,
37169
37169
  setNamespace: setNamespace7
@@ -38103,14 +38103,14 @@ function createLoggers22(namespace, logLevel = process.env.LOG_LEVEL ?? "none")
38103
38103
  const logInfo32 = (0, import_debug22.default)(`${namespace}:info`);
38104
38104
  const logTask5 = (0, import_debug22.default)(`${namespace}:task`);
38105
38105
  const logError22 = (0, import_debug22.default)(`${namespace}:error`);
38106
- const logDetail4 = (0, import_debug22.default)(`${namespace}:detail`);
38106
+ const logDetail3 = (0, import_debug22.default)(`${namespace}:detail`);
38107
38107
  const logDebug = (0, import_debug22.default)(`${namespace}:debug`);
38108
38108
  const logWarning2 = (0, import_debug22.default)(`${namespace}:warning`);
38109
38109
  const logColor = (0, import_debug22.default)(`${namespace}:color`);
38110
38110
  logInfo32.color = "19";
38111
38111
  logTask5.color = "25";
38112
38112
  logError22.color = "1";
38113
- logDetail4.color = "199";
38113
+ logDetail3.color = "199";
38114
38114
  logWarning2.color = "186";
38115
38115
  logDebug.color = "211";
38116
38116
  logColor.enabled = true;
@@ -38118,7 +38118,7 @@ function createLoggers22(namespace, logLevel = process.env.LOG_LEVEL ?? "none")
38118
38118
  logInfo32.namespace = `${namespace2}:info`;
38119
38119
  logTask5.namespace = `${namespace2}:task`;
38120
38120
  logError22.namespace = `${namespace2}:error`;
38121
- logDetail4.namespace = `${namespace2}:detail`;
38121
+ logDetail3.namespace = `${namespace2}:detail`;
38122
38122
  logWarning2.namespace = `${namespace2}:warning`;
38123
38123
  logDebug.namespace = `${namespace2}:debug`;
38124
38124
  }
@@ -38129,7 +38129,7 @@ function createLoggers22(namespace, logLevel = process.env.LOG_LEVEL ?? "none")
38129
38129
  logTask5.enabled = true;
38130
38130
  logError22.enabled = true;
38131
38131
  logWarning2.enabled = true;
38132
- logDetail4.enabled = false;
38132
+ logDetail3.enabled = false;
38133
38133
  logDebug.enabled = false;
38134
38134
  break;
38135
38135
  case "debug":
@@ -38137,7 +38137,7 @@ function createLoggers22(namespace, logLevel = process.env.LOG_LEVEL ?? "none")
38137
38137
  logTask5.enabled = true;
38138
38138
  logError22.enabled = true;
38139
38139
  logWarning2.enabled = true;
38140
- logDetail4.enabled = true;
38140
+ logDetail3.enabled = true;
38141
38141
  logDebug.enabled = true;
38142
38142
  break;
38143
38143
  case "none":
@@ -38145,7 +38145,7 @@ function createLoggers22(namespace, logLevel = process.env.LOG_LEVEL ?? "none")
38145
38145
  logTask5.enabled = false;
38146
38146
  logError22.enabled = false;
38147
38147
  logWarning2.enabled = false;
38148
- logDetail4.enabled = false;
38148
+ logDetail3.enabled = false;
38149
38149
  logDebug.enabled = false;
38150
38150
  break;
38151
38151
  }
@@ -38163,7 +38163,7 @@ function createLoggers22(namespace, logLevel = process.env.LOG_LEVEL ?? "none")
38163
38163
  logError22.color = color;
38164
38164
  break;
38165
38165
  case "detail":
38166
- logDetail4.color = color;
38166
+ logDetail3.color = color;
38167
38167
  break;
38168
38168
  case "warning":
38169
38169
  logWarning2.color = color;
@@ -38221,7 +38221,7 @@ ${" ".repeat(padding)}${"=".repeat(80)}`;
38221
38221
  function logHeader(title) {
38222
38222
  logInfo32(`${header(title, 2)}`);
38223
38223
  }
38224
- function logDataObject2(title, ...args) {
38224
+ function logDataObject22(title, ...args) {
38225
38225
  const stack = new Error().stack?.split("\n")[2] || "";
38226
38226
  const stackMatch = stack.match(/\((.*):(\d+):(\d+)\)$/) || stack.match(/at (.*):(\d+):(\d+)$/);
38227
38227
  let callerDetails = "";
@@ -38230,7 +38230,7 @@ ${" ".repeat(padding)}${"=".repeat(80)}`;
38230
38230
  const functionName = functionMatch ? functionMatch[1] : "<anonymous>";
38231
38231
  callerDetails = `${functionName}`;
38232
38232
  }
38233
- logDetail4(`${header(`*${title}* ${callerDetails}`)}
38233
+ logDetail3(`${header(`*${title}* ${callerDetails}`)}
38234
38234
  ${args.reduce((acc, arg) => `${acc}
38235
38235
  ${logDataDetail(arg)}`, "")}
38236
38236
 
@@ -38253,14 +38253,14 @@ ${"=".repeat(80)}`);
38253
38253
  logInfo: logInfo32,
38254
38254
  logTask: logTask5,
38255
38255
  logError: logError22,
38256
- logDetail: logDetail4,
38256
+ logDetail: logDetail3,
38257
38257
  logDebug,
38258
38258
  logWarning: logWarning2,
38259
38259
  logColor,
38260
38260
  setColors,
38261
38261
  printColors,
38262
38262
  logHeader,
38263
- logDataObject: logDataObject2,
38263
+ logDataObject: logDataObject22,
38264
38264
  logErrorObject,
38265
38265
  setLogLevel,
38266
38266
  setNamespace: setNamespace7
@@ -38351,7 +38351,7 @@ async function createMDMClient(options) {
38351
38351
  }
38352
38352
 
38353
38353
  // src/logic/actions/install.ts
38354
- var { logInfo: logInfo3, setNamespace: setNamespace2 } = createLoggers("apple-kit:install");
38354
+ var { logInfo: logInfo3, setNamespace: setNamespace2, logDataObject: logDataObject2 } = createLoggers("apple-kit:install");
38355
38355
  var InstallActions = class {
38356
38356
  constructor(udid, iosClient) {
38357
38357
  this.udid = udid;
@@ -38364,12 +38364,16 @@ var InstallActions = class {
38364
38364
  }
38365
38365
  async installManagedApp(ipaPath, options) {
38366
38366
  const result = await this.iosClient.installApp(ipaPath);
38367
+ logDataObject2("Installing app result", { result });
38368
+ return await this.installManagedAppFromMDM(options);
38369
+ }
38370
+ async installManagedAppFromMDM(options) {
38367
38371
  logInfo3("Installing app via MDM for management takeover");
38368
38372
  const mdmClient = await createMDMClient(options.clientConfig);
38369
38373
  if (!mdmClient) {
38370
38374
  throw new Error("Failed to create MDM client");
38371
38375
  }
38372
- await mdmClient.installApp(this.udid, options);
38376
+ const result = await mdmClient.installApp(this.udid, options);
38373
38377
  return result;
38374
38378
  }
38375
38379
  async uninstallApp(bundleId) {
@@ -38396,7 +38400,7 @@ var InstallActions = class {
38396
38400
  };
38397
38401
 
38398
38402
  // src/logic/actions/proxy.ts
38399
- var { logTask: logTask2, logInfo: logInfo4, setNamespace: setNamespace3, logDetail } = createLoggers("");
38403
+ var { logTask: logTask2, logInfo: logInfo4, setNamespace: setNamespace3 } = createLoggers("");
38400
38404
  var ProxyActions = class {
38401
38405
  constructor(udid, iosClient) {
38402
38406
  this.udid = udid;
@@ -38413,7 +38417,6 @@ var ProxyActions = class {
38413
38417
  reject(new Error("Port forwarding timed out"));
38414
38418
  }, timeoutMs);
38415
38419
  result.stderr?.on("data", (data) => {
38416
- logDetail("port forward stderr", data.toString());
38417
38420
  if (data.toString().includes("Started")) {
38418
38421
  clearTimeout(timeout2);
38419
38422
  resolve2({
@@ -39016,7 +39019,7 @@ var ProfileParser = class {
39016
39019
  };
39017
39020
 
39018
39021
  // src/logic/iosClient.ts
39019
- var { logDetail: logDetail2, setNamespace: setNamespace5, logTask: logTask4 } = createLoggers("");
39022
+ var { logDetail, setNamespace: setNamespace5, logTask: logTask4 } = createLoggers("");
39020
39023
  var IosClient = class {
39021
39024
  constructor(iosPath, udid, _usbmuxdAddress) {
39022
39025
  this.iosPath = iosPath;
@@ -39171,7 +39174,7 @@ var IosClient = class {
39171
39174
  }
39172
39175
  async tunnelStart(userspace = false) {
39173
39176
  const args = ["tunnel", "start", "--udid", this.udid, ...userspace ? ["--userspace"] : []];
39174
- logDetail2(`Spawning tunnel: ${this.iosPath} ${args.join(" ")}`);
39177
+ logDetail(`Spawning tunnel: ${this.iosPath} ${args.join(" ")}`);
39175
39178
  const child = spawn(this.iosPath, args, {
39176
39179
  windowsHide: true,
39177
39180
  env: {
@@ -39314,7 +39317,7 @@ var IosClient = class {
39314
39317
  };
39315
39318
 
39316
39319
  // src/logic/appleDeviceKit.ts
39317
- var { logInfo: logInfo7, setNamespace: setNamespace6, logError: logError3, logDetail: logDetail3 } = createLoggers("apple-kit");
39320
+ var { logInfo: logInfo7, setNamespace: setNamespace6, logError: logError3, logDetail: logDetail2 } = createLoggers("apple-kit");
39318
39321
  var AppleDeviceKit = class _AppleDeviceKit {
39319
39322
  constructor(udid, logicalPort, usbmuxdAddress) {
39320
39323
  this.logicalPort = logicalPort;
@@ -39332,11 +39335,7 @@ var AppleDeviceKit = class _AppleDeviceKit {
39332
39335
  this.installActions = new InstallActions(this.deviceId, this.iosClient);
39333
39336
  this.activationFlow = new ActivationFlow(this.deviceId, this.iosClient, this.deviceActions);
39334
39337
  this.proxyActions = new ProxyActions(this.deviceId, this.iosClient);
39335
- this.iosClient.tunnelStart(true).then((process3) => {
39336
- this.tunnelProcess = process3;
39337
- }).catch((error) => {
39338
- logError3(`Failed to start tunnel: ${error.message}`);
39339
- });
39338
+ this.ensureTunnel();
39340
39339
  }
39341
39340
  deviceId;
39342
39341
  proxyProcess = null;
@@ -39371,12 +39370,12 @@ var AppleDeviceKit = class _AppleDeviceKit {
39371
39370
  async ensureTunnel() {
39372
39371
  const requiresTunnel = await this.requiresTunneling();
39373
39372
  if (!requiresTunnel) {
39374
- logDetail3(`Device ${this.deviceId} does not require tunneling (iOS < 17)`);
39373
+ logDetail2(`Device ${this.deviceId} does not require tunneling (iOS < 17)`);
39375
39374
  return;
39376
39375
  }
39377
39376
  const existingTunnel = this.tunnelProcess;
39378
39377
  if (existingTunnel && !existingTunnel.killed) {
39379
- logDetail3(`Tunnel already running for device ${this.deviceId}`);
39378
+ logDetail2(`Tunnel already running for device ${this.deviceId}`);
39380
39379
  return;
39381
39380
  }
39382
39381
  logInfo7(`Starting tunnel for device ${this.deviceId} (iOS 17+)`);
@@ -39485,6 +39484,10 @@ var AppleDeviceKit = class _AppleDeviceKit {
39485
39484
  this.ensureNotDisposed();
39486
39485
  return this.installActions.installManagedApp(ipaPath, options);
39487
39486
  }
39487
+ async installAppFromMDM(options) {
39488
+ this.ensureNotDisposed();
39489
+ return this.installActions.installManagedAppFromMDM(options);
39490
+ }
39488
39491
  /**
39489
39492
  * Uninstall an app by bundle ID (uninstall agent)
39490
39493
  *
@@ -39605,7 +39608,7 @@ var AppleDeviceKit = class _AppleDeviceKit {
39605
39608
  await mkdir(tmpDir, { recursive: true });
39606
39609
  await writeFile2(tmpFilePath, fileData);
39607
39610
  const stats = await stat(tmpFilePath);
39608
- logDetail3(`Temp file written: ${tmpFilePath}, size: ${stats.size} bytes`);
39611
+ logDetail2(`Temp file written: ${tmpFilePath}, size: ${stats.size} bytes`);
39609
39612
  if (stats.size !== fileData.length) {
39610
39613
  throw new Error(
39611
39614
  `File size mismatch: expected ${fileData.length} bytes, got ${stats.size} bytes`
@@ -39617,7 +39620,7 @@ var AppleDeviceKit = class _AppleDeviceKit {
39617
39620
  srcPath: tmpFilePath,
39618
39621
  dstPath: devicePath
39619
39622
  });
39620
- logDetail3(`Push: ${JSON.stringify(pushResult)}`);
39623
+ logDetail2(`Push: ${JSON.stringify(pushResult)}`);
39621
39624
  if (pushResult.exitCode !== 0) {
39622
39625
  const errorMessages = pushResult.logMessages.filter((msg) => msg.level === "error").map((msg) => msg.msg).join("; ");
39623
39626
  const allMessages = pushResult.logMessages.map((msg) => `${msg.level}: ${msg.msg}`).join("; ");
@@ -39654,7 +39657,7 @@ var AppleDeviceKit = class _AppleDeviceKit {
39654
39657
  srcPath: devicePath,
39655
39658
  dstPath: tmpDir
39656
39659
  });
39657
- logDetail3(`Pull: ${JSON.stringify(pullResult)}`);
39660
+ logDetail2(`Pull: ${JSON.stringify(pullResult)}`);
39658
39661
  if (pullResult.exitCode !== 0) {
39659
39662
  const errorMessages = pullResult.logMessages.filter((msg) => msg.level === "error").map((msg) => msg.msg).join("; ");
39660
39663
  const allMessages = pullResult.logMessages.map((msg) => `${msg.level}: ${msg.msg}`).join("; ");