@ninenity/neutrun 1.0.0

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 (226) hide show
  1. package/README.md +5 -0
  2. package/dist/CLI/Bootstrap.d.ts +2 -0
  3. package/dist/CLI/Bootstrap.d.ts.map +1 -0
  4. package/dist/CLI/Bootstrap.js +71 -0
  5. package/dist/CLI/Bootstrap.js.map +1 -0
  6. package/dist/CLI/Localize.d.ts +2 -0
  7. package/dist/CLI/Localize.d.ts.map +1 -0
  8. package/dist/CLI/Localize.js +248 -0
  9. package/dist/CLI/Localize.js.map +1 -0
  10. package/dist/CLI/Translate.d.ts +2 -0
  11. package/dist/CLI/Translate.d.ts.map +1 -0
  12. package/dist/CLI/Translate.js +82 -0
  13. package/dist/CLI/Translate.js.map +1 -0
  14. package/dist/CLI/bin.d.ts +3 -0
  15. package/dist/CLI/bin.d.ts.map +1 -0
  16. package/dist/CLI/bin.js +36 -0
  17. package/dist/CLI/bin.js.map +1 -0
  18. package/dist/Emojis/EmojiLoader.d.ts +4 -0
  19. package/dist/Emojis/EmojiLoader.d.ts.map +1 -0
  20. package/dist/Emojis/EmojiLoader.js +262 -0
  21. package/dist/Emojis/EmojiLoader.js.map +1 -0
  22. package/dist/Emojis/Pool.d.ts +3 -0
  23. package/dist/Emojis/Pool.d.ts.map +1 -0
  24. package/dist/Emojis/Pool.js +33 -0
  25. package/dist/Emojis/Pool.js.map +1 -0
  26. package/dist/Emojis/index.d.ts +3 -0
  27. package/dist/Emojis/index.d.ts.map +1 -0
  28. package/dist/Emojis/index.js +9 -0
  29. package/dist/Emojis/index.js.map +1 -0
  30. package/dist/Emojis/types.d.ts +15 -0
  31. package/dist/Emojis/types.d.ts.map +1 -0
  32. package/dist/Emojis/types.js +3 -0
  33. package/dist/Emojis/types.js.map +1 -0
  34. package/dist/I18n/index.d.ts +34 -0
  35. package/dist/I18n/index.d.ts.map +1 -0
  36. package/dist/I18n/index.js +77 -0
  37. package/dist/I18n/index.js.map +1 -0
  38. package/dist/Logger/Color.d.ts +15 -0
  39. package/dist/Logger/Color.d.ts.map +1 -0
  40. package/dist/Logger/Color.js +54 -0
  41. package/dist/Logger/Color.js.map +1 -0
  42. package/dist/Logger/index.d.ts +38 -0
  43. package/dist/Logger/index.d.ts.map +1 -0
  44. package/dist/Logger/index.js +577 -0
  45. package/dist/Logger/index.js.map +1 -0
  46. package/dist/Modules/Bots/index.d.ts +4 -0
  47. package/dist/Modules/Bots/index.d.ts.map +1 -0
  48. package/dist/Modules/Bots/index.js +45 -0
  49. package/dist/Modules/Bots/index.js.map +1 -0
  50. package/dist/Modules/Component/index.d.ts +14 -0
  51. package/dist/Modules/Component/index.d.ts.map +1 -0
  52. package/dist/Modules/Component/index.js +32 -0
  53. package/dist/Modules/Component/index.js.map +1 -0
  54. package/dist/Modules/Config/index.d.ts +5 -0
  55. package/dist/Modules/Config/index.d.ts.map +1 -0
  56. package/dist/Modules/Config/index.js +13 -0
  57. package/dist/Modules/Config/index.js.map +1 -0
  58. package/dist/Modules/Database/index.d.ts +15 -0
  59. package/dist/Modules/Database/index.d.ts.map +1 -0
  60. package/dist/Modules/Database/index.js +22 -0
  61. package/dist/Modules/Database/index.js.map +1 -0
  62. package/dist/Modules/Diagnostics/ModuleDiagnostics.d.ts +18 -0
  63. package/dist/Modules/Diagnostics/ModuleDiagnostics.d.ts.map +1 -0
  64. package/dist/Modules/Diagnostics/ModuleDiagnostics.js +101 -0
  65. package/dist/Modules/Diagnostics/ModuleDiagnostics.js.map +1 -0
  66. package/dist/Modules/Diagnostics/index.d.ts +3 -0
  67. package/dist/Modules/Diagnostics/index.d.ts.map +1 -0
  68. package/dist/Modules/Diagnostics/index.js +7 -0
  69. package/dist/Modules/Diagnostics/index.js.map +1 -0
  70. package/dist/Modules/Logs/index.d.ts +4 -0
  71. package/dist/Modules/Logs/index.d.ts.map +1 -0
  72. package/dist/Modules/Logs/index.js +11 -0
  73. package/dist/Modules/Logs/index.js.map +1 -0
  74. package/dist/Modules/Storage/index.d.ts +3 -0
  75. package/dist/Modules/Storage/index.d.ts.map +1 -0
  76. package/dist/Modules/Storage/index.js +11 -0
  77. package/dist/Modules/Storage/index.js.map +1 -0
  78. package/dist/Modules/index.d.ts +8 -0
  79. package/dist/Modules/index.d.ts.map +1 -0
  80. package/dist/Modules/index.js +45 -0
  81. package/dist/Modules/index.js.map +1 -0
  82. package/dist/Shared/Autocomplete.d.ts +31 -0
  83. package/dist/Shared/Autocomplete.d.ts.map +1 -0
  84. package/dist/Shared/Autocomplete.js +37 -0
  85. package/dist/Shared/Autocomplete.js.map +1 -0
  86. package/dist/Shared/ChannelLoader.d.ts +4 -0
  87. package/dist/Shared/ChannelLoader.d.ts.map +1 -0
  88. package/dist/Shared/ChannelLoader.js +133 -0
  89. package/dist/Shared/ChannelLoader.js.map +1 -0
  90. package/dist/Shared/Client.d.ts +30 -0
  91. package/dist/Shared/Client.d.ts.map +1 -0
  92. package/dist/Shared/Client.js +517 -0
  93. package/dist/Shared/Client.js.map +1 -0
  94. package/dist/Shared/ComponentAutoDeploy.d.ts +3 -0
  95. package/dist/Shared/ComponentAutoDeploy.d.ts.map +1 -0
  96. package/dist/Shared/ComponentAutoDeploy.js +230 -0
  97. package/dist/Shared/ComponentAutoDeploy.js.map +1 -0
  98. package/dist/Shared/ComponentRuntime.d.ts +43 -0
  99. package/dist/Shared/ComponentRuntime.d.ts.map +1 -0
  100. package/dist/Shared/ComponentRuntime.js +393 -0
  101. package/dist/Shared/ComponentRuntime.js.map +1 -0
  102. package/dist/Shared/Config.d.ts +6 -0
  103. package/dist/Shared/Config.d.ts.map +1 -0
  104. package/dist/Shared/Config.js +15 -0
  105. package/dist/Shared/Config.js.map +1 -0
  106. package/dist/Shared/ConfigLoader.d.ts +2 -0
  107. package/dist/Shared/ConfigLoader.d.ts.map +1 -0
  108. package/dist/Shared/ConfigLoader.js +74 -0
  109. package/dist/Shared/ConfigLoader.js.map +1 -0
  110. package/dist/Shared/ConfigProxy.d.ts +2 -0
  111. package/dist/Shared/ConfigProxy.d.ts.map +1 -0
  112. package/dist/Shared/ConfigProxy.js +46 -0
  113. package/dist/Shared/ConfigProxy.js.map +1 -0
  114. package/dist/Shared/ConsoleLog.d.ts +7 -0
  115. package/dist/Shared/ConsoleLog.d.ts.map +1 -0
  116. package/dist/Shared/ConsoleLog.js +23 -0
  117. package/dist/Shared/ConsoleLog.js.map +1 -0
  118. package/dist/Shared/CooldownManager.d.ts +16 -0
  119. package/dist/Shared/CooldownManager.d.ts.map +1 -0
  120. package/dist/Shared/CooldownManager.js +167 -0
  121. package/dist/Shared/CooldownManager.js.map +1 -0
  122. package/dist/Shared/Definer.d.ts +10 -0
  123. package/dist/Shared/Definer.d.ts.map +1 -0
  124. package/dist/Shared/Definer.js +711 -0
  125. package/dist/Shared/Definer.js.map +1 -0
  126. package/dist/Shared/EventBus.d.ts +48 -0
  127. package/dist/Shared/EventBus.d.ts.map +1 -0
  128. package/dist/Shared/EventBus.js +181 -0
  129. package/dist/Shared/EventBus.js.map +1 -0
  130. package/dist/Shared/InteractionContext.d.ts +12 -0
  131. package/dist/Shared/InteractionContext.d.ts.map +1 -0
  132. package/dist/Shared/InteractionContext.js +34 -0
  133. package/dist/Shared/InteractionContext.js.map +1 -0
  134. package/dist/Shared/InteractionManager.d.ts +27 -0
  135. package/dist/Shared/InteractionManager.d.ts.map +1 -0
  136. package/dist/Shared/InteractionManager.js +256 -0
  137. package/dist/Shared/InteractionManager.js.map +1 -0
  138. package/dist/Shared/LocalBotRegistry.d.ts +14 -0
  139. package/dist/Shared/LocalBotRegistry.d.ts.map +1 -0
  140. package/dist/Shared/LocalBotRegistry.js +140 -0
  141. package/dist/Shared/LocalBotRegistry.js.map +1 -0
  142. package/dist/Shared/LogTransport.d.ts +49 -0
  143. package/dist/Shared/LogTransport.d.ts.map +1 -0
  144. package/dist/Shared/LogTransport.js +357 -0
  145. package/dist/Shared/LogTransport.js.map +1 -0
  146. package/dist/Shared/Neutrun.d.ts +55 -0
  147. package/dist/Shared/Neutrun.d.ts.map +1 -0
  148. package/dist/Shared/Neutrun.js +269 -0
  149. package/dist/Shared/Neutrun.js.map +1 -0
  150. package/dist/Shared/Plugin.d.ts +8 -0
  151. package/dist/Shared/Plugin.d.ts.map +1 -0
  152. package/dist/Shared/Plugin.js +3 -0
  153. package/dist/Shared/Plugin.js.map +1 -0
  154. package/dist/Shared/Pool.d.ts +3 -0
  155. package/dist/Shared/Pool.d.ts.map +1 -0
  156. package/dist/Shared/Pool.js +29 -0
  157. package/dist/Shared/Pool.js.map +1 -0
  158. package/dist/Shared/ProcessManager.d.ts +11 -0
  159. package/dist/Shared/ProcessManager.d.ts.map +1 -0
  160. package/dist/Shared/ProcessManager.js +56 -0
  161. package/dist/Shared/ProcessManager.js.map +1 -0
  162. package/dist/Shared/QueueManager.d.ts +9 -0
  163. package/dist/Shared/QueueManager.d.ts.map +1 -0
  164. package/dist/Shared/QueueManager.js +65 -0
  165. package/dist/Shared/QueueManager.js.map +1 -0
  166. package/dist/Shared/RoleLoader.d.ts +4 -0
  167. package/dist/Shared/RoleLoader.d.ts.map +1 -0
  168. package/dist/Shared/RoleLoader.js +138 -0
  169. package/dist/Shared/RoleLoader.js.map +1 -0
  170. package/dist/Shared/Supervisor.d.ts +67 -0
  171. package/dist/Shared/Supervisor.d.ts.map +1 -0
  172. package/dist/Shared/Supervisor.js +308 -0
  173. package/dist/Shared/Supervisor.js.map +1 -0
  174. package/dist/Shared/TelemetryService.d.ts +63 -0
  175. package/dist/Shared/TelemetryService.d.ts.map +1 -0
  176. package/dist/Shared/TelemetryService.js +631 -0
  177. package/dist/Shared/TelemetryService.js.map +1 -0
  178. package/dist/Shared/Utils.d.ts +94 -0
  179. package/dist/Shared/Utils.d.ts.map +1 -0
  180. package/dist/Shared/Utils.js +390 -0
  181. package/dist/Shared/Utils.js.map +1 -0
  182. package/dist/Shared/WebSocket.d.ts +15 -0
  183. package/dist/Shared/WebSocket.d.ts.map +1 -0
  184. package/dist/Shared/WebSocket.js +599 -0
  185. package/dist/Shared/WebSocket.js.map +1 -0
  186. package/dist/Types/Client.Type.d.ts +130 -0
  187. package/dist/Types/Client.Type.d.ts.map +1 -0
  188. package/dist/Types/Client.Type.js +182 -0
  189. package/dist/Types/Client.Type.js.map +1 -0
  190. package/dist/Types/Command.Type.d.ts +28 -0
  191. package/dist/Types/Command.Type.d.ts.map +1 -0
  192. package/dist/Types/Command.Type.js +4 -0
  193. package/dist/Types/Command.Type.js.map +1 -0
  194. package/dist/Types/Definer.Type.d.ts +37 -0
  195. package/dist/Types/Definer.Type.d.ts.map +1 -0
  196. package/dist/Types/Definer.Type.js +4 -0
  197. package/dist/Types/Definer.Type.js.map +1 -0
  198. package/dist/Types/InputInteraction.Type.d.ts +90 -0
  199. package/dist/Types/InputInteraction.Type.d.ts.map +1 -0
  200. package/dist/Types/InputInteraction.Type.js +339 -0
  201. package/dist/Types/InputInteraction.Type.js.map +1 -0
  202. package/dist/Types/Interaction.Type.d.ts +47 -0
  203. package/dist/Types/Interaction.Type.d.ts.map +1 -0
  204. package/dist/Types/Interaction.Type.js +4 -0
  205. package/dist/Types/Interaction.Type.js.map +1 -0
  206. package/dist/Types/Log.Type.d.ts +28 -0
  207. package/dist/Types/Log.Type.d.ts.map +1 -0
  208. package/dist/Types/Log.Type.js +3 -0
  209. package/dist/Types/Log.Type.js.map +1 -0
  210. package/dist/Types/Permission.Type.d.ts +17 -0
  211. package/dist/Types/Permission.Type.d.ts.map +1 -0
  212. package/dist/Types/Permission.Type.js +13 -0
  213. package/dist/Types/Permission.Type.js.map +1 -0
  214. package/dist/Types/PrefixCommandBuilder.Type.d.ts +81 -0
  215. package/dist/Types/PrefixCommandBuilder.Type.d.ts.map +1 -0
  216. package/dist/Types/PrefixCommandBuilder.Type.js +203 -0
  217. package/dist/Types/PrefixCommandBuilder.Type.js.map +1 -0
  218. package/dist/Types/TaskDefiner.Type.d.ts +14 -0
  219. package/dist/Types/TaskDefiner.Type.d.ts.map +1 -0
  220. package/dist/Types/TaskDefiner.Type.js +4 -0
  221. package/dist/Types/TaskDefiner.Type.js.map +1 -0
  222. package/dist/index.d.ts +44 -0
  223. package/dist/index.d.ts.map +1 -0
  224. package/dist/index.js +122 -0
  225. package/dist/index.js.map +1 -0
  226. package/package.json +55 -0
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ConsoleLog_1 = require("./ConsoleLog");
4
+ const InteractionContext_1 = require("./InteractionContext");
5
+ const Active = new Map();
6
+ const ResolveState = (state) => {
7
+ if (!state)
8
+ return undefined;
9
+ return typeof state === 'function' ? state() : state;
10
+ };
11
+ // ────────────────────────────────────────────────────────────────────────────────
12
+ const UpdateMessage = async (component, payload) => {
13
+ if (!component.message)
14
+ return;
15
+ const MessagePayload = {};
16
+ if (payload.content)
17
+ MessagePayload.content = payload.content;
18
+ if (payload.embeds)
19
+ MessagePayload.embeds = payload.embeds;
20
+ if (payload.components)
21
+ MessagePayload.components = payload.components;
22
+ if (payload.files)
23
+ MessagePayload.files = payload.files;
24
+ if (payload.flags)
25
+ MessagePayload.flags = payload.flags;
26
+ try {
27
+ component.message = await component.message.edit(MessagePayload);
28
+ }
29
+ catch (error) {
30
+ (0, ConsoleLog_1.logError)(`Erro ao atualizar mensagem: ${error}`);
31
+ }
32
+ };
33
+ // ────────────────────────────────────────────────────────────────────────────────
34
+ // Instâncias vivem sob a chave BASE do CustomId (`a:b` → `a`): o dispatch
35
+ // resolve cliques pelo prefixo (o sufixo seleciona o State), então registrar
36
+ // sob a chave completa tornaria o componente inencontrável.
37
+ const baseKeyOf = (customId) => customId.split(':', 1)[0];
38
+ const CreateInstance = (definer, options) => {
39
+ let Resolve;
40
+ const PromiseResult = new Promise((resolve) => {
41
+ Resolve = resolve;
42
+ });
43
+ const TimeoutMs = options?.timeout ?? definer.Timeout ?? 300000;
44
+ const guildId = options?.guildId ??
45
+ (0, InteractionContext_1.Get)()?.guildId ??
46
+ (0, InteractionContext_1.Get)()?.guild?.id ??
47
+ undefined;
48
+ const runtimeKey = options?.runtimeKey || 'default';
49
+ const component = {
50
+ instance: null,
51
+ definer,
52
+ resolve: Resolve,
53
+ timeout: null,
54
+ user: options?.user,
55
+ guildId,
56
+ runtimeKey
57
+ };
58
+ component.timeout = setTimeout(() => {
59
+ Resolve(null);
60
+ const timeoutState = ResolveState(definer.States?.timeout);
61
+ if (timeoutState) {
62
+ UpdateMessage(component, timeoutState);
63
+ }
64
+ RemoveActive(component);
65
+ (0, ConsoleLog_1.logWarn)(`Componente "${definer.CustomId}" expirou`);
66
+ }, TimeoutMs);
67
+ component.timeout.unref?.();
68
+ const instance = {
69
+ customId: definer.CustomId,
70
+ reply: async (interaction) => {
71
+ const { content, embeds, components, files, flags } = definer.Default;
72
+ await interaction.reply({
73
+ content,
74
+ embeds,
75
+ components,
76
+ files,
77
+ flags: flags ? Number(flags) : undefined
78
+ });
79
+ component.message = await interaction.fetchReply();
80
+ return PromiseResult;
81
+ },
82
+ wait: () => PromiseResult,
83
+ update: async (payload) => {
84
+ let newPayload;
85
+ if (payload === 'default') {
86
+ newPayload = definer.Default;
87
+ }
88
+ else if (typeof payload === 'string') {
89
+ const state = ResolveState(definer.States?.[payload]);
90
+ if (!state)
91
+ throw new Error(`State "${payload}" not found.`);
92
+ newPayload = state;
93
+ }
94
+ else {
95
+ newPayload = payload;
96
+ }
97
+ await UpdateMessage(component, newPayload);
98
+ },
99
+ Cancel: async () => {
100
+ if (component.timeout)
101
+ clearTimeout(component.timeout);
102
+ Resolve('cancel');
103
+ const cancelState = ResolveState(definer.States?.cancel);
104
+ if (cancelState) {
105
+ await UpdateMessage(component, cancelState);
106
+ }
107
+ RemoveActive(component);
108
+ },
109
+ Accept: async () => {
110
+ if (component.timeout)
111
+ clearTimeout(component.timeout);
112
+ Resolve('accept');
113
+ const successState = ResolveState(definer.States?.success);
114
+ if (successState) {
115
+ await UpdateMessage(component, successState);
116
+ }
117
+ RemoveActive(component);
118
+ },
119
+ Delete: async () => {
120
+ if (component.timeout)
121
+ clearTimeout(component.timeout);
122
+ Resolve(null);
123
+ if (component.message) {
124
+ await component.message.delete().catch(() => { });
125
+ }
126
+ RemoveActive(component);
127
+ }
128
+ };
129
+ component.instance = instance;
130
+ const baseKey = baseKeyOf(definer.CustomId);
131
+ const activeList = Active.get(baseKey) || [];
132
+ activeList.push(component);
133
+ Active.set(baseKey, activeList);
134
+ return instance;
135
+ };
136
+ const RemoveActive = (component) => {
137
+ const list = Active.get(baseKeyOf(component.definer.CustomId));
138
+ if (!list)
139
+ return;
140
+ const index = list.indexOf(component);
141
+ if (index > -1)
142
+ list.splice(index, 1);
143
+ if (list.length === 0)
144
+ Active.delete(baseKeyOf(component.definer.CustomId));
145
+ };
146
+ /** Encerra todas as instâncias ativas (timers e promessas pendentes). */
147
+ const ClearAll = () => {
148
+ for (const list of Array.from(Active.values())) {
149
+ for (const component of list) {
150
+ if (component.timeout)
151
+ clearTimeout(component.timeout);
152
+ try {
153
+ component.resolve(null);
154
+ }
155
+ catch {
156
+ // Resolve de promise pendente nunca deve lançar, mas o shutdown
157
+ // não pode depender disso.
158
+ }
159
+ }
160
+ }
161
+ Active.clear();
162
+ };
163
+ // ────────────────────────────────────────────────────────────────────────────────
164
+ const FindActive = (customId, interaction, runtimeKey = 'default') => {
165
+ const baseId = customId.split(':')[0];
166
+ const list = Active.get(baseId)?.filter((component) => MatchesActive(component, interaction, runtimeKey));
167
+ if (!list || list.length === 0)
168
+ return undefined;
169
+ if (interaction?.message?.id) {
170
+ const byMsg = list.find((c) => c.message?.id === interaction.message.id);
171
+ if (byMsg)
172
+ return byMsg;
173
+ }
174
+ if (interaction?.user?.id) {
175
+ const byUser = list.find((c) => c.user === interaction.user.id);
176
+ if (byUser)
177
+ return byUser;
178
+ }
179
+ return list[list.length - 1];
180
+ };
181
+ // ────────────────────────────────────────────────────────────────────────────────
182
+ const SetMessage = (customId, message, runtimeKey = 'default') => {
183
+ const baseId = customId.split(':')[0];
184
+ const list = Active.get(baseId)?.filter((component) => MatchesActive(component, message, runtimeKey));
185
+ if (list && list.length > 0) {
186
+ list[list.length - 1].message = message;
187
+ }
188
+ };
189
+ // ────────────────────────────────────────────────────────────────────────────────
190
+ const CreateContext = (interaction) => {
191
+ return {
192
+ customId: interaction.customId,
193
+ user: interaction.user,
194
+ member: interaction.member || undefined,
195
+ guild: interaction.guild || undefined,
196
+ channel: interaction.channel || undefined,
197
+ interaction,
198
+ reply: async (options) => await interaction.reply(options),
199
+ update: async (options) => await interaction.update(options),
200
+ deferReply: async () => await interaction.deferReply(),
201
+ followUp: async (options) => await interaction.followUp(options)
202
+ };
203
+ };
204
+ // ────────────────────────────────────────────────────────────────────────────────
205
+ const ResolveActive = async (customId, interaction, runtimeKey = 'default') => {
206
+ const baseId = customId.split(':')[0];
207
+ const list = Active.get(baseId);
208
+ if (!list || list.length === 0)
209
+ return false;
210
+ const candidates = list.filter((component) => MatchesActive(component, interaction, runtimeKey));
211
+ if (candidates.length === 0)
212
+ return false;
213
+ let component = candidates.find((c) => c.message?.id === interaction.message?.id);
214
+ if (!component)
215
+ component = candidates.find((c) => c.user === interaction.user?.id);
216
+ if (!component)
217
+ component = candidates[candidates.length - 1];
218
+ if (!component)
219
+ return false;
220
+ const suffix = customId.split(':').slice(1).join(':') || null;
221
+ const stateName = suffix === 'accept' ? 'success' : suffix;
222
+ if (component.timeout)
223
+ clearTimeout(component.timeout);
224
+ component.resolve(suffix);
225
+ const state = stateName
226
+ ? ResolveState(component.definer.States?.[stateName])
227
+ : undefined;
228
+ if (state) {
229
+ await interaction.update(state).catch(() => { });
230
+ }
231
+ else {
232
+ await interaction.deferUpdate().catch(() => { });
233
+ }
234
+ RemoveActive(component);
235
+ return true;
236
+ };
237
+ const MatchesActive = (component, interaction, runtimeKey) => {
238
+ if (component.runtimeKey !== runtimeKey)
239
+ return false;
240
+ if (component.guildId && component.guildId !== interaction?.guildId)
241
+ return false;
242
+ return true;
243
+ };
244
+ // ────────────────────────────────────────────────────────────────────────────────
245
+ const InteractionManager = {
246
+ Create: CreateInstance,
247
+ FindActive,
248
+ SetMessage,
249
+ CreateContext,
250
+ ResolveActive,
251
+ ClearAll
252
+ };
253
+ // ────────────────────────────────────────────────────────────────────────────────
254
+ exports.default = InteractionManager;
255
+ // ────────────────────────────────────────────────────────────────────────────────
256
+ //# sourceMappingURL=InteractionManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InteractionManager.js","sourceRoot":"","sources":["../../src/Shared/InteractionManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface LocalBotEntry {
2
+ BotId: string;
3
+ Name: string;
4
+ Avatar: string | null;
5
+ Banner?: string | null;
6
+ Path: string;
7
+ LastUpdated: number;
8
+ InstallationId?: string;
9
+ }
10
+ export declare const isValidInstallationId: (value: unknown) => value is string;
11
+ export declare const resolveLocalInstallationId: (botId?: string) => Promise<string | undefined>;
12
+ export declare const ensureLocalInstallationId: (botId: string, environment: "production" | "development") => Promise<string | undefined>;
13
+ export declare const registerLocalBot: (partial: Partial<LocalBotEntry> & Pick<LocalBotEntry, "BotId">) => Promise<void>;
14
+ //# sourceMappingURL=LocalBotRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalBotRegistry.d.ts","sourceRoot":"","sources":["../../src/Shared/LocalBotRegistry.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAQD,eAAO,MAAM,qBAAqB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,MAE/D,CAAA;AAuDD,eAAO,MAAM,0BAA0B,GACrC,QAAQ,MAAM,KACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAS5B,CAAA;AAED,eAAO,MAAM,yBAAyB,GACpC,OAAO,MAAM,EACb,aAAa,YAAY,GAAG,aAAa,KACxC,OAAO,CAAC,MAAM,GAAG,SAAS,CAa5B,CAAA;AAED,eAAO,MAAM,gBAAgB,GAC3B,SAAS,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,KAC7D,OAAO,CAAC,IAAI,CAqCd,CAAA"}
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerLocalBot = exports.ensureLocalInstallationId = exports.resolveLocalInstallationId = exports.isValidInstallationId = void 0;
7
+ const crypto_1 = require("crypto");
8
+ const promises_1 = __importDefault(require("fs/promises"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const MAX_FILE_BYTES = 1024 * 1024;
12
+ const MAX_ENTRIES = 200;
13
+ const MAX_TEXT_LENGTH = 2048;
14
+ const INSTALLATION_ID_PATTERN = /^[0-9a-f-]{36}$/i;
15
+ const directory = path_1.default.join(process.env.APPDATA || os_1.default.homedir(), '@ninenitystudio', 'desktop');
16
+ const filePath = path_1.default.join(directory, 'local_bots.json');
17
+ const trimText = (value, fallback, max = MAX_TEXT_LENGTH) => {
18
+ if (typeof value !== 'string')
19
+ return fallback;
20
+ const normalized = value.trim();
21
+ return normalized ? normalized.slice(0, max) : fallback;
22
+ };
23
+ const isValidInstallationId = (value) => {
24
+ return typeof value === 'string' && INSTALLATION_ID_PATTERN.test(value.trim());
25
+ };
26
+ exports.isValidInstallationId = isValidInstallationId;
27
+ const readEntries = async () => {
28
+ try {
29
+ const stats = await promises_1.default.stat(filePath);
30
+ if (!stats.isFile() || stats.size > MAX_FILE_BYTES)
31
+ return [];
32
+ const raw = await promises_1.default.readFile(filePath, 'utf8');
33
+ const parsed = JSON.parse(raw);
34
+ if (!Array.isArray(parsed))
35
+ return [];
36
+ return parsed
37
+ .filter((entry) => {
38
+ return !!entry && typeof entry === 'object' && !Array.isArray(entry);
39
+ })
40
+ .map((entry) => ({
41
+ BotId: trimText(entry.BotId, '', 100),
42
+ Name: trimText(entry.Name, 'Ninenity Bot'),
43
+ Avatar: typeof entry.Avatar === 'string' && entry.Avatar.trim()
44
+ ? entry.Avatar.trim().slice(0, MAX_TEXT_LENGTH)
45
+ : null,
46
+ Banner: typeof entry.Banner === 'string' && entry.Banner.trim()
47
+ ? entry.Banner.trim().slice(0, MAX_TEXT_LENGTH)
48
+ : null,
49
+ Path: trimText(entry.Path, process.cwd(), MAX_TEXT_LENGTH),
50
+ LastUpdated: typeof entry.LastUpdated === 'number' && Number.isFinite(entry.LastUpdated)
51
+ ? entry.LastUpdated
52
+ : 0,
53
+ ...((0, exports.isValidInstallationId)(entry.InstallationId)
54
+ ? { InstallationId: entry.InstallationId.trim() }
55
+ : {})
56
+ }))
57
+ .filter((entry) => entry.BotId)
58
+ .slice(0, MAX_ENTRIES);
59
+ }
60
+ catch {
61
+ return [];
62
+ }
63
+ };
64
+ let writeChain = Promise.resolve();
65
+ const writeEntries = async (entries) => {
66
+ await promises_1.default.mkdir(directory, { recursive: true });
67
+ const temporaryPath = `${filePath}.${process.pid}.${Date.now()}.tmp`;
68
+ try {
69
+ await promises_1.default.writeFile(temporaryPath, JSON.stringify(entries.slice(0, MAX_ENTRIES), null, 2), 'utf8');
70
+ await promises_1.default.rename(temporaryPath, filePath);
71
+ }
72
+ finally {
73
+ await promises_1.default.unlink(temporaryPath).catch(() => { });
74
+ }
75
+ };
76
+ const resolveLocalInstallationId = async (botId) => {
77
+ const fromEnvironment = process.env.TEFUTAKI_HUB_INSTALLATION_ID?.trim();
78
+ if ((0, exports.isValidInstallationId)(fromEnvironment))
79
+ return fromEnvironment;
80
+ if (!botId)
81
+ return undefined;
82
+ const entry = (await readEntries()).find((candidate) => candidate.BotId === botId);
83
+ return (0, exports.isValidInstallationId)(entry?.InstallationId)
84
+ ? entry.InstallationId
85
+ : undefined;
86
+ };
87
+ exports.resolveLocalInstallationId = resolveLocalInstallationId;
88
+ const ensureLocalInstallationId = async (botId, environment) => {
89
+ if (environment === 'production')
90
+ return undefined;
91
+ const configured = await (0, exports.resolveLocalInstallationId)(botId);
92
+ if (configured)
93
+ return configured;
94
+ const generated = (0, crypto_1.randomUUID)();
95
+ try {
96
+ await (0, exports.registerLocalBot)({ BotId: botId, InstallationId: generated });
97
+ }
98
+ catch {
99
+ // A falha de filesystem não pode impedir o handshake do bot.
100
+ }
101
+ return generated;
102
+ };
103
+ exports.ensureLocalInstallationId = ensureLocalInstallationId;
104
+ const registerLocalBot = async (partial) => {
105
+ const botId = trimText(partial.BotId, '', 100);
106
+ if (!botId)
107
+ return;
108
+ writeChain = writeChain
109
+ .catch(() => { })
110
+ .then(async () => {
111
+ const entries = await readEntries();
112
+ const index = entries.findIndex((entry) => entry.BotId === botId);
113
+ const current = index >= 0 ? entries[index] : undefined;
114
+ const next = {
115
+ BotId: botId,
116
+ Name: trimText(partial.Name, current?.Name || 'Ninenity Bot'),
117
+ Avatar: typeof partial.Avatar === 'string' && partial.Avatar.trim()
118
+ ? partial.Avatar.trim().slice(0, MAX_TEXT_LENGTH)
119
+ : current?.Avatar || null,
120
+ Banner: typeof partial.Banner === 'string' && partial.Banner.trim()
121
+ ? partial.Banner.trim().slice(0, MAX_TEXT_LENGTH)
122
+ : current?.Banner || null,
123
+ Path: trimText(partial.Path, current?.Path || process.cwd()),
124
+ LastUpdated: Date.now(),
125
+ ...((0, exports.isValidInstallationId)(partial.InstallationId)
126
+ ? { InstallationId: partial.InstallationId.trim() }
127
+ : (0, exports.isValidInstallationId)(current?.InstallationId)
128
+ ? { InstallationId: current.InstallationId }
129
+ : {})
130
+ };
131
+ if (index >= 0)
132
+ entries[index] = next;
133
+ else
134
+ entries.push(next);
135
+ await writeEntries(entries);
136
+ });
137
+ await writeChain;
138
+ };
139
+ exports.registerLocalBot = registerLocalBot;
140
+ //# sourceMappingURL=LocalBotRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalBotRegistry.js","sourceRoot":"","sources":["../../src/Shared/LocalBotRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ interface LogTransportOptions {
2
+ send: (type: string, data: unknown) => boolean;
3
+ isConnected: () => boolean;
4
+ onConnectionChange: (handler: (connected: boolean) => void) => () => void;
5
+ getBotId: () => string;
6
+ getEnvironment: () => 'production' | 'development';
7
+ }
8
+ /**
9
+ * Transporte privado de logs do bot.
10
+ *
11
+ * O Logger permanece síncrono; este transporte apenas enfileira eventos e
12
+ * envia lotes pequenos pelo socket já
13
+ * autenticado. Assim, um pico de logs não abre conexões extras nem bloqueia o
14
+ * loop principal do bot.
15
+ */
16
+ export declare class LogTransport {
17
+ private readonly options;
18
+ private readonly spoolPath;
19
+ private readonly spoolTempPath;
20
+ private readonly unsubscribeLogger;
21
+ private readonly unsubscribeConnection;
22
+ private queue;
23
+ private sessionId;
24
+ private nextSeq;
25
+ private dropped;
26
+ private flushTimer;
27
+ private persistTimer;
28
+ private flushPromise;
29
+ private spoolLoadPromise;
30
+ private spoolLoaded;
31
+ private stopped;
32
+ constructor(options: LogTransportOptions);
33
+ getPendingCount(): number;
34
+ flush(): Promise<void>;
35
+ stop(): void;
36
+ private enqueue;
37
+ private flushInternal;
38
+ private takeBatch;
39
+ private scheduleFlush;
40
+ private schedulePersist;
41
+ private clearFlushTimer;
42
+ private clearPersistTimer;
43
+ private loadSpool;
44
+ private persistSpool;
45
+ private removeSpool;
46
+ private safeBotId;
47
+ }
48
+ export default LogTransport;
49
+ //# sourceMappingURL=LogTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LogTransport.d.ts","sourceRoot":"","sources":["../../src/Shared/LogTransport.ts"],"names":[],"mappings":"AAeA,UAAU,mBAAmB;IAC3B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;IAC9C,WAAW,EAAE,MAAM,OAAO,CAAA;IAC1B,kBAAkB,EAAE,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;IACzE,QAAQ,EAAE,MAAM,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,YAAY,GAAG,aAAa,CAAA;CACnD;AAgGD;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAY;IAClD,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,OAAO,CAAQ;gBAEJ,OAAO,EAAE,mBAAmB;IAmBxC,eAAe,IAAI,MAAM;IAInB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,IAAI,IAAI,IAAI;IASnB,OAAO,CAAC,OAAO;YAoBD,aAAa;IA0C3B,OAAO,CAAC,SAAS;IA2BjB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,iBAAiB;YAMX,SAAS;YA4CT,YAAY;YA8BZ,WAAW;IAQzB,OAAO,CAAC,SAAS;CAOlB;AAED,eAAe,YAAY,CAAA"}