# Asiakaskirjaston asentaminen

> Lataa client.js Entasen CDN:stä ja luo sitten instanssi. Asennettavaa pakettia tai rakennusvaihetta ei tarvita.

Asiakaskirjasto toimitetaan Entasen CDN:stä yhtenä tiedostona. npm-pakettia ei ole, rakennettavaa bundlea ei ole eikä riippuvuuksia tarvitse pitää ajan tasalla – saat aina nykyisen version.

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

Skriptin lataaminen määrittää globaalin `Entase`-luokan. Se ei tee itsenäisesti mitään muuta: ei verkkopyyntöjä, ei DOM-muutoksia eikä renderöityä sisältöä. Kaikki alkaa, kun luot instanssin.

## Instanssin luominen

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

Luo **yksi instanssi sivua kohden** ja käytä sitä uudelleen kaikissa tapahtumissa. Konstruktori rekisteröi ikkunaan `message`-kuuntelijan ja alkaa selvittää, mitä kassatilaa verkkotunnuksesi saa käyttää, joten useiden instanssien luominen tarkoittaa päällekkäisiä kuuntelijoita ja tunnistuskutsuja ilman hyötyä.

Jokaisella asetuksella on oletusarvo, joten argumentiton `new Entase()` on kelvollinen – mutta ilman `pk`:ta asiakaskirjasto ei voi varmistaa, että verkkotunnuksesi voi käyttää upotettua kassaa, ja käyttää aina varavaihtoehtona ponnahdusikkunaa. Katso [Kassatilat](/developers/js-client/checkout-modes.md).

## Skriptin lataaminen asynkronisesti

Jos lataat `client.js`:n käyttäen `async`- tai `defer`-attribuuttia, luokkaa ei vielä ole olemassa, kun upotettu skriptisi suoritetaan. Kirjasto lähettää `window`-objektille `entase:ready`-tapahtuman latauduttuaan, joten odota sitä:

```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>
```

Ensin tehtävä `typeof`-tarkistus on tärkeä: jos skripti on jo latautunut, `entase:ready` on jo käynnistynyt ja sen kuunteleminen odottaisi ikuisesti.

## Siivoaminen

Yksisivuisessa sovelluksessa kutsu `destroy()`, kun instanssin omistava näkymä poistetaan:

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

Tämä poistaa asiakaskirjaston rekisteröimät ikkunakuuntelijat. Tuhottua instanssia ei voi käyttää uudelleen – sen `book()`-kutsuminen kirjaa virheen eikä tee mitään. Luo sen sijaan uusi instanssi.

## Sisällön tietoturvakäytäntö

Jos sivustosi lähettää `Content-Security-Policy`-otsakkeen, kassa tarvitsee seuraavat:

- `script-src https://js.entase.com` – kirjaston lataamiseen.
- `frame-src https://www.entase.com` – kassa renderöidään iframeen paneelitilassa.
- `connect-src https://www.entase.com` – asiakaskirjasto kutsuu Entase-APIa määrittääkseen sallitun kassatilan.

Ilman `frame-src`:ää paneelitila tuottaa tyhjän paneelin. Ilman `connect-src`:ää tilan tunnistus epäonnistuu ja jokainen kassa avautuu ponnahdusikkunana.
