import type { Awaitable } from '../common/types/util'; import type { GatewayDispatchPayload } from '../types'; import type { BaseClient, BaseClientOptions, ContextScope, ContextScopeContext } from './base'; import { type GatewayIntentInput } from './intents'; import { type PluginRuntimeRegistry } from './plugins/registry'; export type { SeyfertPluginErrorCode } from './plugins/errors'; export { SeyfertPluginAggregateError, SeyfertPluginError } from './plugins/errors'; export { createSharedKey } from './plugins/shared'; export { PluginOrder } from './plugins/types'; import type { AnySeyfertPlugin, ExtendOf, PluginAutocompleteNext, PluginAutocompletePayload, PluginClientMap, PluginCommandObserver, PluginContextMap, PluginGatewaySendPayload, PluginHookName, PluginHookPayload, PluginMiddlewareMap, PluginRequirementInput, ResolvedPluginList, SeyfertPlugin, SeyfertPluginApi, SeyfertPluginClient, SeyfertPluginOptions, SeyfertPluginTeardownApi } from './plugins/types'; export type { AnySeyfertPlugin, ContextOf, ExtendOf, HandleableComponent, HandleableModal, MiddlewaresOf, PluginAutocompleteNext, PluginAutocompletePayload, PluginAutocompleteWrapper, PluginCacheResourceConstructor, PluginCacheResourceOptions, PluginClientMap, PluginCommandContributionOptions, PluginCommandLoadable, PluginCommandObserver, PluginCommandObserverCommand, PluginCommandObserverContext, PluginContextInteraction, PluginContextMap, PluginContextMapOf, PluginContextOf, PluginContributionOptions, PluginDiagnosticCode, PluginDiagnosticMessage, PluginDiagnosticSeverity, PluginDiagnostics, PluginDisposer, PluginEventErrorHandler, PluginExtensionOf, PluginGatewayDispatchInterceptor, PluginGatewayDispatchMeta, PluginGatewayDispatchNext, PluginGatewaySendPayload, PluginGatewaySendPayloadWrapper, PluginHandlerConstructor, PluginHandlerCreator, PluginHandlerInstance, PluginHandlerKind, PluginHandlerMetadata, PluginHandlerOptions, PluginHandlerTransformer, PluginHookHandler, PluginHookName, PluginHookPayload, PluginHookPayloadFor, PluginIntentResolvable, PluginLangOptions, PluginLifecyclePhase, PluginLifecycleStatus, PluginLoadedMetadata, PluginMiddlewareDenialMetadata, PluginMiddlewareMap, PluginMiddlewareOptions, PluginMiddlewaresMapOf, PluginMiddlewaresOf, PluginOrderOpt, PluginRequirement, PluginRequirementDiagnostic, PluginRequirementInput, PluginRestFailPayload, PluginRestObserver, PluginRestRatelimitPayload, PluginRestRequestPayload, PluginRestSuccessPayload, PluginSharedOptions, PluginSharedRegistry, PluginUploadCommandsMetadata, PluginUsingClient, RegisteredPluginContext, RegisteredPluginExtension, RegisteredPluginMiddlewares, RegisteredPluginShared, RegisteredPlugins, ResolvedPluginList, SemverRange, SeyfertCommandDefaults, SeyfertComponentDefaults, SeyfertModalDefaults, SeyfertPlugin, SeyfertPluginApi, SeyfertPluginClient, SeyfertPluginHooks, SeyfertPluginOptions, SeyfertPluginTeardownApi, SeyfertRegistry, SharedKey, SharedValue, } from './plugins/types'; type CreatePluginInputBase = { readonly name: Name; readonly instanceId?: string; readonly imports?: I; readonly requires?: readonly PluginRequirementInput[]; readonly client?: PluginClientMap; readonly ctx?: PluginContextMap; readonly middlewares?: M; readonly globalMiddlewares?: readonly (keyof M & string)[]; options?(current: Readonly): SeyfertPluginOptions; register?(api: SeyfertPluginApi & E>): void; setup?(client: SeyfertPluginClient & ExtendOf & E, api?: SeyfertPluginApi & E>): Awaitable; teardown?(client: SeyfertPluginClient & ExtendOf & E, api?: SeyfertPluginTeardownApi): Awaitable; }; type CreatePluginReservedKey = keyof CreatePluginInputBase | 'meta'; type CreatePluginExtra = Omit; type CreatePluginInputWithMeta = CreatePluginInputBase & { readonly meta: Meta; }; type CreatePluginInputWithoutMeta = CreatePluginInputBase & { readonly meta?: never; }; type CreatePluginOutputBase = Omit, 'meta'> & { readonly name: Name; readonly instanceId?: string; readonly imports?: I; readonly requires?: readonly PluginRequirementInput[]; readonly client?: PluginClientMap; readonly ctx?: PluginContextMap; readonly middlewares?: M; readonly globalMiddlewares?: readonly (keyof M & string)[]; }; type CreatePluginOutputWithMeta = CreatePluginOutputBase & { readonly meta: Meta; }; export interface ResolvedClientPlugins { plugins: ResolvedPluginList; options: BaseClientOptions; registry: PluginRuntimeRegistry; } export declare function createPlugin(plugin: CreatePluginInputWithMeta & Extra): CreatePluginOutputWithMeta & CreatePluginExtra; export declare function createPlugin(plugin: CreatePluginInputWithoutMeta & Extra): CreatePluginOutputBase & CreatePluginExtra; export declare function createPluginFactory(setup: { defaults: O; validate?: (options: O) => void; factory: (options: O) => P; }): (options?: Partial) => P; export declare function definePlugins(plugins: TPlugins): TPlugins; export declare function definePlugins(...plugins: TPlugins): TPlugins; export declare function createContextScope(scope: ContextScope): ContextScope; export declare function resolveClientPlugins(defaults: BaseClientOptions, options?: BaseClientOptions): ResolvedClientPlugins; export declare function bindClientPlugins(client: BaseClient, registry: PluginRuntimeRegistry): void; export declare function refreshClientPluginGlobalMiddlewares(client: BaseClient, registry: PluginRuntimeRegistry): void; export declare function refreshClientPluginOptions(client: BaseClient, registry: PluginRuntimeRegistry): void; export declare function resolveClientPluginIntents(client: BaseClient, base?: GatewayIntentInput): number; export declare function runPluginAutocompleteWrappers(client: BaseClient, payload: PluginAutocompletePayload, run: PluginAutocompleteNext): Awaitable; export declare function runPluginCommandObservers(client: BaseClient, name: K, ...args: Parameters>): Promise; export declare function runPluginHooks(client: BaseClient, name: K, ...args: PluginHookPayload): Promise; export declare function applyPluginGatewayDispatchInterceptors(client: BaseClient, shardId: number, packet: GatewayDispatchPayload): Promise; export declare function applyPluginGatewaySendPayloadWrappers(client: BaseClient, shardId: number, payload: PluginGatewaySendPayload['payload']): Promise; export declare function setupClientPlugins(client: BaseClient & { plugins: ResolvedPluginList; }, plugins: ResolvedPluginList): Promise; export declare function teardownClientPlugins(client: BaseClient & { plugins: ResolvedPluginList; }, plugins: readonly AnySeyfertPlugin[]): Promise; export declare function runContextScopes(scopes: readonly ContextScope[] | undefined, context: ContextScopeContext, run: () => Awaitable): Awaitable;