A push can succeed server-side (session created) with nowhere to actually deliver to — the backend's pushNavigate() already distinguishes this via a delivered:false return (see device-stream.js), but nothing in the extension read it: every surface just said "Sent" regardless. Confirmed live on the dev stack 2026-10-01 — the registered dev tablet hadn't heartbeated in a month, so a push looked successful but nothing happened. Now every send path (injected buttons' fast path + manual picker, popup's fast path + manual picker) shows an amber "tablet isn't connected right now" warning when delivered is false. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| icons | ||
| options | ||
| popup | ||
| background.js | ||
| content-script.js | ||
| manifest.json | ||
| newbook-auth.js | ||
| README.md | ||
Send to Check-In Tablet
Standalone Chrome extension — deliberately separate from chrome-newbook-assistant
(see project_checkin memory's "Standalone push extension" decision). Its one job:
detect a NewBook booking page and push that booking to a physical check-in tablet
running the tablet-checkin app.
How it works
- Detection: a background service worker watches for NewBook booking pages
(
bookings_view/<id>,bookings_edit/<id>,bookings_checkin/<id>— confirmed real URLs, 2026-09-01) and shows a badge on the toolbar icon when one's open. The SPA-navigation handling (webNavigation.onHistoryStateUpdated) is lifted directly fromchrome-newbook-assistant/background.js(~/laptop-archive) — already proven against real NewBook navigation, not guessed here. - Popup: click the toolbar icon → shows the detected booking number, a device picker (busy tablets shown disabled), and a "Send to Check-In Tablet" button.
- Row-injected button: on NewBook's "due for arrival" list
(
bookings_lists_checkin), a content script adds a "Send to Tablet" button under each row's own Check In button, with an inline device picker. Row detection and the booking-ID extraction are built from a real sample row the user provided (2026-09-01, seeproject_checkinmemory) — deliberately doesn't rely on anyidattribute from NewBook's own markup, since its Check In button reuses the sameidacross every row (generic_button_1), only class/attribute selectors scoped per row. AMutationObserverre-scans for new rows since this page refreshes its table via AJAX without a full reload. - NewBook login indicator: the popup shows whether the browser looks logged into
NewBook (cookie-based check, also lifted from
chrome-newbook-assistant'sAuthManager.checkNewBookAuth). This is a UX signal only — it does not authorize anything. The actual push call authenticates with a terminal API key (below), not the NewBook cookie. - Auth: the push call itself is authorized by a terminal API key, generated from
tablet-checkin's own Terminals admin page (
admincapability) and pasted into this extension's Settings page. This mirrors the same trust model already used for the tablets themselves — hotel-owned hardware gets a device-level credential, not a per-user login. Seeproject_checkinmemory's "Extension auth" section for the full reasoning.
Setup
- Deploy
tablet-checkinand note its base URL. - In tablet-checkin, go to Terminals (requires
admincapability) → create a terminal (e.g. "Reception PC 1") → copy the key shown (only shown once). - Load this extension unpacked:
chrome://extensions→ Developer mode → Load unpacked → select this folder. - Click the extension icon → Open Settings (or right-click the icon → Options) → enter the tablet-checkin base URL and the terminal key → Save → Test connection.
Known TODOs before this is production-ready
- Row-detection selectors on
bookings_lists_checkinare built from a single sample row (2026-09-01) — robust in principle (class/attribute-based, not relying on NewBook's non-unique ids), but only actually tested against one row's markup so far. Worth confirming against a live page with multiple/varied rows (different booking statuses, group bookings, etc.) before relying on it daily. host_permissionsinmanifest.jsononly covers the NewBook domains (needed for the cookie-detection API) — tablet-checkin's own backend host isn't declared there since its production URL isn't fixed yet. Cross-originfetch()calls from the popup/options pages generally work regardless, but add the real host once known if CORS issues show up.- Icons are placeholder-generated (simple crimson square + gold arrow, matching tablet-checkin's theme color) — replace if a proper design is wanted.
- Not yet published anywhere (Chrome Web Store or otherwise) — currently load-unpacked
only, meaning it needs manually installing on every reception PC. tablet-checkin's own
Settings page has a download link (a bundled copy of this source, zipped on request) as
of 2026-09-01 — keep
backend/extension-src/in that repo in sync with this folder, they are not currently the same copy.