@bananacool467/authtics-host 0.2.4 → 0.2.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
@@ -1,6 +1,6 @@
1
1
  # Authtics Host
2
2
 
3
- Version 0.2.4, License: MIT
3
+ Version 0.2.5, License: MIT
4
4
 
5
5
  Authtics Host is a web framework inspired by Next.js. Authtics Host supports SSR (Server-Side Rendering) and uses esbuild. This is not to be confused with auth platforms.
6
6
 
@@ -228,6 +228,8 @@ export function Component() {
228
228
 
229
229
  The developer might also redesign the UI for the DevPanel using [UI Tools](https://npmjs.com/package/@bananakitssu/ui-tools).
230
230
 
231
+ And also maybe, add Developer Panel customization.
232
+
231
233
  > **Warning**:
232
234
  > Asking AI about HostJS is not recommended, it will give an Auth platform and call HostJS/Authtics Host a typo, say it doesn't exist, say it was renamed, it is private, or the account doesn't exist. Or if it knows, it may swap your server script with regular **Node.js**/**ExpressJS**/**Next.js** or use **Next.js-like** code because this framework is **Next.js-inspired**
233
235
 
package/dist/cli.js CHANGED
@@ -143,9 +143,9 @@ export default class App {
143
143
  this.startServer();
144
144
  this.post('/__authtics_host_apis__/set-users-paused', async (req, res) => {
145
145
  let datMatched = false;
146
- if (config_.dat && config_.dat == req.cookies.dat)
146
+ if (config_.dat && config_.dat == req.dat)
147
147
  datMatched = true;
148
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
148
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
149
149
  datMatched = true;
150
150
  if (datMatched) {
151
151
  usersPaused = req.body.paused;
@@ -157,9 +157,9 @@ export default class App {
157
157
  });
158
158
  this.post('/__authtics_host_apis__/is-users-paused', async (req, res) => {
159
159
  let datMatched = false;
160
- if (config_.dat && config_.dat == req.cookies.dat)
160
+ if (config_.dat && config_.dat == req.dat)
161
161
  datMatched = true;
162
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
162
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
163
163
  datMatched = true;
164
164
  res.writeHead(200, { "Content-Type": "application/json" });
165
165
  if (datMatched) {
@@ -172,11 +172,11 @@ export default class App {
172
172
  this.post('/__authtics_host_apis__/get-dat-restriction-missing', async (req, res) => {
173
173
  let datMatched = false;
174
174
  let datRestrictedEnv = false;
175
- if (config_.dat && config_.dat == req.cookies.dat)
175
+ if (config_.dat && config_.dat == req.dat)
176
176
  datMatched = true;
177
177
  if (config_.dat == undefined)
178
178
  datMatched = true;
179
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
179
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
180
180
  datMatched = true;
181
181
  if (datMatched) {
182
182
  if (config_.dat !== undefined)
@@ -189,11 +189,11 @@ export default class App {
189
189
  });
190
190
  this.post('/__authtics_host_apis__/get-dat-matching', async (req, res) => {
191
191
  let datMatched = false;
192
- if (config_.dat && config_.dat == req.cookies.dat)
192
+ if (config_.dat && config_.dat == req.dat)
193
193
  datMatched = true;
194
194
  if (config_.dat == undefined)
195
195
  datMatched = true;
196
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
196
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
197
197
  datMatched = true;
198
198
  res.writeHead(200, { "Content-Type": "application/json" });
199
199
  res.end(JSON.stringify({
@@ -202,9 +202,9 @@ export default class App {
202
202
  });
203
203
  this.post('/__authtics_host_apis__/get-cpu_memory', async (req, res) => {
204
204
  let datMatched = false;
205
- if (config_.dat && config_.dat == req.cookies.dat)
205
+ if (config_.dat && config_.dat == req.dat)
206
206
  datMatched = true;
207
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
207
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
208
208
  datMatched = true;
209
209
  if (datMatched) {
210
210
  const { heapUsed, heapTotal, rss } = process.memoryUsage();
@@ -212,15 +212,16 @@ export default class App {
212
212
  res.writeHead(200, { "Content-Type": "application/json" });
213
213
  res.end(JSON.stringify({
214
214
  cpuUsage,
215
- heapUsed
215
+ heapUsed,
216
+ heapTotal
216
217
  }));
217
218
  }
218
219
  });
219
220
  this.post('/__authtics_host_apis__/get-user-settings', async (req, res) => {
220
221
  let datMatched = false;
221
- if (config_.dat && config_.dat == req.cookies.dat)
222
+ if (config_.dat && config_.dat == req.dat)
222
223
  datMatched = true;
223
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
224
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
224
225
  datMatched = true;
225
226
  if (datMatched) {
226
227
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -231,9 +232,9 @@ export default class App {
231
232
  });
232
233
  this.post("/__authtics_host_apis__/get-server-info", async (req, res) => {
233
234
  let datMatched = false;
234
- if (config_.dat && config_.dat == req.cookies.dat)
235
+ if (config_.dat && config_.dat == req.dat)
235
236
  datMatched = true;
236
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
237
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
237
238
  datMatched = true;
238
239
  if (datMatched) {
239
240
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -244,9 +245,9 @@ export default class App {
244
245
  });
245
246
  this.post("/__authtics_host_apis__/restart", async (req, res) => {
246
247
  let datMatched = false;
247
- if (config_.dat && config_.dat == req.cookies.dat)
248
+ if (config_.dat && config_.dat == req.dat)
248
249
  datMatched = true;
249
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
250
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
250
251
  datMatched = true;
251
252
  if (datMatched) {
252
253
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -257,14 +258,16 @@ export default class App {
257
258
  stdio: 'inherit'
258
259
  });
259
260
  child.unref();
260
- process.kill(process.pid, 'SIGTERM');
261
+ this.server.close(() => {
262
+ process.kill(process.pid, 'SIGTERM');
263
+ });
261
264
  }
262
265
  });
263
266
  this.post("/__authtics_host_apis__/shutdown", async (req, res) => {
264
267
  let datMatched = false;
265
- if (config_.dat && config_.dat == req.cookies.dat)
268
+ if (config_.dat && config_.dat == req.dat)
266
269
  datMatched = true;
267
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
270
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
268
271
  datMatched = true;
269
272
  if (datMatched) {
270
273
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -276,9 +279,9 @@ export default class App {
276
279
  });
277
280
  this.post("/__authtics_host_apis__/get-is-ssr", async (req, res) => {
278
281
  let datMatched = false;
279
- if (config_.dat && config_.dat == req.cookies.dat)
282
+ if (config_.dat && config_.dat == req.dat)
280
283
  datMatched = true;
281
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
284
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
282
285
  datMatched = true;
283
286
  if (datMatched) {
284
287
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -289,9 +292,9 @@ export default class App {
289
292
  });
290
293
  this.post("/__authtics_host_apis__/get-compiler", async (req, res) => {
291
294
  let datMatched = false;
292
- if (config_.dat && config_.dat == req.cookies.dat)
295
+ if (config_.dat && config_.dat == req.dat)
293
296
  datMatched = true;
294
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
297
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
295
298
  datMatched = true;
296
299
  if (datMatched) {
297
300
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -302,9 +305,9 @@ export default class App {
302
305
  });
303
306
  this.post("/__authtics_host_apis__/get-host-ver", async (req, res) => {
304
307
  let datMatched = false;
305
- if (config_.dat && config_.dat == req.cookies.dat)
308
+ if (config_.dat && config_.dat == req.dat)
306
309
  datMatched = true;
307
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
310
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
308
311
  datMatched = true;
309
312
  if (datMatched) {
310
313
  const packageJsonPath = path.join(__dirname, '../package.json');
@@ -320,9 +323,9 @@ export default class App {
320
323
  });
321
324
  this.post("/__authtics_host_apis__/get-file-by-pathname", async (req, res) => {
322
325
  let datMatched = false;
323
- if (config_.dat && config_.dat == req.cookies.dat)
326
+ if (config_.dat && config_.dat == req.dat)
324
327
  datMatched = true;
325
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
328
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
326
329
  datMatched = true;
327
330
  if (datMatched) {
328
331
  const pathname = req.body.pathname;
@@ -357,9 +360,9 @@ export default class App {
357
360
  });
358
361
  this.post("/__authtics_host_apis__/ping", async (req, res) => {
359
362
  let datMatched = false;
360
- if (config_.dat && config_.dat == req.cookies.dat)
363
+ if (config_.dat && config_.dat == req.dat)
361
364
  datMatched = true;
362
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
365
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
363
366
  datMatched = true;
364
367
  if (datMatched) {
365
368
  res.setHeader("Content-Type", "application/json");
@@ -368,9 +371,9 @@ export default class App {
368
371
  });
369
372
  this.post('/__authtics_host_apis__/get-connection', async (req, res) => {
370
373
  let datMatched = false;
371
- if (config_.dat && config_.dat == req.cookies.dat)
374
+ if (config_.dat && config_.dat == req.dat)
372
375
  datMatched = true;
373
- if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.cookies.dat))
376
+ if (config_.dat && Array.isArray(config_.dat) && config_.dat.includes(req.dat))
374
377
  datMatched = true;
375
378
  if (datMatched) {
376
379
  res.writeHead(200, { "Content-Type": "application/json" });
@@ -552,7 +555,7 @@ async function start() {
552
555
  }
553
556
  const routeKey = `${method}:${pathname}`;
554
557
  if (routes.has(routeKey)) {
555
- if (Array.isArray(config_.dat) && !config_.dat.includes(req.cookies.dat) && usersPaused && !routeKey.endsWith('.js')) {
558
+ if (Array.isArray(config_.dat) && !config_.dat.includes(req.dat) && usersPaused && !routeKey.endsWith('.js')) {
556
559
  if (autoPaging) {
557
560
  const pausedTsxFile = pagesDir ? path.join(pagesDir, "_paused.tsx") : undefined;
558
561
  if (fs.existsSync(pausedTsxFile || "")) {
@@ -562,7 +565,7 @@ async function start() {
562
565
  res.setHeader("Content-Type", "application/javascript");
563
566
  res.end(f);
564
567
  });
565
- }, (p) => { routes.delete(`GET:${p}`); }, req.cookies.dat, config_.dat);
568
+ }, (p) => { routes.delete(`GET:${p}`); }, req.dat, config_.dat);
566
569
  html = html.replace("<script>", "<script>\nwindow.__paused__ = true;");
567
570
  res.setHeader("Content-Type", "text/html");
568
571
  return res.end(html);
@@ -605,7 +608,7 @@ async function start() {
605
608
  message: "unhandled request"
606
609
  }));
607
610
  }
608
- if (config_.dat !== req.cookies.dat && usersPaused && !routeKey.endsWith('.js')) {
611
+ if (config_.dat !== req.dat && usersPaused && !routeKey.endsWith('.js') && !Array.isArray(config_.dat)) {
609
612
  if (autoPaging) {
610
613
  const pausedTsxFile = pagesDir ? path.join(pagesDir, "_paused.tsx") : undefined;
611
614
  if (fs.existsSync(pausedTsxFile || "")) {
@@ -679,7 +682,7 @@ async function start() {
679
682
  req.on('close', () => { hmrClients.delete(res); users--; });
680
683
  return;
681
684
  }
682
- if (Array.isArray(config_.dat) && !config_.dat.includes(req.cookies.dat) && usersPaused) {
685
+ if (Array.isArray(config_.dat) && !config_.dat.includes(req.dat) && usersPaused) {
683
686
  if (autoPaging) {
684
687
  const pausedTsxFile = pagesDir ? path.join(pagesDir, "_paused.tsx") : undefined;
685
688
  if (fs.existsSync(pausedTsxFile || "")) {
@@ -732,7 +735,7 @@ async function start() {
732
735
  message: "unhandled request"
733
736
  }));
734
737
  }
735
- if (config.dat !== req.cookies.dat && usersPaused) {
738
+ if (config.dat !== req.dat && usersPaused && !Array.isArray(config_.dat)) {
736
739
  if (autoPaging) {
737
740
  const pausedTsxFile = pagesDir ? path.join(pagesDir, "_paused.tsx") : undefined;
738
741
  if (fs.existsSync(pausedTsxFile || "")) {
package/dist/devPanel.js CHANGED
@@ -367,6 +367,7 @@ export default function DevPanel() {
367
367
  const datRestrictionMissingRef = useRef(true);
368
368
  const cpuUsage = useRef(0);
369
369
  const heapUsage = useRef(0);
370
+ const heapTotal = useRef(0);
370
371
  const [datMatch, setDatMatch] = useState(false);
371
372
  const [compilerType, setCompilerType] = useState("?");
372
373
  const [httpVersion, setHttpVersion] = useState("v?.?");
@@ -384,6 +385,7 @@ export default function DevPanel() {
384
385
  const consoleScrollRef = useRef(null);
385
386
  const [isAtBottom, setIsAtBottom] = useState(true);
386
387
  const [datRestrictionMissing, setDatRestrictionMissing] = useState(true);
388
+ const [heapResult, setHeapResult] = useState("0 Bytes / 0 Bytes");
387
389
  const cookie = {
388
390
  set: (k, v) => document.cookie = `${k}=${v}; path=/`,
389
391
  get: (k) => Object.fromEntries(document.cookie.split(";")
@@ -484,6 +486,7 @@ export default function DevPanel() {
484
486
  const data = await resp.json();
485
487
  cpuUsage.current = data.cpuUsage;
486
488
  heapUsage.current = data.heapUsed;
489
+ heapTotal.current = data.heapTotal;
487
490
  }
488
491
  };
489
492
  const getHostVersion = async () => {
@@ -630,19 +633,31 @@ export default function DevPanel() {
630
633
  }, 1000);
631
634
  return () => clearInterval(interval);
632
635
  }, []);
636
+ const formatBytes = (b, d = 2, r = false) => {
637
+ if (b === 0)
638
+ return r ? 'Bytes' : '0 Bytes';
639
+ const k = 1024;
640
+ const dm = d < 0 ? 0 : d;
641
+ const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];
642
+ const i = Math.floor(Math.log(b) / Math.log(k));
643
+ return r ? sizes[i] : parseFloat((b / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
644
+ };
633
645
  useEffect(() => {
634
646
  const interval = setInterval(() => {
635
647
  const s = pendingSent.current;
636
648
  const r = pendingReceived.current;
637
649
  const c = cpuUsage.current;
638
- const h = heapUsage.current;
650
+ const h = formatBytes(heapUsage.current);
651
+ const t = ` ${formatBytes(heapUsage.current, 0, true)} / ` + formatBytes(heapTotal.current);
652
+ setHeapResult(t);
653
+ const h_num = Number(h.split(" ")[0]);
639
654
  const f = frames.current;
640
655
  pendingSent.current = 0;
641
656
  pendingReceived.current = 0;
642
657
  cpuUsage.current = 0;
643
658
  heapUsage.current = 0;
644
659
  setCpuUsageHistory(prev => [...prev.slice(-(MAX_POINTS - 1)), c]);
645
- setHeapUsageHistory(prev => [...prev.slice(-(MAX_POINTS - 1)), h]);
660
+ setHeapUsageHistory(prev => [...prev.slice(-(MAX_POINTS - 1)), h_num]);
646
661
  setSentHistory(prev => [...prev.slice(-(MAX_POINTS - 1)), s]);
647
662
  setReceivedHistory(prev => [...prev.slice(-(MAX_POINTS - 1)), r]);
648
663
  setFpsHistory(prev => [...prev.slice(-(MAX_POINTS - 1)), f]);
@@ -1154,7 +1169,7 @@ export default function DevPanel() {
1154
1169
  border: '1px solid #eee',
1155
1170
  fontSize: '12px',
1156
1171
  color: '#333',
1157
- }, children: [_jsx("span", { style: { fontSize: '12px', color: '#333' }, children: "Total current users" }), _jsx("span", { style: { fontSize: '12px', color: 'blue' }, children: users })] }), _jsx(Sparkline, { data: cpuUsageHistory, color: "#3b82f6", label: "CPU Usage", unit: "" }), _jsx(Sparkline, { data: heapUsageHistory, color: "#3b82f6", label: "Heap Used", unit: "" })] })] })) : !shutdown ? (_jsxs(_Fragment, { children: [_jsxs("div", { style: { padding: '8px', gap: '4px', display: 'flex', flexDirection: 'column' }, children: [_jsxs(PanelButton, { onClick: () => setConsoleOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Terminal, { size: 12, color: "#16a34a" }), " Console"] }), logs.length > 0 && (_jsx("span", { style: { color: '#111', borderRadius: '100px', padding: '1px 6px', fontSize: '10px' }, children: logs.length }))] }), _jsxs(PanelButton, { onClick: () => setRouteOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Route, { size: 12, color: "#3b82f6" }), " Route"] }), _jsxs("span", { style: { color: '#111', borderRadius: '100px', padding: '1px 6px', fontSize: '10px', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '4px' }, children: [datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" }), pathName] })] }), _jsxs(PanelButton, { onClick: () => setWebpageInfoOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Globe, { size: 12, color: "#3b82f6" }), " Webpage Info"] }), datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" })] }), _jsx(PanelButton, { onClick: () => setNetworkOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: _jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Wifi, { size: 12, color: "#3b82f6" }), " Network"] }) }), _jsxs(PanelButton, { onClick: () => setClientInfoOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Info, { size: 12, color: "#3b82f6" }), " Client Info"] }), datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" })] }), _jsxs(PanelButton, { onClick: () => setAboutHostOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(ShieldCheck, { size: 12, color: "#f472b6" }), " About HostJS"] }), datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" })] }), _jsxs(PanelButton, { onClick: () => setServerInfoOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Server, { size: 12, color: "#f472b6" }), " Server Info"] }), datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" })] })] }), _jsxs("div", { style: {
1172
+ }, children: [_jsx("span", { style: { fontSize: '12px', color: '#333' }, children: "Total current users" }), _jsx("span", { style: { fontSize: '12px', color: 'blue' }, children: users })] }), _jsx(Sparkline, { data: cpuUsageHistory, color: "#3b82f6", label: "CPU Usage", unit: "" }), _jsx(Sparkline, { data: heapUsageHistory, color: "#3b82f6", label: "Heap Used", unit: heapResult })] })] })) : !shutdown ? (_jsxs(_Fragment, { children: [_jsxs("div", { style: { padding: '8px', gap: '4px', display: 'flex', flexDirection: 'column' }, children: [_jsxs(PanelButton, { onClick: () => setConsoleOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Terminal, { size: 12, color: "#16a34a" }), " Console"] }), logs.length > 0 && (_jsx("span", { style: { color: '#111', borderRadius: '100px', padding: '1px 6px', fontSize: '10px' }, children: logs.length }))] }), _jsxs(PanelButton, { onClick: () => setRouteOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Route, { size: 12, color: "#3b82f6" }), " Route"] }), _jsxs("span", { style: { color: '#111', borderRadius: '100px', padding: '1px 6px', fontSize: '10px', display: 'flex', alignItems: 'center', justifyContent: 'center', gap: '4px' }, children: [datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" }), pathName] })] }), _jsxs(PanelButton, { onClick: () => setWebpageInfoOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Globe, { size: 12, color: "#3b82f6" }), " Webpage Info"] }), datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" })] }), _jsx(PanelButton, { onClick: () => setNetworkOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: _jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Wifi, { size: 12, color: "#3b82f6" }), " Network"] }) }), _jsxs(PanelButton, { onClick: () => setClientInfoOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Info, { size: 12, color: "#3b82f6" }), " Client Info"] }), datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" })] }), _jsxs(PanelButton, { onClick: () => setAboutHostOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(ShieldCheck, { size: 12, color: "#f472b6" }), " About HostJS"] }), datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" })] }), _jsxs(PanelButton, { onClick: () => setServerInfoOpen(true), fullWidth: true, style: { color: '#333', justifyContent: 'space-between', height: '32px' }, children: [_jsxs("span", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx(Server, { size: 12, color: "#f472b6" }), " Server Info"] }), datRestrictionMissing && _jsx(TriangleAlert, { size: 12, color: "orange" })] })] }), _jsxs("div", { style: {
1158
1173
  padding: '6px 8px',
1159
1174
  borderTop: '1px solid #ddd',
1160
1175
  background: '#fff',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bananacool467/authtics-host",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "Authtics Host, A Next.js-inspired SSR framework for Node.js with TypeScript and JSX support.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",