0.1.10 • Published 5 months ago
@elevora/sdk v0.1.10
Elevora SDK
A TypeScript SDK for interacting with Elevora services, providing authentication management and Apollo GraphQL integration.
Features
- Token-based authentication management with automatic token refresh
- Secure token storage with customizable storage adapters
- Apollo GraphQL integration with pre-configured links for:
- Authentication
- Error handling with automatic token refresh
- HTTP requests
- Built-in Relay-style pagination support
- TypeScript support with full type definitions
Installation
pnpm add @elevora/sdkPeer Dependencies
The SDK requires the following peer dependencies:
pnpm add @apollo/client graphqlUsage
Basic Setup
import { ElevoraSdk } from "@elevora/sdk";
const sdk = new ElevoraSdk({
defaultRefreshTokenUrl: "https://api.example.com",
graphqlEndpoint: "https://api.example.com/graphql",
});With Apollo Client
import { ApolloClient, InMemoryCache, ApolloLink } from "@apollo/client";
import { ElevoraSdk, getDefaultMemoryCacheConfig } from "@elevora/sdk";
const sdk = new ElevoraSdk({
defaultRefreshTokenUrl: "https://api.example.com",
graphqlEndpoint: "https://api.example.com/graphql",
});
const client = new ApolloClient({
link: ApolloLink.from(sdk.getApolloLinks()),
cache: new InMemoryCache(getDefaultMemoryCacheConfig()),
});Custom Token Storage
The SDK comes with a default localStorage adapter, but you can implement your own token storage by extending the TokenStorage class:
import { TokenStorage } from "@elevora/sdk";
class CustomTokenStorage extends TokenStorage {
get(): string | null {
// Your implementation to retrieve the token
return null;
}
set(token: string): void {
// Your implementation to store the token
}
remove(): void {
// Your implementation to remove the token
}
}
const sdk = new ElevoraSdk({
tokenStorage: new CustomTokenStorage(),
defaultRefreshTokenUrl: "https://example.com/api/refresh-token",
graphqlEndpoint: "https://api.example.com/graphql",
});Custom Token Refresher
The SDK includes a default token refresher that makes HTTP requests to refresh tokens, but you can implement your own refresh logic:
import { TokenRefresher } from "@elevora/sdk";
class CustomTokenRefresher extends TokenRefresher {
async getFreshToken(): Promise<string | undefined> {
// Your implementation to refresh the token
// Return the new token or undefined if refresh fails
}
}
const sdk = new ElevoraSdk({
tokenRefresher: new CustomTokenRefresher(),
graphqlEndpoint: "https://api.example.com/graphql",
});API Reference
ElevoraSdk
Constructor Options
interface ElevoraSdkConfig {
tokenStorage?: TokenStorage; // Custom token storage implementation
tokenRefresher?: TokenRefresher; // Custom token refresher implementation
defaultRefreshTokenUrl?: string; // URL for the default token refresher
graphqlEndpoint?: string; // GraphQL API endpoint
}Methods
getToken(): string | null- Get the current authentication tokengetFreshToken(): Promise<string | undefined>- Get a fresh authentication tokengetGraphqlEndpoint(): string- Get the configured GraphQL endpointgetApolloLinks(): ApolloLink[]- Get configured Apollo links
Cache Configuration
The SDK provides a default cache configuration with Relay-style pagination:
import { getDefaultMemoryCacheConfig } from "@elevora/sdk";
const cacheConfig = getDefaultMemoryCacheConfig({
// Your cache config overrides
});Default pagination is configured for:
- campaigns
- userJoinedCampaigns
- activeCampaigns
Development
# Install dependencies
pnpm install
# Build the SDK
pnpm build
# Watch mode during development
pnpm devLicense
MIT