This is the full developer documentation for meshcore-ts
# meshcore-ts
> A MeshCore companion TypeScript library for Node.js.
Node only
We use `node:buffer` and `node:crypto` which means this library doesn’t work in the browser.
## Install
[Section titled “Install”](#install)
```sh
pnpm add @andyshinn/meshcore-ts
```
Stateful session, injected ports
Construct a `MeshCoreSession` with an injected `Transport` (and optional `Logger`). The session owns a typed event emitter and in-memory session state; it never writes to disk.
You own persistence
Subscribe to events (`contacts`, `messages`, `owner`, …) and store them however you want. On reconnect the session re-syncs from the radio.
Zero runtime dependencies
Only `node:buffer` / `node:crypto`. BLE/serial drivers stay your responsibility behind the `Transport` port.
Multi-instance safe
No module-level singletons — every session keeps its own state, so you can run several concurrently in one process.
## Docs for LLMs
[Section titled “Docs for LLMs”](#docs-for-llms)
This site publishes [`llms.txt`](llms.txt) files following the [llms.txt convention](https://llmstxt.org/) so AI assistants and coding tools can ingest the documentation directly:
* [`llms.txt`](llms.txt) — index and overview, linking to the full sets
* [`llms-full.txt`](llms-full.txt) — the complete documentation in one file
* [`llms-small.txt`](llms-small.txt) — a compact version for smaller context windows
# ContactTableFullError
Defined in: [src/model/errors.ts:15](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L15)
Thrown when CMD\_ADD\_UPDATE\_CONTACT is rejected with ERR\_CODE\_TABLE\_FULL — the radio’s on-device contact store is full (overwrite-oldest off, or every slot is a favourite). Maps to HTTP 409. The message is user-facing.
## Extends
[Section titled “Extends”](#extends)
* `Error`
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new ContactTableFullError(): ContactTableFullError;
```
Defined in: [src/model/errors.ts:16](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L16)
#### Returns
[Section titled “Returns”](#returns)
`ContactTableFullError`
#### Overrides
[Section titled “Overrides”](#overrides)
```ts
Error.constructor
```
## Properties
[Section titled “Properties”](#properties)
### cause?
[Section titled “cause?”](#cause)
```ts
optional cause?: unknown;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:24
#### Inherited from
[Section titled “Inherited from”](#inherited-from)
```ts
Error.cause
```
***
### message
[Section titled “message”](#message)
```ts
message: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1075
#### Inherited from
[Section titled “Inherited from”](#inherited-from-1)
```ts
Error.message
```
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1074
#### Inherited from
[Section titled “Inherited from”](#inherited-from-2)
```ts
Error.name
```
***
### stack?
[Section titled “stack?”](#stack)
```ts
optional stack?: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1076
#### Inherited from
[Section titled “Inherited from”](#inherited-from-3)
```ts
Error.stack
```
***
### stackTraceLimit
[Section titled “stackTraceLimit”](#stacktracelimit)
```ts
static stackTraceLimit: number;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:67
The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`).
The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed.
If set to a non-number value, or set to a negative number, stack traces will not capture any frames.
#### Inherited from
[Section titled “Inherited from”](#inherited-from-4)
```ts
Error.stackTraceLimit
```
## Methods
[Section titled “Methods”](#methods)
### captureStackTrace()
[Section titled “captureStackTrace()”](#capturestacktrace)
```ts
static captureStackTrace(targetObject, constructorOpt?): void;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:51
Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called.
```js
const myObject = {};
Error.captureStackTrace(myObject);
myObject.stack; // Similar to `new Error().stack`
```
The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`.
The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace.
The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance:
```js
function a() {
b();
}
function b() {
c();
}
function c() {
// Create an error without stack trace to avoid calculating the stack trace twice.
const { stackTraceLimit } = Error;
Error.stackTraceLimit = 0;
const error = new Error();
Error.stackTraceLimit = stackTraceLimit;
// Capture the stack trace above function b
Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
throw error;
}
a();
```
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ----------------- | ---------- |
| `targetObject` | `object` |
| `constructorOpt?` | `Function` |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
#### Inherited from
[Section titled “Inherited from”](#inherited-from-5)
```ts
Error.captureStackTrace
```
***
### prepareStackTrace()
[Section titled “prepareStackTrace()”](#preparestacktrace)
```ts
static prepareStackTrace(err, stackTraces): any;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:55
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| ------------- | ------------- |
| `err` | `Error` |
| `stackTraces` | `CallSite`\[] |
#### Returns
[Section titled “Returns”](#returns-2)
`any`
#### See
[Section titled “See”](#see)
#### Inherited from
[Section titled “Inherited from”](#inherited-from-6)
```ts
Error.prepareStackTrace
```
# FeatureDisabledError
Defined in: [src/model/errors.ts:37](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L37)
Thrown when a build-flag-gated command (e.g. private-key export/import) is answered with RESP\_DISABLED on this firmware build.
## Extends
[Section titled “Extends”](#extends)
* `Error`
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new FeatureDisabledError(): FeatureDisabledError;
```
Defined in: [src/model/errors.ts:38](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L38)
#### Returns
[Section titled “Returns”](#returns)
`FeatureDisabledError`
#### Overrides
[Section titled “Overrides”](#overrides)
```ts
Error.constructor
```
## Properties
[Section titled “Properties”](#properties)
### cause?
[Section titled “cause?”](#cause)
```ts
optional cause?: unknown;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:24
#### Inherited from
[Section titled “Inherited from”](#inherited-from)
```ts
Error.cause
```
***
### message
[Section titled “message”](#message)
```ts
message: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1075
#### Inherited from
[Section titled “Inherited from”](#inherited-from-1)
```ts
Error.message
```
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1074
#### Inherited from
[Section titled “Inherited from”](#inherited-from-2)
```ts
Error.name
```
***
### stack?
[Section titled “stack?”](#stack)
```ts
optional stack?: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1076
#### Inherited from
[Section titled “Inherited from”](#inherited-from-3)
```ts
Error.stack
```
***
### stackTraceLimit
[Section titled “stackTraceLimit”](#stacktracelimit)
```ts
static stackTraceLimit: number;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:67
The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`).
The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed.
If set to a non-number value, or set to a negative number, stack traces will not capture any frames.
#### Inherited from
[Section titled “Inherited from”](#inherited-from-4)
```ts
Error.stackTraceLimit
```
## Methods
[Section titled “Methods”](#methods)
### captureStackTrace()
[Section titled “captureStackTrace()”](#capturestacktrace)
```ts
static captureStackTrace(targetObject, constructorOpt?): void;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:51
Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called.
```js
const myObject = {};
Error.captureStackTrace(myObject);
myObject.stack; // Similar to `new Error().stack`
```
The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`.
The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace.
The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance:
```js
function a() {
b();
}
function b() {
c();
}
function c() {
// Create an error without stack trace to avoid calculating the stack trace twice.
const { stackTraceLimit } = Error;
Error.stackTraceLimit = 0;
const error = new Error();
Error.stackTraceLimit = stackTraceLimit;
// Capture the stack trace above function b
Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
throw error;
}
a();
```
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ----------------- | ---------- |
| `targetObject` | `object` |
| `constructorOpt?` | `Function` |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
#### Inherited from
[Section titled “Inherited from”](#inherited-from-5)
```ts
Error.captureStackTrace
```
***
### prepareStackTrace()
[Section titled “prepareStackTrace()”](#preparestacktrace)
```ts
static prepareStackTrace(err, stackTraces): any;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:55
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| ------------- | ------------- |
| `err` | `Error` |
| `stackTraces` | `CallSite`\[] |
#### Returns
[Section titled “Returns”](#returns-2)
`any`
#### See
[Section titled “See”](#see)
#### Inherited from
[Section titled “Inherited from”](#inherited-from-6)
```ts
Error.prepareStackTrace
```
# ProtocolError
Defined in: [src/model/errors.ts:24](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L24)
Thrown when a companion command is answered with RESP\_ERR. `errorCode` is the firmware error byte (ERR\_CODE\_\*); undefined on a bare RESP\_ERR.
## Extends
[Section titled “Extends”](#extends)
* `Error`
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new ProtocolError(errorCode?): ProtocolError;
```
Defined in: [src/model/errors.ts:25](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L25)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------ | -------- |
| `errorCode?` | `number` |
#### Returns
[Section titled “Returns”](#returns)
`ProtocolError`
#### Overrides
[Section titled “Overrides”](#overrides)
```ts
Error.constructor
```
## Properties
[Section titled “Properties”](#properties)
### cause?
[Section titled “cause?”](#cause)
```ts
optional cause?: unknown;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:24
#### Inherited from
[Section titled “Inherited from”](#inherited-from)
```ts
Error.cause
```
***
### errorCode?
[Section titled “errorCode?”](#errorcode)
```ts
readonly optional errorCode?: number;
```
Defined in: [src/model/errors.ts:25](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L25)
***
### message
[Section titled “message”](#message)
```ts
message: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1075
#### Inherited from
[Section titled “Inherited from”](#inherited-from-1)
```ts
Error.message
```
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1074
#### Inherited from
[Section titled “Inherited from”](#inherited-from-2)
```ts
Error.name
```
***
### stack?
[Section titled “stack?”](#stack)
```ts
optional stack?: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1076
#### Inherited from
[Section titled “Inherited from”](#inherited-from-3)
```ts
Error.stack
```
***
### stackTraceLimit
[Section titled “stackTraceLimit”](#stacktracelimit)
```ts
static stackTraceLimit: number;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:67
The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`).
The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed.
If set to a non-number value, or set to a negative number, stack traces will not capture any frames.
#### Inherited from
[Section titled “Inherited from”](#inherited-from-4)
```ts
Error.stackTraceLimit
```
## Methods
[Section titled “Methods”](#methods)
### captureStackTrace()
[Section titled “captureStackTrace()”](#capturestacktrace)
```ts
static captureStackTrace(targetObject, constructorOpt?): void;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:51
Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called.
```js
const myObject = {};
Error.captureStackTrace(myObject);
myObject.stack; // Similar to `new Error().stack`
```
The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`.
The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace.
The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance:
```js
function a() {
b();
}
function b() {
c();
}
function c() {
// Create an error without stack trace to avoid calculating the stack trace twice.
const { stackTraceLimit } = Error;
Error.stackTraceLimit = 0;
const error = new Error();
Error.stackTraceLimit = stackTraceLimit;
// Capture the stack trace above function b
Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
throw error;
}
a();
```
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| ----------------- | ---------- |
| `targetObject` | `object` |
| `constructorOpt?` | `Function` |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
#### Inherited from
[Section titled “Inherited from”](#inherited-from-5)
```ts
Error.captureStackTrace
```
***
### prepareStackTrace()
[Section titled “prepareStackTrace()”](#preparestacktrace)
```ts
static prepareStackTrace(err, stackTraces): any;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:55
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| ------------- | ------------- |
| `err` | `Error` |
| `stackTraces` | `CallSite`\[] |
#### Returns
[Section titled “Returns”](#returns-2)
`any`
#### See
[Section titled “See”](#see)
#### Inherited from
[Section titled “Inherited from”](#inherited-from-6)
```ts
Error.prepareStackTrace
```
# ProtocolTimeoutError
Defined in: [src/model/errors.ts:45](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L45)
Thrown when a companion request times out waiting for its expected reply.
## Extends
[Section titled “Extends”](#extends)
* `Error`
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new ProtocolTimeoutError(expectedCode): ProtocolTimeoutError;
```
Defined in: [src/model/errors.ts:46](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L46)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| -------------- | -------- |
| `expectedCode` | `number` |
#### Returns
[Section titled “Returns”](#returns)
`ProtocolTimeoutError`
#### Overrides
[Section titled “Overrides”](#overrides)
```ts
Error.constructor
```
## Properties
[Section titled “Properties”](#properties)
### cause?
[Section titled “cause?”](#cause)
```ts
optional cause?: unknown;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:24
#### Inherited from
[Section titled “Inherited from”](#inherited-from)
```ts
Error.cause
```
***
### expectedCode
[Section titled “expectedCode”](#expectedcode)
```ts
readonly expectedCode: number;
```
Defined in: [src/model/errors.ts:46](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L46)
***
### message
[Section titled “message”](#message)
```ts
message: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1075
#### Inherited from
[Section titled “Inherited from”](#inherited-from-1)
```ts
Error.message
```
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1074
#### Inherited from
[Section titled “Inherited from”](#inherited-from-2)
```ts
Error.name
```
***
### stack?
[Section titled “stack?”](#stack)
```ts
optional stack?: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1076
#### Inherited from
[Section titled “Inherited from”](#inherited-from-3)
```ts
Error.stack
```
***
### stackTraceLimit
[Section titled “stackTraceLimit”](#stacktracelimit)
```ts
static stackTraceLimit: number;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:67
The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`).
The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed.
If set to a non-number value, or set to a negative number, stack traces will not capture any frames.
#### Inherited from
[Section titled “Inherited from”](#inherited-from-4)
```ts
Error.stackTraceLimit
```
## Methods
[Section titled “Methods”](#methods)
### captureStackTrace()
[Section titled “captureStackTrace()”](#capturestacktrace)
```ts
static captureStackTrace(targetObject, constructorOpt?): void;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:51
Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called.
```js
const myObject = {};
Error.captureStackTrace(myObject);
myObject.stack; // Similar to `new Error().stack`
```
The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`.
The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace.
The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance:
```js
function a() {
b();
}
function b() {
c();
}
function c() {
// Create an error without stack trace to avoid calculating the stack trace twice.
const { stackTraceLimit } = Error;
Error.stackTraceLimit = 0;
const error = new Error();
Error.stackTraceLimit = stackTraceLimit;
// Capture the stack trace above function b
Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
throw error;
}
a();
```
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| ----------------- | ---------- |
| `targetObject` | `object` |
| `constructorOpt?` | `Function` |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
#### Inherited from
[Section titled “Inherited from”](#inherited-from-5)
```ts
Error.captureStackTrace
```
***
### prepareStackTrace()
[Section titled “prepareStackTrace()”](#preparestacktrace)
```ts
static prepareStackTrace(err, stackTraces): any;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:55
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| ------------- | ------------- |
| `err` | `Error` |
| `stackTraces` | `CallSite`\[] |
#### Returns
[Section titled “Returns”](#returns-2)
`any`
#### See
[Section titled “See”](#see)
#### Inherited from
[Section titled “Inherited from”](#inherited-from-6)
```ts
Error.prepareStackTrace
```
# UnknownContactError
Defined in: [src/model/errors.ts:5](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L5)
Thrown when a contact operation references a public key that isn’t in the discovered pool, so it can’t be added to the radio or favourited. Maps to HTTP 422 (request well-formed, but the referenced contact can’t be acted on) rather than a 503 device error.
## Extends
[Section titled “Extends”](#extends)
* `Error`
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new UnknownContactError(publicKeyHex): UnknownContactError;
```
Defined in: [src/model/errors.ts:6](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L6)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| -------------- | -------- |
| `publicKeyHex` | `string` |
#### Returns
[Section titled “Returns”](#returns)
`UnknownContactError`
#### Overrides
[Section titled “Overrides”](#overrides)
```ts
Error.constructor
```
## Properties
[Section titled “Properties”](#properties)
### cause?
[Section titled “cause?”](#cause)
```ts
optional cause?: unknown;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es2022.error.d.ts:24
#### Inherited from
[Section titled “Inherited from”](#inherited-from)
```ts
Error.cause
```
***
### message
[Section titled “message”](#message)
```ts
message: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1075
#### Inherited from
[Section titled “Inherited from”](#inherited-from-1)
```ts
Error.message
```
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1074
#### Inherited from
[Section titled “Inherited from”](#inherited-from-2)
```ts
Error.name
```
***
### publicKeyHex
[Section titled “publicKeyHex”](#publickeyhex)
```ts
readonly publicKeyHex: string;
```
Defined in: [src/model/errors.ts:6](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/errors.ts#L6)
***
### stack?
[Section titled “stack?”](#stack)
```ts
optional stack?: string;
```
Defined in: node\_modules/.pnpm/typescript\@6.0.3/node\_modules/typescript/lib/lib.es5.d.ts:1076
#### Inherited from
[Section titled “Inherited from”](#inherited-from-3)
```ts
Error.stack
```
***
### stackTraceLimit
[Section titled “stackTraceLimit”](#stacktracelimit)
```ts
static stackTraceLimit: number;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:67
The `Error.stackTraceLimit` property specifies the number of stack frames collected by a stack trace (whether generated by `new Error().stack` or `Error.captureStackTrace(obj)`).
The default value is `10` but may be set to any valid JavaScript number. Changes will affect any stack trace captured *after* the value has been changed.
If set to a non-number value, or set to a negative number, stack traces will not capture any frames.
#### Inherited from
[Section titled “Inherited from”](#inherited-from-4)
```ts
Error.stackTraceLimit
```
## Methods
[Section titled “Methods”](#methods)
### captureStackTrace()
[Section titled “captureStackTrace()”](#capturestacktrace)
```ts
static captureStackTrace(targetObject, constructorOpt?): void;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:51
Creates a `.stack` property on `targetObject`, which when accessed returns a string representing the location in the code at which `Error.captureStackTrace()` was called.
```js
const myObject = {};
Error.captureStackTrace(myObject);
myObject.stack; // Similar to `new Error().stack`
```
The first line of the trace will be prefixed with `${myObject.name}: ${myObject.message}`.
The optional `constructorOpt` argument accepts a function. If given, all frames above `constructorOpt`, including `constructorOpt`, will be omitted from the generated stack trace.
The `constructorOpt` argument is useful for hiding implementation details of error generation from the user. For instance:
```js
function a() {
b();
}
function b() {
c();
}
function c() {
// Create an error without stack trace to avoid calculating the stack trace twice.
const { stackTraceLimit } = Error;
Error.stackTraceLimit = 0;
const error = new Error();
Error.stackTraceLimit = stackTraceLimit;
// Capture the stack trace above function b
Error.captureStackTrace(error, b); // Neither function c, nor b is included in the stack trace
throw error;
}
a();
```
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| ----------------- | ---------- |
| `targetObject` | `object` |
| `constructorOpt?` | `Function` |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
#### Inherited from
[Section titled “Inherited from”](#inherited-from-5)
```ts
Error.captureStackTrace
```
***
### prepareStackTrace()
[Section titled “prepareStackTrace()”](#preparestacktrace)
```ts
static prepareStackTrace(err, stackTraces): any;
```
Defined in: node\_modules/.pnpm/@types+node\@25.9.3/node\_modules/@types/node/globals.d.ts:55
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| ------------- | ------------- |
| `err` | `Error` |
| `stackTraces` | `CallSite`\[] |
#### Returns
[Section titled “Returns”](#returns-2)
`any`
#### See
[Section titled “See”](#see)
#### Inherited from
[Section titled “Inherited from”](#inherited-from-6)
```ts
Error.prepareStackTrace
```
# AdvertPath
Defined in: [src/features/pathDiagnostics.ts:40](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L40)
The device’s cached advert path for a contact.
## Properties
[Section titled “Properties”](#properties)
### hops
[Section titled “hops”](#hops)
```ts
hops: number;
```
Defined in: [src/features/pathDiagnostics.ts:42](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L42)
***
### pathHex
[Section titled “pathHex”](#pathhex)
```ts
pathHex: string;
```
Defined in: [src/features/pathDiagnostics.ts:43](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L43)
***
### recvTimestampUnix
[Section titled “recvTimestampUnix”](#recvtimestampunix)
```ts
recvTimestampUnix: number;
```
Defined in: [src/features/pathDiagnostics.ts:41](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L41)
# AutoAddFlagsInput
Defined in: [src/features/autoAdd.ts:6](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/autoAdd.ts#L6)
## Properties
[Section titled “Properties”](#properties)
### chat
[Section titled “chat”](#chat)
```ts
chat: boolean;
```
Defined in: [src/features/autoAdd.ts:7](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/autoAdd.ts#L7)
***
### overwriteOldest
[Section titled “overwriteOldest”](#overwriteoldest)
```ts
overwriteOldest: boolean;
```
Defined in: [src/features/autoAdd.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/autoAdd.ts#L11)
***
### radioMaxHops?
[Section titled “radioMaxHops?”](#radiomaxhops)
```ts
optional radioMaxHops?: number;
```
Defined in: [src/features/autoAdd.ts:15](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/autoAdd.ts#L15)
Radio-side autoadd\_max\_hops byte. When provided, a 3-byte SET payload is emitted so the radio updates its stored value; when omitted the 2-byte payload is used and the radio preserves its stored value.
***
### repeater
[Section titled “repeater”](#repeater)
```ts
repeater: boolean;
```
Defined in: [src/features/autoAdd.ts:8](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/autoAdd.ts#L8)
***
### room
[Section titled “room”](#room)
```ts
room: boolean;
```
Defined in: [src/features/autoAdd.ts:9](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/autoAdd.ts#L9)
***
### sensor
[Section titled “sensor”](#sensor)
```ts
sensor: boolean;
```
Defined in: [src/features/autoAdd.ts:10](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/autoAdd.ts#L10)
# DefaultFloodScope
Defined in: [src/features/floodScope.ts:10](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/floodScope.ts#L10)
## Properties
[Section titled “Properties”](#properties)
### keyHex
[Section titled “keyHex”](#keyhex)
```ts
keyHex: string;
```
Defined in: [src/features/floodScope.ts:12](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/floodScope.ts#L12)
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/features/floodScope.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/floodScope.ts#L11)
# DiscoveredPath
Defined in: [src/features/pathDiagnostics.ts:47](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L47)
The round-trip path discovered by a path-discovery request.
## Properties
[Section titled “Properties”](#properties)
### inHops
[Section titled “inHops”](#inhops)
```ts
inHops: number;
```
Defined in: [src/features/pathDiagnostics.ts:51](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L51)
***
### inPathHex
[Section titled “inPathHex”](#inpathhex)
```ts
inPathHex: string;
```
Defined in: [src/features/pathDiagnostics.ts:52](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L52)
***
### outHops
[Section titled “outHops”](#outhops)
```ts
outHops: number;
```
Defined in: [src/features/pathDiagnostics.ts:49](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L49)
***
### outPathHex
[Section titled “outPathHex”](#outpathhex)
```ts
outPathHex: string;
```
Defined in: [src/features/pathDiagnostics.ts:50](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L50)
***
### pubKeyPrefixHex
[Section titled “pubKeyPrefixHex”](#pubkeyprefixhex)
```ts
pubKeyPrefixHex: string;
```
Defined in: [src/features/pathDiagnostics.ts:48](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/pathDiagnostics.ts#L48)
# Feature
Defined in: [src/features/feature.ts:58](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L58)
A protocol feature: owns the inbound wire codes it reacts to. Feature modules also export their own encode\* / decode\* functions and session-facing functions; those are wired explicitly by the session.
## Properties
[Section titled “Properties”](#properties)
### handles
[Section titled “handles”](#handles)
```ts
readonly handles: readonly number[];
```
Defined in: [src/features/feature.ts:60](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L60)
Inbound RESP\_\* / PUSH\_\* codes this feature decodes & reacts to.
## Methods
[Section titled “Methods”](#methods)
### handle()
[Section titled “handle()”](#handle)
```ts
handle(
code,
frame,
ctx): void;
```
Defined in: [src/features/feature.ts:62](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L62)
React to an inbound frame whose code is one of `handles`.
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------- |
| `code` | `number` |
| `frame` | `Buffer` |
| `ctx` | [`FeatureContext`](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/featurecontext/) |
#### Returns
[Section titled “Returns”](#returns)
`void`
# FeatureContext
Defined in: [src/features/feature.ts:23](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L23)
The controlled slice of a session a feature module may touch. Every shared capability is injected here per-session — the transport-facing helpers, the ports (events, log, admin) and model (state), plus the per-session mutable feature state in `rt`. Nothing is reached via module-level singletons.
## Properties
[Section titled “Properties”](#properties)
### admin
[Section titled “admin”](#admin)
```ts
readonly admin: AdminSessionStore;
```
Defined in: [src/features/feature.ts:44](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L44)
Repeater admin auth + pending-request store (was `adminSessions`).
***
### events
[Section titled “events”](#events)
```ts
readonly events: Events;
```
Defined in: [src/features/feature.ts:38](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L38)
Event bus the feature broadcasts on (was the module-level `emit`).
***
### log
[Section titled “log”](#log)
```ts
readonly log: Logger;
```
Defined in: [src/features/feature.ts:42](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L42)
Structured logger (was `child('protocol')`).
***
### rt
[Section titled “rt”](#rt)
```ts
readonly rt: SessionRuntime;
```
Defined in: [src/features/feature.ts:46](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L46)
Per-session mutable feature state (replaces module-level let/const).
***
### state
[Section titled “state”](#state)
```ts
readonly state: SessionState;
```
Defined in: [src/features/feature.ts:40](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L40)
In-memory session model the feature reads & mutates (was `stateHolder()`).
## Methods
[Section titled “Methods”](#methods)
### contactsSync()
[Section titled “contactsSync()”](#contactssync)
```ts
contactsSync(signal): void;
```
Defined in: [src/features/feature.ts:52](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L52)
INTERNAL contact-sync signal sink (was the module-level `emit.contactsSync`). The session implements this to drive the handshake’s syncProgress + start/done waiters; it is NOT a public event.
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------------------------------------------------------------------------------------------------- |
| `signal` | [`ContactsSyncSignal`](/meshcore-ts/api/andyshinn/namespaces/features/type-aliases/contactssyncsignal/) |
#### Returns
[Section titled “Returns”](#returns)
`void`
***
### getTransportState()
[Section titled “getTransportState()”](#gettransportstate)
```ts
getTransportState(): TransportState;
```
Defined in: [src/features/feature.ts:48](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L48)
Current transport connection state (replaces transportManager.getState()).
#### Returns
[Section titled “Returns”](#returns-1)
[`TransportState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/transportstate/)
***
### request()
[Section titled “request()”](#request)
```ts
request(frame, opts?): Promise>;
```
Defined in: [src/features/feature.ts:29](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L29)
Send a frame and await its reply. With `expect`, resolves the next inbound frame whose code === expect (a typed GET reply). Without `expect`, awaits the next RESP\_OK/RESP\_ERR and rejects with ProtocolError on RESP\_ERR.
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| ----------------- | ------------------------------------------------ |
| `frame` | `Buffer` |
| `opts?` | { `expect?`: `number`; `timeoutMs?`: `number`; } |
| `opts.expect?` | `number` |
| `opts.timeoutMs?` | `number` |
#### Returns
[Section titled “Returns”](#returns-2)
`Promise`<`Buffer`<`ArrayBufferLike`>>
***
### requestOrNull()
[Section titled “requestOrNull()”](#requestornull)
```ts
requestOrNull(
frame,
expect,
timeoutMs?): Promise | null>;
```
Defined in: [src/features/feature.ts:36](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L36)
Send a frame and await either its typed reply (code === expect) OR a RESP\_ERR — for GETs that legitimately answer “not found” (e.g. no cached advert path). Resolves the typed frame, or null on RESP\_ERR. The RESP\_ERR is consumed via the shared ack FIFO so it can’t be mistaken for a rejected DM send. Rejects on timeout / write failure / disconnect. `expect` must be a typed reply code, not RESP\_OK/RESP\_ERR.
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| ------------ | -------- |
| `frame` | `Buffer` |
| `expect` | `number` |
| `timeoutMs?` | `number` |
#### Returns
[Section titled “Returns”](#returns-3)
`Promise`<`Buffer`<`ArrayBufferLike`> | `null`>
***
### writeFrame()
[Section titled “writeFrame()”](#writeframe)
```ts
writeFrame(frame): Promise;
```
Defined in: [src/features/feature.ts:25](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L25)
Write a raw companion frame to the radio.
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
#### Returns
[Section titled “Returns”](#returns-4)
`Promise`<`void`>
# RepeatFreqRange
Defined in: [src/features/misc.ts:10](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/misc.ts#L10)
An inclusive frequency range the radio is permitted to repeat on. Values are in **kHz** (e.g. 433000 = 433 MHz, 869495 = 869.495 MHz, 918000 = 918 MHz).
## Properties
[Section titled “Properties”](#properties)
### lowerKhz
[Section titled “lowerKhz”](#lowerkhz)
```ts
lowerKhz: number;
```
Defined in: [src/features/misc.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/misc.ts#L11)
***
### upperKhz
[Section titled “upperKhz”](#upperkhz)
```ts
upperKhz: number;
```
Defined in: [src/features/misc.ts:12](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/misc.ts#L12)
# SelfInfo
Defined in: [src/features/selfInfo.ts:23](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L23)
## Properties
[Section titled “Properties”](#properties)
### advertLocPolicy
[Section titled “advertLocPolicy”](#advertlocpolicy)
```ts
advertLocPolicy: number;
```
Defined in: [src/features/selfInfo.ts:39](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L39)
Advertise location policy (frame\[45]).
***
### advType
[Section titled “advType”](#advtype)
```ts
advType: number;
```
Defined in: [src/features/selfInfo.ts:27](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L27)
Advertisement type byte (frame\[1]).
***
### bwHz
[Section titled “bwHz”](#bwhz)
```ts
bwHz: number;
```
Defined in: [src/features/selfInfo.ts:59](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L59)
Radio bandwidth in Hz (readUInt32LE(52)). The firmware sends prefs.bw \* 1000 so the wire value is already Hz (e.g. 250000 = 250 kHz).
***
### cr
[Section titled “cr”](#cr)
```ts
cr: number;
```
Defined in: [src/features/selfInfo.ts:63](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L63)
LoRa coding rate (frame\[57]).
***
### freqKhz
[Section titled “freqKhz”](#freqkhz)
```ts
freqKhz: number;
```
Defined in: [src/features/selfInfo.ts:53](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L53)
Radio frequency in kHz (readUInt32LE(48)). The firmware sends prefs.freq \* 1000 so the wire value is already kHz (e.g. 915000 = 915 MHz).
***
### latDeg
[Section titled “latDeg”](#latdeg)
```ts
latDeg: number;
```
Defined in: [src/features/selfInfo.ts:33](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L33)
Latitude in decimal degrees (readInt32LE(36) / 1\_000\_000).
***
### lonDeg
[Section titled “lonDeg”](#londeg)
```ts
lonDeg: number;
```
Defined in: [src/features/selfInfo.ts:35](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L35)
Longitude in decimal degrees (readInt32LE(40) / 1\_000\_000).
***
### manualAddContacts
[Section titled “manualAddContacts”](#manualaddcontacts)
```ts
manualAddContacts: number;
```
Defined in: [src/features/selfInfo.ts:47](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L47)
Manual add contacts flag (frame\[47]).
***
### maxTxPowerDbm
[Section titled “maxTxPowerDbm”](#maxtxpowerdbm)
```ts
maxTxPowerDbm: number;
```
Defined in: [src/features/selfInfo.ts:31](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L31)
Maximum LoRa TX power in dBm (frame\[3]).
***
### multiAcks
[Section titled “multiAcks”](#multiacks)
```ts
multiAcks: number;
```
Defined in: [src/features/selfInfo.ts:37](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L37)
Multi-ACK setting (frame\[44]).
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/features/selfInfo.ts:24](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L24)
***
### publicKeyHex
[Section titled “publicKeyHex”](#publickeyhex)
```ts
publicKeyHex: string;
```
Defined in: [src/features/selfInfo.ts:25](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L25)
***
### sf
[Section titled “sf”](#sf)
```ts
sf: number;
```
Defined in: [src/features/selfInfo.ts:61](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L61)
LoRa spreading factor (frame\[56]).
***
### telemetryModeBase
[Section titled “telemetryModeBase”](#telemetrymodebase)
```ts
telemetryModeBase: number;
```
Defined in: [src/features/selfInfo.ts:45](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L45)
Telemetry mode — base component, bits \[1:0] of frame\[46], 0..3.
***
### telemetryModeEnv
[Section titled “telemetryModeEnv”](#telemetrymodeenv)
```ts
telemetryModeEnv: number;
```
Defined in: [src/features/selfInfo.ts:41](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L41)
Telemetry mode — environment component, bits \[5:4] of frame\[46], 0..3.
***
### telemetryModeLoc
[Section titled “telemetryModeLoc”](#telemetrymodeloc)
```ts
telemetryModeLoc: number;
```
Defined in: [src/features/selfInfo.ts:43](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L43)
Telemetry mode — location component, bits \[3:2] of frame\[46], 0..3.
***
### txPowerDbm
[Section titled “txPowerDbm”](#txpowerdbm)
```ts
txPowerDbm: number;
```
Defined in: [src/features/selfInfo.ts:29](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/selfInfo.ts#L29)
TX power in dBm, signed (frame\[2]).
# TuningParams
Defined in: [src/features/tuning.ts:9](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/tuning.ts#L9)
## Properties
[Section titled “Properties”](#properties)
### airtimeFactor
[Section titled “airtimeFactor”](#airtimefactor)
```ts
airtimeFactor: number;
```
Defined in: [src/features/tuning.ts:13](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/tuning.ts#L13)
Airtime budget multiplier applied to flood forwarding.
***
### rxDelayBase
[Section titled “rxDelayBase”](#rxdelaybase)
```ts
rxDelayBase: number;
```
Defined in: [src/features/tuning.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/tuning.ts#L11)
Base of the rx-delay backoff curve. 0 disables the delay.
# AdminMode
```ts
type AdminMode = "local" | "remote";
```
Defined in: [src/features/adminSessions.ts:7](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/adminSessions.ts#L7)
# ContactsSyncSignal
```ts
type ContactsSyncSignal =
| {
phase: "start";
total: number | null;
}
| {
done: number;
phase: "progress";
total: number;
}
| {
done: number;
phase: "done";
};
```
Defined in: [src/features/feature.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/feature.ts#L14)
Contact-sync coordination signal emitted by the contacts feature while a GET\_CONTACTS iteration streams in. The session forwards it to the handshake’s progress + start/done waiters (see onContactsSync). This is an INTERNAL signal delivered via the [FeatureContext.contactsSync](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/featurecontext/#contactssync) callback — it is NOT a public event on [MeshCoreEvents](/meshcore-ts/api/andyshinn/namespaces/ports/classes/events/).
# FloodScopeInput
```ts
type FloodScopeInput =
| {
keyHex: string;
}
| {
clear: true;
}
| {
unscoped: true;
};
```
Defined in: [src/features/floodScope.ts:20](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/floodScope.ts#L20)
# RepeaterReachMode
```ts
type RepeaterReachMode = "direct" | "flood" | "path";
```
Defined in: [src/features/repeaterAdmin.ts:42](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/features/repeaterAdmin.ts#L42)
How a repeater login was actually dispatched, so the UI can label the toast: `'direct'` (companion-side CMD\_SEND\_LOGIN), `'path'` (mesh-routed over a known out-path) or `'flood'` (mesh-routed, no path).
# MeshObservations
Defined in: [src/model/meshObservations.ts:37](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L37)
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new MeshObservations(): MeshObservations;
```
#### Returns
[Section titled “Returns”](#returns)
`MeshObservations`
## Methods
[Section titled “Methods”](#methods)
### clear()
[Section titled “clear()”](#clear)
```ts
clear(): void;
```
Defined in: [src/model/meshObservations.ts:90](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L90)
#### Returns
[Section titled “Returns”](#returns-1)
`void`
***
### consumeMatching()
[Section titled “consumeMatching()”](#consumematching)
```ts
consumeMatching(channelHash, hashCount): MeshObservation[];
```
Defined in: [src/model/meshObservations.ts:59](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L59)
Return (and remove) every observation matching `channelHash` and `hashCount`. When multiple distinct messages match (different `payloadFingerprint`), only the freshest fingerprint’s group is returned — that’s the cluster that most likely produced the channel msg the caller just received.
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------- | -------- |
| `channelHash` | `number` |
| `hashCount` | `number` |
#### Returns
[Section titled “Returns”](#returns-2)
[`MeshObservation`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/meshobservation/)\[]
***
### record()
[Section titled “record()”](#record)
```ts
record(obs): void;
```
Defined in: [src/model/meshObservations.ts:49](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L49)
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------- |
| `obs` | [`MeshObservation`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/meshobservation/) |
#### Returns
[Section titled “Returns”](#returns-3)
`void`
***
### size()
[Section titled “size()”](#size)
```ts
size(): number;
```
Defined in: [src/model/meshObservations.ts:86](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L86)
#### Returns
[Section titled “Returns”](#returns-4)
`number`
# advTypeToKind
```ts
function advTypeToKind(type): ContactKind;
```
Defined in: [src/model/contacts.ts:50](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L50)
Map a MeshCore ADV\_TYPE byte (1 chat, 2 repeater, 3 room, 4 sensor) to the app’s ContactKind. Shared by the protocol contacts feature and the discovered-contact store so the mapping lives in exactly one place.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `type` | `number` |
## Returns
[Section titled “Returns”](#returns)
[`ContactKind`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/contactkind/)
# contactKindToAdvType
```ts
function contactKindToAdvType(kind): number;
```
Defined in: [src/model/contacts.ts:66](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L66)
Inverse of [advTypeToKind](/meshcore-ts/api/andyshinn/namespaces/models/functions/advtypetokind/): map a ContactKind to the MeshCore ADV\_TYPE byte used in CMD\_ADD\_UPDATE\_CONTACT. Kept beside advTypeToKind so the two stay in lockstep (values mirror ADV\_TYPE in protocol/codes).
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------- |
| `kind` | [`ContactKind`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/contactkind/) |
## Returns
[Section titled “Returns”](#returns)
`number`
# hashSizeFromOutPathLen
```ts
function hashSizeFromOutPathLen(outPathLen):
| PathHashSize
| undefined;
```
Defined in: [src/model/contacts.ts:43](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L43)
Bytes-per-hop for a contact’s stored path, derived from the same packed out\_path\_len byte (bits 7-6 + 1). Lets consumers split a learned out\_path into hops using the contact’s OWN hash size rather than assuming the radio’s current path-hash mode. 0xFF (OUT\_PATH\_UNKNOWN) → undefined (no path).
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------ | -------- |
| `outPathLen` | `number` |
## Returns
[Section titled “Returns”](#returns)
\| [`PathHashSize`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/pathhashsize/) | `undefined`
# hasValidFix
```ts
function hasValidFix(c): c is Contact & { gpsLat: number; gpsLon: number };
```
Defined in: [src/model/types.ts:108](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L108)
True iff the contact carries a usable WGS84 fix: both coords present, not the 0/0 “no GPS” sentinel, and within valid lat/lon ranges. Corrupt adverts can yield out-of-range coords — treat those as no fix.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------- |
| `c` | [`Contact`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/contact/) |
## Returns
[Section titled “Returns”](#returns)
`c is Contact & { gpsLat: number; gpsLon: number }`
# hopsFromOutPathLen
```ts
function hopsFromOutPathLen(outPathLen): number | undefined;
```
Defined in: [src/model/contacts.ts:35](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L35)
Hops away, derived from a contact’s stored out\_path\_len. This is the packed MeshCore path-length byte, NOT a raw byte count: bits 5-0 hold the hop count and bits 7-6 hold hashSize-1 (see firmware Packet::setPathHashSizeAndCount / getPathByteLen). The real path occupies hops × hashSize bytes. So a direct 2-byte-mode contact stores 0x40 (hop count 0, hashSize 2) — its hop count is 0, not 64. 0xFF (OUT\_PATH\_UNKNOWN) means no path established yet → flood.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------ | -------- |
| `outPathLen` | `number` |
## Returns
[Section titled “Returns”](#returns)
`number` | `undefined`
# AutoAddConfig
Defined in: [src/model/types.ts:228](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L228)
## Properties
[Section titled “Properties”](#properties)
### chat
[Section titled “chat”](#chat)
```ts
chat: boolean;
```
Defined in: [src/model/types.ts:230](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L230)
***
### maxHops
[Section titled “maxHops”](#maxhops)
```ts
maxHops: number | null;
```
Defined in: [src/model/types.ts:237](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L237)
App-side filter: drop adverts whose path has more hops than this. `null` = no limit. The radio doesn’t apply this; the companion does pre-upsert.
***
### mode
[Section titled “mode”](#mode)
```ts
mode: AutoAddMode;
```
Defined in: [src/model/types.ts:229](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L229)
***
### overwriteOldest
[Section titled “overwriteOldest”](#overwriteoldest)
```ts
overwriteOldest: boolean;
```
Defined in: [src/model/types.ts:234](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L234)
***
### radioMaxHops
[Section titled “radioMaxHops”](#radiomaxhops)
```ts
radioMaxHops: number;
```
Defined in: [src/model/types.ts:239](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L239)
Radio-side firmware autoadd\_max\_hops; 0 = no limit. Distinct from the app-side `maxHops` advert filter.
***
### repeater
[Section titled “repeater”](#repeater)
```ts
repeater: boolean;
```
Defined in: [src/model/types.ts:231](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L231)
***
### room
[Section titled “room”](#room)
```ts
room: boolean;
```
Defined in: [src/model/types.ts:232](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L232)
***
### sensor
[Section titled “sensor”](#sensor)
```ts
sensor: boolean;
```
Defined in: [src/model/types.ts:233](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L233)
# Channel
Defined in: [src/model/types.ts:53](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L53)
## Properties
[Section titled “Properties”](#properties)
### idx?
[Section titled “idx?”](#idx)
```ts
optional idx?: number;
```
Defined in: [src/model/types.ts:62](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L62)
Slot index on the radio (0..N). Set after the protocol session learns it via RESP\_CHANNEL\_INFO. Required for outbound CMD\_SEND\_CHAN\_TXT\_MSG and used to dispatch incoming RESP\_CHANNEL\_MSG\_RECV(\_V3) frames to the right channel.
***
### key
[Section titled “key”](#key)
```ts
key: string;
```
Defined in: [src/model/types.ts:54](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L54)
***
### kind
[Section titled “kind”](#kind)
```ts
kind: ChannelKind;
```
Defined in: [src/model/types.ts:56](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L56)
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/model/types.ts:55](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L55)
***
### secretHex?
[Section titled “secretHex?”](#secrethex)
```ts
optional secretHex?: string;
```
Defined in: [src/model/types.ts:57](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L57)
# Contact
Defined in: [src/model/types.ts:69](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L69)
## Properties
[Section titled “Properties”](#properties)
### favourite?
[Section titled “favourite?”](#favourite)
```ts
optional favourite?: boolean;
```
Defined in: [src/model/types.ts:80](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L80)
Radio-level favourite — maps to the firmware contact flag bit 0, which protects the contact from overwrite-oldest eviction.
***
### gpsLat?
[Section titled “gpsLat?”](#gpslat)
```ts
optional gpsLat?: number;
```
Defined in: [src/model/types.ts:101](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L101)
Last advertised position in WGS84 degrees. Both present together or both absent — a partial fix is never written. 0/0 from firmware is treated as absent (default for radios without a GPS module).
***
### gpsLon?
[Section titled “gpsLon?”](#gpslon)
```ts
optional gpsLon?: number;
```
Defined in: [src/model/types.ts:102](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L102)
***
### hops?
[Section titled “hops?”](#hops)
```ts
optional hops?: number;
```
Defined in: [src/model/types.ts:77](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L77)
***
### key
[Section titled “key”](#key)
```ts
key: string;
```
Defined in: [src/model/types.ts:70](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L70)
***
### kind
[Section titled “kind”](#kind)
```ts
kind: ContactKind;
```
Defined in: [src/model/types.ts:73](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L73)
***
### lastSeenMs?
[Section titled “lastSeenMs?”](#lastseenms)
```ts
optional lastSeenMs?: number;
```
Defined in: [src/model/types.ts:74](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L74)
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/model/types.ts:72](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L72)
***
### outPathHashSize?
[Section titled “outPathHashSize?”](#outpathhashsize)
```ts
optional outPathHashSize?: PathHashSize;
```
Defined in: [src/model/types.ts:88](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L88)
Bytes per hop prefix (1, 2 or 4). Snapshot of the radio’s `path.hash.mode` at the time the path was captured / written. Needed to split `outPathHex` into the per-hop chips.
***
### outPathHex?
[Section titled “outPathHex?”](#outpathhex)
```ts
optional outPathHex?: string;
```
Defined in: [src/model/types.ts:84](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L84)
Hex-encoded out-path bytes (no separators) mirroring the firmware’s advert.out\_path. Empty / undefined means “flood” (no source-route). The byte length must be a multiple of `outPathHashSize`.
***
### pathLearnedAt?
[Section titled “pathLearnedAt?”](#pathlearnedat)
```ts
optional pathLearnedAt?: number;
```
Defined in: [src/model/types.ts:97](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L97)
Wall-clock ms of the most recent auto-learn that wrote `outPathHex`.
***
### pathManual?
[Section titled “pathManual?”](#pathmanual)
```ts
optional pathManual?: boolean;
```
Defined in: [src/model/types.ts:95](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L95)
True iff the current `outPathHex` was set by hand (not learned by the auto-retry pipeline). Drives the “overwrite manual path?” dialog.
***
### preferDirect?
[Section titled “preferDirect?”](#preferdirect)
```ts
optional preferDirect?: boolean;
```
Defined in: [src/model/types.ts:92](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L92)
When true, mesh routing is skipped entirely and the companion-side direct flow is used for this contact (CMD\_SEND\_LOGIN for repeaters; direct DM otherwise). Takes precedence over `outPathHex`.
***
### publicKeyHex
[Section titled “publicKeyHex”](#publickeyhex)
```ts
publicKeyHex: string;
```
Defined in: [src/model/types.ts:71](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L71)
***
### rssi?
[Section titled “rssi?”](#rssi)
```ts
optional rssi?: number;
```
Defined in: [src/model/types.ts:75](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L75)
***
### snr?
[Section titled “snr?”](#snr)
```ts
optional snr?: number;
```
Defined in: [src/model/types.ts:76](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L76)
# ContactRecord
Defined in: [src/model/contactTypes.ts:5](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L5)
## Properties
[Section titled “Properties”](#properties)
### flags
[Section titled “flags”](#flags)
```ts
flags: number;
```
Defined in: [src/model/contactTypes.ts:8](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L8)
***
### gpsLat
[Section titled “gpsLat”](#gpslat)
```ts
gpsLat: number;
```
Defined in: [src/model/contactTypes.ts:13](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L13)
***
### gpsLon
[Section titled “gpsLon”](#gpslon)
```ts
gpsLon: number;
```
Defined in: [src/model/contactTypes.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L14)
***
### lastAdvertUnix
[Section titled “lastAdvertUnix”](#lastadvertunix)
```ts
lastAdvertUnix: number;
```
Defined in: [src/model/contactTypes.ts:12](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L12)
***
### lastmod
[Section titled “lastmod”](#lastmod)
```ts
lastmod: number;
```
Defined in: [src/model/contactTypes.ts:15](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L15)
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/model/contactTypes.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L11)
***
### outPathHex
[Section titled “outPathHex”](#outpathhex)
```ts
outPathHex: string;
```
Defined in: [src/model/contactTypes.ts:10](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L10)
***
### outPathLen
[Section titled “outPathLen”](#outpathlen)
```ts
outPathLen: number;
```
Defined in: [src/model/contactTypes.ts:9](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L9)
***
### publicKeyHex
[Section titled “publicKeyHex”](#publickeyhex)
```ts
publicKeyHex: string;
```
Defined in: [src/model/contactTypes.ts:6](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L6)
***
### type
[Section titled “type”](#type)
```ts
type: number;
```
Defined in: [src/model/contactTypes.ts:7](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L7)
# DeviceCapabilities
Defined in: [src/model/types.ts:315](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L315)
Per-tab “the device firmware doesn’t expose this over BLE” capability flags. Used to disable rows the official open-source protocol doesn’t define.
## Properties
[Section titled “Properties”](#properties)
### identityKeyIO
[Section titled “identityKeyIO”](#identitykeyio)
```ts
identityKeyIO: boolean;
```
Defined in: [src/model/types.ts:317](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L317)
Firmware version ≥ 1.7.0 — required for CLI-based private key export.
***
### repeatMode
[Section titled “repeatMode”](#repeatmode)
```ts
repeatMode: boolean;
```
Defined in: [src/model/types.ts:319](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L319)
Firmware ver\_code ≥ 9 — repeat mode and client\_repeat byte.
# DeviceIdentity
Defined in: [src/model/types.ts:208](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L208)
“Public info” the radio advertises about itself. Synced from RESP\_SELF\_INFO and mutated via CMD\_SET\_ADVERT\_NAME / CMD\_SET\_ADVERT\_LATLON / CMD\_SET\_OTHER\_PARAMS.advertLocationPolicy.
## Properties
[Section titled “Properties”](#properties)
### lat
[Section titled “lat”](#lat)
```ts
lat: number | null;
```
Defined in: [src/model/types.ts:211](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L211)
***
### lon
[Section titled “lon”](#lon)
```ts
lon: number | null;
```
Defined in: [src/model/types.ts:212](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L212)
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/model/types.ts:209](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L209)
***
### publicKeyHex
[Section titled “publicKeyHex”](#publickeyhex)
```ts
publicKeyHex: string;
```
Defined in: [src/model/types.ts:210](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L210)
***
### sharePositionInAdvert
[Section titled “sharePositionInAdvert”](#sharepositioninadvert)
```ts
sharePositionInAdvert: boolean;
```
Defined in: [src/model/types.ts:213](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L213)
# DeviceInfo
Defined in: [src/model/types.ts:281](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L281)
Aggregate read-only device info. firmwareVerCode 0 means “unknown/no device connected” — consumers use that to gate firmware-version features (identity key export needs ≥ 1.7.0, repeat mode needs ≥9, etc.).
## Properties
[Section titled “Properties”](#properties)
### batteryMv
[Section titled “batteryMv”](#batterymv)
```ts
batteryMv: number;
```
Defined in: [src/model/types.ts:296](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L296)
***
### blePin
[Section titled “blePin”](#blepin)
```ts
blePin: number;
```
Defined in: [src/model/types.ts:289](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L289)
Device BLE pairing PIN; 0 = unset / random per session.
***
### channelsUsed
[Section titled “channelsUsed”](#channelsused)
```ts
channelsUsed: number;
```
Defined in: [src/model/types.ts:292](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L292)
***
### contactsUsed
[Section titled “contactsUsed”](#contactsused)
```ts
contactsUsed: number;
```
Defined in: [src/model/types.ts:293](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L293)
***
### deviceModel
[Section titled “deviceModel”](#devicemodel)
```ts
deviceModel: string;
```
Defined in: [src/model/types.ts:283](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L283)
***
### firmwareBuildDate
[Section titled “firmwareBuildDate”](#firmwarebuilddate)
```ts
firmwareBuildDate: string;
```
Defined in: [src/model/types.ts:287](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L287)
Firmware build date string, e.g. “19 Apr 2026”.
***
### firmwareVerCode
[Section titled “firmwareVerCode”](#firmwarevercode)
```ts
firmwareVerCode: number;
```
Defined in: [src/model/types.ts:282](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L282)
***
### firmwareVersion
[Section titled “firmwareVersion”](#firmwareversion)
```ts
firmwareVersion: string;
```
Defined in: [src/model/types.ts:285](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L285)
Human-readable firmware version, e.g. “v1.15.0” (distinct from firmwareVerCode).
***
### maxChannels
[Section titled “maxChannels”](#maxchannels)
```ts
maxChannels: number;
```
Defined in: [src/model/types.ts:291](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L291)
***
### maxContacts
[Section titled “maxContacts”](#maxcontacts)
```ts
maxContacts: number;
```
Defined in: [src/model/types.ts:290](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L290)
***
### storageTotalKb
[Section titled “storageTotalKb”](#storagetotalkb)
```ts
storageTotalKb: number;
```
Defined in: [src/model/types.ts:295](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L295)
***
### storageUsedKb
[Section titled “storageUsedKb”](#storageusedkb)
```ts
storageUsedKb: number;
```
Defined in: [src/model/types.ts:294](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L294)
# DiscoveredContact
Defined in: [src/model/contacts.ts:5](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L5)
A node we’ve heard an advert from. Superset of the on-radio contact list: `onRadio` marks whether it is currently committed to the radio’s store.
## Properties
[Section titled “Properties”](#properties)
### favourite
[Section titled “favourite”](#favourite)
```ts
favourite: boolean;
```
Defined in: [src/model/contacts.ts:26](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L26)
***
### firstHeardMs
[Section titled “firstHeardMs”](#firstheardms)
```ts
firstHeardMs: number;
```
Defined in: [src/model/contacts.ts:24](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L24)
First time WE heard this pubkey (our clock), ms. Tracked app-side.
***
### gpsLat?
[Section titled “gpsLat?”](#gpslat)
```ts
optional gpsLat?: number;
```
Defined in: [src/model/contacts.ts:13](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L13)
***
### gpsLon?
[Section titled “gpsLon?”](#gpslon)
```ts
optional gpsLon?: number;
```
Defined in: [src/model/contacts.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L14)
***
### hops?
[Section titled “hops?”](#hops)
```ts
optional hops?: number;
```
Defined in: [src/model/contacts.ts:10](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L10)
***
### key
[Section titled “key”](#key)
```ts
key: string;
```
Defined in: [src/model/contacts.ts:6](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L6)
***
### kind
[Section titled “kind”](#kind)
```ts
kind: ContactKind;
```
Defined in: [src/model/contacts.ts:9](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L9)
***
### lastAdvertMs?
[Section titled “lastAdvertMs?”](#lastadvertms)
```ts
optional lastAdvertMs?: number;
```
Defined in: [src/model/contacts.ts:18](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L18)
Last advert time stamped by the NODE’s own clock, ms. Unreliable — a node with a wrong RTC can report a time in the future or far past. Shown as the secondary “advertised” timestamp, never used for the “last heard” sort.
***
### lastHeardMs?
[Section titled “lastHeardMs?”](#lastheardms)
```ts
optional lastHeardMs?: number;
```
Defined in: [src/model/contacts.ts:22](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L22)
Last time WE actually heard a live advert (our clock), ms. Set only on a real PUSH\_NEW\_ADVERT, never on a GET\_CONTACTS resync — so committing a contact to the radio doesn’t bump it. Undefined until first live advert.
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/model/contacts.ts:8](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L8)
***
### onRadio
[Section titled “onRadio”](#onradio)
```ts
onRadio: boolean;
```
Defined in: [src/model/contacts.ts:25](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L25)
***
### outPathHashSize?
[Section titled “outPathHashSize?”](#outpathhashsize)
```ts
optional outPathHashSize?: PathHashSize;
```
Defined in: [src/model/contacts.ts:12](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L12)
***
### outPathHex?
[Section titled “outPathHex?”](#outpathhex)
```ts
optional outPathHex?: string;
```
Defined in: [src/model/contacts.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L11)
***
### publicKeyHex
[Section titled “publicKeyHex”](#publickeyhex)
```ts
publicKeyHex: string;
```
Defined in: [src/model/contacts.ts:7](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contacts.ts#L7)
# GpsConfig
Defined in: [src/model/types.ts:269](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L269)
GPS module config exchanged via CMD\_SET\_CUSTOM\_VAR(“gps:1”/“gps\_interval:N”).
## Properties
[Section titled “Properties”](#properties)
### enabled
[Section titled “enabled”](#enabled)
```ts
enabled: boolean;
```
Defined in: [src/model/types.ts:270](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L270)
***
### intervalSec
[Section titled “intervalSec”](#intervalsec)
```ts
intervalSec: number;
```
Defined in: [src/model/types.ts:271](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L271)
# MeshObservation
Defined in: [src/model/meshObservations.ts:21](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L21)
## Properties
[Section titled “Properties”](#properties)
### channelHash
[Section titled “channelHash”](#channelhash)
```ts
channelHash: number;
```
Defined in: [src/model/meshObservations.ts:25](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L25)
First byte of sha256(channel.secret) — present on GRP\_TXT/GRP\_DATA in the payload’s first byte. Used to filter matches to the right channel.
***
### finalSnr
[Section titled “finalSnr”](#finalsnr)
```ts
finalSnr: number;
```
Defined in: [src/model/meshObservations.ts:29](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L29)
***
### hashCount
[Section titled “hashCount”](#hashcount)
```ts
hashCount: number;
```
Defined in: [src/model/meshObservations.ts:27](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L27)
***
### hashSize
[Section titled “hashSize”](#hashsize)
```ts
hashSize: number;
```
Defined in: [src/model/meshObservations.ts:26](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L26)
***
### pathHex
[Section titled “pathHex”](#pathhex)
```ts
pathHex: string;
```
Defined in: [src/model/meshObservations.ts:28](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L28)
***
### payloadFingerprint
[Section titled “payloadFingerprint”](#payloadfingerprint)
```ts
payloadFingerprint: string;
```
Defined in: [src/model/meshObservations.ts:34](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L34)
Hash of the encrypted payload bytes (everything after the channel\_hash byte). Identical across multi-path receipts of the same message, so the lookup can also disambiguate when two channel msgs collide in the same window with the same hop count.
***
### recordedAt
[Section titled “recordedAt”](#recordedat)
```ts
recordedAt: number;
```
Defined in: [src/model/meshObservations.ts:22](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/meshObservations.ts#L22)
# Message
Defined in: [src/model/types.ts:163](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L163)
## Properties
[Section titled “Properties”](#properties)
### body
[Section titled “body”](#body)
```ts
body: string;
```
Defined in: [src/model/types.ts:167](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L167)
***
### fromPublicKeyHex?
[Section titled “fromPublicKeyHex?”](#frompublickeyhex)
```ts
optional fromPublicKeyHex?: string;
```
Defined in: [src/model/types.ts:166](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L166)
***
### id
[Section titled “id”](#id)
```ts
id: string;
```
Defined in: [src/model/types.ts:164](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L164)
***
### key
[Section titled “key”](#key)
```ts
key: string;
```
Defined in: [src/model/types.ts:165](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L165)
***
### meta?
[Section titled “meta?”](#meta)
```ts
optional meta?: MessageMeta;
```
Defined in: [src/model/types.ts:170](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L170)
***
### state
[Section titled “state”](#state)
```ts
state: MessageState;
```
Defined in: [src/model/types.ts:169](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L169)
***
### ts
[Section titled “ts”](#ts)
```ts
ts: number;
```
Defined in: [src/model/types.ts:168](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L168)
# MessageHop
Defined in: [src/model/types.ts:129](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L129)
## Properties
[Section titled “Properties”](#properties)
### kind
[Section titled “kind”](#kind)
```ts
kind: MessageHopKind;
```
Defined in: [src/model/types.ts:130](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L130)
***
### name?
[Section titled “name?”](#name)
```ts
optional name?: string | null;
```
Defined in: [src/model/types.ts:132](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L132)
***
### pk?
[Section titled “pk?”](#pk)
```ts
optional pk?: string | null;
```
Defined in: [src/model/types.ts:133](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L133)
***
### shortId
[Section titled “shortId”](#shortid)
```ts
shortId: string;
```
Defined in: [src/model/types.ts:131](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L131)
***
### unnamed?
[Section titled “unnamed?”](#unnamed)
```ts
optional unnamed?: boolean;
```
Defined in: [src/model/types.ts:134](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L134)
# MessageMeta
Defined in: [src/model/types.ts:150](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L150)
## Properties
[Section titled “Properties”](#properties)
### hops?
[Section titled “hops?”](#hops)
```ts
optional hops?: number;
```
Defined in: [src/model/types.ts:151](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L151)
***
### paths?
[Section titled “paths?”](#paths)
```ts
optional paths?: MessagePath[];
```
Defined in: [src/model/types.ts:156](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L156)
Decoded route(s) the message travelled, populated when a matching mesh observation (PUSH\_CODE\_LOG\_RX\_DATA 0x88) preceded the channel-msg push.
***
### rssi?
[Section titled “rssi?”](#rssi)
```ts
optional rssi?: number;
```
Defined in: [src/model/types.ts:152](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L152)
***
### signatureHex?
[Section titled “signatureHex?”](#signaturehex)
```ts
optional signatureHex?: string;
```
Defined in: [src/model/types.ts:160](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L160)
***
### snr?
[Section titled “snr?”](#snr)
```ts
optional snr?: number;
```
Defined in: [src/model/types.ts:153](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L153)
***
### timesHeard?
[Section titled “timesHeard?”](#timesheard)
```ts
optional timesHeard?: number;
```
Defined in: [src/model/types.ts:159](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L159)
Number of distinct flood receptions merged into this Message row. Absent ⇒ treat as 1. Bumped on collision.
# MessagePath
Defined in: [src/model/types.ts:143](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L143)
One observed reception of a flood message: the sequence of hops it took from origin to our radio. A single Message can carry multiple paths when the same packet arrived via multiple flood routes (merged on receipt by deterministic id). `hashMode` is the firmware-encoded per-hop hash byte count (1, 2, or 3 — 4 is reserved). `finalSnr` is the SNR our radio measured on the LAST hop only; per-hop SNR is never available on flood.
## Properties
[Section titled “Properties”](#properties)
### finalSnr
[Section titled “finalSnr”](#finalsnr)
```ts
finalSnr: number;
```
Defined in: [src/model/types.ts:147](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L147)
***
### hashMode
[Section titled “hashMode”](#hashmode)
```ts
hashMode: number;
```
Defined in: [src/model/types.ts:146](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L146)
***
### hops
[Section titled “hops”](#hops)
```ts
hops: MessageHop[];
```
Defined in: [src/model/types.ts:145](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L145)
***
### id
[Section titled “id”](#id)
```ts
id: string;
```
Defined in: [src/model/types.ts:144](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L144)
# Owner
Defined in: [src/model/types.ts:173](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L173)
## Properties
[Section titled “Properties”](#properties)
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/model/types.ts:174](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L174)
***
### publicKeyHex
[Section titled “publicKeyHex”](#publickeyhex)
```ts
publicKeyHex: string;
```
Defined in: [src/model/types.ts:175](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L175)
***
### publicKeyShort
[Section titled “publicKeyShort”](#publickeyshort)
```ts
publicKeyShort: string;
```
Defined in: [src/model/types.ts:176](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L176)
# PathLearnedEvent
Defined in: [src/model/types.ts:350](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L350)
## Properties
[Section titled “Properties”](#properties)
### contactKey
[Section titled “contactKey”](#contactkey)
```ts
contactKey: string;
```
Defined in: [src/model/types.ts:351](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L351)
***
### learnedAt
[Section titled “learnedAt”](#learnedat)
```ts
learnedAt: number;
```
Defined in: [src/model/types.ts:363](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L363)
Wall-clock ms of the learn event.
***
### newOutPathHashSize
[Section titled “newOutPathHashSize”](#newoutpathhashsize)
```ts
newOutPathHashSize: PathHashSize;
```
Defined in: [src/model/types.ts:356](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L356)
***
### newOutPathHex
[Section titled “newOutPathHex”](#newoutpathhex)
```ts
newOutPathHex: string;
```
Defined in: [src/model/types.ts:355](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L355)
New out-path bytes the radio observed when the send succeeded. May be empty (e.g. a path-known send fell back to flood and the radio still hasn’t a path it trusts).
***
### previousManual
[Section titled “previousManual”](#previousmanual)
```ts
previousManual: boolean;
```
Defined in: [src/model/types.ts:361](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L361)
True iff the previous path was set manually — used to decide whether to prompt or apply silently.
***
### previousOutPathHex
[Section titled “previousOutPathHex”](#previousoutpathhex)
```ts
previousOutPathHex: string;
```
Defined in: [src/model/types.ts:358](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L358)
Path that was on the contact immediately before the learn.
# RadioSettings
Defined in: [src/model/types.ts:179](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L179)
## Properties
[Section titled “Properties”](#properties)
### bandwidthHz
[Section titled “bandwidthHz”](#bandwidthhz)
```ts
bandwidthHz: number;
```
Defined in: [src/model/types.ts:181](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L181)
***
### codingRate
[Section titled “codingRate”](#codingrate)
```ts
codingRate: number;
```
Defined in: [src/model/types.ts:183](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L183)
***
### frequencyHz
[Section titled “frequencyHz”](#frequencyhz)
```ts
frequencyHz: number;
```
Defined in: [src/model/types.ts:180](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L180)
***
### pathHashMode
[Section titled “pathHashMode”](#pathhashmode)
```ts
pathHashMode: PathHashSize;
```
Defined in: [src/model/types.ts:189](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L189)
Firmware `path.hash.mode` — bytes per hop prefix used when source-routing. All contacts whose path is captured / learned while this radio is connected inherit this as their `outPathHashSize` default.
***
### repeatMode
[Section titled “repeatMode”](#repeatmode)
```ts
repeatMode: boolean;
```
Defined in: [src/model/types.ts:185](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L185)
***
### spreadingFactor
[Section titled “spreadingFactor”](#spreadingfactor)
```ts
spreadingFactor: number;
```
Defined in: [src/model/types.ts:182](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L182)
***
### txPowerDbm
[Section titled “txPowerDbm”](#txpowerdbm)
```ts
txPowerDbm: number;
```
Defined in: [src/model/types.ts:184](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L184)
# RawPacket
Defined in: [src/model/types.ts:13](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L13)
## Properties
[Section titled “Properties”](#properties)
### bytes
[Section titled “bytes”](#bytes)
```ts
bytes: number[];
```
Defined in: [src/model/types.ts:20](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L20)
***
### code?
[Section titled “code?”](#code)
```ts
optional code?: number;
```
Defined in: [src/model/types.ts:29](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L29)
***
### codeName?
[Section titled “codeName?”](#codename)
```ts
optional codeName?: string;
```
Defined in: [src/model/types.ts:30](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L30)
***
### hex
[Section titled “hex”](#hex)
```ts
hex: string;
```
Defined in: [src/model/types.ts:19](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L19)
***
### kind
[Section titled “kind”](#kind)
```ts
kind: FrameKind;
```
Defined in: [src/model/types.ts:16](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L16)
***
### payloadBytes
[Section titled “payloadBytes”](#payloadbytes)
```ts
payloadBytes: number[];
```
Defined in: [src/model/types.ts:24](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L24)
***
### payloadHex
[Section titled “payloadHex”](#payloadhex)
```ts
payloadHex: string;
```
Defined in: [src/model/types.ts:23](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L23)
***
### rssi?
[Section titled “rssi?”](#rssi)
```ts
optional rssi?: number;
```
Defined in: [src/model/types.ts:27](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L27)
***
### snr?
[Section titled “snr?”](#snr)
```ts
optional snr?: number;
```
Defined in: [src/model/types.ts:26](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L26)
***
### timestamp
[Section titled “timestamp”](#timestamp)
```ts
timestamp: number;
```
Defined in: [src/model/types.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L14)
***
### transportType
[Section titled “transportType”](#transporttype)
```ts
transportType: TransportType;
```
Defined in: [src/model/types.ts:15](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L15)
# RepeaterStatusSnapshot
Defined in: [src/model/types.ts:330](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L330)
Decoded admin-response payload surfaced from a repeater. `payloadHex` is always populated so raw bytes can be shown when decoding can’t make sense of them; `fields` is the best-effort decode (status: well-known firmware layout; telemetry: CayenneLPP).
## Properties
[Section titled “Properties”](#properties)
### contactKey
[Section titled “contactKey”](#contactkey)
```ts
contactKey: string;
```
Defined in: [src/model/types.ts:331](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L331)
***
### fields
[Section titled “fields”](#fields)
```ts
fields: object[];
```
Defined in: [src/model/types.ts:334](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L334)
#### name
[Section titled “name”](#name)
```ts
name: string;
```
#### unit?
[Section titled “unit?”](#unit)
```ts
optional unit?: string;
```
#### value
[Section titled “value”](#value)
```ts
value: string | number;
```
***
### payloadHex
[Section titled “payloadHex”](#payloadhex)
```ts
payloadHex: string;
```
Defined in: [src/model/types.ts:333](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L333)
***
### receivedAt
[Section titled “receivedAt”](#receivedat)
```ts
receivedAt: number;
```
Defined in: [src/model/types.ts:332](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L332)
# RepeaterTelemetrySnapshot
Defined in: [src/model/types.ts:337](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L337)
## Properties
[Section titled “Properties”](#properties)
### contactKey
[Section titled “contactKey”](#contactkey)
```ts
contactKey: string;
```
Defined in: [src/model/types.ts:338](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L338)
***
### fields
[Section titled “fields”](#fields)
```ts
fields: object[];
```
Defined in: [src/model/types.ts:341](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L341)
#### channel
[Section titled “channel”](#channel)
```ts
channel: number;
```
#### name
[Section titled “name”](#name)
```ts
name: string;
```
#### typeHex
[Section titled “typeHex”](#typehex)
```ts
typeHex: string;
```
#### unit?
[Section titled “unit?”](#unit)
```ts
optional unit?: string;
```
#### value
[Section titled “value”](#value)
```ts
value: string | number;
```
***
### payloadHex
[Section titled “payloadHex”](#payloadhex)
```ts
payloadHex: string;
```
Defined in: [src/model/types.ts:340](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L340)
***
### receivedAt
[Section titled “receivedAt”](#receivedat)
```ts
receivedAt: number;
```
Defined in: [src/model/types.ts:339](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L339)
# SyncProgress
Defined in: [src/model/types.ts:39](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L39)
## Properties
[Section titled “Properties”](#properties)
### channels
[Section titled “channels”](#channels)
```ts
channels: object;
```
Defined in: [src/model/types.ts:41](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L41)
#### done
[Section titled “done”](#done)
```ts
done: number;
```
#### total
[Section titled “total”](#total)
```ts
total: number;
```
***
### contacts
[Section titled “contacts”](#contacts)
```ts
contacts: object;
```
Defined in: [src/model/types.ts:42](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L42)
#### done
[Section titled “done”](#done-1)
```ts
done: number;
```
#### total
[Section titled “total”](#total-1)
```ts
total: number;
```
***
### phase
[Section titled “phase”](#phase)
```ts
phase: SyncPhase;
```
Defined in: [src/model/types.ts:40](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L40)
# TelemetryPolicy
Defined in: [src/model/types.ts:255](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L255)
Telemetry/messaging knobs from CMD\_SET\_OTHER\_PARAMS. Each telemetry mode is 0=deny, 1=allow-per-contact-flag, 2=allow-all. `multiAcks` is 0..2 typical; more ACKs increase reliability at the cost of airtime.
## Properties
[Section titled “Properties”](#properties)
### base
[Section titled “base”](#base)
```ts
base: 0 | 1 | 2;
```
Defined in: [src/model/types.ts:256](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L256)
***
### env
[Section titled “env”](#env)
```ts
env: 0 | 1 | 2;
```
Defined in: [src/model/types.ts:258](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L258)
***
### loc
[Section titled “loc”](#loc)
```ts
loc: 0 | 1 | 2;
```
Defined in: [src/model/types.ts:257](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L257)
***
### multiAcks
[Section titled “multiAcks”](#multiacks)
```ts
multiAcks: number;
```
Defined in: [src/model/types.ts:259](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L259)
# AutoAddMode
```ts
type AutoAddMode = "all" | "selected";
```
Defined in: [src/model/types.ts:227](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L227)
Auto-add behaviour (CMD\_SET\_AUTO\_ADD\_CONFIG / GET\_AUTO\_ADD\_CONFIG). `mode` is an app-side convenience: “all” forces all four kind flags true on save; “selected” respects the per-kind booleans. The radio flag byte only carries the kinds + overwrite\_oldest.
# ChannelKind
```ts
type ChannelKind = "public" | "hashtag" | "private";
```
Defined in: [src/model/types.ts:51](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L51)
# ContactKind
```ts
type ContactKind = "chat" | "repeater" | "sensor" | "room";
```
Defined in: [src/model/types.ts:65](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L65)
# ContactSource
```ts
type ContactSource = "sync" | "advert";
```
Defined in: [src/model/contactTypes.ts:21](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/contactTypes.ts#L21)
Where an ingested contact was heard: `'sync'` (RESP\_CONTACT during the GET\_CONTACTS handshake — always on-radio) or `'advert'` (live PUSH\_NEW\_ADVERT — on-radio only if already in the store).
# FrameKind
```ts
type FrameKind = "mesh" | "companion";
```
Defined in: [src/model/types.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L11)
Coarse frame classification: a literal mesh packet vs. a companion-radio event/response. Mirrors the discriminant on the frame parser’s ParsedFrame.
# MessageHopKind
```ts
type MessageHopKind = "origin" | "hop" | "sink";
```
Defined in: [src/model/types.ts:128](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L128)
One node in a routing path. `kind` distinguishes the message originator (sender, derived from the “name: ” prefix in channel messages), intermediate repeaters, and the sink (our radio). `shortId` is the per-hop prefix hex (1, 2, or 3 bytes wide) as encoded by the firmware in the on-air path. `unnamed: true` means we only know the prefix byte(s) — no advert ever seen for that prefix.
# MessageState
```ts
type MessageState = "sending" | "sent" | "heard" | "ack" | "failed" | "received";
```
Defined in: [src/model/types.ts:120](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L120)
# PathHashSize
```ts
type PathHashSize = 1 | 2 | 3;
```
Defined in: [src/model/types.ts:67](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L67)
# SyncPhase
```ts
type SyncPhase = "idle" | "syncing" | "done";
```
Defined in: [src/model/types.ts:38](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L38)
Post-connect handshake progress. `phase` is the high-level state surfaced alongside the transport-level state; the per-bucket counters for channels and contacts are summed to drive a “Syncing N/M” indicator. `idle` = not currently syncing (either pre-connect or post-completion); `syncing` = handshake in flight; `done` = handshake finished this session.
# TransportState
```ts
type TransportState = "idle" | "scanning" | "connecting" | "connected" | "error";
```
Defined in: [src/model/types.ts:4](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L4)
# TransportType
```ts
type TransportType = "ble" | "serial";
```
Defined in: [src/model/types.ts:7](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L7)
Which physical transport carried a frame.
# DEFAULT_AUTO_ADD_CONFIG
```ts
const DEFAULT_AUTO_ADD_CONFIG: AutoAddConfig;
```
Defined in: [src/model/types.ts:241](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L241)
# DEFAULT_DEVICE_CAPABILITIES
```ts
const DEFAULT_DEVICE_CAPABILITIES: DeviceCapabilities;
```
Defined in: [src/model/types.ts:321](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L321)
# DEFAULT_DEVICE_IDENTITY
```ts
const DEFAULT_DEVICE_IDENTITY: DeviceIdentity;
```
Defined in: [src/model/types.ts:215](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L215)
# DEFAULT_DEVICE_INFO
```ts
const DEFAULT_DEVICE_INFO: DeviceInfo;
```
Defined in: [src/model/types.ts:298](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L298)
# DEFAULT_GPS_CONFIG
```ts
const DEFAULT_GPS_CONFIG: GpsConfig;
```
Defined in: [src/model/types.ts:273](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L273)
# DEFAULT_RADIO_SETTINGS
```ts
const DEFAULT_RADIO_SETTINGS: RadioSettings;
```
Defined in: [src/model/types.ts:193](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L193)
# DEFAULT_SYNC_PROGRESS
```ts
const DEFAULT_SYNC_PROGRESS: SyncProgress;
```
Defined in: [src/model/types.ts:45](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L45)
# DEFAULT_TELEMETRY_POLICY
```ts
const DEFAULT_TELEMETRY_POLICY: TelemetryPolicy;
```
Defined in: [src/model/types.ts:261](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/model/types.ts#L261)
# Events
Defined in: [src/ports/events.ts:127](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L127)
Typed wrapper around `node:events` EventEmitter. Public method signatures are fully typed against [MeshCoreEventMap](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/); the untyped `node:events` boundary is bridged with a single localized cast in each method.
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new Events(): MeshCoreEvents;
```
Defined in: [src/ports/events.ts:130](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L130)
#### Returns
[Section titled “Returns”](#returns)
`MeshCoreEvents`
## Methods
[Section titled “Methods”](#methods)
### emit()
[Section titled “emit()”](#emit)
```ts
emit(event, ...args): void;
```
Defined in: [src/ports/events.ts:151](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L151)
#### Type Parameters
[Section titled “Type Parameters”](#type-parameters)
| Type Parameter |
| -------------------------------------------------------------------------------------------------- |
| `K` *extends* keyof [`EventMap`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/) |
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------------------------------------------------------------------------------------------------- |
| `event` | `K` |
| …`args` | `Parameters`<[`EventMap`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/)\[`K`]> |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
***
### off()
[Section titled “off()”](#off)
```ts
off(event, listener): this;
```
Defined in: [src/ports/events.ts:141](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L141)
#### Type Parameters
[Section titled “Type Parameters”](#type-parameters-1)
| Type Parameter |
| -------------------------------------------------------------------------------------------------- |
| `K` *extends* keyof [`EventMap`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/) |
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| ---------- | ------------------------------------------------------------------------------------ |
| `event` | `K` |
| `listener` | [`EventMap`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/)\[`K`] |
#### Returns
[Section titled “Returns”](#returns-2)
`this`
***
### on()
[Section titled “on()”](#on)
```ts
on(event, listener): this;
```
Defined in: [src/ports/events.ts:136](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L136)
#### Type Parameters
[Section titled “Type Parameters”](#type-parameters-2)
| Type Parameter |
| -------------------------------------------------------------------------------------------------- |
| `K` *extends* keyof [`EventMap`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/) |
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| ---------- | ------------------------------------------------------------------------------------ |
| `event` | `K` |
| `listener` | [`EventMap`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/)\[`K`] |
#### Returns
[Section titled “Returns”](#returns-3)
`this`
***
### once()
[Section titled “once()”](#once)
```ts
once(event, listener): this;
```
Defined in: [src/ports/events.ts:146](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L146)
#### Type Parameters
[Section titled “Type Parameters”](#type-parameters-3)
| Type Parameter |
| -------------------------------------------------------------------------------------------------- |
| `K` *extends* keyof [`EventMap`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/) |
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| ---------- | ------------------------------------------------------------------------------------ |
| `event` | `K` |
| `listener` | [`EventMap`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/)\[`K`] |
#### Returns
[Section titled “Returns”](#returns-4)
`this`
***
### removeAllListeners()
[Section titled “removeAllListeners()”](#removealllisteners)
```ts
removeAllListeners(): this;
```
Defined in: [src/ports/events.ts:155](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L155)
#### Returns
[Section titled “Returns”](#returns-5)
`this`
# EventMap
Defined in: [src/ports/events.ts:37](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L37)
Strongly-typed map of every event the library emits. The session owns a `MeshCoreEvents` instance and exposes it as `session.events`.
Note: there is intentionally NO generic `error` event here — the donor app’s `errorMessage` channel was dropped during extraction. Specific recoverable conditions are surfaced as their own dedicated events instead (e.g. [MeshCoreEventMap.contactsFull](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/#contactsfull)), which adapters may map onto their own error/toast channel.
## Properties
[Section titled “Properties”](#properties)
### autoAddConfig
[Section titled “autoAddConfig”](#autoaddconfig)
```ts
autoAddConfig: (cfg) => void;
```
Defined in: [src/ports/events.ts:70](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L70)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------------------- |
| `cfg` | [`AutoAddConfig`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/autoaddconfig/) |
#### Returns
[Section titled “Returns”](#returns)
`void`
***
### channelPresence
[Section titled “channelPresence”](#channelpresence)
```ts
channelPresence: (keys) => void;
```
Defined in: [src/ports/events.ts:41](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L41)
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | ----------- |
| `keys` | `string`\[] |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
***
### channels
[Section titled “channels”](#channels)
```ts
channels: (channels) => void;
```
Defined in: [src/ports/events.ts:40](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L40)
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| ---------- | -------------------------------------------------------------------------------- |
| `channels` | [`Channel`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/channel/)\[] |
#### Returns
[Section titled “Returns”](#returns-2)
`void`
***
### contactDiscovered
[Section titled “contactDiscovered”](#contactdiscovered)
```ts
contactDiscovered: (c) => void;
```
Defined in: [src/ports/events.ts:51](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L51)
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| `c` | { `key`: `string`; `kind`: [`ContactKind`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/contactkind/); `name`: `string`; } |
| `c.key` | `string` |
| `c.kind` | [`ContactKind`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/contactkind/) |
| `c.name` | `string` |
#### Returns
[Section titled “Returns”](#returns-3)
`void`
***
### contactEvicted
[Section titled “contactEvicted”](#contactevicted)
```ts
contactEvicted: (name) => void;
```
Defined in: [src/ports/events.ts:45](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L45)
#### Parameters
[Section titled “Parameters”](#parameters-4)
| Parameter | Type |
| --------- | -------- |
| `name` | `string` |
#### Returns
[Section titled “Returns”](#returns-4)
`void`
***
### contactObserved
[Section titled “contactObserved”](#contactobserved)
```ts
contactObserved: (record, source) => void;
```
Defined in: [src/ports/events.ts:54](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L54)
Fires whenever a contact record is ingested (sync or advert), exposing the raw decoded record so consumers can persist it themselves.
#### Parameters
[Section titled “Parameters”](#parameters-5)
| Parameter | Type |
| --------- | ------------------------------------------------------------------------------------------- |
| `record` | [`ContactRecord`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/contactrecord/) |
| `source` | [`ContactSource`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/contactsource/) |
#### Returns
[Section titled “Returns”](#returns-5)
`void`
***
### contacts
[Section titled “contacts”](#contacts)
```ts
contacts: (contacts) => void;
```
Defined in: [src/ports/events.ts:43](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L43)
#### Parameters
[Section titled “Parameters”](#parameters-6)
| Parameter | Type |
| ---------- | -------------------------------------------------------------------------------- |
| `contacts` | [`Contact`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/contact/)\[] |
#### Returns
[Section titled “Returns”](#returns-6)
`void`
***
### contactsFull
[Section titled “contactsFull”](#contactsfull)
```ts
contactsFull: () => void;
```
Defined in: [src/ports/events.ts:50](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L50)
The radio’s contact store is full — a new advert could not be auto-added (overwrite-oldest off, or all slots favourited). Informational/recoverable: the user must remove or favourite contacts to make room. Adapters may bridge this onto their own error/toast channel.
#### Returns
[Section titled “Returns”](#returns-7)
`void`
***
### deviceCapabilities
[Section titled “deviceCapabilities”](#devicecapabilities)
```ts
deviceCapabilities: (caps) => void;
```
Defined in: [src/ports/events.ts:74](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L74)
#### Parameters
[Section titled “Parameters”](#parameters-7)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------------- |
| `caps` | [`DeviceCapabilities`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/devicecapabilities/) |
#### Returns
[Section titled “Returns”](#returns-8)
`void`
***
### deviceIdentity
[Section titled “deviceIdentity”](#deviceidentity)
```ts
deviceIdentity: (identity) => void;
```
Defined in: [src/ports/events.ts:69](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L69)
#### Parameters
[Section titled “Parameters”](#parameters-8)
| Parameter | Type |
| ---------- | ------------------------------------------------------------------------------------------- |
| `identity` | [`DeviceIdentity`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/deviceidentity/) |
#### Returns
[Section titled “Returns”](#returns-9)
`void`
***
### deviceInfo
[Section titled “deviceInfo”](#deviceinfo)
```ts
deviceInfo: (info) => void;
```
Defined in: [src/ports/events.ts:73](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L73)
#### Parameters
[Section titled “Parameters”](#parameters-9)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------------- |
| `info` | [`DeviceInfo`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/deviceinfo/) |
#### Returns
[Section titled “Returns”](#returns-10)
`void`
***
### discovered
[Section titled “discovered”](#discovered)
```ts
discovered: (rows) => void;
```
Defined in: [src/ports/events.ts:44](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L44)
#### Parameters
[Section titled “Parameters”](#parameters-10)
| Parameter | Type |
| --------- | ---------------------------------------------------------------------------------------------------- |
| `rows` | [`DiscoveredContact`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/discoveredcontact/)\[] |
#### Returns
[Section titled “Returns”](#returns-11)
`void`
***
### gpsConfig
[Section titled “gpsConfig”](#gpsconfig)
```ts
gpsConfig: (cfg) => void;
```
Defined in: [src/ports/events.ts:72](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L72)
#### Parameters
[Section titled “Parameters”](#parameters-11)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------- |
| `cfg` | [`GpsConfig`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/gpsconfig/) |
#### Returns
[Section titled “Returns”](#returns-12)
`void`
***
### messagePathHeard
[Section titled “messagePathHeard”](#messagepathheard)
```ts
messagePathHeard: (p) => void;
```
Defined in: [src/ports/events.ts:63](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L63)
A heard repeater relay of one of your outgoing channel sends, correlated back to the message id you passed to registerChannelSend. Carries only the message id and the observed path — the library does not track message state for this; the consumer owns it.
#### Parameters
[Section titled “Parameters”](#parameters-12)
| Parameter | Type |
| --------- | ------------------------------------------------------------------------------------------------------------------ |
| `p` | { `id`: `string`; `path`: [`MessagePath`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/messagepath/); } |
| `p.id` | `string` |
| `p.path` | [`MessagePath`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/messagepath/) |
#### Returns
[Section titled “Returns”](#returns-13)
`void`
***
### messages
[Section titled “messages”](#messages)
```ts
messages: (key, messages) => void;
```
Defined in: [src/ports/events.ts:55](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L55)
#### Parameters
[Section titled “Parameters”](#parameters-13)
| Parameter | Type |
| ---------- | -------------------------------------------------------------------------------- |
| `key` | `string` |
| `messages` | [`Message`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/message/)\[] |
#### Returns
[Section titled “Returns”](#returns-14)
`void`
***
### messageState
[Section titled “messageState”](#messagestate)
```ts
messageState: (id, state) => void;
```
Defined in: [src/ports/events.ts:58](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L58)
#### Parameters
[Section titled “Parameters”](#parameters-14)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------------------- |
| `id` | `string` |
| `state` | [`MessageState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/messagestate/) |
#### Returns
[Section titled “Returns”](#returns-15)
`void`
***
### messageUpserted
[Section titled “messageUpserted”](#messageupserted)
```ts
messageUpserted: (message) => void;
```
Defined in: [src/ports/events.ts:57](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L57)
A single inserted/updated message — a delta companion to `messages`.
#### Parameters
[Section titled “Parameters”](#parameters-15)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------- |
| `message` | [`Message`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/message/) |
#### Returns
[Section titled “Returns”](#returns-16)
`void`
***
### owner
[Section titled “owner”](#owner)
```ts
owner: (owner) => void;
```
Defined in: [src/ports/events.ts:64](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L64)
#### Parameters
[Section titled “Parameters”](#parameters-16)
| Parameter | Type |
| --------- | -------------------------------------------------------------------------------------- |
| `owner` | \| [`Owner`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/owner/) \| `null` |
#### Returns
[Section titled “Returns”](#returns-17)
`void`
***
### pathLearned
[Section titled “pathLearned”](#pathlearned)
```ts
pathLearned: (event) => void;
```
Defined in: [src/ports/events.ts:68](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L68)
#### Parameters
[Section titled “Parameters”](#parameters-17)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------------------------- |
| `event` | [`PathLearnedEvent`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/pathlearnedevent/) |
#### Returns
[Section titled “Returns”](#returns-18)
`void`
***
### radioSettings
[Section titled “radioSettings”](#radiosettings)
```ts
radioSettings: (settings) => void;
```
Defined in: [src/ports/events.ts:65](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L65)
#### Parameters
[Section titled “Parameters”](#parameters-18)
| Parameter | Type |
| ---------- | ----------------------------------------------------------------------------------------- |
| `settings` | [`RadioSettings`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/radiosettings/) |
#### Returns
[Section titled “Returns”](#returns-19)
`void`
***
### rawPacket
[Section titled “rawPacket”](#rawpacket)
```ts
rawPacket: (pkt) => void;
```
Defined in: [src/ports/events.ts:39](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L39)
#### Parameters
[Section titled “Parameters”](#parameters-19)
| Parameter | Type |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `pkt` | { `hex`: `string`; `rssi`: `number`; `snr`: `number`; `source`: [`MeshSource`](/meshcore-ts/api/andyshinn/namespaces/protocol/type-aliases/meshsource/); } |
| `pkt.hex` | `string` |
| `pkt.rssi` | `number` |
| `pkt.snr` | `number` |
| `pkt.source` | [`MeshSource`](/meshcore-ts/api/andyshinn/namespaces/protocol/type-aliases/meshsource/) |
#### Returns
[Section titled “Returns”](#returns-20)
`void`
***
### repeaterStatus
[Section titled “repeaterStatus”](#repeaterstatus)
```ts
repeaterStatus: (snap) => void;
```
Defined in: [src/ports/events.ts:66](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L66)
#### Parameters
[Section titled “Parameters”](#parameters-20)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------------------------------------- |
| `snap` | [`RepeaterStatusSnapshot`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/repeaterstatussnapshot/) |
#### Returns
[Section titled “Returns”](#returns-21)
`void`
***
### repeaterTelemetry
[Section titled “repeaterTelemetry”](#repeatertelemetry)
```ts
repeaterTelemetry: (snap) => void;
```
Defined in: [src/ports/events.ts:67](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L67)
#### Parameters
[Section titled “Parameters”](#parameters-21)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------------------------------------------- |
| `snap` | [`RepeaterTelemetrySnapshot`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/repeatertelemetrysnapshot/) |
#### Returns
[Section titled “Returns”](#returns-22)
`void`
***
### syncProgress
[Section titled “syncProgress”](#syncprogress)
```ts
syncProgress: (progress) => void;
```
Defined in: [src/ports/events.ts:42](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L42)
#### Parameters
[Section titled “Parameters”](#parameters-22)
| Parameter | Type |
| ---------- | --------------------------------------------------------------------------------------- |
| `progress` | [`SyncProgress`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/syncprogress/) |
#### Returns
[Section titled “Returns”](#returns-23)
`void`
***
### telemetryPolicy
[Section titled “telemetryPolicy”](#telemetrypolicy)
```ts
telemetryPolicy: (policy) => void;
```
Defined in: [src/ports/events.ts:71](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L71)
#### Parameters
[Section titled “Parameters”](#parameters-23)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------- |
| `policy` | [`TelemetryPolicy`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/telemetrypolicy/) |
#### Returns
[Section titled “Returns”](#returns-24)
`void`
***
### transportState
[Section titled “transportState”](#transportstate)
```ts
transportState: (s) => void;
```
Defined in: [src/ports/events.ts:38](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L38)
#### Parameters
[Section titled “Parameters”](#parameters-24)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------- |
| `s` | [`TransportState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/transportstate/) |
#### Returns
[Section titled “Returns”](#returns-25)
`void`
# Logger
Defined in: [src/ports/logger.ts:2](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/logger.ts#L2)
Minimal structured logging port. Replaces the donor’s tslog `log.ts`.
## Methods
[Section titled “Methods”](#methods)
### debug()
[Section titled “debug()”](#debug)
```ts
debug(...args): void;
```
Defined in: [src/ports/logger.ts:4](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/logger.ts#L4)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------ |
| …`args` | `unknown`\[] |
#### Returns
[Section titled “Returns”](#returns)
`void`
***
### error()
[Section titled “error()”](#error)
```ts
error(...args): void;
```
Defined in: [src/ports/logger.ts:7](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/logger.ts#L7)
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | ------------ |
| …`args` | `unknown`\[] |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
***
### info()
[Section titled “info()”](#info)
```ts
info(...args): void;
```
Defined in: [src/ports/logger.ts:5](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/logger.ts#L5)
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | ------------ |
| …`args` | `unknown`\[] |
#### Returns
[Section titled “Returns”](#returns-2)
`void`
***
### trace()
[Section titled “trace()”](#trace)
```ts
trace(...args): void;
```
Defined in: [src/ports/logger.ts:3](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/logger.ts#L3)
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| --------- | ------------ |
| …`args` | `unknown`\[] |
#### Returns
[Section titled “Returns”](#returns-3)
`void`
***
### warn()
[Section titled “warn()”](#warn)
```ts
warn(...args): void;
```
Defined in: [src/ports/logger.ts:6](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/logger.ts#L6)
#### Parameters
[Section titled “Parameters”](#parameters-4)
| Parameter | Type |
| --------- | ------------ |
| …`args` | `unknown`\[] |
#### Returns
[Section titled “Returns”](#returns-4)
`void`
# Transport
Defined in: [src/ports/transport.ts:5](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L5)
Byte-stream port to the radio. The library injects an implementation (BLE, serial, etc.).
## Methods
[Section titled “Methods”](#methods)
### getState()
[Section titled “getState()”](#getstate)
```ts
getState(): TransportState;
```
Defined in: [src/ports/transport.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L11)
#### Returns
[Section titled “Returns”](#returns)
[`TransportState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/transportstate/)
***
### onData()
[Section titled “onData()”](#ondata)
```ts
onData(cb): void;
```
Defined in: [src/ports/transport.ts:9](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L9)
Each chunk is ONE complete companion frame (a BLE notification payload).
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------------- |
| `cb` | (`chunk`) => `void` |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
***
### onStateChange()
[Section titled “onStateChange()”](#onstatechange)
```ts
onStateChange(cb): void;
```
Defined in: [src/ports/transport.ts:10](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L10)
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | --------------- |
| `cb` | (`s`) => `void` |
#### Returns
[Section titled “Returns”](#returns-2)
`void`
***
### send()
[Section titled “send()”](#send)
```ts
send(bytes): Promise;
```
Defined in: [src/ports/transport.ts:7](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L7)
Write one complete companion frame to the radio.
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | ------------ |
| `bytes` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-3)
`Promise`<`void`>
# EventName
```ts
type EventName = keyof EventMap;
```
Defined in: [src/ports/events.ts:82](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L82)
Union of event-name keys (= `keyof MeshCoreEventMap`); interchangeable with `EventName` values.
# EventName
```ts
const EventName: object;
```
Defined in: [src/ports/events.ts:82](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/events.ts#L82)
Named constants for every key in [MeshCoreEventMap](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/eventmap/), so consumers may subscribe by readable name instead of a bare string: `session.events.on(EventName.RAW_PACKET, …)`. Values equal the event keys, so the constant and the raw string are interchangeable and both infer the typed listener. `satisfies` validates each value; the guard below enforces coverage.
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### AUTO\_ADD\_CONFIG
[Section titled “AUTO\_ADD\_CONFIG”](#auto_add_config)
```ts
readonly AUTO_ADD_CONFIG: "autoAddConfig" = 'autoAddConfig';
```
### CHANNEL\_PRESENCE
[Section titled “CHANNEL\_PRESENCE”](#channel_presence)
```ts
readonly CHANNEL_PRESENCE: "channelPresence" = 'channelPresence';
```
### CHANNELS
[Section titled “CHANNELS”](#channels)
```ts
readonly CHANNELS: "channels" = 'channels';
```
### CONTACT\_DISCOVERED
[Section titled “CONTACT\_DISCOVERED”](#contact_discovered)
```ts
readonly CONTACT_DISCOVERED: "contactDiscovered" = 'contactDiscovered';
```
### CONTACT\_EVICTED
[Section titled “CONTACT\_EVICTED”](#contact_evicted)
```ts
readonly CONTACT_EVICTED: "contactEvicted" = 'contactEvicted';
```
### CONTACT\_OBSERVED
[Section titled “CONTACT\_OBSERVED”](#contact_observed)
```ts
readonly CONTACT_OBSERVED: "contactObserved" = 'contactObserved';
```
### CONTACTS
[Section titled “CONTACTS”](#contacts)
```ts
readonly CONTACTS: "contacts" = 'contacts';
```
### CONTACTS\_FULL
[Section titled “CONTACTS\_FULL”](#contacts_full)
```ts
readonly CONTACTS_FULL: "contactsFull" = 'contactsFull';
```
### DEVICE\_CAPABILITIES
[Section titled “DEVICE\_CAPABILITIES”](#device_capabilities)
```ts
readonly DEVICE_CAPABILITIES: "deviceCapabilities" = 'deviceCapabilities';
```
### DEVICE\_IDENTITY
[Section titled “DEVICE\_IDENTITY”](#device_identity)
```ts
readonly DEVICE_IDENTITY: "deviceIdentity" = 'deviceIdentity';
```
### DEVICE\_INFO
[Section titled “DEVICE\_INFO”](#device_info)
```ts
readonly DEVICE_INFO: "deviceInfo" = 'deviceInfo';
```
### DISCOVERED
[Section titled “DISCOVERED”](#discovered)
```ts
readonly DISCOVERED: "discovered" = 'discovered';
```
### GPS\_CONFIG
[Section titled “GPS\_CONFIG”](#gps_config)
```ts
readonly GPS_CONFIG: "gpsConfig" = 'gpsConfig';
```
### MESSAGE\_PATH\_HEARD
[Section titled “MESSAGE\_PATH\_HEARD”](#message_path_heard)
```ts
readonly MESSAGE_PATH_HEARD: "messagePathHeard" = 'messagePathHeard';
```
### MESSAGE\_STATE
[Section titled “MESSAGE\_STATE”](#message_state)
```ts
readonly MESSAGE_STATE: "messageState" = 'messageState';
```
### MESSAGE\_UPSERTED
[Section titled “MESSAGE\_UPSERTED”](#message_upserted)
```ts
readonly MESSAGE_UPSERTED: "messageUpserted" = 'messageUpserted';
```
### MESSAGES
[Section titled “MESSAGES”](#messages)
```ts
readonly MESSAGES: "messages" = 'messages';
```
### OWNER
[Section titled “OWNER”](#owner)
```ts
readonly OWNER: "owner" = 'owner';
```
### PATH\_LEARNED
[Section titled “PATH\_LEARNED”](#path_learned)
```ts
readonly PATH_LEARNED: "pathLearned" = 'pathLearned';
```
### RADIO\_SETTINGS
[Section titled “RADIO\_SETTINGS”](#radio_settings)
```ts
readonly RADIO_SETTINGS: "radioSettings" = 'radioSettings';
```
### RAW\_PACKET
[Section titled “RAW\_PACKET”](#raw_packet)
```ts
readonly RAW_PACKET: "rawPacket" = 'rawPacket';
```
### REPEATER\_STATUS
[Section titled “REPEATER\_STATUS”](#repeater_status)
```ts
readonly REPEATER_STATUS: "repeaterStatus" = 'repeaterStatus';
```
### REPEATER\_TELEMETRY
[Section titled “REPEATER\_TELEMETRY”](#repeater_telemetry)
```ts
readonly REPEATER_TELEMETRY: "repeaterTelemetry" = 'repeaterTelemetry';
```
### SYNC\_PROGRESS
[Section titled “SYNC\_PROGRESS”](#sync_progress)
```ts
readonly SYNC_PROGRESS: "syncProgress" = 'syncProgress';
```
### TELEMETRY\_POLICY
[Section titled “TELEMETRY\_POLICY”](#telemetry_policy)
```ts
readonly TELEMETRY_POLICY: "telemetryPolicy" = 'telemetryPolicy';
```
### TRANSPORT\_STATE
[Section titled “TRANSPORT\_STATE”](#transport_state)
```ts
readonly TRANSPORT_STATE: "transportState" = 'transportState';
```
# noopLogger
```ts
const noopLogger: Logger;
```
Defined in: [src/ports/logger.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/logger.ts#L11)
Default no-op logger so logging is entirely optional.
# BufferReader
Defined in: [src/protocol/buffer.ts:6](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L6)
Cursor-based reader for MeshCore companion frames. Replaces hardcoded absolute offsets (e.g. `frame.readUInt32LE(132)`) so variable-length frames decode without off-by-one risk. Ported from meshcore.js’s BufferReader.
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new BufferReader(buf): BufferReader;
```
Defined in: [src/protocol/buffer.ts:8](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L8)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `buf` | `Buffer` |
#### Returns
[Section titled “Returns”](#returns)
`BufferReader`
## Accessors
[Section titled “Accessors”](#accessors)
### remaining
[Section titled “remaining”](#remaining)
#### Get Signature
[Section titled “Get Signature”](#get-signature)
```ts
get remaining(): number;
```
Defined in: [src/protocol/buffer.ts:10](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L10)
##### Returns
[Section titled “Returns”](#returns-1)
`number`
## Methods
[Section titled “Methods”](#methods)
### readByte()
[Section titled “readByte()”](#readbyte)
```ts
readByte(): number;
```
Defined in: [src/protocol/buffer.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L14)
#### Returns
[Section titled “Returns”](#returns-2)
`number`
***
### readBytes()
[Section titled “readBytes()”](#readbytes)
```ts
readBytes(n): Buffer;
```
Defined in: [src/protocol/buffer.ts:46](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L46)
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | -------- |
| `n` | `number` |
#### Returns
[Section titled “Returns”](#returns-3)
`Buffer`
***
### readCString()
[Section titled “readCString()”](#readcstring)
```ts
readCString(maxLen): string;
```
Defined in: [src/protocol/buffer.ts:62](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L62)
Fixed-width null-padded string: consumes exactly `maxLen` bytes, returns the text up to the first null.
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | -------- |
| `maxLen` | `number` |
#### Returns
[Section titled “Returns”](#returns-4)
`string`
***
### readInt16LE()
[Section titled “readInt16LE()”](#readint16le)
```ts
readInt16LE(): number;
```
Defined in: [src/protocol/buffer.ts:25](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L25)
#### Returns
[Section titled “Returns”](#returns-5)
`number`
***
### readInt24BE()
[Section titled “readInt24BE()”](#readint24be)
```ts
readInt24BE(): number;
```
Defined in: [src/protocol/buffer.ts:41](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L41)
24-bit big-endian signed — used by CayenneLPP GPS fields.
#### Returns
[Section titled “Returns”](#returns-6)
`number`
***
### readInt32LE()
[Section titled “readInt32LE()”](#readint32le)
```ts
readInt32LE(): number;
```
Defined in: [src/protocol/buffer.ts:35](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L35)
#### Returns
[Section titled “Returns”](#returns-7)
`number`
***
### readInt8()
[Section titled “readInt8()”](#readint8)
```ts
readInt8(): number;
```
Defined in: [src/protocol/buffer.ts:17](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L17)
#### Returns
[Section titled “Returns”](#returns-8)
`number`
***
### readRemaining()
[Section titled “readRemaining()”](#readremaining)
```ts
readRemaining(): Buffer;
```
Defined in: [src/protocol/buffer.ts:54](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L54)
#### Returns
[Section titled “Returns”](#returns-9)
`Buffer`
***
### readString()
[Section titled “readString()”](#readstring)
```ts
readString(): string;
```
Defined in: [src/protocol/buffer.ts:57](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L57)
#### Returns
[Section titled “Returns”](#returns-10)
`string`
***
### readUInt16LE()
[Section titled “readUInt16LE()”](#readuint16le)
```ts
readUInt16LE(): number;
```
Defined in: [src/protocol/buffer.ts:20](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L20)
#### Returns
[Section titled “Returns”](#returns-11)
`number`
***
### readUInt32LE()
[Section titled “readUInt32LE()”](#readuint32le)
```ts
readUInt32LE(): number;
```
Defined in: [src/protocol/buffer.ts:30](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L30)
#### Returns
[Section titled “Returns”](#returns-12)
`number`
# BufferWriter
Defined in: [src/protocol/buffer.ts:70](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L70)
Cursor-based writer producing MeshCore companion frames. Methods chain.
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new BufferWriter(): BufferWriter;
```
#### Returns
[Section titled “Returns”](#returns)
`BufferWriter`
## Methods
[Section titled “Methods”](#methods)
### toBuffer()
[Section titled “toBuffer()”](#tobuffer)
```ts
toBuffer(): Buffer;
```
Defined in: [src/protocol/buffer.ts:109](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L109)
#### Returns
[Section titled “Returns”](#returns-1)
`Buffer`
***
### writeByte()
[Section titled “writeByte()”](#writebyte)
```ts
writeByte(b): this;
```
Defined in: [src/protocol/buffer.ts:73](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L73)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `b` | `number` |
#### Returns
[Section titled “Returns”](#returns-2)
`this`
***
### writeBytes()
[Section titled “writeBytes()”](#writebytes)
```ts
writeBytes(b): this;
```
Defined in: [src/protocol/buffer.ts:92](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L92)
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | --------------------------------------------------- |
| `b` | `Buffer`<`ArrayBufferLike`> \| readonly `number`\[] |
#### Returns
[Section titled “Returns”](#returns-3)
`this`
***
### writeCString()
[Section titled “writeCString()”](#writecstring)
```ts
writeCString(s, maxLen): this;
```
Defined in: [src/protocol/buffer.ts:101](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L101)
Fixed-width null-padded string: writes exactly `maxLen` bytes, always null-terminated (last byte forced to 0).
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | -------- |
| `s` | `string` |
| `maxLen` | `number` |
#### Returns
[Section titled “Returns”](#returns-4)
`this`
***
### writeInt32LE()
[Section titled “writeInt32LE()”](#writeint32le)
```ts
writeInt32LE(n): this;
```
Defined in: [src/protocol/buffer.ts:89](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L89)
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| --------- | -------- |
| `n` | `number` |
#### Returns
[Section titled “Returns”](#returns-5)
`this`
***
### writeInt8()
[Section titled “writeInt8()”](#writeint8)
```ts
writeInt8(b): this;
```
Defined in: [src/protocol/buffer.ts:77](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L77)
#### Parameters
[Section titled “Parameters”](#parameters-4)
| Parameter | Type |
| --------- | -------- |
| `b` | `number` |
#### Returns
[Section titled “Returns”](#returns-6)
`this`
***
### writeString()
[Section titled “writeString()”](#writestring)
```ts
writeString(s): this;
```
Defined in: [src/protocol/buffer.ts:96](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L96)
#### Parameters
[Section titled “Parameters”](#parameters-5)
| Parameter | Type |
| --------- | -------- |
| `s` | `string` |
#### Returns
[Section titled “Returns”](#returns-7)
`this`
***
### writeUInt16LE()
[Section titled “writeUInt16LE()”](#writeuint16le)
```ts
writeUInt16LE(n): this;
```
Defined in: [src/protocol/buffer.ts:80](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L80)
#### Parameters
[Section titled “Parameters”](#parameters-6)
| Parameter | Type |
| --------- | -------- |
| `n` | `number` |
#### Returns
[Section titled “Returns”](#returns-8)
`this`
***
### writeUInt32LE()
[Section titled “writeUInt32LE()”](#writeuint32le)
```ts
writeUInt32LE(n): this;
```
Defined in: [src/protocol/buffer.ts:84](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/buffer.ts#L84)
#### Parameters
[Section titled “Parameters”](#parameters-7)
| Parameter | Type |
| --------- | -------- |
| `n` | `number` |
#### Returns
[Section titled “Returns”](#returns-9)
`this`
# buildGetStats
```ts
function buildGetStats(subtype): Buffer;
```
Defined in: [src/protocol/repeater.ts:387](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L387)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ----------------- |
| `subtype` | `0` \| `1` \| `2` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# buildLogout
```ts
function buildLogout(destPublicKeyHex): Buffer;
```
Defined in: [src/protocol/repeater.ts:347](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L347)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------------ | -------- |
| `destPublicKeyHex` | `string` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# buildReboot
```ts
function buildReboot(): Buffer;
```
Defined in: [src/protocol/encode.ts:16](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/encode.ts#L16)
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# buildSendAnonReq
```ts
function buildSendAnonReq(destPublicKeyHex, data): Buffer;
```
Defined in: [src/protocol/repeater.ts:359](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L359)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------------ | -------- |
| `destPublicKeyHex` | `string` |
| `data` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# buildSendBinaryReq
```ts
function buildSendBinaryReq(destPublicKeyHex, reqData): Buffer;
```
Defined in: [src/protocol/repeater.ts:397](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L397)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------------ | -------- |
| `destPublicKeyHex` | `string` |
| `reqData` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# buildSendLogin
```ts
function buildSendLogin(destPublicKeyHex, password): Buffer;
```
Defined in: [src/protocol/repeater.ts:336](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L336)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------------ | -------- |
| `destPublicKeyHex` | `string` |
| `password` | `string` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# buildSendSelfAdvert
```ts
function buildSendSelfAdvert(flood?): Buffer;
```
Defined in: [src/protocol/encode.ts:10](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/encode.ts#L10)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type | Default value |
| --------- | --------- | ------------- |
| `flood` | `boolean` | `true` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# buildSendStatusReq
```ts
function buildSendStatusReq(destPublicKeyHex): Buffer;
```
Defined in: [src/protocol/repeater.ts:312](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L312)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------------ | -------- |
| `destPublicKeyHex` | `string` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# buildSendTelemetryReq
```ts
function buildSendTelemetryReq(destPublicKeyHex): Buffer;
```
Defined in: [src/protocol/repeater.ts:324](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L324)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------------ | -------- |
| `destPublicKeyHex` | `string` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# buildSendTracePath
```ts
function buildSendTracePath(opts): Buffer;
```
Defined in: [src/protocol/repeater.ts:373](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L373)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------------- | -------------------------------------------------------------------------------- |
| `opts` | { `authCode`: `number`; `flags?`: `number`; `path`: `Buffer`; `tag`: `number`; } |
| `opts.authCode` | `number` |
| `opts.flags?` | `number` |
| `opts.path` | `Buffer` |
| `opts.tag` | `number` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# decodeOnAirPacket
```ts
function decodeOnAirPacket(input): OnAirPacket;
```
Defined in: [src/protocol/onAirPackets.ts:69](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/onAirPackets.ts#L69)
Decode a full on-air mesh packet (header + path + payload) into a tagged union. Total — never throws; unparseable or unsupported input yields the `raw` fallback variant. Accepts a hex string or raw bytes.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------------------------------------- |
| `input` | `string` \| `Uint8Array`<`ArrayBufferLike`> |
## Returns
[Section titled “Returns”](#returns)
[`OnAirPacket`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/onairpacket/)
# getAnonReqTypeName
```ts
function getAnonReqTypeName(anonReqType): string;
```
Defined in: [src/protocol/codes.ts:387](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L387)
Map an ANON\_REQ\_TYPE byte to its enum key name (e.g. 0x01 → ‘REGIONS’), or ‘UNKNOWN’ if unmapped. Note a leading 0 or ASCII byte (>= 0x20) is a password login rather than one of these query sub-types.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ------------- | -------- |
| `anonReqType` | `number` |
## Returns
[Section titled “Returns”](#returns)
`string`
# getRequestTypeName
```ts
function getRequestTypeName(reqType): string;
```
Defined in: [src/protocol/codes.ts:380](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L380)
Map a REQ\_TYPE byte to its enum key name (e.g. 0x05 → ‘GET\_ACCESS\_LIST’), or ‘UNKNOWN’ if unmapped.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `reqType` | `number` |
## Returns
[Section titled “Returns”](#returns)
`string`
# parseAclList
```ts
function parseAclList(payload): AclEntry[];
```
Defined in: [src/protocol/repeater.ts:146](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L146)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `payload` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
[`AclEntry`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/aclentry/)\[]
# parseAdvert
```ts
function parseAdvert(payload):
| Advert
| null;
```
Defined in: [src/protocol/advert.ts:93](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L93)
Parse a raw advert payload (\[pubkey]\[timestamp]\[signature]\[app\_data]).
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `payload` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`Advert`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/advert/) | `null`
# parseAdvertAppData
```ts
function parseAdvertAppData(appData):
| AdvertAppData
| null;
```
Defined in: [src/protocol/advert.ts:59](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L59)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `appData` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`AdvertAppData`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/advertappdata/) | `null`
# parseAnonOwnerInfo
```ts
function parseAnonOwnerInfo(payload):
| OwnerInfo
| null;
```
Defined in: [src/protocol/repeater.ts:226](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L226)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `payload` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`OwnerInfo`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/ownerinfo/) | `null`
# parseAvgMinMax
```ts
function parseAvgMinMax(body):
| AvgMinMaxResult
| null;
```
Defined in: [src/protocol/repeater.ts:721](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L721)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `body` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`AvgMinMaxResult`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/avgminmaxresult/) | `null`
# parseBinaryResponse
```ts
function parseBinaryResponse(frame):
| BinaryResponse
| null;
```
Defined in: [src/protocol/repeater.ts:82](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L82)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`BinaryResponse`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/binaryresponse/) | `null`
# parseCompanionFrame
```ts
function parseCompanionFrame(frame):
| ParsedFrame
| null;
```
Defined in: [src/protocol/frame.ts:90](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/frame.ts#L90)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`ParsedFrame`](/meshcore-ts/api/andyshinn/namespaces/protocol/type-aliases/parsedframe/) | `null`
# parseContactBlob
```ts
function parseContactBlob(blob):
| Advert
| null;
```
Defined in: [src/protocol/advert.ts:121](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L121)
Parse an export/import contact blob — a mesh Packet wrapping an advert — returning the advert, or null when it isn’t a well-formed advert packet.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `blob` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`Advert`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/advert/) | `null`
# parseLocalStats
```ts
function parseLocalStats(frame):
| LocalStats
| null;
```
Defined in: [src/protocol/repeater.ts:268](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L268)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`LocalStats`](/meshcore-ts/api/andyshinn/namespaces/protocol/type-aliases/localstats/) | `null`
# parseLoginFail
```ts
function parseLoginFail(frame):
| LoginFail
| null;
```
Defined in: [src/protocol/repeater.ts:51](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L51)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`LoginFail`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/loginfail/) | `null`
# parseLoginSuccess
```ts
function parseLoginSuccess(frame):
| LoginSuccess
| null;
```
Defined in: [src/protocol/repeater.ts:20](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L20)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`LoginSuccess`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/loginsuccess/) | `null`
# parseMeshPacket
```ts
function parseMeshPacket(bytes):
| MeshPacketHeader
| null;
```
Defined in: [src/protocol/meshPacket.ts:63](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L63)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `bytes` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`MeshPacketHeader`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/meshpacketheader/) | `null`
# parseNeighbours
```ts
function parseNeighbours(payload, prefixLen):
| NeighboursPage
| null;
```
Defined in: [src/protocol/repeater.ts:177](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L177)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| ----------- | -------- |
| `payload` | `Buffer` |
| `prefixLen` | `number` |
## Returns
[Section titled “Returns”](#returns)
\| [`NeighboursPage`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/neighbourspage/) | `null`
# parseOwnerInfo
```ts
function parseOwnerInfo(payload): OwnerInfo;
```
Defined in: [src/protocol/repeater.ts:205](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L205)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `payload` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
[`OwnerInfo`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/ownerinfo/)
# parsePublicKey
```ts
function parsePublicKey(publicKeyHex, label): Buffer;
```
Defined in: [src/protocol/pubkey.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/pubkey.ts#L14)
Decode a full 32-byte public key from hex, rejecting anything that isn’t exactly 64 valid hex chars. `Buffer.from(hex, 'hex')` silently truncates an odd trailing nibble, stops at the first non-hex char, and over-allocates for overlong input — so a bare `length < 32` check lets malformed/overlong keys alias to the same 32 bytes on the wire. Validating up front keeps distinct invalid inputs distinct (they throw) instead of being truncated. `label` names the caller for the error message.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| -------------- | -------- |
| `publicKeyHex` | `string` |
| `label` | `string` |
## Returns
[Section titled “Returns”](#returns)
`Buffer`
# parseRawData
```ts
function parseRawData(frame):
| RawData
| null;
```
Defined in: [src/protocol/repeater.ts:63](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L63)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`RawData`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/rawdata/) | `null`
# parseStatusResponse
```ts
function parseStatusResponse(frame):
| StatusResponse
| null;
```
Defined in: [src/protocol/repeater.ts:448](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L448)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`StatusResponse`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/statusresponse/) | `null`
# parseTelemetryLpp
```ts
function parseTelemetryLpp(lpp): TelemetryField[];
```
Defined in: [src/protocol/repeater.ts:529](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L529)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `lpp` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
[`TelemetryField`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/telemetryfield/)\[]
# parseTelemetryResponse
```ts
function parseTelemetryResponse(frame):
| TelemetryResponse
| null;
```
Defined in: [src/protocol/repeater.ts:512](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L512)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`TelemetryResponse`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/telemetryresponse/) | `null`
# parseTraceData
```ts
function parseTraceData(frame):
| TraceData
| null;
```
Defined in: [src/protocol/repeater.ts:114](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L114)
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `frame` | `Buffer` |
## Returns
[Section titled “Returns”](#returns)
\| [`TraceData`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/tracedata/) | `null`
# verifyAdvert
```ts
function verifyAdvert(advert): boolean;
```
Defined in: [src/protocol/advert.ts:141](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L141)
Verify an advert’s ed25519 signature against its own public key. Returns false (never throws) on a malformed key/signature.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------- |
| `advert` | [`Advert`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/advert/) |
## Returns
[Section titled “Returns”](#returns)
`boolean`
# AclEntry
Defined in: [src/protocol/repeater.ts:139](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L139)
## Properties
[Section titled “Properties”](#properties)
### isAdmin
[Section titled “isAdmin”](#isadmin)
```ts
isAdmin: boolean;
```
Defined in: [src/protocol/repeater.ts:142](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L142)
***
### isGuest
[Section titled “isGuest”](#isguest)
```ts
isGuest: boolean;
```
Defined in: [src/protocol/repeater.ts:143](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L143)
***
### permissions
[Section titled “permissions”](#permissions)
```ts
permissions: number;
```
Defined in: [src/protocol/repeater.ts:141](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L141)
***
### pubKeyPrefixHex
[Section titled “pubKeyPrefixHex”](#pubkeyprefixhex)
```ts
pubKeyPrefixHex: string;
```
Defined in: [src/protocol/repeater.ts:140](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L140)
# Advert
Defined in: [src/protocol/advert.ts:46](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L46)
## Properties
[Section titled “Properties”](#properties)
### appData
[Section titled “appData”](#appdata)
```ts
appData: AdvertAppData;
```
Defined in: [src/protocol/advert.ts:50](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L50)
***
### appDataHex
[Section titled “appDataHex”](#appdatahex)
```ts
appDataHex: string;
```
Defined in: [src/protocol/advert.ts:51](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L51)
***
### publicKeyHex
[Section titled “publicKeyHex”](#publickeyhex)
```ts
publicKeyHex: string;
```
Defined in: [src/protocol/advert.ts:47](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L47)
***
### signatureHex
[Section titled “signatureHex”](#signaturehex)
```ts
signatureHex: string;
```
Defined in: [src/protocol/advert.ts:49](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L49)
***
### signedMessage
[Section titled “signedMessage”](#signedmessage)
```ts
signedMessage: Buffer;
```
Defined in: [src/protocol/advert.ts:53](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L53)
The exact bytes the signature covers: pub\_key || timestamp || app\_data.
***
### timestampUnix
[Section titled “timestampUnix”](#timestampunix)
```ts
timestampUnix: number;
```
Defined in: [src/protocol/advert.ts:48](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L48)
# AdvertAppData
Defined in: [src/protocol/advert.ts:37](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L37)
## Properties
[Section titled “Properties”](#properties)
### feat1?
[Section titled “feat1?”](#feat1)
```ts
optional feat1?: number;
```
Defined in: [src/protocol/advert.ts:41](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L41)
***
### feat2?
[Section titled “feat2?”](#feat2)
```ts
optional feat2?: number;
```
Defined in: [src/protocol/advert.ts:42](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L42)
***
### latlon?
[Section titled “latlon?”](#latlon)
```ts
optional latlon?: object;
```
Defined in: [src/protocol/advert.ts:40](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L40)
#### lat
[Section titled “lat”](#lat)
```ts
lat: number;
```
#### lon
[Section titled “lon”](#lon)
```ts
lon: number;
```
***
### name?
[Section titled “name?”](#name)
```ts
optional name?: string;
```
Defined in: [src/protocol/advert.ts:43](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L43)
***
### type
[Section titled “type”](#type)
```ts
type: number;
```
Defined in: [src/protocol/advert.ts:39](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/advert.ts#L39)
ADV\_TYPE\_\* (1=chat, 2=repeater, 3=room, 4=sensor).
# AvgMinMaxResult
Defined in: [src/protocol/repeater.ts:713](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L713)
## Properties
[Section titled “Properties”](#properties)
### nowUnix
[Section titled “nowUnix”](#nowunix)
```ts
nowUnix: number;
```
Defined in: [src/protocol/repeater.ts:715](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L715)
Repeater’s RTC time (unix seconds) at the moment it built the response.
***
### series
[Section titled “series”](#series)
```ts
series: AvgMinMaxSeries[];
```
Defined in: [src/protocol/repeater.ts:716](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L716)
# AvgMinMaxSeries
Defined in: [src/protocol/repeater.ts:702](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L702)
## Properties
[Section titled “Properties”](#properties)
### avg
[Section titled “avg”](#avg)
```ts
avg: number;
```
Defined in: [src/protocol/repeater.ts:710](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L710)
***
### channel
[Section titled “channel”](#channel)
```ts
channel: number;
```
Defined in: [src/protocol/repeater.ts:703](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L703)
***
### lppType
[Section titled “lppType”](#lpptype)
```ts
lppType: number;
```
Defined in: [src/protocol/repeater.ts:704](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L704)
***
### max
[Section titled “max”](#max)
```ts
max: number;
```
Defined in: [src/protocol/repeater.ts:709](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L709)
***
### min
[Section titled “min”](#min)
```ts
min: number;
```
Defined in: [src/protocol/repeater.ts:708](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L708)
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/protocol/repeater.ts:706](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L706)
***
### typeHex
[Section titled “typeHex”](#typehex)
```ts
typeHex: string;
```
Defined in: [src/protocol/repeater.ts:705](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L705)
***
### unit?
[Section titled “unit?”](#unit)
```ts
optional unit?: string;
```
Defined in: [src/protocol/repeater.ts:707](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L707)
# BinaryResponse
Defined in: [src/protocol/repeater.ts:76](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L76)
## Properties
[Section titled “Properties”](#properties)
### payload
[Section titled “payload”](#payload)
```ts
payload: Buffer;
```
Defined in: [src/protocol/repeater.ts:79](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L79)
***
### payloadHex
[Section titled “payloadHex”](#payloadhex)
```ts
payloadHex: string;
```
Defined in: [src/protocol/repeater.ts:78](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L78)
***
### tagHex
[Section titled “tagHex”](#taghex)
```ts
tagHex: string;
```
Defined in: [src/protocol/repeater.ts:77](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L77)
# LoginFail
Defined in: [src/protocol/repeater.ts:47](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L47)
## Properties
[Section titled “Properties”](#properties)
### pubKeyPrefixHex
[Section titled “pubKeyPrefixHex”](#pubkeyprefixhex)
```ts
pubKeyPrefixHex: string;
```
Defined in: [src/protocol/repeater.ts:48](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L48)
# LoginSuccess
Defined in: [src/protocol/repeater.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L11)
## Properties
[Section titled “Properties”](#properties)
### aclPermissions
[Section titled “aclPermissions”](#aclpermissions)
```ts
aclPermissions: number | null;
```
Defined in: [src/protocol/repeater.ts:15](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L15)
***
### firmwareVerLevel
[Section titled “firmwareVerLevel”](#firmwareverlevel)
```ts
firmwareVerLevel: number | null;
```
Defined in: [src/protocol/repeater.ts:16](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L16)
***
### isAdmin
[Section titled “isAdmin”](#isadmin)
```ts
isAdmin: boolean;
```
Defined in: [src/protocol/repeater.ts:17](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L17)
***
### permissions
[Section titled “permissions”](#permissions)
```ts
permissions: number;
```
Defined in: [src/protocol/repeater.ts:12](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L12)
***
### pubKeyPrefixHex
[Section titled “pubKeyPrefixHex”](#pubkeyprefixhex)
```ts
pubKeyPrefixHex: string;
```
Defined in: [src/protocol/repeater.ts:13](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L13)
***
### serverTagHex
[Section titled “serverTagHex”](#servertaghex)
```ts
serverTagHex: string | null;
```
Defined in: [src/protocol/repeater.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L14)
# MeshPacketHeader
Defined in: [src/protocol/meshPacket.ts:43](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L43)
## Properties
[Section titled “Properties”](#properties)
### hashCount
[Section titled “hashCount”](#hashcount)
```ts
hashCount: number;
```
Defined in: [src/protocol/meshPacket.ts:50](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L50)
Number of hops in the path. May be 0 (originator emitted with empty path).
***
### hashSize
[Section titled “hashSize”](#hashsize)
```ts
hashSize: number;
```
Defined in: [src/protocol/meshPacket.ts:48](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L48)
Bytes per hop in the path (1, 2, or 3). 4 is reserved by firmware.
***
### pathHex
[Section titled “pathHex”](#pathhex)
```ts
pathHex: string;
```
Defined in: [src/protocol/meshPacket.ts:52](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L52)
Hex path bytes (hashCount × hashSize). Empty string when hashCount=0.
***
### payload
[Section titled “payload”](#payload)
```ts
payload: Buffer;
```
Defined in: [src/protocol/meshPacket.ts:56](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L56)
Decrypted-or-not body. For GRP\_TXT, format is: \[channel\_hash 1B]\[MAC 2B]\[encrypted: ts u32 LE + “name: text”]
***
### payloadType
[Section titled “payloadType”](#payloadtype)
```ts
payloadType: number;
```
Defined in: [src/protocol/meshPacket.ts:45](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L45)
***
### payloadVer
[Section titled “payloadVer”](#payloadver)
```ts
payloadVer: number;
```
Defined in: [src/protocol/meshPacket.ts:46](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L46)
***
### routeType
[Section titled “routeType”](#routetype)
```ts
routeType: number;
```
Defined in: [src/protocol/meshPacket.ts:44](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L44)
***
### transportCodesHex?
[Section titled “transportCodesHex?”](#transportcodeshex)
```ts
optional transportCodesHex?: string;
```
Defined in: [src/protocol/meshPacket.ts:53](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L53)
# Neighbour
Defined in: [src/protocol/repeater.ts:166](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L166)
## Properties
[Section titled “Properties”](#properties)
### heardSecsAgo
[Section titled “heardSecsAgo”](#heardsecsago)
```ts
heardSecsAgo: number;
```
Defined in: [src/protocol/repeater.ts:168](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L168)
***
### pubKeyPrefixHex
[Section titled “pubKeyPrefixHex”](#pubkeyprefixhex)
```ts
pubKeyPrefixHex: string;
```
Defined in: [src/protocol/repeater.ts:167](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L167)
***
### snrDb
[Section titled “snrDb”](#snrdb)
```ts
snrDb: number;
```
Defined in: [src/protocol/repeater.ts:169](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L169)
# NeighboursPage
Defined in: [src/protocol/repeater.ts:172](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L172)
## Properties
[Section titled “Properties”](#properties)
### neighbours
[Section titled “neighbours”](#neighbours)
```ts
neighbours: Neighbour[];
```
Defined in: [src/protocol/repeater.ts:174](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L174)
***
### total
[Section titled “total”](#total)
```ts
total: number;
```
Defined in: [src/protocol/repeater.ts:173](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L173)
# OnAirPacket
Defined in: [src/protocol/onAirPackets.ts:8](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/onAirPackets.ts#L8)
A structurally-decoded MeshCore on-air packet. `header` is null when the input bytes do not parse as a mesh packet (e.g. a 0x84 sentinel frame or a truncated buffer); in that case `payload` is the `raw` fallback variant.
## Properties
[Section titled “Properties”](#properties)
### header
[Section titled “header”](#header)
```ts
header:
| MeshPacketHeader
| null;
```
Defined in: [src/protocol/onAirPackets.ts:9](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/onAirPackets.ts#L9)
***
### payload
[Section titled “payload”](#payload)
```ts
payload: OnAirPayload;
```
Defined in: [src/protocol/onAirPackets.ts:12](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/onAirPackets.ts#L12)
***
### payloadTypeName
[Section titled “payloadTypeName”](#payloadtypename)
```ts
payloadTypeName: string;
```
Defined in: [src/protocol/onAirPackets.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/onAirPackets.ts#L11)
Enum key for `header.payloadType` (e.g. ‘GRP\_TXT’); ‘UNKNOWN’ if absent.
# OwnerInfo
Defined in: [src/protocol/repeater.ts:199](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L199)
## Properties
[Section titled “Properties”](#properties)
### firmwareVersion
[Section titled “firmwareVersion”](#firmwareversion)
```ts
firmwareVersion: string;
```
Defined in: [src/protocol/repeater.ts:200](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L200)
***
### nodeName
[Section titled “nodeName”](#nodename)
```ts
nodeName: string;
```
Defined in: [src/protocol/repeater.ts:201](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L201)
***
### ownerInfo
[Section titled “ownerInfo”](#ownerinfo)
```ts
ownerInfo: string;
```
Defined in: [src/protocol/repeater.ts:202](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L202)
# RawData
Defined in: [src/protocol/repeater.ts:57](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L57)
## Properties
[Section titled “Properties”](#properties)
### payloadHex
[Section titled “payloadHex”](#payloadhex)
```ts
payloadHex: string;
```
Defined in: [src/protocol/repeater.ts:60](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L60)
***
### rssi
[Section titled “rssi”](#rssi)
```ts
rssi: number;
```
Defined in: [src/protocol/repeater.ts:59](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L59)
***
### snrDb
[Section titled “snrDb”](#snrdb)
```ts
snrDb: number;
```
Defined in: [src/protocol/repeater.ts:58](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L58)
# StatusField
Defined in: [src/protocol/repeater.ts:442](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L442)
## Properties
[Section titled “Properties”](#properties)
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/protocol/repeater.ts:443](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L443)
***
### unit?
[Section titled “unit?”](#unit)
```ts
optional unit?: string;
```
Defined in: [src/protocol/repeater.ts:445](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L445)
***
### value
[Section titled “value”](#value)
```ts
value: string | number;
```
Defined in: [src/protocol/repeater.ts:444](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L444)
# StatusResponse
Defined in: [src/protocol/repeater.ts:417](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L417)
## Properties
[Section titled “Properties”](#properties)
### fields
[Section titled “fields”](#fields)
```ts
fields: StatusField[];
```
Defined in: [src/protocol/repeater.ts:420](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L420)
***
### payloadHex
[Section titled “payloadHex”](#payloadhex)
```ts
payloadHex: string;
```
Defined in: [src/protocol/repeater.ts:419](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L419)
***
### senderPubKeyPrefixHex
[Section titled “senderPubKeyPrefixHex”](#senderpubkeyprefixhex)
```ts
senderPubKeyPrefixHex: string;
```
Defined in: [src/protocol/repeater.ts:418](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L418)
# TelemetryField
Defined in: [src/protocol/repeater.ts:504](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L504)
## Properties
[Section titled “Properties”](#properties)
### channel
[Section titled “channel”](#channel)
```ts
channel: number;
```
Defined in: [src/protocol/repeater.ts:505](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L505)
***
### name
[Section titled “name”](#name)
```ts
name: string;
```
Defined in: [src/protocol/repeater.ts:507](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L507)
***
### typeHex
[Section titled “typeHex”](#typehex)
```ts
typeHex: string;
```
Defined in: [src/protocol/repeater.ts:506](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L506)
***
### unit?
[Section titled “unit?”](#unit)
```ts
optional unit?: string;
```
Defined in: [src/protocol/repeater.ts:509](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L509)
***
### value
[Section titled “value”](#value)
```ts
value: string | number;
```
Defined in: [src/protocol/repeater.ts:508](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L508)
# TelemetryResponse
Defined in: [src/protocol/repeater.ts:498](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L498)
## Properties
[Section titled “Properties”](#properties)
### fields
[Section titled “fields”](#fields)
```ts
fields: TelemetryField[];
```
Defined in: [src/protocol/repeater.ts:501](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L501)
***
### payloadHex
[Section titled “payloadHex”](#payloadhex)
```ts
payloadHex: string;
```
Defined in: [src/protocol/repeater.ts:500](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L500)
***
### senderPubKeyPrefixHex
[Section titled “senderPubKeyPrefixHex”](#senderpubkeyprefixhex)
```ts
senderPubKeyPrefixHex: string;
```
Defined in: [src/protocol/repeater.ts:499](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L499)
# TraceData
Defined in: [src/protocol/repeater.ts:105](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L105)
## Properties
[Section titled “Properties”](#properties)
### authHex
[Section titled “authHex”](#authhex)
```ts
authHex: string;
```
Defined in: [src/protocol/repeater.ts:107](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L107)
***
### finalSnrDb
[Section titled “finalSnrDb”](#finalsnrdb)
```ts
finalSnrDb: number;
```
Defined in: [src/protocol/repeater.ts:111](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L111)
***
### flags
[Section titled “flags”](#flags)
```ts
flags: number;
```
Defined in: [src/protocol/repeater.ts:108](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L108)
***
### hops
[Section titled “hops”](#hops)
```ts
hops: object[];
```
Defined in: [src/protocol/repeater.ts:110](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L110)
#### hashHex
[Section titled “hashHex”](#hashhex)
```ts
hashHex: string;
```
#### snrDb
[Section titled “snrDb”](#snrdb)
```ts
snrDb: number;
```
***
### pathHashSize
[Section titled “pathHashSize”](#pathhashsize)
```ts
pathHashSize: number;
```
Defined in: [src/protocol/repeater.ts:109](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L109)
***
### tagHex
[Section titled “tagHex”](#taghex)
```ts
tagHex: string;
```
Defined in: [src/protocol/repeater.ts:106](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L106)
# LocalStats
```ts
type LocalStats =
| {
battMv: number;
errFlags: number;
kind: "core";
queueLen: number;
uptimeSecs: number;
}
| {
kind: "radio";
lastRssi: number;
lastSnrDb: number;
noiseFloor: number;
rxAirSecs: number;
txAirSecs: number;
}
| {
kind: "packets";
nRecvDirect: number;
nRecvErrors: number;
nRecvFlood: number;
nSentDirect: number;
nSentFlood: number;
recv: number;
sent: number;
};
```
Defined in: [src/protocol/repeater.ts:241](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/repeater.ts#L241)
# MeshSource
```ts
type MeshSource = "raw" | "log_rx";
```
Defined in: [src/protocol/frame.ts:70](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/frame.ts#L70)
Which push delivered a mesh packet. Only `'log_rx'` (0x88) is safe to feed into the mesh-packet parser — 0x84 (`'raw'`) writes a 0xFF reserved byte where path\_len would be, so its bytes don’t follow the Packet wire format.
# OnAirPayload
```ts
type OnAirPayload =
| {
advert: Advert;
kind: "advert";
}
| {
cipherLen: number;
destHash: string;
kind: "txtMsg";
macHex: string;
srcHash: string;
}
| {
channelHash: string;
cipherLen: number;
kind: "grpTxt";
macHex: string;
}
| {
cipherLen: number;
destHash: string;
kind: "req";
macHex: string;
srcHash: string;
}
| {
cipherLen: number;
destHash: string;
kind: "response";
macHex: string;
srcHash: string;
}
| {
cipherLen: number;
destHash: string;
kind: "anonReq";
macHex: string;
senderPubKeyHex: string;
}
| {
checksumHex: string;
kind: "ack";
}
| {
extraHex: string;
extraType: number;
hashSize: number;
kind: "path";
pathHashesHex: string;
pathLen: number;
}
| {
authCode: number;
flags: number;
hopCount: number;
kind: "trace";
pathHashesHex: string;
snr: number[];
tag: number;
}
| {
kind: "controlDiscoverReq";
prefixOnly: boolean;
since: number;
tag: number;
typeFilter: number;
}
| {
kind: "controlDiscoverResp";
nodeType: number;
publicKeyHex: string;
snr: number;
tag: number;
}
| {
kind: "controlOther";
payloadHex: string;
rawFlags: number;
}
| {
kind: "raw";
payloadHex: string;
payloadType: number | null;
};
```
Defined in: [src/protocol/onAirPackets.ts:17](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/onAirPackets.ts#L17)
Structural (never decrypted) view of an on-air payload, discriminated on `kind`. Cipher bodies are reported only as a length (`cipherLen`).
# ParsedFrame
```ts
type ParsedFrame =
| {
kind: "mesh";
meshBytes: Buffer;
meshHex: string;
rssi: number;
snr: number;
source: MeshSource;
}
| {
code: number;
codeName: string;
kind: "companion";
payloadBytes: Buffer;
payloadHex: string;
};
```
Defined in: [src/protocol/frame.ts:72](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/frame.ts#L72)
## Union Members
[Section titled “Union Members”](#union-members)
### Type Literal
[Section titled “Type Literal”](#type-literal)
```ts
{
kind: "mesh";
meshBytes: Buffer;
meshHex: string;
rssi: number;
snr: number;
source: MeshSource;
}
```
#### kind
[Section titled “kind”](#kind)
```ts
kind: "mesh";
```
#### meshBytes
[Section titled “meshBytes”](#meshbytes)
```ts
meshBytes: Buffer;
```
#### meshHex
[Section titled “meshHex”](#meshhex)
```ts
meshHex: string;
```
#### rssi
[Section titled “rssi”](#rssi)
```ts
rssi: number;
```
#### snr
[Section titled “snr”](#snr)
```ts
snr: number;
```
#### source
[Section titled “source”](#source)
```ts
source: MeshSource;
```
See [MeshSource](/meshcore-ts/api/andyshinn/namespaces/protocol/type-aliases/meshsource/).
***
### Type Literal
[Section titled “Type Literal”](#type-literal-1)
```ts
{
code: number;
codeName: string;
kind: "companion";
payloadBytes: Buffer;
payloadHex: string;
}
```
# PayloadKind
```ts
type PayloadKind = OnAirPayload["kind"];
```
Defined in: [src/protocol/onAirPackets.ts:37](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/onAirPackets.ts#L37)
Union of the `kind` discriminant values (`'advert' | 'grpTxt' | …`); interchangeable with `PayloadKind` values.
# ADV_TYPE
```ts
const ADV_TYPE: object;
```
Defined in: [src/protocol/codes.ts:300](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L300)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### CHAT
[Section titled “CHAT”](#chat)
```ts
readonly CHAT: 1 = 1;
```
### REPEATER
[Section titled “REPEATER”](#repeater)
```ts
readonly REPEATER: 2 = 2;
```
### ROOM
[Section titled “ROOM”](#room)
```ts
readonly ROOM: 3 = 3;
```
### SENSOR
[Section titled “SENSOR”](#sensor)
```ts
readonly SENSOR: 4 = 4;
```
# ANON_REQ_TYPE
```ts
const ANON_REQ_TYPE: object;
```
Defined in: [src/protocol/codes.ts:360](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L360)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### BASIC
[Section titled “BASIC”](#basic)
```ts
readonly BASIC: 3 = 0x03;
```
### OWNER
[Section titled “OWNER”](#owner)
```ts
readonly OWNER: 2 = 0x02;
```
### REGIONS
[Section titled “REGIONS”](#regions)
```ts
readonly REGIONS: 1 = 0x01;
```
# APP_PROTOCOL_VERSION
```ts
const APP_PROTOCOL_VERSION: 4 = 4;
```
Defined in: [src/protocol/codes.ts:210](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L210)
# CMD
```ts
const CMD: object;
```
Defined in: [src/protocol/codes.ts:12](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L12)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### ADD\_UPDATE\_CONTACT
[Section titled “ADD\_UPDATE\_CONTACT”](#add_update_contact)
```ts
readonly ADD_UPDATE_CONTACT: 9 = 0x09;
```
### APP\_START
[Section titled “APP\_START”](#app_start)
```ts
readonly APP_START: 1 = 0x01;
```
### DEVICE\_QUERY
[Section titled “DEVICE\_QUERY”](#device_query)
```ts
readonly DEVICE_QUERY: 22 = 0x16;
```
### EXPORT\_CONTACT
[Section titled “EXPORT\_CONTACT”](#export_contact)
```ts
readonly EXPORT_CONTACT: 17 = 0x11;
```
### EXPORT\_PRIVATE\_KEY
[Section titled “EXPORT\_PRIVATE\_KEY”](#export_private_key)
```ts
readonly EXPORT_PRIVATE_KEY: 23 = 0x17;
```
### FACTORY\_RESET
[Section titled “FACTORY\_RESET”](#factory_reset)
```ts
readonly FACTORY_RESET: 51 = 0x33;
```
### GET\_ADVERT\_PATH
[Section titled “GET\_ADVERT\_PATH”](#get_advert_path)
```ts
readonly GET_ADVERT_PATH: 42 = 0x2a;
```
### GET\_ALLOWED\_REPEAT\_FREQ
[Section titled “GET\_ALLOWED\_REPEAT\_FREQ”](#get_allowed_repeat_freq)
```ts
readonly GET_ALLOWED_REPEAT_FREQ: 60 = 0x3c;
```
### GET\_AUTO\_ADD\_CONFIG
[Section titled “GET\_AUTO\_ADD\_CONFIG”](#get_auto_add_config)
```ts
readonly GET_AUTO_ADD_CONFIG: 59 = 0x3b;
```
### GET\_BATT\_AND\_STORAGE
[Section titled “GET\_BATT\_AND\_STORAGE”](#get_batt_and_storage)
```ts
readonly GET_BATT_AND_STORAGE: 20 = 0x14;
```
### GET\_CHANNEL
[Section titled “GET\_CHANNEL”](#get_channel)
```ts
readonly GET_CHANNEL: 31 = 0x1f;
```
### GET\_CONTACT\_BY\_KEY
[Section titled “GET\_CONTACT\_BY\_KEY”](#get_contact_by_key)
```ts
readonly GET_CONTACT_BY_KEY: 30 = 0x1e;
```
### GET\_CONTACTS
[Section titled “GET\_CONTACTS”](#get_contacts)
```ts
readonly GET_CONTACTS: 4 = 0x04;
```
### GET\_CUSTOM\_VAR
[Section titled “GET\_CUSTOM\_VAR”](#get_custom_var)
```ts
readonly GET_CUSTOM_VAR: 40 = 0x28;
```
### GET\_DEFAULT\_FLOOD\_SCOPE
[Section titled “GET\_DEFAULT\_FLOOD\_SCOPE”](#get_default_flood_scope)
```ts
readonly GET_DEFAULT_FLOOD_SCOPE: 64 = 0x40;
```
### GET\_DEVICE\_TIME
[Section titled “GET\_DEVICE\_TIME”](#get_device_time)
```ts
readonly GET_DEVICE_TIME: 5 = 0x05;
```
### GET\_NEXT\_MSG
[Section titled “GET\_NEXT\_MSG”](#get_next_msg)
```ts
readonly GET_NEXT_MSG: 10 = 0x0a;
```
### GET\_STATS
[Section titled “GET\_STATS”](#get_stats)
```ts
readonly GET_STATS: 56 = 0x38;
```
### GET\_TUNING\_PARAMS
[Section titled “GET\_TUNING\_PARAMS”](#get_tuning_params)
```ts
readonly GET_TUNING_PARAMS: 43 = 0x2b;
```
### HAS\_CONNECTION
[Section titled “HAS\_CONNECTION”](#has_connection)
```ts
readonly HAS_CONNECTION: 28 = 0x1c;
```
### IMPORT\_CONTACT
[Section titled “IMPORT\_CONTACT”](#import_contact)
```ts
readonly IMPORT_CONTACT: 18 = 0x12;
```
### IMPORT\_PRIVATE\_KEY
[Section titled “IMPORT\_PRIVATE\_KEY”](#import_private_key)
```ts
readonly IMPORT_PRIVATE_KEY: 24 = 0x18;
```
### LOGOUT
[Section titled “LOGOUT”](#logout)
```ts
readonly LOGOUT: 29 = 0x1d;
```
### REBOOT
[Section titled “REBOOT”](#reboot)
```ts
readonly REBOOT: 19 = 0x13;
```
### REMOVE\_CONTACT
[Section titled “REMOVE\_CONTACT”](#remove_contact)
```ts
readonly REMOVE_CONTACT: 15 = 0x0f;
```
### RESET\_PATH
[Section titled “RESET\_PATH”](#reset_path)
```ts
readonly RESET_PATH: 13 = 0x0d;
```
### SEND\_ANON\_REQ
[Section titled “SEND\_ANON\_REQ”](#send_anon_req)
```ts
readonly SEND_ANON_REQ: 57 = 0x39;
```
### SEND\_BINARY\_REQ
[Section titled “SEND\_BINARY\_REQ”](#send_binary_req)
```ts
readonly SEND_BINARY_REQ: 50 = 0x32;
```
### SEND\_CHAN\_TXT\_MSG
[Section titled “SEND\_CHAN\_TXT\_MSG”](#send_chan_txt_msg)
```ts
readonly SEND_CHAN_TXT_MSG: 3 = 0x03;
```
### SEND\_CHANNEL\_DATA
[Section titled “SEND\_CHANNEL\_DATA”](#send_channel_data)
```ts
readonly SEND_CHANNEL_DATA: 62 = 0x3e;
```
### SEND\_CONTROL\_DATA
[Section titled “SEND\_CONTROL\_DATA”](#send_control_data)
```ts
readonly SEND_CONTROL_DATA: 55 = 0x37;
```
### SEND\_LOGIN
[Section titled “SEND\_LOGIN”](#send_login)
```ts
readonly SEND_LOGIN: 26 = 0x1a;
```
### SEND\_PATH\_DISCOVERY\_REQ
[Section titled “SEND\_PATH\_DISCOVERY\_REQ”](#send_path_discovery_req)
```ts
readonly SEND_PATH_DISCOVERY_REQ: 52 = 0x34;
```
### SEND\_RAW\_DATA
[Section titled “SEND\_RAW\_DATA”](#send_raw_data)
```ts
readonly SEND_RAW_DATA: 25 = 0x19;
```
### SEND\_RAW\_PACKET
[Section titled “SEND\_RAW\_PACKET”](#send_raw_packet)
```ts
readonly SEND_RAW_PACKET: 65 = 0x41;
```
### SEND\_SELF\_ADVERT
[Section titled “SEND\_SELF\_ADVERT”](#send_self_advert)
```ts
readonly SEND_SELF_ADVERT: 7 = 0x07;
```
### SEND\_STATUS\_REQ
[Section titled “SEND\_STATUS\_REQ”](#send_status_req)
```ts
readonly SEND_STATUS_REQ: 27 = 0x1b;
```
### SEND\_TELEMETRY\_REQ
[Section titled “SEND\_TELEMETRY\_REQ”](#send_telemetry_req)
```ts
readonly SEND_TELEMETRY_REQ: 39 = 0x27;
```
### SEND\_TRACE\_PATH
[Section titled “SEND\_TRACE\_PATH”](#send_trace_path)
```ts
readonly SEND_TRACE_PATH: 36 = 0x24;
```
### SEND\_TXT\_MSG
[Section titled “SEND\_TXT\_MSG”](#send_txt_msg)
```ts
readonly SEND_TXT_MSG: 2 = 0x02;
```
### SET\_ADVERT\_LATLON
[Section titled “SET\_ADVERT\_LATLON”](#set_advert_latlon)
```ts
readonly SET_ADVERT_LATLON: 14 = 0x0e;
```
### SET\_ADVERT\_NAME
[Section titled “SET\_ADVERT\_NAME”](#set_advert_name)
```ts
readonly SET_ADVERT_NAME: 8 = 0x08;
```
### SET\_AUTO\_ADD\_CONFIG
[Section titled “SET\_AUTO\_ADD\_CONFIG”](#set_auto_add_config)
```ts
readonly SET_AUTO_ADD_CONFIG: 58 = 0x3a;
```
### SET\_CHANNEL
[Section titled “SET\_CHANNEL”](#set_channel)
```ts
readonly SET_CHANNEL: 32 = 0x20;
```
### SET\_CUSTOM\_VAR
[Section titled “SET\_CUSTOM\_VAR”](#set_custom_var)
```ts
readonly SET_CUSTOM_VAR: 41 = 0x29;
```
### SET\_DEFAULT\_FLOOD\_SCOPE
[Section titled “SET\_DEFAULT\_FLOOD\_SCOPE”](#set_default_flood_scope)
```ts
readonly SET_DEFAULT_FLOOD_SCOPE: 63 = 0x3f;
```
### SET\_DEVICE\_PIN
[Section titled “SET\_DEVICE\_PIN”](#set_device_pin)
```ts
readonly SET_DEVICE_PIN: 37 = 0x25;
```
### SET\_DEVICE\_TIME
[Section titled “SET\_DEVICE\_TIME”](#set_device_time)
```ts
readonly SET_DEVICE_TIME: 6 = 0x06;
```
### SET\_FLOOD\_SCOPE\_KEY
[Section titled “SET\_FLOOD\_SCOPE\_KEY”](#set_flood_scope_key)
```ts
readonly SET_FLOOD_SCOPE_KEY: 54 = 0x36;
```
### SET\_OTHER\_PARAMS
[Section titled “SET\_OTHER\_PARAMS”](#set_other_params)
```ts
readonly SET_OTHER_PARAMS: 38 = 0x26;
```
### SET\_PATH\_HASH\_MODE
[Section titled “SET\_PATH\_HASH\_MODE”](#set_path_hash_mode)
```ts
readonly SET_PATH_HASH_MODE: 61 = 0x3d;
```
### SET\_RADIO\_PARAMS
[Section titled “SET\_RADIO\_PARAMS”](#set_radio_params)
```ts
readonly SET_RADIO_PARAMS: 11 = 0x0b;
```
### SET\_RADIO\_TX\_POWER
[Section titled “SET\_RADIO\_TX\_POWER”](#set_radio_tx_power)
```ts
readonly SET_RADIO_TX_POWER: 12 = 0x0c;
```
### SET\_TUNING\_PARAMS
[Section titled “SET\_TUNING\_PARAMS”](#set_tuning_params)
```ts
readonly SET_TUNING_PARAMS: 21 = 0x15;
```
### SHARE\_CONTACT
[Section titled “SHARE\_CONTACT”](#share_contact)
```ts
readonly SHARE_CONTACT: 16 = 0x10;
```
### SIGN\_DATA
[Section titled “SIGN\_DATA”](#sign_data)
```ts
readonly SIGN_DATA: 34 = 0x22;
```
### SIGN\_FINISH
[Section titled “SIGN\_FINISH”](#sign_finish)
```ts
readonly SIGN_FINISH: 35 = 0x23;
```
### SIGN\_START
[Section titled “SIGN\_START”](#sign_start)
```ts
readonly SIGN_START: 33 = 0x21;
```
# ERR_CODE
```ts
const ERR_CODE: object;
```
Defined in: [src/protocol/codes.ts:289](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L289)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### BAD\_STATE
[Section titled “BAD\_STATE”](#bad_state)
```ts
readonly BAD_STATE: 4 = 0x04;
```
### FILE\_IO\_ERROR
[Section titled “FILE\_IO\_ERROR”](#file_io_error)
```ts
readonly FILE_IO_ERROR: 5 = 0x05;
```
### ILLEGAL\_ARG
[Section titled “ILLEGAL\_ARG”](#illegal_arg)
```ts
readonly ILLEGAL_ARG: 6 = 0x06;
```
### NOT\_FOUND
[Section titled “NOT\_FOUND”](#not_found)
```ts
readonly NOT_FOUND: 2 = 0x02;
```
### TABLE\_FULL
[Section titled “TABLE\_FULL”](#table_full)
```ts
readonly TABLE_FULL: 3 = 0x03;
```
### UNSUPPORTED\_CMD
[Section titled “UNSUPPORTED\_CMD”](#unsupported_cmd)
```ts
readonly UNSUPPORTED_CMD: 1 = 0x01;
```
# PAYLOAD_TYPE
```ts
const PAYLOAD_TYPE: object;
```
Defined in: [src/protocol/meshPacket.ts:27](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L27)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### ACK
[Section titled “ACK”](#ack)
```ts
readonly ACK: 3 = 0x03;
```
### ADVERT
[Section titled “ADVERT”](#advert)
```ts
readonly ADVERT: 4 = 0x04;
```
### ANON\_REQ
[Section titled “ANON\_REQ”](#anon_req)
```ts
readonly ANON_REQ: 7 = 0x07;
```
### CONTROL
[Section titled “CONTROL”](#control)
```ts
readonly CONTROL: 11 = 0x0b;
```
### GRP\_DATA
[Section titled “GRP\_DATA”](#grp_data)
```ts
readonly GRP_DATA: 6 = 0x06;
```
### GRP\_TXT
[Section titled “GRP\_TXT”](#grp_txt)
```ts
readonly GRP_TXT: 5 = 0x05;
```
### MULTIPART
[Section titled “MULTIPART”](#multipart)
```ts
readonly MULTIPART: 10 = 0x0a;
```
### PATH
[Section titled “PATH”](#path)
```ts
readonly PATH: 8 = 0x08;
```
### RAW\_CUSTOM
[Section titled “RAW\_CUSTOM”](#raw_custom)
```ts
readonly RAW_CUSTOM: 15 = 0x0f;
```
### REQ
[Section titled “REQ”](#req)
```ts
readonly REQ: 0 = 0x00;
```
### RESPONSE
[Section titled “RESPONSE”](#response)
```ts
readonly RESPONSE: 1 = 0x01;
```
### TRACE
[Section titled “TRACE”](#trace)
```ts
readonly TRACE: 9 = 0x09;
```
### TXT\_MSG
[Section titled “TXT\_MSG”](#txt_msg)
```ts
readonly TXT_MSG: 2 = 0x02;
```
# PayloadKind
```ts
const PayloadKind: object;
```
Defined in: [src/protocol/onAirPackets.ts:37](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/onAirPackets.ts#L37)
Named constants for the [OnAirPayload](/meshcore-ts/api/andyshinn/namespaces/protocol/type-aliases/onairpayload/) `kind` discriminant, so consumers branch on readable names instead of bare strings: `case PayloadKind.GRP_TXT` (=== ‘grpTxt’). Values equal the `kind` literals, so the constant and the raw string are interchangeable and both narrow `payload`. Distinct from the numeric wire enum [PAYLOAD\_TYPE](/meshcore-ts/api/andyshinn/namespaces/protocol/variables/payload_type/) (keys `header.payloadType`).
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### ACK
[Section titled “ACK”](#ack)
```ts
readonly ACK: "ack" = 'ack';
```
### ADVERT
[Section titled “ADVERT”](#advert)
```ts
readonly ADVERT: "advert" = 'advert';
```
### ANON\_REQ
[Section titled “ANON\_REQ”](#anon_req)
```ts
readonly ANON_REQ: "anonReq" = 'anonReq';
```
### CONTROL\_DISCOVER\_REQ
[Section titled “CONTROL\_DISCOVER\_REQ”](#control_discover_req)
```ts
readonly CONTROL_DISCOVER_REQ: "controlDiscoverReq" = 'controlDiscoverReq';
```
### CONTROL\_DISCOVER\_RESP
[Section titled “CONTROL\_DISCOVER\_RESP”](#control_discover_resp)
```ts
readonly CONTROL_DISCOVER_RESP: "controlDiscoverResp" = 'controlDiscoverResp';
```
### CONTROL\_OTHER
[Section titled “CONTROL\_OTHER”](#control_other)
```ts
readonly CONTROL_OTHER: "controlOther" = 'controlOther';
```
### GRP\_TXT
[Section titled “GRP\_TXT”](#grp_txt)
```ts
readonly GRP_TXT: "grpTxt" = 'grpTxt';
```
### PATH
[Section titled “PATH”](#path)
```ts
readonly PATH: "path" = 'path';
```
### RAW
[Section titled “RAW”](#raw)
```ts
readonly RAW: "raw" = 'raw';
```
### REQ
[Section titled “REQ”](#req)
```ts
readonly REQ: "req" = 'req';
```
### RESPONSE
[Section titled “RESPONSE”](#response)
```ts
readonly RESPONSE: "response" = 'response';
```
### TRACE
[Section titled “TRACE”](#trace)
```ts
readonly TRACE: "trace" = 'trace';
```
### TXT\_MSG
[Section titled “TXT\_MSG”](#txt_msg)
```ts
readonly TXT_MSG: "txtMsg" = 'txtMsg';
```
# PERM_BITS
```ts
const PERM_BITS: object;
```
Defined in: [src/protocol/codes.ts:400](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L400)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### ACL\_ADMIN
[Section titled “ACL\_ADMIN”](#acl_admin)
```ts
readonly ACL_ADMIN: 3 = 0x03;
```
### ACL\_GUEST
[Section titled “ACL\_GUEST”](#acl_guest)
```ts
readonly ACL_GUEST: 0 = 0x00;
```
### ACL\_READ\_ONLY
[Section titled “ACL\_READ\_ONLY”](#acl_read_only)
```ts
readonly ACL_READ_ONLY: 1 = 0x01;
```
### ACL\_READ\_WRITE
[Section titled “ACL\_READ\_WRITE”](#acl_read_write)
```ts
readonly ACL_READ_WRITE: 2 = 0x02;
```
### ACL\_ROLE\_MASK
[Section titled “ACL\_ROLE\_MASK”](#acl_role_mask)
```ts
readonly ACL_ROLE_MASK: 3 = 0x03;
```
# PUSH
```ts
const PUSH: object;
```
Defined in: [src/protocol/codes.ts:307](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L307)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### ADVERT
[Section titled “ADVERT”](#advert)
```ts
readonly ADVERT: 128 = 0x80;
```
### BINARY\_RESPONSE
[Section titled “BINARY\_RESPONSE”](#binary_response)
```ts
readonly BINARY_RESPONSE: 140 = 0x8c;
```
### CONTACT\_DELETED
[Section titled “CONTACT\_DELETED”](#contact_deleted)
```ts
readonly CONTACT_DELETED: 143 = 0x8f;
```
### CONTACTS\_FULL
[Section titled “CONTACTS\_FULL”](#contacts_full)
```ts
readonly CONTACTS_FULL: 144 = 0x90;
```
### CONTROL\_DATA
[Section titled “CONTROL\_DATA”](#control_data)
```ts
readonly CONTROL_DATA: 142 = 0x8e;
```
### LOGIN\_FAIL
[Section titled “LOGIN\_FAIL”](#login_fail)
```ts
readonly LOGIN_FAIL: 134 = 0x86;
```
### LOGIN\_SUCCESS
[Section titled “LOGIN\_SUCCESS”](#login_success)
```ts
readonly LOGIN_SUCCESS: 133 = 0x85;
```
### MSG\_WAITING
[Section titled “MSG\_WAITING”](#msg_waiting)
```ts
readonly MSG_WAITING: 131 = 0x83;
```
### NEW\_ADVERT
[Section titled “NEW\_ADVERT”](#new_advert)
```ts
readonly NEW_ADVERT: 138 = 0x8a;
```
### PATH\_DISCOVERY\_RESPONSE
[Section titled “PATH\_DISCOVERY\_RESPONSE”](#path_discovery_response)
```ts
readonly PATH_DISCOVERY_RESPONSE: 141 = 0x8d;
```
### PATH\_UPDATED
[Section titled “PATH\_UPDATED”](#path_updated)
```ts
readonly PATH_UPDATED: 129 = 0x81;
```
### RAW\_DATA
[Section titled “RAW\_DATA”](#raw_data)
```ts
readonly RAW_DATA: 132 = 0x84;
```
### SEND\_CONFIRMED
[Section titled “SEND\_CONFIRMED”](#send_confirmed)
```ts
readonly SEND_CONFIRMED: 130 = 0x82;
```
### STATUS\_RESPONSE
[Section titled “STATUS\_RESPONSE”](#status_response)
```ts
readonly STATUS_RESPONSE: 135 = 0x87;
```
### TELEMETRY\_RESPONSE
[Section titled “TELEMETRY\_RESPONSE”](#telemetry_response)
```ts
readonly TELEMETRY_RESPONSE: 139 = 0x8b;
```
### TRACE\_DATA
[Section titled “TRACE\_DATA”](#trace_data)
```ts
readonly TRACE_DATA: 137 = 0x89;
```
# REQ_TYPE
```ts
const REQ_TYPE: object;
```
Defined in: [src/protocol/codes.ts:348](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L348)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### GET\_ACCESS\_LIST
[Section titled “GET\_ACCESS\_LIST”](#get_access_list)
```ts
readonly GET_ACCESS_LIST: 5 = 0x05;
```
### GET\_AVG\_MIN\_MAX
[Section titled “GET\_AVG\_MIN\_MAX”](#get_avg_min_max)
```ts
readonly GET_AVG_MIN_MAX: 4 = 0x04;
```
### GET\_NEIGHBOURS
[Section titled “GET\_NEIGHBOURS”](#get_neighbours)
```ts
readonly GET_NEIGHBOURS: 6 = 0x06;
```
### GET\_OWNER\_INFO
[Section titled “GET\_OWNER\_INFO”](#get_owner_info)
```ts
readonly GET_OWNER_INFO: 7 = 0x07;
```
### GET\_STATUS
[Section titled “GET\_STATUS”](#get_status)
```ts
readonly GET_STATUS: 1 = 0x01;
```
### GET\_TELEMETRY\_DATA
[Section titled “GET\_TELEMETRY\_DATA”](#get_telemetry_data)
```ts
readonly GET_TELEMETRY_DATA: 3 = 0x03;
```
### KEEP\_ALIVE
[Section titled “KEEP\_ALIVE”](#keep_alive)
```ts
readonly KEEP_ALIVE: 2 = 0x02;
```
# RESP
```ts
const RESP: object;
```
Defined in: [src/protocol/codes.ts:220](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L220)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### ADVERT\_PATH
[Section titled “ADVERT\_PATH”](#advert_path)
```ts
readonly ADVERT_PATH: 22 = 0x16;
```
### ALLOWED\_REPEAT\_FREQ
[Section titled “ALLOWED\_REPEAT\_FREQ”](#allowed_repeat_freq)
```ts
readonly ALLOWED_REPEAT_FREQ: 26 = 0x1a;
```
### AUTOADD\_CONFIG
[Section titled “AUTOADD\_CONFIG”](#autoadd_config)
```ts
readonly AUTOADD_CONFIG: 25 = 0x19;
```
### BATT\_AND\_STORAGE
[Section titled “BATT\_AND\_STORAGE”](#batt_and_storage)
```ts
readonly BATT_AND_STORAGE: 12 = 0x0c;
```
### CHANNEL\_DATA\_RECV
[Section titled “CHANNEL\_DATA\_RECV”](#channel_data_recv)
```ts
readonly CHANNEL_DATA_RECV: 27 = 0x1b;
```
### CHANNEL\_INFO
[Section titled “CHANNEL\_INFO”](#channel_info)
```ts
readonly CHANNEL_INFO: 18 = 0x12;
```
### CHANNEL\_MSG\_RECV
[Section titled “CHANNEL\_MSG\_RECV”](#channel_msg_recv)
```ts
readonly CHANNEL_MSG_RECV: 8 = 0x08;
```
### CHANNEL\_MSG\_RECV\_V3
[Section titled “CHANNEL\_MSG\_RECV\_V3”](#channel_msg_recv_v3)
```ts
readonly CHANNEL_MSG_RECV_V3: 17 = 0x11;
```
### CONTACT
[Section titled “CONTACT”](#contact)
```ts
readonly CONTACT: 3 = 0x03;
```
### CONTACT\_MSG\_RECV
[Section titled “CONTACT\_MSG\_RECV”](#contact_msg_recv)
```ts
readonly CONTACT_MSG_RECV: 7 = 0x07;
```
### CONTACT\_MSG\_RECV\_V3
[Section titled “CONTACT\_MSG\_RECV\_V3”](#contact_msg_recv_v3)
```ts
readonly CONTACT_MSG_RECV_V3: 16 = 0x10;
```
### CONTACTS\_START
[Section titled “CONTACTS\_START”](#contacts_start)
```ts
readonly CONTACTS_START: 2 = 0x02;
```
### CURR\_TIME
[Section titled “CURR\_TIME”](#curr_time)
```ts
readonly CURR_TIME: 9 = 0x09;
```
### CUSTOM\_VARS
[Section titled “CUSTOM\_VARS”](#custom_vars)
```ts
readonly CUSTOM_VARS: 21 = 0x15;
```
### DEFAULT\_FLOOD\_SCOPE
[Section titled “DEFAULT\_FLOOD\_SCOPE”](#default_flood_scope)
```ts
readonly DEFAULT_FLOOD_SCOPE: 28 = 0x1c;
```
### DEVICE\_INFO
[Section titled “DEVICE\_INFO”](#device_info)
```ts
readonly DEVICE_INFO: 13 = 0x0d;
```
### DISABLED
[Section titled “DISABLED”](#disabled)
```ts
readonly DISABLED: 15 = 0x0f;
```
### END\_OF\_CONTACTS
[Section titled “END\_OF\_CONTACTS”](#end_of_contacts)
```ts
readonly END_OF_CONTACTS: 4 = 0x04;
```
### ERR
[Section titled “ERR”](#err)
```ts
readonly ERR: 1 = 0x01;
```
### EXPORT\_CONTACT
[Section titled “EXPORT\_CONTACT”](#export_contact)
```ts
readonly EXPORT_CONTACT: 11 = 0x0b;
```
### NO\_MORE\_MESSAGES
[Section titled “NO\_MORE\_MESSAGES”](#no_more_messages)
```ts
readonly NO_MORE_MESSAGES: 10 = 0x0a;
```
### OK
[Section titled “OK”](#ok)
```ts
readonly OK: 0 = 0x00;
```
### PRIVATE\_KEY
[Section titled “PRIVATE\_KEY”](#private_key)
```ts
readonly PRIVATE_KEY: 14 = 0x0e;
```
### SELF\_INFO
[Section titled “SELF\_INFO”](#self_info)
```ts
readonly SELF_INFO: 5 = 0x05;
```
### SENT
[Section titled “SENT”](#sent)
```ts
readonly SENT: 6 = 0x06;
```
### SIGN\_START
[Section titled “SIGN\_START”](#sign_start)
```ts
readonly SIGN_START: 19 = 0x13;
```
### SIGNATURE
[Section titled “SIGNATURE”](#signature)
```ts
readonly SIGNATURE: 20 = 0x14;
```
### STATS
[Section titled “STATS”](#stats)
```ts
readonly STATS: 24 = 0x18;
```
### TUNING\_PARAMS
[Section titled “TUNING\_PARAMS”](#tuning_params)
```ts
readonly TUNING_PARAMS: 23 = 0x17;
```
# ROUTE_TYPE
```ts
const ROUTE_TYPE: object;
```
Defined in: [src/protocol/meshPacket.ts:20](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/meshPacket.ts#L20)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### DIRECT
[Section titled “DIRECT”](#direct)
```ts
readonly DIRECT: 2 = 0x02;
```
### FLOOD
[Section titled “FLOOD”](#flood)
```ts
readonly FLOOD: 1 = 0x01;
```
### TRANSPORT\_DIRECT
[Section titled “TRANSPORT\_DIRECT”](#transport_direct)
```ts
readonly TRANSPORT_DIRECT: 3 = 0x03;
```
### TRANSPORT\_FLOOD
[Section titled “TRANSPORT\_FLOOD”](#transport_flood)
```ts
readonly TRANSPORT_FLOOD: 0 = 0x00;
```
# STATS_TYPE
```ts
const STATS_TYPE: object;
```
Defined in: [src/protocol/codes.ts:391](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L391)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### CORE
[Section titled “CORE”](#core)
```ts
readonly CORE: 0 = 0x00;
```
### PACKETS
[Section titled “PACKETS”](#packets)
```ts
readonly PACKETS: 2 = 0x02;
```
### RADIO
[Section titled “RADIO”](#radio)
```ts
readonly RADIO: 1 = 0x01;
```
# TXT_TYPE
```ts
const TXT_TYPE: object;
```
Defined in: [src/protocol/codes.ts:214](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/protocol/codes.ts#L214)
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### CLI\_DATA
[Section titled “CLI\_DATA”](#cli_data)
```ts
readonly CLI_DATA: 1 = 1;
```
### PLAIN
[Section titled “PLAIN”](#plain)
```ts
readonly PLAIN: 0 = 0;
```
### SIGNED\_PLAIN
[Section titled “SIGNED\_PLAIN”](#signed_plain)
```ts
readonly SIGNED_PLAIN: 2 = 2;
```
# Ble
Defined in: [src/transports/bleTransport.ts:70](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L70)
Inheritance-friendly wrapper over createBleTransport. Subclass implements writeChunk() and calls the protected deliver()/setState() from its own BLE event wiring. Bytes-only — do any base64 (e.g. react-native-ble-plx) encoding inside the subclass.
## Implements
[Section titled “Implements”](#implements)
* [`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/)
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new Ble(): BleTransport;
```
Defined in: [src/transports/bleTransport.ts:76](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L76)
#### Returns
[Section titled “Returns”](#returns)
`BleTransport`
## Methods
[Section titled “Methods”](#methods)
### getState()
[Section titled “getState()”](#getstate)
```ts
getState(): TransportState;
```
Defined in: [src/transports/bleTransport.ts:110](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L110)
#### Returns
[Section titled “Returns”](#returns-1)
[`TransportState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/transportstate/)
#### Implementation of
[Section titled “Implementation of”](#implementation-of)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`getState`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#getstate)
***
### onData()
[Section titled “onData()”](#ondata)
```ts
onData(cb): void;
```
Defined in: [src/transports/bleTransport.ts:104](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L104)
Each chunk is ONE complete companion frame (a BLE notification payload).
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------------- |
| `cb` | (`chunk`) => `void` |
#### Returns
[Section titled “Returns”](#returns-2)
`void`
#### Implementation of
[Section titled “Implementation of”](#implementation-of-1)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`onData`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#ondata)
***
### onStateChange()
[Section titled “onStateChange()”](#onstatechange)
```ts
onStateChange(cb): void;
```
Defined in: [src/transports/bleTransport.ts:107](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L107)
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | --------------- |
| `cb` | (`s`) => `void` |
#### Returns
[Section titled “Returns”](#returns-3)
`void`
#### Implementation of
[Section titled “Implementation of”](#implementation-of-2)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`onStateChange`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#onstatechange)
***
### send()
[Section titled “send()”](#send)
```ts
send(bytes): Promise;
```
Defined in: [src/transports/bleTransport.ts:101](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L101)
Write one complete companion frame to the radio.
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | ------------ |
| `bytes` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-4)
`Promise`<`void`>
#### Implementation of
[Section titled “Implementation of”](#implementation-of-3)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`send`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#send)
# Loopback
Defined in: [src/ports/transport.ts:18](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L18)
In-memory Transport for tests and examples. Captures everything sent and lets a driver push inbound frames / state transitions into the session under test.
## Implements
[Section titled “Implements”](#implements)
* [`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/)
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new Loopback(): LoopbackTransport;
```
#### Returns
[Section titled “Returns”](#returns)
`LoopbackTransport`
## Properties
[Section titled “Properties”](#properties)
### sent
[Section titled “sent”](#sent)
```ts
readonly sent: Uint8Array[] = [];
```
Defined in: [src/ports/transport.ts:20](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L20)
Outbound frames captured for assertions (in send order).
## Methods
[Section titled “Methods”](#methods)
### getState()
[Section titled “getState()”](#getstate)
```ts
getState(): TransportState;
```
Defined in: [src/ports/transport.ts:37](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L37)
#### Returns
[Section titled “Returns”](#returns-1)
[`TransportState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/transportstate/)
#### Implementation of
[Section titled “Implementation of”](#implementation-of)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`getState`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#getstate)
***
### lastSentHex()
[Section titled “lastSentHex()”](#lastsenthex)
```ts
lastSentHex(): string | undefined;
```
Defined in: [src/ports/transport.ts:60](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L60)
Last sent frame as hex (or undefined).
#### Returns
[Section titled “Returns”](#returns-2)
`string` | `undefined`
***
### onData()
[Section titled “onData()”](#ondata)
```ts
onData(cb): void;
```
Defined in: [src/ports/transport.ts:29](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L29)
Each chunk is ONE complete companion frame (a BLE notification payload).
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------------- |
| `cb` | (`chunk`) => `void` |
#### Returns
[Section titled “Returns”](#returns-3)
`void`
#### Implementation of
[Section titled “Implementation of”](#implementation-of-1)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`onData`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#ondata)
***
### onStateChange()
[Section titled “onStateChange()”](#onstatechange)
```ts
onStateChange(cb): void;
```
Defined in: [src/ports/transport.ts:33](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L33)
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | --------------- |
| `cb` | (`s`) => `void` |
#### Returns
[Section titled “Returns”](#returns-4)
`void`
#### Implementation of
[Section titled “Implementation of”](#implementation-of-2)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`onStateChange`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#onstatechange)
***
### receive()
[Section titled “receive()”](#receive)
```ts
receive(frame): void;
```
Defined in: [src/ports/transport.ts:50](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L50)
Deliver one inbound companion frame to the session.
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | ------------ |
| `frame` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-5)
`void`
***
### receiveHex()
[Section titled “receiveHex()”](#receivehex)
```ts
receiveHex(hex): void;
```
Defined in: [src/ports/transport.ts:55](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L55)
Convenience: deliver an inbound frame from a hex string.
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| --------- | -------- |
| `hex` | `string` |
#### Returns
[Section titled “Returns”](#returns-6)
`void`
***
### send()
[Section titled “send()”](#send)
```ts
send(bytes): Promise;
```
Defined in: [src/ports/transport.ts:25](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L25)
Write one complete companion frame to the radio.
#### Parameters
[Section titled “Parameters”](#parameters-4)
| Parameter | Type |
| --------- | ------------ |
| `bytes` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-7)
`Promise`<`void`>
#### Implementation of
[Section titled “Implementation of”](#implementation-of-3)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`send`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#send)
***
### setState()
[Section titled “setState()”](#setstate)
```ts
setState(s): void;
```
Defined in: [src/ports/transport.ts:44](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/ports/transport.ts#L44)
Transition state and notify the subscriber.
#### Parameters
[Section titled “Parameters”](#parameters-5)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------- |
| `s` | [`TransportState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/transportstate/) |
#### Returns
[Section titled “Returns”](#returns-8)
`void`
# Serial
Defined in: [src/transports/serialTransport.ts:21](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L21)
Transport that frames the MeshCore serial protocol over a duck-typed port. The user owns opening/closing the port; this only observes and frames it.
## Implements
[Section titled “Implements”](#implements)
* [`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/)
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new Serial(port, opts?): SerialTransport;
```
Defined in: [src/transports/serialTransport.ts:28](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L28)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------------------- | ----------------------------------------------------------------------------------------------- |
| `port` | [`SerialPortLike`](/meshcore-ts/api/andyshinn/namespaces/transports/interfaces/serialportlike/) |
| `opts?` | { `maxFrameBytes?`: `number`; } |
| `opts.maxFrameBytes?` | `number` |
#### Returns
[Section titled “Returns”](#returns)
`SerialTransport`
## Methods
[Section titled “Methods”](#methods)
### getState()
[Section titled “getState()”](#getstate)
```ts
getState(): TransportState;
```
Defined in: [src/transports/serialTransport.ts:61](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L61)
#### Returns
[Section titled “Returns”](#returns-1)
[`TransportState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/transportstate/)
#### Implementation of
[Section titled “Implementation of”](#implementation-of)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`getState`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#getstate)
***
### onData()
[Section titled “onData()”](#ondata)
```ts
onData(cb): void;
```
Defined in: [src/transports/serialTransport.ts:53](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L53)
Each chunk is ONE complete companion frame (a BLE notification payload).
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | ------------------- |
| `cb` | (`chunk`) => `void` |
#### Returns
[Section titled “Returns”](#returns-2)
`void`
#### Implementation of
[Section titled “Implementation of”](#implementation-of-1)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`onData`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#ondata)
***
### onStateChange()
[Section titled “onStateChange()”](#onstatechange)
```ts
onStateChange(cb): void;
```
Defined in: [src/transports/serialTransport.ts:57](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L57)
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | --------------- |
| `cb` | (`s`) => `void` |
#### Returns
[Section titled “Returns”](#returns-3)
`void`
#### Implementation of
[Section titled “Implementation of”](#implementation-of-2)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`onStateChange`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#onstatechange)
***
### send()
[Section titled “send()”](#send)
```ts
send(bytes): Promise;
```
Defined in: [src/transports/serialTransport.ts:49](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L49)
Write one complete companion frame to the radio.
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| --------- | ------------ |
| `bytes` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-4)
`Promise`<`void`>
#### Implementation of
[Section titled “Implementation of”](#implementation-of-3)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`send`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#send)
# SerialDeframer
Defined in: [src/transports/serialFraming.ts:29](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialFraming.ts#L29)
Resync-tolerant de-framer for the MeshCore serial byte stream. Feed it raw bytes as they arrive; it returns zero or more complete companion-frame payloads, buffering any partial tail. Never throws on malformed input — it drops a byte and resyncs.
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new SerialDeframer(opts?): SerialDeframer;
```
Defined in: [src/transports/serialFraming.ts:33](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialFraming.ts#L33)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------------------- | ------------------------------- |
| `opts?` | { `maxFrameBytes?`: `number`; } |
| `opts.maxFrameBytes?` | `number` |
#### Returns
[Section titled “Returns”](#returns)
`SerialDeframer`
## Methods
[Section titled “Methods”](#methods)
### push()
[Section titled “push()”](#push)
```ts
push(bytes): Uint8Array[];
```
Defined in: [src/transports/serialFraming.ts:43](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialFraming.ts#L43)
Append bytes and return every complete companion-frame payload now available.
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | ------------ |
| `bytes` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-1)
`Uint8Array`<`ArrayBufferLike`>\[]
***
### reset()
[Section titled “reset()”](#reset)
```ts
reset(): void;
```
Defined in: [src/transports/serialFraming.ts:38](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialFraming.ts#L38)
Discard any buffered partial frame.
#### Returns
[Section titled “Returns”](#returns-2)
`void`
# Tcp
Defined in: [src/transports/tcpTransport.ts:46](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L46)
Complete, batteries-included TCP transport for the MeshCore companion protocol. Unlike Serial/BLE (which are bring-your-own-driver adapters), TCP’s only driver is the `node:net` builtin, so this transport owns its socket and its connect/close lifecycle. The wire framing is identical to serial (`[0x3c]`/`[0x3e][uint16 LE length][payload]`), so it reuses `SerialDeframer` + `encodeSerialFrame` rather than reimplementing framing.
## Implements
[Section titled “Implements”](#implements)
* [`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/)
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new Tcp(opts): TcpTransport;
```
Defined in: [src/transports/tcpTransport.ts:57](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L57)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------------------- |
| `opts` | [`TcpTransportOptions`](/meshcore-ts/api/andyshinn/namespaces/transports/interfaces/tcptransportoptions/) |
#### Returns
[Section titled “Returns”](#returns)
`TcpTransport`
## Methods
[Section titled “Methods”](#methods)
### close()
[Section titled “close()”](#close)
```ts
close(): Promise;
```
Defined in: [src/transports/tcpTransport.ts:117](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L117)
Destroy the socket and return to idle. Safe to call when never connected.
#### Returns
[Section titled “Returns”](#returns-1)
`Promise`<`void`>
***
### connect()
[Section titled “connect()”](#connect)
```ts
connect(): Promise;
```
Defined in: [src/transports/tcpTransport.ts:69](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L69)
Dial host:port. Resolves on the socket’s ‘connect’ event, rejects on a socket ‘error’ or if no connection completes within connectTimeoutMs.
#### Returns
[Section titled “Returns”](#returns-2)
`Promise`<`void`>
***
### getState()
[Section titled “getState()”](#getstate)
```ts
getState(): TransportState;
```
Defined in: [src/transports/tcpTransport.ts:142](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L142)
#### Returns
[Section titled “Returns”](#returns-3)
[`TransportState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/transportstate/)
#### Implementation of
[Section titled “Implementation of”](#implementation-of)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`getState`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#getstate)
***
### onData()
[Section titled “onData()”](#ondata)
```ts
onData(cb): void;
```
Defined in: [src/transports/tcpTransport.ts:134](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L134)
Each chunk is ONE complete companion frame (a BLE notification payload).
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | ------------------- |
| `cb` | (`chunk`) => `void` |
#### Returns
[Section titled “Returns”](#returns-4)
`void`
#### Implementation of
[Section titled “Implementation of”](#implementation-of-1)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`onData`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#ondata)
***
### onStateChange()
[Section titled “onStateChange()”](#onstatechange)
```ts
onStateChange(cb): void;
```
Defined in: [src/transports/tcpTransport.ts:138](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L138)
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | --------------- |
| `cb` | (`s`) => `void` |
#### Returns
[Section titled “Returns”](#returns-5)
`void`
#### Implementation of
[Section titled “Implementation of”](#implementation-of-2)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`onStateChange`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#onstatechange)
***
### send()
[Section titled “send()”](#send)
```ts
send(bytes): Promise;
```
Defined in: [src/transports/tcpTransport.ts:129](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L129)
Write one complete companion frame to the radio.
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| --------- | ------------ |
| `bytes` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-6)
`Promise`<`void`>
#### Implementation of
[Section titled “Implementation of”](#implementation-of-3)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/).[`send`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/#send)
# createBle
```ts
function createBle(hooks): Transport;
```
Defined in: [src/transports/bleTransport.ts:37](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L37)
Build a Transport from BLE I/O hooks. BLE notifications are already whole companion frames, so there is no framing here. The user owns the connection; state defaults to ‘connected’ (you have characteristics to talk to) and follows `watchState` thereafter.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------------- |
| `hooks` | [`BleHooks`](/meshcore-ts/api/andyshinn/namespaces/transports/interfaces/blehooks/) |
## Returns
[Section titled “Returns”](#returns)
[`Transport`](/meshcore-ts/api/andyshinn/namespaces/ports/interfaces/transport/)
# createTcp
```ts
function createTcp(opts): Tcp;
```
Defined in: [src/transports/tcpTransport.ts:153](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L153)
Factory mirroring createBleTransport — returns a ready-to-connect TcpTransport.
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------------------- |
| `opts` | [`TcpTransportOptions`](/meshcore-ts/api/andyshinn/namespaces/transports/interfaces/tcptransportoptions/) |
## Returns
[Section titled “Returns”](#returns)
[`Tcp`](/meshcore-ts/api/andyshinn/namespaces/transports/classes/tcp/)
# encodeSerialFrame
```ts
function encodeSerialFrame(payload): Uint8Array;
```
Defined in: [src/transports/serialFraming.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialFraming.ts#L14)
Wrap one companion frame as a host→device serial frame: \[0x3c]\[len LE]\[payload].
## Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------ |
| `payload` | `Uint8Array` |
## Returns
[Section titled “Returns”](#returns)
`Uint8Array`
# BleHooks
Defined in: [src/transports/bleTransport.ts:15](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L15)
I/O hooks the caller binds to their BLE library (noble, react-native-ble-plx, …).
## Methods
[Section titled “Methods”](#methods)
### subscribe()
[Section titled “subscribe()”](#subscribe)
```ts
subscribe(onBytes): void;
```
Defined in: [src/transports/bleTransport.ts:26](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L26)
Register a notification handler for the TX characteristic. Each notification delivered to `onBytes` is ONE complete companion frame (no framing on BLE).
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------------- |
| `onBytes` | (`frame`) => `void` |
#### Returns
[Section titled “Returns”](#returns)
`void`
***
### watchState()?
[Section titled “watchState()?”](#watchstate)
```ts
optional watchState(onState): void;
```
Defined in: [src/transports/bleTransport.ts:28](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L28)
Optional: map connect/disconnect to transport state.
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | --------------- |
| `onState` | (`s`) => `void` |
#### Returns
[Section titled “Returns”](#returns-1)
`void`
***
### write()
[Section titled “write()”](#write)
```ts
write(bytes): void | Promise;
```
Defined in: [src/transports/bleTransport.ts:21](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L21)
Write one companion frame to the RX characteristic. Callers receive raw bytes; encode as your BLE library requires (e.g. base64 for react-native-ble-plx, Buffer/Uint8Array for noble).
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | ------------ |
| `bytes` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-2)
`void` | `Promise`<`void`>
# SerialPortLike
Defined in: [src/transports/serialTransport.ts:9](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L9)
Minimal structural view of a node-serialport-style handle. The user passes their own already-constructed port; meshcore-ts never imports serialport.
## Properties
[Section titled “Properties”](#properties)
### isOpen?
[Section titled “isOpen?”](#isopen)
```ts
readonly optional isOpen?: boolean;
```
Defined in: [src/transports/serialTransport.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L11)
## Methods
[Section titled “Methods”](#methods)
### on()
[Section titled “on()”](#on)
#### Call Signature
[Section titled “Call Signature”](#call-signature)
```ts
on(event, cb): unknown;
```
Defined in: [src/transports/serialTransport.ts:12](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L12)
##### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------------- |
| `event` | `"data"` |
| `cb` | (`chunk`) => `void` |
##### Returns
[Section titled “Returns”](#returns)
`unknown`
#### Call Signature
[Section titled “Call Signature”](#call-signature-1)
```ts
on(event, cb): unknown;
```
Defined in: [src/transports/serialTransport.ts:13](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L13)
##### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | --------------------- |
| `event` | `"open"` \| `"close"` |
| `cb` | () => `void` |
##### Returns
[Section titled “Returns”](#returns-1)
`unknown`
#### Call Signature
[Section titled “Call Signature”](#call-signature-2)
```ts
on(event, cb): unknown;
```
Defined in: [src/transports/serialTransport.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L14)
##### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | ----------------- |
| `event` | `"error"` |
| `cb` | (`err`) => `void` |
##### Returns
[Section titled “Returns”](#returns-2)
`unknown`
***
### write()
[Section titled “write()”](#write)
```ts
write(bytes): unknown;
```
Defined in: [src/transports/serialTransport.ts:10](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/serialTransport.ts#L10)
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| --------- | ------------ |
| `bytes` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-3)
`unknown`
# SocketLike
Defined in: [src/transports/tcpTransport.ts:11](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L11)
Minimal structural view of a node:net Socket — satisfied by a real `net.Socket` and by test fakes. Mirrors the duck-typed `SerialPortLike`: we only touch the few members the transport actually uses.
## Properties
[Section titled “Properties”](#properties)
### destroyed?
[Section titled “destroyed?”](#destroyed)
```ts
readonly optional destroyed?: boolean;
```
Defined in: [src/transports/tcpTransport.ts:14](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L14)
## Methods
[Section titled “Methods”](#methods)
### destroy()
[Section titled “destroy()”](#destroy)
```ts
destroy(): unknown;
```
Defined in: [src/transports/tcpTransport.ts:13](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L13)
#### Returns
[Section titled “Returns”](#returns)
`unknown`
***
### on()
[Section titled “on()”](#on)
#### Call Signature
[Section titled “Call Signature”](#call-signature)
```ts
on(event, cb): unknown;
```
Defined in: [src/transports/tcpTransport.ts:15](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L15)
##### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------------------ |
| `event` | `"close"` \| `"connect"` |
| `cb` | () => `void` |
##### Returns
[Section titled “Returns”](#returns-1)
`unknown`
#### Call Signature
[Section titled “Call Signature”](#call-signature-1)
```ts
on(event, cb): unknown;
```
Defined in: [src/transports/tcpTransport.ts:16](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L16)
##### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| --------- | ------------------- |
| `event` | `"data"` |
| `cb` | (`chunk`) => `void` |
##### Returns
[Section titled “Returns”](#returns-2)
`unknown`
#### Call Signature
[Section titled “Call Signature”](#call-signature-2)
```ts
on(event, cb): unknown;
```
Defined in: [src/transports/tcpTransport.ts:17](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L17)
##### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | ----------------- |
| `event` | `"error"` |
| `cb` | (`err`) => `void` |
##### Returns
[Section titled “Returns”](#returns-3)
`unknown`
***
### write()
[Section titled “write()”](#write)
```ts
write(bytes): unknown;
```
Defined in: [src/transports/tcpTransport.ts:12](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L12)
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| --------- | ------------ |
| `bytes` | `Uint8Array` |
#### Returns
[Section titled “Returns”](#returns-4)
`unknown`
# TcpTransportOptions
Defined in: [src/transports/tcpTransport.ts:20](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L20)
## Properties
[Section titled “Properties”](#properties)
### connectTimeoutMs?
[Section titled “connectTimeoutMs?”](#connecttimeoutms)
```ts
optional connectTimeoutMs?: number;
```
Defined in: [src/transports/tcpTransport.ts:26](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L26)
Reject connect() if no ‘connect’ arrives within this many ms. Default 10000.
***
### createSocket?
[Section titled “createSocket?”](#createsocket)
```ts
optional createSocket?: (host, port) => SocketLike;
```
Defined in: [src/transports/tcpTransport.ts:33](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L33)
Test seam: build the socket. Defaults to `net.createConnection`, which both creates the socket and starts dialing — so connect() just waits for events.
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | -------- |
| `host` | `string` |
| `port` | `number` |
#### Returns
[Section titled “Returns”](#returns)
[`SocketLike`](/meshcore-ts/api/andyshinn/namespaces/transports/interfaces/socketlike/)
***
### host
[Section titled “host”](#host)
```ts
host: string;
```
Defined in: [src/transports/tcpTransport.ts:22](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L22)
Host to dial.
***
### maxFrameBytes?
[Section titled “maxFrameBytes?”](#maxframebytes)
```ts
optional maxFrameBytes?: number;
```
Defined in: [src/transports/tcpTransport.ts:28](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L28)
Max companion-frame payload size for the de-framer. Default 256.
***
### port
[Section titled “port”](#port)
```ts
port: number;
```
Defined in: [src/transports/tcpTransport.ts:24](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/tcpTransport.ts#L24)
TCP port to dial.
# NORDIC_UART
```ts
const NORDIC_UART: object;
```
Defined in: [src/transports/bleTransport.ts:8](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/transports/bleTransport.ts#L8)
Nordic UART Service UUIDs used by the MeshCore companion BLE interface. Compare case-insensitively — some stacks (e.g. noble) report UUIDs lowercase.
## Type Declaration
[Section titled “Type Declaration”](#type-declaration)
### rxWrite
[Section titled “rxWrite”](#rxwrite)
```ts
readonly rxWrite: "6E400002-B5A3-F393-E0A9-E50E24DCCA9E" = '6E400002-B5A3-F393-E0A9-E50E24DCCA9E';
```
### service
[Section titled “service”](#service)
```ts
readonly service: "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" = '6E400001-B5A3-F393-E0A9-E50E24DCCA9E';
```
### txNotify
[Section titled “txNotify”](#txnotify)
```ts
readonly txNotify: "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" = '6E400003-B5A3-F393-E0A9-E50E24DCCA9E';
```
# MeshCoreSession
Defined in: [src/session/session.ts:137](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L137)
The protocol session core: owns the inbound-frame ingest, the reply- correlation FIFOs (ack + typed), the handshake, the liveness poll, and the transport-state lifecycle. Feature modules receive a [FeatureContext](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/featurecontext/) bound to this session and own their own wire codes via the registry.
Ported verbatim from the donor `ProtocolSession`; the \~60 user-facing command methods are layered on in a later task.
## Constructors
[Section titled “Constructors”](#constructors)
### Constructor
[Section titled “Constructor”](#constructor)
```ts
new MeshCoreSession(opts): MeshCoreSession;
```
Defined in: [src/session/session.ts:207](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L207)
#### Parameters
[Section titled “Parameters”](#parameters)
| Parameter | Type |
| --------- | ------------------------------------------------------------------------------- |
| `opts` | [`MeshCoreSessionOptions`](/meshcore-ts/api/interfaces/meshcoresessionoptions/) |
#### Returns
[Section titled “Returns”](#returns)
`MeshCoreSession`
## Properties
[Section titled “Properties”](#properties)
### admin
[Section titled “admin”](#admin)
```ts
readonly admin: AdminSessionStore;
```
Defined in: [src/session/session.ts:147](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L147)
Repeater admin auth + pending-request store.
***
### events
[Section titled “events”](#events)
```ts
readonly events: Events;
```
Defined in: [src/session/session.ts:143](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L143)
Typed event bus the session and consumers subscribe to.
***
### log
[Section titled “log”](#log)
```ts
readonly log: Logger;
```
Defined in: [src/session/session.ts:149](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L149)
Structured logger (defaults to no-op).
***
### rt
[Section titled “rt”](#rt)
```ts
readonly rt: SessionRuntime;
```
Defined in: [src/session/session.ts:151](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L151)
Per-session mutable feature state.
***
### state
[Section titled “state”](#state)
```ts
readonly state: SessionState;
```
Defined in: [src/session/session.ts:145](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L145)
In-memory session model.
## Methods
[Section titled “Methods”](#methods)
### addContactToRadio()
[Section titled “addContactToRadio()”](#addcontacttoradio)
```ts
addContactToRadio(publicKeyHex): Promise;
```
Defined in: [src/session/session.ts:883](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L883)
Commit a discovered contact to the radio’s store (CMD\_ADD\_UPDATE\_CONTACT). Awaits the radio’s RESP\_OK/ERR before marking the contact on-radio.
#### Parameters
[Section titled “Parameters”](#parameters-1)
| Parameter | Type |
| -------------- | -------- |
| `publicKeyHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-1)
`Promise`<`void`>
***
### clearDefaultFloodScope()
[Section titled “clearDefaultFloodScope()”](#cleardefaultfloodscope)
```ts
clearDefaultFloodScope(): Promise;
```
Defined in: [src/session/session.ts:1391](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1391)
Clear the persisted default flood scope.
#### Returns
[Section titled “Returns”](#returns-2)
`Promise`<`void`>
***
### deriveSecret()
[Section titled “deriveSecret()”](#derivesecret)
```ts
deriveSecret(name): string;
```
Defined in: [src/session/session.ts:1103](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1103)
Derive the 16-byte secret for a public/hashtag channel by name. Callers supplying their own secret (e.g. private channel imported from a share link) should pass it directly to setChannel instead.
#### Parameters
[Section titled “Parameters”](#parameters-2)
| Parameter | Type |
| --------- | -------- |
| `name` | `string` |
#### Returns
[Section titled “Returns”](#returns-3)
`string`
***
### exportContact()
[Section titled “exportContact()”](#exportcontact)
```ts
exportContact(destPublicKeyHex?): Promise;
```
Defined in: [src/session/session.ts:1486](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1486)
Export an advert blob for the device (no arg) or a known contact, or null when the contact isn’t found.
#### Parameters
[Section titled “Parameters”](#parameters-3)
| Parameter | Type |
| ------------------- | -------- |
| `destPublicKeyHex?` | `string` |
#### Returns
[Section titled “Returns”](#returns-4)
`Promise`<`string` | `null`>
***
### exportPrivateKey()
[Section titled “exportPrivateKey()”](#exportprivatekey)
```ts
exportPrivateKey(): Promise;
```
Defined in: [src/session/session.ts:1414](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1414)
Export the device’s 64-byte private key (hex). Rejects FeatureDisabledError on a firmware build with private-key export compiled out.
#### Returns
[Section titled “Returns”](#returns-5)
`Promise`<`string`>
***
### factoryReset()
[Section titled “factoryReset()”](#factoryreset)
```ts
factoryReset(): Promise;
```
Defined in: [src/session/session.ts:1431](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1431)
Wipe the device to factory state. The link drops mid-reset, so there is no reply to await (like reboot()).
#### Returns
[Section titled “Returns”](#returns-6)
`Promise`<`void`>
***
### findChannelByName()
[Section titled “findChannelByName()”](#findchannelbyname)
```ts
findChannelByName(name):
| Channel
| null;
```
Defined in: [src/session/session.ts:1017](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1017)
Find a channel in current session state by exact name, or null.
#### Parameters
[Section titled “Parameters”](#parameters-4)
| Parameter | Type |
| --------- | -------- |
| `name` | `string` |
#### Returns
[Section titled “Returns”](#returns-7)
\| [`Channel`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/channel/) | `null`
***
### findChannelBySecret()
[Section titled “findChannelBySecret()”](#findchannelbysecret)
```ts
findChannelBySecret(secretHex):
| Channel
| null;
```
Defined in: [src/session/session.ts:1023](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1023)
Find a channel by its secret (hex, case-insensitive exact match). A mismatched-length input simply returns null (no validation).
#### Parameters
[Section titled “Parameters”](#parameters-5)
| Parameter | Type |
| ----------- | -------- |
| `secretHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-8)
\| [`Channel`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/channel/) | `null`
***
### findContactByName()
[Section titled “findContactByName()”](#findcontactbyname)
```ts
findContactByName(name):
| Contact
| null;
```
Defined in: [src/session/session.ts:1004](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1004)
Find a contact in current session state by exact display name, or null.
#### Parameters
[Section titled “Parameters”](#parameters-6)
| Parameter | Type |
| --------- | -------- |
| `name` | `string` |
#### Returns
[Section titled “Returns”](#returns-9)
\| [`Contact`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/contact/) | `null`
***
### findContactByPublicKeyPrefix()
[Section titled “findContactByPublicKeyPrefix()”](#findcontactbypublickeyprefix)
```ts
findContactByPublicKeyPrefix(prefixHex):
| Contact
| null;
```
Defined in: [src/session/session.ts:1010](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1010)
Find a contact whose public key starts with the given hex prefix (case-insensitive), or null.
#### Parameters
[Section titled “Parameters”](#parameters-7)
| Parameter | Type |
| ----------- | -------- |
| `prefixHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-10)
\| [`Contact`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/contact/) | `null`
***
### getAdvertPath()
[Section titled “getAdvertPath()”](#getadvertpath)
```ts
getAdvertPath(contactKey): Promise<
| AdvertPath
| null>;
```
Defined in: [src/session/session.ts:1451](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1451)
The device’s cached advert path for a contact, or null when none is cached.
#### Parameters
[Section titled “Parameters”](#parameters-8)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-11)
`Promise`< | [`AdvertPath`](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/advertpath/) | `null`>
***
### getAllowedRepeatFreq()
[Section titled “getAllowedRepeatFreq()”](#getallowedrepeatfreq)
```ts
getAllowedRepeatFreq(): Promise;
```
Defined in: [src/session/session.ts:1406](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1406)
The frequency ranges the radio is allowed to repeat on (region-dependent).
#### Returns
[Section titled “Returns”](#returns-12)
`Promise`<[`RepeatFreqRange`](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/repeatfreqrange/)\[]>
***
### getChannel()
[Section titled “getChannel()”](#getchannel)
```ts
getChannel(idx): Promise<
| Channel
| null>;
```
Defined in: [src/session/session.ts:1068](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1068)
Actively re-query a single channel slot. Intended for use while connected; on a dead link it resolves only after the watchdog/request timeout.
#### Parameters
[Section titled “Parameters”](#parameters-9)
| Parameter | Type |
| --------- | -------- |
| `idx` | `number` |
#### Returns
[Section titled “Returns”](#returns-13)
`Promise`< | [`Channel`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/channel/) | `null`>
***
### getChannels()
[Section titled “getChannels()”](#getchannels)
```ts
getChannels(): Promise;
```
Defined in: [src/session/session.ts:1057](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1057)
Actively re-enumerate channel slots (GET\_CHANNEL 0..N-1) and resolve the fresh list. Intended for use while connected; on a dead link it resolves only after the watchdog/request timeout.
#### Returns
[Section titled “Returns”](#returns-14)
`Promise`<[`Channel`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/channel/)\[]>
***
### getContactByKey()
[Section titled “getContactByKey()”](#getcontactbykey)
```ts
getContactByKey(destPublicKeyHex): Promise<
| ContactRecord
| null>;
```
Defined in: [src/session/session.ts:999](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L999)
Look up a single contact on the radio by public key, or null if absent.
#### Parameters
[Section titled “Parameters”](#parameters-10)
| Parameter | Type |
| ------------------ | -------- |
| `destPublicKeyHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-15)
`Promise`< | [`ContactRecord`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/contactrecord/) | `null`>
***
### getContacts()
[Section titled “getContacts()”](#getcontacts)
```ts
getContacts(): Promise;
```
Defined in: [src/session/session.ts:1043](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1043)
Actively re-enumerate the radio’s contact store (GET\_CONTACTS) and resolve the fresh list. Reuses the handshake’s contact-stream waiters. Intended for use while connected; on a dead link it resolves only after the watchdog/request timeout.
#### Returns
[Section titled “Returns”](#returns-16)
`Promise`<[`Contact`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/contact/)\[]>
***
### getDefaultFloodScope()
[Section titled “getDefaultFloodScope()”](#getdefaultfloodscope)
```ts
getDefaultFloodScope(): Promise<
| DefaultFloodScope
| null>;
```
Defined in: [src/session/session.ts:1396](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1396)
Read the persisted default flood scope, or null when none is set.
#### Returns
[Section titled “Returns”](#returns-17)
`Promise`< | [`DefaultFloodScope`](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/defaultfloodscope/) | `null`>
***
### getDevicePresence()
[Section titled “getDevicePresence()”](#getdevicepresence)
```ts
getDevicePresence(): string[];
```
Defined in: [src/session/session.ts:560](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L560)
Snapshot of channel keys currently present on the radio. Empty when the transport is disconnected.
#### Returns
[Section titled “Returns”](#returns-18)
`string`\[]
***
### getDeviceTime()
[Section titled “getDeviceTime()”](#getdevicetime)
```ts
getDeviceTime(): Promise;
```
Defined in: [src/session/session.ts:1346](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1346)
Read the radio’s RTC clock (unix seconds).
#### Returns
[Section titled “Returns”](#returns-19)
`Promise`<`number`>
***
### getSelfInfo()
[Section titled “getSelfInfo()”](#getselfinfo)
```ts
getSelfInfo(): Promise;
```
Defined in: [src/session/session.ts:1031](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1031)
Actively re-query the radio’s self-info (APP\_START → RESP\_SELF\_INFO), publish it as the Owner, and return it. Intended for use while connected; on a dead link it resolves only after the watchdog/request timeout.
#### Returns
[Section titled “Returns”](#returns-20)
`Promise`<[`SelfInfo`](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/selfinfo/)>
***
### getSyncProgress()
[Section titled “getSyncProgress()”](#getsyncprogress)
```ts
getSyncProgress(): SyncProgress;
```
Defined in: [src/session/session.ts:565](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L565)
Snapshot of handshake progress.
#### Returns
[Section titled “Returns”](#returns-21)
[`SyncProgress`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/syncprogress/)
***
### getTransportState()
[Section titled “getTransportState()”](#gettransportstate)
```ts
getTransportState(): TransportState;
```
Defined in: [src/session/session.ts:268](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L268)
Current transport connection state.
#### Returns
[Section titled “Returns”](#returns-22)
[`TransportState`](/meshcore-ts/api/andyshinn/namespaces/models/type-aliases/transportstate/)
***
### getTuningParams()
[Section titled “getTuningParams()”](#gettuningparams)
```ts
getTuningParams(): Promise;
```
Defined in: [src/session/session.ts:1364](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1364)
Read the radio airtime/backoff tuning params (CMD\_GET\_TUNING\_PARAMS).
#### Returns
[Section titled “Returns”](#returns-23)
`Promise`<[`TuningParams`](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/tuningparams/)>
***
### hasConnection()
[Section titled “hasConnection()”](#hasconnection)
```ts
hasConnection(destPublicKeyHex): Promise;
```
Defined in: [src/session/session.ts:1401](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1401)
Whether the radio reports an active connection to a node.
#### Parameters
[Section titled “Parameters”](#parameters-11)
| Parameter | Type |
| ------------------ | -------- |
| `destPublicKeyHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-24)
`Promise`<`boolean`>
***
### importContact()
[Section titled “importContact()”](#importcontact)
```ts
importContact(blobHex): Promise;
```
Defined in: [src/session/session.ts:1491](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1491)
Import a contact from a serialized advert blob (CMD\_IMPORT\_CONTACT).
#### Parameters
[Section titled “Parameters”](#parameters-12)
| Parameter | Type |
| --------- | -------- |
| `blobHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-25)
`Promise`<`void`>
***
### importPrivateKey()
[Section titled “importPrivateKey()”](#importprivatekey)
```ts
importPrivateKey(privKeyHex): Promise;
```
Defined in: [src/session/session.ts:1420](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1420)
Import a 64-byte private key (hex), replacing the device identity. Rejects ProtocolError on a bad key / FS error.
#### Parameters
[Section titled “Parameters”](#parameters-13)
| Parameter | Type |
| ------------ | -------- |
| `privKeyHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-26)
`Promise`<`void`>
***
### markChannelAbsent()
[Section titled “markChannelAbsent()”](#markchannelabsent)
```ts
markChannelAbsent(idx): void;
```
Defined in: [src/session/session.ts:1091](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1091)
Mark a slot as no longer on the device (paired with a zero-key write). Frees the slot for pickFreeSlot and clears the presence flag.
#### Parameters
[Section titled “Parameters”](#parameters-14)
| Parameter | Type |
| --------- | -------- |
| `idx` | `number` |
#### Returns
[Section titled “Returns”](#returns-27)
`void`
***
### markChannelPresent()
[Section titled “markChannelPresent()”](#markchannelpresent)
```ts
markChannelPresent(channel): void;
```
Defined in: [src/session/session.ts:1085](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1085)
Mark a channel as present on the device. Call after a successful SET\_CHANNEL ack — the firmware doesn’t echo CHANNEL\_INFO back, so without this the new channel would stay grayed-out in the UI until the next full re-enumeration.
#### Parameters
[Section titled “Parameters”](#parameters-15)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------- |
| `channel` | [`Channel`](/meshcore-ts/api/andyshinn/namespaces/models/interfaces/channel/) |
#### Returns
[Section titled “Returns”](#returns-28)
`void`
***
### pickFreeSlot()
[Section titled “pickFreeSlot()”](#pickfreeslot)
```ts
pickFreeSlot(): number | null;
```
Defined in: [src/session/session.ts:1096](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1096)
Lowest unused slot index in 0..15, or null if all 16 are taken.
#### Returns
[Section titled “Returns”](#returns-29)
`number` | `null`
***
### reboot()
[Section titled “reboot()”](#reboot)
```ts
reboot(): Promise<{
error?: string;
ok: boolean;
}>;
```
Defined in: [src/session/session.ts:1291](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1291)
Reboot the connected device. The link drops within a few hundred ms; the transport state machine will reflect that via its own state push.
#### Returns
[Section titled “Returns”](#returns-30)
`Promise`<{ `error?`: `string`; `ok`: `boolean`; }>
***
### registerChannelSend()
[Section titled “registerChannelSend()”](#registerchannelsend)
```ts
registerChannelSend(params): void;
```
Defined in: [src/session/session.ts:778](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L778)
Track an outgoing channel send so heard repeater relays (0x88) are attributed back to it (emits ‘messagePathHeard’). Call after sendChannelText returns a channelHash, passing your message id.
#### Parameters
[Section titled “Parameters”](#parameters-16)
| Parameter | Type |
| -------------------- | ------------------------------------------------------------------------ |
| `params` | { `channelHash`: `number`; `messageId`: `string`; `sentAt?`: `number`; } |
| `params.channelHash` | `number` |
| `params.messageId` | `string` |
| `params.sentAt?` | `number` |
#### Returns
[Section titled “Returns”](#returns-31)
`void`
***
### removeContactFromRadio()
[Section titled “removeContactFromRadio()”](#removecontactfromradio)
```ts
removeContactFromRadio(publicKeyHex): Promise;
```
Defined in: [src/session/session.ts:936](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L936)
Delete a contact from the radio’s store (CMD\_REMOVE\_CONTACT). Keeps it in the discovered pool, flagged off-radio.
#### Parameters
[Section titled “Parameters”](#parameters-17)
| Parameter | Type |
| -------------- | -------- |
| `publicKeyHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-32)
`Promise`<`void`>
***
### repeaterGetLocalStats()
[Section titled “repeaterGetLocalStats()”](#repeatergetlocalstats)
```ts
repeaterGetLocalStats(subtype): Promise;
```
Defined in: [src/session/session.ts:1584](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1584)
CMD\_GET\_STATS — local stats for the directly-connected device.
#### Parameters
[Section titled “Parameters”](#parameters-18)
| Parameter | Type |
| --------- | ------------------------------------ |
| `subtype` | `"CORE"` \| `"RADIO"` \| `"PACKETS"` |
#### Returns
[Section titled “Returns”](#returns-33)
`Promise`<[`LocalStats`](/meshcore-ts/api/andyshinn/namespaces/protocol/type-aliases/localstats/)>
***
### repeaterLogin()
[Section titled “repeaterLogin()”](#repeaterlogin)
```ts
repeaterLogin(contactKey, password): Promise;
```
Defined in: [src/session/session.ts:1512](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1512)
Login to a repeater via CMD\_SEND\_LOGIN — the radio routes it (direct when the contact’s out\_path is known, flood otherwise). An empty `password` is a guest login. Returns the effective mode so the UI can label the toast (Direct / Flood / N-hop).
#### Parameters
[Section titled “Parameters”](#parameters-19)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
| `password` | `string` |
#### Returns
[Section titled “Returns”](#returns-34)
`Promise`<[`LoginSuccess`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/loginsuccess/) & `object`>
***
### repeaterLogout()
[Section titled “repeaterLogout()”](#repeaterlogout)
```ts
repeaterLogout(contactKey): Promise;
```
Defined in: [src/session/session.ts:1519](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1519)
#### Parameters
[Section titled “Parameters”](#parameters-20)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-35)
`Promise`<`void`>
***
### repeaterRequestAcl()
[Section titled “repeaterRequestAcl()”](#repeaterrequestacl)
```ts
repeaterRequestAcl(contactKey): Promise;
```
Defined in: [src/session/session.ts:1524](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1524)
Request the ACL list. Admin-only (firmware returns nothing if guest).
#### Parameters
[Section titled “Parameters”](#parameters-21)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-36)
`Promise`<[`AclEntry`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/aclentry/)\[]>
***
### repeaterRequestAvgMinMax()
[Section titled “repeaterRequestAvgMinMax()”](#repeaterrequestavgminmax)
```ts
repeaterRequestAvgMinMax(contactKey, opts): Promise;
```
Defined in: [src/session/session.ts:1566](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1566)
Request a min/max/avg series window from a sensor contact.
#### Parameters
[Section titled “Parameters”](#parameters-22)
| Parameter | Type |
| ------------------- | ----------------------------------------------------- |
| `contactKey` | `string` |
| `opts` | { `endSecsAgo`: `number`; `startSecsAgo`: `number`; } |
| `opts.endSecsAgo` | `number` |
| `opts.startSecsAgo` | `number` |
#### Returns
[Section titled “Returns”](#returns-37)
`Promise`<[`AvgMinMaxResult`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/avgminmaxresult/)>
***
### repeaterRequestClock()
[Section titled “repeaterRequestClock()”](#repeaterrequestclock)
```ts
repeaterRequestClock(contactKey): Promise;
```
Defined in: [src/session/session.ts:1554](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1554)
Public anon CLOCK request — the repeater’s RTC clock (unix seconds).
#### Parameters
[Section titled “Parameters”](#parameters-23)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-38)
`Promise`<`number`>
***
### repeaterRequestNeighbours()
[Section titled “repeaterRequestNeighbours()”](#repeaterrequestneighbours)
```ts
repeaterRequestNeighbours(contactKey, opts?): Promise;
```
Defined in: [src/session/session.ts:1528](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1528)
#### Parameters
[Section titled “Parameters”](#parameters-24)
| Parameter | Type |
| ----------------- | ------------------------------------------------------------------------------------------ |
| `contactKey` | `string` |
| `opts` | { `count?`: `number`; `offset?`: `number`; `orderBy?`: `number`; `prefixLen?`: `number`; } |
| `opts.count?` | `number` |
| `opts.offset?` | `number` |
| `opts.orderBy?` | `number` |
| `opts.prefixLen?` | `number` |
#### Returns
[Section titled “Returns”](#returns-39)
`Promise`<[`NeighboursPage`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/neighbourspage/)>
***
### repeaterRequestOwnerInfo()
[Section titled “repeaterRequestOwnerInfo()”](#repeaterrequestownerinfo)
```ts
repeaterRequestOwnerInfo(contactKey): Promise<
| OwnerInfo
| null>;
```
Defined in: [src/session/session.ts:1537](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1537)
Fetch a repeater’s owner info via the PUBLIC anon OWNER request (works without a login). Returns null if the response can’t be parsed.
#### Parameters
[Section titled “Parameters”](#parameters-25)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-40)
`Promise`< | [`OwnerInfo`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/ownerinfo/) | `null`>
***
### repeaterRequestRegions()
[Section titled “repeaterRequestRegions()”](#repeaterrequestregions)
```ts
repeaterRequestRegions(contactKey): Promise;
```
Defined in: [src/session/session.ts:1549](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1549)
Public anon REGIONS request — the repeater’s region-name listing.
#### Parameters
[Section titled “Parameters”](#parameters-26)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-41)
`Promise`<`string`>
***
### repeaterSendCli()
[Section titled “repeaterSendCli()”](#repeatersendcli)
```ts
repeaterSendCli(contactKey, command): Promise;
```
Defined in: [src/session/session.ts:1574](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1574)
Send a remote CLI command; the reply is routed back by sender prefix.
#### Parameters
[Section titled “Parameters”](#parameters-27)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
| `command` | `string` |
#### Returns
[Section titled “Returns”](#returns-42)
`Promise`<`string`>
***
### repeaterTracePath()
[Section titled “repeaterTracePath()”](#repeatertracepath)
```ts
repeaterTracePath(opts): Promise;
```
Defined in: [src/session/session.ts:1579](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1579)
CMD\_SEND\_TRACE\_PATH — diagnostic trace along a known path.
#### Parameters
[Section titled “Parameters”](#parameters-28)
| Parameter | Type |
| --------------- | ----------------------------------------------------------------------------------- |
| `opts` | { `authCode`: `number`; `flags?`: `number`; `pathHex`: `string`; `tag`: `number`; } |
| `opts.authCode` | `number` |
| `opts.flags?` | `number` |
| `opts.pathHex` | `string` |
| `opts.tag` | `number` |
#### Returns
[Section titled “Returns”](#returns-43)
`Promise`<[`TraceData`](/meshcore-ts/api/andyshinn/namespaces/protocol/interfaces/tracedata/)>
***
### requestAutoAddConfig()
[Section titled “requestAutoAddConfig()”](#requestautoaddconfig)
```ts
requestAutoAddConfig(): Promise;
```
Defined in: [src/session/session.ts:1254](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1254)
Ask the radio for its current auto-add flags. RESP\_AUTOADD\_CONFIG lands in the feature handler → updates state + emits.
#### Returns
[Section titled “Returns”](#returns-44)
`Promise`<`void`>
***
### requestBattAndStorage()
[Section titled “requestBattAndStorage()”](#requestbattandstorage)
```ts
requestBattAndStorage(): Promise;
```
Defined in: [src/session/session.ts:1302](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1302)
Query battery + storage. Replies land in onPacket and update DeviceInfo.
#### Returns
[Section titled “Returns”](#returns-45)
`Promise`<`void`>
***
### requestCustomVars()
[Section titled “requestCustomVars()”](#requestcustomvars)
```ts
requestCustomVars(key?): Promise;
```
Defined in: [src/session/session.ts:1323](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1323)
Query the firmware’s custom-var store (“gps”, “gps\_interval”, etc.). Empty key requests all known keys. Reply: RESP\_CUSTOM\_VARS.
#### Parameters
[Section titled “Parameters”](#parameters-29)
| Parameter | Type | Default value |
| --------- | -------- | ------------- |
| `key` | `string` | `''` |
#### Returns
[Section titled “Returns”](#returns-46)
`Promise`<`void`>
***
### requestDeviceInfo()
[Section titled “requestDeviceInfo()”](#requestdeviceinfo)
```ts
requestDeviceInfo(): Promise;
```
Defined in: [src/session/session.ts:1312](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1312)
Re-issue DEVICE\_QUERY to refresh DeviceInfo + capabilities.
#### Returns
[Section titled “Returns”](#returns-47)
`Promise`<`void`>
***
### resetContactPath()
[Section titled “resetContactPath()”](#resetcontactpath)
```ts
resetContactPath(contactKey): Promise;
```
Defined in: [src/session/session.ts:862](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L862)
Drop a contact’s path back to flood. Mirrors CMD\_RESET\_PATH.
#### Parameters
[Section titled “Parameters”](#parameters-30)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-48)
`Promise`<`void`>
***
### sendAnonReq()
[Section titled “sendAnonReq()”](#sendanonreq)
```ts
sendAnonReq(contactKey, anonType): Promise>;
```
Defined in: [src/session/session.ts:1544](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1544)
Low-level public anon request (CMD\_SEND\_ANON\_REQ). `anonType` is one of Protocol.ANON\_REQ\_TYPE (REGIONS=1, OWNER=2, BASIC/CLOCK=3). Resolves the tagged response body. Prefer the typed wrappers below where they exist.
#### Parameters
[Section titled “Parameters”](#parameters-31)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
| `anonType` | `number` |
#### Returns
[Section titled “Returns”](#returns-49)
`Promise`<`Buffer`<`ArrayBufferLike`>>
***
### sendBinaryRequest()
[Section titled “sendBinaryRequest()”](#sendbinaryrequest)
```ts
sendBinaryRequest(
contactKey,
reqData,
opts?): Promise>;
```
Defined in: [src/session/session.ts:1561](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1561)
Send a generic binary request to a contact and resolve the raw response body. `reqData` is \[REQ\_TYPE byte, …params]. The ACL/neighbours/owner/ avg-min-max helpers are thin wrappers over this.
#### Parameters
[Section titled “Parameters”](#parameters-32)
| Parameter | Type |
| ----------------- | --------------------------- |
| `contactKey` | `string` |
| `reqData` | `Buffer` |
| `opts` | { `timeoutMs?`: `number`; } |
| `opts.timeoutMs?` | `number` |
#### Returns
[Section titled “Returns”](#returns-50)
`Promise`<`Buffer`<`ArrayBufferLike`>>
***
### sendChannelData()
[Section titled “sendChannelData()”](#sendchanneldata)
```ts
sendChannelData(opts): Promise;
```
Defined in: [src/session/session.ts:1468](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1468)
Broadcast a group-channel datagram (CMD\_SEND\_CHANNEL\_DATA, flood).
#### Parameters
[Section titled “Parameters”](#parameters-33)
| Parameter | Type |
| ----------------- | ---------------------------------------------------------------------- |
| `opts` | { `channelIdx`: `number`; `dataType`: `number`; `payload`: `Buffer`; } |
| `opts.channelIdx` | `number` |
| `opts.dataType` | `number` |
| `opts.payload` | `Buffer` |
#### Returns
[Section titled “Returns”](#returns-51)
`Promise`<`void`>
***
### sendChannelText()
[Section titled “sendChannelText()”](#sendchanneltext)
```ts
sendChannelText(channelKey, text): Promise<{
channelHash?: number;
error?: string;
ok: boolean;
}>;
```
Defined in: [src/session/session.ts:793](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L793)
Returns ok on transport-level write success. When ok, `channelHash` is the byte the firmware tags GRP\_TXT packets with on this channel — the caller uses it to register a pending-send entry so subsequent PUSH\_CODE\_LOG\_RX\_DATA observations matching that byte can be attributed back to the outgoing message (repeater relays we hear over the air).
#### Parameters
[Section titled “Parameters”](#parameters-34)
| Parameter | Type |
| ------------ | -------- |
| `channelKey` | `string` |
| `text` | `string` |
#### Returns
[Section titled “Returns”](#returns-52)
`Promise`<{ `channelHash?`: `number`; `error?`: `string`; `ok`: `boolean`; }>
***
### sendControlData()
[Section titled “sendControlData()”](#sendcontroldata)
```ts
sendControlData(payload): Promise;
```
Defined in: [src/session/session.ts:1463](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1463)
Send a zero-hop control datagram (CMD\_SEND\_CONTROL\_DATA).
#### Parameters
[Section titled “Parameters”](#parameters-35)
| Parameter | Type |
| --------- | -------- |
| `payload` | `Buffer` |
#### Returns
[Section titled “Returns”](#returns-53)
`Promise`<`void`>
***
### sendDmText()
[Section titled “sendDmText()”](#senddmtext)
```ts
sendDmText(
contactKey,
text,
messageId,
opts?): Promise<{
error?: string;
ok: boolean;
}>;
```
Defined in: [src/session/session.ts:800](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L800)
Send a DM to a contact. Returns ok on transport-level write success; the message state machine continues asynchronously: RESP\_SENT flips ‘sending’ → ‘sent’, PUSH\_SEND\_CONFIRMED flips ‘sent’ → ‘ack’.
#### Parameters
[Section titled “Parameters”](#parameters-36)
| Parameter | Type |
| --------------- | ------------------------- |
| `contactKey` | `string` |
| `text` | `string` |
| `messageId` | `string` |
| `opts` | { `attempt?`: `number`; } |
| `opts.attempt?` | `number` |
#### Returns
[Section titled “Returns”](#returns-54)
`Promise`<{ `error?`: `string`; `ok`: `boolean`; }>
***
### sendDmTextWithRetry()
[Section titled “sendDmTextWithRetry()”](#senddmtextwithretry)
```ts
sendDmTextWithRetry(
contactKey,
text,
messageId): Promise<{
error?: string;
ok: boolean;
}>;
```
Defined in: [src/session/session.ts:811](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L811)
Send a DM with retry + flood fallback, mirroring the official client’s behavior.
#### Parameters
[Section titled “Parameters”](#parameters-37)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
| `text` | `string` |
| `messageId` | `string` |
#### Returns
[Section titled “Returns”](#returns-55)
`Promise`<{ `error?`: `string`; `ok`: `boolean`; }>
***
### sendPathDiscoveryReq()
[Section titled “sendPathDiscoveryReq()”](#sendpathdiscoveryreq)
```ts
sendPathDiscoveryReq(contactKey): Promise;
```
Defined in: [src/session/session.ts:1446](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1446)
Discover the round-trip mesh path to a contact (floods a request, then awaits PUSH\_PATH\_DISCOVERY\_RESPONSE). Rejects on dispatch error/timeout.
#### Parameters
[Section titled “Parameters”](#parameters-38)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-56)
`Promise`<[`DiscoveredPath`](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/discoveredpath/)>
***
### sendRawData()
[Section titled “sendRawData()”](#sendrawdata)
```ts
sendRawData(opts): Promise;
```
Defined in: [src/session/session.ts:1458](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1458)
Send raw bytes DIRECT along a known path (CMD\_SEND\_RAW\_DATA).
#### Parameters
[Section titled “Parameters”](#parameters-39)
| Parameter | Type |
| -------------- | --------------------------------------------- |
| `opts` | { `pathHex`: `string`; `payload`: `Buffer`; } |
| `opts.pathHex` | `string` |
| `opts.payload` | `Buffer` |
#### Returns
[Section titled “Returns”](#returns-57)
`Promise`<`void`>
***
### sendRawPacket()
[Section titled “sendRawPacket()”](#sendrawpacket)
```ts
sendRawPacket(opts): Promise;
```
Defined in: [src/session/session.ts:1473](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1473)
Transmit a fully-formed mesh packet (CMD\_SEND\_RAW\_PACKET).
#### Parameters
[Section titled “Parameters”](#parameters-40)
| Parameter | Type |
| ---------------- | ------------------------------------------------ |
| `opts` | { `packetHex`: `string`; `priority`: `number`; } |
| `opts.packetHex` | `string` |
| `opts.priority` | `number` |
#### Returns
[Section titled “Returns”](#returns-58)
`Promise`<`void`>
***
### sendSelfAdvert()
[Section titled “sendSelfAdvert()”](#sendselfadvert)
```ts
sendSelfAdvert(flood?): Promise<{
error?: string;
ok: boolean;
}>;
```
Defined in: [src/session/session.ts:1334](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1334)
Send a self-advert. `flood=true` propagates many hops (so DM-able by distant peers); `flood=false` is zero-hop (cheap, only direct neighbors).
#### Parameters
[Section titled “Parameters”](#parameters-41)
| Parameter | Type | Default value |
| --------- | --------- | ------------- |
| `flood` | `boolean` | `true` |
#### Returns
[Section titled “Returns”](#returns-59)
`Promise`<{ `error?`: `string`; `ok`: `boolean`; }>
***
### sendStatusReq()
[Section titled “sendStatusReq()”](#sendstatusreq)
```ts
sendStatusReq(contactKey): Promise<{
error?: string;
ok: boolean;
}>;
```
Defined in: [src/session/session.ts:1499](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1499)
Request a status snapshot from a repeater/room/contact. The actual snapshot arrives later via PUSH\_STATUS\_RESPONSE → emit.repeaterStatus().
#### Parameters
[Section titled “Parameters”](#parameters-42)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-60)
`Promise`<{ `error?`: `string`; `ok`: `boolean`; }>
***
### sendTelemetryReq()
[Section titled “sendTelemetryReq()”](#sendtelemetryreq)
```ts
sendTelemetryReq(contactKey): Promise<{
error?: string;
ok: boolean;
}>;
```
Defined in: [src/session/session.ts:1504](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1504)
Request a CayenneLPP telemetry blob from a contact. See sendStatusReq.
#### Parameters
[Section titled “Parameters”](#parameters-43)
| Parameter | Type |
| ------------ | -------- |
| `contactKey` | `string` |
#### Returns
[Section titled “Returns”](#returns-61)
`Promise`<{ `error?`: `string`; `ok`: `boolean`; }>
***
### setAdvertLatLon()
[Section titled “setAdvertLatLon()”](#setadvertlatlon)
```ts
setAdvertLatLon(
lat,
lon,
alt?): Promise;
```
Defined in: [src/session/session.ts:1193](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1193)
Push device GPS coords used in self-adverts.
#### Parameters
[Section titled “Parameters”](#parameters-44)
| Parameter | Type |
| --------- | -------- |
| `lat` | `number` |
| `lon` | `number` |
| `alt?` | `number` |
#### Returns
[Section titled “Returns”](#returns-62)
`Promise`<`boolean`>
***
### setAdvertName()
[Section titled “setAdvertName()”](#setadvertname)
```ts
setAdvertName(name): Promise;
```
Defined in: [src/session/session.ts:1168](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1168)
Push the device’s advertised display name.
#### Parameters
[Section titled “Parameters”](#parameters-45)
| Parameter | Type |
| --------- | -------- |
| `name` | `string` |
#### Returns
[Section titled “Returns”](#returns-63)
`Promise`<`boolean`>
***
### setAutoAddConfig()
[Section titled “setAutoAddConfig()”](#setautoaddconfig)
```ts
setAutoAddConfig(flags): Promise;
```
Defined in: [src/session/session.ts:1247](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1247)
Push the auto-add flags byte. App-side `mode`/`maxHops`/`pullToRefresh`/ `showPublicKeys` are stored locally and don’t go on the wire.
#### Parameters
[Section titled “Parameters”](#parameters-46)
| Parameter | Type |
| --------- | --------------------------------------------------------------------------------------------------- |
| `flags` | [`AutoAddFlagsInput`](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/autoaddflagsinput/) |
#### Returns
[Section titled “Returns”](#returns-64)
`Promise`<`boolean`>
***
### setChannel()
[Section titled “setChannel()”](#setchannel)
```ts
setChannel(
idx,
name,
secretHex): Promise;
```
Defined in: [src/session/session.ts:1077](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1077)
Write a channel slot (add / edit / delete). Delete = empty name + zero key, which our enumerator filters as `empty`. Returns true if the radio acked, false on RESP\_ERR / timeout / disconnect.
#### Parameters
[Section titled “Parameters”](#parameters-47)
| Parameter | Type |
| ----------- | -------- |
| `idx` | `number` |
| `name` | `string` |
| `secretHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-65)
`Promise`<`boolean`>
***
### setContactFavourite()
[Section titled “setContactFavourite()”](#setcontactfavourite)
```ts
setContactFavourite(publicKeyHex, favourite): Promise;
```
Defined in: [src/session/session.ts:948](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L948)
Toggle the favourite flag (contact flags bit 0). For on-radio contacts, round-trips CMD\_ADD\_UPDATE\_CONTACT so the firmware persists the flag (protects from overwrite-oldest). Discovered-only contacts update locally.
#### Parameters
[Section titled “Parameters”](#parameters-48)
| Parameter | Type |
| -------------- | --------- |
| `publicKeyHex` | `string` |
| `favourite` | `boolean` |
#### Returns
[Section titled “Returns”](#returns-66)
`Promise`<`void`>
***
### setContactPath()
[Section titled “setContactPath()”](#setcontactpath)
```ts
setContactPath(
contactKey,
outPathHex,
opts?): Promise;
```
Defined in: [src/session/session.ts:821](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L821)
Write a contact’s out\_path back to the radio so the firmware uses it for future source-routed sends. Round-trips the contact’s current type/flags/ name (firmware *replaces* on update, not merges). On RESP\_OK, updates local state with the new path + `pathManual`.
#### Parameters
[Section titled “Parameters”](#parameters-49)
| Parameter | Type |
| -------------------- | ---------------------------------------------------- |
| `contactKey` | `string` |
| `outPathHex` | `string` |
| `opts` | { `manual`: `boolean`; `preferDirect?`: `boolean`; } |
| `opts.manual` | `boolean` |
| `opts.preferDirect?` | `boolean` |
#### Returns
[Section titled “Returns”](#returns-67)
`Promise`<`void`>
***
### setContactPreferDirect()
[Section titled “setContactPreferDirect()”](#setcontactpreferdirect)
```ts
setContactPreferDirect(contactKey, preferDirect): void;
```
Defined in: [src/session/session.ts:980](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L980)
Toggle the per-contact “always use direct (companion-side) login” flag. Local-only; no firmware write.
#### Parameters
[Section titled “Parameters”](#parameters-50)
| Parameter | Type |
| -------------- | --------- |
| `contactKey` | `string` |
| `preferDirect` | `boolean` |
#### Returns
[Section titled “Returns”](#returns-68)
`void`
***
### setDefaultFloodScope()
[Section titled “setDefaultFloodScope()”](#setdefaultfloodscope)
```ts
setDefaultFloodScope(name, keyHex): Promise;
```
Defined in: [src/session/session.ts:1386](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1386)
Persist the default flood scope (CMD\_SET\_DEFAULT\_FLOOD\_SCOPE).
#### Parameters
[Section titled “Parameters”](#parameters-51)
| Parameter | Type |
| --------- | -------- |
| `name` | `string` |
| `keyHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-69)
`Promise`<`void`>
***
### setDevicePin()
[Section titled “setDevicePin()”](#setdevicepin)
```ts
setDevicePin(pin): Promise;
```
Defined in: [src/session/session.ts:1425](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1425)
Set the BLE pairing PIN (0 disables it; otherwise a 6-digit number).
#### Parameters
[Section titled “Parameters”](#parameters-52)
| Parameter | Type |
| --------- | -------- |
| `pin` | `number` |
#### Returns
[Section titled “Returns”](#returns-70)
`Promise`<`void`>
***
### setDeviceTime()
[Section titled “setDeviceTime()”](#setdevicetime)
```ts
setDeviceTime(epochSecs): Promise;
```
Defined in: [src/session/session.ts:1352](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1352)
Set the radio’s RTC clock (unix seconds). Rejects ProtocolError if the radio returns RESP\_ERR (e.g. a clock earlier than its own → ILLEGAL\_ARG).
#### Parameters
[Section titled “Parameters”](#parameters-53)
| Parameter | Type |
| ----------- | -------- |
| `epochSecs` | `number` |
#### Returns
[Section titled “Returns”](#returns-71)
`Promise`<`void`>
***
### setFloodScopeKey()
[Section titled “setFloodScopeKey()”](#setfloodscopekey)
```ts
setFloodScopeKey(input): Promise;
```
Defined in: [src/session/session.ts:1374](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1374)
Override the send-scope key for outgoing flood packets (set / clear / unscoped).
#### Parameters
[Section titled “Parameters”](#parameters-54)
| Parameter | Type |
| --------- | ------------------------------------------------------------------------------------------------- |
| `input` | [`FloodScopeInput`](/meshcore-ts/api/andyshinn/namespaces/features/type-aliases/floodscopeinput/) |
#### Returns
[Section titled “Returns”](#returns-72)
`Promise`<`void`>
***
### setFloodScopeRegion()
[Section titled “setFloodScopeRegion()”](#setfloodscoperegion)
```ts
setFloodScopeRegion(region): Promise;
```
Defined in: [src/session/session.ts:1381](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1381)
Derive the 16-byte scope key for a public hashtag region (SHA-256(“#name”)\[:16]) and set it as the send-scope override. Equivalent to `setFloodScopeKey({ keyHex: deriveFloodScopeKey(region) })`.
#### Parameters
[Section titled “Parameters”](#parameters-55)
| Parameter | Type |
| --------- | -------- |
| `region` | `string` |
#### Returns
[Section titled “Returns”](#returns-73)
`Promise`<`void`>
***
### setGpsConfig()
[Section titled “setGpsConfig()”](#setgpsconfig)
```ts
setGpsConfig(cfg): Promise;
```
Defined in: [src/session/session.ts:1261](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1261)
Toggle the GPS module / change interval via custom-var KV. The firmware ignores intervals outside \[60, 86399]; we clamp client-side too.
#### Parameters
[Section titled “Parameters”](#parameters-56)
| Parameter | Type |
| ----------------- | -------------------------------------------------- |
| `cfg` | { `enabled`: `boolean`; `intervalSec`: `number`; } |
| `cfg.enabled` | `boolean` |
| `cfg.intervalSec` | `number` |
#### Returns
[Section titled “Returns”](#returns-74)
`Promise`<`boolean`>
***
### setOtherParams()
[Section titled “setOtherParams()”](#setotherparams)
```ts
setOtherParams(policy, sharePositionInAdvert): Promise;
```
Defined in: [src/session/session.ts:1214](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1214)
Push telemetry policy + multi-acks + advert-location-policy as one frame. The advert-location-policy flag mirrors `DeviceIdentity.sharePositionInAdvert` and `TelemetryPolicy` fields drive the rest.
#### Parameters
[Section titled “Parameters”](#parameters-57)
| Parameter | Type |
| ----------------------- | --------------------------------------------------------------------------------------------------------- |
| `policy` | { `base`: `0` \| `1` \| `2`; `env`: `0` \| `1` \| `2`; `loc`: `0` \| `1` \| `2`; `multiAcks`: `number`; } |
| `policy.base` | `0` \| `1` \| `2` |
| `policy.env` | `0` \| `1` \| `2` |
| `policy.loc` | `0` \| `1` \| `2` |
| `policy.multiAcks` | `number` |
| `sharePositionInAdvert` | `boolean` |
#### Returns
[Section titled “Returns”](#returns-75)
`Promise`<`boolean`>
***
### setPathHashMode()
[Section titled “setPathHashMode()”](#setpathhashmode)
```ts
setPathHashMode(size): Promise;
```
Defined in: [src/session/session.ts:990](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L990)
Set the radio’s global path-hash mode (bytes per hop). Persists on the radio and updates local RadioSettings on RESP\_OK.
#### Parameters
[Section titled “Parameters”](#parameters-58)
| Parameter | Type |
| --------- | ----------------- |
| `size` | `1` \| `2` \| `3` |
#### Returns
[Section titled “Returns”](#returns-76)
`Promise`<`void`>
***
### setRadioParams()
[Section titled “setRadioParams()”](#setradioparams)
```ts
setRadioParams(opts): Promise;
```
Defined in: [src/session/session.ts:1113](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1113)
Push LoRa modulation params (freq/bw/sf/cr) and TX power to the radio. Sent as two separate frames since the firmware splits them. Includes the trailing `clientRepeat` byte only when the connected firmware supports it (ver\_code ≥ 9 — surfaced via DeviceCapabilities.repeatMode).
#### Parameters
[Section titled “Parameters”](#parameters-59)
| Parameter | Type |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `opts` | { `bandwidthHz`: `number`; `codingRate`: `number`; `frequencyHz`: `number`; `repeatMode`: `boolean`; `spreadingFactor`: `number`; `txPowerDbm`: `number`; } |
| `opts.bandwidthHz` | `number` |
| `opts.codingRate` | `number` |
| `opts.frequencyHz` | `number` |
| `opts.repeatMode` | `boolean` |
| `opts.spreadingFactor` | `number` |
| `opts.txPowerDbm` | `number` |
#### Returns
[Section titled “Returns”](#returns-77)
`Promise`<`boolean`>
***
### setTuningParams()
[Section titled “setTuningParams()”](#settuningparams)
```ts
setTuningParams(params): Promise;
```
Defined in: [src/session/session.ts:1369](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1369)
Write the radio airtime/backoff tuning params (CMD\_SET\_TUNING\_PARAMS).
#### Parameters
[Section titled “Parameters”](#parameters-60)
| Parameter | Type |
| --------- | ----------------------------------------------------------------------------------------- |
| `params` | [`TuningParams`](/meshcore-ts/api/andyshinn/namespaces/features/interfaces/tuningparams/) |
#### Returns
[Section titled “Returns”](#returns-78)
`Promise`<`void`>
***
### shareContact()
[Section titled “shareContact()”](#sharecontact)
```ts
shareContact(destPublicKeyHex): Promise;
```
Defined in: [src/session/session.ts:1480](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1480)
Re-broadcast a known contact’s advert zero-hop (CMD\_SHARE\_CONTACT).
#### Parameters
[Section titled “Parameters”](#parameters-61)
| Parameter | Type |
| ------------------ | -------- |
| `destPublicKeyHex` | `string` |
#### Returns
[Section titled “Returns”](#returns-79)
`Promise`<`void`>
***
### signData()
[Section titled “signData()”](#signdata)
```ts
signData(data): Promise;
```
Defined in: [src/session/session.ts:1438](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1438)
Sign arbitrary bytes with the device’s ed25519 identity. Drives the CMD\_SIGN\_START → CMD\_SIGN\_DATA× → CMD\_SIGN\_FINISH state machine and returns the 64-byte signature (hex).
#### Parameters
[Section titled “Parameters”](#parameters-62)
| Parameter | Type |
| --------- | -------- |
| `data` | `Buffer` |
#### Returns
[Section titled “Returns”](#returns-80)
`Promise`<`string`>
***
### start()
[Section titled “start()”](#start)
```ts
start(): void;
```
Defined in: [src/session/session.ts:227](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L227)
#### Returns
[Section titled “Returns”](#returns-81)
`void`
***
### stop()
[Section titled “stop()”](#stop)
```ts
stop(): void;
```
Defined in: [src/session/session.ts:257](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L257)
#### Returns
[Section titled “Returns”](#returns-82)
`void`
***
### syncDeviceTime()
[Section titled “syncDeviceTime()”](#syncdevicetime)
```ts
syncDeviceTime(): Promise;
```
Defined in: [src/session/session.ts:1357](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L1357)
Push the host’s current time to the radio.
#### Returns
[Section titled “Returns”](#returns-83)
`Promise`<`void`>
# MeshCoreSessionOptions
Defined in: [src/session/session.ts:119](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L119)
## Properties
[Section titled “Properties”](#properties)
### appName?
[Section titled “appName?”](#appname)
```ts
optional appName?: string;
```
Defined in: [src/session/session.ts:123](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L123)
APP\_START app name. Default ‘meshcore-ts’.
***
### appVersion?
[Section titled “appVersion?”](#appversion)
```ts
optional appVersion?: number;
```
Defined in: [src/session/session.ts:125](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L125)
APP\_START version byte. Default 1.
***
### logger?
[Section titled “logger?”](#logger)
```ts
optional logger?: Logger;
```
Defined in: [src/session/session.ts:121](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L121)
***
### transport
[Section titled “transport”](#transport)
```ts
transport: Transport;
```
Defined in: [src/session/session.ts:120](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/session/session.ts#L120)
# @andyshinn/meshcore-ts
## Namespaces
[Section titled “Namespaces”](#namespaces)
* [Errors](/meshcore-ts/api/andyshinn/namespaces/errors/readme/)
* [Features](/meshcore-ts/api/andyshinn/namespaces/features/readme/)
* [Models](/meshcore-ts/api/andyshinn/namespaces/models/readme/)
* [Ports](/meshcore-ts/api/andyshinn/namespaces/ports/readme/)
* [Protocol](/meshcore-ts/api/andyshinn/namespaces/protocol/readme/)
* [Transports](/meshcore-ts/api/andyshinn/namespaces/transports/readme/)
## Classes
[Section titled “Classes”](#classes)
* [MeshCoreSession](/meshcore-ts/api/classes/meshcoresession/)
## Interfaces
[Section titled “Interfaces”](#interfaces)
* [MeshCoreSessionOptions](/meshcore-ts/api/interfaces/meshcoresessionoptions/)
## Variables
[Section titled “Variables”](#variables)
* [VERSION](/meshcore-ts/api/variables/version/)
# VERSION
```ts
const VERSION: string = version;
```
Defined in: [src/index.ts:5](https://github.com/andyshinn/meshcore-ts/blob/36e73e9a5a3e10ac134aeabbe78a4060213d671b/src/index.ts#L5)
# Changelog
> Notable changes to meshcore-ts, newest first.
Notable changes to `meshcore-ts`, newest first. Versions follow [semantic versioning](https://semver.org/); pre-`1.0` minor bumps may still carry behaviour changes.
## 0.4.0
[Section titled “0.4.0”](#040)
*Guest logins, and repeater logins now route over the mesh.*
### Added
[Section titled “Added”](#added)
* **Guest login.** `session.repeaterLogin(contactKey, '')` now performs a guest login with an empty password. This is the bootstrap a public repeater expects before it will answer login-gated requests: the flooded login reply installs the contact’s `out_path` and adds you to the repeater’s ACL.
### Changed
[Section titled “Changed”](#changed)
* **Repeater logins always dispatch via `CMD_SEND_LOGIN` (`0x1a`).** The radio routes the frame for us — **direct** when the contact’s `out_path` is known, **flood** when it isn’t — so the one command covers Direct / Flood / N-hop. Previously only `preferDirect` contacts used `CMD_SEND_LOGIN`; mesh logins went out as an anonymous request (`CMD_SEND_ANON_REQ`, `0x39`) that rejected empty passwords, so a guest login was impossible.
* `repeaterLogin`’s signature and return shape are unchanged (`repeaterLogin(contactKey, password) → LoginSuccess & { mode, effective }`); `mode`/`effective` remain UI labels derived from the contact’s path state.
### Removed
[Section titled “Removed”](#removed)
* **`Protocol.buildAnonLogin`.** It only existed to wrap a password as anon-request data for the old mesh-login path, and it could not build a valid guest frame (an empty anon request is rejected by the firmware). Login framing now goes through `Protocol.buildSendLogin`, which accepts an empty password.
## 0.3.2
[Section titled “0.3.2”](#032)
*Developed after 0.3.1 as the `0.3.2-dev` series and shipped as part of 0.4.0.*
### Fixed
[Section titled “Fixed”](#fixed)
* **Public owner-info and telemetry now work without a login.** These requests previously targeted the wrong companion command families, so a repeater serving them publicly never answered (while `meshcore_py` did).
* `session.repeaterRequestOwnerInfo(contactKey)` now uses the public anon OWNER request and parses `[now][name\nowner]`; it returns `OwnerInfo | null` (`firmwareVersion` is empty — the anon response carries no version).
* `session.sendTelemetryReq(contactKey)` now uses the binary TELEMETRY request and decodes the tagged CayenneLPP payload, re-emitting the same `repeaterTelemetry` snapshot. The legacy `PUSH_TELEMETRY_RESPONSE` handler is retained for self/legacy devices.
* **Multi-byte path-hash sizes are handled correctly.** The `out_path` length byte is now packed/parsed as MeshCore’s `((hashSize - 1) << 6) | hopCount`, and routes are reversed by hop, so hash sizes larger than one byte are no longer mangled (previously the code assumed 1-byte hashes).
### Added
[Section titled “Added”](#added-1)
* Low-level public anon request access: `session.sendAnonReq(contactKey, anonType)` (`anonType` from `Protocol.ANON_REQ_TYPE`).
* Typed public anon wrappers: `session.repeaterRequestRegions(contactKey)` (region-name listing) and `session.repeaterRequestClock(contactKey)` (the repeater’s RTC clock, unix seconds).
# Decoding on-air packets
> Receive raw LoRa mesh packets via the rawPacket event and structurally decode them with decodeOnAirPacket.
Beyond the parsed companion-protocol events, the session can hand you the **raw on-air bytes** it receives over the air, and a standalone decoder turns those bytes into a structured, inspectable shape — the basis for a packet inspector.
## The `rawPacket` event
[Section titled “The rawPacket event”](#the-rawpacket-event)
When the radio reports a received LoRa packet (`PUSH_RAW_DATA` / `PUSH_LOG_RX_DATA`), the session emits `rawPacket`:
```ts
session.events.on('rawPacket', (pkt) => {
// pkt: { hex: string; source: 'raw' | 'log_rx'; snr: number; rssi: number }
console.log(pkt.source, pkt.snr, pkt.rssi, pkt.hex);
});
```
* `hex` — the inner on-air mesh-packet bytes (the companion framing and the SNR/RSSI prefix are already stripped).
* `source` — `'log_rx'` for `PUSH_LOG_RX_DATA` (0x88) or `'raw'` for `PUSH_RAW_DATA` (0x84).
* `snr` / `rssi` — link metrics for that reception.
## `decodeOnAirPacket(hex)`
[Section titled “decodeOnAirPacket(hex)”](#decodeonairpackethex)
`decodeOnAirPacket` structurally decodes those bytes into a tagged union. It performs **no decryption** (cipher bodies are reported only as a length) and **never throws** — unparseable or unsupported input yields the `raw` fallback variant.
```ts
import { Protocol } from '@andyshinn/meshcore-ts';
session.events.on('rawPacket', (pkt) => {
const packet = Protocol.decodeOnAirPacket(pkt.hex); // also accepts a Uint8Array
console.log(packet.payloadTypeName); // e.g. 'GRP_TXT'
switch (packet.payload.kind) {
case Protocol.PayloadKind.ADVERT:
console.log(packet.payload.advert.appData.name);
break;
case Protocol.PayloadKind.GRP_TXT:
console.log(packet.payload.channelHash, packet.payload.cipherLen);
break;
case Protocol.PayloadKind.TRACE:
console.log(packet.payload.tag, packet.payload.hopCount, packet.payload.snr);
break;
// …txtMsg, req, response, anonReq, ack, path, control*, raw
}
});
```
> `Protocol.PayloadKind` is optional sugar — the raw discriminant strings (`case 'grpTxt':`) work equally well in the switch.
`decodeOnAirPacket` returns `{ header, payloadTypeName, payload }`:
* `header` — the mesh-packet header (route type, payload type/version, path), or `null` if the bytes don’t parse as a mesh packet.
* `payloadTypeName` — the on-air payload type name for display (e.g. `TXT_MSG`, `TRACE`).
* `payload` — a discriminated union on `payload.kind`, covering `advert`, `txtMsg`, `grpTxt`, `req`, `response`, `anonReq`, `ack`, `path`, `trace`, `controlDiscoverReq`, `controlDiscoverResp`, `controlOther`, and a `raw` fallback.
See `OnAirPacket` and `OnAirPayload` in the [API reference](../../api/readme/) for every field of every variant.
## A note on the two sources
[Section titled “A note on the two sources”](#a-note-on-the-two-sources)
Only `log_rx` (0x88) packets follow the on-air wire format byte-for-byte. `raw` (0x84) packets carry a firmware reserved-byte sentinel where the path length would be, so `decodeOnAirPacket` will usually return the `raw` fallback for them — the `source` field lets you caveat the display accordingly.
## No hardware needed
[Section titled “No hardware needed”](#no-hardware-needed)
`decodeOnAirPacket` is a pure function: you can decode a pasted or captured hex string with no live session at all. See `examples/decode-on-air-packet.ts` for a runnable, hardware-free demonstration across several payload types.
# Events & state
> Subscribe to the typed event emitter and read the in-memory state model.
You don’t inject events or state — the session creates them and exposes them:
* `session.events` — a typed emitter. Subscribe with `session.events.on('contacts', cb)`.
* `session.state` — the in-memory model. Read with `session.state.getContacts()`, `getChannels()`, `getOwner()`, `getMessagesForKey(key)`, and friends.
## Subscribe before connecting
[Section titled “Subscribe before connecting”](#subscribe-before-connecting)
Subscribe **before** driving the transport to `connected` so you observe the full handshake and initial sync:
```ts
import { Ports } from '@andyshinn/meshcore-ts';
session.events.on('owner', (owner) => console.log('this device:', owner?.name));
session.events.on('contacts', (contacts) => persistContacts(contacts));
session.events.on('syncProgress', (p) => console.log(p.phase, p.contacts));
// Named constants are available for every event key — both forms are equivalent:
session.events.on(Ports.EventName.RAW_PACKET, (pkt) => { /* … */ });
// equivalent to: session.events.on('rawPacket', (pkt) => { … })
session.start();
transport.setState('connected');
```
## The events
[Section titled “The events”](#the-events)
`transportState`, `rawPacket`, `channels`, `channelPresence`, `syncProgress`, `contacts`, `discovered`, `contactEvicted`, `contactDiscovered`, `contactsFull`, `contactObserved`, `messages`, `messageUpserted`, `messageState`, `messagePathHeard`, `owner`, `radioSettings`, `repeaterStatus`, `repeaterTelemetry`, `pathLearned`, `deviceIdentity`, `autoAddConfig`, `telemetryPolicy`, `gpsConfig`, `deviceInfo`, `deviceCapabilities`.
All payloads are exported types — see `Ports.EventMap` in the [API reference](../../api/readme/).
There is intentionally no generic `error` event. Specific recoverable conditions get their own dedicated event instead — for example `contactsFull` fires when the radio’s contact store is full and a new advert could not be auto-added. Adapters can bridge such events onto their own error/toast channel.
`rawPacket` carries the raw on-air bytes of each received LoRa packet; pair it with `decodeOnAirPacket` to structurally decode them — see [Decoding on-air packets](../decoding-packets/).
## What the session can do
[Section titled “What the session can do”](#what-the-session-can-do)
Beyond messaging, the session covers contacts & paths (`getContactByKey`, `setContactPath`, `addContactToRadio`, `setContactFavourite`, …), channels (`setChannel`, `pickFreeSlot`, `deriveSecret`, …), radio/device settings (`setRadioParams`, `setAdvertName`, `setGpsConfig`, `reboot`, …), time (`getDeviceTime` / `setDeviceTime` / `syncDeviceTime`), device admin & signing (`exportPrivateKey`, `setDevicePin`, `factoryReset`, `signData`), path diagnostics & raw frames (`sendPathDiscoveryReq`, `sendRawData`, …), and repeater administration (`repeaterLogin`, `repeaterSendCli`, `repeaterTracePath`, `sendStatusReq`, `sendTelemetryReq`, …).
See the [API reference](../../api/readme/) for the complete, typed surface.
# Getting started
> Install meshcore-ts, construct a session, and send your first message.
`meshcore-ts` speaks the MeshCore **companion-radio** wire protocol — the framing a phone or desktop app uses to talk to a MeshCore device over BLE or serial. It owns the protocol logic, frame parsing, the connect handshake, the DM/channel messaging state machines, and repeater administration, and keeps an in-memory model of contacts, channels, messages, and device state.
You bring a [Transport](../transports/) (the bytes in and out of your radio); the library does everything above that line and emits typed events.
## Install
[Section titled “Install”](#install)
```sh
pnpm add @andyshinn/meshcore-ts
```
> **Node-only.** Uses `node:buffer` and `node:crypto`. Not a browser build.
## Construct a session and send a message
[Section titled “Construct a session and send a message”](#construct-a-session-and-send-a-message)
The exported `Transports.Loopback` lets you run the whole flow without hardware — swap it for your BLE/serial adapter later.
```ts
import { MeshCoreSession, Transports } from '@andyshinn/meshcore-ts';
const transport = new Transports.Loopback(); // swap for your BLE/serial adapter
const session = new MeshCoreSession({ transport /*, logger, appName, appVersion */ });
// Subscribe BEFORE connecting so you don't miss the handshake.
session.events.on('owner', (owner) => console.log('this device:', owner?.name));
session.events.on('contacts', (contacts) => persistContacts(contacts));
session.events.on('channels', (channels) => persistChannels(channels));
session.events.on('messages', (key, messages) => persistMessages(key, messages));
session.events.on('messageState', (id, state) => updateBubble(id, state));
session.events.on('syncProgress', (p) => console.log(p.phase, p.contacts));
session.start();
// When your transport connects, the session runs the handshake automatically:
// DEVICE_QUERY → APP_START → GET_CONTACTS → channel enumeration → drain.
transport.setState('connected');
// Send a direct message (you supply the message id; track state via events):
await session.sendDmText('c:', 'hello', 'msg-1');
```
## What happens on connect
[Section titled “What happens on connect”](#what-happens-on-connect)
When your transport reports `connected`, the session runs the connect handshake for you and emits events as state arrives. Subscribe before calling `transport.setState('connected')` so you observe the full sync.
Next steps:
* [Implement a Transport](../transports/) for your radio.
* [Send DMs and channel messages](../messaging/) and track delivery state.
* [Browse the events and state model](../events-and-state/).
* [Full API reference](../../api/readme/).
# Messaging
> Send direct and channel messages and track delivery state via events.
The session exposes high-level send methods and surfaces delivery progress through the `messageState` event. You supply the message id; the session tracks its lifecycle.
## Direct messages
[Section titled “Direct messages”](#direct-messages)
```ts
// You supply the message id and track state via events:
await session.sendDmText('c:', 'hello', 'msg-1');
```
The message moves through states surfaced via the `messageState` event:
```ts
session.events.on('messageState', (id, state) => updateBubble(id, state));
// 'sending' → 'sent' (RESP_SENT) → 'ack' (PUSH_SEND_CONFIRMED)
```
Need retries? Use `sendDmTextWithRetry`:
```ts
await session.sendDmTextWithRetry('c:', 'are you there?', 'msg-2');
```
## Channel messages
[Section titled “Channel messages”](#channel-messages)
```ts
const { ok, channelHash } = await session.sendChannelText('ch:General', 'hi all');
```
Optionally attribute heard repeater relays back to your message — this emits the `messagePathHeard` event:
```ts
if (ok && channelHash != null) {
session.registerChannelSend({ messageId: 'msg-3', channelHash });
}
```
## Reading message history
[Section titled “Reading message history”](#reading-message-history)
Messages are kept in the in-memory state model, keyed by conversation:
```ts
const messages = session.state.getMessagesForKey('c:');
```
See [Events & state](../events-and-state/) for the full list of readers and events, and the [API reference](../../api/readme/) for exact signatures.
# Transports
> Implement the Transport port that moves companion frames to and from your radio.
A **Transport** is the only thing you must implement. It moves raw companion frames to and from your radio. The library handles companion-frame parsing (`0x84`/`0x88` mesh vs. companion classification) internally — your transport only deals in raw frame bytes. BLE/serial drivers, scanning, and native deps stay **your** responsibility; they are intentionally not in this library.
## The interface
[Section titled “The interface”](#the-interface)
```ts
// The one contract you implement — exposed as `Ports.Transport`.
// (`TransportState` is `Models.TransportState`.)
interface Transport {
send(bytes: Uint8Array): Promise; // write one companion frame
onData(cb: (chunk: Uint8Array) => void): void; // one complete frame per call
onStateChange(cb: (s: TransportState) => void): void;
getState(): TransportState; // 'idle' | 'scanning' | 'connecting' | 'connected' | 'error'
}
```
> **Framing rule:** Each `onData` chunk must be **exactly one complete companion frame** — which is what a single BLE GATT notification delivers.
## Loopback (tests & examples)
[Section titled “Loopback (tests & examples)”](#loopback-tests--examples)
A ready-made `Transports.Loopback` is exported for tests and examples:
* `send` captures outbound frames to `.sent`
* `.receive(bytes)` / `.receiveHex(hex)` deliver inbound frames
* `.setState(s)` drives connection state
```ts
import { Transports } from '@andyshinn/meshcore-ts';
const transport = new Transports.Loopback();
transport.setState('connected'); // drive the session's connect handshake
transport.receiveHex('84...'); // feed an inbound companion frame
console.log(transport.sent); // inspect what the session wrote
```
## Implementing a real transport (sketch)
[Section titled “Implementing a real transport (sketch)”](#implementing-a-real-transport-sketch)
```ts
import { Models, Ports } from '@andyshinn/meshcore-ts';
class BleTransport implements Ports.Transport {
#dataCb?: (c: Uint8Array) => void;
#stateCb?: (s: Models.TransportState) => void;
#state: Models.TransportState = 'idle';
// your BLE library calls this once per GATT notification (= one frame):
#onNotification = (buf: Uint8Array) => this.#dataCb?.(buf);
async send(bytes: Uint8Array) { await this.#char.writeValue(bytes); }
onData(cb: (c: Uint8Array) => void) { this.#dataCb = cb; }
onStateChange(cb: (s: Models.TransportState) => void) { this.#stateCb = cb; }
getState() { return this.#state; }
// call #setState('connected') from your connect flow:
#setState(s: Models.TransportState) { this.#state = s; this.#stateCb?.(s); }
}
```
## Logger (optional)
[Section titled “Logger (optional)”](#logger-optional)
```ts
interface Logger { trace; debug; info; warn; error: (...args: unknown[]) => void; }
```
Defaults to a no-op. Pass your own (`pino`, `console`, etc.) to see protocol-level logging:
```ts
const session = new MeshCoreSession({ transport, logger: console });
```
See the [events and state model](../events-and-state/) next, or the [full API reference](../../api/readme/).
## Built-in transport adapters
[Section titled “Built-in transport adapters”](#built-in-transport-adapters)
The `Transports` namespace ships ready-made adapters so you don’t have to write the boilerplate above for the two most common hardware transports.
## Serial (node-serialport)
[Section titled “Serial (node-serialport)”](#serial-node-serialport)
```ts
import { SerialPort } from 'serialport';
import { MeshCoreSession, Transports } from '@andyshinn/meshcore-ts';
const port = new SerialPort({ path: '/dev/ttyUSB0', baudRate: 115200 });
const session = new MeshCoreSession({ transport: new Transports.Serial(port) });
session.start(); // Transports.Serial observes open/close/error; it does not open the port
```
`Transports.Serial` frames the MeshCore serial protocol for you. You own opening and closing the port.
## TCP (node:net)
[Section titled “TCP (node:net)”](#tcp-nodenet)
TCP devices speak the **same** companion wire framing as serial, and the only driver is the `node:net` builtin — so `Transports.Tcp` is **complete and batteries-included**: it owns its socket and its connect/close lifecycle (no bring-your-own driver, no third-party deps).
```ts
import { MeshCoreSession, Transports } from '@andyshinn/meshcore-ts';
const transport = new Transports.Tcp({ host: '192.168.1.50', port: 5000 });
await transport.connect(); // dials; resolves on connect, rejects on error/timeout
const session = new MeshCoreSession({ transport });
session.start();
// later:
await transport.close(); // destroys the socket; state returns to idle
```
Options: `{ host, port, connectTimeoutMs? = 10000, maxFrameBytes? = 256, createSocket? }`. `createSocket(host, port)` is a test seam (defaults to `net.createConnection`). `Transports.createTcp(opts)` is the factory form. State transitions are `idle → connecting → connected → idle` (on `close()`) or `error` (on connect failure/timeout).
## BLE (noble)
[Section titled “BLE (noble)”](#ble-noble)
```ts
import noble from '@abandonware/noble';
import { MeshCoreSession, Transports } from '@andyshinn/meshcore-ts';
// After you have connected `peripheral` and discovered `rxChar`/`txChar`
// for Transports.NORDIC_UART.rxWrite / Transports.NORDIC_UART.txNotify:
const transport = Transports.createBle({
write: (bytes) => rxChar.writeAsync(Buffer.from(bytes), true),
subscribe: (onBytes) => {
txChar.on('data', (data: Buffer) => onBytes(new Uint8Array(data)));
txChar.subscribe(() => {});
},
watchState: (onState) => peripheral.on('disconnect', () => onState('idle')),
});
const session = new MeshCoreSession({ transport });
session.start();
```
## BLE (React Native — react-native-ble-plx)
[Section titled “BLE (React Native — react-native-ble-plx)”](#ble-react-native--react-native-ble-plx)
`react-native-ble-plx` deals in base64 strings, so decode/encode in your hooks:
```ts
import { Buffer } from 'buffer';
import { MeshCoreSession, Transports } from '@andyshinn/meshcore-ts';
const transport = Transports.createBle({
write: (bytes) =>
device.writeCharacteristicWithResponseForService(
service, rxUuid, Buffer.from(bytes).toString('base64'),
).then(() => {}),
subscribe: (onBytes) =>
device.monitorCharacteristicForService(service, txUuid, (_err, ch) => {
if (ch?.value) onBytes(new Uint8Array(Buffer.from(ch.value, 'base64')));
}),
watchState: (onState) =>
device.onDisconnected(() => onState('idle')),
});
const session = new MeshCoreSession({ transport });
session.start();
```