{"id":15527383,"url":"https://github.com/patrickmichalina/onvif-rx","last_synced_at":"2025-04-23T12:26:13.894Z","repository":{"id":34005960,"uuid":"164034188","full_name":"patrickmichalina/onvif-rx","owner":"patrickmichalina","description":"📹 Communicate with ONVIF devices and cameras in server and browser environments.","archived":false,"fork":false,"pushed_at":"2023-04-30T04:26:49.000Z","size":1875,"stargazers_count":23,"open_issues_count":8,"forks_count":12,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-29T23:32:12.143Z","etag":null,"topics":["camera","node","nodejs","onvif","onvif-camera","onvif-client","ptz","rxjs","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/patrickmichalina.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":"2019-01-03T23:39:04.000Z","updated_at":"2024-08-21T20:27:43.000Z","dependencies_parsed_at":"2025-03-05T13:36:19.362Z","dependency_job_id":"a9b8bcf8-a26c-4728-8088-f4fff2a7ac10","html_url":"https://github.com/patrickmichalina/onvif-rx","commit_stats":null,"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickmichalina%2Fonvif-rx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickmichalina%2Fonvif-rx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickmichalina%2Fonvif-rx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrickmichalina%2Fonvif-rx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrickmichalina","download_url":"https://codeload.github.com/patrickmichalina/onvif-rx/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250432548,"owners_count":21429691,"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":["camera","node","nodejs","onvif","onvif-camera","onvif-client","ptz","rxjs","typescript"],"created_at":"2024-10-02T11:06:04.788Z","updated_at":"2025-04-23T12:26:13.866Z","avatar_url":"https://github.com/patrickmichalina.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\" style=\"border-bottom: none;\"\u003eonvif-rx\u003c/h1\u003e\n\u003ch3 align=\"center\"\u003eInteract with ONVIF cameras and devices using TypeScript and RXJS.\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://circleci.com/gh/patrickmichalina/onvif-rx\"\u003e\n    \u003cimg alt=\"circeci\" src=\"https://circleci.com/gh/patrickmichalina/onvif-rx.svg?style=shield\"\u003e\n  \u003c/a\u003e\n  \u003c!-- \u003ca href=\"https://codeclimate.com/github/patrickmichalina/onvif-rx/test_coverage\"\u003e\n    \u003cimg src=\"https://api.codeclimate.com/v1/badges/f40c9fff2927e49c3ea2/test_coverage\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://codeclimate.com/github/patrickmichalina/onvif-rx/maintainability\"\u003e\n    \u003cimg alt=\"codeclimate\" src=\"https://api.codeclimate.com/v1/badges/f40c9fff2927e49c3ea2/maintainability\"\u003e\n  \u003c/a\u003e --\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://greenkeeper.io\"\u003e\n    \u003cimg alt=\"greenkeeper\" src=\"https://badges.greenkeeper.io/semantic-release/semantic-release.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://david-dm.org/patrickmichalina/onvif-rx\"\u003e\n    \u003cimg alt=\"greenkeeper\" src=\"https://david-dm.org/patrickmichalina/onvif-rx/status.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://david-dm.org/patrickmichalina/onvif-rx?type=dev\"\u003e\n    \u003cimg alt=\"greenkeeper\" src=\"https://david-dm.org/patrickmichalina/onvif-rx/dev-status.svg\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/semantic-release/semantic-release\"\u003e\n    \u003cimg alt=\"semantic-release\" src=\"https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/onvif-rx\"\u003e\n    \u003cimg alt=\"npm latest version\" src=\"https://img.shields.io/npm/v/onvif-rx/latest.svg\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n![0930282e-7f18-11e6-948a-00546393fd93](https://cloud.githubusercontent.com/assets/6701211/25729535/89c26d18-30fb-11e7-8701-af3bcdda410f.png)\n\n## About\nThis library aims to provide an easy way to interact with ONVIF devices from within Node. It is built with TypeScript to provide IDE's easy access to\ndocumentation and typing information. \n\nThe API is generated dynamically by reading ONVIF WSDL and XSD files.\n\nThis library is very early and not garaunteed to work for evey camera. Feel free to create a Github issue if it's not working for you.\n\nThis library does not \"discover\" devices on the network - for that try [onvif-probe-rx](https://github.com/patrickmichalina/onvif-probe-rx)\n\n## Docs\nFor more information about the TypeScript API checkout the [generated API docs](docs/README.md).\n\n## Roadmap\n\n- [x] Generate API with typings and docs from WSDL's and XSD's\n- [x] Execute simple (parameter-less) requests\n- [x] Execute requests with paremeters\n\n## Node Installation\nThis package is designed to be run in both the browser and node environments.\n```sh\nnpm i onvif-rx\n```\n\n## Browser Installation (expiremental)\n```html\n\u003chead\u003e\n \u003c!-- simplest method, gets the latest version, but not minifed --\u003e\n \u003cscript src=\"https://unpkg.com/onvif-rx\"\u003e\u003c/script\u003e\n \n \u003c!-- RECOMMENDED: use a specific version to avoid a redirect and get a minified version --\u003e \n \u003cscript src=\"https://unpkg.com/onvif-rx@x.x.x/dist/onvif-rx-umd.min.js\"\u003e\u003c/script\u003e\n\u003c/head\u003e\n```\n\n## Usage\nThe library is designed to be used in 2 distinct ways.\n- [Managed](#managed-usage) - you construct a manged device using service URL and username/password combo. This makes running commands painless.\n- [Ad Hoc](#ad-hoc-usage) - you can call methods individually with different username/passwords if needed.\n\n### Managed Usage\n```ts\nimport { createManagedDeviceInNode } from 'onvif-rx'\n\nconst device = createManagedDeviceInNode({\n  deviceUrl: 'http://192.168.1.11/onvif/device_service',\n  password: 'admin',\n  username: '1234'\n})\n\ndevice.api.Device.GetUsers()\n  .toPromise()\n  .then(res=\u003e {\n    res.match({ // results are wrapped in a managed object for safer processing\n      ok: success =\u003e console.log(success.json), // successful response object\n      fail: railure =\u003e console.log(railure.status, railure.statusMessage) // request failure object\n    })\n  }) \n```\n\n### Ad Hoc Usage\n```ts\nimport { Device } from 'onvif-rx'\nimport { maybe } from 'typescript-monads'\n\nDevice.GetUsers()\n  .run({\n    system: DEFAULT_NODE_ENV,\n    deviceUrl: 'http://192.168.1.11/onvif/device_service',\n    user: maybe({ // currently requires a wrapper object, will improve in the future\n      username: 'admin',\n      password: '1234'\n    })\n  })\n  .toPromise()\n  .then(res=\u003e {\n    res.match({\n      ok: success =\u003e console.log(success.json), // successful response object\n      fail: railure =\u003e console.log(railure.status, railure.statusMessage) // request failure object\n    })\n  }) \n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickmichalina%2Fonvif-rx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatrickmichalina%2Fonvif-rx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrickmichalina%2Fonvif-rx/lists"}