Search packages, repositories and app categories

Package detailsv0.8.0

fresh_graphql

An graphql link for token refresh. Built on top of package:graphql and manages authentication tokens transparently.

AndroidiOSWebmacOSWindowsLinux
30-day downloads
3.4K
Likes
38
Pub points
160

Install package

flutter pub add fresh_graphql

Package Overview

Package selection guidance compiled from public package information, community data, and project usage.

Fresh GraphQL is a Flutter/Dart package that extends the functionality of the graphql package by providing an automatic token refresh mechanism for GraphQL requests. It seamlessly handles authentication tokens, ensuring they are refreshed before expired requests are sent. Built on top of the core graphql package, it simplifies secure API communication in apps requiring persistent authentication. Ideal for applications using JWT or similar token-based auth systems.

Use cases

  • Secure GraphQL API access with auto-refresh
  • Handling expired tokens without user intervention
  • Integrating with JWT-based authentication
  • Managing authenticated sessions across app restarts
  • Simplifying state management for auth tokens

Key features

  • Automatic token refresh
  • Transparent integration with graphql package
  • Support for custom token refresh logic
  • Built-in retry mechanism for failed requests
  • Cross-platform compatibility

Suitable for

  • Apps using JWT or OAuth2
  • Developers seeking seamless auth handling
  • Projects with frequent GraphQL calls
  • Teams prioritizing developer experience
  • Applications requiring robust session management

Considerations

  • Requires proper setup of token refresh endpoint
  • Depends on external auth service availability
  • May need customization for non-standard auth flows
  • Not suitable for stateless APIs without tokens
  • Limited to use with graphql package only

Original README

Original README snapshot from the linked source repository. Visit the repository for the latest content.

Fresh 🍋

build License: MIT GitHub stars


A collection of packages for automatic token refresh in Dart and Flutter. Fresh handles refreshing, caching, and attaching authentication tokens transparently so your API calls just work.

Why Fresh?

Token-based authentication seems simple until you handle the edge cases: tokens expire mid-session, multiple requests fail at the same time triggering duplicate refreshes, refresh tokens get revoked, and you need to route users to login when auth is lost. Fresh handles all of this so you don't have to.

  • No more manual 401 handling scattered across your codebase
  • No more race conditions when concurrent requests trigger simultaneous refreshes
  • No more stale tokens causing request failures - expired tokens are refreshed proactively before the request is even sent

Packages

Package Pub
fresh pub package
fresh_dio pub package
fresh_graphql pub package
fresh_http pub package

Features

  • Automatic token refresh on 401 / auth errors, with automatic request retry
  • Proactive refresh before requests when the token is expired
  • Single-flight refresh - concurrent requests share one refresh call instead of triggering multiple
  • authenticationStatus stream for reacting to login/logout events
  • Pluggable TokenStorage - bring your own persistence layer
  • Built-in OAuth2Token with expiresAt support

Usage

fresh_dio
final dio = Dio();

dio.interceptors.add(
  Fresh.oAuth2(
    tokenStorage: InMemoryTokenStorage<OAuth2Token>(),
    refreshToken: (token, client) async {
      final response = await client.post(
        'https://api.example.com/auth/refresh',
        data: {'refresh_token': token?.refreshToken},
      );
      return OAuth2Token(
        accessToken: response.data['access_token'],
        refreshToken: response.data['refresh_token'],
      );
    },
  ),
);

See the fresh_dio README for full documentation.

fresh_graphql
import 'dart:convert';

final freshLink = FreshLink.oAuth2(
  tokenStorage: InMemoryTokenStorage<OAuth2Token>(),
  refreshToken: (token, client) async {
    final response = await client.post(
      Uri.parse('https://api.example.com/auth/refresh'),
      body: jsonEncode({'refresh_token': token?.refreshToken}),
    );
    final body = jsonDecode(response.body) as Map<String, dynamic>;
    return OAuth2Token(
      accessToken: body['access_token'],
      refreshToken: body['refresh_token'],
    );
  },
  shouldRefresh: (response) =>
      response.errors?.any((e) => e.message.contains('UNAUTHENTICATED')) ?? false,
);

// HttpLink comes from package:gql_http_link
final link = Link.from([freshLink, HttpLink('https://api.example.com/graphql')]);

See the fresh_graphql README for full documentation.

fresh_http
import 'dart:convert';

final client = Fresh.oAuth2(
  tokenStorage: InMemoryTokenStorage<OAuth2Token>(),
  refreshToken: (token, client) async {
    final response = await client.post(
      Uri.parse('https://api.example.com/auth/refresh'),
      body: jsonEncode({'refresh_token': token?.refreshToken}),
    );
    final body = jsonDecode(response.body) as Map<String, dynamic>;
    return OAuth2Token(
      accessToken: body['access_token'],
      refreshToken: body['refresh_token'],
    );
  },
);

See the fresh_http README for full documentation.

Categories

Dependencies

Dependency list 4 items

Source repository

Projects using this package

No data available yet.