matterbridge
Version:
Matterbridge plugin manager for Matter
205 lines • 8.14 kB
TypeScript
/**
* @description This file contains the class Coap.
* @file src/dgram/coap.ts
* @author Luca Liguori
* @created 2025-03-22
* @version 1.0.0
* @license Apache-2.0
*
* Copyright 2025, 2026, 2027 Luca Liguori.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import dgram from 'node:dgram';
import { Multicast } from './multicast.js';
/**
* Represents a CoAP message.
*
* A CoAP message is structured with a fixed header, an optional token, a series of options,
* and an optional payload. The header consists of version, type, token length, code, and message ID.
* The token is used to match responses with requests, options provide additional metadata, and
* the payload carries the message content.
*/
export interface CoapMessage {
/**
* The CoAP protocol version.
* Typically, this is 1.
* (Stored in the top 2 bits of the first header byte.)
*/
version: number;
/**
* The message type.
* It indicates whether the message is Confirmable, Non-confirmable, Acknowledgement, or Reset.
* (Stored in bits 5-4 of the first header byte.)
* 0: Confirmable (CON)
* 1: Non-confirmable (NON)
* 2: Acknowledgement (ACK)
* 3: Reset (RST)
*/
type: number;
/**
* The token length.
* This value (0-8) specifies the length of the token field.
* (Stored in the lower 4 bits of the first header byte.)
*/
tokenLength: number;
/**
* The message code.
* It indicates the method or response code, e.g., GET, POST, or a success/error response.
* (Stored in the second header byte.)
* CoAP uses an 8‑bit Code field divided into a 3‑bit class and a 5‑bit detail. The code can be represented as X.XX (e.g. 0.01) and is defined in RFC 7252. Here are the standard CoAP codes:
* Request Codes (Class 0)
* 0.01 – 1-GET
* Retrieve a resource.
* 0.02 – 2-POST
* Create a resource or trigger an action.
* 0.03 – 3-PUT
* Update or create a resource.
* 0.04 – 4-DELETE
* Remove a resource.
* Success Response Codes (Class 2)
* 2.00 – Empty / Success
* Indicates an empty message or a successful request with no payload.
* 2.01 – Created
* The request resulted in a new resource being created.
* 2.02 – Deleted
* The resource was successfully deleted.
* 2.03 – Valid
* The response indicates that the resource is still valid (used with caching).
* 2.04 – Changed
* The resource was successfully modified.
* 2.05 – Content
* The response contains the requested content.
* Client Error Response Codes (Class 4)
* 4.00 – Bad Request
* The request was malformed.
* 4.01 – Unauthorized
* The request requires authentication.
* 4.02 – Bad Option
* An option in the request was not understood or is unacceptable.
* 4.03 – Forbidden
* The server refuses to fulfill the request.
* 4.04 – Not Found
* The requested resource was not found.
* 4.05 – Method Not Allowed
* The request method is not supported for the target resource.
* 4.06 – Not Acceptable
* The server cannot generate a response matching the list of acceptable values.
* 4.12 – Precondition Failed
* A precondition given in the request evaluated to false.
* 4.13 – Request Entity Too Large
* The request payload is too large.
* 4.15 – Unsupported Content-Format
* The server does not support the content format of the request payload.
* Server Error Response Codes (Class 5)
* 5.00 – Internal Server Error
* The server encountered an unexpected condition.
* 5.01 – Not Implemented
* The server does not support the requested method.
* 5.02 – Bad Gateway
* The server, while acting as a gateway or proxy, received an invalid response.
* 5.03 – Service Unavailable
* The server is currently unable to handle the request.
* 5.04 – Gateway Timeout
* The server did not receive a timely response from an upstream server.
* 5.05 – Proxying Not Supported
* The server does not support proxying for the requested resource.
*/
code: number;
/**
* The message identifier.
* This 16-bit field is used to match messages of type Acknowledgement/Reset with their corresponding requests.
* (Stored in bytes 2-3 of the header.)
*/
messageId: number;
/**
* The token.
* A variable-length sequence (0-8 bytes) that helps match a request with its response.
*/
token: Buffer;
/**
* An array of options.
* Options carry additional information such as URI path, content format, etc., and are encoded using a delta mechanism.
*/
options: CoapOption[];
/**
* The payload.
* The actual content of the message, if present. It follows a payload marker (0xFF) if non-empty.
*/
payload?: Buffer;
}
interface CoapOption {
number: number;
value: Buffer;
}
export declare const COAP_OPTION_URI_PATH = 11;
export declare const COIOT_OPTION_DEVID = 3332;
export declare const COIOT_OPTION_VALIDITY = 3412;
export declare const COIOT_OPTION_SERIAL = 3420;
export declare const COIOT_REQUEST_STATUS_ID = 56831;
export declare const COIOT_REQUEST_DESCRIPTION_ID = 56832;
export declare class Coap extends Multicast {
constructor(name: string, multicastAddress: string, multicastPort: number, socketType: 'udp4' | 'udp6', reuseAddr?: boolean | undefined, interfaceName?: string, interfaceAddress?: string);
onCoapMessage(message: CoapMessage, rinfo: dgram.RemoteInfo): void;
onMessage(msg: Buffer, rinfo: dgram.RemoteInfo): void;
/**
* Decodes a CoAP message from a Buffer.
*
* @param {Buffer} msg - The Buffer containing the raw CoAP message.
* @returns {CoapMessage} A parsed CoAP message object.
* @throws Error if the message is malformed.
*/
decodeCoapMessage(msg: Buffer): CoapMessage;
/**
* Encodes a CoAP message into a Buffer.
*
* @param {CoapMessage} msg - The CoAP message to encode.
* @returns {Buffer} A Buffer representing the encoded CoAP message.
* @throws Error if the message is malformed.
*/
encodeCoapMessage(msg: CoapMessage): Buffer;
/**
* Converts a CoAP message type numeric value to its string representation.
*
* CoAP message types are:
* - 0: Confirmable (CON)
* - 1: Non-confirmable (NON)
* - 2: Acknowledgement (ACK)
* - 3: Reset (RST)
*
* @param {number} type - The numeric CoAP message type.
* @returns {string} The string representation of the message type.
*/
coapTypeToString(type: number): string;
/**
* Converts a CoAP code numeric value to its string representation.
*
* The CoAP code is split into a 3-bit class and a 5-bit detail.
* For example:
* - 0.01: GET
* - 0.02: POST
* - 0.03: PUT
* - 0.04: DELETE
* - 2.05: Content (success response)
* - 4.04: Not Found (client error)
* - 5.00: Internal Server Error (server error)
*
* @param {number} code - The numeric CoAP code.
* @returns {string} The string representation of the code.
*/
coapCodeToString(code: number): string;
sendRequest(messageId: number, options: CoapOption[], payload: Record<string, any> | undefined, token: string | undefined, address: string | undefined, port: number | undefined): void;
logCoapMessage(msg: CoapMessage): void;
}
export {};
//# sourceMappingURL=coap.d.ts.map