# Встановлення клієнта

> Завантажте client.js з Entase CDN, а потім створіть екземпляр. Не потрібно встановлювати пакет або виконувати етап збирання.

Клієнт постачається з Entase CDN як один файл. Немає npm-пакета, немає бандла для збирання й немає залежностей, які потрібно підтримувати в актуальному стані – ви завжди отримуєте поточну версію.

```html
<script src="https://js.entase.com/client.js"></script>
```

Завантаження скрипту визначає глобальний клас `Entase`. Сам по собі він більше нічого не робить: не надсилає мережевих запитів, не змінює DOM і нічого не рендерить. Усе починається, коли ви створюєте екземпляр.

## Створення екземпляра

```js
const entase = new Entase({ pk: 'YOUR_PUBLISHABLE_KEY' });
```

Створюйте **один екземпляр на сторінку** та використовуйте його повторно для кожної події. Конструктор реєструє слухач `message` у вікні та починає визначати, який режим оформлення замовлення дозволено використовувати вашому домену, тому створення кількох екземплярів означає дубльовані слухачі та дубльовані виклики визначення без жодної користі.

Кожна опція має значення за замовчуванням, тому `new Entase()` без аргументів є допустимим – але без `pk` клієнт не може перевірити, чи може ваш домен використовувати вбудоване оформлення замовлення, і завжди повертатиметься до спливного вікна. Див. [Режими оформлення замовлення](/developers/js-client/checkout-modes.md).

## Асинхронне завантаження скрипту

Якщо ви завантажуєте `client.js` з `async` або `defer`, клас іще не існуватиме, коли виконуватиметься ваш вбудований скрипт. Після завантаження бібліотека генерує подію `entase:ready` у `window`, тож дочекайтеся її:

```html
<script src="https://js.entase.com/client.js" async></script>
<script>
  let entase = null;

  const init = () => { entase = new Entase({ pk: 'YOUR_PUBLISHABLE_KEY' }); };

  if (typeof Entase !== 'undefined') init();
  else window.addEventListener('entase:ready', init);
</script>
```

Спершу важлива перевірка `typeof`: якщо скрипт уже завершив завантаження, `entase:ready` уже спрацювала, і очікування на неї тривало б вічно.

## Очищення

В односторінковому застосунку викликайте `destroy()`, коли монтування представлення, якому належить екземпляр, скасовується:

```js
entase.destroy();
```

Це видаляє слухачі вікна, зареєстровані клієнтом. Знищений екземпляр не можна використати повторно – виклик `book()` для нього записує помилку в журнал і нічого не робить. Натомість створіть новий екземпляр.

## Політика безпеки контенту

Якщо ваш сайт надсилає заголовок `Content-Security-Policy`, для оформлення замовлення потрібно:

- `script-src https://js.entase.com` – для завантаження бібліотеки.
- `frame-src https://www.entase.com` – оформлення замовлення рендериться в iframe у режимі панелі.
- `connect-src https://www.entase.com` – клієнт звертається до API Entase, щоб визначити дозволений режим оформлення замовлення.

Без `frame-src` режим панелі створює порожню панель. Без `connect-src` визначення режиму не вдається, і кожне оформлення замовлення відкривається як спливне вікно.
