@herdctl/discord 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/__tests__/auto-mode-handler.test.d.ts +2 -0
  2. package/dist/__tests__/auto-mode-handler.test.d.ts.map +1 -0
  3. package/dist/__tests__/auto-mode-handler.test.js +362 -0
  4. package/dist/__tests__/auto-mode-handler.test.js.map +1 -0
  5. package/dist/__tests__/discord-connector.test.d.ts +2 -0
  6. package/dist/__tests__/discord-connector.test.d.ts.map +1 -0
  7. package/dist/__tests__/discord-connector.test.js +958 -0
  8. package/dist/__tests__/discord-connector.test.js.map +1 -0
  9. package/dist/__tests__/error-handler.test.d.ts +2 -0
  10. package/dist/__tests__/error-handler.test.d.ts.map +1 -0
  11. package/dist/__tests__/error-handler.test.js +509 -0
  12. package/dist/__tests__/error-handler.test.js.map +1 -0
  13. package/dist/__tests__/errors.test.d.ts +2 -0
  14. package/dist/__tests__/errors.test.d.ts.map +1 -0
  15. package/dist/__tests__/errors.test.js +152 -0
  16. package/dist/__tests__/errors.test.js.map +1 -0
  17. package/dist/__tests__/logger.test.d.ts +2 -0
  18. package/dist/__tests__/logger.test.d.ts.map +1 -0
  19. package/dist/__tests__/logger.test.js +282 -0
  20. package/dist/__tests__/logger.test.js.map +1 -0
  21. package/dist/__tests__/mention-handler.test.d.ts +2 -0
  22. package/dist/__tests__/mention-handler.test.d.ts.map +1 -0
  23. package/dist/__tests__/mention-handler.test.js +547 -0
  24. package/dist/__tests__/mention-handler.test.js.map +1 -0
  25. package/dist/auto-mode-handler.d.ts +145 -0
  26. package/dist/auto-mode-handler.d.ts.map +1 -0
  27. package/dist/auto-mode-handler.js +211 -0
  28. package/dist/auto-mode-handler.js.map +1 -0
  29. package/dist/commands/__tests__/command-manager.test.d.ts +2 -0
  30. package/dist/commands/__tests__/command-manager.test.d.ts.map +1 -0
  31. package/dist/commands/__tests__/command-manager.test.js +307 -0
  32. package/dist/commands/__tests__/command-manager.test.js.map +1 -0
  33. package/dist/commands/__tests__/help.test.d.ts +2 -0
  34. package/dist/commands/__tests__/help.test.d.ts.map +1 -0
  35. package/dist/commands/__tests__/help.test.js +105 -0
  36. package/dist/commands/__tests__/help.test.js.map +1 -0
  37. package/dist/commands/__tests__/reset.test.d.ts +2 -0
  38. package/dist/commands/__tests__/reset.test.d.ts.map +1 -0
  39. package/dist/commands/__tests__/reset.test.js +140 -0
  40. package/dist/commands/__tests__/reset.test.js.map +1 -0
  41. package/dist/commands/__tests__/status.test.d.ts +2 -0
  42. package/dist/commands/__tests__/status.test.d.ts.map +1 -0
  43. package/dist/commands/__tests__/status.test.js +205 -0
  44. package/dist/commands/__tests__/status.test.js.map +1 -0
  45. package/dist/commands/command-manager.d.ts +66 -0
  46. package/dist/commands/command-manager.d.ts.map +1 -0
  47. package/dist/commands/command-manager.js +191 -0
  48. package/dist/commands/command-manager.js.map +1 -0
  49. package/dist/commands/help.d.ts +8 -0
  50. package/dist/commands/help.d.ts.map +1 -0
  51. package/dist/commands/help.js +27 -0
  52. package/dist/commands/help.js.map +1 -0
  53. package/dist/commands/index.d.ts +12 -0
  54. package/dist/commands/index.d.ts.map +1 -0
  55. package/dist/commands/index.js +13 -0
  56. package/dist/commands/index.js.map +1 -0
  57. package/dist/commands/reset.d.ts +9 -0
  58. package/dist/commands/reset.d.ts.map +1 -0
  59. package/dist/commands/reset.js +28 -0
  60. package/dist/commands/reset.js.map +1 -0
  61. package/dist/commands/status.d.ts +9 -0
  62. package/dist/commands/status.d.ts.map +1 -0
  63. package/dist/commands/status.js +102 -0
  64. package/dist/commands/status.js.map +1 -0
  65. package/dist/commands/types.d.ts +87 -0
  66. package/dist/commands/types.d.ts.map +1 -0
  67. package/dist/commands/types.js +8 -0
  68. package/dist/commands/types.js.map +1 -0
  69. package/dist/discord-connector.d.ts +154 -0
  70. package/dist/discord-connector.d.ts.map +1 -0
  71. package/dist/discord-connector.js +638 -0
  72. package/dist/discord-connector.js.map +1 -0
  73. package/dist/error-handler.d.ts +237 -0
  74. package/dist/error-handler.d.ts.map +1 -0
  75. package/dist/error-handler.js +433 -0
  76. package/dist/error-handler.js.map +1 -0
  77. package/dist/errors.d.ts +61 -0
  78. package/dist/errors.d.ts.map +1 -0
  79. package/dist/errors.js +77 -0
  80. package/dist/errors.js.map +1 -0
  81. package/dist/index.d.ts +34 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +36 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/logger.d.ts +119 -0
  86. package/dist/logger.d.ts.map +1 -0
  87. package/dist/logger.js +198 -0
  88. package/dist/logger.js.map +1 -0
  89. package/dist/mention-handler.d.ts +176 -0
  90. package/dist/mention-handler.d.ts.map +1 -0
  91. package/dist/mention-handler.js +236 -0
  92. package/dist/mention-handler.js.map +1 -0
  93. package/dist/session-manager/__tests__/errors.test.d.ts +2 -0
  94. package/dist/session-manager/__tests__/errors.test.d.ts.map +1 -0
  95. package/dist/session-manager/__tests__/errors.test.js +124 -0
  96. package/dist/session-manager/__tests__/errors.test.js.map +1 -0
  97. package/dist/session-manager/__tests__/session-manager.test.d.ts +2 -0
  98. package/dist/session-manager/__tests__/session-manager.test.d.ts.map +1 -0
  99. package/dist/session-manager/__tests__/session-manager.test.js +517 -0
  100. package/dist/session-manager/__tests__/session-manager.test.js.map +1 -0
  101. package/dist/session-manager/__tests__/types.test.d.ts +2 -0
  102. package/dist/session-manager/__tests__/types.test.d.ts.map +1 -0
  103. package/dist/session-manager/__tests__/types.test.js +169 -0
  104. package/dist/session-manager/__tests__/types.test.js.map +1 -0
  105. package/dist/session-manager/errors.d.ts +58 -0
  106. package/dist/session-manager/errors.d.ts.map +1 -0
  107. package/dist/session-manager/errors.js +70 -0
  108. package/dist/session-manager/errors.js.map +1 -0
  109. package/dist/session-manager/index.d.ts +11 -0
  110. package/dist/session-manager/index.d.ts.map +1 -0
  111. package/dist/session-manager/index.js +12 -0
  112. package/dist/session-manager/index.js.map +1 -0
  113. package/dist/session-manager/session-manager.d.ts +107 -0
  114. package/dist/session-manager/session-manager.d.ts.map +1 -0
  115. package/dist/session-manager/session-manager.js +347 -0
  116. package/dist/session-manager/session-manager.js.map +1 -0
  117. package/dist/session-manager/types.d.ts +167 -0
  118. package/dist/session-manager/types.d.ts.map +1 -0
  119. package/dist/session-manager/types.js +57 -0
  120. package/dist/session-manager/types.js.map +1 -0
  121. package/dist/types.d.ts +323 -0
  122. package/dist/types.d.ts.map +1 -0
  123. package/dist/types.js +8 -0
  124. package/dist/types.js.map +1 -0
  125. package/dist/utils/__tests__/formatting.test.d.ts +2 -0
  126. package/dist/utils/__tests__/formatting.test.d.ts.map +1 -0
  127. package/dist/utils/__tests__/formatting.test.js +571 -0
  128. package/dist/utils/__tests__/formatting.test.js.map +1 -0
  129. package/dist/utils/formatting.d.ts +211 -0
  130. package/dist/utils/formatting.d.ts.map +1 -0
  131. package/dist/utils/formatting.js +305 -0
  132. package/dist/utils/formatting.js.map +1 -0
  133. package/dist/utils/index.d.ts +5 -0
  134. package/dist/utils/index.d.ts.map +1 -0
  135. package/dist/utils/index.js +9 -0
  136. package/dist/utils/index.js.map +1 -0
  137. package/package.json +49 -0
@@ -0,0 +1,154 @@
1
+ /**
2
+ * DiscordConnector - Connects an agent to Discord
3
+ *
4
+ * Each agent has its own DiscordConnector instance with its own bot identity.
5
+ * The connector uses discord.js v14 to connect to the Discord gateway and
6
+ * handles connection lifecycle events.
7
+ */
8
+ import { EventEmitter } from "events";
9
+ import { Client } from "discord.js";
10
+ import type { DiscordConnectorOptions, DiscordConnectorState, IDiscordConnector, DiscordConnectorEventMap, DiscordConnectorEventName } from "./types.js";
11
+ import { type ICommandManager } from "./commands/index.js";
12
+ import type { ISessionManager } from "./session-manager/index.js";
13
+ /**
14
+ * DiscordConnector class - Connects a single agent to Discord
15
+ *
16
+ * Each agent has its own connector instance with:
17
+ * - Its own discord.js Client
18
+ * - Its own bot token and identity
19
+ * - Connection lifecycle management
20
+ * - Event emission for monitoring
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * const connector = new DiscordConnector({
25
+ * agentConfig,
26
+ * discordConfig: agentConfig.chat.discord,
27
+ * botToken: process.env.MY_BOT_TOKEN,
28
+ * fleetManager,
29
+ * });
30
+ *
31
+ * await connector.connect();
32
+ * console.log(`Connected as ${connector.getState().botUser?.username}`);
33
+ *
34
+ * // Later...
35
+ * await connector.disconnect();
36
+ * ```
37
+ */
38
+ export declare class DiscordConnector extends EventEmitter implements IDiscordConnector {
39
+ private readonly _agentConfig;
40
+ private readonly _discordConfig;
41
+ private readonly _botToken;
42
+ private readonly _fleetManager;
43
+ private readonly _logger;
44
+ private readonly _sessionManager;
45
+ private readonly _errorHandler;
46
+ private _client;
47
+ private _commandManager;
48
+ private _status;
49
+ private _connectedAt;
50
+ private _disconnectedAt;
51
+ private _reconnectAttempts;
52
+ private _lastError;
53
+ private _botUser;
54
+ private _rateLimitCount;
55
+ private _lastRateLimitAt;
56
+ private _rateLimitResetTime;
57
+ private _rateLimitResetTimer;
58
+ private _messagesReceived;
59
+ private _messagesSent;
60
+ private _messagesIgnored;
61
+ constructor(options: DiscordConnectorOptions);
62
+ /**
63
+ * Get the session manager instance
64
+ */
65
+ get sessionManager(): ISessionManager;
66
+ /**
67
+ * Get the command manager instance (available after connect)
68
+ */
69
+ get commandManager(): ICommandManager | null;
70
+ /**
71
+ * Name of the agent this connector is for
72
+ */
73
+ get agentName(): string;
74
+ /**
75
+ * Get the discord.js Client instance (for testing)
76
+ */
77
+ get client(): Client | null;
78
+ /**
79
+ * Connect to Discord gateway
80
+ *
81
+ * Creates a new discord.js Client and connects to the gateway.
82
+ * Registers event handlers for connection lifecycle events.
83
+ *
84
+ * @throws AlreadyConnectedError if already connected
85
+ * @throws DiscordConnectionError on connection failure
86
+ */
87
+ connect(): Promise<void>;
88
+ /**
89
+ * Disconnect from Discord gateway
90
+ *
91
+ * Performs graceful shutdown by destroying the client.
92
+ * Does not throw on failure - logs errors and completes.
93
+ */
94
+ disconnect(): Promise<void>;
95
+ /**
96
+ * Check if currently connected to Discord
97
+ *
98
+ * @returns true if connected and ready, false otherwise
99
+ */
100
+ isConnected(): boolean;
101
+ /**
102
+ * Get current connector state
103
+ *
104
+ * @returns Current state including connection status and metadata
105
+ */
106
+ getState(): DiscordConnectorState;
107
+ /**
108
+ * Set up event handlers for the discord.js client
109
+ */
110
+ private _setupEventHandlers;
111
+ /**
112
+ * Initialize and register slash commands
113
+ */
114
+ private _initializeCommands;
115
+ /**
116
+ * Handle an incoming interaction (slash command)
117
+ */
118
+ private _handleInteraction;
119
+ /**
120
+ * Handle an incoming message
121
+ *
122
+ * Determines if the message should be processed based on channel configuration
123
+ * and mention mode settings. If the message should be processed, builds
124
+ * conversation context and emits a 'message' event.
125
+ *
126
+ * For DMs:
127
+ * - DMs default to auto mode (no mention required)
128
+ * - Allowlist/blocklist filtering is applied
129
+ *
130
+ * For guild channels:
131
+ * - Mode is determined by channel configuration
132
+ * - Only configured channels are processed
133
+ */
134
+ private _handleMessage;
135
+ /**
136
+ * Set bot presence based on configuration
137
+ */
138
+ private _setPresence;
139
+ /**
140
+ * Handle rate limit events from discord.js REST client
141
+ *
142
+ * Discord.js automatically queues and retries requests when rate limited.
143
+ * This method tracks rate limit occurrences and emits events for monitoring.
144
+ */
145
+ private _handleRateLimit;
146
+ /**
147
+ * Type-safe event emitter methods
148
+ */
149
+ emit<K extends DiscordConnectorEventName>(event: K, payload: DiscordConnectorEventMap[K]): boolean;
150
+ on<K extends DiscordConnectorEventName>(event: K, listener: (payload: DiscordConnectorEventMap[K]) => void): this;
151
+ once<K extends DiscordConnectorEventName>(event: K, listener: (payload: DiscordConnectorEventMap[K]) => void): this;
152
+ off<K extends DiscordConnectorEventName>(event: K, listener: (payload: DiscordConnectorEventMap[K]) => void): this;
153
+ }
154
+ //# sourceMappingURL=discord-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discord-connector.d.ts","sourceRoot":"","sources":["../src/discord-connector.ts"],"names":[],"mappings":"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"}