Skip to main content
The Client class is your main entry point for Uplink automation. It manages the WebSocket connection to the Uplink relay server and provides methods for worker and browser management.
Key concepts:
  • Device: A physical iOS or Android device
  • Worker: A worker created using the native Uplink SDK (a device can create multiple workers)
  • Address: A hex-encoded identifier for workers

Connection

Creates an Uplink session using your project credentials.
Parameters:
  • auth: Your OAuth client credentials from Uplink Console — { clientId, clientSecret }. The session is automatically scoped to the project the client belongs to. See Authentication, or the Auth type below for the accepted shapes.
  • options (optional): Session configuration
    • include: Cryptographic key options
      • ecdsa: Boolean, include ECDSA keys (default: false)
      • ecdh: Boolean, include ECDH keys (default: false)
    • restrict: { verifier: string } — a secret value that binds the session to your code, so that holding the session’s URL is not enough to drive it. Sessions are restricted either way: if you omit this, a verifier is generated for you. Supply your own only when you need to reproduce it in another runtime. See Session restriction.
Returns: Promise<Session> - A Session, with the shape { sessionId, sessionUrl, qrUrl, credential, keys? }. credential is the verifier — generated here if you did not supply one. Pass the object directly to uplink.client.fromSession() to connect. Example:
Example — choosing your own verifier:
Uplink stores only a challenge derived from the verifier, never the verifier itself. It cannot be recovered from the API — so if you plan to reconnect from a different runtime, either persist session.credential or supply a verifier you can read again.
Looks up an existing session by ID and returns the same Session shape that uplink.session() returns — including a fresh sessionUrl. Useful when you already have a sessionId (for example, persisted across runs) and want to keep using the original session instead of creating a new one, or recover the keys that were generated when it was created.
Parameters:
  • auth: Your OAuth client credentials from Uplink Console — { clientId, clientSecret }
  • sessionId: The ID of an existing session belonging to the client’s project
  • options (optional):
    • include: Cryptographic key options
      • ecdsa: Boolean, include the project ECDSA key pair (default: false)
      • ecdh: Boolean, include the session ECDH key pair if one was created at session-create time (default: false)
Returns: Promise<Session> - Same shape as uplink.session(), but never with a credential. Uplink does not store the verifier, so it cannot return one. Merge yours back in before passing the session to fromSession().
You only need to worry about merging credential when you’re picking a session up later through getSession(). If you call fromSession() directly with the object returned by uplink.session(), the credential is already attached for you. See Reconnecting from another runtime.
The include.ecdh / include.ecdsa flags only re-export keys that Uplink generated for the session. If you brought your own key pair instead, getSession() won’t return anything in keys — you’re expected to re-attach your own.
Example:
Returns 404 if the session does not exist or does not belong to the client’s project.
Fetches a richer view of an existing session for display in dashboards or admin views — including paired devices, total bytes streamed, total connection duration, tags, and the parent project and organization. Use this when you need to inspect a session, not to reconnect to it.
Parameters:
  • auth: Your OAuth client credentials from Uplink Console — { clientId, clientSecret }
  • sessionId: The ID of an existing session belonging to the client’s project
Returns: Promise<SessionDetails> - Session metadata. See the SessionDetails type below. Example:
Exchanges your OAuth client credentials for an access token. You don’t normally need this — passing credentials directly to the methods above lets the SDK obtain and renew tokens for you. Reach for it when you want to hold the token yourself, for example to share one across processes.
Parameters:
  • auth: Your OAuth client credentials from Uplink Console — { clientId, clientSecret }
  • options (optional):
    • host: Override the Uplink API host
    • signal: An AbortSignal to cancel the exchange
Returns: Promise<Token> - { token, expiresAt }. Pass it anywhere an Auth is accepted. Example:
A token you obtained yourself is not renewed for you — only credentials the SDK holds are. Once expiresAt passes, calls made with the token fail; call uplink.token() again with your client credentials to get a new one.
When to reach for which method:
  • uplink.session() — create a brand-new session.
  • uplink.getSession() — refetch an existing session in the same shape as session() so you can pass it to fromSession().
  • uplink.sessionDetails() — inspect a session’s metadata (devices, usage, tags). Not for reconnecting.
  • uplink.token() — mint an access token to hold and reuse yourself, instead of letting the SDK manage one.
Creates a client from an Uplink session.
Parameters:
  • session: A Session from uplink.session(), or one from uplink.getSession() with its credential merged back in. session.credential is sent to the relay as the connection’s proof that it owns the session; session.keys are re-imported for you.
  • options (optional): Connection options
    • agent: Optional AI agent for natural language automation (requires @uplink-code/ai)
Returns: Promise<Client> - Connected client instance Complete example:
With AI agent:
Connects directly to an Uplink session via WebSocket URL. This is an alternative to using uplink.session() + fromSession().
Parameters:
  • url: WebSocket URL in the format wss://relay.uplink.build/session/<jwt>
  • options (optional): Connection options
    • agent: Optional AI agent for natural language automation (requires @uplink-code/ai)
Returns: Promise<Client> - Connected client instance Example:
Recommended approach: Use uplink.session() + fromSession() for better credential management and project organization. Use connect() when you need to work with pre-generated session URLs.

Browser operations

client.launch()

Launches a new browser on a worker. If no worker address is provided, uses the first available worker.
Parameters:
  • address (optional): Worker address to launch browser on
Returns: Promise<Browser> - New browser instance Example:

client.connect()

Connects to an existing browser by its handle.
Parameters:
  • handle: Browser handle identifier
  • address (optional): Worker address where browser is running
Returns: Promise<Browser> - Connected browser instance Example:

client.browsers()

Lists all browsers on a worker.
Parameters:
  • address (optional): Worker address to query. If not provided, queries first available worker.
Returns: Promise<Browser[]> - Array of browser instances Example:

Worker operations

client.workers()

Returns list of currently connected workers.
Returns: ClientWorker[] - Array of connected workers Example:

client.terminate()

Terminates a worker connection.
Parameters:
  • address (optional): Worker address to terminate. If not provided, terminates first available worker.
Returns: Promise<void> Example:
Terminating a worker closes all browsers running on that worker and disconnects the device from the session.

Connection management

client.close()

Closes the client connection and cleans up resources.
Returns: Promise<void> Example:
Always call close() when done to properly clean up WebSocket connections and resources. Connection time is determined by how long clients and workers are connected to a session.

Events

The client emits events for worker connection lifecycle.

worker-connected

Emitted when a new worker connects to the session (i.e., when a device running the Uplink SDK joins).
Example:

worker-disconnected

Emitted when a worker disconnects from the session (i.e., when a device leaves or loses connection).
Example:

Types

Session

Returned by uplink.session() and uplink.getSession(). Plain data — pass it to uplink.client.fromSession().
credential is optional on the type because getSession() returns a Session without one. It is always present on the result of uplink.session().

Auth

Accepted by uplink.session(), uplink.getSession(), uplink.sessionDetails(), and uplink.token(). Either your client credentials, or an access token you already hold.

ClientCredentials

Token

Returned by uplink.token().

ClientOptions

Address

Worker identifier - a hex-encoded address:

SessionDetails

Returned by uplink.sessionDetails(). Aggregates session-level metadata across the API, devices, billing, and tags.

Complete example

ClientWorker

Device-specific operations

Browser

Browser management

Core concepts

Architecture overview

Sessions

Session management