3.0.1 • Published 4 months ago
axis-core v3.0.1
axis-core
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
3.0.1
4 months ago
3.0.0
4 months ago
3.0.0-beta.1
4 months ago
2.0.0
5 months ago
2.0.0-beta.9
5 months ago
2.0.0-beta.8
5 months ago
2.0.0-beta.2
5 months ago
2.0.0-beta.1
5 months ago
2.0.0-beta.6
5 months ago
2.0.0-beta.5
5 months ago
2.0.0-beta.4
5 months ago
2.0.0-beta.3
5 months ago
1.0.1
2 years ago
1.0.0
3 years ago
0.0.12
3 years ago
0.0.11
3 years ago
0.0.10
3 years ago