diff --git a/components.json b/components.json index 056f7f5..f985606 100644 --- a/components.json +++ b/components.json @@ -10,9 +10,20 @@ "protocol": "OPC UA", "description": "Java reference southbound adapter (Eclipse Milo). Subscribes to OPC UA nodes and republishes value changes as SouthboundSignalUpdate messages; serves on-demand reads/writes and emits the southbound_health metric.", "status": "beta", - "platforms": ["GREENGRASS", "HOST", "KUBERNETES"], + "platforms": [ + "GREENGRASS", + "HOST", + "KUBERNETES" + ], "library": "com.mbreissi.edgecommons:edgecommons", - "topics": ["edgecommons", "aws-iot-greengrass", "iiot", "opc-ua", "edgecommons-adapter"] + "greengrassComponentName": "com.mbreissi.edgecommons.OpcUaAdapter", + "topics": [ + "edgecommons", + "aws-iot-greengrass", + "iiot", + "opc-ua", + "edgecommons-adapter" + ] }, { "name": "modbus-adapter", @@ -22,9 +33,20 @@ "protocol": "Modbus (TCP / RTU / RTU-over-TCP)", "description": "Python reference southbound adapter (pymodbus). Polls Modbus TCP / serial RTU / RTU-over-TCP register maps and republishes value changes as SouthboundSignalUpdate messages; serves reads/writes and emits the southbound_health metric.", "status": "beta", - "platforms": ["GREENGRASS", "HOST", "KUBERNETES"], + "platforms": [ + "GREENGRASS", + "HOST", + "KUBERNETES" + ], "library": "edgecommons", - "topics": ["edgecommons", "aws-iot-greengrass", "iiot", "modbus", "edgecommons-adapter"] + "greengrassComponentName": "com.mbreissi.edgecommons.ModbusAdapter", + "topics": [ + "edgecommons", + "aws-iot-greengrass", + "iiot", + "modbus", + "edgecommons-adapter" + ] }, { "name": "camera-adapter", @@ -34,9 +56,23 @@ "protocol": "ONVIF / RTSP / GenICam", "description": "Rust southbound image-capture adapter for ONVIF snapshot and RTSP cameras, with optional Linux GenICam/Aravis support. Schedules and commands create durable local images, publish terminal metadata, and expose capability-gated PTZ and preset operations.", "status": "experimental", - "platforms": ["GREENGRASS", "HOST", "KUBERNETES"], + "platforms": [ + "GREENGRASS", + "HOST", + "KUBERNETES" + ], "library": "edgecommons", - "topics": ["edgecommons", "aws-iot-greengrass", "iiot", "camera", "onvif", "rtsp", "genicam", "edgecommons-adapter"] + "greengrassComponentName": "com.mbreissi.edgecommons.CameraAdapter", + "topics": [ + "edgecommons", + "aws-iot-greengrass", + "iiot", + "camera", + "onvif", + "rtsp", + "genicam", + "edgecommons-adapter" + ] }, { "name": "ethernet-ip-adapter", @@ -46,20 +82,44 @@ "protocol": "EtherNet/IP (Allen-Bradley CIP; explicit polling + class-1 implicit I/O)", "description": "Rust reference southbound EtherNet/IP adapter on an owned, memory-safe pure-Rust EtherNet/IP + CIP stack. Polls Allen-Bradley Logix tags (CIP explicit messaging) and consumes class-1 implicit I/O assemblies, republishing as SouthboundSignalUpdate; serves read/write/status/pause/resume/browse commands and emits southbound_health plus the EtherNetIp* operational metrics.", "status": "experimental", - "platforms": ["GREENGRASS", "HOST", "KUBERNETES"], + "platforms": [ + "GREENGRASS", + "HOST", + "KUBERNETES" + ], "library": "edgecommons", - "topics": ["edgecommons", "aws-iot-greengrass", "iiot", "ethernet-ip", "cip", "edgecommons-adapter"] + "greengrassComponentName": "com.mbreissi.edgecommons.EthernetIpAdapter", + "topics": [ + "edgecommons", + "aws-iot-greengrass", + "iiot", + "ethernet-ip", + "cip", + "edgecommons-adapter" + ] }, { "name": "telemetry-processor", "repo": "edgecommons/telemetry-processor", "language": "RUST", "category": "processor", - "description": "Rust reference processing component: the high-throughput northbound seam between southbound adapters and the cloud. Subscribes to configured (wildcard, templated) local telemetry topics, runs a declarative per-route pipeline (filter / sample / aggregate / project / script — Rhai or Lua), and forwards results to a target: local republish, northbound MQTT/IoT Core, or a durable stream (Kinesis / Kafka / rolling Parquet-AVRO files).", + "description": "Rust reference processing component: the high-throughput northbound seam between southbound adapters and the cloud. Subscribes to configured (wildcard, templated) local telemetry topics, runs a declarative per-route pipeline (filter / sample / aggregate / project / script \u2014 Rhai or Lua), and forwards results to a target: local republish, northbound MQTT/IoT Core, or a durable stream (Kinesis / Kafka / rolling Parquet-AVRO files).", "status": "experimental", - "platforms": ["GREENGRASS", "HOST", "KUBERNETES"], + "platforms": [ + "GREENGRASS", + "HOST", + "KUBERNETES" + ], "library": "edgecommons", - "topics": ["edgecommons", "aws-iot-greengrass", "iiot", "telemetry", "stream-processing", "edgecommons-processor"] + "greengrassComponentName": "com.mbreissi.edgecommons.TelemetryProcessor", + "topics": [ + "edgecommons", + "aws-iot-greengrass", + "iiot", + "telemetry", + "stream-processing", + "edgecommons-processor" + ] }, { "name": "uns-bridge", @@ -68,9 +128,20 @@ "category": "bridge", "description": "Envelope-aware UNS relay between a device bus and a site broker. Uplinks the six UNS consumer classes topic-verbatim with hop-tag loop protection and per-class policy (rate caps, evt replay buffer), relays own-device commands back down, and proxies request/reply across the bridge (reply_to rewrite). One uns-bridge per device bus.", "status": "experimental", - "platforms": ["HOST", "KUBERNETES"], + "platforms": [ + "HOST", + "KUBERNETES" + ], "library": "edgecommons", - "topics": ["edgecommons", "aws-iot-greengrass", "iiot", "unified-namespace", "mqtt", "edgecommons-bridge"] + "greengrassComponentName": "com.mbreissi.edgecommons.UnsBridge", + "topics": [ + "edgecommons", + "aws-iot-greengrass", + "iiot", + "unified-namespace", + "mqtt", + "edgecommons-bridge" + ] }, { "name": "edge-console", @@ -79,9 +150,20 @@ "category": "console", "description": "Edge-deployed real-time web console and the site's sole browser-to-bus bridge (HTTPS+WS in front, MQTT/UNS behind). A Rust gateway (edge-console-gateway) consumes the six UNS consumer classes from the site broker into a timestamped last-known-value model with console-side miss-detection (cfg-derived cadence, stale/offline ladder, whole-device UNREACHABLE from the uns-bridge LWT) and self-serves an IBM Carbon/React UI for edge-health, signals, events, config-review, and command views.", "status": "experimental", - "platforms": ["HOST", "KUBERNETES"], + "platforms": [ + "HOST", + "KUBERNETES" + ], "library": "edgecommons", - "topics": ["edgecommons", "aws-iot-greengrass", "iiot", "unified-namespace", "console", "edgecommons-console"] + "greengrassComponentName": "com.mbreissi.edgecommons.EdgeConsole", + "topics": [ + "edgecommons", + "aws-iot-greengrass", + "iiot", + "unified-namespace", + "console", + "edgecommons-console" + ] }, { "name": "ec-uns-cmd", @@ -90,20 +172,37 @@ "category": "tool", "description": "EdgeCommons UNS command-line tool. Sends a cmd/sb/* (or any) command to a component's command inbox over the UNS and prints the correlated reply; reaches Greengrass/IPC components via uns-bridge. Operate and test any EdgeCommons component from the shell.", "status": "experimental", - "platforms": ["HOST"], + "platforms": [ + "HOST" + ], "library": "edgecommons", - "topics": ["edgecommons", "cli", "uns", "iiot", "edgecommons-tool"] + "topics": [ + "edgecommons", + "cli", + "uns", + "iiot", + "edgecommons-tool" + ] }, { "name": "ec-secrets", "repo": "edgecommons/ec-secrets", "language": "RUST", "category": "tool", - "description": "EdgeCommons vault-seeding CLI. Populates and manages the LOCAL credentials vault (set/get/list/delete/import) that components read via gg.credentials() and $secret refs — same envelope encryption + KeyProvider (file/env/kms). Built on the library, so what it writes is exactly what a component decrypts.", + "description": "EdgeCommons vault-seeding CLI. Populates and manages the LOCAL credentials vault (set/get/list/delete/import) that components read via gg.credentials() and $secret refs \u2014 same envelope encryption + KeyProvider (file/env/kms). Built on the library, so what it writes is exactly what a component decrypts.", "status": "experimental", - "platforms": ["HOST"], + "platforms": [ + "HOST" + ], "library": "edgecommons", - "topics": ["edgecommons", "cli", "secrets", "vault", "credentials", "edgecommons-tool"] + "topics": [ + "edgecommons", + "cli", + "secrets", + "vault", + "credentials", + "edgecommons-tool" + ] }, { "name": "config-component", @@ -112,9 +211,21 @@ "category": "service", "description": "Rust dedicated configuration service for hierarchical-config deployments. Boots from its own non-CONFIG_COMPONENT source, loads a pluggable hierarchy catalog, serves ordered lineage bundles over the CONFIG_COMPONENT rendezvous, accepts privileged catalog replacement messages, and pushes accepted versions to consumers.", "status": "experimental", - "platforms": ["GREENGRASS", "HOST", "KUBERNETES"], + "platforms": [ + "GREENGRASS", + "HOST", + "KUBERNETES" + ], "library": "edgecommons", - "topics": ["edgecommons", "aws-iot-greengrass", "iiot", "configuration", "hierarchical-config", "edgecommons-service"] + "greengrassComponentName": "com.mbreissi.edgecommons.ConfigComponent", + "topics": [ + "edgecommons", + "aws-iot-greengrass", + "iiot", + "configuration", + "hierarchical-config", + "edgecommons-service" + ] }, { "name": "file-replicator", @@ -123,9 +234,21 @@ "category": "sink", "description": "Rust reference sink component (northbound file delivery): watches local directories and replicates files to local, S3, or optional SFTP/FTPS, HTTP(S), Azure Blob, and GCS destinations on arrival or on cron schedules/windows. Resumable uploads with integrity verification, bandwidth caps, per-instance activation, on-complete delete/archive/quarantine, and a full control + event surface on a unified namespace.", "status": "experimental", - "platforms": ["GREENGRASS", "HOST", "KUBERNETES"], + "platforms": [ + "GREENGRASS", + "HOST", + "KUBERNETES" + ], "library": "edgecommons", - "topics": ["edgecommons", "aws-iot-greengrass", "iiot", "file-replication", "s3", "edgecommons-sink"] + "greengrassComponentName": "com.mbreissi.edgecommons.FileReplicator", + "topics": [ + "edgecommons", + "aws-iot-greengrass", + "iiot", + "file-replication", + "s3", + "edgecommons-sink" + ] } ] } diff --git a/registry.schema.json b/registry.schema.json index cc76efc..e78a172 100644 --- a/registry.schema.json +++ b/registry.schema.json @@ -4,20 +4,37 @@ "title": "edgecommons component registry", "type": "object", "additionalProperties": false, - "required": ["schemaVersion", "components"], + "required": [ + "schemaVersion", + "components" + ], "properties": { - "schemaVersion": { "type": "integer", "const": 1 }, - "updated": { "type": "string", "description": "ISO date (YYYY-MM-DD) the catalog was last edited" }, + "schemaVersion": { + "type": "integer", + "const": 1 + }, + "updated": { + "type": "string", + "description": "ISO date (YYYY-MM-DD) the catalog was last edited" + }, "components": { "type": "array", - "items": { "$ref": "#/$defs/component" } + "items": { + "$ref": "#/$defs/component" + } } }, "$defs": { "component": { "type": "object", "additionalProperties": false, - "required": ["name", "repo", "language", "category", "description"], + "required": [ + "name", + "repo", + "language", + "category", + "description" + ], "properties": { "name": { "type": "string", @@ -31,34 +48,68 @@ }, "language": { "type": "string", - "enum": ["JAVA", "PYTHON", "RUST", "TYPESCRIPT"] + "enum": [ + "JAVA", + "PYTHON", + "RUST", + "TYPESCRIPT" + ] }, "category": { "type": "string", - "enum": ["adapter", "processor", "sink", "bridge", "console", "service"] + "enum": [ + "adapter", + "processor", + "sink", + "bridge", + "console", + "service" + ] }, "protocol": { "type": "string", "description": "Optional field/transport protocol, e.g. OPC UA, Modbus" }, - "description": { "type": "string", "minLength": 10 }, + "description": { + "type": "string", + "minLength": 10 + }, "status": { "type": "string", - "enum": ["experimental", "beta", "stable", "deprecated"], + "enum": [ + "experimental", + "beta", + "stable", + "deprecated" + ], "default": "experimental" }, "platforms": { "type": "array", - "items": { "type": "string", "enum": ["GREENGRASS", "HOST", "KUBERNETES"] }, + "items": { + "type": "string", + "enum": [ + "GREENGRASS", + "HOST", + "KUBERNETES" + ] + }, "uniqueItems": true }, "library": { "type": "string", "description": "The edgecommons coordinate this component builds on, e.g. com.mbreissi.edgecommons:edgecommons or edgecommons" }, + "greengrassComponentName": { + "type": "string", + "pattern": "^[a-z][a-z0-9]*(\\.[A-Za-z][A-Za-z0-9]*)+$", + "description": "The component's AWS IoT Greengrass component name, as published in its recipe (e.g. com.mbreissi.edgecommons.OpcUaAdapter). It is NOT derivable from `name` - 'opcua-adapter' publishes as 'OpcUaAdapter' - so a deployment targeting Greengrass resolves it from here. Omit for components that do not publish a Greengrass component." + }, "topics": { "type": "array", - "items": { "type": "string" }, + "items": { + "type": "string" + }, "uniqueItems": true } }