Files
shields/services/thunderstore/thunderstore-base.js
chris48s bd3a11b4b6 upgrade to docusaurus 3 (#9820)
* update packages

* add plugin to strip autolinks in code blocks

* fix all the documentation for MDXv3

* remove check-docusaurus-versions

in docusaurus 3 this is now a hard error, not just a warning

* port upstream change to Curl component

fixes performing the 'execute' action when pressing enter
2024-03-23 19:54:57 +00:00

61 lines
1.9 KiB
JavaScript

import Joi from 'joi'
import { BaseJsonService } from '../index.js'
import { nonNegativeInteger } from '../validators.js'
const packageMetricsSchema = Joi.object({
downloads: nonNegativeInteger,
rating_score: nonNegativeInteger,
latest_version: Joi.string().required(),
})
const description = `
The Thunderstore badges require a package's <code>namespace</code> and <code>name</code>.
Everything can be discerned from your package's URL. Thunderstore package URLs have a mostly consistent format:
<code>https://thunderstore.io/c/[community]/p/[namespace]/[packageName]</code>
For example: <code>https://thunderstore.io/c/lethal-company/p/notnotnotswipez/MoreCompany/</code>.
<ul>
<li><code>namespace = "notnotnotswipez"</code></li>
<li><code>packageName = "MoreCompany"</code></li>
</ul>
:::info[Risk Of Rain 2]
The 'default community', Risk of Rain 2, has an alternative URL:
<code>https://thunderstore.io/package/[namespace]/[packageName]</code>
:::
:::info[Subdomain Communities]
Some communities use a 'subdomain' alternative URL, for example, Valheim:
<code>https://valheim.thunderstore.io/package/[namespace]/[packageName]</code>
:::
`
/**
* Services which query Thunderstore endpoints should extend BaseThunderstoreService
*
* @abstract
*/
class BaseThunderstoreService extends BaseJsonService {
static thunderstoreGreen = '23FFB0'
/**
* Fetches package metrics from the Thunderstore API.
*
* @param {object} pkg - Package specifier
* @param {string} pkg.namespace - the package namespace
* @param {string} pkg.packageName - the package name
* @returns {Promise<object>} - Promise containing validated package metrics
*/
async fetchPackageMetrics({ namespace, packageName }) {
return this._requestJson({
schema: packageMetricsSchema,
url: `https://thunderstore.io/api/v1/package-metrics/${namespace}/${packageName}`,
})
}
}
export { BaseThunderstoreService, description }