modrinth-api-types
Version:
Full typings for the Modrinth REST API
154 lines (139 loc) • 4.3 kB
text/typescript
import { RequireAtLeastOne } from "../../globals";
import {
APIProject,
APITeamMember
} from "../../payloads/v2";
import { TeamMemberPermissions } from "./bitfields";
import { APIProjectResolvable } from "./projects";
import { APIUserResolvable } from "./users";
// TYPES
export type APITeamResolvable =
| APIProject
| APITeamMember
| string;
export type APITeamAddUserBody = {
/**
* The ID of the user.
*/
user_id: string;
};
export type APITeamEditMemberBody = RequireAtLeastOne<{
/**
*
*/
role?: string;
/**
* The user’s permissions in bitfield format
*
* In order from first to tenth bit, the bits are:
* - `UPLOAD_VERSION`: `1n << 0n`
* - `DELETE_VERSION`: `1n << 1n`
* - `EDIT_DETAILS`: `1n << 2n`
* - `EDIT_BODY`: `1n << 3n`
* - `MANAGE_INVITES`: `1n << 4n`
* - `REMOVE_MEMBER`: `1n << 5n`
* - `EDIT_MEMBER`: `1n << 6n`
* - `DELETE_PROJECT`: `1n << 7n`
* - `VIEW_ANALYTICS`: `1n << 8n`
* - `VIEW_PAYOUTS`: `1n << 9n`
*/
permissions?: TeamMemberPermissions;
/**
* The split of payouts going to this user. The proportion of payouts they get is their split divided by the sum of the splits of all members.
*/
payout_split?: number;
/**
* The order of the team member.
*/
ordering?: number;
}>;
export type APITransferTeamOwnershipBody = string;
// ROUTES
/**
* Route for the following:
* - GET `/project/${project}/members`
* @param project The ID or slug of the project.
*/
export function projectTeamMembers(project: APIProjectResolvable): `/project/${string}/members` {
if (typeof project == "string") {
return `/project/${project}/members`;
} else {
return `/project/${project.id}/members`;
};
};
/**
* Route for the following:
* - GET `/team/${team}/members`
* - POST `/team/${team}/members`
* @param team The ID of the team.
*/
export function teamMembers(team: APITeamResolvable): `/team/${string}/members` {
if (typeof team == "object") {
if ("team_id" in team) {
return `/team/${team.team_id}/members`;
} else {
return `/team/${team.team}/members`;
};
} else {
return `/team/${team}/members`;
};
};
/**
* Route for the following:
* - GET `/teams`
* @param teams The IDs of the teams.
*/
export function teams(teams: APITeamResolvable[]): `/teams?ids=${string}` {
return `/teams?ids=[${teams.map(t => typeof t == "object" ? "team_id" in t ? `"${t.team_id}"` : `"{t.team}"` : `"${t}"`).join(",")}]`;
};
/**
* Route for the following:
* - POST `/team/${team}/join`
* @param team The ID of the team.
*/
export function teamJoin(team: APITeamResolvable): `/team/${string}/join` {
if (typeof team == "object") {
if ("team_id" in team) {
return `/team/${team.team_id}/join`;
} else {
return `/team/${team.team}/join`;
};
} else {
return `/team/${team}/join`;
};
};
/**
* Route for the following:
* - DELETE `/team/${team}/members/${user}`
* - PATCH `/team/${team}/members/${user}`
* @param team The ID of the team.
* @param user The ID or username of the user.
*/
export function teamMember(team: APITeamResolvable, user: APIUserResolvable): `/team/${string}/members/${string}` {
let userId = typeof user == "string" ? user : user.id;
if (typeof team == "object") {
if ("team_id" in team) {
return `/team/${team.team_id}/members/${userId}`;
} else {
return `/team/${team.team}/members/${userId}`;
};
} else {
return `/team/${team}/members/${userId}`;
};
};
/**
* Route for the following:
* - PATCH `/team/${team}/owner`
* @param team The ID of the team.
*/
export function teamOwner(team: APITeamResolvable): `/team/${string}/owner` {
if (typeof team == "object") {
if ("team_id" in team) {
return `/team/${team.team_id}/owner`;
} else {
return `/team/${team.team}/owner`;
};
} else {
return `/team/${team}/owner`;
};
};