@enfinitos/sdk-satellite
EnfinitOS reference SDK for the SATELLITE substrate.
This is an adapter-mostly SDK: a thin operator-side wrapper that translates ground-segment-modulator vocabulary (carriers, MODCODs, beams, footprints, Es/N0, BER) into the EnfinitOS platform's substrate-agnostic proof and footprint vocabulary.
Architecture
┌──────────────────────────────────────┐
│ EnfinitOSSatelliteClient │
│ (ts-core/src/satelliteClient.ts) │
│ │
│ ┌────────────────────────────────┐ │
│ │ EnfinitOSRendererClient │ │
│ │ (proof-of-play, health, etc.) │ │
│ └────────────────────────────────┘ │
│ ┌────────────────────────────────┐ │
│ │ FootprintReporter │ │
│ │ → POST /broadcast/footprint │ │
│ └────────────────────────────────┘ │
│ ┌────────────────────────────────┐ │
│ │ ComplianceEmitter │ │
│ │ → ITU-R / FCC / Ofcom packs │ │
│ └────────────────────────────────┘ │
└────────────────┬─────────────────────┘
│ attach(modulator)
┌────────────────▼─────────────────────┐
│ ModulatorAdapter │
│ (interface — vendor-specific impl) │
└──┬──────────────────────────────┬────┘
│ │
┌───────▼──────┐ ┌──────▼───────┐
│ Dialog NMS │ │ Comtech │
│ (ST Eng / │ │ CDM-625 / │
│ iDirect) │ │ CDM-700 │
└──────────────┘ └──────────────┘
2026 platform reality
Modulation
- DVB-S2X (ETSI EN 302 307-2) is the only modulation new builds should select. The SDK accepts DVB-S2 carriers from legacy modulators for retrofit deployments, but the compliance emitters flag them with
legacy: trueso the operator sees the drift.
Ground-segment vendors
- ST Engineering iDirect (acquired Newtec in 2019; product now branded "Dialog") — dominant on commercial VSAT + DTH. The SDK ships a Dialog NMS REST API adapter.
- Comtech EF Data — dominant on direct-to-home + military point-to-point. SNMP-first (CDM-625 MIB) with a REST shim on firmware 3.x+. The SDK ships an adapter against both control planes.
Carrier topology
- AMC-SCPC — Adaptive Modulation & Coding Single Channel Per Carrier. The mainstream commercial DTH and point-to-point default.
- MCPC — Multiple Channels Per Carrier. High-density transponder fills.
The SDK does NOT decide which topology a carrier runs as — the operator declares it on each SatelliteCarrier and the SDK reports it through.
Regulatory evidence
- ITU-R BR IFIC — the operator-side payload for the bi-weekly BR IFIC submission funnel. Articles 9 (geostationary coordination) and 11 (notification) of the Radio Regulations.
- FCC Part 25 (US) — 47 CFR §25.273 quarterly transmission reports + §25.218 EIRP-density attestation.
- Ofcom (UK) — Wireless Telegraphy Act 2006 s.8 satellite earth-station licences.
- (ANFR France / BNetzA Germany follow the same pack shape.)
The SDK does NOT file with regulators. It assembles the operator-side payload; operators funnel the pack into their authorised filing pipeline.
Platform-side endpoints
POST /broadcast/footprint— needs-future-API-work. The platform's existing satellite ephemeris service consumes claims from operator rights filings; the dedicated runtime push endpoint for live carrier state has not landed yet. The SDK ships with the endpoint configurable so early adopters can stand up a thin receiver while the route lands.POST /runtime/event-ingest— existing. Per-carrier UP/DOWN/ QUALITY events ride this endpoint as substrate-tagged PlayEvents.POST /runtime/health-ingest— existing. Teleport-level health heartbeats.
Getting started
import {
EnfinitOSSatelliteClient,
type SatelliteCarrier,
type BroadcastFootprint,
} from "@enfinitos/sdk-satellite";
import { DialogAdapter } from "@enfinitos/sdk-satellite-dialog-idirect";
const carrier: SatelliteCarrier = {
carrierId: "GH22-FWD-K1",
centerFrequencyMhz: 14_250,
symbolRateMsps: 30,
rollOff: 0.05,
modcod: "32APSK 4/5",
modulation: "DVB-S2X",
topology: "AMC-SCPC",
};
const footprint: BroadcastFootprint = {
coveredTerritories: ["GB", "IE", "FR", "DE"],
};
const client = new EnfinitOSSatelliteClient({
apiBaseUrl: "https://api.enfinitos.com",
satelliteId: "GH-22",
teleportId: "BetzdorfNorth",
authToken: process.env.ENFINITOS_TOKEN!,
carriers: [carrier],
operatorRef: "SES-S.A.",
});
await client.start();
// Manual reporting
await client.reportCarrierUp(carrier, footprint);
await client.reportSignalQuality(carrier, 12.4, 1e-7);
// Or attach a modulator and let it stream
const dialog = new DialogAdapter({
nmsBaseUrl: "https://nms.example.com",
modulatorId: "hub-01",
auth: {
kind: "oauth2",
clientId: process.env.DIALOG_CLIENT_ID!,
clientSecret: process.env.DIALOG_CLIENT_SECRET!,
},
});
await client.attach(dialog);
// Quarterly evidence
const pack = await client.emitFccEvidence(
new Date("2026-04-01"),
new Date("2026-07-01"),
);
Honest scope
This SDK is intentionally narrow. It does NOT:
- Tune modulators or control beam pointing.
- Validate ITU coordination requests.
- File evidence with regulators.
- Implement frequency-coordination logic (that's the operator's RF-planning team's job).
It DOES:
- Translate vendor modulator state into EnfinitOS PlayEvents + BroadcastFootprintClaims.
- Assemble the operator-side regulatory pack envelope.
- Run a structured Es/N0 + BER ingest path through the existing renderer-core proof pipeline.