ProtocolConfig
export interface ProtocolConfig {
appId: string;
profile: string;
transports?: TransportsConfig;
binaryWireEnabled?: boolean;
fileTransfer?: FileTransferConfig;
encryption?: EncryptionConfig;
group?: {
maxGroupMembers?: number;
relayEnabled?: boolean;
relayBroadcastEnabled?: boolean;
enforceAdminCommits?: boolean;
};
dors?: {
preferOnline?: boolean;
switchHysteresis?: number;
switchCooldownSecs?: number;
bleToWifiRetryThreshold?: number;
minSuccessRateBeforeEscalation?: number;
minBleSamplesBeforeSuccessRateEscalation?: number;
rssiSwitchThreshold?: number;
congestionQueueThreshold?: number;
stabilityWindowSecs?: number;
poorSignalDurationSecs?: number;
ttlEscalationThreshold?: number;
congestionDurationSecs?: number;
ttlEscalationHoldSecs?: number;
historyWindowSize?: number;
queueRecoveryRatio?: number;
lowBatteryThreshold?: number;
relayMinBatteryLevel?: number;
relayOptimalConnectionCount?: number;
};
meshRelay?: MeshRelayConfig;
relay?: RelayConfig;
network?: NetworkConfig;
reliability?: ReliabilityConfig;
data?: DataConfig;
security?: SecurityConfig;
controlFreshnessEnforced?: boolean;
}
TransportsConfig
export interface TransportsConfig {
ble?: BleTransportConfig;
internet?: InternetTransportConfig;
wifiDirect?: WifiDirectTransportConfig;
reticulum?: ReticulumTransportConfig;
nostr?: NostrTransportConfig;
}
BleTransportConfig
export interface BleTransportConfig {
enabled: boolean;
}
InternetTransportConfig
export interface InternetTransportConfig {
enabled: boolean;
serverAddress?: string;
autoReconnect?: boolean;
reconnectDelay?: number;
authToken?: string;
}
WifiDirectTransportConfig
export interface WifiDirectTransportConfig {
enabled: boolean;
deviceName?: string;
autoAccept?: boolean;
groupOwnerIntent?: number;
}
ReticulumTransportConfig
export interface ReticulumTransportConfig {
enabled: boolean;
daemonAddress?: string;
autoReconnect?: boolean;
maxReconnectAttempts?: number;
}
NostrTransportConfig
export interface NostrTransportConfig {
enabled: boolean;
relayUrls?: string[];
connectionTimeout?: number;
autoReconnect?: boolean;
reconnectDelay?: number;
maxReconnectAttempts?: number;
sealingEnabled?: boolean;
coldContactEnabled?: boolean;
usernameDiscoveryEnabled?: boolean;
}
FileTransferConfig
export interface FileTransferConfig {
chunkSize?: number;
maxFileSize?: number;
}
EncryptionConfig
export interface EncryptionConfig {
enabled?: boolean;
autoKeyExchange?: boolean;
storePending?: boolean;
requireEncryption?: boolean;
compactEnvelopeEnabled?: boolean;
richPayloadEnabled?: boolean;
cryptoRecoveryEnabled?: boolean;
pendingQueue?: PendingQueueConfig;
}
PendingQueueConfig
export interface PendingQueueConfig {
maxPendingPerPeer?: number;
maxPendingGlobal?: number;
pendingTtlMs?: number;
overflowPolicy?: OverflowPolicy;
}
OverflowPolicy
export type OverflowPolicy = 'drop_oldest' | 'drop_newest';
MeshRelayConfig
export interface MeshRelayConfig {
maxTtl?: number;
denseMaxTtl?: number;
denseDegree?: number;
fanout?: number;
jitterMinMs?: number;
jitterMaxMs?: number;
ratePerSec?: number;
burst?: number;
peerRatePerSec?: number;
peerBurst?: number;
queueCapacity?: number;
biasMinScale?: number;
biasMaxHandicapMs?: number;
activityWindowMs?: number;
activityMinForwards?: number;
activityIdleWindows?: number;
}
RelayConfig
export interface RelayConfig {
allowRelay?: boolean;
minBatteryForRelay?: number;
relayPriority?: RelayPriority;
}
RelayPriority
export type RelayPriority = 'never' | 'auto' | 'always';
NetworkConfig
export interface NetworkConfig {
initialTtl?: number;
}
ReliabilityConfig
export interface ReliabilityConfig {
ack?: AckConfig;
retry?: RetryConfig;
dedup?: DedupConfig;
}
AckConfig
export interface AckConfig {
defaultTimeoutMs?: number;
maxPendingAcks?: number;
}
RetryConfig
export interface RetryConfig {
maxRetries?: number;
initialDelayMs?: number;
maxDelayMs?: number;
backoffMultiplier?: number;
outboxMaxLifetimeMs?: number;
pendingMessageMaxLifetimeMs?: number;
edgeDrivenUnreachableDm?: boolean;
}
DedupConfig
export interface DedupConfig {
maxTrackedMessages?: number;
retentionTimeSecs?: number;
}
DataConfig
export interface DataConfig {
enabled?: boolean;
}
SecurityConfig
export interface SecurityConfig {
controlFreshnessEnforced?: boolean;
}
TelemetryConfig
export interface TelemetryConfig {
apiKey: string;
appId: string;
appVersion?: string;
debug?: boolean;
flushIntervalMs?: number;
maxBatchBytes?: number;
maxBufferedRecords?: number;
includeDeviceId?: boolean;
scrubIds?: boolean;
mlsVerbosity?: MlsVerbosity;
metricsCadenceMs?: number;
routingDiagnostic?: boolean;
mlsSamplingBypass?: boolean;
}
MlsVerbosity
export type MlsVerbosity = 'off' | 'lifecycle' | 'diagnostic';

