@wumx-labs/noxaeapi-sdk 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/http-engine.ts","../src/modules/players.ts","../src/modules/economy.ts","../src/modules/server.ts","../src/modules/worlds.ts","../src/modules/plugins.ts","../src/modules/misc.ts","../src/modules/luckperms.ts","../src/modules/noxauth.ts","../src/socket.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["export interface NoxAeApiErrorInfo {\n status: number;\n method: string;\n path: string;\n body?: unknown;\n}\n\n/**\n * Base error thrown for any non-2xx response from a NoxAeApi server.\n * Prefer catching the more specific subclasses below when you need to\n * branch on the failure reason.\n */\nexport class NoxAeApiError extends Error {\n readonly status: number;\n readonly method: string;\n readonly path: string;\n readonly body?: unknown;\n\n constructor(message: string, info: NoxAeApiErrorInfo) {\n super(message);\n this.name = \"NoxAeApiError\";\n this.status = info.status;\n this.method = info.method;\n this.path = info.path;\n this.body = info.body;\n }\n}\n\n/** 401 — the API key is missing or not recognized by the server. */\nexport class NoxAeApiUnauthorizedError extends NoxAeApiError {\n constructor(info: NoxAeApiErrorInfo) {\n super(\n `Unauthorized: the API key was missing or invalid for ${info.method} ${info.path}`,\n info,\n );\n this.name = \"NoxAeApiUnauthorizedError\";\n }\n}\n\n/**\n * 403 — the API key is valid but isn't allowed to call this endpoint\n * (read-only key hitting a write route, or an endpoint restriction set\n * on the key). This is a server-side permission decision; the SDK does\n * not attempt to predict or enforce it client-side.\n */\nexport class NoxAeApiForbiddenError extends NoxAeApiError {\n constructor(info: NoxAeApiErrorInfo) {\n super(\n `Forbidden: this API key does not have permission to call ${info.method} ${info.path}`,\n info,\n );\n this.name = \"NoxAeApiForbiddenError\";\n }\n}\n\n/** 404 — the target resource (player, world, plugin, etc.) wasn't found. */\nexport class NoxAeApiNotFoundError extends NoxAeApiError {\n constructor(info: NoxAeApiErrorInfo) {\n super(`Not found: ${info.method} ${info.path}`, info);\n this.name = \"NoxAeApiNotFoundError\";\n }\n}\n\n/** 429 — rate limited. `retryAfterMs` is populated when the server sends a Retry-After header. */\nexport class NoxAeApiRateLimitError extends NoxAeApiError {\n readonly retryAfterMs?: number;\n\n constructor(info: NoxAeApiErrorInfo, retryAfterMs?: number) {\n super(\n `Rate limited on ${info.method} ${info.path}${retryAfterMs ? ` — retry after ${retryAfterMs}ms` : \"\"}`,\n info,\n );\n this.name = \"NoxAeApiRateLimitError\";\n this.retryAfterMs = retryAfterMs;\n }\n}\n\n/** 5xx — the server errored out. Usually safe to retry. */\nexport class NoxAeApiServerError extends NoxAeApiError {\n constructor(info: NoxAeApiErrorInfo) {\n super(`Server error (${info.status}) on ${info.method} ${info.path}`, info);\n this.name = \"NoxAeApiServerError\";\n }\n}\n\n/** The request could not complete at all (DNS, connection refused, timeout, abort). */\nexport class NoxAeApiNetworkError extends Error {\n readonly method: string;\n readonly path: string;\n readonly cause?: unknown;\n\n constructor(message: string, method: string, path: string, cause?: unknown) {\n super(message);\n this.name = \"NoxAeApiNetworkError\";\n this.method = method;\n this.path = path;\n this.cause = cause;\n }\n}\n","import {\n NoxAeApiError,\n NoxAeApiForbiddenError,\n NoxAeApiNetworkError,\n NoxAeApiNotFoundError,\n NoxAeApiRateLimitError,\n NoxAeApiServerError,\n NoxAeApiUnauthorizedError,\n} from \"./errors.js\";\n\nexport interface RetryOptions {\n /** Max number of attempts including the first one. Default 3. */\n attempts?: number;\n /** Base delay in ms used for exponential backoff. Default 300. */\n baseDelayMs?: number;\n /** Upper bound for any single backoff delay. Default 5000. */\n maxDelayMs?: number;\n}\n\nexport interface NoxAeApiClientOptions {\n /** Base URL of the server, e.g. \"http://localhost:8080\" or \"https://mc.example.com\". */\n baseUrl: string;\n /** The API key configured on the server (sent as the `key` header). */\n apiKey?: string;\n /** Request timeout in ms. Default 10000. */\n timeoutMs?: number;\n /** Retry behavior for network errors, 429s, and 5xx responses. */\n retry?: RetryOptions | false;\n /** Extra headers sent on every request. */\n headers?: Record<string, string>;\n /** Override fetch, mainly for testing. Defaults to the global fetch. */\n fetchImpl?: typeof fetch;\n}\n\nconst DEFAULT_RETRY: Required<RetryOptions> = {\n attempts: 3,\n baseDelayMs: 300,\n maxDelayMs: 5000,\n};\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction backoffDelay(attempt: number, opts: Required<RetryOptions>): number {\n const exp = Math.min(opts.maxDelayMs, opts.baseDelayMs * 2 ** attempt);\n // full jitter\n return Math.floor(Math.random() * exp);\n}\n\nexport type QueryValue = string | number | boolean | null | undefined;\n\nexport class HttpEngine {\n private readonly baseUrl: string;\n private readonly apiKey?: string;\n private readonly timeoutMs: number;\n private readonly retry: Required<RetryOptions> | false;\n private readonly extraHeaders: Record<string, string>;\n private readonly fetchImpl: typeof fetch;\n\n constructor(options: NoxAeApiClientOptions) {\n if (!options.baseUrl) {\n throw new Error(\"NoxAeApiClient requires a non-empty baseUrl\");\n }\n this.baseUrl = options.baseUrl.replace(/\\/+$/, \"\");\n this.apiKey = options.apiKey;\n this.timeoutMs = options.timeoutMs ?? 10_000;\n this.retry =\n options.retry === false\n ? false\n : { ...DEFAULT_RETRY, ...(options.retry ?? {}) };\n this.extraHeaders = options.headers ?? {};\n const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n if (!fetchImpl) {\n throw new Error(\n \"No fetch implementation available. Pass `fetchImpl` in options for this runtime.\",\n );\n }\n this.fetchImpl = fetchImpl;\n }\n\n private buildUrl(path: string, query?: Record<string, QueryValue>): string {\n const url = new URL(`${this.baseUrl}/${path.replace(/^\\/+/, \"\")}`);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n async request<T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\",\n path: string,\n opts: {\n body?: unknown;\n query?: Record<string, QueryValue>;\n } = {},\n ): Promise<T> {\n const url = this.buildUrl(path, opts.query);\n const maxAttempts = this.retry ? this.retry.attempts : 1;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n ...this.extraHeaders,\n };\n if (this.apiKey) headers[\"key\"] = this.apiKey;\n if (opts.body !== undefined) headers[\"Content-Type\"] = \"application/json\";\n\n const response = await this.fetchImpl(url, {\n method,\n headers,\n body: opts.body !== undefined ? JSON.stringify(opts.body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (response.ok) {\n if (response.status === 204) return undefined as T;\n const text = await response.text();\n return (text ? JSON.parse(text) : undefined) as T;\n }\n\n const errorBody = await response.text().catch(() => undefined);\n const parsedBody = safeJsonParse(errorBody);\n const info = { status: response.status, method, path, body: parsedBody };\n\n if (response.status === 401) throw new NoxAeApiUnauthorizedError(info);\n if (response.status === 403) throw new NoxAeApiForbiddenError(info);\n if (response.status === 404) throw new NoxAeApiNotFoundError(info);\n\n if (response.status === 429) {\n const retryAfterHeader = response.headers.get(\"Retry-After\");\n const retryAfterMs = retryAfterHeader\n ? parseRetryAfter(retryAfterHeader)\n : undefined;\n const err = new NoxAeApiRateLimitError(info, retryAfterMs);\n if (this.retry && attempt < maxAttempts - 1) {\n lastError = err;\n await sleep(retryAfterMs ?? backoffDelay(attempt, this.retry));\n continue;\n }\n throw err;\n }\n\n if (response.status >= 500) {\n const err = new NoxAeApiServerError(info);\n if (this.retry && attempt < maxAttempts - 1) {\n lastError = err;\n await sleep(backoffDelay(attempt, this.retry));\n continue;\n }\n throw err;\n }\n\n throw new NoxAeApiError(\n `Unexpected status ${response.status} on ${method} ${path}`,\n info,\n );\n } catch (err) {\n clearTimeout(timeout);\n\n if (err instanceof NoxAeApiError) throw err;\n\n const isAbort = err instanceof Error && err.name === \"AbortError\";\n const networkErr = new NoxAeApiNetworkError(\n isAbort\n ? `Request timed out after ${this.timeoutMs}ms: ${method} ${path}`\n : `Network error on ${method} ${path}: ${(err as Error).message}`,\n method,\n path,\n err,\n );\n\n if (this.retry && attempt < maxAttempts - 1) {\n lastError = networkErr;\n await sleep(backoffDelay(attempt, this.retry));\n continue;\n }\n throw networkErr;\n }\n }\n\n // Unreachable in practice, but keeps TS happy and surfaces the last error if we exit the loop.\n throw lastError instanceof Error\n ? lastError\n : new Error(\"Request failed after retries\");\n }\n}\n\nfunction safeJsonParse(text: string | undefined): unknown {\n if (!text) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction parseRetryAfter(headerValue: string): number | undefined {\n const seconds = Number(headerValue);\n if (!Number.isNaN(seconds)) return seconds * 1000;\n const date = Date.parse(headerValue);\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now());\n return undefined;\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type {\n InventoryItem,\n OfflinePlayer,\n OnlinePlayer,\n PlayerStats,\n} from \"../types/models.js\";\n\nexport class PlayersModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** List currently online players. */\n list(): Promise<OnlinePlayer[]> {\n return this.http.request(\"GET\", \"players\");\n }\n\n /** List all players the server has ever seen (online + offline). */\n listAll(): Promise<OfflinePlayer[]> {\n return this.http.request(\"GET\", \"players/all\");\n }\n\n /** Get a single player by UUID (works for online or offline players). */\n get(uuid: string): Promise<OnlinePlayer | OfflinePlayer> {\n return this.http.request(\"GET\", `players/${encodeURIComponent(uuid)}`);\n }\n\n /** Get a player's inventory in a specific world. */\n getInventory(playerUuid: string, worldUuid: string): Promise<InventoryItem[]> {\n return this.http.request(\n \"GET\",\n `players/${encodeURIComponent(playerUuid)}/${encodeURIComponent(worldUuid)}/inventory`,\n );\n }\n\n /** Kick an online player, optionally with a reason. */\n kick(uuid: string, reason?: string): Promise<void> {\n return this.http.request(\"POST\", `players/${encodeURIComponent(uuid)}/kick`, {\n body: reason ? { reason } : undefined,\n });\n }\n\n /** Ban a player, optionally with a reason and expiration. */\n ban(uuid: string, reason?: string): Promise<void> {\n return this.http.request(\"POST\", `players/${encodeURIComponent(uuid)}/ban`, {\n body: reason ? { reason } : undefined,\n });\n }\n\n /** Remove a player's ban. */\n unban(uuid: string): Promise<void> {\n return this.http.request(\"DELETE\", `players/${encodeURIComponent(uuid)}/ban`);\n }\n\n /** Teleport a player to a location. */\n teleport(\n uuid: string,\n location: { x: number; y: number; z: number; world?: string },\n ): Promise<void> {\n return this.http.request(\"POST\", `players/${encodeURIComponent(uuid)}/teleport`, {\n body: location,\n });\n }\n\n /** Change a player's gamemode. */\n setGamemode(\n uuid: string,\n gamemode: \"survival\" | \"creative\" | \"adventure\" | \"spectator\",\n ): Promise<void> {\n return this.http.request(\"PUT\", `players/${encodeURIComponent(uuid)}/gamemode`, {\n body: { gamemode },\n });\n }\n\n /** Get kill/death/playtime/block stats for a player. */\n getStats(uuid: string): Promise<PlayerStats> {\n return this.http.request(\"GET\", `players/${encodeURIComponent(uuid)}/stats`);\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { EconomyInfo, PlayerBalance, TopBalanceEntry } from \"../types/models.js\";\n\nexport class EconomyModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** Get info about the connected economy provider (Impactor on Fabric, Vault on Bukkit/Spigot/Paper). */\n info(): Promise<EconomyInfo> {\n return this.http.request(\"GET\", \"economy\");\n }\n\n /** Get a player's balance. */\n getBalance(uuid: string): Promise<PlayerBalance> {\n return this.http.request(\"GET\", `economy/balance/${encodeURIComponent(uuid)}`);\n }\n\n /** Get the top balances leaderboard. */\n getTopBalance(limit?: number): Promise<TopBalanceEntry[]> {\n return this.http.request(\"GET\", \"economy/top\", {\n query: { limit },\n });\n }\n\n /** Pay an amount to a player (adds to their balance). */\n pay(uuid: string, amount: number): Promise<void> {\n return this.http.request(\"POST\", \"economy/pay\", { body: { uuid, amount } });\n }\n\n /** Debit an amount from a player (subtracts from their balance). */\n debit(uuid: string, amount: number): Promise<void> {\n return this.http.request(\"POST\", \"economy/debit\", { body: { uuid, amount } });\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { ServerInfo, WhitelistEntry } from \"../types/models.js\";\n\nexport class ServerModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** Basic liveness check. */\n ping(): Promise<{ status: string }> {\n return this.http.request(\"GET\", \"ping\");\n }\n\n /** Get server info: version, MOTD, TPS, health, player counts, etc. */\n info(): Promise<ServerInfo> {\n return this.http.request(\"GET\", \"server\");\n }\n\n /**\n * Run a console command on the server.\n * This is a privileged endpoint — requires a write-enabled API key.\n */\n exec(command: string): Promise<{ lines: string[] }> {\n return this.http.request(\"POST\", \"server/exec\", { body: { command } });\n }\n\n /** List server operators. */\n getOps(): Promise<WhitelistEntry[]> {\n return this.http.request(\"GET\", \"server/ops\");\n }\n\n /** Grant operator status to a player. */\n opPlayer(uuid: string): Promise<void> {\n return this.http.request(\"POST\", \"server/ops\", { body: { uuid } });\n }\n\n /** Revoke operator status from a player. */\n deopPlayer(uuid: string): Promise<void> {\n return this.http.request(\"DELETE\", \"server/ops\", { body: { uuid } });\n }\n\n /** Get the current whitelist. */\n getWhitelist(): Promise<WhitelistEntry[]> {\n return this.http.request(\"GET\", \"server/whitelist\");\n }\n\n /** Add a player to the whitelist. */\n addToWhitelist(uuid: string, name?: string): Promise<void> {\n return this.http.request(\"POST\", \"server/whitelist\", { body: { uuid, name } });\n }\n\n /** Remove a player from the whitelist. */\n removeFromWhitelist(uuid: string): Promise<void> {\n return this.http.request(\"DELETE\", \"server/whitelist\", { body: { uuid } });\n }\n\n /**\n * Restart the server.\n * This is a privileged endpoint — requires a write-enabled API key.\n */\n restart(): Promise<void> {\n return this.http.request(\"POST\", \"server/restart\");\n }\n\n /** Tail the server console log. */\n getLogs(lines?: number): Promise<{ lines: string[] }> {\n return this.http.request(\"GET\", \"server/logs\", { query: { lines } });\n }\n\n /** Get entity counts on the server, optionally scoped to a world. */\n getEntities(world?: string): Promise<{ world: string; count: number; entities: Record<string, number> }> {\n return this.http.request(\"GET\", \"server/entities\", { query: { world } });\n }\n\n /** Get loaded chunk counts, optionally scoped to a world. */\n getChunks(world?: string): Promise<{ world: string; loadedChunks: number }> {\n return this.http.request(\"GET\", \"server/chunks\", { query: { world } });\n }\n\n /** Ban an IP address. */\n banIp(ip: string, reason?: string): Promise<void> {\n return this.http.request(\"POST\", \"server/ban-ip\", { body: { ip, reason } });\n }\n\n /** Get a scoreboard objective's scores by objective name. */\n getObjective(name: string) {\n return this.http.request(\"GET\", `scoreboard/${encodeURIComponent(name)}`);\n }\n\n /** List all scoreboard objectives and tracked entries. */\n getScoreboard() {\n return this.http.request(\"GET\", \"scoreboard\");\n }\n\n /** Set a score for an entry on an objective. */\n setScore(objective: string, entry: string, value: number): Promise<void> {\n return this.http.request(\"POST\", `scoreboard/${encodeURIComponent(objective)}/score`, {\n body: { entry, value },\n });\n }\n\n /** Reset (remove) a score for an entry on an objective. */\n resetScore(objective: string, entry: string): Promise<void> {\n return this.http.request(\"DELETE\", `scoreboard/${encodeURIComponent(objective)}/score`, {\n body: { entry },\n });\n }\n\n /** Broadcast a message to every player on the server. */\n broadcast(message: string): Promise<void> {\n return this.http.request(\"POST\", \"chat/broadcast\", { body: { message } });\n }\n\n /** Send a private message to a specific player. */\n tell(uuid: string, message: string): Promise<void> {\n return this.http.request(\"POST\", \"chat/tell\", { body: { uuid, message } });\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { World } from \"../types/models.js\";\n\nexport class WorldsModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** List all worlds. */\n list(): Promise<World[]> {\n return this.http.request(\"GET\", \"worlds\");\n }\n\n /** Save all worlds to disk. */\n saveAll(): Promise<void> {\n return this.http.request(\"POST\", \"worlds/save\");\n }\n\n /** Get a download link/stream reference for all worlds. */\n downloadAll(): Promise<{ url: string }> {\n return this.http.request(\"GET\", \"worlds/download\");\n }\n\n /** Get a single world by UUID. */\n get(uuid: string): Promise<World> {\n return this.http.request(\"GET\", `worlds/${encodeURIComponent(uuid)}`);\n }\n\n /** Save a specific world to disk. */\n save(uuid: string): Promise<void> {\n return this.http.request(\"POST\", `worlds/${encodeURIComponent(uuid)}/save`);\n }\n\n /** Get a download link/stream reference for a specific world. */\n download(uuid: string): Promise<{ url: string }> {\n return this.http.request(\"GET\", `worlds/${encodeURIComponent(uuid)}/download`);\n }\n\n /** Set the in-game time for a world. */\n setTime(uuid: string, time: number): Promise<void> {\n return this.http.request(\"POST\", `worlds/${encodeURIComponent(uuid)}/time`, {\n body: { time },\n });\n }\n\n /** Set weather (storm/thundering) for a world. */\n setWeather(\n uuid: string,\n weather: { storm?: boolean; thundering?: boolean },\n ): Promise<void> {\n return this.http.request(\"POST\", `worlds/${encodeURIComponent(uuid)}/weather`, {\n body: weather,\n });\n }\n\n /** Get entity counts within a specific world. */\n getEntities(uuid: string): Promise<{ world: string; count: number; entities: Record<string, number> }> {\n return this.http.request(\"GET\", `worlds/${encodeURIComponent(uuid)}/entities`);\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { Plugin } from \"../types/models.js\";\n\nexport class PluginsModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** List all installed plugins/mods. */\n list(): Promise<Plugin[]> {\n return this.http.request(\"GET\", \"plugins\");\n }\n\n /**\n * Install a plugin from a URL or identifier.\n * This is a privileged endpoint — requires a write-enabled API key.\n */\n install(source: string): Promise<void> {\n return this.http.request(\"POST\", \"plugins\", { body: { source } });\n }\n\n /** Enable a plugin by name. */\n enable(name: string): Promise<void> {\n return this.http.request(\"POST\", `plugins/${encodeURIComponent(name)}/enable`);\n }\n\n /** Disable a plugin by name. */\n disable(name: string): Promise<void> {\n return this.http.request(\"POST\", `plugins/${encodeURIComponent(name)}/disable`);\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { Advancement } from \"../types/models.js\";\n\nexport class AdvancementsModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** List all advancements known to the server. */\n list(): Promise<Advancement[]> {\n return this.http.request(\"GET\", \"advancements\");\n }\n}\n\nexport class PlaceholdersModule {\n constructor(private readonly http: HttpEngine) {}\n\n /**\n * Replace PlaceholderAPI-style placeholders (e.g. \"%player_name%\") for a\n * player, returning the resolved string.\n */\n replace(uuid: string, text: string): Promise<{ result: string }> {\n return this.http.request(\"POST\", \"placeholders/replace\", {\n body: { uuid, text },\n });\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { GroupInfo, PermissionNode } from \"../types/models.js\";\n\n/**\n * Wraps the `/v1/luckperms/*` routes. These only exist on the server when\n * the LuckPerms mod is loaded — calling any method here against a server\n * without it will fail (typically a 404). There's no separate \"is this\n * available\" flag from the SDK's side; check `client.plugins.list()` for\n * LuckPerms if you need to branch on it ahead of time.\n */\nexport class LuckPermsModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** Get the groups a player belongs to. */\n getPlayerGroups(uuid: string): Promise<string[]> {\n return this.http.request(\"GET\", `luckperms/player/${encodeURIComponent(uuid)}/groups`);\n }\n\n /** Get a player's effective permission nodes. */\n getPlayerPermissions(uuid: string): Promise<PermissionNode[]> {\n return this.http.request(\n \"GET\",\n `luckperms/player/${encodeURIComponent(uuid)}/permissions`,\n );\n }\n\n /** Add a permission node to a player. */\n addPlayerPermission(uuid: string, permission: string, value = true): Promise<void> {\n return this.http.request(\n \"POST\",\n `luckperms/player/${encodeURIComponent(uuid)}/permission`,\n { body: { permission, value } },\n );\n }\n\n /** Check whether a player has a given permission. */\n checkPlayerPermission(\n uuid: string,\n permission: string,\n ): Promise<{ permission: string; value: boolean }> {\n return this.http.request(\n \"POST\",\n `luckperms/player/${encodeURIComponent(uuid)}/check-permission`,\n { body: { permission } },\n );\n }\n\n /** Remove a permission node from a player. */\n removePlayerPermission(uuid: string, permission: string): Promise<void> {\n return this.http.request(\n \"DELETE\",\n `luckperms/player/${encodeURIComponent(uuid)}/permission`,\n { body: { permission } },\n );\n }\n\n /** Set a player's primary group. */\n setPlayerGroup(uuid: string, group: string): Promise<void> {\n return this.http.request(\n \"POST\",\n `luckperms/player/${encodeURIComponent(uuid)}/group`,\n { body: { group } },\n );\n }\n\n /** Remove a group from a player. */\n removePlayerGroup(uuid: string, groupName: string): Promise<void> {\n return this.http.request(\n \"DELETE\",\n `luckperms/player/${encodeURIComponent(uuid)}/group/${encodeURIComponent(groupName)}`,\n );\n }\n\n /** List all known groups. */\n getGroups(): Promise<string[]> {\n return this.http.request(\"GET\", \"luckperms/groups\");\n }\n\n /** Get the permissions attached to a specific group. */\n getGroupPermissions(name: string): Promise<GroupInfo> {\n return this.http.request(\"GET\", `luckperms/group/${encodeURIComponent(name)}/permissions`);\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { NoxAuthPlayerInfo, PasswordCheckResult } from \"../types/models.js\";\n\n/**\n * Wraps the `/v1/noxauth/*` routes. These only work when `noxauth.enabled`\n * is set to true in the server's noxaeapi-config.yml and the NoxAuth plugin\n * is installed.\n */\nexport class NoxAuthModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** Get NoxAuth registration/auth info for a player by name. */\n getPlayerAuth(name: string): Promise<NoxAuthPlayerInfo> {\n return this.http.request(\"GET\", `noxauth/player/${encodeURIComponent(name)}`);\n }\n\n /** Check whether a password matches a player's stored NoxAuth password. */\n checkPassword(name: string, password: string): Promise<PasswordCheckResult> {\n return this.http.request(\n \"POST\",\n `noxauth/player/${encodeURIComponent(name)}/check-password`,\n { body: { password } },\n );\n }\n}\n","export type NoxAeApiWsEvent =\n | \"open\"\n | \"close\"\n | \"error\"\n | \"console\"\n | \"event\"\n | \"message\";\n\ntype Listener = (payload: unknown) => void;\n\nexport interface NoxAeApiWsOptions {\n /** Base URL of the server, same one passed to the client (http/https). */\n baseUrl: string;\n apiKey?: string;\n /** Route suffix under the websocket base, e.g. \"console\" or \"events\". Default \"events\". */\n route?: string;\n /** Whether to auto-reconnect on unexpected close. Default true. */\n autoReconnect?: boolean;\n /** Max reconnect delay in ms. Default 30000. */\n maxReconnectDelayMs?: number;\n /** Override the WebSocket implementation, mainly for testing / non-browser runtimes. */\n webSocketImpl?: typeof WebSocket;\n}\n\nfunction toWsUrl(baseUrl: string, route: string, apiKey?: string): string {\n const url = new URL(`${baseUrl.replace(/\\/+$/, \"\")}/${route.replace(/^\\/+/, \"\")}`);\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n if (apiKey) url.searchParams.set(\"key\", apiKey);\n return url.toString();\n}\n\n/**\n * Thin wrapper around the server's WebSocket endpoints (console tail and\n * event broadcasts). Handles reconnection with exponential backoff so\n * consumers can just attach listeners and not think about the socket\n * lifecycle.\n *\n * Usage:\n * ```ts\n * const ws = client.connect({ route: \"console\" });\n * ws.on(\"console\", (line) => console.log(line));\n * ws.on(\"close\", () => console.log(\"disconnected\"));\n * ```\n */\nexport class NoxAeApiSocket {\n private socket: WebSocket | null = null;\n private readonly listeners = new Map<NoxAeApiWsEvent, Set<Listener>>();\n private reconnectAttempt = 0;\n private closedByUser = false;\n private readonly wsImpl: typeof WebSocket;\n\n constructor(private readonly options: NoxAeApiWsOptions) {\n const impl = options.webSocketImpl ?? (globalThis as { WebSocket?: typeof WebSocket }).WebSocket;\n if (!impl) {\n throw new Error(\n \"No WebSocket implementation available in this runtime. Pass `webSocketImpl` in options.\",\n );\n }\n this.wsImpl = impl;\n this.open();\n }\n\n private open(): void {\n const url = toWsUrl(this.options.baseUrl, this.options.route ?? \"events\", this.options.apiKey);\n const socket = new this.wsImpl(url);\n\n socket.onopen = () => {\n this.reconnectAttempt = 0;\n this.emit(\"open\", undefined);\n };\n\n socket.onmessage = (event: MessageEvent) => {\n const raw = typeof event.data === \"string\" ? event.data : String(event.data);\n const parsed = safeParse(raw);\n this.emit(\"message\", parsed);\n // Best-effort routing: if the payload has a `type` field of \"console\"\n // or \"event\", also emit on that specific channel.\n if (parsed && typeof parsed === \"object\" && \"type\" in (parsed as Record<string, unknown>)) {\n const type = (parsed as Record<string, unknown>).type;\n if (type === \"console\" || type === \"event\") this.emit(type, parsed);\n }\n };\n\n socket.onerror = (event) => {\n this.emit(\"error\", event);\n };\n\n socket.onclose = () => {\n this.emit(\"close\", undefined);\n if (!this.closedByUser && this.options.autoReconnect !== false) {\n this.scheduleReconnect();\n }\n };\n\n this.socket = socket;\n }\n\n private scheduleReconnect(): void {\n const maxDelay = this.options.maxReconnectDelayMs ?? 30_000;\n const delay = Math.min(maxDelay, 500 * 2 ** this.reconnectAttempt);\n this.reconnectAttempt++;\n setTimeout(() => {\n if (!this.closedByUser) this.open();\n }, delay);\n }\n\n on(event: NoxAeApiWsEvent, listener: Listener): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n this.listeners.get(event)!.add(listener);\n return () => this.listeners.get(event)?.delete(listener);\n }\n\n off(event: NoxAeApiWsEvent, listener: Listener): void {\n this.listeners.get(event)?.delete(listener);\n }\n\n private emit(event: NoxAeApiWsEvent, payload: unknown): void {\n for (const listener of this.listeners.get(event) ?? []) listener(payload);\n }\n\n /** Send a raw payload over the socket, JSON-stringified if not already a string. */\n send(payload: unknown): void {\n if (!this.socket || this.socket.readyState !== this.wsImpl.OPEN) {\n throw new Error(\"Cannot send: socket is not open\");\n }\n this.socket.send(typeof payload === \"string\" ? payload : JSON.stringify(payload));\n }\n\n /** Close the socket and stop reconnecting. */\n close(): void {\n this.closedByUser = true;\n this.socket?.close();\n }\n}\n\nfunction safeParse(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n","import { HttpEngine, type NoxAeApiClientOptions } from \"./http-engine.js\";\nimport { PlayersModule } from \"./modules/players.js\";\nimport { EconomyModule } from \"./modules/economy.js\";\nimport { ServerModule } from \"./modules/server.js\";\nimport { WorldsModule } from \"./modules/worlds.js\";\nimport { PluginsModule } from \"./modules/plugins.js\";\nimport { AdvancementsModule, PlaceholdersModule } from \"./modules/misc.js\";\nimport { LuckPermsModule } from \"./modules/luckperms.js\";\nimport { NoxAuthModule } from \"./modules/noxauth.js\";\nimport { NoxAeApiSocket, type NoxAeApiWsOptions } from \"./socket.js\";\n\nexport class NoxAeApiClient {\n readonly players: PlayersModule;\n readonly economy: EconomyModule;\n readonly server: ServerModule;\n readonly worlds: WorldsModule;\n readonly plugins: PluginsModule;\n readonly advancements: AdvancementsModule;\n readonly placeholders: PlaceholdersModule;\n /** Only works if LuckPerms is loaded on the target server. */\n readonly luckperms: LuckPermsModule;\n /** Only works if `noxauth.enabled: true` is set in the server config. */\n readonly noxauth: NoxAuthModule;\n\n private readonly http: HttpEngine;\n private readonly baseUrl: string;\n private readonly apiKey?: string;\n\n constructor(options: NoxAeApiClientOptions) {\n this.http = new HttpEngine(options);\n this.baseUrl = options.baseUrl;\n this.apiKey = options.apiKey;\n\n this.players = new PlayersModule(this.http);\n this.economy = new EconomyModule(this.http);\n this.server = new ServerModule(this.http);\n this.worlds = new WorldsModule(this.http);\n this.plugins = new PluginsModule(this.http);\n this.advancements = new AdvancementsModule(this.http);\n this.placeholders = new PlaceholdersModule(this.http);\n this.luckperms = new LuckPermsModule(this.http);\n this.noxauth = new NoxAuthModule(this.http);\n }\n\n /**\n * Build a client from environment variables:\n * `NOXAEAPI_BASE_URL` and `NOXAEAPI_KEY`.\n *\n * This is a convenience for Node-like runtimes; the SDK itself never\n * reads `process.env` implicitly outside of this method, and does not\n * load `.env` files — use a library like `dotenv` in your own app if\n * you want that, then call `NoxAeApiClient.fromEnv()` after it's loaded.\n */\n static fromEnv(overrides: Partial<NoxAeApiClientOptions> = {}): NoxAeApiClient {\n const env = (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env;\n const baseUrl = overrides.baseUrl ?? env?.NOXAEAPI_BASE_URL;\n const apiKey = overrides.apiKey ?? env?.NOXAEAPI_KEY;\n\n if (!baseUrl) {\n throw new Error(\n \"NoxAeApiClient.fromEnv(): NOXAEAPI_BASE_URL is not set and no baseUrl override was given.\",\n );\n }\n\n return new NoxAeApiClient({ ...overrides, baseUrl, apiKey });\n }\n\n /** Open a WebSocket connection to the server (console tail or event stream). */\n connect(options: Partial<NoxAeApiWsOptions> = {}): NoxAeApiSocket {\n return new NoxAeApiSocket({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey,\n ...options,\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/http-engine.ts","../src/modules/players.ts","../src/modules/economy.ts","../src/modules/server.ts","../src/modules/worlds.ts","../src/modules/plugins.ts","../src/modules/misc.ts","../src/modules/luckperms.ts","../src/modules/noxauth.ts","../src/modules/skills.ts","../src/socket.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["export interface NoxAeApiErrorInfo {\n status: number;\n method: string;\n path: string;\n body?: unknown;\n}\n\n/**\n * Base error thrown for any non-2xx response from a NoxAeApi server.\n * Prefer catching the more specific subclasses below when you need to\n * branch on the failure reason.\n */\nexport class NoxAeApiError extends Error {\n readonly status: number;\n readonly method: string;\n readonly path: string;\n readonly body?: unknown;\n\n constructor(message: string, info: NoxAeApiErrorInfo) {\n super(message);\n this.name = \"NoxAeApiError\";\n this.status = info.status;\n this.method = info.method;\n this.path = info.path;\n this.body = info.body;\n }\n}\n\n/** 401 — the API key is missing or not recognized by the server. */\nexport class NoxAeApiUnauthorizedError extends NoxAeApiError {\n constructor(info: NoxAeApiErrorInfo) {\n super(\n `Unauthorized: the API key was missing or invalid for ${info.method} ${info.path}`,\n info,\n );\n this.name = \"NoxAeApiUnauthorizedError\";\n }\n}\n\n/**\n * 403 — the API key is valid but isn't allowed to call this endpoint\n * (read-only key hitting a write route, or an endpoint restriction set\n * on the key). This is a server-side permission decision; the SDK does\n * not attempt to predict or enforce it client-side.\n */\nexport class NoxAeApiForbiddenError extends NoxAeApiError {\n constructor(info: NoxAeApiErrorInfo) {\n super(\n `Forbidden: this API key does not have permission to call ${info.method} ${info.path}`,\n info,\n );\n this.name = \"NoxAeApiForbiddenError\";\n }\n}\n\n/** 404 — the target resource (player, world, plugin, etc.) wasn't found. */\nexport class NoxAeApiNotFoundError extends NoxAeApiError {\n constructor(info: NoxAeApiErrorInfo) {\n super(`Not found: ${info.method} ${info.path}`, info);\n this.name = \"NoxAeApiNotFoundError\";\n }\n}\n\n/** 429 — rate limited. `retryAfterMs` is populated when the server sends a Retry-After header. */\nexport class NoxAeApiRateLimitError extends NoxAeApiError {\n readonly retryAfterMs?: number;\n\n constructor(info: NoxAeApiErrorInfo, retryAfterMs?: number) {\n super(\n `Rate limited on ${info.method} ${info.path}${retryAfterMs ? ` — retry after ${retryAfterMs}ms` : \"\"}`,\n info,\n );\n this.name = \"NoxAeApiRateLimitError\";\n this.retryAfterMs = retryAfterMs;\n }\n}\n\n/** 5xx — the server errored out. Usually safe to retry. */\nexport class NoxAeApiServerError extends NoxAeApiError {\n constructor(info: NoxAeApiErrorInfo) {\n super(`Server error (${info.status}) on ${info.method} ${info.path}`, info);\n this.name = \"NoxAeApiServerError\";\n }\n}\n\n/** The request could not complete at all (DNS, connection refused, timeout, abort). */\nexport class NoxAeApiNetworkError extends Error {\n readonly method: string;\n readonly path: string;\n readonly cause?: unknown;\n\n constructor(message: string, method: string, path: string, cause?: unknown) {\n super(message);\n this.name = \"NoxAeApiNetworkError\";\n this.method = method;\n this.path = path;\n this.cause = cause;\n }\n}\n","import {\n NoxAeApiError,\n NoxAeApiForbiddenError,\n NoxAeApiNetworkError,\n NoxAeApiNotFoundError,\n NoxAeApiRateLimitError,\n NoxAeApiServerError,\n NoxAeApiUnauthorizedError,\n} from \"./errors.js\";\n\nexport interface RetryOptions {\n /** Max number of attempts including the first one. Default 3. */\n attempts?: number;\n /** Base delay in ms used for exponential backoff. Default 300. */\n baseDelayMs?: number;\n /** Upper bound for any single backoff delay. Default 5000. */\n maxDelayMs?: number;\n}\n\nexport interface NoxAeApiClientOptions {\n /** Base URL of the server, e.g. \"http://localhost:8080\" or \"https://mc.example.com\". */\n baseUrl: string;\n /** The API key configured on the server (sent as the `key` header). */\n apiKey?: string;\n /** Request timeout in ms. Default 10000. */\n timeoutMs?: number;\n /** Retry behavior for network errors, 429s, and 5xx responses. */\n retry?: RetryOptions | false;\n /** Extra headers sent on every request. */\n headers?: Record<string, string>;\n /** Override fetch, mainly for testing. Defaults to the global fetch. */\n fetchImpl?: typeof fetch;\n}\n\nconst DEFAULT_RETRY: Required<RetryOptions> = {\n attempts: 3,\n baseDelayMs: 300,\n maxDelayMs: 5000,\n};\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction backoffDelay(attempt: number, opts: Required<RetryOptions>): number {\n const exp = Math.min(opts.maxDelayMs, opts.baseDelayMs * 2 ** attempt);\n // full jitter\n return Math.floor(Math.random() * exp);\n}\n\nexport type QueryValue = string | number | boolean | null | undefined;\n\nexport class HttpEngine {\n private readonly baseUrl: string;\n private readonly apiKey?: string;\n private readonly timeoutMs: number;\n private readonly retry: Required<RetryOptions> | false;\n private readonly extraHeaders: Record<string, string>;\n private readonly fetchImpl: typeof fetch;\n\n constructor(options: NoxAeApiClientOptions) {\n if (!options.baseUrl) {\n throw new Error(\"NoxAeApiClient requires a non-empty baseUrl\");\n }\n this.baseUrl = options.baseUrl.replace(/\\/+$/, \"\");\n this.apiKey = options.apiKey;\n this.timeoutMs = options.timeoutMs ?? 10_000;\n this.retry =\n options.retry === false\n ? false\n : { ...DEFAULT_RETRY, ...(options.retry ?? {}) };\n this.extraHeaders = options.headers ?? {};\n const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n if (!fetchImpl) {\n throw new Error(\n \"No fetch implementation available. Pass `fetchImpl` in options for this runtime.\",\n );\n }\n this.fetchImpl = fetchImpl;\n }\n\n private buildUrl(path: string, query?: Record<string, QueryValue>): string {\n const url = new URL(`${this.baseUrl}/v1/${path.replace(/^\\/+/, \"\")}`);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== undefined && value !== null) {\n url.searchParams.set(key, String(value));\n }\n }\n }\n return url.toString();\n }\n\n async request<T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\",\n path: string,\n opts: {\n body?: unknown;\n query?: Record<string, QueryValue>;\n /**\n * Encode `body` as `application/x-www-form-urlencoded` (Javalin's\n * `ctx.formParam(...)`) instead of JSON. Most NoxAeApi endpoints\n * expect form-urlencoded bodies — only the LuckPerms and NoxAuth\n * routes use `ctx.bodyAsClass(...)` and need real JSON. Defaults to\n * `false` (JSON) to preserve existing behavior; each module call\n * site is responsible for passing `form: true` where the server\n * actually expects it.\n */\n form?: boolean;\n } = {},\n ): Promise<T> {\n const url = this.buildUrl(path, opts.query);\n const maxAttempts = this.retry ? this.retry.attempts : 1;\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const headers: Record<string, string> = {\n Accept: \"application/json\",\n ...this.extraHeaders,\n };\n if (this.apiKey) headers[\"key\"] = this.apiKey;\n\n let encodedBody: string | undefined;\n if (opts.body !== undefined) {\n if (opts.form) {\n headers[\"Content-Type\"] = \"application/x-www-form-urlencoded\";\n encodedBody = encodeFormBody(opts.body);\n } else {\n headers[\"Content-Type\"] = \"application/json\";\n encodedBody = JSON.stringify(opts.body);\n }\n }\n\n const response = await this.fetchImpl(url, {\n method,\n headers,\n body: encodedBody,\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (response.ok) {\n if (response.status === 204) return undefined as T;\n const text = await response.text();\n return (text ? JSON.parse(text) : undefined) as T;\n }\n\n const errorBody = await response.text().catch(() => undefined);\n const parsedBody = safeJsonParse(errorBody);\n const info = { status: response.status, method, path, body: parsedBody };\n\n if (response.status === 401) throw new NoxAeApiUnauthorizedError(info);\n if (response.status === 403) throw new NoxAeApiForbiddenError(info);\n if (response.status === 404) throw new NoxAeApiNotFoundError(info);\n\n if (response.status === 429) {\n const retryAfterHeader = response.headers.get(\"Retry-After\");\n const retryAfterMs = retryAfterHeader\n ? parseRetryAfter(retryAfterHeader)\n : undefined;\n const err = new NoxAeApiRateLimitError(info, retryAfterMs);\n if (this.retry && attempt < maxAttempts - 1) {\n lastError = err;\n await sleep(retryAfterMs ?? backoffDelay(attempt, this.retry));\n continue;\n }\n throw err;\n }\n\n if (response.status >= 500) {\n const err = new NoxAeApiServerError(info);\n if (this.retry && attempt < maxAttempts - 1) {\n lastError = err;\n await sleep(backoffDelay(attempt, this.retry));\n continue;\n }\n throw err;\n }\n\n throw new NoxAeApiError(\n `Unexpected status ${response.status} on ${method} ${path}`,\n info,\n );\n } catch (err) {\n clearTimeout(timeout);\n\n if (err instanceof NoxAeApiError) throw err;\n\n const isAbort = err instanceof Error && err.name === \"AbortError\";\n const networkErr = new NoxAeApiNetworkError(\n isAbort\n ? `Request timed out after ${this.timeoutMs}ms: ${method} ${path}`\n : `Network error on ${method} ${path}: ${(err as Error).message}`,\n method,\n path,\n err,\n );\n\n if (this.retry && attempt < maxAttempts - 1) {\n lastError = networkErr;\n await sleep(backoffDelay(attempt, this.retry));\n continue;\n }\n throw networkErr;\n }\n }\n\n // Unreachable in practice, but keeps TS happy and surfaces the last error if we exit the loop.\n throw lastError instanceof Error\n ? lastError\n : new Error(\"Request failed after retries\");\n }\n}\n\n/**\n * Encodes a plain object as `application/x-www-form-urlencoded`, matching\n * what Javalin's `ctx.formParam(name)` reads server-side. `undefined`/`null`\n * values are omitted (so optional fields can be left out entirely rather\n * than sent as the literal string \"undefined\"). Non-primitive values are\n * JSON.stringify'd as a fallback, though no current endpoint needs that.\n */\nfunction encodeFormBody(body: unknown): string {\n const params = new URLSearchParams();\n if (body && typeof body === \"object\") {\n for (const [key, value] of Object.entries(body as Record<string, unknown>)) {\n if (value === undefined || value === null) continue;\n params.set(\n key,\n typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\"\n ? String(value)\n : JSON.stringify(value),\n );\n }\n }\n return params.toString();\n}\n\nfunction safeJsonParse(text: string | undefined): unknown {\n if (!text) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction parseRetryAfter(headerValue: string): number | undefined {\n const seconds = Number(headerValue);\n if (!Number.isNaN(seconds)) return seconds * 1000;\n const date = Date.parse(headerValue);\n if (!Number.isNaN(date)) return Math.max(0, date - Date.now());\n return undefined;\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type {\n InventoryItem,\n OfflinePlayer,\n OnlinePlayer,\n PlayerStats,\n} from \"../types/models.js\";\n\nexport class PlayersModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** List currently online players. */\n list(): Promise<OnlinePlayer[]> {\n return this.http.request(\"GET\", \"players\");\n }\n\n /** List all players the server has ever seen (online + offline). */\n listAll(): Promise<OfflinePlayer[]> {\n return this.http.request(\"GET\", \"players/all\");\n }\n\n /** Get a single player by UUID (works for online or offline players). */\n get(uuid: string): Promise<OnlinePlayer | OfflinePlayer> {\n return this.http.request(\"GET\", `players/${encodeURIComponent(uuid)}`);\n }\n\n /** Get a player's inventory in a specific world. */\n getInventory(playerUuid: string, worldUuid: string): Promise<InventoryItem[]> {\n return this.http.request(\n \"GET\",\n `players/${encodeURIComponent(playerUuid)}/${encodeURIComponent(worldUuid)}/inventory`,\n );\n }\n\n /** Kick an online player, optionally with a reason. */\n kick(uuid: string, reason?: string): Promise<void> {\n return this.http.request(\"POST\", `players/${encodeURIComponent(uuid)}/kick`, {\n body: reason ? { reason } : undefined,\n form: true,\n });\n }\n\n /**\n * Ban a player, optionally with a reason and an ISO-8601 expiry\n * (e.g. \"2030-01-01T00:00:00Z\"). Omit `expiry` for a permanent ban.\n */\n ban(uuid: string, reason?: string, expiry?: string): Promise<void> {\n return this.http.request(\"POST\", `players/${encodeURIComponent(uuid)}/ban`, {\n body: reason || expiry ? { reason, expiry } : undefined,\n form: true,\n });\n }\n\n /** Remove a player's ban. */\n unban(uuid: string): Promise<void> {\n return this.http.request(\"DELETE\", `players/${encodeURIComponent(uuid)}/ban`);\n }\n\n /** Teleport a player to a location. */\n teleport(\n uuid: string,\n location: { x: number; y: number; z: number; world?: string },\n ): Promise<void> {\n return this.http.request(\"POST\", `players/${encodeURIComponent(uuid)}/teleport`, {\n body: location,\n form: true,\n });\n }\n\n /** Change a player's gamemode. */\n setGamemode(\n uuid: string,\n gamemode: \"survival\" | \"creative\" | \"adventure\" | \"spectator\",\n ): Promise<void> {\n return this.http.request(\"PUT\", `players/${encodeURIComponent(uuid)}/gamemode`, {\n body: { gamemode },\n form: true,\n });\n }\n\n /** Get kill/death/playtime/block stats for a player. */\n getStats(uuid: string): Promise<PlayerStats> {\n return this.http.request(\"GET\", `players/${encodeURIComponent(uuid)}/stats`);\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { EconomyInfo, PlayerBalance, TopBalanceEntry } from \"../types/models.js\";\n\nexport class EconomyModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** Get info about the connected economy provider (Impactor on Fabric, Vault on Bukkit/Spigot/Paper). */\n info(): Promise<EconomyInfo> {\n return this.http.request(\"GET\", \"economy\");\n }\n\n /** Get a player's balance. */\n getBalance(uuid: string): Promise<PlayerBalance> {\n return this.http.request(\"GET\", `economy/balance/${encodeURIComponent(uuid)}`);\n }\n\n /** Get the top balances leaderboard. */\n getTopBalance(limit?: number): Promise<TopBalanceEntry[]> {\n return this.http.request(\"GET\", \"economy/top\", {\n query: { limit },\n });\n }\n\n /** Pay an amount to a player (adds to their balance). */\n pay(uuid: string, amount: number): Promise<void> {\n return this.http.request(\"POST\", \"economy/pay\", { body: { uuid, amount }, form: true });\n }\n\n /** Debit an amount from a player (subtracts from their balance). */\n debit(uuid: string, amount: number): Promise<void> {\n return this.http.request(\"POST\", \"economy/debit\", { body: { uuid, amount }, form: true });\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { ServerInfo, WhitelistEntry } from \"../types/models.js\";\n\nexport class ServerModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** Basic liveness check. */\n ping(): Promise<{ status: string }> {\n return this.http.request(\"GET\", \"ping\");\n }\n\n /** Get server info: version, MOTD, TPS, health, player counts, etc. */\n info(): Promise<ServerInfo> {\n return this.http.request(\"GET\", \"server\");\n }\n\n /**\n * Run a console command on the server, returning its console output.\n * This is a privileged endpoint — requires a write-enabled API key.\n *\n * `waitMs` is how long to wait for output before returning (server\n * default 500ms if omitted). The server returns the joined output as a\n * plain JSON string, not `{ lines }`.\n */\n exec(command: string, waitMs?: number): Promise<string> {\n return this.http.request(\"POST\", \"server/exec\", {\n body: { command, time: waitMs },\n form: true,\n });\n }\n\n /** List server operators. */\n getOps(): Promise<WhitelistEntry[]> {\n return this.http.request(\"GET\", \"server/ops\");\n }\n\n /**\n * Grant operator status to a player.\n *\n * Server-side (`ServerApi.opPlayer`) reads `ctx.formParam(\"playerUuid\")`,\n * not \"uuid\" — the field name matters here.\n */\n opPlayer(uuid: string): Promise<void> {\n return this.http.request(\"POST\", \"server/ops\", { body: { playerUuid: uuid }, form: true });\n }\n\n /**\n * Revoke operator status from a player.\n *\n * Server-side (`ServerApi.deopPlayer`) reads this from the query string\n * (`ctx.queryParam(\"playerUuid\")`), not the request body.\n */\n deopPlayer(uuid: string): Promise<void> {\n return this.http.request(\"DELETE\", \"server/ops\", { query: { playerUuid: uuid } });\n }\n\n /** Get the current whitelist. */\n getWhitelist(): Promise<WhitelistEntry[]> {\n return this.http.request(\"GET\", \"server/whitelist\");\n }\n\n /** Add a player to the whitelist. */\n addToWhitelist(uuid: string, name?: string): Promise<void> {\n return this.http.request(\"POST\", \"server/whitelist\", { body: { uuid, name }, form: true });\n }\n\n /**\n * Remove a player from the whitelist.\n *\n * Server-side (`ServerApi.whitelistDelete`) reads `uuid`/`name` from the\n * query string, not the request body.\n */\n removeFromWhitelist(uuid: string): Promise<void> {\n return this.http.request(\"DELETE\", \"server/whitelist\", { query: { uuid } });\n }\n\n /**\n * Restart the server.\n * This is a privileged endpoint — requires a write-enabled API key.\n */\n restart(): Promise<void> {\n return this.http.request(\"POST\", \"server/restart\");\n }\n\n /** Tail the server console log. */\n getLogs(lines?: number): Promise<{ lines: string[] }> {\n return this.http.request(\"GET\", \"server/logs\", { query: { lines } });\n }\n\n /** Get entity counts on the server, optionally scoped to a world. */\n getEntities(world?: string): Promise<{ world: string; count: number; entities: Record<string, number> }> {\n return this.http.request(\"GET\", \"server/entities\", { query: { world } });\n }\n\n /** Get loaded chunk counts, optionally scoped to a world. */\n getChunks(world?: string): Promise<{ world: string; loadedChunks: number }> {\n return this.http.request(\"GET\", \"server/chunks\", { query: { world } });\n }\n\n /** Ban an IP address. */\n banIp(ip: string, reason?: string): Promise<void> {\n return this.http.request(\"POST\", \"server/ban-ip\", { body: { ip, reason }, form: true });\n }\n\n /** Get a scoreboard objective's scores by objective name. */\n getObjective(name: string) {\n return this.http.request(\"GET\", `scoreboard/${encodeURIComponent(name)}`);\n }\n\n /** List all scoreboard objectives and tracked entries. */\n getScoreboard() {\n return this.http.request(\"GET\", \"scoreboard\");\n }\n\n /** Set a score for an entry on an objective. */\n setScore(objective: string, entry: string, value: number): Promise<void> {\n return this.http.request(\"POST\", `scoreboard/${encodeURIComponent(objective)}/score`, {\n body: { entry, value },\n form: true,\n });\n }\n\n /**\n * Reset (remove) a score for an entry on an objective.\n *\n * Server-side (`ServerApi.resetScore`) reads `entry` from the query\n * string, not the request body.\n */\n resetScore(objective: string, entry: string): Promise<void> {\n return this.http.request(\"DELETE\", `scoreboard/${encodeURIComponent(objective)}/score`, {\n query: { entry },\n });\n }\n\n /** Broadcast a message to every player on the server. */\n broadcast(message: string): Promise<void> {\n return this.http.request(\"POST\", \"chat/broadcast\", { body: { message }, form: true });\n }\n\n /**\n * Send a private message to a specific player.\n *\n * Server-side (`ServerApi.tellPost`) reads `ctx.formParam(\"playerUuid\")`,\n * not \"uuid\".\n */\n tell(uuid: string, message: string): Promise<void> {\n return this.http.request(\"POST\", \"chat/tell\", { body: { playerUuid: uuid, message }, form: true });\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { World } from \"../types/models.js\";\n\nexport class WorldsModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** List all worlds. */\n list(): Promise<World[]> {\n return this.http.request(\"GET\", \"worlds\");\n }\n\n /** Save all worlds to disk. */\n saveAll(): Promise<void> {\n return this.http.request(\"POST\", \"worlds/save\");\n }\n\n /** Get a download link/stream reference for all worlds. */\n downloadAll(): Promise<{ url: string }> {\n return this.http.request(\"GET\", \"worlds/download\");\n }\n\n /** Get a single world by UUID. */\n get(uuid: string): Promise<World> {\n return this.http.request(\"GET\", `worlds/${encodeURIComponent(uuid)}`);\n }\n\n /** Save a specific world to disk. */\n save(uuid: string): Promise<void> {\n return this.http.request(\"POST\", `worlds/${encodeURIComponent(uuid)}/save`);\n }\n\n /** Get a download link/stream reference for a specific world. */\n download(uuid: string): Promise<{ url: string }> {\n return this.http.request(\"GET\", `worlds/${encodeURIComponent(uuid)}/download`);\n }\n\n /** Set the in-game time for a world (0-24000). */\n setTime(uuid: string, time: number): Promise<void> {\n return this.http.request(\"POST\", `worlds/${encodeURIComponent(uuid)}/time`, {\n body: { time },\n form: true,\n });\n }\n\n /**\n * Set the weather for a world.\n *\n * Server-side (`WorldApi.setWorldWeather`) reads a single\n * `ctx.formParam(\"weather\")` enum string — \"clear\" | \"rain\" | \"thunder\" —\n * not separate storm/thundering booleans.\n */\n setWeather(uuid: string, weather: \"clear\" | \"rain\" | \"thunder\"): Promise<void> {\n return this.http.request(\"POST\", `worlds/${encodeURIComponent(uuid)}/weather`, {\n body: { weather },\n form: true,\n });\n }\n\n /** Get entity counts within a specific world. */\n getEntities(uuid: string): Promise<{ world: string; count: number; entities: Record<string, number> }> {\n return this.http.request(\"GET\", `worlds/${encodeURIComponent(uuid)}/entities`);\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { Plugin } from \"../types/models.js\";\n\nexport class PluginsModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** List all installed plugins/mods. */\n list(): Promise<Plugin[]> {\n return this.http.request(\"GET\", \"plugins\");\n }\n\n /**\n * Install a plugin by downloading it from a direct URL.\n * This is a privileged endpoint — requires a write-enabled API key.\n *\n * Server-side (`PluginApi.installPlugin`) reads\n * `ctx.formParam(\"downloadUrl\")`, not \"source\", and the request must be\n * form-urlencoded.\n */\n install(downloadUrl: string): Promise<void> {\n return this.http.request(\"POST\", \"plugins\", { body: { downloadUrl }, form: true });\n }\n\n /** Enable a plugin by name. */\n enable(name: string): Promise<void> {\n return this.http.request(\"POST\", `plugins/${encodeURIComponent(name)}/enable`);\n }\n\n /** Disable a plugin by name. */\n disable(name: string): Promise<void> {\n return this.http.request(\"POST\", `plugins/${encodeURIComponent(name)}/disable`);\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { Advancement } from \"../types/models.js\";\n\nexport class AdvancementsModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** List all advancements known to the server. */\n list(): Promise<Advancement[]> {\n return this.http.request(\"GET\", \"advancements\");\n }\n}\n\nexport class PlaceholdersModule {\n constructor(private readonly http: HttpEngine) {}\n\n /**\n * Replace PlaceholderAPI-style placeholders (e.g. \"%player_name%\") in\n * `message` for a player, returning the resolved string.\n *\n * Server-side this is `PAPIApi.replacePlaceholders`, which reads\n * `ctx.formParam(\"message\")` and `ctx.formParam(\"uuid\")` — the field is\n * literally named \"message\", not \"text\", and the whole body must be\n * form-urlencoded.\n */\n replace(uuid: string, message: string): Promise<string> {\n return this.http.request(\"POST\", \"placeholders/replace\", {\n body: { uuid, message },\n form: true,\n });\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { GroupInfo, PermissionNode } from \"../types/models.js\";\n\n/**\n * Wraps the `/v1/luckperms/*` routes. These only exist on the server when\n * the LuckPerms mod is loaded — calling any method here against a server\n * without it will fail (typically a 404). There's no separate \"is this\n * available\" flag from the SDK's side; check `client.plugins.list()` for\n * LuckPerms if you need to branch on it ahead of time.\n *\n * Unlike most other modules, these POST/DELETE bodies are sent as real\n * JSON (the server reads them with `ctx.bodyAsClass(...)`, not\n * `ctx.formParam(...)`) — do not add `form: true` to these calls.\n */\nexport class LuckPermsModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** Get the groups a player belongs to. */\n getPlayerGroups(uuid: string): Promise<string[]> {\n return this.http.request(\"GET\", `luckperms/player/${encodeURIComponent(uuid)}/groups`);\n }\n\n /** Get a player's effective permission nodes. */\n getPlayerPermissions(uuid: string): Promise<PermissionNode[]> {\n return this.http.request(\n \"GET\",\n `luckperms/player/${encodeURIComponent(uuid)}/permissions`,\n );\n }\n\n /** Add a permission node to a player. */\n addPlayerPermission(uuid: string, permission: string, value = true): Promise<void> {\n return this.http.request(\n \"POST\",\n `luckperms/player/${encodeURIComponent(uuid)}/permission`,\n { body: { permission, value } },\n );\n }\n\n /** Check whether a player has a given permission. */\n checkPlayerPermission(\n uuid: string,\n permission: string,\n ): Promise<{ permission: string; value: boolean }> {\n return this.http.request(\n \"POST\",\n `luckperms/player/${encodeURIComponent(uuid)}/check-permission`,\n { body: { permission } },\n );\n }\n\n /** Remove a permission node from a player. */\n removePlayerPermission(uuid: string, permission: string): Promise<void> {\n return this.http.request(\n \"DELETE\",\n `luckperms/player/${encodeURIComponent(uuid)}/permission`,\n { body: { permission } },\n );\n }\n\n /** Set a player's primary group. */\n setPlayerGroup(uuid: string, group: string): Promise<void> {\n return this.http.request(\n \"POST\",\n `luckperms/player/${encodeURIComponent(uuid)}/group`,\n { body: { group } },\n );\n }\n\n /** Remove a group from a player. */\n removePlayerGroup(uuid: string, groupName: string): Promise<void> {\n return this.http.request(\n \"DELETE\",\n `luckperms/player/${encodeURIComponent(uuid)}/group/${encodeURIComponent(groupName)}`,\n );\n }\n\n /** List all known groups. */\n getGroups(): Promise<string[]> {\n return this.http.request(\"GET\", \"luckperms/groups\");\n }\n\n /** Get the permissions attached to a specific group. */\n getGroupPermissions(name: string): Promise<GroupInfo> {\n return this.http.request(\"GET\", `luckperms/group/${encodeURIComponent(name)}/permissions`);\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { NoxAuthPlayerInfo, PasswordCheckResult } from \"../types/models.js\";\n\n/**\n * Wraps the `/v1/noxauth/*` routes. These only work when `noxauth.enabled`\n * is set to true in the server's noxaeapi-config.yml and the NoxAuth plugin\n * is installed.\n *\n * `checkPassword`'s body is sent as real JSON (the server parses it with\n * `GsonSingleton...fromJson(ctx.body(), PasswordCheckRequest.class)`, not\n * `ctx.formParam(...)`) — do not add `form: true` to that call.\n */\nexport class NoxAuthModule {\n constructor(private readonly http: HttpEngine) {}\n\n /** Get NoxAuth registration/auth info for a player by name. */\n getPlayerAuth(name: string): Promise<NoxAuthPlayerInfo> {\n return this.http.request(\"GET\", `noxauth/player/${encodeURIComponent(name)}`);\n }\n\n /** Check whether a password matches a player's stored NoxAuth password. */\n checkPassword(name: string, password: string): Promise<PasswordCheckResult> {\n return this.http.request(\n \"POST\",\n `noxauth/player/${encodeURIComponent(name)}/check-password`,\n { body: { password } },\n );\n }\n}\n","import type { HttpEngine } from \"../http-engine.js\";\nimport type { SkillInfo } from \"../types/models.js\";\n\n/**\n * Wraps the `/v1/skills/*` routes (mcMMO / AuraSkills).\n */\nexport class SkillsModule {\n constructor(private readonly http: HttpEngine) {}\n\n /**\n * Get mcMMO skill levels and power level for a player.\n * Only works for **online** players — mcMMO's public ExperienceAPI has\n * no offline lookup, so this throws `NoxAeApiNotFoundError` if the\n * player isn't currently connected, and `NoxAeApiServerError` (503)\n * if mcMMO isn't loaded on the target server.\n */\n getMcmmoSkills(uuid: string): Promise<SkillInfo> {\n return this.http.request(\"GET\", `skills/mcmmo/player/${encodeURIComponent(uuid)}`);\n }\n\n /**\n * Get AuraSkills skill levels and power level for a player.\n * Works for offline players. Throws `NoxAeApiServerError` (503) if\n * AuraSkills isn't loaded on the target server.\n */\n getAuraSkills(uuid: string): Promise<SkillInfo> {\n return this.http.request(\"GET\", `skills/auraskills/player/${encodeURIComponent(uuid)}`);\n }\n}\n","export type NoxAeApiWsEvent =\n | \"open\"\n | \"close\"\n | \"error\"\n | \"console\"\n | \"event\"\n | \"message\";\n\ntype Listener = (payload: unknown) => void;\n\nexport interface NoxAeApiWsOptions {\n /** Base URL of the server, same one passed to the client (http/https). */\n baseUrl: string;\n apiKey?: string;\n /** Route suffix under the websocket base, e.g. \"console\" or \"events\". Default \"events\". */\n route?: string;\n /** Whether to auto-reconnect on unexpected close. Default true. */\n autoReconnect?: boolean;\n /** Max reconnect delay in ms. Default 30000. */\n maxReconnectDelayMs?: number;\n /** Override the WebSocket implementation, mainly for testing / non-browser runtimes. */\n webSocketImpl?: typeof WebSocket;\n}\n\nfunction toWsUrl(baseUrl: string, route: string, apiKey?: string): string {\n const url = new URL(`${baseUrl.replace(/\\/+$/, \"\")}/v1/ws/${route.replace(/^\\/+/, \"\")}`);\n url.protocol = url.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n if (apiKey) url.searchParams.set(\"key\", apiKey);\n return url.toString();\n}\n\n/**\n * Thin wrapper around the server's WebSocket endpoints (console tail and\n * event broadcasts). Handles reconnection with exponential backoff so\n * consumers can just attach listeners and not think about the socket\n * lifecycle.\n *\n * Usage:\n * ```ts\n * const ws = client.connect({ route: \"console\" });\n * ws.on(\"console\", (line) => console.log(line));\n * ws.on(\"close\", () => console.log(\"disconnected\"));\n * ```\n */\nexport class NoxAeApiSocket {\n private socket: WebSocket | null = null;\n private readonly listeners = new Map<NoxAeApiWsEvent, Set<Listener>>();\n private reconnectAttempt = 0;\n private closedByUser = false;\n private readonly wsImpl: typeof WebSocket;\n\n constructor(private readonly options: NoxAeApiWsOptions) {\n const impl = options.webSocketImpl ?? (globalThis as { WebSocket?: typeof WebSocket }).WebSocket;\n if (!impl) {\n throw new Error(\n \"No WebSocket implementation available in this runtime. Pass `webSocketImpl` in options.\",\n );\n }\n this.wsImpl = impl;\n this.open();\n }\n\n private open(): void {\n const url = toWsUrl(this.options.baseUrl, this.options.route ?? \"events\", this.options.apiKey);\n const socket = new this.wsImpl(url);\n\n socket.onopen = () => {\n this.reconnectAttempt = 0;\n this.emit(\"open\", undefined);\n };\n\n socket.onmessage = (event: MessageEvent) => {\n const raw = typeof event.data === \"string\" ? event.data : String(event.data);\n const parsed = safeParse(raw);\n this.emit(\"message\", parsed);\n // Best-effort routing: if the payload has a `type` field of \"console\"\n // or \"event\", also emit on that specific channel.\n if (parsed && typeof parsed === \"object\" && \"type\" in (parsed as Record<string, unknown>)) {\n const type = (parsed as Record<string, unknown>).type;\n if (type === \"console\" || type === \"event\") this.emit(type, parsed);\n }\n };\n\n socket.onerror = (event) => {\n this.emit(\"error\", event);\n };\n\n socket.onclose = () => {\n this.emit(\"close\", undefined);\n if (!this.closedByUser && this.options.autoReconnect !== false) {\n this.scheduleReconnect();\n }\n };\n\n this.socket = socket;\n }\n\n private scheduleReconnect(): void {\n const maxDelay = this.options.maxReconnectDelayMs ?? 30_000;\n const delay = Math.min(maxDelay, 500 * 2 ** this.reconnectAttempt);\n this.reconnectAttempt++;\n setTimeout(() => {\n if (!this.closedByUser) this.open();\n }, delay);\n }\n\n on(event: NoxAeApiWsEvent, listener: Listener): () => void {\n if (!this.listeners.has(event)) this.listeners.set(event, new Set());\n this.listeners.get(event)!.add(listener);\n return () => this.listeners.get(event)?.delete(listener);\n }\n\n off(event: NoxAeApiWsEvent, listener: Listener): void {\n this.listeners.get(event)?.delete(listener);\n }\n\n private emit(event: NoxAeApiWsEvent, payload: unknown): void {\n for (const listener of this.listeners.get(event) ?? []) listener(payload);\n }\n\n /** Send a raw payload over the socket, JSON-stringified if not already a string. */\n send(payload: unknown): void {\n if (!this.socket || this.socket.readyState !== this.wsImpl.OPEN) {\n throw new Error(\"Cannot send: socket is not open\");\n }\n this.socket.send(typeof payload === \"string\" ? payload : JSON.stringify(payload));\n }\n\n /** Close the socket and stop reconnecting. */\n close(): void {\n this.closedByUser = true;\n this.socket?.close();\n }\n}\n\nfunction safeParse(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n","import { HttpEngine, type NoxAeApiClientOptions } from \"./http-engine.js\";\nimport { PlayersModule } from \"./modules/players.js\";\nimport { EconomyModule } from \"./modules/economy.js\";\nimport { ServerModule } from \"./modules/server.js\";\nimport { WorldsModule } from \"./modules/worlds.js\";\nimport { PluginsModule } from \"./modules/plugins.js\";\nimport { AdvancementsModule, PlaceholdersModule } from \"./modules/misc.js\";\nimport { LuckPermsModule } from \"./modules/luckperms.js\";\nimport { NoxAuthModule } from \"./modules/noxauth.js\";\nimport { SkillsModule } from \"./modules/skills.js\";\nimport { NoxAeApiSocket, type NoxAeApiWsOptions } from \"./socket.js\";\n\nexport class NoxAeApiClient {\n readonly players: PlayersModule;\n readonly economy: EconomyModule;\n readonly server: ServerModule;\n readonly worlds: WorldsModule;\n readonly plugins: PluginsModule;\n readonly advancements: AdvancementsModule;\n readonly placeholders: PlaceholdersModule;\n /** Only works if LuckPerms is loaded on the target server. */\n readonly luckperms: LuckPermsModule;\n /** Only works if `noxauth.enabled: true` is set in the server config. */\n readonly noxauth: NoxAuthModule;\n /** Requires mcMMO and/or AuraSkills to be loaded on the target server. */\n readonly skills: SkillsModule;\n\n private readonly http: HttpEngine;\n private readonly baseUrl: string;\n private readonly apiKey?: string;\n\n constructor(options: NoxAeApiClientOptions) {\n this.http = new HttpEngine(options);\n this.baseUrl = options.baseUrl;\n this.apiKey = options.apiKey;\n\n this.players = new PlayersModule(this.http);\n this.economy = new EconomyModule(this.http);\n this.server = new ServerModule(this.http);\n this.worlds = new WorldsModule(this.http);\n this.plugins = new PluginsModule(this.http);\n this.advancements = new AdvancementsModule(this.http);\n this.placeholders = new PlaceholdersModule(this.http);\n this.luckperms = new LuckPermsModule(this.http);\n this.noxauth = new NoxAuthModule(this.http);\n this.skills = new SkillsModule(this.http);\n }\n\n /**\n * Build a client from environment variables:\n * `NOXAEAPI_BASE_URL` and `NOXAEAPI_KEY`.\n *\n * This is a convenience for Node-like runtimes; the SDK itself never\n * reads `process.env` implicitly outside of this method, and does not\n * load `.env` files — use a library like `dotenv` in your own app if\n * you want that, then call `NoxAeApiClient.fromEnv()` after it's loaded.\n */\n static fromEnv(overrides: Partial<NoxAeApiClientOptions> = {}): NoxAeApiClient {\n const env = (globalThis as { process?: { env?: Record<string, string | undefined> } })\n .process?.env;\n const baseUrl = overrides.baseUrl ?? env?.NOXAEAPI_BASE_URL;\n const apiKey = overrides.apiKey ?? env?.NOXAEAPI_KEY;\n\n if (!baseUrl) {\n throw new Error(\n \"NoxAeApiClient.fromEnv(): NOXAEAPI_BASE_URL is not set and no baseUrl override was given.\",\n );\n }\n\n return new NoxAeApiClient({ ...overrides, baseUrl, apiKey });\n }\n\n /** Open a WebSocket connection to the server (console tail or event stream). */\n connect(options: Partial<NoxAeApiWsOptions> = {}): NoxAeApiSocket {\n return new NoxAeApiSocket({\n baseUrl: this.baseUrl,\n apiKey: this.apiKey,\n ...options,\n });\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -33,6 +33,16 @@ declare class HttpEngine {
33
33
  request<T>(method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH", path: string, opts?: {
34
34
  body?: unknown;
35
35
  query?: Record<string, QueryValue>;
36
+ /**
37
+ * Encode `body` as `application/x-www-form-urlencoded` (Javalin's
38
+ * `ctx.formParam(...)`) instead of JSON. Most NoxAeApi endpoints
39
+ * expect form-urlencoded bodies — only the LuckPerms and NoxAuth
40
+ * routes use `ctx.bodyAsClass(...)` and need real JSON. Defaults to
41
+ * `false` (JSON) to preserve existing behavior; each module call
42
+ * site is responsible for passing `form: true` where the server
43
+ * actually expects it.
44
+ */
45
+ form?: boolean;
36
46
  }): Promise<T>;
37
47
  }
38
48
 
@@ -191,6 +201,12 @@ interface PlayerStats {
191
201
  blocksPlaced: number;
192
202
  blocksBroken: number;
193
203
  }
204
+ interface SkillInfo {
205
+ uuid: string;
206
+ /** Skill name -> level. */
207
+ skills: Record<string, number>;
208
+ powerLevel: number;
209
+ }
194
210
 
195
211
  declare class PlayersModule {
196
212
  private readonly http;
@@ -205,8 +221,11 @@ declare class PlayersModule {
205
221
  getInventory(playerUuid: string, worldUuid: string): Promise<InventoryItem[]>;
206
222
  /** Kick an online player, optionally with a reason. */
207
223
  kick(uuid: string, reason?: string): Promise<void>;
208
- /** Ban a player, optionally with a reason and expiration. */
209
- ban(uuid: string, reason?: string): Promise<void>;
224
+ /**
225
+ * Ban a player, optionally with a reason and an ISO-8601 expiry
226
+ * (e.g. "2030-01-01T00:00:00Z"). Omit `expiry` for a permanent ban.
227
+ */
228
+ ban(uuid: string, reason?: string, expiry?: string): Promise<void>;
210
229
  /** Remove a player's ban. */
211
230
  unban(uuid: string): Promise<void>;
212
231
  /** Teleport a player to a location. */
@@ -247,23 +266,40 @@ declare class ServerModule {
247
266
  /** Get server info: version, MOTD, TPS, health, player counts, etc. */
248
267
  info(): Promise<ServerInfo>;
249
268
  /**
250
- * Run a console command on the server.
269
+ * Run a console command on the server, returning its console output.
251
270
  * This is a privileged endpoint — requires a write-enabled API key.
271
+ *
272
+ * `waitMs` is how long to wait for output before returning (server
273
+ * default 500ms if omitted). The server returns the joined output as a
274
+ * plain JSON string, not `{ lines }`.
252
275
  */
253
- exec(command: string): Promise<{
254
- lines: string[];
255
- }>;
276
+ exec(command: string, waitMs?: number): Promise<string>;
256
277
  /** List server operators. */
257
278
  getOps(): Promise<WhitelistEntry[]>;
258
- /** Grant operator status to a player. */
279
+ /**
280
+ * Grant operator status to a player.
281
+ *
282
+ * Server-side (`ServerApi.opPlayer`) reads `ctx.formParam("playerUuid")`,
283
+ * not "uuid" — the field name matters here.
284
+ */
259
285
  opPlayer(uuid: string): Promise<void>;
260
- /** Revoke operator status from a player. */
286
+ /**
287
+ * Revoke operator status from a player.
288
+ *
289
+ * Server-side (`ServerApi.deopPlayer`) reads this from the query string
290
+ * (`ctx.queryParam("playerUuid")`), not the request body.
291
+ */
261
292
  deopPlayer(uuid: string): Promise<void>;
262
293
  /** Get the current whitelist. */
263
294
  getWhitelist(): Promise<WhitelistEntry[]>;
264
295
  /** Add a player to the whitelist. */
265
296
  addToWhitelist(uuid: string, name?: string): Promise<void>;
266
- /** Remove a player from the whitelist. */
297
+ /**
298
+ * Remove a player from the whitelist.
299
+ *
300
+ * Server-side (`ServerApi.whitelistDelete`) reads `uuid`/`name` from the
301
+ * query string, not the request body.
302
+ */
267
303
  removeFromWhitelist(uuid: string): Promise<void>;
268
304
  /**
269
305
  * Restart the server.
@@ -293,11 +329,21 @@ declare class ServerModule {
293
329
  getScoreboard(): Promise<unknown>;
294
330
  /** Set a score for an entry on an objective. */
295
331
  setScore(objective: string, entry: string, value: number): Promise<void>;
296
- /** Reset (remove) a score for an entry on an objective. */
332
+ /**
333
+ * Reset (remove) a score for an entry on an objective.
334
+ *
335
+ * Server-side (`ServerApi.resetScore`) reads `entry` from the query
336
+ * string, not the request body.
337
+ */
297
338
  resetScore(objective: string, entry: string): Promise<void>;
298
339
  /** Broadcast a message to every player on the server. */
299
340
  broadcast(message: string): Promise<void>;
300
- /** Send a private message to a specific player. */
341
+ /**
342
+ * Send a private message to a specific player.
343
+ *
344
+ * Server-side (`ServerApi.tellPost`) reads `ctx.formParam("playerUuid")`,
345
+ * not "uuid".
346
+ */
301
347
  tell(uuid: string, message: string): Promise<void>;
302
348
  }
303
349
 
@@ -320,13 +366,16 @@ declare class WorldsModule {
320
366
  download(uuid: string): Promise<{
321
367
  url: string;
322
368
  }>;
323
- /** Set the in-game time for a world. */
369
+ /** Set the in-game time for a world (0-24000). */
324
370
  setTime(uuid: string, time: number): Promise<void>;
325
- /** Set weather (storm/thundering) for a world. */
326
- setWeather(uuid: string, weather: {
327
- storm?: boolean;
328
- thundering?: boolean;
329
- }): Promise<void>;
371
+ /**
372
+ * Set the weather for a world.
373
+ *
374
+ * Server-side (`WorldApi.setWorldWeather`) reads a single
375
+ * `ctx.formParam("weather")` enum string — "clear" | "rain" | "thunder" —
376
+ * not separate storm/thundering booleans.
377
+ */
378
+ setWeather(uuid: string, weather: "clear" | "rain" | "thunder"): Promise<void>;
330
379
  /** Get entity counts within a specific world. */
331
380
  getEntities(uuid: string): Promise<{
332
381
  world: string;
@@ -341,10 +390,14 @@ declare class PluginsModule {
341
390
  /** List all installed plugins/mods. */
342
391
  list(): Promise<Plugin[]>;
343
392
  /**
344
- * Install a plugin from a URL or identifier.
393
+ * Install a plugin by downloading it from a direct URL.
345
394
  * This is a privileged endpoint — requires a write-enabled API key.
395
+ *
396
+ * Server-side (`PluginApi.installPlugin`) reads
397
+ * `ctx.formParam("downloadUrl")`, not "source", and the request must be
398
+ * form-urlencoded.
346
399
  */
347
- install(source: string): Promise<void>;
400
+ install(downloadUrl: string): Promise<void>;
348
401
  /** Enable a plugin by name. */
349
402
  enable(name: string): Promise<void>;
350
403
  /** Disable a plugin by name. */
@@ -361,12 +414,15 @@ declare class PlaceholdersModule {
361
414
  private readonly http;
362
415
  constructor(http: HttpEngine);
363
416
  /**
364
- * Replace PlaceholderAPI-style placeholders (e.g. "%player_name%") for a
365
- * player, returning the resolved string.
417
+ * Replace PlaceholderAPI-style placeholders (e.g. "%player_name%") in
418
+ * `message` for a player, returning the resolved string.
419
+ *
420
+ * Server-side this is `PAPIApi.replacePlaceholders`, which reads
421
+ * `ctx.formParam("message")` and `ctx.formParam("uuid")` — the field is
422
+ * literally named "message", not "text", and the whole body must be
423
+ * form-urlencoded.
366
424
  */
367
- replace(uuid: string, text: string): Promise<{
368
- result: string;
369
- }>;
425
+ replace(uuid: string, message: string): Promise<string>;
370
426
  }
371
427
 
372
428
  /**
@@ -375,6 +431,10 @@ declare class PlaceholdersModule {
375
431
  * without it will fail (typically a 404). There's no separate "is this
376
432
  * available" flag from the SDK's side; check `client.plugins.list()` for
377
433
  * LuckPerms if you need to branch on it ahead of time.
434
+ *
435
+ * Unlike most other modules, these POST/DELETE bodies are sent as real
436
+ * JSON (the server reads them with `ctx.bodyAsClass(...)`, not
437
+ * `ctx.formParam(...)`) — do not add `form: true` to these calls.
378
438
  */
379
439
  declare class LuckPermsModule {
380
440
  private readonly http;
@@ -406,6 +466,10 @@ declare class LuckPermsModule {
406
466
  * Wraps the `/v1/noxauth/*` routes. These only work when `noxauth.enabled`
407
467
  * is set to true in the server's noxaeapi-config.yml and the NoxAuth plugin
408
468
  * is installed.
469
+ *
470
+ * `checkPassword`'s body is sent as real JSON (the server parses it with
471
+ * `GsonSingleton...fromJson(ctx.body(), PasswordCheckRequest.class)`, not
472
+ * `ctx.formParam(...)`) — do not add `form: true` to that call.
409
473
  */
410
474
  declare class NoxAuthModule {
411
475
  private readonly http;
@@ -416,6 +480,28 @@ declare class NoxAuthModule {
416
480
  checkPassword(name: string, password: string): Promise<PasswordCheckResult>;
417
481
  }
418
482
 
483
+ /**
484
+ * Wraps the `/v1/skills/*` routes (mcMMO / AuraSkills).
485
+ */
486
+ declare class SkillsModule {
487
+ private readonly http;
488
+ constructor(http: HttpEngine);
489
+ /**
490
+ * Get mcMMO skill levels and power level for a player.
491
+ * Only works for **online** players — mcMMO's public ExperienceAPI has
492
+ * no offline lookup, so this throws `NoxAeApiNotFoundError` if the
493
+ * player isn't currently connected, and `NoxAeApiServerError` (503)
494
+ * if mcMMO isn't loaded on the target server.
495
+ */
496
+ getMcmmoSkills(uuid: string): Promise<SkillInfo>;
497
+ /**
498
+ * Get AuraSkills skill levels and power level for a player.
499
+ * Works for offline players. Throws `NoxAeApiServerError` (503) if
500
+ * AuraSkills isn't loaded on the target server.
501
+ */
502
+ getAuraSkills(uuid: string): Promise<SkillInfo>;
503
+ }
504
+
419
505
  type NoxAeApiWsEvent = "open" | "close" | "error" | "console" | "event" | "message";
420
506
  type Listener = (payload: unknown) => void;
421
507
  interface NoxAeApiWsOptions {
@@ -475,6 +561,8 @@ declare class NoxAeApiClient {
475
561
  readonly luckperms: LuckPermsModule;
476
562
  /** Only works if `noxauth.enabled: true` is set in the server config. */
477
563
  readonly noxauth: NoxAuthModule;
564
+ /** Requires mcMMO and/or AuraSkills to be loaded on the target server. */
565
+ readonly skills: SkillsModule;
478
566
  private readonly http;
479
567
  private readonly baseUrl;
480
568
  private readonly apiKey?;
@@ -545,4 +633,4 @@ declare class NoxAeApiNetworkError extends Error {
545
633
  constructor(message: string, method: string, path: string, cause?: unknown);
546
634
  }
547
635
 
548
- export { type Advancement, type EconomyInfo, type GroupInfo, type InventoryItem, NoxAeApiClient, type NoxAeApiClientOptions, NoxAeApiError, NoxAeApiForbiddenError, NoxAeApiNetworkError, NoxAeApiNotFoundError, NoxAeApiRateLimitError, NoxAeApiServerError, NoxAeApiSocket, NoxAeApiUnauthorizedError, type NoxAeApiWsEvent, type NoxAeApiWsOptions, type NoxAuthPlayerInfo, type Objective, type OfflinePlayer, type OnlinePlayer, type PasswordCheckResult, type PermissionNode, type PlayerBalance, type PlayerStats, type Plugin, type RetryOptions, type Score, type Scoreboard, type ServerBan, type ServerHealth, type ServerInfo, type TopBalanceEntry, type WhitelistEntry, type World };
636
+ export { type Advancement, type EconomyInfo, type GroupInfo, type InventoryItem, NoxAeApiClient, type NoxAeApiClientOptions, NoxAeApiError, NoxAeApiForbiddenError, NoxAeApiNetworkError, NoxAeApiNotFoundError, NoxAeApiRateLimitError, NoxAeApiServerError, NoxAeApiSocket, NoxAeApiUnauthorizedError, type NoxAeApiWsEvent, type NoxAeApiWsOptions, type NoxAuthPlayerInfo, type Objective, type OfflinePlayer, type OnlinePlayer, type PasswordCheckResult, type PermissionNode, type PlayerBalance, type PlayerStats, type Plugin, type RetryOptions, type Score, type Scoreboard, type ServerBan, type ServerHealth, type ServerInfo, type SkillInfo, type TopBalanceEntry, type WhitelistEntry, type World };