Скрипты в 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.

Динамические переменные (пресеты)

Кроме обычной подстановки {{name}} / {identifier}, в PolyApiIDE есть готовые Postman-совместимые пресеты вида {{$guid}}: значение вычисляется заново при каждой отправке запроса, сохранять его в переменные не нужно. Работают в URL, Headers, Params и Body — везде, где подставляются обычные переменные.

  • {{$guid}} / {{$uuid}} — UUID v4, например 550e8400-e29b-41d4-a716-446655440000 ($uuid — синоним $guid).
  • {{$timestamp}} — Unix-время в секундах, например 1710000000.
  • {{$isoTimestamp}} — время в ISO-8601 UTC, например 2026-08-11T20:00:00.000Z.
  • {{$randomInt}} — случайное целое число от 0 до 1000.
  • {{$randomEmail}} — случайный email, например user42@example.com.
  • {{$randomUserName}} — случайный юзернейм, например user_ab12.
  • {{$randomFirstName}}, {{$randomLastName}}, {{$randomFullName}} — случайные имя, фамилия и имя + фамилия.
  • {{$randomPhoneNumber}} — телефон в формате, похожем на E.164, например +15551234567.
  • {{$randomUrl}} — случайный HTTPS-URL.
  • {{$randomAlphaNumeric}} — 16 случайных алфавитно-цифровых символов.
  • {{$randomHexColor}} — HEX-цвет, например #a1b2c3.
  • {{$randomBoolean}} — строка true или false.
  • {{$randomIP}} / {{$randomIPV6}} — случайный IPv4- или IPv6-адрес.
  • {{$randomPassword}} — случайный пароль из 20 символов.
  • {{$randomLocale}} — тег локали, например en-US.
  • {{$randomColor}} — название цвета, например blue.

Тот же список открывается прямо в расширении — кнопка «Пресеты» рядом с редактором переменных (запрос, коллекция, пространство, окружение).

Пример: логин и 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 запроса. Подробности — в политике конфиденциальности.