Přejít na hlavní obsah

Rozšiřitelnost

Většině integrací stačí výchozí createGoPayClient. Vlastní HttpTransport / TokenCache použijte pro observabilitu, proxy, sdílené úložiště tokenů nebo HTTP klienta jiného než fetch.
gopay-sdk je rozšiřitelné přes dvě abstrakce:
  • HttpTransport: jak se provádí HTTP požadavek
  • TokenCache: kde se ukládají OAuth tokeny

Vlastní HTTP transport

Implementujte HttpTransport pro vlastní chování (logování, retry, tracing, proxy, …). Typy transportu importujte z hlavního balíčku nebo z gopay-sdk/http.
import type { HttpTransport, HttpTransportRequest } from 'gopay-sdk';

class ObservabilityTransport implements HttpTransport {
  async execute(request: HttpTransportRequest): Promise<Response> {
    const startedAt = Date.now();

    try {
      const response = await fetch(request.url, {
        method: request.method,
        headers: request.headers,
        body: request.body,
      });

      console.log('gopay_request', {
        method: request.method,
        url: request.url,
        status: response.status,
        durationMs: Date.now() - startedAt,
      });

      return response;
    } catch (error) {
      console.error('gopay_request_failed', {
        method: request.method,
        url: request.url,
        durationMs: Date.now() - startedAt,
        error,
      });
      throw error;
    }
  }
}
Použití při vytvoření klienta:
import { createGoPayClient } from 'gopay-sdk';

const client = createGoPayClient(
  {
    goid: 8123456789,
    clientId: process.env.GOPAY_CLIENT_ID!,
    clientSecret: process.env.GOPAY_CLIENT_SECRET!,
    gatewayUrl: 'https://gw.sandbox.gopay.com/api',
  },
  {
    transport: new ObservabilityTransport(),
  },
);

Vlastní cache tokenů

Implementujte TokenCache pro Redis, Memcached, databázi nebo distribuovanou paměť.
import type { OAuthToken, TokenCache } from 'gopay-sdk';

class MemoryTokenCache implements TokenCache {
  private readonly tokens = new Map<string, OAuthToken>();

  get(key: string): OAuthToken | undefined {
    return this.tokens.get(key);
  }

  set(key: string, value: OAuthToken): void {
    this.tokens.set(key, value);
  }

  delete(key: string): void {
    this.tokens.delete(key);
  }
}
import { createGoPayClient } from 'gopay-sdk';

const client = createGoPayClient(
  {
    goid: 8123456789,
    clientId: process.env.GOPAY_CLIENT_ID!,
    clientSecret: process.env.GOPAY_CLIENT_SECRET!,
    gatewayUrl: 'https://gw.sandbox.gopay.com/api',
  },
  {
    tokenCache: new MemoryTokenCache(),
  },
);

Doporučení

  • Retry v transportu držte konzervativní (např. jen síťové timeouty).
  • Neopakujte slepě neidempotentní vytváření plateb.
  • Korelační ID a observabilita centrálně v transportu.
  • Sdílenou cache používejte při více instancích se stejnými přihlašovacími údaji.
  • Klíč cache držte v souladu s clientId + gatewayUrl + scope.