{"id":43034761,"url":"https://github.com/bscotch/rumpus-ce","last_synced_at":"2026-01-31T08:14:24.820Z","repository":{"id":36672679,"uuid":"229468575","full_name":"bscotch/rumpus-ce","owner":"bscotch","description":"Create Levelhead Node.js and web apps powered by Rumpus CE. Fetch level and player data, add levels to your bookmarks, and more!","archived":false,"fork":false,"pushed_at":"2023-07-18T20:23:25.000Z","size":679,"stargazers_count":5,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2025-10-10T07:53:44.859Z","etag":null,"topics":["api","butterscotch-shenanigans","games","javascript","levelhead","levelhead-game","platformer","rumpus","rumpus-accounts","rumpus-api"],"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/bscotch.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":"2019-12-21T18:40:26.000Z","updated_at":"2024-05-19T16:24:27.000Z","dependencies_parsed_at":"2022-08-08T16:30:54.825Z","dependency_job_id":null,"html_url":"https://github.com/bscotch/rumpus-ce","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bscotch/rumpus-ce","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bscotch%2Frumpus-ce","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bscotch%2Frumpus-ce/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bscotch%2Frumpus-ce/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bscotch%2Frumpus-ce/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bscotch","download_url":"https://codeload.github.com/bscotch/rumpus-ce/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bscotch%2Frumpus-ce/sbom","scorecard":{"id":256131,"data":{"date":"2025-08-11","repo":{"name":"github.com/bscotch/rumpus-ce","commit":"56e4b73bb14f887fccc860668eca31a18fc5922a"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2,"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":"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":"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":"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":"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":"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":"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":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 3 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"}},{"name":"Vulnerabilities","score":0,"reason":"17 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-wf5p-g6vw-rhxx","Warn: Project is vulnerable to: GHSA-jr5f-v2jv-69x6","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-67mh-4wv8-2f99","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-8mmm-9v2q-x3f9","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-17T09:45:44.496Z","repository_id":36672679,"created_at":"2025-08-17T09:45:44.496Z","updated_at":"2025-08-17T09:45:44.496Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28934816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T07:49:44.436Z","status":"ssl_error","status_checked_at":"2026-01-31T07:49:34.274Z","response_time":128,"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":["api","butterscotch-shenanigans","games","javascript","levelhead","levelhead-game","platformer","rumpus","rumpus-accounts","rumpus-api"],"created_at":"2026-01-31T08:14:24.127Z","updated_at":"2026-01-31T08:14:24.815Z","avatar_url":"https://github.com/bscotch.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Rumpus Community Edition SDK\n\n**Rumpus Community Edition** (\"Rumpus CE\") is a subset of the Rumpus API by Butterscotch Shenanigans (\"Bscotch\"). The broader Rumpus API manages all user and game data for Bscotch games. Currently, Rumpus CE allows access to [Levelhead](https://www.bscotch.net/games/levelhead) data only.\n\nThis project is designed to help jump-start community-created projects by providing easy access to Rumpus CE data -- learn more about Rumpus CE on the [Bscotch website](https://beta.bscotch.net/rumpus-ce) and check out the [Rumpus CE documentation](https://beta.bscotch.net/api/docs/community-edition/) for all the technical details.\n\n👀 See the [demo site](https://bscotch.github.io/rumpus-ce/), which uses RumpusCE to fetch and display Levelhead player stats. The code for the demo site is [available on GitHub](https://github.com/bscotch/rumpus-ce/tree/develop/browser).\n\n*It may be tempting to use this module and Rumpus CE in ways that violate our Terms or Code of Conduct. **Don't!** If you're unsure about something, pop into the official Bscotch Discord to ask about your use case.*\n\n## Relevant Links\n\n+ [Demo Site](https://bscotch.github.io/rumpus-ce/)\n+ [Rumpus CE Homepage](https://beta.bscotch.net/rumpus-ce)\n+ [Rumpus CE Newsletter](https://beta.bscotch.net/telegrams?subscribe=rumpus-ce)\n+ [Rumpus CE Documentation](https://beta.bscotch.net/api/docs/community-edition) - Full documentation for Rumpus CE.\n+ [Rumpus CE Terms](https://beta.bscotch.net/terms-rce) - Terms and Conditions that apply specifically to use of Rumpus Community Edition.\n+ [Bscotch Terms](https://beta.bscotch.net/terms) - The broader Terms and Conditions for all software and services run by Bscotch.\n+ [Bscotch Discord](https://discord.gg/bscotch) - Head to the #levelhead-api channel to share your work with others.\n+ [Code of Conduct](https://beta.bscotch.net/conduct)\n+ [Bscotch Privacy Policy](https://beta.bscotch.net/privacy)\n+ [Feedback](https://beta.bscotch.net/feedbag/rumpus?tags=rce,github) - Our official channel for collecting feedback. You can also create Issues on Github.\n\n## Rate Limits\n\nThe Rumpus APIs enforce strict rate limiting, but if you are using the APIs responsibly you shouldn't have to worry about them. The exact numbers are subject to change at any moment, so they are not listed here. If you run into limits, optimize your requests by caching responses, making batch requests, and throttling requests. The [headers returned in each response](https://beta.bscotch.net/api/docs/community-edition/#header-headers-1) will tell you how many requests you have left until your counter is reset.\n\nRate limits are on a per-user basis. Anonymous requests are limited at the IP address level.\n\n## Browser vs. Server\n\nThis project can be used in both a browser and non-browser (server/nodejs) context. However, differences between those two contexts, in particular with CORS and JavaScript feature variation across browsers, may create problems in some contexts.\n\n## Authentication\n\nThis project supports unauthenticated requests (for those Rumpus CE endpoints that allow for that) and Delegation Key-authenticated requests. Delegation Keys provide well-defined and extremely limited access to Rumpus accounts, so that players can hand keys over to unofficial 3rd parties without having to worry *too* much about privacy and security issues. Delegation Keys are created via a user's [Rumpus account settings](https://beta.bscotch.net/account).\n\nUsers opt into different sets of permissions when they create delegation keys -- if there is a mismatch between what is allowed by a delegation key and what you're trying to do, you'll get back `403` statuses from your request.\n\nSome methods and Rumpus CE endpoints can be used without any authentication.\n\n## Installation\n\nTo use directly in the browser via the JSDelivr CDN (**Note:** you must specify `type=\"module\"` in your script tags!):\n\n```html\n\u003cscript\n  src=\"https://cdn.jsdelivr.net/npm/@bscotch/rumpus-ce@2.1.0\"\n  type=\"module\"\n\u003e\u003c/script\u003e\n\u003cscript type=\"module\"\u003e\n  const rce = new window.RumpusCE();\n\u003c/script\u003e\n```\n\nOr install with npm: `npm i @bscotch/rumpus-ce`\n\nAnd then in JavaScript/Node:\n\n```js\nconst {RumpusCE} = require('@bscotch/rumpus-ce');\nconst rce = new RumpusCE();\n```\n\n```ts\nimport {RumpusCE} from \"@bscotch/rumpus-ce\";\nconst rce = new RumpusCE();\n```\n\n## Usage\n\n### New to Programming and/or JavaScript?\n\nWhile this project is meant to help jump-start community use\nof Rumpus CE, it is not designed specifically for people new\nto programming or new to JavaScript/Typescript.\n\nMost of the documentation for this project is internal, via\nJSDoc and Typescript, because external documentation is prone\nto becoming inaccurate over time. Good development software makes\ninternal documentation visible to you via auto-complete and hover-text.\nSo, to make it as easy as possible to make use of this package,\nyou'll need a development environment that understands\nJavaScript and Typescript, such as\n[Visual Studio Code](https://code.visualstudio.com/).\n\nMany of the methods in this project return JavaScript Promises.\nIf you aren't familiar with async programming in JavaScript,\nyou'll need to\n[do some studying](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises)\nbefore diving in!\n\n### Creating a client instance\n\nAll usage is centered around instances of the RumpusCE SDK client.\n\nDelegation keys are optional in general, but are required for\nmany specific actions. You can set a default delegation key\nfor the client using the environment variable `RUMPUS_DELEGATION_KEY`,\nor by explicitly providing the key when you make a new client.\n\nThe default key will be used for all requests unless you override\nit by setting one of the override options: `doNotUseKey: true` or `delegationKey: TemproraryOverrideKey`.\n\n```js\n// Create a client that uses the RUMPUS_DELEGATION_KEY\n// environment variable value as its default key, if defined,\n// and otherwise defaults to having no default key.\nconst rce = new RumpusCE();\n\n// Or explicitly specify the default key.\nconst myDelegationToken = 'ADelegationKey';\nconst rce = new RumpusCE(myDelegationToken);\n\n// You can change the default key at any time.\nrce.defaultDelegationKey = 'SomeOtherDelegationKey';\n\n// You can override the default key on a per-request basis.\nrce.levelhead.aliases.search(\"bscotch404\",{},{delegationKey:'AnOverrideKey'});\n\n// Finally, you can prevent use of a key completely, for example for endpoints\n// that are publicly accessible but to which a given Delegatin Key does not have\n// explicit permissions.\nrce.get('/api/some/endpoint',{doNotUseKey:true});\n```\n\n### Data Structures\n\nSome of the arrays and objects returned by Rumpus CE methods have methods attached to them to simplify subsequent API interaction. If you use an IDE that reveals type information you'll be able to infer this on a method/object-specific basis. Example extended objects:\n\n+ `ResultsPage`: An array with the addition of an async `.nextPage()` method. Calling this method will trigger another API request to fetch the next page of results.\n+ `Alias`\n  + `avatarUrl()`: Retrieve the image URL (defaults to PNG of width 128px) for this users's avatar, hosted on Bscotch servers.\n+ `LevelheadPlayer`\n  + `getLikedLevels()`: Pageable list of levelIds.\n  + `getFavoritedLevels()`\n  + `getFollowers()`: Pageable list of userIds of users following this user.\n  + `getFollowing()`: List of userIds this user follows.\n  + `follow()`: Acting on behalf of the current user (the one matching the Delegation Key), follow this user.\n  + `unfollow()`\n+ `LevelheadLevel`\n  + `avatarUrl()`: Retrieve the image URL for this level's icon.\n  + `getLikes()`: Pageable list of userIds for players who like this level.\n  + `getFavorites()`\n  + `bookmark()`: Bookmark this level on the current user's behalf.\n  + `unbookmark()`\n\n### Methods\n\nFull documentation is provided via types and JSDocs. Below is a quick, non-comprehensive list of functionality for convenience.\n\n#### General\n\n+ `rce.version()`: [node only] Get the current Rumpus, Terms, and Privacy Policy versions.\n+ `rce.delegationKeyPermissions()`: Get permissions information for a given delegation key.\n+ `rce.request()`: Generic method for sending requests to Rumpus.\n+ `rce.get()`: Shortcut method for sending GET requests to Rumpus.\n+ `rce.post()`\n+ `rce.patch()`\n+ `rce.put()`\n+ `rce.delete()`\n\n#### Levelhead\n\n##### Misc.\n\n+ `rce.levelhead.aliases.search('bscotch404')`: Get the Levelhead aliases (usernames) for a list of lookup codes.\n\n##### Levels\n\n+ `rce.levelhead.levels.getTags()`: Level tags are machine-friendly tokens -- this returns the current set of level tags along with their statistical frequencies across all levels, and their name and description in the requester's language.\n+ `rce.levelhead.levels.search()`: Search for Levelhead levels. Level tags are automatically translated into the requester's preferred language (English fallback).\n+ `rce.levelhead.levels.getLikes(levelId)`: List the users who like a given Levelhead level. Resulting array has a `nextPage()` function to simplify paging.\n+ `rce.levelhead.levels.getFavorites(levelId)`:\n\n##### Players\n\n+ `rce.levelhead.players.search()`: Search for Levelhead players.\n+ `rce.levelhead.players.getLikedLevels(userId)`: Page through the levels \"liked\" by a given player.\n+ `rce.levelhead.players.getFavoritedLevels(userId)`\n+ `rce.levelhead.players.getFollowers(userId)`: Page through the users who follow a given player.\n+ `rce.levelhead.players.getFollowing(userId)`: Page through the users a given user follows.\n+ `rce.levelhead.players.follow(userId)`: Follow a player.\n+ `rce.levelhead.players.unfollow(userId)`\n\n##### Bookmarks\n\n+ `rce.levelhead.bookmarks.search()`: Search the current user's bookmarks.\n+ `rce.levelhead.bookmarks.add(levelId)`: Add a level to the current user's bookmarks.\n+ `rce.levelhead.bookmarks.remove(levelId)`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbscotch%2Frumpus-ce","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbscotch%2Frumpus-ce","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbscotch%2Frumpus-ce/lists"}