A scoped typing indicator: created via client.typing(...), which fires the
start request immediately (without awaiting it — a start failure surfaces at
the next interaction with the session). Disposal — await using, or an
explicit stop() — clears the indicator.
Delivering a message clears the indicator natively on the recipient's
device, so after each sendMessage the session renews it (best-effort — a
failed renewal never fails the send). Net effect: the indicator persists
for the whole block and only the disposal actually stops it.
Best-effort teardown: [Symbol.asyncDispose] never throws, so a failure to
clear the indicator can't mask an error thrown inside the block. There is
no keep-alive; the recipient's device may drop a stale indicator on its own
during a very long pause.
A scoped typing indicator: created via
client.typing(...), which fires the start request immediately (without awaiting it — a start failure surfaces at the next interaction with the session). Disposal —await using, or an explicitstop()— clears the indicator.Delivering a message clears the indicator natively on the recipient's device, so after each
sendMessagethe session renews it (best-effort — a failed renewal never fails the send). Net effect: the indicator persists for the whole block and only the disposal actually stops it.Best-effort teardown:
[Symbol.asyncDispose]never throws, so a failure to clear the indicator can't mask an error thrown inside the block. There is no keep-alive; the recipient's device may drop a stale indicator on its own during a very long pause.