What you are looking for is a type of smart contract. But be aware, that smart contracts in Bitcoin are generally comprised of multiple transactions, rather than a single transaction confirmed in a block. You would need this initial transaction to "fund" the contract, and then further transactions that spend the outputs of the funding transaction, based on your conditions.
For example, your initial transaction can be written as to say:
"This money can be claimed by the recipient after a certain amount of time OR it can be reclaimed by me right now if I have some piece of provided information."
Now if the time period expires, it can be assumed that the recipient will create a transaction spending the outputs of the first, thus claiming the money. However, if the sender has this special information you speak of, he can spend the outputs immediately before the recipient gets a chance.
You can use either nLocktime
or OP_CHECKLOCKTIMEVERIFY
for the time restriction, and you can use Lightning Network style hash locks for "when this information is provided". Keep in mind this is just a simple example of what a potential smart contract solution would look like for you. You would certainly need to design your own to meet your own requirements.