{"id":43546221,"url":"https://github.com/sqmk/chump","last_synced_at":"2026-02-03T18:44:27.890Z","repository":{"id":57198622,"uuid":"42213670","full_name":"sqmk/chump","owner":"sqmk","description":"Pushover.net client for Node.js","archived":false,"fork":false,"pushed_at":"2017-06-06T01:10:47.000Z","size":74,"stargazers_count":19,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-18T21:49:48.549Z","etag":null,"topics":["chump","nodejs","pushover"],"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/sqmk.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}},"created_at":"2015-09-10T01:13:56.000Z","updated_at":"2022-12-21T02:10:42.000Z","dependencies_parsed_at":"2022-09-16T14:10:31.546Z","dependency_job_id":null,"html_url":"https://github.com/sqmk/chump","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/sqmk/chump","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqmk%2Fchump","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqmk%2Fchump/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqmk%2Fchump/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqmk%2Fchump/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sqmk","download_url":"https://codeload.github.com/sqmk/chump/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sqmk%2Fchump/sbom","scorecard":{"id":843059,"data":{"date":"2025-08-11","repo":{"name":"github.com/sqmk/chump","commit":"8023a7c1121c94a99854ab4310b1e114384e4724"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 1/28 approved changesets -- score normalized to 0","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":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"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":"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":"Dangerous-Workflow","score":-1,"reason":"no workflows found","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":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"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":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","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":"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":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"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":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: 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":"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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 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-23T20:53:08.193Z","repository_id":57198622,"created_at":"2025-08-23T20:53:08.194Z","updated_at":"2025-08-23T20:53:08.194Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29053290,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T15:43:47.601Z","status":"ssl_error","status_checked_at":"2026-02-03T15:43:46.709Z","response_time":96,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["chump","nodejs","pushover"],"created_at":"2026-02-03T18:44:27.167Z","updated_at":"2026-02-03T18:44:27.883Z","avatar_url":"https://github.com/sqmk.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://cdn.rawgit.com/sqmk/chump/5c292306a220791bcd17d70eeb3f9b4d04e2bb51/media/logo.svg\" alt=\"Chump\" /\u003e\n\u003c/p\u003e\n\n# Chump - Pushover.net client for Node.js\n\n[![NPM Version](https://img.shields.io/npm/v/chump.svg?style=flat-square)](https://www.npmjs.com/package/chump)\n[![Build Status](https://img.shields.io/travis/sqmk/chump/master.svg?style=flat-square)](https://travis-ci.org/sqmk/chump)\n[![Dependency Status](https://img.shields.io/david/sqmk/chump.svg?style=flat-square)](https://david-dm.org/sqmk/chump)\n\nChump is a client for the popular [Pushover.net](https://pushover.net) real-time\nnotification service.\n\nUse Chump to send Android, iOS, watchOS, and desktop notifications.\n\nChump makes **full use** of Pushover.net's API.\n\n## Installation\n\nChump was written for **Node.js 4+**.\n\n`npm install --save chump`\n\n## Basic Usage\n\nIt is easy to send messages via Pushover.net using Chump.\n\n### Sending Messages\n\n```js\nlet chump = require('chump');\n\n// Instantiate client with your api token\nlet client = new chump.Client('yourApiToken');\n\n// Instantiate a destination user\nlet user = new chump.User('userIdHere', 'optionalUserDeviceHere');\n\n// Instantiate a message\nlet message = new chump.Message({\n  title:      'Example title',\n  message:    'Example message',\n  enableHtml: false,\n  user:       user,\n  url:        'http://example.org',\n  urlTitle:   'Example.org',\n  priority:   new chump.Priority('low'),\n  sound:      new chump.Sound('magic')\n});\n\n// Send the message, handle result within a Promise\nclient.sendMessage(message)\n  .then(() =\u003e {\n\t  console.log('Message sent.');\n  })\n  .catch(error =\u003e {\n  \tconsole.log('An error occurred.');\n    console.log(error.stack);\n  });\n```\n\nAll client methods that send a command return a **Promise**.\n\n### Sending Messages With Emergency Priority\n\nAn emergency priority can be attached to a message. This requires that the\nmessage is acknowledged by the user, and can renotify the user on failure to\nacknowledge. Pushover.net can also call an optional callback URL after the user\nacknowledges the message. A message receipt is returned to the resolved Promise\non successful delivery of emergency priority messages.\n\n```js\nlet priority = new chump.Priority('emergency', {\n  retry:    300,  // Optional: Notify user every 5 minutes (300 seconds) until acknowledged\n  expire:   3600, // Optional: Expire the message in 1 hour (3600 seconds)\n  callback: 'http://example.org' // Optional: Callback URL\n});\n\nlet message = new chump.Message({\n  title:    'Example emergency',\n  message:  'Super important message',\n  user:     user,\n  priority: priority\n});\n\nclient.sendMessage(message)\n  .then(receipt =\u003e {\n    console.log(`Message sent. Receipt is ${receipt}`);\n  });\n```\n\n## Advanced Usage\n\nChump supports the entire Pushover.net API. The client offers convenience methods\nthat correspond to each Pushover.net endpoint.\n\nAs documented earlier, all client methods that send a command return a **Promise**.\n\n### .verifyUser\n\nVerify that a user (and optionally, the user's device) exists on Pushover.net\n\n```js\nlet user = new chump.user('userIdHere', 'optionalUserDeviceHere');\n\n// Verify the user exists\nclient.verifyUser(user)\n  .then(() =\u003e {\n    console.log('User exists.');\n  })\n  .catch(error =\u003e {\n    console.log('User may not exist.');\n    console.log(error.stack);\n  });\n```\n\n### .getReceipt\n\nAdditional receipt information can be retrieved from Pushover.net. Receipts are\nonly returned for messages sent with an emergency priority.\n\n```js\nclient.getReceipt(receipt)\n  .then(receipt =\u003e {\n    console.log(`Receipt: ${receipt.id}`);\n    console.log(`Acknowledged: ${receipt.isAcknowledged}`);\n    console.log(`Acknowledged by: ${receipt.acknowledgedBy}`);\n    console.log(`Last delivered at: ${receipt.lastDeliveredAt}`);\n    console.log(`Is expired: ${receipt.isExpired}`);\n    console.log(`Expires at: ${receipt.expiresAt}`);\n    console.log(`Has called back: ${receipt.hasCalledBack}`);\n    console.log(`Called back at: ${receipt.calledBackAt}`);\n  });\n```\n\n### .cancelEmergency\n\nA message with an emergency priority can be cancelled.\n\n```js\nclient.cancelEmergency(receipt);\n```\n\n### .getGroupDetails\n\nPushover.net supports managing users within groups. Creating groups can only be\ndone through Pushover.net's website. Assuming you know the group Id, you can use\nChump to retrieve information for the group from Pushover.net.\n\n```js\nlet group = new chump.Group(groupId);\n\nclient.getGroupDetails(group)\n  .then(group =\u003e {\n    console.log(`Group name: ${group.name}`);\n\n    for (let user of group.users) {\n      console.log(`User: ${user.id}, ${user.device}`);\n    }\n  });\n```\n\n### .addUserToGroup\n\nAdd a user to a known group.\n\n```js\nlet user  = new chump.User(userId);\nlet group = new chump.Group(groupId);\n\nclient.addUserToGroup(user, group);\n```\n\n### .removeUserFromGroup\n\nRemove a user from a known group.\n\n```js\nlet user  = new chump.User(userId);\nlet group = new chump.Group(groupId);\n\nclient.removeUserFromGroup(user, group);\n```\n\n### .enableGroupUser\n\nEnable a user in a known group.\n\n```js\nlet user  = new chump.User(userId);\nlet group = new chump.Group(groupId);\n\nclient.enableGroupUser(user, group);\n```\n\n### .disableGroupUser\n\nDisable a user in a known group.\n\n```js\nlet user  = new chump.User(userId);\nlet group = new chump.Group(groupId);\n\nclient.disableGroupUser(user, group);\n```\n\n### .renameGroup\n\nRename a known group.\n\n```js\nlet group = new chump.Group(groupId);\n\nclient.renameGroup(group, 'New name');\n```\n\n## Track Application Limitations\n\nPushover.net limits the number of messages emitted from its service. Chump keeps\ntrack of these limitations after each successful message sent. You can access app\nlimitations from the following client properties:\n\n```js\n// Maximum number of messages that can be sent\nlet appLimit = client.appLimit;\n\n// Number of messages remaining in time period\nlet appRemaining = client.appRemaining;\n\n// Date when app remaining resets to app limit\nlet appReset = client.appReset;\n```\n\n## Examples\n\nWant to see more examples? View them in the [examples](examples) directory included\nin this repository.\n\n## Logo\n\nChump's initial logo was designed by scorpion6 on Fiverr. Font used is Lato Bold.\n\n## License\n\nThis software is licensed under the MIT License. [View the license](LICENSE).\n\nCopyright © 2015 [Michael K. Squires](http://sqmk.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsqmk%2Fchump","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsqmk%2Fchump","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsqmk%2Fchump/lists"}