@songsid/agend 2.1.4-beta.39 → 2.1.4-beta.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,6 @@
1
1
  import { EventEmitter } from "node:events";
2
- import type { ChannelAdapter, ApprovalHandle, SendOpts, SentMessage, PermissionPrompt, Choice, AlertData } from "../types.js";
2
+ import { Client } from "discord.js";
3
+ import type { ChannelAdapter, ApprovalHandle, SendOpts, SentMessage, PermissionPrompt, Choice, AlertData, AdapterHealthSnapshot } from "../types.js";
3
4
  import type { AccessManager } from "../access-manager.js";
4
5
  /** Curated ClassicBot backends for Discord's native slash-option dropdown. */
5
6
  export declare const DISCORD_START_BACKEND_CHOICES: readonly [{
@@ -30,12 +31,39 @@ export interface DiscordAdapterOptions {
30
31
  categoryName?: string;
31
32
  generalChannelId?: string;
32
33
  registerCommands?: boolean;
34
+ /** Test seams; production callers leave these unset. */
35
+ clientFactory?: () => Client;
36
+ now?: () => number;
37
+ watchdogIntervalMs?: number;
38
+ staleThresholdMs?: number;
39
+ reconnectBaseDelayMs?: number;
33
40
  }
34
41
  export declare class DiscordAdapter extends EventEmitter implements ChannelAdapter {
35
42
  readonly type = "discord";
36
43
  readonly topology: "channels";
37
44
  readonly id: string;
38
45
  private client;
46
+ private readonly clientFactory;
47
+ private readonly now;
48
+ private readonly watchdogIntervalMs;
49
+ private readonly staleThresholdMs;
50
+ private readonly reconnectBaseDelayMs;
51
+ private desiredRunning;
52
+ private lifecycleEpoch;
53
+ private clientGeneration;
54
+ private reconnectPromise;
55
+ private watchdogTimer;
56
+ private lastWatchdogTickAt;
57
+ private generationReadyAt;
58
+ private generationNonReadySince;
59
+ private shardNonReadySince;
60
+ private previousHeartbeatAck;
61
+ private observedHeartbeatInterval;
62
+ private healthStatus;
63
+ private lastDispatchAt;
64
+ private lastReconnectAt;
65
+ private lastReconnectReason;
66
+ private reconnectCount;
39
67
  private botToken;
40
68
  private accessManager;
41
69
  private inboxDir;
@@ -49,10 +77,22 @@ export declare class DiscordAdapter extends EventEmitter implements ChannelAdapt
49
77
  private attachmentUrls;
50
78
  private categoryIdPromise?;
51
79
  constructor(opts: DiscordAdapterOptions);
80
+ private buildClient;
52
81
  private _fetchTextChannel;
53
- private _registerHandlers;
82
+ private registerClientHandlers;
54
83
  /** Mark channels as open (skip access control) — used for classic bot channels */
55
84
  setOpenChannels(channelIds: string[]): void;
85
+ private isCurrentClient;
86
+ private emitFromClient;
87
+ private emitHealthChanged;
88
+ private loginFreshClient;
89
+ /** Rebuild just this bot's gateway Client. Calls coalesce into one generation. */
90
+ reconnectGateway(reason: string): Promise<void>;
91
+ private readyClient;
92
+ private startGatewayWatchdog;
93
+ private checkGatewayLiveness;
94
+ getHealthSnapshot(): AdapterHealthSnapshot;
95
+ private handleClientReady;
56
96
  start(): Promise<void>;
57
97
  stop(): Promise<void>;
58
98
  /**