e14e31a840
Closes the three known follow-ups of the Tills decision (venue-modules.md): - Activity log per till: `tillOfEvent(type, payload)` in @parking/shared (money events by payload till, other events by their owning module's till, everything else booth), applied by `/api/events?till=` in SQL and passed by the hub log, the Drawer "today" panel and the booth feed (history + live pushes). The events route admits a role that holds a module feed permission without event:read and returns only that module's event types — the live-socket rule. - Booth Z-report: `chargesByModuleMinor` sums the chargeLines on the till's payments by module; the ticket bucket excludes them (Bileta = parking only); printed "Lavazh (në biletë)" only when any was taken. The wash till's slip prints "Lavazh:". - Printer role `wash-desk`: the wash till's Z-report and vouchers print there, falling back to the booth printer; nothing falls back to the desk. `printerRoleOf()` is the one reading of the role field (the entry/booth loaders treated any non-booth role as an entry dispenser). Footer label "at wash desk". Also: `GET /api/carwash/settings` opens to carwash:read OR site:read (new requireAnyPermission) — the Wash operator job could not load the desk's category and service pickers. Tests for all four; wiki (shift, printer-roles-failover, venue-modules, log) updated. Claude-Session: https://claude.ai/code/session_01FWncR69HgGPuei1dLrW3cU
34 lines
1.2 KiB
TypeScript
34 lines
1.2 KiB
TypeScript
// @parking/devices — device-agnostic adapters + the driver registry that lets
|
|
// an admin select between supported devices at first-run setup.
|
|
//
|
|
// See wiki/concepts/device-adapter-pattern.md and device-registry.md.
|
|
|
|
export * from "./interfaces.js";
|
|
export * from "./registry.js";
|
|
export { setDeviceLogSink, type DeviceLogSink } from "./drivers/common.js";
|
|
// Built-in drivers: the registrar plus the individual driver objects (used by
|
|
// hardware test scripts and any direct/programmatic device access).
|
|
export {
|
|
registerBuiltinDrivers,
|
|
dingtianDriver,
|
|
stubAccessDriver,
|
|
wiegandReaderDriver,
|
|
tcpipReaderDriver,
|
|
dingtianQrReaderDriver,
|
|
hikvisionDriver,
|
|
dahuaDriver,
|
|
rongtaDriver,
|
|
escposDriver,
|
|
} from "./drivers/index.js";
|
|
export { isPrinter, type PrinterRole } from "./drivers/printer-rongta.js";
|
|
// Albanian human date/time for printed slips (receipts, tickets, shift Z-report),
|
|
// kept in one place so all printed output formats dates identically.
|
|
export { stamp as formatStampSq } from "./drivers/printer-escpos.js";
|
|
export {
|
|
orderForRole,
|
|
printWithFailover,
|
|
printerRoleOf,
|
|
NoPrinterAvailableError,
|
|
type PrinterInstance,
|
|
} from "./printer-routing.js";
|