@hanoilab/zk-bridge 0.1.5 → 0.1.7
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 +21 -5
- package/dist/cli/daemon.js +229 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/zk-bridge.js +93 -18
- package/dist/cli/zk-bridge.js.map +1 -1
- package/dist/server/server.js +3 -0
- package/dist/server/server.js.map +1 -1
- package/dist/server/ui/guide-page.js +273 -0
- package/dist/server/ui/guide-page.js.map +1 -0
- package/dist/server/ui/layout.js +29 -1
- package/dist/server/ui/layout.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -59,10 +59,18 @@ zk-bridge start
|
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
```text
|
|
62
|
-
[zk-bridge]
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
[zk-bridge] started (PID 12345)
|
|
63
|
+
Logs: ~/.local/share/zk-bridge/zk-bridge.log
|
|
64
|
+
Stop: zk-bridge stop
|
|
65
|
+
Tail: zk-bridge logs -f
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
`start` detaches — closing the terminal won't stop the bridge. Useful one-liners:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
zk-bridge status # is it running?
|
|
72
|
+
zk-bridge logs -f # follow the log
|
|
73
|
+
zk-bridge stop # stop it
|
|
66
74
|
```
|
|
67
75
|
|
|
68
76
|
### 3. Open the admin UI
|
|
@@ -112,7 +120,13 @@ Visit **<http://localhost:7000>**, set the backend Push URL, paste the per-devic
|
|
|
112
120
|
## CLI
|
|
113
121
|
|
|
114
122
|
```bash
|
|
115
|
-
zk-bridge start # Start
|
|
123
|
+
zk-bridge start # Start as background daemon (writes PID + log)
|
|
124
|
+
zk-bridge stop # Stop the daemon
|
|
125
|
+
zk-bridge restart # Stop + start
|
|
126
|
+
zk-bridge status # PID, uptime, log path
|
|
127
|
+
zk-bridge logs -f # Follow the log
|
|
128
|
+
zk-bridge logs -n 200 # Last 200 lines
|
|
129
|
+
zk-bridge run # Run in the foreground (debug / systemd / Docker)
|
|
116
130
|
zk-bridge poll-once # Run a single cycle then exit
|
|
117
131
|
zk-bridge reset-user # Forgot-password recovery
|
|
118
132
|
zk-bridge recent-events # Print last N events from a device
|
|
@@ -121,6 +135,8 @@ zk-bridge --help
|
|
|
121
135
|
zk-bridge --version
|
|
122
136
|
```
|
|
123
137
|
|
|
138
|
+
`start` detaches from the launching shell — `Ctrl+C` in that terminal does NOT kill the daemon. Use `zk-bridge stop`. Logs go to `<DATA_DIR>/zk-bridge.log`.
|
|
139
|
+
|
|
124
140
|
Environment overrides (otherwise default):
|
|
125
141
|
|
|
126
142
|
```bash
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.startDaemon = startDaemon;
|
|
37
|
+
exports.stopDaemon = stopDaemon;
|
|
38
|
+
exports.statusDaemon = statusDaemon;
|
|
39
|
+
exports.tailLog = tailLog;
|
|
40
|
+
exports.formatUptime = formatUptime;
|
|
41
|
+
const node_child_process_1 = require("node:child_process");
|
|
42
|
+
const fs = __importStar(require("node:fs"));
|
|
43
|
+
const path = __importStar(require("node:path"));
|
|
44
|
+
const env_1 = require("../config/env");
|
|
45
|
+
const PID_FILE = 'zk-bridge.pid';
|
|
46
|
+
const LOG_FILE = 'zk-bridge.log';
|
|
47
|
+
function paths() {
|
|
48
|
+
const { dataDir } = (0, env_1.loadBootEnv)();
|
|
49
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
50
|
+
return {
|
|
51
|
+
dataDir,
|
|
52
|
+
pid: path.join(dataDir, PID_FILE),
|
|
53
|
+
log: path.join(dataDir, LOG_FILE),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function isAlive(pid) {
|
|
57
|
+
try {
|
|
58
|
+
process.kill(pid, 0);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function readPid() {
|
|
66
|
+
const p = paths();
|
|
67
|
+
if (!fs.existsSync(p.pid))
|
|
68
|
+
return null;
|
|
69
|
+
const n = parseInt(fs.readFileSync(p.pid, 'utf8').trim(), 10);
|
|
70
|
+
if (!Number.isFinite(n) || !isAlive(n)) {
|
|
71
|
+
try {
|
|
72
|
+
fs.unlinkSync(p.pid);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// best-effort
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return n;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Spawn the bridge as a detached background child writing to a log file.
|
|
83
|
+
* Parent exits immediately — Ctrl+C in the launching shell does NOT kill
|
|
84
|
+
* the daemon (it's in a separate process group).
|
|
85
|
+
*/
|
|
86
|
+
function startDaemon() {
|
|
87
|
+
const existing = readPid();
|
|
88
|
+
if (existing) {
|
|
89
|
+
throw new Error(`Already running (PID ${existing}). Use 'zk-bridge stop' or 'zk-bridge restart' first.`);
|
|
90
|
+
}
|
|
91
|
+
const p = paths();
|
|
92
|
+
const fd = fs.openSync(p.log, 'a');
|
|
93
|
+
const node = process.execPath;
|
|
94
|
+
// dist/index.js — same entry `zk-bridge run` invokes, but spawned detached.
|
|
95
|
+
const entry = path.resolve(__dirname, '..', 'index.js');
|
|
96
|
+
const child = (0, node_child_process_1.spawn)(node, [entry], {
|
|
97
|
+
detached: true,
|
|
98
|
+
stdio: ['ignore', fd, fd],
|
|
99
|
+
env: process.env,
|
|
100
|
+
});
|
|
101
|
+
child.unref();
|
|
102
|
+
if (!child.pid)
|
|
103
|
+
throw new Error('Failed to spawn child process.');
|
|
104
|
+
fs.writeFileSync(p.pid, String(child.pid));
|
|
105
|
+
fs.closeSync(fd);
|
|
106
|
+
return { pid: child.pid, logPath: p.log, dataDir: p.dataDir };
|
|
107
|
+
}
|
|
108
|
+
function stopDaemon() {
|
|
109
|
+
const pid = readPid();
|
|
110
|
+
if (!pid)
|
|
111
|
+
return null;
|
|
112
|
+
try {
|
|
113
|
+
process.kill(pid, 'SIGTERM');
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// already dead — fall through to PID cleanup
|
|
117
|
+
}
|
|
118
|
+
// Wait a moment for graceful shutdown, then verify.
|
|
119
|
+
const deadline = Date.now() + 5_000;
|
|
120
|
+
while (Date.now() < deadline && isAlive(pid)) {
|
|
121
|
+
// busy-wait short; the kill is async
|
|
122
|
+
sleepSync(100);
|
|
123
|
+
}
|
|
124
|
+
if (isAlive(pid)) {
|
|
125
|
+
try {
|
|
126
|
+
process.kill(pid, 'SIGKILL');
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// ignore
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
const p = paths();
|
|
133
|
+
try {
|
|
134
|
+
fs.unlinkSync(p.pid);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// ignore
|
|
138
|
+
}
|
|
139
|
+
return { pid };
|
|
140
|
+
}
|
|
141
|
+
function statusDaemon() {
|
|
142
|
+
const p = paths();
|
|
143
|
+
const pid = readPid();
|
|
144
|
+
if (!pid) {
|
|
145
|
+
return { running: false, logPath: p.log, dataDir: p.dataDir };
|
|
146
|
+
}
|
|
147
|
+
let uptimeMs;
|
|
148
|
+
try {
|
|
149
|
+
const stat = fs.statSync(p.pid);
|
|
150
|
+
uptimeMs = Date.now() - stat.mtimeMs;
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
// ignore
|
|
154
|
+
}
|
|
155
|
+
return { running: true, pid, logPath: p.log, dataDir: p.dataDir, uptimeMs };
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Print last N lines of the log file, optionally follow new appends.
|
|
159
|
+
* Cross-platform tail — doesn't shell out.
|
|
160
|
+
*/
|
|
161
|
+
function tailLog(follow, lines) {
|
|
162
|
+
const p = paths();
|
|
163
|
+
if (!fs.existsSync(p.log)) {
|
|
164
|
+
console.log('(no log yet — daemon has not started.)');
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
const initial = readLastLines(p.log, lines);
|
|
168
|
+
process.stdout.write(initial);
|
|
169
|
+
if (!follow)
|
|
170
|
+
return;
|
|
171
|
+
let pos = fs.statSync(p.log).size;
|
|
172
|
+
const watcher = fs.watch(p.log, () => {
|
|
173
|
+
let stat;
|
|
174
|
+
try {
|
|
175
|
+
stat = fs.statSync(p.log);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (stat.size > pos) {
|
|
181
|
+
const fd = fs.openSync(p.log, 'r');
|
|
182
|
+
const buf = Buffer.alloc(stat.size - pos);
|
|
183
|
+
fs.readSync(fd, buf, 0, buf.length, pos);
|
|
184
|
+
fs.closeSync(fd);
|
|
185
|
+
process.stdout.write(buf.toString('utf8'));
|
|
186
|
+
pos = stat.size;
|
|
187
|
+
}
|
|
188
|
+
else if (stat.size < pos) {
|
|
189
|
+
pos = 0;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
process.on('SIGINT', () => {
|
|
193
|
+
watcher.close();
|
|
194
|
+
process.exit(0);
|
|
195
|
+
});
|
|
196
|
+
// Keep the event loop alive.
|
|
197
|
+
setInterval(() => undefined, 1 << 30);
|
|
198
|
+
}
|
|
199
|
+
function readLastLines(file, lines) {
|
|
200
|
+
const content = fs.readFileSync(file, 'utf8');
|
|
201
|
+
const arr = content.split('\n');
|
|
202
|
+
// Trim trailing empty line caused by final newline.
|
|
203
|
+
if (arr[arr.length - 1] === '')
|
|
204
|
+
arr.pop();
|
|
205
|
+
const slice = arr.slice(-lines);
|
|
206
|
+
return slice.join('\n') + (slice.length > 0 ? '\n' : '');
|
|
207
|
+
}
|
|
208
|
+
function formatUptime(ms) {
|
|
209
|
+
const s = Math.floor(ms / 1000);
|
|
210
|
+
if (s < 60)
|
|
211
|
+
return `${s}s`;
|
|
212
|
+
const m = Math.floor(s / 60);
|
|
213
|
+
if (m < 60)
|
|
214
|
+
return `${m}m ${s % 60}s`;
|
|
215
|
+
const h = Math.floor(m / 60);
|
|
216
|
+
if (h < 24)
|
|
217
|
+
return `${h}h ${m % 60}m`;
|
|
218
|
+
const d = Math.floor(h / 24);
|
|
219
|
+
return `${d}d ${h % 24}h`;
|
|
220
|
+
}
|
|
221
|
+
function sleepSync(ms) {
|
|
222
|
+
// Atomics.wait on a SharedArrayBuffer would be precise but heavy; this
|
|
223
|
+
// ~100ms granularity is fine for stop's grace-period polling.
|
|
224
|
+
const end = Date.now() + ms;
|
|
225
|
+
while (Date.now() < end) {
|
|
226
|
+
// spin
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=daemon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/zk-bridge.js
CHANGED
|
@@ -44,13 +44,19 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
const node_child_process_1 = require("node:child_process");
|
|
46
46
|
const path = __importStar(require("node:path"));
|
|
47
|
+
const daemon_1 = require("./daemon");
|
|
47
48
|
const command = process.argv[2];
|
|
48
49
|
function help() {
|
|
49
50
|
// eslint-disable-next-line no-console
|
|
50
51
|
console.log(`Usage: zk-bridge <command> [options]
|
|
51
52
|
|
|
52
53
|
Commands:
|
|
53
|
-
start Start bridge
|
|
54
|
+
start Start bridge in the background (writes PID + log)
|
|
55
|
+
stop Stop the running daemon
|
|
56
|
+
restart Stop + start
|
|
57
|
+
status Show daemon state (PID, uptime, log path)
|
|
58
|
+
logs [-f] [-n N] Print last N log lines (default 50). -f to follow.
|
|
59
|
+
run Run in the foreground (debug / systemd / Docker)
|
|
54
60
|
poll-once Run a single poll cycle then exit (no UI server)
|
|
55
61
|
reset-user Reset the local admin user (forgot password recovery)
|
|
56
62
|
recent-events Print recent events from a device
|
|
@@ -60,18 +66,18 @@ Commands:
|
|
|
60
66
|
version, --version, -v Show package version
|
|
61
67
|
|
|
62
68
|
Environment:
|
|
63
|
-
DATA_DIR
|
|
69
|
+
DATA_DIR Where SQLite + admin credentials + log live
|
|
70
|
+
(default: OS user data dir)
|
|
64
71
|
PORT=7000 UI HTTP port
|
|
65
72
|
BIND_HOST=127.0.0.1 Bind address. Set 0.0.0.0 to allow LAN access
|
|
66
73
|
|
|
67
74
|
Examples:
|
|
68
|
-
zk-bridge start
|
|
69
|
-
|
|
70
|
-
zk-bridge
|
|
71
|
-
zk-bridge
|
|
72
|
-
zk-bridge
|
|
73
|
-
zk-bridge
|
|
74
|
-
zk-bridge recent-events --device "Cửa chính" -n 30
|
|
75
|
+
zk-bridge start # daemonize
|
|
76
|
+
zk-bridge status # is it running?
|
|
77
|
+
zk-bridge logs -f # follow logs
|
|
78
|
+
zk-bridge stop # stop the daemon
|
|
79
|
+
PORT=8080 zk-bridge run # foreground on a custom port
|
|
80
|
+
zk-bridge recent-events --device "Front gate" -n 30
|
|
75
81
|
`);
|
|
76
82
|
}
|
|
77
83
|
function version() {
|
|
@@ -121,19 +127,87 @@ async function upgrade(tag = 'latest') {
|
|
|
121
127
|
});
|
|
122
128
|
// eslint-disable-next-line no-console
|
|
123
129
|
console.log(`[zk-bridge] ✓ upgraded ${target}.\n` +
|
|
124
|
-
'Restart the
|
|
125
|
-
'
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
'Restart the daemon to pick up the new code:\n' +
|
|
131
|
+
' zk-bridge restart');
|
|
132
|
+
}
|
|
133
|
+
function parseLogsArgs() {
|
|
134
|
+
const argv = process.argv.slice(3);
|
|
135
|
+
const follow = argv.includes('-f') || argv.includes('--follow');
|
|
136
|
+
const nIdx = argv.findIndex((a) => a === '-n' || a === '--lines');
|
|
137
|
+
const lines = nIdx >= 0 ? Number(argv[nIdx + 1]) : 50;
|
|
138
|
+
return { follow, lines: Number.isFinite(lines) && lines > 0 ? lines : 50 };
|
|
139
|
+
}
|
|
140
|
+
function cmdStart() {
|
|
141
|
+
try {
|
|
142
|
+
const r = (0, daemon_1.startDaemon)();
|
|
143
|
+
// eslint-disable-next-line no-console
|
|
144
|
+
console.log(`[zk-bridge] started (PID ${r.pid})\n` +
|
|
145
|
+
` Logs: ${r.logPath}\n` +
|
|
146
|
+
` Stop: zk-bridge stop\n` +
|
|
147
|
+
` Tail: zk-bridge logs -f`);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
// eslint-disable-next-line no-console
|
|
151
|
+
console.error(`[zk-bridge] ${err instanceof Error ? err.message : err}`);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function cmdStop() {
|
|
156
|
+
const r = (0, daemon_1.stopDaemon)();
|
|
157
|
+
if (!r) {
|
|
158
|
+
// eslint-disable-next-line no-console
|
|
159
|
+
console.log('[zk-bridge] not running.');
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// eslint-disable-next-line no-console
|
|
163
|
+
console.log(`[zk-bridge] stopped (PID ${r.pid}).`);
|
|
164
|
+
}
|
|
165
|
+
async function cmdRestart() {
|
|
166
|
+
cmdStop();
|
|
167
|
+
await new Promise((r) => setTimeout(r, 600));
|
|
168
|
+
cmdStart();
|
|
169
|
+
}
|
|
170
|
+
function cmdStatus() {
|
|
171
|
+
const s = (0, daemon_1.statusDaemon)();
|
|
172
|
+
if (!s.running) {
|
|
173
|
+
// eslint-disable-next-line no-console
|
|
174
|
+
console.log(`[zk-bridge] not running.\n` +
|
|
175
|
+
` Data dir: ${s.dataDir}\n` +
|
|
176
|
+
` Logs: ${s.logPath} (last run, if any)`);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const up = s.uptimeMs !== undefined ? (0, daemon_1.formatUptime)(s.uptimeMs) : 'unknown';
|
|
180
|
+
// eslint-disable-next-line no-console
|
|
181
|
+
console.log(`[zk-bridge] running.\n` +
|
|
182
|
+
` PID: ${s.pid}\n` +
|
|
183
|
+
` Uptime: ${up}\n` +
|
|
184
|
+
` Data dir: ${s.dataDir}\n` +
|
|
185
|
+
` Logs: ${s.logPath}`);
|
|
131
186
|
}
|
|
132
187
|
async function main() {
|
|
133
188
|
switch (command) {
|
|
189
|
+
// ── daemon control ───────────────────────────────────────────────────
|
|
134
190
|
case undefined:
|
|
135
191
|
case 'start':
|
|
136
|
-
|
|
192
|
+
cmdStart();
|
|
193
|
+
return;
|
|
194
|
+
case 'stop':
|
|
195
|
+
cmdStop();
|
|
196
|
+
return;
|
|
197
|
+
case 'restart':
|
|
198
|
+
await cmdRestart();
|
|
199
|
+
return;
|
|
200
|
+
case 'status':
|
|
201
|
+
cmdStatus();
|
|
202
|
+
return;
|
|
203
|
+
case 'logs': {
|
|
204
|
+
const { follow, lines } = parseLogsArgs();
|
|
205
|
+
(0, daemon_1.tailLog)(follow, lines);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// ── foreground / one-shot ────────────────────────────────────────────
|
|
209
|
+
case 'run':
|
|
210
|
+
// Foreground mode — what daemons / Docker / systemd should call.
|
|
137
211
|
process.argv.splice(2, 1);
|
|
138
212
|
await Promise.resolve().then(() => __importStar(require('../index')));
|
|
139
213
|
return;
|
|
@@ -149,11 +223,12 @@ async function main() {
|
|
|
149
223
|
process.argv.splice(2, 1);
|
|
150
224
|
await Promise.resolve().then(() => __importStar(require('./recent-events')));
|
|
151
225
|
return;
|
|
226
|
+
// ── self-update ──────────────────────────────────────────────────────
|
|
152
227
|
case 'upgrade':
|
|
153
228
|
case 'update':
|
|
154
|
-
// Optional next arg = npm dist-tag (e.g. `next`). Default `latest`.
|
|
155
229
|
await upgrade(process.argv[3] ?? 'latest');
|
|
156
230
|
return;
|
|
231
|
+
// ── meta ─────────────────────────────────────────────────────────────
|
|
157
232
|
case 'help':
|
|
158
233
|
case '--help':
|
|
159
234
|
case '-h':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zk-bridge.js","sourceRoot":"","sources":["../../src/cli/zk-bridge.ts"],"names":[],"mappings":";;AAEA;;;;;;;GAOG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,2DAA2C;AAC3C,gDAAkC;AAElC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,SAAS,IAAI;IACX,sCAAsC;IACtC,OAAO,CAAC,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"zk-bridge.js","sourceRoot":"","sources":["../../src/cli/zk-bridge.ts"],"names":[],"mappings":"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"}
|
package/dist/server/server.js
CHANGED
|
@@ -23,6 +23,7 @@ const config_pages_1 = require("./ui/config-pages");
|
|
|
23
23
|
const dashboard_page_1 = require("./ui/dashboard-page");
|
|
24
24
|
const device_events_page_1 = require("./ui/device-events-page");
|
|
25
25
|
const devices_page_1 = require("./ui/devices-page");
|
|
26
|
+
const guide_page_1 = require("./ui/guide-page");
|
|
26
27
|
const logs_page_1 = require("./ui/logs-page");
|
|
27
28
|
const PUBLIC_PATHS = new Set(['/setup', '/login']);
|
|
28
29
|
async function userCount() {
|
|
@@ -415,6 +416,8 @@ function createServer() {
|
|
|
415
416
|
return c.redirect('/dashboard');
|
|
416
417
|
});
|
|
417
418
|
// ---------- /logs ----------
|
|
419
|
+
// ---------- /guide ----------
|
|
420
|
+
app.get('/guide', (c) => c.html((0, guide_page_1.renderGuidePage)()));
|
|
418
421
|
app.get('/logs', async (c) => {
|
|
419
422
|
const pageRaw = Number(c.req.query('page') ?? '1');
|
|
420
423
|
const page = Number.isFinite(pageRaw) && pageRaw >= 1 ? Math.floor(pageRaw) : 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderGuidePage = renderGuidePage;
|
|
4
|
+
const layout_1 = require("./layout");
|
|
5
|
+
function renderGuidePage() {
|
|
6
|
+
const body = `
|
|
7
|
+
<div class="space-y-6">
|
|
8
|
+
|
|
9
|
+
<header class="bg-white rounded-lg shadow p-6">
|
|
10
|
+
<div class="flex items-start gap-4 flex-wrap">
|
|
11
|
+
<div class="flex-1 min-w-0">
|
|
12
|
+
<h1 class="text-2xl font-semibold">ZK-Bridge guide</h1>
|
|
13
|
+
<p class="text-sm text-slate-500 mt-1">
|
|
14
|
+
Everything this bridge can do, in one page. Click any section below to jump.
|
|
15
|
+
</p>
|
|
16
|
+
</div>
|
|
17
|
+
<a href="${layout_1.GITHUB_URL}" target="_blank" rel="noopener"
|
|
18
|
+
class="inline-flex items-center gap-2 px-3 py-1.5 rounded bg-amber-50 text-amber-800 border border-amber-200 hover:bg-amber-100 text-sm font-medium">
|
|
19
|
+
<svg viewBox="0 0 24 24" fill="currentColor" class="w-4 h-4">
|
|
20
|
+
<path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/>
|
|
21
|
+
</svg>
|
|
22
|
+
Star on GitHub
|
|
23
|
+
</a>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="mt-3 flex flex-wrap gap-2 text-xs">
|
|
26
|
+
<a class="text-slate-600 hover:text-slate-900 underline" href="${layout_1.GITHUB_URL}" target="_blank" rel="noopener">GitHub repo</a>
|
|
27
|
+
<span class="text-slate-300">·</span>
|
|
28
|
+
<a class="text-slate-600 hover:text-slate-900 underline" href="${layout_1.NPM_URL}" target="_blank" rel="noopener">npm package</a>
|
|
29
|
+
<span class="text-slate-300">·</span>
|
|
30
|
+
<a class="text-slate-600 hover:text-slate-900 underline" href="${layout_1.GITHUB_URL}/issues" target="_blank" rel="noopener">Report a bug</a>
|
|
31
|
+
</div>
|
|
32
|
+
</header>
|
|
33
|
+
|
|
34
|
+
<nav class="bg-white rounded-lg shadow p-4">
|
|
35
|
+
<h2 class="font-semibold mb-2 text-sm uppercase text-slate-500 tracking-wide">Contents</h2>
|
|
36
|
+
<ul class="grid grid-cols-2 md:grid-cols-3 gap-x-4 gap-y-1 text-sm">
|
|
37
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#flow">1. End-to-end flow</a></li>
|
|
38
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#api">2. API config</a></li>
|
|
39
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#devices">3. Devices</a></li>
|
|
40
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#scan">4. LAN scan</a></li>
|
|
41
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#events">5. Per-device events</a></li>
|
|
42
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#cycles">6. Cycle logs</a></li>
|
|
43
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#system">7. System tools</a></li>
|
|
44
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#cli">8. CLI commands</a></li>
|
|
45
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#contract">9. Backend contract</a></li>
|
|
46
|
+
<li><a class="text-slate-700 hover:text-slate-900 underline" href="#troubleshoot">10. Troubleshooting</a></li>
|
|
47
|
+
</ul>
|
|
48
|
+
</nav>
|
|
49
|
+
|
|
50
|
+
<section id="flow" class="bg-white rounded-lg shadow p-6">
|
|
51
|
+
<h2 class="text-lg font-semibold mb-2">1. End-to-end flow</h2>
|
|
52
|
+
<p class="text-sm text-slate-600 mb-3">
|
|
53
|
+
ZK-Bridge sits between a ZKTeco fingerprint reader on your office LAN and an HTTP backend
|
|
54
|
+
(HRIS / C-HR / your own API). It polls the device on a schedule, translates events into a
|
|
55
|
+
generic JSON shape, and pushes them via HTTPS — no port forwarding or VPN needed.
|
|
56
|
+
</p>
|
|
57
|
+
<pre class="bg-slate-50 border border-slate-200 rounded p-3 font-mono text-xs overflow-x-auto">
|
|
58
|
+
ZKTeco device ZK-Bridge (this UI) Your backend
|
|
59
|
+
┌────────────┐ ┌──────────────────┐ ┌───────────────┐
|
|
60
|
+
│ TCP 4370 │ ◄──► │ Poll · SQLite │ ◄───► │ Push / Ping │
|
|
61
|
+
│ on the LAN │ │ Scheduler · UI │ │ endpoints │
|
|
62
|
+
└────────────┘ └──────────────────┘ └───────────────┘
|
|
63
|
+
</pre>
|
|
64
|
+
<p class="text-sm text-slate-600 mt-3">
|
|
65
|
+
Every cycle (default 5 min): list enabled devices → for each: open ZK socket → fetch log
|
|
66
|
+
→ translate → push to backend in batches of 200. Backend dedupes by
|
|
67
|
+
<code class="bg-slate-100 px-1 rounded">(deviceId, eventLogId)</code> so retries are safe.
|
|
68
|
+
</p>
|
|
69
|
+
</section>
|
|
70
|
+
|
|
71
|
+
<section id="api" class="bg-white rounded-lg shadow p-6">
|
|
72
|
+
<h2 class="text-lg font-semibold mb-2">2. API config — <a class="text-sm text-blue-600 hover:underline" href="/config/api">/config/api</a></h2>
|
|
73
|
+
<p class="text-sm text-slate-600 mb-3">
|
|
74
|
+
Where the bridge sends data. Two URLs, full paths (no concatenation):
|
|
75
|
+
</p>
|
|
76
|
+
<ul class="list-disc pl-5 space-y-1 text-sm text-slate-700">
|
|
77
|
+
<li><strong>Push URL</strong> (required) — bridge POSTs <code class="bg-slate-100 px-1 rounded">{ token, events[] }</code>.</li>
|
|
78
|
+
<li><strong>Ping URL</strong> (optional) — used by the <strong>Connect</strong> button to verify token + reachability without pushing events. If empty, falls back to a push with an empty events array.</li>
|
|
79
|
+
<li><strong>Poll interval</strong> — minutes between cycles (1–1440).</li>
|
|
80
|
+
</ul>
|
|
81
|
+
<p class="text-sm text-slate-600 mt-3">
|
|
82
|
+
Save will restart the scheduler with the new interval immediately.
|
|
83
|
+
</p>
|
|
84
|
+
</section>
|
|
85
|
+
|
|
86
|
+
<section id="devices" class="bg-white rounded-lg shadow p-6">
|
|
87
|
+
<h2 class="text-lg font-semibold mb-2">3. Devices — <a class="text-sm text-blue-600 hover:underline" href="/devices">/devices</a></h2>
|
|
88
|
+
<p class="text-sm text-slate-600 mb-3">
|
|
89
|
+
Each row = one ZKTeco reader. Per-device fields: <strong>Name</strong>,
|
|
90
|
+
<strong>Host:Port</strong> (default 4370), <strong>Device token</strong> (JWT issued by your
|
|
91
|
+
backend), <strong>Enabled</strong>. Status dot shows the last cycle outcome — green ok,
|
|
92
|
+
amber partial, red zk_error / api_error, grey never run.
|
|
93
|
+
</p>
|
|
94
|
+
<p class="text-sm text-slate-600 mb-2"><strong>Row actions</strong> (right-most column):</p>
|
|
95
|
+
<ul class="list-disc pl-5 space-y-1 text-sm text-slate-700">
|
|
96
|
+
<li><strong>Events</strong> — live attendance from this device (see §5).</li>
|
|
97
|
+
<li><strong>Cycles</strong> — cycle log filtered to this device (see §6).</li>
|
|
98
|
+
<li><strong>Edit</strong> — opens the modal pre-filled.</li>
|
|
99
|
+
<li><strong>Connect</strong> — pings the backend with this device's token and bumps <code class="bg-slate-100 px-1 rounded">lastSeenAt</code> there (sanity check before relying on the cycle).</li>
|
|
100
|
+
<li><strong>Delete</strong> — removes the row + its queued events + cycle log entries.</li>
|
|
101
|
+
</ul>
|
|
102
|
+
</section>
|
|
103
|
+
|
|
104
|
+
<section id="scan" class="bg-white rounded-lg shadow p-6">
|
|
105
|
+
<h2 class="text-lg font-semibold mb-2">4. LAN scan — <a class="text-sm text-blue-600 hover:underline" href="/devices">Devices → Scan now</a></h2>
|
|
106
|
+
<p class="text-sm text-slate-600 mb-3">
|
|
107
|
+
Probes every host in the bridge's <code class="bg-slate-100 px-1 rounded">/24</code> subnet on
|
|
108
|
+
TCP 4370. Each candidate gets an extra ZK protocol probe to fetch device metadata (model,
|
|
109
|
+
serial, user count) — distinguishes a real ZKTeco from any other service on the same port.
|
|
110
|
+
</p>
|
|
111
|
+
<ul class="list-disc pl-5 space-y-1 text-sm text-slate-700">
|
|
112
|
+
<li><span class="px-1.5 py-0.5 rounded text-[10px] uppercase font-semibold bg-emerald-100 text-emerald-800">ZKTeco</span> badge — TCP open + ZK protocol replied → confirmed.</li>
|
|
113
|
+
<li><span class="px-1.5 py-0.5 rounded text-[10px] uppercase font-semibold bg-amber-100 text-amber-800">ZKTeco?</span> — port 4370 open but ZK probe failed (device likely busy with another connection). Still likely a ZKTeco.</li>
|
|
114
|
+
<li><span class="px-1.5 py-0.5 rounded text-[10px] uppercase font-semibold bg-amber-100 text-amber-800">unknown</span> — port open but probe failed AND it's not the canonical ZK port.</li>
|
|
115
|
+
</ul>
|
|
116
|
+
<p class="text-sm text-slate-600 mt-3">
|
|
117
|
+
Click <strong>+ Add as device</strong> next to a result — opens the Add modal with name +
|
|
118
|
+
host pre-filled. Paste the JWT, save.
|
|
119
|
+
</p>
|
|
120
|
+
</section>
|
|
121
|
+
|
|
122
|
+
<section id="events" class="bg-white rounded-lg shadow p-6">
|
|
123
|
+
<h2 class="text-lg font-semibold mb-2">5. Per-device events — Devices → <strong>Events</strong></h2>
|
|
124
|
+
<p class="text-sm text-slate-600 mb-3">
|
|
125
|
+
Live read of the attendance log straight from the device — no cache. Sorted by
|
|
126
|
+
<code class="bg-slate-100 px-1 rounded">eventLogId</code> descending; a thick divider marks
|
|
127
|
+
the cursor: rows above are <strong>pending</strong> (not yet pushed), rows below are
|
|
128
|
+
<strong>pushed</strong>.
|
|
129
|
+
</p>
|
|
130
|
+
<ul class="list-disc pl-5 space-y-1 text-sm text-slate-700">
|
|
131
|
+
<li><strong>Refresh from device</strong> — re-fetch (typical 5–30s for thousands of records).</li>
|
|
132
|
+
<li><strong>Reset cursor</strong> — sets <code class="bg-slate-100 px-1 rounded">last_event_log_id = 0</code>; next cycle re-pulls every event still on the device. Backend dedupes — safe but may push thousands at once.</li>
|
|
133
|
+
<li>Pagination: 50 rows per page, deep-link friendly via <code class="bg-slate-100 px-1 rounded">?page=N</code>.</li>
|
|
134
|
+
</ul>
|
|
135
|
+
</section>
|
|
136
|
+
|
|
137
|
+
<section id="cycles" class="bg-white rounded-lg shadow p-6">
|
|
138
|
+
<h2 class="text-lg font-semibold mb-2">6. Cycle logs — <a class="text-sm text-blue-600 hover:underline" href="/logs">/logs</a></h2>
|
|
139
|
+
<p class="text-sm text-slate-600 mb-3">
|
|
140
|
+
Per-cycle audit: 1 row = 1 device cycle attempt. Status badges:
|
|
141
|
+
</p>
|
|
142
|
+
<ul class="list-disc pl-5 space-y-1 text-sm text-slate-700">
|
|
143
|
+
<li><span class="px-1.5 py-0.5 rounded text-xs bg-emerald-100 text-emerald-800">ok</span> — all events pushed, cursor advanced.</li>
|
|
144
|
+
<li><span class="px-1.5 py-0.5 rounded text-xs bg-amber-100 text-amber-800">partial</span> — some pushed, the rest queued offline (will retry).</li>
|
|
145
|
+
<li><span class="px-1.5 py-0.5 rounded text-xs bg-rose-100 text-rose-800">zk_error</span> — couldn't reach the device.</li>
|
|
146
|
+
<li><span class="px-1.5 py-0.5 rounded text-xs bg-rose-100 text-rose-800">api_error</span> — couldn't push to the backend; events sit in the queue.</li>
|
|
147
|
+
</ul>
|
|
148
|
+
<p class="text-sm text-slate-600 mt-3">
|
|
149
|
+
Filter by device via the dropdown (or hit <strong>Cycles</strong> on a device row). The log
|
|
150
|
+
rotates automatically — last 1000 entries are kept.
|
|
151
|
+
</p>
|
|
152
|
+
</section>
|
|
153
|
+
|
|
154
|
+
<section id="system" class="bg-white rounded-lg shadow p-6">
|
|
155
|
+
<h2 class="text-lg font-semibold mb-2">7. System tools — <a class="text-sm text-blue-600 hover:underline" href="/config/system">/config/system</a></h2>
|
|
156
|
+
<ul class="list-disc pl-5 space-y-1 text-sm text-slate-700">
|
|
157
|
+
<li><strong>Auto-start on boot</strong> — toggle to register a systemd unit / Windows Scheduled Task / launchd plist with <code class="bg-slate-100 px-1 rounded">Restart=on-failure</code>. Bridge survives host reboots without manual start.</li>
|
|
158
|
+
<li><strong>Run a cycle now</strong> — fires a poll cycle immediately, useful for verification after config changes.</li>
|
|
159
|
+
</ul>
|
|
160
|
+
</section>
|
|
161
|
+
|
|
162
|
+
<section id="cli" class="bg-white rounded-lg shadow p-6">
|
|
163
|
+
<h2 class="text-lg font-semibold mb-2">8. CLI commands</h2>
|
|
164
|
+
<p class="text-sm text-slate-600 mb-3">
|
|
165
|
+
The package ships a <code class="bg-slate-100 px-1 rounded">zk-bridge</code> binary. Daemon
|
|
166
|
+
mode is the default — closing the launching terminal does <em>not</em> stop the bridge.
|
|
167
|
+
</p>
|
|
168
|
+
<pre class="bg-slate-50 border border-slate-200 rounded p-3 font-mono text-xs overflow-x-auto">
|
|
169
|
+
zk-bridge start # detach as background daemon
|
|
170
|
+
zk-bridge stop # SIGTERM the daemon
|
|
171
|
+
zk-bridge restart # stop + start
|
|
172
|
+
zk-bridge status # PID, uptime, log path
|
|
173
|
+
zk-bridge logs -f # follow the log file
|
|
174
|
+
zk-bridge logs -n 200 # last 200 lines
|
|
175
|
+
zk-bridge run # foreground mode (systemd / Docker / PM2)
|
|
176
|
+
zk-bridge poll-once # one cycle then exit
|
|
177
|
+
zk-bridge reset-user # forgot-password recovery
|
|
178
|
+
zk-bridge recent-events # peek at last N events from a device
|
|
179
|
+
zk-bridge upgrade [tag] # self-update via npm
|
|
180
|
+
</pre>
|
|
181
|
+
<p class="text-sm text-slate-600 mt-3">
|
|
182
|
+
Logs land at <code class="bg-slate-100 px-1 rounded"><DATA_DIR>/zk-bridge.log</code>;
|
|
183
|
+
PID file at <code class="bg-slate-100 px-1 rounded"><DATA_DIR>/zk-bridge.pid</code>.
|
|
184
|
+
Every line is prefixed with an ISO timestamp.
|
|
185
|
+
</p>
|
|
186
|
+
</section>
|
|
187
|
+
|
|
188
|
+
<section id="contract" class="bg-white rounded-lg shadow p-6">
|
|
189
|
+
<h2 class="text-lg font-semibold mb-2">9. Backend contract</h2>
|
|
190
|
+
<p class="text-sm text-slate-600 mb-3">
|
|
191
|
+
Any backend exposing two HTTP endpoints can receive events from this bridge. JSON over HTTPS,
|
|
192
|
+
token-auth in the body (no special headers required).
|
|
193
|
+
</p>
|
|
194
|
+
<p class="text-sm font-medium mb-1">Push (required):</p>
|
|
195
|
+
<pre class="bg-slate-50 border border-slate-200 rounded p-3 font-mono text-xs overflow-x-auto mb-3">
|
|
196
|
+
POST <push-url>
|
|
197
|
+
Content-Type: application/json
|
|
198
|
+
|
|
199
|
+
{
|
|
200
|
+
"token": "<JWT issued by your backend>",
|
|
201
|
+
"events": [
|
|
202
|
+
{
|
|
203
|
+
"eventLogId": "12345",
|
|
204
|
+
"employeeCode": "EMP-0001",
|
|
205
|
+
"timestamp": "2026-05-07T08:23:45.000Z",
|
|
206
|
+
"type": "IN"
|
|
207
|
+
}
|
|
208
|
+
]
|
|
209
|
+
}
|
|
210
|
+
</pre>
|
|
211
|
+
<p class="text-sm font-medium mb-1">Ping (optional):</p>
|
|
212
|
+
<pre class="bg-slate-50 border border-slate-200 rounded p-3 font-mono text-xs overflow-x-auto">
|
|
213
|
+
POST <ping-url>
|
|
214
|
+
Content-Type: application/json
|
|
215
|
+
|
|
216
|
+
{ "token": "<JWT>" }
|
|
217
|
+
</pre>
|
|
218
|
+
<p class="text-sm text-slate-600 mt-3">
|
|
219
|
+
Backend should: verify the JWT, dedupe by <code class="bg-slate-100 px-1 rounded">(deviceId, eventLogId)</code>,
|
|
220
|
+
persist events. Bridge only checks HTTP status (2xx = success, anything else = retry / queue).
|
|
221
|
+
</p>
|
|
222
|
+
</section>
|
|
223
|
+
|
|
224
|
+
<section id="troubleshoot" class="bg-white rounded-lg shadow p-6">
|
|
225
|
+
<h2 class="text-lg font-semibold mb-2">10. Troubleshooting</h2>
|
|
226
|
+
<table class="w-full text-sm">
|
|
227
|
+
<thead>
|
|
228
|
+
<tr class="text-left text-xs uppercase text-slate-500 border-b">
|
|
229
|
+
<th class="pb-2 pr-3">Symptom</th>
|
|
230
|
+
<th class="pb-2">Likely cause / fix</th>
|
|
231
|
+
</tr>
|
|
232
|
+
</thead>
|
|
233
|
+
<tbody class="divide-y divide-slate-200">
|
|
234
|
+
<tr class="align-top">
|
|
235
|
+
<td class="py-2 pr-3 font-mono text-xs">ETIMEDOUT <ip>:<port></td>
|
|
236
|
+
<td class="py-2">Bridge can't reach the backend. <code class="bg-slate-100 px-1 rounded">curl <url></code> from this host should work.</td>
|
|
237
|
+
</tr>
|
|
238
|
+
<tr class="align-top">
|
|
239
|
+
<td class="py-2 pr-3 font-mono text-xs">HTTP 401 Invalid token</td>
|
|
240
|
+
<td class="py-2">JWT was regenerated on the backend, or the device row was deleted. Re-paste the token.</td>
|
|
241
|
+
</tr>
|
|
242
|
+
<tr class="align-top">
|
|
243
|
+
<td class="py-2 pr-3 font-mono text-xs">Socket closed unexpectedly</td>
|
|
244
|
+
<td class="py-2">ZK device only allows 1 active connection — another tool / cycle is holding it. Wait for the next cycle.</td>
|
|
245
|
+
</tr>
|
|
246
|
+
<tr class="align-top">
|
|
247
|
+
<td class="py-2 pr-3 font-mono text-xs">port open but ZK probe fail</td>
|
|
248
|
+
<td class="py-2">Same — device busy. Add → Connect after a minute.</td>
|
|
249
|
+
</tr>
|
|
250
|
+
<tr class="align-top">
|
|
251
|
+
<td class="py-2 pr-3">Dashboard "never run"</td>
|
|
252
|
+
<td class="py-2">Push URL not set, or no devices configured. Check API + Devices.</td>
|
|
253
|
+
</tr>
|
|
254
|
+
<tr class="align-top">
|
|
255
|
+
<td class="py-2 pr-3">Events arrive late</td>
|
|
256
|
+
<td class="py-2">Lower the poll interval in API settings (min 1 min).</td>
|
|
257
|
+
</tr>
|
|
258
|
+
</tbody>
|
|
259
|
+
</table>
|
|
260
|
+
</section>
|
|
261
|
+
|
|
262
|
+
<footer class="bg-amber-50 border border-amber-200 rounded-lg p-6 text-center">
|
|
263
|
+
<p class="text-sm text-amber-900">
|
|
264
|
+
ZK-Bridge is open-source. If it saves you time, please
|
|
265
|
+
<a href="${layout_1.GITHUB_URL}" target="_blank" rel="noopener" class="font-semibold underline">⭐ star us on GitHub</a>
|
|
266
|
+
— it's the simplest way to support the project.
|
|
267
|
+
</p>
|
|
268
|
+
</footer>
|
|
269
|
+
|
|
270
|
+
</div>`;
|
|
271
|
+
return (0, layout_1.renderLayout)({ title: 'Guide', body, showNav: true, active: 'guide' });
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=guide-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guide-page.js","sourceRoot":"","sources":["../../../src/server/ui/guide-page.ts"],"names":[],"mappings":";;AAEA,0CA2QC;AA7QD,qCAA6D;AAE7D,SAAgB,eAAe;IAC7B,MAAM,IAAI,GAAG;;;;;;;;;;;qBAWM,mBAAU;;;;;;;;;2EAS4C,mBAAU;;2EAEV,gBAAO;;2EAEP,mBAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA2OhE,mBAAU;;;;;WAKpB,CAAC;IACV,OAAO,IAAA,qBAAY,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;AAChF,CAAC"}
|
package/dist/server/ui/layout.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NPM_URL = exports.GITHUB_URL = void 0;
|
|
3
4
|
exports.escapeHtml = escapeHtml;
|
|
4
5
|
exports.renderLayout = renderLayout;
|
|
6
|
+
exports.GITHUB_URL = 'https://github.com/nguyendinhphongdx/zkteco-bridge';
|
|
7
|
+
exports.NPM_URL = 'https://www.npmjs.com/package/@hanoilab/zk-bridge';
|
|
5
8
|
function escapeHtml(value) {
|
|
6
9
|
if (value === undefined || value === null)
|
|
7
10
|
return '';
|
|
@@ -18,6 +21,18 @@ function navLink(href, label, active) {
|
|
|
18
21
|
: 'px-3 py-2 rounded text-slate-700 hover:bg-slate-200 text-sm font-medium';
|
|
19
22
|
return `<a href="${href}" class="${classes}">${escapeHtml(label)}</a>`;
|
|
20
23
|
}
|
|
24
|
+
const GITHUB_ICON = `
|
|
25
|
+
<svg viewBox="0 0 24 24" fill="currentColor" class="w-4 h-4">
|
|
26
|
+
<path d="M12 .5C5.65.5.5 5.65.5 12c0 5.08 3.29 9.39 7.86 10.91.58.1.79-.25.79-.56 0-.27-.01-1-.02-1.97-3.2.7-3.87-1.54-3.87-1.54-.52-1.32-1.27-1.67-1.27-1.67-1.04-.71.08-.7.08-.7 1.15.08 1.76 1.18 1.76 1.18 1.02 1.75 2.69 1.24 3.34.95.1-.74.4-1.24.72-1.53-2.55-.29-5.24-1.28-5.24-5.69 0-1.26.45-2.29 1.18-3.1-.12-.29-.51-1.46.11-3.04 0 0 .96-.31 3.16 1.18A11.02 11.02 0 0 1 12 6.8c.97 0 1.95.13 2.86.39 2.2-1.49 3.16-1.18 3.16-1.18.62 1.58.23 2.75.11 3.04.74.81 1.18 1.84 1.18 3.1 0 4.42-2.69 5.39-5.25 5.68.41.36.78 1.06.78 2.13 0 1.54-.01 2.78-.01 3.16 0 .31.21.67.8.55C20.21 21.39 23.5 17.08 23.5 12 23.5 5.65 18.35.5 12 .5z"/>
|
|
27
|
+
</svg>`;
|
|
28
|
+
const NPM_ICON = `
|
|
29
|
+
<svg viewBox="0 0 256 256" fill="currentColor" class="w-4 h-4">
|
|
30
|
+
<path d="M0 256V0h256v256H0Zm222.32-33.682V33.682H33.682v188.636h94.32v-156h62.954v156h31.364Z"/>
|
|
31
|
+
</svg>`;
|
|
32
|
+
const STAR_ICON = `
|
|
33
|
+
<svg viewBox="0 0 24 24" fill="currentColor" class="w-3.5 h-3.5">
|
|
34
|
+
<path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/>
|
|
35
|
+
</svg>`;
|
|
21
36
|
function renderLayout(opts) {
|
|
22
37
|
const nav = opts.showNav
|
|
23
38
|
? `
|
|
@@ -29,9 +44,22 @@ function renderLayout(opts) {
|
|
|
29
44
|
${navLink('/config/api', 'API', opts.active === 'config-api')}
|
|
30
45
|
${navLink('/config/system', 'System', opts.active === 'config-system')}
|
|
31
46
|
${navLink('/logs', 'Logs', opts.active === 'logs')}
|
|
47
|
+
${navLink('/guide', 'Guide', opts.active === 'guide')}
|
|
32
48
|
<span class="flex-1"></span>
|
|
49
|
+
<a href="${exports.GITHUB_URL}" target="_blank" rel="noopener"
|
|
50
|
+
title="Star us on GitHub — it helps a lot ⭐"
|
|
51
|
+
class="inline-flex items-center gap-1.5 px-2 py-1.5 rounded text-xs font-medium text-slate-700 hover:bg-amber-50 hover:text-amber-700 border border-transparent hover:border-amber-200 transition">
|
|
52
|
+
${GITHUB_ICON}
|
|
53
|
+
${STAR_ICON}
|
|
54
|
+
<span>Star</span>
|
|
55
|
+
</a>
|
|
56
|
+
<a href="${exports.NPM_URL}" target="_blank" rel="noopener"
|
|
57
|
+
title="View on npm"
|
|
58
|
+
class="inline-flex items-center px-2 py-1.5 rounded text-xs text-slate-500 hover:bg-slate-100 hover:text-slate-900 transition">
|
|
59
|
+
${NPM_ICON}
|
|
60
|
+
</a>
|
|
33
61
|
<form method="post" action="/logout">
|
|
34
|
-
<button class="text-sm text-slate-500 hover:text-slate-900">Logout</button>
|
|
62
|
+
<button class="text-sm text-slate-500 hover:text-slate-900 px-2 py-1.5">Logout</button>
|
|
35
63
|
</form>
|
|
36
64
|
</div>
|
|
37
65
|
</nav>`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/server/ui/layout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/server/ui/layout.ts"],"names":[],"mappings":";;;AAkBA,gCAQC;AAwBD,oCAwDC;AA3FY,QAAA,UAAU,GAAG,oDAAoD,CAAC;AAClE,QAAA,OAAO,GAAG,mDAAmD,CAAC;AAE3E,SAAgB,UAAU,CAAC,KAAyC;IAClE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACrD,OAAO,MAAM,CAAC,KAAK,CAAC;SACjB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,KAAa,EAAE,MAAe;IAC3D,MAAM,OAAO,GAAG,MAAM;QACpB,CAAC,CAAC,+DAA+D;QACjE,CAAC,CAAC,yEAAyE,CAAC;IAC9E,OAAO,YAAY,IAAI,YAAY,OAAO,KAAK,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;AACzE,CAAC;AAED,MAAM,WAAW,GAAG;;;OAGb,CAAC;AAER,MAAM,QAAQ,GAAG;;;OAGV,CAAC;AAER,MAAM,SAAS,GAAG;;;OAGX,CAAC;AAER,SAAgB,YAAY,CAAC,IAAmB;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO;QACtB,CAAC,CAAC;;;;YAIM,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC;YAC/D,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;YACzD,OAAO,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC;YAC3D,OAAO,CAAC,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC;YACpE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;YAChD,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;;qBAE1C,kBAAU;;;cAGjB,WAAW;cACX,SAAS;;;qBAGF,eAAO;;;cAGd,QAAQ;;;;;;aAMT;QACT,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;QACtB,CAAC,CAAC,sCACE,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI;YACtB,CAAC,CAAC,0DAA0D;YAC5D,CAAC,CAAC,iDACN,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ;QAC7C,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;SAKA,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;;;;EAI7B,GAAG;;EAEH,KAAK;EACL,IAAI,CAAC,IAAI;;;QAGH,CAAC;AACT,CAAC"}
|