# Инсталиране на клиента

> Заредете 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` установяването на режима е неуспешно и всяко плащане се отваря като изскачащ прозорец.
