A TurboWarp extension with sandboxed Direct mode and a localhost Relay
mode for the Candy House Sesame Web API.
Bluetooth mode
Load dist/turbowarp-sesame.js with
Run extension without sandbox enabled, in Chrome or
Edge on desktop or Android.
Configure the keyholder URL and a device alias.
Pair by scanning an owner or manager sharing QR code
from the sesame app. Guest codes withhold half of the secret and cannot
work over Bluetooth.
Run the connect block straight after a click: the browser's device
chooser needs a recent user gesture.
The device secret never reaches TurboWarp. It stays in the keyholder page
on its own origin, which seals every frame before the extension writes it
to the lock.
Relay setup
Start @kubohiroya/keybroker on localhost.
Load dist/turbowarp-sesame.js with
Run extension without sandbox enabled. Browsers can
deny localhost access from TurboWarp's sandbox iframe.
Configure the Relay endpoint and device alias.
Pair using the one-time code printed by the Relay.
Relay mode keeps provider credentials out of the SB3 file. Credentials
written into Direct mode blocks are saved in the project and must not be
shared.
Remote commands
Lock, unlock, and toggle requests are disabled in the default build. They
can be enabled only by changing the build-time feature flag and
rebuilding. After any accepted command, fetch the status again to verify
the physical device.
Errors
API blocks return safe empty values when a request fails. Use
last Sesame error to inspect the failure.
All 18 blocks are documented below, including compatibility blocks and
blocks available through optional features. Select a block to read its
behavior, arguments, default values, and menu choices. Each block has a
permanent link.
configure Direct mode API key [API_KEY] UUID [UUID] secret key
[SECRET_KEY]
Selects Direct mode and keeps the Candy House credentials in memory
until they are cleared or the extension reloads.
Opens the keyholder window and waits for it. Run this from its own
click: opening a window and opening the Bluetooth chooser each need a
fresh user gesture.
Block type: COMMAND. Opcode: openKeyholder.
Permanent link
This block has no arguments.
pair Sesame by scanning its sharing QR code
Opens the keyholder so it can scan an owner or manager sharing QR code
from the sesame app. Guest codes cannot work over Bluetooth.
Block type: COMMAND. Opcode: pairBluetooth.
Permanent link
This block has no arguments.
connect to Sesame over Bluetooth
Opens the browser's device chooser and logs in. Run this straight
after a click, because the chooser needs a recent user gesture.
Block type: COMMAND. Opcode: connectBluetooth.
Permanent link
This block has no arguments.
Sesame Bluetooth connected?
Reports whether a Bluetooth session is logged in and usable.
Block type: BOOLEAN. Opcode: bluetoothConnected.
Permanent link
This block has no arguments.
when the Sesame state changes
Runs when the lock reports that it moved. Only Bluetooth reports this;
the cloud modes cannot.
Block type: HAT. Opcode: whenStateChanges.
Permanent link
This block has no arguments.
clear Sesame connection
Removes Direct credentials or the local Relay session held by the
running extension.
Block type: COMMAND. Opcode: clearCredentials.
Permanent link
This block has no arguments.
Sesame connection ready?
Reports whether Direct credentials or a paired Relay session are
currently held in memory.
Block type: BOOLEAN. Opcode: isConfigured.
Permanent link
This block has no arguments.
local Relay paired?
Reports whether the current Relay connection has an in-memory session
token.
Block type: BOOLEAN. Opcode: relayPaired.
Permanent link
This block has no arguments.
Sesame connection mode
Reports direct, relay, or not configured.
Block type: REPORTER. Opcode: connectionMode.
Permanent link
This block has no arguments.
Sesame status [FIELD]
Fetches one field from the current Sesame status.
Block type: REPORTER. Opcode: getStatusField.
Permanent link
With a compatible TurboWarp GUI, enable fixed-input forms to edit only
standard literal fields. Numbers use complete finite JSON number tokens;
menu fields use existing choices. Connected reporters and unavailable
fields stay read-only and are never evaluated. Saving an unchanged form
preserves exact existing raw values, including legacy spellings and
unknown choices. Invalid drafts stay in the same editing session;
cancel, project/target replacement, or block removal discards them.
Disabling the GUI feature flag restores native field editing. This form
does not run blocks, open network/audio/key/QR sessions, resolve names,
or edit Schema arguments. History page and length keep existing
truncation, clamping, and fallback behavior.