Скрипты в PolyApiIDE

Pre-request и after-response выполняются локально в песочнице. Канонический API — объект poly. pm — совместимый алиас того же объекта: вставленные скрипты из Postman работают как есть. Скрипты доступны на Free.

Как писать скрипты

Откройте запрос → вкладка Scripts. Два поля:

  • Pre-request — до Send. Удобно выставить timestamp, подписать запрос или получить токен через poly.sendRequest.
  • After-response — после ответа. Удобно сохранить token из JSON, проверить статус, залогировать тело.

Скрипты пишутся на JavaScript. console.log / warn / error попадают в консоль сессии IDE.

Канонический API: poly

В PolyApiIDE каноническое имя объекта — poly, не pm. Пишите новые скрипты через poly.*.

pmсовместимый алиас: это обёртка над тем же объектом. Скрипты, импортированные из Postman, можно вставлять как есть — pm.environment.set и poly.environment.set меняют одно и то же окружение.

poly.sendRequest / pm.sendRequest

Вызов реально отправляет HTTP через тот же стек Send, что и кнопка Send в IDE (URL, auth, cookies запроса, прокси, подстановка переменных). Это не заглушка и не отдельный fetch из песочницы: сеть идёт из расширения по инициативе скрипта, который вы сами запустили.

Удалённого выполнения вашего кода на серверах PolyApiIDE нет.

Песочница и CWS

Скрипт компилируется локально через new Function в sandbox-странице расширения. Код не уходит на polyapiclient.ru. Это соответствует политикам Chrome Web Store: нет удалённого произвольного кода, нет скрытой сети из пользовательского скрипта мимо стека Send.

Скрипты доступны на Free — ключ не нужен. QA-сценарии, Collection Runner, load, AI и облачный бэкап по-прежнему на платных тарифах.

Объект poly

  • poly.environment.get(name) / set(name, value) / unset(name) / has(name) / toObject() — активное окружение.
  • poly.variables.get/set — переменные текущего слоя (как в Postman pm.variables).
  • poly.collectionVariables.get/set — переменные коллекции.
  • poly.globals.get/set — globals пространства.
  • poly.test(name, fn) — проверка; результат пишется в консоль сессии.
  • poly.response.json() / text() / code — только в after-response.
  • poly.cookies.get(name) — cookies, сохранённые у запроса/коллекции (в том числе после явной синхронизации с сайта).

Те же методы есть у pm.

Пример: логин и token через pm.sendRequest

Pre-request. Можно вставить скрипт из Postman без правок:

pm.sendRequest({
  url: pm.environment.get("baseUrl") + "/login",
  method: "POST",
  header: { "Content-Type": "application/json" },
  body: {
    mode: "raw",
    raw: JSON.stringify({
      username: pm.environment.get("username"),
      password: pm.environment.get("password")
    })
  }
}, function (err, res) {
  if (err) {
    console.log(err);
    return;
  }
  const data = res.json();
  pm.environment.set("token", data.token || data.access_token);
  console.log("token updated");
});

Тот же пример через poly.*

poly.sendRequest({
  url: poly.environment.get("baseUrl") + "/login",
  method: "POST",
  header: { "Content-Type": "application/json" },
  body: {
    mode: "raw",
    raw: JSON.stringify({
      username: poly.environment.get("username"),
      password: poly.environment.get("password")
    })
  }
}, function (err, res) {
  if (err) {
    console.log(err);
    return;
  }
  const data = res.json();
  poly.environment.set("token", data.token || data.access_token);
  console.log("token updated");
});

After-response: сохранить token из ответа Send

if (poly.response.code >= 200 && poly.response.code < 300) {
  try {
    const data = poly.response.json();
    if (data.token || data.access_token) {
      poly.environment.set("token", data.token || data.access_token);
      console.log("token updated");
    }
  } catch (e) {
    console.log("ответ не JSON");
  }
}

poly.test("status is 2xx", function () {
  if (poly.response.code < 200 || poly.response.code >= 300) {
    throw new Error("unexpected status " + poly.response.code);
  }
});

Cookies

В IDE можно нажать Sync cookies from site («Синхронизировать cookies с сайта») — это отдельное явное действие, не скрипт. После синхронизации значения попадают в cookies запроса и доступны хелперам:

const sid = poly.cookies.get("sessionid");
console.log("sessionid", sid);

Разрешение cookies запрашивается по клику и только для hostname URL запроса. Подробности — в политике конфиденциальности.