{"id":28089291,"url":"https://github.com/vvsviridov/enm-cli","last_synced_at":"2025-09-25T20:42:16.012Z","repository":{"id":49948015,"uuid":"491884007","full_name":"vvsviridov/enm-cli","owner":"vvsviridov","description":"enm-cli is a unofficial port of some Ericsson ENM web-applications to cli interface written in javascript for nodejs","archived":false,"fork":false,"pushed_at":"2024-09-10T12:19:55.000Z","size":59207,"stargazers_count":8,"open_issues_count":1,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-07T07:42:58.318Z","etag":null,"topics":["2g","3g","4g","5g","api","automation","autoprovisioning","cellular","cli","enm","ericsson","gsm","javascript","lte","nodejs","oss","rest","topologybrowser","umts"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vvsviridov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":["vvsviridov"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"polar":null,"custom":null}},"created_at":"2022-05-13T12:13:32.000Z","updated_at":"2025-04-24T12:27:08.000Z","dependencies_parsed_at":"2024-09-05T12:30:44.985Z","dependency_job_id":"5ffbd232-629d-4486-a2a6-83faca14d8ce","html_url":"https://github.com/vvsviridov/enm-cli","commit_stats":{"total_commits":42,"total_committers":1,"mean_commits":42.0,"dds":0.0,"last_synced_commit":"26934b7006aa9af88f6c2531c41be90651586720"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvsviridov%2Fenm-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvsviridov%2Fenm-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvsviridov%2Fenm-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vvsviridov%2Fenm-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vvsviridov","download_url":"https://codeload.github.com/vvsviridov/enm-cli/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253948336,"owners_count":21988953,"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","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":["2g","3g","4g","5g","api","automation","autoprovisioning","cellular","cli","enm","ericsson","gsm","javascript","lte","nodejs","oss","rest","topologybrowser","umts"],"created_at":"2025-05-13T12:56:00.343Z","updated_at":"2025-09-25T20:42:10.974Z","avatar_url":"https://github.com/vvsviridov.png","language":"JavaScript","funding_links":["https://github.com/sponsors/vvsviridov"],"categories":[],"sub_categories":[],"readme":"# 💻 CLI application based on ENM (Ericsson Network Manager) REST API\r\n\r\n[![Github version](https://img.shields.io/github/package-json/version/vvsviridov/enm-cli?label=enm-cli\u0026color=brightgreen\u0026logo=github)](https://github.com/vvsviridov/enm-cli)\r\n[![Npm version](https://img.shields.io/npm/v/enm-cli?color=red\u0026logo=npm\u0026label=enm-cli)](https://www.npmjs.com/package/enm-cli)\r\n\r\n## 🛠 Key Features\r\n\r\n- 🚲 Simple and easy to use\r\n- 📟 Does not require GUI\r\n- 🚀 Faster than a web-browser\r\n- 🏗 Allows to make changes in config mode\r\n- 🤯 No needs to remember nodes IP addresses\r\n\r\n## 💾 Installation\r\n\r\nFirst you need **node.js** which can be downloaded from official site [nodejs.org](https://nodejs.org/en/download/) and installed as described in the docs.\r\n\r\n### Run directly from NPM without installation\r\n\r\n```shell\r\nnpx enm-cli -u https://enm.your.company.com\r\n```\r\n\r\n### Install with NPM\r\n\r\n```shell\r\nnpm install -g enm-cli\r\n```\r\n\r\n### Download this repository and run from the project root directory\r\n\r\n```shell\r\nnpm install\r\n```\r\n\r\n... to install dependencies,\r\n\r\n```shell\r\nnpm link\r\n```\r\n\r\n... to add application to your OS $PATH variable if you want to run it from anywhere.\r\n\r\n## 🔏 Store your credentials\r\n\r\n### Dotenv file\r\n\r\nCreate `.env` file in project's root folder and store your credentials as:\r\n\r\n```shell\r\nLOGIN=YourLogin\r\nPASSWORD=YourPassword\r\n```\r\n\r\n### Prompted by app\r\n\r\nBy default you'll be prompted for username and password\r\n\r\n## 🚀 Launch apllication\r\n\r\n```shell\r\n\u003e enm-cli -l USERNAME -p PASSWORD -u https://enm.your.company.domain.com\r\n💾 Select Application: (Use arrow keys)\r\n\u003e Topology Browser\r\n  Auto Provisioning\r\n  Bulk Import\r\n  Shell Terminal\r\n```\r\n\r\n## 🕹 Usage\r\n\r\nRecommended environment is Windows Terminal (not _cmd.exe_) or any shell with rich formatting support. After application successfully launched youll see root content and available commands.\r\n\r\n### Help Page\r\n\r\n```shell\r\n\u003e enm-cli --help\r\nUsage: enm-cli [options]\r\n\r\nOptions:\r\n  -V, --version                output the version number\r\n  -l, --login \u003cletters\u003e        ENM User Login (env: LOGIN)\r\n  -p, --password \u003cletters\u003e     ENM User Password (env: PASSWORD)\r\n  -a, --application \u003cletters\u003e  Start specified application (choices: \"tplg\", \"prvn\", \"bulk\", \"shll\")\r\n  -u, --url \u003cvalid URL\u003e        ENM Url\r\n  -h, --help                   display help for command\r\n```\r\n\r\n## 🔭 TopologyBrowser Application\r\n\r\n![TopologyBrowser](img/render1673690475520.gif?raw=true 'TopologyBrowser')\r\n\r\n```shell\r\nPS C:\\\u003e enm-cli -l USERNAME -p PASSWORD -u https://enm.your.company.domian.com -a tplg\r\n✔ Login in...\r\nAuthentication Successful\r\n✔ Starting Topology Browser...\r\n✔ Reading Topology...\r\n SubNetwork=ONRM_ROOT_MO\u003e (Use arrow keys or type to search)\r\n\u003e SubNetwork=Core\r\n  SubNetwork=LTE\r\n  SubNetwork=RBS\r\n  SubNetwork=RNC\r\n  show\r\n  config\r\n  up\r\n  home\r\n  exit\r\n```\r\n\r\n### Commands\r\n\r\n\u003e **Note:** _only `show` and `fdn` command can have parameter, all other commands haven't._\r\n\r\n- `[show] [\u003cvalid regex\u003e]` - shows current object's attributes filtered with regex\r\n- `[config]` - enters _config_ mode\r\n- `[up]` - navigate up one level\r\n- `[fdn] [\u003cvalid FDN\u003e]` - navigate to FDN\r\n- `[home]` - navigate to root folder\r\n- `[alarms]` - show alarms\r\n- `[search]` - searching specified node in topology\r\n- `[sync]` - initiate node CM synchronization\r\n- `[persistent]` - toggle persistent attributes inclusion\r\n- `[amos]` - launch advanced moshell (amos)\r\n- `[scripting]` - launch shell terminal on scripting VM\r\n- `[wfcli]` - launch WinFIOL CLI\r\n- `[nodecli]` - launch Node CLI\r\n- `[enmdata]` - go to fdn NetworkElement=CurrentNode\r\n- `[exit]` - logout and exit application\r\n\r\n### Advanced MOshell Scripting, Scripting Terminal and WinFIOL CLI\r\n\r\nThese applications are executes on ENM virtual machines and does not required any local installation\r\n\r\n### Examples\r\n\r\nStart typing and you see only matches commands to your input.\r\n\r\n```shell\r\nSubNetwork=ONRM_ROOT_MO\u003e subn\r\n\u003e SubNetwork=Core\r\n  SubNetwork=LTE\r\n  SubNetwork=RBS\r\n  SubNetwork=RNC\r\nSubNetwork=ONRM_ROOT_MO\u003e exi\r\n\u003eexit\r\n```\r\n\r\nYou can navigate to the next level selecting object ...\r\n\r\n```shell\r\nSubNetwork=ONRM_ROOT_MO\u003e subn\r\n  SubNetwork=Core\r\n  SubNetwork=LTE\r\n  SubNetwork=RBS\r\n\u003e SubNetwork=RNC\r\nSubNetwork=ONRM_ROOT_MO,SubNetwork=RNC\u003e\r\n\u003e MeContext=RNC01\r\n  MeContext=RNCTEST\r\n  MeContext=TEST\r\n```\r\n\r\nView objects attributes ...\r\n\r\n```shell\r\nSubNetwork=ONRM_ROOT_MO,SubNetwork=RNC\u003e show\r\n\u003e show\r\n✔ Reading Topology...\r\n\r\n  FDN: SubNetwork=ONRM_ROOT_MO,SubNetwork=RNC\r\n\r\n  SubNetworkId: RNC\r\n\r\nSubNetwork=ONRM_ROOT_MO,SubNetwork=RNC\u003e MeContext=RNC01\r\n\u003e MeContext=RNC01\r\n✔ Reading Topology...\r\n... Network=ONRM_ROOT_MO,SubNetwork=RNC,MeContext=RNC01\u003e show\r\n\u003e show\r\n✔ Reading Topology...\r\n\r\n  FDN: SubNetwork=ONRM_ROOT_MO,SubNetwork=RNC,MeContext=RNC01\r\n\r\n  MeContextId: RNC01\r\n  neType: RNC\r\n  platformType: CPP\r\n```\r\n\r\n... show attributes with filter\r\n\r\n```shell\r\n... Network=ONRM_ROOT_MO,SubNetwork=RNC,MeContext=RNC01\u003e show Type\r\n\u003e show type\r\n✔ Reading Topology...\r\n\r\n  FDN: SubNetwork=ONRM_ROOT_MO,SubNetwork=RNC,MeContext=RNC01\r\n\r\n  neType: RNC\r\n  platformType: CPP\r\n\r\n... Network=ONRM_ROOT_MO,SubNetwork=RNC,MeContext=RNC01\u003e\r\n```\r\n\r\nReturn one level up in FDN tree ...\r\n\r\n```shell\r\n... Network=ONRM_ROOT_MO,SubNetwork=RNC,MeContext=RNC01\u003e up\r\n\u003e up\r\n✔ Reading Topology...\r\nSubNetwork=ONRM_ROOT_MO,SubNetwork=RNC\u003e\r\n```\r\n\r\nReturn to the root from anywhere ...\r\n\r\n```shell\r\n... Network=ONRM_ROOT_MO,SubNetwork=RNC,MeContext=RNC01\u003e home\r\n\u003e home\r\n✔ Reading Topology...\r\nSubNetwork=ONRM_ROOT_MO\u003e\r\n```\r\n\r\nGo to specific FDN ...\r\n\r\n```shell\r\n... Network=ONRM_ROOT_MO,SubNetwork=RNC,MeContext=RNC01\u003e fdn NetworkElement=RBS01\r\n```\r\n\r\nAnd logout and exit ...\r\n\r\n```shell\r\n... Network=ONRM_ROOT_MO,SubNetwork=RNC,MeContext=RNC01\u003e exit\r\n\u003e exit\r\n✔ Logout...\r\nLogout OK\r\nPS C:\\\u003e\r\n```\r\n\r\n### Config Mode\r\n\r\nTo modify attributes _config_ mode is used.\r\n\r\nAvailable commands are:\r\n\r\n- `[commit]` - commiting changes to the network\r\n- `[check]` - view configuration changes\r\n- `[get]` - get attribute value\r\n- `[set]` - set attribute value\r\n- `[abort]` - clear configuration and exit config mode\r\n- `[xml]` - export configuration to XML\r\n- `[end]` - end config mode without commiting\r\n- `[exit]` - logout and exit application\r\n\r\n```shell\r\n... ManagedElement=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1\u003e config\r\n\u003e config\r\n✔ Reading Attributes...\r\n✔ Reading Attributes Data...\r\n\r\n    syncStatus: SYNCHRONIZED\r\n    ipAddress: 10.10.11.1\r\n    managementState: NORMAL\r\n    radioAccessTechnology: 4G, 3G\r\n\r\n... lement=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1(config)# (Use arrow keys or type to search)\r\n\u003e acBarringForCsfb\r\n  acBarringForEmergency\r\n  acBarringForMoData\r\n  acBarringForMoSignalling\r\n  ...\r\n  commit\r\n  check\r\n  end\r\n  exit\r\n(Move up and down to reveal more choices)\r\n```\r\n\r\nTo modify attribute select it ...\r\n\r\n```shell\r\n... lement=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1(config)# userLabel\r\n... ent=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1(userLabel)#\r\n  commit\r\n  check\r\n  end\r\n  exit\r\n\u003e get\r\n  set\r\n  description\r\n```\r\n\r\nNow you can get it ...\r\n\r\n```shell\r\n... ent=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1(userLabel)# get\r\n\u003e get\r\n\r\n  FDN: SubNetwork=ONRM_ROOT_MO,SubNetwork=RBS,MeContext=ERBS01,ManagedElement=1,ENodeBFunction=1,EUtranCellFDD=test1(userLabel)\r\n\r\n  userLabel: test1\r\n\r\n  Type: STRING\r\n\r\n```\r\n\r\nAnd set it's value ...\r\n\r\n```shell\r\n... ent=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1(userLabel)# set\r\n? userLabel (STRING): ? test_label\r\n```\r\n\r\nCheck configuration before applying\r\n\r\n```shell\r\n... ent=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1(userLabel)# check\r\n\r\n  FDN: SubNetwork=ONRM_ROOT_MO,SubNetwork=RBS,MeContext=ERBS01,ManagedElement=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1\r\n\r\n  userLabel: test_label\r\n\r\n```\r\n\r\nApplying changes to the network ...\r\n\r\n```shell\r\n... ent=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1(userLabel)# commit\r\n\r\n  FDN: SubNetwork=ONRM_ROOT_MO,SubNetwork=RBS,MeContext=ERBS01,ManagedElement=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1\r\n\r\n  userLabel: test_label\r\n✔ Commiting Config...\r\nSuccess\r\n```\r\n\r\nView attribute's description\r\n\r\n```shell\r\n... lement=ERBS01,ENodeBFunction=1,EUtranCellFDD=test1(config)# acBarringForCsfb\r\n... S01,ENodeBFunction=1,EUtranCellFDD=test1(acBarringForCsfb)# description\r\n\r\nacBarringForCsfb: COMPLEX_REF\r\n\r\nDESCRIPTION\r\n      Access class barring parameters for mobile originating CSFB calls.\r\nThe information is broadcasted in SIB2.\r\n\r\nTRAFFIC DISTURBANCES\r\n      Changing this attribute can cause loss of traffic.\r\n\r\nIMMUTABLE\r\n      false\r\n\r\nACTIVE CHOICE CASE\r\n      null\r\n\r\n\r\nCOMPLEX_REF\r\n    AcBarringConfig: AcBarringConfig\r\n\r\n\r\nacBarringTime: INTEGER  default: 64\r\n\r\nDESCRIPTION\r\n      Mean access barring time in seconds for mobile originating signalling.\r\n\r\nIMMUTABLE\r\n      false\r\n\r\nACTIVE CHOICE CASE\r\n      null\r\n\r\nCONSTRAINTS\r\n    Nullable: false\r\n    Value Resolution: null\r\n\r\n\r\nacBarringForSpecialAC: LIST  default: false,false,false,false,false\r\n\r\nDESCRIPTION\r\n      Access class barring for AC 11-15. The first instance in the list is for AC 11, second is for AC 12, and so on.\r\n\r\nIMMUTABLE\r\n      false\r\n\r\nACTIVE CHOICE CASE\r\n      null\r\n\r\nCONSTRAINTS\r\n    Nullable: false\r\nLISTREFERENCE\r\n    BOOLEAN\r\nCONSTRAINTS\r\n    Nullable: true\r\n\r\n\r\nacBarringFactor: INTEGER  default: 95\r\n\r\nDESCRIPTION\r\n      If the random number drawn by the UE is lower than this value, access is allowed. Otherwise the access is barred.\r\n\r\nIMMUTABLE\r\n      false\r\n\r\nACTIVE CHOICE CASE\r\n      null\r\n\r\nCONSTRAINTS\r\n    Nullable: false\r\n    Value Resolution: null\r\n```\r\n\r\n## 🗂 AutoProvisioning Application\r\n\r\n![AutoProvisioning](img/render1673699059489.gif?raw=true 'AutoProvisioning')\r\n\r\n### Connection\r\n\r\n```shell\r\n\u003eenm-cli -l USERNAME -p PASSWORD -u https://enm.your.company.domain.com -a prvn\r\n✔ Login in...\r\n✔ Getting projects...\r\n323 projects\u003e (Use arrow keys or type to search)\r\n  ──────────────\r\n\u003e [new]\r\n  [exit]\r\n  ──────────────\r\n  Project1      (1) 1✅\r\n  Project2      (2) 1✅ 1⌛\r\n  Project3      (2) 1❌ 1⌚\r\n  Project4      (1) 1❌\r\n```\r\n\r\n### Working with Projects\r\n\r\n- `[new]` - Import an Auto Provisioning project to start Auto Provisioning workflows based on the content of the AutoProvisioning project. The Auto Provisioning project file contains project related data in the projectInfo.xml file and node folders which contain configurations required to execute AutoProvisioning use-cases.\r\n- `[exit]` - Exit this app.\r\n\r\nStart typing and you see only commands and projects matches input.\r\n\r\n```shell\r\n323 projects\u003e pro\r\n──────────────\r\n──────────────\r\n\u003e Project1      (1) 1✅\r\n  Project2      (2) 1✅ 1⌛\r\n  Project3      (2) 1❌ 1⌚\r\n  Project4      (1) 1❌\r\nSubNetwork=ONRM_ROOT_MO\u003e ex\r\n──────────────\r\n\u003e[exit]\r\n──────────────\r\n```\r\n\r\n### Working with Single Project\r\n\r\nSelect project you want to work with.\r\n\r\nAvailable commands are:\r\n\r\n- `[delete]` - Delete of an Auto Provisioning project removes an Auto Provisioning project and all the Auto Provisioning data for nodes within that project. This includes removal or rollback of any ongoing Auto Provisioning workflows within that project.\r\n- `[back]` - Return to projects.\r\n- `[exit]` - Exit this app.\r\n\r\n```shell\r\n323 projects\u003e Project1      (1) 1✅\r\n✔ Getting Project1s status...\r\n✔ Getting Project1s properties...\r\n\r\n    Project id    : Project1\r\n    Author        : Ericsson\r\n    Creation Date : 2019-01-06 11:23:39\r\n    Description   : Project1 description\r\n    Nodes         :\r\n\r\n      RadioNode1\r\n      RadioNode\r\n      3432-762-238\r\n      192.168.192.168\r\n      Successful\r\n      Integration Completed\r\n\r\nProject1\u003e (Use arrow keys or type to search)\r\n  ──────────────\r\n\u003e [delete]\r\n  [back]\r\n  [exit]\r\n  ──────────────\r\n  RadioNode1\r\n```\r\n\r\n### Wotking with Node\r\n\r\nSelect node ...\r\n\r\n```shell\r\nProject1 (RadioNode1) \u003e (Use arrow keys or type to search)\r\n  ──────────────\r\n\u003e [status]\r\n  [properties]\r\n  [delete]\r\n  [bind]\r\n  [cancel]\r\n  [resume]\r\n  [configurations]\r\n  [siteinstall]\r\n  [back]\r\n(Move up and down to reveal more choices)\r\n```\r\n\r\nAvailable commands are:\r\n\r\n- `[status]` - Retrieving Auto Provisioning node status returns the node status information for each task that has been executed for the specified node.\r\n- `[properties]` - Retrieving Auto Provisioning node properties returns the node properties for each task that has been executed for the specified node.\r\n- `[delete]` - Delete an Auto Provisioning node removes the Auto Provisioning data for a Network Element. If a node is the last node in a project and there are no profiles associated with the project the project will automatically be deleted.\r\n- `[bind]` - Binding a hardware serial number to a node configuration associates the specified node configurations with a hardware serial number for Zero Touch Integration or Hardware Replace.\r\n- `[cancel]` - Cancelling the auto provisioning activity rolls back an AutoProvisoning workflow for Node Integration. For expansion a node is rolled back to it\\s original configuration if additional configurations have been applied to the node.\r\n- `[resume]` - Resuming the auto provisioning activity recommences an Auto Provisioning workflow that is suspended.\r\n- `[configurations]` - Uploading an auto provisioning configuration replaces a configuration file that was part of the initial Auto Provisioning node configuration.\r\n- `[siteinstall]` - Download Site Installation File (SIF) that is required to be taken on site for LMT Integration or LMT Hardware Replace.\r\n- `[back]` - Return to project's nodes.\r\n- `[exit]` - Exit this app.\r\n\r\n## 🗃 Bulk Import\r\n\r\n![BulkImport](img/render1673699800882.gif?raw=true 'BulkImport')\r\n\r\n## ⌨️ Shell Terminal\r\n\r\n![ShellTerminal](img/render1673702182559.gif?raw=true 'ShellTerminal')\r\n\r\n## 📝 Contribution\r\n\r\n1. [Fork it]\r\n2. Create your feature branch (`git checkout -b my-new-feature`)\r\n3. Commit your changes (`git commit -am Add some feature`)\r\n4. Push to the branch (`git push origin my-new-feature`)\r\n5. Create new Pull Request\r\n\r\n## 🦠 Known Issues\r\n\r\n### flickering issue\r\n\r\nIn some windows terminal spinner may look flickery. To fix this you need to modify file ./node_modules/ora/index.js\r\n\r\nAdd 1 to _clearLine()_ on this line\r\n\r\n```javascript\r\nthis.stream.clearLine(1);\r\n```\r\n\r\n## 💵 Credits\r\n\r\n[Contact Me](https://github.com/vvsviridov/) to request new feature or bugs reporting.\r\n\r\n## 💣 Changes\r\n\r\n1.0.0 - Is released\r\n\r\n1.0.2 - Bulk Import added\r\n\r\n1.0.5 - Fix AutoProvisioning errors\r\n\r\n1.0.6 - Ability to launch amos, scripting shell terminal and winfiol cli\r\n\r\n1.0.7 - Check for updates\r\n\r\n1.0.8 - added `enmdata` command\r\n\r\n1.0.9 - added ability to change multiple objects simultaneously and export configuration to XML\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvvsviridov%2Fenm-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvvsviridov%2Fenm-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvvsviridov%2Fenm-cli/lists"}