ExShopifyApp.AccessToken (ex_shopify_app v1.0.0)

Access token management.

Exchanges session tokens for offline/online access tokens and refreshes expiring offline access tokens. Returns ExShopifyApp.AccessToken.Token structs carrying the full expiry metadata.

Docs:

Summary

Functions

Exchange a session token for an access token.

Refresh an expiring offline access token using its refresh token.

Functions

client(shop)

@spec client(shop()) :: Tesla.Client.t()

fetch(shop, session_token, opts \\ [])

@spec fetch(shop(), String.t(), keyword()) ::
  {:ok, ExShopifyApp.AccessToken.Token.t()} | {:error, term()}

Exchange a session token for an access token.

By default an expiring offline token is requested (Shopify is replacing lifetime tokens with expiring ones). Pass expiring: false to request a legacy lifetime token.

Options

  • :type - :offline (default) or :online
  • :expiring - request an expiring token (default true)

refresh(shop, refresh_token)

@spec refresh(shop(), String.t()) ::
  {:ok, ExShopifyApp.AccessToken.Token.t()} | {:error, term()}

Refresh an expiring offline access token using its refresh token.

Both the access token and the refresh token are regenerated; the previous refresh token is invalidated, so the returned token's refresh_token must be persisted.

This function only performs the HTTP exchange and decides nothing about persistence or locking. Concurrent refreshes for the same shop would invalidate each other — use ExShopifyApp.AccessToken.Repo (or another ExShopifyApp.AccessToken.Store) to serialize and durably persist them.