Save the installer choice as shareReceiptsSMB, recreate the share when it is missing, and show the live smb:// address on the receipts page.
Co-authored-by: George Lambert <marchon@gmail.com>
The status-item class was never registered, so the tray treated a failed setup as success. Smoke now fails closed until the class exists.
Co-authored-by: George Lambert <marchon@gmail.com>
Load AppKit on the main thread, log why the tray would exit, and fall back to an AppKit status item if NSApplication run returns. Open Receipts uses the status URL. Installers can share that folder read-only over SMB.
Co-authored-by: George Lambert <marchon@gmail.com>
The tray and AirDrop helper now live in Verae NetPrint.app so notifications can start, /api/stamp uses the same client as Print-Job and refuses mock receipts, and the default printer name includes the hostname with an mDNS rename when that name is taken.
Co-authored-by: George Lambert <marchon@gmail.com>
The arm64 pkg and the Swift AirDrop helper are built on a macos-14 runner, then checked with pkgutil and installer. Receipts move to /Users/Shared/Verae Receipts, and port 631 is bound only on LAN addresses.
Co-authored-by: George Lambert <marchon@gmail.com>
Linux CI has a Swift compiler that cannot import AppKit. The menu-bar app opens the share sheet itself when verae-airdrop is not in the package.
Co-authored-by: George Lambert <marchon@gmail.com>
The menu-bar app, not the root daemon, opens the AirDrop share sheet for each finished job when the setting is on. The unsigned arm64 package installs the daemon and LaunchAgent, and Darwin DNSServiceRegister advertises the _universal and _print subtypes.
Co-authored-by: George Lambert <marchon@gmail.com>
POST /api/stamp runs the print pipeline and responds with the certificate, or a zip of the original, the certificate, and the receipt. The receipts page links an iPhone shortcut, and mDNS advertises _verae._tcp without a second IPP name.
Co-authored-by: George Lambert <marchon@gmail.com>
After a job is stored as completed, email the certificate, the original, and the receipt summary. A mail failure is logged and retried, and it does not fail the print. The SMTP password stays in DPAPI or a root-only file. Phones on Private and Domain networks can open /receipts for the stamped PDF.
Co-authored-by: George Lambert <marchon@gmail.com>
DnsServiceRegister stays the only owner of the _ipp._tcp instance. The shared UDP responder answers subtype PTRs only, so mDNS no longer renames a second copy to Name(1). The IPP port listens on IPv4 and on [::] with IPV6_V6ONLY, and the firewall rules allow fe80::/10, so a Mac connect to the host's link-local address completes.
Co-authored-by: George Lambert <marchon@gmail.com>
DnsServiceRegister publishes only the primary _ipp._tcp name. A shared UDP 5353 socket answers subtype PTRs that point at that name, plus SRV, TXT, and address records. PWG RaS2 headers are big-endian, IPP advertises letter and A4 media-col, Print-Job reads Content-Length after 100 Continue, and the tray starts once behind a mutex.
Co-authored-by: George Lambert <marchon@gmail.com>
Windows DnsServiceRegister now registers the Bonjour service-type form and the RFC subtype name so a Mac browse of _ipp._tcp,_universal can see the printer. document-format-supported matches the TXT pdl list, including JPEG. Job ids persist in next-job and job-N directories. The service log is written and flushed even when stderr fails. The tray is started by Task Scheduler or Explorer so setup is not its parent.
Co-authored-by: George Lambert <marchon@gmail.com>
A silent Windows setup copied verae-print.exe while VeraeNetPrint and the tray still had the files open, skipped the locked copies, and left the old binary to reject the new flags. launch-tray on that binary then started a second server. Stop and wait, then copy, and abort if a file is still locked. macOS bootouts the LaunchDaemon before the payload is copied, and Debian stops the unit from preinst. launch-tray only starts the tray.
Co-authored-by: George Lambert <marchon@gmail.com>
VeraeNetPrint had no UDP sockets because Dnscache owns port 5353 and the bind error never reached a log or the status API. Register with DnsServiceRegister first, fall back to a shared UDP socket, write %ProgramData%\Verae\logs\netprint.log, and surface mDNS errors on /api/v1/status. The installer also starts the tray for the logged-in user, and Public networks plus a local queue stay off unless opted in.
Co-authored-by: George Lambert <marchon@gmail.com>
Use 8632 when 631 is taken, install standalone Windows and macOS builds beside the driver instead of over it, open the LAN firewall ports, and give silent NSIS dialogs a default plus an install log.
Co-authored-by: George Lambert <marchon@gmail.com>
IPP Everywhere jobs reuse the existing Verae stamp path. Standalone installers and an off-by-default driver option share one service, config, and login-time tray, which talks to a loopback control API.
Co-authored-by: George Lambert <marchon@gmail.com>
- auth.PasswordForgot / auth.PasswordReset (+ httptest tests); ErrResetUnavailable
on 404/401/405/5xx so dialogs offer https://customer.verae.ai/portal/
- keyflow_gui: 'Forgot password?' on the password step and after a failed sign-in
- Windows: Forgot password? link, forgot/reset/unavailable forms
- bump HelperVersion, deb and pkg default VERSION to 0.3.4
- promptForFilename setting (default true; env VERAE_PROMPT_FOR_FILENAME),
'verae-print config --prompt-for-filename', last Save As folder in
~/.verae/state.json
- Windows helper: common file dialog (PDF filter, overwrite prompt, topmost
owner) before stamping; macOS printer path: choose file name (NSSavePanel)
via 'stamp -prompt-name -title'; cancel discards the job (no stamp/credit)
- job.Options.OutPath: original saved at the chosen path, certificate and
.verae.json next to it with the chosen base name (never overwritten)
- held jobs keep the chosen path (pendingMeta.OutPath)
- installer: 'Ask for a file name for each print' checkbox; removed the
'Open the user guide' finish-page checkbox; mac-key-setup asks too
- auth test no longer touches the real macOS keychain (VERAE_SKIP_KEYCHAIN)
- version 0.3.2
Parse completedAt/certificate/result from Verae API; enrich merkle via
POST /api/verify (blockIndex). Generate certificate with the same jsPDF
layout as register.html export. Preserve original filename (e.g. .html).
Match the official Verae Timestamp Registration Document layout (logo,
frames, field list, QR). Disclaimer: only the digest was submitted.
Lookup/footer use explorer.verae.ai — no mcp.verae.ai or “via MCP”.