// Compiled, never run (test/typings.test.js, npm run check): a CommonJS TypeScript consumer of the declarations in // dist/types, resolved through the package's "exports". A "@ts-expect-error" line fails the compile when the // declaration stops rejecting what follows it. import { ActionMapping, AlexaActions, AlexaInterfaceType, Assets, BrightnessController, DeclarationError, DisplayCategory, EndpointHealth, PowerController, PowerState, TemperatureSensor, asset, registry, text, } from "alex2node"; import type { Alex2MQTT, Alex2MQTTOptions, AlexaInterface, AlexaStatusMessage, AssetId, Capability, CapabilityJson, ChangeCause, Device, DisplayCategoryName, EndpointJson, Infer, InterfaceDescriptor, Label, Schema, SupportedMode, Temperature, UnitOfMeasure, } from "alex2node"; declare const bridge: Alex2MQTT; declare const message: AlexaStatusMessage; declare const capability: AlexaInterface; const options: Alex2MQTTOptions = { host: "mqtt://127.0.0.1:1883", mqtt: { reconnectPeriod: 1000 }, log: (line) => line.length }; const device: Device = bridge.registerDevice("Lamp", "lamp-1", [DisplayCategory.LIGHT, DisplayCategory.SWITCH]); const added: AlexaInterface = device.addCapability(AlexaInterfaceType.POWER_CONTROLLER, { proactivelyReported: true }); // ActionMapping: the payload is optional, and an object const close = new ActionMapping([AlexaActions.Close], "TurnOn"); capability.addActionMapping(close); capability.addActionMapping(new ActionMapping([AlexaActions.Open], "SetRangeValue", { rangeValue: 100 })); // @ts-expect-error a payload is an object or, as in 1.x, a string capability.addActionMapping(new ActionMapping([AlexaActions.Open], "SetRangeValue", 100)); // addHealthProp: the enum or its string values, chainable const chained: AlexaStatusMessage = message.addHealthProp(EndpointHealth.OK).addHealthProp("UNREACHABLE", 50); // @ts-expect-error not a connectivity value message.addHealthProp("ASLEEP"); // @ts-expect-error a power state is ON or OFF message.addPowerControllerProp("ON "); message.addPowerControllerProp(PowerController.ON); // PowerController is the descriptor of the interface as well; the enum alone is PowerState const on: PowerController = PowerState.ON; const namespace: string = PowerController.namespace; const reachable: EndpointHealth = EndpointHealth.OK; // addSupportedModes: Mode objects, plain strings still accepted const mode: SupportedMode = { value: "Fan.Auto", modeResources: { friendlyNames: [{ "@type": "text", value: { text: "Auto", locale: "en-US" } }] } }; capability.addSupportedModes([mode, "Fan.On"]); const cause: ChangeCause = "PHYSICAL_INTERACTION"; const sent: Promise = device.getChangeReport(cause).addPowerControllerProp(PowerController.OFF).send(); // @ts-expect-error not a cause Alexa knows device.getChangeReport("BUTTON"); // bridge.addDevice() and device.add(): the options of the interface and the ones every capability has const blinds: Device = bridge.addDevice({ endpointId: "bedroom-blinds", name: "Bedroom Blinds", categories: ["INTERIOR_BLIND", DisplayCategory.OTHER], cookie: { room: "bedroom" }, endpointHealth: false, }); // @ts-expect-error an endpoint has categories bridge.addDevice({ endpointId: "lamp-2", name: "Lamp" }); // @ts-expect-error not a display category bridge.addDevice({ endpointId: "lamp-2", name: "Lamp", categories: ["LAMP"] }); const power: Capability = blinds.add(PowerController, { proactivelyReported: true, verificationsRequired: ["TurnOff"] }); blinds.add(BrightnessController); blinds.add(TemperatureSensor, { retrievable: true, nonControllable: true }); // @ts-expect-error not a directive of the interface blinds.add(PowerController, { verificationsRequired: ["Toggle"] }); // @ts-expect-error not an option of the interface blinds.add(BrightnessController, { range: { min: 0, max: 100 } }); const announced: CapabilityJson = power.toJSON(); const endpoint: EndpointJson = blinds.getJSON(); const problems: string[] = blinds.check(); // Friendly names const names: Label[] = [asset("Alexa.Setting.Opening"), text("Position"), text("Posición", "es-MX")]; // @ts-expect-error not in the global Alexa catalog asset("Alexa.Setting.Openning"); // The registry: a descriptor by its namespace or by the 1.x enum member const described: InterfaceDescriptor = registry.get("Alexa.PowerController"); const version: string = registry.get(AlexaInterfaceType.ENDPOINT_HEALTH).version; const refused: Error = new DeclarationError({ endpointId: "lamp-1", namespace: described.namespace }, "declared twice"); // The vocabularies are unions of what the pages list const opening: AssetId = Assets[0]; const percent: UnitOfMeasure = "Alexa.Unit.Percent"; const vacuum: DisplayCategoryName = "VACUUM"; // @ts-expect-error not in the global Alexa catalog const misspelt: AssetId = "Alexa.Setting.Openning"; // @ts-expect-error an asset, but not a unit of measure const notAUnit: UnitOfMeasure = "Alexa.Setting.Opening"; // A schema types what it parses declare const temperature: Schema; const measured: Infer = { value: 20, scale: "CELSIUS" }; // @ts-expect-error not a temperature scale const rankine: Infer = { value: 20, scale: "RANKINE" }; export { options, added, chained, sent, on, namespace, reachable, announced, endpoint, problems, names, version, refused, opening, percent, vacuum, misspelt, notAUnit, measured, rankine, };