UNPKG

modrinth-api-types

Version:

Full typings for the Modrinth REST API

154 lines (139 loc) 4.3 kB
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`; }; };