DeribitEx.TokenManager (deribit_ex v0.2.0)

View Source

Integrates token management with order management.

This module provides the central integration point for token operations and order management, handling session transitions, order state preservation, and resubscription. It coordinates:

  • Session tracking via SessionContext
  • Order state preservation via OrderContext
  • Channel resubscription via ResubscriptionHandler

Designed to be used by Adapter to perform token operations while preserving application state.

Summary

Types

t()

The complete token management state.

Functions

Gets all active orders for the current session.

Gets the current session ID if available.

Handles a token exchange operation for switching subaccounts.

Handles a token fork operation for creating a named session.

Handles logout and session invalidation.

Handles a token refresh operation.

Initializes the token manager from an authentication response.

Creates a new TokenManager instance.

Performs resubscription for all tracked channels.

Registers a new order with the token manager.

Registers a new subscription with the token manager.

Unregisters a subscription from the token manager.

Updates an existing order in the token manager.

Types

t()

@type t() :: %DeribitEx.TokenManager{
  orders: DeribitEx.OrderContext.t(),
  resubscription: DeribitEx.ResubscriptionHandler.t(),
  session: DeribitEx.SessionContext.t() | nil
}

The complete token management state.

  • session: Current session context
  • orders: Order tracking context
  • resubscription: Channel resubscription handler

Functions

get_active_orders(manager)

@spec get_active_orders(t()) ::
  {:ok, [DeribitEx.OrderContext.order_entry()]} | {:error, :no_active_session}

Gets all active orders for the current session.

Parameters

  • manager: Current token manager state

Returns

  • {:ok, orders}: List of active orders
  • {:error, :no_active_session}: If no active session exists

get_session_id(manager)

@spec get_session_id(t()) :: {:ok, String.t()} | {:error, :no_active_session}

Gets the current session ID if available.

Parameters

  • manager: Current token manager state

Returns

  • {:ok, session_id}: The current session ID
  • {:error, :no_active_session}: If no active session exists

handle_exchange_token(manager, exchange_data, subject_id)

@spec handle_exchange_token(t(), map(), integer()) :: {:ok, t()} | {:error, any()}

Handles a token exchange operation for switching subaccounts.

Parameters

  • manager: Current token manager state
  • exchange_data: Response from exchange_token operation
  • subject_id: The ID of the subaccount being switched to

Returns

  • {:ok, updated_manager}: Updated token manager with new session
  • {:error, reason}: If the operation fails

handle_fork_token(manager, fork_data, session_name)

@spec handle_fork_token(t(), map(), String.t()) :: {:ok, t()} | {:error, any()}

Handles a token fork operation for creating a named session.

Parameters

  • manager: Current token manager state
  • fork_data: Response from fork_token operation
  • session_name: The name of the new session being created

Returns

  • {:ok, updated_manager}: Updated token manager with new session
  • {:error, reason}: If the operation fails

handle_logout(manager)

@spec handle_logout(t()) :: {:ok, t()}

Handles logout and session invalidation.

Parameters

  • manager: Current token manager state

Returns

  • {:ok, updated_manager}: Updated token manager with invalidated session

handle_token_refresh(manager, refresh_data)

@spec handle_token_refresh(t(), map()) :: {:ok, t()} | {:error, any()}

Handles a token refresh operation.

Parameters

  • manager: Current token manager state
  • refresh_data: Response from token refresh operation

Returns

  • {:ok, updated_manager}: Updated token manager with refreshed session
  • {:error, reason}: If the operation fails

init_from_auth(manager, auth_data, opts \\ [])

@spec init_from_auth(t(), map(), keyword()) :: {:ok, t()}

Initializes the token manager from an authentication response.

Parameters

  • manager: Current token manager state
  • auth_data: Authentication response from Deribit
  • opts: Additional options

Returns

  • {:ok, updated_manager}: Updated token manager with session context

new(opts \\ [])

@spec new(keyword()) :: t()

Creates a new TokenManager instance.

Parameters

  • opts: Options for the token manager
    • :max_retries - Maximum resubscription retry attempts (default: 3)

Returns

  • A new TokenManager instance

perform_resubscription(manager, conn)

@spec perform_resubscription(t(), pid()) :: {:ok, t(), map()} | {:error, any(), t()}

Performs resubscription for all tracked channels.

Parameters

  • manager: Current token manager state
  • conn: WebsockexNova client connection

Returns

  • {:ok, updated_manager, results}: Updated manager and resubscription results
  • {:error, reason, updated_manager}: Error information if resubscription fails

register_order(manager, order)

@spec register_order(t(), map()) :: {:ok, t()} | {:error, any()}

Registers a new order with the token manager.

Parameters

  • manager: Current token manager state
  • order: Order information

Returns

  • {:ok, updated_manager}: Updated token manager with order registered
  • {:error, reason}: If the operation fails

register_subscription(manager, channel, params)

@spec register_subscription(t(), String.t(), map()) :: {:ok, t()} | {:error, any()}

Registers a new subscription with the token manager.

Parameters

  • manager: Current token manager state
  • channel: Channel name or topic
  • params: Subscription parameters

Returns

  • {:ok, updated_manager}: Updated token manager with subscription registered
  • {:error, reason}: If the operation fails

unregister_subscription(manager, channel)

@spec unregister_subscription(t(), String.t()) :: {:ok, t()}

Unregisters a subscription from the token manager.

Parameters

  • manager: Current token manager state
  • channel: Channel to unregister

Returns

  • {:ok, updated_manager}: Updated token manager with subscription removed

update_order(manager, order)

@spec update_order(t(), map()) :: {:ok, t()} | {:error, any()}

Updates an existing order in the token manager.

Parameters

  • manager: Current token manager state
  • order: Updated order information

Returns

  • {:ok, updated_manager}: Updated token manager with order updated
  • {:error, reason}: If the operation fails