0.1.10 • Published 5 months ago

@elevora/sdk v0.1.10

Weekly downloads
-
License
-
Repository
-
Last release
5 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

5 months ago

0.1.9

5 months ago

0.1.8

6 months ago

0.1.7

6 months ago

0.1.6

6 months ago

0.1.5

6 months ago

0.1.4

6 months ago

0.1.3

6 months ago

0.1.2

6 months ago

0.1.1

6 months ago

0.1.0

6 months ago