feature(key) add chaining