{"id":13907760,"url":"https://github.com/sgnl/nodeku","last_synced_at":"2025-04-22T11:05:05.337Z","repository":{"id":80854789,"uuid":"70632270","full_name":"sgnl/nodeku","owner":"sgnl","description":"discover and control Roku devices with NodeJS","archived":false,"fork":false,"pushed_at":"2018-04-25T18:09:15.000Z","size":509,"stargazers_count":13,"open_issues_count":4,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-24T09:51:51.777Z","etag":null,"topics":["iot","javascript","nodejs","npm-package","roku","roku-device","roku-tv","ssdp"],"latest_commit_sha":null,"homepage":"https://medium.com/@sgnl/nodeku-control-your-roku-with-node-js-d8b8c87cdba6","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sgnl.png","metadata":{"files":{"readme":"README.md","changelog":null,"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}},"created_at":"2016-10-11T20:25:33.000Z","updated_at":"2025-02-22T10:38:49.000Z","dependencies_parsed_at":"2023-05-22T23:30:37.176Z","dependency_job_id":null,"html_url":"https://github.com/sgnl/nodeku","commit_stats":{"total_commits":157,"total_committers":6,"mean_commits":"26.166666666666668","dds":0.05095541401273884,"last_synced_commit":"69e508e605edb7901a7f1a77e811d35141021725"},"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sgnl%2Fnodeku","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sgnl%2Fnodeku/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sgnl%2Fnodeku/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sgnl%2Fnodeku/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sgnl","download_url":"https://codeload.github.com/sgnl/nodeku/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250226129,"owners_count":21395524,"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":["iot","javascript","nodejs","npm-package","roku","roku-device","roku-tv","ssdp"],"created_at":"2024-08-06T23:02:09.158Z","updated_at":"2025-04-22T11:05:05.248Z","avatar_url":"https://github.com/sgnl.png","language":"JavaScript","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"# nodeku\n[![CircleCI](https://circleci.com/gh/sgnl/nodeku/tree/master.svg?style=svg)](https://circleci.com/gh/sgnl/nodeku/tree/master)\n\nDiscover Roku devices via `ssdp` and control the device with methods that perform `http` requests to the device.\n\n**requirements:**\n  - node `7.0.0 or higher`\n  - connected to the same network as the Roku device.\n  - a router/network that supports UPnP (for ssdp)\n\n## usage\n\n```javascript\n\nconst Nodeku = require('nodeku')\n\nNodeku()\n  .then(device =\u003e {\n    console.log(`device found at: ${ device.ip() }`)\n    // 'xxx.xxx.xxx.xxx:8060'\n    return device.apps()\n  })\n  .then(apps =\u003e {\n    apps.forEach(app =\u003e console.log(app))\n    // [{ id, name, type, version }, ...]\n  })\n  .catch(err =\u003e {\n    console.error(err.stack)\n  })\n\n```\n## getting started\n`$ npm install nodeku`\n\n## nodeku\nInvoking `Nodeku` will return a promise and on success it will pass a device module. This module will contain the methods needed to control a roku device. Commands are sent to the Roku device via `HTTP` protocol as found on the [docs][1].\n\n## api methods\n| **method name** | **params** | **return type** | **details** |\n|---|---|---|---|\n| `.ip()`  | None | `String` | network ip and port `xxx.xxx.xxx.xxx:8060` |\n| `.apps()` | None | `List[{}, ...]` | list of many objects with props: `id, name, type, version` |\n| `.active()` | None | `List[{}]` | list with one object with props `id, name, type, version` |\n| `.info()` | None | `Map{}` | map with *too many(29) props* |\n| `.keypress('...')` | String | `Boolean` | true if success, false if error |\n| `.keydown('...')`| String | `Boolean` | true if successful, false if error |\n| `.keyup('...')` | String | `Boolean` | true if successful, false if error |\n| `'.icon(1)` | Number | `Buffer` | jpeg image as buffer |\n| `'.launch(1)` | Number | `Boolean` | true if successful, false if error |\n\n### keypress values\n- `Home`\n- `Rev`\n- `Fwd`\n- `Play`\n- `Select`\n- `Left`\n- `Right`\n- `Down`\n- `Up`\n- `Back`\n- `InstantReplay`\n- `Info`\n- `Backspace`\n- `Search`\n- `Enter`\n\n## tests\n`$ npm test`\n\n\n## references\n[Roku - External Control Service Commands][1]\n[Roku - Keypress Key Values][3]\n\n### additional information\nOnly tested on OSX and with Roku3 device. halp?\n\n\u003c!-- urls --\u003e\n[1]: https://sdkdocs.roku.com/display/sdkdoc/External+Control+API\n[2]: http://facebook.github.io/immutable-js/\n[3]: https://sdkdocs.roku.com/display/sdkdoc/External+Control+API#ExternalControlAPI-KeypressKeyValues\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsgnl%2Fnodeku","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsgnl%2Fnodeku","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsgnl%2Fnodeku/lists"}