console.log(`assignedId: ${assignedId}, stateInput: ${stateInput}`);
assignedId = assignedId.substring(5); // убираем "user_"
let state;
let result = [];
let lastChunk = null;
if (stateInput === "") {
  state = { // initial state
     lastSeenId: 0
  };
} else {
  const inputObject = JSON.parse(stateInput);
  state = {
    lastSeenId: inputObject.lastSeenId
  }
}
function doIteration() {
  const filter = {'>ID': state.lastSeenId};
  filter['=ASSIGNED_BY_ID'] = assignedId;
  lastChunk = bx24.callMethod('crm.contact.list', {
    start: -1,
    order: {'ID': 'ASC'},
    select: [ "ID" ],
  	filter: filter
  });
  if (lastChunk.length > 0) {
    result.push(...lastChunk.map((entity) => parseInt(entity.ID)));
    state.lastSeenId = lastChunk[lastChunk.length - 1].ID;
  }
  return lastChunk.length < 50;
}
let isFinished;
while (!(isFinished = doIteration())) {
  if (stopWatch.getRemainingMillis() <= 0) {
    console.log("Достигли ограничения времени запуска");
    break;
  }
  console.log("Получили часть элементов: " + lastChunk.length + ", продолжаем");
}
if (isFinished) {
  console.log("Выгрузка данных полностью завершена, получено элементов в этой итерации: " + result.length);
} else {
  console.log("Выгрузка данных завершена частично, получено элементов в этой итерации: " + result.length);
}
return {
  "stateOutput": JSON.stringify(state),
  "isFinished": isFinished,
  "contactIds": result
};