lunibee 0.3.0 → 0.3.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.
Files changed (38) hide show
  1. package/dist/builders/embed.d.ts +1 -0
  2. package/dist/builders/index.js +6 -2
  3. package/dist/builders/index.js.map +4 -4
  4. package/dist/core/index.js +66 -15
  5. package/dist/core/index.js.map +8 -8
  6. package/dist/index.js +2345 -199
  7. package/dist/index.js.map +22 -14
  8. package/dist/managers/index.js +2 -2
  9. package/dist/managers/index.js.map +3 -3
  10. package/dist/rest/errors.d.ts +8 -0
  11. package/dist/rest/index.d.ts +2 -0
  12. package/dist/rest/index.js +65 -14
  13. package/dist/rest/index.js.map +5 -5
  14. package/dist/rest/transport.d.ts +9 -0
  15. package/dist/sharding/bus.d.ts +8 -0
  16. package/dist/sharding/cluster.d.ts +224 -14
  17. package/dist/sharding/context.d.ts +41 -0
  18. package/dist/sharding/gateway-bot.d.ts +20 -0
  19. package/dist/sharding/health.d.ts +94 -0
  20. package/dist/sharding/host.d.ts +70 -0
  21. package/dist/sharding/identify.d.ts +62 -0
  22. package/dist/sharding/index.d.ts +56 -12
  23. package/dist/sharding/index.js +2255 -164
  24. package/dist/sharding/index.js.map +18 -10
  25. package/dist/sharding/protocol.d.ts +47 -0
  26. package/dist/sharding/remote-protocol.d.ts +100 -0
  27. package/dist/sharding/remote.d.ts +118 -0
  28. package/dist/sharding/requests.d.ts +54 -0
  29. package/dist/sharding/worker.d.ts +45 -0
  30. package/dist/structures/index.js +2 -2
  31. package/dist/structures/index.js.map +3 -3
  32. package/dist/types/gateway.d.ts +3 -0
  33. package/dist/types/index.js.map +1 -1
  34. package/dist/ws/index.d.ts +1 -1
  35. package/dist/ws/index.js +2 -2
  36. package/dist/ws/index.js.map +5 -5
  37. package/dist/ws/send-budget.d.ts +1 -1
  38. package/package.json +18 -16
package/dist/index.js.map CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../packages/core/src/permissions.ts", "../packages/core/src/events.ts", "../packages/core/src/collector.ts", "../packages/core/src/api.ts", "../packages/builders/src/embed.ts", "../packages/types/src/channel-kind.ts", "../packages/types/src/gateway.ts", "../packages/types/src/index.ts", "../packages/builders/src/components.ts", "../packages/builders/src/commands.ts", "../packages/builders/src/attachment.ts", "../packages/utils/src/args.ts", "../packages/utils/src/index.ts", "../packages/core/src/commands.ts", "../packages/core/src/channel-create.ts", "../packages/core/src/handles.ts", "../packages/collection/src/cache.ts", "../packages/collection/src/index.ts", "../packages/managers/src/base.ts", "../packages/rest/src/store.ts", "../packages/rest/src/errors.ts", "../packages/rest/src/route.ts", "../packages/rest/src/scheduler.ts", "../packages/rest/src/limiter.ts", "../packages/rest/src/transport.ts", "../packages/rest/src/decoder.ts", "../packages/rest/src/routes.ts", "../packages/rest/src/error-codes.ts", "../packages/rest/src/redis.ts", "../packages/rest/src/webhook.ts", "../packages/rest/src/index.ts", "../packages/structures/src/base.ts", "../packages/structures/src/resources.ts", "../packages/structures/src/channels.ts", "../packages/structures/src/options.ts", "../packages/structures/src/interactions.ts", "../packages/structures/src/embed.ts", "../packages/structures/src/audit-log.ts", "../packages/structures/src/sticker.ts", "../packages/structures/src/index.ts", "../packages/managers/src/message.ts", "../packages/managers/src/thread.ts", "../packages/managers/src/user.ts", "../packages/managers/src/emoji.ts", "../packages/managers/src/advanced.ts", "../packages/managers/src/member.ts", "../packages/managers/src/role.ts", "../packages/managers/src/guild-resources.ts", "../packages/managers/src/guild.ts", "../packages/managers/src/application.ts", "../packages/managers/src/index.ts", "../packages/ws/src/session.ts", "../packages/ws/src/heartbeat.ts", "../packages/ws/src/close-codes.ts", "../packages/ws/src/reconnect.ts", "../packages/ws/src/decoder.ts", "../packages/ws/src/transport.ts", "../packages/ws/src/opcodes.ts", "../packages/ws/src/protocol.ts", "../packages/ws/src/dispatcher.ts", "../packages/ws/src/send-budget.ts", "../packages/ws/src/state.ts", "../packages/ws/src/index.ts", "../packages/core/src/index.ts", "../packages/formatters/src/index.ts", "../packages/handlers/src/index.ts", "../packages/sharding/src/gateway-bot.ts", "../packages/sharding/src/transport.ts", "../packages/sharding/src/bus.ts", "../packages/sharding/src/supervisor.ts", "../packages/sharding/src/cluster.ts", "../packages/sharding/src/index.ts", "../packages/voice/src/index.ts"],
3
+ "sources": ["../packages/core/src/permissions.ts", "../packages/core/src/events.ts", "../packages/core/src/collector.ts", "../packages/core/src/api.ts", "../packages/builders/src/embed.ts", "../packages/types/src/channel-kind.ts", "../packages/types/src/gateway.ts", "../packages/types/src/index.ts", "../packages/builders/src/components.ts", "../packages/builders/src/commands.ts", "../packages/builders/src/attachment.ts", "../packages/utils/src/args.ts", "../packages/utils/src/index.ts", "../packages/core/src/commands.ts", "../packages/core/src/channel-create.ts", "../packages/core/src/handles.ts", "../packages/collection/src/cache.ts", "../packages/collection/src/index.ts", "../packages/managers/src/base.ts", "../packages/rest/src/store.ts", "../packages/rest/src/errors.ts", "../packages/rest/src/route.ts", "../packages/rest/src/scheduler.ts", "../packages/rest/src/limiter.ts", "../packages/rest/src/transport.ts", "../packages/rest/src/decoder.ts", "../packages/rest/src/routes.ts", "../packages/rest/src/error-codes.ts", "../packages/rest/src/redis.ts", "../packages/rest/src/webhook.ts", "../packages/rest/src/index.ts", "../packages/structures/src/base.ts", "../packages/structures/src/resources.ts", "../packages/structures/src/channels.ts", "../packages/structures/src/options.ts", "../packages/structures/src/interactions.ts", "../packages/structures/src/embed.ts", "../packages/structures/src/audit-log.ts", "../packages/structures/src/sticker.ts", "../packages/structures/src/index.ts", "../packages/managers/src/message.ts", "../packages/managers/src/thread.ts", "../packages/managers/src/user.ts", "../packages/managers/src/emoji.ts", "../packages/managers/src/advanced.ts", "../packages/managers/src/member.ts", "../packages/managers/src/role.ts", "../packages/managers/src/guild-resources.ts", "../packages/managers/src/guild.ts", "../packages/managers/src/application.ts", "../packages/managers/src/index.ts", "../packages/ws/src/session.ts", "../packages/ws/src/heartbeat.ts", "../packages/ws/src/close-codes.ts", "../packages/ws/src/reconnect.ts", "../packages/ws/src/decoder.ts", "../packages/ws/src/transport.ts", "../packages/ws/src/opcodes.ts", "../packages/ws/src/protocol.ts", "../packages/ws/src/dispatcher.ts", "../packages/ws/src/send-budget.ts", "../packages/ws/src/state.ts", "../packages/ws/src/index.ts", "../packages/core/src/index.ts", "../packages/formatters/src/index.ts", "../packages/handlers/src/index.ts", "../packages/sharding/src/gateway-bot.ts", "../packages/sharding/src/context.ts", "../packages/sharding/src/protocol.ts", "../packages/sharding/src/worker.ts", "../packages/sharding/src/transport.ts", "../packages/sharding/src/bus.ts", "../packages/sharding/src/supervisor.ts", "../packages/sharding/src/cluster.ts", "../packages/sharding/src/identify.ts", "../packages/sharding/src/remote.ts", "../packages/sharding/src/remote-protocol.ts", "../packages/sharding/src/requests.ts", "../packages/sharding/src/host.ts", "../packages/sharding/src/index.ts", "../packages/voice/src/index.ts"],
4
4
  "sourcesContent": [
5
5
  "/** Permission overwrite target types. */\nexport enum PermissionOverwriteEnum {\n Role = 0,\n Member = 1,\n}\n\n/** Lunibee idiomatic camelCase permission bitflags. */\nexport const Permission = {\n createInstantInvite: 1n << 0n,\n kickMembers: 1n << 1n,\n banMembers: 1n << 2n,\n administrator: 1n << 3n,\n manageChannels: 1n << 4n,\n manageGuild: 1n << 5n,\n addReactions: 1n << 6n,\n viewAuditLog: 1n << 7n,\n prioritySpeaker: 1n << 8n,\n stream: 1n << 9n,\n viewChannel: 1n << 10n,\n sendMessages: 1n << 11n,\n sendTTSMessages: 1n << 12n,\n manageMessages: 1n << 13n,\n embedLinks: 1n << 14n,\n attachFiles: 1n << 15n,\n readMessageHistory: 1n << 16n,\n mentionEveryone: 1n << 17n,\n useExternalEmojis: 1n << 18n,\n viewGuildInsights: 1n << 19n,\n connect: 1n << 20n,\n speak: 1n << 21n,\n muteMembers: 1n << 22n,\n deafenMembers: 1n << 23n,\n moveMembers: 1n << 24n,\n useVAD: 1n << 25n,\n changeNickname: 1n << 26n,\n manageNicknames: 1n << 27n,\n manageRoles: 1n << 28n,\n manageWebhooks: 1n << 29n,\n manageGuildExpressions: 1n << 30n,\n useApplicationCommands: 1n << 31n,\n requestToSpeak: 1n << 32n,\n manageEvents: 1n << 33n,\n manageThreads: 1n << 34n,\n createPublicThreads: 1n << 35n,\n createPrivateThreads: 1n << 36n,\n useExternalStickers: 1n << 37n,\n sendMessagesInThreads: 1n << 38n,\n useEmbeddedActivities: 1n << 39n,\n moderateMembers: 1n << 40n,\n viewCreatorMonetizationAnalytics: 1n << 41n,\n useSoundboard: 1n << 42n,\n createGuildExpressions: 1n << 43n,\n createEvents: 1n << 44n,\n useExternalSounds: 1n << 45n,\n sendVoiceMessages: 1n << 46n,\n setVoiceChannelStatus: 1n << 48n,\n sendPolls: 1n << 49n,\n useExternalApps: 1n << 50n,\n pinMessages: 1n << 51n,\n bypassSlowmode: 1n << 52n,\n} as const;\n\n/** Canonical PascalCase permission constants. */\nexport const Permissions = {\n CreateInstantInvite: 1n << 0n,\n KickMembers: 1n << 1n,\n BanMembers: 1n << 2n,\n Administrator: 1n << 3n,\n ManageChannels: 1n << 4n,\n ManageGuild: 1n << 5n,\n AddReactions: 1n << 6n,\n ViewAuditLog: 1n << 7n,\n PrioritySpeaker: 1n << 8n,\n Stream: 1n << 9n,\n ViewChannel: 1n << 10n,\n SendMessages: 1n << 11n,\n SendTTSMessages: 1n << 12n,\n ManageMessages: 1n << 13n,\n EmbedLinks: 1n << 14n,\n AttachFiles: 1n << 15n,\n ReadMessageHistory: 1n << 16n,\n MentionEveryone: 1n << 17n,\n UseExternalEmojis: 1n << 18n,\n ViewGuildInsights: 1n << 19n,\n Connect: 1n << 20n,\n Speak: 1n << 21n,\n MuteMembers: 1n << 22n,\n DeafenMembers: 1n << 23n,\n MoveMembers: 1n << 24n,\n UseVAD: 1n << 25n,\n ChangeNickname: 1n << 26n,\n ManageNicknames: 1n << 27n,\n ManageRoles: 1n << 28n,\n ManageWebhooks: 1n << 29n,\n ManageGuildExpressions: 1n << 30n,\n UseApplicationCommands: 1n << 31n,\n RequestToSpeak: 1n << 32n,\n ManageEvents: 1n << 33n,\n ManageThreads: 1n << 34n,\n CreatePublicThreads: 1n << 35n,\n CreatePrivateThreads: 1n << 36n,\n UseExternalStickers: 1n << 37n,\n SendMessagesInThreads: 1n << 38n,\n UseEmbeddedActivities: 1n << 39n,\n ModerateMembers: 1n << 40n,\n ViewCreatorMonetizationAnalytics: 1n << 41n,\n UseSoundboard: 1n << 42n,\n CreateGuildExpressions: 1n << 43n,\n CreateEvents: 1n << 44n,\n UseExternalSounds: 1n << 45n,\n SendVoiceMessages: 1n << 46n,\n SetVoiceChannelStatus: 1n << 48n,\n SendPolls: 1n << 49n,\n UseExternalApps: 1n << 50n,\n PinMessages: 1n << 51n,\n BypassSlowmode: 1n << 52n,\n} as const;\n\n/**\n * Permission flag bits with **bigint** values matching Discord's permission bit\n * positions. Mirrors discord.js's `PermissionFlagsBits`, so bitwise composition\n * (`Flags.A | Flags.B`) OR-s the bits instead of concatenating strings.\n *\n * The same object as {@link Permissions}, under the discord.js name. It is a\n * `const` object rather than a TS `enum` because enums cannot hold bigint\n * members; the same-named union type below preserves usage as a type.\n */\nexport const PermissionFlagsBits = Permissions;\n\n/** Union of {@link PermissionFlagsBits} values (all bigint). */\nexport type PermissionFlagsBits =\n (typeof PermissionFlagsBits)[keyof typeof PermissionFlagsBits];\n\nexport type PermissionName =\n | keyof typeof Permission\n | keyof typeof Permissions\n | keyof typeof PermissionFlagsBits;\n\nexport type PermissionResolvable =\n | bigint\n | number\n | string\n | PermissionName\n | PermissionFlagsBits\n | PermissionSet\n | PermissionResolvable[];\n\n/** Immutable permission bitfield with direct boolean getters. */\nexport class PermissionSet {\n /** Permission bitfield. */\n public readonly bitfield: bigint;\n\n /** Creates a permission set. @param value Initial permission bitfield or array of permissions. @throws {RangeError} If the value is negative. @throws {TypeError} If the value is not a valid integer. */\n public constructor(value: PermissionResolvable = 0n) {\n try {\n if (Array.isArray(value)) {\n let bit = 0n;\n for (const item of value) {\n bit |= this.#resolve(item);\n }\n this.bitfield = bit;\n } else if (value instanceof PermissionSet) {\n this.bitfield = value.bitfield;\n } else {\n const bitfield = this.#resolve(value);\n if (bitfield < 0n)\n throw new RangeError(\n \"Permission bitfield cannot be negative.\",\n );\n this.bitfield = bitfield;\n }\n } catch (error) {\n if (error instanceof RangeError) throw error;\n throw new TypeError(\n \"Permission bitfield must be a valid non-negative integer.\",\n { cause: error },\n );\n }\n }\n\n // Direct camelCase boolean getters for instant checks (e.g. member.permissions.kickMembers)\n public get createInstantInvite(): boolean {\n return (\n (this.bitfield & Permission.createInstantInvite) ===\n Permission.createInstantInvite\n );\n }\n public get kickMembers(): boolean {\n return (\n (this.bitfield & Permission.kickMembers) === Permission.kickMembers\n );\n }\n public get banMembers(): boolean {\n return (\n (this.bitfield & Permission.banMembers) === Permission.banMembers\n );\n }\n public get administrator(): boolean {\n return (\n (this.bitfield & Permission.administrator) ===\n Permission.administrator\n );\n }\n public get manageChannels(): boolean {\n return (\n (this.bitfield & Permission.manageChannels) ===\n Permission.manageChannels\n );\n }\n public get manageGuild(): boolean {\n return (\n (this.bitfield & Permission.manageGuild) === Permission.manageGuild\n );\n }\n public get addReactions(): boolean {\n return (\n (this.bitfield & Permission.addReactions) ===\n Permission.addReactions\n );\n }\n public get viewAuditLog(): boolean {\n return (\n (this.bitfield & Permission.viewAuditLog) ===\n Permission.viewAuditLog\n );\n }\n public get prioritySpeaker(): boolean {\n return (\n (this.bitfield & Permission.prioritySpeaker) ===\n Permission.prioritySpeaker\n );\n }\n public get stream(): boolean {\n return (this.bitfield & Permission.stream) === Permission.stream;\n }\n public get viewChannel(): boolean {\n return (\n (this.bitfield & Permission.viewChannel) === Permission.viewChannel\n );\n }\n public get sendMessages(): boolean {\n return (\n (this.bitfield & Permission.sendMessages) ===\n Permission.sendMessages\n );\n }\n public get sendTTSMessages(): boolean {\n return (\n (this.bitfield & Permission.sendTTSMessages) ===\n Permission.sendTTSMessages\n );\n }\n public get manageMessages(): boolean {\n return (\n (this.bitfield & Permission.manageMessages) ===\n Permission.manageMessages\n );\n }\n public get embedLinks(): boolean {\n return (\n (this.bitfield & Permission.embedLinks) === Permission.embedLinks\n );\n }\n public get attachFiles(): boolean {\n return (\n (this.bitfield & Permission.attachFiles) === Permission.attachFiles\n );\n }\n public get readMessageHistory(): boolean {\n return (\n (this.bitfield & Permission.readMessageHistory) ===\n Permission.readMessageHistory\n );\n }\n public get mentionEveryone(): boolean {\n return (\n (this.bitfield & Permission.mentionEveryone) ===\n Permission.mentionEveryone\n );\n }\n public get useExternalEmojis(): boolean {\n return (\n (this.bitfield & Permission.useExternalEmojis) ===\n Permission.useExternalEmojis\n );\n }\n public get viewGuildInsights(): boolean {\n return (\n (this.bitfield & Permission.viewGuildInsights) ===\n Permission.viewGuildInsights\n );\n }\n public get connect(): boolean {\n return (this.bitfield & Permission.connect) === Permission.connect;\n }\n public get speak(): boolean {\n return (this.bitfield & Permission.speak) === Permission.speak;\n }\n public get muteMembers(): boolean {\n return (\n (this.bitfield & Permission.muteMembers) === Permission.muteMembers\n );\n }\n public get deafenMembers(): boolean {\n return (\n (this.bitfield & Permission.deafenMembers) ===\n Permission.deafenMembers\n );\n }\n public get moveMembers(): boolean {\n return (\n (this.bitfield & Permission.moveMembers) === Permission.moveMembers\n );\n }\n public get useVAD(): boolean {\n return (this.bitfield & Permission.useVAD) === Permission.useVAD;\n }\n public get changeNickname(): boolean {\n return (\n (this.bitfield & Permission.changeNickname) ===\n Permission.changeNickname\n );\n }\n public get manageNicknames(): boolean {\n return (\n (this.bitfield & Permission.manageNicknames) ===\n Permission.manageNicknames\n );\n }\n public get manageRoles(): boolean {\n return (\n (this.bitfield & Permission.manageRoles) === Permission.manageRoles\n );\n }\n public get manageWebhooks(): boolean {\n return (\n (this.bitfield & Permission.manageWebhooks) ===\n Permission.manageWebhooks\n );\n }\n public get manageGuildExpressions(): boolean {\n return (\n (this.bitfield & Permission.manageGuildExpressions) ===\n Permission.manageGuildExpressions\n );\n }\n public get useApplicationCommands(): boolean {\n return (\n (this.bitfield & Permission.useApplicationCommands) ===\n Permission.useApplicationCommands\n );\n }\n public get requestToSpeak(): boolean {\n return (\n (this.bitfield & Permission.requestToSpeak) ===\n Permission.requestToSpeak\n );\n }\n public get manageEvents(): boolean {\n return (\n (this.bitfield & Permission.manageEvents) ===\n Permission.manageEvents\n );\n }\n public get manageThreads(): boolean {\n return (\n (this.bitfield & Permission.manageThreads) ===\n Permission.manageThreads\n );\n }\n public get createPublicThreads(): boolean {\n return (\n (this.bitfield & Permission.createPublicThreads) ===\n Permission.createPublicThreads\n );\n }\n public get createPrivateThreads(): boolean {\n return (\n (this.bitfield & Permission.createPrivateThreads) ===\n Permission.createPrivateThreads\n );\n }\n public get useExternalStickers(): boolean {\n return (\n (this.bitfield & Permission.useExternalStickers) ===\n Permission.useExternalStickers\n );\n }\n public get sendMessagesInThreads(): boolean {\n return (\n (this.bitfield & Permission.sendMessagesInThreads) ===\n Permission.sendMessagesInThreads\n );\n }\n public get useEmbeddedActivities(): boolean {\n return (\n (this.bitfield & Permission.useEmbeddedActivities) ===\n Permission.useEmbeddedActivities\n );\n }\n public get moderateMembers(): boolean {\n return (\n (this.bitfield & Permission.moderateMembers) ===\n Permission.moderateMembers\n );\n }\n public get viewCreatorMonetizationAnalytics(): boolean {\n return (\n (this.bitfield & Permission.viewCreatorMonetizationAnalytics) ===\n Permission.viewCreatorMonetizationAnalytics\n );\n }\n public get useSoundboard(): boolean {\n return (\n (this.bitfield & Permission.useSoundboard) ===\n Permission.useSoundboard\n );\n }\n public get createGuildExpressions(): boolean {\n return (\n (this.bitfield & Permission.createGuildExpressions) ===\n Permission.createGuildExpressions\n );\n }\n public get createEvents(): boolean {\n return (\n (this.bitfield & Permission.createEvents) ===\n Permission.createEvents\n );\n }\n public get useExternalSounds(): boolean {\n return (\n (this.bitfield & Permission.useExternalSounds) ===\n Permission.useExternalSounds\n );\n }\n public get sendVoiceMessages(): boolean {\n return (\n (this.bitfield & Permission.sendVoiceMessages) ===\n Permission.sendVoiceMessages\n );\n }\n public get sendPolls(): boolean {\n return (this.bitfield & Permission.sendPolls) === Permission.sendPolls;\n }\n public get useExternalApps(): boolean {\n return (\n (this.bitfield & Permission.useExternalApps) ===\n Permission.useExternalApps\n );\n }\n\n /** Checks whether all supplied permissions are present (AND). @param permissions Permission names or raw bits. @returns True when every requested permission is present. */\n public has(...permissions: PermissionResolvable[]): boolean {\n if (permissions.length === 1) {\n const p = permissions[0]!;\n const bit = typeof p === \"bigint\" ? p : this.#resolve(p);\n return (this.bitfield & bit) === bit;\n }\n for (let i = 0; i < permissions.length; i++) {\n const p = permissions[i]!;\n const bit = typeof p === \"bigint\" ? p : this.#resolve(p);\n if ((this.bitfield & bit) !== bit) return false;\n }\n return true;\n }\n\n /** Checks whether any supplied permission is present (OR). @param permissions Permission names or raw bits. @returns True when at least one requested permission is present. */\n public any(...permissions: PermissionResolvable[]): boolean {\n if (permissions.length === 1) {\n const p = permissions[0]!;\n const bit = typeof p === \"bigint\" ? p : this.#resolve(p);\n return (this.bitfield & bit) !== 0n;\n }\n for (let i = 0; i < permissions.length; i++) {\n const p = permissions[i]!;\n const bit = typeof p === \"bigint\" ? p : this.#resolve(p);\n if ((this.bitfield & bit) !== 0n) return true;\n }\n return false;\n }\n\n /** Returns the known permission names from `permissions` that this set lacks. @param permissions Permission names or raw bits. */\n public missing(...permissions: PermissionResolvable[]): PermissionName[] {\n const wanted = new PermissionSet(permissions);\n return wanted.toArray().filter((name) => !this.has(name));\n }\n\n /** Returns a new set with permissions added. @param permissions Permission names or raw bits. @returns A new permission set. */\n public add(...permissions: PermissionResolvable[]): PermissionSet {\n let bitfield = this.bitfield;\n for (let i = 0; i < permissions.length; i++) {\n const p = permissions[i]!;\n bitfield |= typeof p === \"bigint\" ? p : this.#resolve(p);\n }\n return new PermissionSet(bitfield);\n }\n\n /** Returns a new set with permissions removed. @param permissions Permission names or raw bits. @returns A new permission set. */\n public remove(...permissions: PermissionResolvable[]): PermissionSet {\n let bitfield = this.bitfield;\n for (let i = 0; i < permissions.length; i++) {\n const p = permissions[i]!;\n bitfield &= ~(typeof p === \"bigint\" ? p : this.#resolve(p));\n }\n return new PermissionSet(bitfield);\n }\n\n /** Checks equality with another permission set or raw bitfield. @param other Permission set or raw bitfield. @returns True when both values are equal. */\n public equals(other: PermissionSet | bigint | number | string): boolean {\n return (\n this.bitfield ===\n (other instanceof PermissionSet\n ? other.bitfield\n : new PermissionSet(other).bitfield)\n );\n }\n\n /** Returns the decimal permission representation. @returns Decimal permission bitfield. */\n public toString(): string {\n return this.bitfield.toString();\n }\n\n /** Returns known permission names contained in this set. @returns Names of all enabled known permissions. */\n public toArray(): PermissionName[] {\n return (Object.keys(Permission) as PermissionName[]).filter(\n (permission) => this.has(permission),\n );\n }\n\n /** Resolves a named permission, enum value, or raw bit. @param permission Permission name, enum value, or raw bit. @returns Numeric permission bit. */\n /** Names Discord has since renamed, still accepted when resolving a permission by name. */\n static readonly #renamed: Readonly<Record<string, string>> = {\n ManageEmojisAndStickers: \"ManageGuildExpressions\",\n ManageEmojis: \"ManageGuildExpressions\",\n UseSlashCommands: \"UseApplicationCommands\",\n };\n\n #resolve(permission: PermissionResolvable): bigint {\n if (typeof permission === \"bigint\") return permission;\n if (typeof permission === \"number\") return BigInt(permission);\n if (permission instanceof PermissionSet) return permission.bitfield;\n if (Array.isArray(permission)) {\n let bit = 0n;\n for (let i = 0; i < permission.length; i++)\n bit |= this.#resolve(permission[i]!);\n return bit;\n }\n if (typeof permission === \"string\") {\n const renamed = PermissionSet.#renamed[permission];\n if (renamed) return this.#resolve(renamed);\n if (permission in Permission)\n return (Permission as Record<string, bigint>)[permission]!;\n if (permission in Permissions)\n return (Permissions as Record<string, bigint>)[permission]!;\n if (permission in PermissionFlagsBits)\n return (PermissionFlagsBits as Record<string, bigint>)[\n permission\n ]!;\n const lower =\n permission.charAt(0).toLowerCase() + permission.slice(1);\n if (lower in Permission)\n return (Permission as Record<string, bigint>)[lower]!;\n return BigInt(permission);\n }\n return 0n;\n }\n}\n\n/** Permissions bitfield alias. */\nexport class PermissionsBitField extends PermissionSet {\n /** Permission flags bits enum. */\n public static readonly Flags = PermissionFlagsBits;\n /** Permission flags constants. */\n public static readonly All = Permission;\n\n /** Creates a permissions bitfield. @param value Initial permission bitfield or array of permissions. */\n public constructor(value: PermissionResolvable = 0n) {\n super(value);\n }\n}\n\n/** Every known permission bit. */\nconst ALL_PERMISSIONS = Object.values(Permission).reduce(\n (bits, bit) => bits | bit,\n 0n,\n);\n\n/** A role as needed for permission resolution. */\nexport interface PermissionRole {\n id: string;\n permissions: PermissionResolvable;\n}\n\n/** A channel permission overwrite (Discord's `permission_overwrites` entry). */\nexport interface PermissionOverwrite {\n id: string;\n type: PermissionOverwriteEnum | number;\n allow: PermissionResolvable;\n deny: PermissionResolvable;\n}\n\n/** Everything needed to resolve a member's permissions. */\nexport interface PermissionContext {\n guildId: string;\n /** Guild owner ID; the owner has every permission. */\n ownerId?: string;\n memberId: string;\n memberRoleIds: readonly string[];\n /** Guild roles, including `@everyone` (whose ID is the guild ID). */\n roles: readonly PermissionRole[];\n /** Channel overwrites; omit for guild-level permissions. */\n overwrites?: readonly PermissionOverwrite[];\n /** When the member's timeout ends; while it is in the future the member keeps only View Channel and Read Message History. */\n timedOutUntil?: Date | number | null;\n}\n\nconst bits = (value: PermissionResolvable): bigint =>\n new PermissionSet(value).bitfield;\n\n/**\n * Resolves a member's effective permissions the way Discord does: base\n * permissions from `@everyone` and the member's roles (owner and\n * administrator get everything), then the channel's `@everyone` overwrite,\n * the combined role overwrites, and finally the member overwrite. A member\n * whose timeout has not ended keeps only View Channel and Read Message History.\n */\nexport function computePermissions(context: PermissionContext): PermissionSet {\n if (context.ownerId !== undefined && context.ownerId === context.memberId)\n return new PermissionSet(ALL_PERMISSIONS);\n const roles = new Map(context.roles.map((role) => [role.id, role]));\n let base = bits(roles.get(context.guildId)?.permissions ?? 0n);\n for (const id of context.memberRoleIds)\n base |= bits(roles.get(id)?.permissions ?? 0n);\n if (base & Permission.administrator)\n return new PermissionSet(ALL_PERMISSIONS);\n const overwrites = context.overwrites ?? [];\n const everyone = overwrites.find((o) => o.id === context.guildId);\n if (everyone) base = (base & ~bits(everyone.deny)) | bits(everyone.allow);\n const memberRoles = new Set(context.memberRoleIds);\n let allow = 0n;\n let deny = 0n;\n for (const overwrite of overwrites)\n if (\n overwrite.type === PermissionOverwriteEnum.Role &&\n overwrite.id !== context.guildId &&\n memberRoles.has(overwrite.id)\n ) {\n allow |= bits(overwrite.allow);\n deny |= bits(overwrite.deny);\n }\n base = (base & ~deny) | allow;\n const member = overwrites.find(\n (o) =>\n o.type === PermissionOverwriteEnum.Member &&\n o.id === context.memberId,\n );\n if (member) base = (base & ~bits(member.deny)) | bits(member.allow);\n // Discord: timed-out members lose every permission except View Channel and\n // Read Message History. Owners and administrators returned above.\n const until =\n context.timedOutUntil instanceof Date\n ? context.timedOutUntil.getTime()\n : (context.timedOutUntil ?? 0);\n if (until > Date.now())\n base &= Permission.viewChannel | Permission.readMessageHistory;\n return new PermissionSet(base);\n}\n",
6
6
  "import type {\n APIEntitlement,\n APISoundboardSound,\n APISticker,\n} from \"@lunibee/types\";\nimport type {\n APIAutoModerationActionExecution,\n APIAutoModerationRule,\n APIChannel,\n APIChannelPinsUpdate,\n APIGuild,\n APIGuildBanEvent,\n APIGuildEmojisUpdateEvent,\n APIGuildMember,\n APIGuildMembersChunk,\n APIGuildRoleDeleteEvent,\n APIGuildRoleEvent,\n APIGuildScheduledEvent,\n APIGuildScheduledEventUserEvent,\n APIGuildStickersUpdateEvent,\n APIInviteCreate,\n APIInviteDelete,\n APIMessageDeleteBulkEvent,\n APIMessageDeleteEvent,\n APIMessagePollVoteEvent,\n APIMessageReactionEvent,\n APIMessageReactionRemoveEmojiEvent,\n APIPresenceUpdate,\n APIStageInstance,\n APIThreadEvent,\n APIThreadListSync,\n APIThreadMember,\n APIThreadMembersUpdate,\n APITypingStart,\n APIVoiceServerUpdate,\n APIVoiceState,\n APIWebhooksUpdate,\n ClientUser,\n} from \"@lunibee/types\";\nimport type {\n Channel,\n Emoji,\n Guild,\n GuildMember,\n Interaction,\n Message,\n Role,\n} from \"@lunibee/structures\";\n/** Names of events emitted by a Lunibee client. */\nexport enum ClientEvent {\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n Ready = \"ready\",\n Resumed = \"resumed\",\n InvalidSession = \"invalidSession\",\n Raw = \"raw\",\n Error = \"error\",\n Open = \"open\",\n Close = \"close\",\n // ── Messages ───────────────────────────────────────────────────────────────\n MessageCreate = \"messageCreate\",\n MessageUpdate = \"messageUpdate\",\n MessageDelete = \"messageDelete\",\n MessageDeleteBulk = \"messageDeleteBulk\",\n // ── Reactions ─────────────────────────────────────────────────────────────\n MessageReactionAdd = \"messageReactionAdd\",\n MessageReactionRemove = \"messageReactionRemove\",\n MessageReactionRemoveAll = \"messageReactionRemoveAll\",\n MessageReactionRemoveEmoji = \"messageReactionRemoveEmoji\",\n // ── Polls ─────────────────────────────────────────────────────────────────\n MessagePollVoteAdd = \"messagePollVoteAdd\",\n MessagePollVoteRemove = \"messagePollVoteRemove\",\n // ── Guilds ────────────────────────────────────────────────────────────────\n GuildCreate = \"guildCreate\",\n GuildUpdate = \"guildUpdate\",\n GuildDelete = \"guildDelete\",\n GuildAvailable = \"guildAvailable\",\n GuildUnavailable = \"guildUnavailable\",\n // ── Guild Members ──────────────────────────────────────────────────────────\n GuildMemberAdd = \"guildMemberAdd\",\n GuildMemberUpdate = \"guildMemberUpdate\",\n GuildMemberRemove = \"guildMemberRemove\",\n GuildMembersChunk = \"guildMembersChunk\",\n // ── Guild Bans ────────────────────────────────────────────────────────────\n GuildBanAdd = \"guildBanAdd\",\n GuildBanRemove = \"guildBanRemove\",\n // ── Guild Roles ───────────────────────────────────────────────────────────\n GuildRoleCreate = \"guildRoleCreate\",\n GuildRoleUpdate = \"guildRoleUpdate\",\n GuildRoleDelete = \"guildRoleDelete\",\n // ── Guild Emojis & Stickers ───────────────────────────────────────────────\n GuildEmojisUpdate = \"guildEmojisUpdate\",\n GuildStickersUpdate = \"guildStickersUpdate\",\n // ── Monetization ──────────────────────────────────────────────────────────\n EntitlementCreate = \"entitlementCreate\",\n EntitlementUpdate = \"entitlementUpdate\",\n EntitlementDelete = \"entitlementDelete\",\n // ── Soundboard ────────────────────────────────────────────────────────────\n SoundboardSoundCreate = \"soundboardSoundCreate\",\n SoundboardSoundUpdate = \"soundboardSoundUpdate\",\n SoundboardSoundDelete = \"soundboardSoundDelete\",\n SoundboardSoundsUpdate = \"soundboardSoundsUpdate\",\n // ── Guild Integrations ────────────────────────────────────────────────────\n GuildIntegrationsUpdate = \"guildIntegrationsUpdate\",\n // ── Guild Scheduled Events ────────────────────────────────────────────────\n GuildScheduledEventCreate = \"guildScheduledEventCreate\",\n GuildScheduledEventUpdate = \"guildScheduledEventUpdate\",\n GuildScheduledEventDelete = \"guildScheduledEventDelete\",\n GuildScheduledEventUserAdd = \"guildScheduledEventUserAdd\",\n GuildScheduledEventUserRemove = \"guildScheduledEventUserRemove\",\n // ── AutoMod ───────────────────────────────────────────────────────────────\n AutoModerationRuleCreate = \"autoModerationRuleCreate\",\n AutoModerationRuleUpdate = \"autoModerationRuleUpdate\",\n AutoModerationRuleDelete = \"autoModerationRuleDelete\",\n AutoModerationActionExecution = \"autoModerationActionExecution\",\n // ── Channels ──────────────────────────────────────────────────────────────\n ChannelCreate = \"channelCreate\",\n ChannelUpdate = \"channelUpdate\",\n ChannelDelete = \"channelDelete\",\n ChannelPinsUpdate = \"channelPinsUpdate\",\n // ── Threads ───────────────────────────────────────────────────────────────\n ThreadCreate = \"threadCreate\",\n ThreadUpdate = \"threadUpdate\",\n ThreadDelete = \"threadDelete\",\n ThreadListSync = \"threadListSync\",\n ThreadMembersUpdate = \"threadMembersUpdate\",\n ThreadMemberUpdate = \"threadMemberUpdate\",\n // ── Stage Instances ───────────────────────────────────────────────────────\n StageInstanceCreate = \"stageInstanceCreate\",\n StageInstanceUpdate = \"stageInstanceUpdate\",\n StageInstanceDelete = \"stageInstanceDelete\",\n // ── Invites ───────────────────────────────────────────────────────────────\n InviteCreate = \"inviteCreate\",\n InviteDelete = \"inviteDelete\",\n // ── Webhooks ──────────────────────────────────────────────────────────────\n WebhooksUpdate = \"webhooksUpdate\",\n // ── Voice ─────────────────────────────────────────────────────────────────\n VoiceStateUpdate = \"voiceStateUpdate\",\n VoiceServerUpdate = \"voiceServerUpdate\",\n // ── Presence & Typing ─────────────────────────────────────────────────────\n PresenceUpdate = \"presenceUpdate\",\n TypingStart = \"typingStart\",\n // ── Interactions ──────────────────────────────────────────────────────────\n InteractionCreate = \"interactionCreate\",\n}\n\n/** Names of events emitted by a Lunibee client. */\nexport type ClientEventName = keyof ClientEvents;\n\n/** Listener signature for a Lunibee client event. */\nexport type ClientListener<K extends ClientEventName> = (\n ...args: ClientEvents[K]\n) => unknown;\n\n// ─── ClientEvents type map ────────────────────────────────────────────────────\n// Uses string literal keys so client.on(\"ready\", ...) works without using\n// the ClientEvent enum explicitly.\n\nexport type ClientEvents = {\n // ── Lifecycle ──────────────────────────────────────────────────────────────\n ready: [user: ClientUser];\n resumed: [];\n invalidSession: [isRecoverable: boolean];\n raw: [data: { event: string; data: unknown }];\n error: [error: Error];\n open: [];\n close: [data: { code: number; action: string }];\n // ── Messages ───────────────────────────────────────────────────────────────\n messageCreate: [message: Message];\n /** `previous` is the cached version, or `null` unless `messageCache` is enabled and the message was cached. */\n messageUpdate: [message: Message, previous: Message | null];\n /** `message` is the cached message, available when `messageCache` is enabled. */\n messageDelete: [data: APIMessageDeleteEvent, message?: Message];\n /** `messages` are the cached messages that were deleted (empty without `messageCache`). */\n messageDeleteBulk: [data: APIMessageDeleteBulkEvent, messages: Message[]];\n // ── Reactions ─────────────────────────────────────────────────────────────\n messageReactionAdd: [data: APIMessageReactionEvent];\n messageReactionRemove: [data: APIMessageReactionEvent];\n messageReactionRemoveAll: [data: APIMessageDeleteEvent];\n messageReactionRemoveEmoji: [data: APIMessageReactionRemoveEmojiEvent];\n // ── Polls ─────────────────────────────────────────────────────────────────\n messagePollVoteAdd: [data: APIMessagePollVoteEvent];\n messagePollVoteRemove: [data: APIMessagePollVoteEvent];\n // ── Guilds ────────────────────────────────────────────────────────────────\n guildCreate: [data: APIGuild];\n /** `previous` is a copy of the cached guild before the update, or null when it was not cached. */\n guildUpdate: [data: APIGuild, previous: Guild | null];\n guildDelete: [data: { id: string; unavailable?: boolean }];\n guildAvailable: [data: APIGuild & { unavailable?: boolean }];\n guildUnavailable: [data: { id: string; unavailable?: boolean }];\n // ── Guild Members ──────────────────────────────────────────────────────────\n guildMemberAdd: [member: APIGuildMember];\n /** `previous` is a copy of the cached member before the update, or null when it was not cached. */\n guildMemberUpdate: [member: APIGuildMember, previous: GuildMember | null];\n guildMemberRemove: [member: APIGuildMember];\n guildMembersChunk: [data: APIGuildMembersChunk];\n // ── Guild Bans ────────────────────────────────────────────────────────────\n guildBanAdd: [data: APIGuildBanEvent];\n guildBanRemove: [data: APIGuildBanEvent];\n // ── Guild Roles ───────────────────────────────────────────────────────────\n guildRoleCreate: [data: APIGuildRoleEvent];\n /** `previous` is a copy of the cached role before the update, or null when it was not cached. */\n guildRoleUpdate: [data: APIGuildRoleEvent, previous: Role | null];\n /** `removed` is the role that was cached, or null. */\n guildRoleDelete: [data: APIGuildRoleDeleteEvent, removed: Role | null];\n // ── Guild Emojis & Stickers ───────────────────────────────────────────────\n /** `previous` is the cached emoji list before the update, or null without the emoji cache. */\n guildEmojisUpdate: [\n data: APIGuildEmojisUpdateEvent,\n previous: Emoji[] | null,\n ];\n /** `previous` is the cached sticker list before the update (empty when none were cached). */\n guildStickersUpdate: [\n data: APIGuildStickersUpdateEvent,\n previous: APISticker[],\n ];\n // ── Monetization ──────────────────────────────────────────────────────────\n entitlementCreate: [entitlement: APIEntitlement];\n entitlementUpdate: [entitlement: APIEntitlement];\n entitlementDelete: [entitlement: APIEntitlement];\n // ── Soundboard ────────────────────────────────────────────────────────────\n soundboardSoundCreate: [sound: APISoundboardSound];\n soundboardSoundUpdate: [sound: APISoundboardSound];\n soundboardSoundDelete: [data: { sound_id: string; guild_id: string }];\n soundboardSoundsUpdate: [\n data: { guild_id: string; soundboard_sounds: APISoundboardSound[] },\n ];\n // ── Guild Integrations ────────────────────────────────────────────────────\n guildIntegrationsUpdate: [data: { guild_id: string }];\n // ── Guild Scheduled Events ────────────────────────────────────────────────\n guildScheduledEventCreate: [data: APIGuildScheduledEvent];\n /** `previous` is the cached event, or `null` if it was not cached. */\n guildScheduledEventUpdate: [\n data: APIGuildScheduledEvent,\n previous: APIGuildScheduledEvent | null,\n ];\n guildScheduledEventDelete: [data: APIGuildScheduledEvent];\n guildScheduledEventUserAdd: [data: APIGuildScheduledEventUserEvent];\n guildScheduledEventUserRemove: [data: APIGuildScheduledEventUserEvent];\n // ── AutoMod ───────────────────────────────────────────────────────────────\n autoModerationRuleCreate: [data: APIAutoModerationRule];\n /** `previous` is the cached rule, or `null` if it was not cached. */\n autoModerationRuleUpdate: [\n data: APIAutoModerationRule,\n previous: APIAutoModerationRule | null,\n ];\n autoModerationRuleDelete: [data: APIAutoModerationRule];\n autoModerationActionExecution: [data: APIAutoModerationActionExecution];\n // ── Channels ──────────────────────────────────────────────────────────────\n channelCreate: [channel: Channel];\n /** `previous` is a copy of the cached channel before the update, or null when it was not cached. */\n channelUpdate: [channel: Channel, previous: Channel | null];\n /** `removed` is the channel that was cached, or null. */\n channelDelete: [data: APIChannel, removed: Channel | null];\n channelPinsUpdate: [data: APIChannelPinsUpdate];\n // ── Threads ───────────────────────────────────────────────────────────────\n threadCreate: [channel: Channel];\n /** `previous` is a copy of the cached thread before the update, or null when it was not cached. */\n threadUpdate: [channel: Channel, previous: Channel | null];\n /** `removed` is the thread that was cached, or null. */\n threadDelete: [data: APIThreadEvent, removed: Channel | null];\n threadListSync: [data: APIThreadListSync];\n threadMembersUpdate: [data: APIThreadMembersUpdate];\n threadMemberUpdate: [data: APIThreadMember];\n // ── Stage Instances ───────────────────────────────────────────────────────\n stageInstanceCreate: [data: APIStageInstance];\n /** `previous` is the cached stage instance, or `null` if it was not cached. */\n stageInstanceUpdate: [\n data: APIStageInstance,\n previous: APIStageInstance | null,\n ];\n stageInstanceDelete: [data: APIStageInstance];\n // ── Invites ───────────────────────────────────────────────────────────────\n inviteCreate: [data: APIInviteCreate];\n inviteDelete: [data: APIInviteDelete];\n // ── Webhooks ──────────────────────────────────────────────────────────────\n webhooksUpdate: [data: APIWebhooksUpdate];\n // ── Voice ─────────────────────────────────────────────────────────────────\n /** `previous` is the user's last known voice state in that guild, or `null` (first sighting, or not in a guild). */\n voiceStateUpdate: [data: APIVoiceState, previous: APIVoiceState | null];\n voiceServerUpdate: [data: APIVoiceServerUpdate];\n // ── Presence & Typing ─────────────────────────────────────────────────────\n /** `previous` is the last presence seen, available with `cache: { presences: true }`; otherwise `null`. */\n presenceUpdate: [\n data: APIPresenceUpdate,\n previous: APIPresenceUpdate | null,\n ];\n typingStart: [data: APITypingStart];\n // ── Interactions ──────────────────────────────────────────────────────────\n interactionCreate: [interaction: Interaction];\n};\n",
7
7
  "import { EventEmitter } from \"node:events\";\n\nexport interface CollectorOptions<T> {\n /** Filter predicate to accept or reject items. */\n filter?: (item: T) => boolean | Promise<boolean>;\n /** Lifetime of the collector in milliseconds. */\n time?: number;\n /** Maximum number of elements to collect. */\n max?: number;\n /** Maximum number of processed elements. */\n maxProcessed?: number;\n /** Stop after this many milliseconds without a collected item. */\n idle?: number;\n /** Stop (reason `\"abort\"`) when this signal aborts. */\n signal?: AbortSignal;\n}\n\n/** General-purpose event collector for interactions and messages. */\nexport class Collector<K, V> extends EventEmitter {\n public readonly collected = new Map<K, V>();\n public readonly options: CollectorOptions<V>;\n public ended = false;\n public endReason?: string;\n public totalProcessed = 0;\n readonly #timeoutTimer?: ReturnType<typeof setTimeout>;\n #idleTimer?: ReturnType<typeof setTimeout>;\n readonly #onAbort = (): void => this.stop(\"abort\");\n /** Cleanup hooks run once when the collector ends (e.g. event unsubscription). */\n readonly #cleanup: (() => void)[] = [];\n\n public constructor(options: CollectorOptions<V> = {}) {\n super();\n this.options = options;\n\n if (options.time && options.time > 0) {\n this.#timeoutTimer = setTimeout(() => {\n this.stop(\"time\");\n }, options.time);\n }\n this.#resetIdle();\n if (options.signal?.aborted) this.stop(\"abort\");\n else\n options.signal?.addEventListener(\"abort\", this.#onAbort, {\n once: true,\n });\n }\n\n /** Registers a function to run once when the collector ends. Runs immediately if it already has. */\n public onDispose(cleanup: () => void): this {\n if (this.ended) cleanup();\n else this.#cleanup.push(cleanup);\n return this;\n }\n\n #resetIdle(): void {\n if (!this.options.idle || this.options.idle <= 0) return;\n if (this.#idleTimer) clearTimeout(this.#idleTimer);\n this.#idleTimer = setTimeout(\n () => this.stop(\"idle\"),\n this.options.idle,\n );\n }\n\n /** Handles a candidate item for collection. */\n public async handle(key: K, item: V): Promise<boolean> {\n if (this.ended) return false;\n this.totalProcessed++;\n\n // `maxProcessed` counts every item the collector *sees*, so it has to be\n // evaluated whether or not the filter accepts this one — checking it only\n // on the accepted path means a collector whose filter rejects everything\n // never reaches its processed limit and runs until `time`/`stop()`.\n const reachedProcessed =\n !!this.options.maxProcessed &&\n this.totalProcessed >= this.options.maxProcessed;\n\n let passed = true;\n if (this.options.filter) passed = !!(await this.options.filter(item));\n\n // The filter may be async, so the collector can have been stopped while\n // it was pending. Anything decided before that stop is discarded rather\n // than collected (and emitted) after \"end\".\n if (this.ended) return false;\n\n if (!passed) {\n if (reachedProcessed) this.stop(\"processedLimit\");\n return false;\n }\n\n this.collected.set(key, item);\n this.#resetIdle();\n this.emit(\"collect\", item);\n\n if (this.options.max && this.collected.size >= this.options.max) {\n this.stop(\"limit\");\n return true;\n }\n\n if (reachedProcessed) {\n this.stop(\"processedLimit\");\n return true;\n }\n\n return true;\n }\n\n /** Stops the collector and emits the \"end\" event. */\n public stop(reason = \"user\"): void {\n if (this.ended) return;\n this.ended = true;\n this.endReason = reason;\n if (this.#timeoutTimer) clearTimeout(this.#timeoutTimer);\n if (this.#idleTimer) clearTimeout(this.#idleTimer);\n this.options.signal?.removeEventListener(\"abort\", this.#onAbort);\n for (const cleanup of this.#cleanup.splice(0)) {\n try {\n cleanup();\n } catch {\n // A failing cleanup must not stop the others or the \"end\" event.\n }\n }\n this.emit(\"end\", this.collected, reason);\n this.removeAllListeners();\n }\n\n /** Resolves with everything collected once the collector ends. */\n public wait(): Promise<Map<K, V>> {\n if (this.ended) return Promise.resolve(this.collected);\n return new Promise((resolve) =>\n this.once(\"end\", (collected: Map<K, V>) => resolve(collected)),\n );\n }\n\n /** Yields items as they are collected until the collector ends. Items\n * collected between iterations are buffered, not dropped. */\n public async *[Symbol.asyncIterator](): AsyncGenerator<V, void, undefined> {\n const queue: V[] = [];\n let wake: (() => void) | undefined;\n const onCollect = (item: V): void => {\n queue.push(item);\n wake?.();\n };\n const onEnd = (): void => wake?.();\n if (!this.ended) {\n this.on(\"collect\", onCollect);\n this.on(\"end\", onEnd);\n }\n try {\n for (;;) {\n if (queue.length > 0) {\n yield queue.shift()!;\n continue;\n }\n if (this.ended) return;\n await new Promise<void>((resolve) => (wake = resolve));\n wake = undefined;\n }\n } finally {\n this.off(\"collect\", onCollect);\n this.off(\"end\", onEnd);\n }\n }\n\n /** Stops the collector (reason `\"disposed\"`); enables `using collector = ...`. */\n public [Symbol.dispose](): void {\n this.stop(\"disposed\");\n }\n\n /** Returns a Promise that resolves with the next collected item or rejects on end/timeout. */\n public next(): Promise<V> {\n return new Promise<V>((resolve, reject) => {\n if (this.ended) {\n return reject(\n new Error(\n `Collector already ended: ${this.endReason ?? \"unknown\"}`,\n ),\n );\n }\n\n // Each settled next() must drop its counterpart listener. Polling\n // a long-lived collector in a loop otherwise leaves one dangling\n // \"end\" listener per call, which grows without bound and trips the\n // EventEmitter max-listener warning.\n const onCollect = (item: V): void => {\n this.off(\"end\", onEnd);\n resolve(item);\n };\n const onEnd = (_collected: Map<K, V>, reason: string): void => {\n this.off(\"collect\", onCollect);\n reject(\n new Error(\n `Collector ended before item was collected: ${reason}`,\n ),\n );\n };\n\n this.once(\"collect\", onCollect);\n this.once(\"end\", onEnd);\n });\n }\n}\n",
8
8
  "import type { APIBan } from \"@lunibee/managers\";\nimport type { REST, RESTFileAttachment } from \"@lunibee/rest\";\nimport type {\n APIApplicationCommand,\n APIAuditLog,\n APIChannel,\n APIEmoji,\n APIGuild,\n APIGuildMember,\n APIInvite,\n APIMessage,\n APIOverwrite,\n APIRole,\n APIThreadMember,\n APIWebhook,\n UserData,\n} from \"@lunibee/types\";\n\n/** What goes in a path where Discord wants an id: a snowflake, `\"@me\"`, an invite code, an emoji. */\nexport type RouteId = string | number | bigint;\n\n/** Extra settings for one request. */\nexport interface RouteOptions {\n /** Appended to the URL: `{ limit: 50 }`. Undefined values are left out. */\n query?: Record<string, string | number | boolean | undefined>;\n /** The audit-log reason, sent as `X-Audit-Log-Reason`. */\n reason?: string;\n /** Cancels the request, and any wait for a rate limit. */\n signal?: AbortSignal;\n /** Files to upload; the body is sent as multipart. */\n files?: RESTFileAttachment[];\n}\n\n/** How a list is paged. Each route has its own defaults; set only what you need to change. */\nexport interface PageOptions<Item = unknown> extends Pick<\n RouteOptions,\n \"signal\"\n> {\n /** Items per request. */\n limit?: number;\n /** Which end the next page starts from: after the last id, or before it. */\n cursor?: \"after\" | \"before\";\n /** Where to start: an id. */\n start?: string;\n /** Other query parameters sent with every page. */\n query?: RouteOptions[\"query\"];\n /** How to read an item's id, when it is not `id` or `user.id`. */\n idOf?: (item: Item) => string;\n}\n\n/**\n * A place in Discord's REST API. Send a request with `get`, `post`, `put`,\n * `patch` or `delete`. `Read` is what `get` returns; `Write` is what `post`\n * and `patch` return (the same, except on a list, where posting makes one item).\n */\nexport interface Route<Read = unknown, Write = Read> {\n /** The path this route stands for, such as `/guilds/123/members`. */\n readonly path: string;\n get<R = Read>(options?: RouteOptions): Promise<R>;\n post<R = Write>(body?: unknown, options?: RouteOptions): Promise<R>;\n put<R = void>(body?: unknown, options?: RouteOptions): Promise<R>;\n patch<R = Write>(body?: unknown, options?: RouteOptions): Promise<R>;\n delete<R = void>(options?: RouteOptions): Promise<R>;\n}\n\n/** A route that lists things and can follow its pages. */\nexport interface ListRoute<Item> extends Route<Item[], Item> {\n /** Yields one page at a time, following the cursor until the list ends. */\n pages(options?: PageOptions<Item>): AsyncGenerator<Item[], void>;\n /**\n * Collects pages into one array.\n * @param options.max Stop after this many items (10,000 by default).\n */\n all(options?: PageOptions<Item> & { max?: number }): Promise<Item[]>;\n}\n\ntype Pick1<N> = (id: RouteId) => N;\n\nexport interface MessageNode extends Route<APIMessage> {\n crosspost: Route<APIMessage>;\n /** `reactions(emoji)` lists who reacted; `reactions(emoji)(\"@me\")` is the bot's own reaction. */\n reactions: ListRoute<UserData> &\n ((emoji: string) => ListRoute<UserData> & Pick1<Route>);\n}\nexport interface MessagesRoute extends ListRoute<APIMessage> {\n (id: RouteId): MessageNode;\n bulkDelete: Route;\n}\nexport interface ChannelNode extends Route<APIChannel> {\n messages: MessagesRoute;\n typing: Route;\n invites: ListRoute<APIInvite>;\n webhooks: ListRoute<APIWebhook>;\n /** Permission overwrites, by role or user id. */\n permissions: Pick1<Route<APIOverwrite>>;\n threadMembers: ListRoute<APIThreadMember> & Pick1<Route<APIThreadMember>>;\n}\nexport interface MemberNode extends Route<APIGuildMember> {\n /** `roles(roleId).put()` adds the role; `.delete()` takes it away. */\n roles: Pick1<Route>;\n}\nexport interface MembersRoute extends ListRoute<APIGuildMember> {\n (userId: RouteId): MemberNode;\n search: Route<APIGuildMember[]>;\n}\nexport interface GuildNode extends Route<APIGuild> {\n channels: Route<APIChannel[], APIChannel>;\n members: MembersRoute;\n roles: ListRoute<APIRole> & Pick1<Route<APIRole>>;\n bans: ListRoute<APIBan> & Pick1<Route<APIBan>>;\n emojis: ListRoute<APIEmoji> & Pick1<Route<APIEmoji>>;\n invites: ListRoute<APIInvite>;\n webhooks: ListRoute<APIWebhook>;\n auditLogs: Route<APIAuditLog>;\n preview: Route;\n}\nexport interface UserNode extends Route<UserData> {\n /** The guilds a user is in (`users(\"@me\").guilds`); `guilds(id).delete()` leaves one. */\n guilds: ListRoute<APIGuild> & Pick1<Route>;\n /** `channels.post({ recipient_id })` opens a direct message. */\n channels: Route<APIChannel>;\n}\nexport interface ApplicationNode extends Route {\n commands: ListRoute<APIApplicationCommand> &\n Pick1<Route<APIApplicationCommand>>;\n /** Commands of one guild. */\n guilds: Pick1<{\n commands: ListRoute<APIApplicationCommand> &\n Pick1<Route<APIApplicationCommand>>;\n }>;\n}\n/** `webhooks(id)` is the webhook; `webhooks(id)(token)` is its execute route, with `messages(id)` inside. */\nexport type WebhookNode = Route<APIWebhook> &\n ((token: string) => Route<APIMessage> & {\n messages: Pick1<Route<APIMessage>>;\n });\n\n/**\n * Discord's REST API as a path you build by chaining: a name goes one level\n * down, a call with an id goes into that item, and a method sends. Names are\n * the route words in camelCase (`auditLogs` is `/audit-logs`).\n * @example await bot.api.guilds(guildId).members(userId).patch({ nick: \"x\" }, { reason: \"rename\" });\n * @example for await (const page of bot.api.guilds(guildId).members.pages()) { … }\n */\nexport interface Api {\n guilds: Pick1<GuildNode>;\n channels: Pick1<ChannelNode>;\n users: Pick1<UserNode>;\n applications: Pick1<ApplicationNode>;\n webhooks: Pick1<WebhookNode>;\n invites: Pick1<Route<APIInvite>>;\n /** Any route not listed above: `bot.api.to(\"stage-instances\", id)`. */\n to(...segments: RouteId[]): Route;\n}\n\n// ─── Runtime ─────────────────────────────────────────────────────────────────\n\nconst SAFE_WORD = /^[a-z][a-zA-Z0-9]*$/;\nconst SAFE_SEGMENT = /^[A-Za-z0-9_@.%-]+$/;\n\n/** Page defaults of the routes whose lists Discord pages in its own way. */\nconst PAGING: Record<\n string,\n {\n limit: number;\n cursor: \"after\" | \"before\";\n idOf?: (item: never) => string;\n }\n> = {\n members: {\n limit: 1000,\n cursor: \"after\",\n idOf: (member: APIGuildMember) => member.user.id,\n },\n bans: {\n limit: 1000,\n cursor: \"after\",\n idOf: (ban: APIBan) => ban.user.id,\n },\n messages: { limit: 100, cursor: \"before\" },\n guilds: { limit: 200, cursor: \"after\" },\n};\nconst DEFAULT_PAGING = { limit: 100, cursor: \"after\" as const };\nconst DEFAULT_MAX = 10_000;\n\nfunction kebab(word: string): string {\n return word.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\n\nfunction idSegment(id: unknown): string {\n if (\n typeof id !== \"string\" &&\n typeof id !== \"number\" &&\n typeof id !== \"bigint\"\n )\n throw new TypeError(\"A route id must be a string, number or bigint.\");\n const text = String(id);\n if (text === \"\") throw new TypeError(\"A route id cannot be empty.\");\n return encodeURIComponent(text).replace(/%40/g, \"@\");\n}\n\nfunction defaultId(item: unknown): string {\n const record = item as { id?: unknown; user?: { id?: unknown } };\n const id = record?.id ?? record?.user?.id;\n if (typeof id !== \"string\")\n throw new TypeError(\n \"Cannot find an id on a page item; pass idOf to pages().\",\n );\n return id;\n}\n\nfunction node(rest: REST, segments: readonly string[]): unknown {\n const path = `/${segments.join(\"/\")}`;\n const send =\n (method: string, hasBody: boolean) =>\n (first?: unknown, second?: RouteOptions) =>\n rest.request(\n method,\n path,\n hasBody ? first : undefined,\n (hasBody ? second : (first as RouteOptions | undefined)) ?? {},\n );\n const last = segments[segments.length - 1] ?? \"\";\n const pages = async function* (\n options: PageOptions<unknown> = {},\n ): AsyncGenerator<unknown[], void> {\n const paging = { ...DEFAULT_PAGING, ...PAGING[last] };\n const cursorName = options.cursor ?? paging.cursor;\n const limit = options.limit ?? paging.limit;\n const idOf =\n options.idOf ??\n (paging.idOf as ((item: unknown) => string) | undefined) ??\n defaultId;\n let cursor = options.start;\n for (;;) {\n const batch = await rest.request<unknown[]>(\n \"GET\",\n path,\n undefined,\n {\n signal: options.signal,\n query: {\n ...options.query,\n limit,\n ...(cursor === undefined\n ? {}\n : { [cursorName]: cursor }),\n },\n },\n );\n if (!Array.isArray(batch) || batch.length === 0) return;\n yield batch;\n if (batch.length < limit) return;\n cursor = idOf(batch[batch.length - 1]);\n }\n };\n const all = async (\n options: PageOptions<unknown> & { max?: number } = {},\n ): Promise<unknown[]> => {\n const max = options.max ?? DEFAULT_MAX;\n const paging = { ...DEFAULT_PAGING, ...PAGING[last] };\n const items: unknown[] = [];\n if (max <= 0) return items;\n for await (const page of pages({\n ...options,\n limit: Math.min(options.limit ?? paging.limit, max),\n })) {\n items.push(...page);\n if (items.length >= max) break;\n }\n return items.slice(0, max);\n };\n const members: Record<string, unknown> = {\n path,\n get: send(\"GET\", false),\n post: send(\"POST\", true),\n put: send(\"PUT\", true),\n patch: send(\"PATCH\", true),\n delete: send(\"DELETE\", false),\n pages,\n all,\n toString: () => path,\n };\n return new Proxy(function route() {}, {\n get(_target, property) {\n if (typeof property !== \"string\") return undefined;\n if (property in members) return members[property];\n // `then` stays undefined so awaiting a route cannot hang.\n if (property === \"then\" || !SAFE_WORD.test(property))\n return undefined;\n return node(rest, [...segments, kebab(property)]);\n },\n apply(_target, _this, args: unknown[]) {\n if (args.length !== 1)\n throw new TypeError(\n `Call a route with exactly one id, e.g. ${path}(id).`,\n );\n return node(rest, [...segments, idSegment(args[0])]);\n },\n });\n}\n\n/** Builds `bot.api` over a REST client. */\nexport function createApi(rest: REST): Api {\n const root = node(rest, []) as Record<string, unknown>;\n return new Proxy(root, {\n get(target, property, receiver) {\n if (property === \"to\")\n return (...segments: RouteId[]): Route => {\n if (segments.length === 0)\n throw new TypeError(\"to() needs at least one segment.\");\n const cleaned = segments.map((segment) => {\n const text = String(segment);\n if (!SAFE_SEGMENT.test(text))\n throw new TypeError(\n `Invalid route segment: ${JSON.stringify(text)}.`,\n );\n return text;\n });\n return node(rest, cleaned) as Route;\n };\n return Reflect.get(target, property, receiver);\n },\n }) as unknown as Api;\n}\n",
9
- "/** Discord API embed field payload. */\nexport interface EmbedField {\n /** Field name. */\n name: string;\n /** Field value. */\n value: string;\n /** Whether the field is displayed inline. */\n inline?: boolean;\n}\n/** Discord API embed footer payload. */\nexport interface EmbedFooter {\n /** Footer text. */\n text: string;\n /** Footer icon URL. */\n icon_url?: string;\n}\n/** Discord API embed author payload. */\nexport interface EmbedAuthor {\n /** Author display name. */\n name: string;\n /** Author URL. */\n url?: string;\n /** Author icon URL. */\n icon_url?: string;\n}\n/** Strict Discord API embed payload. */\nexport interface APIEmbed {\n /** Embed title. */\n title?: string;\n /** Embed description. */\n description?: string;\n /** Embed URL. */\n url?: string;\n /** Embed color. */\n color?: number;\n /** ISO-8601 timestamp. */\n timestamp?: string;\n /** Embed footer. */\n footer?: EmbedFooter;\n /** Embed author. */\n author?: EmbedAuthor;\n /** Thumbnail payload. */\n thumbnail?: { /** Thumbnail URL. */ url: string };\n /** Image payload. */\n image?: { /** Image URL. */ url: string };\n /** Embed fields. */\n fields?: EmbedField[];\n}\n\n/** Builds compile-time-safe rich embed payloads for Discord API requests. */\nexport class CreateEmbed {\n readonly #data: APIEmbed = {};\n /** Sets the embed title. @param value Title text, or null to clear. @returns This builder. @throws {RangeError} If title exceeds Discord's limit. */\n public setTitle(value: string | null): this {\n if (value === null) delete this.#data.title;\n else this.#data.title = validate(value, 256, \"Embed title\");\n return this;\n }\n /** Sets the embed description. @param value Description text, or null to clear. @returns This builder. @throws {RangeError} If description exceeds Discord's limit. */\n public setDescription(value: string | null): this {\n if (value === null) delete this.#data.description;\n else\n this.#data.description = validate(value, 4096, \"Embed description\");\n return this;\n }\n /** Sets the embed URL. @param value Absolute URL, or null to clear. @returns This builder. @throws {TypeError} If URL is invalid. */\n public setURL(value: string | null): this {\n if (value === null) delete this.#data.url;\n else this.#data.url = url(value, \"Embed URL\");\n return this;\n }\n /** Sets the embed color. @param value RGB integer. @returns This builder. @throws {RangeError} If color is outside 24-bit RGB range. */\n public setColor(value: number): this {\n if (!Number.isInteger(value) || value < 0 || value > 0xffffff)\n throw new RangeError(\n \"Embed color must be an integer between 0 and 16777215.\",\n );\n this.#data.color = value;\n return this;\n }\n /** Sets the embed timestamp. @param value Date value. @returns This builder. @throws {RangeError} If date is invalid. */\n public setTimestamp(value = new Date()): this {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime()))\n throw new RangeError(\"Embed timestamp must be a valid date.\");\n this.#data.timestamp = date.toISOString();\n return this;\n }\n /** Sets the embed footer. @param value Footer payload. @returns This builder. @throws {RangeError} If footer text exceeds Discord's limit. */\n public setFooter(value: EmbedFooter): this {\n this.#data.footer = {\n text: validate(value.text, 2048, \"Footer text\"),\n ...(value.icon_url\n ? { icon_url: url(value.icon_url, \"Footer icon URL\") }\n : {}),\n };\n return this;\n }\n /** Sets the embed author. @param value Author payload. @returns This builder. @throws {RangeError} If author name exceeds Discord's limit. */\n public setAuthor(value: EmbedAuthor): this {\n this.#data.author = {\n name: validate(value.name, 256, \"Author name\"),\n ...(value.url ? { url: url(value.url, \"Author URL\") } : {}),\n ...(value.icon_url\n ? { icon_url: url(value.icon_url, \"Author icon URL\") }\n : {}),\n };\n return this;\n }\n /** Sets the thumbnail URL. @param value Thumbnail URL or payload, or null to clear. @returns This builder. @throws {TypeError} If URL is invalid. */\n public setThumbnail(value: { url: string } | string | null): this {\n if (value === null) {\n delete this.#data.thumbnail;\n return this;\n }\n const valueURL = typeof value === \"string\" ? value : value.url;\n this.#data.thumbnail = { url: url(valueURL, \"Thumbnail URL\") };\n return this;\n }\n /** Sets the image URL. @param value Image URL or payload, or null to clear. @returns This builder. @throws {TypeError} If URL is invalid. */\n public setImage(value: { url: string } | string | null): this {\n if (value === null) {\n delete this.#data.image;\n return this;\n }\n const valueURL = typeof value === \"string\" ? value : value.url;\n this.#data.image = { url: url(valueURL, \"Image URL\") };\n return this;\n }\n /** Adds embed fields. Accepts both the spread form `addFields(a, b)` and the\n * single-array form `addFields([a, b])` for discord.js `RestOrArray` parity.\n * @param fields Field payloads, spread or as a single array. @returns This builder. @throws {RangeError} If the 25-field limit is exceeded. */\n public addFields(...fields: EmbedField[] | [EmbedField[]]): this {\n const resolved = (\n fields.length === 1 && Array.isArray(fields[0]) ? fields[0] : fields\n ) as EmbedField[];\n if (!resolved.length)\n throw new TypeError(\"At least one embed field is required.\");\n const current = this.#data.fields ?? [];\n if (current.length + resolved.length > 25)\n throw new RangeError(\n \"An embed cannot contain more than 25 fields.\",\n );\n for (const field of resolved) {\n validate(field.name, 256, \"Embed field name\");\n validate(field.value, 1024, \"Embed field value\");\n }\n this.#data.fields = [\n ...current,\n ...resolved.map((field) => ({ ...field })),\n ];\n return this;\n }\n public setFields(fields: EmbedField[]): this {\n this.#data.fields = [];\n return this.addFields(...fields);\n }\n /** Replaces fields starting at an index. @param index Start index. @param deleteCount Number of fields to remove. @param fields Replacement fields. @returns This builder. @throws {RangeError} If arguments are invalid or the 25-field limit is exceeded. */\n public spliceFields(\n index: number,\n deleteCount: number,\n ...fields: EmbedField[]\n ): this {\n const current = [...(this.#data.fields ?? [])];\n if (\n !Number.isInteger(index) ||\n !Number.isInteger(deleteCount) ||\n index < 0 ||\n deleteCount < 0\n )\n throw new RangeError(\n \"Field index and delete count must be non-negative integers.\",\n );\n current.splice(index, deleteCount, ...fields);\n if (current.length > 25)\n throw new RangeError(\n \"An embed cannot contain more than 25 fields.\",\n );\n this.#data.fields = current;\n return this;\n }\n /** Removes all embed fields. @returns This builder. */\n public clearFields(): this {\n delete this.#data.fields;\n return this;\n }\n /** Removes the embed title. @returns This builder. */\n public clearTitle(): this {\n delete this.#data.title;\n return this;\n }\n /** Removes the embed description. @returns This builder. */\n public clearDescription(): this {\n delete this.#data.description;\n return this;\n }\n /** Returns a deep-cloned Discord API payload. @returns Strict embed payload. */\n public get data(): APIEmbed {\n return this.toJSON();\n }\n public toJSON(): APIEmbed {\n return structuredClone(this.#data);\n }\n}\n/** Validates a bounded Discord string field. @param value Field value. @param max Maximum length. @param field Human-readable field name. @returns Validated value. @throws {RangeError} If length is invalid. */\nfunction validate(value: string, max: number, field: string): string {\n if (typeof value !== \"string\" || value.length === 0 || value.length > max)\n throw new RangeError(`${field} must contain 1-${max} characters.`);\n return value;\n}\n/** Validates and normalizes an absolute URL. @param value URL value. @param field Human-readable field name. @returns Normalized URL. @throws {TypeError} If URL is invalid. */\nfunction url(value: string, field: string): string {\n try {\n return new URL(value).toString();\n } catch (error) {\n throw new TypeError(`${field} must be a valid URL.`, { cause: error });\n }\n}\n",
9
+ "/** Discord API embed field payload. */\nexport interface EmbedField {\n /** Field name. */\n name: string;\n /** Field value. */\n value: string;\n /** Whether the field is displayed inline. */\n inline?: boolean;\n}\n/** Discord API embed footer payload. */\nexport interface EmbedFooter {\n /** Footer text. */\n text: string;\n /** Footer icon URL. */\n icon_url?: string;\n}\n/** Discord API embed author payload. */\nexport interface EmbedAuthor {\n /** Author display name. */\n name: string;\n /** Author URL. */\n url?: string;\n /** Author icon URL. */\n icon_url?: string;\n}\n/** Strict Discord API embed payload. */\nexport interface APIEmbed {\n /** Embed title. */\n title?: string;\n /** Embed description. */\n description?: string;\n /** Embed URL. */\n url?: string;\n /** Embed color. */\n color?: number;\n /** ISO-8601 timestamp. */\n timestamp?: string;\n /** Embed footer. */\n footer?: EmbedFooter;\n /** Embed author. */\n author?: EmbedAuthor;\n /** Thumbnail payload. */\n thumbnail?: { /** Thumbnail URL. */ url: string };\n /** Image payload. */\n image?: { /** Image URL. */ url: string };\n /** Embed fields. */\n fields?: EmbedField[];\n}\n\n/** Builds compile-time-safe rich embed payloads for Discord API requests. */\nexport class CreateEmbed {\n readonly #data: APIEmbed = {};\n /** Sets the embed title. @param value Title text, or null to clear. @returns This builder. @throws {RangeError} If title exceeds Discord's limit. */\n public setTitle(value: string | null): this {\n if (value === null) delete this.#data.title;\n else this.#data.title = validate(value, 256, \"Embed title\");\n return this;\n }\n /** Sets the embed description. @param value Description text, or null to clear. @returns This builder. @throws {RangeError} If description exceeds Discord's limit. */\n public setDescription(value: string | null): this {\n if (value === null) delete this.#data.description;\n else\n this.#data.description = validate(value, 4096, \"Embed description\");\n return this;\n }\n /** Sets the embed URL. @param value Absolute URL, or null to clear. @returns This builder. @throws {TypeError} If URL is invalid. */\n public setURL(value: string | null): this {\n if (value === null) delete this.#data.url;\n else this.#data.url = url(value, \"Embed URL\");\n return this;\n }\n /** Sets the embed color. @param value RGB integer. @returns This builder. @throws {RangeError} If color is outside 24-bit RGB range. */\n public setColor(value: number): this {\n if (!Number.isInteger(value) || value < 0 || value > 0xffffff)\n throw new RangeError(\n \"Embed color must be an integer between 0 and 16777215.\",\n );\n this.#data.color = value;\n return this;\n }\n /** Sets the embed timestamp. @param value Date value. @returns This builder. @throws {RangeError} If date is invalid. */\n public setTimestamp(value = new Date()): this {\n const date = value instanceof Date ? value : new Date(value);\n if (Number.isNaN(date.getTime()))\n throw new RangeError(\"Embed timestamp must be a valid date.\");\n this.#data.timestamp = date.toISOString();\n return this;\n }\n /** Sets the embed footer. @param value Footer payload. @returns This builder. @throws {RangeError} If footer text exceeds Discord's limit. */\n public setFooter(value: EmbedFooter): this {\n this.#data.footer = {\n text: validate(value.text, 2048, \"Footer text\"),\n ...(value.icon_url\n ? { icon_url: url(value.icon_url, \"Footer icon URL\") }\n : {}),\n };\n return this;\n }\n /** Sets the embed author. @param value Author payload. @returns This builder. @throws {RangeError} If author name exceeds Discord's limit. */\n public setAuthor(value: EmbedAuthor): this {\n this.#data.author = {\n name: validate(value.name, 256, \"Author name\"),\n ...(value.url ? { url: url(value.url, \"Author URL\") } : {}),\n ...(value.icon_url\n ? { icon_url: url(value.icon_url, \"Author icon URL\") }\n : {}),\n };\n return this;\n }\n /** Sets the thumbnail URL. @param value Thumbnail URL or payload, or null to clear. @returns This builder. @throws {TypeError} If URL is invalid. */\n public setThumbnail(value: { url: string } | string | null): this {\n if (value === null) {\n delete this.#data.thumbnail;\n return this;\n }\n const valueURL = typeof value === \"string\" ? value : value.url;\n this.#data.thumbnail = { url: url(valueURL, \"Thumbnail URL\") };\n return this;\n }\n /** Sets the image URL. @param value Image URL or payload, or null to clear. @returns This builder. @throws {TypeError} If URL is invalid. */\n public setImage(value: { url: string } | string | null): this {\n if (value === null) {\n delete this.#data.image;\n return this;\n }\n const valueURL = typeof value === \"string\" ? value : value.url;\n this.#data.image = { url: url(valueURL, \"Image URL\") };\n return this;\n }\n /** Adds embed fields. Accepts both the spread form `addFields(a, b)` and the\n * single-array form `addFields([a, b])` for discord.js `RestOrArray` parity.\n * @param fields Field payloads, spread or as a single array. @returns This builder. @throws {RangeError} If the 25-field limit is exceeded. */\n public addFields(...fields: EmbedField[] | [EmbedField[]]): this {\n const resolved = (\n fields.length === 1 && Array.isArray(fields[0]) ? fields[0] : fields\n ) as EmbedField[];\n if (!resolved.length)\n throw new TypeError(\"At least one embed field is required.\");\n const current = this.#data.fields ?? [];\n if (current.length + resolved.length > 25)\n throw new RangeError(\n \"An embed cannot contain more than 25 fields.\",\n );\n for (const field of resolved) {\n validate(field.name, 256, \"Embed field name\");\n validate(field.value, 1024, \"Embed field value\");\n }\n this.#data.fields = [\n ...current,\n ...resolved.map((field) => ({ ...field })),\n ];\n return this;\n }\n public setFields(fields: EmbedField[]): this {\n this.#data.fields = [];\n return this.addFields(...fields);\n }\n /** Replaces fields starting at an index. @param index Start index. @param deleteCount Number of fields to remove. @param fields Replacement fields. @returns This builder. @throws {RangeError} If arguments are invalid or the 25-field limit is exceeded. */\n public spliceFields(\n index: number,\n deleteCount: number,\n ...fields: EmbedField[]\n ): this {\n const current = [...(this.#data.fields ?? [])];\n if (\n !Number.isInteger(index) ||\n !Number.isInteger(deleteCount) ||\n index < 0 ||\n deleteCount < 0\n )\n throw new RangeError(\n \"Field index and delete count must be non-negative integers.\",\n );\n current.splice(index, deleteCount, ...fields);\n if (current.length > 25)\n throw new RangeError(\n \"An embed cannot contain more than 25 fields.\",\n );\n this.#data.fields = current;\n return this;\n }\n /** Removes all embed fields. @returns This builder. */\n public clearFields(): this {\n delete this.#data.fields;\n return this;\n }\n /** Removes the embed title. @returns This builder. */\n public clearTitle(): this {\n delete this.#data.title;\n return this;\n }\n /** Removes the embed description. @returns This builder. */\n public clearDescription(): this {\n delete this.#data.description;\n return this;\n }\n /** Returns a deep-cloned Discord API payload. @returns Strict embed payload. */\n public get data(): APIEmbed {\n return this.toJSON();\n }\n /** Returns a deep-cloned Discord API payload. @returns Strict embed payload. @throws {RangeError} If the text in the embed adds up to more than Discord's 6000-character limit. */\n public toJSON(): APIEmbed {\n const data = this.#data;\n const total =\n (data.title?.length ?? 0) +\n (data.description?.length ?? 0) +\n (data.footer?.text.length ?? 0) +\n (data.author?.name.length ?? 0) +\n (data.fields ?? []).reduce(\n (sum, field) => sum + field.name.length + field.value.length,\n 0,\n );\n if (total > 6000)\n throw new RangeError(\n `An embed cannot contain more than 6000 characters in total (this one has ${total}).`,\n );\n return structuredClone(data);\n }\n}\n/** Validates a bounded Discord string field. @param value Field value. @param max Maximum length. @param field Human-readable field name. @returns Validated value. @throws {RangeError} If length is invalid. */\nfunction validate(value: string, max: number, field: string): string {\n if (typeof value !== \"string\" || value.length === 0 || value.length > max)\n throw new RangeError(`${field} must contain 1-${max} characters.`);\n return value;\n}\n/** Validates and normalizes an absolute URL. @param value URL value. @param field Human-readable field name. @returns Normalized URL. @throws {TypeError} If URL is invalid. */\nfunction url(value: string, field: string): string {\n try {\n return new URL(value).toString();\n } catch (error) {\n throw new TypeError(`${field} must be a valid URL.`, { cause: error });\n }\n}\n",
10
10
  "/**\n * Channel kinds: a short name for what a channel is, in place of the numeric\n * `type` Discord sends. Threads share one kind; `type` still tells the three\n * apart.\n */\nexport const ChannelKinds = {\n text: [0],\n dm: [1],\n voice: [2],\n \"group-dm\": [3],\n category: [4],\n announcement: [5],\n thread: [10, 11, 12],\n stage: [13],\n directory: [14],\n forum: [15],\n media: [16],\n} as const;\n\n/** The name of a kind of channel, such as `\"text\"` or `\"voice\"`. */\nexport type ChannelKind = keyof typeof ChannelKinds;\n\n/** A channel type Discord has no kind for yet. */\nexport type UnknownChannelKind = \"unknown\";\n\nconst KIND_OF_TYPE = new Map<number, ChannelKind>(\n (Object.keys(ChannelKinds) as ChannelKind[]).flatMap((kind) =>\n ChannelKinds[kind].map((type): [number, ChannelKind] => [type, kind]),\n ),\n);\n\n/** The kind of a Discord channel `type`, or `\"unknown\"` for a type this version does not know. */\nexport function channelKindOf(type: number): ChannelKind | UnknownChannelKind {\n return KIND_OF_TYPE.get(type) ?? \"unknown\";\n}\n\n/** The Discord channel `type` numbers a kind covers (three for `\"thread\"`, one for the rest). */\nexport function channelTypesOf(kind: ChannelKind): readonly number[] {\n return ChannelKinds[kind];\n}\n",
11
- "// ─── Gateway Intents ─────────────────────────────────────────────────────────\n\n/** Gateway intent bit flags supported by Discord (PascalCase). */\nexport const GatewayIntentBits = {\n Guilds: 1 << 0,\n GuildMembers: 1 << 1,\n GuildModeration: 1 << 2,\n GuildExpressions: 1 << 3,\n GuildIntegrations: 1 << 4,\n GuildWebhooks: 1 << 5,\n GuildInvites: 1 << 6,\n GuildVoiceStates: 1 << 7,\n GuildPresences: 1 << 8,\n GuildMessages: 1 << 9,\n GuildMessageReactions: 1 << 10,\n GuildMessageTyping: 1 << 11,\n DirectMessages: 1 << 12,\n DirectMessageReactions: 1 << 13,\n DirectMessageTyping: 1 << 14,\n MessageContent: 1 << 15,\n GuildScheduledEvents: 1 << 16,\n AutoModerationConfiguration: 1 << 20,\n AutoModerationExecution: 1 << 21,\n GuildMessagePolls: 1 << 24,\n DirectMessagePolls: 1 << 25,\n} as const;\n\n/** Idiomatic camelCase Gateway intent bit flags supported by Discord. */\nexport const IntentBits = {\n guild: 1 << 0,\n guilds: 1 << 0,\n guildMembers: 1 << 1,\n guildModeration: 1 << 2,\n guildBans: 1 << 2,\n guildExpressions: 1 << 3,\n guildEmojis: 1 << 3,\n guildEmojisAndStickers: 1 << 3,\n guildIntegrations: 1 << 4,\n guildWebhooks: 1 << 5,\n guildInvites: 1 << 6,\n guildVoiceStates: 1 << 7,\n guildPresences: 1 << 8,\n guildMessages: 1 << 9,\n guildMessage: 1 << 9,\n guildMessageReactions: 1 << 10,\n guildMessageTyping: 1 << 11,\n directMessages: 1 << 12,\n directMessageReactions: 1 << 13,\n directMessageTyping: 1 << 14,\n messageContent: 1 << 15,\n guildScheduledEvents: 1 << 16,\n autoModerationConfiguration: 1 << 20,\n autoModerationExecution: 1 << 21,\n guildMessagePolls: 1 << 24,\n directMessagePolls: 1 << 25,\n} as const;\n\n/** Alias for IntentBits. */\nexport const Intents = IntentBits;\n\n/** Gateway intents: an array of intent bits or names, e.g. `[GatewayIntentBits.Guilds, \"GuildMessages\"]`. A single number, name or OR-ed bitfield is not accepted. */\nexport type GatewayIntentResolvable = readonly (\n number | keyof typeof GatewayIntentBits | keyof typeof IntentBits | string\n)[];\n\n/**\n * Resolves an array of intents into a raw bitfield integer.\n * @throws {TypeError} If `intents` is not an array (an OR-ed number, a single name or a bitfield object).\n */\nexport function resolveGatewayIntents(\n intents: GatewayIntentResolvable,\n): number {\n if (!Array.isArray(intents))\n throw new TypeError(\n \"Gateway intents must be an array, e.g. [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages].\",\n );\n return intents.reduce<number>(\n (acc, intent) => acc | resolveIntent(intent),\n 0,\n );\n}\n\n/** Resolves one intent: a bitfield, an intent name in either casing, or a numeric string. */\nfunction resolveIntent(intent: number | string): number {\n if (typeof intent === \"number\") return intent;\n const bits: Record<string, number> = {\n ...IntentBits,\n ...GatewayIntentBits,\n };\n const lower = intent.charAt(0).toLowerCase() + intent.slice(1);\n if (Object.hasOwn(bits, intent)) return bits[intent]!;\n if (Object.hasOwn(bits, lower)) return bits[lower]!;\n const num = Number(intent);\n return Number.isNaN(num) ? 0 : num;\n}\n\n/** What `IntentsBitField` methods take: one intent or an array of them. Clients and gateways take only arrays. */\ntype IntentsInput = GatewayIntentResolvable[number] | GatewayIntentResolvable;\n\nfunction resolveInput(bits: IntentsInput): number {\n return resolveGatewayIntents(Array.isArray(bits) ? bits : [bits as number]);\n}\n\n/**\n * Discord.js-familiar intent bitfield.\n * @example new IntentsBitField([IntentsBitField.Flags.Guilds, \"GuildMessages\"])\n */\nexport class IntentsBitField {\n /** Intent flag values by name. */\n public static readonly Flags = GatewayIntentBits;\n /** Raw intent bitfield. */\n public bitfield: number;\n\n public constructor(bits: IntentsInput = []) {\n this.bitfield = resolveInput(bits);\n }\n\n /** Whether every given intent is set. */\n public has(bits: IntentsInput): boolean {\n const resolved = resolveInput(bits);\n return (this.bitfield & resolved) === resolved;\n }\n\n /** Whether any given intent is set. */\n public any(bits: IntentsInput): boolean {\n return (this.bitfield & resolveInput(bits)) !== 0;\n }\n\n /** Adds intents in place. @returns This bitfield. */\n public add(...bits: IntentsInput[]): this {\n for (const bit of bits) this.bitfield |= resolveInput(bit);\n return this;\n }\n\n /** Removes intents in place. @returns This bitfield. */\n public remove(...bits: IntentsInput[]): this {\n for (const bit of bits) this.bitfield &= ~resolveInput(bit);\n return this;\n }\n\n /** Names of the set intents. */\n public toArray(): (keyof typeof GatewayIntentBits)[] {\n return (\n Object.keys(GatewayIntentBits) as (keyof typeof GatewayIntentBits)[]\n ).filter((name) => this.has(GatewayIntentBits[name]));\n }\n\n /** Whether this equals another bitfield. */\n public equals(bits: IntentsInput): boolean {\n return this.bitfield === resolveInput(bits);\n }\n\n public valueOf(): number {\n return this.bitfield;\n }\n\n public toJSON(): number {\n return this.bitfield;\n }\n}\n\n// ─── Gateway Config ───────────────────────────────────────────────────────────\n\n/** Gateway connection properties (OS, browser, device). */\nexport interface GatewayProperties {\n os?: string;\n browser?: string;\n device?: string;\n [key: string]: string | undefined;\n}\n/** Gateway presence activity. */\nexport interface GatewayPresenceActivity {\n name: string;\n type?: number;\n url?: string;\n state?: string;\n}\n/** Gateway presence data. */\nexport interface GatewayPresence {\n status?: \"online\" | \"dnd\" | \"idle\" | \"invisible\" | \"offline\";\n activities?: GatewayPresenceActivity[];\n afk?: boolean;\n since?: number | null;\n}\n/** Client configuration. */\nexport interface ClientOptions {\n token: string;\n intents: GatewayIntentResolvable;\n gateway?: GatewayOptions;\n /**\n * zlib-stream transport compression for the Gateway connection, about a\n * tenth of the inbound bandwidth. Shorthand for `gateway: { compress }`,\n * which wins when both are set. Off by default.\n */\n compress?: boolean;\n rest?: RESTOptions;\n /** Opt-in bounded per-channel message cache. Messages are not cached by default. */\n messageCache?: { maxSize?: number; ttl?: number };\n /**\n * Which resources the client keeps from Gateway events. Everything is\n * cached by default; large bots can turn off what they do not read.\n * Events are still emitted either way.\n */\n cache?: {\n users?: boolean;\n members?: boolean;\n roles?: boolean;\n emojis?: boolean;\n /** Keep each member's latest presence (needs the `GuildPresences` intent). Off by default: it is a lot of data. */\n presences?: boolean;\n };\n /**\n * Default `allowed_mentions` for every message the client sends (channel\n * send/edit, replies, interaction replies, edits and follow-ups), e.g.\n * `{ parse: [] }` so nothing pings unless a message says so. A message's\n * own `allowed_mentions` always wins.\n */\n allowedMentions?: AllowedMentions;\n}\n/** Discord's `allowed_mentions` object. */\nexport interface AllowedMentions {\n parse?: (\"users\" | \"roles\" | \"everyone\")[];\n users?: string[];\n roles?: string[];\n replied_user?: boolean;\n}\n/** Gateway connection configuration. */\nexport interface GatewayOptions {\n intents?: GatewayIntentResolvable;\n reconnect?: boolean;\n maxReconnectAttempts?: number;\n reconnectBaseDelay?: number;\n reconnectMaxDelay?: number;\n shardId?: number;\n shardCount?: number;\n properties?: GatewayProperties;\n presence?: GatewayPresence;\n}\n\n/** REST request configuration. */\nexport interface RESTOptions {\n timeout?: number;\n retries?: number;\n baseURL?: string;\n}\n",
11
+ "// ─── Gateway Intents ─────────────────────────────────────────────────────────\n\n/** Gateway intent bit flags supported by Discord (PascalCase). */\nexport const GatewayIntentBits = {\n Guilds: 1 << 0,\n GuildMembers: 1 << 1,\n GuildModeration: 1 << 2,\n GuildExpressions: 1 << 3,\n GuildIntegrations: 1 << 4,\n GuildWebhooks: 1 << 5,\n GuildInvites: 1 << 6,\n GuildVoiceStates: 1 << 7,\n GuildPresences: 1 << 8,\n GuildMessages: 1 << 9,\n GuildMessageReactions: 1 << 10,\n GuildMessageTyping: 1 << 11,\n DirectMessages: 1 << 12,\n DirectMessageReactions: 1 << 13,\n DirectMessageTyping: 1 << 14,\n MessageContent: 1 << 15,\n GuildScheduledEvents: 1 << 16,\n AutoModerationConfiguration: 1 << 20,\n AutoModerationExecution: 1 << 21,\n GuildMessagePolls: 1 << 24,\n DirectMessagePolls: 1 << 25,\n} as const;\n\n/** Idiomatic camelCase Gateway intent bit flags supported by Discord. */\nexport const IntentBits = {\n guild: 1 << 0,\n guilds: 1 << 0,\n guildMembers: 1 << 1,\n guildModeration: 1 << 2,\n guildBans: 1 << 2,\n guildExpressions: 1 << 3,\n guildEmojis: 1 << 3,\n guildEmojisAndStickers: 1 << 3,\n guildIntegrations: 1 << 4,\n guildWebhooks: 1 << 5,\n guildInvites: 1 << 6,\n guildVoiceStates: 1 << 7,\n guildPresences: 1 << 8,\n guildMessages: 1 << 9,\n guildMessage: 1 << 9,\n guildMessageReactions: 1 << 10,\n guildMessageTyping: 1 << 11,\n directMessages: 1 << 12,\n directMessageReactions: 1 << 13,\n directMessageTyping: 1 << 14,\n messageContent: 1 << 15,\n guildScheduledEvents: 1 << 16,\n autoModerationConfiguration: 1 << 20,\n autoModerationExecution: 1 << 21,\n guildMessagePolls: 1 << 24,\n directMessagePolls: 1 << 25,\n} as const;\n\n/** Alias for IntentBits. */\nexport const Intents = IntentBits;\n\n/** Gateway intents: an array of intent bits or names, e.g. `[GatewayIntentBits.Guilds, \"GuildMessages\"]`. A single number, name or OR-ed bitfield is not accepted. */\nexport type GatewayIntentResolvable = readonly (\n number | keyof typeof GatewayIntentBits | keyof typeof IntentBits | string\n)[];\n\n/**\n * Resolves an array of intents into a raw bitfield integer.\n * @throws {TypeError} If `intents` is not an array (an OR-ed number, a single name or a bitfield object).\n */\nexport function resolveGatewayIntents(\n intents: GatewayIntentResolvable,\n): number {\n if (!Array.isArray(intents))\n throw new TypeError(\n \"Gateway intents must be an array, e.g. [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages].\",\n );\n return intents.reduce<number>(\n (acc, intent) => acc | resolveIntent(intent),\n 0,\n );\n}\n\n/** Resolves one intent: a bitfield, an intent name in either casing, or a numeric string. */\nfunction resolveIntent(intent: number | string): number {\n if (typeof intent === \"number\") return intent;\n const bits: Record<string, number> = {\n ...IntentBits,\n ...GatewayIntentBits,\n };\n const lower = intent.charAt(0).toLowerCase() + intent.slice(1);\n if (Object.hasOwn(bits, intent)) return bits[intent]!;\n if (Object.hasOwn(bits, lower)) return bits[lower]!;\n const num = Number(intent);\n return Number.isNaN(num) ? 0 : num;\n}\n\n/** What `IntentsBitField` methods take: one intent or an array of them. Clients and gateways take only arrays. */\ntype IntentsInput = GatewayIntentResolvable[number] | GatewayIntentResolvable;\n\nfunction resolveInput(bits: IntentsInput): number {\n return resolveGatewayIntents(Array.isArray(bits) ? bits : [bits as number]);\n}\n\n/**\n * Discord.js-familiar intent bitfield.\n * @example new IntentsBitField([IntentsBitField.Flags.Guilds, \"GuildMessages\"])\n */\nexport class IntentsBitField {\n /** Intent flag values by name. */\n public static readonly Flags = GatewayIntentBits;\n /** Raw intent bitfield. */\n public bitfield: number;\n\n public constructor(bits: IntentsInput = []) {\n this.bitfield = resolveInput(bits);\n }\n\n /** Whether every given intent is set. */\n public has(bits: IntentsInput): boolean {\n const resolved = resolveInput(bits);\n return (this.bitfield & resolved) === resolved;\n }\n\n /** Whether any given intent is set. */\n public any(bits: IntentsInput): boolean {\n return (this.bitfield & resolveInput(bits)) !== 0;\n }\n\n /** Adds intents in place. @returns This bitfield. */\n public add(...bits: IntentsInput[]): this {\n for (const bit of bits) this.bitfield |= resolveInput(bit);\n return this;\n }\n\n /** Removes intents in place. @returns This bitfield. */\n public remove(...bits: IntentsInput[]): this {\n for (const bit of bits) this.bitfield &= ~resolveInput(bit);\n return this;\n }\n\n /** Names of the set intents. */\n public toArray(): (keyof typeof GatewayIntentBits)[] {\n return (\n Object.keys(GatewayIntentBits) as (keyof typeof GatewayIntentBits)[]\n ).filter((name) => this.has(GatewayIntentBits[name]));\n }\n\n /** Whether this equals another bitfield. */\n public equals(bits: IntentsInput): boolean {\n return this.bitfield === resolveInput(bits);\n }\n\n public valueOf(): number {\n return this.bitfield;\n }\n\n public toJSON(): number {\n return this.bitfield;\n }\n}\n\n// ─── Gateway Config ───────────────────────────────────────────────────────────\n\n/** Gateway connection properties (OS, browser, device). */\nexport interface GatewayProperties {\n os?: string;\n browser?: string;\n device?: string;\n [key: string]: string | undefined;\n}\n/** Gateway presence activity. */\nexport interface GatewayPresenceActivity {\n name: string;\n type?: number;\n url?: string;\n state?: string;\n}\n/** Gateway presence data. */\nexport interface GatewayPresence {\n status?: \"online\" | \"dnd\" | \"idle\" | \"invisible\" | \"offline\";\n activities?: GatewayPresenceActivity[];\n afk?: boolean;\n since?: number | null;\n}\n/** Client configuration. */\nexport interface ClientOptions {\n token: string;\n intents: GatewayIntentResolvable;\n gateway?: GatewayOptions;\n /**\n * zlib-stream transport compression for the Gateway connection, about a\n * tenth of the inbound bandwidth. Shorthand for `gateway: { compress }`,\n * which wins when both are set. Off by default.\n */\n compress?: boolean;\n rest?: RESTOptions;\n /** Opt-in bounded per-channel message cache. Messages are not cached by default. */\n messageCache?: { maxSize?: number; ttl?: number };\n /**\n * Which resources the client keeps from Gateway events. Everything is\n * cached by default; large bots can turn off what they do not read.\n * Events are still emitted either way.\n */\n cache?: {\n users?: boolean;\n members?: boolean;\n roles?: boolean;\n emojis?: boolean;\n /** Keep each member's latest presence (needs the `GuildPresences` intent). Off by default: it is a lot of data. */\n presences?: boolean;\n };\n /**\n * Default `allowed_mentions` for every message the client sends (channel\n * send/edit, replies, interaction replies, edits and follow-ups), e.g.\n * `{ parse: [] }` so nothing pings unless a message says so. A message's\n * own `allowed_mentions` always wins.\n */\n allowedMentions?: AllowedMentions;\n}\n/** Discord's `allowed_mentions` object. */\nexport interface AllowedMentions {\n parse?: (\"users\" | \"roles\" | \"everyone\")[];\n users?: string[];\n roles?: string[];\n replied_user?: boolean;\n}\n/** Gateway connection configuration. */\nexport interface GatewayOptions {\n intents?: GatewayIntentResolvable;\n reconnect?: boolean;\n maxReconnectAttempts?: number;\n reconnectBaseDelay?: number;\n reconnectMaxDelay?: number;\n shardId?: number;\n shardCount?: number;\n properties?: GatewayProperties;\n presence?: GatewayPresence;\n}\n\n/** REST request configuration. */\nexport interface RESTOptions {\n timeout?: number;\n retries?: number;\n /** Where requests go. Must be `https:` (or `http:` on this machine) with no credentials, query or fragment. */\n baseURL?: string;\n /** Allow a cleartext `http://` `baseURL` on a network you trust, such as a REST proxy. Default false. */\n allowInsecureBaseURL?: boolean;\n}\n",
12
12
  "/** Discord API snowflake identifier. */\nexport type Snowflake = string;\n\nexport * from \"./channel-kind.js\";\nexport * from \"./gateway.js\";\nexport * from \"./gateway-events.js\";\n\n// ─── Core Discord Objects ─────────────────────────────────────────────────────\n\n/** Discord user object. */\nexport interface UserData {\n id: Snowflake;\n username: string;\n discriminator?: string;\n global_name?: string | null;\n avatar?: string | null;\n bot?: boolean;\n system?: boolean;\n public_flags?: number;\n}\n/** Current authenticated bot user. */\nexport type ClientUser = UserData;\n/** Discord Gateway payload envelope. */\nexport interface GatewayPayload<T = unknown> {\n op: number;\n d: T | null;\n s: number | null;\n t: string | null;\n}\n/** Generic Discord API error payload. */\nexport interface APIError {\n code?: number;\n message?: string;\n errors?: Record<string, unknown>;\n}\n\n// ─── Discord Flags & Enums ────────────────────────────────────────────────────\n\n/** Discord message flags. */\nexport const MessageFlags = {\n Crossposted: 1,\n IsCrosspost: 2,\n SuppressEmbeds: 4,\n SourceMessageDeleted: 8,\n Urgent: 16,\n HasThread: 32,\n Ephemeral: 64,\n Loading: 128,\n IsComponentsV2: 32768,\n} as const;\n/** One {@link MessageFlags} value, usable as a type. */\nexport type MessageFlags = (typeof MessageFlags)[keyof typeof MessageFlags];\n\n/** Discord channel types. */\nexport const ChannelEnum = {\n GuildText: 0,\n DM: 1,\n GuildVoice: 2,\n GroupDM: 3,\n GuildCategory: 4,\n GuildAnnouncement: 5,\n AnnouncementThread: 10,\n PublicThread: 11,\n PrivateThread: 12,\n GuildStageVoice: 13,\n GuildDirectory: 14,\n GuildForum: 15,\n GuildMedia: 16,\n} as const;\n/** One {@link ChannelEnum} value, usable as a type. */\nexport type ChannelEnum = (typeof ChannelEnum)[keyof typeof ChannelEnum];\n\n/** Discord component types. */\nexport const ComponentEnum = {\n ActionRow: 1,\n Button: 2,\n StringSelect: 3,\n TextInput: 4,\n UserSelect: 5,\n RoleSelect: 6,\n MentionableSelect: 7,\n ChannelSelect: 8,\n Section: 9,\n TextDisplay: 10,\n Thumbnail: 11,\n MediaGallery: 12,\n File: 13,\n Separator: 14,\n ContentInventoryEntry: 16,\n Container: 17,\n} as const;\n/** One {@link ComponentEnum} value, usable as a type. */\nexport type ComponentEnum = (typeof ComponentEnum)[keyof typeof ComponentEnum];\n\n/** Discord button style types. */\nexport const ButtonType = {\n Primary: 1,\n Secondary: 2,\n Success: 3,\n Danger: 4,\n Link: 5,\n Premium: 6,\n} as const;\n/** One {@link ButtonType} value, usable as a type: `style: ButtonType`. */\nexport type ButtonType = (typeof ButtonType)[keyof typeof ButtonType];\n\n/** Discord text input style types. */\nexport const TextInputType = {\n Short: 1,\n Paragraph: 2,\n} as const;\n/** One {@link TextInputType} value, usable as a type. */\nexport type TextInputType = (typeof TextInputType)[keyof typeof TextInputType];\n\n/** Discord interaction response types. */\nexport const InteractionResponseEnum = {\n Pong: 1,\n ChannelMessage: 4,\n DeferredChannelMessage: 5,\n DeferredMessageUpdate: 6,\n MessageUpdate: 7,\n Autocomplete: 8,\n Modal: 9,\n} as const;\n/** One {@link InteractionResponseEnum} value, usable as a type. */\nexport type InteractionResponseEnum =\n (typeof InteractionResponseEnum)[keyof typeof InteractionResponseEnum];\n\n/** Discord sticker format types. */\nexport const StickerFormatEnum = {\n PNG: 1,\n APNG: 2,\n Lottie: 3,\n GIF: 4,\n} as const;\n/** One {@link StickerFormatEnum} value, usable as a type. */\nexport type StickerFormatEnum =\n (typeof StickerFormatEnum)[keyof typeof StickerFormatEnum];\n\n/** Discord sticker types. */\nexport const StickerEnum = {\n Standard: 1,\n Guild: 2,\n} as const;\n/** One {@link StickerEnum} value, usable as a type. */\nexport type StickerEnum = (typeof StickerEnum)[keyof typeof StickerEnum];\n\n/** Discord verification levels. */\nexport const VerificationLevel = {\n None: 0,\n Low: 1,\n Medium: 2,\n High: 3,\n VeryHigh: 4,\n} as const;\n\n/** Discord premium tiers. */\nexport const PremiumTier = {\n None: 0,\n Tier1: 1,\n Tier2: 2,\n Tier3: 3,\n} as const;\n\n// ─── Embeds ───────────────────────────────────────────────────────────────────\n\n/** Raw Discord embed footer object. */\nexport interface APIEmbedFooter {\n text: string;\n icon_url?: string;\n proxy_icon_url?: string;\n}\n/** Raw Discord embed image/thumbnail/video object. */\nexport interface APIEmbedMedia {\n url: string;\n proxy_url?: string;\n height?: number;\n width?: number;\n}\n/** Raw Discord embed provider object. */\nexport interface APIEmbedProvider {\n name?: string;\n url?: string;\n}\n/** Raw Discord embed author object. */\nexport interface APIEmbedAuthor {\n name: string;\n url?: string;\n icon_url?: string;\n proxy_icon_url?: string;\n}\n/** Raw Discord embed field object. */\nexport interface APIEmbedField {\n name: string;\n value: string;\n inline?: boolean;\n}\n/** Raw Discord embed object. */\nexport interface APIEmbed {\n title?: string;\n type?: string;\n description?: string;\n url?: string;\n timestamp?: string;\n color?: number;\n footer?: APIEmbedFooter;\n image?: APIEmbedMedia;\n thumbnail?: APIEmbedMedia;\n video?: APIEmbedMedia;\n provider?: APIEmbedProvider;\n author?: APIEmbedAuthor;\n fields?: APIEmbedField[];\n}\n\n// ─── Message Components ───────────────────────────────────────────────────────\n\n/** Raw Discord select menu option. */\nexport interface APISelectMenuOption {\n label: string;\n value: string;\n description?: string;\n emoji?: APIPartialEmoji;\n default?: boolean;\n}\n/** Raw Discord emoji (partial, as used in components). */\nexport interface APIPartialEmoji {\n id?: Snowflake | null;\n name?: string | null;\n animated?: boolean;\n}\n/** Raw Discord button component. */\nexport interface APIButtonComponent {\n type: 2;\n style: number;\n label?: string;\n emoji?: APIPartialEmoji;\n custom_id?: string;\n url?: string;\n sku_id?: string;\n disabled?: boolean;\n}\n/** Raw Discord select menu component. */\nexport interface APISelectMenuComponent {\n type: 3 | 5 | 6 | 7 | 8;\n custom_id: string;\n options?: APISelectMenuOption[];\n channel_types?: number[];\n placeholder?: string;\n min_values?: number;\n max_values?: number;\n disabled?: boolean;\n}\n/** Raw Discord text input component. */\nexport interface APITextInputComponent {\n type: 4;\n custom_id: string;\n style: number;\n label: string;\n min_length?: number;\n max_length?: number;\n required?: boolean;\n value?: string;\n placeholder?: string;\n}\n/** Union of all raw message component types. */\nexport type APIMessageActionRowComponent =\n APIButtonComponent | APISelectMenuComponent | APITextInputComponent;\n/** Raw Discord action row component. */\nexport interface APIActionRowComponent {\n type: 1;\n id?: number;\n components: APIMessageActionRowComponent[];\n}\n/** Union including action rows and V2 components. */\nexport type APIMessageComponent =\n APIActionRowComponent | { type: Exclude<number, 1>; [key: string]: any };\n\n// ─── Message payloads ────────────────────────────────────────────────────────\n\n/** A Discord payload, or a builder that serialises to one (its `toJSON()` runs when the request is sent). */\nexport type Buildable<T> = T | { toJSON(): T };\n\n/**\n * A message Lunibee sends: channel send and edit, message reply and edit,\n * interaction replies, follow-ups and updates. Embeds and components may be\n * builders or raw objects. Other Discord fields pass through unchanged.\n */\nexport interface MessagePayload {\n content?: string;\n embeds?: Buildable<APIEmbed>[];\n components?: Buildable<APIMessageComponent>[];\n allowed_mentions?: import(\"./gateway.js\").AllowedMentions;\n /** Discord message flags, e.g. `MessageFlags.SuppressEmbeds`. */\n flags?: number;\n tts?: boolean;\n /** Attachment metadata for files sent with the message. */\n attachments?: Array<{\n id: number | string;\n filename?: string;\n description?: string;\n }>;\n [key: string]: unknown;\n}\n\n/** A file to upload with a message. */\nexport interface MessageFile {\n name: string;\n data: Blob | Uint8Array | ArrayBuffer | string;\n contentType?: string;\n}\n\n/** A poll to send; Discord fills in `results` and `expiry` when it is read back. */\nexport interface MessagePoll {\n question: { text?: string; emoji?: APIPartialEmoji };\n answers: Array<{ poll_media: { text?: string; emoji?: APIPartialEmoji } }>;\n /** Hours the poll stays open (1-768). */\n duration?: number;\n allow_multiselect?: boolean;\n layout_type?: number;\n}\n\n/** What `send()` takes. */\nexport interface MessageCreateOptions extends MessagePayload {\n /** Files to upload; the message is sent as multipart. */\n files?: MessageFile[];\n /** Reply to or forward another message. */\n message_reference?: APIMessageReference;\n poll?: MessagePoll;\n sticker_ids?: Snowflake[];\n /** Returned on the Gateway event so the client can match its own message. */\n nonce?: string | number;\n enforce_nonce?: boolean;\n}\n\n/** What `edit()` takes: the fields Discord lets you change after sending. */\nexport interface MessageEditOptions extends MessagePayload {\n files?: MessageFile[];\n}\n\n/** What a reply, edit-reply, follow-up or update to an interaction takes. */\nexport interface InteractionReplyOptions extends MessagePayload {\n /** Only the person who ran the command sees it. */\n ephemeral?: boolean;\n files?: MessageFile[];\n poll?: MessagePoll;\n /** On `reply()` / `update()`: return the created message (one request, no `fetchReply()`). */\n withResponse?: boolean;\n}\n\n/** What `update()` on a component interaction takes. */\nexport type InteractionUpdateOptions = InteractionReplyOptions;\n\n/** What `followUp()` takes. */\nexport type FollowUpOptions = InteractionReplyOptions;\n\n// ─── Attachments ─────────────────────────────────────────────────────────────\n\n/** Raw Discord attachment object. */\nexport interface APIAttachment {\n id: Snowflake;\n filename: string;\n description?: string | null;\n content_type?: string;\n size: number;\n url: string;\n proxy_url: string;\n height?: number | null;\n width?: number | null;\n ephemeral?: boolean;\n duration_secs?: number;\n waveform?: string;\n flags?: number;\n}\n\n// ─── Stickers ────────────────────────────────────────────────────────────────\n\n/** Compact sticker item as included in messages. */\nexport interface APIStickerItem {\n id: Snowflake;\n name: string;\n format_type: number;\n}\n/** Full Discord sticker object. */\nexport interface APISticker {\n id: Snowflake;\n pack_id?: Snowflake;\n name: string;\n description?: string | null;\n tags?: string;\n type: number;\n format_type: number;\n available?: boolean;\n guild_id?: Snowflake;\n user?: UserData;\n sort_value?: number;\n}\n\n// ─── Messages ────────────────────────────────────────────────────────────────\n\n/** Raw Discord message reference. */\nexport interface APIMessageReference {\n type?: number;\n message_id?: Snowflake;\n channel_id?: Snowflake;\n guild_id?: Snowflake;\n fail_if_not_exists?: boolean;\n}\n/** Raw Discord message reaction. */\nexport interface APIMessageReaction {\n count: number;\n count_details?: Record<string, number>;\n me?: boolean;\n me_burst?: boolean;\n emoji: APIPartialEmoji;\n burst_colors?: string[];\n}\n/** Raw Discord poll object. */\nexport interface APIPoll {\n question: { text?: string; emoji?: APIPartialEmoji };\n answers: Array<{\n answer_id: number;\n poll_media: { text?: string; emoji?: APIPartialEmoji };\n }>;\n expiry: string | null;\n allow_multiselect: boolean;\n layout_type: number;\n results?: {\n is_finalized: boolean;\n answer_counts: Array<{ id: number; count: number; me_voted: boolean }>;\n };\n}\n/** A forwarded message's snapshot of the original. */\nexport interface APIMessageSnapshot {\n message: Partial<\n Pick<\n APIMessage,\n | \"type\"\n | \"content\"\n | \"embeds\"\n | \"attachments\"\n | \"timestamp\"\n | \"edited_timestamp\"\n | \"flags\"\n | \"mentions\"\n | \"mention_roles\"\n | \"sticker_items\"\n | \"components\"\n >\n >;\n}\n/** Raw Discord message object. */\nexport interface APIMessage {\n id: Snowflake;\n channel_id: Snowflake;\n author: UserData;\n content: string;\n timestamp?: string;\n edited_timestamp?: string | null;\n tts?: boolean;\n mention_everyone?: boolean;\n mentions?: UserData[];\n mention_roles?: Snowflake[];\n mention_channels?: Array<Record<string, unknown>>;\n attachments?: APIAttachment[];\n embeds?: APIEmbed[];\n reactions?: APIMessageReaction[];\n nonce?: string | number | null;\n pinned?: boolean;\n webhook_id?: Snowflake;\n type?: number;\n activity?: Record<string, unknown>;\n application?: Record<string, unknown>;\n application_id?: Snowflake;\n message_reference?: APIMessageReference;\n flags?: number;\n referenced_message?: APIMessage | null;\n interaction_metadata?: Record<string, unknown>;\n thread?: Record<string, unknown>;\n components?: APIMessageComponent[];\n sticker_items?: APIStickerItem[];\n stickers?: APISticker[];\n position?: number;\n role_subscription_data?: Record<string, unknown>;\n purchase_notification?: Record<string, unknown>;\n poll?: APIPoll;\n /** Forwarded messages: a partial copy of the original (content, embeds, attachments, …). */\n message_snapshots?: APIMessageSnapshot[];\n guild_id?: Snowflake;\n /** The author's guild member, on guild messages from the Gateway (without `user`; the author is the user). */\n member?: Omit<APIGuildMember, \"user\"> & { user?: UserData };\n}\n\n// ─── Channels ────────────────────────────────────────────────────────────────\n\n/** Raw Discord channel object. */\nexport interface APIChannel {\n id: Snowflake;\n type: number;\n guild_id?: Snowflake;\n position?: number;\n permission_overwrites?: APIOverwrite[];\n name?: string | null;\n topic?: string | null;\n nsfw?: boolean;\n last_message_id?: Snowflake | null;\n bitrate?: number;\n user_limit?: number;\n rate_limit_per_user?: number;\n recipients?: UserData[];\n icon?: string | null;\n owner_id?: Snowflake;\n application_id?: Snowflake;\n parent_id?: Snowflake | null;\n last_pin_timestamp?: string | null;\n rtc_region?: string | null;\n video_quality_mode?: number;\n message_count?: number;\n member_count?: number;\n thread_metadata?: APIThreadMetadata;\n default_auto_archive_duration?: number;\n flags?: number;\n total_message_sent?: number;\n available_tags?: APIForumTag[];\n default_reaction_emoji?: APIPartialEmoji | null;\n default_thread_rate_limit_per_user?: number;\n default_sort_order?: number | null;\n default_forum_layout?: number;\n}\n\n/** Raw Discord thread metadata. */\nexport interface APIThreadMetadata {\n archived: boolean;\n auto_archive_duration: number;\n archive_timestamp: string;\n locked: boolean;\n invitable?: boolean;\n create_timestamp?: string | null;\n}\n\n/** Fields for a forum or media channel tag. */\nexport interface ForumTagInput {\n name: string;\n /** Only moderators (Manage Threads) can apply it. */\n moderated?: boolean;\n emoji_id?: Snowflake | null;\n emoji_name?: string | null;\n}\n\n/** A role's colours: a solid colour, or a gradient or holographic style. */\nexport interface APIRoleColors {\n primary_color: number;\n secondary_color: number | null;\n tertiary_color: number | null;\n}\n\n/** Raw Discord forum tag. */\nexport interface APIForumTag {\n id: Snowflake;\n name: string;\n moderated: boolean;\n emoji_id?: Snowflake | null;\n emoji_name?: string | null;\n}\n\n/** Raw Discord thread member. */\nexport interface APIThreadMember {\n id?: Snowflake;\n user_id?: Snowflake;\n join_timestamp: string;\n flags: number;\n member?: APIGuildMember;\n}\n\n// ─── Guild welcome screen and onboarding ──────────────────────────────────────\n\n/** A channel shown on the welcome screen. */\nexport interface APIWelcomeScreenChannel {\n channel_id: Snowflake;\n description: string;\n emoji_id: Snowflake | null;\n emoji_name: string | null;\n}\n\n/** Raw Discord welcome screen. */\nexport interface APIWelcomeScreen {\n description: string | null;\n welcome_channels: APIWelcomeScreenChannel[];\n}\n\n/** One answer to an onboarding question. */\nexport interface APIOnboardingOption {\n id: Snowflake;\n channel_ids: Snowflake[];\n role_ids: Snowflake[];\n emoji?: APIPartialEmoji;\n title: string;\n description: string | null;\n}\n\n/** A question in a guild's onboarding. */\nexport interface APIOnboardingPrompt {\n id: Snowflake;\n type: number;\n options: APIOnboardingOption[];\n title: string;\n single_select: boolean;\n required: boolean;\n in_onboarding: boolean;\n}\n\n/** Raw Discord guild onboarding. */\nexport interface APIGuildOnboarding {\n guild_id: Snowflake;\n prompts: APIOnboardingPrompt[];\n default_channel_ids: Snowflake[];\n enabled: boolean;\n mode: number;\n}\n\n// ─── Roles ────────────────────────────────────────────────────────────────────\n\n/** Raw Discord role object. */\nexport interface APIRole {\n id: Snowflake;\n name: string;\n color: number;\n hoist: boolean;\n icon?: string | null;\n unicode_emoji?: string | null;\n /** Gradient and holographic colours; `color` stays the primary colour. */\n colors?: APIRoleColors;\n position: number;\n permissions: string;\n managed: boolean;\n mentionable: boolean;\n tags?: Record<string, unknown>;\n flags?: number;\n}\n\n// ─── Emoji ────────────────────────────────────────────────────────────────────\n\n/** Raw Discord emoji object. */\nexport interface APIEmoji {\n id: Snowflake | null;\n name: string | null;\n roles?: Snowflake[];\n user?: UserData;\n require_colons?: boolean;\n managed?: boolean;\n animated?: boolean;\n available?: boolean;\n}\n\n// ─── Guilds ───────────────────────────────────────────────────────────────────\n\n/** Raw Discord guild object. */\nexport interface APIGuild {\n id: Snowflake;\n name: string;\n icon?: string | null;\n icon_hash?: string | null;\n splash?: string | null;\n discovery_splash?: string | null;\n owner?: boolean;\n owner_id?: Snowflake;\n permissions?: string;\n afk_channel_id?: Snowflake | null;\n afk_timeout?: number;\n widget_enabled?: boolean;\n widget_channel_id?: Snowflake | null;\n verification_level?: number;\n default_message_notifications?: number;\n explicit_content_filter?: number;\n roles?: APIRole[];\n emojis?: APIEmoji[];\n stickers?: APISticker[];\n features?: string[];\n mfa_level?: number;\n application_id?: Snowflake | null;\n system_channel_id?: Snowflake | null;\n system_channel_flags?: number;\n rules_channel_id?: Snowflake | null;\n max_presences?: number | null;\n max_members?: number;\n vanity_url_code?: string | null;\n description?: string | null;\n banner?: string | null;\n premium_tier?: number;\n premium_subscription_count?: number;\n preferred_locale?: string;\n public_updates_channel_id?: Snowflake | null;\n max_video_channel_users?: number;\n premium_progress_bar_enabled?: boolean;\n approximate_member_count?: number;\n approximate_presence_count?: number;\n nsfw_level?: number;\n safety_alerts_channel_id?: Snowflake | null;\n member_count?: number;\n}\n\n// ─── Welcome Screen ───────────────────────────────────────────────────────────\n\nexport interface APIWelcomeScreenChannel {\n channel_id: Snowflake;\n description: string;\n emoji_id: Snowflake | null;\n emoji_name: string | null;\n}\n\nexport interface APIGuildWelcomeScreen {\n description: string | null;\n welcome_channels: APIWelcomeScreenChannel[];\n}\n\n// ─── Guild Onboarding ─────────────────────────────────────────────────────────\n\nexport interface APIOnboardingPromptOption {\n id: Snowflake;\n channel_ids: Snowflake[];\n role_ids: Snowflake[];\n emoji?: APIPartialEmoji;\n title: string;\n description: string | null;\n}\n\nexport interface APIOnboardingPrompt {\n id: Snowflake;\n type: number;\n options: APIOnboardingPromptOption[];\n title: string;\n single_select: boolean;\n required: boolean;\n in_onboarding: boolean;\n}\n\nexport interface APIGuildOnboarding {\n guild_id: Snowflake;\n prompts: APIOnboardingPrompt[];\n default_channel_ids: Snowflake[];\n enabled: boolean;\n mode: number;\n}\n\n/** Raw Discord guild member object. */\nexport interface APIGuildMember {\n user: UserData;\n nick?: string | null;\n avatar?: string | null;\n roles: Snowflake[];\n joined_at: string;\n premium_since?: string | null;\n deaf?: boolean;\n mute?: boolean;\n flags?: number;\n pending?: boolean;\n permissions?: string;\n communication_disabled_until?: string | null;\n guild_id?: Snowflake;\n}\n\n// ─── Voice ────────────────────────────────────────────────────────────────────\n\n/** Raw Discord voice state object. */\nexport interface APIVoiceState {\n guild_id?: Snowflake;\n channel_id?: Snowflake | null;\n user_id: Snowflake;\n member?: APIGuildMember;\n session_id: string;\n deaf: boolean;\n mute: boolean;\n self_deaf: boolean;\n self_mute: boolean;\n self_stream?: boolean;\n self_video: boolean;\n suppress: boolean;\n request_to_speak_timestamp?: string | null;\n}\n\n/** Raw Discord voice server update event. */\nexport interface APIVoiceServerUpdate {\n token: string;\n guild_id: Snowflake;\n endpoint?: string | null;\n}\n\n// ─── Presence ────────────────────────────────────────────────────────────────\n\n/** Raw Discord activity object. */\n/** Discord activity types, for presences (`setPresence({ activities: [{ name, type: ActivityEnum.Watching }] })`). */\nexport const ActivityEnum = {\n Playing: 0,\n Streaming: 1,\n Listening: 2,\n Watching: 3,\n Custom: 4,\n Competing: 5,\n} as const;\n/** One {@link ActivityEnum} value, usable as a type. */\nexport type ActivityEnum = (typeof ActivityEnum)[keyof typeof ActivityEnum];\n\nexport interface APIActivity {\n name: string;\n type: number;\n url?: string | null;\n created_at: number;\n state?: string | null;\n details?: string | null;\n emoji?: APIPartialEmoji | null;\n}\n\n/** Raw Discord presence update event. */\nexport interface APIPresenceUpdate {\n user: { id: Snowflake } & Partial<UserData>;\n guild_id: Snowflake;\n status: string;\n activities: APIActivity[];\n client_status: { desktop?: string; mobile?: string; web?: string };\n}\n\n// ─── Typing ───────────────────────────────────────────────────────────────────\n\n/** Raw Discord typing start event. */\nexport interface APITypingStart {\n channel_id: Snowflake;\n guild_id?: Snowflake;\n user_id: Snowflake;\n timestamp: number;\n member?: APIGuildMember;\n}\n\n// ─── Guilds ──────────────────────────────────────────────────────────────────\n\n/** Raw Discord guild preview. */\nexport interface APIGuildPreview {\n id: Snowflake;\n name: string;\n icon: string | null;\n splash: string | null;\n discovery_splash: string | null;\n emojis: unknown[];\n features: string[];\n approximate_member_count: number;\n approximate_presence_count: number;\n description: string | null;\n stickers: unknown[];\n}\n\n// ─── Invites ─────────────────────────────────────────────────────────────────\n\n/** Raw Discord invite. */\nexport interface APIInvite {\n code: string;\n guild?: Partial<APIGuild>;\n channel: Partial<APIChannel>;\n inviter?: UserData;\n target_type?: number;\n target_user?: UserData;\n approximate_presence_count?: number;\n approximate_member_count?: number;\n}\n\n/** Raw Discord invite create event. */\nexport interface APIInviteCreate {\n channel_id: Snowflake;\n code: string;\n created_at: string;\n guild_id?: Snowflake;\n inviter?: UserData;\n max_age: number;\n max_uses: number;\n target_type?: number;\n target_user?: UserData;\n temporary: boolean;\n uses: number;\n}\n\n/** Raw Discord invite delete event. */\nexport interface APIInviteDelete {\n channel_id: Snowflake;\n guild_id?: Snowflake;\n code: string;\n}\n\n// ─── Webhooks ────────────────────────────────────────────────────────────────\n\n/** Raw Discord webhooks update event. */\nexport interface APIWebhooksUpdate {\n guild_id: Snowflake;\n channel_id: Snowflake;\n}\n\n/** Raw Discord webhook object. */\nexport interface APIWebhook {\n id: Snowflake;\n type: number;\n guild_id?: Snowflake | null;\n channel_id?: Snowflake | null;\n user?: UserData;\n name?: string | null;\n avatar?: string | null;\n token?: string;\n application_id?: Snowflake | null;\n url?: string;\n}\n\n// ─── AutoMod ─────────────────────────────────────────────────────────────────\n\n/** Raw Discord AutoMod action. */\nexport interface APIAutoModerationAction {\n type: number;\n metadata?: {\n channel_id?: Snowflake;\n duration_seconds?: number;\n custom_message?: string;\n };\n}\n\n// ─── Audit Logs ──────────────────────────────────────────────────────────────\n\n/** Raw Discord audit log change object. */\nexport interface APIAuditLogChange {\n new_value?: unknown;\n old_value?: unknown;\n key: string;\n}\n\n/** Raw Discord audit log entry options object. */\nexport interface APIAuditLogOptions {\n app_id?: Snowflake;\n auto_moderation_rule_name?: string;\n auto_moderation_rule_trigger_type?: string;\n channel_id?: Snowflake;\n count?: string;\n delete_member_days?: string;\n id?: Snowflake;\n members_removed?: string;\n message_id?: Snowflake;\n role_name?: string;\n type?: string;\n integration_type?: string;\n}\n\n/** Raw Discord audit log entry object. */\nexport interface APIAuditLogEntry {\n target_id: string | null;\n changes?: APIAuditLogChange[];\n user_id: Snowflake | null;\n id: Snowflake;\n action_type: number;\n options?: APIAuditLogOptions;\n reason?: string;\n}\n\n/** Raw Discord audit log object. */\nexport interface APIAuditLog {\n audit_log_entries: APIAuditLogEntry[];\n guild_scheduled_events: APIGuildScheduledEvent[];\n integrations: Array<Record<string, unknown>>;\n threads: APIChannel[];\n users: UserData[];\n webhooks: APIWebhook[];\n application_commands: APIApplicationCommand[];\n auto_moderation_rules: APIAutoModerationRule[];\n}\n\n/** Raw Discord AutoMod rule object. */\nexport interface APIAutoModerationRule {\n id: Snowflake;\n guild_id: Snowflake;\n name: string;\n creator_id: Snowflake;\n event_type: number;\n trigger_type: number;\n trigger_metadata: Record<string, unknown>;\n actions: APIAutoModerationAction[];\n enabled: boolean;\n exempt_roles: Snowflake[];\n exempt_channels: Snowflake[];\n}\n\n/** Raw Discord AutoMod action execution event. */\nexport interface APIAutoModerationActionExecution {\n guild_id: Snowflake;\n action: APIAutoModerationAction;\n rule_id: Snowflake;\n rule_trigger_type: number;\n user_id: Snowflake;\n channel_id?: Snowflake;\n message_id?: Snowflake;\n alert_system_message_id?: Snowflake;\n content: string;\n matched_keyword?: string | null;\n matched_content?: string | null;\n}\n\n// ─── Scheduled Events ─────────────────────────────────────────────────────────\n\n/** Raw Discord guild scheduled event entity metadata. */\nexport interface APIGuildScheduledEventEntityMetadata {\n location?: string;\n}\n\n/** Raw Discord guild scheduled event object. */\nexport interface APIGuildScheduledEvent {\n id: Snowflake;\n guild_id: Snowflake;\n channel_id?: Snowflake | null;\n creator_id?: Snowflake | null;\n name: string;\n description?: string | null;\n scheduled_start_time: string;\n scheduled_end_time?: string | null;\n privacy_level: number;\n status: number;\n entity_type: number;\n entity_id?: Snowflake | null;\n entity_metadata?: APIGuildScheduledEventEntityMetadata | null;\n creator?: UserData;\n user_count?: number;\n image?: string | null;\n}\n\n// ─── Stage Instances ─────────────────────────────────────────────────────────\n\n/** Raw Discord stage instance object. */\nexport interface APIStageInstance {\n id: Snowflake;\n guild_id: Snowflake;\n channel_id: Snowflake;\n topic: string;\n privacy_level: number;\n discoverable_disabled?: boolean;\n guild_scheduled_event_id?: Snowflake | null;\n}\n\n// ─── Application Commands ─────────────────────────────────────────────────────\n\n/** Discord application command option types. */\nexport const ApplicationCommandOptionEnum = {\n SubCommand: 1,\n SubCommandGroup: 2,\n String: 3,\n Integer: 4,\n Boolean: 5,\n User: 6,\n Channel: 7,\n Role: 8,\n Mentionable: 9,\n Number: 10,\n Attachment: 11,\n} as const;\n/** One {@link ApplicationCommandOptionEnum} value, usable as a type. */\nexport type ApplicationCommandOptionEnum =\n (typeof ApplicationCommandOptionEnum)[keyof typeof ApplicationCommandOptionEnum];\n\n/** Discord application command types. */\nexport const ApplicationCommandEnum = {\n ChatInput: 1,\n User: 2,\n Message: 3,\n} as const;\n/** One {@link ApplicationCommandEnum} value, usable as a type. */\nexport type ApplicationCommandEnum =\n (typeof ApplicationCommandEnum)[keyof typeof ApplicationCommandEnum];\n\n/** Raw Discord application command option. */\nexport interface APIApplicationCommandOption {\n type: number;\n name: string;\n description: string;\n required?: boolean;\n choices?: Array<{ name: string; value: string | number }>;\n options?: APIApplicationCommandOption[];\n min_value?: number;\n max_value?: number;\n min_length?: number;\n max_length?: number;\n autocomplete?: boolean;\n channel_types?: number[];\n}\n\n/** Raw Discord application command object (from API). */\nexport interface APIApplicationCommand {\n id: Snowflake;\n type?: number;\n application_id: Snowflake;\n guild_id?: Snowflake;\n name: string;\n description: string;\n options?: APIApplicationCommandOption[];\n default_member_permissions?: string | null;\n /** Where the command can be used: 0 guilds, 1 the bot's DMs, 2 other DMs. */\n contexts?: number[];\n nsfw?: boolean;\n version: Snowflake;\n}\n\n/** Data for creating/overwriting an application command. */\nexport interface ApplicationCommandData {\n name: string;\n description: string;\n type?: number;\n options?: APIApplicationCommandOption[];\n default_member_permissions?: string | null;\n /** Where the command can be used: 0 guilds, 1 the bot's DMs, 2 other DMs. */\n contexts?: number[];\n nsfw?: boolean;\n}\n\n/** A channel permission overwrite for a role (type 0) or member (type 1). */\nexport interface APIOverwrite {\n id: Snowflake;\n type: 0 | 1;\n /** Allowed permission bits as a decimal string. */\n allow: string;\n /** Denied permission bits as a decimal string. */\n deny: string;\n}\n\n// ─── Soundboard & Monetization ───────────────────────────────────────────────\n/** Raw Discord soundboard sound. */\nexport interface APISoundboardSound {\n sound_id: string;\n name: string;\n volume: number;\n emoji_id: string | null;\n emoji_name: string | null;\n guild_id?: string;\n available: boolean;\n user?: UserData;\n}\n\n/** Raw Discord SKU. */\nexport interface APISKU {\n id: string;\n type: number;\n application_id: string;\n name: string;\n slug: string;\n flags: number;\n}\n\n/** Raw Discord entitlement. */\nexport interface APIEntitlement {\n id: string;\n sku_id: string;\n application_id: string;\n user_id?: string;\n guild_id?: string;\n type: number;\n deleted: boolean;\n starts_at?: string | null;\n ends_at?: string | null;\n consumed?: boolean;\n}\n\n/** Raw Discord subscription. */\nexport interface APISubscription {\n id: string;\n user_id: string;\n sku_ids: string[];\n entitlement_ids: string[];\n current_period_start: string;\n current_period_end: string;\n status: number;\n canceled_at: string | null;\n country?: string;\n}\n",
13
13
  "import { ButtonType, ComponentEnum } from \"@lunibee/types\";\nexport { ButtonType, ComponentEnum };\n\nexport const TextInputType = { Short: 1, Paragraph: 2 } as const;\n/** One {@link TextInputType} value, usable as a type. */\nexport type TextInputType = (typeof TextInputType)[keyof typeof TextInputType];\nexport interface APIComponentEmoji {\n id?: string | null;\n name?: string | null;\n animated?: boolean;\n}\nexport interface APIButtonComponent {\n type: typeof ComponentEnum.Button;\n style: 1 | 2 | 3 | 4 | 5 | 6;\n custom_id?: string;\n label?: string;\n emoji?: APIComponentEmoji;\n url?: string;\n /** SKU for premium (style 6) buttons. */\n sku_id?: string;\n disabled?: boolean;\n}\nexport interface APISelectOption {\n label: string;\n value: string;\n description?: string;\n emoji?: APIComponentEmoji;\n default?: boolean;\n}\nexport interface APIStringSelectComponent {\n type: typeof ComponentEnum.StringSelect;\n custom_id?: string;\n placeholder?: string;\n min_values?: number;\n max_values?: number;\n required?: boolean;\n disabled?: boolean;\n options?: APISelectOption[];\n}\nexport interface APIEntitySelectComponent {\n type:\n | typeof ComponentEnum.UserSelect\n | typeof ComponentEnum.RoleSelect\n | typeof ComponentEnum.MentionableSelect\n | typeof ComponentEnum.ChannelSelect;\n custom_id?: string;\n placeholder?: string;\n min_values?: number;\n max_values?: number;\n required?: boolean;\n disabled?: boolean;\n default_values?: APISelectDefaultValue[];\n}\nexport interface APITextInputComponent {\n type: typeof ComponentEnum.TextInput;\n style: typeof TextInputType.Short | typeof TextInputType.Paragraph;\n custom_id?: string;\n label?: string;\n placeholder?: string;\n min_length?: number;\n max_length?: number;\n required?: boolean;\n value?: string;\n}\nexport interface APIModalComponent {\n type: 9;\n custom_id: string;\n title: string;\n components: APIActionRowComponent[];\n}\nexport type APIActionRowChild =\n | APIButtonComponent\n | APIStringSelectComponent\n | APIEntitySelectComponent\n | APITextInputComponent;\nexport interface APIActionRowComponent {\n type: typeof ComponentEnum.ActionRow;\n components: APIActionRowChild[];\n}\nexport interface APISectionComponent {\n type: typeof ComponentEnum.Section;\n components?: APIComponent[]; // text displays\n accessory?: APIComponent; // buttons, thumbnails, etc.\n}\nexport interface APITextDisplayComponent {\n type: typeof ComponentEnum.TextDisplay;\n content: string;\n}\nexport interface APIMediaGalleryComponent {\n type: typeof ComponentEnum.MediaGallery;\n items: { media: { url: string; description?: string } }[];\n}\n/** Default values accepted by an auto-populated entity select. */\nexport interface APISelectDefaultValue {\n id: string;\n type: \"user\" | \"role\" | \"channel\";\n}\nexport interface APIFileComponent {\n type: typeof ComponentEnum.File;\n file: { url: string };\n spoiler?: boolean;\n}\nexport interface APISeparatorComponent {\n type: typeof ComponentEnum.Separator;\n spacing?: 1 | 2;\n divider?: boolean;\n}\nexport interface APIThumbnailComponent {\n type: typeof ComponentEnum.Thumbnail;\n url: string;\n proxy_url?: string;\n width?: number;\n height?: number;\n description?: string;\n spoiler?: boolean;\n}\nexport interface APIContentInventoryEntryComponent {\n type: typeof ComponentEnum.ContentInventoryEntry;\n id: string;\n}\nexport interface APIContainerComponent {\n type: typeof ComponentEnum.Container;\n components: APIComponent[];\n accent_color?: number;\n spoiler?: boolean;\n}\nexport type APIComponent =\n | APIActionRowComponent\n | APIButtonComponent\n | APIStringSelectComponent\n | APIEntitySelectComponent\n | APITextInputComponent\n | APISectionComponent\n | APITextDisplayComponent\n | APIThumbnailComponent\n | APIMediaGalleryComponent\n | APIFileComponent\n | APISeparatorComponent\n | APIContentInventoryEntryComponent\n | APIContainerComponent;\n\nexport class CreateActionRow<\n T extends { toJSON(): APIActionRowChild } = { toJSON(): APIActionRowChild },\n> {\n readonly #components: T[] = [];\n public addComponents(...components: T[]): this {\n if (!components.length)\n throw new TypeError(\"At least one component is required.\");\n if (this.#components.length + components.length > 5)\n throw new RangeError(\n \"An action row cannot contain more than 5 components.\",\n );\n this.#components.push(...components);\n return this;\n }\n public clearComponents(): this {\n this.#components.length = 0;\n return this;\n }\n public toJSON(): APIActionRowComponent {\n const components = this.#components.map((component) =>\n component.toJSON(),\n );\n if (components.length === 0)\n throw new RangeError(\"An action row needs at least one component.\");\n const types = components.map((component) => component.type);\n if (\n types.some((type) => type !== ComponentEnum.Button) &&\n components.length > 1\n )\n throw new RangeError(\n \"A select menu or text input must be alone in its action row.\",\n );\n return { type: ComponentEnum.ActionRow, components };\n }\n}\n/** Setters shared by string and entity select menus. */\nexport class CreateSelectMenu {\n readonly #select: APIStringSelectComponent | APIEntitySelectComponent;\n protected constructor(\n data: APIStringSelectComponent | APIEntitySelectComponent,\n ) {\n this.#select = data;\n }\n public setCustomId(value: string): this {\n validateText(value, 100, \"Component custom ID\");\n this.#select.custom_id = value;\n return this;\n }\n public setPlaceholder(value: string): this {\n validateText(value, 150, \"Component placeholder\");\n this.#select.placeholder = value;\n return this;\n }\n public setMinValues(value: number): this {\n validateCount(value, \"min_values\", 0);\n this.#select.min_values = value;\n return this;\n }\n public setMaxValues(value: number): this {\n validateCount(value, \"max_values\", 1);\n this.#select.max_values = value;\n return this;\n }\n public setRequired(value = true): this {\n this.#select.required = value;\n return this;\n }\n public setDisabled(value = true): this {\n this.#select.disabled = value;\n return this;\n }\n}\nexport class CreateStringSelect extends CreateSelectMenu {\n readonly #data: APIStringSelectComponent;\n public constructor() {\n const data: APIStringSelectComponent = {\n type: ComponentEnum.StringSelect,\n };\n super(data);\n this.#data = data;\n }\n public addOptions(...options: APISelectOption[]): this {\n if (!options.length)\n throw new TypeError(\"At least one select option is required.\");\n const current = this.#data.options ?? [];\n if (current.length + options.length > 25)\n throw new RangeError(\n \"A string select cannot contain more than 25 options.\",\n );\n for (const option of options) {\n validateText(option.label, 100, \"Select option label\");\n validateText(option.value, 100, \"Select option value\");\n if (option.description)\n validateText(\n option.description,\n 100,\n \"Select option description\",\n );\n }\n this.#data.options = [\n ...current,\n ...options.map((option) => ({ ...option })),\n ];\n return this;\n }\n public toJSON(): APIStringSelectComponent {\n assertSelect(this.#data);\n const count = this.#data.options?.length ?? 0;\n if (count === 0)\n throw new RangeError(\"A string select needs at least one option.\");\n if ((this.#data.max_values ?? 1) > count)\n throw new RangeError(\n \"max_values cannot exceed the number of options.\",\n );\n return structuredClone(this.#data);\n }\n}\nexport class CreateButton {\n readonly #data: APIButtonComponent = {\n type: ComponentEnum.Button,\n style: ButtonType.Secondary,\n };\n /** Sets the style and drops fields that style cannot carry. */\n public setStyle(style: APIButtonComponent[\"style\"]): this {\n const data = this.#data;\n data.style = style;\n if (style === ButtonType.Link) {\n delete data.custom_id;\n delete data.sku_id;\n } else if (style === ButtonType.Premium) {\n delete data.custom_id;\n delete data.url;\n delete data.label;\n delete data.emoji;\n } else {\n delete data.url;\n delete data.sku_id;\n }\n return this;\n }\n public setCustomId(value: string): this {\n validateText(value, 100, \"Button custom ID\");\n if (this.#data.style === ButtonType.Link)\n throw new TypeError(\"Link buttons cannot use custom IDs.\");\n this.#data.custom_id = value;\n return this;\n }\n public setLabel(value: string): this {\n validateText(value, 80, \"Button label\");\n this.#data.label = value;\n return this;\n }\n public setURL(value: string): this {\n validateText(value, 512, \"Button URL\");\n let url: URL;\n try {\n url = new URL(value);\n } catch (error) {\n throw new TypeError(\"Button URL must be a valid URL.\", {\n cause: error,\n });\n }\n this.setStyle(ButtonType.Link);\n this.#data.url = url.toString();\n return this;\n }\n /** Makes this a premium (purchase) button for a SKU. Premium buttons carry no label, emoji, custom ID or URL. */\n public setSKUId(skuId: string): this {\n validateText(skuId, 20, \"Button SKU ID\");\n this.setStyle(ButtonType.Premium);\n this.#data.sku_id = skuId;\n return this;\n }\n public setEmoji(emoji: APIComponentEmoji | string): this {\n this.#data.emoji =\n typeof emoji === \"string\" ? { name: emoji } : { ...emoji };\n return this;\n }\n public setDisabled(value = true): this {\n this.#data.disabled = value;\n return this;\n }\n public toJSON(): APIButtonComponent {\n const data = this.#data;\n if (data.style === ButtonType.Link) {\n if (!data.url) throw new TypeError(\"Link buttons require a URL.\");\n if (data.custom_id || data.sku_id)\n throw new TypeError(\n \"Link buttons cannot have a custom ID or SKU ID.\",\n );\n } else if (data.style === ButtonType.Premium) {\n if (!data.sku_id)\n throw new TypeError(\"Premium buttons require a SKU ID.\");\n if (data.custom_id || data.url || data.label || data.emoji)\n throw new TypeError(\n \"Premium buttons cannot have a custom ID, URL, label or emoji.\",\n );\n } else {\n if (!data.custom_id)\n throw new TypeError(\"Non-link buttons require a custom ID.\");\n if (data.url || data.sku_id)\n throw new TypeError(\n \"Only link buttons have a URL and only premium buttons have a SKU ID.\",\n );\n }\n if (data.style !== ButtonType.Premium && !data.label && !data.emoji)\n throw new TypeError(\"Buttons require a label or an emoji.\");\n return structuredClone(data);\n }\n}\nexport class CreateEntitySelect extends CreateSelectMenu {\n readonly #data: APIEntitySelectComponent;\n public constructor(\n type:\n | typeof ComponentEnum.UserSelect\n | typeof ComponentEnum.RoleSelect\n | typeof ComponentEnum.MentionableSelect\n | typeof ComponentEnum.ChannelSelect,\n ) {\n if (\n type !== ComponentEnum.UserSelect &&\n type !== ComponentEnum.RoleSelect &&\n type !== ComponentEnum.MentionableSelect &&\n type !== ComponentEnum.ChannelSelect\n )\n throw new TypeError(\"Invalid select component type.\");\n const data: APIEntitySelectComponent = { type };\n super(data);\n this.#data = data;\n }\n public setDefaultValues(...values: APISelectDefaultValue[]): this {\n this.#data.default_values = values.map((value) => ({ ...value }));\n return this;\n }\n public toJSON(): APIEntitySelectComponent {\n assertSelect(this.#data);\n return structuredClone(this.#data);\n }\n}\nexport class CreateModal {\n readonly #components: Array<{ toJSON(): APIActionRowComponent }> = [];\n #custom_id?: string;\n #title?: string;\n public setCustomId(value: string): this {\n validateText(value, 100, \"Modal custom ID\");\n this.#custom_id = value;\n return this;\n }\n public setTitle(value: string): this {\n validateText(value, 45, \"Modal title\");\n this.#title = value;\n return this;\n }\n public addComponents(\n ...components: Array<{ toJSON(): APIActionRowComponent }>\n ): this {\n if (!components.length)\n throw new TypeError(\"At least one modal component is required.\");\n if (this.#components.length + components.length > 5)\n throw new RangeError(\n \"A modal cannot contain more than 5 action rows.\",\n );\n this.#components.push(...components);\n return this;\n }\n /** Adds text inputs, each in its own action row (Discord's modal layout). @param inputs Text inputs, at most 5 per modal. */\n public addTextInputs(...inputs: CreateTextInput[]): this {\n return this.addComponents(\n ...inputs.map((input) =>\n new CreateActionRow<CreateTextInput>().addComponents(input),\n ),\n );\n }\n public toJSON(): APIModalComponent {\n if (!this.#custom_id || !this.#title)\n throw new TypeError(\"Modals require a custom ID and a title.\");\n if (this.#components.length === 0)\n throw new RangeError(\"Modals require at least one component.\");\n return {\n type: 9,\n custom_id: this.#custom_id,\n title: this.#title,\n components: this.#components.map((component) => component.toJSON()),\n };\n }\n}\nexport class CreateTextInput {\n readonly #data: APITextInputComponent = {\n type: ComponentEnum.TextInput,\n style: TextInputType.Short,\n };\n public setStyle(style: APITextInputComponent[\"style\"]): this {\n this.#data.style = style;\n return this;\n }\n public setCustomId(value: string): this {\n validateText(value, 100, \"Text input custom ID\");\n this.#data.custom_id = value;\n return this;\n }\n public setLabel(value: string): this {\n validateText(value, 45, \"Text input label\");\n this.#data.label = value;\n return this;\n }\n public setPlaceholder(value: string): this {\n validateText(value, 100, \"Text input placeholder\");\n this.#data.placeholder = value;\n return this;\n }\n public setMinLength(value: number): this {\n validateLength(value, \"min_length\", 4000);\n this.#data.min_length = value;\n return this;\n }\n public setMaxLength(value: number): this {\n validateLength(value, \"max_length\", 4000);\n this.#data.max_length = value;\n return this;\n }\n public setRequired(value = true): this {\n this.#data.required = value;\n return this;\n }\n public setValue(value: string): this {\n validateText(value, 4000, \"Text input value\");\n this.#data.value = value;\n return this;\n }\n public toJSON(): APITextInputComponent {\n const data = this.#data;\n if (!data.custom_id)\n throw new TypeError(\"Text inputs require a custom ID.\");\n if (\n data.min_length !== undefined &&\n data.max_length !== undefined &&\n data.min_length > data.max_length\n )\n throw new RangeError(\"min_length cannot exceed max_length.\");\n return structuredClone(data);\n }\n}\n\nexport class CreateContainer {\n readonly #components: { toJSON(): APIComponent }[] = [];\n #accentColor?: number;\n #spoiler?: boolean;\n public addComponents(...components: { toJSON(): APIComponent }[]): this {\n if (!components.length)\n throw new TypeError(\"At least one component is required.\");\n this.#components.push(...components);\n return this;\n }\n public setAccentColor(color: number): this {\n if (!Number.isInteger(color) || color < 0 || color > 0xffffff) {\n throw new RangeError(\n \"Accent color must be an integer between 0 and 16777215 (0xFFFFFF).\",\n );\n }\n this.#accentColor = color;\n return this;\n }\n /** Marks the whole container as a spoiler (blurred until clicked). */\n public setSpoiler(spoiler = true): this {\n this.#spoiler = spoiler;\n return this;\n }\n public toJSON(): APIContainerComponent {\n const data: APIContainerComponent = {\n type: ComponentEnum.Container,\n components: this.#components.map((c) => c.toJSON()),\n };\n if (this.#accentColor !== undefined)\n data.accent_color = this.#accentColor;\n if (this.#spoiler !== undefined) data.spoiler = this.#spoiler;\n return data;\n }\n}\n\nexport class CreateSection {\n readonly #components: { toJSON(): APIComponent }[] = [];\n #accessory?: { toJSON(): APIComponent };\n public addComponents(...components: { toJSON(): APIComponent }[]): this {\n if (!components.length)\n throw new TypeError(\"At least one component is required.\");\n this.#components.push(...components);\n return this;\n }\n public setAccessory(accessory: { toJSON(): APIComponent }): this {\n this.#accessory = accessory;\n return this;\n }\n public toJSON(): APISectionComponent {\n return {\n type: ComponentEnum.Section,\n components: this.#components.length\n ? this.#components.map((c) => c.toJSON())\n : undefined,\n accessory: this.#accessory?.toJSON(),\n };\n }\n}\n\nexport class CreateTextDisplay {\n #content = \"\";\n public setContent(content: string): this {\n validateText(content, 4000, \"Text display content\");\n this.#content = content;\n return this;\n }\n public toJSON(): APITextDisplayComponent {\n return {\n type: ComponentEnum.TextDisplay,\n content: this.#content,\n };\n }\n}\n\nexport class CreateMediaGallery {\n readonly #items: { media: { url: string; description?: string } }[] = [];\n public addItems(...items: { url: string; description?: string }[]): this {\n if (!items.length) {\n throw new TypeError(\"At least one media gallery item is required.\");\n }\n if (this.#items.length + items.length > 10) {\n throw new RangeError(\n \"MediaGallery can only contain up to 10 items.\",\n );\n }\n this.#items.push(...items.map((item) => ({ media: item })));\n return this;\n }\n public toJSON(): APIMediaGalleryComponent {\n return {\n type: ComponentEnum.MediaGallery,\n items: structuredClone(this.#items),\n };\n }\n}\n\nexport class CreateFileComponent {\n #url = \"\";\n #spoiler?: boolean;\n public setUrl(url: string): this {\n validateText(url, 2048, \"File component URL\");\n this.#url = url;\n return this;\n }\n public setSpoiler(spoiler = true): this {\n this.#spoiler = spoiler;\n return this;\n }\n public toJSON(): APIFileComponent {\n if (!this.#url) throw new Error(\"File component must have a URL.\");\n const data: APIFileComponent = {\n type: ComponentEnum.File,\n file: { url: this.#url },\n };\n if (this.#spoiler !== undefined) data.spoiler = this.#spoiler;\n return data;\n }\n}\n\nexport class CreateSeparator {\n #spacing?: 1 | 2;\n #divider?: boolean;\n public setSpacing(spacing: 1 | 2): this {\n this.#spacing = spacing;\n return this;\n }\n public setDivider(divider = true): this {\n this.#divider = divider;\n return this;\n }\n public toJSON(): APISeparatorComponent {\n const data: APISeparatorComponent = {\n type: ComponentEnum.Separator,\n };\n if (this.#spacing !== undefined) data.spacing = this.#spacing;\n if (this.#divider !== undefined) data.divider = this.#divider;\n return data;\n }\n}\n\nexport class CreateThumbnail {\n #url = \"\";\n #description?: string;\n #spoiler?: boolean;\n public setUrl(url: string): this {\n validateText(url, 2048, \"Thumbnail URL\");\n this.#url = url;\n return this;\n }\n /** Sets the thumbnail's alt-text description. */\n public setDescription(description: string): this {\n validateText(description, 1024, \"Thumbnail description\");\n this.#description = description;\n return this;\n }\n /** Marks the thumbnail as a spoiler (blurred until clicked). */\n public setSpoiler(spoiler = true): this {\n this.#spoiler = spoiler;\n return this;\n }\n public toJSON(): APIThumbnailComponent {\n const data: APIThumbnailComponent = {\n type: ComponentEnum.Thumbnail,\n url: this.#url,\n };\n if (this.#description !== undefined)\n data.description = this.#description;\n if (this.#spoiler !== undefined) data.spoiler = this.#spoiler;\n return data;\n }\n}\n\nexport class CreateContentInventoryEntry {\n #id = \"\";\n public setId(id: string): this {\n validateText(id, 100, \"Content inventory entry ID\");\n this.#id = id;\n return this;\n }\n public toJSON(): APIContentInventoryEntryComponent {\n return {\n type: ComponentEnum.ContentInventoryEntry,\n id: this.#id,\n };\n }\n}\n\nfunction validateText(value: string, max: number, field: string): void {\n if (typeof value !== \"string\")\n throw new TypeError(`${field} must be a string.`);\n if (!value.trim())\n throw new RangeError(`${field} must be a non-empty string.`);\n if (value.length > max)\n throw new RangeError(`${field} cannot exceed ${max} characters.`);\n}\nfunction validateCount(\n value: number,\n field: string,\n min: number,\n max = 25,\n): void {\n if (!Number.isInteger(value) || value < min || value > max)\n throw new RangeError(\n `${field} must be an integer between ${min} and ${max}.`,\n );\n}\nfunction validateLength(value: number, field: string, max = 4000): void {\n if (!Number.isInteger(value) || value < 0 || value > max)\n throw new RangeError(\n `${field} must be an integer between 0 and ${max}.`,\n );\n}\n\n/** Discord.js-familiar alias for {@link CreateStringSelect}. */\nexport { CreateStringSelect as CreateStringSelectMenu };\n/** User select menu builder (Discord.js-familiar). */\nexport class CreateUserSelectMenu extends CreateEntitySelect {\n public constructor() {\n super(ComponentEnum.UserSelect);\n }\n}\n/** Role select menu builder (Discord.js-familiar). */\nexport class CreateRoleSelectMenu extends CreateEntitySelect {\n public constructor() {\n super(ComponentEnum.RoleSelect);\n }\n}\n/** Mentionable select menu builder (Discord.js-familiar). */\nexport class CreateMentionableSelectMenu extends CreateEntitySelect {\n public constructor() {\n super(ComponentEnum.MentionableSelect);\n }\n}\n/** Channel select menu builder (Discord.js-familiar). */\nexport class CreateChannelSelectMenu extends CreateEntitySelect {\n public constructor() {\n super(ComponentEnum.ChannelSelect);\n }\n}\n\n/** Checks the fields every select menu needs. */\nfunction assertSelect(data: {\n custom_id?: string;\n min_values?: number;\n max_values?: number;\n}): void {\n if (!data.custom_id)\n throw new TypeError(\"Select menus require a custom ID.\");\n if ((data.min_values ?? 1) > (data.max_values ?? 1))\n throw new RangeError(\"min_values cannot exceed max_values.\");\n}\n\n/** Discord's flag for a message laid out with Components V2 (containers, text displays...). */\nconst IS_COMPONENTS_V2 = 1 << 15;\n\n/**\n * A message payload laid out with Components V2: the components, and the flag\n * Discord requires for them. A V2 message cannot also carry `content` or `embeds`.\n * @param components Top-level components (containers, sections, text displays, action rows...).\n * @param options Extra message fields, such as `allowed_mentions` or `ephemeral`; `flags` are combined.\n * @example channel.send(componentsV2Message(new CreateContainer().addComponents(new CreateTextDisplay().setContent(\"Hi\"))))\n */\nexport function componentsV2Message<\n T extends Record<string, unknown> = Record<string, never>,\n>(\n components: { toJSON(): APIComponent } | Array<{ toJSON(): APIComponent }>,\n options?: T & { flags?: number },\n): { components: APIComponent[]; flags: number } & T {\n const list = Array.isArray(components) ? components : [components];\n if (!list.length)\n throw new TypeError(\n \"A Components V2 message needs at least one component.\",\n );\n return {\n ...(options ?? ({} as T)),\n components: list.map((component) => component.toJSON()),\n flags: (options?.flags ?? 0) | IS_COMPONENTS_V2,\n };\n}\n",
14
14
  "/** Discord application command option types. */\nexport const ApplicationCommandOptionEnum = {\n Subcommand: 1,\n SubcommandGroup: 2,\n String: 3,\n Integer: 4,\n Boolean: 5,\n User: 6,\n Channel: 7,\n Role: 8,\n Mentionable: 9,\n Number: 10,\n Attachment: 11,\n} as const;\n/** One {@link ApplicationCommandOptionEnum} value, usable as a type. */\nexport type ApplicationCommandOptionEnum =\n (typeof ApplicationCommandOptionEnum)[keyof typeof ApplicationCommandOptionEnum];\n\n/** Throws unless every context is 0 (guilds), 1 (the bot's DMs) or 2 (other DMs). */\nfunction validateContexts(contexts: number[]): void {\n if (\n contexts.some(\n (context) => context !== 0 && context !== 1 && context !== 2,\n )\n )\n throw new RangeError(\"Command contexts must be 0, 1 or 2.\");\n}\n\n/** Builds Discord application command payloads. */\nexport class CreateSlashCommand {\n readonly #data: Record<string, unknown> = { type: 1 };\n /** Sets the command name. */\n public setName(name: string): this {\n validateName(name, \"Command name\");\n this.#data.name = name;\n return this;\n }\n /** Sets the command description. */\n public setDescription(description: string): this {\n validateText(description, \"Command description\", 100);\n this.#data.description = description;\n return this;\n }\n /** Sets where the command can be used: 0 guilds, 1 the bot's DMs, 2 other DMs. @throws {RangeError} For any other value. */\n public setContexts(...contexts: number[]): this {\n validateContexts(contexts);\n this.#data.contexts = [...contexts];\n return this;\n }\n /** Sets whether the command is NSFW. */\n public setNSFW(nsfw = true): this {\n this.#data.nsfw = nsfw;\n return this;\n }\n /** Sets whether the command is NSFW. */\n public setNsfw(nsfw = true): this {\n return this.setNSFW(nsfw);\n }\n /** Sets command default member permissions. */\n public setDefaultMemberPermissions(\n permissions: bigint | number | string | null,\n ): this {\n this.#data.default_member_permissions =\n permissions === null ? null : BigInt(permissions).toString();\n return this;\n }\n /** Sets command integration types. */\n public setIntegrationTypes(...types: number[]): this {\n this.#data.integration_types = [...types];\n return this;\n }\n /** Adds a string option. */\n public addStringOption(\n configure: (option: CreateStringOption) => CreateStringOption,\n ): this {\n return this.addOption(configure(new CreateStringOption()));\n }\n /** Adds an integer option. */\n public addIntegerOption(\n configure: (option: CreateIntegerOption) => CreateIntegerOption,\n ): this {\n return this.addOption(configure(new CreateIntegerOption()));\n }\n /** Adds a number option. */\n public addNumberOption(\n configure: (option: CreateNumberOption) => CreateNumberOption,\n ): this {\n return this.addOption(configure(new CreateNumberOption()));\n }\n /** Adds a boolean option. */\n public addBooleanOption(\n configure: (option: CreateBooleanOption) => CreateBooleanOption,\n ): this {\n return this.addOption(configure(new CreateBooleanOption()));\n }\n /** Adds a user option. */\n public addUserOption(\n configure: (option: CreateUserOption) => CreateUserOption,\n ): this {\n return this.addOption(configure(new CreateUserOption()));\n }\n /** Adds a channel option. */\n public addChannelOption(\n configure: (option: CreateChannelOption) => CreateChannelOption,\n ): this {\n return this.addOption(configure(new CreateChannelOption()));\n }\n /** Adds a role option. */\n public addRoleOption(\n configure: (option: CreateRoleOption) => CreateRoleOption,\n ): this {\n return this.addOption(configure(new CreateRoleOption()));\n }\n /** Adds a mentionable option. */\n public addMentionableOption(\n configure: (option: CreateMentionableOption) => CreateMentionableOption,\n ): this {\n return this.addOption(configure(new CreateMentionableOption()));\n }\n /** Adds an attachment option. */\n public addAttachmentOption(\n configure: (option: CreateAttachmentOption) => CreateAttachmentOption,\n ): this {\n return this.addOption(configure(new CreateAttachmentOption()));\n }\n /** Adds a subcommand. */\n public addSubcommand(\n configure: (option: CreateSubcommand) => CreateSubcommand,\n ): this {\n return this.addOption(configure(new CreateSubcommand()));\n }\n /** Adds a subcommand group. */\n public addSubcommandGroup(\n configure: (option: CreateSubcommandGroup) => CreateSubcommandGroup,\n ): this {\n return this.addOption(configure(new CreateSubcommandGroup()));\n }\n /** Serializes the command payload. */\n public toJSON(): Record<string, unknown> {\n return structuredClone(this.#data);\n }\n /** Adds a validated top-level command option. */\n protected addOption(option: CreateCommandOption): this {\n this.#data.options = appendOption(\n this.#data.options,\n option.toJSON(),\n \"application command\",\n );\n return this;\n }\n}\n\n/** Base builder for command options. */\nexport class CreateCommandOption {\n protected readonly data: Record<string, unknown>;\n /** Creates an option builder. */\n public constructor(type: number) {\n this.data = { type };\n }\n /** Sets the option name. */\n public setName(name: string): this {\n validateName(name, \"Option name\");\n this.data.name = name;\n return this;\n }\n /** Sets the option description. */\n public setDescription(description: string): this {\n validateText(description, \"Option description\", 100);\n this.data.description = description;\n return this;\n }\n /** Makes the option required or optional. */\n public setRequired(required = true): this {\n this.data.required = required;\n return this;\n }\n /** Sets autocomplete. */\n public setAutocomplete(enabled = true): this {\n this.data.autocomplete = enabled;\n return this;\n }\n /** Serializes the option payload. */\n public toJSON(): Record<string, unknown> {\n return structuredClone(this.data);\n }\n}\n\n/** Builds a string command option. */\nexport class CreateStringOption extends CreateCommandOption {\n /** Creates a string option. */\n public constructor() {\n super(ApplicationCommandOptionEnum.String);\n }\n /** Adds string choices. */\n public addChoices(\n ...choices: Array<{ name: string; value: string }>\n ): this {\n for (const choice of choices)\n validateText(choice.value, \"Choice value\", 100);\n appendChoices(this.data, choices);\n return this;\n }\n /** Sets the minimum string length. */\n public setMinLength(value: number): this {\n validateIntegerRange(value, 0, 6000, \"min_length\");\n this.data.min_length = value;\n return this;\n }\n /** Sets the maximum string length. */\n public setMaxLength(value: number): this {\n validateIntegerRange(value, 1, 6000, \"max_length\");\n if (\n (this.data.min_length as number | undefined) !== undefined &&\n (this.data.min_length as number) > value\n )\n throw new RangeError(\"min_length cannot exceed max_length.\");\n this.data.max_length = value;\n return this;\n }\n}\n/** Shared bounds, choices and autocomplete rules of integer and number options. */\nexport class CreateNumericOption extends CreateCommandOption {\n readonly #integer: boolean;\n /** Creates a numeric option; `integer` rejects fractional bounds. */\n public constructor(type: number, integer: boolean) {\n super(type);\n this.#integer = integer;\n }\n /** Sets the minimum value. */\n public setMinValue(value: number): this {\n validateNumberRange(\n value,\n -MAX_SAFE,\n MAX_SAFE,\n \"min_value\",\n this.#integer,\n );\n this.data.min_value = value;\n return this;\n }\n /** Sets the maximum value; it cannot be below the minimum. */\n public setMaxValue(value: number): this {\n validateNumberRange(\n value,\n -MAX_SAFE,\n MAX_SAFE,\n \"max_value\",\n this.#integer,\n );\n const min = this.data.min_value as number | undefined;\n if (min !== undefined && min > value)\n throw new RangeError(\"min_value cannot exceed max_value.\");\n this.data.max_value = value;\n return this;\n }\n /** Enables autocomplete; options with choices cannot use it. */\n public override setAutocomplete(enabled = true): this {\n if (\n enabled &&\n Array.isArray(this.data.choices) &&\n this.data.choices.length\n )\n throw new RangeError(\"Autocomplete options cannot define choices.\");\n this.data.autocomplete = enabled;\n return this;\n }\n /** Adds fixed choices. */\n public addChoices(...choices: { name: string; value: number }[]): this {\n appendChoices(this.data, choices);\n return this;\n }\n}\n/** Builds an integer command option. */\nexport class CreateIntegerOption extends CreateNumericOption {\n public constructor() {\n super(ApplicationCommandOptionEnum.Integer, true);\n }\n}\n/** Builds a number command option. */\nexport class CreateNumberOption extends CreateNumericOption {\n public constructor() {\n super(ApplicationCommandOptionEnum.Number, false);\n }\n}\n/** Builds a boolean command option. */\nexport class CreateBooleanOption extends CreateCommandOption {\n /** Creates a boolean option. */\n public constructor() {\n super(ApplicationCommandOptionEnum.Boolean);\n }\n}\n/** Builds a user command option. */\nexport class CreateUserOption extends CreateCommandOption {\n /** Creates a user option. */\n public constructor() {\n super(ApplicationCommandOptionEnum.User);\n }\n}\n/** Builds a role command option. */\nexport class CreateRoleOption extends CreateCommandOption {\n /** Creates a role option. */\n public constructor() {\n super(ApplicationCommandOptionEnum.Role);\n }\n}\n/** Builds a mentionable command option. */\nexport class CreateMentionableOption extends CreateCommandOption {\n /** Creates a mentionable option. */\n public constructor() {\n super(ApplicationCommandOptionEnum.Mentionable);\n }\n}\n/** Builds an attachment command option. */\nexport class CreateAttachmentOption extends CreateCommandOption {\n /** Creates an attachment option. */\n public constructor() {\n super(ApplicationCommandOptionEnum.Attachment);\n }\n}\n/** Builds a channel command option. */\nexport class CreateChannelOption extends CreateCommandOption {\n /** Creates a channel option. */\n public constructor() {\n super(ApplicationCommandOptionEnum.Channel);\n }\n /** Restricts accepted channel types. */\n public addChannelTypes(...types: number[]): this {\n if (types.some((type) => !Number.isInteger(type) || type < 0))\n throw new RangeError(\n \"Channel types must be non-negative integers.\",\n );\n this.data.channel_types = [...new Set(types)];\n return this;\n }\n}\n/** Builds a nested subcommand. */\nexport class CreateSubcommand extends CreateCommandOption {\n /** Creates a subcommand. */\n public constructor() {\n super(ApplicationCommandOptionEnum.Subcommand);\n }\n /** Adds a string option to this subcommand. */\n public addStringOption(\n configure: (option: CreateStringOption) => CreateStringOption,\n ): this {\n return this.addChildOption(configure(new CreateStringOption()));\n }\n /** Adds an integer option to this subcommand. */\n public addIntegerOption(\n configure: (option: CreateIntegerOption) => CreateIntegerOption,\n ): this {\n return this.addChildOption(configure(new CreateIntegerOption()));\n }\n /** Adds a number option to this subcommand. */\n public addNumberOption(\n configure: (option: CreateNumberOption) => CreateNumberOption,\n ): this {\n return this.addChildOption(configure(new CreateNumberOption()));\n }\n /** Adds a boolean option to this subcommand. */\n public addBooleanOption(\n configure: (option: CreateBooleanOption) => CreateBooleanOption,\n ): this {\n return this.addChildOption(configure(new CreateBooleanOption()));\n }\n /** Adds a user option to this subcommand. */\n public addUserOption(\n configure: (option: CreateUserOption) => CreateUserOption,\n ): this {\n return this.addChildOption(configure(new CreateUserOption()));\n }\n /** Adds a channel option to this subcommand. */\n public addChannelOption(\n configure: (option: CreateChannelOption) => CreateChannelOption,\n ): this {\n return this.addChildOption(configure(new CreateChannelOption()));\n }\n /** Adds a role option to this subcommand. */\n public addRoleOption(\n configure: (option: CreateRoleOption) => CreateRoleOption,\n ): this {\n return this.addChildOption(configure(new CreateRoleOption()));\n }\n /** Adds a mentionable option to this subcommand. */\n public addMentionableOption(\n configure: (option: CreateMentionableOption) => CreateMentionableOption,\n ): this {\n return this.addChildOption(configure(new CreateMentionableOption()));\n }\n /** Adds an attachment option to this subcommand. */\n public addAttachmentOption(\n configure: (option: CreateAttachmentOption) => CreateAttachmentOption,\n ): this {\n return this.addChildOption(configure(new CreateAttachmentOption()));\n }\n protected addChildOption(option: CreateCommandOption): this {\n const options =\n (this.data.options as OptionPayload[] | undefined) ?? [];\n if (\n options.some(\n (existing) =>\n existing.type === ApplicationCommandOptionEnum.Subcommand,\n )\n )\n throw new RangeError(\n \"Subcommands cannot contain nested subcommands.\",\n );\n this.data.options = appendOption(\n options,\n option.toJSON(),\n \"subcommand\",\n );\n return this;\n }\n}\n/** Builds a nested subcommand group. */\nexport class CreateSubcommandGroup extends CreateCommandOption {\n /** Creates a subcommand group. */\n public constructor() {\n super(ApplicationCommandOptionEnum.SubcommandGroup);\n }\n /** Adds a subcommand to this group. */\n public addSubcommand(\n configure: (option: CreateSubcommand) => CreateSubcommand,\n ): this {\n const options = (this.data.options as unknown[] | undefined) ?? [];\n if (options.length >= 25)\n throw new RangeError(\n \"A subcommand group cannot contain more than 25 subcommands.\",\n );\n const payload = configure(new CreateSubcommand()).toJSON();\n if (\n options.some(\n (existing) =>\n (existing as Record<string, unknown>).name === payload.name,\n )\n )\n throw new RangeError(\n `Duplicate subcommand name: ${String(payload.name)}.`,\n );\n if (payload.type !== ApplicationCommandOptionEnum.Subcommand)\n throw new TypeError(\n \"Subcommand group children must be subcommands.\",\n );\n options.push(payload);\n this.data.options = options;\n return this;\n }\n}\nconst MAX_SAFE = Number.MAX_SAFE_INTEGER;\n\n/** A serialized option as stored on its parent. */\ntype OptionPayload = Record<string, unknown>;\n\n/**\n * Returns `options` with `payload` appended, enforcing Discord's limit of 25,\n * unique names, and required options before optional ones.\n */\nfunction appendOption(\n options: unknown,\n payload: OptionPayload,\n parent: \"application command\" | \"subcommand\",\n): OptionPayload[] {\n const list = (options as OptionPayload[] | undefined) ?? [];\n if (list.length >= 25)\n throw new RangeError(\n `${parent === \"subcommand\" ? \"A subcommand\" : \"An application command\"} cannot contain more than 25 options.`,\n );\n if (list.some((existing) => existing.name === payload.name))\n throw new RangeError(`Duplicate option name: ${String(payload.name)}.`);\n if (\n payload.required === true &&\n list.some((existing) => existing.required !== true)\n )\n throw new RangeError(\n `Required ${parent} options must be placed before optional options.`,\n );\n return [...list, payload];\n}\n\n/** Appends choices to an option, enforcing the shared choice rules. */\nfunction appendChoices(\n data: OptionPayload,\n choices: { name: string; value: string | number }[],\n): void {\n const current = (data.choices as unknown[] | undefined) ?? [];\n if (!choices.length)\n throw new TypeError(\"At least one choice is required.\");\n if (data.autocomplete === true)\n throw new RangeError(\"Autocomplete options cannot define choices.\");\n if (current.length + choices.length > 25)\n throw new RangeError(\"An option cannot contain more than 25 choices.\");\n for (const choice of choices) validateText(choice.name, \"Choice name\", 100);\n data.choices = [...current, ...choices.map((choice) => ({ ...choice }))];\n}\n\nfunction validateName(value: string, field: string): void {\n if (!/^[\\p{L}\\p{N}_-]{1,32}$/u.test(value) || value !== value.toLowerCase())\n throw new RangeError(\n `${field} must contain 1-32 lowercase letters, numbers, underscores, or hyphens.`,\n );\n}\nfunction validateText(value: string, field: string, max: number): void {\n if (typeof value !== \"string\" || !value.trim() || value.length > max)\n throw new RangeError(`${field} must contain 1-${max} characters.`);\n}\nfunction validateIntegerRange(\n value: number,\n minimum: number,\n maximum: number,\n field: string,\n): void {\n if (!Number.isInteger(value) || value < minimum || value > maximum)\n throw new RangeError(\n `${field} must be an integer between ${minimum} and ${maximum}.`,\n );\n}\nfunction validateNumberRange(\n value: number,\n minimum: number,\n maximum: number,\n field: string,\n integerOnly = true,\n): void {\n if (\n !Number.isFinite(value) ||\n (integerOnly && !Number.isInteger(value)) ||\n value < minimum ||\n value > maximum\n )\n throw new RangeError(\n `${field} must be ${integerOnly ? \"an integer\" : \"a number\"} between ${minimum} and ${maximum}.`,\n );\n}\n\n// ─── Context Menu Builders ────────────────────────────────────────────────────\n\n/** Builder for application commands that appear in right-click context menus.\n * Discord.js-familiar: `new CreateContextMenuCommand().setName(\"x\").setType(2)`. */\nexport class CreateContextMenuCommand {\n protected readonly data: Record<string, unknown>;\n public constructor(type: 2 | 3 = 2) {\n this.data = { type };\n }\n /** Sets the command type: 2 = USER, 3 = MESSAGE. @throws {RangeError} For any other type. */\n public setType(type: 2 | 3): this {\n if (type !== 2 && type !== 3)\n throw new RangeError(\"Context menu command type must be 2 or 3.\");\n this.data.type = type;\n return this;\n }\n /** Sets the command name (shown in the right-click menu).\n * Unlike CHAT_INPUT commands, USER (type 2) and MESSAGE (type 3) context-menu\n * command names may contain uppercase letters and spaces, so no lowercase/charset\n * validation is applied here — only Discord's 1-32 length limit and a non-empty\n * (non-whitespace) requirement are enforced.\n * @param name Display name; 1-32 characters, mixed case and spaces allowed.\n * @throws {RangeError} If the name is empty/whitespace-only or exceeds 32 characters.\n */\n public setName(name: string): this {\n if (\n typeof name !== \"string\" ||\n name.trim().length < 1 ||\n name.length > 32\n )\n throw new RangeError(\"Command name must contain 1-32 characters.\");\n this.data.name = name;\n return this;\n }\n /** Sets default member permissions required to see this command. */\n public setDefaultMemberPermissions(\n permissions: bigint | number | string | null,\n ): this {\n this.data.default_member_permissions =\n permissions === null ? null : BigInt(permissions).toString();\n return this;\n }\n /** Sets command integration types (0 guild install, 1 user install). */\n public setIntegrationTypes(...types: number[]): this {\n this.data.integration_types = [...types];\n return this;\n }\n /** Sets where the command can be used: 0 guilds, 1 the bot's DMs, 2 other DMs. @throws {RangeError} For any other value. */\n public setContexts(...contexts: number[]): this {\n validateContexts(contexts);\n this.data.contexts = [...contexts];\n return this;\n }\n /** Sets the name shown per locale, e.g. `{ \"es-ES\": \"Ver perfil\" }`; null clears it. */\n public setNameLocalizations(\n localizations: Record<string, string> | null,\n ): this {\n this.data.name_localizations =\n localizations === null ? null : { ...localizations };\n return this;\n }\n /** Serializes the command payload for the Discord API. */\n public toJSON(): Record<string, unknown> {\n return structuredClone(this.data);\n }\n}\n\n/** Builds a User context menu command (appears when right-clicking a user, type 2).\n * @example\n * new CreateUserCommand().setName(\"View Profile\").toJSON()\n */\nexport class CreateUserCommand extends CreateContextMenuCommand {\n public constructor() {\n super(2);\n }\n}\n\n/** Builds a Message context menu command (appears when right-clicking a message, type 3).\n * @example\n * new CreateMessageCommand().setName(\"Translate Message\").toJSON()\n */\nexport class CreateMessageCommand extends CreateContextMenuCommand {\n public constructor() {\n super(3);\n }\n}\n",
@@ -22,17 +22,17 @@
22
22
  "/** Retention policy for a {@link Collection}. */\nexport interface CollectionOptions<K = unknown, V = unknown> {\n /** Default sliding TTL in ms for `set()`. Omit for no expiry. */\n ttl?: number;\n /** Fraction (0-1) of each entry's TTL randomly shaved off when it is set, so entries stored together do not expire together. Default `0`. */\n jitter?: number;\n /** Maximum entries stored with `set()`; least-recently-used are evicted past it. `setWithoutTTL()` entries are never counted or evicted. */\n maxSize?: number;\n /** Whether a read restarts a TTL entry's window. Default `true`; with `false` an entry lapses a fixed time after it was set, and reads only mark it recently used. */\n slide?: boolean;\n /** Called after an entry is removed automatically, with why. Exceptions are swallowed. */\n onEvict?: (key: K, value: V, reason: EvictionReason) => void;\n}\n\n/** Why an entry was removed automatically. */\nexport type EvictionReason = \"expired\" | \"evicted\";\n\n/** Cumulative counters from {@link Collection.stats}. */\nexport interface CollectionStats {\n /** `get`/`peek` calls that found a value. */\n hits: number;\n /** `get`/`peek` calls that found nothing. */\n misses: number;\n /** Entries removed because their TTL lapsed. */\n expired: number;\n /** Entries removed to stay within `maxSize`. */\n evicted: number;\n}\n\n/**\n * Everything the policy knows about one key: its place in the recency list\n * and its TTL. One record serves the policy map, the recency list and the\n * expiry heap, so a write touches one extra hash entry and allocates once.\n */\ntype Entry<K, V> = {\n key: K;\n /** A copy of the stored value, so a read needs one lookup instead of two. */\n value: V;\n /** Neighbours in recency order; meaningful while `inLru`. */\n older: Entry<K, V> | undefined;\n newer: Entry<K, V> | undefined;\n inLru: boolean;\n /** TTL window in ms; 0 when the entry does not expire (and is not in the heap). */\n window: number;\n /** The current deadline; a read moves it later without touching the heap. */\n deadline: number;\n /** The deadline the heap ordered this record by. */\n filed: number;\n};\n\n/**\n * Everything a retention policy needs. A Collection without `ttl` or\n * `maxSize` never creates one, so plain collections cost no more than a Map.\n */\ntype Policy<K, V> = {\n /** Keys with a TTL or a recency position; `setWithoutTTL()` keys are absent. */\n entries: Map<K, Entry<K, V>>;\n /** Oldest and newest entries of the recency list; only `maxSize` collections use it. */\n oldest: Entry<K, V> | undefined;\n newest: Entry<K, V> | undefined;\n lruSize: number;\n /** Min-heap by `filed`. A record that is no longer its key's map value is stale and dropped lazily. */\n heap: Entry<K, V>[];\n timer?: ReturnType<typeof setTimeout>;\n armedFor: number;\n /** The options, kept here so a plain collection carries none of them. */\n ttl: number | undefined;\n jitter: number;\n maxSize: number | undefined;\n slide: boolean;\n /** Stored loosely typed so the callback does not make Collection invariant in K and V. */\n onEvict:\n | ((key: unknown, value: unknown, reason: EvictionReason) => void)\n | undefined;\n expired: number;\n evicted: number;\n};\n\nfunction newPolicy<K, V>(options: CollectionOptions<K, V> = {}): Policy<K, V> {\n return {\n ttl: options.ttl,\n jitter: options.jitter ?? 0,\n maxSize: options.maxSize,\n slide: options.slide ?? true,\n onEvict: options.onEvict as Policy<K, V>[\"onEvict\"],\n expired: 0,\n evicted: 0,\n entries: new Map(),\n oldest: undefined,\n newest: undefined,\n lruSize: 0,\n heap: [],\n armedFor: Infinity,\n };\n}\n\n/**\n * Reads a value that `has()` just confirmed, without touching a Lunibee\n * collection's TTL, recency or hit counters.\n */\nfunction peekOf<K, V>(\n collection: ReadonlyCollection<K, V>,\n key: K,\n): V | undefined {\n return collection instanceof Map\n ? (Map.prototype.get.call(collection, key) as V | undefined)\n : collection.get(key);\n}\n\n/** What `merge()` does with one entry: keep it with `value`, or drop it. */\nexport type Keep<V> = { keep: true; value: V } | { keep: false };\n\n/**\n * A `Collection` seen read-only: every method that does not change it. Pass it\n * where you only read, so a function cannot add to or remove from the cache.\n */\nexport type ReadonlyCollection<K, V> = Omit<\n Collection<K, V>,\n | \"set\"\n | \"setWithoutTTL\"\n | \"delete\"\n | \"clear\"\n | \"ensure\"\n | \"forEach\"\n | \"get\"\n | \"sweep\"\n | \"purge\"\n> &\n ReadonlyMap<K, V>;\n\nconst mapGet = Map.prototype.get as (\n this: Map<unknown, unknown>,\n key: unknown,\n) => unknown;\nconst mapHas = Map.prototype.has as (\n this: Map<unknown, unknown>,\n key: unknown,\n) => boolean;\n\n/** Picks `amount` different items at random (a partial Fisher-Yates shuffle of `items`). */\nfunction sample<T>(items: T[], amount: number): T[] {\n if (!Number.isInteger(amount) || amount < 0)\n throw new RangeError(\"amount must be a non-negative integer.\");\n const count = Math.min(amount, items.length);\n for (let i = 0; i < count; i++) {\n const j = i + Math.floor(Math.random() * (items.length - i));\n [items[i], items[j]] = [items[j]!, items[i]!];\n }\n items.length = count;\n return items;\n}\n\nfunction assertTTL(ttl: number | undefined): void {\n if (ttl !== undefined && (!Number.isFinite(ttl) || ttl <= 0))\n throw new RangeError(\"TTL must be a positive number, or omitted.\");\n}\n\n/**\n * A keyed collection for Lunibee resource and application state.\n *\n * - `set(key, value, ttl?)` is TTL/LRU-aware: with a TTL (the default from\n * options, or per call) the entry expires after that window of inactivity,\n * and with `maxSize` it counts toward the cap.\n * - `setWithoutTTL(key, value)` never expires: no deadline, no heap record,\n * no timer, and exempt from `maxSize` eviction. Resource managers store\n * Discord state this way, so it leaves only through an explicit delete.\n *\n * Without options, a Collection behaves like a plain Map.\n */\nexport class Collection<K, V> extends Map<K, V> {\n /** Created with any option, or by the first `set()` with its own TTL. */\n #policy?: Policy<K, V>;\n #hits = 0;\n #misses = 0;\n\n /**\n * @param entries Initial entries, stored with `set()`.\n * @param options TTL and size policy.\n * @throws {RangeError} On a non-positive TTL or non-integer `maxSize`.\n */\n public constructor(\n entries?: Iterable<readonly [K, V]> | null,\n options: CollectionOptions<K, V> = {},\n ) {\n super();\n assertTTL(options.ttl);\n if (\n options.jitter !== undefined &&\n !(options.jitter >= 0 && options.jitter <= 1)\n )\n throw new RangeError(\"jitter must be between 0 and 1.\");\n if (\n options.maxSize !== undefined &&\n (!Number.isInteger(options.maxSize) || options.maxSize <= 0)\n )\n throw new RangeError(\"maxSize must be a positive integer.\");\n if (\n options.ttl !== undefined ||\n options.jitter !== undefined ||\n options.maxSize !== undefined ||\n options.slide !== undefined ||\n options.onEvict !== undefined\n )\n this.#policy = newPolicy(options);\n if (entries) for (const [key, value] of entries) this.set(key, value);\n }\n\n /**\n * Stores an entry with the default TTL (or `ttl`), marks it most recently\n * used, and enforces `maxSize`. Turns a `setWithoutTTL()` entry back into\n * a TTL/LRU entry.\n */\n public override set(key: K, value: V, ttl?: number): this {\n if (ttl === undefined && this.#policy === undefined)\n return super.set(key, value);\n assertTTL(ttl);\n let window = ttl ?? this.#policy?.ttl;\n const jitter = this.#policy?.jitter ?? 0;\n if (window !== undefined && jitter > 0)\n window = Math.max(1, window * (1 - jitter * Math.random()));\n if (window !== undefined) this.#policy ??= newPolicy();\n if (!this.#policy) return super.set(key, value);\n // A key that was not stored before has no policy entry.\n const before = super.size;\n super.set(key, value);\n this.#track(key, value, window, super.size !== before);\n this.#enforceCap();\n return this;\n }\n\n /**\n * Stores an entry that never expires: no deadline, heap record, timer or\n * LRU eviction. It leaves only through `delete`, `sweep`, `clear`, or a\n * later `set()`.\n */\n public setWithoutTTL(key: K, value: V): this {\n if (this.#policy) this.#forget(key);\n super.set(key, value);\n return this;\n }\n\n /** Reads a value; restarts a TTL entry's window and promotes it. */\n public override get(key: K): V | undefined {\n const policy = this.#policy;\n const entry = policy?.entries.get(key);\n if (entry === undefined) {\n const value = mapGet.call(this, key) as V | undefined;\n if (value !== undefined || mapHas.call(this, key)) {\n this.#hits++;\n return value;\n }\n this.#misses++;\n return undefined;\n }\n const timed = entry.window !== 0;\n const now = timed ? Date.now() : 0;\n if (timed && entry.deadline <= now) {\n this.#expire(entry);\n this.#misses++;\n return undefined;\n }\n this.#hits++;\n if (timed && policy!.slide) entry.deadline = now + entry.window;\n if (entry.inLru) this.#promote(policy!, entry);\n return entry.value;\n }\n\n /**\n * Returns the value for `key`, or stores and returns what `factory`\n * makes. Reading counts as a `get()` (restarts the TTL, marks it recently\n * used); creating stores with `set()`, so `ttl` applies.\n * @param factory Called with the key and this collection only when the key is missing; if it throws, nothing is stored.\n * @param ttl TTL in ms for a created entry; defaults to the collection's.\n */\n public ensure(\n key: K,\n factory: (key: K, collection: this) => V,\n ttl?: number,\n ): V {\n const existing = this.get(key);\n if (existing !== undefined || super.has(key)) return existing as V;\n const created = factory(key, this);\n this.set(key, created, ttl);\n return created;\n }\n\n /** Reads a value without restarting its TTL or promoting it. */\n public peek(key: K): V | undefined {\n if (!this.#expireIfDue(key) && super.has(key)) {\n this.#hits++;\n return super.get(key);\n }\n this.#misses++;\n return undefined;\n }\n\n /** Cumulative hit, miss, expiry and eviction counters (a copy). */\n public get stats(): CollectionStats {\n return {\n hits: this.#hits,\n misses: this.#misses,\n expired: this.#policy?.expired ?? 0,\n evicted: this.#policy?.evicted ?? 0,\n };\n }\n\n public override has(key: K): boolean {\n return !this.#expireIfDue(key) && super.has(key);\n }\n\n public override delete(key: K): boolean {\n if (this.#expireIfDue(key)) return false;\n if (this.#policy) this.#forget(key);\n return super.delete(key);\n }\n\n public override clear(): void {\n super.clear();\n const policy = this.#policy;\n if (!policy) return;\n policy.entries.clear();\n policy.oldest = policy.newest = undefined;\n policy.lruSize = 0;\n policy.heap.length = 0;\n if (policy.timer) clearTimeout(policy.timer);\n policy.timer = undefined;\n policy.armedFor = Infinity;\n }\n\n public override get size(): number {\n this.purge();\n return super.size;\n }\n\n public override entries(): MapIterator<[K, V]> {\n this.purge();\n return super.entries();\n }\n\n public override keys(): MapIterator<K> {\n this.purge();\n return super.keys();\n }\n\n public override values(): MapIterator<V> {\n this.purge();\n return super.values();\n }\n\n public override [Symbol.iterator](): MapIterator<[K, V]> {\n return this.entries();\n }\n\n public override forEach(\n callback: (value: V, key: K, map: Map<K, V>) => void,\n thisArg?: unknown,\n ): void {\n this.purge();\n super.forEach(callback, thisArg);\n }\n\n /** Milliseconds until a key lapses, or undefined if absent or never expiring. */\n public ttlRemaining(key: K): number | undefined {\n if (this.#expireIfDue(key)) return undefined;\n const entry = this.#policy?.entries.get(key);\n return entry && entry.window !== 0\n ? Math.max(0, entry.deadline - Date.now())\n : undefined;\n }\n\n /** Drops every lapsed TTL entry now. @returns How many were dropped. */\n public purge(): number {\n if (!this.#policy || this.#policy.heap.length === 0) return 0;\n const now = Date.now();\n let removed = 0;\n const dropped: [K, V][] = [];\n while (this.#nextDeadline() <= now) {\n const due = this.#heapPop()!;\n dropped.push([due.key, super.get(due.key)!]);\n this.#remove(due.key);\n removed++;\n }\n this.#policy!.expired += removed;\n this.#rearm();\n for (const [key, value] of dropped) this.#notify(key, value, \"expired\");\n return removed;\n }\n\n /** Drops `key` if its TTL has lapsed. @returns Whether it did. */\n #expireIfDue(key: K): boolean {\n const entry = this.#policy?.entries.get(key);\n if (!entry || entry.window === 0 || entry.deadline > Date.now())\n return false;\n this.#expire(entry);\n return true;\n }\n\n #expire(entry: Entry<K, V>): void {\n const value = super.get(entry.key)!;\n this.#remove(entry.key);\n this.#policy!.expired++;\n this.#notify(entry.key, value, \"expired\");\n }\n\n #remove(key: K): void {\n this.#forget(key);\n super.delete(key);\n }\n\n /** Drops a key's policy entry (recency position and TTL); its heap record goes stale. */\n #forget(key: K): void {\n const policy = this.#policy!;\n const entry = policy.entries.get(key);\n if (!entry) return;\n if (entry.inLru) this.#unlink(policy, entry);\n policy.entries.delete(key);\n }\n\n /**\n * Brings the key's policy entry in line with a `set()`: marks it newest\n * when `maxSize` is set, and gives it a deadline when `window` is defined.\n * Only a new entry, or a deadline that moves earlier, gets a heap record;\n * a later one is a number write and the record re-files itself when it\n * surfaces.\n */\n #track(key: K, value: V, window: number | undefined, isNew: boolean): void {\n const policy = this.#policy!;\n const lru = policy.maxSize !== undefined;\n let entry = isNew ? undefined : policy.entries.get(key);\n if (entry) entry.value = value;\n if (window === undefined) {\n if (entry && entry.window !== 0) {\n // It had a TTL and now has none.\n if (lru) entry = this.#replace(policy, entry, 0, 0);\n else {\n this.#forget(key);\n return;\n }\n }\n if (!entry && lru) {\n entry = this.#create(key, value, 0, 0);\n policy.entries.set(key, entry);\n }\n if (entry) this.#promote(policy, entry);\n return;\n }\n const deadline = Date.now() + window;\n if (entry && entry.window !== 0) {\n entry.deadline = deadline;\n entry.window = window;\n if (deadline < entry.filed)\n // The heap cannot move a record up, and this one is in it: file a fresh one.\n entry = this.#replace(policy, entry, window, deadline);\n else {\n if (entry.inLru) this.#promote(policy, entry);\n return;\n }\n } else if (entry) {\n entry.window = window;\n entry.deadline = entry.filed = deadline;\n } else {\n entry = this.#create(key, value, window, deadline);\n policy.entries.set(key, entry);\n }\n if (lru) this.#promote(policy, entry);\n this.#heapPush(entry);\n if (policy.heap.length > 2 * policy.entries.size + 8) this.#compact();\n // A timer already armed for an earlier deadline stays correct.\n if (policy.timer === undefined || deadline < policy.armedFor)\n this.#rearm();\n }\n\n #create(key: K, value: V, window: number, deadline: number): Entry<K, V> {\n return {\n key,\n value,\n older: undefined,\n newer: undefined,\n inLru: false,\n window,\n deadline,\n filed: deadline,\n };\n }\n\n /** Swaps in a fresh record for `old` (which goes stale), keeping its recency position. */\n #replace(\n policy: Policy<K, V>,\n old: Entry<K, V>,\n window: number,\n deadline: number,\n ): Entry<K, V> {\n const entry: Entry<K, V> = {\n ...old,\n window,\n deadline,\n filed: deadline,\n };\n if (old.inLru) {\n if (old.older) old.older.newer = entry;\n else policy.oldest = entry;\n if (old.newer) old.newer.older = entry;\n else policy.newest = entry;\n }\n policy.entries.set(old.key, entry);\n return entry;\n }\n\n /** Makes an entry the newest in recency order, linking it first if needed. */\n #promote(policy: Policy<K, V>, entry: Entry<K, V>): void {\n if (entry === policy.newest) return;\n if (entry.inLru) this.#unlink(policy, entry, true);\n else {\n entry.inLru = true;\n policy.lruSize++;\n }\n entry.older = policy.newest;\n entry.newer = undefined;\n if (policy.newest) policy.newest.newer = entry;\n else policy.oldest = entry;\n policy.newest = entry;\n }\n\n /** Takes an entry out of the recency list; `keepCount` is for a move within it. */\n #unlink(policy: Policy<K, V>, entry: Entry<K, V>, keepCount = false): void {\n if (entry.older) entry.older.newer = entry.newer;\n else policy.oldest = entry.newer;\n if (entry.newer) entry.newer.older = entry.older;\n else policy.newest = entry.older;\n entry.older = entry.newer = undefined;\n if (!keepCount) {\n entry.inLru = false;\n policy.lruSize--;\n }\n }\n\n /**\n * An empty collection of the species this one derives, so `filter()` and\n * friends on a subclass return the subclass. It is built without\n * arguments and carries no `ttl` or `maxSize`.\n */\n #derived(): this {\n const Species =\n (\n this.constructor as {\n [Symbol.species]?: new () => Collection<K, V>;\n }\n )[Symbol.species] ?? Collection;\n return new Species() as this;\n }\n\n #notify(key: K, value: V, reason: EvictionReason): void {\n const onEvict = this.#policy?.onEvict;\n if (!onEvict) return;\n try {\n onEvict(key, value, reason);\n } catch {\n // A throwing callback must not leave the collection inconsistent.\n }\n }\n\n /** Evicts least-recently-used `set()` entries past `maxSize`; O(1) per eviction. */\n #enforceCap(): void {\n const policy = this.#policy!;\n const max = policy.maxSize;\n if (max === undefined) return;\n // Lapsed entries must not push live ones out.\n if (\n policy.lruSize > max &&\n policy.heap.length > 0 &&\n policy.heap[0]!.filed <= Date.now()\n )\n this.purge();\n while (policy.lruSize > max) {\n const oldest = policy.oldest!;\n const value = policy.onEvict ? super.get(oldest.key) : undefined;\n this.#unlink(policy, oldest);\n policy.entries.delete(oldest.key);\n super.delete(oldest.key);\n policy.evicted++;\n this.#notify(oldest.key, value as V, \"evicted\");\n }\n }\n\n #nextDeadline(): number {\n const policy = this.#policy!;\n for (;;) {\n const top = policy.heap[0];\n if (top === undefined) return Infinity;\n if (policy.entries.get(top.key) !== top) {\n this.#heapPop();\n continue;\n }\n if (top.deadline === top.filed) return top.filed;\n // Extended since it was filed: re-file for its current deadline.\n this.#heapPop();\n top.filed = top.deadline;\n this.#heapPush(top);\n }\n }\n\n #compact(): void {\n const policy = this.#policy!;\n const live = policy.heap.filter(\n (entry) => policy.entries.get(entry.key) === entry,\n );\n policy.heap.length = 0;\n for (const entry of live) this.#heapPush(entry);\n }\n\n #rearm(): void {\n const p = this.#policy!;\n const deadline = this.#nextDeadline();\n if (p.timer !== undefined && deadline >= p.armedFor) return;\n if (p.timer) clearTimeout(p.timer);\n p.timer = undefined;\n p.armedFor = deadline;\n if (deadline === Infinity) return;\n p.timer = setTimeout(\n () => {\n p.timer = undefined;\n p.armedFor = Infinity;\n this.purge();\n },\n Math.max(0, deadline - Date.now()),\n );\n // Pending expiry is housekeeping, not a reason to keep the process alive.\n (p.timer as { unref?: () => void }).unref?.();\n }\n\n #heapPush(entry: Entry<K, V>): void {\n const heap = this.#policy!.heap;\n let i = heap.length;\n heap.push(entry);\n while (i > 0) {\n const parent = (i - 1) >> 1;\n const above = heap[parent]!;\n if (above.filed <= entry.filed) break;\n heap[i] = above;\n i = parent;\n }\n heap[i] = entry;\n }\n\n #heapPop(): Entry<K, V> | undefined {\n const heap = this.#policy!.heap;\n const top = heap[0];\n const last = heap.pop();\n if (top === undefined || heap.length === 0) return top;\n let i = 0;\n for (;;) {\n let child = 2 * i + 1;\n if (child >= heap.length) break;\n if (\n child + 1 < heap.length &&\n heap[child + 1]!.filed < heap[child]!.filed\n )\n child++;\n if (heap[child]!.filed >= last!.filed) break;\n heap[i] = heap[child]!;\n i = child;\n }\n heap[i] = last!;\n return top;\n }\n\n /** Returns the first stored value. */\n public first(): V | undefined {\n for (const value of this.values()) return value;\n return undefined;\n }\n /** Returns the first stored key. */\n public firstKey(): K | undefined {\n for (const key of this.keys()) return key;\n return undefined;\n }\n /** Returns the last stored value. */\n public last(): V | undefined {\n let value: V | undefined;\n for (const item of this.values()) value = item;\n return value;\n }\n /** Returns the last stored key. */\n public lastKey(): K | undefined {\n let key: K | undefined;\n for (const item of this.keys()) key = item;\n return key;\n }\n /** Finds the first value matching a predicate. */\n public find(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): V | undefined {\n for (const [key, value] of this) {\n if (predicate(value, key, this)) return value;\n }\n return undefined;\n }\n /** Finds the last value (in insertion order) matching a predicate. */\n public findLast(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): V | undefined {\n const keys = this.keyArray();\n const values = this.array();\n for (let i = values.length - 1; i >= 0; i--)\n if (predicate(values[i]!, keys[i]!, this)) return values[i];\n return undefined;\n }\n /** Finds the key of the last entry (in insertion order) matching a predicate. */\n public findLastKey(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): K | undefined {\n const keys = this.keyArray();\n const values = this.array();\n for (let i = values.length - 1; i >= 0; i--)\n if (predicate(values[i]!, keys[i]!, this)) return keys[i];\n return undefined;\n }\n /** Returns all values matching a predicate. */\n public filter(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): this {\n const result = this.#derived();\n // forEach walks the entries without allocating a [key, value] pair each.\n this.forEach((value, key) => {\n if (predicate(value, key, this)) result.set(key, value);\n });\n return result;\n }\n /** Transforms every stored value into an array. */\n public map<T>(transform: (value: V, key: K, collection: this) => T): T[] {\n const result: T[] = [];\n this.forEach((value, key) => {\n result.push(transform(value, key, this));\n });\n return result;\n }\n /** Returns whether at least one stored value satisfies a predicate. */\n public some(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): boolean {\n for (const [key, value] of this) {\n if (predicate(value, key, this)) return true;\n }\n return false;\n }\n /** Returns whether every stored value satisfies a predicate. */\n public every(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): boolean {\n for (const [key, value] of this) {\n if (!predicate(value, key, this)) return false;\n }\n return true;\n }\n /** Runs a callback for each stored value. */\n public each(\n callback: (value: V, key: K, collection: this) => unknown,\n ): this {\n this.forEach((value, key) => {\n callback(value, key, this);\n });\n return this;\n }\n /** Returns an array containing all stored values. */\n public array(): V[] {\n return [...this.values()];\n }\n /** Returns an array containing all stored keys. */\n public keyArray(): K[] {\n return [...this.keys()];\n }\n /** Returns a plain array of entries. */\n public entriesArray(): [K, V][] {\n return [...this.entries()];\n }\n /** Returns a new collection with the same entries. */\n public clone(): this {\n const copy = this.#derived();\n this.forEach((value, key) => {\n copy.set(key, value);\n });\n return copy;\n }\n /** Returns whether all supplied keys are present. */\n public hasAll(...keys: K[]): boolean {\n for (let i = 0; i < keys.length; i++) {\n if (!this.has(keys[i]!)) return false;\n }\n return true;\n }\n /** Returns whether at least one supplied key is present. */\n public hasAny(...keys: K[]): boolean {\n for (let i = 0; i < keys.length; i++) {\n if (this.has(keys[i]!)) return true;\n }\n return false;\n }\n /** Returns the first key whose value matches a predicate. */\n public findKey(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): K | undefined {\n for (const [key, value] of this) {\n if (predicate(value, key, this)) return key;\n }\n return undefined;\n }\n /** Returns whether a predicate matches at least one entry. */\n public someEntry(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): boolean {\n return this.some(predicate);\n }\n /** Removes every entry matching a predicate and returns the number removed. */\n public sweep(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): number {\n let removed = 0;\n for (const [key, value] of this) {\n if (predicate(value, key, this) && this.delete(key)) removed++;\n }\n return removed;\n }\n /** Returns the collection's first matching entry as a tuple. */\n public firstEntry(): [K, V] | undefined {\n for (const [key, value] of this) return [key, value];\n return undefined;\n }\n /** Returns the collection's last matching entry as a tuple. */\n public lastEntry(): [K, V] | undefined {\n let entry: [K, V] | undefined;\n for (const item of this) entry = [item[0], item[1]];\n return entry;\n }\n /** Returns a new Collection containing elements from both collections. */\n public union(other: ReadonlyCollection<K, V>): this {\n const result = this.clone();\n for (const [key, value] of other) result.set(key, value);\n return result;\n }\n /** Returns a new Collection containing only elements present in both collections. */\n public intersection(other: ReadonlyCollection<K, V>): this {\n const result = this.#derived();\n for (const [key, value] of this) {\n if (other.has(key)) result.set(key, value);\n }\n return result;\n }\n /** Returns a new Collection containing elements present in this collection but not the other. */\n public difference(other: ReadonlyCollection<K, V>): this {\n const result = this.#derived();\n for (const [key, value] of this) {\n if (!other.has(key)) result.set(key, value);\n }\n return result;\n }\n /** Splits the collection into two collections based on a predicate.\n * @returns `[passing, failing]` — entries satisfying the predicate, then those that don't.\n */\n public partition(\n predicate: (value: V, key: K, collection: this) => boolean,\n ): [this, this] {\n const pass = this.#derived();\n const fail = this.#derived();\n for (const [key, value] of this) {\n if (predicate(value, key, this)) pass.set(key, value);\n else fail.set(key, value);\n }\n return [pass, fail];\n }\n /** Returns the entries of both collections that are in only one of them. */\n public symmetricDifference(other: ReadonlyCollection<K, V>): this {\n const result = this.#derived();\n for (const [key, value] of this)\n if (!other.has(key)) result.set(key, value);\n for (const [key, value] of other)\n if (!this.has(key)) result.set(key, value);\n return result;\n }\n /** Returns a new Collection with this one's entries followed by each of `collections`'; a later collection wins a shared key. */\n public concat(...collections: ReadonlyCollection<K, V>[]): this {\n const result = this.clone();\n for (const collection of collections)\n for (const [key, value] of collection) result.set(key, value);\n return result;\n }\n /**\n * Combines this collection with `other`, deciding per key what to keep.\n * @param whenInSelf Called for a key only in this collection.\n * @param whenInOther Called for a key only in `other`.\n * @param whenInBoth Called for a key in both.\n * @returns A new collection of the entries the callbacks kept, in this collection's order, then `other`'s new keys.\n */\n public merge<T, R>(\n other: ReadonlyCollection<K, T>,\n whenInSelf: (value: V, key: K) => Keep<R>,\n whenInOther: (valueOther: T, key: K) => Keep<R>,\n whenInBoth: (value: V, valueOther: T, key: K) => Keep<R>,\n ): Collection<K, R> {\n const result = this.#derived() as unknown as Collection<K, R>;\n const decide = (key: K, kept: Keep<R>): void => {\n if (kept.keep) result.set(key, kept.value);\n };\n for (const [key, value] of this) {\n decide(\n key,\n other.has(key)\n ? whenInBoth(value, peekOf(other, key) as T, key)\n : whenInSelf(value, key),\n );\n }\n for (const [key, value] of other)\n if (!this.has(key)) decide(key, whenInOther(value, key));\n return result;\n }\n /** Returns whether `other` holds the same keys with `===` equal values. Neither side's TTL or recency is touched. */\n public equals(other: ReadonlyCollection<K, V> | null | undefined): boolean {\n if (!other) return false;\n if (other === (this as unknown)) return true;\n if (this.size !== other.size) return false;\n for (const [key, value] of this) {\n if (!other.has(key)) return false;\n if (value !== peekOf(other, key)) return false;\n }\n return true;\n }\n /** Returns a new collection with the same keys and each value passed through `transform`. */\n public mapValues<T>(\n transform: (value: V, key: K, collection: this) => T,\n ): Collection<K, T> {\n const result = this.#derived() as unknown as Collection<K, T>;\n for (const [key, value] of this)\n result.set(key, transform(value, key, this));\n return result;\n }\n /** Returns a new collection with the entries in reverse order. */\n public toReversed(): this {\n const result = this.#derived();\n const entries = [...this];\n for (let i = entries.length - 1; i >= 0; i--)\n result.set(entries[i]![0], entries[i]![1]);\n return result;\n }\n /** Same as {@link sorted}, under the name the standard `Array` uses. */\n public toSorted(\n comparator?: (a: V, b: V, aKey: K, bKey: K) => number,\n ): this {\n return this.sorted(comparator);\n }\n /**\n * Groups `items` by the key `keySelector` returns for each.\n * @param keySelector Called with each item and its index.\n * @returns A new collection from each key to its items, in input order.\n */\n public static override groupBy<K, V>(\n items: Iterable<V>,\n keySelector: (item: V, index: number) => K,\n ): Collection<K, V[]> {\n const groups = new Collection<K, V[]>();\n let index = 0;\n for (const item of items)\n groups.ensure(keySelector(item, index++), () => []).push(item);\n return groups;\n }\n /**\n * Builds a collection from `entries`, merging values that share a key.\n * @param combine Called with the value stored so far, the new one and the key; its result is stored.\n */\n public static combineEntries<K, V>(\n entries: Iterable<readonly [K, V]>,\n combine: (firstValue: V, secondValue: V, key: K) => V,\n ): Collection<K, V> {\n const result = new Collection<K, V>();\n for (const [key, value] of entries)\n result.set(\n key,\n result.has(key) ? combine(result.get(key)!, value, key) : value,\n );\n return result;\n }\n /** Calls `fn` with this collection and returns the collection unchanged.\n * Useful for inserting debug side-effects in a chain without breaking the flow.\n */\n public tap(fn: (collection: this) => unknown): this {\n fn(this);\n return this;\n }\n /** Maps every entry to an array of items and flattens the results. */\n public flatMap<T>(\n transform: (value: V, key: K, collection: this) => T[],\n ): T[] {\n const result: T[] = [];\n for (const [key, value] of this) {\n for (const item of transform(value, key, this)) result.push(item);\n }\n return result;\n }\n /** Reduces the collection to a single value. */\n public reduce<T>(\n fn: (accumulator: T, value: V, key: K, collection: this) => T,\n initialValue: T,\n ): T {\n let acc = initialValue;\n for (const [key, value] of this) acc = fn(acc, value, key, this);\n return acc;\n }\n /** Like {@link reduce}, but from the last entry to the first. */\n public reduceRight<T>(\n fn: (accumulator: T, value: V, key: K, collection: this) => T,\n initialValue: T,\n ): T {\n const entries = [...this];\n let acc = initialValue;\n for (let i = entries.length - 1; i >= 0; i--)\n acc = fn(acc, entries[i]![1], entries[i]![0], this);\n return acc;\n }\n /** Returns a new Collection with entries sorted by comparator (non-mutating).\n * Defaults to insertion order if no comparator is provided.\n */\n public sorted(comparator?: (a: V, b: V, aKey: K, bKey: K) => number): this {\n // Decorate with the original insertion index and use it as a tiebreaker so\n // equal elements keep their insertion order (a stable sort independent of\n // the engine's Array.prototype.sort stability guarantees).\n const decorated = [...this.entries()].map((entry, index) => ({\n entry,\n index,\n }));\n if (comparator)\n decorated.sort((x, y) => {\n const comparison = comparator(\n x.entry[1],\n y.entry[1],\n x.entry[0],\n y.entry[0],\n );\n return comparison !== 0 ? comparison : x.index - y.index;\n });\n const result = this.#derived();\n for (const { entry } of decorated) result.set(entry[0], entry[1]);\n return result;\n }\n /**\n * Returns a random value, or `undefined` if empty. With `amount`, returns\n * that many different values (all of them, shuffled, when `amount` is at\n * least the size).\n * Uses `Math.random()` (fast, non-cryptographic): do not use it for\n * security-sensitive selection such as tokens or secrets.\n * @param amount How many values to pick.\n * @throws {RangeError} If `amount` is not a non-negative integer.\n */\n public random(): V | undefined;\n public random(amount: number): V[];\n public random(amount?: number): V | V[] | undefined {\n if (amount !== undefined) return sample([...this.values()], amount);\n const size = this.size;\n if (size === 0) return undefined;\n let index = Math.floor(Math.random() * size);\n for (const value of this.values()) if (index-- === 0) return value;\n return undefined;\n }\n /**\n * Returns a random key, or `undefined` if empty. With `amount`, returns\n * that many different keys. Same randomness and errors as {@link random}.\n * @param amount How many keys to pick.\n */\n public randomKey(): K | undefined;\n public randomKey(amount: number): K[];\n public randomKey(amount?: number): K | K[] | undefined {\n if (amount !== undefined) return sample([...this.keys()], amount);\n const size = this.size;\n if (size === 0) return undefined;\n let index = Math.floor(Math.random() * size);\n for (const key of this.keys()) if (index-- === 0) return key;\n return undefined;\n }\n /** Returns the value at a given insertion-order index (supports negative indices). */\n public at(index: number): V | undefined {\n let remaining = index < 0 ? this.size + index : index;\n if (remaining < 0) return undefined;\n for (const value of this.values()) if (remaining-- === 0) return value;\n return undefined;\n }\n /** Returns the key at a given insertion-order index (supports negative indices). */\n public keyAt(index: number): K | undefined {\n let remaining = index < 0 ? this.size + index : index;\n if (remaining < 0) return undefined;\n for (const key of this.keys()) if (remaining-- === 0) return key;\n return undefined;\n }\n /** Serializes the collection to a plain `[key, value]` array. */\n public toJSON(): [K, V][] {\n return [...this.entries()];\n }\n}\n\nexport { Cache } from \"./cache.js\";\nexport type { CacheOptions } from \"./cache.js\";\n",
23
23
  "import { Collection } from \"@lunibee/collection\";\n\n/** Splits the audit-log `reason` off an options object, so it becomes a header, not a body field. */\nexport function splitReason<T extends { reason?: string }>(\n options: T,\n): [Omit<T, \"reason\">, string | undefined] {\n const { reason, ...payload } = options;\n return [payload, reason];\n}\n\n/** Generic cache manager. @typeParam K Cache key type. @typeParam V Cached value type. */\nexport class Manager<K, V> {\n /** Authoritative resource state. Entries never expire: see {@link Manager.set}. */\n public readonly cache = new Collection<K, V>();\n /** Gets a cached value. @param id Cache key. @returns Cached value. */\n public get(id: K): V | undefined {\n return this.cache.get(id);\n }\n /** Checks whether a value is cached. @param id Cache key. @returns True when cached. */\n public has(id: K): boolean {\n return this.cache.has(id);\n }\n /** In-flight fetches; `dirty` is set when the key is written or deleted meanwhile. */\n readonly #inflight = new Map<K, { promise: Promise<V>; dirty: boolean }>();\n\n /**\n * Runs a REST load for one key. Concurrent loads of that key share a\n * single request. If the key is written (e.g. by a Gateway update) or\n * deleted while the request is in flight, the result is returned but not\n * stored, so it cannot overwrite fresher state or resurrect a deleted\n * resource.\n * @param store Stores a fresh result and returns the canonical instance.\n */\n protected fetchOnce(\n id: K,\n load: () => Promise<V>,\n store: (value: V) => V = (value) => {\n this.set(id, value);\n return value;\n },\n ): Promise<V> {\n const pending = this.#inflight.get(id);\n if (pending) return pending.promise;\n const entry = {\n promise: new Promise<V>((resolve) => resolve(load())),\n dirty: false,\n };\n this.#inflight.set(id, entry);\n entry.promise = entry.promise.then(\n (value) => {\n this.#inflight.delete(id);\n return entry.dirty ? (this.get(id) ?? value) : store(value);\n },\n (error: unknown) => {\n this.#inflight.delete(id);\n throw error;\n },\n );\n return entry.promise;\n }\n\n #markDirty(id: K): void {\n const pending = this.#inflight.get(id);\n if (pending) pending.dirty = true;\n }\n\n /** Stores a resource with `setWithoutTTL()`, so it leaves only on an explicit delete (e.g. a Gateway `*_DELETE`), never through TTL. @param id Cache key. @param value Value. @returns This manager. */\n public set(id: K, value: V): this {\n this.#markDirty(id);\n this.cache.setWithoutTTL(id, value);\n return this;\n }\n /** Deletes a cached value. @param id Cache key. @returns True when deleted. */\n public delete(id: K): boolean {\n this.#markDirty(id);\n return this.cache.delete(id);\n }\n /** Clears the cache. @returns Nothing. */\n public clear(): void {\n this.cache.clear();\n }\n /** Gets cache size. @returns Number of cached values. */\n public get size(): number {\n return this.cache.size;\n }\n /** Gets the first cached value. @returns First value. */\n public first(): V | undefined {\n return this.cache.first();\n }\n /** Returns cached values. @returns Array of values. */\n public values(): V[] {\n return this.cache.array();\n }\n /** Finds a cached value. @param predicate Predicate. @returns Matching value. */\n public find(predicate: (value: V, key: K) => boolean): V | undefined {\n return this.cache.find(predicate);\n }\n /** Iterates cached entries. @returns Cache iterator. */\n public [Symbol.iterator](): IterableIterator<[K, V]> {\n return this.cache[Symbol.iterator]();\n }\n}\n\n/** Generic REST-backed resource manager. @typeParam K Resource key type. @typeParam V Resource type. */\nexport class ResourceManager<K, V> extends Manager<K, V> {\n readonly #fetcher: (id: K) => Promise<V>;\n readonly #key: (value: V) => K;\n\n public constructor(fetcher: (id: K) => Promise<V>, key: (value: V) => K) {\n super();\n if (typeof fetcher !== \"function\" || typeof key !== \"function\")\n throw new TypeError(\n \"ResourceManager requires fetcher and key functions.\",\n );\n this.#fetcher = fetcher;\n this.#key = key;\n }\n\n public async resolve(id: K): Promise<V> {\n return this.get(id) ?? this.fetch(id);\n }\n\n public fetch(id: K): Promise<V> {\n return this.fetchOnce(id, () => this.#fetcher(id));\n }\n\n public async fetchMany(ids: Iterable<K>): Promise<V[]> {\n return Promise.all([...ids].map((id) => this.resolve(id)));\n }\n\n /** Stores a resource, merging into the cached instance when there is one so existing references stay current. @returns The canonical instance. */\n public upsert(resource: V): V {\n const key = this.#key(resource);\n const existing = this.get(key);\n if (\n existing !== undefined &&\n existing !== resource &&\n typeof existing === \"object\" &&\n existing !== null\n ) {\n Object.assign(existing, resource);\n this.set(key, existing);\n return existing;\n }\n this.set(key, resource);\n return resource;\n }\n\n public update(resource: V): V {\n return this.upsert(resource);\n }\n}\n",
24
24
  "export interface BucketState {\n remaining: number;\n resetAt: number;\n}\n\n/**\n * Outcome of an atomic reservation.\n *\n * `granted` means one unit of the bucket's allowance now belongs to the caller\n * and to nobody else — the distinction that a read-then-write cannot make when\n * several workers share a store.\n */\nexport type Reservation =\n { granted: true } | { granted: false; retryAfterMs: number };\n\n/** Interface for distributed or local rate limit synchronization. */\nexport interface RateLimitStore {\n /** Gets the server bucket hash for a normalized route. */\n getBucketHash(\n route: string,\n ): Promise<string | undefined> | string | undefined;\n /** Associates a route with a server bucket hash. */\n setBucketHash(route: string, hash: string): Promise<void> | void;\n\n /** Gets the current state for a bucket key. */\n getBucket(\n key: string,\n ): Promise<BucketState | undefined> | BucketState | undefined;\n /** Updates the state for a bucket key. */\n updateBucket(key: string, state: BucketState): Promise<void> | void;\n\n /** Gets the global reset timestamp. */\n getGlobalReset(): Promise<number> | number;\n /** Sets the global reset timestamp. */\n setGlobalReset(resetAt: number): Promise<void> | void;\n\n /**\n * Atomically consumes one unit of a bucket's allowance.\n *\n * Optional: a store that cannot do this atomically must omit it, and the\n * limiter falls back to waiting on observed state. Implementations must\n * grant when the bucket is unknown or its window has elapsed — an unknown\n * bucket is discovered by sending, and refusing would deadlock the route.\n */\n reserve?(key: string): Promise<Reservation> | Reservation;\n\n /**\n * Evicts expired bucket entries. Optional: stores with native key\n * expiry (e.g. Redis) can omit it. `maxAge` (ms) additionally drops\n * buckets whose reset is older than that window; defaults to 0 (only\n * already-reset buckets are removed).\n */\n prune?(maxAge?: number): Promise<void> | void;\n}\n\n/** Local memory implementation of RateLimitStore. */\nexport class MemoryRateLimitStore implements RateLimitStore {\n readonly #buckets = new Map<string, BucketState>();\n readonly #routeBuckets = new Map<string, string>();\n #globalResetAt = 0;\n /** Minimum interval between automatic prunes, in ms. */\n static readonly #PRUNE_INTERVAL = 60_000;\n #lastPruneAt = 0;\n\n public getBucketHash(route: string): string | undefined {\n return this.#routeBuckets.get(route);\n }\n public setBucketHash(route: string, hash: string): void {\n this.#routeBuckets.set(route, hash);\n }\n public getBucket(key: string): BucketState | undefined {\n return this.#buckets.get(key);\n }\n /**\n * Consumes one unit of the bucket's allowance.\n *\n * Single-process reservation is trivially atomic: JavaScript will not\n * interleave this method with another caller's copy of it.\n */\n public reserve(key: string): Reservation {\n const state = this.#buckets.get(key);\n const now = Date.now();\n // Unknown bucket, or a window that has already elapsed: the next\n // response re-establishes the real allowance.\n if (!state || state.resetAt <= now) return { granted: true };\n if (state.remaining > 0) {\n state.remaining -= 1;\n return { granted: true };\n }\n return { granted: false, retryAfterMs: state.resetAt - now };\n }\n public updateBucket(key: string, state: BucketState): void {\n this.#buckets.set(key, state);\n // Amortised eviction: sweep expired buckets at most once per interval\n // so the map cannot grow unbounded across long-lived processes.\n const now = Date.now();\n if (now - this.#lastPruneAt >= MemoryRateLimitStore.#PRUNE_INTERVAL) {\n this.#lastPruneAt = now;\n this.prune();\n }\n }\n /** Removes buckets whose reset is in the past (or older than `maxAge` ms). */\n public prune(maxAge = 0): void {\n const cutoff = Date.now() - Math.max(0, maxAge);\n for (const [key, state] of this.#buckets) {\n if (state.resetAt <= cutoff) this.#buckets.delete(key);\n }\n }\n public getGlobalReset(): number {\n return this.#globalResetAt;\n }\n public setGlobalReset(resetAt: number): void {\n this.#globalResetAt = resetAt;\n }\n}\n",
25
- "/** Why a REST request failed, for handling without matching on status codes. */\nexport type RESTErrorKind =\n /** Cancelled through an AbortSignal. */\n | \"aborted\"\n /** The attempt exceeded the transport timeout. */\n | \"timeout\"\n /** No response: DNS, TLS, connection reset. */\n | \"network\"\n /** 429 that outlived the retry budget. */\n | \"rateLimited\"\n /** 401: invalid or revoked token. */\n | \"authentication\"\n /** 403: missing access or permissions. */\n | \"permission\"\n /** 404: unknown resource. */\n | \"notFound\"\n /** 400 / 422: the request body or parameters were rejected. */\n | \"validation\"\n /** 5xx: Discord failed to handle the request. */\n | \"server\"\n /** Any other 4xx. */\n | \"client\";\n\nfunction kindFromStatus(status: number): RESTErrorKind {\n if (status === 429) return \"rateLimited\";\n if (status === 401) return \"authentication\";\n if (status === 403) return \"permission\";\n if (status === 404) return \"notFound\";\n if (status === 400 || status === 422) return \"validation\";\n if (status >= 500) return \"server\";\n if (status === 0) return \"network\";\n return \"client\";\n}\n\n/**\n * Replaces the token segment of webhook and interaction paths with `:token`,\n * so request paths can appear in errors, hooks and logs without leaking a\n * credential.\n */\nexport function redactPath(path: string): string {\n return (\n path\n // The ID segment is matched loosely: a malformed ID must not stop the\n // token that follows it from being redacted.\n .replace(/^(\\/webhooks\\/[^/?]+\\/)[^/?]+/i, \"$1:token\")\n .replace(/^(\\/interactions\\/[^/?]+\\/)[^/?]+/i, \"$1:token\")\n );\n}\n\n/** What to check when Discord refuses an action the bot attempted. */\nconst HINTS: Readonly<Record<number, string>> = {\n 50001: \"The bot cannot see this resource: check that it is in the guild and has View Channel there.\",\n 50013: \"The bot lacks a permission for this action, or the target role or member is at or above the bot's highest role.\",\n};\n\n/** Error thrown when Discord rejects a REST request. */\nexport class RESTError extends Error {\n /** Failure category. */\n public readonly kind: RESTErrorKind;\n /** HTTP status returned by Discord. */\n public readonly status: number;\n /** Discord API error code, when provided. */\n public readonly code?: number;\n /** Raw Discord validation/error payload. */\n public readonly errors?: unknown;\n /** HTTP method used for the failed request. */\n public readonly method?: string;\n /** API path used for the failed request. */\n public readonly path?: string;\n /** What to check next, for errors with a common cause (missing access or permissions). */\n public readonly hint?: string;\n /** Creates a REST error with request context. @param message Error message. @param status HTTP status. @param code Discord error code. @param errors Raw error payload. @param options Request context and cause. */\n public constructor(\n message: string,\n status: number,\n code?: number,\n errors?: unknown,\n options: {\n method?: string;\n path?: string;\n cause?: unknown;\n kind?: RESTErrorKind;\n } = {},\n ) {\n super(\n message,\n options.cause === undefined ? undefined : { cause: options.cause },\n );\n this.name = \"RESTError\";\n this.status = status;\n this.kind = options.kind ?? kindFromStatus(status);\n this.code = code;\n this.hint = code === undefined ? undefined : HINTS[code];\n this.errors = errors;\n this.method = options.method;\n this.path =\n options.path === undefined ? undefined : redactPath(options.path);\n }\n\n /** Whether sending the same request again later could succeed. Validation,\n * permission, authentication and not-found failures never will. */\n public get retryable(): boolean {\n return (\n this.kind === \"rateLimited\" ||\n this.kind === \"server\" ||\n this.kind === \"network\" ||\n this.kind === \"timeout\"\n );\n }\n}\n\n/** Creates the cancellation error shared by every stage of the request pipeline. */\nexport function abortError(path: string, reason: unknown): RESTError {\n return new RESTError(\n reason instanceof Error\n ? reason.message\n : \"Discord REST request was aborted\",\n 0,\n undefined,\n undefined,\n { path, cause: reason, kind: \"aborted\" },\n );\n}\n\n/** Waits for a delay, rejecting early if the signal aborts. */\nexport async function sleep(\n delay: number,\n signal: AbortSignal | undefined,\n path: string,\n): Promise<void> {\n if (delay <= 0) return;\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(resolve, delay);\n const abort = (): void => {\n clearTimeout(timer);\n reject(abortError(path, signal?.reason));\n };\n if (signal?.aborted) return abort();\n signal?.addEventListener(\"abort\", abort, { once: true });\n });\n}\n\n/** Awaits a promise, rejecting early if the signal aborts. */\nexport async function abortable(\n promise: Promise<void>,\n signal: AbortSignal | undefined,\n path: string,\n): Promise<void> {\n if (!signal) return promise;\n if (signal.aborted) throw abortError(path, signal.reason);\n return Promise.race([\n promise,\n new Promise<void>((_, reject) =>\n signal.addEventListener(\n \"abort\",\n () => reject(abortError(path, signal.reason)),\n { once: true },\n ),\n ),\n ]);\n}\n",
25
+ "/** Why a REST request failed, for handling without matching on status codes. */\nexport type RESTErrorKind =\n /** Cancelled through an AbortSignal. */\n | \"aborted\"\n /** The attempt exceeded the transport timeout. */\n | \"timeout\"\n /** No response: DNS, TLS, connection reset. */\n | \"network\"\n /** 429 that outlived the retry budget. */\n | \"rateLimited\"\n /** 401: invalid or revoked token. */\n | \"authentication\"\n /** 403: missing access or permissions. */\n | \"permission\"\n /** 404: unknown resource. */\n | \"notFound\"\n /** 400 / 422: the request body or parameters were rejected. */\n | \"validation\"\n /** 5xx: Discord failed to handle the request. */\n | \"server\"\n /** Any other 4xx. */\n | \"client\";\n\nfunction kindFromStatus(status: number): RESTErrorKind {\n if (status === 429) return \"rateLimited\";\n if (status === 401) return \"authentication\";\n if (status === 403) return \"permission\";\n if (status === 404) return \"notFound\";\n if (status === 400 || status === 422) return \"validation\";\n if (status >= 500) return \"server\";\n if (status === 0) return \"network\";\n return \"client\";\n}\n\n/**\n * Replaces the token segment of webhook and interaction paths with `:token`,\n * so request paths can appear in errors, hooks and logs without leaking a\n * credential.\n */\nexport function redactPath(path: string): string {\n return (\n path\n // The ID segment is matched loosely: a malformed ID must not stop the\n // token that follows it from being redacted.\n .replace(/^(\\/webhooks\\/[^/?]+\\/)[^/?]+/i, \"$1:token\")\n .replace(/^(\\/interactions\\/[^/?]+\\/)[^/?]+/i, \"$1:token\")\n );\n}\n\n/** Webhook and interaction tokens inside any text, such as the URL in a network error's message. */\nconst TOKEN_IN_TEXT =\n /(\\/(?:webhooks|interactions)\\/[^/\\s?\"'`]+\\/)[^/\\s?\"'`]+/gi;\n\n/** Hides webhook and interaction tokens in free text. */\nexport function redactText(text: string): string {\n return text.replace(TOKEN_IN_TEXT, \"$1:token\");\n}\n\n/**\n * A copy of a lower-level error that is safe to attach as a `cause`: the same\n * name and code, with tokens removed from the message and stack. Runtimes put\n * the request URL in network error messages, and the URL holds webhook tokens.\n */\nexport function sanitizeCause(error: unknown): unknown {\n if (!(error instanceof Error)) return undefined;\n const copy = new Error(redactText(error.message));\n copy.name = error.name;\n if (error.stack) copy.stack = redactText(error.stack);\n for (const key of [\"code\", \"errno\", \"syscall\"] as const) {\n const value = (error as unknown as Record<string, unknown>)[key];\n if (typeof value === \"string\" || typeof value === \"number\")\n (copy as unknown as Record<string, unknown>)[key] = value;\n }\n return copy;\n}\n\n/** What to check when Discord refuses an action the bot attempted. */\nconst HINTS: Readonly<Record<number, string>> = {\n 50001: \"The bot cannot see this resource: check that it is in the guild and has View Channel there.\",\n 50013: \"The bot lacks a permission for this action, or the target role or member is at or above the bot's highest role.\",\n};\n\n/** Error thrown when Discord rejects a REST request. */\nexport class RESTError extends Error {\n /** Failure category. */\n public readonly kind: RESTErrorKind;\n /** HTTP status returned by Discord. */\n public readonly status: number;\n /** Discord API error code, when provided. */\n public readonly code?: number;\n /** Raw Discord validation/error payload. */\n public readonly errors?: unknown;\n /** HTTP method used for the failed request. */\n public readonly method?: string;\n /** API path used for the failed request. */\n public readonly path?: string;\n /** What to check next, for errors with a common cause (missing access or permissions). */\n public readonly hint?: string;\n /** Creates a REST error with request context. @param message Error message. @param status HTTP status. @param code Discord error code. @param errors Raw error payload. @param options Request context and cause. */\n public constructor(\n message: string,\n status: number,\n code?: number,\n errors?: unknown,\n options: {\n method?: string;\n path?: string;\n cause?: unknown;\n kind?: RESTErrorKind;\n } = {},\n ) {\n super(\n message,\n options.cause === undefined ? undefined : { cause: options.cause },\n );\n this.name = \"RESTError\";\n this.status = status;\n this.kind = options.kind ?? kindFromStatus(status);\n this.code = code;\n this.hint = code === undefined ? undefined : HINTS[code];\n this.errors = errors;\n this.method = options.method;\n this.path =\n options.path === undefined ? undefined : redactPath(options.path);\n }\n\n /** Whether sending the same request again later could succeed. Validation,\n * permission, authentication and not-found failures never will. */\n public get retryable(): boolean {\n return (\n this.kind === \"rateLimited\" ||\n this.kind === \"server\" ||\n this.kind === \"network\" ||\n this.kind === \"timeout\"\n );\n }\n}\n\n/** Creates the cancellation error shared by every stage of the request pipeline. */\nexport function abortError(path: string, reason: unknown): RESTError {\n return new RESTError(\n reason instanceof Error\n ? reason.message\n : \"Discord REST request was aborted\",\n 0,\n undefined,\n undefined,\n { path, cause: reason, kind: \"aborted\" },\n );\n}\n\n/** Waits for a delay, rejecting early if the signal aborts. */\nexport async function sleep(\n delay: number,\n signal: AbortSignal | undefined,\n path: string,\n): Promise<void> {\n if (delay <= 0) return;\n await new Promise<void>((resolve, reject) => {\n // Every way out clears the timer and removes the listener, so a signal\n // shared by many requests does not collect one listener per wait.\n const finish = (error?: Error): void => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n if (error) reject(error);\n else resolve();\n };\n const onAbort = (): void => finish(abortError(path, signal?.reason));\n const timer = setTimeout(finish, delay);\n if (signal?.aborted) return onAbort();\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\n/** Awaits a promise, rejecting early if the signal aborts. */\nexport async function abortable(\n promise: Promise<void>,\n signal: AbortSignal | undefined,\n path: string,\n): Promise<void> {\n if (!signal) return promise;\n if (signal.aborted) throw abortError(path, signal.reason);\n return new Promise<void>((resolve, reject) => {\n const onAbort = (): void => reject(abortError(path, signal.reason));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n // Whichever settles first, the listener goes.\n promise.then(\n () => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n },\n (error: unknown) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(error);\n },\n );\n });\n}\n",
26
26
  "import { createHash } from \"node:crypto\";\nimport { redactPath } from \"./errors.js\";\n\n/** Query-string value accepted by a request. */\nexport type RESTQuery =\n | URLSearchParams\n | Record<string, string | number | boolean | null | undefined>\n | string;\n\n/**\n * Identity of a request as Discord's rate limiter sees it.\n *\n * `route` is the shape of the endpoint (ids replaced by `:id`), which is what\n * Discord returns a bucket hash for. `major` is the resource that gives an\n * endpoint its own independent limit. Both are needed: the hash alone would\n * make two channels share one counter.\n */\nexport interface RouteKey {\n /** Uppercased HTTP method. */\n method: string;\n /** Raw request path, without query string. */\n path: string;\n /** Normalized `METHOD:/path/:id` route used for bucket-hash lookup. */\n route: string;\n /** Major parameter scoping the limit (channel, guild, webhook id[:token]). */\n major: string;\n}\n\n/** Normalizes Discord routes for stable bucket discovery. */\nexport function normalizeRoutePath(path: string): string {\n const queryIndex = path.indexOf(\"?\");\n const routePath = queryIndex === -1 ? path : path.slice(0, queryIndex);\n // Tokens never enter a route key: keys are stored (Redis keeps them for days).\n return redactPath(routePath).replace(/\\/\\d+(?=\\/|$)/g, \"/:id\");\n}\n\n/**\n * Discord's *major parameters* — the resource ids that give an endpoint its own\n * independent rate limit. Per the API documentation these are `channel_id`,\n * `guild_id` and `webhook_id`; webhook routes are additionally scoped by\n * their token. Any other id in a path shares its limit with sibling resources.\n */\nexport function majorParameter(path: string): string {\n const match = /^\\/(channels|guilds|webhooks)\\/(\\d+)(?:\\/([^/?]+))?/i.exec(\n path,\n );\n if (!match) return \"@none\";\n // A webhook's limit is keyed by its id and its token. The token is hashed\n // so the key (stored, possibly shared through Redis) never holds it.\n if (match[1]!.toLowerCase() === \"webhooks\" && match[3] !== undefined)\n return `${match[2]}:${tokenDigest(match[3])}`;\n return match[2]!;\n}\n\n/** A short, stable digest of a token, identical in every process. */\nfunction tokenDigest(token: string): string {\n return createHash(\"sha256\").update(token).digest(\"hex\").slice(0, 16);\n}\n\n/** Combines a bucket hash (or route) with a major parameter into a bucket key. */\nexport function scopeBucket(hashOrRoute: string, major: string): string {\n return `${hashOrRoute}|${major}`;\n}\n\n/** Builds the routing identity for one request. */\nexport function createRouteKey(method: string, path: string): RouteKey {\n const normalizedMethod = method.toUpperCase();\n return {\n method: normalizedMethod,\n path,\n route: `${normalizedMethod}:${normalizeRoutePath(path)}`,\n major: majorParameter(path),\n };\n}\n\n/** Serialises a query into a `?...` suffix (empty string when nothing to add). */\nexport function serializeQuery(query: RESTQuery | undefined): string {\n if (query === undefined) return \"\";\n if (typeof query === \"string\")\n return query.length === 0 || query.startsWith(\"?\")\n ? query\n : `?${query}`;\n const params =\n query instanceof URLSearchParams\n ? query\n : new URLSearchParams(\n Object.entries(query).flatMap(([key, value]) =>\n value === undefined || value === null\n ? []\n : [[key, String(value)] as [string, string]],\n ),\n );\n const serialized = params.toString();\n return serialized.length === 0 ? \"\" : `?${serialized}`;\n}\n",
27
27
  "import { abortable } from \"./errors.js\";\n\n/**\n * Serialises work per rate-limit bucket.\n *\n * One request per bucket key is in flight at a time, so each request sees the\n * limit state its predecessor's response wrote. The queue slot is released on\n * every exit path — including an abort raised while still waiting — because a\n * slot that is never released wedges its bucket for the process lifetime.\n */\nexport class RequestScheduler {\n /** Maximum times a request may be moved to a different bucket queue. */\n public static readonly MAX_REMAPS = 2;\n readonly #queues = new Map<string, Promise<void>>();\n\n /** Number of bucket keys currently holding a queue slot. */\n public get size(): number {\n return this.#queues.size;\n }\n\n /**\n * Runs `task` under the bucket key that `resolveKey` reports *at the moment\n * the slot is acquired*, not at enqueue time.\n *\n * Discord can map several routes onto one bucket hash, and a route only\n * learns its hash from a response. A request that queued under its\n * route-derived key while another request discovered the shared hash would\n * otherwise run concurrently with that bucket's other traffic. Re-resolving\n * after the wait moves it onto the right queue instead.\n *\n * @param resolveKey Returns the current bucket key for this request.\n * @param signal Cancellation signal honoured while queued.\n * @param path Request path, used for cancellation error context.\n * @param task Work to run while holding the slot, given the final key and\n * a callback that frees the slot early.\n */\n public async runResolved<T>(\n resolveKey: () => Promise<string>,\n signal: AbortSignal | undefined,\n path: string,\n task: (key: string, release: () => void) => Promise<T>,\n ): Promise<T> {\n let key = await resolveKey();\n // A remap can only chain as far as route key -> shared hash, so a small\n // bound is enough; the final hop runs whatever key it holds.\n for (let hop = 0; hop < RequestScheduler.MAX_REMAPS; hop++) {\n const outcome = await this.run<\n { done: true; value: T } | { done: false; key: string }\n >(key, signal, path, async (release) => {\n const current = await resolveKey();\n if (current !== key) return { done: false, key: current };\n return { done: true, value: await task(key, release) };\n });\n if (outcome.done) return outcome.value;\n key = outcome.key;\n }\n return this.run(key, signal, path, (release) => task(key, release));\n }\n\n /**\n * Runs `task` once every earlier task for `key` has settled, or has freed\n * its slot early through the `release` callback it was given.\n * @param key Bucket key to serialise on.\n * @param signal Cancellation signal honoured while queued.\n * @param path Request path, used for cancellation error context.\n * @param task Work to run while holding the slot, given an idempotent\n * callback that frees the slot before the task settles.\n */\n public async run<T>(\n key: string,\n signal: AbortSignal | undefined,\n path: string,\n task: (release: () => void) => Promise<T>,\n ): Promise<T> {\n const previous = this.#queues.get(key) ?? Promise.resolve();\n let open!: () => void;\n const gate = new Promise<void>((resolve) => {\n open = resolve;\n });\n this.#queues.set(key, gate);\n let released = false;\n const release = (): void => {\n if (released) return;\n released = true;\n open();\n // Drop our entry so idle buckets do not accumulate, but only if it\n // is still ours: a later request may already have replaced it.\n if (this.#queues.get(key) === gate) this.#queues.delete(key);\n };\n try {\n await abortable(previous, signal, path);\n return await task(release);\n } finally {\n release();\n }\n }\n}\n",
28
28
  "import { sleep } from \"./errors.js\";\nimport { scopeBucket } from \"./route.js\";\nimport type { RateLimitStore } from \"./store.js\";\n\n/**\n * Owns Discord's rate-limit state: when a request may go out, and what a\n * response says about the bucket it landed in.\n *\n * The limiter holds no queueing logic of its own — {@link RequestScheduler}\n * decides ordering — and no HTTP knowledge beyond reading rate-limit headers.\n */\nexport class RateLimiter {\n readonly #store: RateLimitStore;\n /** Whether responses may arrive out of order for one bucket. */\n readonly #concurrent: boolean;\n\n /**\n * @param store Rate-limit state store.\n * @param options `concurrent`: set when several requests per bucket can be\n * in flight, so a late response cannot raise `remaining` within its window.\n */\n public constructor(\n store: RateLimitStore,\n options: { concurrent?: boolean } = {},\n ) {\n this.#store = store;\n this.#concurrent = options.concurrent ?? false;\n }\n\n /** The backing store, shared across processes when a distributed store is used. */\n public get store(): RateLimitStore {\n return this.#store;\n }\n\n /** Resolves the bucket key a request should be gated on. */\n public async resolveBucketKey(\n route: string,\n major: string,\n ): Promise<string> {\n return scopeBucket(\n (await this.#store.getBucketHash(route)) ?? route,\n major,\n );\n }\n\n /** Whether the backing store can reserve allowance atomically. */\n public get reserves(): boolean {\n return typeof this.#store.reserve === \"function\";\n }\n\n /**\n * Waits until both the route bucket and the global limit permit sending.\n *\n * When the store supports it, allowance is *reserved* rather than merely\n * observed. Reading `remaining` and deciding to send is a race across\n * workers: three processes all read `remaining: 1` and all send. A\n * reservation hands the unit to exactly one of them.\n */\n public async acquire(\n bucketKey: string,\n signal: AbortSignal | undefined,\n path: string,\n ): Promise<void> {\n await this.#waitGlobal(signal, path);\n if (!this.#store.reserve) {\n const bucket = await this.#store.getBucket(bucketKey);\n if (bucket) {\n const delay = bucket.resetAt - Date.now();\n if (bucket.remaining <= 0 && delay > 0)\n await sleep(delay, signal, path);\n }\n return;\n }\n // Each refusal carries the wait until the window resets, so the loop\n // advances by a real interval every time; the bound only guards against\n // a pathological store that keeps refusing with a zero wait.\n for (let attempt = 0; attempt < 8; attempt++) {\n const reservation = await this.#store.reserve(bucketKey);\n if (reservation.granted) return;\n await sleep(Math.max(1, reservation.retryAfterMs), signal, path);\n await this.#waitGlobal(signal, path);\n }\n }\n\n async #waitGlobal(\n signal: AbortSignal | undefined,\n path: string,\n ): Promise<void> {\n const globalDelay = (await this.#store.getGlobalReset()) - Date.now();\n if (globalDelay > 0) await sleep(globalDelay, signal, path);\n }\n\n /** Extends the global limit, never shortening a longer one already recorded. */\n public async noteGlobalReset(resetAt: number): Promise<void> {\n const current = await this.#store.getGlobalReset();\n await this.#store.setGlobalReset(Math.max(current, resetAt));\n }\n\n /**\n * Records a response's rate-limit headers and returns the bucket key the\n * request actually belongs to: Discord may reveal a server bucket hash that\n * differs from the route-derived key used before the first response.\n */\n public async applyResponse(\n response: Response,\n bucketKey: string,\n route: string,\n major: string,\n ): Promise<string> {\n let currentKey = bucketKey;\n const serverBucket = response.headers.get(\"X-RateLimit-Bucket\");\n if (serverBucket) {\n await this.#store.setBucketHash(route, serverBucket);\n currentKey = scopeBucket(serverBucket, major);\n }\n\n const stored = await this.#store.getBucket(currentKey);\n const bucket = stored ? { ...stored } : { remaining: 1, resetAt: 0 };\n const windowActive =\n this.#concurrent && !!stored && stored.resetAt > Date.now();\n const remaining = Number(response.headers.get(\"X-RateLimit-Remaining\"));\n const resetAfter = Number(\n response.headers.get(\"X-RateLimit-Reset-After\"),\n );\n const reset = Number(response.headers.get(\"X-RateLimit-Reset\"));\n\n if (Number.isFinite(remaining))\n bucket.remaining = Math.max(0, remaining);\n if (Number.isFinite(resetAfter))\n bucket.resetAt = Date.now() + Math.max(0, resetAfter) * 1000;\n else if (Number.isFinite(reset)) bucket.resetAt = reset * 1000;\n // With concurrent requests, responses from one window can arrive out of\n // order: never let a late one hand back allowance already reserved.\n if (windowActive && stored) {\n bucket.remaining = Math.min(bucket.remaining, stored.remaining);\n bucket.resetAt = Math.max(bucket.resetAt, stored.resetAt);\n }\n\n if (response.status === 429) {\n const retryAfter = Number(response.headers.get(\"Retry-After\"));\n if (Number.isFinite(retryAfter))\n bucket.resetAt = Math.max(\n bucket.resetAt,\n Date.now() + retryAfter * 1000,\n );\n }\n await this.#store.updateBucket(currentKey, bucket);\n\n if (response.headers.get(\"X-RateLimit-Global\") === \"true\") {\n const retryAfter = Number(response.headers.get(\"Retry-After\"));\n if (Number.isFinite(retryAfter))\n await this.noteGlobalReset(Date.now() + retryAfter * 1000);\n }\n\n return currentKey;\n }\n}\n",
29
- "import { RESTError, abortError } from \"./errors.js\";\n\n/** Minimal fetch shape the transport depends on, so a stub needs no extras. */\nexport type FetchLike = (input: string, init: RequestInit) => Promise<Response>;\n\n/** One HTTP attempt, fully resolved: no routing, retry or rate-limit concerns. */\nexport interface TransportRequest {\n /** Uppercased HTTP method. */\n method: string;\n /** Path with query string, relative to the transport's base URL. */\n path: string;\n /** Request headers, already including authorization. */\n headers: Record<string, string>;\n /** Encoded body, or undefined for a bodyless request. */\n body?: BodyInit;\n /** Caller cancellation signal. */\n signal?: AbortSignal;\n}\n\n/** Thrown by {@link HttpTransport} when the attempt never produced a response. */\nexport class TransportError extends Error {\n /** Whether the attempt was cut short by the transport timeout or an abort. */\n public readonly timedOut: boolean;\n public constructor(message: string, timedOut: boolean, cause?: unknown) {\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"TransportError\";\n this.timedOut = timedOut;\n }\n}\n\n/**\n * Sends one HTTP attempt and returns the raw {@link Response}.\n *\n * Everything above it — routing, rate limiting, retries, decoding — is somebody\n * else's job, which is what makes the layer substitutable in tests.\n */\nexport class HttpTransport {\n readonly #baseURL: string;\n readonly #timeout: number;\n readonly #fetch: FetchLike;\n\n public constructor(\n options: {\n baseURL?: string;\n timeout?: number;\n fetch?: FetchLike;\n } = {},\n ) {\n this.#baseURL = (\n options.baseURL ?? \"https://discord.com/api/v10\"\n ).replace(/\\/$/, \"\");\n this.#timeout = Math.max(1, options.timeout ?? 15_000);\n this.#fetch =\n options.fetch ?? ((input, init) => globalThis.fetch(input, init));\n }\n\n /** Base URL every request path is resolved against. */\n public get baseURL(): string {\n return this.#baseURL;\n }\n /** Per-attempt timeout in milliseconds. */\n public get timeout(): number {\n return this.#timeout;\n }\n\n /**\n * Performs the attempt.\n * @throws {RESTError} If the caller's signal was already aborted.\n * @throws {TransportError} If the attempt times out or the transport fails.\n */\n public async send(request: TransportRequest): Promise<Response> {\n if (request.signal?.aborted)\n throw abortError(request.path, request.signal.reason);\n\n const controller = new AbortController();\n const onAbort = (): void => controller.abort(request.signal?.reason);\n request.signal?.addEventListener(\"abort\", onAbort, { once: true });\n const timer = setTimeout(\n () =>\n controller.abort(\n new DOMException(\"REST request timeout\", \"TimeoutError\"),\n ),\n this.#timeout,\n );\n try {\n return await this.#fetch(`${this.#baseURL}${request.path}`, {\n method: request.method,\n headers: request.headers,\n body: request.body,\n signal: controller.signal,\n });\n } catch (error) {\n if (error instanceof RESTError) throw error;\n const timedOut =\n error instanceof DOMException &&\n (error.name === \"TimeoutError\" || error.name === \"AbortError\");\n throw new TransportError(\n timedOut\n ? `Discord REST request timed out after ${this.#timeout}ms`\n : \"Discord REST request failed\",\n timedOut,\n error,\n );\n } finally {\n clearTimeout(timer);\n request.signal?.removeEventListener(\"abort\", onAbort);\n }\n }\n}\n",
29
+ "import { RESTError, abortError, sanitizeCause } from \"./errors.js\";\n\n/** Minimal fetch shape the transport depends on, so a stub needs no extras. */\nexport type FetchLike = (input: string, init: RequestInit) => Promise<Response>;\n\n/** One HTTP attempt, fully resolved: no routing, retry or rate-limit concerns. */\nexport interface TransportRequest {\n /** Uppercased HTTP method. */\n method: string;\n /** Path with query string, relative to the transport's base URL. */\n path: string;\n /** Request headers, already including authorization. */\n headers: Record<string, string>;\n /** Encoded body, or undefined for a bodyless request. */\n body?: BodyInit;\n /** Caller cancellation signal. */\n signal?: AbortSignal;\n}\n\n/** Hosts that are this machine, where cleartext is acceptable. */\nconst LOOPBACK = /^(?:localhost|127(?:\\.\\d{1,3}){3}|\\[::1\\])$/i;\n\n/**\n * Checks a base URL before the bot token is sent to it. It must be an\n * `https:` URL with no credentials, query or fragment; `http:` is accepted\n * for this machine, or anywhere with `allowInsecure`.\n * @throws {TypeError} Without repeating any credentials the URL contained.\n */\nexport function parseBaseURL(raw: string, allowInsecure = false): string {\n let url: URL;\n try {\n url = new URL(raw);\n } catch {\n throw new TypeError(\"baseURL must be an absolute http(s) URL.\");\n }\n if (url.protocol !== \"https:\" && url.protocol !== \"http:\")\n throw new TypeError(\"baseURL must use https.\");\n if (url.username || url.password)\n throw new TypeError(\"baseURL must not contain credentials.\");\n if (url.search || url.hash)\n throw new TypeError(\"baseURL must not contain a query or fragment.\");\n if (\n url.protocol === \"http:\" &&\n !allowInsecure &&\n !LOOPBACK.test(url.hostname)\n )\n throw new TypeError(\n \"baseURL must use https: the bot token would travel in cleartext (allowInsecureBaseURL: true overrides this for a trusted network).\",\n );\n return raw.replace(/\\/$/, \"\");\n}\n\n/** Thrown by {@link HttpTransport} when the attempt never produced a response. */\nexport class TransportError extends Error {\n /** Whether the attempt was cut short by the transport timeout or an abort. */\n public readonly timedOut: boolean;\n public constructor(message: string, timedOut: boolean, cause?: unknown) {\n super(message, cause === undefined ? undefined : { cause });\n this.name = \"TransportError\";\n this.timedOut = timedOut;\n }\n}\n\n/**\n * Sends one HTTP attempt and returns the raw {@link Response}.\n *\n * Everything above it — routing, rate limiting, retries, decoding — is somebody\n * else's job, which is what makes the layer substitutable in tests.\n */\nexport class HttpTransport {\n readonly #baseURL: string;\n readonly #timeout: number;\n readonly #fetch: FetchLike;\n\n public constructor(\n options: {\n baseURL?: string;\n /** Allow a cleartext `http://` base URL on a network you trust (a REST proxy). Default false. */\n allowInsecureBaseURL?: boolean;\n timeout?: number;\n fetch?: FetchLike;\n } = {},\n ) {\n this.#baseURL = parseBaseURL(\n options.baseURL ?? \"https://discord.com/api/v10\",\n options.allowInsecureBaseURL,\n );\n this.#timeout = Math.max(1, options.timeout ?? 15_000);\n this.#fetch =\n options.fetch ?? ((input, init) => globalThis.fetch(input, init));\n }\n\n /** Base URL every request path is resolved against. */\n public get baseURL(): string {\n return this.#baseURL;\n }\n /** Per-attempt timeout in milliseconds. */\n public get timeout(): number {\n return this.#timeout;\n }\n\n /**\n * Performs the attempt.\n * @throws {RESTError} If the caller's signal was already aborted.\n * @throws {TransportError} If the attempt times out or the transport fails.\n */\n public async send(request: TransportRequest): Promise<Response> {\n if (request.signal?.aborted)\n throw abortError(request.path, request.signal.reason);\n\n const controller = new AbortController();\n const onAbort = (): void => controller.abort(request.signal?.reason);\n request.signal?.addEventListener(\"abort\", onAbort, { once: true });\n const timer = setTimeout(\n () =>\n controller.abort(\n new DOMException(\"REST request timeout\", \"TimeoutError\"),\n ),\n this.#timeout,\n );\n try {\n return await this.#fetch(`${this.#baseURL}${request.path}`, {\n method: request.method,\n headers: request.headers,\n body: request.body,\n signal: controller.signal,\n // Discord's API does not redirect; one that does is not\n // something to send the token to.\n redirect: \"error\",\n });\n } catch (error) {\n if (error instanceof RESTError) throw error;\n const timedOut =\n error instanceof DOMException &&\n (error.name === \"TimeoutError\" || error.name === \"AbortError\");\n throw new TransportError(\n timedOut\n ? `Discord REST request timed out after ${this.#timeout}ms`\n : \"Discord REST request failed\",\n timedOut,\n sanitizeCause(error),\n );\n } finally {\n clearTimeout(timer);\n request.signal?.removeEventListener(\"abort\", onAbort);\n }\n }\n}\n",
30
30
  "/** Normalised shape of a Discord error payload. */\nexport interface DecodedError {\n message?: string;\n code?: number;\n retry_after?: number;\n global?: boolean;\n}\n\n/** Turns a raw {@link Response} into a payload and the error metadata retries need. */\nexport class ResponseDecoder {\n /** Reads a Discord response payload as JSON, text, or nothing for 204. */\n public async read(response: Response): Promise<unknown> {\n if (response.status === 204) return undefined;\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"application/json\"))\n return response.json().catch(() => undefined);\n return response.text().catch(() => undefined);\n }\n\n /** Extracts Discord's error metadata from a decoded payload. */\n public errorData(payload: unknown): DecodedError {\n if (!payload || typeof payload !== \"object\") return {};\n const data = payload as Record<string, unknown>;\n return {\n message:\n typeof data.message === \"string\" ? data.message : undefined,\n code: typeof data.code === \"number\" ? data.code : undefined,\n retry_after:\n typeof data.retry_after === \"number\"\n ? data.retry_after\n : undefined,\n global: data.global === true,\n };\n }\n\n /**\n * Resolves Retry-After (seconds) from the payload, falling back to the\n * header and finally to one second.\n *\n * An absent header is explicitly *not* a zero delay: `Number(null)` is 0,\n * which is finite, so reading it directly would answer a 429 that carries\n * no Retry-After by retrying immediately — exactly when backing off matters.\n */\n public retryAfter(response: Response, data: DecodedError): number {\n const raw = response.headers.get(\"Retry-After\");\n const header = raw === null ? Number.NaN : Number(raw);\n const retryAfter =\n data.retry_after ?? (Number.isFinite(header) ? header : 1);\n return Math.max(0, retryAfter);\n }\n}\n",
31
31
  "/** Discord REST API route definitions. */\nexport const Routes = {\n /** Returns the current bot user. @returns User route. */\n user: () => \"/users/@me\",\n /** Returns one user. @param userId User identifier. @returns User route. */\n userById: (userId: string) => `/users/${snowflake(userId, \"User ID\")}`,\n /** Returns a guild. @param guildId Guild identifier. @returns Guild route. */\n guild: (guildId: string) => `/guilds/${snowflake(guildId, \"Guild ID\")}`,\n /** Leaves a guild as the current user (DELETE). @param guildId Guild identifier. @returns Current-user guild route. */\n currentUserGuild: (guildId: string) =>\n `/users/@me/guilds/${snowflake(guildId, \"Guild ID\")}`,\n /** Returns a sticker. @param stickerId Sticker identifier. @returns Sticker route. */\n sticker: (stickerId: string) =>\n `/stickers/${snowflake(stickerId, \"Sticker ID\")}`,\n /** Removes one user's reaction (DELETE). @param channelId Channel identifier. @param messageId Message identifier. @param emoji Emoji name or ID. @param userId User identifier. @returns Reaction-user route. */\n messageReactionUser: (\n channelId: string,\n messageId: string,\n emoji: string,\n userId: string,\n ) =>\n `${Routes.messageReactions(channelId, messageId, emoji)}/${snowflake(userId, \"User ID\")}`,\n /** Returns a guild preview. @param guildId Guild identifier. */\n guildPreview: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/preview`,\n /** Returns active threads for a guild. @param guildId Guild identifier. */\n guildActiveThreads: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/threads/active`,\n /** Returns webhooks for a guild. @param guildId Guild identifier. */\n guildWebhooks: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/webhooks`,\n /** Returns invites for a guild. @param guildId Guild identifier. */\n guildInvites: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/invites`,\n /** Returns channels in a guild. @param guildId Guild identifier. @returns Channel collection route. */\n guildChannels: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/channels`,\n /** Returns a guild member. @param guildId Guild identifier. @param userId User identifier. @returns Guild-member route. */\n guildMember: (guildId: string, userId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/members/${snowflake(userId, \"User ID\")}`,\n /** Returns all guild roles. @param guildId Guild identifier. @returns Guild-role route. */\n guildRoles: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/roles`,\n /** Returns an individual guild role. */\n guildRole: (guildId: string, roleId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/roles/${snowflake(roleId, \"Role ID\")}`,\n /** Returns a member role route. */\n guildMemberRole: (guildId: string, userId: string, roleId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/members/${snowflake(userId, \"User ID\")}/roles/${snowflake(roleId, \"Role ID\")}`,\n /** Returns guild bans collection. */\n guildBans: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/bans`,\n /** Returns an individual guild ban. */\n guildBan: (guildId: string, userId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/bans/${snowflake(userId, \"User ID\")}`,\n /** Returns a channel. @param channelId Channel identifier. @returns Channel route. */\n channel: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}`,\n /** Returns messages in a channel. @param channelId Channel identifier. @returns Message collection route. */\n channelMessages: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/messages`,\n /** Returns a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Message route. */\n message: (channelId: string, messageId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/messages/${snowflake(messageId, \"Message ID\")}`,\n /** Crossposts a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Crosspost route. */\n crosspostMessage: (channelId: string, messageId: string) =>\n `${Routes.message(channelId, messageId)}/crosspost`,\n /** Returns reactions for a message and emoji. @param channelId Channel identifier. @param messageId Message identifier. @param emoji Emoji name or ID. @returns Reaction route. */\n messageReactions: (channelId: string, messageId: string, emoji: string) =>\n `${Routes.message(channelId, messageId)}/reactions/${encodeURIComponent(emoji)}`,\n /** The bot's own reaction: PUT adds it, DELETE removes it. @param channelId Channel identifier. @param messageId Message identifier. @param emoji Emoji name or ID. */\n messageReactionMe: (channelId: string, messageId: string, emoji: string) =>\n `${Routes.messageReactions(channelId, messageId, emoji)}/@me`,\n /** Removes all reactions from a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Reaction collection route. */\n messageReactionsAll: (channelId: string, messageId: string) =>\n `${Routes.message(channelId, messageId)}/reactions`,\n /** Returns pinned messages, newest first, in pages of up to 50 (`before`, `limit`). @param channelId Channel identifier. @returns Pins route. */\n channelMessagesPins: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/messages/pins`,\n /** Pins (PUT) or unpins (DELETE) a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Pin route. */\n channelMessagesPin: (channelId: string, messageId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/messages/pins/${snowflake(messageId, \"Message ID\")}`,\n /** Creates a thread from a message. @param channelId Channel identifier. @param messageId Message identifier. @returns Message-thread route. */\n messageThread: (channelId: string, messageId: string) =>\n `${Routes.message(channelId, messageId)}/threads`,\n /** Bulk deletes messages. @param channelId Channel identifier. @returns Bulk-delete route. */\n channelBulkDelete: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/messages/bulk-delete`,\n /** Returns channel webhooks. @param channelId Channel identifier. @returns Webhook collection route. */\n channelWebhooks: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/webhooks`,\n /** Returns channel invites. @param channelId Channel identifier. @returns Invite collection route. */\n channelInvites: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/invites`,\n /** Returns a webhook. @param webhookId Webhook identifier. @param token Optional webhook token. @returns Webhook route. */\n webhook: (webhookId: string, token?: string) =>\n `/webhooks/${snowflake(webhookId, \"Webhook ID\")}${token ? `/${encodeURIComponent(token)}` : \"\"}`,\n /** Returns a webhook message. */\n webhookMessage: (webhookId: string, token: string, messageId: string) =>\n `/webhooks/${snowflake(webhookId, \"Webhook ID\")}/${encodeURIComponent(token)}/messages/${snowflake(messageId, \"Message ID\")}`,\n /** Returns application commands for an application. @param applicationId Application identifier. @returns Global command route. */\n applicationCommands: (applicationId: string) =>\n `/applications/${snowflake(applicationId, \"Application ID\")}/commands`,\n /** Returns one application command. @param applicationId Application identifier. @param commandId Command identifier. @returns Command route. */\n applicationCommand: (applicationId: string, commandId: string) =>\n `/applications/${snowflake(applicationId, \"Application ID\")}/commands/${snowflake(commandId, \"Command ID\")}`,\n /** Returns guild application commands. @param applicationId Application identifier. @param guildId Guild identifier. @returns Guild command route. */\n guildApplicationCommands: (applicationId: string, guildId: string) =>\n `/applications/${snowflake(applicationId, \"Application ID\")}/guilds/${snowflake(guildId, \"Guild ID\")}/commands`,\n /** Returns a single guild application command. @param applicationId Application identifier. @param guildId Guild identifier. @param commandId Command identifier. @returns Guild command route. */\n guildApplicationCommand: (\n applicationId: string,\n guildId: string,\n commandId: string,\n ) =>\n `/applications/${snowflake(applicationId, \"Application ID\")}/guilds/${snowflake(guildId, \"Guild ID\")}/commands/${snowflake(commandId, \"Command ID\")}`,\n /** Returns an interaction callback endpoint. @param interactionId Interaction identifier. @param token Interaction token. @returns Interaction callback route. */\n interactionCallback: (interactionId: string, token: string) =>\n `/interactions/${snowflake(interactionId, \"Interaction ID\")}/${encodeURIComponent(token)}/callback`,\n /** Returns the original interaction response endpoint. @param applicationId Application identifier. @param token Interaction token. @returns Original-response route. */\n interactionOriginalResponse: (applicationId: string, token: string) =>\n `/webhooks/${snowflake(applicationId, \"Application ID\")}/${encodeURIComponent(token)}/messages/@original`,\n\n /** Returns public archived threads for a channel. @param channelId Channel identifier. @returns Public-archive route. */\n channelPublicArchivedThreads: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/threads/archived/public`,\n /** Returns private archived threads for a channel. @param channelId Channel identifier. @returns Private-archive route. */\n channelPrivateArchivedThreads: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/threads/archived/private`,\n /** Returns the private archived threads the current user joined. @param channelId Channel identifier. */\n channelJoinedPrivateArchivedThreads: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/users/@me/threads/archived/private`,\n /** Returns one member of a thread; `\"@me\"` is the current user (PUT joins, DELETE leaves). @param threadId Thread identifier. @param userId User identifier or `\"@me\"`. */\n threadMember: (threadId: string, userId: string) =>\n `/channels/${snowflake(threadId, \"Thread ID\")}/thread-members/${userOrMe(userId)}`,\n /** Starts a typing indicator (POST). @param channelId Channel identifier. */\n channelTyping: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/typing`,\n /** Creates a thread that is not tied to a message, or a forum or media post (POST). @param channelId Channel identifier. */\n channelThreads: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/threads`,\n /** Returns a thread's members. @param threadId Thread identifier. @returns Thread-member route. */\n threadMembers: (threadId: string) =>\n `/channels/${snowflake(threadId, \"Thread ID\")}/thread-members`,\n /** Returns guild scheduled events. @param guildId Guild identifier. @returns Scheduled-event collection route. */\n guildScheduledEvents: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/scheduled-events`,\n /** Returns one guild scheduled event. @param guildId Guild identifier. @param eventId Event identifier. @returns Scheduled-event route. */\n guildScheduledEvent: (guildId: string, eventId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/scheduled-events/${snowflake(eventId, \"Event ID\")}`,\n /** Returns users subscribed to a scheduled event. @param guildId Guild identifier. @param eventId Event identifier. @returns Scheduled-event users route. */\n guildScheduledEventUsers: (guildId: string, eventId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/scheduled-events/${snowflake(eventId, \"Event ID\")}/users`,\n /** Returns a channel permission overwrite. @param channelId Channel identifier. @param overwriteId Role or user identifier. @returns Permission overwrite route. */\n channelPermission: (channelId: string, overwriteId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/permissions/${snowflake(overwriteId, \"Overwrite ID\")}`,\n /** Returns guild automod rules. @param guildId Guild identifier. @returns Automod-rule collection route. */\n guildAutoModerationRules: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/auto-moderation/rules`,\n /** Returns one automod rule. @param guildId Guild identifier. @param ruleId Rule identifier. @returns Automod-rule route. */\n guildAutoModerationRule: (guildId: string, ruleId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/auto-moderation/rules/${snowflake(ruleId, \"Rule ID\")}`,\n /** Returns current voice regions. @returns Voice-region route. */\n voiceRegions: () => \"/voice/regions\",\n /** Returns the generic Gateway endpoint. @returns Gateway route. */\n gateway: () => \"/gateway\",\n /** Returns the Gateway endpoint and recommended shard count for bots. @returns Gateway bot route. */\n gatewayBot: () => \"/gateway/bot\",\n\n // ─── Audit Logs ──────────────────────────────────────────────────────────────\n /** Returns audit log entries for a guild. @param guildId Guild identifier. @returns Audit log route. */\n guildAuditLog: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/audit-logs`,\n\n // ─── Guild Members (bulk fetch) ───────────────────────────────────────────────\n /** Returns members in a guild (paginated). @param guildId Guild identifier. @returns Members collection route. */\n guildMembers: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/members`,\n\n /** Searches members by nickname or username. @param guildId Guild identifier. */\n guildMembersSearch: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/members/search`,\n /** Edits the bot's own member, e.g. its nickname (PATCH). @param guildId Guild identifier. */\n guildMemberMe: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/members/@me`,\n /** Bans up to 200 users at once (POST). @param guildId Guild identifier. */\n guildBulkBan: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/bulk-ban`,\n /** Edits a voice state in a stage channel (PATCH); `\"@me\"` is the bot. @param guildId Guild identifier. @param userId User identifier or `\"@me\"`. */\n guildVoiceState: (guildId: string, userId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/voice-states/${userOrMe(userId)}`,\n /** Removes an integration from a guild (DELETE). @param guildId Guild identifier. @param integrationId Integration identifier. */\n guildIntegration: (guildId: string, integrationId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/integrations/${snowflake(integrationId, \"Integration ID\")}`,\n /** Returns the guilds the bot is in (paged with `before`, `after`, `limit`). */\n userGuilds: () => \"/users/@me/guilds\",\n /** Returns the sticker packs Nitro users can use, or one pack. @param packId Optional pack identifier. */\n stickerPacks: (packId?: string) =>\n packId\n ? `/sticker-packs/${snowflake(packId, \"Sticker pack ID\")}`\n : \"/sticker-packs\",\n\n // ─── Welcome Screen & Onboarding ──────────────────────────────────────────────\n /** Returns the welcome screen for a guild. @param guildId Guild identifier. */\n guildWelcomeScreen: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/welcome-screen`,\n /** Returns the onboarding configuration for a guild. @param guildId Guild identifier. */\n guildOnboarding: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/onboarding`,\n\n // ─── Guild Prune ──────────────────────────────────────────────────────────────\n /** Returns or executes a prune operation for inactive members. @param guildId Guild identifier. @returns Prune route. */\n guildPrune: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/prune`,\n\n // ─── Stage Instances ──────────────────────────────────────────────────────────\n /** Returns the stage instances collection. @returns Stage instance root route. */\n stageInstances: () => \"/stage-instances\",\n /** Returns a stage instance by its channel. @param channelId Stage channel identifier. @returns Stage instance route. */\n stageInstanceByChannel: (channelId: string) =>\n `/stage-instances/${snowflake(channelId, \"Channel ID\")}`,\n\n // ─── Invites ──────────────────────────────────────────────────────────────────\n /** Returns an invite by code. @param code Invite code. @returns Invite route. */\n invite: (code: string) => `/invites/${encodeURIComponent(code)}`,\n /** Returns the guild vanity invite metadata. @param guildId Guild identifier. @returns Vanity URL route. */\n guildVanity: (guildId: string) =>\n `/guilds/${snowflake(guildId, \"Guild ID\")}/vanity-url`,\n\n // ─── Emojis ───────────────────────────────────────────────────────────────────\n /** Returns guild emojis, or a specific emoji. @param guildId Guild identifier. @param emojiId Optional emoji identifier. */\n guildEmoji: (guildId: string, emojiId?: string) =>\n emojiId\n ? `/guilds/${snowflake(guildId, \"Guild ID\")}/emojis/${snowflake(emojiId, \"Emoji ID\")}`\n : `/guilds/${snowflake(guildId, \"Guild ID\")}/emojis`,\n /** Returns application emojis, or a specific emoji. @param applicationId Application identifier. @param emojiId Optional emoji identifier. */\n applicationEmoji: (applicationId: string, emojiId?: string) =>\n emojiId\n ? `/applications/${snowflake(applicationId, \"Application ID\")}/emojis/${snowflake(emojiId, \"Emoji ID\")}`\n : `/applications/${snowflake(applicationId, \"Application ID\")}/emojis`,\n\n // ─── Polls ────────────────────────────────────────────────────────────────────\n /** Ends a poll early. @param channelId Channel identifier. @param messageId Poll message identifier. */\n pollExpire: (channelId: string, messageId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/polls/${snowflake(messageId, \"Message ID\")}/expire`,\n /** Returns the users who voted for a poll answer. @param answerId Answer identifier (an integer, not a snowflake). */\n pollAnswerVoters: (\n channelId: string,\n messageId: string,\n answerId: number,\n ) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/polls/${snowflake(messageId, \"Message ID\")}/answers/${integer(answerId, \"Answer ID\")}`,\n\n // ─── Stickers ─────────────────────────────────────────────────────────────────\n /** Returns guild stickers, or one sticker. */\n guildSticker: (guildId: string, stickerId?: string) =>\n stickerId\n ? `/guilds/${snowflake(guildId, \"Guild ID\")}/stickers/${snowflake(stickerId, \"Sticker ID\")}`\n : `/guilds/${snowflake(guildId, \"Guild ID\")}/stickers`,\n\n // ─── Soundboard ───────────────────────────────────────────────────────────────\n /** Plays a soundboard sound in a voice channel. */\n sendSoundboardSound: (channelId: string) =>\n `/channels/${snowflake(channelId, \"Channel ID\")}/send-soundboard-sound`,\n /** Returns Discord's default soundboard sounds. */\n soundboardDefaultSounds: () => \"/soundboard-default-sounds\",\n /** Returns guild soundboard sounds, or one sound. */\n guildSoundboardSound: (guildId: string, soundId?: string) =>\n soundId\n ? `/guilds/${snowflake(guildId, \"Guild ID\")}/soundboard-sounds/${snowflake(soundId, \"Sound ID\")}`\n : `/guilds/${snowflake(guildId, \"Guild ID\")}/soundboard-sounds`,\n\n // ─── Monetization ─────────────────────────────────────────────────────────────\n /** Returns an application's SKUs. */\n applicationSkus: (applicationId: string) =>\n `/applications/${snowflake(applicationId, \"Application ID\")}/skus`,\n /** Returns an application's entitlements, or one entitlement. */\n applicationEntitlement: (applicationId: string, entitlementId?: string) =>\n entitlementId\n ? `/applications/${snowflake(applicationId, \"Application ID\")}/entitlements/${snowflake(entitlementId, \"Entitlement ID\")}`\n : `/applications/${snowflake(applicationId, \"Application ID\")}/entitlements`,\n /** Marks a one-time-purchase entitlement as consumed. */\n consumeEntitlement: (applicationId: string, entitlementId: string) =>\n `/applications/${snowflake(applicationId, \"Application ID\")}/entitlements/${snowflake(entitlementId, \"Entitlement ID\")}/consume`,\n /** Returns a SKU's subscriptions, or one subscription. */\n skuSubscription: (skuId: string, subscriptionId?: string) =>\n subscriptionId\n ? `/skus/${snowflake(skuId, \"SKU ID\")}/subscriptions/${snowflake(subscriptionId, \"Subscription ID\")}`\n : `/skus/${snowflake(skuId, \"SKU ID\")}/subscriptions`,\n} as const;\n\n/** Validates a non-negative integer route parameter. */\n/** A user id, or `\"@me\"` for the current user. */\nfunction userOrMe(value: string): string {\n return value === \"@me\" ? value : snowflake(value, \"User ID\");\n}\n\nfunction integer(value: number, field: string): string {\n if (!Number.isInteger(value) || value < 0)\n throw new TypeError(`${field} must be a non-negative integer.`);\n return String(value);\n}\n\n/** Validates a Discord snowflake route parameter. Accepts any decimal id that fits an\n * unsigned 64-bit integer, matching the snowflake rule `BaseStructure` applies in\n * `@lunibee/structures`. The guarantee this provides is that no non-numeric segment can\n * reshape the request path; it deliberately does not police id length, because Discord\n * snowflakes are 17 digits for early 2015 ids and reach 20 digits as the epoch advances.\n * @param value Candidate identifier. @param field Human-readable field name. @returns The validated identifier. @throws {TypeError} If the identifier is not a Discord snowflake. */\nfunction snowflake(value: string, field: string): string {\n if (!/^\\d{1,20}$/.test(value))\n throw new TypeError(`${field} must be a valid Discord snowflake.`);\n return value;\n}\n",
32
32
  "/**\n * Discord JSON error codes that bots commonly handle, by name, for comparing\n * with `RESTError.code`: `if (error.code === RESTErrorCode.UnknownMessage) …`.\n *\n * Values are from Discord's \"JSON Error Codes\" table\n * (discord/discord-api-docs, developers/topics/opcodes-and-status-codes.mdx,\n * checked at commit 86f0a46). Any other code is still available as a number\n * on `RESTError.code`.\n */\nexport const RESTErrorCode = {\n UnknownAccount: 10001,\n UnknownChannel: 10003,\n UnknownGuild: 10004,\n UnknownInvite: 10006,\n UnknownMember: 10007,\n UnknownMessage: 10008,\n UnknownPermissionOverwrite: 10009,\n UnknownRole: 10011,\n UnknownUser: 10013,\n UnknownEmoji: 10014,\n UnknownWebhook: 10015,\n UnknownBan: 10026,\n UnknownSticker: 10060,\n UnknownInteraction: 10062,\n UnknownScheduledEvent: 10070,\n BotsCannotUseEndpoint: 20001,\n MaxGuilds: 30001,\n MaxPins: 30003,\n MaxRoles: 30005,\n MaxWebhooks: 30007,\n MaxEmojis: 30008,\n MaxReactions: 30010,\n MaxChannels: 30013,\n InteractionAlreadyAcknowledged: 40060,\n MissingAccess: 50001,\n CannotExecuteInDM: 50003,\n CannotEditOthersMessage: 50005,\n CannotSendEmptyMessage: 50006,\n CannotSendMessagesToUser: 50007,\n MissingPermissions: 50013,\n InvalidToken: 50014,\n MessageTooOldToBulkDelete: 50034,\n InvalidFormBody: 50035,\n ThreadArchived: 50083,\n CannotReplyWithoutReadHistory: 160002,\n} as const;\n/** One {@link RESTErrorCode} value, usable as a type. */\nexport type RESTErrorCode = (typeof RESTErrorCode)[keyof typeof RESTErrorCode];\n",
33
33
  "import {\n MemoryRateLimitStore,\n type RateLimitStore,\n type BucketState,\n type Reservation,\n} from \"./store.js\";\n\n/**\n * Atomically consumes one unit of a bucket's allowance.\n *\n * Runs inside Redis so the read, the decrement and the write cannot interleave\n * across workers — the whole point of the reservation. Grants when the bucket\n * is unknown or its window has elapsed, because an unknown bucket is only\n * discovered by sending; refusing would deadlock the route across the fleet.\n *\n * `KEYS[1]` bucket key · `ARGV[1]` current time in ms.\n * Returns `{granted, retryAfterMs}`.\n */\nconst RESERVE_SCRIPT = `\nlocal raw = redis.call('GET', KEYS[1])\nif not raw then return {1, 0} end\nlocal ok, state = pcall(cjson.decode, raw)\nif not ok or type(state) ~= 'table' or type(state.resetAt) ~= 'number' then\n return {1, 0}\nend\nlocal now = tonumber(ARGV[1])\nlocal wait = state.resetAt - now\nif wait <= 0 then return {1, 0} end\nif type(state.remaining) == 'number' and state.remaining > 0 then\n state.remaining = state.remaining - 1\n redis.call('SET', KEYS[1], cjson.encode(state), 'PX', math.ceil(wait))\n return {1, 0}\nend\nreturn {0, math.ceil(wait)}\n`;\n\n/**\n * A Redis client interface that matches the subset of ioredis\n * methods needed for the RedisRateLimitStore.\n */\nexport interface MinimalRedisClient {\n get(key: string): Promise<string | null>;\n mget(keys: string[]): Promise<Array<string | null>>;\n set(\n key: string,\n value: string | number,\n mode?: string,\n duration?: number,\n ): Promise<string | null>;\n del(...keys: string[]): Promise<number>;\n /**\n * Optional Lua evaluation (ioredis/node-redis compatible). When present,\n * {@link RedisRateLimitStore.reserve} becomes available and the limiter\n * reserves allowance atomically instead of racing on observed state.\n */\n eval?(\n script: string,\n numKeys: number,\n ...args: Array<string | number>\n ): Promise<unknown>;\n}\n\nexport interface RedisRateLimitStoreOptions {\n /** The Redis client instance (e.g. ioredis). */\n client: MinimalRedisClient;\n /** Prefix to prepend to all Redis keys. Defaults to 'lunibee:rest:' */\n prefix?: string;\n /** Called whenever a Redis operation fails before local fallback behavior is used. */\n onError?: (operation: string, error: unknown) => void;\n}\n\n/**\n * Redis-backed implementation of RateLimitStore for distributed rate limit synchronization.\n * Allows multiple shards or workers to share Discord API rate limits seamlessly.\n */\nexport class RedisRateLimitStore implements RateLimitStore {\n readonly #client: MinimalRedisClient;\n readonly #prefix: string;\n readonly #onErrorCallback?: RedisRateLimitStoreOptions[\"onError\"];\n /**\n * In-process mirror of every write. Reads fall back to it when Redis is\n * unreachable: answering \"no limit known\" would drop every worker to\n * unlimited sending at the same moment, which is how a fleet earns a\n * Cloudflare ban during a Redis blip.\n */\n readonly #local = new MemoryRateLimitStore();\n #lastError?: unknown;\n\n public constructor(options: RedisRateLimitStoreOptions) {\n this.#client = options.client;\n this.#prefix = options.prefix ?? \"lunibee:rest:\";\n this.#onErrorCallback = options.onError;\n // The limiter detects reservation support by presence, so the method\n // exists only when the client can actually run the script atomically.\n // It is assigned here rather than declared on the prototype: a\n // prototype method cannot be removed from one instance.\n if (typeof options.client.eval === \"function\")\n this.reserve = (key) => this.#reserve(key);\n }\n\n /** The most recent Redis error, if any. */\n public get lastError(): unknown {\n return this.#lastError;\n }\n\n /** Whether no Redis operation has failed since construction or the last successful health check. */\n public isHealthy(): boolean {\n return this.#lastError === undefined;\n }\n\n /** Logs and surfaces a Redis failure while retaining safe local fallback behavior. */\n #onError(operation: string, error: unknown): void {\n this.#lastError = error;\n console.warn(\n `[lunibee/rest] Redis rate-limit store ${operation} failed; ` +\n `falling back to local limiting for this call.`,\n error,\n );\n try {\n this.#onErrorCallback?.(operation, error);\n } catch {\n // User-provided diagnostics must never break REST operations.\n }\n }\n\n /** Marks the store healthy after a successful Redis operation. */\n #markHealthy(): void {\n this.#lastError = undefined;\n }\n\n public async getBucketHash(route: string): Promise<string | undefined> {\n try {\n const hash = await this.#client.get(\n `${this.#prefix}route:${route}`,\n );\n this.#markHealthy();\n return hash ?? undefined;\n } catch (error) {\n this.#onError(\"getBucketHash\", error);\n return this.#local.getBucketHash(route);\n }\n }\n\n public async setBucketHash(route: string, hash: string): Promise<void> {\n this.#local.setBucketHash(route, hash);\n try {\n await this.#client.set(\n `${this.#prefix}route:${route}`,\n hash,\n \"EX\",\n 604800,\n );\n this.#markHealthy();\n } catch (error) {\n this.#onError(\"setBucketHash\", error);\n }\n }\n\n public async getBucket(key: string): Promise<BucketState | undefined> {\n try {\n const data = await this.#client.get(`${this.#prefix}bucket:${key}`);\n this.#markHealthy();\n if (!data) return undefined;\n return JSON.parse(data) as BucketState;\n } catch (error) {\n this.#onError(\"getBucket\", error);\n return this.#local.getBucket(key);\n }\n }\n\n public async updateBucket(key: string, state: BucketState): Promise<void> {\n this.#local.updateBucket(key, state);\n const bucketKey = `${this.#prefix}bucket:${key}`;\n // Expired buckets hold no useful limit info; drop them instead of\n // persisting stale state under a clamped 1s TTL.\n const ttl = Math.ceil((state.resetAt - Date.now()) / 1000);\n try {\n if (ttl <= 0) {\n await this.#client.del(bucketKey);\n this.#markHealthy();\n return;\n }\n await this.#client.set(bucketKey, JSON.stringify(state), \"EX\", ttl);\n this.#markHealthy();\n } catch (error) {\n this.#onError(\"updateBucket\", error);\n }\n }\n\n /** Whether the backing client supports atomic reservations. */\n public get supportsReservation(): boolean {\n return typeof this.#client.eval === \"function\";\n }\n\n /**\n * Atomically consumes one unit of a bucket's allowance across the fleet.\n *\n * Assigned in the constructor only when the client exposes `eval`, so a\n * client that cannot reserve atomically does not advertise that it can.\n * A Redis failure falls back to the local mirror rather than blocking:\n * refusing every request during an outage would stall the bot.\n */\n public reserve?: (key: string) => Promise<Reservation>;\n\n async #reserve(key: string): Promise<Reservation> {\n try {\n const result = (await this.#client.eval!(\n RESERVE_SCRIPT,\n 1,\n `${this.#prefix}bucket:${key}`,\n Date.now(),\n )) as [number, number] | undefined;\n this.#markHealthy();\n if (!Array.isArray(result)) return { granted: true };\n const [granted, retryAfterMs] = result;\n return Number(granted) === 1\n ? { granted: true }\n : { granted: false, retryAfterMs: Number(retryAfterMs) || 0 };\n } catch (error) {\n this.#onError(\"reserve\", error);\n return this.#local.reserve(key);\n }\n }\n\n public async getGlobalReset(): Promise<number> {\n try {\n const resetAt = await this.#client.get(`${this.#prefix}global`);\n this.#markHealthy();\n return resetAt ? Number(resetAt) : 0;\n } catch (error) {\n this.#onError(\"getGlobalReset\", error);\n return this.#local.getGlobalReset();\n }\n }\n\n public async setGlobalReset(resetAt: number): Promise<void> {\n this.#local.setGlobalReset(resetAt);\n const globalKey = `${this.#prefix}global`;\n const ttl = Math.ceil((resetAt - Date.now()) / 1000);\n try {\n if (ttl <= 0) {\n await this.#client.del(globalKey);\n this.#markHealthy();\n return;\n }\n await this.#client.set(globalKey, String(resetAt), \"EX\", ttl);\n this.#markHealthy();\n } catch (error) {\n this.#onError(\"setGlobalReset\", error);\n }\n }\n}\n",
34
34
  "import { REST, type RESTFileAttachment } from \"./index.js\";\nimport { Routes } from \"./routes.js\";\nimport type { APIEmbed, APIMessage, APIMessageComponent } from \"@lunibee/types\";\n\nexport interface WebhookClientOptions {\n id?: string;\n token?: string;\n url?: string;\n}\n\nexport interface WebhookMessageOptions {\n content?: string;\n username?: string;\n avatar_url?: string;\n tts?: boolean;\n embeds?: (APIEmbed | { toJSON(): APIEmbed })[];\n components?: (APIMessageComponent | { toJSON(): APIMessageComponent })[];\n /** Uploaded as multipart form data. */\n files?: RESTFileAttachment[];\n flags?: number;\n thread_id?: string;\n}\n\n/** Standalone client for sending Discord webhooks. */\nexport class WebhookClient {\n /** Webhook ID. */\n public readonly id: string;\n /** Webhook security token. */\n public readonly token: string;\n readonly #rest: REST;\n\n public constructor(\n options: WebhookClientOptions,\n restOptions?: { timeout?: number; retries?: number },\n ) {\n if (options.url) {\n // Anchored: the URL must be Discord's own webhook URL, not merely contain one.\n const match = options.url.match(\n /^https:\\/\\/(?:(?:ptb|canary)\\.)?discord(?:app)?\\.com\\/api(?:\\/v\\d+)?\\/webhooks\\/(\\d{1,20})\\/([A-Za-z0-9_-]+)\\/?(?:[?#].*)?$/,\n );\n if (!match) throw new Error(\"Invalid Discord webhook URL format.\");\n this.id = match[1]!;\n this.token = match[2]!;\n } else if (options.id && options.token) {\n this.id = options.id;\n this.token = options.token;\n } else {\n throw new Error(\n \"WebhookClient requires either a webhook 'url' or both 'id' and 'token'.\",\n );\n }\n this.#rest = new REST(restOptions);\n }\n\n /** Sends a message to the webhook. */\n public async send(\n options: string | WebhookMessageOptions,\n ): Promise<APIMessage> {\n const payload =\n typeof options === \"string\" ? { content: options } : options;\n const { thread_id, files, ...body } = payload;\n const params = new URLSearchParams({ wait: \"true\" });\n if (thread_id) params.set(\"thread_id\", String(thread_id));\n const query = `?${params}`;\n const formattedEmbeds: APIEmbed[] | undefined = body.embeds?.map((e) =>\n \"toJSON\" in e ? e.toJSON() : e,\n );\n const formattedComponents: APIMessageComponent[] | undefined =\n body.components?.map((c) => (\"toJSON\" in c ? c.toJSON() : c));\n const path = `${Routes.webhook(this.id, this.token)}${query}`;\n const json = {\n ...body,\n embeds: formattedEmbeds,\n components: formattedComponents,\n };\n return files?.length\n ? this.#rest.postWithFiles<APIMessage>(path, json, files)\n : this.#rest.post<APIMessage>(path, json);\n }\n\n /** Edits a previously sent webhook message. */\n public async editMessage(\n messageId: string,\n options: string | { content?: string; embeds?: APIEmbed[] },\n ): Promise<APIMessage> {\n const payload =\n typeof options === \"string\" ? { content: options } : options;\n return this.#rest.patch<APIMessage>(\n Routes.webhookMessage(this.id, this.token, messageId),\n payload,\n );\n }\n\n /** Deletes a previously sent webhook message. */\n public async deleteMessage(messageId: string): Promise<void> {\n await this.#rest.delete(\n Routes.webhookMessage(this.id, this.token, messageId),\n );\n }\n}\n",
35
- "/** 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}, ${LIBRARY_VERSION})`;\n\nimport { MemoryRateLimitStore, type RateLimitStore } 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/**\n * Refuses a path that URL normalization would rewrite into another route:\n * `.` / `..` segments (also percent-encoded) and backslashes. Without this,\n * an id like `../../channels/1` sends the bot token to a route the caller\n * never asked for. The path is left out of the message: it may hold a token.\n */\nfunction assertSafePath(path: string): void {\n const end = path.search(/[?#]/);\n const pathname = end === -1 ? path : path.slice(0, end);\n if (pathname.includes(\"\\\\\"))\n throw new TypeError(\"REST paths must not contain backslashes.\");\n for (const segment of pathname.split(\"/\")) {\n let decoded: string;\n try {\n decoded = decodeURIComponent(segment);\n } catch {\n throw new TypeError(\"REST path has malformed percent-encoding.\");\n }\n if (decoded === \".\" || decoded === \"..\")\n throw new TypeError(\n \"REST paths must not contain '.' or '..' segments.\",\n );\n }\n}\n\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. */\n signal?: AbortSignal;\n /** Query-string appended to the path (`URLSearchParams`, a record, or a raw string). */\n query?: RESTQuery;\n /** Extra request headers merged in (library headers such as `Authorization` win). */\n headers?: Record<string, string>;\n /** Audit-log reason, sent as the `X-Audit-Log-Reason` header. */\n reason?: string;\n /** Set `false` to omit the `Authorization` header for this request. Defaults to `true`. */\n 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). */\n body?: unknown;\n /** File attachments; presence upgrades the request to `multipart/form-data`. */\n 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. */\n 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. */\n shouldRetry(method: string, status: number): 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. */\n getDelay(attempt: number, retryAfter?: number): 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 ?? true) &&\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 assertSafePath(path);\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 // Header names are case-insensitive: drop the caller's spelling first,\n // or `authorization` and `Authorization` are joined into one value.\n const set = (name: string, value: string): void => {\n for (const key of Object.keys(headers))\n if (key.toLowerCase() === name.toLowerCase())\n delete headers[key];\n headers[name] = value;\n };\n if (options.auth !== false && this.#token)\n set(\"Authorization\", `Bot ${this.#token}`);\n set(\"User-Agent\", USER_AGENT);\n if (options.reason !== undefined)\n set(\"X-Audit-Log-Reason\", encodeURIComponent(options.reason));\n if (!isFormData) set(\"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. */\n public get<T>(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. */\n public delete<T>(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 { RESTErrorCode } from \"./error-codes.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",
35
+ "/** 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}, ${LIBRARY_VERSION})`;\n\nimport { MemoryRateLimitStore, type RateLimitStore } 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/**\n * Refuses a path that URL normalization would rewrite into another route:\n * `.` / `..` segments (also percent-encoded) and backslashes. Without this,\n * an id like `../../channels/1` sends the bot token to a route the caller\n * never asked for. The path is left out of the message: it may hold a token.\n */\nfunction assertSafePath(path: string): void {\n const end = path.search(/[?#]/);\n const pathname = end === -1 ? path : path.slice(0, end);\n if (pathname.includes(\"\\\\\"))\n throw new TypeError(\"REST paths must not contain backslashes.\");\n for (const segment of pathname.split(\"/\")) {\n let decoded: string;\n try {\n decoded = decodeURIComponent(segment);\n } catch {\n throw new TypeError(\"REST path has malformed percent-encoding.\");\n }\n if (decoded === \".\" || decoded === \"..\")\n throw new TypeError(\n \"REST paths must not contain '.' or '..' segments.\",\n );\n }\n}\n\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. */\n signal?: AbortSignal;\n /** Query-string appended to the path (`URLSearchParams`, a record, or a raw string). */\n query?: RESTQuery;\n /** Extra request headers merged in (library headers such as `Authorization` win). */\n headers?: Record<string, string>;\n /** Audit-log reason, sent as the `X-Audit-Log-Reason` header. */\n reason?: string;\n /** Set `false` to omit the `Authorization` header for this request. Defaults to `true`. */\n 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). */\n body?: unknown;\n /** File attachments; presence upgrades the request to `multipart/form-data`. */\n 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. */\n 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. */\n shouldRetry(method: string, status: number): 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. */\n getDelay(attempt: number, retryAfter?: number): 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 /** Allow a cleartext `http://` base URL on a network you trust (a REST proxy). Default false. */\n allowInsecureBaseURL?: boolean;\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 allowInsecureBaseURL: options.allowInsecureBaseURL,\n timeout: options.timeout,\n });\n const store = options.store ?? new MemoryRateLimitStore();\n this.#concurrentBuckets =\n (options.concurrentBuckets ?? true) &&\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 assertSafePath(path);\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 // Header names are case-insensitive: drop the caller's spelling first,\n // or `authorization` and `Authorization` are joined into one value.\n const set = (name: string, value: string): void => {\n for (const key of Object.keys(headers))\n if (key.toLowerCase() === name.toLowerCase())\n delete headers[key];\n headers[name] = value;\n };\n if (options.auth !== false && this.#token)\n set(\"Authorization\", `Bot ${this.#token}`);\n set(\"User-Agent\", USER_AGENT);\n if (options.reason !== undefined)\n set(\"X-Audit-Log-Reason\", encodeURIComponent(options.reason));\n if (!isFormData) set(\"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. */\n public get<T>(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. */\n public delete<T>(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 { RESTErrorCode } from \"./error-codes.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",
36
36
  "import {\n channelKindOf,\n type ChannelKind,\n type MessageCreateOptions,\n type MessageEditOptions,\n type UnknownChannelKind,\n} from \"@lunibee/types\";\nimport type { ChannelOfKind } from \"./channels.js\";\n\n/** Common Discord snowflake-backed structure. */\nexport class BaseStructure {\n public readonly id: string;\n public constructor(id: string) {\n if (!/^\\d{1,20}$/.test(id))\n throw new TypeError(\n \"A Discord structure requires a valid snowflake ID.\",\n );\n this.id = id;\n }\n /** Returns the snowflake ID as a string. */\n public toString(): string {\n return this.id;\n }\n /** Milliseconds since the Unix epoch at which this snowflake was created. */\n public get createdTimestamp(): number {\n return Number((BigInt(this.id) >> 22n) + 1420070400000n);\n }\n /** Returns the timestamp this snowflake was created at. */\n public get createdAt(): Date {\n return new Date(this.createdTimestamp);\n }\n}\n\nexport interface ResourceContext {\n sendMessage(\n channelId: string,\n options: MessageCreateOptions,\n ): Promise<import(\"./index.js\").Message>;\n editMessage(\n channelId: string,\n messageId: string,\n options: MessageEditOptions,\n ): Promise<import(\"./index.js\").Message>;\n deleteMessage(\n channelId: string,\n messageId: string,\n reason?: string,\n ): Promise<void>;\n crosspostMessage(\n channelId: string,\n messageId: string,\n ): Promise<import(\"./index.js\").Message>;\n editChannel?(\n channelId: string,\n options: Record<string, unknown>,\n ): Promise<import(\"./base.js\").Channel>;\n deleteChannel?(channelId: string, reason?: string): Promise<void>;\n addReaction?(\n channelId: string,\n messageId: string,\n emoji: string,\n ): Promise<void>;\n removeOwnReaction?(\n channelId: string,\n messageId: string,\n emoji: string,\n ): Promise<void>;\n removeReaction?(\n channelId: string,\n messageId: string,\n emoji: string,\n userId: string,\n ): Promise<void>;\n removeAllReactions?(channelId: string, messageId: string): Promise<void>;\n pinMessage?(\n channelId: string,\n messageId: string,\n reason?: string,\n ): Promise<void>;\n unpinMessage?(\n channelId: string,\n messageId: string,\n reason?: string,\n ): Promise<void>;\n /**\n * A member's permissions from cached state: guild-level, or channel-level\n * (with overwrites) when a channel ID is given. Null when the guild (or\n * channel) is not cached.\n */\n memberPermissions?(\n guildId: string,\n memberId: string,\n roleIds: readonly string[],\n channelId?: string,\n timedOutUntil?: Date | null,\n ): import(\"@lunibee/core\").PermissionSet | null;\n kickMember?(\n guildId: string,\n userId: string,\n reason?: string,\n ): Promise<void>;\n banMember?(\n guildId: string,\n userId: string,\n options?: { reason?: string; deleteMessageSeconds?: number },\n ): Promise<void>;\n editMember?(\n guildId: string,\n userId: string,\n options: Record<string, unknown>,\n reason?: string,\n ): Promise<import(\"./resources.js\").GuildMember>;\n addMemberRole?(\n guildId: string,\n userId: string,\n roleId: string,\n reason?: string,\n ): Promise<void>;\n removeMemberRole?(\n guildId: string,\n userId: string,\n roleId: string,\n reason?: string,\n ): Promise<void>;\n /** Collects the client's interactions (a `Collector` over `interactionCreate`). Used by message and interaction collectors. */\n collectInteractions?(\n options: import(\"@lunibee/core\").CollectorOptions<\n import(\"./interactions.js\").Interaction\n >,\n ): import(\"@lunibee/core\").Collector<\n string,\n import(\"./interactions.js\").Interaction\n >;\n editPermissionOverwrite?(\n channelId: string,\n targetId: string,\n changes: PermissionOverwriteChanges,\n options?: { type?: 0 | 1; reason?: string },\n ): Promise<void>;\n}\n\n/**\n * Permissions to change on one overwrite: `true` allows, `false` denies,\n * `null` goes back to inheriting. Permissions not named keep their state.\n */\nexport type PermissionOverwriteChanges = Partial<\n Record<import(\"@lunibee/core\").PermissionName, boolean | null>\n>;\n\n// ─── CDN helpers ──────────────────────────────────────────────────────────────\n\nexport const CDN_BASE = \"https://cdn.discordapp.com\";\n\n/** Options for CDN image URLs. */\nexport interface ImageURLOptions {\n extension?: \"png\" | \"jpg\" | \"webp\" | \"gif\" | \"jpeg\";\n size?: 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096;\n forceStatic?: boolean;\n}\n\n/** Builds a Discord CDN asset URL from a directory path and asset hash, applying\n * animated-hash (`a_`) gif detection, extension and size options. Shared by all\n * hash-backed asset accessors (user/member/role/webhook) to avoid duplicating the logic.\n * @param path CDN directory path, e.g. `/role-icons/{id}`. @param hash Asset hash. @param options Image URL options. */\nexport function cdnURL(\n path: string,\n hash: string,\n options: ImageURLOptions = {},\n): string {\n const isAnimated = hash.startsWith(\"a_\") && !options.forceStatic;\n const ext = options.extension ?? (isAnimated ? \"gif\" : \"png\");\n const size = options.size ? `?size=${options.size}` : \"\";\n // Encoded, so a hash holding `/`, `?` or `#` cannot change the CDN path.\n return `${CDN_BASE}${path}/${encodeURIComponent(hash)}.${ext}${size}`;\n}\n\n// ─── User ─────────────────────────────────────────────────────────────────────\n\nexport class User extends BaseStructure {\n public username: string;\n public globalName: string | null;\n public avatar: string | null;\n public bot: boolean;\n public system: boolean;\n public flags: number;\n public discriminator: string | null;\n public constructor(data: import(\"@lunibee/types\").UserData) {\n super(data.id);\n if (!data.username)\n throw new TypeError(\"A Discord user requires a username.\");\n this.username = data.username;\n this.globalName = data.global_name ?? null;\n this.avatar = data.avatar ?? null;\n this.bot = data.bot ?? false;\n this.system = data.system ?? false;\n this.flags = data.public_flags ?? 0;\n this.discriminator =\n data.discriminator && data.discriminator !== \"0\"\n ? data.discriminator\n : null;\n }\n /** Effective display name — global name, falling back to username. */\n public get displayName(): string {\n return this.globalName ?? this.username;\n }\n /** Returns the user's avatar URL, or null if they have no avatar. */\n public avatarURL(options: ImageURLOptions = {}): string | null {\n if (!this.avatar) return null;\n return cdnURL(`/avatars/${this.id}`, this.avatar, options);\n }\n /** Returns the default avatar URL based on the user's discriminator/snowflake. */\n public defaultAvatarURL(): string {\n const index = this.discriminator\n ? Number(this.discriminator) % 5\n : Number((BigInt(this.id) >> 22n) % 6n);\n return `${CDN_BASE}/embed/avatars/${index}.png`;\n }\n /** Returns the avatar URL if available, falling back to the default avatar URL. */\n public displayAvatarURL(options: ImageURLOptions = {}): string {\n return this.avatarURL(options) ?? this.defaultAvatarURL();\n }\n /** Returns the Discord mention string. Used automatically in template literals. */\n public override toString(): string {\n return `<@${this.id}>`;\n }\n}\n\n// ─── Channel ──────────────────────────────────────────────────────────────────\n\nexport class Channel extends BaseStructure {\n public type: number;\n public name?: string | null;\n public guildId?: string;\n public topic?: string | null;\n public parentId?: string | null;\n public nsfw?: boolean;\n public rateLimitPerUser?: number;\n public position?: number;\n /** Role and member permission overwrites (empty for DMs and when not provided). */\n public permissionOverwrites: import(\"@lunibee/types\").APIOverwrite[];\n readonly #context?: ResourceContext;\n\n /** Creates a channel structure from Discord channel data. */\n public constructor(\n data: import(\"@lunibee/types\").APIChannel,\n context?: ResourceContext,\n ) {\n super(data.id);\n if (!Number.isInteger(data.type) || data.type < 0)\n throw new RangeError(\n \"A Discord channel requires a valid channel type.\",\n );\n this.type = data.type;\n this.name = data.name;\n this.guildId = data.guild_id;\n this.topic = data.topic;\n this.parentId = data.parent_id;\n this.nsfw = data.nsfw;\n this.rateLimitPerUser = data.rate_limit_per_user;\n this.position = data.position;\n this.permissionOverwrites = (data.permission_overwrites ?? []).map(\n (overwrite) => ({ ...overwrite }),\n );\n this.#context = context;\n }\n\n /** Sends a message to this channel. @param options Message payload. @returns The created message. @throws {Error} If the channel is not attached to a client. */\n public send(\n options: MessageCreateOptions,\n ): Promise<import(\"./index.js\").Message> {\n if (!this.#context)\n throw new Error(\"This channel is not attached to a client.\");\n return this.#context.sendMessage(this.id, options);\n }\n\n /** Edits this channel. @param options Channel fields to change. @returns The updated channel. @throws {Error} If the channel is not attached to a client. */\n public edit(options: Record<string, unknown>): Promise<Channel> {\n if (!this.#context?.editChannel)\n throw new Error(\"This channel is not attached to a client.\");\n return this.#context.editChannel(this.id, options);\n }\n\n /** Changes only this channel's name. @param name New channel name. @returns The updated channel. @throws {TypeError} If the name is empty. @throws {Error} If the channel is not attached to a client. */\n public editName(name: string): Promise<Channel> {\n if (!name.trim()) throw new TypeError(\"Channel name cannot be empty.\");\n return this.edit({ name });\n }\n\n /** 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. */\n public editTopic(topic: string | null): Promise<Channel> {\n return this.edit({ topic });\n }\n\n /** 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. */\n /**\n * Changes some permissions of one overwrite and keeps the rest: `true`\n * allows, `false` denies, `null` resets to inherited.\n * @param targetId Role or member ID. @param changes Permissions to change.\n * @param options `type` (0 role, 1 member) when the overwrite does not exist yet; audit-log `reason`.\n * @example channel.editPermissionOverwrite(userId, { ViewChannel: true, SendMessages: false }, { type: 1 })\n */\n public editPermissionOverwrite(\n targetId: string,\n changes: PermissionOverwriteChanges,\n options?: { type?: 0 | 1; reason?: string },\n ): Promise<void> {\n if (!this.#context?.editPermissionOverwrite)\n throw new Error(\"This channel is not attached to a client.\");\n return this.#context.editPermissionOverwrite(\n this.id,\n targetId,\n changes,\n options,\n );\n }\n\n public editParent(parentId: string | null): Promise<Channel> {\n return this.edit({ parent_id: parentId });\n }\n\n /** Deletes this channel. @param reason Audit-log reason. @returns A promise fulfilled when Discord confirms deletion. @throws {Error} If the channel is not attached to a client. */\n public delete(reason?: string): Promise<void> {\n if (!this.#context?.deleteChannel)\n throw new Error(\"This channel is not attached to a client.\");\n return this.#context.deleteChannel(this.id, reason);\n }\n\n /** Updates this channel using the same resource operation as edit. @param options Channel fields to change. @returns The updated channel. @throws {Error} If the channel is not attached to a client. */\n public update(options: Record<string, unknown>): Promise<Channel> {\n return this.edit(options);\n }\n\n /** What kind of channel this is: `\"text\"`, `\"voice\"`, `\"thread\"`, `\"forum\"`… (`\"unknown\"` for a type this version does not know). */\n public get kind(): ChannelKind | UnknownChannelKind {\n return channelKindOf(this.type);\n }\n\n /**\n * Whether this channel is one of `kinds`, narrowing its type to match.\n * @example if (channel.is(\"text\", \"announcement\")) await channel.send(\"hi\");\n */\n public is<K extends ChannelKind | UnknownChannelKind>(\n ...kinds: K[]\n ): this is ChannelOfKind<K> {\n return (kinds as string[]).includes(this.kind);\n }\n\n /**\n * Returns this channel typed as one of `kinds`.\n * @throws {TypeError} If it is a different kind.\n */\n public as<K extends ChannelKind | UnknownChannelKind>(\n ...kinds: K[]\n ): ChannelOfKind<K> {\n if (!this.is(...kinds))\n throw new TypeError(\n `Channel ${this.id} is a ${this.kind} channel, not ${kinds.join(\" or \")}.`,\n );\n return this;\n }\n\n /** Whether this is a thread (announcement, public or private). */\n public isThread(): boolean {\n return this.type === 10 || this.type === 11 || this.type === 12;\n }\n\n /** Whether messages can be sent in this channel (text, DM, announcement, voice, stage, threads). */\n public isTextBased(): boolean {\n return [0, 1, 2, 3, 5, 10, 11, 12, 13].includes(this.type);\n }\n\n /** Whether this is a voice or stage channel. */\n public isVoiceBased(): boolean {\n return this.type === 2 || this.type === 13;\n }\n\n /** Whether this is a direct-message channel (DM or group DM). */\n public isDMBased(): boolean {\n return this.type === 1 || this.type === 3;\n }\n\n /** Returns the Discord channel mention string. Used automatically in template literals. */\n public override toString(): string {\n return `<#${this.id}>`;\n }\n}\n\n// ─── Guild ────────────────────────────────────────────────────────────────────\n\nexport class Guild extends BaseStructure {\n public name: string;\n public icon: string | null;\n public splash: string | null;\n public banner: string | null;\n public description: string | null;\n public preferredLocale: string;\n public ownerId?: string;\n public features: string[];\n public verificationLevel: number;\n public premiumTier: number;\n public premiumSubscriptionCount: number;\n public memberCount?: number;\n public approximateMemberCount?: number;\n public approximatePresenceCount?: number;\n public vanityUrlCode: string | null;\n public nsfwLevel: number;\n public discoverySplash: string | null;\n /** ID of the rules channel for Community guilds. */\n public rulesChannelId: string | null;\n /** ID of the system messages channel. */\n public systemChannelId: string | null;\n /** Bitfield of system channel flags. */\n public systemChannelFlags: number;\n /** Maximum number of members the guild can have. */\n public maxMembers: number;\n /** Required MFA level for administrators. */\n public mfaLevel: number;\n /** Explicit content filter level. */\n public explicitContentFilter: number;\n /** Default notification level for new members. */\n public defaultMessageNotifications: number;\n /** AFK voice channel, or null. */\n public afkChannelId: string | null;\n /** Seconds before a silent member is moved to the AFK channel. */\n public afkTimeout?: number;\n /** Whether the server widget is on. */\n public widgetEnabled: boolean;\n /** Channel the widget invites to, or null. */\n public widgetChannelId: string | null;\n /** Application that created the guild, if a bot did. */\n public applicationId: string | null;\n /** Channel for Discord's community updates, or null. */\n public publicUpdatesChannelId: string | null;\n /** Channel for safety alerts, or null. */\n public safetyAlertsChannelId: string | null;\n /** Maximum presences (null for the default limit). */\n public maxPresences: number | null;\n /** Maximum users in a video channel. */\n public maxVideoChannelUsers?: number;\n /** Whether the boost progress bar shows. */\n public premiumProgressBarEnabled: boolean;\n\n public constructor(data: import(\"@lunibee/types\").APIGuild) {\n super(data.id);\n if (!data.name) throw new TypeError(\"A Discord guild requires a name.\");\n this.name = data.name;\n this.icon = data.icon ?? null;\n this.splash = data.splash ?? null;\n this.banner = data.banner ?? null;\n this.description = data.description ?? null;\n this.preferredLocale = data.preferred_locale ?? \"en-US\";\n this.ownerId = data.owner_id;\n this.features = data.features ?? [];\n this.verificationLevel = data.verification_level ?? 0;\n this.premiumTier = data.premium_tier ?? 0;\n this.premiumSubscriptionCount = data.premium_subscription_count ?? 0;\n this.memberCount = data.member_count ?? data.approximate_member_count;\n this.approximateMemberCount = data.approximate_member_count;\n this.approximatePresenceCount = data.approximate_presence_count;\n this.vanityUrlCode = data.vanity_url_code ?? null;\n this.nsfwLevel = data.nsfw_level ?? 0;\n this.discoverySplash = data.discovery_splash ?? null;\n this.rulesChannelId = data.rules_channel_id ?? null;\n this.systemChannelId = data.system_channel_id ?? null;\n this.systemChannelFlags = data.system_channel_flags ?? 0;\n this.maxMembers = data.max_members ?? 0;\n this.mfaLevel = data.mfa_level ?? 0;\n this.explicitContentFilter = data.explicit_content_filter ?? 0;\n this.defaultMessageNotifications =\n data.default_message_notifications ?? 0;\n this.afkChannelId = data.afk_channel_id ?? null;\n this.afkTimeout = data.afk_timeout;\n this.widgetEnabled = data.widget_enabled ?? false;\n this.widgetChannelId = data.widget_channel_id ?? null;\n this.applicationId = data.application_id ?? null;\n this.publicUpdatesChannelId = data.public_updates_channel_id ?? null;\n this.safetyAlertsChannelId = data.safety_alerts_channel_id ?? null;\n this.maxPresences = data.max_presences ?? null;\n this.maxVideoChannelUsers = data.max_video_channel_users;\n this.premiumProgressBarEnabled =\n data.premium_progress_bar_enabled ?? false;\n }\n\n /** Returns the guild icon URL, or null if no icon is set. */\n public iconURL(options: ImageURLOptions = {}): string | null {\n if (!this.icon) return null;\n return cdnURL(`/icons/${this.id}`, this.icon, options);\n }\n\n /** Returns the guild splash URL, or null if none. */\n public splashURL(options: ImageURLOptions = {}): string | null {\n if (!this.splash) return null;\n return cdnURL(`/splashes/${this.id}`, this.splash, options);\n }\n\n /** Returns the guild banner URL, or null if none. */\n public bannerURL(options: ImageURLOptions = {}): string | null {\n if (!this.banner) return null;\n return cdnURL(`/banners/${this.id}`, this.banner, options);\n }\n\n /** Returns the guild discovery splash URL, or null if none. */\n public discoverySplashURL(options: ImageURLOptions = {}): string | null {\n if (!this.discoverySplash) return null;\n return cdnURL(\n `/discovery-splashes/${this.id}`,\n this.discoverySplash,\n options,\n );\n }\n\n /** Returns a widget image URL for the guild.\n * @param style Widget style: shield (default), banner1, banner2, banner3, banner4.\n */\n public widgetImageURL(\n style:\n \"shield\" | \"banner1\" | \"banner2\" | \"banner3\" | \"banner4\" = \"shield\",\n ): string {\n return `https://discord.com/api/guilds/${this.id}/widget.png?style=${style}`;\n }\n\n /** Whether the guild has a given feature flag. @param feature Feature string, e.g. \"COMMUNITY\". */\n public hasFeature(feature: string): boolean {\n return this.features.includes(feature);\n }\n\n /** Whether the guild is a Community server. */\n public get isCommunity(): boolean {\n return this.hasFeature(\"COMMUNITY\");\n }\n\n /** Whether the guild is an official Discord Partner. */\n public get isPartnered(): boolean {\n return this.hasFeature(\"PARTNERED\");\n }\n\n /** Whether the guild is verified by Discord. */\n public get isVerified(): boolean {\n return this.hasFeature(\"VERIFIED\");\n }\n\n /** Whether the guild has any active boost subscriptions. */\n public get isBoosted(): boolean {\n return this.premiumSubscriptionCount > 0;\n }\n\n /** Alias for premiumTier — the guild's current Nitro boost level (0–3). */\n public get boostLevel(): number {\n return this.premiumTier;\n }\n\n /** Whether the guild has a vanity URL. */\n public get hasVanityUrl(): boolean {\n return this.vanityUrlCode !== null;\n }\n\n /** Returns the guild's vanity invite URL, or null if none. */\n public get vanityURL(): string | null {\n return this.vanityUrlCode\n ? `https://discord.gg/${this.vanityUrlCode}`\n : null;\n }\n\n /** Returns a human-readable string representation. */\n public override toString(): string {\n return this.name;\n }\n}\n",
37
37
  "import { BaseStructure, Channel, User, CDN_BASE, cdnURL } from \"./base.js\";\nimport { PermissionsBitField } from \"@lunibee/core\";\nimport type { ImageURLOptions, ResourceContext } from \"./base.js\";\n\n/** Parses a Discord ISO timestamp into a Date, returning null for absent or invalid values. */\nfunction toDateOrNull(value?: string | null): Date | null {\n if (!value) return null;\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\n// ─── GuildMember ───────────────────────────────────────────────────────────────\n\n/** A Discord guild member. */\nexport class GuildMember {\n /** User represented by the member. */\n public readonly user: User;\n /** Guild containing the member. */\n public readonly guildId: string;\n /** Nickname, if configured. */\n public nickname: string | null;\n /** Role IDs assigned to the member. */\n public readonly roleIds: string[];\n /** Whether the member is pending membership screening. */\n public pending: boolean;\n /** Member join timestamp. */\n public joinedAt?: Date;\n /** Member-specific avatar hash, if set. */\n public avatarHash: string | null;\n /** When the member started boosting the guild. */\n public premiumSince: Date | null;\n /** When the member's timeout expires (null if not timed out). */\n public timedOutUntil: Date | null;\n /** Member flags bitfield. */\n public flags: number;\n /** Permissions Discord sent with the member (interactions only). */\n readonly #suppliedPermissions?: PermissionsBitField;\n readonly #context?: ResourceContext;\n\n /** Creates a guild member from Discord data. @param data Discord guild-member payload. @throws {TypeError} If the guild ID is invalid. @throws {RangeError} If joined_at is invalid. */\n public constructor(\n data: {\n user: {\n id: string;\n username: string;\n global_name?: string | null;\n avatar?: string | null;\n bot?: boolean;\n system?: boolean;\n public_flags?: number;\n discriminator?: string;\n };\n guild_id: string;\n nick?: string | null;\n roles?: string[];\n pending?: boolean;\n joined_at?: string;\n permissions?: string;\n avatar?: string | null;\n premium_since?: string | null;\n communication_disabled_until?: string | null;\n flags?: number;\n },\n context?: ResourceContext,\n ) {\n this.user = new User(data.user);\n this.#context = context;\n if (!/^\\d{1,20}$/.test(data.guild_id))\n throw new TypeError(\"Member guild_id must be a valid snowflake.\");\n this.guildId = data.guild_id;\n this.nickname = data.nick ?? null;\n this.roleIds = [...(data.roles ?? [])];\n this.pending = data.pending ?? false;\n this.joinedAt = data.joined_at ? new Date(data.joined_at) : undefined;\n if (this.joinedAt?.toString() === \"Invalid Date\")\n throw new RangeError(\"Member joined_at must be a valid date.\");\n if (data.permissions !== undefined)\n this.#suppliedPermissions = new PermissionsBitField(\n data.permissions,\n );\n this.avatarHash = data.avatar ?? null;\n // Like joinedAt, coerce malformed timestamps to null instead of an Invalid Date.\n this.premiumSince = toDateOrNull(data.premium_since);\n this.timedOutUntil = toDateOrNull(data.communication_disabled_until);\n this.flags = data.flags ?? 0;\n }\n\n /**\n * The member's permissions. Discord sends them with interactions (already\n * resolved for the channel); anywhere else they are computed at guild\n * level from the cached roles each time they are read, so they follow role\n * changes. Empty when the guild's roles are not cached.\n */\n public get permissions(): PermissionsBitField {\n if (this.#suppliedPermissions) return this.#suppliedPermissions;\n return new PermissionsBitField(\n this.#context?.memberPermissions?.(\n this.guildId,\n this.user.id,\n this.roleIds,\n undefined,\n this.timedOutUntil,\n ) ?? 0n,\n );\n }\n\n /** The member's permissions in a channel, with its overwrites. Null when the channel or guild is not cached. @param channelId Channel ID. */\n public permissionsIn(channelId: string): PermissionsBitField | null {\n const computed = this.#context?.memberPermissions?.(\n this.guildId,\n this.user.id,\n this.roleIds,\n channelId,\n this.timedOutUntil,\n );\n return computed ? new PermissionsBitField(computed) : null;\n }\n\n #action<K extends keyof ResourceContext>(\n name: K,\n ): NonNullable<ResourceContext[K]> {\n const action = this.#context?.[name];\n if (!action)\n throw new Error(\"This member is not attached to a client.\");\n return action as NonNullable<ResourceContext[K]>;\n }\n\n /** Kicks this member. @param reason Audit-log reason. */\n public kick(reason?: string): Promise<void> {\n return this.#action(\"kickMember\")(this.guildId, this.user.id, reason);\n }\n\n /** Bans this member. @param options Audit-log reason and seconds of messages to delete. */\n public ban(\n options: { reason?: string; deleteMessageSeconds?: number } = {},\n ): Promise<void> {\n return this.#action(\"banMember\")(this.guildId, this.user.id, options);\n }\n\n /** Edits this member (nickname, roles, voice state, timeout). @param options Discord member fields. @param reason Audit-log reason. */\n public edit(\n options: Record<string, unknown>,\n reason?: string,\n ): Promise<GuildMember> {\n return this.#action(\"editMember\")(\n this.guildId,\n this.user.id,\n options,\n reason,\n );\n }\n\n /** Times this member out, or clears the timeout with null. @param milliseconds Timeout length (Discord allows up to 28 days). @param reason Audit-log reason. */\n public timeout(\n milliseconds: number | null,\n reason?: string,\n ): Promise<GuildMember> {\n if (milliseconds !== null && !(milliseconds > 0))\n throw new RangeError(\n \"Timeout length must be a positive number of milliseconds.\",\n );\n return this.edit(\n {\n communication_disabled_until:\n milliseconds === null\n ? null\n : new Date(Date.now() + milliseconds).toISOString(),\n },\n reason,\n );\n }\n\n /** Sets or clears (null) this member's nickname. @param nickname New nickname. @param reason Audit-log reason. */\n public setNickname(\n nickname: string | null,\n reason?: string,\n ): Promise<GuildMember> {\n return this.edit({ nick: nickname }, reason);\n }\n\n /** Gives this member a role. @param roleId Role ID. @param reason Audit-log reason. */\n public addRole(roleId: string, reason?: string): Promise<void> {\n return this.#action(\"addMemberRole\")(\n this.guildId,\n this.user.id,\n roleId,\n reason,\n );\n }\n\n /** Takes a role from this member. @param roleId Role ID. @param reason Audit-log reason. */\n public removeRole(roleId: string, reason?: string): Promise<void> {\n return this.#action(\"removeMemberRole\")(\n this.guildId,\n this.user.id,\n roleId,\n reason,\n );\n }\n\n /** Effective member display name — nickname, falling back to user display name. */\n public get displayName(): string {\n return this.nickname ?? this.user.displayName;\n }\n\n /** Whether this member is currently timed out. */\n public get isTimedOut(): boolean {\n return this.timedOutUntil !== null && this.timedOutUntil > new Date();\n }\n\n /** Returns the member-specific avatar URL, falling back to the user's avatar, or null if none. */\n public avatarURL(options: ImageURLOptions = {}): string | null {\n if (this.avatarHash)\n return cdnURL(\n `/guilds/${this.guildId}/users/${this.user.id}/avatars`,\n this.avatarHash,\n options,\n );\n // User always exposes avatarURL(); returns null when the user has no avatar.\n return this.user.avatarURL(options);\n }\n\n /** Returns the resolved avatar URL — member avatar, user avatar, or default. */\n public displayAvatarURL(options: ImageURLOptions = {}): string {\n return this.avatarURL(options) ?? this.user.displayAvatarURL(options);\n }\n\n /** Returns the Discord user mention for this member. */\n public toString(): string {\n return this.user.toString();\n }\n}\n\n// ─── Role ──────────────────────────────────────────────────────────────────────\n\n/** A Discord guild role. */\nexport class Role extends BaseStructure {\n /** Role name. */\n public name: string;\n /** Role color as a 24-bit RGB integer. */\n public color: number;\n /** Whether the role is hoisted. */\n public hoist: boolean;\n /** Permission bitfield. */\n public permissions: PermissionsBitField;\n /** Whether the role is managed by an integration. */\n public managed: boolean;\n /** Whether the role is mentionable. */\n public mentionable: boolean;\n /** Role position in the hierarchy. */\n public position: number;\n /** Unicode emoji used as the role icon, if any. */\n public unicodeEmoji: string | null;\n /** Hash of the role's custom icon image, if any. */\n public iconHash: string | null;\n /** Gradient or holographic colours, when the role has more than a solid colour. */\n public colors: {\n primary: number;\n secondary: number | null;\n tertiary: number | null;\n } | null;\n /** Role tags metadata (bot, premium subscriber, etc). */\n public tags: Record<string, unknown> | null;\n\n /** Creates a role from Discord data. @param data Discord role payload. */\n public constructor(data: {\n id: string;\n name: string;\n color?: number;\n hoist?: boolean;\n permissions?: string;\n managed?: boolean;\n mentionable?: boolean;\n position?: number;\n unicode_emoji?: string | null;\n icon?: string | null;\n colors?: {\n primary_color: number;\n secondary_color: number | null;\n tertiary_color: number | null;\n };\n tags?: Record<string, unknown> | null;\n }) {\n super(data.id);\n if (!data.name) throw new TypeError(\"Role name cannot be empty.\");\n this.name = data.name;\n this.color = data.color ?? 0;\n this.hoist = data.hoist ?? false;\n this.permissions = new PermissionsBitField(data.permissions ?? 0n);\n this.managed = data.managed ?? false;\n this.mentionable = data.mentionable ?? false;\n this.position = data.position ?? 0;\n this.unicodeEmoji = data.unicode_emoji ?? null;\n this.colors = data.colors\n ? {\n primary: data.colors.primary_color,\n secondary: data.colors.secondary_color,\n tertiary: data.colors.tertiary_color,\n }\n : null;\n this.iconHash = data.icon ?? null;\n this.tags = data.tags ?? null;\n }\n\n /** Returns the role's color as a `#RRGGBB` hex string. Returns `#000000` for colorless roles. */\n public get colorHex(): string {\n return `#${this.color.toString(16).padStart(6, \"0\").toUpperCase()}`;\n }\n\n /** Returns the role's custom icon URL, or null if the role has no icon. */\n public iconURL(options: ImageURLOptions = {}): string | null {\n if (!this.iconHash) return null;\n return cdnURL(`/role-icons/${this.id}`, this.iconHash, options);\n }\n\n /** Whether this is the `@everyone` base role (its ID equals the guild ID). */\n public isEveryone(guildId: string): boolean {\n return this.id === guildId;\n }\n\n /** Discord role mention string. Used automatically in template literals. */\n public override toString(): string {\n return `<@&${this.id}>`;\n }\n}\n\n// ─── TextChannel ──────────────────────────────────────────────────────────────\n\n/** A Discord text-capable channel. */\nexport class TextChannel extends Channel {\n /** Creates a text channel from Discord data. @param data Discord channel payload. */\n public constructor(\n data: {\n id: string;\n type: number;\n name?: string | null;\n parent_id?: string | null;\n guild_id?: string;\n } & Partial<import(\"@lunibee/types\").APIChannel>,\n context?: import(\"./base.js\").ResourceContext,\n ) {\n super(data, context);\n }\n /** Discord channel mention string. Used automatically in template literals. */\n public override toString(): string {\n return `<#${this.id}>`;\n }\n}\n\n// ─── Invite ───────────────────────────────────────────────────────────────────\n\n/** A Discord invite link and its metadata. */\nexport class Invite {\n /** Invite code (the unique part of the URL). */\n public readonly code: string;\n /** Guild this invite belongs to, if any. */\n public readonly guildId: string | null;\n /** Channel this invite points to, if any. */\n public readonly channelId: string | null;\n /** User who created the invite, if available. */\n public readonly inviter: User | null;\n /** Number of times the invite has been used. */\n public uses: number;\n /** Maximum number of uses (0 = unlimited). */\n public maxUses: number;\n /** Duration in seconds until the invite expires (0 = never). */\n public maxAge: number;\n /** Whether the invite is temporary (kicks uninducted members on disconnect). */\n public temporary: boolean;\n /** When the invite was created. */\n public readonly createdAt: Date | null;\n /** When the invite expires, or null if it never expires. */\n public readonly expiresAt: Date | null;\n\n /** Creates an invite from Discord data. */\n public constructor(data: {\n code: string;\n guild?: { id: string } | null;\n channel?: { id: string } | null;\n inviter?: {\n id: string;\n username: string;\n global_name?: string | null;\n avatar?: string | null;\n bot?: boolean;\n system?: boolean;\n public_flags?: number;\n discriminator?: string;\n } | null;\n uses?: number;\n max_uses?: number;\n max_age?: number;\n temporary?: boolean;\n created_at?: string | null;\n expires_at?: string | null;\n }) {\n if (!data.code) throw new TypeError(\"An invite requires a code.\");\n this.code = data.code;\n this.guildId = data.guild?.id ?? null;\n this.channelId = data.channel?.id ?? null;\n this.inviter = data.inviter ? new User(data.inviter) : null;\n this.uses = data.uses ?? 0;\n this.maxUses = data.max_uses ?? 0;\n this.maxAge = data.max_age ?? 0;\n this.temporary = data.temporary ?? false;\n this.createdAt = data.created_at ? new Date(data.created_at) : null;\n this.expiresAt = data.expires_at ? new Date(data.expires_at) : null;\n }\n\n /** The full invite URL. */\n public get url(): string {\n return `https://discord.gg/${this.code}`;\n }\n\n /** Returns the invite URL. Used automatically in template literals. */\n public toString(): string {\n return this.url;\n }\n}\n\n// ─── Webhook ──────────────────────────────────────────────────────────────────\n\n/** Webhook type constants. */\nexport const WebhookEnum = {\n Incoming: 1,\n ChannelFollower: 2,\n Application: 3,\n} as const;\n/** One {@link WebhookEnum} value, usable as a type. */\nexport type WebhookEnum = (typeof WebhookEnum)[keyof typeof WebhookEnum];\n\n/** A Discord webhook — an HTTP endpoint that can post messages to a channel. */\nexport class Webhook extends BaseStructure {\n /** Webhook type. */\n public readonly type: number;\n /** Webhook display name. */\n public name: string | null;\n /** Webhook avatar hash. */\n public avatarHash: string | null;\n /** Channel this webhook posts to. */\n public readonly channelId: string | null;\n /** Guild this webhook belongs to. */\n public readonly guildId: string | null;\n /** Application that created this webhook, if any. */\n public readonly applicationId: string | null;\n /** Webhook token (only present for incoming webhooks). */\n public readonly token: string | null;\n\n /** Creates a webhook from Discord data. */\n public constructor(data: {\n id: string;\n type?: number;\n name?: string | null;\n avatar?: string | null;\n channel_id?: string | null;\n guild_id?: string | null;\n application_id?: string | null;\n token?: string;\n }) {\n super(data.id);\n this.type = data.type ?? WebhookEnum.Incoming;\n this.name = data.name ?? null;\n this.avatarHash = data.avatar ?? null;\n this.channelId = data.channel_id ?? null;\n this.guildId = data.guild_id ?? null;\n this.applicationId = data.application_id ?? null;\n this.token = data.token ?? null;\n }\n\n /** Returns the webhook avatar URL, or null if no avatar is set. */\n public avatarURL(options: ImageURLOptions = {}): string | null {\n if (!this.avatarHash) return null;\n return cdnURL(`/avatars/${this.id}`, this.avatarHash, options);\n }\n\n /** Returns the webhook execution URL, or null if no token is set. */\n public get url(): string | null {\n return this.token\n ? `https://discord.com/api/webhooks/${this.id}/${this.token}`\n : null;\n }\n\n /** Returns the webhook URL or its ID as a string. */\n public override toString(): string {\n return this.url ?? this.id;\n }\n}\n\n// ─── Emoji ────────────────────────────────────────────────────────────────────\n\n/** A Discord emoji. */\nexport class Emoji extends BaseStructure {\n /** Emoji name. */\n public name: string | null;\n /** Roles allowed to use this emoji. */\n public roleIds: string[];\n /** User that created this emoji. */\n public user: User | null;\n /** Whether this emoji must be wrapped in colons. */\n public requireColons: boolean;\n /** Whether this emoji is managed. */\n public managed: boolean;\n /** Whether this emoji is animated. */\n public animated: boolean;\n /** Whether this emoji can be used, may be false due to loss of Server Boosts. */\n public available: boolean;\n\n /** Creates an emoji from Discord data. */\n public constructor(data: {\n id: string | null;\n name: string | null;\n roles?: string[];\n user?: import(\"@lunibee/types\").UserData;\n require_colons?: boolean;\n managed?: boolean;\n animated?: boolean;\n available?: boolean;\n }) {\n // Unicode emoji have no snowflake: pass the base check with a\n // placeholder, then expose the documented \"unicode\" sentinel id.\n super(data.id ?? \"0\");\n if (data.id === null) (this as { id: string }).id = \"unicode\";\n this.name = data.name;\n this.roleIds = data.roles ?? [];\n this.user = data.user ? new User(data.user) : null;\n this.requireColons = data.require_colons ?? false;\n this.managed = data.managed ?? false;\n this.animated = data.animated ?? false;\n this.available = data.available ?? true;\n }\n\n /** Returns the URL for this emoji if it is custom, or null for unicode emojis. */\n public url(options: ImageURLOptions = {}): string | null {\n if (!this.id || this.id === \"unicode\") return null;\n const ext = options.extension ?? (this.animated ? \"gif\" : \"png\");\n const size = options.size ? `?size=${options.size}` : \"\";\n return `${CDN_BASE}/emojis/${this.id}.${ext}${size}`;\n }\n\n /** Returns the text required to render this emoji in Discord. */\n public override toString(): string {\n return this.id !== \"unicode\"\n ? `<${this.animated ? \"a\" : \"\"}:${this.name}:${this.id}>`\n : (this.name ?? \"\");\n }\n}\n\n// --- AutoModerationRule --------------------------------------------------------\n\n/** A Discord AutoModeration Rule. */\nexport class AutoModerationRule extends BaseStructure {\n public guildId: string;\n public name: string;\n public creatorId: string;\n public eventType: number;\n public triggerType: number;\n public triggerMetadata: Record<string, unknown>;\n public actions: import(\"@lunibee/types\").APIAutoModerationAction[];\n public enabled: boolean;\n public exemptRoles: string[];\n public exemptChannels: string[];\n\n /** Creates an auto moderation rule from Discord data. */\n public constructor(data: import(\"@lunibee/types\").APIAutoModerationRule) {\n super(data.id);\n if (!/^\\d{1,20}$/.test(data.guild_id))\n throw new TypeError(\n \"AutoModerationRule guild_id must be a valid snowflake.\",\n );\n this.guildId = data.guild_id;\n this.name = data.name;\n this.creatorId = data.creator_id;\n this.eventType = data.event_type;\n this.triggerType = data.trigger_type;\n this.triggerMetadata = data.trigger_metadata;\n this.actions = data.actions;\n this.enabled = data.enabled;\n this.exemptRoles = data.exempt_roles;\n this.exemptChannels = data.exempt_channels;\n }\n\n public toJSON(): Record<string, unknown> {\n return {\n id: this.id,\n guildId: this.guildId,\n name: this.name,\n creatorId: this.creatorId,\n eventType: this.eventType,\n triggerType: this.triggerType,\n triggerMetadata: this.triggerMetadata,\n actions: this.actions,\n enabled: this.enabled,\n exemptRoles: this.exemptRoles,\n exemptChannels: this.exemptChannels,\n };\n }\n}\n\n// --- Welcome Screen -----------------------------------------------------------\n\n/** A channel listed in a guild's Welcome Screen. */\nexport class WelcomeScreenChannel {\n public channelId: string;\n public description: string;\n public emojiId: string | null;\n public emojiName: string | null;\n\n public constructor(data: import(\"@lunibee/types\").APIWelcomeScreenChannel) {\n this.channelId = data.channel_id;\n this.description = data.description;\n this.emojiId = data.emoji_id;\n this.emojiName = data.emoji_name;\n }\n}\n\n/** A Discord Guild Welcome Screen. */\nexport class GuildWelcomeScreen {\n public description: string | null;\n public channels: WelcomeScreenChannel[];\n\n public constructor(data: import(\"@lunibee/types\").APIGuildWelcomeScreen) {\n this.description = data.description;\n this.channels = data.welcome_channels.map(\n (c) => new WelcomeScreenChannel(c),\n );\n }\n}\n\n// --- Guild Onboarding ---------------------------------------------------------\n\n/** An option within a Guild Onboarding Prompt. */\nexport class OnboardingPromptOption extends BaseStructure {\n public channelIds: string[];\n public roleIds: string[];\n public emoji: import(\"@lunibee/types\").APIPartialEmoji | undefined;\n public title: string;\n public description: string | null;\n\n public constructor(\n data: import(\"@lunibee/types\").APIOnboardingPromptOption,\n ) {\n super(data.id);\n this.channelIds = data.channel_ids;\n this.roleIds = data.role_ids;\n this.emoji = data.emoji;\n this.title = data.title;\n this.description = data.description;\n }\n}\n\n/** A prompt shown during Guild Onboarding. */\nexport class OnboardingPrompt extends BaseStructure {\n public type: number;\n public options: OnboardingPromptOption[];\n public title: string;\n public singleSelect: boolean;\n public required: boolean;\n public inOnboarding: boolean;\n\n public constructor(data: import(\"@lunibee/types\").APIOnboardingPrompt) {\n super(data.id);\n this.type = data.type;\n this.options = data.options.map((o) => new OnboardingPromptOption(o));\n this.title = data.title;\n this.singleSelect = data.single_select;\n this.required = data.required;\n this.inOnboarding = data.in_onboarding;\n }\n}\n\n/** A Discord Guild Onboarding setup. */\nexport class GuildOnboarding extends BaseStructure {\n public prompts: OnboardingPrompt[];\n public defaultChannelIds: string[];\n public enabled: boolean;\n public mode: number;\n\n public constructor(data: import(\"@lunibee/types\").APIGuildOnboarding) {\n super(data.guild_id);\n this.prompts = data.prompts.map((p) => new OnboardingPrompt(p));\n this.defaultChannelIds = data.default_channel_ids;\n this.enabled = data.enabled;\n this.mode = data.mode;\n }\n}\n",
38
38
  "import { Channel, User, type ResourceContext } from \"./base.js\";\nimport { TextChannel } from \"./resources.js\";\nimport type {\n APIChannel,\n APIForumTag,\n APIPartialEmoji,\n APIThreadMetadata,\n} from \"@lunibee/types\";\n\n// Every channel class extends Channel, so `instanceof Channel` checks and\n// Channel methods keep working.\n\n/** A guild announcement (news) channel. */\nexport class NewsChannel extends TextChannel {}\n\n/** A direct-message or group DM channel. */\nexport class DMChannel extends Channel {\n /** Users in the conversation. */\n public readonly recipients: User[];\n /** Owner of a group DM. */\n public readonly ownerId: string | null;\n\n public constructor(data: APIChannel, context?: ResourceContext) {\n super(data, context);\n this.recipients = (data.recipients ?? []).map((u) => new User(u));\n this.ownerId = data.owner_id ?? null;\n }\n}\n\n/** A guild voice channel. */\nexport class VoiceChannel extends Channel {\n /** Bitrate in bits per second. */\n public bitrate: number;\n /** User limit (0 = unlimited). */\n public userLimit: number;\n /** Voice region override, or null for automatic. */\n public rtcRegion: string | null;\n /** Camera video quality mode. */\n public videoQualityMode: number;\n\n public constructor(data: APIChannel, context?: ResourceContext) {\n super(data, context);\n this.bitrate = data.bitrate ?? 64000;\n this.userLimit = data.user_limit ?? 0;\n this.rtcRegion = data.rtc_region ?? null;\n this.videoQualityMode = data.video_quality_mode ?? 1;\n }\n}\n\n/** A guild stage channel. */\nexport class StageChannel extends VoiceChannel {}\n\n/** A guild category. */\nexport class CategoryChannel extends Channel {}\n\n/** A thread (announcement, public or private). */\nexport class ThreadChannel extends Channel {\n /** User who created the thread. */\n public readonly ownerId: string | null;\n /** Approximate message count. */\n public messageCount: number;\n /** Approximate member count (stops counting at 50). */\n public memberCount: number;\n /** Thread metadata. */\n public metadata: APIThreadMetadata | null;\n\n public constructor(data: APIChannel, context?: ResourceContext) {\n super(data, context);\n this.ownerId = data.owner_id ?? null;\n this.messageCount = data.message_count ?? 0;\n this.memberCount = data.member_count ?? 0;\n this.metadata = data.thread_metadata ?? null;\n }\n\n /** Whether the thread is archived. */\n public get archived(): boolean {\n return this.metadata?.archived ?? false;\n }\n\n /** Whether the thread is locked. */\n public get locked(): boolean {\n return this.metadata?.locked ?? false;\n }\n\n /** Minutes of inactivity before the thread auto-archives. */\n public get autoArchiveDuration(): number | null {\n return this.metadata?.auto_archive_duration ?? null;\n }\n}\n\n/** A guild forum channel. */\nexport class ForumChannel extends Channel {\n /** Tags that threads can apply. */\n public availableTags: APIForumTag[];\n /** Default reaction for new threads. */\n public defaultReactionEmoji: APIPartialEmoji | null;\n /** Default slowmode for new threads. */\n public defaultThreadRateLimitPerUser: number;\n /** Default auto-archive duration for new threads. */\n public defaultAutoArchiveDuration: number | null;\n\n public constructor(data: APIChannel, context?: ResourceContext) {\n super(data, context);\n this.availableTags = data.available_tags ?? [];\n this.defaultReactionEmoji = data.default_reaction_emoji ?? null;\n this.defaultThreadRateLimitPerUser =\n data.default_thread_rate_limit_per_user ?? 0;\n this.defaultAutoArchiveDuration =\n data.default_auto_archive_duration ?? null;\n }\n}\n\n/** A guild media channel. */\nexport class MediaChannel extends ForumChannel {}\n\n/**\n * Builds the most specific channel class for a payload's `type`, falling back\n * to {@link Channel} for types without a dedicated class.\n */\nexport function createChannel(\n data: APIChannel,\n context?: ResourceContext,\n): Channel {\n switch (data.type) {\n case 0:\n return new TextChannel(data, context);\n case 1:\n case 3:\n return new DMChannel(data, context);\n case 2:\n return new VoiceChannel(data, context);\n case 4:\n return new CategoryChannel(data, context);\n case 5:\n return new NewsChannel(data, context);\n case 10:\n case 11:\n case 12:\n return new ThreadChannel(data, context);\n case 13:\n return new StageChannel(data, context);\n case 15:\n return new ForumChannel(data, context);\n case 16:\n return new MediaChannel(data, context);\n default:\n return new Channel(data, context);\n }\n}\n\n/** The class of each channel kind, so `channel.is(\"voice\")` can narrow to `VoiceChannel`. */\nexport interface ChannelsByKind {\n text: TextChannel;\n announcement: NewsChannel;\n voice: VoiceChannel;\n stage: StageChannel;\n category: CategoryChannel;\n thread: ThreadChannel;\n forum: ForumChannel;\n media: MediaChannel;\n dm: DMChannel;\n \"group-dm\": DMChannel;\n directory: Channel;\n unknown: Channel;\n}\n\n/** The channel class for a kind (or a union of them). */\nexport type ChannelOfKind<K extends keyof ChannelsByKind> = ChannelsByKind[K];\n",
@@ -62,21 +62,29 @@
62
62
  "/** Discord Gateway opcodes. */\nexport const GatewayOpcodes = {\n Dispatch: 0,\n Heartbeat: 1,\n Identify: 2,\n PresenceUpdate: 3,\n VoiceStateUpdate: 4,\n Resume: 6,\n Reconnect: 7,\n RequestGuildMembers: 8,\n InvalidSession: 9,\n Hello: 10,\n HeartbeatAck: 11,\n} as const;\n",
63
63
  "/**\n * Discord Gateway protocol: what a payload *means*.\n *\n * Pure translation from a received frame to an action, plus construction of\n * the payloads Lunibee sends. It performs nothing: no socket, no timers, no\n * session mutation, no event emission, no sending. The caller decides what to\n * do with an action, which is what lets the whole protocol be tested without a\n * connection.\n */\nimport type { GatewayPayload, GatewayPresence } from \"@lunibee/types\";\nimport { GatewayOpcodes } from \"./opcodes.js\";\nimport type { ResumeInfo } from \"./session.js\";\n\n/** Why a frame could not be understood. */\nexport type ProtocolViolation =\n /** The frame was not valid JSON. */\n | \"invalid-json\"\n /** The frame decoded to something other than a payload object. */\n | \"invalid-payload\"\n /** `HELLO` carried no usable heartbeat interval. */\n | \"invalid-hello\";\n\n/** What a received frame means. */\nexport type GatewayAction =\n /** `op 10`: begin heartbeating and hand shake. */\n | { type: \"hello\"; heartbeatInterval: number }\n /** `op 0`: an event. `event` is null only if Discord omitted `t`. */\n | { type: \"dispatch\"; event: string | null; data: unknown }\n /** `op 1`: Discord asks for a heartbeat now. */\n | { type: \"heartbeat\" }\n /** `op 11`: the last heartbeat was acknowledged. */\n | { type: \"heartbeat-ack\"; data: unknown }\n /** `op 7`: Discord asks the client to reconnect. */\n | { type: \"reconnect\" }\n /** `op 9`: the session is gone. `resumable` decides RESUME vs IDENTIFY. */\n | { type: \"invalid-session\"; resumable: boolean }\n /**\n * An opcode this version does not handle.\n *\n * Ignored rather than treated as an error: Discord adds opcodes, and a\n * client that fails on an unfamiliar one breaks itself on every addition.\n */\n | { type: \"unknown\"; opcode: number }\n /** The frame was malformed. Never silently swallowed. */\n | {\n type: \"invalid\";\n violation: ProtocolViolation;\n message: string;\n cause?: unknown;\n };\n\n/** A classified frame: its sequence, if any, and what it means. */\nexport interface ProtocolResult {\n /**\n * Sequence carried by the frame, or null when it carried none.\n *\n * Reported for every payload type, not just dispatches: recording it is\n * the caller's decision, and the caller records before acting so a RESUME\n * cannot be built from a sequence that was never seen.\n */\n sequence: number | null;\n /** What the frame means. */\n action: GatewayAction;\n}\n\n/**\n * Classifies one received frame.\n *\n * @param raw The frame text, already decompressed by the transport.\n */\nexport function classifyFrame(raw: string): ProtocolResult {\n let payload: GatewayPayload;\n try {\n payload = JSON.parse(raw) as GatewayPayload;\n } catch (error) {\n return {\n sequence: null,\n action: {\n type: \"invalid\",\n violation: \"invalid-json\",\n message: \"Gateway returned invalid JSON\",\n cause: error,\n },\n };\n }\n return classifyPayload(payload);\n}\n\n/** Classifies an already-parsed payload. */\nexport function classifyPayload(payload: unknown): ProtocolResult {\n if (\n payload === null ||\n typeof payload !== \"object\" ||\n typeof (payload as GatewayPayload).op !== \"number\"\n )\n return {\n sequence: null,\n action: {\n type: \"invalid\",\n violation: \"invalid-payload\",\n message: \"Gateway returned an invalid payload\",\n },\n };\n\n const frame = payload as GatewayPayload;\n const sequence = typeof frame.s === \"number\" ? frame.s : null;\n\n switch (frame.op) {\n case GatewayOpcodes.Dispatch:\n return {\n sequence,\n action: {\n type: \"dispatch\",\n event: typeof frame.t === \"string\" ? frame.t : null,\n data: frame.d,\n },\n };\n case GatewayOpcodes.Hello: {\n const interval = (frame.d as { heartbeat_interval?: unknown })\n ?.heartbeat_interval;\n if (\n typeof interval !== \"number\" ||\n !Number.isFinite(interval) ||\n interval <= 0\n )\n return {\n sequence,\n action: {\n type: \"invalid\",\n violation: \"invalid-hello\",\n message:\n \"Gateway HELLO payload contains an invalid heartbeat interval\",\n },\n };\n return {\n sequence,\n action: { type: \"hello\", heartbeatInterval: interval },\n };\n }\n case GatewayOpcodes.Heartbeat:\n return { sequence, action: { type: \"heartbeat\" } };\n case GatewayOpcodes.HeartbeatAck:\n return {\n sequence,\n action: { type: \"heartbeat-ack\", data: frame.d },\n };\n case GatewayOpcodes.Reconnect:\n return { sequence, action: { type: \"reconnect\" } };\n case GatewayOpcodes.InvalidSession:\n // `d` is a boolean: true means the session may still be resumed.\n // Anything else is treated as non-resumable, which is the safe\n // reading — a wrongly-attempted RESUME costs another round trip.\n return {\n sequence,\n action: {\n type: \"invalid-session\",\n resumable: frame.d === true,\n },\n };\n default:\n return { sequence, action: { type: \"unknown\", opcode: frame.op } };\n }\n}\n\n/** Identification properties sent with IDENTIFY. */\nexport interface IdentifyProperties {\n os?: string;\n browser?: string;\n device?: string;\n [key: string]: string | undefined;\n}\n\n/** Everything IDENTIFY needs. */\nexport interface IdentifyOptions {\n token: string;\n intents: number;\n shardId: number;\n shardCount: number;\n properties?: IdentifyProperties;\n presence?: GatewayPresence;\n}\n\n/** The `d` field of an IDENTIFY payload. */\nexport interface IdentifyData {\n token: string;\n intents: number;\n properties: IdentifyProperties;\n presence: Required<GatewayPresence>;\n shard: [shardId: number, shardCount: number];\n}\n\n/** Builds an IDENTIFY payload. */\nexport function identifyPayload(\n options: IdentifyOptions,\n): GatewayPayload<IdentifyData> {\n const props = options.properties ?? {};\n const os = props.os ?? process.platform;\n const browser = props.browser ?? \"Lunibee\";\n const device = props.device ?? \"Lunibee\";\n return {\n op: GatewayOpcodes.Identify,\n d: {\n token: options.token,\n intents: options.intents,\n properties: {\n os,\n browser,\n device,\n // Discord accepted `$`-prefixed property names historically and\n // still does; both spellings are sent so the payload works\n // against either expectation.\n $os: os,\n $browser: browser,\n $device: device,\n ...props,\n },\n presence: {\n since: options.presence?.since ?? null,\n activities: options.presence?.activities ?? [],\n status: options.presence?.status ?? \"online\",\n afk: Boolean(options.presence?.afk),\n },\n shard: [options.shardId, options.shardCount],\n },\n s: null,\n t: null,\n };\n}\n\n/** Builds a RESUME payload from the session's resume material. */\nexport function resumePayload(\n token: string,\n resume: ResumeInfo,\n): GatewayPayload {\n return {\n op: GatewayOpcodes.Resume,\n d: {\n token,\n session_id: resume.sessionId,\n seq: resume.sequence,\n },\n s: null,\n t: null,\n };\n}\n\n/** Builds a heartbeat payload carrying the last sequence seen. */\nexport function heartbeatPayload(sequence: number | null): GatewayPayload {\n return { op: GatewayOpcodes.Heartbeat, d: sequence, s: null, t: null };\n}\n",
64
64
  "/** Gateway event listener. */\nexport type GatewayListener = (data: unknown) => unknown;\n\n/**\n * Listener registry and emission for one Gateway.\n *\n * A listener that throws, or returns a promise that rejects, is isolated from\n * the others and reported through `onFailure`, except for `error` listeners:\n * a failing error listener must not report itself again.\n */\nexport class GatewayDispatcher {\n readonly #listeners = new Map<string, Set<GatewayListener>>();\n readonly #onFailure: (error: unknown) => void;\n\n public constructor(onFailure: (error: unknown) => void) {\n this.#onFailure = onFailure;\n }\n\n /** Adds a listener. */\n public on(event: string, listener: GatewayListener): void {\n let listeners = this.#listeners.get(event);\n if (!listeners) this.#listeners.set(event, (listeners = new Set()));\n listeners.add(listener);\n }\n\n /** Removes a listener. */\n public off(event: string, listener: GatewayListener): void {\n this.#listeners.get(event)?.delete(listener);\n }\n\n /** Calls the listeners of `event` with `data`. */\n public emit(event: string, data: unknown): void {\n for (const listener of this.#listeners.get(event) ?? []) {\n try {\n const result = listener(data);\n if (\n result &&\n typeof (result as PromiseLike<unknown>).then === \"function\"\n )\n void Promise.resolve(result).catch((error) => {\n if (event !== \"error\") this.#onFailure(error);\n });\n } catch (error) {\n if (event !== \"error\") this.#onFailure(error);\n }\n }\n }\n}\n",
65
- "/**\n * Sliding-window budget for outgoing Gateway payloads. Heartbeats, IDENTIFY and\n * RESUME are privileged: they always go out (and are still counted), so\n * application traffic can never starve them.\n *\n * Discord allows 120 sends per 60 seconds. Application traffic is capped at\n * 115 so the remaining headroom is reserved for privileged sends (heartbeats),\n * which are still recorded so the true total stays under Discord's limit.\n */\nexport class GatewaySendLimiter {\n readonly #timestamps: number[] = [];\n readonly #limit: number;\n readonly #windowMs: number;\n\n public constructor(limit = 115, windowMs = 60_000) {\n this.#limit = limit;\n this.#windowMs = windowMs;\n }\n\n /** Sends recorded within the current window. */\n public get used(): number {\n return this.#timestamps.length;\n }\n\n /** Whether a send may go out now. Privileged sends always may. */\n public allows(privileged: boolean, now = Date.now()): boolean {\n while (\n this.#timestamps.length &&\n now - this.#timestamps[0]! >= this.#windowMs\n )\n this.#timestamps.shift();\n return privileged || this.#timestamps.length < this.#limit;\n }\n\n /** Records a send that went out. */\n public record(now = Date.now()): void {\n this.#timestamps.push(now);\n }\n}\n\n/** The limiter's name before 0.3.0. */\nexport const SendBudget = GatewaySendLimiter;\n",
65
+ "/**\n * Sliding-window budget for outgoing Gateway payloads. Heartbeats, IDENTIFY and\n * RESUME are privileged: they always go out (and are still counted), so\n * application traffic can never starve them.\n *\n * Discord allows 120 sends per 60 seconds. Application traffic is capped at\n * 115 so the remaining headroom is reserved for privileged sends (heartbeats),\n * which are still recorded so the true total stays under Discord's limit.\n */\nexport class GatewaySendLimiter {\n readonly #timestamps: number[] = [];\n readonly #limit: number;\n readonly #windowMs: number;\n\n public constructor(limit = 115, windowMs = 60_000) {\n this.#limit = limit;\n this.#windowMs = windowMs;\n }\n\n /** Sends recorded within the current window. */\n public get used(): number {\n return this.#timestamps.length;\n }\n\n /** Whether a send may go out now. Privileged sends always may. */\n public allows(privileged: boolean, now = Date.now()): boolean {\n while (\n this.#timestamps.length &&\n now - this.#timestamps[0]! >= this.#windowMs\n )\n this.#timestamps.shift();\n return privileged || this.#timestamps.length < this.#limit;\n }\n\n /** Records a send that went out. */\n public record(now = Date.now()): void {\n this.#timestamps.push(now);\n }\n}\n\n/** The limiter's name before 0.3.1. */\nexport const SendBudget = GatewaySendLimiter;\n",
66
66
  "/** Gateway connection lifecycle states. */\nexport enum GatewayState {\n /** Initial connection state. */\n Connect = \"CONNECT\",\n /** Gateway HELLO received state. */\n Hello = \"HELLO\",\n /** IDENTIFY operation in progress. */\n Identify = \"IDENTIFY\",\n /** RESUME operation in progress. */\n Resume = \"RESUME\",\n /** Gateway READY state. */\n Ready = \"READY\",\n /** Gateway dispatch processing state. */\n Dispatch = \"DISPATCH\",\n /** Heartbeat processing state. */\n Heartbeat = \"HEARTBEAT\",\n /** Reconnect in progress. */\n Reconnect = \"RECONNECT\",\n /** Gateway is permanently closed. */\n Closed = \"CLOSED\",\n}\n/**\n * Discord.js-familiar alias for {@link GatewayState}.\n *\n * Discord.js exposes connection status via a `Status` enum. Lunibee's canonical\n * name is {@link GatewayState}; this is an additive alias so `discord.js` users\n * find the expected name. Note the *values* remain Lunibee's string states\n * (e.g. `\"READY\"`), not Discord.js's numeric `Status` members — an intentional\n * divergence documented in the compatibility matrix.\n */\nexport { GatewayState as Status };\n/** Gateway protocol error. */\nexport class GatewayError extends Error {\n /** Gateway close/error code. */\n public readonly code?: number;\n /** Creates a Gateway error. @param message Error message. @param code Optional Gateway code. @param options Optional error metadata. */\n public constructor(message: string, code?: number, options?: ErrorOptions) {\n super(message, options);\n this.name = \"GatewayError\";\n this.code = code;\n }\n}\n",
67
- "import { GatewaySession } from \"./session.js\";\nimport { GatewayHeartbeat, type HeartbeatTimeout } from \"./heartbeat.js\";\nimport { GatewayCloseCodes } from \"./close-codes.js\";\nimport { GatewayReconnect, type CloseAction } from \"./reconnect.js\";\nimport { WebSocketTransport, type SocketFactory } from \"./transport.js\";\nimport { GatewayOpcodes } from \"./opcodes.js\";\nimport {\n classifyFrame,\n identifyPayload,\n resumePayload,\n heartbeatPayload,\n type GatewayAction,\n} from \"./protocol.js\";\nimport {\n resolveGatewayIntents,\n type GatewayPayload,\n type GatewayProperties,\n type GatewayPresence,\n type GatewayIntentResolvable,\n} from \"@lunibee/types\";\n\nexport {\n classifyFrame,\n classifyPayload,\n identifyPayload,\n resumePayload,\n heartbeatPayload,\n type GatewayAction,\n type ProtocolResult,\n type ProtocolViolation,\n type IdentifyOptions,\n type IdentifyProperties,\n type IdentifyData,\n} from \"./protocol.js\";\n\nexport {\n WebSocketTransport,\n type TransportHandlers,\n type TransportOptions,\n type SocketFactory,\n} from \"./transport.js\";\n\nexport {\n createDecoder,\n PlainTextDecoder,\n ZlibStreamDecoder,\n type GatewayDecoder,\n} from \"./decoder.js\";\n\nexport {\n GatewayReconnect,\n classifyCloseCode,\n FATAL_CLOSE_CODES,\n IDENTIFY_CLOSE_CODES,\n type CloseAction,\n type ReconnectOptions,\n type ScheduleResult,\n type ScheduleRefusal,\n} from \"./reconnect.js\";\n\nexport {\n GatewayHeartbeat,\n type HeartbeatOptions,\n type HeartbeatTimeout,\n} from \"./heartbeat.js\";\n\nexport {\n GatewaySession,\n type ResumeInfo,\n type HandshakeIntent,\n type InvalidationReason,\n} from \"./session.js\";\n\nexport { GatewayDispatcher, type GatewayListener } from \"./dispatcher.js\";\nexport { GatewaySendLimiter, SendBudget } from \"./send-budget.js\";\nexport { GatewayOpcodes } from \"./opcodes.js\";\n\nexport { GatewayCloseCodes } from \"./close-codes.js\";\n\nexport { GatewayState, Status, GatewayError } from \"./state.js\";\nimport { GatewayState, GatewayError } from \"./state.js\";\nimport { GatewayDispatcher, type GatewayListener } from \"./dispatcher.js\";\nimport { GatewaySendLimiter } from \"./send-budget.js\";\n/** Gateway connection configuration. */\nexport interface GatewayOptions {\n /** Authentication token. */\n token: string;\n /** Gateway intent bitfield or resolvable. */\n intents: GatewayIntentResolvable;\n /** Shard identifier. */\n shardId?: number;\n /** Total shard count. */\n shardCount?: number;\n /** Whether automatic reconnect is enabled. */\n reconnect?: boolean;\n /** Maximum reconnect attempts. */\n maxReconnectAttempts?: number;\n /** Initial reconnect delay. */\n reconnectBaseDelay?: number;\n /** Maximum reconnect delay. */\n reconnectMaxDelay?: number;\n /** Heartbeat acknowledgement timeout. */\n heartbeatAckTimeout?: number;\n /** Zombie connection timeout. */\n zombieTimeout?: number;\n /** Reconnects inside `reconnectStormWindow` after which the link counts as unstable: `unstable` is emitted and the delay keeps doubling. Default 5. */\n reconnectStormLimit?: number;\n /** The span over which reconnects are counted for storm detection, in ms. Default 60,000. */\n reconnectStormWindow?: number;\n /** Identification properties. */\n properties?: GatewayProperties;\n /** Presence data. */\n presence?: GatewayPresence;\n /**\n * Whether to enable zlib-stream transport compression.\n * Decoded with a persistent `node:zlib` inflate stream, matching\n * Discord's zlib-wrapped stream framing (`Z_SYNC_FLUSH` boundaries).\n * When enabled, appends `&compress=zlib-stream` to the Gateway URL.\n */\n compress?: boolean;\n /**\n * Constructs the underlying socket. Defaults to the ambient `WebSocket`.\n * Injected to run the Gateway on an alternative transport, or on a stub.\n */\n createSocket?: SocketFactory;\n}\n/** Discord's main Gateway endpoint, used when no resume host is known. */\n/**\n * Close code for connections Lunibee means to RESUME. Discord invalidates the\n * session when a client closes with 1000 or 1001, so a reconnect that should\n * keep its session must close with anything else.\n */\nconst RESUMABLE_CLOSE_CODE = 4900;\nconst DEFAULT_GATEWAY_URL = \"wss://gateway.discord.gg/?v=10&encoding=json\";\n\n/** What {@link Gateway.health} reports. */\nexport interface GatewayHealth {\n /** Connection lifecycle state. */\n state: GatewayState;\n /** Round trip of the last acknowledged heartbeat in ms, or -1 before the first. */\n latency: number;\n /** Milliseconds since the last message from Discord, or 0 before any. */\n silentFor: number;\n /** Reconnects scheduled since this Gateway was created. */\n reconnects: number;\n}\n/** Manages a Discord Gateway connection. */\nexport class Gateway {\n /** Current Gateway lifecycle state. */\n public state: GatewayState = GatewayState.Connect;\n #options: Required<\n Omit<\n GatewayOptions,\n | \"properties\"\n | \"presence\"\n | \"compress\"\n | \"createSocket\"\n | \"intents\"\n | \"reconnectStormLimit\"\n | \"reconnectStormWindow\"\n >\n > & {\n /** Resolved intent bitfield, never the resolvable form. */\n intents: number;\n properties?: GatewayProperties;\n presence?: GatewayPresence;\n compress?: boolean;\n };\n /**\n * The socket this connection runs on.\n *\n * The Gateway never touches a `WebSocket` directly: construction, listener\n * wiring, replacement and decoding all belong to the transport.\n */\n readonly #transport: WebSocketTransport;\n /**\n * Session identity and the IDENTIFY-vs-RESUME decision.\n *\n * The Gateway holds no session fields of its own: every read and write goes\n * through the session, which rejects mutations from a superseded socket.\n */\n readonly #session = new GatewaySession();\n /** Token of the socket this Gateway currently owns. */\n #token = 0;\n /**\n * Heartbeat, acknowledgement deadline and staleness watch.\n *\n * The Gateway holds no heartbeat timers of its own; it supplies the socket\n * and decides what to close when liveness fails.\n */\n readonly #heartbeat: GatewayHeartbeat;\n #closed = false;\n /**\n * Close classification, backoff, scheduling, and the coordination that\n * keeps at most one logical connection attempt in flight.\n */\n readonly #reconnect: GatewayReconnect;\n /** Listener registry and emission. */\n readonly #events = new GatewayDispatcher((error) => this.#emitError(error));\n /** Application send budget under Discord's 120-per-60s limit. */\n readonly #sendBudget = new GatewaySendLimiter();\n /** How many reconnects were scheduled over this Gateway's life. */\n #reconnects = 0;\n public ping: number = -1;\n /** Creates a Gateway connection manager. @param options Gateway configuration. @throws {TypeError|RangeError} If configuration is invalid. */\n public constructor(options: GatewayOptions) {\n if (!options.token?.trim())\n throw new TypeError(\"A Gateway token is required.\");\n const resolvedIntents = resolveGatewayIntents(options.intents);\n if (!Number.isInteger(resolvedIntents) || resolvedIntents < 0)\n throw new TypeError(\n \"Gateway intents must be a non-negative integer.\",\n );\n this.#options = {\n shardId: 0,\n shardCount: 1,\n reconnect: true,\n maxReconnectAttempts: Infinity,\n reconnectBaseDelay: 1000,\n reconnectMaxDelay: 30000,\n heartbeatAckTimeout: 10000,\n zombieTimeout: 30000,\n // Lunibee identifies as itself, not as an official Discord client.\n properties: {\n os: process.platform,\n browser: \"Lunibee\",\n device: \"Lunibee\",\n },\n presence: {\n status: \"online\",\n activities: [],\n afk: false,\n since: null,\n },\n ...options,\n // Store the *resolved* bitfield, not the resolvable the caller\n // passed. IDENTIFY must carry a number: sending the array or\n // string form verbatim makes Discord answer 4013 (invalid\n // intents), which is a fatal close — so the documented array form\n // would never connect.\n intents: resolvedIntents,\n };\n if (\n this.#options.shardId < 0 ||\n this.#options.shardId >= this.#options.shardCount\n )\n throw new RangeError(\n \"Gateway shardId must be within the configured shard count.\",\n );\n if (this.#options.zombieTimeout <= this.#options.heartbeatAckTimeout)\n throw new RangeError(\n \"Gateway zombieTimeout must be greater than heartbeatAckTimeout\",\n );\n this.#transport = new WebSocketTransport({\n compress: this.#options.compress,\n createSocket: options.createSocket,\n handlers: {\n onOpen: () => this.#onOpen(),\n onFrame: (raw) => this.#message(raw, this.#token),\n onClose: (code) => this.#close(code, this.#token),\n // Transport failures reach consumers as GatewayError, the\n // type every other Gateway error path already uses.\n onError: (error) =>\n this.#emitError(\n error instanceof GatewayError\n ? error\n : new GatewayError(error.message, undefined, {\n cause: error,\n }),\n ),\n },\n });\n this.#reconnect = new GatewayReconnect({\n enabled: this.#options.reconnect,\n maxAttempts: this.#options.maxReconnectAttempts,\n baseDelay: this.#options.reconnectBaseDelay,\n maxDelay: this.#options.reconnectMaxDelay,\n stormLimit: options.reconnectStormLimit,\n stormWindow: options.reconnectStormWindow,\n });\n this.#heartbeat = new GatewayHeartbeat({\n ackTimeout: this.#options.heartbeatAckTimeout,\n zombieTimeout: this.#options.zombieTimeout,\n // Heartbeats are privileged: application traffic must never starve\n // the one payload that keeps the connection alive.\n send: (sequence) =>\n this.#dispatch(heartbeatPayload(sequence), true),\n sequence: () => this.#session.sequence,\n isConnected: () => !this.#closed && this.#transport.connected,\n onTimeout: (timeout) => this.#onHeartbeatTimeout(timeout),\n onError: (error) => this.#emitError(error),\n });\n }\n\n /**\n * Closes a connection that failed a liveness check.\n *\n * The heartbeat decides *that* the connection is dead; the Gateway decides\n * what to do about it, because only the Gateway owns the socket.\n */\n #onHeartbeatTimeout(timeout: HeartbeatTimeout): void {\n if (timeout.type === \"zombie\") {\n this.#emit(\"zombie\", {\n silentFor: timeout.silentFor,\n timeout: timeout.deadline,\n });\n this.#emitError(\n new GatewayError(\n `Gateway connection appears stale after ${timeout.silentFor}ms without traffic.`,\n ),\n );\n } else {\n this.#emitError(\n new GatewayError(\n `Gateway heartbeat acknowledgement timed out after ${timeout.elapsedMs}ms.`,\n ),\n );\n }\n this.#transport.close(\n RESUMABLE_CLOSE_CODE,\n timeout.type === \"zombie\"\n ? \"Zombie Gateway connection\"\n : \"Heartbeat timeout\",\n );\n }\n\n /** Opens the Gateway connection. @param url Gateway WebSocket URL. @returns Promise fulfilled when the socket opens. @throws {GatewayError} If permanently closed or unable to connect. */\n public connect(url = DEFAULT_GATEWAY_URL): Promise<void> {\n if (this.state === GatewayState.Closed)\n throw new GatewayError(\"Gateway has been permanently closed.\");\n // At most one logical connection attempt is active: concurrent callers\n // join the in-flight attempt rather than opening competing sockets.\n const inFlight = this.#reconnect.attemptPromise;\n if (inFlight) return inFlight;\n // Connecting an already-live Gateway must be a no-op. Opening a second\n // socket leaves the first one unmanaged but still dispatching, which\n // interleaves two sequence streams (corrupting a later RESUME) and\n // sends a second IDENTIFY on the same session.\n if (this.#transport.live) return Promise.resolve();\n // A manual connect supersedes a scheduled reconnect; leaving the timer\n // armed would open a second socket once it fires.\n this.#reconnect.cancel();\n this.#closed = false;\n this.#setState(GatewayState.Connect);\n // Append compression parameter if enabled\n const connectURL = this.#options.compress\n ? url.includes(\"compress=\")\n ? url\n : `${url}&compress=zlib-stream`\n : url;\n return this.#reconnect.attempt(() => this.#open(connectURL));\n }\n /** Permanently closes the Gateway connection. */\n public close(): void {\n this.#closed = true;\n this.#clearTimers();\n this.#settleConnect(\n new GatewayError(\"Gateway connection closed before socket open.\"),\n );\n // Abandon rather than close-and-listen: the Gateway has already decided\n // the connection is over and must not be woken by its close event.\n this.#transport.destroy(1000, \"Client closed connection\");\n this.#setState(GatewayState.Closed);\n }\n /** Registers a Gateway event listener. @param event Event name. @param listener Event callback. @returns This Gateway. */\n /** Emits an event to all registered listeners. @param event Event name. @param data Event payload. */\n public emit(event: string, data?: unknown): void {\n this.#emit(event, data);\n }\n public on(event: string, listener: GatewayListener): this {\n if (!event || typeof listener !== \"function\")\n throw new TypeError(\"Gateway event and listener are required.\");\n this.#events.on(event, listener);\n return this;\n }\n /** Removes a Gateway event listener. @param event Event name. @param listener Event callback. @returns This Gateway. */\n public off(event: string, listener: GatewayListener): this {\n this.#events.off(event, listener);\n return this;\n }\n /**\n * A snapshot for dashboards and health checks: connection state, last\n * heartbeat round trip, how long the link has been silent, and how many\n * times it has reconnected.\n */\n public health(): GatewayHealth {\n return {\n state: this.state,\n latency: this.#heartbeat.latency,\n silentFor: this.#heartbeat.silentFor,\n reconnects: this.#reconnects,\n };\n }\n /** Sends a Gateway payload. @param payload Gateway payload. @returns Whether it was sent. */\n public send(payload: GatewayPayload): boolean {\n if (!payload || !Number.isInteger(payload.op))\n throw new TypeError(\n \"Gateway payload must contain an integer opcode.\",\n );\n return this.#dispatch(payload, false);\n }\n /**\n * Writes a payload to the socket. Heartbeats pass `privileged` so they are\n * never starved by application traffic: the 115 budget sits below\n * Discord's real 120/60s limit precisely to leave room for them, so\n * spending that headroom on heartbeats is what it is reserved for. They\n * are still recorded, keeping the true total under Discord's limit.\n */\n #dispatch(payload: GatewayPayload, privileged: boolean): boolean {\n if (!this.#transport.connected) return false;\n const now = Date.now();\n if (!this.#sendBudget.allows(privileged, now)) {\n this.#emitError(\n new GatewayError(\"Gateway send rate budget exhausted.\"),\n );\n return false;\n }\n if (!this.#transport.send(JSON.stringify(payload))) return false;\n this.#sendBudget.record(now);\n return true;\n }\n /** Sends a presence update. @param data Presence payload. @returns Whether it was sent. */\n public setPresence(data: GatewayPresence): boolean {\n this.#options.presence = { ...this.#options.presence, ...data };\n const payload = {\n since: this.#options.presence.since ?? null,\n activities: this.#options.presence.activities ?? [],\n status: this.#options.presence.status ?? \"online\",\n afk: Boolean(this.#options.presence.afk),\n };\n return this.send({\n op: GatewayOpcodes.PresenceUpdate,\n d: payload,\n s: null,\n t: null,\n });\n }\n /** Sends a voice state update. @param data Voice state payload. @returns Whether it was sent. */\n public setVoiceState(data: Record<string, unknown>): boolean {\n return this.send({\n op: GatewayOpcodes.VoiceStateUpdate,\n d: data,\n s: null,\n t: null,\n });\n }\n /**\n * Joins, moves or leaves a voice channel (op 4). Returns `false` without\n * sending when the guild belongs to another shard, or when disconnected.\n * @param guildId Guild snowflake. @param channelId Channel to join, or `null` to leave.\n * @param options `selfMute` and `selfDeaf`, both default `false`. @returns Whether it was sent.\n */\n public sendVoiceState(\n guildId: string,\n channelId: string | null,\n options: { selfMute?: boolean; selfDeaf?: boolean } = {},\n ): boolean {\n if (!this.ownsGuild(guildId)) return false;\n return this.setVoiceState({\n guild_id: guildId,\n channel_id: channelId,\n self_mute: options.selfMute ?? false,\n self_deaf: options.selfDeaf ?? false,\n });\n }\n /** Whether `guildId` maps to this Gateway's shard (`(id >> 22) % shardCount === shardId`). */\n public ownsGuild(guildId: string): boolean {\n const count = this.#options.shardCount;\n if (count <= 1) return true;\n return (\n Number((BigInt(guildId) >> 22n) % BigInt(count)) ===\n this.#options.shardId\n );\n }\n /** Requests guild members. @param data Guild member request payload. @returns Whether it was sent. */\n public requestGuildMembers(data: Record<string, unknown>): boolean {\n return this.send({\n op: GatewayOpcodes.RequestGuildMembers,\n d: data,\n s: null,\n t: null,\n });\n }\n /**\n * Starts one connection attempt.\n *\n * Ownership of the session moves to this attempt before the socket exists,\n * so a frame from the socket being replaced can never be mistaken for one\n * belonging to this connection.\n */\n #open(url: string): void {\n if (this.#closed) return;\n this.#token = this.#session.beginConnection();\n const result = this.#transport.connect(url);\n if (result.ok) return;\n // The socket could not be constructed. The caller's attempt fails with\n // the underlying reason, so a thrown GatewayError keeps its message.\n const failure = this.#normalizeError(result.error);\n this.#emitError(failure);\n if (this.#options.reconnect) {\n this.#setState(GatewayState.Reconnect);\n this.#scheduleReconnect();\n } else {\n this.#settleConnect(failure);\n }\n }\n #onOpen(): void {\n // Watch for silence from the moment the socket opens: a connection\n // that never reaches HELLO must still be detected as dead.\n this.#heartbeat.watch();\n this.#emit(\"open\", undefined);\n this.#settleConnect();\n }\n #message(raw: string, token: number): void {\n // The transport already drops frames from a replaced socket; this\n // second check keeps the session authoritative about who may mutate it.\n if (!this.#session.owns(token)) return;\n // Any frame from the current socket proves it is alive. Without this the\n // silence clock only moved on open, so every healthy connection was\n // declared a zombie once the staleness deadline passed.\n this.#heartbeat.receivedMessage();\n const { sequence, action } = classifyFrame(raw);\n // Record before acting: a RESUME must never be built from a sequence\n // the connection has not actually observed. The session ignores a\n // sequence from a superseded connection.\n if (sequence !== null) this.#session.recordSequence(sequence, token);\n this.#apply(action, token);\n }\n /**\n * Performs what the protocol says a frame meant.\n *\n * Every branch is an operation the protocol layer deliberately cannot do\n * for itself: closing a socket, mutating the session, running timers,\n * emitting events.\n */\n #apply(action: GatewayAction, token: number): void {\n switch (action.type) {\n case \"dispatch\":\n this.#setState(GatewayState.Dispatch);\n this.#handleDispatch(action.event, action.data, token);\n return;\n case \"hello\":\n this.#handleHello(action.heartbeatInterval);\n return;\n case \"heartbeat\":\n this.#setState(GatewayState.Heartbeat);\n this.#heartbeat.sendHeartbeat();\n return;\n case \"heartbeat-ack\":\n this.#heartbeat.acknowledge();\n this.ping = this.#heartbeat.latency;\n this.#emit(\"heartbeatAck\", action.data);\n return;\n case \"reconnect\":\n this.#transport.close(\n RESUMABLE_CLOSE_CODE,\n \"Server requested reconnect\",\n );\n return;\n case \"invalid-session\": {\n // A resumable invalidation keeps the session; a non-resumable\n // one destroys it, so the next connection must IDENTIFY.\n if (!action.resumable)\n this.#session.invalidate(token, \"invalid-session\");\n this.#emit(\"invalidSession\", action.resumable);\n this.#transport.close(\n action.resumable ? GatewayCloseCodes.UnknownError : 1000,\n action.resumable\n ? \"Invalid session (resumable)\"\n : \"Invalid session\",\n );\n return;\n }\n case \"invalid\":\n this.#emitError(\n new GatewayError(\n action.message,\n undefined,\n action.cause === undefined\n ? undefined\n : { cause: action.cause },\n ),\n );\n this.#transport.close(\n 1002,\n action.violation === \"invalid-json\"\n ? \"Invalid JSON\"\n : action.violation === \"invalid-hello\"\n ? \"Invalid heartbeat interval\"\n : \"Invalid payload\",\n );\n return;\n case \"unknown\":\n // Forward compatibility: Discord may add opcodes, and an\n // unfamiliar one is not a failure.\n return;\n }\n }\n #handleDispatch(event: string | null, data: unknown, token: number): void {\n if (event === \"READY\") {\n if (!this.#session.activate(data, token)) {\n // Either the payload lacked session information or this socket\n // no longer owns the session; only the former is an error.\n if (this.#session.owns(token))\n this.#emitError(\n new GatewayError(\n \"Gateway READY payload is missing session information\",\n ),\n );\n return;\n }\n this.#reconnect.reset();\n this.#setState(GatewayState.Ready);\n this.#emit(\"ready\", data);\n } else if (event === \"RESUMED\") {\n // A successful RESUME ends the reconnect cycle just like READY:\n // reset the backoff counter so a later disconnect starts from the\n // base delay, mark the connection READY, and surface a Discord.js-\n // familiar `resumed` event.\n this.#reconnect.reset();\n this.#setState(GatewayState.Ready);\n this.#emit(\"resumed\", data);\n }\n this.#emit(\"RAW\", { event: event ?? \"UNKNOWN\", data });\n if (this.#closed) return;\n this.#emit(event ?? \"dispatch\", data);\n }\n #handleHello(interval: number): void {\n this.#setState(\n this.#session.canResume ? GatewayState.Resume : GatewayState.Hello,\n );\n this.#heartbeat.start(interval);\n this.#identifyOrResume();\n }\n #identifyOrResume(): void {\n const intent = this.#session.handshake();\n // IDENTIFY/RESUME are privileged for the same reason heartbeats are:\n // dropping one leaves the shard connected but never READY, recoverable\n // only via the zombie timeout. Application traffic must never starve\n // the handshake out of the send budget.\n if (intent.type === \"resume\") {\n this.#setState(GatewayState.Resume);\n this.#dispatch(resumePayload(this.#options.token, intent), true);\n return;\n }\n this.#setState(GatewayState.Identify);\n this.#dispatch(\n identifyPayload({\n token: this.#options.token,\n intents: this.#options.intents,\n shardId: this.#options.shardId,\n shardCount: this.#options.shardCount,\n properties: this.#options.properties,\n presence: this.#options.presence,\n }),\n true,\n );\n }\n #close(code: number, token: number): void {\n this.#clearTimers();\n const action: CloseAction = this.#reconnect.classifyClose(\n code,\n this.#session.canResume,\n );\n this.#emit(\"close\", { code, action });\n if (this.#closed || !this.#reconnect.enabled || action === \"stop\") {\n // A fatal close is terminal: the condition behind 4004/4013/4014\n // cannot fix itself, so the Gateway settles as CLOSED rather than\n // sitting in CONNECT looking like it is about to try again (WS-003).\n if (action === \"stop\") this.#closed = true;\n this.#setState(\n this.#closed ? GatewayState.Closed : GatewayState.Connect,\n );\n if (this.#reconnect.connecting)\n this.#reconnect.settle(\n new GatewayError(\n `Gateway closed before READY (code ${code}).`,\n code,\n ),\n );\n return;\n }\n if (action === \"identify\")\n // Fresh IDENTIFY: drop the session AND its resume host so the\n // reconnect targets the main Gateway, not a stale resume URL.\n this.#session.invalidate(token, \"session-timeout\");\n this.#setState(GatewayState.Reconnect);\n this.#scheduleReconnect();\n }\n #scheduleReconnect(): void {\n if (this.#closed) return;\n const result = this.#reconnect.schedule(() =>\n this.#open(this.#session.connectURL(DEFAULT_GATEWAY_URL)),\n );\n if (result.scheduled) {\n this.#reconnects++;\n if (result.unstable)\n this.#emit(\"unstable\", {\n reconnects: result.unstable.reconnects,\n delay: result.delayMs,\n });\n return;\n }\n if (result.reason !== \"exhausted\") return;\n this.#reconnect.settle(\n new GatewayError(\"Gateway reconnect attempts exhausted.\"),\n );\n this.#setState(GatewayState.Connect);\n }\n #settleConnect(error?: GatewayError): void {\n this.#reconnect.settle(error);\n }\n #clearTimers(): void {\n this.#reconnect.cancel();\n this.#heartbeat.stop();\n }\n #normalizeError(error: unknown): GatewayError {\n return error instanceof GatewayError\n ? error\n : new GatewayError(\"Gateway connection failed.\", undefined, {\n cause: error,\n });\n }\n #emitError(error: unknown): void {\n this.#emit(\n \"error\",\n error instanceof Error ? error : new GatewayError(String(error)),\n );\n }\n #emit(event: string, data: unknown): void {\n this.#events.emit(event, data);\n }\n /** Changes the Gateway lifecycle state. @param next Next lifecycle state. */\n #setState(next: GatewayState): void {\n if (this.state === next) return;\n const previous = this.state;\n this.state = next;\n this.#emit(\"stateChange\", { previous, next });\n }\n}\n",
67
+ "import { GatewaySession } from \"./session.js\";\nimport { GatewayHeartbeat, type HeartbeatTimeout } from \"./heartbeat.js\";\nimport { GatewayCloseCodes } from \"./close-codes.js\";\nimport { GatewayReconnect, type CloseAction } from \"./reconnect.js\";\nimport { WebSocketTransport, type SocketFactory } from \"./transport.js\";\nimport { GatewayOpcodes } from \"./opcodes.js\";\nimport {\n classifyFrame,\n identifyPayload,\n resumePayload,\n heartbeatPayload,\n type GatewayAction,\n} from \"./protocol.js\";\nimport {\n resolveGatewayIntents,\n type GatewayPayload,\n type GatewayProperties,\n type GatewayPresence,\n type GatewayIntentResolvable,\n} from \"@lunibee/types\";\n\nexport {\n classifyFrame,\n classifyPayload,\n identifyPayload,\n resumePayload,\n heartbeatPayload,\n type GatewayAction,\n type ProtocolResult,\n type ProtocolViolation,\n type IdentifyOptions,\n type IdentifyProperties,\n type IdentifyData,\n} from \"./protocol.js\";\n\nexport {\n WebSocketTransport,\n type TransportHandlers,\n type TransportOptions,\n type SocketFactory,\n} from \"./transport.js\";\n\nexport {\n createDecoder,\n PlainTextDecoder,\n ZlibStreamDecoder,\n type GatewayDecoder,\n} from \"./decoder.js\";\n\nexport {\n GatewayReconnect,\n classifyCloseCode,\n FATAL_CLOSE_CODES,\n IDENTIFY_CLOSE_CODES,\n type CloseAction,\n type ReconnectOptions,\n type ScheduleResult,\n type ScheduleRefusal,\n} from \"./reconnect.js\";\n\nexport {\n GatewayHeartbeat,\n type HeartbeatOptions,\n type HeartbeatTimeout,\n} from \"./heartbeat.js\";\n\nexport {\n GatewaySession,\n type ResumeInfo,\n type HandshakeIntent,\n type InvalidationReason,\n} from \"./session.js\";\n\nexport { GatewayDispatcher, type GatewayListener } from \"./dispatcher.js\";\nexport { GatewaySendLimiter, SendBudget } from \"./send-budget.js\";\nexport { GatewayOpcodes } from \"./opcodes.js\";\n\nexport { GatewayCloseCodes } from \"./close-codes.js\";\n\nexport { GatewayState, Status, GatewayError } from \"./state.js\";\nimport { GatewayState, GatewayError } from \"./state.js\";\nimport { GatewayDispatcher, type GatewayListener } from \"./dispatcher.js\";\nimport { GatewaySendLimiter } from \"./send-budget.js\";\n/** Gateway connection configuration. */\nexport interface GatewayOptions {\n /** Authentication token. */\n token: string;\n /** Gateway intent bitfield or resolvable. */\n intents: GatewayIntentResolvable;\n /** Shard identifier. */\n shardId?: number;\n /** Total shard count. */\n shardCount?: number;\n /** Whether automatic reconnect is enabled. */\n reconnect?: boolean;\n /** Maximum reconnect attempts. */\n maxReconnectAttempts?: number;\n /** Initial reconnect delay. */\n reconnectBaseDelay?: number;\n /** Maximum reconnect delay. */\n reconnectMaxDelay?: number;\n /** Heartbeat acknowledgement timeout. */\n heartbeatAckTimeout?: number;\n /** Zombie connection timeout. */\n zombieTimeout?: number;\n /** Reconnects inside `reconnectStormWindow` after which the link counts as unstable: `unstable` is emitted and the delay keeps doubling. Default 5. */\n reconnectStormLimit?: number;\n /** The span over which reconnects are counted for storm detection, in ms. Default 60,000. */\n reconnectStormWindow?: number;\n /** Identification properties. */\n properties?: GatewayProperties;\n /** Presence data. */\n presence?: GatewayPresence;\n /**\n * Whether to enable zlib-stream transport compression.\n * Decoded with a persistent `node:zlib` inflate stream, matching\n * Discord's zlib-wrapped stream framing (`Z_SYNC_FLUSH` boundaries).\n * When enabled, appends `&compress=zlib-stream` to the Gateway URL.\n */\n compress?: boolean;\n /**\n * Constructs the underlying socket. Defaults to the ambient `WebSocket`.\n * Injected to run the Gateway on an alternative transport, or on a stub.\n */\n createSocket?: SocketFactory;\n}\n/** Discord's main Gateway endpoint, used when no resume host is known. */\n/**\n * Close code for connections Lunibee means to RESUME. Discord invalidates the\n * session when a client closes with 1000 or 1001, so a reconnect that should\n * keep its session must close with anything else.\n */\nconst RESUMABLE_CLOSE_CODE = 4900;\nconst DEFAULT_GATEWAY_URL = \"wss://gateway.discord.gg/?v=10&encoding=json\";\n\n/** What {@link Gateway.health} reports. */\nexport interface GatewayHealth {\n /** Connection lifecycle state. */\n state: GatewayState;\n /** Round trip of the last acknowledged heartbeat in ms, or -1 before the first. */\n latency: number;\n /** Milliseconds since the last message from Discord, or 0 before any. */\n silentFor: number;\n /** Reconnects scheduled since this Gateway was created. */\n reconnects: number;\n}\n/** Manages a Discord Gateway connection. */\nexport class Gateway {\n /** Current Gateway lifecycle state. */\n public state: GatewayState = GatewayState.Connect;\n #options: Required<\n Omit<\n GatewayOptions,\n | \"properties\"\n | \"presence\"\n | \"compress\"\n | \"createSocket\"\n | \"intents\"\n | \"reconnectStormLimit\"\n | \"reconnectStormWindow\"\n >\n > & {\n /** Resolved intent bitfield, never the resolvable form. */\n intents: number;\n properties?: GatewayProperties;\n presence?: GatewayPresence;\n compress?: boolean;\n };\n /**\n * The socket this connection runs on.\n *\n * The Gateway never touches a `WebSocket` directly: construction, listener\n * wiring, replacement and decoding all belong to the transport.\n */\n readonly #transport: WebSocketTransport;\n /**\n * Session identity and the IDENTIFY-vs-RESUME decision.\n *\n * The Gateway holds no session fields of its own: every read and write goes\n * through the session, which rejects mutations from a superseded socket.\n */\n readonly #session = new GatewaySession();\n /** Token of the socket this Gateway currently owns. */\n #token = 0;\n /**\n * Heartbeat, acknowledgement deadline and staleness watch.\n *\n * The Gateway holds no heartbeat timers of its own; it supplies the socket\n * and decides what to close when liveness fails.\n */\n readonly #heartbeat: GatewayHeartbeat;\n #closed = false;\n /**\n * Close classification, backoff, scheduling, and the coordination that\n * keeps at most one logical connection attempt in flight.\n */\n readonly #reconnect: GatewayReconnect;\n /** Listener registry and emission. */\n readonly #events = new GatewayDispatcher((error) => this.#emitError(error));\n /** Application send budget under Discord's 120-per-60s limit. */\n readonly #sendBudget = new GatewaySendLimiter();\n /** How many reconnects were scheduled over this Gateway's life. */\n #reconnects = 0;\n public ping: number = -1;\n /** Creates a Gateway connection manager. @param options Gateway configuration. @throws {TypeError|RangeError} If configuration is invalid. */\n public constructor(options: GatewayOptions) {\n if (!options.token?.trim())\n throw new TypeError(\"A Gateway token is required.\");\n const resolvedIntents = resolveGatewayIntents(options.intents);\n if (!Number.isInteger(resolvedIntents) || resolvedIntents < 0)\n throw new TypeError(\n \"Gateway intents must be a non-negative integer.\",\n );\n this.#options = {\n shardId: 0,\n shardCount: 1,\n reconnect: true,\n maxReconnectAttempts: Infinity,\n reconnectBaseDelay: 1000,\n reconnectMaxDelay: 30000,\n heartbeatAckTimeout: 10000,\n zombieTimeout: 30000,\n // Lunibee identifies as itself, not as an official Discord client.\n properties: {\n os: process.platform,\n browser: \"Lunibee\",\n device: \"Lunibee\",\n },\n presence: {\n status: \"online\",\n activities: [],\n afk: false,\n since: null,\n },\n ...options,\n // Store the *resolved* bitfield, not the resolvable the caller\n // passed. IDENTIFY must carry a number: sending the array or\n // string form verbatim makes Discord answer 4013 (invalid\n // intents), which is a fatal close — so the documented array form\n // would never connect.\n intents: resolvedIntents,\n };\n if (\n this.#options.shardId < 0 ||\n this.#options.shardId >= this.#options.shardCount\n )\n throw new RangeError(\n \"Gateway shardId must be within the configured shard count.\",\n );\n if (this.#options.zombieTimeout <= this.#options.heartbeatAckTimeout)\n throw new RangeError(\n \"Gateway zombieTimeout must be greater than heartbeatAckTimeout\",\n );\n this.#transport = new WebSocketTransport({\n compress: this.#options.compress,\n createSocket: options.createSocket,\n handlers: {\n onOpen: () => this.#onOpen(),\n onFrame: (raw) => this.#message(raw, this.#token),\n onClose: (code) => this.#close(code, this.#token),\n // Transport failures reach consumers as GatewayError, the\n // type every other Gateway error path already uses.\n onError: (error) =>\n this.#emitError(\n error instanceof GatewayError\n ? error\n : new GatewayError(error.message, undefined, {\n cause: error,\n }),\n ),\n },\n });\n this.#reconnect = new GatewayReconnect({\n enabled: this.#options.reconnect,\n maxAttempts: this.#options.maxReconnectAttempts,\n baseDelay: this.#options.reconnectBaseDelay,\n maxDelay: this.#options.reconnectMaxDelay,\n stormLimit: options.reconnectStormLimit,\n stormWindow: options.reconnectStormWindow,\n });\n this.#heartbeat = new GatewayHeartbeat({\n ackTimeout: this.#options.heartbeatAckTimeout,\n zombieTimeout: this.#options.zombieTimeout,\n // Heartbeats are privileged: application traffic must never starve\n // the one payload that keeps the connection alive.\n send: (sequence) =>\n this.#dispatch(heartbeatPayload(sequence), true),\n sequence: () => this.#session.sequence,\n isConnected: () => !this.#closed && this.#transport.connected,\n onTimeout: (timeout) => this.#onHeartbeatTimeout(timeout),\n onError: (error) => this.#emitError(error),\n });\n }\n\n /**\n * Closes a connection that failed a liveness check.\n *\n * The heartbeat decides *that* the connection is dead; the Gateway decides\n * what to do about it, because only the Gateway owns the socket.\n */\n #onHeartbeatTimeout(timeout: HeartbeatTimeout): void {\n if (timeout.type === \"zombie\") {\n this.#emit(\"zombie\", {\n silentFor: timeout.silentFor,\n timeout: timeout.deadline,\n });\n this.#emitError(\n new GatewayError(\n `Gateway connection appears stale after ${timeout.silentFor}ms without traffic.`,\n ),\n );\n } else {\n this.#emitError(\n new GatewayError(\n `Gateway heartbeat acknowledgement timed out after ${timeout.elapsedMs}ms.`,\n ),\n );\n }\n this.#transport.close(\n RESUMABLE_CLOSE_CODE,\n timeout.type === \"zombie\"\n ? \"Zombie Gateway connection\"\n : \"Heartbeat timeout\",\n );\n }\n\n /** Opens the Gateway connection. @param url Gateway WebSocket URL. @returns Promise fulfilled when the socket opens; it rejects with a GatewayError if the Gateway was permanently closed or cannot connect. */\n public connect(url = DEFAULT_GATEWAY_URL): Promise<void> {\n if (this.state === GatewayState.Closed)\n return Promise.reject(\n new GatewayError(\"Gateway has been permanently closed.\"),\n );\n // At most one logical connection attempt is active: concurrent callers\n // join the in-flight attempt rather than opening competing sockets.\n const inFlight = this.#reconnect.attemptPromise;\n if (inFlight) return inFlight;\n // Connecting an already-live Gateway must be a no-op. Opening a second\n // socket leaves the first one unmanaged but still dispatching, which\n // interleaves two sequence streams (corrupting a later RESUME) and\n // sends a second IDENTIFY on the same session.\n if (this.#transport.live) return Promise.resolve();\n // A manual connect supersedes a scheduled reconnect; leaving the timer\n // armed would open a second socket once it fires.\n this.#reconnect.cancel();\n this.#closed = false;\n this.#setState(GatewayState.Connect);\n // Append compression parameter if enabled\n const connectURL = this.#options.compress\n ? url.includes(\"compress=\")\n ? url\n : `${url}&compress=zlib-stream`\n : url;\n return this.#reconnect.attempt(() => this.#open(connectURL));\n }\n /** Permanently closes the Gateway connection. */\n public close(): void {\n this.#closed = true;\n this.#clearTimers();\n this.#settleConnect(\n new GatewayError(\"Gateway connection closed before socket open.\"),\n );\n // Abandon rather than close-and-listen: the Gateway has already decided\n // the connection is over and must not be woken by its close event.\n this.#transport.destroy(1000, \"Client closed connection\");\n this.#setState(GatewayState.Closed);\n }\n /** Registers a Gateway event listener. @param event Event name. @param listener Event callback. @returns This Gateway. */\n /** Emits an event to all registered listeners. @param event Event name. @param data Event payload. */\n public emit(event: string, data?: unknown): void {\n this.#emit(event, data);\n }\n public on(event: string, listener: GatewayListener): this {\n if (!event || typeof listener !== \"function\")\n throw new TypeError(\"Gateway event and listener are required.\");\n this.#events.on(event, listener);\n return this;\n }\n /** Removes a Gateway event listener. @param event Event name. @param listener Event callback. @returns This Gateway. */\n public off(event: string, listener: GatewayListener): this {\n this.#events.off(event, listener);\n return this;\n }\n /**\n * A snapshot for dashboards and health checks: connection state, last\n * heartbeat round trip, how long the link has been silent, and how many\n * times it has reconnected.\n */\n public health(): GatewayHealth {\n return {\n state: this.state,\n latency: this.#heartbeat.latency,\n silentFor: this.#heartbeat.silentFor,\n reconnects: this.#reconnects,\n };\n }\n /** Sends a Gateway payload. @param payload Gateway payload. @returns Whether it was sent. */\n public send(payload: GatewayPayload): boolean {\n if (!payload || !Number.isInteger(payload.op))\n throw new TypeError(\n \"Gateway payload must contain an integer opcode.\",\n );\n return this.#dispatch(payload, false);\n }\n /**\n * Writes a payload to the socket. Heartbeats pass `privileged` so they are\n * never starved by application traffic: the 115 budget sits below\n * Discord's real 120/60s limit precisely to leave room for them, so\n * spending that headroom on heartbeats is what it is reserved for. They\n * are still recorded, keeping the true total under Discord's limit.\n */\n #dispatch(payload: GatewayPayload, privileged: boolean): boolean {\n if (!this.#transport.connected) return false;\n const now = Date.now();\n if (!this.#sendBudget.allows(privileged, now)) {\n this.#emitError(\n new GatewayError(\"Gateway send rate budget exhausted.\"),\n );\n return false;\n }\n if (!this.#transport.send(JSON.stringify(payload))) return false;\n this.#sendBudget.record(now);\n return true;\n }\n /** Sends a presence update. @param data Presence payload. @returns Whether it was sent. */\n public setPresence(data: GatewayPresence): boolean {\n this.#options.presence = { ...this.#options.presence, ...data };\n const payload = {\n since: this.#options.presence.since ?? null,\n activities: this.#options.presence.activities ?? [],\n status: this.#options.presence.status ?? \"online\",\n afk: Boolean(this.#options.presence.afk),\n };\n return this.send({\n op: GatewayOpcodes.PresenceUpdate,\n d: payload,\n s: null,\n t: null,\n });\n }\n /** Sends a voice state update. @param data Voice state payload. @returns Whether it was sent. */\n public setVoiceState(data: Record<string, unknown>): boolean {\n return this.send({\n op: GatewayOpcodes.VoiceStateUpdate,\n d: data,\n s: null,\n t: null,\n });\n }\n /**\n * Joins, moves or leaves a voice channel (op 4). Returns `false` without\n * sending when the guild belongs to another shard, or when disconnected.\n * @param guildId Guild snowflake. @param channelId Channel to join, or `null` to leave.\n * @param options `selfMute` and `selfDeaf`, both default `false`. @returns Whether it was sent.\n */\n public sendVoiceState(\n guildId: string,\n channelId: string | null,\n options: { selfMute?: boolean; selfDeaf?: boolean } = {},\n ): boolean {\n if (!this.ownsGuild(guildId)) return false;\n return this.setVoiceState({\n guild_id: guildId,\n channel_id: channelId,\n self_mute: options.selfMute ?? false,\n self_deaf: options.selfDeaf ?? false,\n });\n }\n /** Whether `guildId` maps to this Gateway's shard (`(id >> 22) % shardCount === shardId`). */\n public ownsGuild(guildId: string): boolean {\n const count = this.#options.shardCount;\n if (count <= 1) return true;\n return (\n Number((BigInt(guildId) >> 22n) % BigInt(count)) ===\n this.#options.shardId\n );\n }\n /** Requests guild members. @param data Guild member request payload. @returns Whether it was sent. */\n public requestGuildMembers(data: Record<string, unknown>): boolean {\n return this.send({\n op: GatewayOpcodes.RequestGuildMembers,\n d: data,\n s: null,\n t: null,\n });\n }\n /**\n * Starts one connection attempt.\n *\n * Ownership of the session moves to this attempt before the socket exists,\n * so a frame from the socket being replaced can never be mistaken for one\n * belonging to this connection.\n */\n #open(url: string): void {\n if (this.#closed) return;\n this.#token = this.#session.beginConnection();\n const result = this.#transport.connect(url);\n if (result.ok) return;\n // The socket could not be constructed. The caller's attempt fails with\n // the underlying reason, so a thrown GatewayError keeps its message.\n const failure = this.#normalizeError(result.error);\n this.#emitError(failure);\n if (this.#options.reconnect) {\n this.#setState(GatewayState.Reconnect);\n this.#scheduleReconnect();\n } else {\n this.#settleConnect(failure);\n }\n }\n #onOpen(): void {\n // Watch for silence from the moment the socket opens: a connection\n // that never reaches HELLO must still be detected as dead.\n this.#heartbeat.watch();\n this.#emit(\"open\", undefined);\n this.#settleConnect();\n }\n #message(raw: string, token: number): void {\n // The transport already drops frames from a replaced socket; this\n // second check keeps the session authoritative about who may mutate it.\n if (!this.#session.owns(token)) return;\n // Any frame from the current socket proves it is alive. Without this the\n // silence clock only moved on open, so every healthy connection was\n // declared a zombie once the staleness deadline passed.\n this.#heartbeat.receivedMessage();\n const { sequence, action } = classifyFrame(raw);\n // Record before acting: a RESUME must never be built from a sequence\n // the connection has not actually observed. The session ignores a\n // sequence from a superseded connection.\n if (sequence !== null) this.#session.recordSequence(sequence, token);\n this.#apply(action, token);\n }\n /**\n * Performs what the protocol says a frame meant.\n *\n * Every branch is an operation the protocol layer deliberately cannot do\n * for itself: closing a socket, mutating the session, running timers,\n * emitting events.\n */\n #apply(action: GatewayAction, token: number): void {\n switch (action.type) {\n case \"dispatch\":\n this.#setState(GatewayState.Dispatch);\n this.#handleDispatch(action.event, action.data, token);\n return;\n case \"hello\":\n this.#handleHello(action.heartbeatInterval);\n return;\n case \"heartbeat\":\n this.#setState(GatewayState.Heartbeat);\n this.#heartbeat.sendHeartbeat();\n return;\n case \"heartbeat-ack\":\n this.#heartbeat.acknowledge();\n this.ping = this.#heartbeat.latency;\n this.#emit(\"heartbeatAck\", action.data);\n return;\n case \"reconnect\":\n this.#transport.close(\n RESUMABLE_CLOSE_CODE,\n \"Server requested reconnect\",\n );\n return;\n case \"invalid-session\": {\n // A resumable invalidation keeps the session; a non-resumable\n // one destroys it, so the next connection must IDENTIFY.\n if (!action.resumable)\n this.#session.invalidate(token, \"invalid-session\");\n this.#emit(\"invalidSession\", action.resumable);\n this.#transport.close(\n action.resumable ? GatewayCloseCodes.UnknownError : 1000,\n action.resumable\n ? \"Invalid session (resumable)\"\n : \"Invalid session\",\n );\n return;\n }\n case \"invalid\":\n this.#emitError(\n new GatewayError(\n action.message,\n undefined,\n action.cause === undefined\n ? undefined\n : { cause: action.cause },\n ),\n );\n this.#transport.close(\n 1002,\n action.violation === \"invalid-json\"\n ? \"Invalid JSON\"\n : action.violation === \"invalid-hello\"\n ? \"Invalid heartbeat interval\"\n : \"Invalid payload\",\n );\n return;\n case \"unknown\":\n // Forward compatibility: Discord may add opcodes, and an\n // unfamiliar one is not a failure.\n return;\n }\n }\n #handleDispatch(event: string | null, data: unknown, token: number): void {\n if (event === \"READY\") {\n if (!this.#session.activate(data, token)) {\n // Either the payload lacked session information or this socket\n // no longer owns the session; only the former is an error.\n if (this.#session.owns(token))\n this.#emitError(\n new GatewayError(\n \"Gateway READY payload is missing session information\",\n ),\n );\n return;\n }\n this.#reconnect.reset();\n this.#setState(GatewayState.Ready);\n this.#emit(\"ready\", data);\n } else if (event === \"RESUMED\") {\n // A successful RESUME ends the reconnect cycle just like READY:\n // reset the backoff counter so a later disconnect starts from the\n // base delay, mark the connection READY, and surface a Discord.js-\n // familiar `resumed` event.\n this.#reconnect.reset();\n this.#setState(GatewayState.Ready);\n this.#emit(\"resumed\", data);\n }\n this.#emit(\"RAW\", { event: event ?? \"UNKNOWN\", data });\n if (this.#closed) return;\n this.#emit(event ?? \"dispatch\", data);\n }\n #handleHello(interval: number): void {\n this.#setState(\n this.#session.canResume ? GatewayState.Resume : GatewayState.Hello,\n );\n this.#heartbeat.start(interval);\n this.#identifyOrResume();\n }\n #identifyOrResume(): void {\n const intent = this.#session.handshake();\n // IDENTIFY/RESUME are privileged for the same reason heartbeats are:\n // dropping one leaves the shard connected but never READY, recoverable\n // only via the zombie timeout. Application traffic must never starve\n // the handshake out of the send budget.\n if (intent.type === \"resume\") {\n this.#setState(GatewayState.Resume);\n this.#dispatch(resumePayload(this.#options.token, intent), true);\n return;\n }\n this.#setState(GatewayState.Identify);\n this.#dispatch(\n identifyPayload({\n token: this.#options.token,\n intents: this.#options.intents,\n shardId: this.#options.shardId,\n shardCount: this.#options.shardCount,\n properties: this.#options.properties,\n presence: this.#options.presence,\n }),\n true,\n );\n }\n #close(code: number, token: number): void {\n this.#clearTimers();\n const action: CloseAction = this.#reconnect.classifyClose(\n code,\n this.#session.canResume,\n );\n this.#emit(\"close\", { code, action });\n if (this.#closed || !this.#reconnect.enabled || action === \"stop\") {\n // A fatal close is terminal: the condition behind 4004/4013/4014\n // cannot fix itself, so the Gateway settles as CLOSED rather than\n // sitting in CONNECT looking like it is about to try again (WS-003).\n if (action === \"stop\") this.#closed = true;\n this.#setState(\n this.#closed ? GatewayState.Closed : GatewayState.Connect,\n );\n if (this.#reconnect.connecting)\n this.#reconnect.settle(\n new GatewayError(\n `Gateway closed before READY (code ${code}).`,\n code,\n ),\n );\n return;\n }\n if (action === \"identify\")\n // Fresh IDENTIFY: drop the session AND its resume host so the\n // reconnect targets the main Gateway, not a stale resume URL.\n this.#session.invalidate(token, \"session-timeout\");\n this.#setState(GatewayState.Reconnect);\n this.#scheduleReconnect();\n }\n #scheduleReconnect(): void {\n if (this.#closed) return;\n const result = this.#reconnect.schedule(() =>\n this.#open(this.#session.connectURL(DEFAULT_GATEWAY_URL)),\n );\n if (result.scheduled) {\n this.#reconnects++;\n if (result.unstable)\n this.#emit(\"unstable\", {\n reconnects: result.unstable.reconnects,\n delay: result.delayMs,\n });\n return;\n }\n if (result.reason !== \"exhausted\") return;\n this.#reconnect.settle(\n new GatewayError(\"Gateway reconnect attempts exhausted.\"),\n );\n this.#setState(GatewayState.Connect);\n }\n #settleConnect(error?: GatewayError): void {\n this.#reconnect.settle(error);\n }\n #clearTimers(): void {\n this.#reconnect.cancel();\n this.#heartbeat.stop();\n }\n #normalizeError(error: unknown): GatewayError {\n return error instanceof GatewayError\n ? error\n : new GatewayError(\"Gateway connection failed.\", undefined, {\n cause: error,\n });\n }\n #emitError(error: unknown): void {\n this.#emit(\n \"error\",\n error instanceof Error ? error : new GatewayError(String(error)),\n );\n }\n #emit(event: string, data: unknown): void {\n this.#events.emit(event, data);\n }\n /** Changes the Gateway lifecycle state. @param next Next lifecycle state. */\n #setState(next: GatewayState): void {\n if (this.state === next) return;\n const previous = this.state;\n this.state = next;\n this.#emit(\"stateChange\", { previous, next });\n }\n}\n",
68
68
  "export {\n Permission,\n Permissions,\n PermissionFlagsBits,\n PermissionSet,\n PermissionsBitField,\n PermissionOverwriteEnum,\n computePermissions,\n type PermissionContext,\n type PermissionOverwrite,\n type PermissionRole,\n type PermissionName,\n} from \"./permissions.js\";\nexport {\n ClientEvent,\n /** Discord.js-familiar alias for {@link ClientEvent}. */\n ClientEvent as Events,\n type ClientEventName,\n type ClientEvents,\n type ClientListener,\n} from \"./events.js\";\nexport { Collector, type CollectorOptions } from \"./collector.js\";\nexport {\n createApi,\n type Api,\n type ApplicationNode,\n type ChannelNode,\n type GuildNode,\n type ListRoute,\n type MemberNode,\n type MembersRoute,\n type MessageNode,\n type MessagesRoute,\n type PageOptions,\n type Route,\n type RouteId,\n type RouteOptions,\n type UserNode,\n type WebhookNode,\n} from \"./api.js\";\nexport {\n command,\n option,\n CommandRegistry,\n type ChannelConfig,\n type ChoiceConfig,\n type BooleanConfig,\n type Command,\n type CommandContext,\n type CommandDefinition,\n type MentionableValue,\n type NumberConfig,\n type OptionDef,\n type OptionMap,\n type OptionValues,\n type StringConfig,\n} from \"./commands.js\";\nexport {\n channelCreatePayload,\n type CreateCategoryChannel,\n type CreateChannelOptions,\n type CreateForumChannel,\n type CreateTextChannel,\n type CreateVoiceChannel,\n type ForumTagInput,\n} from \"./channel-create.js\";\nexport {\n ChannelHandle,\n GuildHandle,\n MemberHandle,\n MessageHandle,\n RoleHandle,\n UserHandle,\n parseDuration,\n type Duration,\n type Handle,\n type MessageInput,\n} from \"./handles.js\";\nexport {\n GatewayIntentBits,\n IntentBits,\n Intents,\n IntentsBitField,\n resolveGatewayIntents,\n type GatewayIntentResolvable,\n} from \"@lunibee/types\";\n\nimport { ActivityEnum } from \"@lunibee/types\";\nimport {\n ApplicationCommandManager,\n ChannelManager,\n GuildManager,\n MonetizationManager,\n ApplicationEmojiManager,\n StageInstanceManager,\n UserManager,\n toRequest,\n} from \"@lunibee/managers\";\nimport { REST, Routes } from \"@lunibee/rest\";\nimport {\n User,\n GuildMember,\n Role,\n Emoji,\n type Channel,\n createChannel,\n Message,\n createInteraction,\n type InteractionClient,\n type InteractionData,\n type ResourceContext,\n} from \"@lunibee/structures\";\nimport { Gateway } from \"@lunibee/ws\";\nimport type {\n APIEntitlement,\n APISoundboardSound,\n APIChannel,\n APIGuild,\n APIGuildMember,\n APIGuildRoleEvent,\n APIGuildRoleDeleteEvent,\n APIGuildBanEvent,\n APIGuildEmojisUpdateEvent,\n APIGuildStickersUpdateEvent,\n APIMessageDeleteBulkEvent,\n APIMessageDeleteEvent,\n APIMessageReactionEvent,\n APIMessageReactionRemoveEmojiEvent,\n APIReadyEvent,\n APIRole,\n APIThreadEvent,\n APIThreadListSync,\n APIThreadMembersUpdate,\n APIVoiceState,\n APIVoiceServerUpdate,\n APIPresenceUpdate,\n APITypingStart,\n APIInviteCreate,\n APIInviteDelete,\n APIWebhooksUpdate,\n APIAutoModerationRule,\n APIAutoModerationActionExecution,\n APIGuildScheduledEvent,\n APIGuildScheduledEventUserEvent,\n APIStageInstance,\n APIChannelPinsUpdate,\n APIGuildMembersChunk,\n APIMessagePollVoteEvent,\n ClientOptions,\n ClientUser,\n} from \"@lunibee/types\";\nimport { ClientEvent, type ClientEvents } from \"./events.js\";\nimport { Collector, type CollectorOptions } from \"./collector.js\";\nimport { computePermissions, PermissionSet } from \"./permissions.js\";\nimport { createApi, type Api } from \"./api.js\";\nimport { CommandRegistry } from \"./commands.js\";\nimport {\n ChannelHandle,\n GuildHandle,\n MemberHandle,\n MessageHandle,\n RoleHandle,\n UserHandle,\n} from \"./handles.js\";\n\n/** Lifecycle state of a client. */\nexport type ClientState = \"idle\" | \"connecting\" | \"ready\" | \"destroyed\";\ntype Listener<T extends unknown[]> = (...args: T) => unknown;\ntype GuildMemberEvent = APIGuildMember & { guild_id: string };\n\n/** Minimal typed event emitter used by the client. */\nclass EventEmitter<Events extends { [K in keyof Events]: unknown[] }> {\n #listeners: { [K in keyof Events]?: Set<Listener<Events[K]>> } = {};\n /** Removes secrets from text this emitter prints; the client removes its token. */\n protected readonly redactSecrets = (text: string): string => text;\n public on<K extends keyof Events>(\n event: K,\n listener: Listener<Events[K]>,\n ): this {\n if (typeof listener !== \"function\")\n throw new TypeError(\"Event listener must be a function.\");\n (this.#listeners[event] ??= new Set()).add(listener);\n return this;\n }\n public once<K extends keyof Events>(\n event: K,\n listener: Listener<Events[K]>,\n ): this {\n const wrapped: Listener<Events[K]> = (...args) => {\n this.off(event, wrapped);\n return listener(...args);\n };\n return this.on(event, wrapped);\n }\n public off<K extends keyof Events>(\n event: K,\n listener: Listener<Events[K]>,\n ): this {\n this.#listeners[event]?.delete(listener);\n return this;\n }\n /** Alias of {@link off}, provided for Node.js/Discord.js familiarity. */\n public removeListener<K extends keyof Events>(\n event: K,\n listener: Listener<Events[K]>,\n ): this {\n return this.off(event, listener);\n }\n public removeAllListeners<K extends keyof Events>(event?: K): this {\n if (event === undefined) this.#listeners = {};\n else delete this.#listeners[event];\n return this;\n }\n protected emit<K extends keyof Events>(\n event: K,\n ...args: Events[K]\n ): boolean {\n const listeners = this.#listeners[event];\n if (!listeners?.size) return false;\n for (const listener of [...listeners]) {\n try {\n const result = listener(...args);\n if (\n result &&\n typeof (result as PromiseLike<unknown>).then === \"function\"\n )\n void Promise.resolve(result).catch((error) =>\n this.#handleError(event, error),\n );\n } catch (error) {\n this.#handleError(event, error);\n }\n }\n return true;\n }\n /** Sends a listener's error to the `error` listeners. When there are none, or\n * an `error` listener itself fails, it becomes a process warning instead of\n * disappearing (never a new `error` event, so it cannot loop). */\n #handleError(event: keyof Events, error: unknown): void {\n const normalized =\n error instanceof Error\n ? error\n : new Error(String(error), { cause: error });\n // Every emitter in this file declares `error: [Error]`.\n const errorListeners = this.#listeners[\n ClientEvent.Error as keyof Events\n ] as Set<Listener<[Error]>> | undefined;\n const listeners =\n event === ClientEvent.Error ? [] : [...(errorListeners ?? [])];\n if (listeners.length === 0)\n return warnListenerError(event, normalized, this.redactSecrets);\n for (const listener of listeners) {\n try {\n const result = listener(normalized);\n if (\n result &&\n typeof (result as PromiseLike<unknown>).then === \"function\"\n )\n void Promise.resolve(result).catch((failure) =>\n warnListenerError(\n ClientEvent.Error,\n failure,\n this.redactSecrets,\n ),\n );\n } catch (failure) {\n warnListenerError(\n ClientEvent.Error,\n failure,\n this.redactSecrets,\n );\n }\n }\n }\n}\n\n/** Reports an error no listener handled as a process warning (stderr by default), with secrets removed. */\nfunction warnListenerError(\n event: PropertyKey,\n error: unknown,\n redact: (text: string) => string = (text) => text,\n): void {\n const failure = error instanceof Error ? error : new Error(String(error));\n process.emitWarning(\n redact(\n `A \"${String(event)}\" listener threw and no error listener handled it: ${failure.message}`,\n ),\n {\n type: \"LunibeeWarning\",\n code: \"LUNIBEE_UNHANDLED_LISTENER_ERROR\",\n detail:\n failure.stack === undefined ? undefined : redact(failure.stack),\n },\n );\n}\n\n/** Main Lunibee Discord client. */\nexport class Client\n extends EventEmitter<ClientEvents>\n implements InteractionClient\n{\n public readonly rest: REST;\n public readonly users: UserManager;\n public readonly guilds: GuildManager;\n public readonly channels: ChannelManager;\n /** Stage instances, cached by stage channel ID. */\n public readonly stageInstances: StageInstanceManager;\n public readonly application: { commands: ApplicationCommandManager };\n #api?: Api;\n /**\n * Discord's REST API as a chained path: `bot.api.guilds(id).members(userId).patch({ nick })`.\n * Uses this client's rate limiting and retries; `bot.rest` and `Routes` stay available.\n */\n public get api(): Api {\n return (this.#api ??= createApi(this.rest));\n }\n /** Slash and prefix commands made with `command()`: `add`, `deploy` and `listen`. */\n public readonly commands: CommandRegistry = new CommandRegistry(this);\n /** SKUs, entitlements and subscriptions; available after READY (application ID known). */\n public monetization?: MonetizationManager;\n /** The application's own emojis; available after READY (application ID known). */\n public applicationEmojis?: ApplicationEmojiManager;\n public get ws(): Gateway {\n return this.#gateway;\n }\n public get gateway(): Gateway {\n return this.#gateway;\n }\n public user?: ClientUser;\n public readyAt?: Date;\n public state: ClientState = \"idle\";\n /**\n * The bot token this client is authenticated with, or `null` once the\n * client has been destroyed. Mirrors `Client#token` in Discord.js.\n */\n /** Replaces the bot token in text Lunibee prints (listener warnings). */\n protected override readonly redactSecrets = (text: string): string => {\n const token = this.options.token;\n return token && token.length >= 8\n ? text.split(token).join(\"[token]\")\n : text;\n };\n public get token(): string | null {\n return this.state === \"destroyed\" ? null : (this.options.token ?? null);\n }\n public get uptime(): number | null {\n return this.readyAt ? Date.now() - this.readyAt.getTime() : null;\n }\n public get ping(): number {\n return this.#gateway.ping;\n }\n /** Whether the client is ready and connected. */\n public isReady(): boolean {\n return this.state === \"ready\";\n }\n /** Sets the bot's presence / status. @param data Presence payload. @returns Whether the payload was sent. */\n public setPresence(\n data: import(\"@lunibee/types\").GatewayPresence,\n ): boolean {\n return this.#gateway.setPresence(data);\n }\n /**\n * Sets what the bot is doing: \"Playing chess\", \"Watching the logs\". Pass\n * `null` to clear it. For a custom status (type `ActivityEnum.Custom`) the\n * text shown is `state`, so it is set to `name` unless you give one.\n * @example bot.setActivity(\"the logs\", { type: ActivityEnum.Watching, status: \"idle\" });\n * @returns Whether the update was sent (false while the Gateway is not connected).\n */\n public setActivity(\n name: string | null,\n options: {\n type?: import(\"@lunibee/types\").ActivityEnum;\n url?: string;\n state?: string;\n status?: import(\"@lunibee/types\").GatewayPresence[\"status\"];\n } = {},\n ): boolean {\n const type = options.type ?? ActivityEnum.Playing;\n return this.setPresence({\n status: options.status ?? \"online\",\n activities:\n name === null\n ? []\n : [\n {\n name,\n type,\n url: options.url,\n state:\n options.state ??\n (type === ActivityEnum.Custom\n ? name\n : undefined),\n },\n ],\n });\n }\n /** Sends a voice state update. @param data Voice state payload. @returns Whether it was sent. */\n public setVoiceState(data: Record<string, unknown>): boolean {\n return this.#gateway.setVoiceState(data);\n }\n /**\n * Joins, moves or leaves a voice channel (op 4). Stable public voice API.\n * Returns `false` (never throws) when disconnected, rate limited, or when\n * the guild belongs to another shard of a sharded setup.\n * @param guildId Guild snowflake. @param channelId Channel to join or move to; `null` leaves.\n * @param options `selfMute` and `selfDeaf`. @returns Whether it was sent.\n */\n public sendVoiceState(\n guildId: string,\n channelId: string | null,\n options: { selfMute?: boolean; selfDeaf?: boolean } = {},\n ): boolean {\n return this.#gateway.sendVoiceState(guildId, channelId, options);\n }\n /** Requests guild members. @param data Guild member request payload. @returns Whether it was sent. */\n public requestGuildMembers(data: Record<string, unknown>): boolean {\n return this.#gateway.requestGuildMembers(data);\n }\n readonly #gateway: Gateway;\n /** Which resources Gateway events are allowed to cache. */\n readonly #cache: Required<NonNullable<ClientOptions[\"cache\"]>>;\n readonly #resourceContext: ResourceContext;\n\n public constructor(public readonly options: ClientOptions) {\n super();\n if (!options.token?.trim())\n throw new TypeError(\"Client token is required.\");\n this.rest = new REST({ token: options.token, ...options.rest });\n this.#cache = {\n users: true,\n members: true,\n roles: true,\n emojis: true,\n presences: false,\n ...options.cache,\n };\n this.users = new UserManager(this.rest);\n this.guilds = new GuildManager(this.rest);\n this.channels = new ChannelManager(this.rest, {\n messageCache: options.messageCache,\n allowedMentions: options.allowedMentions,\n });\n this.stageInstances = new StageInstanceManager(this.rest);\n const placeholderAppCommands = new ApplicationCommandManager(\n this.rest,\n \"0\",\n );\n this.application = { commands: placeholderAppCommands };\n this.#resourceContext = this.#createResourceContext();\n this.guilds.attachContext(this.#resourceContext);\n this.#gateway = new Gateway({\n token: options.token,\n intents: options.intents,\n ...(options.compress === undefined\n ? {}\n : { compress: options.compress }),\n ...options.gateway,\n });\n\n this.#wireLifecycle();\n this.#wireMessages();\n this.#wireGuilds();\n this.#wireGuildFeatures();\n this.#wireChannels();\n this.#wireMisc();\n }\n\n /** Callbacks structures use to act through this client (send, edit, kick...). */\n #createResourceContext(): ResourceContext {\n return {\n sendMessage: (channelId, options) =>\n this.channels.send(channelId, options),\n editMessage: (channelId, messageId, options) =>\n this.channels.editMessage(channelId, messageId, options),\n deleteMessage: (channelId, messageId, reason) =>\n this.channels.deleteMessage(channelId, messageId, reason),\n crosspostMessage: (channelId, messageId) =>\n this.channels.crosspostMessage(channelId, messageId),\n editChannel: (channelId, options) =>\n this.channels.edit(channelId, options),\n deleteChannel: (channelId, reason) =>\n this.channels.remove(channelId, reason),\n addReaction: (channelId, messageId, emoji) =>\n this.channels.addReaction(channelId, messageId, emoji),\n removeOwnReaction: (channelId, messageId, emoji) =>\n this.channels.removeOwnReaction(channelId, messageId, emoji),\n removeReaction: (channelId, messageId, emoji, userId) =>\n this.channels.removeReaction(\n channelId,\n messageId,\n emoji,\n userId,\n ),\n removeAllReactions: (channelId, messageId) =>\n this.channels.removeAllReactions(channelId, messageId),\n pinMessage: (channelId, messageId, reason) =>\n this.channels.pinMessage(channelId, messageId, reason),\n unpinMessage: (channelId, messageId, reason) =>\n this.channels.unpinMessage(channelId, messageId, reason),\n collectInteractions: (options) =>\n this.createCollector(ClientEvent.InteractionCreate, options),\n memberPermissions: (\n guildId,\n memberId,\n roleIds,\n channelId,\n timedOutUntil,\n ) =>\n this.#memberPermissions(\n guildId,\n memberId,\n roleIds,\n channelId,\n timedOutUntil,\n ),\n kickMember: (guildId, userId, reason) =>\n this.guilds.members(guildId).kick(userId, reason),\n banMember: (guildId, userId, options) =>\n this.guilds.members(guildId).ban(userId, options),\n editMember: (guildId, userId, options, reason) =>\n this.guilds.members(guildId).edit(userId, {\n ...options,\n reason:\n typeof options.reason === \"string\"\n ? options.reason\n : reason,\n }),\n addMemberRole: (guildId, userId, roleId, reason) =>\n this.guilds.members(guildId).addRole(userId, roleId, reason),\n removeMemberRole: (guildId, userId, roleId, reason) =>\n this.guilds.members(guildId).removeRole(userId, roleId, reason),\n editPermissionOverwrite: async (\n channelId,\n targetId,\n changes,\n options,\n ) => {\n const bits = { allow: 0n, deny: 0n, inherit: 0n };\n for (const [name, value] of Object.entries(changes)) {\n // Names only: a number or bit string here is a mistake, not a permission.\n if (!/^[A-Za-z]+$/.test(name))\n throw new TypeError(`Unknown permission: ${name}`);\n let bit: bigint;\n try {\n bit = new PermissionSet(name).bitfield;\n } catch {\n throw new TypeError(`Unknown permission: ${name}`);\n }\n const key =\n value === true\n ? \"allow\"\n : value === false\n ? \"deny\"\n : \"inherit\";\n bits[key] |= bit;\n }\n return this.channels\n .permissionOverwrites(channelId)\n .update(targetId, bits, options);\n },\n };\n }\n\n /** Session lifecycle: ready, resume, open and close. */\n #wireLifecycle(): void {\n // ── Lifecycle ────────────────────────────────────────────────────────────\n this.#gateway.on(\"READY\", (data) => {\n const ready = data as APIReadyEvent;\n this.user = ready.user;\n this.users.set(this.user.id, new User(this.user));\n this.readyAt = new Date();\n this.state = \"ready\";\n const appId = ready.application?.id ?? this.user.id;\n (\n this.application as { commands: ApplicationCommandManager }\n ).commands = new ApplicationCommandManager(this.rest, appId);\n if (this.monetization?.applicationId !== appId)\n this.monetization = new MonetizationManager(this.rest, appId);\n if (this.applicationEmojis?.applicationId !== appId)\n this.applicationEmojis = new ApplicationEmojiManager(\n this.rest,\n appId,\n );\n this.emit(ClientEvent.Ready, this.user);\n });\n this.#gateway.on(\"RESUMED\", () => {\n this.state = \"ready\";\n this.emit(ClientEvent.Resumed);\n });\n this.#gateway.on(\"invalidSession\", (isRecoverable) => {\n this.emit(ClientEvent.InvalidSession, isRecoverable as boolean);\n });\n this.#gateway.on(\"open\", () => this.emit(ClientEvent.Open));\n this.#gateway.on(\"close\", (data) => {\n if (this.state !== \"destroyed\") this.state = \"idle\";\n this.emit(\n ClientEvent.Close,\n data as { code: number; action: string },\n );\n });\n }\n\n /** Messages, reactions and polls. */\n #wireMessages(): void {\n // ── Messages ─────────────────────────────────────────────────────────────\n this.#gateway.on(\"MESSAGE_CREATE\", (data) => {\n const payload = data as import(\"@lunibee/types\").APIMessage;\n const message = new Message(payload, this.#resourceContext);\n this.#observeMessage(message);\n // The author's member (roles, nickname) comes with every guild\n // message; keep the cached member current with it.\n if (\n payload.member &&\n payload.guild_id &&\n this.guilds.has(payload.guild_id)\n )\n this.#upsertMember(payload.guild_id, {\n ...payload.member,\n user: payload.member.user ?? payload.author,\n } as APIGuildMember);\n // With messageCache enabled, Gateway messages enter the bounded\n // cache so later edits and deletes can see the previous content;\n // listeners get the cached instance.\n const cached = this.options.messageCache\n ? this.channels\n .messages(message.channelId)\n .upsert(data as import(\"@lunibee/types\").APIMessage)\n : message;\n this.emit(ClientEvent.MessageCreate, cached);\n });\n this.#gateway.on(\"MESSAGE_UPDATE\", (data) => {\n const message = new Message(\n data as import(\"@lunibee/types\").APIMessage,\n this.#resourceContext,\n );\n this.#observeMessage(message);\n // The cached message is replaced, not merged, so listeners receive\n // the previous version intact alongside the new one.\n const messages = this.channels.cachedMessages(message.channelId);\n const previous = messages?.cache.peek(message.id);\n if (previous) messages!.cache.set(message.id, message);\n this.emit(ClientEvent.MessageUpdate, message, previous ?? null);\n });\n this.#gateway.on(\"MESSAGE_DELETE\", (data) => {\n const payload = data as APIMessageDeleteEvent;\n const messages = this.channels.cachedMessages(payload.channel_id);\n const removed = messages?.cache.peek(payload.id);\n messages?.delete(payload.id);\n this.emit(ClientEvent.MessageDelete, payload, removed);\n });\n this.#gateway.on(\"MESSAGE_DELETE_BULK\", (data) => {\n const payload = data as APIMessageDeleteBulkEvent;\n const messages = this.channels.cachedMessages(payload.channel_id);\n const removed: Message[] = [];\n if (messages)\n for (const id of payload.ids) {\n const message = messages.cache.peek(id);\n if (message) removed.push(message);\n messages.delete(id);\n }\n this.emit(ClientEvent.MessageDeleteBulk, payload, removed);\n });\n\n // ── Reactions ────────────────────────────────────────────────────────────\n this.#gateway.on(\"MESSAGE_REACTION_ADD\", (data) =>\n this.emit(\n ClientEvent.MessageReactionAdd,\n data as APIMessageReactionEvent,\n ),\n );\n this.#gateway.on(\"MESSAGE_REACTION_REMOVE\", (data) =>\n this.emit(\n ClientEvent.MessageReactionRemove,\n data as APIMessageReactionEvent,\n ),\n );\n this.#gateway.on(\"MESSAGE_REACTION_REMOVE_ALL\", (data) =>\n this.emit(\n ClientEvent.MessageReactionRemoveAll,\n data as APIMessageDeleteEvent,\n ),\n );\n this.#gateway.on(\"MESSAGE_REACTION_REMOVE_EMOJI\", (data) =>\n this.emit(\n ClientEvent.MessageReactionRemoveEmoji,\n data as APIMessageReactionRemoveEmojiEvent,\n ),\n );\n\n // ── Polls ────────────────────────────────────────────────────────────────\n this.#gateway.on(\"MESSAGE_POLL_VOTE_ADD\", (data) =>\n this.emit(\n ClientEvent.MessagePollVoteAdd,\n data as APIMessagePollVoteEvent,\n ),\n );\n this.#gateway.on(\"MESSAGE_POLL_VOTE_REMOVE\", (data) =>\n this.emit(\n ClientEvent.MessagePollVoteRemove,\n data as APIMessagePollVoteEvent,\n ),\n );\n }\n\n /** Guilds, members, bans and roles. */\n #wireGuilds(): void {\n // ── Guilds ───────────────────────────────────────────────────────────────\n this.#gateway.on(\"GUILD_CREATE\", (data) => {\n const payload = data as APIGuild & {\n members?: APIGuildMember[];\n voice_states?: APIVoiceState[];\n channels?: APIChannel[];\n threads?: APIChannel[];\n unavailable?: boolean;\n };\n if (payload.unavailable) {\n this.emit(ClientEvent.GuildUnavailable, payload);\n return;\n }\n // A guild already in cache that arrives again (e.g. after an outage\n // or gateway resume) has become *available* rather than newly joined.\n // Mirrors Discord.js' guildAvailable vs. guildCreate distinction.\n const wasCached = this.guilds.has(payload.id);\n this.guilds.patch(payload);\n for (const role of payload.roles ?? [])\n this.#upsertRole(payload.id, role);\n if (this.#cache.emojis) {\n const emojis = this.guilds.emojis(payload.id);\n for (const emoji of payload.emojis ?? []) emojis.upsert(emoji);\n }\n for (const member of payload.members ?? [])\n this.#upsertMember(payload.id, member);\n for (const state of payload.voice_states ?? [])\n this.#storeVoiceState(payload.id, state);\n // Channels in GUILD_CREATE omit guild_id; restore it so the\n // channel can be cleaned up with its guild.\n for (const channelData of [\n ...(payload.channels ?? []),\n ...(payload.threads ?? []),\n ])\n this.channels.upsert({ ...channelData, guild_id: payload.id });\n this.emit(\n wasCached\n ? ClientEvent.GuildAvailable\n : ClientEvent.GuildCreate,\n payload,\n );\n });\n this.#gateway.on(\"GUILD_UPDATE\", (data) => {\n const payload = data as APIGuild;\n const cached = this.guilds.get(payload.id);\n const previous = cached ? this.#snapshot(cached) : null;\n this.guilds.patch(payload);\n this.emit(ClientEvent.GuildUpdate, payload, previous);\n });\n this.#gateway.on(\"GUILD_DELETE\", (data) => {\n const payload = data as { id: string; unavailable?: boolean };\n if (payload.unavailable) {\n this.emit(ClientEvent.GuildUnavailable, payload);\n return;\n }\n this.guilds.delete(payload.id);\n this.channels.deleteGuildChannels(payload.id);\n this.emit(ClientEvent.GuildDelete, payload);\n });\n\n // ── Guild Members ────────────────────────────────────────────────────────\n this.#gateway.on(\"GUILD_MEMBER_ADD\", (data) => {\n const member = data as GuildMemberEvent;\n this.#upsertMember(member.guild_id, member);\n this.emit(ClientEvent.GuildMemberAdd, member);\n });\n this.#gateway.on(\"GUILD_MEMBER_UPDATE\", (data) => {\n const member = data as GuildMemberEvent;\n const cached = this.#cache.members\n ? this.guilds.members(member.guild_id).get(member.user.id)\n : undefined;\n // A fresh instance keeps the client context (a private field).\n const previous = cached\n ? this.#snapshot(\n cached,\n new GuildMember(\n { user: member.user, guild_id: member.guild_id },\n this.#resourceContext,\n ),\n )\n : null;\n this.#upsertMember(member.guild_id, member);\n this.emit(ClientEvent.GuildMemberUpdate, member, previous);\n });\n this.#gateway.on(\"GUILD_MEMBER_REMOVE\", (data) => {\n const member = data as GuildMemberEvent;\n this.guilds.members(member.guild_id).delete(member.user.id);\n this.emit(ClientEvent.GuildMemberRemove, member);\n });\n this.#gateway.on(\"GUILD_MEMBERS_CHUNK\", (data) => {\n const chunk = data as APIGuildMembersChunk;\n for (const member of chunk.members)\n this.#upsertMember(chunk.guild_id, member);\n this.emit(ClientEvent.GuildMembersChunk, chunk);\n });\n\n // ── Guild Bans ───────────────────────────────────────────────────────────\n this.#gateway.on(\"GUILD_BAN_ADD\", (data) => {\n const ban = data as APIGuildBanEvent;\n const bans = this.guilds.bans(ban.guild_id);\n // Keep a reason already fetched over REST; the event carries none.\n bans.set(ban.user.id, {\n reason: bans.get(ban.user.id)?.reason ?? null,\n user: ban.user,\n });\n this.guilds.members(ban.guild_id).delete(ban.user.id);\n this.emit(ClientEvent.GuildBanAdd, ban);\n });\n this.#gateway.on(\"GUILD_BAN_REMOVE\", (data) => {\n const ban = data as APIGuildBanEvent;\n this.guilds.bans(ban.guild_id).delete(ban.user.id);\n this.emit(ClientEvent.GuildBanRemove, ban);\n });\n\n // ── Guild Roles ──────────────────────────────────────────────────────────\n this.#gateway.on(\"GUILD_ROLE_CREATE\", (data) => {\n const event = data as APIGuildRoleEvent;\n this.#upsertRole(event.guild_id, event.role);\n this.emit(ClientEvent.GuildRoleCreate, event);\n });\n this.#gateway.on(\"GUILD_ROLE_UPDATE\", (data) => {\n const event = data as APIGuildRoleEvent;\n const cached = this.#cache.roles\n ? this.guilds.roles(event.guild_id).get(event.role.id)\n : undefined;\n const previous = cached ? this.#snapshot(cached) : null;\n this.#upsertRole(event.guild_id, event.role);\n this.emit(ClientEvent.GuildRoleUpdate, event, previous);\n });\n this.#gateway.on(\"GUILD_ROLE_DELETE\", (data) => {\n const event = data as APIGuildRoleDeleteEvent;\n const roles = this.guilds.roles(event.guild_id);\n const removed = roles.get(event.role_id) ?? null;\n roles.delete(event.role_id);\n this.emit(ClientEvent.GuildRoleDelete, event, removed);\n });\n }\n\n /** Guild emojis, stickers, soundboard, monetization, integrations, scheduled events and AutoMod. */\n #wireGuildFeatures(): void {\n // ── Guild Emojis & Stickers ──────────────────────────────────────────────\n this.#gateway.on(\"GUILD_EMOJIS_UPDATE\", (data) => {\n const event = data as APIGuildEmojisUpdateEvent;\n let previous: Emoji[] | null = null;\n // The event carries the guild's full emoji list.\n if (this.#cache.emojis) {\n const emojis = this.guilds.emojis(event.guild_id);\n previous = [...emojis.cache.values()].map((emoji) =>\n this.#snapshot(emoji),\n );\n const current = new Set(event.emojis.map((emoji) => emoji.id));\n for (const id of [...emojis.cache.keys()])\n if (!current.has(id)) emojis.delete(id);\n for (const emoji of event.emojis) emojis.upsert(emoji);\n }\n this.emit(ClientEvent.GuildEmojisUpdate, event, previous);\n });\n this.#gateway.on(\"GUILD_STICKERS_UPDATE\", (data) => {\n const event = data as APIGuildStickersUpdateEvent;\n // The event carries the guild's full sticker list. `sync` replaces\n // the raw objects, so the previous list needs no copying.\n const stickers = this.guilds.stickers(event.guild_id);\n const previous = [...stickers.cache.values()];\n stickers.sync(event.stickers);\n this.emit(ClientEvent.GuildStickersUpdate, event, previous);\n });\n\n // ── Soundboard ───────────────────────────────────────────────────────────\n this.#gateway.on(\"GUILD_SOUNDBOARD_SOUND_CREATE\", (data) => {\n const sound = data as APISoundboardSound;\n if (sound.guild_id)\n this.guilds\n .soundboard(sound.guild_id)\n .set(sound.sound_id, sound);\n this.emit(ClientEvent.SoundboardSoundCreate, sound);\n });\n this.#gateway.on(\"GUILD_SOUNDBOARD_SOUND_UPDATE\", (data) => {\n const sound = data as APISoundboardSound;\n if (sound.guild_id)\n this.guilds\n .soundboard(sound.guild_id)\n .set(sound.sound_id, sound);\n this.emit(ClientEvent.SoundboardSoundUpdate, sound);\n });\n this.#gateway.on(\"GUILD_SOUNDBOARD_SOUND_DELETE\", (data) => {\n const event = data as { sound_id: string; guild_id: string };\n this.guilds.soundboard(event.guild_id).delete(event.sound_id);\n this.emit(ClientEvent.SoundboardSoundDelete, event);\n });\n this.#gateway.on(\"GUILD_SOUNDBOARD_SOUNDS_UPDATE\", (data) => {\n const event = data as {\n guild_id: string;\n soundboard_sounds: APISoundboardSound[];\n };\n const sounds = this.guilds.soundboard(event.guild_id);\n sounds.clear();\n for (const sound of event.soundboard_sounds)\n sounds.set(sound.sound_id, sound);\n this.emit(ClientEvent.SoundboardSoundsUpdate, event);\n });\n\n // ── Monetization ─────────────────────────────────────────────────────────\n this.#gateway.on(\"ENTITLEMENT_CREATE\", (data) => {\n const entitlement = data as APIEntitlement;\n this.monetization?.set(entitlement.id, entitlement);\n this.emit(ClientEvent.EntitlementCreate, entitlement);\n });\n this.#gateway.on(\"ENTITLEMENT_UPDATE\", (data) => {\n const entitlement = data as APIEntitlement;\n this.monetization?.set(entitlement.id, entitlement);\n this.emit(ClientEvent.EntitlementUpdate, entitlement);\n });\n this.#gateway.on(\"ENTITLEMENT_DELETE\", (data) => {\n const entitlement = data as APIEntitlement;\n this.monetization?.delete(entitlement.id);\n this.emit(ClientEvent.EntitlementDelete, entitlement);\n });\n\n // ── Guild Integrations ───────────────────────────────────────────────────\n this.#gateway.on(\"GUILD_INTEGRATIONS_UPDATE\", (data) =>\n this.emit(\n ClientEvent.GuildIntegrationsUpdate,\n data as { guild_id: string },\n ),\n );\n\n // ── Guild Scheduled Events ───────────────────────────────────────────────\n this.#gateway.on(\"GUILD_SCHEDULED_EVENT_CREATE\", (data) => {\n const event = data as APIGuildScheduledEvent;\n this.guilds.scheduledEvents(event.guild_id).set(event.id, event);\n this.emit(ClientEvent.GuildScheduledEventCreate, event);\n });\n this.#gateway.on(\"GUILD_SCHEDULED_EVENT_UPDATE\", (data) => {\n const event = data as APIGuildScheduledEvent;\n const events = this.guilds.scheduledEvents(event.guild_id);\n const previous = events.get(event.id) ?? null;\n events.set(event.id, event);\n this.emit(ClientEvent.GuildScheduledEventUpdate, event, previous);\n });\n this.#gateway.on(\"GUILD_SCHEDULED_EVENT_DELETE\", (data) => {\n const event = data as APIGuildScheduledEvent;\n this.guilds.scheduledEvents(event.guild_id).delete(event.id);\n this.emit(ClientEvent.GuildScheduledEventDelete, event);\n });\n this.#gateway.on(\"GUILD_SCHEDULED_EVENT_USER_ADD\", (data) =>\n this.emit(\n ClientEvent.GuildScheduledEventUserAdd,\n data as APIGuildScheduledEventUserEvent,\n ),\n );\n this.#gateway.on(\"GUILD_SCHEDULED_EVENT_USER_REMOVE\", (data) =>\n this.emit(\n ClientEvent.GuildScheduledEventUserRemove,\n data as APIGuildScheduledEventUserEvent,\n ),\n );\n\n // ── AutoMod ──────────────────────────────────────────────────────────────\n this.#gateway.on(\"AUTO_MODERATION_RULE_CREATE\", (data) => {\n const rule = data as APIAutoModerationRule;\n this.guilds.autoModerationRules(rule.guild_id).set(rule.id, rule);\n this.emit(ClientEvent.AutoModerationRuleCreate, rule);\n });\n this.#gateway.on(\"AUTO_MODERATION_RULE_UPDATE\", (data) => {\n const rule = data as APIAutoModerationRule;\n const rules = this.guilds.autoModerationRules(rule.guild_id);\n const previous = rules.get(rule.id) ?? null;\n rules.set(rule.id, rule);\n this.emit(ClientEvent.AutoModerationRuleUpdate, rule, previous);\n });\n this.#gateway.on(\"AUTO_MODERATION_RULE_DELETE\", (data) => {\n const rule = data as APIAutoModerationRule;\n this.guilds.autoModerationRules(rule.guild_id).delete(rule.id);\n this.emit(ClientEvent.AutoModerationRuleDelete, rule);\n });\n this.#gateway.on(\"AUTO_MODERATION_ACTION_EXECUTION\", (data) =>\n this.emit(\n ClientEvent.AutoModerationActionExecution,\n data as APIAutoModerationActionExecution,\n ),\n );\n }\n\n /** Channels, threads, stage instances, invites and webhooks. */\n #wireChannels(): void {\n // ── Channels ─────────────────────────────────────────────────────────────\n this.#gateway.on(\"CHANNEL_CREATE\", (data) => {\n const channel = this.channels.upsert(data as APIChannel);\n this.emit(ClientEvent.ChannelCreate, channel);\n });\n this.#gateway.on(\"CHANNEL_UPDATE\", (data) => {\n const previous = this.#previousChannel(data as APIChannel);\n const channel = this.channels.upsert(data as APIChannel);\n this.emit(ClientEvent.ChannelUpdate, channel, previous);\n });\n this.#gateway.on(\"CHANNEL_DELETE\", (data) => {\n const payload = data as APIChannel;\n const removed = this.channels.get(payload.id) ?? null;\n this.channels.delete(payload.id);\n this.emit(ClientEvent.ChannelDelete, payload, removed);\n });\n this.#gateway.on(\"CHANNEL_PINS_UPDATE\", (data) =>\n this.emit(\n ClientEvent.ChannelPinsUpdate,\n data as APIChannelPinsUpdate,\n ),\n );\n\n // ── Threads ──────────────────────────────────────────────────────────────\n this.#gateway.on(\"THREAD_CREATE\", (data) => {\n const channel = this.channels.upsert(data as APIThreadEvent);\n this.emit(ClientEvent.ThreadCreate, channel);\n });\n this.#gateway.on(\"THREAD_UPDATE\", (data) => {\n const previous = this.#previousChannel(data as APIThreadEvent);\n const channel = this.channels.upsert(data as APIThreadEvent);\n this.emit(ClientEvent.ThreadUpdate, channel, previous);\n });\n this.#gateway.on(\"THREAD_DELETE\", (data) => {\n const payload = data as APIThreadEvent;\n const removed = this.channels.get(payload.id) ?? null;\n this.channels.delete(payload.id);\n this.emit(ClientEvent.ThreadDelete, payload, removed);\n });\n this.#gateway.on(\"THREAD_LIST_SYNC\", (data) => {\n const sync = data as APIThreadListSync;\n for (const thread of sync.threads)\n this.channels.upsert({ ...thread, guild_id: sync.guild_id });\n this.emit(ClientEvent.ThreadListSync, sync);\n });\n this.#gateway.on(\"THREAD_MEMBERS_UPDATE\", (data) =>\n this.emit(\n ClientEvent.ThreadMembersUpdate,\n data as APIThreadMembersUpdate,\n ),\n );\n this.#gateway.on(\"THREAD_MEMBER_UPDATE\", (data) =>\n this.emit(\n ClientEvent.ThreadMemberUpdate,\n data as import(\"@lunibee/types\").APIThreadMember,\n ),\n );\n\n // ── Stage Instances ──────────────────────────────────────────────────────\n this.#gateway.on(\"STAGE_INSTANCE_CREATE\", (data) => {\n const stage = data as APIStageInstance;\n this.stageInstances.set(stage.channel_id, stage);\n this.emit(ClientEvent.StageInstanceCreate, stage);\n });\n this.#gateway.on(\"STAGE_INSTANCE_UPDATE\", (data) => {\n const stage = data as APIStageInstance;\n const previous = this.stageInstances.get(stage.channel_id) ?? null;\n this.stageInstances.set(stage.channel_id, stage);\n this.emit(ClientEvent.StageInstanceUpdate, stage, previous);\n });\n this.#gateway.on(\"STAGE_INSTANCE_DELETE\", (data) => {\n const stage = data as APIStageInstance;\n this.stageInstances.delete(stage.channel_id);\n this.emit(ClientEvent.StageInstanceDelete, stage);\n });\n\n // ── Invites ──────────────────────────────────────────────────────────────\n this.#gateway.on(\"INVITE_CREATE\", (data) => {\n const invite = data as APIInviteCreate;\n if (invite.guild_id)\n this.guilds.invites(invite.guild_id).set(invite.code, invite);\n this.emit(ClientEvent.InviteCreate, invite);\n });\n this.#gateway.on(\"INVITE_DELETE\", (data) => {\n const invite = data as APIInviteDelete;\n if (invite.guild_id)\n this.guilds.invites(invite.guild_id).delete(invite.code);\n this.emit(ClientEvent.InviteDelete, invite);\n });\n\n // ── Webhooks ─────────────────────────────────────────────────────────────\n this.#gateway.on(\"WEBHOOKS_UPDATE\", (data) =>\n this.emit(ClientEvent.WebhooksUpdate, data as APIWebhooksUpdate),\n );\n }\n\n /** Voice, presence, typing, interactions, raw frames and errors. */\n #wireMisc(): void {\n // ── Voice ────────────────────────────────────────────────────────────────\n this.#gateway.on(\"VOICE_STATE_UPDATE\", (data) => {\n const state = data as APIVoiceState;\n const previous = state.guild_id\n ? (this.guilds.voiceStates(state.guild_id).get(state.user_id) ??\n null)\n : null;\n if (state.guild_id) this.#storeVoiceState(state.guild_id, state);\n this.emit(ClientEvent.VoiceStateUpdate, state, previous);\n });\n this.#gateway.on(\"VOICE_SERVER_UPDATE\", (data) =>\n this.emit(\n ClientEvent.VoiceServerUpdate,\n data as APIVoiceServerUpdate,\n ),\n );\n\n // ── Presence & Typing ────────────────────────────────────────────────────\n this.#gateway.on(\"PRESENCE_UPDATE\", (data) => {\n const presence = data as APIPresenceUpdate;\n let previous: APIPresenceUpdate | null = null;\n if (this.#cache.presences && presence.guild_id) {\n const presences = this.guilds.presences(presence.guild_id);\n previous = presences.get(presence.user.id) ?? null;\n presences.set(presence.user.id, presence);\n }\n this.emit(ClientEvent.PresenceUpdate, presence, previous);\n });\n this.#gateway.on(\"TYPING_START\", (data) =>\n this.emit(ClientEvent.TypingStart, data as APITypingStart),\n );\n\n // ── Interactions ─────────────────────────────────────────────────────────\n this.#gateway.on(\"INTERACTION_CREATE\", (data) =>\n this.emit(\n ClientEvent.InteractionCreate,\n createInteraction(this, data as InteractionData),\n ),\n );\n\n // ── Raw / Error ───────────────────────────────────────────────────────────\n this.#gateway.on(\"RAW\", (data) =>\n this.emit(\n ClientEvent.Raw,\n data as { event: string; data: unknown },\n ),\n );\n this.#gateway.on(\"error\", (error) =>\n this.emit(ClientEvent.Error, error as Error),\n );\n }\n\n /**\n * Convenience method to connect the bot to Discord.\n * Optionally overrides the configured token.\n * @param token Optional token override.\n * @returns The token used to log in.\n * @throws {TypeError} If the resulting token is empty.\n */\n /** Caches a message's author, and its channel only when none is cached: the\n * message carries a stub channel that must not overwrite a full one. */\n #observeMessage(message: Message): void {\n if (!this.channels.has(message.channelId))\n this.channels.set(message.channelId, message.channel);\n if (this.#cache.users)\n this.#merge(this.users, message.author.id, message.author);\n }\n\n #upsertMember(guildId: string, data: APIGuildMember): GuildMember {\n const member = new GuildMember(\n { ...data, guild_id: guildId },\n this.#resourceContext,\n );\n if (this.#cache.users)\n this.#merge(this.users, member.user.id, member.user);\n if (!this.#cache.members) return member;\n return this.#merge(\n this.guilds.members(guildId),\n member.user.id,\n member,\n );\n }\n\n /** A voice state without a channel means the user left voice. */\n #storeVoiceState(guildId: string, state: APIVoiceState): void {\n const states = this.guilds.voiceStates(guildId);\n if (state.channel_id) states.set(state.user_id, state);\n else states.delete(state.user_id);\n }\n\n #upsertRole(guildId: string, data: APIRole): Role {\n if (!this.#cache.roles) return new Role(data);\n return this.#merge(this.guilds.roles(guildId), data.id, new Role(data));\n }\n\n /**\n * Copies a cached structure's fields before an in-place merge changes them.\n * Pass `blank` (a fresh instance of the same class) when the class has\n * private fields, so the copy keeps them.\n */\n #snapshot<T extends object>(\n cached: T,\n blank: T = Object.create(Object.getPrototypeOf(cached)) as T,\n ): T {\n return Object.assign(blank, cached);\n }\n\n /** A copy of the cached channel an update is about to change, or null. */\n #previousChannel(data: APIChannel): Channel | null {\n const cached = this.channels.get(data.id);\n if (!cached) return null;\n // Channel keeps its client context in a private field; build the copy\n // through the same factory so it keeps the subclass and the context.\n return this.#snapshot(\n cached,\n createChannel(\n { id: cached.id, type: cached.type, guild_id: cached.guildId },\n this.#resourceContext,\n ),\n );\n }\n\n /** Merges `next` into the cached instance so references stay valid.\n * Fields a partial payload left undefined keep their cached value. */\n #merge<T extends object>(\n manager: {\n get(id: string): T | undefined;\n set(id: string, value: T): unknown;\n },\n id: string,\n next: T,\n ): T {\n const existing = manager.get(id);\n if (!existing) {\n manager.set(id, next);\n return next;\n }\n for (const [key, value] of Object.entries(next))\n if (value !== undefined)\n (existing as Record<string, unknown>)[key] = value;\n return existing;\n }\n\n /**\n * Collects the first argument of a client event until a limit, timeout,\n * idle timeout, abort or `stop()`. The collector unsubscribes itself when\n * it ends. Items are keyed by `options.key`, else their `id`, else order.\n */\n public createCollector<E extends keyof ClientEvents>(\n event: E,\n options: CollectorOptions<ClientEvents[E][0]> & {\n key?: (item: ClientEvents[E][0]) => string;\n } = {},\n ): Collector<string, ClientEvents[E][0]> {\n const collector = new Collector<string, ClientEvents[E][0]>(options);\n let order = 0;\n const listener = (...args: ClientEvents[E]): void => {\n const item = args[0];\n const id = (item as { id?: unknown } | null | undefined)?.id;\n const key =\n options.key?.(item) ??\n (typeof id === \"string\" ? id : String(order++));\n collector\n .handle(key, item)\n .catch((error: unknown) =>\n this.emit(\n ClientEvent.Error,\n error instanceof Error\n ? error\n : new Error(String(error)),\n ),\n );\n };\n this.on(event, listener);\n collector.onDispose(() => this.off(event, listener));\n return collector;\n }\n\n /**\n * Names a guild by id. The handle reads it (`peek()` from the cache, `get()`\n * from the cache or Discord, `fetch()` from Discord) and acts on it.\n */\n public guild(id: string): GuildHandle {\n return new GuildHandle(this, id);\n }\n /** Names a channel by id; see {@link Client.guild} for the read methods. */\n public channel(id: string): ChannelHandle {\n return new ChannelHandle(this, id);\n }\n /**\n * Names a user by id; see {@link Client.guild} for the read methods.\n * (`bot.user` is the bot's own account, hence the different name.)\n */\n public person(id: string): UserHandle {\n return new UserHandle(this, id);\n }\n /** Names a guild member by guild id and user id. */\n public member(guildId: string, userId: string): MemberHandle {\n return new MemberHandle(this, guildId, userId);\n }\n /** Names a role by guild id and role id. */\n public role(guildId: string, roleId: string): RoleHandle {\n return new RoleHandle(this, guildId, roleId);\n }\n /** Names a message by channel id and message id. */\n public message(channelId: string, messageId: string): MessageHandle {\n return new MessageHandle(this, channelId, messageId);\n }\n\n /** Structures built by this client (members from interactions...) act through this. */\n public get resourceContext(): ResourceContext {\n return this.#resourceContext;\n }\n\n /** Guild- or channel-level permissions from a member's role IDs and the cached roles and overwrites. */\n #memberPermissions(\n guildId: string,\n memberId: string,\n roleIds: readonly string[],\n channelId?: string,\n timedOutUntil?: Date | null,\n ): PermissionSet | null {\n const guild = this.guilds.get(guildId);\n if (!guild) return null;\n let channel = channelId ? this.channels.get(channelId) : undefined;\n if (channelId) {\n // Threads use their parent's overwrites; without it the answer is unknown.\n if (channel?.isThread())\n channel = channel.parentId\n ? this.channels.get(channel.parentId)\n : undefined;\n if (!channel || channel.guildId !== guildId) return null;\n }\n return computePermissions({\n guildId,\n ownerId: guild.ownerId,\n memberId,\n memberRoleIds: [...roleIds],\n roles: this.guilds.roles(guildId).values(),\n overwrites: channel?.permissionOverwrites,\n timedOutUntil,\n });\n }\n\n /**\n * Resolves a member's permissions from cached state: guild-level for a\n * guild ID, or channel-level (including overwrites) for a cached channel\n * ID. Returns null when the guild or member is not cached.\n */\n public permissionsFor(\n memberId: string,\n guildOrChannelId: string,\n ): PermissionSet | null {\n let channel = this.channels.get(guildOrChannelId);\n // Threads have no overwrites of their own: they use the parent's.\n // Without a cached parent the answer would be guild-level only, which\n // could wrongly grant access, so report it as unknown instead.\n if (channel?.isThread()) {\n channel = channel.parentId\n ? this.channels.get(channel.parentId)\n : undefined;\n if (!channel) return null;\n }\n const guildId = channel?.guildId ?? guildOrChannelId;\n const guild = this.guilds.get(guildId);\n const member = this.guilds.members(guildId).get(memberId);\n if (!guild || !member) return null;\n return computePermissions({\n guildId,\n ownerId: guild.ownerId,\n memberId,\n memberRoleIds: member.roleIds,\n roles: this.guilds.roles(guildId).values(),\n overwrites: channel?.permissionOverwrites,\n timedOutUntil: member.timedOutUntil,\n });\n }\n\n /** Fetches Discord's default soundboard sounds. */\n public fetchDefaultSoundboardSounds(): Promise<APISoundboardSound[]> {\n return this.rest.get<APISoundboardSound[]>(\n Routes.soundboardDefaultSounds(),\n );\n }\n\n /**\n * Connects to the Gateway. Resolves with the token used, like discord.js;\n * do not log the return value.\n */\n public async login(token?: string): Promise<string> {\n if (this.state === \"destroyed\")\n throw new Error(\"Cannot login a destroyed client.\");\n if (token?.trim()) {\n this.rest.setToken(token);\n this.options.token = token;\n }\n const usedToken = this.options.token;\n if (!usedToken?.trim())\n throw new TypeError(\"A bot token is required to log in.\");\n this.state = \"connecting\";\n await this.#gateway.connect();\n return usedToken;\n }\n\n /**\n * Destroys the client, permanently closing the Gateway connection.\n */\n public destroy(): void {\n this.state = \"destroyed\";\n this.#gateway.close();\n }\n\n // ── InteractionClient implementation ─────────────────────────────────────\n\n public postInteractionResponse(\n id: string,\n token: string,\n response: import(\"@lunibee/structures\").InteractionResponse,\n ): Promise<unknown> {\n const json = response.toJSON();\n // `?with_response=true` makes Discord return the created message.\n const callback = response.withResponse\n ? `${Routes.interactionCallback(id, token)}?with_response=true`\n : Routes.interactionCallback(id, token);\n // Only message responses (4 reply, 7 update) carry mentions; a modal or a deferral does not.\n const carriesMessage = json.type === 4 || json.type === 7;\n // Files in the reply turn the callback into an upload.\n const upload = json.data\n ? toRequest(\n json.data,\n carriesMessage ? this.options.allowedMentions : undefined,\n )\n : undefined;\n if (upload && typeof upload === \"object\" && \"files\" in upload) {\n const { body, files } = upload as { body: unknown; files: never[] };\n return this.rest.post(callback, {\n body: { ...json, data: body },\n files,\n });\n }\n return this.rest.post(\n callback,\n upload === undefined ? json : { ...json, data: upload },\n );\n }\n public editInteractionReply(\n token: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n if (!this.user)\n return Promise.reject(new Error(\"Client is unauthenticated.\"));\n return this.rest.patch(\n Routes.interactionOriginalResponse(this.user.id, token),\n toRequest(data, this.options.allowedMentions),\n );\n }\n public deleteInteractionReply(token: string): Promise<void> {\n if (!this.user)\n return Promise.reject(new Error(\"Client is unauthenticated.\"));\n return this.rest.delete(\n Routes.interactionOriginalResponse(this.user.id, token),\n );\n }\n public async followUpInteraction(\n token: string,\n data: Record<string, unknown>,\n ): Promise<unknown> {\n if (!this.user)\n return Promise.reject(new Error(\"Client is unauthenticated.\"));\n return this.rest.post(\n Routes.webhook(this.user.id, token),\n toRequest(data, this.options.allowedMentions),\n );\n }\n public interactionWebhookMessage(\n method: \"GET\" | \"PATCH\" | \"DELETE\",\n applicationId: string,\n token: string,\n messageId: string,\n data?: Record<string, unknown>,\n ): Promise<unknown> {\n const path =\n messageId === \"@original\"\n ? Routes.interactionOriginalResponse(applicationId, token)\n : Routes.webhookMessage(applicationId, token, messageId);\n if (method === \"GET\") return this.rest.get(path);\n if (method === \"PATCH\")\n return this.rest.patch(\n path,\n data ? toRequest(data, this.options.allowedMentions) : data,\n );\n return this.rest.delete(path);\n }\n\n // ── Client Utilities ─────────────────────────────────────────────────────\n\n /** Fetches a webhook from Discord. */\n public async fetchWebhook(\n id: string,\n token?: string,\n ): Promise<Record<string, unknown>> {\n return this.rest.get(Routes.webhook(id, token)) as Promise<\n Record<string, unknown>\n >;\n }\n\n /** Fetches a guild preview from Discord. */\n public async fetchGuildPreview(\n guildId: string,\n ): Promise<Record<string, unknown>> {\n return this.rest.get(Routes.guildPreview(guildId)) as Promise<\n Record<string, unknown>\n >;\n }\n\n /** Fetches the voice regions from Discord. */\n public fetchVoiceRegions(): Promise<Record<string, unknown>[]> {\n return this.rest.get(\"/voice/regions\") as Promise<\n Record<string, unknown>[]\n >;\n }\n\n /** Fetches an invite from Discord. */\n public fetchInvite(\n code: string,\n options?: {\n withCounts?: boolean;\n guildScheduledEventId?: string;\n },\n ): Promise<Record<string, unknown>> {\n const query = new URLSearchParams();\n if (options?.withCounts) query.set(\"with_counts\", \"true\");\n if (options?.guildScheduledEventId)\n query.set(\n \"guild_scheduled_event_id\",\n options.guildScheduledEventId,\n );\n const qs = query.toString();\n return this.rest.get(\n `/invites/${encodeURIComponent(code)}${qs ? `?${qs}` : \"\"}`,\n ) as Promise<Record<string, unknown>>;\n }\n\n /** Fetches a sticker from Discord. */\n public async fetchSticker(id: string): Promise<Record<string, unknown>> {\n return this.rest.get(Routes.sticker(id)) as Promise<\n Record<string, unknown>\n >;\n }\n\n /** Fetches premium sticker packs from Discord. */\n public fetchPremiumStickerPacks(): Promise<Record<string, unknown>> {\n return this.rest.get(Routes.stickerPacks()) as Promise<\n Record<string, unknown>\n >;\n }\n\n /** Fetches a guild template from Discord. */\n public fetchGuildTemplate(code: string): Promise<Record<string, unknown>> {\n return this.rest.get(\n `/guilds/templates/${encodeURIComponent(code)}`,\n ) as Promise<Record<string, unknown>>;\n }\n\n /** Generates an invite link for this client. */\n public generateInvite(options?: {\n scopes?: string[];\n permissions?: string | bigint;\n }): string {\n if (!this.user)\n throw new Error(\"Client must be ready to generate invite.\");\n const params = new URLSearchParams({\n client_id: this.user.id,\n scope: (options?.scopes ?? [\"bot\"]).join(\" \"),\n });\n if (options?.permissions) {\n params.set(\"permissions\", String(options.permissions));\n }\n return `https://discord.com/api/oauth2/authorize?${params.toString()}`;\n }\n}\n",
69
69
  "// ─── Mentions ──────────────────────────────────────────────────────────────────\n\n/** Creates a user mention from a Discord snowflake. */\nexport function userMention(id: string): string {\n return `<@${validateSnowflake(id, \"User ID\")}>`;\n}\n\n/** Creates a channel mention from a Discord snowflake. */\nexport function channelMention(id: string): string {\n return `<#${validateSnowflake(id, \"Channel ID\")}>`;\n}\n\n/** Creates a role mention from a Discord snowflake. */\nexport function roleMention(id: string): string {\n return `<@&${validateSnowflake(id, \"Role ID\")}>`;\n}\n\n// ─── Timestamps ────────────────────────────────────────────────────────────────\n\n/** Discord timestamp style formats. */\nexport type TimestampStyle = \"t\" | \"T\" | \"d\" | \"D\" | \"f\" | \"F\" | \"R\";\n\n/** Creates a Discord timestamp tag.\n * @param unixSeconds Unix timestamp in seconds.\n * @param style Optional display style: t=short time, T=long time, d=short date, D=long date, f=short datetime, F=long datetime, R=relative.\n */\nexport function timestamp(\n unixSeconds: number,\n style?: TimestampStyle | string,\n): string {\n if (!Number.isFinite(unixSeconds))\n throw new TypeError(\"Timestamp must be a finite Unix timestamp.\");\n if (style !== undefined && !/^[tTdDfFR]$/.test(style))\n throw new RangeError(\"Invalid Discord timestamp style.\");\n return `<t:${Math.floor(unixSeconds)}${style ? `:${style}` : \"\"}>`;\n}\n\n// ─── Markdown ─────────────────────────────────────────────────────────────────\n\n/** Wraps text in Discord bold markdown. */\nexport function bold(text: string): string {\n return `**${text}**`;\n}\n\n/** Wraps text in Discord italic markdown. */\nexport function italic(text: string): string {\n return `_${text}_`;\n}\n\n/** Wraps text in Discord underline markdown. */\nexport function underline(text: string): string {\n return `__${text}__`;\n}\n\n/** Wraps text in Discord strikethrough markdown. */\nexport function strikethrough(text: string): string {\n return `~~${text}~~`;\n}\n\n/** Wraps text in a Discord spoiler tag (shown masked until clicked). */\nexport function spoiler(text: string): string {\n return `||${text}||`;\n}\n\n/** Alias for spoiler — hides text until revealed. */\nexport function masked(text: string): string {\n return spoiler(text);\n}\n\n/** Wraps text in Discord inline code. */\nexport function inlineCode(text: string): string {\n return `\\`${text}\\``;\n}\n\n/** Wraps text in a Discord fenced code block.\n * @param text Code content.\n * @param language Optional language identifier for syntax highlighting.\n */\nexport function codeBlock(text: string, language = \"\"): string {\n // A zero-width space between backticks keeps the text from closing the block.\n const safe = text.replace(/```/g, \"`\\u200b``\");\n const lang = language.replace(/[^\\w+#.-]/g, \"\");\n return `\\`\\`\\`${lang}\\n${safe}\\n\\`\\`\\``;\n}\n\n/** Creates a Discord masked hyperlink: [label](url).\n * @param label Display text.\n * @param url Destination URL.\n * @param title Optional hover title.\n */\nexport function link(label: string, url: string, title?: string): string {\n // Brackets in the label and parentheses, quotes or spaces in the URL would\n // otherwise end the link early and let the rest render as a second link.\n const text = label.replace(/[[\\]\\\\]/g, \"\\\\$&\").replace(/\\n/g, \" \");\n const target = url.replace(\n /[()\\s\"]/g,\n (c) =>\n `%${c.charCodeAt(0).toString(16).toUpperCase().padStart(2, \"0\")}`,\n );\n const titlePart = title ? ` \"${title.replace(/[\"\\n]/g, \"\")}\"` : \"\";\n return `[${text}](${target}${titlePart})`;\n}\n\n/** Wraps each line of text in a Discord block quote (> prefix). */\nexport function blockQuote(text: string): string {\n return text\n .split(\"\\n\")\n .map((line) => `> ${line}`)\n .join(\"\\n\");\n}\n\n/** Creates a Discord heading at the given level (1–3). */\nexport function heading(text: string, level: 1 | 2 | 3 = 1): string {\n return `${\"#\".repeat(level)} ${text}`;\n}\n\n/** Wraps text in Discord's subtext markdown (-# prefix). */\nexport function subtext(text: string): string {\n return `-# ${text}`;\n}\n\n/** Creates a numbered ordered list from items. */\nexport function orderedList(...items: string[]): string {\n return items.map((item, i) => `${i + 1}. ${item}`).join(\"\\n\");\n}\n\n/** Creates an unordered bullet list from items. */\nexport function bulletList(...items: string[]): string {\n return items.map((item) => `- ${item}`).join(\"\\n\");\n}\n\n// ─── Utilities ─────────────────────────────────────────────────────────────────\n\n/** Escapes Discord markdown control characters in a string. */\nexport function escapeMarkdown(value: string): string {\n return value.replace(/[\\\\*_`~|>]/g, \"\\\\$&\");\n}\n\nfunction validateSnowflake(id: string, field: string): string {\n const len = id.length;\n if (len < 1 || len > 20) {\n throw new TypeError(`${field} must be a valid Discord snowflake.`);\n }\n for (let i = 0; i < len; i++) {\n const code = id.charCodeAt(i);\n if (code < 48 || code > 57) {\n throw new TypeError(`${field} must be a valid Discord snowflake.`);\n }\n }\n return id;\n}\n",
70
70
  "/** A typed handler registry for Lunibee events. */\nexport class HandlerRegistry<\n Events extends { [K in keyof Events]: unknown[] },\n> {\n /** Registered event handlers. */\n readonly #handlers: {\n [K in keyof Events]?: Set<(...args: Events[K]) => unknown>;\n } = {};\n /** Registers a handler for an event. @param event Event key. @param handler Handler callback. @returns This registry. */\n public on<K extends keyof Events>(\n event: K,\n handler: (...args: Events[K]) => unknown,\n ): this {\n (this.#handlers[event] ??= new Set()).add(handler);\n return this;\n }\n /** Registers a one-shot handler. @param event Event key. @param handler Handler callback. @returns This registry. */\n public once<K extends keyof Events>(\n event: K,\n handler: (...args: Events[K]) => unknown,\n ): this {\n const wrapped = (...args: Events[K]) => {\n this.off(event, wrapped);\n return handler(...args);\n };\n return this.on(event, wrapped);\n }\n /** Removes a handler. @param event Event key. @param handler Handler callback. @returns This registry. */\n public off<K extends keyof Events>(\n event: K,\n handler: (...args: Events[K]) => unknown,\n ): this {\n this.#handlers[event]?.delete(handler);\n return this;\n }\n /** Dispatches an event to registered handlers. @param event Event key. @param args Event arguments. @returns A promise fulfilled after handlers complete. */\n public async dispatch<K extends keyof Events>(\n event: K,\n ...args: Events[K]\n ): Promise<void> {\n for (const handler of this.#handlers[event] ?? [])\n await handler(...args);\n }\n /** Emits an event using the conventional emitter name. @param event Event key. @param args Event arguments. @returns A promise fulfilled after handlers complete. */\n public emit<K extends keyof Events>(\n event: K,\n ...args: Events[K]\n ): Promise<void> {\n return this.dispatch(event, ...args);\n }\n}\n",
71
- "import packageJson from \"../package.json\" with { type: \"json\" };\n\n/** `/gateway/bot` information used to pace shard startup. */\nexport interface GatewayBotInfo {\n /** Recommended shard count. */\n shards: number;\n /** IDENTIFY budget, when Discord reported it. */\n sessionStartLimit?: {\n total: number;\n remaining: number;\n /** Milliseconds until `remaining` resets. */\n resetAfter: number;\n maxConcurrency: number;\n };\n}\n\n/**\n * Asks Discord for the recommended shard count and the IDENTIFY budget.\n * @throws {Error} If the request fails or the answer is not usable.\n */\nexport async function fetchGatewayBot(token: string): Promise<GatewayBotInfo> {\n const response = await fetch(\"https://discord.com/api/v10/gateway/bot\", {\n headers: {\n Authorization: `Bot ${token}`,\n \"User-Agent\": `Lunibee/${packageJson.version}`,\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(\"Gateway discovery returned an invalid shard count.\");\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 return info;\n}\n",
71
+ "import packageJson from \"../package.json\" with { type: \"json\" };\n\n/** `/gateway/bot` information used to pace shard startup. */\nexport interface GatewayBotInfo {\n /** Recommended shard count. */\n shards: number;\n /** IDENTIFY budget, when Discord reported it. */\n sessionStartLimit?: {\n total: number;\n remaining: number;\n /** Milliseconds until `remaining` resets. */\n resetAfter: number;\n maxConcurrency: number;\n };\n}\n\n/**\n * Asks Discord for the recommended shard count and the IDENTIFY budget.\n * @throws {Error} If the request fails or the answer is not usable.\n */\nexport async function fetchGatewayBot(token: string): Promise<GatewayBotInfo> {\n const response = await fetch(\"https://discord.com/api/v10/gateway/bot\", {\n headers: {\n Authorization: `Bot ${token}`,\n \"User-Agent\": `Lunibee/${packageJson.version}`,\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(\"Gateway discovery returned an invalid shard count.\");\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 return info;\n}\n\n/** Discord's hard limit: a shard may serve at most this many guilds. */\nexport const MAX_GUILDS_PER_SHARD = 2500;\n\n/** Checks a `guildsPerShard` option. @throws {RangeError} Unless it is an integer from 1 to 2500. */\nexport function assertGuildsPerShard(value: number): void {\n if (!Number.isInteger(value) || value < 1 || value > MAX_GUILDS_PER_SHARD)\n throw new RangeError(\n `guildsPerShard must be an integer from 1 to ${MAX_GUILDS_PER_SHARD}.`,\n );\n}\n\n/** How many shards keep each at or under `guildsPerShard` guilds (at least one). */\nexport function shardsForGuilds(\n guilds: number,\n guildsPerShard: number,\n): number {\n assertGuildsPerShard(guildsPerShard);\n if (!Number.isInteger(guilds) || guilds < 0)\n throw new RangeError(\"guildCount must be a non-negative integer.\");\n return Math.max(1, Math.ceil(guilds / guildsPerShard));\n}\n\n/**\n * Asks Discord how many guilds the bot is in (`approximate_guild_count` of the application).\n * @throws {Error} If the request fails or the answer is not usable.\n */\nexport async function fetchGuildCount(token: string): Promise<number> {\n const response = await fetch(\n \"https://discord.com/api/v10/applications/@me\",\n {\n headers: {\n Authorization: `Bot ${token}`,\n \"User-Agent\": `Lunibee/${packageJson.version}`,\n },\n },\n );\n if (!response.ok)\n throw new Error(\n `Guild count discovery failed with status ${response.status}`,\n );\n const data = (await response.json()) as {\n approximate_guild_count?: unknown;\n };\n const count = data.approximate_guild_count;\n if (typeof count !== \"number\" || !Number.isInteger(count) || count < 0)\n throw new Error(\"Discord did not report a guild count.\");\n return count;\n}\n\n/**\n * The shard count to use for `\"auto\"`: Discord's recommendation, or, with\n * `guildsPerShard`, enough shards for the bot's guild count (`guildCount`, or\n * what Discord reports).\n */\nexport async function resolveShardCount(\n token: string,\n info: GatewayBotInfo,\n options: { guildsPerShard?: number; guildCount?: number },\n): Promise<number> {\n if (options.guildsPerShard === undefined) return info.shards;\n return shardsForGuilds(\n options.guildCount ?? (await fetchGuildCount(token)),\n options.guildsPerShard,\n );\n}\n",
72
+ "/**\n * What a cluster worker knows about itself. `ClusterManager` sets it through\n * environment variables; {@link readClusterContext} reads it back.\n */\nexport interface ClusterContext {\n /** This cluster's ID. */\n clusterId: number;\n /** How many clusters the deployment started. */\n clusterCount: number;\n /** Total shards in the deployment (what Discord calls `num_shards`). */\n shardCount: number;\n /** Shards this cluster owns. */\n shardIds: number[];\n /** Whether the parent hands out IDENTIFY slots for this cluster. */\n coordinatedIdentify: boolean;\n}\n\n/** Set to `1` in every process `ClusterManager` forks, so a worker can tell it is one. */\nexport const WORKER_MARKER = \"LUNIBEE_CLUSTER_WORKER\";\n\n/** Whether this process was forked by a `ClusterManager`. */\nexport function isClusterWorker(\n env: Record<string, string | undefined> = process.env,\n): boolean {\n return env[WORKER_MARKER] === \"1\";\n}\n\n/** Checks that shard IDs are unique integers in `[0, total)`. @throws {RangeError} Otherwise. */\nexport function validateShardIds(\n shardIds: readonly number[],\n total: number,\n): void {\n if (!Number.isInteger(total) || total < 1)\n throw new RangeError(\"Shard count must be a positive integer.\");\n const seen = new Set<number>();\n for (const id of shardIds) {\n if (!Number.isInteger(id) || id < 0 || id >= total)\n throw new RangeError(\n `Shard ID ${String(id)} is outside 0-${total - 1}.`,\n );\n if (seen.has(id))\n throw new RangeError(`Shard ID ${id} is listed twice.`);\n seen.add(id);\n }\n}\n\n/**\n * Splits shard IDs across clusters round-robin: the i-th ID goes to cluster\n * `i % clusterCount`. The same input always gives the same output.\n * @returns One list per cluster (some may be empty when there are more clusters than shards).\n * @throws {RangeError} If `clusterCount` is not a positive integer.\n */\nexport function allocateShards(\n shardIds: readonly number[],\n clusterCount: number,\n): number[][] {\n if (!Number.isInteger(clusterCount) || clusterCount < 1)\n throw new RangeError(\"clusterCount must be a positive integer.\");\n const chunks = Array.from({ length: clusterCount }, () => [] as number[]);\n shardIds.forEach((id, index) => chunks[index % clusterCount]!.push(id));\n return chunks;\n}\n\n/**\n * Proves an allocation covers `expected` exactly once.\n * @throws {Error} Naming the missing, duplicate or unexpected shard IDs.\n */\nexport function assertCompleteAllocation(\n chunks: readonly (readonly number[])[],\n expected: readonly number[],\n): void {\n const owners = new Map<number, number>();\n const duplicate: number[] = [];\n chunks.forEach((chunk, cluster) => {\n for (const id of chunk) {\n if (owners.has(id)) duplicate.push(id);\n owners.set(id, cluster);\n }\n });\n const want = new Set(expected);\n const missing = expected.filter((id) => !owners.has(id));\n const extra = [...owners.keys()].filter((id) => !want.has(id));\n if (duplicate.length || missing.length || extra.length)\n throw new Error(\n `Shard allocation is not exact: duplicate [${duplicate}], missing [${missing}], unexpected [${extra}].`,\n );\n}\n\nfunction parseInteger(name: string, value: string | undefined): number {\n if (value === undefined || !/^\\d+$/.test(value))\n throw new RangeError(`${name} must be a non-negative integer.`);\n return Number(value);\n}\n\n/**\n * Reads the worker contract from the environment: `CLUSTER_ID`, `CLUSTER_COUNT`,\n * `SHARD_COUNT`, `SHARD_LIST` (comma separated) and `LUNIBEE_IDENTIFY`.\n * @returns The context, or `null` when this process is not a cluster worker.\n * @throws {RangeError} If the variables are present but malformed.\n */\nexport function readClusterContext(\n env: Record<string, string | undefined> = process.env,\n): ClusterContext | null {\n if (!isClusterWorker(env)) return null;\n const shardCount = parseInteger(\"SHARD_COUNT\", env.SHARD_COUNT);\n const shardIds = (env.SHARD_LIST ?? \"\")\n .split(\",\")\n .filter((part) => part !== \"\")\n .map((part) => parseInteger(\"SHARD_LIST\", part));\n validateShardIds(shardIds, shardCount);\n return {\n clusterId: parseInteger(\"CLUSTER_ID\", env.CLUSTER_ID),\n clusterCount: parseInteger(\"CLUSTER_COUNT\", env.CLUSTER_COUNT),\n shardCount,\n shardIds,\n coordinatedIdentify: env.LUNIBEE_IDENTIFY === \"coordinated\",\n };\n}\n",
73
+ "import type { WorkerReport } from \"./health.js\";\n\n/** Marks a cluster control frame on the IPC channel, next to the shard-bus frames. */\nexport const CLUSTER_FRAME = \"__lunibeeCluster\";\n/** The `source` and reply `target` of the parent process on the shard bus. */\nexport const PARENT_ID = -1;\n/** Built-in cluster request: the worker answers with a {@link WorkerReport}. */\nexport const REQUEST_HEALTH = \"__lunibee:health\";\n/** Built-in cluster request: the worker starts the given shards (recovery). */\nexport const REQUEST_ASSIGN = \"__lunibee:assign\";\n\n/** Frames a worker sends to the parent. */\nexport type ChildFrame =\n | { kind: \"ready\"; shardIds: number[] }\n | { kind: \"identify\"; id: number; shardId: number }\n | { kind: \"identify-done\"; shardId: number }\n | { kind: \"reply\"; id: string; result?: unknown; error?: string }\n | { kind: \"health\"; report: WorkerReport };\n\n/** Frames the parent sends to a worker. */\nexport type ParentFrame =\n | { kind: \"identify-grant\"; id: number }\n | { kind: \"identify-deny\"; id: number; error: string }\n | { kind: \"request\"; id: string; type: string; data: unknown };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null;\nconst isShardId = (value: unknown): value is number =>\n typeof value === \"number\" && Number.isInteger(value) && value >= 0;\n\n/** Validates the body of a control frame from a worker; `null` when it is malformed. */\nexport function parseChildFrame(value: unknown): ChildFrame | null {\n if (!isRecord(value)) return null;\n switch (value.kind) {\n case \"ready\":\n return Array.isArray(value.shardIds) &&\n value.shardIds.every(isShardId)\n ? { kind: \"ready\", shardIds: value.shardIds }\n : null;\n case \"identify\":\n return typeof value.id === \"number\" && isShardId(value.shardId)\n ? { kind: \"identify\", id: value.id, shardId: value.shardId }\n : null;\n case \"identify-done\":\n return isShardId(value.shardId)\n ? { kind: \"identify-done\", shardId: value.shardId }\n : null;\n case \"reply\":\n return typeof value.id === \"string\" &&\n (value.error === undefined || typeof value.error === \"string\")\n ? {\n kind: \"reply\",\n id: value.id,\n ...(value.error !== undefined\n ? { error: value.error }\n : { result: value.result }),\n }\n : null;\n case \"health\":\n return isRecord(value.report) &&\n Array.isArray(value.report.shards) &&\n typeof value.report.reportedAt === \"number\"\n ? { kind: \"health\", report: value.report as never }\n : null;\n default:\n return null;\n }\n}\n\n/** Validates the body of a control frame from the parent; `null` when it is malformed. */\nexport function parseParentFrame(value: unknown): ParentFrame | null {\n if (!isRecord(value)) return null;\n switch (value.kind) {\n case \"identify-grant\":\n return typeof value.id === \"number\"\n ? { kind: \"identify-grant\", id: value.id }\n : null;\n case \"identify-deny\":\n return typeof value.id === \"number\" &&\n typeof value.error === \"string\"\n ? { kind: \"identify-deny\", id: value.id, error: value.error }\n : null;\n case \"request\":\n return typeof value.id === \"string\" &&\n typeof value.type === \"string\"\n ? {\n kind: \"request\",\n id: value.id,\n type: value.type,\n data: value.data,\n }\n : null;\n default:\n return null;\n }\n}\n",
74
+ "import { readClusterContext, type ClusterContext } from \"./context.js\";\nimport type { WorkerReport } from \"./health.js\";\nimport { CLUSTER_FRAME, parseParentFrame } from \"./protocol.js\";\n\n/** Asks for the right to IDENTIFY, and gives it back. */\nexport interface IdentifyGate {\n /** Resolves when `shardId` may IDENTIFY now. Rejects if the parent refuses or goes away. */\n acquire(shardId: number): Promise<void>;\n /** `shardId` has sent its IDENTIFY. */\n release(shardId: number): void;\n}\n\n/** The part of `process` a worker uses. */\nexport interface WorkerEndpoint {\n send?(message: unknown): unknown;\n on(event: string, listener: (...args: never[]) => void): unknown;\n off(event: string, listener: (...args: never[]) => void): unknown;\n}\n\ntype RequestHandler = (data: unknown) => unknown;\n\n/**\n * The worker side of a cluster. It tells the parent when the process is\n * ready, answers the parent's requests, and asks the parent for IDENTIFY\n * slots. `ShardManager` uses it automatically inside a cluster; use it\n * directly when you run your own Gateways.\n */\nexport class ClusterWorker {\n static #current: ClusterWorker | undefined;\n\n /** The worker of this process, or `undefined` when it was not forked by a `ClusterManager`. */\n public static current(): ClusterWorker | undefined {\n if (!ClusterWorker.#current) {\n const context = readClusterContext();\n if (context && typeof process.send === \"function\")\n ClusterWorker.#current = new ClusterWorker(\n context,\n process as unknown as WorkerEndpoint,\n );\n }\n return ClusterWorker.#current;\n }\n\n /** Forgets the process-wide worker (tests). */\n public static reset(): void {\n ClusterWorker.#current?.close();\n ClusterWorker.#current = undefined;\n }\n\n public readonly context: ClusterContext;\n readonly #endpoint: WorkerEndpoint;\n readonly #handlers = new Map<string, RequestHandler>();\n readonly #waiting = new Map<\n number,\n { resolve: () => void; reject: (error: Error) => void }\n >();\n readonly #onMessage: (frame: unknown) => void;\n readonly #onDisconnect: () => void;\n #counter = 0;\n #closed = false;\n\n public constructor(\n context: ClusterContext,\n endpoint: WorkerEndpoint = process as unknown as WorkerEndpoint,\n ) {\n if (typeof endpoint.send !== \"function\")\n throw new Error(\n \"ClusterWorker needs an IPC channel: run it in a process forked by ClusterManager.\",\n );\n this.context = context;\n this.#endpoint = endpoint;\n this.#onMessage = (frame) => this.#handle(frame);\n this.#onDisconnect = () => this.#failAll(\"The parent went away.\");\n endpoint.on(\"message\", this.#onMessage);\n endpoint.on(\"disconnect\", this.#onDisconnect);\n }\n\n /** The gate to use when the parent coordinates IDENTIFY, otherwise `undefined`. */\n public get identifyGate(): IdentifyGate | undefined {\n return this.context.coordinatedIdentify ? this.#gate : undefined;\n }\n\n readonly #gate: IdentifyGate = {\n acquire: (shardId) => {\n if (this.#closed)\n return Promise.reject(\n new Error(\"The cluster worker is closed.\"),\n );\n const id = ++this.#counter;\n return new Promise<void>((resolve, reject) => {\n this.#waiting.set(id, { resolve, reject });\n this.#send({ kind: \"identify\", id, shardId });\n });\n },\n release: (shardId) => this.#send({ kind: \"identify-done\", shardId }),\n };\n\n /** Tells the parent every shard of this process finished its handshake. */\n public ready(shardIds: readonly number[] = this.context.shardIds): void {\n this.#send({ kind: \"ready\", shardIds: [...shardIds] });\n }\n\n /** Pushes a health report to the parent without being asked. */\n public reportHealth(report: WorkerReport): void {\n this.#send({ kind: \"health\", report });\n }\n\n /**\n * Answers requests of `type` sent with `ClusterManager.requestCluster()`.\n * The return value (or thrown error) goes back to the caller.\n */\n public onRequest(type: string, handler: RequestHandler): this {\n if (!type.trim() || typeof handler !== \"function\")\n throw new TypeError(\"A request type and handler are required.\");\n this.#handlers.set(type, handler);\n return this;\n }\n\n /** Stops listening and rejects pending IDENTIFY requests. */\n public close(): void {\n this.#closed = true;\n this.#endpoint.off(\"message\", this.#onMessage);\n this.#endpoint.off(\"disconnect\", this.#onDisconnect);\n this.#failAll(\"The cluster worker closed.\");\n }\n\n #send(body: Record<string, unknown>): void {\n try {\n this.#endpoint.send!({ [CLUSTER_FRAME]: body });\n } catch (error) {\n this.#failAll(\n error instanceof Error ? error.message : String(error),\n );\n }\n }\n\n #failAll(reason: string): void {\n for (const waiter of this.#waiting.values())\n waiter.reject(new Error(reason));\n this.#waiting.clear();\n }\n\n #handle(frame: unknown): void {\n if (!frame || typeof frame !== \"object\" || !(CLUSTER_FRAME in frame))\n return;\n const parsed = parseParentFrame(\n (frame as Record<string, unknown>)[CLUSTER_FRAME],\n );\n if (!parsed) return;\n if (\n parsed.kind === \"identify-grant\" ||\n parsed.kind === \"identify-deny\"\n ) {\n const waiter = this.#waiting.get(parsed.id);\n if (!waiter) return;\n this.#waiting.delete(parsed.id);\n if (parsed.kind === \"identify-grant\") waiter.resolve();\n else waiter.reject(new Error(parsed.error));\n return;\n }\n const handler = this.#handlers.get(parsed.type);\n const id = parsed.id;\n if (!handler) {\n this.#send({\n kind: \"reply\",\n id,\n error: `No handler for \"${parsed.type}\".`,\n });\n return;\n }\n void (async () => {\n try {\n this.#send({\n kind: \"reply\",\n id,\n result: await handler(parsed.data),\n });\n } catch (error) {\n this.#send({\n kind: \"reply\",\n id,\n error:\n error instanceof Error ? error.message : String(error),\n });\n }\n })();\n }\n}\n",
72
75
  "import type { ShardMessage } from \"./bus.js\";\n\n/** Carries {@link ShardMessage}s between the processes or threads that run shards. */\nexport interface ShardBusTransport {\n /** Sends a message to the other shards. Delivery to the sender itself is not required. */\n post(message: ShardMessage): void;\n /** Listens for messages from other shards. */\n onMessage(listener: (message: ShardMessage) => void): void;\n /** Listens for the shards of a cluster that died, so pending requests to them can fail early. */\n onPeerDown?(listener: (shardIds: readonly number[]) => void): void;\n /** Stops listening and releases the channel. */\n close(): void;\n}\n\n/** One process: shards in the same process (or worker threads of it) talk over a `BroadcastChannel`. */\nexport class BroadcastChannelTransport implements ShardBusTransport {\n readonly #channel: BroadcastChannel;\n\n public constructor(name: string) {\n this.#channel = new BroadcastChannel(name);\n }\n\n public post(message: ShardMessage): void {\n this.#channel.postMessage(message);\n }\n\n public onMessage(listener: (message: ShardMessage) => void): void {\n this.#channel.addEventListener(\"message\", (event) =>\n listener(event.data as ShardMessage),\n );\n }\n\n public close(): void {\n this.#channel.close();\n }\n}\n\n/** Marks a bus message on the IPC channel, so it cannot be confused with the bot's own `process.send()` traffic. */\nexport const BUS_FRAME = \"__lunibeeBus\";\n/** Marks the parent's notice that a cluster's shards are gone. */\nexport const PEER_DOWN_FRAME = \"__lunibeePeerDown\";\n\n/** The part of `process` (or a child process handle) the IPC transport uses. */\nexport interface IpcEndpoint {\n send?(message: unknown): unknown;\n on(event: \"message\", listener: (message: unknown) => void): unknown;\n off(event: \"message\", listener: (message: unknown) => void): unknown;\n}\n\n/**\n * Forked clusters: a worker `send()`s to its parent, and the parent\n * ({@link ClusterManager}) relays to every other worker. Selected\n * automatically in a worker forked by `ClusterManager`.\n */\nexport class IpcTransport implements ShardBusTransport {\n readonly #endpoint: IpcEndpoint;\n readonly #listener: (frame: unknown) => void;\n #message?: (message: ShardMessage) => void;\n #down?: (shardIds: readonly number[]) => void;\n\n public constructor(endpoint: IpcEndpoint = process as IpcEndpoint) {\n if (typeof endpoint.send !== \"function\")\n throw new Error(\n \"IpcTransport needs an IPC channel: run the shard in a process forked by ClusterManager.\",\n );\n this.#endpoint = endpoint;\n this.#listener = (frame) => {\n const record = frame as Record<string, unknown> | null;\n if (!record || typeof record !== \"object\") return;\n if (BUS_FRAME in record)\n this.#message?.(record[BUS_FRAME] as ShardMessage);\n else if (PEER_DOWN_FRAME in record)\n this.#down?.(record[PEER_DOWN_FRAME] as number[]);\n };\n endpoint.on(\"message\", this.#listener);\n }\n\n public post(message: ShardMessage): void {\n this.#endpoint.send!({ [BUS_FRAME]: message });\n }\n\n public onMessage(listener: (message: ShardMessage) => void): void {\n this.#message = listener;\n }\n\n public onPeerDown(listener: (shardIds: readonly number[]) => void): void {\n this.#down = listener;\n }\n\n public close(): void {\n this.#endpoint.off(\"message\", this.#listener);\n }\n}\n\n/** Picks the transport for a bus: IPC inside a forked cluster, `BroadcastChannel` otherwise. */\nexport function defaultTransport(name: string): ShardBusTransport {\n if (\n process.env.LUNIBEE_SHARD_BUS === \"ipc\" &&\n typeof process.send === \"function\"\n )\n return new IpcTransport();\n return new BroadcastChannelTransport(name);\n}\n",
73
- "import { defaultTransport, type ShardBusTransport } from \"./transport.js\";\n\n/** Message envelope exchanged between Lunibee shards. */\nexport interface ShardMessage<T = unknown> {\n /** Sending shard ID. */\n source: number;\n /** Target shard ID, or null for broadcast. */\n target: number | null;\n /** Application message type. */\n type: string;\n /** Message payload. */\n data: T;\n /** Unique message ID. */\n id: string;\n /** Set on requests that expect a reply (see {@link ShardBus.request}). */\n expectsReply?: boolean;\n}\n/** A reply collected by {@link ShardBus.broadcastRequest}. */\nexport interface ShardReply<R = unknown> {\n /** Replying shard ID. */\n shardId: number;\n /** Handler result, when it succeeded. */\n result?: R;\n /** Handler error message, when it failed. */\n error?: string;\n}\n/** Internal reply envelope type. */\nconst REPLY_TYPE = \"__lunibee:reply\";\n/** Payload carried by a reply envelope. */\ntype ReplyPayload = { requestId: string; result?: unknown; error?: string };\n/** Handler invoked for shard messages. @typeParam T Message payload type. */\nexport type ShardMessageHandler<T = unknown> = (\n message: ShardMessage<T>,\n) => unknown;\n/** Listener for errors thrown or rejected by shard message handlers. */\nexport type ShardBusErrorHandler = (\n error: unknown,\n message: ShardMessage,\n) => void;\n/** Options for a {@link ShardBus}. */\nexport interface ShardBusOptions {\n /**\n * How messages travel. Defaults to IPC inside a cluster forked by\n * `ClusterManager`, and to a `BroadcastChannel` otherwise.\n */\n transport?: ShardBusTransport;\n /** Most requests waiting for a reply at once (default 10,000); more are rejected. */\n maxPending?: number;\n}\n/** Cross-shard messaging: send, broadcast, and request/reply over a {@link ShardBusTransport}. */\nexport class ShardBus {\n /** Underlying transport. */\n readonly #transport: ShardBusTransport;\n /** Most requests waiting for a reply at once. */\n readonly #maxPending: number;\n /** Message handlers by message type. */\n readonly #handlers = new Map<string, Set<ShardMessageHandler>>();\n /** Handler error listeners. */\n readonly #errorHandlers = new Set<ShardBusErrorHandler>();\n /** Current shard ID. */\n readonly #shardId: number;\n /** Application-specific channel namespace. */\n readonly #namespace: string;\n /** BroadcastChannel name used by this bus. */\n public readonly channelName: string;\n /** Monotonic message counter. */\n #counter = 0;\n /** Reply collectors for in-flight requests, by request message ID. */\n readonly #pending = new Map<\n string,\n {\n target: number | null;\n reply: (reply: ShardReply) => void;\n fail: (error: Error) => void;\n }\n >();\n /** Creates a shard bus. @param shardId Shard ID. @param channelName Application-specific channel name. @throws {RangeError} If shard ID is invalid. @throws {TypeError} If channel name is empty. */\n public constructor(\n shardId: number,\n channelName: string,\n options: ShardBusOptions = {},\n ) {\n if (!Number.isInteger(shardId) || shardId < 0)\n throw new RangeError(\"Shard ID must be a non-negative integer.\");\n if (!channelName?.trim())\n throw new TypeError(\n \"An application-specific shard channel name is required.\",\n );\n this.#shardId = shardId;\n this.#namespace = channelName.trim();\n this.channelName = this.#namespace;\n this.#maxPending = options.maxPending ?? 10_000;\n this.#transport =\n options.transport ?? defaultTransport(this.channelName);\n this.#transport.onMessage((message) => this.#dispatch(message));\n this.#transport.onPeerDown?.((shardIds) => this.#peerDown(shardIds));\n }\n /** Registers a message handler. @param type Message type. @param handler Handler callback. @returns This bus. @throws {TypeError} If type or handler is invalid. */\n public on<T>(type: string, handler: ShardMessageHandler<T>): this {\n if (!type.trim() || typeof handler !== \"function\")\n throw new TypeError(\"Shard message type and handler are required.\");\n let handlers = this.#handlers.get(type);\n if (!handlers) this.#handlers.set(type, (handlers = new Set()));\n handlers.add(handler as ShardMessageHandler);\n return this;\n }\n /** Removes a message handler. @param type Message type. @param handler Handler callback. @returns This bus. */\n public off<T>(type: string, handler: ShardMessageHandler<T>): this {\n this.#handlers.get(type)?.delete(handler as ShardMessageHandler);\n return this;\n }\n /** Registers a listener for errors thrown or rejected by message handlers. Without one, handler errors are isolated and dropped. @param handler Error listener. @returns This bus. @throws {TypeError} If handler is invalid. */\n public onError(handler: ShardBusErrorHandler): this {\n if (typeof handler !== \"function\")\n throw new TypeError(\"Shard bus error handler is required.\");\n this.#errorHandlers.add(handler);\n return this;\n }\n /** Removes a handler error listener. @param handler Error listener. @returns This bus. */\n public offError(handler: ShardBusErrorHandler): this {\n this.#errorHandlers.delete(handler);\n return this;\n }\n /** Sends a targeted shard message. @param target Target shard ID. @param type Message type. @param data Payload. @returns Unique message ID. */\n public send<T>(target: number, type: string, data: T): string {\n if (!Number.isInteger(target) || target < 0)\n throw new RangeError(\n \"Shard target must be a non-negative integer.\",\n );\n return this.#publish(target, type, data);\n }\n /** Broadcasts to all other shards. @param type Message type. @param data Payload. @returns Unique message ID. */\n public broadcast<T>(type: string, data: T): string {\n return this.#publish(null, type, data);\n }\n /**\n * Registers a handler that answers requests of `type`. Its return value (or\n * thrown error) is sent back to the requesting shard. Discord.js-familiar\n * replacement for `broadcastEval` that never evaluates received code.\n * @returns This bus.\n */\n public respond<T, R>(\n type: string,\n handler: (data: T, message: ShardMessage<T>) => R | Promise<R>,\n ): this {\n return this.on<T>(type, async (message) => {\n if (!message.expectsReply) return;\n const reply: ReplyPayload = { requestId: message.id };\n try {\n reply.result = await handler(message.data, message);\n } catch (error) {\n reply.error =\n error instanceof Error ? error.message : String(error);\n }\n this.#publish(message.source, REPLY_TYPE, reply);\n });\n }\n /**\n * Sends a request to one shard and resolves with its handler's result.\n * @throws {Error} If the handler failed or no reply arrives in time.\n */\n public async request<R = unknown, T = unknown>(\n target: number,\n type: string,\n data: T,\n timeoutMs = 5000,\n ): Promise<R> {\n if (!Number.isInteger(target) || target < 0)\n throw new RangeError(\n \"Shard target must be a non-negative integer.\",\n );\n const [reply] = await this.#collect<R>(\n target,\n type,\n data,\n timeoutMs,\n 1,\n true,\n );\n if (!reply)\n throw new Error(\n `Shard ${target} did not reply to \"${type}\" within ${timeoutMs}ms.`,\n );\n if (reply.error !== undefined) throw new Error(reply.error);\n return reply.result as R;\n }\n /**\n * Sends a request to every other shard and collects replies until\n * `expected` have arrived or `timeoutMs` elapses (never rejects).\n */\n public broadcastRequest<R = unknown, T = unknown>(\n type: string,\n data: T,\n options: { timeoutMs?: number; expected?: number } = {},\n ): Promise<ShardReply<R>[]> {\n return this.#collect<R>(\n null,\n type,\n data,\n options.timeoutMs ?? 5000,\n options.expected ?? Number.POSITIVE_INFINITY,\n );\n }\n /** Publishes a request and gathers replies. */\n #collect<R>(\n target: number | null,\n type: string,\n data: unknown,\n timeoutMs: number,\n expected: number,\n rejectOnPeerDown = false,\n ): Promise<ShardReply<R>[]> {\n const replies: ShardReply<R>[] = [];\n if (this.#pending.size >= this.#maxPending)\n return Promise.reject(\n new Error(\n `Too many shard requests waiting for a reply (${this.#maxPending}).`,\n ),\n );\n return new Promise((resolve, reject) => {\n let requestId = \"\";\n const finish = (): void => {\n clearTimeout(timer);\n this.#pending.delete(requestId);\n resolve(replies);\n };\n const timer = setTimeout(finish, timeoutMs);\n requestId = this.#publish(target, type, data, true);\n this.#pending.set(requestId, {\n target,\n reply: (reply) => {\n replies.push(reply as ShardReply<R>);\n if (replies.length >= expected) finish();\n },\n fail: (error) => {\n if (rejectOnPeerDown) {\n clearTimeout(timer);\n this.#pending.delete(requestId);\n reject(error);\n }\n },\n });\n });\n }\n /** Closes the transport. @returns Nothing. */\n public close(): void {\n this.#transport.close();\n this.#handlers.clear();\n this.#errorHandlers.clear();\n }\n /** Publishes a message. @param target Target shard ID or null. @param type Message type. @param data Payload. @returns Unique message ID. */\n #publish<T>(\n target: number | null,\n type: string,\n data: T,\n expectsReply = false,\n ): string {\n if (!type.trim())\n throw new TypeError(\"Shard message type is required.\");\n const id = `${this.#namespace}:${this.#shardId}:${++this.#counter}`;\n this.#transport.post({\n source: this.#shardId,\n target,\n type,\n data,\n id,\n ...(expectsReply ? { expectsReply } : {}),\n } satisfies ShardMessage<T>);\n return id;\n }\n /** Routes an incoming message to matching handlers. @param message Message envelope. @returns Nothing. */\n #dispatch(message: ShardMessage): void {\n if (\n !message ||\n typeof message !== \"object\" ||\n typeof message.type !== \"string\"\n )\n return;\n if (\n message.source === this.#shardId ||\n (message.target !== null && message.target !== this.#shardId)\n )\n return;\n if (message.type === REPLY_TYPE) {\n const reply = message.data as ReplyPayload;\n this.#pending.get(reply?.requestId)?.reply({\n shardId: message.source,\n ...(reply.error !== undefined\n ? { error: reply.error }\n : { result: reply.result }),\n });\n return;\n }\n for (const handler of this.#handlers.get(message.type) ?? []) {\n try {\n const result = handler(message);\n if (\n result &&\n typeof (result as PromiseLike<unknown>).then === \"function\"\n )\n void Promise.resolve(result).catch((error) =>\n this.#reportError(error, message),\n );\n } catch (error) {\n this.#reportError(error, message);\n }\n }\n }\n /** Fails requests waiting on shards that no longer exist. */\n #peerDown(shardIds: readonly number[]): void {\n const down = new Set(shardIds);\n for (const [id, pending] of this.#pending)\n if (pending.target !== null && down.has(pending.target)) {\n pending.fail(\n new Error(\n `Shard ${pending.target} went away before it replied.`,\n ),\n );\n this.#pending.delete(id);\n }\n }\n /** Forwards a handler error to error listeners, isolating listener failures. Without a listener it is raised as a process warning, never dropped. @param error Handler error. @param message Message being handled. @returns Nothing. */\n #reportError(error: unknown, message: ShardMessage): void {\n if (this.#errorHandlers.size === 0) {\n process.emitWarning(\n error instanceof Error ? error : new Error(String(error)),\n { code: \"LUNIBEE_SHARD_BUS_ERROR\" },\n );\n return;\n }\n for (const handler of this.#errorHandlers) {\n try {\n handler(error, message);\n } catch {\n /* Error listener failures are isolated. */\n }\n }\n }\n}\n",
76
+ "import { defaultTransport, type ShardBusTransport } from \"./transport.js\";\n\n/** Message envelope exchanged between Lunibee shards. */\nexport interface ShardMessage<T = unknown> {\n /** Sending shard ID. */\n source: number;\n /** Target shard ID, or null for broadcast. */\n target: number | null;\n /** Application message type. */\n type: string;\n /** Message payload. */\n data: T;\n /** Unique message ID. */\n id: string;\n /** Set on requests that expect a reply (see {@link ShardBus.request}). */\n expectsReply?: boolean;\n}\n/** A reply collected by {@link ShardBus.broadcastRequest}. */\nexport interface ShardReply<R = unknown> {\n /** Replying shard ID. */\n shardId: number;\n /** Handler result, when it succeeded. */\n result?: R;\n /** Handler error message, when it failed. */\n error?: string;\n}\n/** Internal reply envelope type. */\nexport const REPLY_TYPE = \"__lunibee:reply\";\n/** Payload carried by a reply envelope. */\nexport type ReplyPayload = {\n requestId: string;\n result?: unknown;\n error?: string;\n};\n/** Handler invoked for shard messages. @typeParam T Message payload type. */\nexport type ShardMessageHandler<T = unknown> = (\n message: ShardMessage<T>,\n) => unknown;\n/** Listener for errors thrown or rejected by shard message handlers. */\nexport type ShardBusErrorHandler = (\n error: unknown,\n message: ShardMessage,\n) => void;\n/** Options for a {@link ShardBus}. */\nexport interface ShardBusOptions {\n /**\n * How messages travel. Defaults to IPC inside a cluster forked by\n * `ClusterManager`, and to a `BroadcastChannel` otherwise.\n */\n transport?: ShardBusTransport;\n /** Most requests waiting for a reply at once (default 10,000); more are rejected. */\n maxPending?: number;\n}\n/** Longest message type or ID a bus accepts. */\nconst MAX_NAME_LENGTH = 256;\n\n/** Checks the envelope of a message that arrived from a transport, which is untrusted input. */\nfunction isShardMessage(message: unknown): message is ShardMessage {\n if (!message || typeof message !== \"object\") return false;\n const m = message as Record<string, unknown>;\n return (\n typeof m.type === \"string\" &&\n m.type.length > 0 &&\n m.type.length <= MAX_NAME_LENGTH &&\n typeof m.id === \"string\" &&\n m.id.length <= MAX_NAME_LENGTH &&\n // -1 is the parent process (see ClusterManager.request()).\n Number.isInteger(m.source) &&\n (m.source as number) >= -1 &&\n (m.target === null ||\n (Number.isInteger(m.target) && (m.target as number) >= -1))\n );\n}\n\n/** Cross-shard messaging: send, broadcast, and request/reply over a {@link ShardBusTransport}. */\nexport class ShardBus {\n /** Underlying transport. */\n readonly #transport: ShardBusTransport;\n /** Most requests waiting for a reply at once. */\n readonly #maxPending: number;\n /** Message handlers by message type. */\n readonly #handlers = new Map<string, Set<ShardMessageHandler>>();\n /** Handler error listeners. */\n readonly #errorHandlers = new Set<ShardBusErrorHandler>();\n /** Current shard ID. */\n readonly #shardId: number;\n /** Application-specific channel namespace. */\n readonly #namespace: string;\n /** BroadcastChannel name used by this bus. */\n public readonly channelName: string;\n /** Monotonic message counter. */\n #counter = 0;\n /** Reply collectors for in-flight requests, by request message ID. */\n readonly #pending = new Map<\n string,\n {\n target: number | null;\n /** Shards that already answered; a shard counts once. */\n seen: Set<number>;\n reply: (reply: ShardReply) => void;\n fail: (error: Error) => void;\n /** Ends the wait now: a request rejects, a broadcast resolves with what it has. */\n cancel: (error: Error) => void;\n }\n >();\n #closed = false;\n /** Creates a shard bus. @param shardId Shard ID. @param channelName Application-specific channel name. @throws {RangeError} If shard ID is invalid. @throws {TypeError} If channel name is empty. */\n public constructor(\n shardId: number,\n channelName: string,\n options: ShardBusOptions = {},\n ) {\n if (!Number.isInteger(shardId) || shardId < 0)\n throw new RangeError(\"Shard ID must be a non-negative integer.\");\n if (!channelName?.trim())\n throw new TypeError(\n \"An application-specific shard channel name is required.\",\n );\n this.#shardId = shardId;\n this.#namespace = channelName.trim();\n this.channelName = this.#namespace;\n this.#maxPending = options.maxPending ?? 10_000;\n this.#transport =\n options.transport ?? defaultTransport(this.channelName);\n this.#transport.onMessage((message) => this.#dispatch(message));\n this.#transport.onPeerDown?.((shardIds) => this.#peerDown(shardIds));\n }\n /** Registers a message handler. @param type Message type. @param handler Handler callback. @returns This bus. @throws {TypeError} If type or handler is invalid. */\n public on<T>(type: string, handler: ShardMessageHandler<T>): this {\n if (!type.trim() || typeof handler !== \"function\")\n throw new TypeError(\"Shard message type and handler are required.\");\n let handlers = this.#handlers.get(type);\n if (!handlers) this.#handlers.set(type, (handlers = new Set()));\n handlers.add(handler as ShardMessageHandler);\n return this;\n }\n /** Removes a message handler. @param type Message type. @param handler Handler callback. @returns This bus. */\n public off<T>(type: string, handler: ShardMessageHandler<T>): this {\n this.#handlers.get(type)?.delete(handler as ShardMessageHandler);\n return this;\n }\n /** Registers a listener for errors thrown or rejected by message handlers. Without one, handler errors are isolated and dropped. @param handler Error listener. @returns This bus. @throws {TypeError} If handler is invalid. */\n public onError(handler: ShardBusErrorHandler): this {\n if (typeof handler !== \"function\")\n throw new TypeError(\"Shard bus error handler is required.\");\n this.#errorHandlers.add(handler);\n return this;\n }\n /** Removes a handler error listener. @param handler Error listener. @returns This bus. */\n public offError(handler: ShardBusErrorHandler): this {\n this.#errorHandlers.delete(handler);\n return this;\n }\n /** Sends a targeted shard message. @param target Target shard ID. @param type Message type. @param data Payload. @returns Unique message ID. */\n public send<T>(target: number, type: string, data: T): string {\n if (!Number.isInteger(target) || target < 0)\n throw new RangeError(\n \"Shard target must be a non-negative integer.\",\n );\n return this.#publish(target, type, data);\n }\n /** Broadcasts to all other shards. @param type Message type. @param data Payload. @returns Unique message ID. */\n public broadcast<T>(type: string, data: T): string {\n return this.#publish(null, type, data);\n }\n /**\n * Registers a handler that answers requests of `type`. Its return value (or\n * thrown error) is sent back to the requesting shard. Discord.js-familiar\n * replacement for `broadcastEval` that never evaluates received code.\n * @returns This bus.\n */\n public respond<T, R>(\n type: string,\n handler: (data: T, message: ShardMessage<T>) => R | Promise<R>,\n ): this {\n return this.on<T>(type, async (message) => {\n if (!message.expectsReply) return;\n const reply: ReplyPayload = { requestId: message.id };\n try {\n reply.result = await handler(message.data, message);\n } catch (error) {\n reply.error =\n error instanceof Error ? error.message : String(error);\n }\n this.#publish(message.source, REPLY_TYPE, reply);\n });\n }\n /**\n * Sends a request to one shard and resolves with its handler's result.\n * @throws {Error} If the handler failed or no reply arrives in time.\n */\n public async request<R = unknown, T = unknown>(\n target: number,\n type: string,\n data: T,\n timeoutMs = 5000,\n ): Promise<R> {\n if (!Number.isInteger(target) || target < 0)\n throw new RangeError(\n \"Shard target must be a non-negative integer.\",\n );\n const [reply] = await this.#collect<R>(\n target,\n type,\n data,\n timeoutMs,\n 1,\n true,\n );\n if (!reply)\n throw new Error(\n `Shard ${target} did not reply to \"${type}\" within ${timeoutMs}ms.`,\n );\n if (reply.error !== undefined) throw new Error(reply.error);\n return reply.result as R;\n }\n /**\n * Sends a request to every other shard and collects replies until\n * `expected` have arrived or `timeoutMs` elapses (never rejects).\n */\n public broadcastRequest<R = unknown, T = unknown>(\n type: string,\n data: T,\n options: { timeoutMs?: number; expected?: number } = {},\n ): Promise<ShardReply<R>[]> {\n return this.#collect<R>(\n null,\n type,\n data,\n options.timeoutMs ?? 5000,\n options.expected ?? Number.POSITIVE_INFINITY,\n );\n }\n /** Publishes a request and gathers replies. */\n #collect<R>(\n target: number | null,\n type: string,\n data: unknown,\n timeoutMs: number,\n expected: number,\n rejectOnPeerDown = false,\n ): Promise<ShardReply<R>[]> {\n const replies: ShardReply<R>[] = [];\n if (this.#closed)\n return Promise.reject(new Error(\"ShardBus is closed.\"));\n if (this.#pending.size >= this.#maxPending)\n return Promise.reject(\n new Error(\n `Too many shard requests waiting for a reply (${this.#maxPending}).`,\n ),\n );\n return new Promise((resolve, reject) => {\n let requestId = \"\";\n const finish = (): void => {\n clearTimeout(timer);\n this.#pending.delete(requestId);\n resolve(replies);\n };\n const timer = setTimeout(finish, timeoutMs);\n requestId = this.#publish(target, type, data, true);\n const fail = (error: Error): void => {\n if (!rejectOnPeerDown) return;\n clearTimeout(timer);\n this.#pending.delete(requestId);\n reject(error);\n };\n this.#pending.set(requestId, {\n target,\n seen: new Set(),\n reply: (reply) => {\n replies.push(reply as ShardReply<R>);\n if (replies.length >= expected) finish();\n },\n fail,\n cancel: (error) => (rejectOnPeerDown ? fail(error) : finish()),\n });\n });\n }\n /** Closes the transport. @returns Nothing. */\n public close(): void {\n if (this.#closed) return;\n this.#closed = true;\n // Nothing can answer once the transport is gone, so end the waits now\n // instead of leaving their timers to fire later.\n for (const pending of [...this.#pending.values()])\n pending.cancel(new Error(\"ShardBus is closed.\"));\n this.#pending.clear();\n this.#transport.close();\n this.#handlers.clear();\n this.#errorHandlers.clear();\n }\n /** Publishes a message. @param target Target shard ID or null. @param type Message type. @param data Payload. @returns Unique message ID. */\n #publish<T>(\n target: number | null,\n type: string,\n data: T,\n expectsReply = false,\n ): string {\n if (!type.trim())\n throw new TypeError(\"Shard message type is required.\");\n if (this.#closed) throw new Error(\"ShardBus is closed.\");\n const id = `${this.#namespace}:${this.#shardId}:${++this.#counter}`;\n this.#transport.post({\n source: this.#shardId,\n target,\n type,\n data,\n id,\n ...(expectsReply ? { expectsReply } : {}),\n } satisfies ShardMessage<T>);\n return id;\n }\n /** Routes an incoming message to matching handlers. @param message Message envelope. @returns Nothing. */\n #dispatch(message: ShardMessage): void {\n if (this.#closed || !isShardMessage(message)) return;\n if (\n message.source === this.#shardId ||\n (message.target !== null && message.target !== this.#shardId)\n )\n return;\n if (message.type === REPLY_TYPE) {\n const reply = message.data as ReplyPayload | null;\n if (\n !reply ||\n typeof reply !== \"object\" ||\n typeof reply.requestId !== \"string\"\n )\n return;\n const pending = this.#pending.get(reply.requestId);\n // Late, unknown and duplicate answers are dropped, and so is an\n // answer from a shard other than the one that was asked: nobody\n // can resolve a request by guessing its ID.\n if (\n !pending ||\n pending.seen.has(message.source) ||\n (pending.target !== null && pending.target !== message.source)\n )\n return;\n pending.seen.add(message.source);\n pending.reply({\n shardId: message.source,\n ...(reply.error !== undefined\n ? { error: String(reply.error) }\n : { result: reply.result }),\n });\n return;\n }\n for (const handler of this.#handlers.get(message.type) ?? []) {\n try {\n const result = handler(message);\n if (\n result &&\n typeof (result as PromiseLike<unknown>).then === \"function\"\n )\n void Promise.resolve(result).catch((error) =>\n this.#reportError(error, message),\n );\n } catch (error) {\n this.#reportError(error, message);\n }\n }\n }\n /** Fails requests waiting on shards that no longer exist. */\n #peerDown(shardIds: readonly number[]): void {\n const down = new Set(shardIds);\n for (const [id, pending] of this.#pending)\n if (pending.target !== null && down.has(pending.target)) {\n pending.fail(\n new Error(\n `Shard ${pending.target} went away before it replied.`,\n ),\n );\n this.#pending.delete(id);\n }\n }\n /** Forwards a handler error to error listeners, isolating listener failures. Without a listener it is raised as a process warning, never dropped. @param error Handler error. @param message Message being handled. @returns Nothing. */\n #reportError(error: unknown, message: ShardMessage): void {\n if (this.#errorHandlers.size === 0) {\n process.emitWarning(\n error instanceof Error ? error : new Error(String(error)),\n { code: \"LUNIBEE_SHARD_BUS_ERROR\" },\n );\n return;\n }\n for (const handler of this.#errorHandlers) {\n try {\n handler(error, message);\n } catch {\n /* Error listener failures are isolated. */\n }\n }\n }\n}\n",
74
77
  "/** How a crashed cluster is restarted. The defaults restart every crash after a fixed delay. */\nexport interface SupervisorOptions {\n /** Delay before the first restart, in milliseconds (default 5000). */\n restartDelay?: number;\n /** Each further crash in the window multiplies the delay by this (default 1: a fixed delay). */\n backoff?: number;\n /** The longest delay (default 5 minutes). */\n maxDelay?: number;\n /** Random spread added to each delay, as a fraction of it (0-1, default 0). */\n jitter?: number;\n /** Give up after this many restarts inside `window` (default unlimited). */\n maxRestarts?: number;\n /** The time over which restarts are counted, and after which a stable cluster is forgiven (default 60,000). */\n window?: number;\n}\n\n/**\n * Decides when, and whether, a crashed cluster comes back. It only does\n * arithmetic on timestamps (pass `now` in tests), so `ClusterManager` stays in\n * charge of forking.\n */\nexport class ShardSupervisor {\n readonly #options: Required<SupervisorOptions>;\n readonly #restarts = new Map<number, number[]>();\n readonly #random: () => number;\n\n public constructor(\n options: SupervisorOptions = {},\n random: () => number = Math.random,\n ) {\n this.#options = {\n restartDelay: options.restartDelay ?? 5000,\n backoff: options.backoff ?? 1,\n maxDelay: options.maxDelay ?? 300_000,\n jitter: options.jitter ?? 0,\n maxRestarts: options.maxRestarts ?? Number.POSITIVE_INFINITY,\n window: options.window ?? 60_000,\n };\n const { restartDelay, backoff, jitter, maxDelay, window, maxRestarts } =\n this.#options;\n if (!(restartDelay >= 0) || !(maxDelay >= 0) || !(window > 0))\n throw new RangeError(\n \"restartDelay and maxDelay cannot be negative, and window must be positive.\",\n );\n if (!(backoff >= 1))\n throw new RangeError(\"backoff must be at least 1.\");\n if (!(jitter >= 0 && jitter <= 1))\n throw new RangeError(\"jitter must be between 0 and 1.\");\n if (!(maxRestarts >= 0))\n throw new RangeError(\"maxRestarts cannot be negative.\");\n this.#random = random;\n }\n\n /**\n * A cluster exited. @returns How many milliseconds to wait before\n * restarting it, or `null` to give up because it crashed more than\n * `maxRestarts` times inside `window`.\n */\n public next(id: number, now = Date.now()): number | null {\n const { window, maxRestarts, restartDelay, backoff, maxDelay, jitter } =\n this.#options;\n const recent = (this.#restarts.get(id) ?? []).filter(\n (at) => now - at < window,\n );\n if (recent.length >= maxRestarts) {\n this.#restarts.delete(id);\n return null;\n }\n recent.push(now);\n this.#restarts.set(id, recent);\n const base = Math.min(\n maxDelay,\n restartDelay * backoff ** (recent.length - 1),\n );\n return Math.round(base * (1 + jitter * this.#random()));\n }\n\n /** Forgets a cluster's crashes, e.g. after a deliberate respawn. */\n public reset(id?: number): void {\n if (id === undefined) this.#restarts.clear();\n else this.#restarts.delete(id);\n }\n}\n",
75
- "import { fetchGatewayBot } from \"./gateway-bot.js\";\nimport { fork, type ChildProcess } from \"node:child_process\";\nimport { cpus } from \"node:os\";\nimport { ShardSupervisor, type SupervisorOptions } from \"./supervisor.js\";\nimport { BUS_FRAME, PEER_DOWN_FRAME } from \"./transport.js\";\n\n/** Runtime-agnostic delay used to stagger cluster spawns (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\n/** Configuration for managing multiple shard clusters. */\nexport interface ClusterManagerOptions {\n /** Discord bot token. */\n token: string;\n /** Path to the worker script to execute for each cluster. */\n script: string;\n /** Number of shards. Use \"auto\" to request Discord's recommended count. */\n shardCount?: number | \"auto\";\n /** Number of clusters to spawn. Defaults to the number of logical CPUs. */\n clusterCount?: number;\n /** Interval in milliseconds to automatically check for recommended shard count and re-scale if needed. */\n autoScaleInterval?: number;\n /** Optional handler invoked when a background auto-scale check fails. Receives the thrown error. */\n onAutoScaleError?: (error: Error) => void;\n /** Grace period in milliseconds to await a cluster's clean exit after SIGTERM before force-killing. Defaults to 5000. */\n shutdownTimeout?: number;\n /**\n * Whether a cluster that exits unexpectedly is re-forked with the same\n * shard assignment. Defaults to true: without it a crashed child leaves\n * its shards permanently offline and nothing reports it.\n */\n restartOnExit?: boolean;\n /** Delay in milliseconds before re-forking a crashed cluster. Defaults to 5000. */\n restartDelay?: number;\n /**\n * Backoff, jitter and a give-up limit for restarts. `restartDelay` is its\n * first delay unless it sets its own. The default restarts every crash\n * after a fixed delay, as before.\n */\n supervisor?: Omit<SupervisorOptions, \"restartDelay\"> & {\n restartDelay?: number;\n };\n /** Called when a cluster crashed more often than `supervisor.maxRestarts` allows and will not be restarted. */\n onGiveUp?(cluster: ClusterInfo): void;\n /** Called whenever a cluster process exits, before any restart. */\n onClusterExit?(\n cluster: ClusterInfo,\n code: number | null,\n signal: NodeJS.Signals | null,\n ): void;\n}\n\n/** Information about a running cluster. */\nexport interface ClusterInfo {\n /** Cluster identifier. */\n id: number;\n /** The child process running the cluster. */\n process: ChildProcess;\n /** The shard IDs managed by this cluster. */\n shards: number[];\n}\n\n/**\n * Manages multiple clusters of shards, distributing shards across child processes.\n *\n * **Runtime requirement:** clustering relies on Node.js `child_process.fork()`\n * and IPC. `fork()` is not fully supported under Bun, so run the cluster\n * manager under the Node.js runtime; `spawn()` will fail on a runtime whose\n * `fork()` is unavailable.\n */\nexport class ClusterManager {\n /** Active clusters indexed by cluster ID. */\n public readonly clusters = new Map<number, ClusterInfo>();\n /** Total number of shards across all clusters. */\n public shardCount = 0;\n\n readonly #options: ClusterManagerOptions;\n /** Whether the manager was created in auto shard-count mode. Preserved across respawns so auto-scaling keeps running. */\n readonly #auto: boolean;\n #autoScaleTimer?: ReturnType<typeof setInterval>;\n #spawned = false;\n /** Set while a deliberate shutdown is in progress so exits are not restarted. */\n #stopping = false;\n /** Pending restart timers, kept so shutdown can cancel them. */\n readonly #restartTimers = new Set<ReturnType<typeof setTimeout>>();\n readonly #supervisor: ShardSupervisor;\n\n /** Creates a cluster manager. @param options Clustering configuration. @throws {TypeError} If token or script is missing. */\n public constructor(options: ClusterManagerOptions) {\n if (!options.token?.trim())\n throw new TypeError(\"A Discord bot token is required.\");\n if (!options.script?.trim())\n throw new TypeError(\"A script path is required for clustering.\");\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 }\n\n this.#auto = options.shardCount === \"auto\";\n this.#options = { ...options };\n this.#supervisor = new ShardSupervisor({\n restartDelay: options.restartDelay,\n ...options.supervisor,\n });\n }\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 fetchGatewayBot(this.#options.token)).shards;\n }\n\n /** Spawns all clusters. @returns A promise fulfilled after clusters have launched. */\n public async spawn(): Promise<void> {\n if (this.#spawned) return;\n if (typeof process?.versions?.bun === \"string\") {\n throw new Error(\n \"ClusterManager requires the Node.js runtime; Bun does not support child_process.fork() for this clustering mode.\",\n );\n }\n this.#spawned = true;\n\n const count =\n this.#options.shardCount === \"auto\" ||\n this.#options.shardCount === undefined\n ? await this.fetchRecommendedShardCount()\n : this.#options.shardCount;\n\n this.shardCount = count;\n const clusterCount = this.#options.clusterCount ?? cpus().length;\n\n // Chunk shards across clusters evenly\n const chunks = Array.from(\n { length: clusterCount },\n () => [] as number[],\n );\n for (let i = 0; i < count; i++) {\n chunks[i % clusterCount]?.push(i);\n }\n\n for (const [i, chunk] of chunks.entries()) {\n if (chunk.length === 0) continue;\n this.#launch(i, chunk, count);\n // Stagger cluster creation\n await sleep(500);\n }\n\n if (\n this.#options.autoScaleInterval &&\n this.#options.autoScaleInterval > 0\n ) {\n this.#autoScaleTimer = setInterval(() => {\n void this.checkAutoScale();\n }, this.#options.autoScaleInterval);\n }\n }\n\n /**\n * Forks one cluster child and supervises its exit.\n *\n * A child that dies (crash, OOM kill, uncaught rejection) takes its shards\n * offline for good, so unless the exit came from a deliberate shutdown the\n * same shard assignment is re-forked after `restartDelay`.\n */\n #launch(id: number, shards: number[], shardCount: number): ClusterInfo {\n const child = fork(this.#options.script, [], {\n env: {\n ...process.env,\n SHARD_LIST: shards.join(\",\"),\n SHARD_COUNT: shardCount.toString(),\n CLUSTER_ID: id.toString(),\n LUNIBEE_SHARD_BUS: \"ipc\",\n },\n });\n const info: ClusterInfo = { id, process: child, shards };\n this.clusters.set(id, info);\n child.on(\"message\", (frame) => this.#relay(id, frame));\n child.once(\"exit\", (code, signal) => {\n // Only act on the process still registered as this cluster: a\n // restart or respawn may already have replaced it.\n if (this.clusters.get(id)?.process !== child) return;\n try {\n this.#options.onClusterExit?.(info, code, signal);\n } catch {\n // A faulty consumer callback must not break supervision.\n }\n if (!this.#stopping) this.#announceDown(id, shards);\n if (this.#stopping || this.#options.restartOnExit === false) return;\n this.clusters.delete(id);\n const delay = this.#supervisor.next(id);\n if (delay === null) {\n try {\n this.#options.onGiveUp?.(info);\n } catch {\n // A faulty consumer callback must not break supervision.\n }\n return;\n }\n const timer = setTimeout(() => {\n this.#restartTimers.delete(timer);\n if (this.#stopping || !this.#spawned) return;\n this.#launch(id, shards, shardCount);\n }, delay);\n // Do not hold the event loop open purely for a pending restart.\n (timer as { unref?: () => void }).unref?.();\n this.#restartTimers.add(timer);\n });\n return info;\n }\n\n /** Passes a shard-bus frame from one cluster to every other cluster. */\n #relay(from: number, frame: unknown): void {\n if (!frame || typeof frame !== \"object\" || !(BUS_FRAME in frame))\n return;\n for (const [id, cluster] of this.clusters)\n if (id !== from) this.#sendFrame(cluster, frame);\n }\n\n /** Tells the surviving clusters that these shards are gone, so requests to them fail now instead of timing out. */\n #announceDown(exited: number, shards: number[]): void {\n for (const [id, cluster] of this.clusters)\n if (id !== exited)\n this.#sendFrame(cluster, { [PEER_DOWN_FRAME]: shards });\n }\n\n #sendFrame(cluster: ClusterInfo, frame: unknown): void {\n const child = cluster.process;\n if (typeof child.send !== \"function\" || !child.connected) return;\n try {\n child.send(frame as never);\n } catch {\n // The child is exiting; its own exit handler takes over.\n }\n }\n\n /** Checks if the recommended shard count has changed and respawns if so. */\n public async checkAutoScale(): Promise<void> {\n if (!this.#auto) return; // Only auto-scale in auto mode\n try {\n const recommended = await this.fetchRecommendedShardCount();\n if (recommended !== this.shardCount) {\n await this.respawn(recommended);\n }\n } catch (error) {\n // Surface the failure instead of silently swallowing it; the next\n // interval tick retries.\n const normalized =\n error instanceof Error ? error : new Error(String(error));\n this.#options.onAutoScaleError?.(normalized);\n }\n }\n\n /** Gracefully shuts the existing clusters down and respawns them with the new shard count. @param newShardCount The new total shard count. */\n public async respawn(newShardCount: number): Promise<void> {\n this.#options.shardCount = newShardCount;\n await this.shutdownAll();\n this.#spawned = false;\n this.#supervisor.reset();\n await this.spawn();\n }\n\n /**\n * Gracefully stops all active clusters: sends SIGTERM, awaits each child's\n * clean exit, and force-kills (SIGKILL) only children that outlast the\n * shutdown timeout. Clears the auto-scale timer and cluster map.\n * @param timeoutMs Grace period per child before force-kill. Defaults to the configured `shutdownTimeout` (5000 ms).\n */\n public async shutdownAll(\n timeoutMs = this.#options.shutdownTimeout ?? 5000,\n ): Promise<void> {\n this.#stopping = true;\n this.#clearRestartTimers();\n if (this.#autoScaleTimer) {\n clearInterval(this.#autoScaleTimer);\n this.#autoScaleTimer = undefined;\n }\n await Promise.all(\n [...this.clusters.values()].map((cluster) =>\n this.#shutdownCluster(cluster, timeoutMs),\n ),\n );\n this.clusters.clear();\n this.#spawned = false;\n this.#stopping = false;\n }\n\n /** Cancels any pending crash-restart timers. */\n #clearRestartTimers(): void {\n for (const timer of this.#restartTimers) clearTimeout(timer);\n this.#restartTimers.clear();\n }\n\n /** Gracefully terminates a single cluster child, escalating to SIGKILL after the timeout. */\n async #shutdownCluster(\n cluster: ClusterInfo,\n timeoutMs: number,\n ): Promise<void> {\n const child = cluster.process;\n if (child.exitCode !== null || child.signalCode !== null) return;\n await new Promise<void>((resolve) => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const finish = (): void => {\n if (timer) clearTimeout(timer);\n resolve();\n };\n child.once(\"exit\", finish);\n try {\n child.kill(\"SIGTERM\");\n } catch {\n child.off(\"exit\", finish);\n finish();\n return;\n }\n timer = setTimeout(() => {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // Ignore force-kill errors.\n }\n }, timeoutMs);\n });\n }\n\n /** Immediately force-kills all active cluster processes and clears the cluster map. Prefer {@link shutdownAll} for a graceful stop. */\n public killAll(): void {\n this.#stopping = true;\n this.#clearRestartTimers();\n if (this.#autoScaleTimer) {\n clearInterval(this.#autoScaleTimer);\n this.#autoScaleTimer = undefined;\n }\n for (const cluster of this.clusters.values()) {\n try {\n cluster.process.kill();\n } catch {\n // Ignore kill errors\n }\n }\n this.clusters.clear();\n this.#spawned = false;\n this.#stopping = false;\n }\n}\n",
76
- "import { fetchGatewayBot, type GatewayBotInfo } from \"./gateway-bot.js\";\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 { fetchGatewayBot, type GatewayBotInfo } from \"./gateway-bot.js\";\nexport { ShardBus } from \"./bus.js\";\nexport {\n BroadcastChannelTransport,\n IpcTransport,\n type IpcEndpoint,\n type ShardBusTransport,\n} from \"./transport.js\";\nexport { ShardSupervisor, type SupervisorOptions } from \"./supervisor.js\";\nexport type {\n ShardBusErrorHandler,\n ShardBusOptions,\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. */\n token: string;\n /** Gateway intents as an array, e.g. `[GatewayIntentBits.Guilds]`. */\n intents: ConstructorParameters<typeof Gateway>[0][\"intents\"];\n /** Number of shards. Use `\"auto\"` to request Discord's recommended count. */\n shardCount?: number | \"auto\";\n /** Gateway reconnect behavior. */\n 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. */\n autoScaleInterval?: number;\n /** Optional handler invoked when a background auto-scale check fails. Receives the thrown error. */\n onAutoScaleError?: (error: unknown) => void;\n}\n/** Health snapshot for one shard. */\nexport interface ShardHealth {\n id: number;\n /** Gateway connection state. */\n state: Gateway[\"state\"];\n /** Last heartbeat round-trip in ms, or -1 before the first ACK. */\n ping: number;\n}\n/** What `ShardManager` emits about its shards. */\nexport interface ShardManagerEvents {\n /** A shard finished its handshake and is receiving events. */\n shardReady: [shardId: number];\n /** A shard's connection closed (it may reconnect by itself). */\n shardDisconnect: [shardId: number, close: { code: number; action: string }];\n /** A shard resumed its session after a reconnect. */\n shardResume: [shardId: number];\n /** A shard reported an error. */\n shardError: [shardId: number, error: Error];\n /** A shard reconnected too often too fast and is backing off (see `Gateway` `unstable`). */\n shardUnstable: [\n shardId: number,\n info: { reconnects: number; delay: number },\n ];\n}\n\n/** Runtime state for a managed shard. */\nexport interface ShardInfo {\n /** Shard identifier. */\n id: number;\n /** Gateway instance. */\n 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. */\n public readonly shards = new Map<number, Gateway>();\n /** Number of shards managed by this instance after initialization. */\n public get shardCount(): number {\n return this.shards.size;\n }\n readonly #options: ShardManagerOptions;\n /** Whether the shard set has been initialized. */\n #resolved = false;\n /** Whether this manager is currently destroyed. */\n #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 /** The shard count of the current shard set; kept while a reshard has no shards so `getShardIdForGuild` stays right. */\n #total: number;\n readonly #listeners = new Map<\n keyof ShardManagerEvents,\n Set<(...args: unknown[]) => void>\n >();\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 (!Array.isArray(options.intents))\n throw new TypeError(\n \"Gateway intents must be an array, e.g. [GatewayIntentBits.Guilds].\",\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.#total = count;\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 info = await fetchGatewayBot(this.#options.token);\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 // Discord's IDENTIFY rate-limit key is `shard_id % max_concurrency`: one\n // IDENTIFY per key per 5 seconds. Each round starts the next shard of\n // every bucket, so a round never puts two shards on one key.\n const buckets = new Map<number, number[]>();\n for (const id of ids) {\n const key = id % concurrency;\n const bucket = buckets.get(key);\n if (bucket) bucket.push(id);\n else buckets.set(key, [id]);\n }\n const rounds = Math.max(\n 0,\n ...[...buckets.values()].map((bucket) => bucket.length),\n );\n for (let index = 0; index < rounds; index++) {\n const round = [...buckets.values()]\n .map((bucket) => bucket[index])\n .filter((id): id is number => id !== undefined);\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 index + 1 < rounds &&\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 /** Listens for an aggregated shard event. @returns This manager. */\n public on<E extends keyof ShardManagerEvents>(\n event: E,\n listener: (...args: ShardManagerEvents[E]) => void,\n ): this {\n let set = this.#listeners.get(event);\n if (!set) this.#listeners.set(event, (set = new Set()));\n set.add(listener as unknown as (...args: unknown[]) => void);\n return this;\n }\n /** Stops listening for a shard event. @returns This manager. */\n public off<E extends keyof ShardManagerEvents>(\n event: E,\n listener: (...args: ShardManagerEvents[E]) => void,\n ): this {\n this.#listeners\n .get(event)\n ?.delete(listener as unknown as (...args: unknown[]) => void);\n return this;\n }\n #emit<E extends keyof ShardManagerEvents>(\n event: E,\n ...args: ShardManagerEvents[E]\n ): void {\n for (const listener of this.#listeners.get(event) ?? [])\n try {\n listener(...args);\n } catch {\n // A faulty listener must not disturb the shard.\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.#total));\n }\n /** Sends a voice state update (op 4) on the shard that owns the guild. @returns Whether it was sent; `false` if that shard is absent or disconnected. */\n public sendVoiceState(\n guildId: string,\n channelId: string | null,\n options: { selfMute?: boolean; selfDeaf?: boolean } = {},\n ): boolean {\n return (\n this.shards\n .get(this.getShardIdForGuild(guildId))\n ?.sendVoiceState(guildId, channelId, options) ?? false\n );\n }\n /** Gets a shard by ID. @param id Shard identifier. @returns Gateway instance or undefined. */\n public get(id: number): 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. */\n 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 this.#total = count;\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 const gateway = 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 gateway.on(\"ready\", () => this.#emit(\"shardReady\", id));\n gateway.on(\"resumed\", () => this.#emit(\"shardResume\", id));\n gateway.on(\"close\", (close) =>\n this.#emit(\n \"shardDisconnect\",\n id,\n close as { code: number; action: string },\n ),\n );\n gateway.on(\"error\", (error) =>\n this.#emit(\"shardError\", id, error as Error),\n );\n gateway.on(\"unstable\", (info) =>\n this.#emit(\n \"shardUnstable\",\n id,\n info as { reconnects: number; delay: number },\n ),\n );\n return gateway;\n }\n}\n\n/** Discord.js-familiar alias for {@link ShardManager}. */\nexport { ShardManager as ShardingManager };\n",
78
+ "import {\n assertGuildsPerShard,\n fetchGatewayBot,\n resolveShardCount,\n type GatewayBotInfo,\n} from \"./gateway-bot.js\";\nimport { fork, type ChildProcess } from \"node:child_process\";\nimport { cpus } from \"node:os\";\nimport { REPLY_TYPE, type ReplyPayload, type ShardReply } from \"./bus.js\";\nimport {\n allocateShards,\n assertCompleteAllocation,\n isClusterWorker,\n validateShardIds,\n WORKER_MARKER,\n} from \"./context.js\";\nimport type {\n ClusterHealth,\n ClusterManagerHealth,\n ClusterState,\n ShardHealth,\n WorkerMetrics,\n WorkerReport,\n} from \"./health.js\";\nimport { IdentifyCoordinator, type IdentifyBudget } from \"./identify.js\";\nimport {\n CLUSTER_FRAME,\n PARENT_ID,\n REQUEST_ASSIGN,\n REQUEST_HEALTH,\n parseChildFrame,\n type ChildFrame,\n} from \"./protocol.js\";\nimport { RemoteHosts, type HostStatus, type RemoteOptions } from \"./remote.js\";\nimport { RequestTracker } from \"./requests.js\";\nimport { ShardSupervisor, type SupervisorOptions } from \"./supervisor.js\";\nimport { BUS_FRAME, PEER_DOWN_FRAME } from \"./transport.js\";\n\n/** Configuration for managing multiple shard clusters. */\nexport interface ClusterManagerOptions {\n /** Discord bot token. */\n token: string;\n /** Path to the worker script to execute for each cluster. */\n script: string;\n /** Total number of shards. Use \"auto\" to request Discord's recommended count. */\n shardCount?: number | \"auto\";\n /**\n * With `shardCount: \"auto\"`, size the deployment by guilds instead of\n * Discord's recommendation: `ceil(guilds / guildsPerShard)` shards, at\n * least one. 1 to 2500 (Discord's limit); Discord recommends about 1000.\n * Guilds are assigned to shards by their ID, so this sets the average,\n * not an exact split.\n */\n guildsPerShard?: number;\n /** The bot's guild count for `guildsPerShard`, instead of asking Discord for it. */\n guildCount?: number;\n /**\n * The shards this deployment runs, out of `shardCount`. Use it to split one\n * bot across hosts: each host runs a `ClusterManager` with its own range.\n * Defaults to every shard.\n */\n shardIds?: number[];\n /** Number of clusters to spawn. Defaults to the number of logical CPUs. Not combinable with `shardsPerCluster`. */\n clusterCount?: number;\n /** Shards per cluster; the cluster count follows. Not combinable with `clusterCount`. */\n shardsPerCluster?: number;\n /**\n * Discord's `max_concurrency` for IDENTIFY pacing. Fetched from `/gateway/bot`\n * when `shardCount` is \"auto\" (this value may only lower it); otherwise defaults to 1.\n */\n maxConcurrency?: number;\n /** Ask `/gateway/bot` for `max_concurrency` and the session budget even with a fixed `shardCount`. */\n fetchLimits?: boolean;\n /** IDENTIFY coordination across clusters. On by default. */\n identify?: {\n /** Set `false` to let every cluster pace its own IDENTIFYs. */\n coordinate?: boolean;\n /** Milliseconds between IDENTIFYs on one key. Default 5000. */\n interval?: number;\n /** A slot a worker never releases is released after this many ms. Default 60,000. */\n holdTimeout?: number;\n };\n /** Milliseconds between forking two clusters, to spread the CPU cost of starting. Default 500. IDENTIFY pacing does not depend on it. */\n spawnInterval?: number;\n /**\n * A cluster that has not reported ready this many ms after it was forked is\n * killed and restarted like a crash. Off by default, because a worker that\n * never reports ready (no `ShardManager`, no `ClusterWorker`) would be killed.\n */\n startTimeout?: number;\n /** Make `spawn()` wait until every cluster reported ready. Default false. */\n waitForReady?: boolean;\n /**\n * When a cluster crashes more often than `supervisor.maxRestarts` allows,\n * move its shards to the healthiest ready cluster instead of leaving them\n * offline. Default false.\n */\n reassignOnGiveUp?: boolean;\n /**\n * Largest shard-bus message, request payload or worker reply the manager\n * handles, in UTF-8 bytes (a string as it is, anything else as its JSON text). Bigger ones from a worker are\n * dropped before they are relayed (an `error` event says so; a request\n * waiting for the answer times out as usual), and bigger ones passed to\n * `request()`, `broadcast()` or `requestCluster()` throw a `RangeError`.\n * Default 8 MiB, the same limit as the host link.\n */\n maxMessageBytes?: number;\n /** Default timeout for `request()`, `requestCluster()` and `broadcast()`. Default 5000. */\n requestTimeout?: number;\n /** Most requests waiting for answers at once. Default 10,000. */\n maxPendingRequests?: number;\n /**\n * Accept hosts on other machines. The coordinator listens for\n * `ClusterHost` agents, places clusters on them and supervises those\n * workers like local ones. See {@link RemoteOptions}.\n */\n remote?: RemoteOptions;\n /** Starts a worker process. Defaults to `child_process.fork()`; replace it for tests or custom launchers. */\n fork?: (\n script: string,\n env: Record<string, string | undefined>,\n ) => ChildProcess;\n /** Interval in milliseconds to automatically check for recommended shard count and re-scale if needed. */\n autoScaleInterval?: number;\n /** Optional handler invoked when a background auto-scale check fails. Receives the thrown error. */\n onAutoScaleError?: (error: Error) => void;\n /** Grace period in milliseconds to await a cluster's clean exit after SIGTERM before force-killing. Defaults to 5000. */\n shutdownTimeout?: number;\n /**\n * Whether a cluster that exits unexpectedly is re-forked with the same\n * shard assignment. Defaults to true: without it a crashed child leaves\n * its shards permanently offline and nothing reports it.\n */\n restartOnExit?: boolean;\n /** Delay in milliseconds before re-forking a crashed cluster. Defaults to 5000. */\n restartDelay?: number;\n /**\n * Backoff, jitter and a give-up limit for restarts. `restartDelay` is its\n * first delay unless it sets its own. The default restarts every crash\n * after a fixed delay, as before.\n */\n supervisor?: Omit<SupervisorOptions, \"restartDelay\"> & {\n restartDelay?: number;\n };\n /** Called when a cluster crashed more often than `supervisor.maxRestarts` allows and will not be restarted. */\n onGiveUp?(cluster: ClusterInfo): void;\n /** Called whenever a cluster process exits, before any restart. */\n onClusterExit?(\n cluster: ClusterInfo,\n code: number | null,\n signal: NodeJS.Signals | null,\n ): void;\n}\n\n/** Information about a cluster. The object is live: it is updated as the cluster changes. */\nexport interface ClusterInfo {\n /** Cluster identifier. */\n id: number;\n /** The current child process (the last one while a restart is pending). For a cluster on another host this is a proxy; `pid` is the pid on that host. */\n process: ChildProcess;\n /** Where it runs: `\"local\"` or a host ID. */\n host: string;\n /** The shard IDs managed by this cluster. */\n shards: number[];\n /** Where the cluster is in its life. */\n state: ClusterState;\n /** How many times it was restarted after a crash. */\n restarts: number;\n /** When the current process was forked (epoch ms). */\n startedAt: number;\n /** When the current process reported ready. */\n readyAt?: number;\n /** When any process of this cluster last reported ready. */\n lastReadyAt?: number;\n /** The worker's last health report. */\n report?: WorkerReport;\n}\n\n/** What `ClusterManager` emits. */\nexport interface ClusterManagerEvents {\n /** A cluster process was forked. */\n clusterSpawn: [cluster: ClusterInfo];\n /** A cluster's shards all finished their handshake. */\n clusterReady: [cluster: ClusterInfo];\n /** Every cluster is ready. Emitted again after a recovery. */\n ready: [];\n /** A cluster process exited. `expected` is true for a deliberate shutdown. */\n clusterExit: [\n cluster: ClusterInfo,\n code: number | null,\n signal: NodeJS.Signals | null,\n expected: boolean,\n ];\n /** A restart was scheduled after a crash. */\n clusterRestart: [\n cluster: ClusterInfo,\n info: { delay: number; attempt: number },\n ];\n /** A cluster keeps crashing: three or more restarts are pending or recent. */\n clusterUnstable: [\n cluster: ClusterInfo,\n info: { attempt: number; delay: number },\n ];\n /** A cluster did not report ready within `startTimeout` and was killed. */\n clusterStartTimeout: [cluster: ClusterInfo];\n /** A cluster crashed too often and will not be restarted. */\n clusterGiveUp: [cluster: ClusterInfo];\n /** A failed cluster's shards were moved to another cluster. */\n shardsReassigned: [info: { shardIds: number[]; from: number; to: number }];\n /** A host joined the deployment. */\n hostJoin: [hostId: string];\n /** A host left or was lost. Its clusters are treated as crashed. */\n hostLeave: [hostId: string, reason: string];\n /** An IDENTIFY is waiting for the session-start budget to reset. */\n identifyWait: [info: { shardId: number; waitMs: number }];\n /** Something went wrong that did not stop the deployment (a bad frame, a failed recovery). */\n error: [error: Error];\n}\n\n/** Options for a request to a shard or cluster. */\nexport interface RequestOptions {\n /** Milliseconds to wait. Defaults to `requestTimeout`. */\n timeoutMs?: number;\n /** Cancels the wait. */\n signal?: AbortSignal;\n}\n\n/** What a broadcast collected. It never rejects for a slow or failed shard. */\nexport interface BroadcastResult<R = unknown> {\n /** One reply per answering shard: its result, or the error its handler threw. */\n replies: ShardReply<R>[];\n /** Shards that did not answer: down, restarting, or too slow. */\n missing: number[];\n}\n\ntype LiveState = \"starting\" | \"ready\";\n\n/** Default for `maxMessageBytes`. */\nconst DEFAULT_MAX_MESSAGE_BYTES = 8 * 1024 * 1024;\n\n/**\n * The size of a payload in UTF-8 bytes: a string as it is, anything else as\n * its JSON text. `Infinity` for one that cannot be serialized (a cycle).\n */\nfunction payloadSize(value: unknown): number {\n if (value === undefined || value === null) return 0;\n if (typeof value === \"string\") return Buffer.byteLength(value, \"utf8\");\n if (typeof value !== \"object\") return String(value).length;\n try {\n const text = JSON.stringify(value);\n return text === undefined ? 0 : Buffer.byteLength(text, \"utf8\");\n } catch {\n return Number.POSITIVE_INFINITY;\n }\n}\n\nconst isLive = (state: ClusterState): state is LiveState =>\n state === \"starting\" || state === \"ready\";\n\n/**\n * Orchestrates cluster processes: forks one worker per cluster, gives each a\n * fixed set of shards, restarts crashed clusters with backoff, hands out\n * IDENTIFY slots across all of them, routes shard-bus messages to the cluster\n * that owns the target shard, and answers requests, broadcasts and health\n * queries for the whole deployment.\n *\n * Ownership: the `ClusterManager` decides which cluster owns which shard and\n * keeps processes alive; the `ShardManager` inside each worker runs those\n * shards' Gateways. A shard is never owned by two clusters at once.\n *\n * Works under Node.js and Bun (`child_process.fork()` with IPC).\n */\nexport class ClusterManager {\n /** Live clusters (starting or ready) indexed by cluster ID. A crashed cluster leaves this map until it is restarted. */\n public readonly clusters = new Map<number, ClusterInfo>();\n /** Total number of shards in the deployment. */\n public shardCount = 0;\n\n readonly #options: ClusterManagerOptions;\n /** Whether the manager was created in auto shard-count mode. Preserved across respawns so auto-scaling keeps running. */\n readonly #auto: boolean;\n #autoScaleTimer?: ReturnType<typeof setInterval>;\n /** Every cluster this deployment knows, whatever its state. */\n readonly #infos = new Map<number, ClusterInfo>();\n /** Which cluster owns each shard. */\n readonly #owner = new Map<number, number>();\n #startPromise?: Promise<void>;\n #stopPromise?: Promise<void>;\n #wasStarted = false;\n /** Set while a deliberate shutdown is in progress so exits are not restarted. */\n #stopping = false;\n /** Pending restart timers, kept so shutdown can cancel them. */\n readonly #restartTimers = new Set<ReturnType<typeof setTimeout>>();\n readonly #startTimers = new Map<number, ReturnType<typeof setTimeout>>();\n readonly #pauses = new Set<() => void>();\n readonly #readyWaiters = new Set<{\n resolve: () => void;\n reject: (error: Error) => void;\n timer?: ReturnType<typeof setTimeout>;\n }>();\n readonly #supervisor: ShardSupervisor;\n readonly #tracker: RequestTracker;\n #coordinator?: IdentifyCoordinator;\n #allReady = false;\n #clusterCount = 0;\n /** Shards of each cluster that are waiting for an IDENTIFY slot. */\n readonly #identifyWaiting = new Map<number, Set<number>>();\n readonly #remote?: RemoteHosts;\n /** Which host runs each cluster. Fixed for the life of a spawn, so a cluster returns to its host. */\n readonly #hostOf = new Map<number, string>();\n #lastWait = \"\";\n readonly #listeners = new Map<\n keyof ClusterManagerEvents,\n Set<(...args: never[]) => void>\n >();\n\n /** Creates a cluster manager. @param options Clustering configuration. @throws {TypeError} If token or script is missing. @throws {RangeError} If a numeric option is invalid. */\n public constructor(options: ClusterManagerOptions) {\n if (!options.token?.trim())\n throw new TypeError(\"A Discord bot token is required.\");\n if (!options.script?.trim())\n throw new TypeError(\"A script path is required for clustering.\");\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 }\n if (\n options.clusterCount !== undefined &&\n options.shardsPerCluster !== undefined\n )\n throw new RangeError(\n \"Set either clusterCount or shardsPerCluster, not both.\",\n );\n for (const [name, value] of [\n [\"clusterCount\", options.clusterCount],\n [\"shardsPerCluster\", options.shardsPerCluster],\n [\"maxConcurrency\", options.maxConcurrency],\n ] as const)\n if (value !== undefined && (!Number.isInteger(value) || value < 1))\n throw new RangeError(`${name} must be a positive integer.`);\n if (\n options.maxMessageBytes !== undefined &&\n (!Number.isInteger(options.maxMessageBytes) ||\n options.maxMessageBytes < 1)\n )\n throw new RangeError(\"maxMessageBytes must be a positive integer.\");\n for (const [name, value] of [\n [\"spawnInterval\", options.spawnInterval],\n [\"startTimeout\", options.startTimeout],\n [\"requestTimeout\", options.requestTimeout],\n ] as const)\n if (value !== undefined && !(value >= 0))\n throw new RangeError(`${name} cannot be negative.`);\n if (options.guildsPerShard !== undefined) {\n assertGuildsPerShard(options.guildsPerShard);\n if (typeof options.shardCount === \"number\")\n throw new RangeError(\n 'guildsPerShard needs shardCount: \"auto\".',\n );\n }\n if (options.shardIds && typeof options.shardCount === \"number\")\n validateShardIds(options.shardIds, options.shardCount);\n\n this.#auto = options.shardCount === \"auto\";\n this.#options = { ...options };\n this.#supervisor = new ShardSupervisor({\n restartDelay: options.restartDelay,\n ...options.supervisor,\n });\n this.#tracker = new RequestTracker(\n \"parent\",\n options.maxPendingRequests,\n );\n if (options.remote)\n this.#remote = new RemoteHosts(options.remote, {\n join: (id) => this.#emit(\"hostJoin\", id),\n leave: (id, reason) => this.#emit(\"hostLeave\", id, reason),\n error: (error) => this.#emit(\"error\", error),\n });\n }\n\n /** Listens for a deployment event. @returns This manager. */\n public on<E extends keyof ClusterManagerEvents>(\n event: E,\n listener: (...args: ClusterManagerEvents[E]) => void,\n ): this {\n let set = this.#listeners.get(event);\n if (!set) this.#listeners.set(event, (set = new Set()));\n set.add(listener as never);\n return this;\n }\n\n /** Stops listening for a deployment event. @returns This manager. */\n public off<E extends keyof ClusterManagerEvents>(\n event: E,\n listener: (...args: ClusterManagerEvents[E]) => void,\n ): this {\n this.#listeners.get(event)?.delete(listener as never);\n return this;\n }\n\n #emit<E extends keyof ClusterManagerEvents>(\n event: E,\n ...args: ClusterManagerEvents[E]\n ): void {\n for (const listener of this.#listeners.get(event) ?? [])\n try {\n (listener as (...a: ClusterManagerEvents[E]) => void)(...args);\n } catch {\n // A faulty listener must not break supervision.\n }\n }\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 resolveShardCount(\n this.#options.token,\n await fetchGatewayBot(this.#options.token),\n this.#options,\n );\n }\n\n /** The cluster that owns a shard, or `undefined` when the shard is not part of this deployment. */\n public clusterForShard(shardId: number): ClusterInfo | undefined {\n const id = this.#owner.get(shardId);\n return id === undefined ? undefined : this.#infos.get(id);\n }\n\n /** Which cluster owns each shard. A copy: change ownership through recovery, not by writing to it. */\n public assignments(): ReadonlyMap<number, number> {\n return new Map(this.#owner);\n }\n\n /**\n * Spawns all clusters. Calling it again while clusters run, or while the\n * first call is still starting them, returns the same promise.\n * @throws {Error} If called from a cluster worker (a worker must not start the fleet again).\n */\n public spawn(): Promise<void> {\n if (isClusterWorker())\n return Promise.reject(\n new Error(\n \"A cluster worker cannot start a ClusterManager: it would fork the whole fleet again.\",\n ),\n );\n if (this.#stopPromise)\n return this.#stopPromise.then(() => this.spawn());\n if (!this.#startPromise) {\n const attempt = this.#start();\n this.#startPromise = attempt;\n attempt.catch(() => {\n if (this.#startPromise === attempt)\n this.#startPromise = undefined;\n });\n }\n return this.#startPromise;\n }\n\n async #resolveGateway(): Promise<{\n count: number;\n maxConcurrency: number;\n budget?: IdentifyBudget;\n }> {\n const { shardCount, maxConcurrency, fetchLimits } = this.#options;\n let info: GatewayBotInfo | undefined;\n let count: number | undefined;\n if (shardCount === \"auto\" || shardCount === undefined) {\n info = await fetchGatewayBot(this.#options.token);\n count = await resolveShardCount(\n this.#options.token,\n info,\n this.#options,\n );\n } else if (fetchLimits)\n try {\n info = await fetchGatewayBot(this.#options.token);\n } catch (error) {\n this.#emit(\n \"error\",\n error instanceof Error ? error : new Error(String(error)),\n );\n }\n const limit = info?.sessionStartLimit;\n return {\n count: count ?? (shardCount as number),\n maxConcurrency: Math.min(\n maxConcurrency ?? limit?.maxConcurrency ?? 1,\n limit?.maxConcurrency ?? Number.POSITIVE_INFINITY,\n ),\n ...(limit\n ? {\n budget: {\n total: limit.total,\n remaining: limit.remaining,\n resetAfter: limit.resetAfter,\n },\n }\n : {}),\n };\n }\n\n async #start(): Promise<void> {\n const { count, maxConcurrency, budget } = await this.#resolveGateway();\n if (this.#stopping) return;\n\n const ids =\n this.#options.shardIds ??\n Array.from({ length: count }, (_, i) => i);\n validateShardIds(ids, count);\n const clusterCount =\n this.#options.clusterCount ??\n (this.#options.shardsPerCluster\n ? Math.ceil(ids.length / this.#options.shardsPerCluster)\n : cpus().length);\n const chunks = allocateShards(ids, clusterCount);\n assertCompleteAllocation(chunks, ids);\n\n const placement = await this.#placeHosts().catch((error: unknown) => {\n // A shutdown that interrupts the wait is not a failure of the start.\n if (this.#stopping) return undefined;\n throw error;\n });\n if (!placement || this.#stopping) return;\n\n this.shardCount = count;\n this.#wasStarted = true;\n this.#owner.clear();\n this.#infos.clear();\n const identify = this.#options.identify;\n this.#coordinator =\n identify?.coordinate === false\n ? undefined\n : new IdentifyCoordinator({\n maxConcurrency,\n interval: identify?.interval,\n holdTimeout: identify?.holdTimeout,\n budget,\n onBudgetWait: (wait) => {\n const key = `${wait.shardId}:${Math.round(wait.waitMs / 1000)}`;\n if (key === this.#lastWait) return;\n this.#lastWait = key;\n this.#emit(\"identifyWait\", wait);\n },\n });\n\n const active = chunks\n .map((shards, id) => ({ id, shards }))\n .filter((chunk) => chunk.shards.length > 0);\n this.#clusterCount = active.length;\n this.#hostOf.clear();\n for (const chunk of active)\n this.#hostOf.set(chunk.id, placement[chunk.id % placement.length]!);\n for (const [index, chunk] of active.entries()) {\n if (this.#stopping) return;\n for (const shard of chunk.shards) this.#owner.set(shard, chunk.id);\n this.#launch(chunk.id, chunk.shards);\n // Spread the CPU cost of starting processes. IDENTIFY pacing is\n // the coordinator's job and does not depend on this.\n const gap = this.#options.spawnInterval ?? 500;\n if (index < active.length - 1 && gap > 0) await this.#pause(gap);\n }\n if (this.#stopping) return;\n\n if (this.#options.waitForReady) await this.ready();\n if (\n this.#options.autoScaleInterval &&\n this.#options.autoScaleInterval > 0\n ) {\n this.#autoScaleTimer = setInterval(() => {\n void this.checkAutoScale();\n }, this.#options.autoScaleInterval);\n }\n }\n\n /** Opens the listener for hosts and waits for them. @returns The places clusters run, in placement order. */\n async #placeHosts(): Promise<string[]> {\n const remote = this.#remote;\n const options = this.#options.remote;\n if (!remote || !options) return [\"local\"];\n remote.start();\n try {\n await remote.waitFor(\n options.hosts,\n options.minHosts ?? 1,\n options.joinTimeout ?? 60_000,\n );\n } catch (error) {\n remote.stop();\n throw error;\n }\n const ids = options.hosts ?? remote.connected();\n return options.local ? [\"local\", ...ids] : ids;\n }\n\n /** The port hosts connect to, once the listener is open (useful with `remote.port: 0`). */\n public get remotePort(): number | undefined {\n return this.#remote?.port;\n }\n\n /** The hosts of this deployment: connected or not, and the clusters on each. Empty without `remote`. */\n public hosts(): HostStatus[] {\n return this.#remote?.status(this.#options.remote?.hosts) ?? [];\n }\n\n /** Waits `ms`, or less when a shutdown starts. */\n #pause(ms: number): Promise<void> {\n return new Promise((resolve) => {\n const wake = (): void => {\n clearTimeout(timer);\n this.#pauses.delete(wake);\n resolve();\n };\n const timer = setTimeout(wake, ms);\n this.#pauses.add(wake);\n });\n }\n\n /**\n * Forks one cluster child and supervises its exit.\n *\n * A child that dies (crash, OOM kill, uncaught rejection) takes its shards\n * offline for good, so unless the exit came from a deliberate shutdown the\n * same shard assignment is re-forked after the supervisor's delay.\n */\n #launch(id: number, shards: number[]): ClusterInfo {\n // Only these cross to a remote host; the rest of a worker's environment is the host's own.\n const contract: Record<string, string> = {\n SHARD_LIST: shards.join(\",\"),\n SHARD_COUNT: this.shardCount.toString(),\n CLUSTER_ID: id.toString(),\n CLUSTER_COUNT: this.#clusterCount.toString(),\n LUNIBEE_SHARD_BUS: \"ipc\",\n [WORKER_MARKER]: \"1\",\n LUNIBEE_IDENTIFY: this.#coordinator ? \"coordinated\" : \"local\",\n };\n const host = this.#hostOf.get(id) ?? \"local\";\n const env: Record<string, string | undefined> = {\n ...process.env,\n ...contract,\n };\n const child =\n host !== \"local\" && this.#remote\n ? this.#remote.createChild(host, id, contract)\n : this.#options.fork\n ? this.#options.fork(this.#options.script, env)\n : fork(this.#options.script, [], {\n env: env as NodeJS.ProcessEnv,\n });\n const known = this.#infos.get(id);\n const info: ClusterInfo = known ?? {\n id,\n host,\n process: child,\n shards,\n state: \"starting\",\n restarts: 0,\n startedAt: Date.now(),\n };\n info.process = child;\n info.state = \"starting\";\n info.startedAt = Date.now();\n info.readyAt = undefined;\n this.#infos.set(id, info);\n this.clusters.set(id, info);\n this.#allReady = false;\n\n child.on(\"message\", (frame) => this.#onFrame(info, child, frame));\n child.once(\"exit\", (code, signal) =>\n this.#onExit(info, child, code, signal),\n );\n const timeout = this.#options.startTimeout;\n if (timeout) {\n const timer = setTimeout(() => {\n this.#startTimers.delete(id);\n if (info.process !== child || info.state !== \"starting\") return;\n this.#emit(\"clusterStartTimeout\", info);\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // Already gone; the exit handler takes over.\n }\n }, timeout);\n (timer as { unref?: () => void }).unref?.();\n this.#startTimers.set(id, timer);\n }\n this.#emit(\"clusterSpawn\", info);\n return info;\n }\n\n #onExit(\n info: ClusterInfo,\n child: ChildProcess,\n code: number | null,\n signal: NodeJS.Signals | null,\n ): void {\n // Only act on the process still registered as this cluster: a\n // restart or respawn may already have replaced it.\n if (info.process !== child) return;\n child.removeAllListeners(\"message\");\n this.#clearStartTimer(info.id);\n this.#coordinator?.drop(info.id, `Cluster ${info.id} exited.`);\n this.#identifyWaiting.delete(info.id);\n this.#tracker.failOwner(info.id, `Cluster ${info.id} exited.`);\n this.clusters.delete(info.id);\n this.#allReady = false;\n try {\n this.#options.onClusterExit?.(info, code, signal);\n } catch {\n // A faulty consumer callback must not break supervision.\n }\n // A deliberate shutdown (graceful or `killAll()`) is never restarted.\n const expected =\n this.#stopping ||\n info.state === \"stopping\" ||\n info.state === \"stopped\";\n this.#emit(\"clusterExit\", info, code, signal, expected);\n if (expected) {\n info.state = \"stopped\";\n return;\n }\n this.#announceDown(info.id, info.shards);\n if (this.#options.restartOnExit === false) {\n info.state = \"failed\";\n this.#checkReady();\n return;\n }\n const delay = this.#supervisor.next(info.id);\n if (delay === null) {\n info.state = \"failed\";\n try {\n this.#options.onGiveUp?.(info);\n } catch {\n // A faulty consumer callback must not break supervision.\n }\n this.#emit(\"clusterGiveUp\", info);\n this.#checkReady();\n if (this.#options.reassignOnGiveUp) void this.#reassign(info);\n return;\n }\n info.state = \"restarting\";\n info.restarts++;\n this.#emit(\"clusterRestart\", info, { delay, attempt: info.restarts });\n if (info.restarts >= 3)\n this.#emit(\"clusterUnstable\", info, {\n attempt: info.restarts,\n delay,\n });\n const timer = setTimeout(() => {\n this.#restartTimers.delete(timer);\n if (this.#stopping || info.state !== \"restarting\") return;\n this.#launch(info.id, info.shards);\n }, delay);\n // Do not hold the event loop open purely for a pending restart.\n (timer as { unref?: () => void }).unref?.();\n this.#restartTimers.add(timer);\n }\n\n /**\n * Moves a failed cluster's shards to the ready cluster that owns the\n * fewest. Ownership changes only after that worker confirmed it started\n * them, and the failed cluster's process is already dead, so no shard\n * ever has two owners.\n */\n async #reassign(failed: ClusterInfo): Promise<void> {\n const shardIds = [...failed.shards];\n const target = [...this.#infos.values()]\n .filter((cluster) => cluster.state === \"ready\")\n .sort((a, b) => a.shards.length - b.shards.length)[0];\n if (!target) {\n this.#emit(\n \"error\",\n new Error(\n `No ready cluster can take over shards [${shardIds}] of cluster ${failed.id}.`,\n ),\n );\n return;\n }\n try {\n await this.requestCluster(\n target.id,\n REQUEST_ASSIGN,\n { shardIds },\n { timeoutMs: this.#options.startTimeout ?? 120_000 },\n );\n } catch (error) {\n this.#emit(\n \"error\",\n new Error(\n `Cluster ${target.id} could not take over shards [${shardIds}]: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n return;\n }\n if (this.#stopping || failed.state !== \"failed\") return;\n for (const shard of shardIds) this.#owner.set(shard, target.id);\n target.shards.push(...shardIds);\n failed.shards = [];\n this.#emit(\"shardsReassigned\", {\n shardIds,\n from: failed.id,\n to: target.id,\n });\n }\n\n #clearStartTimer(id: number): void {\n const timer = this.#startTimers.get(id);\n if (timer) clearTimeout(timer);\n this.#startTimers.delete(id);\n }\n\n #sendFrame(cluster: ClusterInfo, frame: unknown): boolean {\n const child = cluster.process;\n if (\n !isLive(cluster.state) ||\n typeof child.send !== \"function\" ||\n !child.connected\n )\n return false;\n try {\n child.send(frame as never);\n return true;\n } catch {\n // The child is exiting; its own exit handler takes over.\n return false;\n }\n }\n\n /** Tells the surviving clusters that these shards are gone, so requests to them fail now instead of timing out. */\n #announceDown(exited: number, shards: number[]): void {\n for (const [id, cluster] of this.clusters)\n if (id !== exited)\n this.#sendFrame(cluster, { [PEER_DOWN_FRAME]: shards });\n }\n\n #onFrame(info: ClusterInfo, child: ChildProcess, frame: unknown): void {\n if (info.process !== child) return;\n if (!frame || typeof frame !== \"object\") return;\n if (BUS_FRAME in frame) {\n this.#onBus(info, (frame as Record<string, unknown>)[BUS_FRAME]);\n return;\n }\n if (CLUSTER_FRAME in frame) {\n const body = parseChildFrame(\n (frame as Record<string, unknown>)[CLUSTER_FRAME],\n );\n if (body) this.#onControl(info, child, body);\n else\n this.#emit(\n \"error\",\n new Error(\n `Cluster ${info.id} sent a malformed control frame.`,\n ),\n );\n }\n // Anything else is the bot's own process.send() traffic.\n }\n\n #onControl(\n info: ClusterInfo,\n child: ChildProcess,\n frame: ChildFrame,\n ): void {\n switch (frame.kind) {\n case \"ready\": {\n if (!frame.shardIds.every((id) => info.shards.includes(id))) {\n this.#emit(\n \"error\",\n new Error(\n `Cluster ${info.id} reported shards it does not own: [${frame.shardIds}].`,\n ),\n );\n return;\n }\n this.#clearStartTimer(info.id);\n info.state = \"ready\";\n info.readyAt = info.lastReadyAt = Date.now();\n this.#emit(\"clusterReady\", info);\n this.#checkReady();\n return;\n }\n case \"identify\": {\n const reply = (body: Record<string, unknown>): void => {\n if (info.process === child)\n this.#sendFrame(info, { [CLUSTER_FRAME]: body });\n };\n if (!this.#coordinator) {\n reply({\n kind: \"identify-deny\",\n id: frame.id,\n error: \"IDENTIFY coordination is off.\",\n });\n return;\n }\n if (!info.shards.includes(frame.shardId)) {\n reply({\n kind: \"identify-deny\",\n id: frame.id,\n error: `Shard ${frame.shardId} does not belong to cluster ${info.id}.`,\n });\n return;\n }\n // A shard asks for one slot at a time, so a worker cannot queue\n // more requests than it has shards.\n let waiting = this.#identifyWaiting.get(info.id);\n if (!waiting)\n this.#identifyWaiting.set(info.id, (waiting = new Set()));\n if (waiting.has(frame.shardId)) {\n reply({\n kind: \"identify-deny\",\n id: frame.id,\n error: `Shard ${frame.shardId} is already waiting for a slot.`,\n });\n return;\n }\n waiting.add(frame.shardId);\n const settled = (): void => {\n waiting.delete(frame.shardId);\n };\n this.#coordinator.acquire(info.id, frame.shardId).then(\n () => {\n settled();\n reply({ kind: \"identify-grant\", id: frame.id });\n },\n (error: unknown) => {\n settled();\n reply({\n kind: \"identify-deny\",\n id: frame.id,\n error:\n error instanceof Error\n ? error.message\n : String(error),\n });\n },\n );\n return;\n }\n case \"identify-done\":\n this.#coordinator?.release(info.id, frame.shardId);\n return;\n case \"reply\": {\n // An oversized answer settles the request with an error now\n // instead of being held until its timeout.\n const tooBig =\n frame.error === undefined && this.#tooBig(frame.result);\n this.#tracker.answer(frame.id, `c:${info.id}`, info.id, {\n ...(frame.error !== undefined\n ? { error: frame.error }\n : tooBig\n ? {\n error: `Cluster ${info.id} answered with more than ${this.#maxBytes} bytes.`,\n }\n : { result: frame.result }),\n });\n return;\n }\n case \"health\":\n if (this.#tooBig(frame.report)) {\n this.#emit(\n \"error\",\n new Error(\n `Cluster ${info.id} sent a health report of more than ${this.#maxBytes} bytes.`,\n ),\n );\n return;\n }\n info.report = frame.report;\n return;\n }\n }\n\n get #maxBytes(): number {\n return this.#options.maxMessageBytes ?? DEFAULT_MAX_MESSAGE_BYTES;\n }\n\n #tooBig(value: unknown): boolean {\n return payloadSize(value) > this.#maxBytes;\n }\n\n /** @throws {RangeError} If a payload this process is about to send is over the limit. */\n #assertSize(data: unknown, what: string): void {\n if (this.#tooBig(data))\n throw new RangeError(\n `${what} is larger than maxMessageBytes (${this.#maxBytes}).`,\n );\n }\n\n /** Routes one shard-bus message: replies for the parent are consumed, shard-targeted messages go to the owning cluster only, broadcasts to every other cluster. */\n #onBus(from: ClusterInfo, raw: unknown): void {\n const message = raw as {\n source?: unknown;\n target?: unknown;\n type?: unknown;\n data?: unknown;\n } | null;\n if (\n !message ||\n typeof message !== \"object\" ||\n typeof message.type !== \"string\" ||\n typeof message.source !== \"number\" ||\n (message.target !== null && !Number.isInteger(message.target))\n )\n return;\n if (this.#tooBig(message.data)) {\n this.#emit(\n \"error\",\n new Error(\n `Cluster ${from.id} sent a shard-bus message of more than ${this.#maxBytes} bytes; it was not relayed.`,\n ),\n );\n return;\n }\n const frame = { [BUS_FRAME]: message };\n if (message.target === PARENT_ID) {\n const reply = message.data as ReplyPayload | undefined;\n if (\n message.type === REPLY_TYPE &&\n reply &&\n typeof reply.requestId === \"string\"\n )\n this.#tracker.answer(\n reply.requestId,\n `s:${message.source}`,\n from.id,\n reply.error !== undefined\n ? { error: String(reply.error) }\n : { result: reply.result },\n );\n return;\n }\n if (message.target === null) {\n for (const [id, cluster] of this.clusters)\n if (id !== from.id) this.#sendFrame(cluster, frame);\n return;\n }\n const owner = this.clusterForShard(message.target as number);\n if (!owner || owner.id === from.id) return;\n // Fail fast: a request to a shard whose cluster is down rejects now.\n if (!this.#sendFrame(owner, frame))\n this.#sendFrame(from, {\n [PEER_DOWN_FRAME]: [message.target as number],\n });\n }\n\n /**\n * Sends a request to one shard and resolves with its handler's result.\n * @throws {RangeError} If the shard is not part of this deployment.\n * @throws {Error} If its cluster is down, the handler failed, or no answer arrives in time.\n */\n public async request<R = unknown, T = unknown>(\n shardId: number,\n type: string,\n data: T,\n options: RequestOptions = {},\n ): Promise<R> {\n this.#assertSize(data, \"The request data\");\n const owner = this.clusterForShard(shardId);\n if (!owner)\n throw new RangeError(\n `Shard ${shardId} is not part of this deployment.`,\n );\n const { id, done } = this.#tracker.begin<R>({\n keys: new Map([[`s:${shardId}`, owner.id]]),\n timeoutMs:\n options.timeoutMs ?? this.#options.requestTimeout ?? 5000,\n signal: options.signal,\n });\n const sent = this.#sendFrame(owner, {\n [BUS_FRAME]: {\n source: PARENT_ID,\n target: shardId,\n type,\n data,\n id,\n expectsReply: true,\n },\n });\n if (!sent) {\n this.#tracker.failOwner(\n owner.id,\n `Shard ${shardId} is down: cluster ${owner.id} is ${owner.state}.`,\n );\n }\n const { replies } = await done;\n const reply = replies[0];\n if (!reply)\n throw new Error(\n `Shard ${shardId} did not reply to \"${type}\" in time.`,\n );\n if (reply.error !== undefined) throw new Error(reply.error);\n return reply.result as R;\n }\n\n /**\n * Asks every shard of every live cluster and collects the answers. Shards\n * whose cluster is down, or that do not answer in time, are listed in\n * `missing`; it does not reject for them.\n */\n public async broadcast<R = unknown, T = unknown>(\n type: string,\n data: T,\n options: RequestOptions = {},\n ): Promise<BroadcastResult<R>> {\n this.#assertSize(data, \"The request data\");\n const keys = new Map<string, number>();\n const down: number[] = [];\n for (const [shard, clusterId] of this.#owner) {\n const cluster = this.#infos.get(clusterId);\n if (cluster && isLive(cluster.state))\n keys.set(`s:${shard}`, clusterId);\n else down.push(shard);\n }\n const { id, done } = this.#tracker.begin<R>({\n keys,\n timeoutMs:\n options.timeoutMs ?? this.#options.requestTimeout ?? 5000,\n signal: options.signal,\n });\n const frame = {\n [BUS_FRAME]: {\n source: PARENT_ID,\n target: null,\n type,\n data,\n id,\n expectsReply: true,\n },\n };\n for (const cluster of this.clusters.values())\n if (!this.#sendFrame(cluster, frame))\n this.#tracker.failOwner(\n cluster.id,\n `Cluster ${cluster.id} is ${cluster.state}.`,\n );\n const { replies, missing } = await done;\n return {\n replies: replies.map((reply) => ({\n shardId: Number(reply.key.slice(2)),\n ...(reply.error !== undefined\n ? { error: reply.error }\n : { result: reply.result as R }),\n })),\n missing: [\n ...down,\n ...missing.map((key) => Number(key.slice(2))),\n ].sort((a, b) => a - b),\n };\n }\n\n /**\n * Sends a request to a cluster's worker (see `ClusterWorker.onRequest()`).\n * @throws {Error} If the cluster is unknown or down, the handler failed, or no answer arrives in time.\n */\n public async requestCluster<R = unknown, T = unknown>(\n clusterId: number,\n type: string,\n data: T,\n options: RequestOptions = {},\n ): Promise<R> {\n this.#assertSize(data, \"The request data\");\n const cluster = this.#infos.get(clusterId);\n if (!cluster)\n throw new RangeError(`Cluster ${clusterId} does not exist.`);\n const { id, done } = this.#tracker.begin<R>({\n keys: new Map([[`c:${clusterId}`, clusterId]]),\n timeoutMs:\n options.timeoutMs ?? this.#options.requestTimeout ?? 5000,\n signal: options.signal,\n });\n if (\n !this.#sendFrame(cluster, {\n [CLUSTER_FRAME]: { kind: \"request\", id, type, data },\n })\n )\n this.#tracker.failOwner(\n clusterId,\n `Cluster ${clusterId} is ${cluster.state}.`,\n );\n const { replies } = await done;\n const reply = replies[0];\n if (!reply)\n throw new Error(\n `Cluster ${clusterId} did not reply to \"${type}\" in time.`,\n );\n if (reply.error !== undefined) throw new Error(reply.error);\n return reply.result as R;\n }\n\n /** Resolves when every cluster is ready. @throws {Error} On timeout, or if the manager stops first. */\n public ready(timeoutMs?: number): Promise<void> {\n if (this.#isReady()) return Promise.resolve();\n return new Promise<void>((resolve, reject) => {\n const waiter: {\n resolve: () => void;\n reject: (error: Error) => void;\n timer?: ReturnType<typeof setTimeout>;\n } = {\n resolve: () => {\n if (waiter.timer) clearTimeout(waiter.timer);\n this.#readyWaiters.delete(waiter);\n resolve();\n },\n reject: (error) => {\n if (waiter.timer) clearTimeout(waiter.timer);\n this.#readyWaiters.delete(waiter);\n reject(error);\n },\n };\n if (timeoutMs !== undefined)\n waiter.timer = setTimeout(\n () =>\n waiter.reject(\n new Error(\n `Clusters were not all ready within ${timeoutMs}ms.`,\n ),\n ),\n timeoutMs,\n );\n this.#readyWaiters.add(waiter);\n });\n }\n\n #isReady(): boolean {\n if (this.#infos.size === 0) return false;\n for (const cluster of this.#infos.values())\n if (cluster.state !== \"ready\") return false;\n return true;\n }\n\n #checkReady(): void {\n if (!this.#isReady()) return;\n for (const waiter of [...this.#readyWaiters]) waiter.resolve();\n if (!this.#allReady) {\n this.#allReady = true;\n this.#emit(\"ready\");\n }\n }\n\n /**\n * The last known health of every cluster and shard. Reads what the\n * workers last reported; nothing is sent. Use {@link refreshHealth} for fresh numbers.\n */\n public health(): ClusterManagerHealth {\n const now = Date.now();\n const clusters: ClusterHealth[] = [...this.#infos.values()]\n .sort((a, b) => a.id - b.id)\n .map((cluster) => ({\n id: cluster.id,\n state: cluster.state,\n ...(cluster.process.pid !== undefined && isLive(cluster.state)\n ? { pid: cluster.process.pid }\n : {}),\n host: cluster.host,\n shardIds: [...cluster.shards],\n uptimeMs: isLive(cluster.state) ? now - cluster.startedAt : 0,\n restarts: cluster.restarts,\n startedAt: cluster.startedAt,\n ...(cluster.readyAt !== undefined\n ? { readyAt: cluster.readyAt }\n : {}),\n ...(cluster.lastReadyAt !== undefined\n ? { lastReadyAt: cluster.lastReadyAt }\n : {}),\n shards: cluster.report?.shards ?? ([] as ShardHealth[]),\n ...(cluster.report?.metrics\n ? { metrics: cluster.report.metrics as WorkerMetrics }\n : {}),\n ...(cluster.report\n ? { reportedAt: cluster.report.reportedAt }\n : {}),\n }));\n const missingShards = [...this.#owner]\n .filter(([, id]) => this.#infos.get(id)?.state !== \"ready\")\n .map(([shard]) => shard)\n .sort((a, b) => a - b);\n const states = clusters.map((cluster) => cluster.state);\n const state: ClusterManagerHealth[\"state\"] = this.#stopping\n ? \"stopping\"\n : clusters.length === 0\n ? this.#wasStarted\n ? \"stopped\"\n : \"idle\"\n : states.every((s) => s === \"stopped\")\n ? \"stopped\"\n : states.every((s) => s === \"ready\")\n ? \"ready\"\n : states.some((s) => s === \"restarting\" || s === \"failed\")\n ? \"degraded\"\n : \"starting\";\n return {\n state,\n totalShards: this.shardCount,\n clusters,\n readyClusters: states.filter((s) => s === \"ready\").length,\n missingShards,\n };\n }\n\n /**\n * Asks every live cluster for a fresh report, then returns {@link health}.\n * A cluster that does not answer in time keeps its last report; it is not\n * treated as failed (only its process exiting does that).\n */\n public async refreshHealth(\n options: { metrics?: boolean; timeoutMs?: number } = {},\n ): Promise<ClusterManagerHealth> {\n await Promise.all(\n [...this.clusters.values()].map(async (cluster) => {\n try {\n cluster.report = await this.requestCluster<WorkerReport>(\n cluster.id,\n REQUEST_HEALTH,\n { metrics: options.metrics === true },\n { timeoutMs: options.timeoutMs ?? 2000 },\n );\n } catch {\n // Keep the previous report.\n }\n }),\n );\n return this.health();\n }\n\n /** Checks if the recommended shard count has changed and respawns if so. */\n public async checkAutoScale(): Promise<void> {\n if (!this.#auto) return; // Only auto-scale in auto mode\n try {\n const recommended = await this.fetchRecommendedShardCount();\n if (recommended !== this.shardCount) {\n await this.respawn(recommended);\n }\n } catch (error) {\n // Surface the failure instead of silently swallowing it; the next\n // interval tick retries.\n const normalized =\n error instanceof Error ? error : new Error(String(error));\n this.#options.onAutoScaleError?.(normalized);\n }\n }\n\n /** Gracefully shuts the existing clusters down and respawns them with the new shard count. @param newShardCount The new total shard count. */\n public async respawn(newShardCount: number): Promise<void> {\n this.#options.shardCount = newShardCount;\n // Hosts stay connected across a respawn, so they need not rejoin.\n await this.#stop(this.#options.shutdownTimeout ?? 5000, true);\n this.#supervisor.reset();\n await this.spawn();\n }\n\n /**\n * Gracefully stops all active clusters: sends SIGTERM, awaits each child's\n * clean exit, and force-kills (SIGKILL) only children that outlast the\n * shutdown timeout. Safe to call twice or concurrently; cancels restarts,\n * timers and pending requests.\n * @param timeoutMs Grace period per child before force-kill. Defaults to the configured `shutdownTimeout` (5000 ms).\n */\n public shutdownAll(\n timeoutMs = this.#options.shutdownTimeout ?? 5000,\n ): Promise<void> {\n return this.#stop(timeoutMs, false);\n }\n\n #stop(timeoutMs: number, keepRemote: boolean): Promise<void> {\n this.#stopPromise ??= this.#shutdown(timeoutMs, keepRemote).finally(\n () => {\n this.#stopPromise = undefined;\n },\n );\n return this.#stopPromise;\n }\n\n async #shutdown(timeoutMs: number, keepRemote: boolean): Promise<void> {\n this.#stopping = true;\n this.#halt();\n // A spawn that is still forking sees `#stopping` and stops on its own.\n await this.#startPromise?.catch(() => undefined);\n await Promise.all(\n [...this.clusters.values()].map((cluster) =>\n this.#shutdownCluster(cluster, timeoutMs),\n ),\n );\n for (const cluster of this.#infos.values()) cluster.state = \"stopped\";\n this.clusters.clear();\n this.#startPromise = undefined;\n if (!keepRemote) this.#remote?.stop();\n this.#stopping = false;\n }\n\n /** Cancels everything that could start work or keep the loop alive. */\n #halt(): void {\n for (const timer of this.#restartTimers) clearTimeout(timer);\n this.#restartTimers.clear();\n for (const id of [...this.#startTimers.keys()])\n this.#clearStartTimer(id);\n for (const wake of [...this.#pauses]) wake();\n if (this.#autoScaleTimer) {\n clearInterval(this.#autoScaleTimer);\n this.#autoScaleTimer = undefined;\n }\n this.#coordinator?.close();\n this.#coordinator = undefined;\n this.#remote?.abortWaits();\n this.#tracker.close();\n for (const waiter of [...this.#readyWaiters])\n waiter.reject(new Error(\"The cluster manager is stopping.\"));\n }\n\n /** Gracefully terminates a single cluster child, escalating to SIGKILL after the timeout. */\n async #shutdownCluster(\n cluster: ClusterInfo,\n timeoutMs: number,\n ): Promise<void> {\n const child = cluster.process;\n cluster.state = \"stopping\";\n if (child.exitCode !== null || child.signalCode !== null) return;\n await new Promise<void>((resolve) => {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const finish = (): void => {\n if (timer) clearTimeout(timer);\n resolve();\n };\n child.once(\"exit\", finish);\n try {\n child.kill(\"SIGTERM\");\n } catch {\n child.off(\"exit\", finish);\n finish();\n return;\n }\n timer = setTimeout(() => {\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // Ignore force-kill errors.\n }\n }, timeoutMs);\n });\n }\n\n /** Immediately force-kills all active cluster processes and clears the cluster map. Prefer {@link shutdownAll} for a graceful stop. */\n public killAll(): void {\n this.#stopping = true;\n this.#halt();\n for (const cluster of this.#infos.values()) {\n cluster.state = \"stopped\";\n try {\n cluster.process.kill();\n } catch {\n // Ignore kill errors\n }\n }\n this.clusters.clear();\n this.#startPromise = undefined;\n this.#remote?.stop();\n this.#stopping = false;\n }\n}\n",
79
+ "/** Discord allows one IDENTIFY per rate-limit key every five seconds. */\nexport const IDENTIFY_INTERVAL = 5000;\n\n/** What `/gateway/bot` says about the session budget. */\nexport interface IdentifyBudget {\n total: number;\n remaining: number;\n /** Milliseconds until `remaining` resets, counted from construction. */\n resetAfter: number;\n}\n\n/** Options for an {@link IdentifyCoordinator}. */\nexport interface IdentifyCoordinatorOptions {\n /** Discord's `max_concurrency`: shards with the same `id % maxConcurrency` share a key. Default 1. */\n maxConcurrency?: number;\n /** Milliseconds between two IDENTIFYs on one key. Default 5000. */\n interval?: number;\n /** The session-start budget, when known. Without it the coordinator paces but never blocks. */\n budget?: IdentifyBudget;\n /** A granted slot that is not released within this many ms is released for the holder. Default 60,000. */\n holdTimeout?: number;\n /** Clock, injectable for tests. */\n now?: () => number;\n /** Timer, injectable for tests. Must return a handle `cancel` understands. */\n schedule?: (callback: () => void, ms: number) => unknown;\n cancel?: (handle: unknown) => void;\n /** Called when a request has to wait for the budget to reset. */\n onBudgetWait?: (info: { shardId: number; waitMs: number }) => void;\n}\n\ninterface Waiter {\n owner: number;\n shardId: number;\n grant: () => void;\n fail: (error: Error) => void;\n}\n\ninterface Key {\n queue: Waiter[];\n /** The grant that has not been released yet. */\n holder?: { owner: number; shardId: number; timer: unknown };\n /** Earliest time the next IDENTIFY may start. */\n nextAt: number;\n}\n\n/**\n * Hands out IDENTIFY slots for a whole deployment. Every cluster asks the\n * parent, so the limit holds across processes: one IDENTIFY per rate-limit key\n * per interval, and no more IDENTIFYs than `session_start_limit.remaining`.\n * It only does arithmetic on timestamps and holds one timer, so it can be\n * tested with a fake clock.\n */\nexport class IdentifyCoordinator {\n readonly maxConcurrency: number;\n readonly #interval: number;\n readonly #holdTimeout: number;\n readonly #now: () => number;\n readonly #schedule: (callback: () => void, ms: number) => unknown;\n readonly #cancel: (handle: unknown) => void;\n readonly #onBudgetWait?: IdentifyCoordinatorOptions[\"onBudgetWait\"];\n readonly #keys = new Map<number, Key>();\n #remaining: number | undefined;\n #total: number | undefined;\n #resetAt = Number.POSITIVE_INFINITY;\n #timer: unknown;\n #timerAt = Number.POSITIVE_INFINITY;\n #closed = false;\n\n public constructor(options: IdentifyCoordinatorOptions = {}) {\n const concurrency = options.maxConcurrency ?? 1;\n if (!Number.isInteger(concurrency) || concurrency < 1)\n throw new RangeError(\"maxConcurrency must be a positive integer.\");\n const interval = options.interval ?? IDENTIFY_INTERVAL;\n const hold = options.holdTimeout ?? 60_000;\n if (!(interval >= 0) || !(hold > 0))\n throw new RangeError(\n \"interval cannot be negative and holdTimeout must be positive.\",\n );\n this.maxConcurrency = concurrency;\n this.#interval = interval;\n this.#holdTimeout = hold;\n this.#now = options.now ?? Date.now;\n this.#schedule =\n options.schedule ??\n ((callback, ms) => {\n const timer = setTimeout(callback, ms);\n (timer as { unref?: () => void }).unref?.();\n return timer;\n });\n this.#cancel =\n options.cancel ??\n ((handle) => clearTimeout(handle as ReturnType<typeof setTimeout>));\n this.#onBudgetWait = options.onBudgetWait;\n if (options.budget) {\n this.#total = options.budget.total;\n this.#remaining = options.budget.remaining;\n this.#resetAt = this.#now() + options.budget.resetAfter;\n }\n }\n\n /** Slots left in the session budget, or `undefined` when it is unknown. */\n public get remaining(): number | undefined {\n return this.#remaining;\n }\n\n /** Requests waiting for a slot. */\n public get waiting(): number {\n let count = 0;\n for (const key of this.#keys.values()) count += key.queue.length;\n return count;\n }\n\n /** Slots granted and not yet released. */\n public get holding(): number {\n let count = 0;\n for (const key of this.#keys.values()) if (key.holder) count++;\n return count;\n }\n\n /**\n * Waits for the shard's turn. Resolves when the shard may IDENTIFY now;\n * call {@link release} once it has. Rejects if `owner` is dropped or the\n * coordinator closes first.\n */\n public acquire(owner: number, shardId: number): Promise<void> {\n if (this.#closed)\n return Promise.reject(new Error(\"IDENTIFY coordinator is closed.\"));\n const index = shardId % this.maxConcurrency;\n let key = this.#keys.get(index);\n if (!key) this.#keys.set(index, (key = { queue: [], nextAt: 0 }));\n return new Promise<void>((grant, fail) => {\n key.queue.push({ owner, shardId, grant, fail });\n this.pump();\n });\n }\n\n /** The shard has sent its IDENTIFY: its key rests for one interval. Ignored unless `owner` holds the slot. */\n public release(owner: number, shardId: number): void {\n const key = this.#keys.get(shardId % this.maxConcurrency);\n const holder = key?.holder;\n if (\n !key ||\n !holder ||\n holder.owner !== owner ||\n holder.shardId !== shardId\n )\n return;\n this.#free(key);\n this.pump();\n }\n\n /** A cluster is gone: forget its waiting requests and free the slots it held. */\n public drop(owner: number, reason = \"The cluster went away.\"): void {\n for (const key of this.#keys.values()) {\n const keep: Waiter[] = [];\n for (const waiter of key.queue)\n if (waiter.owner === owner) waiter.fail(new Error(reason));\n else keep.push(waiter);\n key.queue = keep;\n if (key.holder?.owner === owner) this.#free(key);\n }\n this.pump();\n }\n\n /** Rejects every waiter and stops the timer. */\n public close(): void {\n this.#closed = true;\n if (this.#timer !== undefined) this.#cancel(this.#timer);\n this.#timer = undefined;\n this.#timerAt = Number.POSITIVE_INFINITY;\n for (const key of this.#keys.values()) {\n if (key.holder) this.#cancel(key.holder.timer);\n key.holder = undefined;\n for (const waiter of key.queue)\n waiter.fail(new Error(\"IDENTIFY coordinator is closed.\"));\n key.queue = [];\n }\n }\n\n /** Grants every slot that is due and arms one timer for the next. Called internally and by tests after moving the clock. */\n public pump(): void {\n if (this.#closed) return;\n const now = this.#now();\n if (this.#total !== undefined && now >= this.#resetAt) {\n this.#remaining = this.#total;\n this.#resetAt = Number.POSITIVE_INFINITY;\n }\n let next = Number.POSITIVE_INFINITY;\n for (const key of this.#keys.values()) {\n if (key.holder || key.queue.length === 0) continue;\n if (key.nextAt > now) {\n next = Math.min(next, key.nextAt);\n continue;\n }\n if (this.#remaining !== undefined && this.#remaining <= 0) {\n const waiter = key.queue[0]!;\n if (this.#resetAt === Number.POSITIVE_INFINITY) {\n // No reset time is known: nothing can be granted, fail loudly.\n key.queue.shift();\n waiter.fail(\n new Error(\"The session start limit is exhausted.\"),\n );\n continue;\n }\n this.#onBudgetWait?.({\n shardId: waiter.shardId,\n waitMs: this.#resetAt - now,\n });\n next = Math.min(next, this.#resetAt);\n continue;\n }\n const waiter = key.queue.shift()!;\n if (this.#remaining !== undefined) this.#remaining--;\n const timer = this.#schedule(() => {\n if (key.holder?.timer === timer) {\n this.#free(key);\n this.pump();\n }\n }, this.#holdTimeout);\n key.holder = {\n owner: waiter.owner,\n shardId: waiter.shardId,\n timer,\n };\n waiter.grant();\n }\n this.#arm(next);\n }\n\n #free(key: Key): void {\n if (key.holder) this.#cancel(key.holder.timer);\n key.holder = undefined;\n key.nextAt = this.#now() + this.#interval;\n }\n\n #arm(at: number): void {\n if (at === this.#timerAt && this.#timer !== undefined) return;\n if (this.#timer !== undefined) this.#cancel(this.#timer);\n this.#timer = undefined;\n this.#timerAt = Number.POSITIVE_INFINITY;\n if (at === Number.POSITIVE_INFINITY) return;\n this.#timerAt = at;\n this.#timer = this.#schedule(\n () => {\n this.#timer = undefined;\n this.#timerAt = Number.POSITIVE_INFINITY;\n this.pump();\n },\n Math.max(0, at - this.#now()),\n );\n }\n}\n",
80
+ "import { EventEmitter } from \"node:events\";\nimport { randomBytes } from \"node:crypto\";\nimport type { ChildProcess } from \"node:child_process\";\nimport type { Server, ServerWebSocket } from \"bun\";\nimport {\n HOST_ID,\n MAX_REMOTE_FRAME_BYTES,\n isLoopbackHost,\n REMOTE_PROTOCOL_VERSION,\n RemoteClose,\n parseToCoordinator,\n verifyChallenge,\n type ToHost,\n} from \"./remote-protocol.js\";\n\n/** Where, and how, a coordinator listens for hosts. */\nexport interface RemoteOptions {\n /** TCP port. `0` picks a free one (read it from `ClusterManager#remotePort`). */\n port: number;\n /**\n * Interface to bind. Default `127.0.0.1`, which only this machine can\n * reach. Any other address needs `tls` or `allowInsecure`.\n */\n hostname?: string;\n /** Shared secret, at least 16 characters. Hosts prove they know it; it never crosses the wire. */\n secret: string;\n /** TLS for `wss://`. Required to listen on a non-loopback address unless `allowInsecure` is set. */\n tls?: { cert: string; key: string };\n /**\n * Listen on a non-loopback address without TLS: frames (shard messages\n * and worker output) travel unencrypted and unsigned. Only for a network\n * you fully trust, or when a TLS proxy in front terminates the connection.\n * Default false.\n */\n allowInsecure?: boolean;\n /**\n * The host IDs that make up the deployment. Clusters are placed on them in\n * this order, and an unlisted host is refused. Without it, the hosts that\n * have joined when `spawn()` starts are used, sorted by ID.\n */\n hosts?: string[];\n /** How many hosts must join before clusters are placed when `hosts` is not set. Default 1. */\n minHosts?: number;\n /** Milliseconds to wait for the hosts to join before `spawn()` fails. Default 60,000. */\n joinTimeout?: number;\n /**\n * Fencing lease in milliseconds. A host that hears nothing from the\n * coordinator for this long kills its workers; the coordinator waits twice\n * as long before it treats the host as lost and restarts its clusters, so\n * a shard never runs in two places. Default 15,000.\n */\n lease?: number;\n /** Milliseconds a new connection has to authenticate before it is closed. Default 10,000. */\n helloTimeout?: number;\n /** Most connections that may be waiting to authenticate at once; more are closed. Default 16. */\n maxUnauthenticated?: number;\n /** Also run clusters on the coordinator's own machine. Default false: clusters run on the hosts only. */\n local?: boolean;\n}\n\n/** A host as the coordinator sees it. */\nexport interface HostStatus {\n id: string;\n /** Whether its socket is open and answering. */\n connected: boolean;\n /** When it last sent anything (epoch ms). */\n lastSeen: number;\n /** Clusters currently running on it. */\n clusters: number[];\n}\n\ninterface SocketData {\n nonce: string;\n id?: string;\n /** Whether this socket is counted in `#unauthenticated`. */\n counted?: boolean;\n helloTimer?: ReturnType<typeof setTimeout>;\n}\n\ninterface Link {\n id: string;\n ws: ServerWebSocket<SocketData>;\n lastSeen: number;\n children: Map<number, RemoteChild>;\n}\n\ntype Kill = (signal: string) => boolean;\n\n/** What the coordinator wants to hear about its hosts. */\nexport interface RemoteHooks {\n join(id: string): void;\n leave(id: string, reason: string): void;\n error(error: Error): void;\n}\n\n/**\n * A worker process on another host, shaped like the `ChildProcess` that\n * `ClusterManager` supervises. `send()` and `kill()` travel to the host's\n * agent; its messages and exit travel back, so the manager's restart,\n * IDENTIFY, routing and health logic needs no special case for it.\n */\nexport class RemoteChild extends EventEmitter {\n public pid: number | undefined;\n public exitCode: number | null = null;\n public signalCode: NodeJS.Signals | null = null;\n public connected = true;\n\n readonly #send: (frame: unknown) => boolean;\n readonly #kill: Kill;\n\n public constructor(\n public readonly host: string,\n public readonly cluster: number,\n public readonly epoch: number,\n send: (frame: unknown) => boolean,\n kill: Kill,\n ) {\n super();\n this.#send = send;\n this.#kill = kill;\n }\n\n /** Sends an IPC frame to the worker. */\n public send(frame: unknown): boolean {\n return this.connected &&\n this.exitCode === null &&\n this.signalCode === null\n ? this.#send(frame)\n : false;\n }\n\n /** Asks the host to signal the worker; the exit arrives as an event. */\n public kill(signal: string = \"SIGTERM\"): boolean {\n if (this.exitCode !== null || this.signalCode !== null) return false;\n return this.#kill(signal);\n }\n\n /** The agent says the worker started. */\n public spawned(pid: number | undefined): void {\n this.pid = pid;\n }\n\n /** The worker sent a message. */\n public deliver(frame: unknown): void {\n if (this.exitCode === null && this.signalCode === null)\n this.emit(\"message\", frame);\n }\n\n /** The worker exited, or its host was lost. Emits `exit` once. */\n public finish(code: number | null, signal: string | null): void {\n if (this.exitCode !== null || this.signalCode !== null) return;\n this.connected = false;\n // `exitCode` and `signalCode` must not both stay null once finished.\n this.exitCode = code ?? (signal === null ? 1 : null);\n this.signalCode = (signal as NodeJS.Signals | null) ?? null;\n this.emit(\"exit\", code, signal);\n }\n}\n\n/** The coordinator's listener and the hosts that joined it. */\nexport class RemoteHosts {\n readonly #options: Required<\n Pick<RemoteOptions, \"port\" | \"secret\" | \"lease\">\n > &\n RemoteOptions;\n readonly #links = new Map<string, Link>();\n readonly #waiters = new Set<{ check(): void; abort(error: Error): void }>();\n readonly #hooks: RemoteHooks;\n #server?: Server<SocketData>;\n #watchdog?: ReturnType<typeof setInterval>;\n #epoch = 0;\n #ping = 0;\n /** Sockets that have not said hello yet. */\n #unauthenticated = 0;\n\n public constructor(options: RemoteOptions, hooks: RemoteHooks) {\n if (typeof options.secret !== \"string\" || options.secret.length < 16)\n throw new RangeError(\n \"remote.secret must be a string of at least 16 characters.\",\n );\n if (\n !Number.isInteger(options.port) ||\n options.port < 0 ||\n options.port > 65535\n )\n throw new RangeError(\n \"remote.port must be an integer from 0 to 65535.\",\n );\n if (\n options.tls &&\n (typeof options.tls.cert !== \"string\" ||\n typeof options.tls.key !== \"string\" ||\n !options.tls.cert ||\n !options.tls.key)\n )\n throw new TypeError(\"remote.tls needs a non-empty cert and key.\");\n if (\n !options.tls &&\n !options.allowInsecure &&\n !isLoopbackHost(options.hostname ?? \"127.0.0.1\")\n )\n throw new RangeError(\n \"remote listens on a network address without TLS: set remote.tls, bind 127.0.0.1 behind a TLS proxy, or set remote.allowInsecure for a network you fully trust.\",\n );\n const lease = options.lease ?? 15_000;\n if (!Number.isFinite(lease) || lease < 30)\n throw new RangeError(\n \"remote.lease must be at least 30 milliseconds.\",\n );\n for (const id of options.hosts ?? [])\n if (!HOST_ID.test(id))\n throw new RangeError(`\"${id}\" is not a valid host ID.`);\n if (\n options.hosts &&\n (options.hosts.length === 0 ||\n new Set(options.hosts).size !== options.hosts.length)\n )\n throw new RangeError(\"remote.hosts must be unique and not empty.\");\n if (\n options.minHosts !== undefined &&\n (!Number.isInteger(options.minHosts) || options.minHosts < 1)\n )\n throw new RangeError(\"remote.minHosts must be a positive integer.\");\n this.#options = { ...options, lease };\n this.#hooks = hooks;\n }\n\n /** The port in use, once started. */\n public get port(): number | undefined {\n return this.#server?.port;\n }\n\n /** Host IDs that are connected now, sorted. */\n public connected(): string[] {\n return [...this.#links.keys()].sort();\n }\n\n /** Opens the listener. Safe to call twice. */\n public start(): void {\n if (this.#server) return;\n const { port, hostname, tls, lease } = this.#options;\n this.#server = Bun.serve<SocketData>({\n port,\n hostname: hostname ?? \"127.0.0.1\",\n ...(tls ? { tls } : {}),\n fetch: (request, server) => {\n if (\n server.upgrade(request, {\n data: { nonce: randomBytes(16).toString(\"hex\") },\n })\n )\n return undefined;\n return new Response(\"Lunibee cluster coordinator\", {\n status: 426,\n });\n },\n websocket: {\n maxPayloadLength: MAX_REMOTE_FRAME_BYTES,\n idleTimeout: 0,\n open: (ws) => this.#open(ws),\n message: (ws, raw) => this.#message(ws, raw),\n close: (ws, _code, reason) => this.#closed(ws, reason),\n },\n });\n const pingMs = Math.max(10, Math.floor(lease / 3));\n this.#watchdog = setInterval(() => this.#tick(), pingMs);\n (this.#watchdog as { unref?: () => void }).unref?.();\n }\n\n /** Closes the listener and every host connection. */\n public stop(): void {\n if (this.#watchdog) clearInterval(this.#watchdog);\n this.#watchdog = undefined;\n for (const link of [...this.#links.values()]) {\n this.#post(link, { t: \"bye\", reason: \"The coordinator stopped.\" });\n this.#drop(link, \"The coordinator stopped.\", RemoteClose.Shutdown);\n }\n void this.#server?.stop(true);\n this.#server = undefined;\n this.abortWaits();\n }\n\n /** Resolves when the given hosts (or `count` hosts) are connected. @throws {Error} On timeout. */\n public waitFor(\n hosts: readonly string[] | undefined,\n count: number,\n timeoutMs: number,\n ): Promise<void> {\n const done = (): boolean =>\n hosts\n ? hosts.every((id) => this.#links.has(id))\n : this.#links.size >= count;\n if (done()) return Promise.resolve();\n return new Promise<void>((resolve, reject) => {\n const waiter = {\n check: (): void => {\n if (!done()) return;\n clearTimeout(timer);\n this.#waiters.delete(waiter);\n resolve();\n },\n abort: (error: Error): void => {\n clearTimeout(timer);\n this.#waiters.delete(waiter);\n reject(error);\n },\n };\n const timer = setTimeout(() => {\n const missing = hosts?.filter((id) => !this.#links.has(id));\n waiter.abort(\n new Error(\n hosts\n ? `Hosts did not join within ${timeoutMs}ms: [${missing}].`\n : `Only ${this.#links.size} of ${count} hosts joined within ${timeoutMs}ms.`,\n ),\n );\n }, timeoutMs);\n this.#waiters.add(waiter);\n });\n }\n\n /** Fails everything waiting for hosts to join (a shutdown). */\n public abortWaits(): void {\n for (const waiter of [...this.#waiters])\n waiter.abort(new Error(\"The coordinator stopped.\"));\n }\n\n /** Hosts and the clusters running on them. */\n public status(declared: readonly string[] = []): HostStatus[] {\n const ids = new Set([...declared, ...this.#links.keys()]);\n return [...ids].sort().map((id) => {\n const link = this.#links.get(id);\n return {\n id,\n connected: link !== undefined,\n lastSeen: link?.lastSeen ?? 0,\n clusters: link\n ? [...link.children.keys()].sort((a, b) => a - b)\n : [],\n };\n });\n }\n\n /**\n * Starts a worker on `hostId`. If the host is not connected the returned\n * child exits at once, which `ClusterManager` handles like a crash.\n */\n public createChild(\n hostId: string,\n cluster: number,\n env: Record<string, string>,\n ): ChildProcess {\n const epoch = ++this.#epoch;\n const link = this.#links.get(hostId);\n const child = new RemoteChild(\n hostId,\n cluster,\n epoch,\n (frame) =>\n link !== undefined &&\n this.#post(link, { t: \"frame\", cluster, epoch, frame }),\n (signal) =>\n link !== undefined &&\n this.#post(link, { t: \"kill\", cluster, epoch, signal }),\n );\n if (!link) {\n queueMicrotask(() => child.finish(null, \"SIGHUP\"));\n return child as unknown as ChildProcess;\n }\n link.children.get(cluster)?.finish(null, \"SIGKILL\");\n link.children.set(cluster, child);\n if (!this.#post(link, { t: \"spawn\", cluster, epoch, env }))\n queueMicrotask(() => child.finish(null, \"SIGHUP\"));\n return child as unknown as ChildProcess;\n }\n\n #post(link: Link, message: ToHost): boolean {\n try {\n return link.ws.send(JSON.stringify(message)) > 0;\n } catch {\n return false;\n }\n }\n\n #open(ws: ServerWebSocket<SocketData>): void {\n if (this.#unauthenticated >= (this.#options.maxUnauthenticated ?? 16)) {\n ws.close(RemoteClose.TooManyConnections, \"Too many connections.\");\n return;\n }\n this.#unauthenticated++;\n ws.data.counted = true;\n ws.data.helloTimer = setTimeout(\n () => ws.close(RemoteClose.HelloTimeout, \"No hello.\"),\n this.#options.helloTimeout ?? 10_000,\n );\n ws.send(\n JSON.stringify({\n t: \"challenge\",\n nonce: ws.data.nonce,\n version: REMOTE_PROTOCOL_VERSION,\n } satisfies ToHost),\n );\n }\n\n #message(ws: ServerWebSocket<SocketData>, raw: string | Buffer): void {\n if (typeof raw !== \"string\") {\n ws.close(RemoteClose.BadRequest, \"Text frames only.\");\n return;\n }\n const message = parseToCoordinator(raw);\n if (!message) {\n ws.close(RemoteClose.BadRequest, \"Malformed frame.\");\n return;\n }\n if (ws.data.id === undefined) {\n this.#hello(ws, message);\n return;\n }\n const link = this.#links.get(ws.data.id);\n if (!link || link.ws !== ws) return;\n link.lastSeen = Date.now();\n if (message.t === \"pong\" || message.t === \"hello\") return;\n const child = link.children.get(message.cluster);\n // A frame from an earlier process of the same cluster is stale.\n if (!child || child.epoch !== message.epoch) return;\n switch (message.t) {\n case \"spawned\":\n child.spawned(message.pid);\n break;\n case \"frame\":\n child.deliver(message.frame);\n break;\n case \"exit\":\n link.children.delete(message.cluster);\n child.finish(message.code, message.signal);\n break;\n case \"error\":\n this.#hooks.error(\n new Error(\n `Host ${link.id} could not run cluster ${message.cluster}: ${message.message}`,\n ),\n );\n link.children.delete(message.cluster);\n child.finish(1, null);\n break;\n }\n }\n\n #hello(\n ws: ServerWebSocket<SocketData>,\n message: ReturnType<typeof parseToCoordinator>,\n ): void {\n if (message?.t !== \"hello\") {\n ws.close(RemoteClose.BadRequest, \"Expected hello.\");\n return;\n }\n const { id } = message;\n if (message.version !== REMOTE_PROTOCOL_VERSION) {\n ws.close(RemoteClose.VersionMismatch, \"Protocol version mismatch.\");\n return;\n }\n if (\n !HOST_ID.test(id) ||\n !verifyChallenge(\n this.#options.secret,\n ws.data.nonce,\n id,\n message.mac,\n )\n ) {\n ws.close(RemoteClose.AuthFailed, \"Authentication failed.\");\n return;\n }\n if (this.#options.hosts && !this.#options.hosts.includes(id)) {\n ws.close(\n RemoteClose.UnknownHost,\n \"Host is not part of this deployment.\",\n );\n return;\n }\n if (this.#links.has(id)) {\n ws.close(\n RemoteClose.DuplicateHost,\n \"A host with this ID is connected.\",\n );\n return;\n }\n clearTimeout(ws.data.helloTimer);\n this.#uncount(ws);\n ws.data.id = id;\n const link: Link = {\n id,\n ws,\n lastSeen: Date.now(),\n children: new Map(),\n };\n this.#links.set(id, link);\n const lease = this.#options.lease;\n this.#post(link, {\n t: \"welcome\",\n leaseMs: lease,\n pingMs: Math.max(10, Math.floor(lease / 3)),\n });\n this.#hooks.join(id);\n for (const waiter of [...this.#waiters]) waiter.check();\n }\n\n #uncount(ws: ServerWebSocket<SocketData>): void {\n if (ws.data.counted) {\n ws.data.counted = false;\n this.#unauthenticated--;\n }\n }\n\n #closed(ws: ServerWebSocket<SocketData>, reason: string): void {\n clearTimeout(ws.data.helloTimer);\n this.#uncount(ws);\n const link = ws.data.id ? this.#links.get(ws.data.id) : undefined;\n if (link && link.ws === ws)\n this.#drop(link, reason || \"The connection closed.\");\n }\n\n /** Forgets a host and ends every worker it ran. */\n #drop(link: Link, reason: string, code?: number): void {\n if (this.#links.get(link.id) !== link) return;\n this.#links.delete(link.id);\n if (code !== undefined)\n try {\n link.ws.close(code, reason.slice(0, 100));\n } catch {\n // Already closed.\n }\n for (const child of [...link.children.values()])\n child.finish(null, \"SIGHUP\");\n link.children.clear();\n this.#hooks.leave(link.id, reason);\n }\n\n #tick(): void {\n const now = Date.now();\n for (const link of [...this.#links.values()]) {\n // The host fences itself after one lease of silence; the\n // coordinator waits for a second before it lets anything restart.\n if (now - link.lastSeen > this.#options.lease * 2) {\n this.#drop(\n link,\n \"The host stopped answering.\",\n RemoteClose.HostLost,\n );\n continue;\n }\n this.#post(link, { t: \"ping\", n: ++this.#ping });\n }\n }\n}\n",
81
+ "import { createHmac, timingSafeEqual } from \"node:crypto\";\n\n/** Version of the coordinator ↔ host wire protocol. Both sides must agree. */\nexport const REMOTE_PROTOCOL_VERSION = 1;\n/** Largest text frame either side accepts, in UTF-8 bytes. */\nexport const MAX_REMOTE_FRAME_BYTES = 8 * 1024 * 1024;\n\n/** WebSocket close codes used between a coordinator and a host. */\nexport const RemoteClose = {\n BadRequest: 4400,\n AuthFailed: 4401,\n HelloTimeout: 4408,\n DuplicateHost: 4409,\n TooManyConnections: 4429,\n UnknownHost: 4410,\n VersionMismatch: 4426,\n HostLost: 4504,\n Shutdown: 4500,\n} as const;\n\n/**\n * The only environment variables a coordinator may set in a remote worker.\n * Everything else comes from the host's own environment, so a coordinator\n * cannot inject `NODE_OPTIONS`, `LD_PRELOAD` or a token.\n */\nexport const SPAWN_ENV_KEYS: ReadonlySet<string> = new Set([\n \"SHARD_LIST\",\n \"SHARD_COUNT\",\n \"CLUSTER_ID\",\n \"CLUSTER_COUNT\",\n \"LUNIBEE_SHARD_BUS\",\n \"LUNIBEE_CLUSTER_WORKER\",\n \"LUNIBEE_IDENTIFY\",\n]);\n\n/** Signals a coordinator may send to a remote worker. */\nexport const KILL_SIGNALS: ReadonlySet<string> = new Set([\n \"SIGTERM\",\n \"SIGKILL\",\n \"SIGINT\",\n]);\n\n/** Whether a host name is this machine, where an unencrypted link is acceptable. */\nexport function isLoopbackHost(hostname: string): boolean {\n return /^(?:localhost|127(?:\\.\\d{1,3}){3}|\\[::1\\]|::1)$/i.test(hostname);\n}\n\n/** A host ID: letters, digits, `.`, `_` and `-`, up to 64 characters. */\nexport const HOST_ID = /^[A-Za-z0-9._-]{1,64}$/;\n\n/** Frames the coordinator sends to a host. */\nexport type ToHost =\n | { t: \"challenge\"; nonce: string; version: number }\n | { t: \"welcome\"; leaseMs: number; pingMs: number }\n | { t: \"ping\"; n: number }\n | {\n t: \"spawn\";\n cluster: number;\n epoch: number;\n env: Record<string, string>;\n }\n | { t: \"frame\"; cluster: number; epoch: number; frame: unknown }\n | { t: \"kill\"; cluster: number; epoch: number; signal: string }\n | { t: \"bye\"; reason: string };\n\n/** Frames a host sends to the coordinator. */\nexport type ToCoordinator =\n | { t: \"hello\"; id: string; mac: string; version: number }\n | { t: \"pong\"; n: number }\n | { t: \"spawned\"; cluster: number; epoch: number; pid?: number }\n | { t: \"frame\"; cluster: number; epoch: number; frame: unknown }\n | {\n t: \"exit\";\n cluster: number;\n epoch: number;\n code: number | null;\n signal: string | null;\n }\n | { t: \"error\"; cluster: number; epoch: number; message: string };\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst isInt = (value: unknown): value is number =>\n typeof value === \"number\" && Number.isInteger(value) && value >= 0;\n\n/** The size of a string on the wire, in UTF-8 bytes. */\nexport function utf8Bytes(text: string): number {\n return Buffer.byteLength(text, \"utf8\");\n}\n\nfunction parseJson(\n text: unknown,\n maxBytes: number,\n): Record<string, unknown> | null {\n if (typeof text !== \"string\") return null;\n // A UTF-16 code unit takes at least one byte and at most three, so the\n // length decides most frames without counting bytes.\n if (text.length > maxBytes) return null;\n if (text.length * 3 > maxBytes && utf8Bytes(text) > maxBytes) return null;\n try {\n const value: unknown = JSON.parse(text);\n return isRecord(value) ? value : null;\n } catch {\n return null;\n }\n}\n\n/** The proof a host sends: an HMAC of the coordinator's nonce and the host ID, keyed by the shared secret. The secret itself never travels. */\nexport function signChallenge(\n secret: string,\n nonce: string,\n hostId: string,\n): string {\n return createHmac(\"sha256\", secret)\n .update(`${nonce}:${hostId}`)\n .digest(\"hex\");\n}\n\n/** Checks a host's proof in constant time. */\nexport function verifyChallenge(\n secret: string,\n nonce: string,\n hostId: string,\n mac: unknown,\n): boolean {\n if (typeof mac !== \"string\") return false;\n const expected = Buffer.from(signChallenge(secret, nonce, hostId), \"hex\");\n const given = Buffer.from(mac, \"hex\");\n return given.length === expected.length && timingSafeEqual(given, expected);\n}\n\n/** Validates a text frame from the coordinator; `null` when malformed. */\nexport function parseToHost(\n text: unknown,\n maxBytes = MAX_REMOTE_FRAME_BYTES,\n): ToHost | null {\n const v = parseJson(text, maxBytes);\n if (!v) return null;\n switch (v.t) {\n case \"challenge\":\n return typeof v.nonce === \"string\" && isInt(v.version)\n ? { t: \"challenge\", nonce: v.nonce, version: v.version }\n : null;\n case \"welcome\":\n return isInt(v.leaseMs) && isInt(v.pingMs)\n ? { t: \"welcome\", leaseMs: v.leaseMs, pingMs: v.pingMs }\n : null;\n case \"ping\":\n return isInt(v.n) ? { t: \"ping\", n: v.n } : null;\n case \"spawn\": {\n if (!isInt(v.cluster) || !isInt(v.epoch) || !isRecord(v.env))\n return null;\n const env: Record<string, string> = {};\n for (const [key, value] of Object.entries(v.env)) {\n if (!SPAWN_ENV_KEYS.has(key) || typeof value !== \"string\")\n return null;\n env[key] = value;\n }\n return { t: \"spawn\", cluster: v.cluster, epoch: v.epoch, env };\n }\n case \"frame\":\n return isInt(v.cluster) && isInt(v.epoch)\n ? {\n t: \"frame\",\n cluster: v.cluster,\n epoch: v.epoch,\n frame: v.frame,\n }\n : null;\n case \"kill\":\n return isInt(v.cluster) &&\n isInt(v.epoch) &&\n typeof v.signal === \"string\" &&\n KILL_SIGNALS.has(v.signal)\n ? {\n t: \"kill\",\n cluster: v.cluster,\n epoch: v.epoch,\n signal: v.signal,\n }\n : null;\n case \"bye\":\n return typeof v.reason === \"string\"\n ? { t: \"bye\", reason: v.reason }\n : null;\n default:\n return null;\n }\n}\n\n/** Validates a text frame from a host; `null` when malformed. */\nexport function parseToCoordinator(\n text: unknown,\n maxBytes = MAX_REMOTE_FRAME_BYTES,\n): ToCoordinator | null {\n const v = parseJson(text, maxBytes);\n if (!v) return null;\n switch (v.t) {\n case \"hello\":\n return typeof v.id === \"string\" &&\n typeof v.mac === \"string\" &&\n isInt(v.version)\n ? { t: \"hello\", id: v.id, mac: v.mac, version: v.version }\n : null;\n case \"pong\":\n return isInt(v.n) ? { t: \"pong\", n: v.n } : null;\n case \"spawned\":\n return isInt(v.cluster) &&\n isInt(v.epoch) &&\n (v.pid === undefined || isInt(v.pid))\n ? {\n t: \"spawned\",\n cluster: v.cluster,\n epoch: v.epoch,\n ...(v.pid !== undefined ? { pid: v.pid as number } : {}),\n }\n : null;\n case \"frame\":\n return isInt(v.cluster) && isInt(v.epoch)\n ? {\n t: \"frame\",\n cluster: v.cluster,\n epoch: v.epoch,\n frame: v.frame,\n }\n : null;\n case \"exit\":\n return isInt(v.cluster) &&\n isInt(v.epoch) &&\n (v.code === null || typeof v.code === \"number\") &&\n (v.signal === null || typeof v.signal === \"string\")\n ? {\n t: \"exit\",\n cluster: v.cluster,\n epoch: v.epoch,\n code: v.code,\n signal: v.signal,\n }\n : null;\n case \"error\":\n return isInt(v.cluster) &&\n isInt(v.epoch) &&\n typeof v.message === \"string\"\n ? {\n t: \"error\",\n cluster: v.cluster,\n epoch: v.epoch,\n message: v.message,\n }\n : null;\n default:\n return null;\n }\n}\n",
82
+ "/** One answer collected for a request. */\nexport interface Settled<R = unknown> {\n key: string;\n result?: R;\n error?: string;\n}\n\n/** What a finished request collected. */\nexport interface Collected<R = unknown> {\n /** Answers by key, in arrival order. */\n replies: Settled<R>[];\n /** Keys that never answered (timeout, abort or shutdown). */\n missing: string[];\n}\n\ninterface Entry {\n keys: Map<string, number>;\n replies: Settled[];\n /** Keys that already have an answer, for constant-time checks on large broadcasts. */\n answered: Set<string>;\n finish: () => void;\n timer: ReturnType<typeof setTimeout>;\n cleanup?: () => void;\n}\n\n/**\n * Pending requests of the parent process. Each request waits for answers from\n * a set of keys (a shard, a cluster, or every shard of the live clusters) and\n * settles when all arrived, the timeout passed, or the caller aborted.\n *\n * Answers are accepted only from the owner of the key, once per key; late,\n * duplicate and unknown answers are ignored. The number of waiting requests is\n * bounded, and a timer per request guarantees the entry is removed.\n */\nexport class RequestTracker {\n readonly #pending = new Map<string, Entry>();\n readonly #maxPending: number;\n readonly #prefix: string;\n #counter = 0;\n\n public constructor(prefix = \"parent\", maxPending = 10_000) {\n if (!Number.isInteger(maxPending) || maxPending < 1)\n throw new RangeError(\"maxPending must be a positive integer.\");\n this.#prefix = prefix;\n this.#maxPending = maxPending;\n }\n\n /** Requests waiting for answers. */\n public get size(): number {\n return this.#pending.size;\n }\n\n /**\n * Starts waiting for answers.\n * @param keys Each key that should answer, with the cluster that owns it.\n * @throws {Error} If `maxPending` requests are already waiting.\n */\n public begin<R>(options: {\n keys: ReadonlyMap<string, number>;\n timeoutMs: number;\n signal?: AbortSignal;\n }): { id: string; done: Promise<Collected<R>> } {\n if (this.#pending.size >= this.#maxPending)\n throw new Error(\n `Too many requests waiting for a reply (${this.#maxPending}).`,\n );\n const id = `${this.#prefix}:${++this.#counter}`;\n const done = new Promise<Collected<R>>((resolve) => {\n const finish = (): void => {\n const entry = this.#pending.get(id);\n if (!entry) return;\n this.#pending.delete(id);\n clearTimeout(entry.timer);\n entry.cleanup?.();\n resolve({\n replies: entry.replies as Settled<R>[],\n missing: [...entry.keys.keys()].filter(\n (key) => !entry.answered.has(key),\n ),\n });\n };\n const entry: Entry = {\n keys: new Map(options.keys),\n replies: [],\n answered: new Set(),\n finish,\n timer: setTimeout(finish, options.timeoutMs),\n };\n if (options.signal) {\n const signal = options.signal;\n if (signal.aborted) queueMicrotask(finish);\n else {\n signal.addEventListener(\"abort\", finish, { once: true });\n entry.cleanup = () =>\n signal.removeEventListener(\"abort\", finish);\n }\n }\n this.#pending.set(id, entry);\n if (entry.keys.size === 0) queueMicrotask(finish);\n });\n return { id, done };\n }\n\n /**\n * Records one answer.\n * @param from The cluster the answer came from; it must own `key`.\n * @returns Whether the answer was accepted.\n */\n public answer(\n id: string,\n key: string,\n from: number,\n value: { result?: unknown; error?: string },\n ): boolean {\n const entry = this.#pending.get(id);\n if (!entry || entry.keys.get(key) !== from) return false;\n if (entry.answered.has(key)) return false;\n entry.answered.add(key);\n entry.replies.push({ key, ...value });\n if (entry.replies.length >= entry.keys.size) entry.finish();\n return true;\n }\n\n /** A cluster went away: every key it owns that has not answered settles with `error`. */\n public failOwner(owner: number, error: string): void {\n for (const entry of [...this.#pending.values()]) {\n for (const [key, keyOwner] of entry.keys)\n if (keyOwner === owner && !entry.answered.has(key)) {\n entry.answered.add(key);\n entry.replies.push({ key, error });\n }\n if (entry.replies.length >= entry.keys.size) entry.finish();\n }\n }\n\n /** Settles every waiting request with what it has (shutdown). */\n public close(): void {\n for (const entry of [...this.#pending.values()]) entry.finish();\n }\n}\n",
83
+ "import type { ChildProcess } from \"node:child_process\";\nimport { fork } from \"node:child_process\";\nimport {\n KILL_SIGNALS,\n REMOTE_PROTOCOL_VERSION,\n RemoteClose,\n HOST_ID,\n isLoopbackHost,\n parseToHost,\n signChallenge,\n type ToCoordinator,\n} from \"./remote-protocol.js\";\n\n/** Options for a {@link ClusterHost}. */\nexport interface ClusterHostOptions {\n /** The coordinator's address: `wss://host:port`. `ws://` is accepted for this machine, or anywhere with `allowInsecure`. */\n url: string;\n /** Connect with `ws://` to a coordinator on another machine, over a network you fully trust. Default false. */\n allowInsecure?: boolean;\n /** The coordinator's shared secret. */\n secret: string;\n /** This host's ID: letters, digits, `.`, `_`, `-`. Must be unique in the deployment. */\n id: string;\n /**\n * The worker script this host runs for every cluster. A coordinator cannot\n * choose it: remote workers run only what the host owner configured.\n */\n script: string;\n /** Starts a worker process. Defaults to `child_process.fork()`. */\n fork?: (\n script: string,\n env: Record<string, string | undefined>,\n ) => ChildProcess;\n /** First delay before reconnecting, in ms. Default 1000. */\n reconnectDelay?: number;\n /** Longest delay between reconnect attempts, in ms. Default 30,000. */\n maxReconnectDelay?: number;\n}\n\n/** What a {@link ClusterHost} emits. */\nexport interface ClusterHostEvents {\n /** The coordinator accepted this host. */\n connected: [];\n /** The connection ended. Every worker was killed first. */\n disconnected: [info: { code: number; reason: string }];\n /** A worker started for a cluster. */\n clusterSpawn: [cluster: number];\n /** A worker exited. */\n clusterExit: [cluster: number, code: number | null, signal: string | null];\n /** A refused frame, a failed start or a rejected connection. */\n error: [error: Error];\n}\n\ninterface Running {\n epoch: number;\n child: ChildProcess;\n}\n\n/**\n * The agent that makes a machine part of a deployment. It connects to the\n * coordinator, starts the worker script for the clusters the coordinator\n * places here, and relays their IPC frames both ways. The coordinator's\n * `ClusterManager` supervises those workers exactly like local ones.\n *\n * Fencing: when the connection closes, or the coordinator stays silent for a\n * whole lease, the host kills every worker at once. The coordinator waits\n * longer than that before it restarts the clusters elsewhere, so a shard is\n * never owned in two places.\n */\nexport class ClusterHost {\n readonly #options: ClusterHostOptions;\n readonly #running = new Map<number, Running>();\n readonly #listeners = new Map<\n keyof ClusterHostEvents,\n Set<(...args: never[]) => void>\n >();\n #socket?: WebSocket;\n #lease = 15_000;\n #lastRx = 0;\n #watchdog?: ReturnType<typeof setInterval>;\n #retry?: ReturnType<typeof setTimeout>;\n #delay: number;\n #closed = true;\n #connected = false;\n #firstConnect?: { resolve: () => void; reject: (error: Error) => void };\n\n public constructor(options: ClusterHostOptions) {\n if (!HOST_ID.test(options.id))\n throw new RangeError(\n \"id must be 1-64 letters, digits, '.', '_' or '-'.\",\n );\n if (!options.secret || options.secret.length < 16)\n throw new RangeError(\"secret must be at least 16 characters.\");\n if (!options.script?.trim())\n throw new TypeError(\"A worker script path is required.\");\n let url: URL;\n try {\n url = new URL(options.url);\n } catch {\n throw new TypeError(\"url must be an absolute ws:// or wss:// URL.\");\n }\n if (url.protocol !== \"ws:\" && url.protocol !== \"wss:\")\n throw new TypeError(\"url must start with ws:// or wss://.\");\n if (url.username || url.password)\n throw new TypeError(\"url must not contain credentials.\");\n if (\n url.protocol === \"ws:\" &&\n !options.allowInsecure &&\n !isLoopbackHost(url.hostname)\n )\n throw new TypeError(\n \"url must use wss:// to reach another machine (allowInsecure: true overrides this for a network you fully trust).\",\n );\n this.#options = options;\n this.#delay = options.reconnectDelay ?? 1000;\n }\n\n /** Whether the coordinator has accepted this host and the link is open. */\n public get connected(): boolean {\n return this.#connected;\n }\n\n /** Cluster IDs running on this host. */\n public clusters(): number[] {\n return [...this.#running.keys()].sort((a, b) => a - b);\n }\n\n /** Listens for a host event. @returns This host. */\n public on<E extends keyof ClusterHostEvents>(\n event: E,\n listener: (...args: ClusterHostEvents[E]) => void,\n ): this {\n let set = this.#listeners.get(event);\n if (!set) this.#listeners.set(event, (set = new Set()));\n set.add(listener as never);\n return this;\n }\n\n /** Stops listening for a host event. @returns This host. */\n public off<E extends keyof ClusterHostEvents>(\n event: E,\n listener: (...args: ClusterHostEvents[E]) => void,\n ): this {\n this.#listeners.get(event)?.delete(listener as never);\n return this;\n }\n\n #emit<E extends keyof ClusterHostEvents>(\n event: E,\n ...args: ClusterHostEvents[E]\n ): void {\n for (const listener of this.#listeners.get(event) ?? [])\n try {\n (listener as (...a: ClusterHostEvents[E]) => void)(...args);\n } catch {\n // A faulty listener must not disturb the host.\n }\n }\n\n /**\n * Connects and resolves once the coordinator accepts this host. After\n * that, a lost connection is retried with backoff until {@link close}.\n * @throws {Error} If the first attempt is refused (bad secret, unknown or duplicate ID).\n */\n public connect(): Promise<void> {\n if (!this.#closed) return Promise.resolve();\n this.#closed = false;\n return new Promise<void>((resolve, reject) => {\n this.#firstConnect = { resolve, reject };\n this.#open();\n });\n }\n\n /** Kills every worker, closes the connection and stops reconnecting. */\n public close(): Promise<void> {\n this.#closed = true;\n if (this.#retry) clearTimeout(this.#retry);\n this.#retry = undefined;\n this.#fence();\n if (this.#watchdog) clearInterval(this.#watchdog);\n this.#watchdog = undefined;\n this.#connected = false;\n const socket = this.#socket;\n this.#socket = undefined;\n this.#firstConnect?.reject(new Error(\"The host was closed.\"));\n this.#firstConnect = undefined;\n if (!socket || socket.readyState === WebSocket.CLOSED)\n return Promise.resolve();\n return new Promise<void>((resolve) => {\n socket.addEventListener(\"close\", () => resolve(), { once: true });\n try {\n socket.close(1000, \"Host closed.\");\n } catch {\n resolve();\n }\n });\n }\n\n #open(): void {\n const socket = new WebSocket(this.#options.url);\n this.#socket = socket;\n socket.addEventListener(\"message\", (event) =>\n this.#message(socket, event.data),\n );\n socket.addEventListener(\"error\", () => {\n // The close event that follows carries the outcome.\n });\n socket.addEventListener(\"close\", (event) => {\n if (this.#socket === socket) this.#lost(event.code, event.reason);\n });\n }\n\n #send(socket: WebSocket, message: ToCoordinator): boolean {\n if (socket.readyState !== WebSocket.OPEN) return false;\n try {\n socket.send(JSON.stringify(message));\n return true;\n } catch {\n return false;\n }\n }\n\n #message(socket: WebSocket, data: unknown): void {\n if (this.#socket !== socket) return;\n const message = parseToHost(data);\n if (!message) {\n this.#emit(\n \"error\",\n new Error(\"The coordinator sent a malformed frame.\"),\n );\n return;\n }\n this.#lastRx = Date.now();\n switch (message.t) {\n case \"challenge\":\n if (message.version !== REMOTE_PROTOCOL_VERSION) {\n socket.close(\n RemoteClose.VersionMismatch,\n \"Protocol version mismatch.\",\n );\n return;\n }\n this.#send(socket, {\n t: \"hello\",\n id: this.#options.id,\n mac: signChallenge(\n this.#options.secret,\n message.nonce,\n this.#options.id,\n ),\n version: REMOTE_PROTOCOL_VERSION,\n });\n return;\n case \"welcome\":\n this.#lease = message.leaseMs;\n this.#connected = true;\n this.#delay = this.#options.reconnectDelay ?? 1000;\n this.#startWatchdog();\n this.#firstConnect?.resolve();\n this.#firstConnect = undefined;\n this.#emit(\"connected\");\n return;\n case \"ping\":\n this.#send(socket, { t: \"pong\", n: message.n });\n return;\n case \"bye\":\n this.#fence();\n return;\n case \"spawn\":\n this.#spawn(\n socket,\n message.cluster,\n message.epoch,\n message.env,\n );\n return;\n case \"frame\": {\n const run = this.#running.get(message.cluster);\n if (run?.epoch === message.epoch && run.child.connected)\n try {\n run.child.send(message.frame as never);\n } catch {\n // The worker is exiting; its exit event reports it.\n }\n return;\n }\n case \"kill\": {\n const run = this.#running.get(message.cluster);\n if (\n run?.epoch === message.epoch &&\n KILL_SIGNALS.has(message.signal)\n )\n try {\n run.child.kill(message.signal as NodeJS.Signals);\n } catch {\n // Already gone.\n }\n return;\n }\n }\n }\n\n #spawn(\n socket: WebSocket,\n cluster: number,\n epoch: number,\n env: Record<string, string>,\n ): void {\n const reply = (message: ToCoordinator): void => {\n if (this.#socket === socket) this.#send(socket, message);\n };\n if (this.#running.has(cluster)) {\n reply({\n t: \"error\",\n cluster,\n epoch,\n message: `Cluster ${cluster} is already running here.`,\n });\n return;\n }\n let child: ChildProcess;\n try {\n const forkWorker = this.#options.fork ?? defaultFork;\n child = forkWorker(this.#options.script, {\n ...process.env,\n ...env,\n });\n } catch (error) {\n reply({\n t: \"error\",\n cluster,\n epoch,\n message: error instanceof Error ? error.message : String(error),\n });\n return;\n }\n this.#running.set(cluster, { epoch, child });\n child.on(\"message\", (frame) =>\n reply({ t: \"frame\", cluster, epoch, frame }),\n );\n child.once(\"exit\", (code, signal) => {\n if (this.#running.get(cluster)?.child === child)\n this.#running.delete(cluster);\n this.#emit(\"clusterExit\", cluster, code, signal);\n reply({ t: \"exit\", cluster, epoch, code, signal });\n });\n child.on(\"error\", (error) =>\n this.#emit(\n \"error\",\n error instanceof Error ? error : new Error(String(error)),\n ),\n );\n reply({\n t: \"spawned\",\n cluster,\n epoch,\n ...(child.pid ? { pid: child.pid } : {}),\n });\n this.#emit(\"clusterSpawn\", cluster);\n }\n\n /** Kills every worker now. Used whenever the coordinator might consider the host gone. */\n #fence(): void {\n for (const { child } of [...this.#running.values()])\n try {\n child.kill(\"SIGKILL\");\n } catch {\n // Already gone.\n }\n }\n\n #startWatchdog(): void {\n if (this.#watchdog) clearInterval(this.#watchdog);\n this.#lastRx = Date.now();\n this.#watchdog = setInterval(\n () => {\n if (Date.now() - this.#lastRx > this.#lease) {\n this.#fence();\n // Closing triggers the reconnect path.\n this.#socket?.close(\n RemoteClose.HostLost,\n \"Coordinator silent.\",\n );\n }\n },\n Math.max(10, Math.floor(this.#lease / 3)),\n );\n (this.#watchdog as { unref?: () => void }).unref?.();\n }\n\n #lost(code: number, reason: string): void {\n if (this.#watchdog) clearInterval(this.#watchdog);\n this.#watchdog = undefined;\n this.#socket = undefined;\n const wasConnected = this.#connected;\n this.#connected = false;\n this.#fence();\n if (wasConnected) this.#emit(\"disconnected\", { code, reason });\n if (this.#closed) return;\n const refused =\n code === RemoteClose.AuthFailed ||\n code === RemoteClose.UnknownHost ||\n code === RemoteClose.DuplicateHost ||\n code === RemoteClose.VersionMismatch;\n const first = this.#firstConnect;\n if (first) {\n this.#firstConnect = undefined;\n this.#closed = true;\n first.reject(\n new Error(\n `The coordinator refused this host (${code}${reason ? `: ${reason}` : \"\"}).`,\n ),\n );\n return;\n }\n if (refused)\n this.#emit(\n \"error\",\n new Error(\n `The coordinator refused this host (${code}: ${reason}).`,\n ),\n );\n const wait = Math.round(this.#delay * (1 + Math.random() * 0.2));\n this.#delay = Math.min(\n this.#options.maxReconnectDelay ?? 30_000,\n this.#delay * 2,\n );\n this.#retry = setTimeout(() => {\n this.#retry = undefined;\n if (!this.#closed) this.#open();\n }, wait);\n }\n}\n\nfunction defaultFork(\n script: string,\n env: Record<string, string | undefined>,\n): ChildProcess {\n return fork(script, [], { env: env as NodeJS.ProcessEnv });\n}\n",
84
+ "import {\n assertGuildsPerShard,\n fetchGatewayBot,\n resolveShardCount,\n type GatewayBotInfo,\n} from \"./gateway-bot.js\";\nimport { Gateway, GatewayState } from \"@lunibee/ws\";\nimport {\n readClusterContext,\n validateShardIds,\n type ClusterContext,\n} from \"./context.js\";\nimport type {\n ShardHealth,\n ShardStatus,\n WorkerMetrics,\n WorkerReport,\n} from \"./health.js\";\nimport { REQUEST_ASSIGN, REQUEST_HEALTH } from \"./protocol.js\";\nimport { ClusterWorker, type IdentifyGate } from \"./worker.js\";\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 {\n MAX_GUILDS_PER_SHARD,\n fetchGatewayBot,\n fetchGuildCount,\n shardsForGuilds,\n type GatewayBotInfo,\n} from \"./gateway-bot.js\";\nexport { ShardBus } from \"./bus.js\";\nexport {\n BroadcastChannelTransport,\n IpcTransport,\n type IpcEndpoint,\n type ShardBusTransport,\n} from \"./transport.js\";\nexport { ShardSupervisor, type SupervisorOptions } from \"./supervisor.js\";\nexport type {\n ShardBusErrorHandler,\n ShardBusOptions,\n ShardMessage,\n ShardMessageHandler,\n ShardReply,\n} from \"./bus.js\";\n\nexport { ClusterManager } from \"./cluster.js\";\nexport type {\n ClusterManagerOptions,\n ClusterManagerEvents,\n ClusterInfo,\n BroadcastResult,\n RequestOptions,\n} from \"./cluster.js\";\nexport {\n allocateShards,\n assertCompleteAllocation,\n isClusterWorker,\n readClusterContext,\n validateShardIds,\n type ClusterContext,\n} from \"./context.js\";\nexport { ClusterWorker, type IdentifyGate } from \"./worker.js\";\nexport {\n ClusterHost,\n type ClusterHostEvents,\n type ClusterHostOptions,\n} from \"./host.js\";\nexport type { HostStatus, RemoteOptions } from \"./remote.js\";\nexport { RemoteClose, REMOTE_PROTOCOL_VERSION } from \"./remote-protocol.js\";\nexport {\n IdentifyCoordinator,\n IDENTIFY_INTERVAL,\n type IdentifyBudget,\n type IdentifyCoordinatorOptions,\n} from \"./identify.js\";\nexport { RequestTracker } from \"./requests.js\";\nexport type {\n ClusterHealth,\n ClusterManagerHealth,\n ClusterState,\n ShardHealth,\n ShardStatus,\n WorkerMetrics,\n WorkerReport,\n} from \"./health.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. */\n token: string;\n /** Gateway intents as an array, e.g. `[GatewayIntentBits.Guilds]`. */\n intents: ConstructorParameters<typeof Gateway>[0][\"intents\"];\n /** Number of shards. Use `\"auto\"` to request Discord's recommended count. */\n shardCount?: number | \"auto\";\n /**\n * With `shardCount: \"auto\"`, size the deployment by guilds instead of\n * Discord's recommendation: `ceil(guilds / guildsPerShard)` shards, at\n * least one. 1 to 2500 (Discord's limit); Discord recommends about 1000.\n * Guilds are assigned to shards by their ID, so this sets the average,\n * not an exact split.\n */\n guildsPerShard?: number;\n /** The bot's guild count for `guildsPerShard`, instead of asking Discord for it. */\n guildCount?: number;\n /** Gateway reconnect behavior. */\n 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. */\n autoScaleInterval?: number;\n /** Optional handler invoked when a background auto-scale check fails. Receives the thrown error. */\n onAutoScaleError?: (error: unknown) => void;\n /**\n * The shards this manager runs, out of `shardCount`. Defaults to all of\n * them, or to the cluster's own list inside a worker forked by\n * `ClusterManager`. Must be unique integers in `[0, shardCount)`.\n */\n shardIds?: number[];\n /**\n * The worker contract. Read from the environment inside a worker forked by\n * `ClusterManager`; pass `false` to ignore it, or a context to override it.\n */\n cluster?: ClusterContext | false;\n /**\n * Where to get IDENTIFY slots. Inside a coordinated cluster this is the\n * parent, so the limit holds across all clusters. Pass `false` to pace\n * locally with `spawnDelay` instead.\n */\n identify?: IdentifyGate | false;\n /** The worker to report to. Defaults to this process's `ClusterWorker` inside a cluster. */\n worker?: ClusterWorker | false;\n}\n/** What `ShardManager` emits about its shards. */\nexport interface ShardManagerEvents {\n /** A shard finished its handshake and is receiving events. */\n shardReady: [shardId: number];\n /** A shard's connection closed (it may reconnect by itself). */\n shardDisconnect: [shardId: number, close: { code: number; action: string }];\n /** A shard resumed its session after a reconnect. */\n shardResume: [shardId: number];\n /** A shard reported an error. */\n shardError: [shardId: number, error: Error];\n /** Every shard this manager owns is ready. Emitted again after a shard drops and recovers. */\n ready: [];\n /** A shard reconnected too often too fast and is backing off (see `Gateway` `unstable`). */\n shardUnstable: [\n shardId: number,\n info: { reconnects: number; delay: number },\n ];\n}\n\n/** Runtime state for a managed shard. */\nexport interface ShardInfo {\n /** Shard identifier. */\n id: number;\n /** Gateway instance. */\n 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. */\n public readonly shards = new Map<number, Gateway>();\n /** Total shards in the deployment once initialized, 0 before and after `destroy()`. */\n public get shardCount(): number {\n return this.#resolved ? this.#total : 0;\n }\n /** IDs of the shards this manager owns. */\n public get shardIds(): number[] {\n return [...this.shards.keys()].sort((a, b) => a - b);\n }\n readonly #options: ShardManagerOptions;\n /** Shards this manager was asked to own; every shard when `undefined`. */\n #ids: number[] | undefined;\n readonly #gate: IdentifyGate | undefined;\n readonly #worker: ClusterWorker | undefined;\n readonly #lifecycle = new Map<\n number,\n { status: ShardStatus; readyAt?: number; disconnectedAt?: number }\n >();\n /** Whether `ready` was announced since the last shard dropped. */\n #announced = false;\n /** Whether the shard set has been initialized. */\n #resolved = false;\n /** Whether this manager is currently destroyed. */\n #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 /** The shard count of the current shard set; kept while a reshard has no shards so `getShardIdForGuild` stays right. */\n #total: number;\n readonly #listeners = new Map<\n keyof ShardManagerEvents,\n Set<(...args: unknown[]) => void>\n >();\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 (!Array.isArray(options.intents))\n throw new TypeError(\n \"Gateway intents must be an array, e.g. [GatewayIntentBits.Guilds].\",\n );\n const context =\n options.cluster === false\n ? null\n : (options.cluster ?? readClusterContext());\n if (context) {\n if (options.shardCount === \"auto\")\n throw new RangeError(\n 'shardCount \"auto\" is the ClusterManager\\'s decision inside a cluster worker.',\n );\n if (\n options.shardCount !== undefined &&\n options.shardCount !== context.shardCount\n )\n throw new RangeError(\n `shardCount ${options.shardCount} differs from the cluster's ${context.shardCount}.`,\n );\n if (options.autoScaleInterval !== undefined)\n throw new TypeError(\n \"autoScaleInterval belongs to ClusterManager inside a cluster worker.\",\n );\n if (\n options.shardIds &&\n !options.shardIds.every((id) => context.shardIds.includes(id))\n )\n throw new RangeError(\n \"shardIds must be a subset of the cluster's own shards.\",\n );\n }\n const count = context\n ? context.shardCount\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 (options.guildsPerShard !== undefined) {\n assertGuildsPerShard(options.guildsPerShard);\n if (options.shardCount !== \"auto\")\n throw new RangeError(\n 'guildsPerShard needs shardCount: \"auto\".',\n );\n }\n this.#ids = options.shardIds ?? context?.shardIds;\n if (this.#ids && options.shardCount !== \"auto\")\n validateShardIds(this.#ids, count);\n this.#worker =\n options.worker === false\n ? undefined\n : (options.worker ??\n (context && options.cluster === undefined\n ? ClusterWorker.current()\n : undefined));\n this.#gate =\n options.identify === false\n ? undefined\n : (options.identify ??\n (context?.coordinatedIdentify\n ? this.#worker?.identifyGate\n : undefined));\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.#total = count;\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 this.#worker?.onRequest(REQUEST_HEALTH, (data) =>\n this.report(\n (data as { metrics?: boolean } | null | undefined)?.metrics ===\n true,\n ),\n );\n this.#worker?.onRequest(REQUEST_ASSIGN, async (data) => {\n const ids = (data as { shardIds?: unknown } | null)?.shardIds;\n if (!Array.isArray(ids))\n throw new TypeError(\"shardIds must be an array.\");\n await this.addShards(ids as number[]);\n return { shardIds: ids };\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 resolveShardCount(\n this.#options.token,\n await this.fetchGatewayInfo(),\n this.#options,\n );\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 info = await fetchGatewayBot(this.#options.token);\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 // 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 await this.#start(\n [...this.shards]\n .filter(([, gateway]) => needsConnection(gateway))\n .map(([id]) => id),\n );\n if (this.#options.autoScaleInterval && !this.#autoScaleTimer) {\n this.#autoScaleTimer = setInterval(() => {\n void this.checkAutoScale();\n }, this.#options.autoScaleInterval);\n }\n }\n /**\n * Takes over more shards of the same deployment (recovery after another\n * cluster gave up) and connects them through the same IDENTIFY path.\n * @throws {RangeError} If an ID is invalid, already owned, or the manager is not initialized.\n */\n public async addShards(shardIds: readonly number[]): Promise<void> {\n await this.#ensureInitialized();\n validateShardIds(shardIds, this.#total);\n for (const id of shardIds)\n if (this.shards.has(id))\n throw new RangeError(`Shard ${id} is already owned.`);\n for (const id of shardIds)\n this.shards.set(id, this.#createShard(id, this.#total));\n if (this.#ids) this.#ids = [...this.#ids, ...shardIds];\n this.#announced = false;\n try {\n // Only the new shards are torn down on failure: the ones that were\n // already running keep their sessions.\n await this.#start([...shardIds], false);\n } catch (error) {\n for (const id of shardIds) {\n this.shards.get(id)?.close();\n this.shards.delete(id);\n this.#lifecycle.delete(id);\n }\n if (this.#ids)\n this.#ids = this.#ids.filter((id) => !shardIds.includes(id));\n throw error;\n }\n }\n /** Starts the given shards: through the coordinated IDENTIFY gate when there is one, else in paced rounds. */\n async #start(ids: number[], destroyOnFailure = true): Promise<void> {\n const gate = this.#gate;\n if (gate) {\n const timeout = this.#options.handshakeTimeout ?? 15_000;\n const results = await Promise.allSettled(\n ids.map(async (id) => {\n const gateway = this.shards.get(id)!;\n this.#setStatus(id, \"connecting\");\n await gate.acquire(id);\n try {\n await gateway.connect();\n await handshakeSent(gateway, timeout);\n } finally {\n gate.release(id);\n }\n }),\n );\n const failed = results.findIndex(\n (result) => result.status === \"rejected\",\n );\n if (failed !== -1) {\n if (destroyOnFailure) this.destroy();\n throw new Error(`Failed to connect shard ${ids[failed]}.`, {\n cause: (results[failed] as PromiseRejectedResult).reason,\n });\n }\n return;\n }\n const limit = this.#gatewayInfo?.sessionStartLimit;\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 // Discord's IDENTIFY rate-limit key is `shard_id % max_concurrency`: one\n // IDENTIFY per key per 5 seconds. Each round starts the next shard of\n // every bucket, so a round never puts two shards on one key.\n const buckets = new Map<number, number[]>();\n for (const id of ids) {\n const key = id % concurrency;\n const bucket = buckets.get(key);\n if (bucket) bucket.push(id);\n else buckets.set(key, [id]);\n }\n const rounds = Math.max(\n 0,\n ...[...buckets.values()].map((bucket) => bucket.length),\n );\n for (let index = 0; index < rounds; index++) {\n const round = [...buckets.values()]\n .map((bucket) => bucket[index])\n .filter((id): id is number => id !== undefined);\n for (const id of round) this.#setStatus(id, \"connecting\");\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 if (destroyOnFailure) this.destroy();\n throw new Error(`Failed to connect shard ${round[failed]}.`, {\n cause: (results[failed] as PromiseRejectedResult).reason,\n });\n }\n if (\n index + 1 < rounds &&\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 }\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 for (const id of this.shards.keys()) this.#setStatus(id, \"destroyed\");\n this.shards.clear();\n this.#lifecycle.clear();\n this.#announced = false;\n this.#resolved = false;\n this.#destroyed = true;\n if (this.#autoScaleTimer) {\n clearInterval(this.#autoScaleTimer);\n this.#autoScaleTimer = undefined;\n }\n }\n /** Listens for an aggregated shard event. @returns This manager. */\n public on<E extends keyof ShardManagerEvents>(\n event: E,\n listener: (...args: ShardManagerEvents[E]) => void,\n ): this {\n let set = this.#listeners.get(event);\n if (!set) this.#listeners.set(event, (set = new Set()));\n set.add(listener as unknown as (...args: unknown[]) => void);\n return this;\n }\n /** Stops listening for a shard event. @returns This manager. */\n public off<E extends keyof ShardManagerEvents>(\n event: E,\n listener: (...args: ShardManagerEvents[E]) => void,\n ): this {\n this.#listeners\n .get(event)\n ?.delete(listener as unknown as (...args: unknown[]) => void);\n return this;\n }\n #emit<E extends keyof ShardManagerEvents>(\n event: E,\n ...args: ShardManagerEvents[E]\n ): void {\n for (const listener of this.#listeners.get(event) ?? [])\n try {\n listener(...args);\n } catch {\n // A faulty listener must not disturb the shard.\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.#total));\n }\n /** Sends a voice state update (op 4) on the shard that owns the guild. @returns Whether it was sent; `false` if that shard is absent or disconnected. */\n public sendVoiceState(\n guildId: string,\n channelId: string | null,\n options: { selfMute?: boolean; selfDeaf?: boolean } = {},\n ): boolean {\n return (\n this.shards\n .get(this.getShardIdForGuild(guildId))\n ?.sendVoiceState(guildId, channelId, options) ?? false\n );\n }\n /** Gets a shard by ID. @param id Shard identifier. @returns Gateway instance or undefined. */\n public get(id: number): Gateway | undefined {\n return this.shards.get(id);\n }\n /** Returns each shard's connection state, lifecycle status and heartbeat latency. */\n public health(): ShardHealth[] {\n return [...this.shards].map(([id, gateway]) => {\n const life = this.#lifecycle.get(id);\n return {\n id,\n state: gateway.state,\n ping: gateway.ping,\n status: life?.status ?? \"idle\",\n ...(life?.readyAt !== undefined\n ? { readyAt: life.readyAt }\n : {}),\n ...(life?.disconnectedAt !== undefined\n ? { disconnectedAt: life.disconnectedAt }\n : {}),\n };\n });\n }\n /** A health report for the parent: shard health and, on request, process metrics. */\n public report(metrics = false): WorkerReport {\n let numbers: WorkerMetrics | undefined;\n if (metrics) {\n const memory = process.memoryUsage();\n const cpu = process.cpuUsage();\n numbers = {\n rssBytes: memory.rss,\n heapUsedBytes: memory.heapUsed,\n cpuUserMicros: cpu.user,\n cpuSystemMicros: cpu.system,\n };\n }\n return {\n shards: this.health(),\n ...(numbers ? { metrics: numbers } : {}),\n reportedAt: Date.now(),\n };\n }\n #setStatus(id: number, status: ShardStatus): void {\n const life = this.#lifecycle.get(id) ?? { status };\n life.status = status;\n const now = Date.now();\n if (status === \"ready\") life.readyAt = now;\n if (status === \"disconnected\") life.disconnectedAt = now;\n this.#lifecycle.set(id, life);\n if (status !== \"ready\") this.#announced = false;\n else this.#maybeAnnounce();\n }\n /** Emits `ready` and tells the parent once every owned shard is ready. */\n #maybeAnnounce(): void {\n if (this.#announced || this.shards.size === 0) return;\n for (const id of this.shards.keys())\n if (this.#lifecycle.get(id)?.status !== \"ready\") return;\n this.#announced = true;\n this.#emit(\"ready\");\n this.#worker?.ready(this.shardIds);\n this.#worker?.reportHealth(this.report());\n }\n /** Returns information for all managed shards. @returns Shard information snapshots. */\n 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 this.#total = count;\n const ids = this.#ids ?? Array.from({ length: count }, (_, i) => i);\n validateShardIds(ids, count);\n for (const id of ids) 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 const gateway = 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 gateway.on(\"ready\", () => {\n this.#setStatus(id, \"ready\");\n this.#emit(\"shardReady\", id);\n });\n gateway.on(\"resumed\", () => {\n this.#setStatus(id, \"ready\");\n this.#emit(\"shardResume\", id);\n });\n gateway.on(\"close\", (close) => {\n this.#setStatus(id, \"disconnected\");\n this.#emit(\n \"shardDisconnect\",\n id,\n close as { code: number; action: string },\n );\n });\n gateway.on(\"error\", (error) =>\n this.#emit(\"shardError\", id, error as Error),\n );\n gateway.on(\"unstable\", (info) => {\n this.#setStatus(id, \"unstable\");\n this.#emit(\n \"shardUnstable\",\n id,\n info as { reconnects: number; delay: number },\n );\n });\n return gateway;\n }\n}\n\n/** Discord.js-familiar alias for {@link ShardManager}. */\nexport { ShardManager as ShardingManager };\n",
77
85
  "/** Voice session lifecycle states. */\nexport enum VoiceConnectionState {\n Disconnected = \"disconnected\",\n Connecting = \"connecting\",\n Connected = \"connected\",\n Destroyed = \"destroyed\",\n}\n\n/** Voice protocol transport errors. */\nexport class VoiceError extends Error {\n /** Creates a voice error. @param message Error message. @param options Optional native error options. */\n public constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"VoiceError\";\n }\n}\n\n/** Options used to establish a voice session. */\nexport interface VoiceConnectionOptions {\n /** Guild containing the voice channel. */\n guildId: string;\n /** Voice channel to join. */\n channelId?: string;\n /** Whether the self user should be muted. */\n selfMute?: boolean;\n /** Whether the self user should be deafened. */\n selfDeaf?: boolean;\n}\n\n/** UDP transport supplied by the runtime-specific voice implementation. */\nexport interface VoiceUdpTransport {\n /** Sends an RTP/RTCP packet. @param packet Packet bytes. @param host Destination host. @param port Destination port. @returns Optional completion promise. */\n send(packet: Uint8Array, host: string, port: number): Promise<void> | void;\n /** Closes the UDP socket. @returns Nothing. */\n close(): void;\n /** Optional listener for incoming UDP packets. */\n onMessage?(listener: (packet: Uint8Array) => void): void;\n}\n\n/** A JSON frame for the voice gateway, e.g. `{ op: 5, d: { speaking, delay, ssrc } }`. */\nexport interface VoiceGatewayPayload {\n op: number;\n d: Record<string, string | number | boolean | null>;\n}\n\n/** Voice Gateway transport abstraction. */\nexport interface VoiceGatewayTransport {\n /** Opens the voice gateway. @param endpoint Voice gateway endpoint. @param sessionId Voice session identifier. @returns Promise fulfilled when connected. */\n connect(endpoint: string, sessionId: string): Promise<void>;\n /** Sends a voice gateway payload. @param payload Gateway payload. @returns Nothing. */\n send(payload: VoiceGatewayPayload): void;\n /** Closes the voice gateway. @param code Optional close code. @param reason Optional close reason. @returns Nothing. */\n close(code?: number, reason?: string): void;\n}\n\n/** Speaking flags used by the voice gateway. */\nexport const SpeakingFlags = {\n Microphone: 1,\n Soundshare: 2,\n Priority: 4,\n} as const;\n\n/** Voice session event payloads. */\nexport interface VoiceEvents {\n /** State transition event. */\n stateChange: [VoiceConnectionState, VoiceConnectionState];\n /** Speaking flag event. */\n speaking: [number, number];\n /** Voice transport error event. */\n error: [VoiceError];\n}\n\ntype ListenerSets<E extends Record<keyof E, unknown[]>> = {\n [K in keyof E]?: Set<(...args: E[K]) => unknown>;\n};\n\n/** Returns the listener set for `event`, creating it on first use. */\nfunction listenerSet<E extends Record<keyof E, unknown[]>, K extends keyof E>(\n sets: ListenerSets<E>,\n event: K,\n): Set<(...args: E[K]) => unknown> {\n return (sets[event] ??= new Set());\n}\n\n/** Tracks a Discord voice session and exposes transport-independent lifecycle controls. */\nexport class VoiceConnection {\n /** Current voice connection state. */\n public state: VoiceConnectionState = VoiceConnectionState.Disconnected;\n /** Guild associated with this voice session. */\n public readonly guildId: string;\n /** Voice channel associated with this session. */\n public channelId?: string;\n /** Whether the client is self-muted. */\n public selfMute: boolean;\n /** Whether the client is self-deafened. */\n public selfDeaf: boolean;\n /** Active voice gateway transport, when attached. */\n public gateway?: VoiceGatewayTransport;\n /** Active UDP transport, when attached. */\n public udp?: VoiceUdpTransport;\n /** Registered lifecycle listeners. */\n #listeners: ListenerSets<VoiceEvents> = {};\n /** Receives incoming audio. */\n public readonly receiver: VoiceReceiver;\n\n /** Creates a voice connection state manager. @param options Guild ID or connection options. @throws {TypeError} If the guild ID is empty. */\n public constructor(options: string | VoiceConnectionOptions) {\n const resolved =\n typeof options === \"string\" ? { guildId: options } : options;\n if (!resolved.guildId?.trim()) {\n throw new TypeError(\n \"A guild ID is required for a voice connection.\",\n );\n }\n this.guildId = resolved.guildId;\n this.channelId = resolved.channelId;\n this.selfMute = resolved.selfMute ?? false;\n this.selfDeaf = resolved.selfDeaf ?? false;\n this.receiver = new VoiceReceiver(this);\n }\n\n /** Registers a voice lifecycle listener. @param event Event name. @param listener Listener callback. @returns This connection. @throws {TypeError} If listener is not callable. */\n public on<K extends keyof VoiceEvents>(\n event: K,\n listener: (...args: VoiceEvents[K]) => unknown,\n ): this {\n if (typeof listener !== \"function\")\n throw new TypeError(\"Voice listener must be a function.\");\n listenerSet(this.#listeners, event).add(listener);\n return this;\n }\n\n /** Removes a voice lifecycle listener. @param event Event name. @param listener Listener callback. @returns This connection. */\n public off<K extends keyof VoiceEvents>(\n event: K,\n listener: (...args: VoiceEvents[K]) => unknown,\n ): this {\n this.#listeners[event]?.delete(listener);\n return this;\n }\n\n /** Attaches protocol transports, replacing and cleaning up the old pair when present. @param gateway Voice gateway transport. @param udp UDP transport. @returns This connection. @throws {VoiceError} If the connection is destroyed. @throws {TypeError} If a transport is missing. */\n public attachTransports(\n gateway: VoiceGatewayTransport,\n udp: VoiceUdpTransport,\n ): this {\n this.assertUsable();\n if (!gateway || !udp)\n throw new TypeError(\n \"Both voice gateway and UDP transports are required.\",\n );\n if (this.gateway || this.udp) this.#closeTransports();\n this.gateway = gateway;\n this.udp = udp;\n // Capture the transport this listener belongs to so that packets from a\n // later-replaced transport (whose listener cannot be unregistered — the\n // VoiceUdpTransport interface exposes no removal API) are ignored.\n const attachedUdp = udp;\n if (attachedUdp.onMessage) {\n attachedUdp.onMessage((packet) => {\n if (this.udp === attachedUdp) this.receiver.onPacket(packet);\n });\n }\n return this;\n }\n\n /** Begins the connection lifecycle. @returns Nothing. @throws {VoiceError} If the connection is destroyed. */\n public connect(): void {\n this.assertUsable();\n if (this.state === VoiceConnectionState.Connected) return;\n this.#transition(VoiceConnectionState.Connecting);\n if (this.state !== VoiceConnectionState.Connecting) return;\n this.#transition(VoiceConnectionState.Connected);\n }\n\n /** Disconnects the current voice session. @returns Nothing. */\n public disconnect(): void {\n if (this.state === VoiceConnectionState.Destroyed) return;\n this.#closeTransports();\n this.receiver.close();\n this.#transition(VoiceConnectionState.Disconnected);\n }\n\n /** Permanently destroys this voice connection. @returns Nothing. */\n public destroy(): void {\n if (this.state === VoiceConnectionState.Destroyed) return;\n this.#closeTransports();\n this.receiver.close();\n this.channelId = undefined;\n this.#transition(VoiceConnectionState.Destroyed);\n this.#listeners = {};\n }\n\n /** Updates the voice channel and connection state. @param channelId Voice channel identifier. @returns Nothing. @throws {VoiceError} If the connection is destroyed. @throws {TypeError} If channelId is empty. */\n public setChannel(channelId: string): void {\n this.assertUsable();\n if (!channelId?.trim())\n throw new TypeError(\"A voice channel ID is required.\");\n this.channelId = channelId;\n }\n\n /** Updates self mute/deaf state. @param options Suppression flags. @returns Nothing. @throws {VoiceError} If the connection is destroyed. */\n public setSuppression(options: {\n selfMute?: boolean;\n selfDeaf?: boolean;\n }): void {\n this.assertUsable();\n if (options.selfMute !== undefined) this.selfMute = options.selfMute;\n if (options.selfDeaf !== undefined) this.selfDeaf = options.selfDeaf;\n }\n\n /** Publishes a speaking state through the attached voice gateway. @param flags Speaking flags. @returns Nothing. @throws {VoiceError} If the connection is destroyed or has no gateway transport. */\n public setSpeaking(flags: number = SpeakingFlags.Microphone): void {\n this.assertUsable();\n if (!this.gateway) {\n throw new VoiceError(\n \"A voice gateway transport is required to change speaking state.\",\n );\n }\n this.gateway.send({ op: 5, d: { speaking: flags, delay: 0, ssrc: 0 } });\n this.#emit(\"speaking\", flags, 0);\n }\n\n /** Ensures the connection is still usable. @returns Nothing. @throws {VoiceError} If destroyed. */\n #assertUsable(): void {\n if (this.state === VoiceConnectionState.Destroyed) {\n throw new VoiceError(\"Voice connection has been destroyed.\");\n }\n }\n\n /** Closes both active transports while isolating cleanup failures. @returns Nothing. */\n #closeTransports(): void {\n try {\n this.gateway?.close(1000, \"Voice connection replaced or closed\");\n } catch (error) {\n this.#emit(\n \"error\",\n error instanceof VoiceError\n ? error\n : new VoiceError(\"Voice gateway cleanup failed.\", {\n cause: error,\n }),\n );\n }\n try {\n this.udp?.close();\n } catch (error) {\n this.#emit(\n \"error\",\n error instanceof VoiceError\n ? error\n : new VoiceError(\"Voice UDP cleanup failed.\", {\n cause: error,\n }),\n );\n }\n this.gateway = undefined;\n this.udp = undefined;\n }\n\n /** Transitions to a new lifecycle state and emits the transition event. @param next Next state. @returns Nothing. */\n #transition(next: VoiceConnectionState): void {\n const previous = this.state;\n this.state = next;\n if (previous === next) return;\n for (const listener of this.#listeners.stateChange ?? []) {\n try {\n void listener(next, previous);\n } catch (error) {\n this.#emit(\n \"error\",\n error instanceof VoiceError\n ? error\n : new VoiceError(\"Voice event listener failed.\", {\n cause: error,\n }),\n );\n }\n if (this.state !== next && next !== VoiceConnectionState.Destroyed)\n return;\n }\n }\n\n /** Emits a voice event while isolating consumer failures. @param event Event name. @param args Event arguments. @returns Nothing. */\n #emit<K extends keyof VoiceEvents>(\n event: K,\n ...args: VoiceEvents[K]\n ): void {\n for (const listener of this.#listeners[event] ?? []) {\n try {\n void listener(...args);\n } catch {\n /* Consumer failures are isolated. */\n }\n }\n }\n\n /** Ensures the connection is still usable. @returns Nothing. @throws {VoiceError} If destroyed. */\n private assertUsable(): void {\n this.#assertUsable();\n }\n}\n\n// ─── Audio Pipeline ───────────────────────────────────────────────────────────\n\n/** Audio player lifecycle states. */\nexport type AudioPlayerState = \"idle\" | \"playing\" | \"paused\" | \"stopped\";\n\n/** An audio stream — wraps a `ReadableStream<Uint8Array>` with optional metadata. */\nexport class AudioStream {\n /** Underlying binary stream. */\n public readonly stream: ReadableStream<Uint8Array>;\n /** Optional human-readable title for the stream. */\n public readonly title?: string;\n /** Optional duration hint in seconds. */\n public readonly duration?: number;\n\n /** Creates an audio stream.\n * @param stream Binary audio data stream.\n * @param metadata Optional metadata: title and duration in seconds.\n */\n public constructor(\n stream: ReadableStream<Uint8Array>,\n metadata?: { title?: string; duration?: number },\n ) {\n this.stream = stream;\n this.title = metadata?.title;\n this.duration = metadata?.duration;\n }\n}\n\ntype AudioPlayerListener<K extends keyof AudioPlayerEvents> = (\n ...args: AudioPlayerEvents[K]\n) => unknown;\n\ninterface AudioPlayerEvents {\n stateChange: [from: AudioPlayerState, to: AudioPlayerState];\n error: [error: Error];\n finish: [];\n}\n\n/**\n * Lightweight audio player with a simple state machine.\n *\n * States:\n * - `idle` — no stream loaded.\n * - `playing` — actively feeding audio data.\n * - `paused` — temporarily suspended; can be resumed.\n * - `stopped` — stream was stopped and discarded; load a new stream to play again.\n *\n * Events: `stateChange(from, to)`, `error(err)`, `finish()`.\n */\nexport class AudioPlayer {\n #state: AudioPlayerState = \"idle\";\n #stream?: AudioStream;\n #reader?: ReadableStreamDefaultReader<Uint8Array>;\n /** Resolves the pump's pause await when the player is resumed or stopped. */\n #resumeSignal?: () => void;\n readonly #playerListeners: ListenerSets<AudioPlayerEvents> = {};\n\n /** Current player state. */\n public get state(): AudioPlayerState {\n return this.#state;\n }\n\n /** The audio stream currently loaded, if any. */\n public get current(): AudioStream | undefined {\n return this.#stream;\n }\n\n /**\n * Begins playing an audio stream.\n * If a stream is already playing, it is stopped first; the previous\n * stream's reader cancellation is awaited before the new stream starts so\n * the old and new pump loops cannot run concurrently.\n * @param audioStream Stream to play.\n */\n public async play(audioStream: AudioStream): Promise<void> {\n if (this.#state === \"playing\" || this.#state === \"paused\")\n await this.stop();\n this.#stream = audioStream;\n this.#reader = audioStream.stream.getReader();\n this.#transition(\"playing\");\n this.#pump().catch((err) => this.#emitError(err));\n }\n\n /** Pauses a currently-playing stream. No-op if not playing. */\n public pause(): void {\n if (this.#state !== \"playing\") return;\n this.#transition(\"paused\");\n }\n\n /** Resumes a paused stream. No-op if not paused. */\n public resume(): void {\n if (this.#state !== \"paused\") return;\n this.#transition(\"playing\");\n // Wake the existing pump loop rather than starting a second one.\n const signal = this.#resumeSignal;\n this.#resumeSignal = undefined;\n signal?.();\n }\n\n /**\n * Stops and discards the current stream. The returned promise resolves once\n * the underlying reader's cancellation has settled, so a subsequent `play`\n * never overlaps with the previous pump loop.\n */\n public async stop(): Promise<void> {\n if (this.#state === \"idle\" || this.#state === \"stopped\") return;\n const reader = this.#reader;\n this.#reader = undefined;\n this.#stream = undefined;\n this.#transition(\"stopped\");\n // Release a pump loop that is currently awaiting a resume.\n const signal = this.#resumeSignal;\n this.#resumeSignal = undefined;\n signal?.();\n if (reader) {\n try {\n await reader.cancel();\n } catch {\n /* Cancellation failures are non-fatal. */\n }\n }\n }\n\n /** Registers an event listener. @returns `this` for chaining. */\n public on<K extends keyof AudioPlayerEvents>(\n event: K,\n listener: AudioPlayerListener<K>,\n ): this {\n listenerSet(this.#playerListeners, event).add(listener);\n return this;\n }\n\n /** Removes an event listener. @returns `this` for chaining. */\n public off<K extends keyof AudioPlayerEvents>(\n event: K,\n listener: AudioPlayerListener<K>,\n ): this {\n this.#playerListeners[event]?.delete(listener);\n return this;\n }\n\n /**\n * Handles a decoded audio chunk. The base implementation is a no-op;\n * subclasses override this to pipe audio to a UDP socket or other sink.\n * @param chunk A chunk of audio bytes read from the current stream.\n */\n protected onChunk(chunk: Uint8Array): void {\n void chunk;\n }\n\n /** Reads chunks from the reader while the player is in a playing state. */\n async #pump(): Promise<void> {\n const reader = this.#reader;\n if (!reader) return;\n while (true) {\n // Suspend without polling: park until resume()/stop() signals us.\n if (this.#state === \"paused\") {\n await new Promise<void>((resolve) => {\n this.#resumeSignal = resolve;\n });\n }\n // Abort if stopped/idle (e.g. resolved by stop()).\n if (this.#state !== \"playing\") return;\n const { done, value } = await reader.read();\n if (done) {\n if (this.#state === \"playing\" || this.#state === \"paused\") {\n this.#transition(\"idle\");\n this.#stream = undefined;\n this.#reader = undefined;\n this.#emit(\"finish\");\n }\n return;\n }\n // A stop() during the read wins — drop the chunk and exit.\n if (this.#state !== \"playing\" && this.#state !== \"paused\") return;\n // Deliver the chunk to the sink hook; loop back to honour pause state.\n this.onChunk(value);\n }\n }\n\n #transition(next: AudioPlayerState): void {\n if (this.#state === next) return;\n const from = this.#state;\n this.#state = next;\n this.#emit(\"stateChange\", from, next);\n }\n\n #emitError(err: unknown): void {\n this.#emit(\n \"error\",\n err instanceof Error ? err : new VoiceError(String(err)),\n );\n }\n\n #emit<K extends keyof AudioPlayerEvents>(\n event: K,\n ...args: AudioPlayerEvents[K]\n ): void {\n for (const listener of this.#playerListeners[event] ?? []) {\n try {\n void listener(...args);\n } catch {\n /* Listener failures are isolated. */\n }\n }\n }\n}\n\n// ─── Audio Receive Pipeline ───────────────────────────────────────────────────\n\n/** Tracks incoming audio and maps SSRCs to readable streams per user. */\nexport class VoiceReceiver {\n /** The connection this receiver is attached to. */\n public readonly connection: VoiceConnection;\n readonly #ssrcMap = new Map<number, string>();\n /** Active stream controllers per user; a Set so multiple subscribers to the\n * same user all receive audio instead of the last one overwriting earlier ones. */\n readonly #streams = new Map<\n string,\n Set<ReadableStreamDefaultController<Uint8Array>>\n >();\n\n /** Creates a VoiceReceiver. @param connection Voice connection. */\n public constructor(connection: VoiceConnection) {\n this.connection = connection;\n }\n\n /** Maps an SSRC to a User ID (usually from gateway speaking events). */\n public mapSsrc(ssrc: number, userId: string): void {\n this.#ssrcMap.set(ssrc, userId);\n }\n\n /** Subscribes to incoming audio from a specific user. @param userId User identifier. @returns A binary readable stream of the audio. */\n public subscribe(userId: string): AudioStream {\n // A destroyed connection never closes its receiver again, so a late\n // subscriber would wait forever.\n if (this.connection.state === VoiceConnectionState.Destroyed)\n throw new VoiceError(\"Voice connection has been destroyed.\");\n let controllerRef: ReadableStreamDefaultController<Uint8Array>;\n const stream = new ReadableStream<Uint8Array>({\n start: (controller) => {\n controllerRef = controller;\n let set = this.#streams.get(userId);\n if (!set) this.#streams.set(userId, (set = new Set()));\n set.add(controller);\n },\n cancel: () => {\n const set = this.#streams.get(userId);\n if (set) {\n set.delete(controllerRef);\n if (set.size === 0) this.#streams.delete(userId);\n }\n },\n });\n return new AudioStream(stream, { title: `User ${userId} Audio` });\n }\n\n /** Ends every subscriber stream and forgets SSRC mappings. Called when the\n * connection disconnects or is destroyed, so readers do not wait forever. */\n public close(): void {\n for (const controllers of this.#streams.values())\n for (const controller of controllers) {\n try {\n controller.close();\n } catch {\n // Already closed or errored by the consumer.\n }\n }\n this.#streams.clear();\n this.#ssrcMap.clear();\n }\n\n /** Processes an incoming UDP packet, extracting SSRC and routing the audio\n * payload (RTP header stripped) to every subscriber for the mapped user. */\n public onPacket(packet: Uint8Array): void {\n if (packet.length < 12) return;\n\n const view = new DataView(\n packet.buffer,\n packet.byteOffset,\n packet.byteLength,\n );\n const ssrc = view.getUint32(8, false);\n\n const userId = this.#ssrcMap.get(ssrc);\n if (!userId) return;\n const controllers = this.#streams.get(userId);\n if (!controllers || controllers.size === 0) return;\n\n // Compute the RTP payload offset: 12-byte fixed header + CSRC list, plus\n // the extension header when the X bit is set.\n const first = view.getUint8(0);\n const csrcCount = first & 0x0f;\n let offset = 12 + csrcCount * 4;\n const hasExtension = (first & 0x10) !== 0;\n if (hasExtension) {\n if (packet.length < offset + 4) return;\n const extWords = view.getUint16(offset + 2, false);\n offset += 4 + extWords * 4;\n }\n if (packet.length < offset) return;\n const payload = packet.slice(offset);\n\n for (const controller of controllers) {\n try {\n controller.enqueue(payload);\n } catch {\n // Ignore errors on closed streams.\n }\n }\n }\n}\n\n// ─── Discord.js-familiar helpers (@discordjs/voice) ───────────────────────────\n\n/** Discord.js-familiar alias for {@link VoiceConnectionState}. Member values are Lunibee's. */\nexport { VoiceConnectionState as VoiceConnectionStatus };\n\n/** Active connections by guild, as tracked by {@link joinVoiceChannel}. */\nconst voiceConnections = new Map<string, VoiceConnection>();\n\n/**\n * Joins (or moves to) a voice channel, reusing the guild's tracked connection.\n * Mirrors `@discordjs/voice`'s `joinVoiceChannel`; transports are still attached\n * with {@link VoiceConnection.attachTransports}.\n * @param options Guild, channel and self mute/deaf flags.\n * @returns The guild's voice connection.\n * @throws {TypeError} If the guild or channel ID is empty.\n */\nexport function joinVoiceChannel(\n options: VoiceConnectionOptions & { channelId: string },\n): VoiceConnection {\n let connection = voiceConnections.get(options.guildId);\n if (!connection) {\n connection = new VoiceConnection(options);\n const created = connection;\n // VoiceConnection emits stateChange as (next, previous).\n created.on(\"stateChange\", (next) => {\n if (\n next === VoiceConnectionState.Destroyed &&\n voiceConnections.get(created.guildId) === created\n )\n voiceConnections.delete(created.guildId);\n });\n voiceConnections.set(options.guildId, connection);\n }\n connection.setChannel(options.channelId);\n connection.setSuppression(options);\n connection.connect();\n return connection;\n}\n\n/** Returns the connection tracked by {@link joinVoiceChannel} for a guild, if any. */\nexport function getVoiceConnection(\n guildId: string,\n): VoiceConnection | undefined {\n return voiceConnections.get(guildId);\n}\n\n/** Creates an {@link AudioPlayer}. Mirrors `@discordjs/voice`'s `createAudioPlayer`. */\nexport function createAudioPlayer(): AudioPlayer {\n return new AudioPlayer();\n}\n\n/** Creates an {@link AudioStream}. Mirrors `@discordjs/voice`'s `createAudioResource`. */\nexport function createAudioResource(\n stream: ReadableStream<Uint8Array>,\n metadata?: { title?: string; duration?: number },\n): AudioStream {\n return new AudioStream(stream, metadata);\n}\n\n/**\n * Resolves once a connection or player reaches `status`, or rejects after `timeoutMs`.\n * Mirrors `@discordjs/voice`'s `entersState`.\n * @returns The same target, for chaining.\n * @throws {VoiceError} If the state is not reached in time.\n */\nexport function entersState<T extends VoiceConnection | AudioPlayer>(\n target: T,\n status: T extends VoiceConnection ? VoiceConnectionState : AudioPlayerState,\n timeoutMs: number,\n): Promise<T> {\n if (target.state === status) return Promise.resolve(target);\n const emitter = target as unknown as {\n on(\n event: \"stateChange\",\n fn: (from: unknown, to: unknown) => void,\n ): unknown;\n off(\n event: \"stateChange\",\n fn: (from: unknown, to: unknown) => void,\n ): unknown;\n };\n // VoiceConnection emits (next, previous); AudioPlayer emits (from, to).\n const isConnection = target instanceof VoiceConnection;\n return new Promise<T>((resolve, reject) => {\n const onChange = (first: unknown, second: unknown): void => {\n if ((isConnection ? first : second) !== status) return;\n clearTimeout(timer);\n emitter.off(\"stateChange\", onChange);\n resolve(target);\n };\n const timer = setTimeout(() => {\n emitter.off(\"stateChange\", onChange);\n reject(\n new VoiceError(\n `Did not enter state \"${String(status)}\" within ${timeoutMs}ms.`,\n ),\n );\n }, timeoutMs);\n emitter.on(\"stateChange\", onChange);\n });\n}\n"
78
86
  ],
79
- "mappings": "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",
80
- "debugId": "AF3705D1EBC708FB64756E2164756E21",
87
+ "mappings": "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",
88
+ "debugId": "6F25911C0DD073ED64756E2164756E21",
81
89
  "names": []
82
90
  }