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.