@neontechspace/fluxerly 1000.0.0-nightly.12
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.
- package/CHANGELOG.md +833 -0
- package/LICENSE +201 -0
- package/README.md +129 -0
- package/agents/AGENTS.md +195 -0
- package/dist/api/default/application.d.ts +34 -0
- package/dist/api/default/application.d.ts.map +1 -0
- package/dist/api/default/application.js +2 -0
- package/dist/api/default/application.js.map +1 -0
- package/dist/api/default/attachments.d.ts +89 -0
- package/dist/api/default/attachments.d.ts.map +1 -0
- package/dist/api/default/attachments.js +2 -0
- package/dist/api/default/attachments.js.map +1 -0
- package/dist/api/default/audit-logs.d.ts +48 -0
- package/dist/api/default/audit-logs.d.ts.map +1 -0
- package/dist/api/default/audit-logs.js +2 -0
- package/dist/api/default/audit-logs.js.map +1 -0
- package/dist/api/default/bot.d.ts +200 -0
- package/dist/api/default/bot.d.ts.map +1 -0
- package/dist/api/default/bot.js +309 -0
- package/dist/api/default/bot.js.map +1 -0
- package/dist/api/default/cache.d.ts +105 -0
- package/dist/api/default/cache.d.ts.map +1 -0
- package/dist/api/default/cache.js +2 -0
- package/dist/api/default/cache.js.map +1 -0
- package/dist/api/default/channels.d.ts +249 -0
- package/dist/api/default/channels.d.ts.map +1 -0
- package/dist/api/default/channels.js +2 -0
- package/dist/api/default/channels.js.map +1 -0
- package/dist/api/default/client.d.ts +528 -0
- package/dist/api/default/client.d.ts.map +1 -0
- package/dist/api/default/client.js +301 -0
- package/dist/api/default/client.js.map +1 -0
- package/dist/api/default/collectors.d.ts +76 -0
- package/dist/api/default/collectors.d.ts.map +1 -0
- package/dist/api/default/collectors.js +2 -0
- package/dist/api/default/collectors.js.map +1 -0
- package/dist/api/default/commands.d.ts +91 -0
- package/dist/api/default/commands.d.ts.map +1 -0
- package/dist/api/default/commands.js +92 -0
- package/dist/api/default/commands.js.map +1 -0
- package/dist/api/default/direct-messages.d.ts +111 -0
- package/dist/api/default/direct-messages.d.ts.map +1 -0
- package/dist/api/default/direct-messages.js +2 -0
- package/dist/api/default/direct-messages.js.map +1 -0
- package/dist/api/default/discovery.d.ts +76 -0
- package/dist/api/default/discovery.d.ts.map +1 -0
- package/dist/api/default/discovery.js +2 -0
- package/dist/api/default/discovery.js.map +1 -0
- package/dist/api/default/emojis.d.ts +88 -0
- package/dist/api/default/emojis.d.ts.map +1 -0
- package/dist/api/default/emojis.js +2 -0
- package/dist/api/default/emojis.js.map +1 -0
- package/dist/api/default/events.d.ts +127 -0
- package/dist/api/default/events.d.ts.map +1 -0
- package/dist/api/default/events.js +2 -0
- package/dist/api/default/events.js.map +1 -0
- package/dist/api/default/gateway.d.ts +62 -0
- package/dist/api/default/gateway.d.ts.map +1 -0
- package/dist/api/default/gateway.js +2 -0
- package/dist/api/default/gateway.js.map +1 -0
- package/dist/api/default/guards.d.ts +87 -0
- package/dist/api/default/guards.d.ts.map +1 -0
- package/dist/api/default/guards.js +78 -0
- package/dist/api/default/guards.js.map +1 -0
- package/dist/api/default/guilds.d.ts +230 -0
- package/dist/api/default/guilds.d.ts.map +1 -0
- package/dist/api/default/guilds.js +2 -0
- package/dist/api/default/guilds.js.map +1 -0
- package/dist/api/default/helpers.d.ts +79 -0
- package/dist/api/default/helpers.d.ts.map +1 -0
- package/dist/api/default/helpers.js +79 -0
- package/dist/api/default/helpers.js.map +1 -0
- package/dist/api/default/instance.d.ts +47 -0
- package/dist/api/default/instance.d.ts.map +1 -0
- package/dist/api/default/instance.js +2 -0
- package/dist/api/default/instance.js.map +1 -0
- package/dist/api/default/invites.d.ts +57 -0
- package/dist/api/default/invites.d.ts.map +1 -0
- package/dist/api/default/invites.js +2 -0
- package/dist/api/default/invites.js.map +1 -0
- package/dist/api/default/logging.d.ts +37 -0
- package/dist/api/default/logging.d.ts.map +1 -0
- package/dist/api/default/logging.js +2 -0
- package/dist/api/default/logging.js.map +1 -0
- package/dist/api/default/members.d.ts +442 -0
- package/dist/api/default/members.d.ts.map +1 -0
- package/dist/api/default/members.js +2 -0
- package/dist/api/default/members.js.map +1 -0
- package/dist/api/default/messages.d.ts +898 -0
- package/dist/api/default/messages.d.ts.map +1 -0
- package/dist/api/default/messages.js +2 -0
- package/dist/api/default/messages.js.map +1 -0
- package/dist/api/default/oauth.d.ts +168 -0
- package/dist/api/default/oauth.d.ts.map +1 -0
- package/dist/api/default/oauth.js +84 -0
- package/dist/api/default/oauth.js.map +1 -0
- package/dist/api/default/permissions.d.ts +44 -0
- package/dist/api/default/permissions.d.ts.map +1 -0
- package/dist/api/default/permissions.js +2 -0
- package/dist/api/default/permissions.js.map +1 -0
- package/dist/api/default/presence.d.ts +88 -0
- package/dist/api/default/presence.d.ts.map +1 -0
- package/dist/api/default/presence.js +2 -0
- package/dist/api/default/presence.js.map +1 -0
- package/dist/api/default/rest.d.ts +28 -0
- package/dist/api/default/rest.d.ts.map +1 -0
- package/dist/api/default/rest.js +2 -0
- package/dist/api/default/rest.js.map +1 -0
- package/dist/api/default/results.d.ts +31 -0
- package/dist/api/default/results.d.ts.map +1 -0
- package/dist/api/default/results.js +14 -0
- package/dist/api/default/results.js.map +1 -0
- package/dist/api/default/roles.d.ts +119 -0
- package/dist/api/default/roles.d.ts.map +1 -0
- package/dist/api/default/roles.js +2 -0
- package/dist/api/default/roles.js.map +1 -0
- package/dist/api/default/stickers.d.ts +92 -0
- package/dist/api/default/stickers.d.ts.map +1 -0
- package/dist/api/default/stickers.js +2 -0
- package/dist/api/default/stickers.js.map +1 -0
- package/dist/api/default/supervisor.d.ts +51 -0
- package/dist/api/default/supervisor.d.ts.map +1 -0
- package/dist/api/default/supervisor.js +53 -0
- package/dist/api/default/supervisor.js.map +1 -0
- package/dist/api/default/threads.d.ts +158 -0
- package/dist/api/default/threads.d.ts.map +1 -0
- package/dist/api/default/threads.js +2 -0
- package/dist/api/default/threads.js.map +1 -0
- package/dist/api/default/users.d.ts +73 -0
- package/dist/api/default/users.d.ts.map +1 -0
- package/dist/api/default/users.js +2 -0
- package/dist/api/default/users.js.map +1 -0
- package/dist/api/default/webhook-client.d.ts +149 -0
- package/dist/api/default/webhook-client.d.ts.map +1 -0
- package/dist/api/default/webhook-client.js +69 -0
- package/dist/api/default/webhook-client.js.map +1 -0
- package/dist/api/default/webhooks.d.ts +62 -0
- package/dist/api/default/webhooks.d.ts.map +1 -0
- package/dist/api/default/webhooks.js +2 -0
- package/dist/api/default/webhooks.js.map +1 -0
- package/dist/api/effect/application.d.ts +29 -0
- package/dist/api/effect/application.d.ts.map +1 -0
- package/dist/api/effect/application.js +2 -0
- package/dist/api/effect/application.js.map +1 -0
- package/dist/api/effect/attachments.d.ts +84 -0
- package/dist/api/effect/attachments.d.ts.map +1 -0
- package/dist/api/effect/attachments.js +2 -0
- package/dist/api/effect/attachments.js.map +1 -0
- package/dist/api/effect/audit-logs.d.ts +42 -0
- package/dist/api/effect/audit-logs.d.ts.map +1 -0
- package/dist/api/effect/audit-logs.js +2 -0
- package/dist/api/effect/audit-logs.js.map +1 -0
- package/dist/api/effect/bot.d.ts +233 -0
- package/dist/api/effect/bot.d.ts.map +1 -0
- package/dist/api/effect/bot.js +230 -0
- package/dist/api/effect/bot.js.map +1 -0
- package/dist/api/effect/cache.d.ts +103 -0
- package/dist/api/effect/cache.d.ts.map +1 -0
- package/dist/api/effect/cache.js +2 -0
- package/dist/api/effect/cache.js.map +1 -0
- package/dist/api/effect/channels.d.ts +231 -0
- package/dist/api/effect/channels.d.ts.map +1 -0
- package/dist/api/effect/channels.js +2 -0
- package/dist/api/effect/channels.js.map +1 -0
- package/dist/api/effect/client.d.ts +622 -0
- package/dist/api/effect/client.d.ts.map +1 -0
- package/dist/api/effect/client.js +191 -0
- package/dist/api/effect/client.js.map +1 -0
- package/dist/api/effect/collectors.d.ts +90 -0
- package/dist/api/effect/collectors.d.ts.map +1 -0
- package/dist/api/effect/collectors.js +2 -0
- package/dist/api/effect/collectors.js.map +1 -0
- package/dist/api/effect/commands.d.ts +86 -0
- package/dist/api/effect/commands.d.ts.map +1 -0
- package/dist/api/effect/commands.js +87 -0
- package/dist/api/effect/commands.js.map +1 -0
- package/dist/api/effect/direct-messages.d.ts +102 -0
- package/dist/api/effect/direct-messages.d.ts.map +1 -0
- package/dist/api/effect/direct-messages.js +2 -0
- package/dist/api/effect/direct-messages.js.map +1 -0
- package/dist/api/effect/discovery.d.ts +68 -0
- package/dist/api/effect/discovery.d.ts.map +1 -0
- package/dist/api/effect/discovery.js +2 -0
- package/dist/api/effect/discovery.js.map +1 -0
- package/dist/api/effect/emojis.d.ts +77 -0
- package/dist/api/effect/emojis.d.ts.map +1 -0
- package/dist/api/effect/emojis.js +2 -0
- package/dist/api/effect/emojis.js.map +1 -0
- package/dist/api/effect/events.d.ts +78 -0
- package/dist/api/effect/events.d.ts.map +1 -0
- package/dist/api/effect/events.js +12 -0
- package/dist/api/effect/events.js.map +1 -0
- package/dist/api/effect/failures.d.ts +14 -0
- package/dist/api/effect/failures.d.ts.map +1 -0
- package/dist/api/effect/failures.js +2 -0
- package/dist/api/effect/failures.js.map +1 -0
- package/dist/api/effect/gateway.d.ts +63 -0
- package/dist/api/effect/gateway.d.ts.map +1 -0
- package/dist/api/effect/gateway.js +2 -0
- package/dist/api/effect/gateway.js.map +1 -0
- package/dist/api/effect/guards.d.ts +91 -0
- package/dist/api/effect/guards.d.ts.map +1 -0
- package/dist/api/effect/guards.js +94 -0
- package/dist/api/effect/guards.js.map +1 -0
- package/dist/api/effect/guilds.d.ts +221 -0
- package/dist/api/effect/guilds.d.ts.map +1 -0
- package/dist/api/effect/guilds.js +2 -0
- package/dist/api/effect/guilds.js.map +1 -0
- package/dist/api/effect/helpers.d.ts +300 -0
- package/dist/api/effect/helpers.d.ts.map +1 -0
- package/dist/api/effect/helpers.js +156 -0
- package/dist/api/effect/helpers.js.map +1 -0
- package/dist/api/effect/hierarchy.d.ts +26 -0
- package/dist/api/effect/hierarchy.d.ts.map +1 -0
- package/dist/api/effect/hierarchy.js +26 -0
- package/dist/api/effect/hierarchy.js.map +1 -0
- package/dist/api/effect/instance.d.ts +46 -0
- package/dist/api/effect/instance.d.ts.map +1 -0
- package/dist/api/effect/instance.js +8 -0
- package/dist/api/effect/instance.js.map +1 -0
- package/dist/api/effect/invites.d.ts +49 -0
- package/dist/api/effect/invites.d.ts.map +1 -0
- package/dist/api/effect/invites.js +2 -0
- package/dist/api/effect/invites.js.map +1 -0
- package/dist/api/effect/logging.d.ts +37 -0
- package/dist/api/effect/logging.d.ts.map +1 -0
- package/dist/api/effect/logging.js +2 -0
- package/dist/api/effect/logging.js.map +1 -0
- package/dist/api/effect/members.d.ts +433 -0
- package/dist/api/effect/members.d.ts.map +1 -0
- package/dist/api/effect/members.js +2 -0
- package/dist/api/effect/members.js.map +1 -0
- package/dist/api/effect/messages.d.ts +877 -0
- package/dist/api/effect/messages.d.ts.map +1 -0
- package/dist/api/effect/messages.js +2 -0
- package/dist/api/effect/messages.js.map +1 -0
- package/dist/api/effect/oauth.d.ts +148 -0
- package/dist/api/effect/oauth.d.ts.map +1 -0
- package/dist/api/effect/oauth.js +51 -0
- package/dist/api/effect/oauth.js.map +1 -0
- package/dist/api/effect/permissions.d.ts +41 -0
- package/dist/api/effect/permissions.d.ts.map +1 -0
- package/dist/api/effect/permissions.js +2 -0
- package/dist/api/effect/permissions.js.map +1 -0
- package/dist/api/effect/presence.d.ts +83 -0
- package/dist/api/effect/presence.d.ts.map +1 -0
- package/dist/api/effect/presence.js +2 -0
- package/dist/api/effect/presence.js.map +1 -0
- package/dist/api/effect/rest.d.ts +27 -0
- package/dist/api/effect/rest.d.ts.map +1 -0
- package/dist/api/effect/rest.js +2 -0
- package/dist/api/effect/rest.js.map +1 -0
- package/dist/api/effect/roles.d.ts +104 -0
- package/dist/api/effect/roles.d.ts.map +1 -0
- package/dist/api/effect/roles.js +2 -0
- package/dist/api/effect/roles.js.map +1 -0
- package/dist/api/effect/service.d.ts +76 -0
- package/dist/api/effect/service.d.ts.map +1 -0
- package/dist/api/effect/service.js +79 -0
- package/dist/api/effect/service.js.map +1 -0
- package/dist/api/effect/stickers.d.ts +81 -0
- package/dist/api/effect/stickers.d.ts.map +1 -0
- package/dist/api/effect/stickers.js +2 -0
- package/dist/api/effect/stickers.js.map +1 -0
- package/dist/api/effect/supervisor.d.ts +56 -0
- package/dist/api/effect/supervisor.d.ts.map +1 -0
- package/dist/api/effect/supervisor.js +58 -0
- package/dist/api/effect/supervisor.js.map +1 -0
- package/dist/api/effect/threads.d.ts +154 -0
- package/dist/api/effect/threads.d.ts.map +1 -0
- package/dist/api/effect/threads.js +2 -0
- package/dist/api/effect/threads.js.map +1 -0
- package/dist/api/effect/users.d.ts +62 -0
- package/dist/api/effect/users.d.ts.map +1 -0
- package/dist/api/effect/users.js +2 -0
- package/dist/api/effect/users.js.map +1 -0
- package/dist/api/effect/webhook-client.d.ts +140 -0
- package/dist/api/effect/webhook-client.d.ts.map +1 -0
- package/dist/api/effect/webhook-client.js +50 -0
- package/dist/api/effect/webhook-client.js.map +1 -0
- package/dist/api/effect/webhooks.d.ts +54 -0
- package/dist/api/effect/webhooks.d.ts.map +1 -0
- package/dist/api/effect/webhooks.js +2 -0
- package/dist/api/effect/webhooks.js.map +1 -0
- package/dist/api-errors.d.ts +609 -0
- package/dist/api-errors.d.ts.map +1 -0
- package/dist/api-errors.js +589 -0
- package/dist/api-errors.js.map +1 -0
- package/dist/application.d.ts +85 -0
- package/dist/application.d.ts.map +1 -0
- package/dist/application.js +44 -0
- package/dist/application.js.map +1 -0
- package/dist/assets.d.ts +197 -0
- package/dist/assets.d.ts.map +1 -0
- package/dist/assets.js +419 -0
- package/dist/assets.js.map +1 -0
- package/dist/attachments.d.ts +400 -0
- package/dist/attachments.d.ts.map +1 -0
- package/dist/attachments.js +88 -0
- package/dist/attachments.js.map +1 -0
- package/dist/audit-logs.d.ts +292 -0
- package/dist/audit-logs.d.ts.map +1 -0
- package/dist/audit-logs.js +46 -0
- package/dist/audit-logs.js.map +1 -0
- package/dist/bot-runner.d.ts +69 -0
- package/dist/bot-runner.d.ts.map +1 -0
- package/dist/bot-runner.js +41 -0
- package/dist/bot-runner.js.map +1 -0
- package/dist/builders.d.ts +153 -0
- package/dist/builders.d.ts.map +1 -0
- package/dist/builders.js +326 -0
- package/dist/builders.js.map +1 -0
- package/dist/cache.d.ts +187 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +2 -0
- package/dist/cache.js.map +1 -0
- package/dist/channels.d.ts +903 -0
- package/dist/channels.d.ts.map +1 -0
- package/dist/channels.js +125 -0
- package/dist/channels.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +65 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +645 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -0
- package/dist/collectors.d.ts +205 -0
- package/dist/collectors.d.ts.map +1 -0
- package/dist/collectors.js +71 -0
- package/dist/collectors.js.map +1 -0
- package/dist/colors.d.ts +55 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +40 -0
- package/dist/colors.js.map +1 -0
- package/dist/command-arguments.d.ts +353 -0
- package/dist/command-arguments.d.ts.map +1 -0
- package/dist/command-arguments.js +2 -0
- package/dist/command-arguments.js.map +1 -0
- package/dist/command-help.d.ts +54 -0
- package/dist/command-help.d.ts.map +1 -0
- package/dist/command-help.js +2 -0
- package/dist/command-help.js.map +1 -0
- package/dist/commands.d.ts +328 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +62 -0
- package/dist/commands.js.map +1 -0
- package/dist/counts.d.ts +124 -0
- package/dist/counts.d.ts.map +1 -0
- package/dist/counts.js +52 -0
- package/dist/counts.js.map +1 -0
- package/dist/default-commands.d.ts +400 -0
- package/dist/default-commands.d.ts.map +1 -0
- package/dist/default-commands.js +488 -0
- package/dist/default-commands.js.map +1 -0
- package/dist/default-supervisor.d.ts +111 -0
- package/dist/default-supervisor.d.ts.map +1 -0
- package/dist/default-supervisor.js +277 -0
- package/dist/default-supervisor.js.map +1 -0
- package/dist/discovery.d.ts +223 -0
- package/dist/discovery.d.ts.map +1 -0
- package/dist/discovery.js +18 -0
- package/dist/discovery.js.map +1 -0
- package/dist/effect-testing.d.ts +388 -0
- package/dist/effect-testing.d.ts.map +1 -0
- package/dist/effect-testing.js +261 -0
- package/dist/effect-testing.js.map +1 -0
- package/dist/effect.d.ts +220 -0
- package/dist/effect.d.ts.map +1 -0
- package/dist/effect.js +101 -0
- package/dist/effect.js.map +1 -0
- package/dist/embeds.d.ts +243 -0
- package/dist/embeds.d.ts.map +1 -0
- package/dist/embeds.js +2 -0
- package/dist/embeds.js.map +1 -0
- package/dist/error-tools.d.ts +101 -0
- package/dist/error-tools.d.ts.map +1 -0
- package/dist/error-tools.js +125 -0
- package/dist/error-tools.js.map +1 -0
- package/dist/errors.d.ts +386 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +440 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +798 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +2 -0
- package/dist/events.js.map +1 -0
- package/dist/expressions.d.ts +188 -0
- package/dist/expressions.d.ts.map +1 -0
- package/dist/expressions.js +2 -0
- package/dist/expressions.js.map +1 -0
- package/dist/failures.d.ts +53 -0
- package/dist/failures.d.ts.map +1 -0
- package/dist/failures.js +2 -0
- package/dist/failures.js.map +1 -0
- package/dist/gateway.d.ts +48 -0
- package/dist/gateway.d.ts.map +1 -0
- package/dist/gateway.js +60 -0
- package/dist/gateway.js.map +1 -0
- package/dist/guilds.d.ts +923 -0
- package/dist/guilds.d.ts.map +1 -0
- package/dist/guilds.js +204 -0
- package/dist/guilds.js.map +1 -0
- package/dist/helpers.d.ts +423 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +434 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +228 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +109 -0
- package/dist/index.js.map +1 -0
- package/dist/input-validation.d.ts +51 -0
- package/dist/input-validation.d.ts.map +1 -0
- package/dist/input-validation.js +34 -0
- package/dist/input-validation.js.map +1 -0
- package/dist/instance.d.ts +101 -0
- package/dist/instance.d.ts.map +1 -0
- package/dist/instance.js +2 -0
- package/dist/instance.js.map +1 -0
- package/dist/internal/agents-section.d.ts +22 -0
- package/dist/internal/agents-section.d.ts.map +1 -0
- package/dist/internal/agents-section.js +101 -0
- package/dist/internal/agents-section.js.map +1 -0
- package/dist/internal/application.d.ts +16 -0
- package/dist/internal/application.d.ts.map +1 -0
- package/dist/internal/application.js +33 -0
- package/dist/internal/application.js.map +1 -0
- package/dist/internal/attachment-refresh.d.ts +18 -0
- package/dist/internal/attachment-refresh.d.ts.map +1 -0
- package/dist/internal/attachment-refresh.js +39 -0
- package/dist/internal/attachment-refresh.js.map +1 -0
- package/dist/internal/attachments.d.ts +45 -0
- package/dist/internal/attachments.d.ts.map +1 -0
- package/dist/internal/attachments.js +230 -0
- package/dist/internal/attachments.js.map +1 -0
- package/dist/internal/audit-logs.d.ts +13 -0
- package/dist/internal/audit-logs.d.ts.map +1 -0
- package/dist/internal/audit-logs.js +295 -0
- package/dist/internal/audit-logs.js.map +1 -0
- package/dist/internal/audit.d.ts +12 -0
- package/dist/internal/audit.d.ts.map +1 -0
- package/dist/internal/audit.js +22 -0
- package/dist/internal/audit.js.map +1 -0
- package/dist/internal/binding/default-adapters.d.ts +22 -0
- package/dist/internal/binding/default-adapters.d.ts.map +1 -0
- package/dist/internal/binding/default-adapters.js +304 -0
- package/dist/internal/binding/default-adapters.js.map +1 -0
- package/dist/internal/binding/default.d.ts +45 -0
- package/dist/internal/binding/default.d.ts.map +1 -0
- package/dist/internal/binding/default.js +86 -0
- package/dist/internal/binding/default.js.map +1 -0
- package/dist/internal/binding/execute.d.ts +51 -0
- package/dist/internal/binding/execute.d.ts.map +1 -0
- package/dist/internal/binding/execute.js +123 -0
- package/dist/internal/binding/execute.js.map +1 -0
- package/dist/internal/binding/native-adapters.d.ts +23 -0
- package/dist/internal/binding/native-adapters.d.ts.map +1 -0
- package/dist/internal/binding/native-adapters.js +90 -0
- package/dist/internal/binding/native-adapters.js.map +1 -0
- package/dist/internal/binding/native.d.ts +41 -0
- package/dist/internal/binding/native.d.ts.map +1 -0
- package/dist/internal/binding/native.js +34 -0
- package/dist/internal/binding/native.js.map +1 -0
- package/dist/internal/binding/operations.d.ts +361 -0
- package/dist/internal/binding/operations.d.ts.map +1 -0
- package/dist/internal/binding/operations.js +272 -0
- package/dist/internal/binding/operations.js.map +1 -0
- package/dist/internal/bot-runner.d.ts +65 -0
- package/dist/internal/bot-runner.d.ts.map +1 -0
- package/dist/internal/bot-runner.js +363 -0
- package/dist/internal/bot-runner.js.map +1 -0
- package/dist/internal/cache-changes.d.ts +43 -0
- package/dist/internal/cache-changes.d.ts.map +1 -0
- package/dist/internal/cache-changes.js +320 -0
- package/dist/internal/cache-changes.js.map +1 -0
- package/dist/internal/cache.d.ts +57 -0
- package/dist/internal/cache.d.ts.map +1 -0
- package/dist/internal/cache.js +318 -0
- package/dist/internal/cache.js.map +1 -0
- package/dist/internal/calls.d.ts +16 -0
- package/dist/internal/calls.d.ts.map +1 -0
- package/dist/internal/calls.js +108 -0
- package/dist/internal/calls.js.map +1 -0
- package/dist/internal/channel-cache.d.ts +69 -0
- package/dist/internal/channel-cache.d.ts.map +1 -0
- package/dist/internal/channel-cache.js +413 -0
- package/dist/internal/channel-cache.js.map +1 -0
- package/dist/internal/channel-decode.d.ts +44 -0
- package/dist/internal/channel-decode.d.ts.map +1 -0
- package/dist/internal/channel-decode.js +377 -0
- package/dist/internal/channel-decode.js.map +1 -0
- package/dist/internal/channels.d.ts +60 -0
- package/dist/internal/channels.d.ts.map +1 -0
- package/dist/internal/channels.js +605 -0
- package/dist/internal/channels.js.map +1 -0
- package/dist/internal/client/backoff.d.ts +42 -0
- package/dist/internal/client/backoff.d.ts.map +1 -0
- package/dist/internal/client/backoff.js +36 -0
- package/dist/internal/client/backoff.js.map +1 -0
- package/dist/internal/client/configuration-fields.d.ts +14 -0
- package/dist/internal/client/configuration-fields.d.ts.map +1 -0
- package/dist/internal/client/configuration-fields.js +11 -0
- package/dist/internal/client/configuration-fields.js.map +1 -0
- package/dist/internal/client/drain.d.ts +33 -0
- package/dist/internal/client/drain.d.ts.map +1 -0
- package/dist/internal/client/drain.js +109 -0
- package/dist/internal/client/drain.js.map +1 -0
- package/dist/internal/client/intake.d.ts +27 -0
- package/dist/internal/client/intake.d.ts.map +1 -0
- package/dist/internal/client/intake.js +198 -0
- package/dist/internal/client/intake.js.map +1 -0
- package/dist/internal/client/lifetime.d.ts +35 -0
- package/dist/internal/client/lifetime.d.ts.map +1 -0
- package/dist/internal/client/lifetime.js +109 -0
- package/dist/internal/client/lifetime.js.map +1 -0
- package/dist/internal/client/shard-loop.d.ts +93 -0
- package/dist/internal/client/shard-loop.d.ts.map +1 -0
- package/dist/internal/client/shard-loop.js +452 -0
- package/dist/internal/client/shard-loop.js.map +1 -0
- package/dist/internal/client-registry.d.ts +26 -0
- package/dist/internal/client-registry.d.ts.map +1 -0
- package/dist/internal/client-registry.js +11 -0
- package/dist/internal/client-registry.js.map +1 -0
- package/dist/internal/client.d.ts +189 -0
- package/dist/internal/client.d.ts.map +1 -0
- package/dist/internal/client.js +1935 -0
- package/dist/internal/client.js.map +1 -0
- package/dist/internal/clock.d.ts +9 -0
- package/dist/internal/clock.d.ts.map +1 -0
- package/dist/internal/clock.js +5 -0
- package/dist/internal/clock.js.map +1 -0
- package/dist/internal/code-catalogue.d.ts +712 -0
- package/dist/internal/code-catalogue.d.ts.map +1 -0
- package/dist/internal/code-catalogue.js +655 -0
- package/dist/internal/code-catalogue.js.map +1 -0
- package/dist/internal/collector.d.ts +34 -0
- package/dist/internal/collector.d.ts.map +1 -0
- package/dist/internal/collector.js +400 -0
- package/dist/internal/collector.js.map +1 -0
- package/dist/internal/command-arguments.d.ts +29 -0
- package/dist/internal/command-arguments.d.ts.map +1 -0
- package/dist/internal/command-arguments.js +484 -0
- package/dist/internal/command-arguments.js.map +1 -0
- package/dist/internal/command-guards.d.ts +57 -0
- package/dist/internal/command-guards.d.ts.map +1 -0
- package/dist/internal/command-guards.js +81 -0
- package/dist/internal/command-guards.js.map +1 -0
- package/dist/internal/command-help.d.ts +15 -0
- package/dist/internal/command-help.d.ts.map +1 -0
- package/dist/internal/command-help.js +121 -0
- package/dist/internal/command-help.js.map +1 -0
- package/dist/internal/commands.d.ts +212 -0
- package/dist/internal/commands.d.ts.map +1 -0
- package/dist/internal/commands.js +1004 -0
- package/dist/internal/commands.js.map +1 -0
- package/dist/internal/configuration.d.ts +86 -0
- package/dist/internal/configuration.d.ts.map +1 -0
- package/dist/internal/configuration.js +401 -0
- package/dist/internal/configuration.js.map +1 -0
- package/dist/internal/counts.d.ts +33 -0
- package/dist/internal/counts.d.ts.map +1 -0
- package/dist/internal/counts.js +348 -0
- package/dist/internal/counts.js.map +1 -0
- package/dist/internal/decode/primitives.d.ts +30 -0
- package/dist/internal/decode/primitives.d.ts.map +1 -0
- package/dist/internal/decode/primitives.js +56 -0
- package/dist/internal/decode/primitives.js.map +1 -0
- package/dist/internal/decode/timestamp.d.ts +13 -0
- package/dist/internal/decode/timestamp.d.ts.map +1 -0
- package/dist/internal/decode/timestamp.js +27 -0
- package/dist/internal/decode/timestamp.js.map +1 -0
- package/dist/internal/decode/trace.d.ts +11 -0
- package/dist/internal/decode/trace.d.ts.map +1 -0
- package/dist/internal/decode/trace.js +69 -0
- package/dist/internal/decode/trace.js.map +1 -0
- package/dist/internal/defects.d.ts +48 -0
- package/dist/internal/defects.d.ts.map +1 -0
- package/dist/internal/defects.js +100 -0
- package/dist/internal/defects.js.map +1 -0
- package/dist/internal/effect-failures.d.ts +12 -0
- package/dist/internal/effect-failures.d.ts.map +1 -0
- package/dist/internal/effect-failures.js +45 -0
- package/dist/internal/effect-failures.js.map +1 -0
- package/dist/internal/embeds.d.ts +12 -0
- package/dist/internal/embeds.d.ts.map +1 -0
- package/dist/internal/embeds.js +308 -0
- package/dist/internal/embeds.js.map +1 -0
- package/dist/internal/events.d.ts +156 -0
- package/dist/internal/events.d.ts.map +1 -0
- package/dist/internal/events.js +1071 -0
- package/dist/internal/events.js.map +1 -0
- package/dist/internal/expiry-queue.d.ts +42 -0
- package/dist/internal/expiry-queue.d.ts.map +1 -0
- package/dist/internal/expiry-queue.js +138 -0
- package/dist/internal/expiry-queue.js.map +1 -0
- package/dist/internal/expressions.d.ts +35 -0
- package/dist/internal/expressions.d.ts.map +1 -0
- package/dist/internal/expressions.js +311 -0
- package/dist/internal/expressions.js.map +1 -0
- package/dist/internal/failures.d.ts +107 -0
- package/dist/internal/failures.d.ts.map +1 -0
- package/dist/internal/failures.js +416 -0
- package/dist/internal/failures.js.map +1 -0
- package/dist/internal/field-text.d.ts +10 -0
- package/dist/internal/field-text.d.ts.map +1 -0
- package/dist/internal/field-text.js +37 -0
- package/dist/internal/field-text.js.map +1 -0
- package/dist/internal/gateway/commands.d.ts +92 -0
- package/dist/internal/gateway/commands.d.ts.map +1 -0
- package/dist/internal/gateway/commands.js +223 -0
- package/dist/internal/gateway/commands.js.map +1 -0
- package/dist/internal/gateway/dispatch-table.d.ts +42 -0
- package/dist/internal/gateway/dispatch-table.d.ts.map +1 -0
- package/dist/internal/gateway/dispatch-table.js +288 -0
- package/dist/internal/gateway/dispatch-table.js.map +1 -0
- package/dist/internal/gateway/event-dispatches.d.ts +97 -0
- package/dist/internal/gateway/event-dispatches.d.ts.map +1 -0
- package/dist/internal/gateway/event-dispatches.js +172 -0
- package/dist/internal/gateway/event-dispatches.js.map +1 -0
- package/dist/internal/gateway/frames.d.ts +45 -0
- package/dist/internal/gateway/frames.d.ts.map +1 -0
- package/dist/internal/gateway/frames.js +121 -0
- package/dist/internal/gateway/frames.js.map +1 -0
- package/dist/internal/gateway/options.d.ts +24 -0
- package/dist/internal/gateway/options.d.ts.map +1 -0
- package/dist/internal/gateway/options.js +103 -0
- package/dist/internal/gateway/options.js.map +1 -0
- package/dist/internal/gateway/session.d.ts +104 -0
- package/dist/internal/gateway/session.d.ts.map +1 -0
- package/dist/internal/gateway/session.js +420 -0
- package/dist/internal/gateway/session.js.map +1 -0
- package/dist/internal/gateway-requests.d.ts +10 -0
- package/dist/internal/gateway-requests.d.ts.map +1 -0
- package/dist/internal/gateway-requests.js +26 -0
- package/dist/internal/gateway-requests.js.map +1 -0
- package/dist/internal/gateway.d.ts +19 -0
- package/dist/internal/gateway.d.ts.map +1 -0
- package/dist/internal/gateway.js +11 -0
- package/dist/internal/gateway.js.map +1 -0
- package/dist/internal/guild-cache.d.ts +69 -0
- package/dist/internal/guild-cache.d.ts.map +1 -0
- package/dist/internal/guild-cache.js +402 -0
- package/dist/internal/guild-cache.js.map +1 -0
- package/dist/internal/guild-discovery.d.ts +15 -0
- package/dist/internal/guild-discovery.d.ts.map +1 -0
- package/dist/internal/guild-discovery.js +258 -0
- package/dist/internal/guild-discovery.js.map +1 -0
- package/dist/internal/guild-lifecycle.d.ts +18 -0
- package/dist/internal/guild-lifecycle.d.ts.map +1 -0
- package/dist/internal/guild-lifecycle.js +119 -0
- package/dist/internal/guild-lifecycle.js.map +1 -0
- package/dist/internal/guild-settings.d.ts +11 -0
- package/dist/internal/guild-settings.d.ts.map +1 -0
- package/dist/internal/guild-settings.js +150 -0
- package/dist/internal/guild-settings.js.map +1 -0
- package/dist/internal/guilds.d.ts +94 -0
- package/dist/internal/guilds.d.ts.map +1 -0
- package/dist/internal/guilds.js +785 -0
- package/dist/internal/guilds.js.map +1 -0
- package/dist/internal/init-command.d.ts +54 -0
- package/dist/internal/init-command.d.ts.map +1 -0
- package/dist/internal/init-command.js +248 -0
- package/dist/internal/init-command.js.map +1 -0
- package/dist/internal/instance.d.ts +69 -0
- package/dist/internal/instance.d.ts.map +1 -0
- package/dist/internal/instance.js +455 -0
- package/dist/internal/instance.js.map +1 -0
- package/dist/internal/invalid-callback-return.d.ts +3 -0
- package/dist/internal/invalid-callback-return.d.ts.map +1 -0
- package/dist/internal/invalid-callback-return.js +26 -0
- package/dist/internal/invalid-callback-return.js.map +1 -0
- package/dist/internal/invites.d.ts +19 -0
- package/dist/internal/invites.d.ts.map +1 -0
- package/dist/internal/invites.js +182 -0
- package/dist/internal/invites.js.map +1 -0
- package/dist/internal/logging.d.ts +129 -0
- package/dist/internal/logging.d.ts.map +1 -0
- package/dist/internal/logging.js +868 -0
- package/dist/internal/logging.js.map +1 -0
- package/dist/internal/logical-scheduler.d.ts +27 -0
- package/dist/internal/logical-scheduler.d.ts.map +1 -0
- package/dist/internal/logical-scheduler.js +102 -0
- package/dist/internal/logical-scheduler.js.map +1 -0
- package/dist/internal/masking.d.ts +13 -0
- package/dist/internal/masking.d.ts.map +1 -0
- package/dist/internal/masking.js +235 -0
- package/dist/internal/masking.js.map +1 -0
- package/dist/internal/member-chunks.d.ts +96 -0
- package/dist/internal/member-chunks.d.ts.map +1 -0
- package/dist/internal/member-chunks.js +557 -0
- package/dist/internal/member-chunks.js.map +1 -0
- package/dist/internal/member-search-workflow.d.ts +19 -0
- package/dist/internal/member-search-workflow.d.ts.map +1 -0
- package/dist/internal/member-search-workflow.js +143 -0
- package/dist/internal/member-search-workflow.js.map +1 -0
- package/dist/internal/member-search.d.ts +20 -0
- package/dist/internal/member-search.d.ts.map +1 -0
- package/dist/internal/member-search.js +201 -0
- package/dist/internal/member-search.js.map +1 -0
- package/dist/internal/message-cleanup.d.ts +9 -0
- package/dist/internal/message-cleanup.d.ts.map +1 -0
- package/dist/internal/message-cleanup.js +368 -0
- package/dist/internal/message-cleanup.js.map +1 -0
- package/dist/internal/message-fields.d.ts +9 -0
- package/dist/internal/message-fields.d.ts.map +1 -0
- package/dist/internal/message-fields.js +55 -0
- package/dist/internal/message-fields.js.map +1 -0
- package/dist/internal/message-search-workflow.d.ts +14 -0
- package/dist/internal/message-search-workflow.d.ts.map +1 -0
- package/dist/internal/message-search-workflow.js +101 -0
- package/dist/internal/message-search-workflow.js.map +1 -0
- package/dist/internal/message-search.d.ts +19 -0
- package/dist/internal/message-search.d.ts.map +1 -0
- package/dist/internal/message-search.js +317 -0
- package/dist/internal/message-search.js.map +1 -0
- package/dist/internal/message.d.ts +34 -0
- package/dist/internal/message.d.ts.map +1 -0
- package/dist/internal/message.js +723 -0
- package/dist/internal/message.js.map +1 -0
- package/dist/internal/metrics.d.ts +16 -0
- package/dist/internal/metrics.d.ts.map +1 -0
- package/dist/internal/metrics.js +49 -0
- package/dist/internal/metrics.js.map +1 -0
- package/dist/internal/moderation.d.ts +20 -0
- package/dist/internal/moderation.d.ts.map +1 -0
- package/dist/internal/moderation.js +219 -0
- package/dist/internal/moderation.js.map +1 -0
- package/dist/internal/multipart.d.ts +10 -0
- package/dist/internal/multipart.d.ts.map +1 -0
- package/dist/internal/multipart.js +156 -0
- package/dist/internal/multipart.js.map +1 -0
- package/dist/internal/node-version.d.ts +10 -0
- package/dist/internal/node-version.d.ts.map +1 -0
- package/dist/internal/node-version.js +21 -0
- package/dist/internal/node-version.js.map +1 -0
- package/dist/internal/oauth.d.ts +29 -0
- package/dist/internal/oauth.d.ts.map +1 -0
- package/dist/internal/oauth.js +721 -0
- package/dist/internal/oauth.js.map +1 -0
- package/dist/internal/observer.d.ts +21 -0
- package/dist/internal/observer.d.ts.map +1 -0
- package/dist/internal/observer.js +48 -0
- package/dist/internal/observer.js.map +1 -0
- package/dist/internal/operation-signal.d.ts +9 -0
- package/dist/internal/operation-signal.d.ts.map +1 -0
- package/dist/internal/operation-signal.js +19 -0
- package/dist/internal/operation-signal.js.map +1 -0
- package/dist/internal/pagination.d.ts +67 -0
- package/dist/internal/pagination.d.ts.map +1 -0
- package/dist/internal/pagination.js +306 -0
- package/dist/internal/pagination.js.map +1 -0
- package/dist/internal/permission-requirements.d.ts +34 -0
- package/dist/internal/permission-requirements.d.ts.map +1 -0
- package/dist/internal/permission-requirements.js +204 -0
- package/dist/internal/permission-requirements.js.map +1 -0
- package/dist/internal/permissions.d.ts +28 -0
- package/dist/internal/permissions.d.ts.map +1 -0
- package/dist/internal/permissions.js +314 -0
- package/dist/internal/permissions.js.map +1 -0
- package/dist/internal/pins.d.ts +24 -0
- package/dist/internal/pins.d.ts.map +1 -0
- package/dist/internal/pins.js +83 -0
- package/dist/internal/pins.js.map +1 -0
- package/dist/internal/presence.d.ts +101 -0
- package/dist/internal/presence.d.ts.map +1 -0
- package/dist/internal/presence.js +581 -0
- package/dist/internal/presence.js.map +1 -0
- package/dist/internal/protocol/gateway.d.ts +116 -0
- package/dist/internal/protocol/gateway.d.ts.map +1 -0
- package/dist/internal/protocol/gateway.js +258 -0
- package/dist/internal/protocol/gateway.js.map +1 -0
- package/dist/internal/rate-limit-templates.d.ts +2 -0
- package/dist/internal/rate-limit-templates.d.ts.map +1 -0
- package/dist/internal/rate-limit-templates.js +132 -0
- package/dist/internal/rate-limit-templates.js.map +1 -0
- package/dist/internal/rate-limits.d.ts +32 -0
- package/dist/internal/rate-limits.d.ts.map +1 -0
- package/dist/internal/rate-limits.js +306 -0
- package/dist/internal/rate-limits.js.map +1 -0
- package/dist/internal/reaction-collector.d.ts +39 -0
- package/dist/internal/reaction-collector.d.ts.map +1 -0
- package/dist/internal/reaction-collector.js +441 -0
- package/dist/internal/reaction-collector.js.map +1 -0
- package/dist/internal/reaction-pages.d.ts +18 -0
- package/dist/internal/reaction-pages.d.ts.map +1 -0
- package/dist/internal/reaction-pages.js +213 -0
- package/dist/internal/reaction-pages.js.map +1 -0
- package/dist/internal/reactions.d.ts +30 -0
- package/dist/internal/reactions.d.ts.map +1 -0
- package/dist/internal/reactions.js +160 -0
- package/dist/internal/reactions.js.map +1 -0
- package/dist/internal/rejection-scope.d.ts +25 -0
- package/dist/internal/rejection-scope.d.ts.map +1 -0
- package/dist/internal/rejection-scope.js +103 -0
- package/dist/internal/rejection-scope.js.map +1 -0
- package/dist/internal/response-json.d.ts +12 -0
- package/dist/internal/response-json.d.ts.map +1 -0
- package/dist/internal/response-json.js +74 -0
- package/dist/internal/response-json.js.map +1 -0
- package/dist/internal/rest/admission.d.ts +77 -0
- package/dist/internal/rest/admission.d.ts.map +1 -0
- package/dist/internal/rest/admission.js +178 -0
- package/dist/internal/rest/admission.js.map +1 -0
- package/dist/internal/rest/attempt.d.ts +124 -0
- package/dist/internal/rest/attempt.d.ts.map +1 -0
- package/dist/internal/rest/attempt.js +410 -0
- package/dist/internal/rest/attempt.js.map +1 -0
- package/dist/internal/rest/classify.d.ts +93 -0
- package/dist/internal/rest/classify.d.ts.map +1 -0
- package/dist/internal/rest/classify.js +304 -0
- package/dist/internal/rest/classify.js.map +1 -0
- package/dist/internal/rest/download.d.ts +66 -0
- package/dist/internal/rest/download.d.ts.map +1 -0
- package/dist/internal/rest/download.js +552 -0
- package/dist/internal/rest/download.js.map +1 -0
- package/dist/internal/rest/options.d.ts +42 -0
- package/dist/internal/rest/options.d.ts.map +1 -0
- package/dist/internal/rest/options.js +99 -0
- package/dist/internal/rest/options.js.map +1 -0
- package/dist/internal/rest/owner.d.ts +154 -0
- package/dist/internal/rest/owner.d.ts.map +1 -0
- package/dist/internal/rest/owner.js +1292 -0
- package/dist/internal/rest/owner.js.map +1 -0
- package/dist/internal/rest/request.d.ts +31 -0
- package/dist/internal/rest/request.d.ts.map +1 -0
- package/dist/internal/rest/request.js +227 -0
- package/dist/internal/rest/request.js.map +1 -0
- package/dist/internal/rest.d.ts +10 -0
- package/dist/internal/rest.d.ts.map +1 -0
- package/dist/internal/rest.js +9 -0
- package/dist/internal/rest.js.map +1 -0
- package/dist/internal/retention-age.d.ts +11 -0
- package/dist/internal/retention-age.d.ts.map +1 -0
- package/dist/internal/retention-age.js +29 -0
- package/dist/internal/retention-age.js.map +1 -0
- package/dist/internal/role-hierarchy-workflow.d.ts +15 -0
- package/dist/internal/role-hierarchy-workflow.d.ts.map +1 -0
- package/dist/internal/role-hierarchy-workflow.js +122 -0
- package/dist/internal/role-hierarchy-workflow.js.map +1 -0
- package/dist/internal/role-hierarchy.d.ts +11 -0
- package/dist/internal/role-hierarchy.d.ts.map +1 -0
- package/dist/internal/role-hierarchy.js +87 -0
- package/dist/internal/role-hierarchy.js.map +1 -0
- package/dist/internal/scheduled-tasks.d.ts +46 -0
- package/dist/internal/scheduled-tasks.d.ts.map +1 -0
- package/dist/internal/scheduled-tasks.js +190 -0
- package/dist/internal/scheduled-tasks.js.map +1 -0
- package/dist/internal/sharding.d.ts +62 -0
- package/dist/internal/sharding.d.ts.map +1 -0
- package/dist/internal/sharding.js +205 -0
- package/dist/internal/sharding.js.map +1 -0
- package/dist/internal/starter-project.d.ts +27 -0
- package/dist/internal/starter-project.d.ts.map +1 -0
- package/dist/internal/starter-project.js +224 -0
- package/dist/internal/starter-project.js.map +1 -0
- package/dist/internal/suggest.d.ts +12 -0
- package/dist/internal/suggest.d.ts.map +1 -0
- package/dist/internal/suggest.js +51 -0
- package/dist/internal/suggest.js.map +1 -0
- package/dist/internal/supervisor.d.ts +95 -0
- package/dist/internal/supervisor.d.ts.map +1 -0
- package/dist/internal/supervisor.js +1829 -0
- package/dist/internal/supervisor.js.map +1 -0
- package/dist/internal/testing/discovery.d.ts +24 -0
- package/dist/internal/testing/discovery.d.ts.map +1 -0
- package/dist/internal/testing/discovery.js +22 -0
- package/dist/internal/testing/discovery.js.map +1 -0
- package/dist/internal/testing/errors.d.ts +43 -0
- package/dist/internal/testing/errors.d.ts.map +1 -0
- package/dist/internal/testing/errors.js +63 -0
- package/dist/internal/testing/errors.js.map +1 -0
- package/dist/internal/testing/fixtures.d.ts +477 -0
- package/dist/internal/testing/fixtures.d.ts.map +1 -0
- package/dist/internal/testing/fixtures.js +233 -0
- package/dist/internal/testing/fixtures.js.map +1 -0
- package/dist/internal/testing/gateway.d.ts +51 -0
- package/dist/internal/testing/gateway.d.ts.map +1 -0
- package/dist/internal/testing/gateway.js +265 -0
- package/dist/internal/testing/gateway.js.map +1 -0
- package/dist/internal/testing/harness.d.ts +60 -0
- package/dist/internal/testing/harness.d.ts.map +1 -0
- package/dist/internal/testing/harness.js +280 -0
- package/dist/internal/testing/harness.js.map +1 -0
- package/dist/internal/testing/http.d.ts +31 -0
- package/dist/internal/testing/http.d.ts.map +1 -0
- package/dist/internal/testing/http.js +347 -0
- package/dist/internal/testing/http.js.map +1 -0
- package/dist/internal/testing/types.d.ts +222 -0
- package/dist/internal/testing/types.d.ts.map +1 -0
- package/dist/internal/testing/types.js +2 -0
- package/dist/internal/testing/types.js.map +1 -0
- package/dist/internal/testing/wait.d.ts +16 -0
- package/dist/internal/testing/wait.d.ts.map +1 -0
- package/dist/internal/testing/wait.js +55 -0
- package/dist/internal/testing/wait.js.map +1 -0
- package/dist/internal/thread-events.d.ts +40 -0
- package/dist/internal/thread-events.d.ts.map +1 -0
- package/dist/internal/thread-events.js +121 -0
- package/dist/internal/thread-events.js.map +1 -0
- package/dist/internal/threads.d.ts +47 -0
- package/dist/internal/threads.d.ts.map +1 -0
- package/dist/internal/threads.js +587 -0
- package/dist/internal/threads.js.map +1 -0
- package/dist/internal/transfer-source.d.ts +29 -0
- package/dist/internal/transfer-source.d.ts.map +1 -0
- package/dist/internal/transfer-source.js +347 -0
- package/dist/internal/transfer-source.js.map +1 -0
- package/dist/internal/transport/http.d.ts +12 -0
- package/dist/internal/transport/http.d.ts.map +1 -0
- package/dist/internal/transport/http.js +44 -0
- package/dist/internal/transport/http.js.map +1 -0
- package/dist/internal/transport/index.d.ts +21 -0
- package/dist/internal/transport/index.d.ts.map +1 -0
- package/dist/internal/transport/index.js +15 -0
- package/dist/internal/transport/index.js.map +1 -0
- package/dist/internal/transport/socket.d.ts +51 -0
- package/dist/internal/transport/socket.d.ts.map +1 -0
- package/dist/internal/transport/socket.js +27 -0
- package/dist/internal/transport/socket.js.map +1 -0
- package/dist/internal/transport/user-agent.d.ts +7 -0
- package/dist/internal/transport/user-agent.d.ts.map +1 -0
- package/dist/internal/transport/user-agent.js +42 -0
- package/dist/internal/transport/user-agent.js.map +1 -0
- package/dist/internal/uploads.d.ts +23 -0
- package/dist/internal/uploads.d.ts.map +1 -0
- package/dist/internal/uploads.js +89 -0
- package/dist/internal/uploads.js.map +1 -0
- package/dist/internal/user-cache.d.ts +50 -0
- package/dist/internal/user-cache.d.ts.map +1 -0
- package/dist/internal/user-cache.js +273 -0
- package/dist/internal/user-cache.js.map +1 -0
- package/dist/internal/users.d.ts +41 -0
- package/dist/internal/users.d.ts.map +1 -0
- package/dist/internal/users.js +333 -0
- package/dist/internal/users.js.map +1 -0
- package/dist/internal/vanity-url.d.ts +11 -0
- package/dist/internal/vanity-url.d.ts.map +1 -0
- package/dist/internal/vanity-url.js +58 -0
- package/dist/internal/vanity-url.js.map +1 -0
- package/dist/internal/webhooks.d.ts +58 -0
- package/dist/internal/webhooks.d.ts.map +1 -0
- package/dist/internal/webhooks.js +490 -0
- package/dist/internal/webhooks.js.map +1 -0
- package/dist/invites.d.ts +86 -0
- package/dist/invites.d.ts.map +1 -0
- package/dist/invites.js +2 -0
- package/dist/invites.js.map +1 -0
- package/dist/logging.d.ts +228 -0
- package/dist/logging.d.ts.map +1 -0
- package/dist/logging.js +2 -0
- package/dist/logging.js.map +1 -0
- package/dist/member-chunks.d.ts +145 -0
- package/dist/member-chunks.d.ts.map +1 -0
- package/dist/member-chunks.js +68 -0
- package/dist/member-chunks.js.map +1 -0
- package/dist/member-search.d.ts +140 -0
- package/dist/member-search.d.ts.map +1 -0
- package/dist/member-search.js +14 -0
- package/dist/member-search.js.map +1 -0
- package/dist/message-cleanup.d.ts +227 -0
- package/dist/message-cleanup.d.ts.map +1 -0
- package/dist/message-cleanup.js +101 -0
- package/dist/message-cleanup.js.map +1 -0
- package/dist/message-errors.d.ts +172 -0
- package/dist/message-errors.d.ts.map +1 -0
- package/dist/message-errors.js +173 -0
- package/dist/message-errors.js.map +1 -0
- package/dist/message-search.d.ts +201 -0
- package/dist/message-search.d.ts.map +1 -0
- package/dist/message-search.js +2 -0
- package/dist/message-search.js.map +1 -0
- package/dist/messages.d.ts +694 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +37 -0
- package/dist/messages.js.map +1 -0
- package/dist/native-commands.d.ts +451 -0
- package/dist/native-commands.d.ts.map +1 -0
- package/dist/native-commands.js +432 -0
- package/dist/native-commands.js.map +1 -0
- package/dist/native-supervisor.d.ts +125 -0
- package/dist/native-supervisor.d.ts.map +1 -0
- package/dist/native-supervisor.js +126 -0
- package/dist/native-supervisor.js.map +1 -0
- package/dist/oauth.d.ts +298 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +128 -0
- package/dist/oauth.js.map +1 -0
- package/dist/observer.d.ts +111 -0
- package/dist/observer.d.ts.map +1 -0
- package/dist/observer.js +2 -0
- package/dist/observer.js.map +1 -0
- package/dist/pagination.d.ts +117 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +61 -0
- package/dist/pagination.js.map +1 -0
- package/dist/permissions.d.ts +73 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +2 -0
- package/dist/permissions.js.map +1 -0
- package/dist/pins.d.ts +62 -0
- package/dist/pins.d.ts.map +1 -0
- package/dist/pins.js +2 -0
- package/dist/pins.js.map +1 -0
- package/dist/presence.d.ts +84 -0
- package/dist/presence.d.ts.map +1 -0
- package/dist/presence.js +46 -0
- package/dist/presence.js.map +1 -0
- package/dist/reaction-pages.d.ts +99 -0
- package/dist/reaction-pages.d.ts.map +1 -0
- package/dist/reaction-pages.js +2 -0
- package/dist/reaction-pages.js.map +1 -0
- package/dist/reactions.d.ts +118 -0
- package/dist/reactions.d.ts.map +1 -0
- package/dist/reactions.js +2 -0
- package/dist/reactions.js.map +1 -0
- package/dist/rest.d.ts +260 -0
- package/dist/rest.d.ts.map +1 -0
- package/dist/rest.js +46 -0
- package/dist/rest.js.map +1 -0
- package/dist/role-hierarchy.d.ts +81 -0
- package/dist/role-hierarchy.d.ts.map +1 -0
- package/dist/role-hierarchy.js +53 -0
- package/dist/role-hierarchy.js.map +1 -0
- package/dist/sharding.d.ts +219 -0
- package/dist/sharding.d.ts.map +1 -0
- package/dist/sharding.js +86 -0
- package/dist/sharding.js.map +1 -0
- package/dist/supervisor.d.ts +392 -0
- package/dist/supervisor.d.ts.map +1 -0
- package/dist/supervisor.js +101 -0
- package/dist/supervisor.js.map +1 -0
- package/dist/testing.d.ts +258 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +202 -0
- package/dist/testing.js.map +1 -0
- package/dist/text.d.ts +38 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +46 -0
- package/dist/text.js.map +1 -0
- package/dist/threads.d.ts +258 -0
- package/dist/threads.d.ts.map +1 -0
- package/dist/threads.js +2 -0
- package/dist/threads.js.map +1 -0
- package/dist/users.d.ts +204 -0
- package/dist/users.d.ts.map +1 -0
- package/dist/users.js +44 -0
- package/dist/users.js.map +1 -0
- package/dist/webhooks.d.ts +423 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +68 -0
- package/dist/webhooks.js.map +1 -0
- package/esm-only.cjs +3 -0
- package/examples/starter/bot-effect.ts +17 -0
- package/examples/starter/bot.js +13 -0
- package/examples/starter/bot.ts +13 -0
- package/package.json +82 -0
- package/src/api/default/application.ts +40 -0
- package/src/api/default/attachments.ts +106 -0
- package/src/api/default/audit-logs.ts +58 -0
- package/src/api/default/bot.ts +586 -0
- package/src/api/default/cache.ts +106 -0
- package/src/api/default/channels.ts +317 -0
- package/src/api/default/client.ts +829 -0
- package/src/api/default/collectors.ts +81 -0
- package/src/api/default/commands.ts +92 -0
- package/src/api/default/direct-messages.ts +143 -0
- package/src/api/default/discovery.ts +103 -0
- package/src/api/default/emojis.ts +125 -0
- package/src/api/default/events.ts +144 -0
- package/src/api/default/gateway.ts +67 -0
- package/src/api/default/guards.ts +173 -0
- package/src/api/default/guilds.ts +271 -0
- package/src/api/default/helpers.ts +97 -0
- package/src/api/default/instance.ts +49 -0
- package/src/api/default/invites.ts +73 -0
- package/src/api/default/logging.ts +37 -0
- package/src/api/default/members.ts +550 -0
- package/src/api/default/messages.ts +1053 -0
- package/src/api/default/oauth.ts +293 -0
- package/src/api/default/permissions.ts +47 -0
- package/src/api/default/presence.ts +88 -0
- package/src/api/default/rest.ts +30 -0
- package/src/api/default/results.ts +44 -0
- package/src/api/default/roles.ts +154 -0
- package/src/api/default/stickers.ts +129 -0
- package/src/api/default/supervisor.ts +53 -0
- package/src/api/default/threads.ts +233 -0
- package/src/api/default/users.ts +82 -0
- package/src/api/default/webhook-client.ts +266 -0
- package/src/api/default/webhooks.ts +89 -0
- package/src/api/effect/application.ts +29 -0
- package/src/api/effect/attachments.ts +100 -0
- package/src/api/effect/audit-logs.ts +50 -0
- package/src/api/effect/bot.ts +546 -0
- package/src/api/effect/cache.ts +110 -0
- package/src/api/effect/channels.ts +293 -0
- package/src/api/effect/client.ts +792 -0
- package/src/api/effect/collectors.ts +103 -0
- package/src/api/effect/commands.ts +87 -0
- package/src/api/effect/direct-messages.ts +119 -0
- package/src/api/effect/discovery.ts +87 -0
- package/src/api/effect/emojis.ts +108 -0
- package/src/api/effect/events.ts +92 -0
- package/src/api/effect/failures.ts +14 -0
- package/src/api/effect/gateway.ts +63 -0
- package/src/api/effect/guards.ts +194 -0
- package/src/api/effect/guilds.ts +247 -0
- package/src/api/effect/helpers.ts +359 -0
- package/src/api/effect/hierarchy.ts +26 -0
- package/src/api/effect/instance.ts +50 -0
- package/src/api/effect/invites.ts +59 -0
- package/src/api/effect/logging.ts +37 -0
- package/src/api/effect/members.ts +521 -0
- package/src/api/effect/messages.ts +1003 -0
- package/src/api/effect/oauth.ts +208 -0
- package/src/api/effect/permissions.ts +44 -0
- package/src/api/effect/presence.ts +83 -0
- package/src/api/effect/rest.ts +27 -0
- package/src/api/effect/roles.ts +136 -0
- package/src/api/effect/service.ts +104 -0
- package/src/api/effect/stickers.ts +112 -0
- package/src/api/effect/supervisor.ts +58 -0
- package/src/api/effect/threads.ts +221 -0
- package/src/api/effect/users.ts +66 -0
- package/src/api/effect/webhook-client.ts +206 -0
- package/src/api/effect/webhooks.ts +75 -0
- package/src/api-errors.ts +985 -0
- package/src/application.ts +103 -0
- package/src/assets.ts +731 -0
- package/src/attachments.ts +469 -0
- package/src/audit-logs.ts +355 -0
- package/src/bot-runner.ts +91 -0
- package/src/builders.ts +390 -0
- package/src/cache.ts +190 -0
- package/src/channels.ts +1051 -0
- package/src/cli.ts +60 -0
- package/src/client.ts +663 -0
- package/src/collectors.ts +248 -0
- package/src/colors.ts +91 -0
- package/src/command-arguments.ts +432 -0
- package/src/command-help.ts +55 -0
- package/src/commands.ts +403 -0
- package/src/counts.ts +160 -0
- package/src/default-commands.ts +1147 -0
- package/src/default-supervisor.ts +484 -0
- package/src/discovery.ts +241 -0
- package/src/effect-testing.ts +603 -0
- package/src/effect.ts +751 -0
- package/src/embeds.ts +253 -0
- package/src/error-tools.ts +191 -0
- package/src/errors.ts +849 -0
- package/src/events.ts +830 -0
- package/src/expressions.ts +198 -0
- package/src/failures.ts +55 -0
- package/src/gateway.ts +86 -0
- package/src/guilds.ts +1108 -0
- package/src/helpers.ts +836 -0
- package/src/index.ts +796 -0
- package/src/input-validation.ts +94 -0
- package/src/instance.ts +111 -0
- package/src/internal/agents-section.ts +114 -0
- package/src/internal/application.ts +51 -0
- package/src/internal/attachment-refresh.ts +57 -0
- package/src/internal/attachments.ts +313 -0
- package/src/internal/audit-logs.ts +336 -0
- package/src/internal/audit.ts +33 -0
- package/src/internal/binding/default-adapters.ts +482 -0
- package/src/internal/binding/default.ts +155 -0
- package/src/internal/binding/execute.ts +221 -0
- package/src/internal/binding/native-adapters.ts +199 -0
- package/src/internal/binding/native.ts +72 -0
- package/src/internal/binding/operations.ts +1171 -0
- package/src/internal/bot-runner.ts +480 -0
- package/src/internal/cache-changes.ts +363 -0
- package/src/internal/cache.ts +323 -0
- package/src/internal/calls.ts +119 -0
- package/src/internal/channel-cache.ts +435 -0
- package/src/internal/channel-decode.ts +399 -0
- package/src/internal/channels.ts +874 -0
- package/src/internal/client/backoff.ts +69 -0
- package/src/internal/client/configuration-fields.ts +18 -0
- package/src/internal/client/drain.ts +150 -0
- package/src/internal/client/intake.ts +228 -0
- package/src/internal/client/lifetime.ts +165 -0
- package/src/internal/client/shard-loop.ts +586 -0
- package/src/internal/client-registry.ts +35 -0
- package/src/internal/client.ts +2448 -0
- package/src/internal/clock.ts +11 -0
- package/src/internal/code-catalogue.ts +739 -0
- package/src/internal/collector.ts +452 -0
- package/src/internal/command-arguments.ts +585 -0
- package/src/internal/command-guards.ts +96 -0
- package/src/internal/command-help.ts +156 -0
- package/src/internal/commands.ts +1319 -0
- package/src/internal/configuration.ts +529 -0
- package/src/internal/counts.ts +471 -0
- package/src/internal/decode/primitives.ts +67 -0
- package/src/internal/decode/timestamp.ts +29 -0
- package/src/internal/decode/trace.ts +65 -0
- package/src/internal/defects.ts +115 -0
- package/src/internal/effect-failures.ts +65 -0
- package/src/internal/embeds.ts +355 -0
- package/src/internal/events.ts +1345 -0
- package/src/internal/expiry-queue.ts +148 -0
- package/src/internal/expressions.ts +415 -0
- package/src/internal/failures.ts +492 -0
- package/src/internal/field-text.ts +40 -0
- package/src/internal/gateway/commands.ts +328 -0
- package/src/internal/gateway/dispatch-table.ts +383 -0
- package/src/internal/gateway/event-dispatches.ts +201 -0
- package/src/internal/gateway/frames.ts +176 -0
- package/src/internal/gateway/options.ts +144 -0
- package/src/internal/gateway/session.ts +625 -0
- package/src/internal/gateway-requests.ts +26 -0
- package/src/internal/gateway.ts +22 -0
- package/src/internal/guild-cache.ts +424 -0
- package/src/internal/guild-discovery.ts +332 -0
- package/src/internal/guild-lifecycle.ts +128 -0
- package/src/internal/guild-settings.ts +209 -0
- package/src/internal/guilds.ts +949 -0
- package/src/internal/init-command.ts +305 -0
- package/src/internal/instance.ts +645 -0
- package/src/internal/invalid-callback-return.ts +28 -0
- package/src/internal/invites.ts +234 -0
- package/src/internal/logging.ts +1007 -0
- package/src/internal/logical-scheduler.ts +139 -0
- package/src/internal/masking.ts +224 -0
- package/src/internal/member-chunks.ts +649 -0
- package/src/internal/member-search-workflow.ts +237 -0
- package/src/internal/member-search.ts +272 -0
- package/src/internal/message-cleanup.ts +515 -0
- package/src/internal/message-fields.ts +71 -0
- package/src/internal/message-search-workflow.ts +166 -0
- package/src/internal/message-search.ts +476 -0
- package/src/internal/message.ts +879 -0
- package/src/internal/metrics.ts +55 -0
- package/src/internal/moderation.ts +288 -0
- package/src/internal/multipart.ts +171 -0
- package/src/internal/node-version.ts +22 -0
- package/src/internal/oauth.ts +1146 -0
- package/src/internal/observer.ts +62 -0
- package/src/internal/operation-signal.ts +26 -0
- package/src/internal/pagination.ts +494 -0
- package/src/internal/permission-requirements.ts +359 -0
- package/src/internal/permissions.ts +417 -0
- package/src/internal/pins.ts +115 -0
- package/src/internal/presence.ts +745 -0
- package/src/internal/protocol/gateway.ts +299 -0
- package/src/internal/rate-limit-templates.ts +138 -0
- package/src/internal/rate-limits.ts +346 -0
- package/src/internal/reaction-collector.ts +499 -0
- package/src/internal/reaction-pages.ts +260 -0
- package/src/internal/reactions.ts +174 -0
- package/src/internal/rejection-scope.ts +119 -0
- package/src/internal/response-json.ts +76 -0
- package/src/internal/rest/admission.ts +210 -0
- package/src/internal/rest/attempt.ts +617 -0
- package/src/internal/rest/classify.ts +391 -0
- package/src/internal/rest/download.ts +658 -0
- package/src/internal/rest/options.ts +145 -0
- package/src/internal/rest/owner.ts +1828 -0
- package/src/internal/rest/request.ts +289 -0
- package/src/internal/rest.ts +9 -0
- package/src/internal/retention-age.ts +33 -0
- package/src/internal/role-hierarchy-workflow.ts +150 -0
- package/src/internal/role-hierarchy.ts +93 -0
- package/src/internal/scheduled-tasks.ts +217 -0
- package/src/internal/sharding.ts +270 -0
- package/src/internal/starter-project.ts +251 -0
- package/src/internal/suggest.ts +50 -0
- package/src/internal/supervisor.ts +2253 -0
- package/src/internal/testing/discovery.ts +23 -0
- package/src/internal/testing/errors.ts +67 -0
- package/src/internal/testing/fixtures.ts +714 -0
- package/src/internal/testing/gateway.ts +305 -0
- package/src/internal/testing/harness.ts +328 -0
- package/src/internal/testing/http.ts +395 -0
- package/src/internal/testing/types.ts +240 -0
- package/src/internal/testing/wait.ts +63 -0
- package/src/internal/thread-events.ts +128 -0
- package/src/internal/threads.ts +718 -0
- package/src/internal/transfer-source.ts +359 -0
- package/src/internal/transport/http.ts +46 -0
- package/src/internal/transport/index.ts +23 -0
- package/src/internal/transport/socket.ts +71 -0
- package/src/internal/transport/user-agent.ts +46 -0
- package/src/internal/uploads.ts +111 -0
- package/src/internal/user-cache.ts +294 -0
- package/src/internal/users.ts +402 -0
- package/src/internal/vanity-url.ts +80 -0
- package/src/internal/webhooks.ts +690 -0
- package/src/invites.ts +87 -0
- package/src/logging.ts +247 -0
- package/src/member-chunks.ts +195 -0
- package/src/member-search.ts +152 -0
- package/src/message-cleanup.ts +308 -0
- package/src/message-errors.ts +245 -0
- package/src/message-search.ts +213 -0
- package/src/messages.ts +768 -0
- package/src/native-commands.ts +1249 -0
- package/src/native-supervisor.ts +345 -0
- package/src/oauth.ts +413 -0
- package/src/observer.ts +118 -0
- package/src/pagination.ts +172 -0
- package/src/permissions.ts +74 -0
- package/src/pins.ts +65 -0
- package/src/presence.ts +124 -0
- package/src/reaction-pages.ts +106 -0
- package/src/reactions.ts +126 -0
- package/src/rest.ts +282 -0
- package/src/role-hierarchy.ts +127 -0
- package/src/sharding.ts +272 -0
- package/src/supervisor.ts +460 -0
- package/src/testing.ts +424 -0
- package/src/text.ts +76 -0
- package/src/threads.ts +274 -0
- package/src/users.ts +237 -0
- package/src/webhooks.ts +512 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory protocol-v1 gateway for test clients: Fake sockets shaped like ws sockets, the scripted handshake and dispatch delivery.
|
|
3
|
+
* Invariant: Every socket opens without I/O, receives HELLO after the SDK attaches its listeners, gets READY for Identify
|
|
4
|
+
* (with the requested shard pair) and RESUMED for Resume, and has every heartbeat acknowledged. Dispatches carry
|
|
5
|
+
* increasing sequence numbers per shard session. No timers run and closing the gateway closes every socket.
|
|
6
|
+
* Implements [SDK contracts: Connection and recovery](/docs/SDK-CONTRACTS.md#connection-and-recovery)
|
|
7
|
+
*/
|
|
8
|
+
import { EventEmitter } from "node:events"
|
|
9
|
+
import { ClientClosedError, ConfigurationError } from "#sdk/errors"
|
|
10
|
+
import type { WebSocketLike, WebSocketOptions } from "#sdk/rest"
|
|
11
|
+
import { CloseCode, Opcode } from "../protocol/gateway.js"
|
|
12
|
+
import { SocketState } from "../transport/index.js"
|
|
13
|
+
import type { WireUser } from "./fixtures.js"
|
|
14
|
+
import type { TestDisconnectOptions, TestEmitOptions, TestGatewayCommand } from "./types.js"
|
|
15
|
+
|
|
16
|
+
interface ShardSession {
|
|
17
|
+
socket: FakeSocket | undefined
|
|
18
|
+
ready: boolean
|
|
19
|
+
sessionId: string
|
|
20
|
+
sequence: number
|
|
21
|
+
/** Identify filtering belongs to the retained session and survives Resume */
|
|
22
|
+
ignoredEvents: ReadonlySet<string>
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** A ws-compatible socket whose server side is the test gateway */
|
|
26
|
+
class FakeSocket extends EventEmitter {
|
|
27
|
+
readyState: number = SocketState.open
|
|
28
|
+
shardId: number | null = null
|
|
29
|
+
|
|
30
|
+
constructor(private readonly gateway: TestGateway) {
|
|
31
|
+
super()
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
send(data: string, callback: (error?: Error) => void) {
|
|
35
|
+
if (this.readyState !== SocketState.open) {
|
|
36
|
+
queueMicrotask(() => callback(new Error("The test gateway socket is not open")))
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
queueMicrotask(() => callback())
|
|
40
|
+
this.gateway.receive(this, data)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
close(code: number) {
|
|
44
|
+
this.#close(code)
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
terminate() {
|
|
48
|
+
this.#close(CloseCode.abnormal)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Deliver a frame synchronously, as one received text message */
|
|
52
|
+
deliver(frame: unknown) {
|
|
53
|
+
if (this.readyState !== SocketState.open) return
|
|
54
|
+
this.emit("message", Buffer.from(JSON.stringify(frame)), false)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Close from either side. The close event follows in a microtask, exactly once */
|
|
58
|
+
#close(code: number) {
|
|
59
|
+
if (this.readyState === SocketState.closing || this.readyState === SocketState.closed) return
|
|
60
|
+
this.readyState = SocketState.closing
|
|
61
|
+
this.gateway.detach(this)
|
|
62
|
+
queueMicrotask(() => {
|
|
63
|
+
this.readyState = SocketState.closed
|
|
64
|
+
this.emit("close", code, Buffer.alloc(0))
|
|
65
|
+
})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** End the connection from the server side */
|
|
69
|
+
serverClose(code: number) {
|
|
70
|
+
this.#close(code)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/** Redact the token in Identify and Resume data before recording */
|
|
75
|
+
function recordedData(op: number, d: unknown): unknown {
|
|
76
|
+
if ((op !== Opcode.identify && op !== Opcode.resume) || typeof d !== "object" || d === null) return d
|
|
77
|
+
return { ...d, token: "[redacted]" }
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Fluxer exempts direct, here and everyone mentions from ignored MESSAGE_CREATE dispatches. Role-only mentions,
|
|
82
|
+
* own messages and DMs are not exempt in a production session. Pinned to session_dispatch:ignored_event_must_dispatch
|
|
83
|
+
* and session_passive:is_user_mentioned at fluxerapp/fluxer commit 841fb7af4174fc8fc025307776e87e7dba51a669
|
|
84
|
+
*/
|
|
85
|
+
function mentionedMessage(type: string, payload: unknown, userId: string): boolean {
|
|
86
|
+
if (type !== "MESSAGE_CREATE" || typeof payload !== "object" || payload === null) return false
|
|
87
|
+
const message = payload as { mention_everyone?: unknown; mention_here?: unknown; mentions?: unknown }
|
|
88
|
+
return (
|
|
89
|
+
message.mention_everyone === true ||
|
|
90
|
+
message.mention_here === true ||
|
|
91
|
+
(Array.isArray(message.mentions) &&
|
|
92
|
+
message.mentions.some(
|
|
93
|
+
(user: unknown) =>
|
|
94
|
+
typeof user === "object" && user !== null && (user as { id?: unknown }).id === userId,
|
|
95
|
+
))
|
|
96
|
+
)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** Fluxer's shard for a guild ID under a shard count */
|
|
100
|
+
function guildShard(guildId: string, totalShards: number): number {
|
|
101
|
+
return Number((BigInt(guildId) >> 22n) % BigInt(totalShards))
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** The scripted gateway shared by one test client's shards */
|
|
105
|
+
export class TestGateway {
|
|
106
|
+
readonly #sockets = new Set<FakeSocket>()
|
|
107
|
+
readonly #shards = new Map<number, ShardSession>()
|
|
108
|
+
readonly #commands: TestGatewayCommand[] = []
|
|
109
|
+
#totalShards = 1
|
|
110
|
+
#sessions = 0
|
|
111
|
+
#closed = false
|
|
112
|
+
|
|
113
|
+
constructor(
|
|
114
|
+
private readonly settings: {
|
|
115
|
+
readonly user: WireUser
|
|
116
|
+
readonly heartbeatIntervalMs: number
|
|
117
|
+
},
|
|
118
|
+
) {}
|
|
119
|
+
|
|
120
|
+
/** The socket factory passed to the client's transport option */
|
|
121
|
+
readonly webSocket = (_url: string, _options: WebSocketOptions): WebSocketLike => {
|
|
122
|
+
const socket = new FakeSocket(this)
|
|
123
|
+
if (this.#closed) {
|
|
124
|
+
// A socket requested after cleanup closes like a refused connection instead of reaching any network
|
|
125
|
+
socket.serverClose(CloseCode.abnormal)
|
|
126
|
+
return socket
|
|
127
|
+
}
|
|
128
|
+
this.#sockets.add(socket)
|
|
129
|
+
queueMicrotask(() =>
|
|
130
|
+
socket.deliver({ op: Opcode.hello, d: { heartbeat_interval: this.settings.heartbeatIntervalMs } }),
|
|
131
|
+
)
|
|
132
|
+
return socket
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/** Commands received so far, in order */
|
|
136
|
+
commands(): readonly TestGatewayCommand[] {
|
|
137
|
+
return Object.freeze([...this.#commands])
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** Handle one command a client socket sent */
|
|
141
|
+
receive(socket: FakeSocket, data: string) {
|
|
142
|
+
let frame: { op?: unknown; d?: unknown }
|
|
143
|
+
try {
|
|
144
|
+
frame = JSON.parse(data) as { op?: unknown; d?: unknown }
|
|
145
|
+
} catch {
|
|
146
|
+
// allow-silent: A non-JSON command is an SDK defect the real gateway would answer with close code 4002
|
|
147
|
+
socket.serverClose(CloseCode.decodeError)
|
|
148
|
+
return
|
|
149
|
+
}
|
|
150
|
+
const op = typeof frame.op === "number" ? frame.op : -1
|
|
151
|
+
if (op === Opcode.identify) this.#identify(socket, frame.d)
|
|
152
|
+
else if (op === Opcode.resume) this.#resume(socket, frame.d)
|
|
153
|
+
this.#commands.push(Object.freeze({ shardId: socket.shardId, op, d: recordedData(op, frame.d) }))
|
|
154
|
+
if (op === Opcode.heartbeat) queueMicrotask(() => socket.deliver({ op: Opcode.heartbeatAck }))
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
#identify(socket: FakeSocket, d: unknown) {
|
|
158
|
+
const shard = (d as { shard?: unknown } | null)?.shard
|
|
159
|
+
const pair =
|
|
160
|
+
Array.isArray(shard) && shard.length === 2 && shard.every((value) => Number.isSafeInteger(value))
|
|
161
|
+
? (shard as [number, number])
|
|
162
|
+
: undefined
|
|
163
|
+
const shardId = pair?.[0] ?? 0
|
|
164
|
+
this.#totalShards = pair?.[1] ?? 1
|
|
165
|
+
socket.shardId = shardId
|
|
166
|
+
const session: ShardSession = {
|
|
167
|
+
socket,
|
|
168
|
+
ready: false,
|
|
169
|
+
sessionId: `fixture-session-${shardId}-${++this.#sessions}`,
|
|
170
|
+
sequence: 1,
|
|
171
|
+
ignoredEvents: new Set((d as { ignored_events?: readonly string[] } | null)?.ignored_events ?? []),
|
|
172
|
+
}
|
|
173
|
+
this.#shards.set(shardId, session)
|
|
174
|
+
queueMicrotask(() => {
|
|
175
|
+
if (session.socket !== socket) return
|
|
176
|
+
// Ready first: The client can finish connecting and emit synchronously inside this delivery
|
|
177
|
+
session.ready = true
|
|
178
|
+
socket.deliver({
|
|
179
|
+
op: Opcode.dispatch,
|
|
180
|
+
s: 1,
|
|
181
|
+
t: "READY",
|
|
182
|
+
d: {
|
|
183
|
+
session_id: session.sessionId,
|
|
184
|
+
version: 1,
|
|
185
|
+
user: this.settings.user,
|
|
186
|
+
// No guilds list: Tests add communities later, so the connected record reports no count and no invite warning
|
|
187
|
+
private_channels: [],
|
|
188
|
+
presences: [],
|
|
189
|
+
users: [],
|
|
190
|
+
...(pair ? { shard: pair } : {}),
|
|
191
|
+
},
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
#resume(socket: FakeSocket, d: unknown) {
|
|
197
|
+
const sessionId = (d as { session_id?: unknown } | null)?.session_id
|
|
198
|
+
const entry = [...this.#shards].find(([, session]) => session.sessionId === sessionId)
|
|
199
|
+
if (!entry) {
|
|
200
|
+
queueMicrotask(() => socket.deliver({ op: Opcode.invalidSession, d: false }))
|
|
201
|
+
return
|
|
202
|
+
}
|
|
203
|
+
const [shardId, session] = entry
|
|
204
|
+
socket.shardId = shardId
|
|
205
|
+
session.socket = socket
|
|
206
|
+
session.ready = false
|
|
207
|
+
queueMicrotask(() => {
|
|
208
|
+
if (session.socket !== socket) return
|
|
209
|
+
session.ready = true
|
|
210
|
+
socket.deliver({ op: Opcode.dispatch, s: ++session.sequence, t: "RESUMED", d: {} })
|
|
211
|
+
})
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/** Forget a closing socket */
|
|
215
|
+
detach(socket: FakeSocket) {
|
|
216
|
+
this.#sockets.delete(socket)
|
|
217
|
+
for (const session of this.#shards.values())
|
|
218
|
+
if (session.socket === socket) {
|
|
219
|
+
session.socket = undefined
|
|
220
|
+
session.ready = false
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
#connected(shardId: number, operation: string): ShardSession & { socket: FakeSocket } {
|
|
225
|
+
if (this.#closed) throw new ClientClosedError()
|
|
226
|
+
const session = this.#shards.get(shardId)
|
|
227
|
+
if (!session?.ready || session.socket?.readyState !== SocketState.open)
|
|
228
|
+
throw new ConfigurationError(
|
|
229
|
+
"shardIds",
|
|
230
|
+
`Test gateway shard ${shardId} is not connected, so ${operation} cannot deliver to it`,
|
|
231
|
+
{
|
|
232
|
+
hint: "Await ready() before emitting, and pass a shardId this client owns",
|
|
233
|
+
},
|
|
234
|
+
)
|
|
235
|
+
return session as ShardSession & { socket: FakeSocket }
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/** Deliver one dispatch synchronously to a connected shard with the next sequence number */
|
|
239
|
+
emit(type: unknown, payload: unknown, options: TestEmitOptions | undefined) {
|
|
240
|
+
if (typeof type !== "string" || !/^[A-Z0-9_]+$/.test(type))
|
|
241
|
+
throw new ConfigurationError(
|
|
242
|
+
"event",
|
|
243
|
+
"Emitted dispatch types must be upper-case Fluxer dispatch names, such as MESSAGE_CREATE",
|
|
244
|
+
)
|
|
245
|
+
if (type === "READY" || type === "RESUMED")
|
|
246
|
+
throw new ConfigurationError("event", `The test gateway sends ${type} itself during the handshake`, {
|
|
247
|
+
hint: "Await ready() to connect, or use disconnect() to exercise a resume",
|
|
248
|
+
})
|
|
249
|
+
if (options !== undefined && (typeof options !== "object" || options === null))
|
|
250
|
+
throw new ConfigurationError("event", "Emit options must be an object")
|
|
251
|
+
const requested = options?.shardId
|
|
252
|
+
if (requested !== undefined && (!Number.isSafeInteger(requested) || requested < 0))
|
|
253
|
+
throw new ConfigurationError("shardIds", "Emit shardId must be a non-negative integer")
|
|
254
|
+
const guildId = (payload as { guild_id?: unknown } | null)?.guild_id
|
|
255
|
+
const shardId =
|
|
256
|
+
requested ??
|
|
257
|
+
(typeof guildId === "string" && /^[0-9]+$/.test(guildId) ? guildShard(guildId, this.#totalShards) : 0)
|
|
258
|
+
let text: string | undefined
|
|
259
|
+
try {
|
|
260
|
+
text = JSON.stringify(payload)
|
|
261
|
+
} catch (cause) {
|
|
262
|
+
throw new ConfigurationError("event", "Emitted payloads must be JSON-serializable wire data", { cause })
|
|
263
|
+
}
|
|
264
|
+
const session = this.#connected(shardId, `emit(${JSON.stringify(type)})`)
|
|
265
|
+
// MANY is generated from ADD after its ignored-event gate and bypasses filtering of the generated name
|
|
266
|
+
// (session_dispatch:flush_reaction_buffer and session_dispatch_voice:dispatch_reaction_add_many at the pinned commit)
|
|
267
|
+
const filteredType = type === "MESSAGE_REACTION_ADD_MANY" ? "MESSAGE_REACTION_ADD" : type
|
|
268
|
+
if (session.ignoredEvents.has(filteredType) && !mentionedMessage(type, payload, this.settings.user.id))
|
|
269
|
+
throw new ConfigurationError("event", `Fluxer would not send ${type} to this test gateway session`, {
|
|
270
|
+
hint: `Register the event handler before ready() when gateway.ignoredEvents is "auto", or remove ${filteredType} from the explicit gateway.ignoredEvents list (use [] to disable suppression). Create a new test client to apply these changes, since Resume keeps the session's filtering`,
|
|
271
|
+
})
|
|
272
|
+
session.sequence += 1
|
|
273
|
+
const frame = {
|
|
274
|
+
op: Opcode.dispatch,
|
|
275
|
+
s: session.sequence,
|
|
276
|
+
t: type,
|
|
277
|
+
...(text === undefined ? {} : { d: payload }),
|
|
278
|
+
}
|
|
279
|
+
session.socket.deliver(frame)
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/** Close one shard's current connection from the server side with a close code */
|
|
283
|
+
disconnect(options: TestDisconnectOptions | undefined) {
|
|
284
|
+
if (options !== undefined && (typeof options !== "object" || options === null))
|
|
285
|
+
throw new ConfigurationError("connection", "Disconnect options must be an object")
|
|
286
|
+
const shardId = options?.shardId ?? 0
|
|
287
|
+
const code = options?.code ?? CloseCode.unknownError
|
|
288
|
+
if (!Number.isSafeInteger(shardId) || shardId < 0)
|
|
289
|
+
throw new ConfigurationError("shardIds", "Disconnect shardId must be a non-negative integer")
|
|
290
|
+
if (!Number.isSafeInteger(code) || code < 1000 || code > 4999)
|
|
291
|
+
throw new ConfigurationError(
|
|
292
|
+
"connection",
|
|
293
|
+
"Disconnect code must be a WebSocket close code from 1000 through 4999",
|
|
294
|
+
)
|
|
295
|
+
this.#connected(shardId, "disconnect").socket.serverClose(code)
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/** Close every remaining socket and refuse later connections. Returns how many sockets were still open */
|
|
299
|
+
close(): number {
|
|
300
|
+
this.#closed = true
|
|
301
|
+
const open = [...this.#sockets]
|
|
302
|
+
for (const socket of open) socket.serverClose(CloseCode.goingAway)
|
|
303
|
+
return open.length
|
|
304
|
+
}
|
|
305
|
+
}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test client harness shared by the default and native testing entry points: Option handling, log capture and the
|
|
3
|
+
* in-memory transport pair.
|
|
4
|
+
* Invariant: A test client reaches no network. Its options always route HTTP and WebSocket traffic through the fake
|
|
5
|
+
* transport, its log records reach logs() and any caller sinks at the caller's level, its unhandled failures reach
|
|
6
|
+
* failures() and the shutdown check at any level, and closing the harness closes every fake socket and refuses later
|
|
7
|
+
* requests. This module has no Effect imports, so default declarations stay free of Effect.
|
|
8
|
+
* Implements [SDK contracts: Delivery, requests and caches](/docs/SDK-CONTRACTS.md#delivery-requests-and-caches)
|
|
9
|
+
*/
|
|
10
|
+
// Real timers even when a test fakes the global ones, so idle can count quiet event loop turns
|
|
11
|
+
import { clearTimeout, setTimeout } from "node:timers"
|
|
12
|
+
import { ClientClosedError, ConfigurationError } from "#sdk/errors"
|
|
13
|
+
import type { LogCategory, LogRecord, LoggingOptions, LogSink, LogThreshold } from "#sdk/logging"
|
|
14
|
+
import type { TransportOptions } from "#sdk/rest"
|
|
15
|
+
import type { ClientDiagnostics } from "#sdk/client"
|
|
16
|
+
import type { LogCode } from "../code-catalogue.js"
|
|
17
|
+
import { clientOptionKeys } from "../configuration.js"
|
|
18
|
+
import { unsupportedKeyHint } from "../suggest.js"
|
|
19
|
+
import { createFixtures, fixtureToken, type Fixtures, type WireMessage } from "./fixtures.js"
|
|
20
|
+
import { TestGateway } from "./gateway.js"
|
|
21
|
+
import { TestHttp } from "./http.js"
|
|
22
|
+
import { UnhandledTestFailuresError } from "./errors.js"
|
|
23
|
+
import type { TestSayOptions, TestSettings, TestWaitOptions } from "./types.js"
|
|
24
|
+
import { timedWait, waitTimeout } from "./wait.js"
|
|
25
|
+
|
|
26
|
+
const defaultHeartbeatIntervalMs = 41_250
|
|
27
|
+
const levels: readonly LogThreshold[] = ["trace", "debug", "info", "warn", "error", "fatal", "silent"]
|
|
28
|
+
/** Consecutive quiet event loop turns after which idle treats the client as settled */
|
|
29
|
+
const idleTurns = 3
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* The work in progress that idle waits for: The client's diagnostics, its scheduled task runs in progress and its
|
|
33
|
+
* handler invocations, including received events still waiting for a handler that has not started
|
|
34
|
+
*/
|
|
35
|
+
export interface TestClientWork {
|
|
36
|
+
readonly diagnostics: ClientDiagnostics
|
|
37
|
+
readonly runningTasks: number
|
|
38
|
+
readonly pendingHandlers: number
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Codes the failure reporter logs at Error for a handler, command, callback, scheduled task or onError hook failure, or
|
|
43
|
+
* a subscription stopped by overflow. The reported value can be any error, such as the Fluxer rejection of a failed
|
|
44
|
+
* reply a handler returned, so these records count whatever the error's origin
|
|
45
|
+
*/
|
|
46
|
+
const reportedFailureCodes: ReadonlySet<LogCode> = new Set<LogCode>([
|
|
47
|
+
"events.handlerFailed",
|
|
48
|
+
"events.hookFailed",
|
|
49
|
+
"events.overflow",
|
|
50
|
+
"commands.failed",
|
|
51
|
+
"collectors.callbackFailed",
|
|
52
|
+
"collectors.filterFailed",
|
|
53
|
+
"cleanup.progressFailed",
|
|
54
|
+
"cache.policyFailed",
|
|
55
|
+
"lifecycle.observerFailed",
|
|
56
|
+
"lifecycle.taskFailed",
|
|
57
|
+
])
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Whether a record reports a failure no application code handled: A failure the reporter logged at Error because no
|
|
61
|
+
* onError hook took it, or another application callback failure logged at Error or Fatal. Failures of the test's own
|
|
62
|
+
* response handlers are excluded, because they deliberately simulate network errors
|
|
63
|
+
*/
|
|
64
|
+
function unhandledFailure(record: LogRecord): boolean {
|
|
65
|
+
if (record.level !== "error" && record.level !== "fatal") return false
|
|
66
|
+
if (reportedFailureCodes.has(record.code as LogCode)) return true
|
|
67
|
+
return record.error?.origin === "application" && !record.code.startsWith("testing.")
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** Whether a record at this level and category passes the caller's thresholds, as the SDK logger decides */
|
|
71
|
+
function passes(logging: LoggingOptions | undefined, level: LogRecord["level"], category: LogCategory): boolean {
|
|
72
|
+
const threshold = logging?.categories?.[category] ?? logging?.level ?? "info"
|
|
73
|
+
return levels.indexOf(level) >= levels.indexOf(threshold)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Test settings that test clients accept besides the client options */
|
|
77
|
+
const testSettingKeys = ["user", "heartbeatIntervalMs"]
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Reject option keys that a test client does not accept, before any client exists. Transport and instance get their
|
|
81
|
+
* own explanation, because the test client owns them. Any other unknown key gets createClient's closest-name hint,
|
|
82
|
+
* listing the client keys a test client accepts, the test settings and extraKeys, such as the runBot keys of createTestBot
|
|
83
|
+
*/
|
|
84
|
+
export function checkTestOptionKeys(options: object, extraKeys: readonly string[] = []): void {
|
|
85
|
+
const { transport, instance } = options as { transport?: unknown; instance?: unknown }
|
|
86
|
+
if (transport !== undefined || instance !== undefined)
|
|
87
|
+
throw new ConfigurationError(
|
|
88
|
+
"configuration",
|
|
89
|
+
"Test clients own the transport and instance options, so neither may be supplied",
|
|
90
|
+
{ hint: "Remove transport and instance. Test clients always use hosted Fluxer endpoints in memory" },
|
|
91
|
+
)
|
|
92
|
+
const supported = [
|
|
93
|
+
...clientOptionKeys.filter((key) => key !== "transport" && key !== "instance"),
|
|
94
|
+
...testSettingKeys,
|
|
95
|
+
...extraKeys,
|
|
96
|
+
]
|
|
97
|
+
const unsupported = Object.keys(options).find(
|
|
98
|
+
(key) => !supported.includes(key) && key !== "transport" && key !== "instance",
|
|
99
|
+
)
|
|
100
|
+
if (unsupported !== undefined)
|
|
101
|
+
throw new ConfigurationError("configuration", `Unsupported option ${JSON.stringify(unsupported)}`, {
|
|
102
|
+
hint: unsupportedKeyHint(unsupported, supported),
|
|
103
|
+
})
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** The in-memory transport, records and fixtures owned by one test client */
|
|
107
|
+
export class TestHarness {
|
|
108
|
+
readonly fixtures: Fixtures = createFixtures()
|
|
109
|
+
readonly http: TestHttp
|
|
110
|
+
readonly gateway: TestGateway
|
|
111
|
+
readonly #records: LogRecord[] = []
|
|
112
|
+
/** Every Error and Fatal record of the client, captured before its logging thresholds and deduplication */
|
|
113
|
+
readonly #errors: LogRecord[] = []
|
|
114
|
+
/** Unhandled failure records that failures() returned or shutdown already reported */
|
|
115
|
+
readonly #observed = new WeakSet<LogRecord>()
|
|
116
|
+
/** Pending idle waits, failed with ClientClosedError when the harness closes */
|
|
117
|
+
readonly #idleWaits = new Set<(error: unknown) => void>()
|
|
118
|
+
readonly #callerSinks: readonly LogSink[]
|
|
119
|
+
readonly #logging: LoggingOptions | undefined
|
|
120
|
+
#closed = false
|
|
121
|
+
|
|
122
|
+
constructor(options: object) {
|
|
123
|
+
if (typeof options !== "object" || options === null)
|
|
124
|
+
throw new ConfigurationError("configuration", "Test client options must be an object")
|
|
125
|
+
checkTestOptionKeys(options)
|
|
126
|
+
const { user, heartbeatIntervalMs = defaultHeartbeatIntervalMs } = options as TestSettings
|
|
127
|
+
if (
|
|
128
|
+
!Number.isSafeInteger(heartbeatIntervalMs) ||
|
|
129
|
+
heartbeatIntervalMs < 1 ||
|
|
130
|
+
heartbeatIntervalMs > 2_147_483_647
|
|
131
|
+
)
|
|
132
|
+
throw new ConfigurationError(
|
|
133
|
+
"configuration",
|
|
134
|
+
"Test heartbeatIntervalMs must be an integer from 1 through 2,147,483,647",
|
|
135
|
+
)
|
|
136
|
+
if (user !== undefined && (typeof user !== "object" || user === null || typeof user.id !== "string"))
|
|
137
|
+
throw new ConfigurationError("configuration", "Test user must be a wire user object with a string id")
|
|
138
|
+
const logging = (options as { logging?: unknown }).logging
|
|
139
|
+
this.#logging = typeof logging === "object" && logging !== null ? (logging as LoggingOptions) : undefined
|
|
140
|
+
const sink = this.#logging?.sink
|
|
141
|
+
this.#callerSinks = typeof sink === "function" ? [sink] : Array.isArray(sink) ? (sink as LogSink[]) : []
|
|
142
|
+
const bot = user ?? this.fixtures.botUser()
|
|
143
|
+
this.http = new TestHttp((record) => this.#record(record), { fixtures: this.fixtures, author: bot })
|
|
144
|
+
this.gateway = new TestGateway({ user: bot, heartbeatIntervalMs })
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** Client options with the fake transport, a default token and log capture added to the caller's settings */
|
|
148
|
+
clientOptions<O extends object>(options: O): O & { readonly token: string; readonly transport: TransportOptions } {
|
|
149
|
+
const { user: _, heartbeatIntervalMs: __, ...client } = options as O & TestSettings
|
|
150
|
+
const logging = (client as { logging?: unknown }).logging
|
|
151
|
+
const capture: LogSink = (record) => {
|
|
152
|
+
this.#records.push(record)
|
|
153
|
+
}
|
|
154
|
+
const sink = (logging as { sink?: unknown } | undefined)?.sink
|
|
155
|
+
return {
|
|
156
|
+
...client,
|
|
157
|
+
token: (options as TestSettings).token ?? fixtureToken,
|
|
158
|
+
transport: { fetch: this.http.fetch, webSocket: this.gateway.webSocket },
|
|
159
|
+
// Malformed logging settings pass through unchanged, so client creation reports them as usual
|
|
160
|
+
logging:
|
|
161
|
+
logging === undefined
|
|
162
|
+
? { sink: capture }
|
|
163
|
+
: typeof logging !== "object" || logging === null
|
|
164
|
+
? logging
|
|
165
|
+
: {
|
|
166
|
+
...logging,
|
|
167
|
+
sink:
|
|
168
|
+
sink === undefined
|
|
169
|
+
? capture
|
|
170
|
+
: typeof sink === "function"
|
|
171
|
+
? [sink, capture]
|
|
172
|
+
: Array.isArray(sink) && sink.length > 0
|
|
173
|
+
? [...(sink as unknown[]), capture]
|
|
174
|
+
: sink,
|
|
175
|
+
},
|
|
176
|
+
} as O & { readonly token: string; readonly transport: TransportOptions }
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/** Log records captured so far, in order */
|
|
180
|
+
logs(): readonly LogRecord[] {
|
|
181
|
+
return Object.freeze([...this.#records])
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Record an Error or Fatal record of the client before its thresholds and deduplication. Each entry point sets
|
|
186
|
+
* this as the client logger's errorTap, so a quiet logging level cannot hide a failure from failures() or shutdown
|
|
187
|
+
*/
|
|
188
|
+
readonly captureError = (record: LogRecord) => {
|
|
189
|
+
this.#errors.push(record)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/** Unhandled failure records so far, in order. Returning them marks them as observed by the test */
|
|
193
|
+
failures(): readonly LogRecord[] {
|
|
194
|
+
const failures = this.#errors.filter(unhandledFailure)
|
|
195
|
+
for (const record of failures) this.#observed.add(record)
|
|
196
|
+
return Object.freeze(failures)
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/** Throw UnhandledTestFailuresError for unhandled failures the test has not observed, then mark them observed */
|
|
200
|
+
checkFailures() {
|
|
201
|
+
const unobserved = this.#errors.filter((record) => unhandledFailure(record) && !this.#observed.has(record))
|
|
202
|
+
if (unobserved.length === 0) return
|
|
203
|
+
for (const record of unobserved) this.#observed.add(record)
|
|
204
|
+
throw new UnhandledTestFailuresError(unobserved)
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Resolve once the client has no running handler, scheduled task run, REST request or unanswered test request and
|
|
209
|
+
* produced no new log record, request or gateway command for several event loop turns. A scheduled task waiting for
|
|
210
|
+
* its time does not count, so a test advances its clock to run it
|
|
211
|
+
*/
|
|
212
|
+
idle(work: () => TestClientWork, options: TestWaitOptions | undefined, signal?: AbortSignal): Promise<void> {
|
|
213
|
+
const timeoutMs = waitTimeout(options)
|
|
214
|
+
if (this.#closed) return Promise.reject(new ClientClosedError())
|
|
215
|
+
const busy = () => {
|
|
216
|
+
const {
|
|
217
|
+
diagnostics: { events, rest, gatewayRequests },
|
|
218
|
+
runningTasks,
|
|
219
|
+
pendingHandlers,
|
|
220
|
+
} = work()
|
|
221
|
+
return (
|
|
222
|
+
events.activeHandlers +
|
|
223
|
+
pendingHandlers +
|
|
224
|
+
rest.activeRequests +
|
|
225
|
+
rest.queuedRequests +
|
|
226
|
+
gatewayRequests.activeRequests +
|
|
227
|
+
runningTasks >
|
|
228
|
+
0
|
|
229
|
+
)
|
|
230
|
+
}
|
|
231
|
+
const activity = () =>
|
|
232
|
+
`${this.#records.length}:${this.http.requests().length}:${this.gateway.commands().length}`
|
|
233
|
+
return timedWait<void>("idle", timeoutMs, signal, (settle) => {
|
|
234
|
+
let quiet = 0
|
|
235
|
+
let stalled = 0
|
|
236
|
+
let last = activity()
|
|
237
|
+
let timer: ReturnType<typeof setTimeout> | undefined
|
|
238
|
+
// Set by a global setImmediate callback, which Effect fibers also run on. A turn in which it did not run
|
|
239
|
+
// proves nothing, because fake timers that replace setImmediate stop every fiber, so it is never counted as quiet
|
|
240
|
+
let turned = false
|
|
241
|
+
const turn = () => {
|
|
242
|
+
turned = true
|
|
243
|
+
}
|
|
244
|
+
const fail = (error: unknown) => settle({ error })
|
|
245
|
+
// A zero-delay timer passes a whole event loop turn, including the immediate callbacks Effect fibers run on
|
|
246
|
+
const check = () => {
|
|
247
|
+
const now = activity()
|
|
248
|
+
quiet = turned && now === last && this.http.inFlight === 0 && !busy() ? quiet + 1 : 0
|
|
249
|
+
stalled = turned ? 0 : stalled + 1
|
|
250
|
+
last = now
|
|
251
|
+
if (quiet >= idleTurns) return settle({ value: undefined })
|
|
252
|
+
if (stalled >= idleTurns)
|
|
253
|
+
return fail(
|
|
254
|
+
new ConfigurationError("configuration", "Test idle cannot settle while setImmediate is faked", {
|
|
255
|
+
hint: 'The SDK runs on setImmediate. Leave it real, for example vi.useFakeTimers({ toFake: ["setTimeout", "clearTimeout", "setInterval", "clearInterval", "Date"] })',
|
|
256
|
+
}),
|
|
257
|
+
)
|
|
258
|
+
turned = false
|
|
259
|
+
globalThis.setImmediate(turn)
|
|
260
|
+
timer = setTimeout(check, 0)
|
|
261
|
+
}
|
|
262
|
+
globalThis.setImmediate(turn)
|
|
263
|
+
timer = setTimeout(check, 0)
|
|
264
|
+
this.#idleWaits.add(fail)
|
|
265
|
+
return () => {
|
|
266
|
+
clearTimeout(timer)
|
|
267
|
+
this.#idleWaits.delete(fail)
|
|
268
|
+
}
|
|
269
|
+
})
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Deliver a MESSAGE_CREATE from a human author, wait until the client settles as idle does, then return the
|
|
274
|
+
* messages the client sent meanwhile. Misuse and emitting before ready throw synchronously, as idle and emit do
|
|
275
|
+
*/
|
|
276
|
+
say(
|
|
277
|
+
work: () => TestClientWork,
|
|
278
|
+
content: string,
|
|
279
|
+
options: TestSayOptions | undefined,
|
|
280
|
+
signal?: AbortSignal,
|
|
281
|
+
): Promise<readonly WireMessage[]> {
|
|
282
|
+
if (typeof content !== "string")
|
|
283
|
+
throw new ConfigurationError("configuration", "Test say content must be a string")
|
|
284
|
+
waitTimeout(options)
|
|
285
|
+
const overrides = options?.message
|
|
286
|
+
if (
|
|
287
|
+
overrides !== undefined &&
|
|
288
|
+
(typeof overrides !== "object" || overrides === null || Array.isArray(overrides))
|
|
289
|
+
)
|
|
290
|
+
throw new ConfigurationError("configuration", "Test say message overrides must be an object of wire fields")
|
|
291
|
+
if (this.#closed) return Promise.reject(new ClientClosedError())
|
|
292
|
+
const before = this.http.requests().length
|
|
293
|
+
this.gateway.emit("MESSAGE_CREATE", this.fixtures.message({ ...overrides, content }), undefined)
|
|
294
|
+
return this.idle(work, options, signal).then(() => this.http.sentMessages(this.http.requests().slice(before)))
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/** Record a test transport event in logs() and in caller sinks, at the caller's thresholds */
|
|
298
|
+
#record(input: Omit<LogRecord, "time">) {
|
|
299
|
+
if (!passes(this.#logging, input.level, input.category)) return
|
|
300
|
+
const record: LogRecord = Object.freeze({ time: new Date().toISOString(), ...input })
|
|
301
|
+
this.#records.push(record)
|
|
302
|
+
for (const sink of this.#callerSinks) {
|
|
303
|
+
try {
|
|
304
|
+
sink(record)
|
|
305
|
+
} catch (error) {
|
|
306
|
+
// A failing caller sink stays visible in the test's own output, as it would for SDK records
|
|
307
|
+
console.error("Fluxerly test log sink failed:", error)
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/** Close the fake transport after the client shut down. Reports sockets the client left open */
|
|
313
|
+
close() {
|
|
314
|
+
if (this.#closed) return
|
|
315
|
+
this.#closed = true
|
|
316
|
+
this.http.close()
|
|
317
|
+
for (const fail of this.#idleWaits) fail(new ClientClosedError())
|
|
318
|
+
const open = this.gateway.close()
|
|
319
|
+
if (open > 0)
|
|
320
|
+
this.#record({
|
|
321
|
+
level: "warn",
|
|
322
|
+
category: "lifecycle",
|
|
323
|
+
code: "testing.socketsLeftOpen",
|
|
324
|
+
message: `The test client left ${open} gateway ${open === 1 ? "socket" : "sockets"} open after shutdown, so the test transport closed ${open === 1 ? "it" : "them"}`,
|
|
325
|
+
fields: { sockets: open },
|
|
326
|
+
})
|
|
327
|
+
}
|
|
328
|
+
}
|