Skip to content

Architecture ​

The @vitabletech/gbp-sdk is designed with an enterprise-grade, clean architecture. It separates concerns strictly so that authentication, HTTP requests, and business logic are entirely decoupled.

Core Flow ​

Here is a high-level overview of how a method call propagates through the SDK:

Architecture Core Flow Diagram

1. Services Layer ​

The src/services/ directory contains classes corresponding to specific Google APIs (e.g., AccountsService, LocationsService). These classes do not know how authentication works; they simply format the URL and body and pass it to the HttpClient.

2. HTTP Layer ​

The HttpClient (src/http/HttpClient.ts) is responsible for executing network requests. It features:

  • Automatic Retries: Implements exponential backoff via RetryPolicy.
  • Error Mapping: Catches raw HTTP errors and maps them to domain-specific errors (e.g., mapping 429 to RateLimitError).
  • Timeout Management: Wraps fetch requests with AbortController signals.

3. Token Manager Layer ​

Before the HttpClient fires a request, it asks the TokenManager for a valid access token. The TokenManager:

  • Checks TokenStorage (Memory or File) for an unexpired token.
  • If expired or missing, it queues a refresh request via the OAuthClient.
  • Ensures thread safety: if 5 simultaneous requests are fired while the token is expired, the TokenManager guarantees that only one refresh request is made to Google, and all 5 requests wait for that single refresh to complete.

4. OAuth Client ​

The OAuthClient strictly handles raw interactions with oauth2.googleapis.com. It handles generating authorization URLs and exchanging authorization codes or refresh tokens for active access tokens.