Pre-request и after-response выполняются локально в песочнице. Канонический API — объект poly. pm — совместимый алиас того же объекта: вставленные скрипты из Postman работают как есть. Скрипты доступны на Free.
Откройте запрос → вкладка Scripts. Два поля:
poly.sendRequest.token из JSON, проверить статус, залогировать тело.Скрипты пишутся на JavaScript. console.log / warn / error попадают в консоль сессии IDE.
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 нет.
Скрипт компилируется локально через new Function в sandbox-странице расширения. Код не уходит на polyapiclient.ru. Это соответствует политикам Chrome Web Store: нет удалённого произвольного кода, нет скрытой сети из пользовательского скрипта мимо стека Send.
Скрипты доступны на Free — ключ не нужен. QA-сценарии, Collection Runner, load, AI и облачный бэкап по-прежнему на платных тарифах.
polypoly.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.
pm.sendRequestPre-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");
});
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);
}
});
В IDE можно нажать Sync cookies from site («Синхронизировать cookies с сайта») — это отдельное явное действие, не скрипт. После синхронизации значения попадают в cookies запроса и доступны хелперам:
const sid = poly.cookies.get("sessionid");
console.log("sessionid", sid);
Разрешение cookies запрашивается по клику и только для hostname URL запроса. Подробности — в политике конфиденциальности.