{"id":13506026,"url":"https://github.com/telefonicaid/iotagent-node-lib","last_synced_at":"2026-02-04T13:31:24.255Z","repository":{"id":21880220,"uuid":"25203883","full_name":"telefonicaid/iotagent-node-lib","owner":"telefonicaid","description":"Module to enable IoT Agent developers to build custom agents for their devices that can easily connect to NGSI Context Brokers","archived":false,"fork":false,"pushed_at":"2025-09-30T10:18:05.000Z","size":8724,"stargazers_count":60,"open_issues_count":117,"forks_count":91,"subscribers_count":22,"default_branch":"master","last_synced_at":"2025-09-30T12:06:57.584Z","etag":null,"topics":["fiware","iot","iot-agent"],"latest_commit_sha":null,"homepage":"https://iotagent-node-lib.rtfd.io/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/telefonicaid.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGES_NEXT_RELEASE","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-10-14T11:48:27.000Z","updated_at":"2025-09-19T16:22:44.000Z","dependencies_parsed_at":"2023-10-02T11:40:57.928Z","dependency_job_id":"57eec761-2865-4185-b773-1cc7aa0735f3","html_url":"https://github.com/telefonicaid/iotagent-node-lib","commit_stats":{"total_commits":3339,"total_committers":56,"mean_commits":59.625,"dds":0.6687631027253669,"last_synced_commit":"e0055b2942b91748b64b7cb2aaf5c182faef842d"},"previous_names":[],"tags_count":98,"template":false,"template_full_name":null,"purl":"pkg:github/telefonicaid/iotagent-node-lib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telefonicaid%2Fiotagent-node-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telefonicaid%2Fiotagent-node-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telefonicaid%2Fiotagent-node-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telefonicaid%2Fiotagent-node-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/telefonicaid","download_url":"https://codeload.github.com/telefonicaid/iotagent-node-lib/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/telefonicaid%2Fiotagent-node-lib/sbom","scorecard":{"id":725009,"data":{"date":"2025-08-11","repo":{"name":"github.com/telefonicaid/iotagent-node-lib","commit":"79cb070c97667f9ea9f90f496379c7a64bc21412"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/issue-labeler.yml:15","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"CII-Best-Practices","score":5,"reason":"badge detected: Passing","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: GNU Affero General Public License v3.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:61: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:63: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:82: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:84: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:91: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:104: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/ci.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/issue-labeler.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/issue-labeler.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/issue-labeler.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/issue-labeler.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/issue-labeler.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/telefonicaid/iotagent-node-lib/issue-labeler.yml/master?enable=pin","Warn: containerImage not pinned by hash: docker/Mosquitto/Dockerfile:2","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:23","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:40","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:68","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:88","Info:   0 out of   9 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned","Info:   0 out of   4 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2023-117"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"SAST","score":8,"reason":"SAST tool is not run on all commits -- score normalized to 8","details":["Warn: 24 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T12:31:39.727Z","repository_id":21880220,"created_at":"2025-08-22T12:31:39.727Z","updated_at":"2025-08-22T12:31:39.727Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278598620,"owners_count":26013291,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fiware","iot","iot-agent"],"created_at":"2024-08-01T01:00:33.173Z","updated_at":"2026-02-04T13:31:24.248Z","avatar_url":"https://github.com/telefonicaid.png","language":"JavaScript","funding_links":[],"categories":["FIWARE Catalogue"],"sub_categories":["IoT Agents"],"readme":"# FIWARE IoT Agent Node Library\n\n[![FIWARE IoT Agents](https://fiware.github.io/catalogue/badges/chapters/iot-agents.svg)](https://www.fiware.org/developers/catalogue/)\n[![License: APGL](https://img.shields.io/github/license/telefonicaid/iotagent-node-lib.svg)](https://opensource.org/licenses/AGPL-3.0)\n[![Support badge](https://img.shields.io/badge/tag-fiware+iot-orange.svg?logo=stackoverflow)](https://stackoverflow.com/questions/tagged/fiware+iot)\n\u003cbr/\u003e\n[![Documentation badge](https://img.shields.io/readthedocs/iotagent-node-lib.svg)](http://iotagent-node-lib.readthedocs.org/en/latest/?badge=latest)\n[![CI](https://github.com/telefonicaid/iotagent-node-lib/workflows/CI/badge.svg)](https://github.com/telefonicaid/iotagent-node-lib/actions?query=workflow%3ACI)\n[![Coverage Status](https://coveralls.io/repos/github/telefonicaid/iotagent-node-lib/badge.svg?branch=master)](https://coveralls.io/github/telefonicaid/iotagent-node-lib?branch=master)\n![Status](https://fiware.github.io/catalogue/badges/statuses/status-full.svg)\n[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/4671/badge)](https://bestpractices.coreinfrastructure.org/projects/4671)\n\nAn IoT Agent is a component that lets groups of IoT devices send their data to a NGSI Context Broker (such as\n[Orion Context Broker](https://github.com/telefonicaid/fiware-orion)) using their own native protocols and translating\nthem into NGSI.\n\nThe **IoT Agent Node Lib** provides simple standardized REST API for registering, provisioning, discovering and managing\ndevices and groups of devices. It also ensures that each IoT Agent can configure its device communications using a\ncommon vocabulary regardless of the payload, syntax or transport protocol used by the device itself\n\nIt also provides a common configuration framework driven by a `config.js` configuration file and a series of common ENV\nvariables, configuring some flags for common functionality provided by the **IoT Agent node lib** (e.g. for contecting\nto a Conext Broker or for authenticating with an Identity Manager).Some of common utility functions provided by the\n**IoT Agent node lib** include:\n\n-   For the device communication (southbound), the library listens to changes in context entities and raises callbacks\n    for the IoT Agent to process. It also handles the commands sent by the Context Broker to the devices.\n-   For the context broker communications (northbound), the library offers an interface which persists data from the\n    device in the Context Broker and accepts NGSI data from the Context Broker to be sent to the device.\n-   Standardized OAuth2-based security is available to enable each IoT Agent to connect to several common Identity\n    Managers (e.g. Keystone and Keyrock) so that communications can be restricted to trusted components.\n\nThis project is part of [FIWARE](https://www.fiware.org/). For more information check the FIWARE Catalogue entry for the\n[IoT Agents](https://github.com/Fiware/catalogue/tree/master/iot-agents).\n\n| :books: [Documentation](https://iotagent-node-lib.rtfd.io) | :mortar_board: [Academy](https://fiware-academy.readthedocs.io/en/latest/iot-agents/idas) | :dart: [Roadmap](https://github.com/telefonicaid/iotagent-node-lib/blob/master/doc/roadmap.md) |\n| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |\n\n## Content\n\n-   [Documentation](#documentation)\n    -   [User documentation](#user-documentation)\n    -   [Development documentation](#development-documentation)\n-   [IoT Agents available](#iot-agents-available)\n-   [Install and usage](#install-and-usage)\n-   [License](#license)\n\n## Documentation\n\nThis repository contains the common user documentation across all IoT Agents. For particular documentation, you can\ncheck the specific documentation for each IoT Agent. You can see the a list of available IoT Agents in the\n[IoT Agents available](#iot-agents-available) section.\n\n### User documentation\n\n-   [Getting started](doc/getting-started.md)\n-   [IoT Agent API](doc/api.md)\n-   [Administration manual](doc/admin.md)\n-   [Deprecated features](doc/deprecated.md)\n-   [Roadmap](doc/roadmap.md)\n\n### Development documentation\n\n-   [Development manual](doc/devel/development.md)\n-   [Contributing guide](doc/devel/contribution-guidelines.md)\n-   [Architecture](doc/devel/architecture.md)\n-   [North Port - NGSI Interactions](doc/devel/northboundinteractions.md)\n\n## IoT Agents available\n\nThe following IoT Agents using the **IoT Agent Node Lib** are available:\n\n-   [IoT Agent JSON](https://github.com/telefonicaid/iotagent-json) - a bridge between HTTP/MQTT messaging (with a JSON\n    payload) and NGSI\n-   [IoT Agent Ultralight](https://github.com/telefonicaid/iotagent-ul) - a bridge between HTTP/MQTT messaging\n-   [IoT Agent LWM2M](https://github.com/telefonicaid/lightweightm2m-iotagent) - a bridge between the\n    [Lightweight M2M](https://www.omaspecworks.org/what-is-oma-specworks/iot/lightweight-m2m-lwm2m/) protocol and NGSI\n    (with an UltraLight2.0 payload) and NGSI\n-   [IoT Agent for Sigfox](https://github.com/telefonicaid/sigfox-iotagent) - a bridge between the\n    [Sigfox](https://www.sigfox.com/en) protocol and NGSI\n-   [IoT Agent for LoRaWAN](https://github.com/Atos-Research-and-Innovation/IoTagent-LoRaWAN) - a bridge between the\n    [LoRaWAN](https://www.thethingsnetwork.org/docs/lorawan/) protocol and NGSI\n-   [IoT Agent for OPC-UA](https://github.com/Engineering-Research-and-Development/iotagent-opcua) - a bridge between\n    the [OPC Unified Architecture](http://www.opcua.us/) protocol and NGSI\n-   [IoT Agent for ISOXML](https://github.com/FIWARE/iotagent-isoxml) - a bridge between the ISOXML/ADAPT protocol for\n    agricultural machinery and NGSI\n\n## Install and usage\n\nThe **IoT Agent node library** is not a standalone product. If you plan to install and use any of the IoT Agents\navailable, you should follow the installation instructions for each IoT Agent (find the link in the\n[previous section](#iot-agents-available)). You can find the common API provided by the **IoT Agent node library** under\n[API](doc/api.md) documentation.\n\nIf you plan to use the IoT Agent node library in your own project or IoT Agent, you should follow the\n[Developer manual](doc/devel/development.md), which includes the installation instructions and the usage of the library.\n\nInformation about how to configure the IoT agent or the library can be found at the corresponding section of the\n[Administration manual](doc/admin.md).\n\n## License\n\nThe IoT Agent Node Library is licensed under [Affero General Public License (GPL) version 3](./LICENSE).\n\n© 2022 Telefonica Investigación y Desarrollo, S.A.U\n\n### Are there any legal issues with AGPL 3.0? Is it safe for me to use?\n\nThere is absolutely no problem in using a product licensed under AGPL 3.0. Issues with GPL (or AGPL) licenses are mostly\nrelated with the fact that different people assign different interpretations on the meaning of the term “derivate work”\nused in these licenses. Due to this, some people believe that there is a risk in just _using_ software under GPL or AGPL\nlicenses (even without _modifying_ it).\n\nFor the avoidance of doubt, the owners of this software licensed under an AGPL-3.0 license wish to make a clarifying\npublic statement as follows:\n\n\u003e Please note that software derived as a result of modifying the source code of this software in order to fix a bug or\n\u003e incorporate enhancements is considered a derivative work of the product. Software that merely uses or aggregates (i.e.\n\u003e links to) an otherwise unmodified version of existing software is not considered a derivative work, and therefore it\n\u003e does not need to be released as under the same license, or even released as open source.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftelefonicaid%2Fiotagent-node-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftelefonicaid%2Fiotagent-node-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftelefonicaid%2Fiotagent-node-lib/lists"}