0.1.10 • Published 12 months ago

@elevora/sdk v0.1.10

Weekly downloads
-
License
-
Repository
-
Last release
12 months ago

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/sdk

Peer Dependencies

The SDK requires the following peer dependencies:

pnpm add @apollo/client graphql

Usage

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 token
  • getFreshToken(): Promise<string | undefined> - Get a fresh authentication token
  • getGraphqlEndpoint(): string - Get the configured GraphQL endpoint
  • getApolloLinks(): 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 dev

License

MIT

0.1.10

12 months ago

0.1.9

12 months ago

0.1.8

12 months ago

0.1.7

12 months ago

0.1.6

12 months ago

0.1.5

12 months ago

0.1.4

12 months ago

0.1.3

12 months ago

0.1.2

12 months ago

0.1.1

12 months ago

0.1.0

12 months ago