rfid-keyboard
v0.1.1
Published
Open-source RFID / keyboard-wedge engine + custom DSL for kiosk/access flows (browser & Electron)
Maintainers
Readme
rfid-keyboard
rfid-keyboard adalah module npm open-source untuk menangkap input dari RFID reader / barcode scanner yang berperilaku seperti keyboard (keyboard-wedge), plus DSL (bahasa custom) untuk bikin flow login / access / kiosk tanpa harus nulis JS panjang.
- ✅ Browser / HTML biasa (renderer)
- ✅ Electron (via
BrowserWindow.webContents.executeJavaScript) - ✅ DSL v0.1 (START/END, let, bar.input create.new, sync, if/else, redirect, sound)
Catatan keamanan: ini bukan "security system" yang kuat. Jangan taruh secret penting di frontend.
Install
npm i rfid-keyboardQuick Start (Browser / Renderer)
index.html
<!doctype html>
<html>
<head><meta charset="utf-8" /></head>
<body>
<h1>RFID demo</h1>
<script type="module">
import { runDSL } from "rfid-keyboard/browser";
const dsl = `
START
let password = "001001"
bar.input create.new hiddenBar {
transparent == true
autofocus == true
}
sync hiddenBar {
if == password {
user.redirect "success.html"
} else {
sound.play "failed.mp3"
user.redirect "index.html"
}
}
END
`.trim();
runDSL(dsl, { debug: true });
</script>
</body>
</html>Quick Start (Electron Main)
import { BrowserWindow, app } from "electron";
import fs from "node:fs";
import { injectDSL } from "rfid-keyboard/electron";
app.whenReady().then(async () => {
const win = new BrowserWindow({
width: 900,
height: 600,
webPreferences: { contextIsolation: true }
});
await win.loadFile("index.html");
const dsl = fs.readFileSync("flow.rfid", "utf8");
await injectDSL(win, dsl, { debug: true });
});DSL Spec (v0.1)
Program markers
STARTdanENDoptional (kalau tidak ada pun tetap diparse).
Variables
let password = "001001"
let dashboard = "index.html"Create hidden input bar
bar.input create.new hiddenBar {
transparent == true
autofocus == true
}Properties v0.1:
transparent:true|false|1|0autofocus:true|false|1|0maxInterval: number (ms), default 50requiredLen: number, default = panjang target compare (mis. password)
Sync + If/Else
sync hiddenBar {
if == password {
user.redirect "success.html"
} else {
sound.play "failed.mp3"
}
}Supported conditions v0.1:
if match { ... }-> compare input dengan variablepassword(kalau ada)if == password { ... }-> compare input dengan variablepasswordif == "001001" { ... }-> compare input dengan string literal
Supported commands v0.1:
user.redirect "file.html"sound.play "file.mp3"- Alias yang juga diterima:
user.direct == index.htmluser.direct to index.htmlplay.sound:failed.mp3
API
Browser
import { runDSL } from "rfid-keyboard/browser";
runDSL(dslText, { debug: true });Electron
import { injectDSL } from "rfid-keyboard/electron";
await injectDSL(win, dslText, { debug: true });Publish ke npm
- Update version:
npm version patch- Login:
npm login- Publish:
npm publish --access publicLicense
MIT
