From 59bd3fae75468d4bd8d1463467f704e41bed3c8b Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Fri, 2 Jan 2026 11:52:58 +0700 Subject: [PATCH 1/6] Create package.json --- package.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..ea69169 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "pi-door-unified", + "version": "1.0.0", + "type": "module", + "scripts": { + "start": "node dist/server.js", + "build": "tsc" + }, + "dependencies": { + "express": "^4.18.2", + "ws": "^8.16.0", + "node-fetch": "^3.3.2" + } +} From b6ad270fbb362b56fed38279e1b83ca5f54bc6c9 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Fri, 2 Jan 2026 11:53:36 +0700 Subject: [PATCH 2/6] Create types.ts --- src/types.ts | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/types.ts diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..9cbf8ac --- /dev/null +++ b/src/types.ts @@ -0,0 +1,5 @@ +export interface LedgerEvent { + ledger: number + txCount: number + closeTime: number +} From 1205297443f3b7b5295f9bebf076e41b9db0f456 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Fri, 2 Jan 2026 11:54:10 +0700 Subject: [PATCH 3/6] Create monitor.ts --- src/src/monitor.ts | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/src/monitor.ts diff --git a/src/src/monitor.ts b/src/src/monitor.ts new file mode 100644 index 0000000..ea640f1 --- /dev/null +++ b/src/src/monitor.ts @@ -0,0 +1,29 @@ +import fetch from 'node-fetch' +import { LedgerEvent } from './types.js' + +const HORIZON = 'https://api.mainnet.minepi.com' + +export function startMonitor( + onUpdate: (e: LedgerEvent) => void +) { + let last = 0 + + setInterval(async () => { + try { + const r = await fetch(`${HORIZON}/ledgers?order=desc&limit=1`) + const j = await r.json() + const l = j._embedded.records[0] + + if (l.sequence !== last) { + last = l.sequence + onUpdate({ + ledger: l.sequence, + txCount: l.transaction_count, + closeTime: Date.parse(l.closed_at) + }) + } + } catch (e) { + console.error('monitor error', e) + } + }, 3000) +} From 4ae6eab61a4d236a050dfa9c2155031a216d97b7 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Fri, 2 Jan 2026 11:54:52 +0700 Subject: [PATCH 4/6] Create server.ts --- src/src/src/server.ts | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/src/src/server.ts diff --git a/src/src/src/server.ts b/src/src/src/server.ts new file mode 100644 index 0000000..b1b9f78 --- /dev/null +++ b/src/src/src/server.ts @@ -0,0 +1,32 @@ +import express from 'express' +import { createServer } from 'http' +import { WebSocketServer } from 'ws' +import { startMonitor } from './monitor.js' + +const app = express() +const server = createServer(app) +const wss = new WebSocketServer({ server }) + +// Serve frontend +app.use(express.static('web')) + +// WebSocket +function broadcast(data: any) { + wss.clients.forEach(c => { + if (c.readyState === 1) { + c.send(JSON.stringify(data)) + } + }) +} + +// Start monitor +startMonitor(event => { + broadcast({ + type: 'LEDGER_UPDATE', + payload: event + }) +}) + +server.listen(8080, () => + console.log('🚪 Pi Door Unified running :8080') +) From 11c42a0e75b3d690af5b68c9cd49aa759bca0839 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Fri, 2 Jan 2026 11:55:35 +0700 Subject: [PATCH 5/6] Create index.html --- src/src/src/web/index.html | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/src/src/web/index.html diff --git a/src/src/src/web/index.html b/src/src/src/web/index.html new file mode 100644 index 0000000..0f26cd4 --- /dev/null +++ b/src/src/src/web/index.html @@ -0,0 +1,36 @@ + + + + Pi Door Live + + + +
+

Pi Network Live Monitor

+

Ledger: {{ ledger }}

+

Tx Count: {{ tx }}

+

Last Close: {{ time }}

+
+ + + + From 4574f143281765b4546a1195fc6df229fb29d056 Mon Sep 17 00:00:00 2001 From: Kapten boneng Date: Fri, 2 Jan 2026 11:57:46 +0700 Subject: [PATCH 6/6] Create refactor: migrate to unified monorepo architecture --- ...refactor: migrate to unified monorepo architecture | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/src/src/web/refactor: migrate to unified monorepo architecture diff --git a/src/src/src/web/refactor: migrate to unified monorepo architecture b/src/src/src/web/refactor: migrate to unified monorepo architecture new file mode 100644 index 0000000..f3dff5c --- /dev/null +++ b/src/src/src/web/refactor: migrate to unified monorepo architecture @@ -0,0 +1,11 @@ +door-unified/ +├── src/ +│ ├── server.ts # HTTP + WS server +│ ├── monitor.ts # Ledger polling +│ ├── analyzer.ts # TPS & anomaly +│ └── types.ts +├── web/ +│ ├── index.html +│ └── main.js # Vue 3 app (CDN / Vite optional) +├── package.json +└── tsconfig.json