library.dr-conversion 0.1.1 → 0.1.3

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/README.md CHANGED
@@ -1,17 +1,19 @@
1
- # Library@DR-conversion
1
+ # Library@DR-Conversion
2
2
 
3
3
  > Unified interface for building multi-platform chat bots
4
4
 
5
- [![npm version](https://badge.fury.io/js/Library.DR-Conversion.svg)](https://www.npmjs.com/package/Library.DR-Conversion)
5
+ [![npm version](https://badge.fury.io/js/library.dr-conversion.svg)](https://www.npmjs.com/package/library.dr-conversion)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
 
8
- **Library.DR-Conversion** (v0.1.0) is a TypeScript library that provides a unified, platform-agnostic interface for building chat bots that work across multiple platforms like Discord, Root, and potentially others. Write your bot logic once, and deploy it anywhere!
8
+ **Library.DR-Conversion** (v0.1.3) is a TypeScript library that provides a unified, platform-agnostic interface for building chat bots that work across multiple platforms like Discord, Root, and potentially others. Write your bot logic once, and deploy it anywhere!
9
9
 
10
10
  ## ✨ Features
11
11
 
12
12
  - 🌉 **Unified Interface**: Single API that works across all supported platforms
13
13
  - 🔒 **Type-Safe**: Full TypeScript support with strict typing
14
14
  - 🎯 **Platform-Agnostic**: Write platform-independent bot code
15
+ - 🔄 **Bidirectional Conversion**: Convert bots between platforms (Discord ↔ Root) with the same codebase
16
+ - 🛡️ **Production-Ready**: Auto-detects production environments and adjusts logging for security
15
17
  - 🔌 **Extensible**: Easy to add new platform providers
16
18
  - 🎨 **Rich Content**: Support for embeds, buttons, reactions, and more
17
19
  - ⚡ **Modern**: Built with async/await and ES2020+
@@ -30,13 +32,13 @@
30
32
  ### Installation
31
33
 
32
34
  ```bash
33
- npm install Library.DR-Conversion
35
+ npm install library.dr-conversion
34
36
  ```
35
37
 
36
38
  ### Basic Usage
37
39
 
38
40
  ```typescript
39
- import { UnifiedClient } from 'Library.DR-Conversion';
41
+ import { UnifiedClient } from 'library.dr-conversion';
40
42
 
41
43
  // Create a client (works with any platform!)
42
44
  const client = new UnifiedClient({
@@ -57,9 +59,9 @@ client.on('message', async (message) => {
57
59
  await client.connect();
58
60
  ```
59
61
 
60
- ### Switching Platforms
62
+ ### Switching Platforms (Bidirectional Conversion)
61
63
 
62
- The beauty of Library.DR-Conversion is that switching platforms is as simple as changing one line:
64
+ The beauty of Library.DR-Conversion is that you can convert your bot between platforms **in both directions** - just change one line! Your bot logic remains the same whether you're moving from Discord to Root, Root to Discord, or to any other supported platform.
63
65
 
64
66
  ```typescript
65
67
  // Discord bot
@@ -68,13 +70,292 @@ const client = new UnifiedClient({
68
70
  config: { token: process.env.DISCORD_TOKEN }
69
71
  });
70
72
 
71
- // Root bot (same code!)
73
+ // Same bot on Root - just change the platform!
72
74
  const client = new UnifiedClient({
73
75
  platform: 'root',
74
76
  config: { token: process.env.ROOT_TOKEN }
75
77
  });
76
78
  ```
77
79
 
80
+ **No code rewriting needed!** All your message handlers, commands, and bot logic work on both platforms:
81
+
82
+ ```typescript
83
+ // This code works on Discord, Root, or any supported platform
84
+ client.on('message', async (message) => {
85
+ if (message.content === '!hello') {
86
+ await message.reply('Hello from any platform!');
87
+ }
88
+
89
+ if (message.content === '!info') {
90
+ await client.sendMessage(message.channel.id, {
91
+ embeds: [{
92
+ title: 'Bot Info',
93
+ description: `Running on ${client.platformName}`,
94
+ color: '#00ff00'
95
+ }]
96
+ });
97
+ }
98
+ });
99
+ ```
100
+
101
+ ### 🔄 Multi-Instance Usage (Root Communities)
102
+
103
+ **Important for Root developers:** Root's architecture spins up separate server-side instances for each community. The library mirrors this design - each `UnifiedClient` connects to **one Root community**.
104
+
105
+ To manage multiple Root communities, create multiple client instances:
106
+
107
+ ```typescript
108
+ // Bot connected to multiple Root communities
109
+ const community1Bot = new UnifiedClient({
110
+ platform: 'root',
111
+ config: {
112
+ token: process.env.ROOT_TOKEN,
113
+ communityId: 'community-1-id'
114
+ }
115
+ });
116
+
117
+ const community2Bot = new UnifiedClient({
118
+ platform: 'root',
119
+ config: {
120
+ token: process.env.ROOT_TOKEN,
121
+ communityId: 'community-2-id'
122
+ }
123
+ });
124
+
125
+ // Each instance operates independently
126
+ community1Bot.on('message', (msg) => {
127
+ console.log('Message from Community 1');
128
+ });
129
+
130
+ community2Bot.on('message', (msg) => {
131
+ console.log('Message from Community 2');
132
+ });
133
+
134
+ await community1Bot.connect();
135
+ await community2Bot.connect();
136
+ ```
137
+
138
+ This pattern also works for running the same bot across **different platforms simultaneously**:
139
+
140
+ ```typescript
141
+ const discordBot = new UnifiedClient({ platform: 'discord', config: { token: DISCORD_TOKEN } });
142
+ const rootBot = new UnifiedClient({ platform: 'root', config: { token: ROOT_TOKEN } });
143
+
144
+ // Same message handler shared across both platforms
145
+ const handleMessage = async (message) => {
146
+ if (message.content === '!ping') {
147
+ await message.reply('Pong!');
148
+ }
149
+ };
150
+
151
+ discordBot.on('message', handleMessage);
152
+ rootBot.on('message', handleMessage);
153
+
154
+ await discordBot.connect();
155
+ await rootBot.connect();
156
+ ```
157
+
158
+ ### ⚠️ Deployment Considerations for Root Apps
159
+
160
+ **Important:** When deploying an app to Root's infrastructure, Root clones your server-side code and runs one instance per community. Be mindful of which platforms your code connects to:
161
+
162
+ ```typescript
163
+ // ❌ DON'T: This would start BOTH Root and Discord bots when installed to Root
164
+ const rootBot = new UnifiedClient({ platform: 'root', config: { token: ROOT_TOKEN } });
165
+ const discordBot = new UnifiedClient({ platform: 'discord', config: { token: DISCORD_TOKEN } });
166
+ await rootBot.connect();
167
+ await discordBot.connect(); // Discord bot spins up for every Root community!
168
+ ```
169
+
170
+ #### Built-in Safety: Environment Variable Control 🛡️
171
+
172
+ **Two ways to control bot startup:**
173
+
174
+ **1. Explicit Disable** (works always, no config needed):
175
+ ```bash
176
+ ALLOW_DISCORD_BOT=false # Blocks Discord bot startup
177
+ ALLOW_ROOT_BOT=false # Blocks Root bot startup
178
+ ```
179
+
180
+ **2. Require Explicit Enable** with `preventAutoStart: true`:
181
+
182
+ ```typescript
183
+ // Requires explicit permission to start
184
+ const discordBot = new UnifiedClient({
185
+ platform: 'discord',
186
+ config: {
187
+ token: DISCORD_TOKEN,
188
+ preventAutoStart: true // Requires ALLOW_DISCORD_BOT=true
189
+ }
190
+ });
191
+
192
+ const rootBot = new UnifiedClient({
193
+ platform: 'root',
194
+ config: {
195
+ token: ROOT_TOKEN,
196
+ preventAutoStart: true // Requires ALLOW_ROOT_BOT=true
197
+ }
198
+ });
199
+
200
+ // Only bots with their ALLOW_{PLATFORM}_BOT=true will start
201
+ await discordBot.connect(); // Blocked unless ALLOW_DISCORD_BOT=true
202
+ await rootBot.connect(); // Blocked unless ALLOW_ROOT_BOT=true
203
+ ```
204
+
205
+ **How it works:**
206
+ - `ALLOW_*_BOT=false` → ❌ **Always blocks** (even without `preventAutoStart`)
207
+ - `ALLOW_*_BOT=true` → ✅ **Always allows**
208
+ - `preventAutoStart: true` + env var not set → ❌ **Blocked** (requires explicit `=true`)
209
+ - `preventAutoStart: false` (or not set) + env var not set → ✅ **Allowed** (default behavior)
210
+
211
+ **Use case examples:**
212
+
213
+ **Scenario 1 (Simple):** Deploy to **Root**, disable Discord bot with env var only:
214
+
215
+ ```typescript
216
+ // bot.ts - No preventAutoStart needed!
217
+ const discordBot = new UnifiedClient({
218
+ platform: 'discord',
219
+ config: { token: process.env.DISCORD_TOKEN }
220
+ });
221
+
222
+ const rootBot = new UnifiedClient({
223
+ platform: 'root',
224
+ config: { token: process.env.ROOT_TOKEN }
225
+ });
226
+
227
+ await discordBot.connect(); // Checks ALLOW_DISCORD_BOT
228
+ await rootBot.connect(); // Checks ALLOW_ROOT_BOT
229
+ ```
230
+
231
+ ```bash
232
+ # .env file for Root deployment
233
+ ALLOW_DISCORD_BOT=false # ❌ Discord bot blocked
234
+ ROOT_TOKEN=your-root-token
235
+ DISCORD_TOKEN=your-discord-token
236
+ ```
237
+
238
+ **Scenario 2 (Secure):** Use `preventAutoStart` to require explicit opt-in:
239
+
240
+ ```typescript
241
+ // Requires explicit permission
242
+ const discordBot = new UnifiedClient({
243
+ platform: 'discord',
244
+ config: {
245
+ token: process.env.DISCORD_TOKEN,
246
+ preventAutoStart: true // Requires ALLOW_DISCORD_BOT=true
247
+ }
248
+ });
249
+
250
+ const rootBot = new UnifiedClient({
251
+ platform: 'root',
252
+ config: {
253
+ token: process.env.ROOT_TOKEN,
254
+ preventAutoStart: true // Requires ALLOW_ROOT_BOT=true
255
+ }
256
+ });
257
+
258
+ await discordBot.connect();
259
+ await rootBot.connect();
260
+ ```
261
+
262
+ ```bash
263
+ # Root deployment - must explicitly enable
264
+ ALLOW_ROOT_BOT=true # ✅ Root bot will start
265
+ # ALLOW_DISCORD_BOT not set # ❌ Discord bot blocked (preventAutoStart requires =true)
266
+ ROOT_TOKEN=your-root-token
267
+ DISCORD_TOKEN=your-discord-token
268
+ ```
269
+
270
+ **Scenario 3:** Standalone Discord bot server:
271
+
272
+ ```bash
273
+ # Option A: Explicit disable
274
+ ALLOW_DISCORD_BOT=true # ✅ Discord bot will start
275
+ ALLOW_ROOT_BOT=false # ❌ Root bot explicitly blocked
276
+ DISCORD_TOKEN=your-discord-token
277
+ ROOT_TOKEN=your-root-token
278
+
279
+ # Option B: Just don't set it (if using preventAutoStart)
280
+ ALLOW_DISCORD_BOT=true # ✅ Discord bot will start
281
+ # ALLOW_ROOT_BOT not set # ❌ Root bot blocked (if preventAutoStart=true)
282
+ DISCORD_TOKEN=your-discord-token
283
+ ```
284
+
285
+ **Result:** Control bot startup purely via environment variables - no code changes needed!
286
+
287
+ #### Alternative: Environment Variable Control
288
+
289
+ **Best practice:** Use environment variables to conditionally activate platforms:
290
+
291
+ ```typescript
292
+ // ✅ Control which platforms to activate
293
+ if (process.env.PLATFORM === 'root') {
294
+ const bot = new UnifiedClient({ platform: 'root', config: { token: process.env.ROOT_TOKEN } });
295
+ await bot.connect();
296
+ } else if (process.env.PLATFORM === 'discord') {
297
+ const bot = new UnifiedClient({ platform: 'discord', config: { token: process.env.DISCORD_TOKEN } });
298
+ await bot.connect();
299
+ }
300
+ ```
301
+
302
+ Or use a hybrid approach for **intentional** cross-platform bots:
303
+
304
+ ```typescript
305
+ // ✅ Explicitly bridge Root and Discord with safety guards
306
+ const platforms = process.env.PLATFORMS?.split(',') || ['root'];
307
+
308
+ for (const platform of platforms) {
309
+ const bot = new UnifiedClient({
310
+ platform,
311
+ config: {
312
+ token: process.env[`${platform.toUpperCase()}_TOKEN`],
313
+ preventAutoStart: true // Requires ALLOW_{PLATFORM}_BOT=true
314
+ }
315
+ });
316
+ await bot.connect();
317
+ }
318
+ // Set PLATFORMS='root' and ALLOW_ROOT_BOT=true for Root-only
319
+ // Set PLATFORMS='root,discord', ALLOW_ROOT_BOT=true, ALLOW_DISCORD_BOT=true for cross-platform
320
+ ```
321
+
322
+ **Rule of thumb:** Use `preventAutoStart: true` to prevent accidental multi-platform startup when deploying to Root.
323
+
324
+ ### 🔇 Production Logging
325
+
326
+ **Automatic:** The library detects production environments and automatically reduces logging verbosity to `WARN` level (only warnings and errors).
327
+
328
+ Production is detected when `NODE_ENV` is set to `production` or `prod`:
329
+
330
+ ```bash
331
+ # Production deployment - automatic WARN level logging
332
+ NODE_ENV=production
333
+ ALLOW_ROOT_BOT=true
334
+ ROOT_TOKEN=your-token
335
+ ```
336
+
337
+ **Manual control:** Override the automatic detection by setting `logLevel` explicitly:
338
+
339
+ ```typescript
340
+ import { UnifiedClient, LogLevel } from 'library.dr-conversion';
341
+
342
+ // Force specific log level regardless of environment
343
+ const client = new UnifiedClient({
344
+ platform: 'discord',
345
+ config: { token: process.env.DISCORD_TOKEN },
346
+ logLevel: LogLevel.ERROR // Only log errors
347
+ });
348
+ ```
349
+
350
+ **Available log levels:**
351
+ - `LogLevel.DEBUG` - All messages (verbose)
352
+ - `LogLevel.INFO` - Info, warnings, and errors (default in development)
353
+ - `LogLevel.WARN` - Warnings and errors only (default in production)
354
+ - `LogLevel.ERROR` - Errors only
355
+ - `LogLevel.NONE` - No logging
356
+
357
+ **Security note:** Debug and Info logs may contain sensitive information (tokens, user IDs, message content). Production mode automatically prevents this by limiting logs to warnings and errors. This is especially important for Discord bots to comply with Discord's data privacy guidelines.
358
+
78
359
  ## 📖 Documentation
79
360
 
80
361
  ### Creating Rich Messages
@@ -249,7 +530,7 @@ Library.DR-Conversion/
249
530
  ### Custom Logging
250
531
 
251
532
  ```typescript
252
- import { UnifiedClient, LogLevel } from 'Library.DR-Conversion';
533
+ import { UnifiedClient, LogLevel } from 'library.dr-conversion';
253
534
 
254
535
  const client = new UnifiedClient({
255
536
  platform: 'discord',
@@ -266,7 +547,7 @@ client.setLogLevel(LogLevel.INFO);
266
547
  While the goal is platform-agnostic code, sometimes you need platform-specific features:
267
548
 
268
549
  ```typescript
269
- import { DiscordProvider } from 'Library.DR-Conversion';
550
+ import { DiscordProvider } from 'library.dr-conversion';
270
551
 
271
552
  const client = new UnifiedClient({
272
553
  platform: 'discord',
@@ -292,7 +573,7 @@ import {
292
573
  UnsupportedPlatformError,
293
574
  AuthenticationError,
294
575
  ResourceNotFoundError
295
- } from 'Library@DR-Conversion';
576
+ } from 'library.dr-conversion';
296
577
 
297
578
  client.on('message', async (message) => {
298
579
  try {
package/dist/client.d.ts CHANGED
@@ -11,11 +11,14 @@ export interface UnifiedClientConfig {
11
11
  export declare class UnifiedClient extends EventEmitter {
12
12
  private provider;
13
13
  private logger;
14
+ private platform;
15
+ private config;
14
16
  constructor(options: UnifiedClientConfig);
15
17
  private createProvider;
16
18
  private setupEventForwarding;
17
19
  connect(): Promise<void>;
18
20
  disconnect(): Promise<void>;
21
+ private checkStartupPermission;
19
22
  get isConnected(): boolean;
20
23
  sendMessage(channelId: string, options: string | MessageOptions): Promise<Message>;
21
24
  editMessage(messageId: string, channelId: string, content: string): Promise<Message>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAqB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK7D,MAAM,WAAW,mBAAmB;IAElC,QAAQ,EAAE,YAAY,CAAC;IAGvB,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC;IAGnC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAuBD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE,mBAAmB;IAqBxC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,oBAAoB;IAkCtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,IAAI,WAAW,IAAI,OAAO,CAEzB;IA0BK,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAWlF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASpF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAS/C,IAAI,YAAY,IAAI,MAAM,CAEzB;IAKD,IAAI,eAAe,IAAI,MAAM,CAE5B;IAMD,WAAW,IAAI,gBAAgB;IAQ/B,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;CAGnC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,OAAO,EACP,IAAI,EACJ,OAAO,EACP,KAAK,EACL,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAqB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK7D,MAAM,WAAW,mBAAmB;IAElC,QAAQ,EAAE,YAAY,CAAC;IAGvB,MAAM,EAAE,aAAa,GAAG,UAAU,CAAC;IAGnC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAuBD,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,MAAM,CAA6B;gBAE/B,OAAO,EAAE,mBAAmB;IAuBxC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,oBAAoB;IAkCtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAYxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IASjC,OAAO,CAAC,sBAAsB;IA8B9B,IAAI,WAAW,IAAI,OAAO,CAEzB;IA0BK,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC;IAWlF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IASpF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS/C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAS/C,IAAI,YAAY,IAAI,MAAM,CAEzB;IAKD,IAAI,eAAe,IAAI,MAAM,CAE5B;IAMD,WAAW,IAAI,gBAAgB;IAQ/B,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;CAGnC"}
package/dist/client.js CHANGED
@@ -9,6 +9,8 @@ const logger_1 = require("./utils/logger");
9
9
  class UnifiedClient extends events_1.EventEmitter {
10
10
  constructor(options) {
11
11
  super();
12
+ this.platform = options.platform;
13
+ this.config = options.config;
12
14
  this.logger = (0, logger_1.getLogger)();
13
15
  if (options.logLevel !== undefined) {
14
16
  this.logger.setLevel(options.logLevel);
@@ -54,6 +56,7 @@ class UnifiedClient extends events_1.EventEmitter {
54
56
  });
55
57
  }
56
58
  async connect() {
59
+ this.checkStartupPermission();
57
60
  this.logger.info('Connecting to platform...');
58
61
  await this.provider.connect();
59
62
  }
@@ -61,6 +64,27 @@ class UnifiedClient extends events_1.EventEmitter {
61
64
  this.logger.info('Disconnecting from platform...');
62
65
  await this.provider.disconnect();
63
66
  }
67
+ checkStartupPermission() {
68
+ const platformUpper = this.platform.toUpperCase();
69
+ const envVar = `ALLOW_${platformUpper}_BOT`;
70
+ const envValue = process.env[envVar];
71
+ const isExplicitlyDisabled = envValue === 'false';
72
+ const isExplicitlyEnabled = envValue === 'true';
73
+ if (isExplicitlyDisabled) {
74
+ const errorMsg = `${this.platform} bot startup blocked by ${envVar}=false`;
75
+ this.logger.error(errorMsg);
76
+ throw new Error(errorMsg);
77
+ }
78
+ const preventAutoStart = this.config.preventAutoStart;
79
+ if (preventAutoStart === true) {
80
+ if (!isExplicitlyEnabled) {
81
+ const errorMsg = `${this.platform} bot startup blocked. Set ${envVar}=true to allow startup, or remove preventAutoStart config.`;
82
+ this.logger.error(errorMsg);
83
+ throw new Error(errorMsg);
84
+ }
85
+ this.logger.info(`${this.platform} bot startup permitted via ${envVar}`);
86
+ }
87
+ }
64
88
  get isConnected() {
65
89
  return this.provider.isConnected;
66
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":";;;AAKA,mCAAsC;AAUtC,2DAA+D;AAE/D,wDAAyD;AAEzD,2CAA0D;AAC1D,2CAA6D;AAqC7D,MAAa,aAAc,SAAQ,qBAAY;IAI7C,YAAY,OAA4B;QACtC,KAAK,EAAE,CAAC;QAGR,IAAI,CAAC,MAAM,GAAG,IAAA,kBAAS,GAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QAGD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAGtE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2CAA2C,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClF,CAAC;IAKO,cAAc,CAAC,QAAsB,EAAE,MAAkC;QAC/E,QAAQ,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/B,KAAK,SAAS;gBACZ,OAAO,IAAI,0BAAe,CAAC,MAAuB,CAAC,CAAC;YAEtD,KAAK,MAAM;gBACT,OAAO,IAAI,uBAAY,CAAC,MAAoB,CAAC,CAAC;YAEhD;gBACE,MAAM,IAAI,iCAAwB,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAKO,oBAAoB;QAC1B,MAAM,MAAM,GAAG;YACb,OAAO;YACP,SAAS;YACT,eAAe;YACf,eAAe;YACf,aAAa;YACb,YAAY;YACZ,eAAe;YACf,eAAe;YACf,eAAe;YACf,aAAa;YACb,aAAa;YACb,aAAa;YACb,gBAAgB;YAChB,mBAAmB;YACnB,mBAAmB;YACnB,OAAO;YACP,OAAO;SACR,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACrB,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE;gBAC7C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAQD,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC9C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAMD,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC;IAKD,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACnC,CAAC;IA0BD,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,OAAgC;QACnE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IASD,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAe;QACrE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC;IAOD,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,SAAiB;QACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC3D,CAAC;IASD,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IAOD,KAAK,CAAC,UAAU,CAAC,SAAiB;QAChC,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAOD,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAOD,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;IACpC,CAAC;IAKD,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IACvC,CAAC;IAMD,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAMD,WAAW,CAAC,KAAe;QACzB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF;AA5MD,sCA4MC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,7 @@ export interface PlatformProvider extends EventEmitter {
20
20
  }
21
21
  export interface PlatformConfig {
22
22
  token: string;
23
+ preventAutoStart?: boolean;
23
24
  [key: string]: unknown;
24
25
  }
25
26
  export type PlatformType = 'discord' | 'root';
@@ -1 +1 @@
1
- {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IAIpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAQ5B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IASnF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAOrF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAOnE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAOvC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAOhD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAO1C,cAAc,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC;IAOlD,WAAW,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAOzC,cAAc,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC;IAOlD,YAAY,CAAC,aAAa,EAAE,OAAO,GAAG,KAAK,CAAC;IAK5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAK9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAKjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAKD,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,MAAM,CAAC;IAGd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAKD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAK9C,MAAM,WAAW,oBAAoB;IAEnC,MAAM,EAAE,OAAO,CAAC;IAGhB,OAAO,EAAE,OAAO,CAAC;IAGjB,WAAW,EAAE,OAAO,CAAC;IAGrB,SAAS,EAAE,OAAO,CAAC;IAGnB,WAAW,EAAE,OAAO,CAAC;IAGrB,OAAO,EAAE,OAAO,CAAC;IAGjB,KAAK,EAAE,OAAO,CAAC;IAGf,aAAa,EAAE,OAAO,CAAC;IAGvB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,mBAAmB,EAAE,MAAM,CAAC;IAG5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B"}
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../src/types/platform.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAK1C,MAAM,WAAW,gBAAiB,SAAQ,YAAY;IAIpD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAKzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAQ5B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IASnF,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAOrF,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAOnE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAOvC,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAOhD,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAO1C,cAAc,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC;IAOlD,WAAW,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;IAOzC,cAAc,CAAC,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC;IAOlD,YAAY,CAAC,aAAa,EAAE,OAAO,GAAG,KAAK,CAAC;IAK5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAK9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAKjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAKD,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,MAAM,CAAC;IAQd,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAKD,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,CAAC;AAK9C,MAAM,WAAW,oBAAoB;IAEnC,MAAM,EAAE,OAAO,CAAC;IAGhB,OAAO,EAAE,OAAO,CAAC;IAGjB,WAAW,EAAE,OAAO,CAAC;IAGrB,SAAS,EAAE,OAAO,CAAC;IAGnB,WAAW,EAAE,OAAO,CAAC;IAGrB,OAAO,EAAE,OAAO,CAAC;IAGjB,KAAK,EAAE,OAAO,CAAC;IAGf,aAAa,EAAE,OAAO,CAAC;IAGvB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,mBAAmB,EAAE,MAAM,CAAC;IAG5B,iBAAiB,EAAE,MAAM,CAAC;CAC3B"}
@@ -10,8 +10,10 @@ export declare class Logger {
10
10
  private level;
11
11
  private prefix;
12
12
  private constructor();
13
+ private detectProductionEnvironment;
13
14
  static getInstance(): Logger;
14
15
  setLevel(level: LogLevel): void;
16
+ isProduction(): boolean;
15
17
  getLevel(): LogLevel;
16
18
  setPrefix(prefix: string): void;
17
19
  debug(message: string, ...args: unknown[]): void;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;CACT;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,MAAM,CAAkC;IAEhD,OAAO;IAKP,MAAM,CAAC,WAAW,IAAI,MAAM;IAW5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAO/B,QAAQ,IAAI,QAAQ;IAQpB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS/B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAWhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAW/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAW/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAUhD,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAMnC;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;CACT;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAS;IAChC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,MAAM,CAAkC;IAEhD,OAAO;IASP,OAAO,CAAC,2BAA2B;IAcnC,MAAM,CAAC,WAAW,IAAI,MAAM;IAW5B,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAO/B,YAAY,IAAI,OAAO;IAQvB,QAAQ,IAAI,QAAQ;IAQpB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAS/B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAWhD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAW/C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAW/C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAUhD,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;CAMnC;AAKD,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
@@ -14,6 +14,15 @@ class Logger {
14
14
  constructor() {
15
15
  this.level = LogLevel.INFO;
16
16
  this.prefix = '[ChatPlatformBridge]';
17
+ this.detectProductionEnvironment();
18
+ }
19
+ detectProductionEnvironment() {
20
+ const nodeEnv = process.env['NODE_ENV']?.toLowerCase();
21
+ const isProduction = nodeEnv === 'production' || nodeEnv === 'prod';
22
+ if (isProduction) {
23
+ this.level = LogLevel.WARN;
24
+ console.log(`${this.prefix} [INFO] Production environment detected - logging set to WARN level`);
25
+ }
17
26
  }
18
27
  static getInstance() {
19
28
  if (!Logger.instance) {
@@ -24,6 +33,10 @@ class Logger {
24
33
  setLevel(level) {
25
34
  this.level = level;
26
35
  }
36
+ isProduction() {
37
+ const nodeEnv = process.env['NODE_ENV']?.toLowerCase();
38
+ return nodeEnv === 'production' || nodeEnv === 'prod';
39
+ }
27
40
  getLevel() {
28
41
  return this.level;
29
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;AA+GA,8BAEC;AA7GD,IAAY,QAMX;AAND,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;IACT,uCAAQ,CAAA;AACV,CAAC,EANW,QAAQ,wBAAR,QAAQ,QAMnB;AAED,MAAa,MAAM;IAKjB;QAHQ,UAAK,GAAa,QAAQ,CAAC,IAAI,CAAC;QAChC,WAAM,GAAW,sBAAsB,CAAC;IAEzB,CAAC;IAKxB,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAMD,QAAQ,CAAC,KAAe;QACtB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAKD,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAMD,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAOD,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAOD,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAOD,IAAI,CAAC,OAAe,EAAE,GAAG,IAAe;QACtC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAOD,KAAK,CAAC,OAAe,EAAE,GAAG,IAAe;QACvC,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAMD,KAAK,CAAC,WAAmB;QACvB,MAAM,KAAK,GAAG,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA9FD,wBA8FC;AAKD,SAAgB,SAAS;IACvB,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "library.dr-conversion",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Unified interface for building multi-platform chat bots (Discord, Root, and more)",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",