เอกสาร Queue Manager

Queue Manager — สเปกผลิตภัณฑ์ (Contract)

ระบบหน้ารอคิวเสมือน (virtual waiting room) และจัดการ traffic ระดับเดียวกับ CrowdHandler และ Queue-it

Stack (กำหนดตายตัว — ห้ามเปลี่ยน)

แบบลงลายเซ็นเมื่อkey และกฎ
Legacyเป็นค่า defaultHMAC key คือ SECRET ไม่มี kid รับได้ทุกจุดประสงค์ที่เนื้อหา (payload) ผ่านการตรวจ
v2TOKEN_SIGN_V2=1key แยกตามจุดประสงค์ = HKDF-SHA256(SECRET, salt ว่าง, info เป็น qm:visitor, qm:monitor, qm:session หรือ qm:operator, 32 byte) payload มี kid = hex(HKDF-SHA256(SECRET, salt ว่าง, qm:kid, 4 byte)) kid ที่ไม่รู้จักถูกปฏิเสธ ใช้ข้ามจุดประสงค์ไม่ได้เด็ดขาด

SECRET_PREVIOUS ทำให้ SECRET ตัวก่อนยังตรวจผ่าน (ทั้งสองแบบ) ระหว่างเปลี่ยน key token ใหม่ใช้ SECRET ตัวตรวจของ operator ใช้กฎเดียวกัน และไม่เคยถูกลดจาก v2 ลงมา ดู OPERATIONS.md หัวข้อ Signing keys and rotating SECRET

ถูกปฏิเสธเมื่อเกิน TOKEN_MAX_AGE_SEC (default 86400 ต่ำสุด 60) นับจาก iat หรือเมื่อ iat อยู่ในอนาคตเกิน 60 วินาที token ไม่ได้ เก็บสถานะว่ากำลังรอหรือผ่านแล้ว สถานะนั้นอยู่ใน engine โดยใช้ r+n เป็นตัวค้น จุดประสงค์อื่น (monitor, session, operator) มี payload ของตัวเอง และใน v2 ไม่มีทางถูกรับเป็น visitor token

ความเป็นเจ้าของไฟล์ (builder แต่ละคนอยู่ในเลนของตัวเอง)

Pathเจ้าของ
server.js, lib/engine.js, lib/roomstore/, lib/token.jsผู้สร้าง engine
public/waiting.html (+ CSS/JS ในไฟล์)ผู้สร้างหน้าของผู้เข้าชม
public/admin.html (+ CSS/JS ในไฟล์)ผู้สร้าง dashboard
snippet/qm.js, INTEGRATION.mdผู้สร้างส่วนเชื่อมต่อ
test/*.test.jsผู้สร้างแต่ละคนเพิ่มของตัวเอง
PROGRESS.html, SPEC.mdผู้ประสานงาน (orchestrator) เท่านั้น

แนวคิดหลัก

HTTP API (contract — UI builder เขียนโค้ดตามนี้)

นโยบาย versioning

ทุก route ด้านล่างเรียกได้ที่ /api/v1/<route> (แบบหลัก ตรึงเวอร์ชันไว้) และ ที่ /api/<route> ที่ไม่มีเวอร์ชัน (ชื่อเรียกอีกชื่อที่ใช้ได้ตลอดไป ใช้ handler เดียวกัน ตอบเหมือนกันทุก byte) snippet ถูกติดตั้งบน origin ของคนอื่น ซึ่งอัปเกรดพร้อม server นี้ไม่ได้ มันจึงเรียก /api/v1/* และถ้า server ตอบ 404 กับ prefix นี้ จะถอยไปใช้ /api/* หนึ่งครั้งต่อหน้า

Visitor

Edge check (ใช้โดย snippet)

clearToken: true แปลว่าให้ลบ token และกุญแจที่เก็บไว้ก่อน redirect เพราะ body อาจมี sess บน room ที่มีนโยบาย origin /api/check (และ OPTIONS ของมัน) จะส่ง Access-Control-Allow-Origin ให้เฉพาะ origin ของ browser ที่อยู่ใน tag origins ของ room (tagOrigins ถ้าไม่มีใช้ returnOrigins บวก origin ของ targetUrl) ดู INTEGRATION.md หัวข้อ The door-session key

Targeting (public ใช้โดย edge connector)

Install check และ connector registry (public)

Health (public ไม่ต้อง authenticate)

ผู้ใช้ทำอะไรได้
viewer และ monitor tokenอ่าน (rooms, events, metrics, health, security, reports, สถานะ alert, audit) แต่ monitor token อ่าน audit, visitors และ targeting ไม่ได้
operatorทุกอย่างของ viewer + เปลี่ยนสถานะคิวและการตั้งค่า room
owner/ADMIN_KEYทุกอย่างของ operator + จัดการ operator, ลบ room และสั่งหยุด server

เกณฑ์คุณภาพ (สิ่งที่ critic ใช้ตัดสิน)