Node.js SDK

Installation

$npm install --save multion
># or
>yarn add multion

In Deno (1.25+) you can import by doing:

1import { MultiOnClient } from "npm:multion";

Usage

1import { MultiOnClient, MultiOn } from 'multion';
2
3const multion = new MultiOnClient({
4 apiKey: "YOUR_API_KEY", // Defaults to process.env.MULTION_API_KEY
5});
6
7const response = await multion.browse({
8 cmd: "what is the weather today?",
9 url: "https://www.google.com"
10})

Request and Response Types

The SDK exports all request and response types as TypeScript interfaces. Simply import them under the MultiOn namespace:

1import { MultiOn } from "multion";
2
3const message: MultiOn.Message = {
4 url: "https://www.google.com",
5 includeScreenshot: true,
6}

Exception Handling

When the API returns a non-success status code (4xx or 5xx response), a subclass of MultiOnError will be thrown:

1import { MultiOnError } from 'multion';
2
3try {
4 await multion.browse(...);
5} catch (err) {
6 if (err instanceof MultiOnError) {
7 console.log(err.statusCode);
8 console.log(err.message);
9 console.log(err.body);
10 }
11}

Advanced

Retries

The MultiOn Node SDK is instrumented with automatic retries with exponential backoff. A request will be retried as long as the request is deemed retriable and the number of retry attempts has not grown larger than the configured retry limit (default: 2).

A request is deemed retriable when any of the following HTTP status codes is returned:

  • 408 (Timeout)
  • 429 (Too Many Requests)
  • 5XX (Internal Server Errors)

Use the maxRetries request option to configure this behavior.

1const response = multion.browse({ url: "https://google.com" }, {
2 maxRetries: 0 // override maxRetries at the request level
3});

Timeouts

The SDK defaults to a 60 second timout. Use the timeoutInSeconds option to configure this behavior.

1const response = multion.browse({ url: "https://google.com" }, {
2 timeoutInSeconds: 30 // override timeout to 30s
3});

Custom HTTP client

The SDK provides a way for you to customize the underlying HTTP client / Fetch function. If you’re running in an unsupported environment, this provides a way for you to break the glass and ensure the SDK works.

1import { MultiOnClient } from 'multion';
2
3const multion = new MultiOnClient({
4 apiKey: "...",
5 fetcher: // provide your implementation here
6});

Runtime compatiblity

The SDK defaults to node-fetch but will use the global fetch client if present. The SDK works in the following runtimes:

The following runtimes are supported:

  • Node.js 18+
  • Vercel
  • Cloudflare Workers
  • Deno v1.25+
  • Bun 1.0+