Browser API

Hosted popup, Connect redirect и Vanilla JS bundle.

Browser API

Browser-клиенты доступны из @orria/tapok и @orria/tapok/browser. Корневой entrypoint дополнительно экспортирует общие типы и низкоуровневые helpers; для обычной интеграции используйте показанные ниже клиенты.

Hosted — Tapok

Hosted не требует регистрации приложения, client_id или API key.

import { Tapok } from '@orria/tapok/browser'

const tapok = new Tapok({
  baseUrl: 'https://tapok.orria.space', // можно не указывать для production Tapok
})

loginButton.onclick = async () => {
  // Popup должен открываться непосредственно из пользовательского события.
  const result = await tapok.login()

  // Псевдокод: backend обязан проверить token до создания своей сессии.
  await postToOwnBackend('/api/session', { token: result.token })
}

Методы:

  • login(options?) — открывает Hosted popup и возвращает HostedAuthResult;
  • getSession() — читает ещё действующий локальный результат;
  • logout() — удаляет локальный результат;
  • refresh() — fail-closed с session_expired, пока silent refresh недоступен.

Connect — createTapokConnect()

Connect требует зарегистрированное приложение. API key никогда не помещается в этот browser-код.

import { createTapokConnect } from '@orria/tapok/browser'

const connect = createTapokConnect({
  clientId: 'tapok_…',
  redirectUri: 'https://app.example/auth/callback',
  scopes: ['session', 'profile:display_name'],
})

loginButton.onclick = () => connect.startSignIn()

// На странице redirectUri:
const callback = connect.finishSignIn()
if (callback) {
  // Псевдокод: отправьте code и PKCE verifier своему backend.
  await postToOwnBackend('/api/connect/exchange', callback)
}

startSignIn({ loginHint? }) начинает redirect. finishSignIn({ url? }) проверяет state и возвращает code, PKCE verifier, redirect URI и client ID.

Vanilla JS — tapok.js и vanilla.js

Оба package path ведут к одному browser bundle и публикуют window.Tapok:

<script src="https://tapok.orria.space/tapok.js"></script>
<button id="login">Войти через Tapok</button>

<script>
  login.onclick = async () => {
    const result = await window.Tapok.login()
    await postToOwnBackend('/api/session', { token: result.token })
  }
</script>

При установке из npm bundle также доступен как @orria/tapok/tapok.js и @orria/tapok/vanilla.js. Пути tapok.ts и tapok.d.ts предназначены для исходного TypeScript bundle и его деклараций, а не являются отдельным режимом авторизации.