Let’s start with a basic use case example. Alice bought a bicycle for €240.
She will use the bike for a year and will give it to her daughter afterwards.
First, we create an asset registering the bicycle:

After a year, she decides it’s time to transfer the bicycle to her daughter Carly.
However, Alice wants to maintain the right over the bike so she can possibly sell it. If she would transfer the bicycle to Carly, she won’t be able to do this.
So, Alice needs a crypto conditions that defines that she or her daughter can sign the TRANSFER transaction to a possible buyer.

We need to define a threshold as well. This defines how many persons have to sign the transaction to TRANSFER it.
In this case, we define two subconditions with the public keys from Alice and Carly. Next, we set the threshold to one.
This means that just one of the subconditions has to sign the transaction to transfer it.
This can be the mother Alice, or Carly herself.

// Create condition for Alice and CarlyletsubConditionFrom=driver.Transaction.makeEd25519Condition(alice.publicKey,false)letsubConditionTo=driver.Transaction.makeEd25519Condition(carly.publicKey,false)// Create condition object with threshold and subconditionsletcondition=driver.Transaction.makeThresholdCondition(1,[subConditionFrom,subConditionTo])// Generate output with condition addedletoutput=driver.Transaction.makeOutput(condition)// Add Carly to the output.public_keys field so she is the owneroutput.public_keys=[carly.publicKey]lettransaction=driver.Transaction.makeTransferTransaction([{tx:txCreateAliceSimpleSigned,output_index:0}],[output],{'meta':'Transfer to new user with conditions'});// Add alice as previous ownertransaction.inputs[0].owners_before=[alice.publicKey]// Because the addition of crypto conditions, the id for the transaction has to be regenerateddeletetransaction.idtransaction.id=sha3.sha3_256.create().update(driver.Transaction.serializeTransactionIntoCanonicalString(transaction)).hex()// Alice has to sign this transfer because she is still the owner of the created assetletsignedCryptoConditionTx=driver.Transaction.signTransaction(transaction,alice.privateKey)

As you can see, we need to generate a new transactionId because we have added crypto conditions.
We do this with the js-sha3 package, you need to install this package through npm: