fnlb 0.0.3 → 0.0.5

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
@@ -72,18 +72,34 @@ await fnlb.start({
72
72
 
73
73
  ## Stop your bot
74
74
 
75
- The FNLB.start() method returns a Subprocess array with every shard. You can iterate it and kill the shards.
75
+ The FNLB.stop() method will kill all the shards.
76
76
 
77
77
  ```ts
78
78
  import FNLB from 'fnlb';
79
79
 
80
80
  const fnlb = new FNLB();
81
81
 
82
- const shards = await fnlb.start({
82
+ await fnlb.start({
83
83
  apiToken: 'abc',
84
84
  numberOfShards: 2,
85
85
  botsPerShard: 10
86
86
  });
87
87
 
88
- shards.forEach((shard) => shard.kill())
88
+ // do something
89
+
90
+ await fnlb.stop()
91
+ ```
92
+
93
+ ## Set a cluster name
94
+
95
+ You can use the clusterName option to set your cluster name.
96
+
97
+ ```ts
98
+ import FNLB from 'fnlb';
99
+
100
+ const fnlb = new FNLB({ clusterName: 'MyCluster' });
101
+
102
+ await fnlb.start({
103
+ apiToken: 'abc'
104
+ });
89
105
  ```
package/dist/index.d.ts CHANGED
@@ -1,11 +1,25 @@
1
1
  // Generated by dts-bundle-generator v9.5.1
2
2
 
3
+ declare enum LogsMessageFormat {
4
+ Neutral = 0,
5
+ Success = 1,
6
+ Info = 2,
7
+ Warn = 3,
8
+ Error = 4
9
+ }
10
+ export interface LogsMessage {
11
+ timestamp: number;
12
+ content: string;
13
+ format: LogsMessageFormat;
14
+ }
3
15
  export interface FNLBConfig {
16
+ clusterName?: string;
17
+ onLogMessage?: (message: LogsMessage) => any;
18
+ onSubProcessLogMessage?: (message: LogsMessage) => any;
4
19
  disableLogs?: boolean;
5
20
  disableErrorLogs?: boolean;
6
21
  disableSubProcessLogs?: boolean;
7
22
  disableSubProcessErrorLogs?: boolean;
8
- clusterName?: string;
9
23
  }
10
24
  export interface StartConfig {
11
25
  apiToken: string;
@@ -19,13 +33,16 @@ export interface StartConfig {
19
33
  declare class FNLB {
20
34
  private isLoaded;
21
35
  private readonly config?;
36
+ private readonly activeProcesses;
37
+ private shouldRestart;
22
38
  constructor(config?: FNLBConfig);
23
39
  private log;
24
40
  private success;
25
41
  private warn;
26
42
  private error;
27
43
  update(): Promise<void>;
28
- start(config: StartConfig): Promise<Promise<import("child_process").ChildProcess>[]>;
44
+ start(config: StartConfig): Promise<void>;
45
+ stop(): Promise<void>;
29
46
  startShard(config: StartConfig, id: string): Promise<import("child_process").ChildProcess>;
30
47
  }
31
48
 
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{fork as g}from"node:child_process";import{createHash as c}from"node:crypto";import{readFile as p,writeFile as u}from"node:fs/promises";import f from"node:path";class n{static wait(t){return new Promise((s)=>setTimeout(s,t))}}class a{isLoaded=!1;config;constructor(t){this.config=t}log(...t){if(!this.config?.disableLogs)console.log("[FNLB ShardingManager]",...t)}success(...t){if(!this.config?.disableLogs)console.log("[FNLB ShardingManager] [OK]",...t)}warn(...t){if(!this.config?.disableErrorLogs)console.warn("[FNLB ShardingManager] [WRN]",...t)}error(...t){if(!this.config?.disableErrorLogs)console.error("[FNLB ShardingManager] [ERR]",...t)}async update(){if(this.isLoaded)return;let t=f.join("zenith.js"),s=await p(t,"utf-8").catch(()=>null);this.log(s?"Checking for updates...":"Downloading FNLB...");let e=await fetch("https://dist.fnlb.net/packages/zenith/release");if(!e.ok)throw new Error(`[FNLB ShardingManager] Failed to check for updates, status code: ${e.status}`);let r=await e.json();if(s){let d=c("sha256");if(d.update(s),d.digest().toString("hex")===r.hash){this.success(`FNLB v${r.version} is up to date`),this.isLoaded=!0,this.success(`Finished loading FNLB v${r.version}`);return}this.log(`Downloading update for FNLB v${r.version}`)}let h=r.url,i=await fetch(h);if(!i.ok)throw new Error(`[FNLB ShardingManager] Failed to download update, status code: ${i.status}`);this.log(`Downloaded FNLB v${r.version}`);let l=await i.text();await u(t,l),this.isLoaded=!0,this.success(`Finished loading FNLB v${r.version}`)}async start(t){if(!t?.apiToken)throw new Error("[FNLB ShardingManager] Please provide a FNLB API token.");await this.update();let s=t.numberOfShards??1,o=[];for(let e=0;e<s;e++){let r=new Date;o.push(this.startShard(t,`${e.toString().padStart(2,"0")}/${r.getDay()}${r.getHours()}${r.getMinutes()}${r.getSeconds()}`))}return o}async startShard(t,s){if(await this.update(),!t?.apiToken)throw new Error("[FNLB ShardingManager] Please provide a FNLB API token.");this.log("Starting shard with id:",s);let o=g("zenith.js",[],{env:{...process.env,FORCE_COLOR:"1",SHARD_ID:s,API_TOKEN:t.apiToken,CATEGORIES:t.categories?.join(","),BOTS_PER_SHARD:(t.botsPerShard??1).toString(),HIDE_USERNAMES:t.hideUsernames?"true":"false",HIDE_EMAILS:t.hideEmails?"true":"false",LOG_LEVEL:t.logLevel,CLUSTER_ID:this.config?.clusterName?.trim().replace(/ +(?= )/g,"").toLowerCase().replaceAll(" ","-")??"unknown",CLUSTER_NAME:this.config?.clusterName?.trim()}});if(!this.config?.disableSubProcessLogs)o.stdout?.on("data",(e)=>{process.stdout.write(e.toString("utf8"))});if(!this.config?.disableSubProcessErrorLogs)o.stderr?.on("data",(e)=>{process.stderr.write(e.toString("utf8"))});return o.on("close",async(e)=>{if(e===0)this.warn("Child process exited with code:",e?.toString()??"none");else this.error("Child process exited with code:",e?.toString()??"none");this.log("Trying to restart process..."),await n.wait(1e4),this.startShard(t,s)}),o}}var R=a;export{R as default};
1
+ import{fork as d}from"node:child_process";import{createHash as p}from"node:crypto";import{readFile as g,writeFile as f}from"node:fs/promises";import u from"node:path";class c{static wait(t){return new Promise((s)=>setTimeout(s,t))}}class i{isLoaded=!1;config;activeProcesses=new Map;shouldRestart=!0;constructor(t){this.config=t}log(...t){if(!this.config?.disableLogs)console.log("[FNLB ShardingManager]",...t);this.config?.onLogMessage?.({timestamp:Date.now(),content:t.join(" "),format:0})}success(...t){if(!this.config?.disableLogs)console.log("[FNLB ShardingManager] [OK]",...t);this.config?.onLogMessage?.({timestamp:Date.now(),content:t.join(" "),format:1})}warn(...t){if(!this.config?.disableErrorLogs)console.warn("[FNLB ShardingManager] [WRN]",...t);this.config?.onLogMessage?.({timestamp:Date.now(),content:t.join(" "),format:3})}error(...t){if(!this.config?.disableErrorLogs)console.error("[FNLB ShardingManager] [ERR]",...t);this.config?.onLogMessage?.({timestamp:Date.now(),content:t.join(" "),format:4})}async update(){if(this.isLoaded)return;let t=u.join("zenith.js"),s=await g(t,"utf-8").catch(()=>null);this.log(s?"Checking for updates...":"Downloading FNLB...");let o=await fetch("https://dist.fnlb.net/packages/zenith/release");if(!o.ok)throw new Error(`[FNLB ShardingManager] Failed to check for updates, status code: ${o.status}`);let e=await o.json();if(s){let h=p("sha256");if(h.update(s),h.digest().toString("hex")===e.hash){this.success(`FNLB v${e.version} is up to date`),this.isLoaded=!0,this.success(`Finished loading FNLB v${e.version}`);return}this.log(`Downloading update for FNLB v${e.version}`)}let a=e.url,n=await fetch(a);if(!n.ok)throw new Error(`[FNLB ShardingManager] Failed to download update, status code: ${n.status}`);this.log(`Downloaded FNLB v${e.version}`);let l=await n.text();await f(t,l),this.isLoaded=!0,this.success(`Finished loading FNLB v${e.version}`)}async start(t){if(await this.stop(),this.shouldRestart=!0,!t?.apiToken)throw new Error("[FNLB ShardingManager] Please provide a FNLB API token.");await this.update();let s=t.numberOfShards??1;for(let r=0;r<s;r++){let o=new Date,e=`${r.toString().padStart(2,"0")}/${o.getDay()}${o.getHours()}${o.getMinutes()}${o.getSeconds()}`,a=await this.startShard(t,e);this.activeProcesses.set(e,a)}}async stop(){this.log("Stopping all active processes..."),this.shouldRestart=!1;for(let[t,s]of this.activeProcesses)this.log(`Stopping process with id: ${t}`),s.kill();this.activeProcesses.clear(),this.log("All processes stopped.")}async startShard(t,s){if(await this.update(),!t?.apiToken)throw new Error("[FNLB ShardingManager] Please provide a FNLB API token.");this.log("Starting shard with id:",s);let r=d("zenith.js",[],{env:{...process.env,FORCE_COLOR:"1",SHARD_ID:s,API_TOKEN:t.apiToken,CATEGORIES:t.categories?.join(","),BOTS_PER_SHARD:(t.botsPerShard??1).toString(),HIDE_USERNAMES:t.hideUsernames?"true":"false",HIDE_EMAILS:t.hideEmails?"true":"false",LOG_LEVEL:t.logLevel,CLUSTER_ID:this.config?.clusterName?.trim().replace(/ +(?= )/g,"").toLowerCase().replaceAll(" ","-")??"unknown",CLUSTER_NAME:this.config?.clusterName?.trim()}});if(!this.config?.disableSubProcessLogs)r.stdout?.on("data",(o)=>{let e=o.toString("utf8");process.stdout.write(e),this.config?.onLogMessage?.({timestamp:Date.now(),content:e,format:0})});if(!this.config?.disableSubProcessErrorLogs)r.stderr?.on("data",(o)=>{let e=o.toString("utf8");process.stderr.write(e),this.config?.onLogMessage?.({timestamp:Date.now(),content:e,format:4})});return r.on("close",async(o)=>{if(this.activeProcesses.delete(s),this.shouldRestart){if(o===0)this.warn("Child process exited with code:",o?.toString()??"none");else this.error("Child process exited with code:",o?.toString()??"none");await c.wait(1e4);let e=await this.startShard(t,s);this.activeProcesses.set(s,e)}else this.log(`Child process ${s} stopped.`)}),r}}var D=i;export{D as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fnlb",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "author": "FNLB-Project",
5
5
  "main": "dist/index.js",
6
6
  "devDependencies": {