lunibee 0.2.0 → 0.2.1

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,5 +1,5 @@
1
1
  import { REST } from "@lunibee/rest";
2
- import { GuildMember } from "@lunibee/structures";
2
+ import { GuildMember, type ResourceContext } from "@lunibee/structures";
3
3
  import { ResourceManager } from "./base.js";
4
4
  export interface MemberEditOptions {
5
5
  nick?: string | null;
@@ -17,19 +17,20 @@ export interface BanOptions {
17
17
  export declare class GuildMemberManager extends ResourceManager<string, GuildMember> {
18
18
  #private;
19
19
  readonly guildId: string;
20
- constructor(guildId: string, rest: REST);
21
- /** Kicks a member from the guild. */
22
- kick(userId: string): Promise<void>;
20
+ /** @param context Gives fetched members their actions (`member.kick()`...). */
21
+ constructor(guildId: string, rest: REST, context?: () => ResourceContext | undefined);
22
+ /** Kicks a member from the guild. @param reason Audit-log reason. */
23
+ kick(userId: string, reason?: string): Promise<void>;
23
24
  /** Bans a user from the guild. */
24
25
  ban(userId: string, options?: BanOptions): Promise<void>;
25
26
  /** Unbans a user from the guild. */
26
27
  unban(userId: string): Promise<void>;
27
- /** Edits a guild member (nickname, roles, timeout, mute, deaf). */
28
- edit(userId: string, options: MemberEditOptions): Promise<GuildMember>;
29
- /** Adds a role to a member. */
30
- addRole(userId: string, roleId: string): Promise<void>;
31
- /** Removes a role from a member. */
32
- removeRole(userId: string, roleId: string): Promise<void>;
33
- /** Times out a member for a given duration in milliseconds (or clears timeout if null). */
34
- timeout(userId: string, milliseconds: number | null): Promise<GuildMember>;
28
+ /** Edits a guild member (nickname, roles, timeout, mute, deaf). @param reason Audit-log reason. */
29
+ edit(userId: string, options: MemberEditOptions, reason?: string): Promise<GuildMember>;
30
+ /** Adds a role to a member. @param reason Audit-log reason. */
31
+ addRole(userId: string, roleId: string, reason?: string): Promise<void>;
32
+ /** Removes a role from a member. @param reason Audit-log reason. */
33
+ removeRole(userId: string, roleId: string, reason?: string): Promise<void>;
34
+ /** Times out a member for a given duration in milliseconds (or clears timeout if null). @param reason Audit-log reason. */
35
+ timeout(userId: string, milliseconds: number | null, reason?: string): Promise<GuildMember>;
35
36
  }
@@ -9,12 +9,20 @@ export interface MessageCacheOptions {
9
9
  }
10
10
  import { REST } from "@lunibee/rest";
11
11
  import { Message, type ResourceContext } from "@lunibee/structures";
12
+ /** A file to upload with a message. */
13
+ export interface MessageFile {
14
+ name: string;
15
+ data: Blob | Uint8Array | ArrayBuffer | string;
16
+ contentType?: string;
17
+ }
12
18
  export type MessageCreateOptions = Record<string, unknown> & {
13
19
  content?: string;
20
+ /** Files to upload; the message is sent as multipart. */
21
+ files?: MessageFile[];
14
22
  };
15
- export type MessageEditOptions = Record<string, unknown> & {
16
- content?: string;
17
- };
23
+ export type MessageEditOptions = MessageCreateOptions;
24
+ /** Splits `files` out of a message payload into a REST upload, encoding string data as UTF-8. */
25
+ export declare function toRequest(options: MessageCreateOptions): unknown;
18
26
  export declare class MessageManager {
19
27
  #private;
20
28
  /** Cached messages; always empty unless a message cache is configured. */
@@ -2,7 +2,7 @@
2
2
  // packages/rest/package.json
3
3
  var package_default = {
4
4
  name: "@lunibee/rest",
5
- version: "0.2.0",
5
+ version: "0.2.1",
6
6
  type: "module",
7
7
  module: "./src/index.ts",
8
8
  types: "./src/index.ts",
@@ -899,4 +899,4 @@ export {
899
899
  serializeQuery
900
900
  };
901
901
 
902
- //# debugId=3E6A1976705386FE64756E2164756E21
902
+ //# debugId=DB3368A765BDA92764756E2164756E21
@@ -15,6 +15,6 @@
15
15
  "/** Library version and source URL used for the Discord-compliant User-Agent. */\nimport packageJson from \"../package.json\" with { type: \"json\" };\nconst LIBRARY_VERSION = packageJson.version;\nconst LIBRARY_URL = \"https://github.com/Ekretos/lunibee\";\nconst USER_AGENT = `DiscordBot (${LIBRARY_URL}, ${packageJson.version})`;\n\nimport {\n MemoryRateLimitStore,\n type RateLimitStore,\n type BucketState,\n} from \"./store.js\";\nimport { RESTError, abortError, redactPath, sleep } from \"./errors.js\";\nimport {\n createRouteKey,\n serializeQuery,\n type RESTQuery,\n type RouteKey,\n} from \"./route.js\";\nimport { RequestScheduler } from \"./scheduler.js\";\nimport { RateLimiter } from \"./limiter.js\";\nimport { HttpTransport, TransportError } from \"./transport.js\";\nimport { ResponseDecoder } from \"./decoder.js\";\n\n/** Internal state shared by requests mapped to one Discord rate-limit bucket. */\ntype Bucket = { remaining: number; resetAt: number };\n/** A file attachment sent as part of a multipart REST request. */\nexport interface RESTFileAttachment {\n name: string;\n data: Blob | Uint8Array | ArrayBuffer;\n contentType?: string;\n}\n\n/**\n * Options controlling an individual REST request.\n *\n * Lunibee's canonical call shape is positional (`post(path, body)`); these options\n * add the Discord.js-`@discordjs/rest`-familiar per-request knobs (`query`, `headers`,\n * `reason`, `auth`) additively without changing that positional default.\n */\nexport interface RESTRequestOptions {\n /** Abort signal used to cancel the request and any queued wait. */ signal?: AbortSignal;\n /** Query-string appended to the path (`URLSearchParams`, a record, or a raw string). */ query?: RESTQuery;\n /** Extra request headers merged in (library headers such as `Authorization` win). */ headers?: Record<\n string,\n string\n >;\n /** Audit-log reason, sent as the `X-Audit-Log-Reason` header. */ reason?: string;\n /** Set `false` to omit the `Authorization` header for this request. Defaults to `true`. */ auth?: boolean;\n}\n\n/**\n * Discord.js-familiar request payload. Superset of {@link RESTRequestOptions} that also\n * carries the `body` and `files`, matching `@discordjs/rest`'s `RequestData`. It powers the\n * additive `method(path, { body })` overloads without breaking the positional signature.\n */\nexport interface RequestData extends RESTRequestOptions {\n /** Request body. Encoded as JSON unless `files` are present (then multipart). */ body?: unknown;\n /** File attachments; presence upgrades the request to `multipart/form-data`. */ files?: RESTFileAttachment[];\n}\n\n/** Keys recognised on a {@link RequestData} wrapper, used to disambiguate it from a raw body. */\nconst REQUEST_DATA_KEYS = new Set([\n \"body\",\n \"files\",\n \"query\",\n \"headers\",\n \"reason\",\n \"auth\",\n \"signal\",\n]);\n\n/**\n * Detects a Discord.js-style `RequestData` wrapper so verb helpers can accept both\n * `post(path, rawBody)` (Lunibee-canonical) and `post(path, { body })` (Discord.js-familiar).\n * Conservative by design: only a plain object whose every own key is a known `RequestData`\n * key counts — a raw Discord payload (which always carries entity keys like `content`/`name`)\n * never matches, so existing positional callers are unaffected.\n */\nfunction isRequestData(value: unknown): value is RequestData {\n if (value === null || typeof value !== \"object\") return false;\n if (Array.isArray(value)) return false;\n if (typeof FormData !== \"undefined\" && value instanceof FormData)\n return false;\n if (\n value instanceof Blob ||\n value instanceof Uint8Array ||\n value instanceof ArrayBuffer\n )\n return false;\n const keys = Object.keys(value);\n if (keys.length === 0) return false;\n return keys.every((key) => REQUEST_DATA_KEYS.has(key));\n}\n\n// ─── REST Hooks ───────────────────────────────────────────────────────────────\n\n/** Context passed to `RESTHooks.onRequest`. */\nexport interface RESTRequestContext {\n method: string;\n path: string;\n attempt: number;\n}\n/** Context passed to `RESTHooks.onResponse`. */\nexport interface RESTResponseContext {\n method: string;\n path: string;\n status: number;\n durationMs: number;\n}\n/** Context passed to `RESTHooks.onRateLimit`. */\nexport interface RESTRateLimitContext {\n method: string;\n path: string;\n retryAfterMs: number;\n global: boolean;\n bucket?: string;\n}\n/** Context passed to `RESTHooks.onRetry`. */\nexport interface RESTRetryContext {\n method: string;\n path: string;\n attempt: number;\n status: number;\n delayMs: number;\n}\n\n/**\n * Lightweight callback hooks for REST request lifecycle events.\n *\n * All callbacks are optional. They are dispatched in isolation from the request\n * path (deferred to a microtask, and any thrown error is swallowed), so a hook\n * cannot break or reject a request. Even so, hooks **must** be fast and\n * non-blocking: heavy synchronous work in a hook still steals event-loop time\n * from in-flight requests. Offload anything expensive to your own queue.\n */\nexport interface RESTHooks {\n /** Called just before every HTTP attempt. */\n onRequest?(ctx: RESTRequestContext): void;\n /** Called after a successful or failed response is received. */\n onResponse?(ctx: RESTResponseContext): void;\n /** Called when a rate limit is encountered and the client is about to wait. */\n onRateLimit?(ctx: RESTRateLimitContext): void;\n /** Called when a failed request is about to be retried. */\n onRetry?(ctx: RESTRetryContext): void;\n}\n\n/** Configures which REST failures may be retried. */\nexport interface RetryPolicy {\n /** Maximum retry attempts. */ maxRetries: number;\n /** Determines whether a request may be retried. @param method HTTP method. @param status HTTP status, or zero for transport errors. @returns True when retrying is safe under the policy. */ shouldRetry(\n method: string,\n status: number,\n ): boolean;\n /** Calculates delay before the next attempt. @param attempt Zero-based retry number. @param retryAfter Server-provided delay, when available. @returns Delay in milliseconds. */ getDelay(\n attempt: number,\n retryAfter?: number,\n ): number;\n}\n/** Creates the default conservative REST retry policy. @param maxRetries Maximum retries. @returns Retry policy that retries rate limits and idempotent transient failures. @throws {TypeError} If maxRetries is negative or not finite. */\nexport function createRetryPolicy(maxRetries = 2): RetryPolicy {\n if (!Number.isFinite(maxRetries) || maxRetries < 0)\n throw new TypeError(\"maxRetries must be a non-negative finite number.\");\n return {\n maxRetries: Math.floor(maxRetries),\n shouldRetry(method, status) {\n const normalized = method.toUpperCase();\n const idempotent = [\"GET\", \"HEAD\", \"PUT\", \"DELETE\"].includes(\n normalized,\n );\n // Status 0 is a transport failure (DNS, reset connection, TLS):\n // no response reached Discord's handlers, so replaying an\n // idempotent request is as safe as replaying it after a 5xx.\n if (status === 0) return idempotent;\n return (\n status === 429 || (status >= 500 && status <= 599 && idempotent)\n );\n },\n getDelay(attempt, retryAfter) {\n if (retryAfter !== undefined) return Math.max(0, retryAfter * 1000);\n return Math.min(10_000, 500 * 2 ** attempt) + Math.random() * 250;\n },\n };\n}\n\n/** Bun-native REST transport with Discord bucket-aware rate limiting, retries, and cancellation. */\nexport class REST {\n readonly #retryPolicy: RetryPolicy;\n #token?: string;\n /** Rate-limit state: when a request may go out, what a response says. */\n readonly #limiter: RateLimiter;\n /** Per-bucket ordering. */\n readonly #scheduler = new RequestScheduler();\n /** One HTTP attempt, with timeout and cancellation. */\n readonly #transport: HttpTransport;\n /** Response payload and error metadata. */\n readonly #decoder = new ResponseDecoder();\n #hooks: RESTHooks = {};\n /** Whether requests on a known bucket may run concurrently. */\n readonly #concurrentBuckets: boolean;\n /** Creates a REST transport. @param options Transport configuration. @throws {TypeError} If retry configuration is invalid. */\n public constructor(\n options: {\n token?: string;\n timeout?: number;\n retries?: number;\n retryPolicy?: RetryPolicy;\n baseURL?: string;\n hooks?: RESTHooks;\n store?: RateLimitStore;\n /** Replaces the HTTP stage, e.g. with a recording transport in tests. */\n transport?: HttpTransport;\n /**\n * Lets requests on a bucket whose limit is known run concurrently, up\n * to its `remaining` allowance, instead of one at a time. Requires a\n * store with `reserve`. Requests on one bucket may then complete out\n * of order (e.g. messages to one channel). Defaults to `false`.\n */\n concurrentBuckets?: boolean;\n } = {},\n ) {\n this.#token = options.token;\n this.#retryPolicy =\n options.retryPolicy ?? createRetryPolicy(options.retries ?? 2);\n this.#transport =\n options.transport ??\n new HttpTransport({\n baseURL: options.baseURL,\n timeout: options.timeout,\n });\n const store = options.store ?? new MemoryRateLimitStore();\n this.#concurrentBuckets =\n (options.concurrentBuckets ?? false) &&\n typeof store.reserve === \"function\";\n this.#limiter = new RateLimiter(store, {\n concurrent: this.#concurrentBuckets,\n });\n if (options.hooks) this.#hooks = options.hooks;\n }\n /** The rate-limit store backing this transport. */\n public get store(): RateLimitStore {\n return this.#limiter.store;\n }\n /** Replaces the current hook set. Pass an empty object to clear all hooks. */\n public setHooks(hooks: RESTHooks): this {\n this.#hooks = hooks;\n return this;\n }\n /** Sets the authentication token. @param token Discord bot token. @returns Nothing. @throws {TypeError} If token is empty. */\n public setToken(token: string): void {\n if (!token.trim())\n throw new TypeError(\"A Discord bot token is required.\");\n this.#token = token;\n }\n /** Executes an HTTP request with Discord bucket/global rate limits, retry handling, and AbortSignal support.\n * Accepts a JSON body, a FormData body (for file uploads), or undefined.\n * @param method HTTP method.\n * @param path API path.\n * @param body Optional JSON body, FormData for file uploads, or undefined.\n * @param options Request options: cancellation `signal` plus the Discord.js-familiar\n * `query`, `headers`, `reason`, `auth`, and `files` (which upgrade to multipart).\n * @returns Decoded response body.\n * @throws {RESTError} If Discord or transport rejects the request.\n */\n public async request<T>(\n method: string,\n path: string,\n body?: unknown,\n options: RequestData = {},\n ): Promise<T> {\n if (!method.toUpperCase())\n throw new TypeError(\"REST method is required.\");\n if (!path.startsWith(\"/\"))\n throw new TypeError(\"REST paths must start with '/'.\");\n const route = createRouteKey(method, path);\n // Upgrade to multipart when file attachments are supplied via options.\n const files = options.files;\n if (files && files.length > 0 && !(body instanceof FormData))\n body = this.#fileForm(body, files);\n const query = serializeQuery(options.query);\n const requestPath = query ? `${path}${query}` : path;\n\n // Discord scopes a rate limit by (bucket hash, major parameter): two\n // channels sharing an endpoint have independent limits, while two\n // different routes can share one hash. The key is therefore resolved\n // again once the slot is acquired, so a request that queued under its\n // route-derived key joins the shared bucket's queue if one was\n // discovered while it waited.\n return this.#scheduler.runResolved(\n () => this.#limiter.resolveBucketKey(route.route, route.major),\n options.signal,\n path,\n (bucketKey, release) =>\n this.#attempts<T>(\n route,\n requestPath,\n body,\n options,\n bucketKey,\n release,\n ),\n );\n }\n /**\n * Runs the retry loop for one scheduled request: acquire limits, send,\n * record what the response says, decode, and decide whether to try again.\n */\n async #attempts<T>(\n route: RouteKey,\n requestPath: string,\n body: unknown,\n options: RequestData,\n initialBucketKey: string,\n release: () => void,\n ): Promise<T> {\n const { method, path } = route;\n let bucketKey = initialBucketKey;\n for (\n let attempt = 0;\n attempt <= this.#retryPolicy.maxRetries;\n attempt++\n ) {\n await this.#limiter.acquire(bucketKey, options.signal, path);\n // The reservation already claimed this request's unit, so once the\n // bucket's window is known the next request need not wait for our\n // response. An unknown bucket stays serial until a response\n // reveals its limit.\n if (this.#concurrentBuckets) {\n const bucket = await this.#limiter.store.getBucket(bucketKey);\n if (bucket && bucket.resetAt > Date.now()) release();\n }\n this.#emit(this.#hooks.onRequest, { method, path, attempt });\n const requestStart = Date.now();\n let response: Response;\n try {\n response = await this.#transport.send({\n method,\n path: requestPath,\n headers: this.#headers(body, options),\n body: this.#encodeBody(body),\n signal: options.signal,\n });\n } catch (error) {\n if (error instanceof RESTError) throw error;\n if (options.signal?.aborted)\n throw abortError(path, options.signal.reason);\n const failure =\n error instanceof TransportError\n ? error\n : new TransportError(\n \"Discord REST request failed\",\n false,\n error,\n );\n if (\n !failure.timedOut &&\n attempt < this.#retryPolicy.maxRetries &&\n this.#retryPolicy.shouldRetry(method, 0)\n ) {\n await sleep(\n this.#retryPolicy.getDelay(attempt),\n options.signal,\n path,\n );\n continue;\n }\n throw new RESTError(failure.message, 0, undefined, undefined, {\n method,\n path,\n cause: failure.cause ?? failure,\n kind: failure.timedOut ? \"timeout\" : \"network\",\n });\n }\n this.#emit(this.#hooks.onResponse, {\n method,\n path,\n status: response.status,\n durationMs: Date.now() - requestStart,\n });\n bucketKey = await this.#limiter.applyResponse(\n response,\n bucketKey,\n route.route,\n route.major,\n );\n const payload = await this.#decoder.read(response);\n if (response.ok)\n return (response.status === 204 ? undefined : payload) as T;\n\n const data = this.#decoder.errorData(payload);\n const retryAfter =\n response.status === 429\n ? this.#decoder.retryAfter(response, data)\n : undefined;\n if (data.global && retryAfter !== undefined)\n await this.#limiter.noteGlobalReset(\n Date.now() + retryAfter * 1000,\n );\n // Fire for ANY 429, including a global limit that arrives without a\n // Retry-After header; fall back to 1s in that case.\n if (response.status === 429)\n this.#emit(this.#hooks.onRateLimit, {\n method,\n path,\n retryAfterMs: (retryAfter ?? 1) * 1000,\n global: data.global ?? false,\n bucket: await this.#limiter.store.getBucketHash(\n route.route,\n ),\n });\n if (\n attempt < this.#retryPolicy.maxRetries &&\n this.#retryPolicy.shouldRetry(method, response.status)\n ) {\n const delay = this.#retryPolicy.getDelay(attempt, retryAfter);\n this.#emit(this.#hooks.onRetry, {\n method,\n path,\n attempt,\n status: response.status,\n delayMs: delay,\n });\n await sleep(delay, options.signal, path);\n continue;\n }\n throw new RESTError(\n data.message ??\n response.statusText ??\n `Discord REST request failed with status ${response.status}`,\n response.status,\n data.code,\n payload,\n { method, path },\n );\n }\n throw new RESTError(\n \"Discord REST request exhausted its retry attempts\",\n 0,\n undefined,\n undefined,\n { method, path },\n );\n }\n /** Builds the header set for one attempt; library headers win over caller headers. */\n #headers(body: unknown, options: RequestData): Record<string, string> {\n const isFormData =\n typeof FormData !== \"undefined\" && body instanceof FormData;\n const headers: Record<string, string> = { ...options.headers };\n if (options.auth !== false && this.#token)\n headers[\"Authorization\"] = `Bot ${this.#token}`;\n headers[\"User-Agent\"] = USER_AGENT;\n if (options.reason !== undefined)\n headers[\"X-Audit-Log-Reason\"] = encodeURIComponent(options.reason);\n if (!isFormData) headers[\"Content-Type\"] = \"application/json\";\n return headers;\n }\n /** Encodes a body as multipart (passed through) or JSON. */\n #encodeBody(body: unknown): BodyInit | undefined {\n if (typeof FormData !== \"undefined\" && body instanceof FormData)\n return body;\n return body === undefined ? undefined : JSON.stringify(body);\n }\n /**\n * Normalizes a verb helper's second argument into `(body, options)`.\n * Supports both `verb(path, rawBody, options?)` (Lunibee-canonical positional) and the\n * Discord.js-familiar `verb(path, { body, query, headers, reason, files })` wrapper.\n */\n #dispatch<T>(\n method: string,\n path: string,\n bodyOrOptions?: unknown,\n options?: RequestData,\n ): Promise<T> {\n if (options === undefined && isRequestData(bodyOrOptions))\n return this.request<T>(\n method,\n path,\n bodyOrOptions.body,\n bodyOrOptions,\n );\n return this.request<T>(method, path, bodyOrOptions, options);\n }\n /** Sends a GET request. @param path API path. @param options Request options (`query`, `headers`, `signal`, …). @returns Decoded response. @throws {RESTError} When the request fails. */ public get<\n T,\n >(path: string, options?: RequestData): Promise<T> {\n return this.request<T>(\"GET\", path, options?.body, options);\n }\n /** Sends a POST request. Accepts a raw body (`post(path, body)`) or a Discord.js-familiar `post(path, { body })`. @param path API path. @param body Optional JSON body, or a `RequestData` wrapper. @param options Request options. @returns Decoded response. @throws {RESTError} When the request fails. */\n public post<T>(path: string, options: RequestData): Promise<T>;\n public post<T>(\n path: string,\n body?: unknown,\n options?: RequestData,\n ): Promise<T>;\n public post<T>(\n path: string,\n body?: unknown,\n options?: RequestData,\n ): Promise<T> {\n return this.#dispatch<T>(\"POST\", path, body, options);\n }\n /** Sends a PATCH request. Accepts a raw body (`patch(path, body)`) or a Discord.js-familiar `patch(path, { body })`. @param path API path. @param body Optional JSON body, or a `RequestData` wrapper. @param options Request options. @returns Decoded response. @throws {RESTError} When the request fails. */\n public patch<T>(path: string, options: RequestData): Promise<T>;\n public patch<T>(\n path: string,\n body?: unknown,\n options?: RequestData,\n ): Promise<T>;\n public patch<T>(\n path: string,\n body?: unknown,\n options?: RequestData,\n ): Promise<T> {\n return this.#dispatch<T>(\"PATCH\", path, body, options);\n }\n /** Sends a PUT request. Accepts a raw body (`put(path, body)`) or a Discord.js-familiar `put(path, { body })`. @param path API path. @param body Optional JSON body, or a `RequestData` wrapper. @param options Request options. @returns Decoded response. @throws {RESTError} When the request fails. */\n public put<T>(path: string, options: RequestData): Promise<T>;\n public put<T>(\n path: string,\n body?: unknown,\n options?: RequestData,\n ): Promise<T>;\n public put<T>(\n path: string,\n body?: unknown,\n options?: RequestData,\n ): Promise<T> {\n return this.#dispatch<T>(\"PUT\", path, body, options);\n }\n /** Sends a DELETE request. @param path API path. @param options Request options (`reason`, `headers`, `signal`, …). @returns Decoded response. @throws {RESTError} When the request fails. */ public delete<\n T,\n >(path: string, options?: RequestData): Promise<T> {\n return this.request<T>(\"DELETE\", path, options?.body, options);\n }\n /**\n * Builds a multipart form with a JSON payload and file attachments.\n */\n #fileForm(payload: unknown, files: RESTFileAttachment[]): FormData {\n const form = new FormData();\n form.append(\"payload_json\", JSON.stringify(payload));\n for (let i = 0; i < files.length; i++) {\n const file = files[i]!;\n const blob =\n file.data instanceof Blob\n ? file.data\n : new Blob([file.data as ArrayBuffer], {\n type: file.contentType ?? \"application/octet-stream\",\n });\n form.append(`files[${i}]`, blob, file.name);\n }\n return form;\n }\n\n /**\n * Sends a multipart/form-data POST request for file uploads.\n * Attaches a JSON payload as `payload_json` and files as additional fields.\n * @param path API path.\n * @param payload JSON payload (e.g. message content, embeds).\n * @param files Array of file attachments.\n * @param options Cancellation options.\n * @returns Decoded response.\n * @throws {RESTError} When the request fails.\n */\n public postWithFiles<T>(\n path: string,\n payload: unknown,\n files: RESTFileAttachment[],\n options?: RESTRequestOptions,\n ): Promise<T> {\n return this.request<T>(\n \"POST\",\n path,\n this.#fileForm(payload, files),\n options,\n );\n }\n\n /**\n * Sends a multipart/form-data PATCH request for editing messages with files.\n * @param path API path.\n * @param payload JSON payload.\n * @param files Array of file attachments.\n * @param options Cancellation options.\n * @returns Decoded response.\n * @throws {RESTError} When the request fails.\n */\n public patchWithFiles<T>(\n path: string,\n payload: unknown,\n files: RESTFileAttachment[],\n options?: RESTRequestOptions,\n ): Promise<T> {\n return this.request<T>(\n \"PATCH\",\n path,\n this.#fileForm(payload, files),\n options,\n );\n }\n /** Dispatches a lifecycle hook in isolation: deferred to a microtask so it\n * cannot block the request path, with any thrown error swallowed so a faulty\n * hook cannot reject the request. @param hook Optional callback. @param ctx Event context. */\n #emit<C>(hook: ((ctx: C) => void) | undefined, ctx: C): void {\n if (!hook) return;\n const withPath = ctx as { path?: unknown };\n if (typeof withPath.path === \"string\")\n ctx = { ...ctx, path: redactPath(withPath.path) };\n Promise.resolve()\n .then(() => hook(ctx))\n .catch(() => {});\n }\n}\n\nexport { Routes } from \"./routes.js\";\nexport {\n RESTError,\n abortError,\n redactPath,\n type RESTErrorKind,\n} from \"./errors.js\";\nexport {\n createRouteKey,\n normalizeRoutePath,\n majorParameter,\n scopeBucket,\n serializeQuery,\n type RouteKey,\n type RESTQuery,\n} from \"./route.js\";\nexport { RequestScheduler } from \"./scheduler.js\";\nexport { RateLimiter } from \"./limiter.js\";\nexport {\n HttpTransport,\n TransportError,\n type TransportRequest,\n type FetchLike,\n} from \"./transport.js\";\nexport { ResponseDecoder, type DecodedError } from \"./decoder.js\";\nexport {\n type RateLimitStore,\n type BucketState,\n type Reservation,\n MemoryRateLimitStore,\n} from \"./store.js\";\nexport {\n RedisRateLimitStore,\n type RedisRateLimitStoreOptions,\n type MinimalRedisClient,\n} from \"./redis.js\";\n\nexport {\n WebhookClient,\n type WebhookClientOptions,\n type WebhookMessageOptions,\n} from \"./webhook.js\";\n\n/**\n * Discord.js-familiar alias for {@link RESTError}. `@discordjs/rest` throws `DiscordAPIError`\n * on a Discord-rejected request; Lunibee keeps `RESTError` as the canonical class and exports\n * this alias so Discord.js-shaped `catch (err) { if (err instanceof DiscordAPIError) … }` works.\n */\nexport { RESTError as DiscordAPIError };\n"
16
16
  ],
17
17
  "mappings": ";;;;;;;;;;;;;;AAwDO,MAAM,qBAA+C;AAAA,EAC/C,WAAW,IAAI;AAAA,EACf,gBAAgB,IAAI;AAAA,EAC7B,iBAAiB;AAAA,SAED,kBAAkB;AAAA,EAClC,eAAe;AAAA,EAER,aAAa,CAAC,OAAmC;AAAA,IACpD,OAAO,KAAK,cAAc,IAAI,KAAK;AAAA;AAAA,EAEhC,aAAa,CAAC,OAAe,MAAoB;AAAA,IACpD,KAAK,cAAc,IAAI,OAAO,IAAI;AAAA;AAAA,EAE/B,SAAS,CAAC,KAAsC;AAAA,IACnD,OAAO,KAAK,SAAS,IAAI,GAAG;AAAA;AAAA,EAQzB,OAAO,CAAC,KAA0B;AAAA,IACrC,MAAM,QAAQ,KAAK,SAAS,IAAI,GAAG;AAAA,IACnC,MAAM,MAAM,KAAK,IAAI;AAAA,IAGrB,IAAI,CAAC,SAAS,MAAM,WAAW;AAAA,MAAK,OAAO,EAAE,SAAS,KAAK;AAAA,IAC3D,IAAI,MAAM,YAAY,GAAG;AAAA,MACrB,MAAM,aAAa;AAAA,MACnB,OAAO,EAAE,SAAS,KAAK;AAAA,IAC3B;AAAA,IACA,OAAO,EAAE,SAAS,OAAO,cAAc,MAAM,UAAU,IAAI;AAAA;AAAA,EAExD,YAAY,CAAC,KAAa,OAA0B;AAAA,IACvD,KAAK,SAAS,IAAI,KAAK,KAAK;AAAA,IAG5B,MAAM,MAAM,KAAK,IAAI;AAAA,IACrB,IAAI,MAAM,KAAK,gBAAgB,qBAAqB,iBAAiB;AAAA,MACjE,KAAK,eAAe;AAAA,MACpB,KAAK,MAAM;AAAA,IACf;AAAA;AAAA,EAGG,KAAK,CAAC,SAAS,GAAS;AAAA,IAC3B,MAAM,SAAS,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,MAAM;AAAA,IAC9C,YAAY,KAAK,UAAU,KAAK,UAAU;AAAA,MACtC,IAAI,MAAM,WAAW;AAAA,QAAQ,KAAK,SAAS,OAAO,GAAG;AAAA,IACzD;AAAA;AAAA,EAEG,cAAc,GAAW;AAAA,IAC5B,OAAO,KAAK;AAAA;AAAA,EAET,cAAc,CAAC,SAAuB;AAAA,IACzC,KAAK,iBAAiB;AAAA;AAE9B;;;AC3FA,SAAS,cAAc,CAAC,QAA+B;AAAA,EACnD,IAAI,WAAW;AAAA,IAAK,OAAO;AAAA,EAC3B,IAAI,WAAW;AAAA,IAAK,OAAO;AAAA,EAC3B,IAAI,WAAW;AAAA,IAAK,OAAO;AAAA,EAC3B,IAAI,WAAW;AAAA,IAAK,OAAO;AAAA,EAC3B,IAAI,WAAW,OAAO,WAAW;AAAA,IAAK,OAAO;AAAA,EAC7C,IAAI,UAAU;AAAA,IAAK,OAAO;AAAA,EAC1B,IAAI,WAAW;AAAA,IAAG,OAAO;AAAA,EACzB,OAAO;AAAA;AAQJ,SAAS,UAAU,CAAC,MAAsB;AAAA,EAC7C,OACI,KAGK,QAAQ,iCAAiC,UAAU,EACnD,QAAQ,qCAAqC,UAAU;AAAA;AAAA;AAK7D,MAAM,kBAAkB,MAAM;AAAA,EACQ;AAAA,EACe;AAAA,EACM;AAAA,EACD;AAAA,EACG;AAAA,EACH;AAAA,EAEtD,WAAW,CACd,SACA,QACA,MACA,QACA,UAKI,CAAC,GACP;AAAA,IACE,MACI,SACA,QAAQ,UAAU,YAAY,YAAY,EAAE,OAAO,QAAQ,MAAM,CACrE;AAAA,IACA,KAAK,OAAO;AAAA,IACZ,KAAK,SAAS;AAAA,IACd,KAAK,OAAO,QAAQ,QAAQ,eAAe,MAAM;AAAA,IACjD,KAAK,OAAO;AAAA,IACZ,KAAK,SAAS;AAAA,IACd,KAAK,SAAS,QAAQ;AAAA,IACtB,KAAK,OACD,QAAQ,SAAS,YAAY,YAAY,WAAW,QAAQ,IAAI;AAAA;AAAA,MAK7D,SAAS,GAAY;AAAA,IAC5B,OACI,KAAK,SAAS,iBACd,KAAK,SAAS,YACd,KAAK,SAAS,aACd,KAAK,SAAS;AAAA;AAG1B;AAGO,SAAS,UAAU,CAAC,MAAc,QAA4B;AAAA,EACjE,OAAO,IAAI,UACP,kBAAkB,QACZ,OAAO,UACP,oCACN,GACA,WACA,WACA,EAAE,MAAM,OAAO,QAAQ,MAAM,UAAU,CAC3C;AAAA;AAIJ,eAAsB,KAAK,CACvB,OACA,QACA,MACa;AAAA,EACb,IAAI,SAAS;AAAA,IAAG;AAAA,EAChB,MAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAAA,IACzC,MAAM,QAAQ,WAAW,SAAS,KAAK;AAAA,IACvC,MAAM,QAAQ,MAAY;AAAA,MACtB,aAAa,KAAK;AAAA,MAClB,OAAO,WAAW,MAAM,QAAQ,MAAM,CAAC;AAAA;AAAA,IAE3C,IAAI,QAAQ;AAAA,MAAS,OAAO,MAAM;AAAA,IAClC,QAAQ,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AAAA,GAC1D;AAAA;AAIL,eAAsB,SAAS,CAC3B,SACA,QACA,MACa;AAAA,EACb,IAAI,CAAC;AAAA,IAAQ,OAAO;AAAA,EACpB,IAAI,OAAO;AAAA,IAAS,MAAM,WAAW,MAAM,OAAO,MAAM;AAAA,EACxD,OAAO,QAAQ,KAAK;AAAA,IAChB;AAAA,IACA,IAAI,QAAc,CAAC,GAAG,WAClB,OAAO,iBACH,SACA,MAAM,OAAO,WAAW,MAAM,OAAO,MAAM,CAAC,GAC5C,EAAE,MAAM,KAAK,CACjB,CACJ;AAAA,EACJ,CAAC;AAAA;;;AC1HE,SAAS,kBAAkB,CAAC,MAAsB;AAAA,EACrD,MAAM,aAAa,KAAK,QAAQ,GAAG;AAAA,EACnC,MAAM,YAAY,eAAe,KAAK,OAAO,KAAK,MAAM,GAAG,UAAU;AAAA,EACrE,OAAO,UAAU,QAAQ,kBAAkB,MAAM;AAAA;AAS9C,SAAS,cAAc,CAAC,MAAsB;AAAA,EACjD,MAAM,QAAQ,sDAAsD,KAChE,IACJ;AAAA,EACA,IAAI,CAAC;AAAA,IAAO,OAAO;AAAA,EAEnB,IAAI,MAAM,OAAO,cAAc,MAAM,OAAO;AAAA,IACxC,OAAO,GAAG,MAAM,MAAM,MAAM;AAAA,EAChC,OAAO,MAAM;AAAA;AAIV,SAAS,WAAW,CAAC,aAAqB,OAAuB;AAAA,EACpE,OAAO,GAAG,eAAe;AAAA;AAItB,SAAS,cAAc,CAAC,QAAgB,MAAwB;AAAA,EACnE,MAAM,mBAAmB,OAAO,YAAY;AAAA,EAC5C,OAAO;AAAA,IACH,QAAQ;AAAA,IACR;AAAA,IACA,OAAO,GAAG,oBAAoB,mBAAmB,IAAI;AAAA,IACrD,OAAO,eAAe,IAAI;AAAA,EAC9B;AAAA;AAIG,SAAS,cAAc,CAAC,OAAsC;AAAA,EACjE,IAAI,UAAU;AAAA,IAAW,OAAO;AAAA,EAChC,IAAI,OAAO,UAAU;AAAA,IACjB,OAAO,MAAM,WAAW,KAAK,MAAM,WAAW,GAAG,IAC3C,QACA,IAAI;AAAA,EACd,MAAM,SACF,iBAAiB,kBACX,QACA,IAAI,gBACA,OAAO,QAAQ,KAAK,EAAE,QAAQ,EAAE,KAAK,WACjC,UAAU,aAAa,UAAU,OAC3B,CAAC,IACD,CAAC,CAAC,KAAK,OAAO,KAAK,CAAC,CAAqB,CACnD,CACJ;AAAA,EACV,MAAM,aAAa,OAAO,SAAS;AAAA,EACnC,OAAO,WAAW,WAAW,IAAI,KAAK,IAAI;AAAA;;;ACrEvC,MAAM,iBAAiB;AAAA,SAEH,aAAa;AAAA,EAC3B,UAAU,IAAI;AAAA,MAGZ,IAAI,GAAW;AAAA,IACtB,OAAO,KAAK,QAAQ;AAAA;AAAA,OAmBX,YAAc,CACvB,YACA,QACA,MACA,MACU;AAAA,IACV,IAAI,MAAM,MAAM,WAAW;AAAA,IAG3B,SAAS,MAAM,EAAG,MAAM,iBAAiB,YAAY,OAAO;AAAA,MACxD,MAAM,UAAU,MAAM,KAAK,IAEzB,KAAK,QAAQ,MAAM,OAAO,YAAY;AAAA,QACpC,MAAM,UAAU,MAAM,WAAW;AAAA,QACjC,IAAI,YAAY;AAAA,UAAK,OAAO,EAAE,MAAM,OAAO,KAAK,QAAQ;AAAA,QACxD,OAAO,EAAE,MAAM,MAAM,OAAO,MAAM,KAAK,KAAK,OAAO,EAAE;AAAA,OACxD;AAAA,MACD,IAAI,QAAQ;AAAA,QAAM,OAAO,QAAQ;AAAA,MACjC,MAAM,QAAQ;AAAA,IAClB;AAAA,IACA,OAAO,KAAK,IAAI,KAAK,QAAQ,MAAM,CAAC,YAAY,KAAK,KAAK,OAAO,CAAC;AAAA;AAAA,OAYzD,IAAM,CACf,KACA,QACA,MACA,MACU;AAAA,IACV,MAAM,WAAW,KAAK,QAAQ,IAAI,GAAG,KAAK,QAAQ,QAAQ;AAAA,IAC1D,IAAI;AAAA,IACJ,MAAM,OAAO,IAAI,QAAc,CAAC,YAAY;AAAA,MACxC,OAAO;AAAA,KACV;AAAA,IACD,KAAK,QAAQ,IAAI,KAAK,IAAI;AAAA,IAC1B,IAAI,WAAW;AAAA,IACf,MAAM,UAAU,MAAY;AAAA,MACxB,IAAI;AAAA,QAAU;AAAA,MACd,WAAW;AAAA,MACX,KAAK;AAAA,MAGL,IAAI,KAAK,QAAQ,IAAI,GAAG,MAAM;AAAA,QAAM,KAAK,QAAQ,OAAO,GAAG;AAAA;AAAA,IAE/D,IAAI;AAAA,MACA,MAAM,UAAU,UAAU,QAAQ,IAAI;AAAA,MACtC,OAAO,MAAM,KAAK,OAAO;AAAA,cAC3B;AAAA,MACE,QAAQ;AAAA;AAAA;AAGpB;;;ACrFO,MAAM,YAAY;AAAA,EACZ;AAAA,EAEA;AAAA,EAOF,WAAW,CACd,OACA,UAAoC,CAAC,GACvC;AAAA,IACE,KAAK,SAAS;AAAA,IACd,KAAK,cAAc,QAAQ,cAAc;AAAA;AAAA,MAIlC,KAAK,GAAmB;AAAA,IAC/B,OAAO,KAAK;AAAA;AAAA,OAIH,iBAAgB,CACzB,OACA,OACe;AAAA,IACf,OAAO,YACF,MAAM,KAAK,OAAO,cAAc,KAAK,KAAM,OAC5C,KACJ;AAAA;AAAA,MAIO,QAAQ,GAAY;AAAA,IAC3B,OAAO,OAAO,KAAK,OAAO,YAAY;AAAA;AAAA,OAW7B,QAAO,CAChB,WACA,QACA,MACa;AAAA,IACb,MAAM,KAAK,YAAY,QAAQ,IAAI;AAAA,IACnC,IAAI,CAAC,KAAK,OAAO,SAAS;AAAA,MACtB,MAAM,SAAS,MAAM,KAAK,OAAO,UAAU,SAAS;AAAA,MACpD,IAAI,QAAQ;AAAA,QACR,MAAM,QAAQ,OAAO,UAAU,KAAK,IAAI;AAAA,QACxC,IAAI,OAAO,aAAa,KAAK,QAAQ;AAAA,UACjC,MAAM,MAAM,OAAO,QAAQ,IAAI;AAAA,MACvC;AAAA,MACA;AAAA,IACJ;AAAA,IAIA,SAAS,UAAU,EAAG,UAAU,GAAG,WAAW;AAAA,MAC1C,MAAM,cAAc,MAAM,KAAK,OAAO,QAAQ,SAAS;AAAA,MACvD,IAAI,YAAY;AAAA,QAAS;AAAA,MACzB,MAAM,MAAM,KAAK,IAAI,GAAG,YAAY,YAAY,GAAG,QAAQ,IAAI;AAAA,MAC/D,MAAM,KAAK,YAAY,QAAQ,IAAI;AAAA,IACvC;AAAA;AAAA,OAGE,WAAW,CACb,QACA,MACa;AAAA,IACb,MAAM,cAAe,MAAM,KAAK,OAAO,eAAe,IAAK,KAAK,IAAI;AAAA,IACpE,IAAI,cAAc;AAAA,MAAG,MAAM,MAAM,aAAa,QAAQ,IAAI;AAAA;AAAA,OAIjD,gBAAe,CAAC,SAAgC;AAAA,IACzD,MAAM,UAAU,MAAM,KAAK,OAAO,eAAe;AAAA,IACjD,MAAM,KAAK,OAAO,eAAe,KAAK,IAAI,SAAS,OAAO,CAAC;AAAA;AAAA,OAQlD,cAAa,CACtB,UACA,WACA,OACA,OACe;AAAA,IACf,IAAI,aAAa;AAAA,IACjB,MAAM,eAAe,SAAS,QAAQ,IAAI,oBAAoB;AAAA,IAC9D,IAAI,cAAc;AAAA,MACd,MAAM,KAAK,OAAO,cAAc,OAAO,YAAY;AAAA,MACnD,aAAa,YAAY,cAAc,KAAK;AAAA,IAChD;AAAA,IAEA,MAAM,SAAS,MAAM,KAAK,OAAO,UAAU,UAAU;AAAA,IACrD,MAAM,SAAS,SAAS,KAAK,OAAO,IAAI,EAAE,WAAW,GAAG,SAAS,EAAE;AAAA,IACnE,MAAM,eACF,KAAK,eAAe,CAAC,CAAC,UAAU,OAAO,UAAU,KAAK,IAAI;AAAA,IAC9D,MAAM,YAAY,OAAO,SAAS,QAAQ,IAAI,uBAAuB,CAAC;AAAA,IACtE,MAAM,aAAa,OACf,SAAS,QAAQ,IAAI,yBAAyB,CAClD;AAAA,IACA,MAAM,QAAQ,OAAO,SAAS,QAAQ,IAAI,mBAAmB,CAAC;AAAA,IAE9D,IAAI,OAAO,SAAS,SAAS;AAAA,MACzB,OAAO,YAAY,KAAK,IAAI,GAAG,SAAS;AAAA,IAC5C,IAAI,OAAO,SAAS,UAAU;AAAA,MAC1B,OAAO,UAAU,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,UAAU,IAAI;AAAA,IACvD,SAAI,OAAO,SAAS,KAAK;AAAA,MAAG,OAAO,UAAU,QAAQ;AAAA,IAG1D,IAAI,gBAAgB,QAAQ;AAAA,MACxB,OAAO,YAAY,KAAK,IAAI,OAAO,WAAW,OAAO,SAAS;AAAA,MAC9D,OAAO,UAAU,KAAK,IAAI,OAAO,SAAS,OAAO,OAAO;AAAA,IAC5D;AAAA,IAEA,IAAI,SAAS,WAAW,KAAK;AAAA,MACzB,MAAM,aAAa,OAAO,SAAS,QAAQ,IAAI,aAAa,CAAC;AAAA,MAC7D,IAAI,OAAO,SAAS,UAAU;AAAA,QAC1B,OAAO,UAAU,KAAK,IAClB,OAAO,SACP,KAAK,IAAI,IAAI,aAAa,IAC9B;AAAA,IACR;AAAA,IACA,MAAM,KAAK,OAAO,aAAa,YAAY,MAAM;AAAA,IAEjD,IAAI,SAAS,QAAQ,IAAI,oBAAoB,MAAM,QAAQ;AAAA,MACvD,MAAM,aAAa,OAAO,SAAS,QAAQ,IAAI,aAAa,CAAC;AAAA,MAC7D,IAAI,OAAO,SAAS,UAAU;AAAA,QAC1B,MAAM,KAAK,gBAAgB,KAAK,IAAI,IAAI,aAAa,IAAI;AAAA,IACjE;AAAA,IAEA,OAAO;AAAA;AAEf;;;AC1IO,MAAM,uBAAuB,MAAM;AAAA,EAEtB;AAAA,EACT,WAAW,CAAC,SAAiB,UAAmB,OAAiB;AAAA,IACpE,MAAM,SAAS,UAAU,YAAY,YAAY,EAAE,MAAM,CAAC;AAAA,IAC1D,KAAK,OAAO;AAAA,IACZ,KAAK,WAAW;AAAA;AAExB;AAAA;AAQO,MAAM,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EAEF,WAAW,CACd,UAII,CAAC,GACP;AAAA,IACE,KAAK,YACD,QAAQ,WAAW,+BACrB,QAAQ,OAAO,EAAE;AAAA,IACnB,KAAK,WAAW,KAAK,IAAI,GAAG,QAAQ,WAAW,KAAM;AAAA,IACrD,KAAK,SACD,QAAQ,UAAU,CAAC,OAAO,SAAS,WAAW,MAAM,OAAO,IAAI;AAAA;AAAA,MAI5D,OAAO,GAAW;AAAA,IACzB,OAAO,KAAK;AAAA;AAAA,MAGL,OAAO,GAAW;AAAA,IACzB,OAAO,KAAK;AAAA;AAAA,OAQH,KAAI,CAAC,SAA8C;AAAA,IAC5D,IAAI,QAAQ,QAAQ;AAAA,MAChB,MAAM,WAAW,QAAQ,MAAM,QAAQ,OAAO,MAAM;AAAA,IAExD,MAAM,aAAa,IAAI;AAAA,IACvB,MAAM,UAAU,MAAY,WAAW,MAAM,QAAQ,QAAQ,MAAM;AAAA,IACnE,QAAQ,QAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,IACjE,MAAM,QAAQ,WACV,MACI,WAAW,MACP,IAAI,aAAa,wBAAwB,cAAc,CAC3D,GACJ,KAAK,QACT;AAAA,IACA,IAAI;AAAA,MACA,OAAO,MAAM,KAAK,OAAO,GAAG,KAAK,WAAW,QAAQ,QAAQ;AAAA,QACxD,QAAQ,QAAQ;AAAA,QAChB,SAAS,QAAQ;AAAA,QACjB,MAAM,QAAQ;AAAA,QACd,QAAQ,WAAW;AAAA,MACvB,CAAC;AAAA,MACH,OAAO,OAAO;AAAA,MACZ,IAAI,iBAAiB;AAAA,QAAW,MAAM;AAAA,MACtC,MAAM,WACF,iBAAiB,iBAChB,MAAM,SAAS,kBAAkB,MAAM,SAAS;AAAA,MACrD,MAAM,IAAI,eACN,WACM,wCAAwC,KAAK,eAC7C,+BACN,UACA,KACJ;AAAA,cACF;AAAA,MACE,aAAa,KAAK;AAAA,MAClB,QAAQ,QAAQ,oBAAoB,SAAS,OAAO;AAAA;AAAA;AAGhE;;;ACjGO,MAAM,gBAAgB;AAAA,OAEZ,KAAI,CAAC,UAAsC;AAAA,IACpD,IAAI,SAAS,WAAW;AAAA,MAAK;AAAA,IAC7B,MAAM,cAAc,SAAS,QAAQ,IAAI,cAAc,KAAK;AAAA,IAC5D,IAAI,YAAY,SAAS,kBAAkB;AAAA,MACvC,OAAO,SAAS,KAAK,EAAE,MAAM,MAAG;AAAA,QAAG;AAAA,OAAS;AAAA,IAChD,OAAO,SAAS,KAAK,EAAE,MAAM,MAAG;AAAA,MAAG;AAAA,KAAS;AAAA;AAAA,EAIzC,SAAS,CAAC,SAAgC;AAAA,IAC7C,IAAI,CAAC,WAAW,OAAO,YAAY;AAAA,MAAU,OAAO,CAAC;AAAA,IACrD,MAAM,OAAO;AAAA,IACb,OAAO;AAAA,MACH,SACI,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAAA,MACtD,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAAA,MAClD,aACI,OAAO,KAAK,gBAAgB,WACtB,KAAK,cACL;AAAA,MACV,QAAQ,KAAK,WAAW;AAAA,IAC5B;AAAA;AAAA,EAWG,UAAU,CAAC,UAAoB,MAA4B;AAAA,IAC9D,MAAM,MAAM,SAAS,QAAQ,IAAI,aAAa;AAAA,IAC9C,MAAM,SAAS,QAAQ,OAAO,OAAO,MAAM,OAAO,GAAG;AAAA,IACrD,MAAM,aACF,KAAK,gBAAgB,OAAO,SAAS,MAAM,IAAI,SAAS;AAAA,IAC5D,OAAO,KAAK,IAAI,GAAG,UAAU;AAAA;AAErC;;;ACjDO,IAAM,SAAS;AAAA,EACwC,MAAM,MAC5D;AAAA,EACyE,UACzE,CAAC,WAAmB,UAAU,UAAU,QAAQ,SAAS;AAAA,EACkB,OAAO,CAClF,YACC,WAAW,UAAU,SAAS,UAAU;AAAA,EACoB,cAC7D,CAAC,YACG,WAAW,UAAU,SAAS,UAAU;AAAA,EAC4B,oBACxE,CAAC,YACG,WAAW,UAAU,SAAS,UAAU;AAAA,EACsB,eAClE,CAAC,YACG,WAAW,UAAU,SAAS,UAAU;AAAA,EACqB,cACjE,CAAC,YACG,WAAW,UAAU,SAAS,UAAU;AAAA,EACwD,eACpG,CAAC,YACG,WAAW,UAAU,SAAS,UAAU;AAAA,EAC4E,aACxH,CAAC,SAAiB,WACd,WAAW,UAAU,SAAS,UAAU,aAAa,UAAU,QAAQ,SAAS;AAAA,EACI,YACxF,CAAC,YAAoB,WAAW,UAAU,SAAS,UAAU;AAAA,EACxB,WAAW,CAChD,SACA,WAEA,WAAW,UAAU,SAAS,UAAU,WAAW,UAAU,QAAQ,SAAS;AAAA,EAC9C,iBAAiB,CACjD,SACA,QACA,WAEA,WAAW,UAAU,SAAS,UAAU,aAAa,UAAU,QAAQ,SAAS,WAAW,UAAU,QAAQ,SAAS;AAAA,EACpF,WAAW,CAAC,YAC9C,WAAW,UAAU,SAAS,UAAU;AAAA,EACJ,UAAU,CAC9C,SACA,WAEA,WAAW,UAAU,SAAS,UAAU,UAAU,UAAU,QAAQ,SAAS;AAAA,EACM,SACnF,CAAC,cACG,aAAa,UAAU,WAAW,YAAY;AAAA,EACwD,iBAC1G,CAAC,cACG,aAAa,UAAU,WAAW,YAAY;AAAA,EACsE,SACxH,CAAC,WAAmB,cAChB,aAAa,UAAU,WAAW,YAAY,cAAc,UAAU,WAAW,YAAY;AAAA,EAC4B,kBAC7H,CAAC,WAAmB,cAChB,GAAG,OAAO,QAAQ,WAAW,SAAS;AAAA,EACsI,kBAChL,CAAC,WAAmB,WAAmB,UACnC,GAAG,OAAO,QAAQ,WAAW,SAAS,eAAe,mBAAmB,KAAK;AAAA,EACsE,qBACvJ,CAAC,WAAmB,cAChB,GAAG,OAAO,QAAQ,WAAW,SAAS;AAAA,EAC4C,aACtF,CAAC,cACG,aAAa,UAAU,WAAW,YAAY;AAAA,EAC+D,YACjH,CAAC,WAAmB,cAChB,aAAa,UAAU,WAAW,YAAY,UAAU,UAAU,WAAW,YAAY;AAAA,EACgD,eAC7I,CAAC,WAAmB,cAChB,GAAG,OAAO,QAAQ,WAAW,SAAS;AAAA,EACiD,mBAC3F,CAAC,cACG,aAAa,UAAU,WAAW,YAAY;AAAA,EACmD,iBACrG,CAAC,cACG,aAAa,UAAU,WAAW,YAAY;AAAA,EACiD,gBACnG,CAAC,cACG,aAAa,UAAU,WAAW,YAAY;AAAA,EACsE,SACxH,CAAC,WAAmB,UAChB,aAAa,UAAU,WAAW,YAAY,IAAI,QAAQ,IAAI,mBAAmB,KAAK,MAAM;AAAA,EAClE,gBAAgB,CAC9C,WACA,OACA,cAEA,aAAa,UAAU,WAAW,YAAY,KAAK,mBAAmB,KAAK,cAAc,UAAU,WAAW,YAAY;AAAA,EACM,qBAChI,CAAC,kBACG,iBAAiB,UAAU,eAAe,gBAAgB;AAAA,EACgF,oBAC9I,CAAC,eAAuB,cACpB,iBAAiB,UAAU,eAAe,gBAAgB,cAAc,UAAU,WAAW,YAAY;AAAA,EACsC,0BACnJ,CAAC,eAAuB,YACpB,iBAAiB,UAAU,eAAe,gBAAgB,YAAY,UAAU,SAAS,UAAU;AAAA,EACyF,yBAChM,CAAC,eAAuB,SAAiB,cACrC,iBAAiB,UAAU,eAAe,gBAAgB,YAAY,UAAU,SAAS,UAAU,cAAc,UAAU,WAAW,YAAY;AAAA,EACS,qBAC/J,CAAC,eAAuB,UACpB,iBAAiB,UAAU,eAAe,gBAAgB,KAAK,mBAAmB,KAAK;AAAA,EAC2E,6BACtK,CAAC,eAAuB,UACpB,aAAa,UAAU,eAAe,gBAAgB,KAAK,mBAAmB,KAAK;AAAA,EAE+B,8BACtH,CAAC,cACG,aAAa,UAAU,WAAW,YAAY;AAAA,EACsE,+BACxH,CAAC,cACG,aAAa,UAAU,WAAW,YAAY;AAAA,EAC8C,eAChG,CAAC,aACG,aAAa,UAAU,UAAU,WAAW;AAAA,EAC+D,sBAC/G,CAAC,YACG,WAAW,UAAU,SAAS,UAAU;AAAA,EAC4F,qBACxI,CAAC,SAAiB,YACd,WAAW,UAAU,SAAS,UAAU,sBAAsB,UAAU,SAAS,UAAU;AAAA,EAC2D,0BAC1J,CAAC,SAAiB,YACd,WAAW,UAAU,SAAS,UAAU,sBAAsB,UAAU,SAAS,UAAU;AAAA,EACkE,mBACjK,CAAC,WAAmB,gBAChB,aAAa,UAAU,WAAW,YAAY,iBAAiB,UAAU,aAAa,cAAc;AAAA,EACC,0BACzG,CAAC,YACG,WAAW,UAAU,SAAS,UAAU;AAAA,EAC8E,yBAC1H,CAAC,SAAiB,WACd,WAAW,UAAU,SAAS,UAAU,2BAA2B,UAAU,QAAQ,SAAS;AAAA,EACnC,cAC/D,MAAM;AAAA,EAC2D,SACjE,MAAM;AAAA,EAC4F,YAClG,MAAM;AAAA,EAIV,eAAe,CAAC,YACZ,WAAW,UAAU,SAAS,UAAU;AAAA,EAI5C,cAAc,CAAC,YACX,WAAW,UAAU,SAAS,UAAU;AAAA,EAI5C,oBAAoB,CAAC,YACjB,WAAW,UAAU,SAAS,UAAU;AAAA,EAE5C,iBAAiB,CAAC,YACd,WAAW,UAAU,SAAS,UAAU;AAAA,EAI5C,YAAY,CAAC,YACT,WAAW,UAAU,SAAS,UAAU;AAAA,EAI5C,gBAAgB,MAAM;AAAA,EAEtB,wBAAwB,CAAC,cACrB,oBAAoB,UAAU,WAAW,YAAY;AAAA,EAIzD,QAAQ,CAAC,SAAiB,YAAY,mBAAmB,IAAI;AAAA,EAE7D,aAAa,CAAC,YACV,WAAW,UAAU,SAAS,UAAU;AAAA,EAI5C,YAAY,CAAC,SAAiB,YAC1B,UACM,WAAW,UAAU,SAAS,UAAU,YAAY,UAAU,SAAS,UAAU,MACjF,WAAW,UAAU,SAAS,UAAU;AAAA,EAElD,kBAAkB,CAAC,eAAuB,YACtC,UACM,iBAAiB,UAAU,eAAe,gBAAgB,YAAY,UAAU,SAAS,UAAU,MACnG,iBAAiB,UAAU,eAAe,gBAAgB;AAAA,EAIpE,YAAY,CAAC,WAAmB,cAC5B,aAAa,UAAU,WAAW,YAAY,WAAW,UAAU,WAAW,YAAY;AAAA,EAE9F,kBAAkB,CACd,WACA,WACA,aAEA,aAAa,UAAU,WAAW,YAAY,WAAW,UAAU,WAAW,YAAY,aAAa,QAAQ,UAAU,WAAW;AAAA,EAIxI,cAAc,CAAC,SAAiB,cAC5B,YACM,WAAW,UAAU,SAAS,UAAU,cAAc,UAAU,WAAW,YAAY,MACvF,WAAW,UAAU,SAAS,UAAU;AAAA,EAIlD,qBAAqB,CAAC,cAClB,aAAa,UAAU,WAAW,YAAY;AAAA,EAElD,yBAAyB,MAAM;AAAA,EAE/B,sBAAsB,CAAC,SAAiB,YACpC,UACM,WAAW,UAAU,SAAS,UAAU,uBAAuB,UAAU,SAAS,UAAU,MAC5F,WAAW,UAAU,SAAS,UAAU;AAAA,EAIlD,iBAAiB,CAAC,kBACd,iBAAiB,UAAU,eAAe,gBAAgB;AAAA,EAE9D,wBAAwB,CAAC,eAAuB,kBAC5C,gBACM,iBAAiB,UAAU,eAAe,gBAAgB,kBAAkB,UAAU,eAAe,gBAAgB,MACrH,iBAAiB,UAAU,eAAe,gBAAgB;AAAA,EAEpE,oBAAoB,CAAC,eAAuB,kBACxC,iBAAiB,UAAU,eAAe,gBAAgB,kBAAkB,UAAU,eAAe,gBAAgB;AAAA,EAEzH,iBAAiB,CAAC,OAAe,mBAC7B,iBACM,SAAS,UAAU,OAAO,QAAQ,mBAAmB,UAAU,gBAAgB,iBAAiB,MAChG,SAAS,UAAU,OAAO,QAAQ;AAChD;AAGA,SAAS,OAAO,CAAC,OAAe,OAAuB;AAAA,EACnD,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ;AAAA,IACpC,MAAM,IAAI,UAAU,GAAG,uCAAuC;AAAA,EAClE,OAAO,OAAO,KAAK;AAAA;AASvB,SAAS,SAAS,CAAC,OAAe,OAAuB;AAAA,EACrD,IAAI,CAAC,aAAa,KAAK,KAAK;AAAA,IACxB,MAAM,IAAI,UAAU,GAAG,0CAA0C;AAAA,EACrE,OAAO;AAAA;;AClPX,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyDhB,MAAM,oBAA8C;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EAOA,SAAS,IAAI;AAAA,EACtB;AAAA,EAEO,WAAW,CAAC,SAAqC;AAAA,IACpD,KAAK,UAAU,QAAQ;AAAA,IACvB,KAAK,UAAU,QAAQ,UAAU;AAAA,IACjC,KAAK,mBAAmB,QAAQ;AAAA,IAKhC,IAAI,OAAO,QAAQ,OAAO,SAAS;AAAA,MAC/B,KAAK,UAAU,CAAC,QAAQ,KAAK,SAAS,GAAG;AAAA;AAAA,MAItC,SAAS,GAAY;AAAA,IAC5B,OAAO,KAAK;AAAA;AAAA,EAIT,SAAS,GAAY;AAAA,IACxB,OAAO,KAAK,eAAe;AAAA;AAAA,EAI/B,QAAQ,CAAC,WAAmB,OAAsB;AAAA,IAC9C,KAAK,aAAa;AAAA,IAClB,QAAQ,KACJ,yCAAyC,uBACrC,iDACJ,KACJ;AAAA,IACA,IAAI;AAAA,MACA,KAAK,mBAAmB,WAAW,KAAK;AAAA,MAC1C,MAAM;AAAA;AAAA,EAMZ,YAAY,GAAS;AAAA,IACjB,KAAK,aAAa;AAAA;AAAA,OAGT,cAAa,CAAC,OAA4C;AAAA,IACnE,IAAI;AAAA,MACA,MAAM,OAAO,MAAM,KAAK,QAAQ,IAC5B,GAAG,KAAK,gBAAgB,OAC5B;AAAA,MACA,KAAK,aAAa;AAAA,MAClB,OAAO,QAAQ;AAAA,MACjB,OAAO,OAAO;AAAA,MACZ,KAAK,SAAS,iBAAiB,KAAK;AAAA,MACpC,OAAO,KAAK,OAAO,cAAc,KAAK;AAAA;AAAA;AAAA,OAIjC,cAAa,CAAC,OAAe,MAA6B;AAAA,IACnE,KAAK,OAAO,cAAc,OAAO,IAAI;AAAA,IACrC,IAAI;AAAA,MACA,MAAM,KAAK,QAAQ,IACf,GAAG,KAAK,gBAAgB,SACxB,MACA,MACA,MACJ;AAAA,MACA,KAAK,aAAa;AAAA,MACpB,OAAO,OAAO;AAAA,MACZ,KAAK,SAAS,iBAAiB,KAAK;AAAA;AAAA;AAAA,OAI/B,UAAS,CAAC,KAA+C;AAAA,IAClE,IAAI;AAAA,MACA,MAAM,OAAO,MAAM,KAAK,QAAQ,IAAI,GAAG,KAAK,iBAAiB,KAAK;AAAA,MAClE,KAAK,aAAa;AAAA,MAClB,IAAI,CAAC;AAAA,QAAM;AAAA,MACX,OAAO,KAAK,MAAM,IAAI;AAAA,MACxB,OAAO,OAAO;AAAA,MACZ,KAAK,SAAS,aAAa,KAAK;AAAA,MAChC,OAAO,KAAK,OAAO,UAAU,GAAG;AAAA;AAAA;AAAA,OAI3B,aAAY,CAAC,KAAa,OAAmC;AAAA,IACtE,KAAK,OAAO,aAAa,KAAK,KAAK;AAAA,IACnC,MAAM,YAAY,GAAG,KAAK,iBAAiB;AAAA,IAG3C,MAAM,MAAM,KAAK,MAAM,MAAM,UAAU,KAAK,IAAI,KAAK,IAAI;AAAA,IACzD,IAAI;AAAA,MACA,IAAI,OAAO,GAAG;AAAA,QACV,MAAM,KAAK,QAAQ,IAAI,SAAS;AAAA,QAChC,KAAK,aAAa;AAAA,QAClB;AAAA,MACJ;AAAA,MACA,MAAM,KAAK,QAAQ,IAAI,WAAW,KAAK,UAAU,KAAK,GAAG,MAAM,GAAG;AAAA,MAClE,KAAK,aAAa;AAAA,MACpB,OAAO,OAAO;AAAA,MACZ,KAAK,SAAS,gBAAgB,KAAK;AAAA;AAAA;AAAA,MAKhC,mBAAmB,GAAY;AAAA,IACtC,OAAO,OAAO,KAAK,QAAQ,SAAS;AAAA;AAAA,EAWjC;AAAA,OAED,QAAQ,CAAC,KAAmC;AAAA,IAC9C,IAAI;AAAA,MACA,MAAM,SAAU,MAAM,KAAK,QAAQ,KAC/B,gBACA,GACA,GAAG,KAAK,iBAAiB,OACzB,KAAK,IAAI,CACb;AAAA,MACA,KAAK,aAAa;AAAA,MAClB,IAAI,CAAC,MAAM,QAAQ,MAAM;AAAA,QAAG,OAAO,EAAE,SAAS,KAAK;AAAA,MACnD,OAAO,SAAS,gBAAgB;AAAA,MAChC,OAAO,OAAO,OAAO,MAAM,IACrB,EAAE,SAAS,KAAK,IAChB,EAAE,SAAS,OAAO,cAAc,OAAO,YAAY,KAAK,EAAE;AAAA,MAClE,OAAO,OAAO;AAAA,MACZ,KAAK,SAAS,WAAW,KAAK;AAAA,MAC9B,OAAO,KAAK,OAAO,QAAQ,GAAG;AAAA;AAAA;AAAA,OAIzB,eAAc,GAAoB;AAAA,IAC3C,IAAI;AAAA,MACA,MAAM,UAAU,MAAM,KAAK,QAAQ,IAAI,GAAG,KAAK,eAAe;AAAA,MAC9D,KAAK,aAAa;AAAA,MAClB,OAAO,UAAU,OAAO,OAAO,IAAI;AAAA,MACrC,OAAO,OAAO;AAAA,MACZ,KAAK,SAAS,kBAAkB,KAAK;AAAA,MACrC,OAAO,KAAK,OAAO,eAAe;AAAA;AAAA;AAAA,OAI7B,eAAc,CAAC,SAAgC;AAAA,IACxD,KAAK,OAAO,eAAe,OAAO;AAAA,IAClC,MAAM,YAAY,GAAG,KAAK;AAAA,IAC1B,MAAM,MAAM,KAAK,MAAM,UAAU,KAAK,IAAI,KAAK,IAAI;AAAA,IACnD,IAAI;AAAA,MACA,IAAI,OAAO,GAAG;AAAA,QACV,MAAM,KAAK,QAAQ,IAAI,SAAS;AAAA,QAChC,KAAK,aAAa;AAAA,QAClB;AAAA,MACJ;AAAA,MACA,MAAM,KAAK,QAAQ,IAAI,WAAW,OAAO,OAAO,GAAG,MAAM,GAAG;AAAA,MAC5D,KAAK,aAAa;AAAA,MACpB,OAAO,OAAO;AAAA,MACZ,KAAK,SAAS,kBAAkB,KAAK;AAAA;AAAA;AAGjD;;ACpOO,MAAM,cAAc;AAAA,EAEP;AAAA,EAEA;AAAA,EACP;AAAA,EAEF,WAAW,CACd,SACA,aACF;AAAA,IACE,IAAI,QAAQ,KAAK;AAAA,MACb,MAAM,QAAQ,QAAQ,IAAI,MACtB,6DACJ;AAAA,MACA,IAAI,CAAC;AAAA,QAAO,MAAM,IAAI,MAAM,qCAAqC;AAAA,MACjE,KAAK,KAAK,MAAM;AAAA,MAChB,KAAK,QAAQ,MAAM;AAAA,IACvB,EAAO,SAAI,QAAQ,MAAM,QAAQ,OAAO;AAAA,MACpC,KAAK,KAAK,QAAQ;AAAA,MAClB,KAAK,QAAQ,QAAQ;AAAA,IACzB,EAAO;AAAA,MACH,MAAM,IAAI,MACN,yEACJ;AAAA;AAAA,IAEJ,KAAK,QAAQ,IAAI,KAAK,WAAW;AAAA;AAAA,OAIxB,KAAI,CACb,SACmB;AAAA,IACnB,MAAM,UACF,OAAO,YAAY,WAAW,EAAE,SAAS,QAAQ,IAAI;AAAA,IACzD,QAAQ,cAAc,SAAS;AAAA,IAC/B,MAAM,QAAQ,YACR,cAAc,wBACd;AAAA,IACN,MAAM,kBAA0C,KAAK,QAAQ,IAAI,CAAC,OAC9D,YAAY,KAAI,EAAE,OAAO,IAAI,CACjC;AAAA,IACA,OAAO,KAAK,MAAM,KACd,GAAG,OAAO,QAAQ,KAAK,IAAI,KAAK,KAAK,IAAI,SACzC;AAAA,SACO;AAAA,MACH,QAAQ;AAAA,IACZ,CACJ;AAAA;AAAA,OAIS,YAAW,CACpB,WACA,SACY;AAAA,IACZ,MAAM,UACF,OAAO,YAAY,WAAW,EAAE,SAAS,QAAQ,IAAI;AAAA,IACzD,OAAO,KAAK,MAAM,MACd,OAAO,eAAe,KAAK,IAAI,KAAK,OAAO,SAAS,GACpD,OACJ;AAAA;AAAA,OAIS,cAAa,CAAC,WAAkC;AAAA,IACzD,MAAM,KAAK,MAAM,OACb,OAAO,eAAe,KAAK,IAAI,KAAK,OAAO,SAAS,CACxD;AAAA;AAER;;;AC3FA,IAAM,kBAAkB,gBAAY;AACpC,IAAM,cAAc;AACpB,IAAM,aAAa,eAAe,gBAAgB,gBAAY;AAyD9D,IAAM,oBAAoB,IAAI,IAAI;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,CAAC;AASD,SAAS,aAAa,CAAC,OAAsC;AAAA,EACzD,IAAI,UAAU,QAAQ,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACxD,IAAI,MAAM,QAAQ,KAAK;AAAA,IAAG,OAAO;AAAA,EACjC,IAAI,OAAO,aAAa,eAAe,iBAAiB;AAAA,IACpD,OAAO;AAAA,EACX,IACI,iBAAiB,QACjB,iBAAiB,cACjB,iBAAiB;AAAA,IAEjB,OAAO;AAAA,EACX,MAAM,OAAO,OAAO,KAAK,KAAK;AAAA,EAC9B,IAAI,KAAK,WAAW;AAAA,IAAG,OAAO;AAAA,EAC9B,OAAO,KAAK,MAAM,CAAC,QAAQ,kBAAkB,IAAI,GAAG,CAAC;AAAA;AAoElD,SAAS,iBAAiB,CAAC,aAAa,GAAgB;AAAA,EAC3D,IAAI,CAAC,OAAO,SAAS,UAAU,KAAK,aAAa;AAAA,IAC7C,MAAM,IAAI,UAAU,kDAAkD;AAAA,EAC1E,OAAO;AAAA,IACH,YAAY,KAAK,MAAM,UAAU;AAAA,IACjC,WAAW,CAAC,QAAQ,QAAQ;AAAA,MACxB,MAAM,aAAa,OAAO,YAAY;AAAA,MACtC,MAAM,aAAa,CAAC,OAAO,QAAQ,OAAO,QAAQ,EAAE,SAChD,UACJ;AAAA,MAIA,IAAI,WAAW;AAAA,QAAG,OAAO;AAAA,MACzB,OACI,WAAW,OAAQ,UAAU,OAAO,UAAU,OAAO;AAAA;AAAA,IAG7D,QAAQ,CAAC,SAAS,YAAY;AAAA,MAC1B,IAAI,eAAe;AAAA,QAAW,OAAO,KAAK,IAAI,GAAG,aAAa,IAAI;AAAA,MAClE,OAAO,KAAK,IAAI,KAAQ,MAAM,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI;AAAA;AAAA,EAEtE;AAAA;AAAA;AAIG,MAAM,KAAK;AAAA,EACL;AAAA,EACT;AAAA,EAES;AAAA,EAEA,aAAa,IAAI;AAAA,EAEjB;AAAA,EAEA,WAAW,IAAI;AAAA,EACxB,SAAoB,CAAC;AAAA,EAEZ;AAAA,EAEF,WAAW,CACd,UAiBI,CAAC,GACP;AAAA,IACE,KAAK,SAAS,QAAQ;AAAA,IACtB,KAAK,eACD,QAAQ,eAAe,kBAAkB,QAAQ,WAAW,CAAC;AAAA,IACjE,KAAK,aACD,QAAQ,aACR,IAAI,cAAc;AAAA,MACd,SAAS,QAAQ;AAAA,MACjB,SAAS,QAAQ;AAAA,IACrB,CAAC;AAAA,IACL,MAAM,QAAQ,QAAQ,SAAS,IAAI;AAAA,IACnC,KAAK,sBACA,QAAQ,qBAAqB,UAC9B,OAAO,MAAM,YAAY;AAAA,IAC7B,KAAK,WAAW,IAAI,YAAY,OAAO;AAAA,MACnC,YAAY,KAAK;AAAA,IACrB,CAAC;AAAA,IACD,IAAI,QAAQ;AAAA,MAAO,KAAK,SAAS,QAAQ;AAAA;AAAA,MAGlC,KAAK,GAAmB;AAAA,IAC/B,OAAO,KAAK,SAAS;AAAA;AAAA,EAGlB,QAAQ,CAAC,OAAwB;AAAA,IACpC,KAAK,SAAS;AAAA,IACd,OAAO;AAAA;AAAA,EAGJ,QAAQ,CAAC,OAAqB;AAAA,IACjC,IAAI,CAAC,MAAM,KAAK;AAAA,MACZ,MAAM,IAAI,UAAU,kCAAkC;AAAA,IAC1D,KAAK,SAAS;AAAA;AAAA,OAYL,QAAU,CACnB,QACA,MACA,MACA,UAAuB,CAAC,GACd;AAAA,IACV,IAAI,CAAC,OAAO,YAAY;AAAA,MACpB,MAAM,IAAI,UAAU,0BAA0B;AAAA,IAClD,IAAI,CAAC,KAAK,WAAW,GAAG;AAAA,MACpB,MAAM,IAAI,UAAU,iCAAiC;AAAA,IACzD,MAAM,QAAQ,eAAe,QAAQ,IAAI;AAAA,IAEzC,MAAM,QAAQ,QAAQ;AAAA,IACtB,IAAI,SAAS,MAAM,SAAS,KAAK,EAAE,gBAAgB;AAAA,MAC/C,OAAO,KAAK,UAAU,MAAM,KAAK;AAAA,IACrC,MAAM,QAAQ,eAAe,QAAQ,KAAK;AAAA,IAC1C,MAAM,cAAc,QAAQ,GAAG,OAAO,UAAU;AAAA,IAQhD,OAAO,KAAK,WAAW,YACnB,MAAM,KAAK,SAAS,iBAAiB,MAAM,OAAO,MAAM,KAAK,GAC7D,QAAQ,QACR,MACA,CAAC,WAAW,YACR,KAAK,UACD,OACA,aACA,MACA,SACA,WACA,OACJ,CACR;AAAA;AAAA,OAME,SAAY,CACd,OACA,aACA,MACA,SACA,kBACA,SACU;AAAA,IACV,QAAQ,QAAQ,SAAS;AAAA,IACzB,IAAI,YAAY;AAAA,IAChB,SACQ,UAAU,EACd,WAAW,KAAK,aAAa,YAC7B,WACF;AAAA,MACE,MAAM,KAAK,SAAS,QAAQ,WAAW,QAAQ,QAAQ,IAAI;AAAA,MAK3D,IAAI,KAAK,oBAAoB;AAAA,QACzB,MAAM,SAAS,MAAM,KAAK,SAAS,MAAM,UAAU,SAAS;AAAA,QAC5D,IAAI,UAAU,OAAO,UAAU,KAAK,IAAI;AAAA,UAAG,QAAQ;AAAA,MACvD;AAAA,MACA,KAAK,MAAM,KAAK,OAAO,WAAW,EAAE,QAAQ,MAAM,QAAQ,CAAC;AAAA,MAC3D,MAAM,eAAe,KAAK,IAAI;AAAA,MAC9B,IAAI;AAAA,MACJ,IAAI;AAAA,QACA,WAAW,MAAM,KAAK,WAAW,KAAK;AAAA,UAClC;AAAA,UACA,MAAM;AAAA,UACN,SAAS,KAAK,SAAS,MAAM,OAAO;AAAA,UACpC,MAAM,KAAK,YAAY,IAAI;AAAA,UAC3B,QAAQ,QAAQ;AAAA,QACpB,CAAC;AAAA,QACH,OAAO,OAAO;AAAA,QACZ,IAAI,iBAAiB;AAAA,UAAW,MAAM;AAAA,QACtC,IAAI,QAAQ,QAAQ;AAAA,UAChB,MAAM,WAAW,MAAM,QAAQ,OAAO,MAAM;AAAA,QAChD,MAAM,UACF,iBAAiB,iBACX,QACA,IAAI,eACA,+BACA,OACA,KACJ;AAAA,QACV,IACI,CAAC,QAAQ,YACT,UAAU,KAAK,aAAa,cAC5B,KAAK,aAAa,YAAY,QAAQ,CAAC,GACzC;AAAA,UACE,MAAM,MACF,KAAK,aAAa,SAAS,OAAO,GAClC,QAAQ,QACR,IACJ;AAAA,UACA;AAAA,QACJ;AAAA,QACA,MAAM,IAAI,UAAU,QAAQ,SAAS,GAAG,WAAW,WAAW;AAAA,UAC1D;AAAA,UACA;AAAA,UACA,OAAO,QAAQ,SAAS;AAAA,UACxB,MAAM,QAAQ,WAAW,YAAY;AAAA,QACzC,CAAC;AAAA;AAAA,MAEL,KAAK,MAAM,KAAK,OAAO,YAAY;AAAA,QAC/B;AAAA,QACA;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,YAAY,KAAK,IAAI,IAAI;AAAA,MAC7B,CAAC;AAAA,MACD,YAAY,MAAM,KAAK,SAAS,cAC5B,UACA,WACA,MAAM,OACN,MAAM,KACV;AAAA,MACA,MAAM,UAAU,MAAM,KAAK,SAAS,KAAK,QAAQ;AAAA,MACjD,IAAI,SAAS;AAAA,QACT,OAAQ,SAAS,WAAW,MAAM,YAAY;AAAA,MAElD,MAAM,OAAO,KAAK,SAAS,UAAU,OAAO;AAAA,MAC5C,MAAM,aACF,SAAS,WAAW,MACd,KAAK,SAAS,WAAW,UAAU,IAAI,IACvC;AAAA,MACV,IAAI,KAAK,UAAU,eAAe;AAAA,QAC9B,MAAM,KAAK,SAAS,gBAChB,KAAK,IAAI,IAAI,aAAa,IAC9B;AAAA,MAGJ,IAAI,SAAS,WAAW;AAAA,QACpB,KAAK,MAAM,KAAK,OAAO,aAAa;AAAA,UAChC;AAAA,UACA;AAAA,UACA,eAAe,cAAc,KAAK;AAAA,UAClC,QAAQ,KAAK,UAAU;AAAA,UACvB,QAAQ,MAAM,KAAK,SAAS,MAAM,cAC9B,MAAM,KACV;AAAA,QACJ,CAAC;AAAA,MACL,IACI,UAAU,KAAK,aAAa,cAC5B,KAAK,aAAa,YAAY,QAAQ,SAAS,MAAM,GACvD;AAAA,QACE,MAAM,QAAQ,KAAK,aAAa,SAAS,SAAS,UAAU;AAAA,QAC5D,KAAK,MAAM,KAAK,OAAO,SAAS;AAAA,UAC5B;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ,SAAS;AAAA,UACjB,SAAS;AAAA,QACb,CAAC;AAAA,QACD,MAAM,MAAM,OAAO,QAAQ,QAAQ,IAAI;AAAA,QACvC;AAAA,MACJ;AAAA,MACA,MAAM,IAAI,UACN,KAAK,WACD,SAAS,cACT,2CAA2C,SAAS,UACxD,SAAS,QACT,KAAK,MACL,SACA,EAAE,QAAQ,KAAK,CACnB;AAAA,IACJ;AAAA,IACA,MAAM,IAAI,UACN,qDACA,GACA,WACA,WACA,EAAE,QAAQ,KAAK,CACnB;AAAA;AAAA,EAGJ,QAAQ,CAAC,MAAe,SAA8C;AAAA,IAClE,MAAM,aACF,OAAO,aAAa,eAAe,gBAAgB;AAAA,IACvD,MAAM,UAAkC,KAAK,QAAQ,QAAQ;AAAA,IAC7D,IAAI,QAAQ,SAAS,SAAS,KAAK;AAAA,MAC/B,QAAQ,mBAAmB,OAAO,KAAK;AAAA,IAC3C,QAAQ,gBAAgB;AAAA,IACxB,IAAI,QAAQ,WAAW;AAAA,MACnB,QAAQ,wBAAwB,mBAAmB,QAAQ,MAAM;AAAA,IACrE,IAAI,CAAC;AAAA,MAAY,QAAQ,kBAAkB;AAAA,IAC3C,OAAO;AAAA;AAAA,EAGX,WAAW,CAAC,MAAqC;AAAA,IAC7C,IAAI,OAAO,aAAa,eAAe,gBAAgB;AAAA,MACnD,OAAO;AAAA,IACX,OAAO,SAAS,YAAY,YAAY,KAAK,UAAU,IAAI;AAAA;AAAA,EAO/D,SAAY,CACR,QACA,MACA,eACA,SACU;AAAA,IACV,IAAI,YAAY,aAAa,cAAc,aAAa;AAAA,MACpD,OAAO,KAAK,QACR,QACA,MACA,cAAc,MACd,aACJ;AAAA,IACJ,OAAO,KAAK,QAAW,QAAQ,MAAM,eAAe,OAAO;AAAA;AAAA,EAEmI,GAEjM,CAAC,MAAc,SAAmC;AAAA,IAC/C,OAAO,KAAK,QAAW,OAAO,MAAM,SAAS,MAAM,OAAO;AAAA;AAAA,EASvD,IAAO,CACV,MACA,MACA,SACU;AAAA,IACV,OAAO,KAAK,UAAa,QAAQ,MAAM,MAAM,OAAO;AAAA;AAAA,EASjD,KAAQ,CACX,MACA,MACA,SACU;AAAA,IACV,OAAO,KAAK,UAAa,SAAS,MAAM,MAAM,OAAO;AAAA;AAAA,EASlD,GAAM,CACT,MACA,MACA,SACU;AAAA,IACV,OAAO,KAAK,UAAa,OAAO,MAAM,MAAM,OAAO;AAAA;AAAA,EAE+I,MAErM,CAAC,MAAc,SAAmC;AAAA,IAC/C,OAAO,KAAK,QAAW,UAAU,MAAM,SAAS,MAAM,OAAO;AAAA;AAAA,EAKjE,SAAS,CAAC,SAAkB,OAAuC;AAAA,IAC/D,MAAM,OAAO,IAAI;AAAA,IACjB,KAAK,OAAO,gBAAgB,KAAK,UAAU,OAAO,CAAC;AAAA,IACnD,SAAS,IAAI,EAAG,IAAI,MAAM,QAAQ,KAAK;AAAA,MACnC,MAAM,OAAO,MAAM;AAAA,MACnB,MAAM,OACF,KAAK,gBAAgB,OACf,KAAK,OACL,IAAI,KAAK,CAAC,KAAK,IAAmB,GAAG;AAAA,QACjC,MAAM,KAAK,eAAe;AAAA,MAC9B,CAAC;AAAA,MACX,KAAK,OAAO,SAAS,MAAM,MAAM,KAAK,IAAI;AAAA,IAC9C;AAAA,IACA,OAAO;AAAA;AAAA,EAaJ,aAAgB,CACnB,MACA,SACA,OACA,SACU;AAAA,IACV,OAAO,KAAK,QACR,QACA,MACA,KAAK,UAAU,SAAS,KAAK,GAC7B,OACJ;AAAA;AAAA,EAYG,cAAiB,CACpB,MACA,SACA,OACA,SACU;AAAA,IACV,OAAO,KAAK,QACR,SACA,MACA,KAAK,UAAU,SAAS,KAAK,GAC7B,OACJ;AAAA;AAAA,EAKJ,KAAQ,CAAC,MAAsC,KAAc;AAAA,IACzD,IAAI,CAAC;AAAA,MAAM;AAAA,IACX,MAAM,WAAW;AAAA,IACjB,IAAI,OAAO,SAAS,SAAS;AAAA,MACzB,MAAM,KAAK,KAAK,MAAM,WAAW,SAAS,IAAI,EAAE;AAAA,IACpD,QAAQ,QAAQ,EACX,KAAK,MAAM,KAAK,GAAG,CAAC,EACpB,MAAM,MAAM,EAAE;AAAA;AAE3B;",
18
- "debugId": "3E6A1976705386FE64756E2164756E21",
18
+ "debugId": "DB3368A765BDA92764756E2164756E21",
19
19
  "names": []
20
20
  }
@@ -2,7 +2,7 @@
2
2
  // packages/sharding/package.json
3
3
  var package_default = {
4
4
  name: "@lunibee/sharding",
5
- version: "0.2.0",
5
+ version: "0.2.1",
6
6
  type: "module",
7
7
  module: "./src/index.ts",
8
8
  types: "./src/index.ts",
@@ -1701,4 +1701,4 @@ export {
1701
1701
  ShardManager as ShardingManager
1702
1702
  };
1703
1703
 
1704
- //# debugId=80E4CAFE56ABED2364756E2164756E21
1704
+ //# debugId=0408580D22CE9CE264756E2164756E21
@@ -19,6 +19,6 @@
19
19
  "import packageJson from \"../package.json\" with { type: \"json\" };\nimport { Gateway, GatewayState } from \"@lunibee/ws\";\n\n/** Runtime-agnostic delay used between shard starts (works under Node and Bun). @param ms Milliseconds to wait. */\nconst sleep = (ms: number): Promise<void> =>\n new Promise<void>((resolve) => setTimeout(resolve, ms));\n\nexport { ShardBus } from \"./bus.js\";\nexport type {\n ShardBusErrorHandler,\n ShardMessage,\n ShardMessageHandler,\n ShardReply,\n} from \"./bus.js\";\n\nexport { ClusterManager } from \"./cluster.js\";\nexport type { ClusterManagerOptions, ClusterInfo } from \"./cluster.js\";\n\n/** Whether a shard has no live socket, so connecting it costs an IDENTIFY. */\nfunction needsConnection(gateway: Gateway): boolean {\n return (\n gateway.state === GatewayState.Connect ||\n gateway.state === GatewayState.Reconnect ||\n gateway.state === GatewayState.Closed\n );\n}\n\n/** States reached only after IDENTIFY or RESUME has been sent. */\nconst HANDSHAKE_SENT = new Set<string>([\n GatewayState.Identify,\n GatewayState.Resume,\n GatewayState.Ready,\n GatewayState.Dispatch,\n GatewayState.Heartbeat,\n GatewayState.Closed,\n]);\n\n/** Resolves once the shard has sent IDENTIFY/RESUME (or closed), or after `timeout` ms. */\nfunction handshakeSent(gateway: Gateway, timeout: number): Promise<void> {\n if (HANDSHAKE_SENT.has(gateway.state)) return Promise.resolve();\n return new Promise((resolve) => {\n const done = (): void => {\n clearTimeout(timer);\n gateway.off(\"stateChange\", onState);\n resolve();\n };\n const onState = (change: unknown): void => {\n if (HANDSHAKE_SENT.has((change as { next: string }).next)) done();\n };\n const timer = setTimeout(done, timeout);\n gateway.on(\"stateChange\", onState);\n });\n}\n\n/** Configuration for a sharded Gateway client. */\nexport interface ShardManagerOptions {\n /** Bot token. */ token: string;\n /** Gateway intents. */ intents: number;\n /** Number of shards. Use `\"auto\"` to request Discord's recommended count. */ shardCount?:\n number | \"auto\";\n /** Gateway reconnect behavior. */ reconnect?: boolean;\n /**\n * Delay between shard starts in milliseconds. Defaults to 5000 to respect\n * Discord's IDENTIFY rate limit (one per 5s per rate-limit key); set 0 to\n * opt out when an external scheduler already paces the handshakes.\n */ spawnDelay?: number;\n /**\n * Shards that may IDENTIFY at once (Discord's `max_concurrency`). Defaults\n * to the value from `/gateway/bot` when it was fetched (auto shard count),\n * else 1.\n */ maxConcurrency?: number;\n /**\n * How long a startup round waits for its shards to send IDENTIFY/RESUME\n * before the next round's `spawnDelay` starts. Defaults to 15000 ms.\n */ handshakeTimeout?: number;\n /** Interval in milliseconds to automatically check for recommended shard count and re-scale if needed. Must be an integer >= 1000. */ autoScaleInterval?: number;\n /** Optional handler invoked when a background auto-scale check fails. Receives the thrown error. */ onAutoScaleError?: (\n error: unknown,\n ) => void;\n}\n/** `/gateway/bot` information used to pace shard startup. */\nexport interface GatewayBotInfo {\n /** Recommended shard count. */ shards: number;\n /** IDENTIFY budget, when Discord reported it. */ sessionStartLimit?: {\n total: number;\n remaining: number;\n /** Milliseconds until `remaining` resets. */ resetAfter: number;\n maxConcurrency: number;\n };\n}\n/** Health snapshot for one shard. */\nexport interface ShardHealth {\n id: number;\n /** Gateway connection state. */ state: Gateway[\"state\"];\n /** Last heartbeat round-trip in ms, or -1 before the first ACK. */ ping: number;\n}\n/** Runtime state for a managed shard. */\nexport interface ShardInfo {\n /** Shard identifier. */ id: number;\n /** Gateway instance. */ gateway: Gateway;\n}\n\n/** Manages independent Discord Gateway shards with explicit destruction and reinitialization semantics. */\nexport class ShardManager {\n /** Discord's minimum interval between IDENTIFY payloads, in milliseconds. */\n public static readonly IDENTIFY_INTERVAL = 5000;\n /** Active Gateway shards indexed by shard identifier. */ public readonly shards =\n new Map<number, Gateway>();\n /** Number of shards managed by this instance after initialization. */ public get shardCount(): number {\n return this.shards.size;\n }\n readonly #options: ShardManagerOptions;\n /** Whether the shard set has been initialized. */ #resolved = false;\n /** Whether this manager is currently destroyed. */ #destroyed = false;\n /** Whether the manager was created in auto shard-count mode. Preserved across reshards so auto-scaling keeps running. */\n readonly #auto: boolean;\n #autoScaleTimer?: ReturnType<typeof setInterval>;\n /** Last `/gateway/bot` answer, used for concurrency and the start limit. */\n #gatewayInfo?: GatewayBotInfo;\n /** Creates a shard manager. @param options Sharding configuration. @throws {TypeError} If token or intents are invalid. @throws {RangeError} If shard count is invalid. */\n public constructor(options: ShardManagerOptions) {\n if (!options.token?.trim())\n throw new TypeError(\"A Discord bot token is required.\");\n if (!Number.isInteger(options.intents) || options.intents < 0)\n throw new TypeError(\n \"Gateway intents must be a non-negative integer.\",\n );\n const count =\n options.shardCount === \"auto\" || options.shardCount === undefined\n ? 1\n : options.shardCount;\n if (!Number.isInteger(count) || count < 1)\n throw new RangeError(\"Shard count must be a positive integer.\");\n if (\n options.autoScaleInterval !== undefined &&\n (!Number.isInteger(options.autoScaleInterval) ||\n options.autoScaleInterval < 1000)\n )\n throw new RangeError(\n \"autoScaleInterval must be an integer of at least 1000 milliseconds.\",\n );\n if (\n options.spawnDelay !== undefined &&\n (!Number.isFinite(options.spawnDelay) || options.spawnDelay < 0)\n )\n throw new RangeError(\n \"spawnDelay must be a non-negative finite number of milliseconds.\",\n );\n if (\n options.maxConcurrency !== undefined &&\n (!Number.isInteger(options.maxConcurrency) ||\n options.maxConcurrency < 1)\n )\n throw new RangeError(\"maxConcurrency must be a positive integer.\");\n if (\n options.handshakeTimeout !== undefined &&\n (!Number.isFinite(options.handshakeTimeout) ||\n options.handshakeTimeout < 0)\n )\n throw new RangeError(\n \"handshakeTimeout must be a non-negative number of milliseconds.\",\n );\n this.#auto = options.shardCount === \"auto\";\n // Discord allows one IDENTIFY per 5s per rate-limit key. Spawning\n // shards back-to-back trips that limit and the gateway answers with\n // close 4008 / invalid session, so 5s is the default rather than an\n // opt-in.\n this.#options = {\n spawnDelay: ShardManager.IDENTIFY_INTERVAL,\n ...options,\n };\n if (options.shardCount !== \"auto\") this.#initialize(count);\n }\n /** Retrieves Discord's recommended shard count. @returns Recommended shard count. @throws {Error} If discovery fails or returns invalid data. */\n public async fetchRecommendedShardCount(): Promise<number> {\n return (await this.fetchGatewayInfo()).shards;\n }\n /** Retrieves `/gateway/bot`: recommended shards and the IDENTIFY budget. Remembered for pacing the next connect. @throws {Error} If discovery fails or returns invalid data. */\n public async fetchGatewayInfo(): Promise<GatewayBotInfo> {\n const response = await fetch(\n \"https://discord.com/api/v10/gateway/bot\",\n {\n headers: {\n Authorization: `Bot ${this.#options.token}`,\n \"User-Agent\": `Lunibee/${packageJson.version}`,\n },\n },\n );\n if (!response.ok)\n throw new Error(\n `Gateway discovery failed with status ${response.status}`,\n );\n const data = (await response.json()) as {\n shards?: unknown;\n session_start_limit?: {\n total?: unknown;\n remaining?: unknown;\n reset_after?: unknown;\n max_concurrency?: unknown;\n };\n };\n if (\n typeof data.shards !== \"number\" ||\n !Number.isInteger(data.shards) ||\n data.shards < 1\n )\n throw new Error(\n \"Gateway discovery returned an invalid shard count.\",\n );\n const limit = data.session_start_limit;\n const info: GatewayBotInfo = { shards: data.shards };\n if (\n limit &&\n typeof limit.total === \"number\" &&\n typeof limit.remaining === \"number\" &&\n typeof limit.reset_after === \"number\" &&\n typeof limit.max_concurrency === \"number\"\n )\n info.sessionStartLimit = {\n total: limit.total,\n remaining: limit.remaining,\n resetAfter: limit.reset_after,\n maxConcurrency: Math.max(1, limit.max_concurrency),\n };\n this.#gatewayInfo = info;\n return info;\n }\n /** Connects all shards sequentially. A destroyed manager is reinitialized before connecting. @returns A promise fulfilled after all shards connect. @throws {Error} If a shard fails to connect. */\n public async connect(): Promise<void> {\n // Clear any timer from a previous connect() so a second call cannot leak one.\n if (this.#autoScaleTimer) {\n clearInterval(this.#autoScaleTimer);\n this.#autoScaleTimer = undefined;\n }\n await this.#ensureInitialized();\n const limit = this.#gatewayInfo?.sessionStartLimit;\n // Only shards without a live socket spend an IDENTIFY; connect() is a\n // no-op for the rest, so they are neither counted nor paced.\n const ids = [...this.shards]\n .filter(([, gateway]) => needsConnection(gateway))\n .map(([id]) => id);\n if (limit && limit.remaining < ids.length)\n // Live shards are left running: the budget only blocks new ones.\n throw new Error(\n `Session start limit exhausted: ${limit.remaining} of ${limit.total} IDENTIFYs left for ${ids.length} shards; resets in ${Math.ceil(limit.resetAfter / 1000)}s.`,\n );\n // Shards whose IDs differ modulo max_concurrency use different\n // IDENTIFY rate-limit keys, so each round of consecutive IDs may start\n // together; rounds are spaced by spawnDelay. An override may lower the\n // concurrency but never exceed what Discord reported.\n const concurrency = Math.min(\n this.#options.maxConcurrency ?? limit?.maxConcurrency ?? 1,\n limit?.maxConcurrency ?? Infinity,\n );\n for (let start = 0; start < ids.length; start += concurrency) {\n const round = ids.slice(start, start + concurrency);\n const results = await Promise.allSettled(\n round.map((id) => this.shards.get(id)!.connect()),\n );\n const failed = results.findIndex(\n (result) => result.status === \"rejected\",\n );\n if (failed !== -1) {\n this.destroy();\n throw new Error(`Failed to connect shard ${round[failed]}.`, {\n cause: (results[failed] as PromiseRejectedResult).reason,\n });\n }\n if (\n start + concurrency < ids.length &&\n this.#options.spawnDelay &&\n this.#options.spawnDelay > 0\n ) {\n // connect() resolves when the socket opens; IDENTIFY follows\n // HELLO. Start the interval from the handshake itself so a late\n // HELLO cannot squeeze two rounds' IDENTIFYs together.\n await Promise.all(\n round.map((id) =>\n handshakeSent(\n this.shards.get(id)!,\n this.#options.handshakeTimeout ?? 15_000,\n ),\n ),\n );\n await sleep(this.#options.spawnDelay);\n }\n }\n if (this.#options.autoScaleInterval && !this.#autoScaleTimer) {\n this.#autoScaleTimer = setInterval(() => {\n void this.checkAutoScale();\n }, this.#options.autoScaleInterval);\n }\n }\n /** Checks if the recommended shard count has changed and reconnects if so. */\n public async checkAutoScale(): Promise<void> {\n if (!this.#auto) return;\n try {\n const recommended = await this.fetchRecommendedShardCount();\n if (recommended !== this.shardCount) {\n await this.reshard(recommended);\n }\n } catch (error) {\n // Surface the failure instead of silently swallowing it; the next\n // interval tick retries.\n this.#options.onAutoScaleError?.(error);\n }\n }\n /** Forces a reshard to a new shard count, replacing all active shards. @param count New shard count. */\n public async reshard(count: number): Promise<void> {\n this.#options.shardCount = count;\n this.destroy();\n await this.connect();\n }\n /** Permanently closes the current shard set and releases Gateway resources. The next connect recreates them. @returns Nothing. */\n public destroy(): void {\n for (const shard of this.shards.values()) shard.close();\n this.shards.clear();\n this.#resolved = false;\n this.#destroyed = true;\n if (this.#autoScaleTimer) {\n clearInterval(this.#autoScaleTimer);\n this.#autoScaleTimer = undefined;\n }\n }\n /** Calculates the target shard ID for a Discord guild snowflake. @param guildId Guild snowflake. @returns Shard identifier. */\n public getShardIdForGuild(guildId: string): number {\n const id = BigInt(guildId);\n return Number((id >> 22n) % BigInt(this.shardCount || 1));\n }\n /** Gets a shard by ID. @param id Shard identifier. @returns Gateway instance or undefined. */ public get(\n id: number,\n ): Gateway | undefined {\n return this.shards.get(id);\n }\n /** Returns each shard's connection state and heartbeat latency. */\n public health(): ShardHealth[] {\n return [...this.shards].map(([id, gateway]) => ({\n id,\n state: gateway.state,\n ping: gateway.ping,\n }));\n }\n /** Returns information for all managed shards. @returns Shard information snapshots. */ public values(): ShardInfo[] {\n return [...this.shards].map(([id, gateway]) => ({ id, gateway }));\n }\n /** Ensures a live shard set exists. @returns A promise fulfilled after initialization. @throws {Error} If initialization fails. */\n async #ensureInitialized(): Promise<void> {\n if (this.#resolved) return;\n if (this.#destroyed) this.#destroyed = false;\n const count =\n this.#options.shardCount === \"auto\"\n ? await this.fetchRecommendedShardCount()\n : (this.#options.shardCount ?? 1);\n this.#initialize(count);\n }\n /** Creates every shard for a resolved shard count. @param count Number of shards. @returns Nothing. */\n #initialize(count: number): void {\n if (this.#resolved) return;\n for (let id = 0; id < count; id++)\n this.shards.set(id, this.#createShard(id, count));\n this.#resolved = true;\n }\n /** Creates one Gateway instance with its shard identity. @param id Shard identifier. @param count Total shard count. @returns Configured Gateway. */\n #createShard(id: number, count: number): Gateway {\n return new Gateway({\n token: this.#options.token,\n intents: this.#options.intents,\n shardId: id,\n shardCount: count,\n reconnect: this.#options.reconnect ?? true,\n });\n }\n}\n\n/** Discord.js-familiar alias for {@link ShardManager}. */\nexport { ShardManager as ShardingManager };\n"
20
20
  ],
21
21
  "mappings": "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",
22
- "debugId": "80E4CAFE56ABED2364756E2164756E21",
22
+ "debugId": "0408580D22CE9CE264756E2164756E21",
23
23
  "names": []
24
24
  }
@@ -24,7 +24,32 @@ export interface ResourceContext {
24
24
  removeAllReactions?(channelId: string, messageId: string): Promise<void>;
25
25
  pinMessage?(channelId: string, messageId: string): Promise<void>;
26
26
  unpinMessage?(channelId: string, messageId: string): Promise<void>;
27
+ /**
28
+ * A member's permissions from cached state: guild-level, or channel-level
29
+ * (with overwrites) when a channel ID is given. Null when the guild (or
30
+ * channel) is not cached.
31
+ */
32
+ memberPermissions?(guildId: string, memberId: string, roleIds: readonly string[], channelId?: string): import("@lunibee/core").PermissionSet | null;
33
+ kickMember?(guildId: string, userId: string, reason?: string): Promise<void>;
34
+ banMember?(guildId: string, userId: string, options?: {
35
+ reason?: string;
36
+ deleteMessageSeconds?: number;
37
+ }): Promise<void>;
38
+ editMember?(guildId: string, userId: string, options: Record<string, unknown>, reason?: string): Promise<import("./resources.js").GuildMember>;
39
+ addMemberRole?(guildId: string, userId: string, roleId: string, reason?: string): Promise<void>;
40
+ removeMemberRole?(guildId: string, userId: string, roleId: string, reason?: string): Promise<void>;
41
+ /** Collects the client's interactions (a `Collector` over `interactionCreate`). Used by message and interaction collectors. */
42
+ collectInteractions?(options: import("@lunibee/core").CollectorOptions<import("./interactions.js").Interaction>): import("@lunibee/core").Collector<string, import("./interactions.js").Interaction>;
43
+ editPermissionOverwrite?(channelId: string, targetId: string, changes: PermissionOverwriteChanges, options?: {
44
+ type?: 0 | 1;
45
+ reason?: string;
46
+ }): Promise<void>;
27
47
  }
48
+ /**
49
+ * Permissions to change on one overwrite: `true` allows, `false` denies,
50
+ * `null` goes back to inheriting. Permissions not named keep their state.
51
+ */
52
+ export type PermissionOverwriteChanges = Partial<Record<import("@lunibee/core").PermissionName, boolean | null>>;
28
53
  export declare const CDN_BASE = "https://cdn.discordapp.com";
29
54
  /** Options for CDN image URLs. */
30
55
  export interface ImageURLOptions {
@@ -86,6 +111,17 @@ export declare class Channel extends BaseStructure {
86
111
  /** Changes only this channel's topic. @param topic New topic, or null to clear it. @returns The updated channel. @throws {Error} If the channel is not attached to a client. */
87
112
  editTopic(topic: string | null): Promise<Channel>;
88
113
  /** Moves this channel to another parent category. @param parentId Parent category ID, or null to remove the parent. @returns The updated channel. @throws {Error} If the channel is not attached to a client. */
114
+ /**
115
+ * Changes some permissions of one overwrite and keeps the rest: `true`
116
+ * allows, `false` denies, `null` resets to inherited.
117
+ * @param targetId Role or member ID. @param changes Permissions to change.
118
+ * @param options `type` (0 role, 1 member) when the overwrite does not exist yet; audit-log `reason`.
119
+ * @example channel.editPermissionOverwrite(userId, { ViewChannel: true, SendMessages: false }, { type: 1 })
120
+ */
121
+ editPermissionOverwrite(targetId: string, changes: PermissionOverwriteChanges, options?: {
122
+ type?: 0 | 1;
123
+ reason?: string;
124
+ }): Promise<void>;
89
125
  editParent(parentId: string | null): Promise<Channel>;
90
126
  /** Deletes this channel. @returns A promise fulfilled when Discord confirms deletion. @throws {Error} If the channel is not attached to a client. */
91
127
  delete(): Promise<void>;
@@ -1,5 +1,13 @@
1
1
  /** Resource structures for Discord messages and related entities. */
2
2
  import { BaseStructure, Channel, User } from "./base.js";
3
+ import { GuildMember } from "./resources.js";
4
+ import type { ComponentInteraction } from "./interactions.js";
5
+ import type { Collector, CollectorOptions } from "@lunibee/core";
6
+ /** Options for {@link Message.createComponentCollector}. */
7
+ export interface ComponentCollectorOptions extends CollectorOptions<ComponentInteraction> {
8
+ /** Only this component type (2 button, 3 string select...). */
9
+ componentType?: number;
10
+ }
3
11
  import type { ResourceContext } from "./base.js";
4
12
  export { BaseStructure, Channel, Guild, User } from "./base.js";
5
13
  export type { ResourceContext } from "./base.js";
@@ -23,6 +31,12 @@ export declare class Message extends BaseStructure {
23
31
  readonly reference?: import("@lunibee/types").APIMessageReference;
24
32
  readonly components: import("@lunibee/types").APIMessageComponent[];
25
33
  readonly referencedMessage?: Message | null;
34
+ /**
35
+ * The author as a guild member, on guild messages from the Gateway. Its
36
+ * `permissions` are computed from the cached roles; `member.kick()` and the
37
+ * other member actions work when the message came from a client.
38
+ */
39
+ member: GuildMember | null;
26
40
  /** Creates a message structure from Discord message data. */
27
41
  constructor(data: import("@lunibee/types").APIMessage, context?: ResourceContext);
28
42
  /** Whether embeds are suppressed on this message. */
@@ -49,6 +63,21 @@ export declare class Message extends BaseStructure {
49
63
  })): Promise<Message>;
50
64
  /** Crossposts this message. @returns The resulting message. @throws {Error} If the message is not attached to a client. */
51
65
  crosspost(): Promise<Message>;
66
+ /**
67
+ * Collects clicks and picks on this message's components. It always ends:
68
+ * after `time`, or 15 minutes (an interaction token's life) when neither
69
+ * `time` nor `idle` is set.
70
+ * @example
71
+ * const collector = message.createComponentCollector({ filter: (i) => i.user?.id === authorId, time: 60_000 });
72
+ * collector.on("collect", (i) => i.update({ content: `Picked ${i.customId}` }));
73
+ */
74
+ createComponentCollector(options?: ComponentCollectorOptions): Collector<string, ComponentInteraction>;
75
+ /**
76
+ * Waits for the next click or pick on this message's components.
77
+ * @param options `time` (default 15 minutes), `filter`, `componentType`.
78
+ * @returns The interaction. @throws {Error} When time runs out first.
79
+ */
80
+ awaitComponent(options?: Omit<ComponentCollectorOptions, "max">): Promise<ComponentInteraction>;
52
81
  /** Adds a reaction to this message. @param emoji Emoji identifier. @returns A promise fulfilled when the reaction is added. @throws {Error} If reactions are unavailable. */
53
82
  react(emoji: string): Promise<void>;
54
83
  /** Removes a reaction from this message. @param emoji Emoji identifier. @param userId User whose reaction should be removed; omit to remove the current user's reaction. @returns A promise fulfilled when the reaction is removed. @throws {Error} If reaction operations are unavailable. */