A take on ergonomic cancellation and timeout propagation in JavaScript inspired by the Go context package