axis-core
TypeScript icon, indicating that this package has built-in type declarations

3.0.1 • Public • Published

axis-core

axis-core npm version SemVer compatible

A Node.js library written in TypeScript containing shared behavior for the other packages, e.g. code handling communication and authentication with Axis Communication cameras.

Table of contents


Super simple to use

// fetchBuilder is building a version of fetch that can handle the
// authentication protocols used by Axis devices.
const fetch = fetchBuilder(global.fetch);

// This package is exporting utility classes and methods. In this case we rely
// on DeviceRequest to build a request that is reading the product short name.
class GetProdShortNameRequest extends DeviceRequest {
    constructor(connection: Connection) {
        super(connection, '/axis-cgi/param.cgi?action=list&group=Brand.ProdShortName');
    }
}

// This is a custom response handler that reads the response body and extracts
// the parameter name and value from the text.
const responseHandler = async (res: Response): Promise<{ name: string; value: string }> => {
    if (!res.ok) {
        throw new Error(`Request failed with status ${res.status} ${res.statusText}`);
    }

    // text/plain;charset=UTF-8
    const contentType = res.headers.get('content-type')?.split(';')[0];
    if (contentType !== 'text/plain') {
        throw new Error(`Response with invalid content type: ${contentType}`);
    }

    const text = await res.text();
    const [name, value] = text.trim().split('=');

    return { name, value };
};

// This code is creating a connection to a device and sending a request to read
// the product short name. The response is then handled by the custom response
// handler.
const connection = new Connection(Protocol.Http, '<ip address>', 80, '<username>', '<password>');

const req = new GetProdShortNameRequest(connection);
const res = await fetch(req);

const { name, value } = await responseHandler(res);

console.log(`Status:     ${res.status}`);
console.log(`Parameter:  ${name}=${value}`);

Installation

npm install axis-core
# or
yarn add axis-core

API

Connection

The Connection class encapsulates all information needed in order to start communicating with a camera on the network.

/**
 * Class describing a connection to a device.
 */
class Connection {
    /**
     * Gets the protocol to use when creating the connection.
     */
    readonly protocol: Protocol;

    /**
     * Gets the address or hostname of the device.
     */
    readonly address: string;

    /**
     * Gets the port of the device.
     */
    readonly port: number;

    /**
     * Gets the username.
     */
    readonly username: string;

    /**
     * Gets the password.
     */
    readonly password: string;

    /**
     * Gets the url.
     */
    get url(): string;
}

enum Protocol {
    /**
     * Hypertext Transfer Protocol (HTTP).
     */
    Http = 0,

    /**
     * HTTP over Transport Layer Security (TLS).
     */
    Https = 1
}

fetchBuilder

The fetchBuilder function builds a version of fetch that can authenticates with the camera using either Basic access authentication or Digest access authentication, depending on the camera configuration.

type Fetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
type DeviceFetch = (input: DeviceRequest, init?: RequestInit) => Promise<Response>;

const fetchBuilder = (fetch: Fetch): DeviceFetch

Package Sidebar

Install

npm i axis-core

Weekly Downloads

156

Version

3.0.1

License

Apache-2.0

Unpacked Size

32.6 kB

Total Files

23

Last publish

Collaborators

  • fantasticfiasco