Last active
September 26, 2024 08:29
-
-
Save Teepheh-Git/4b2adaab3b3c0c6aa3cf88126f88de8b to your computer and use it in GitHub Desktop.
SAME and Cross BRAND REDEM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//SAME BRAND | |
let isConnected = magicWeb3; | |
while (!isConnected) { | |
await delay(1000); // Wait for 1 second | |
isConnected = magicWeb3; | |
} | |
const { email: connectedEmail } = await magic.user.getInfo(); | |
//IF THE PERSISTED USER INFO IS NOT THE INFO OF THE USER TRYING TO PERFORM THE FUNCTION logout and try to login again | |
if (email !== connectedEmail) { | |
await magic.user.logout(); | |
await magic.auth.loginWithEmailOTP({ email }); | |
let isConnected = magicWeb3; | |
while (!isConnected) { | |
await delay(1000); // Wait for 1 second | |
isConnected = magicWeb3; | |
} | |
const accounts = await magicWeb3.eth.getAccounts(); | |
//if the user accounts is not found - update it on the console | |
if (accounts.length === 0) { | |
return { taskId: "no accounts found" }; | |
} | |
const userAccount = accounts[0]; | |
// console.log(userAccount, "user account is this"); | |
const provider = await magic.wallet.getProvider(); | |
const web3Provider = new ethers.providers.Web3Provider(provider); | |
const signer = web3Provider.getSigner(userAccount); | |
const loggedInUserInfo = await magic.user.getInfo().then((info: any) => info); | |
//=============================================== DO THE REST HERE========================================================== | |
setSpendLoading(true); | |
setSpendingSteps(1); | |
const { data, from, hash, nonce, r, s, v }: sendTransactionData = await same_brand_reward_redeption_magic( | |
reward_address, | |
reward_amount, | |
signer, | |
RUNTIME_URL | |
); | |
const { data: couponData } = await axios.post( | |
`${reqURL.replace("/cost/request/in-app", "")}/order/coupon`, | |
{ orderId }, | |
{ | |
headers: { | |
Authorization: `Bearer ${meApiKey}`, | |
}, | |
} | |
); | |
// console.log(data, from, hash, nonce, r, s, v, "from rsv"); | |
setSpendingSteps(2); | |
const { data: spendData }: any = await axios.post( | |
`${reqURL.replace("/cost/request/in-app", "")}/reward/push-transaction`, | |
{ | |
params: { | |
from, | |
nonce, | |
data, | |
r, | |
s, | |
v, | |
hash, | |
}, | |
rewardId, | |
}, | |
{ | |
headers: { | |
Authorization: `Bearer ${meApiKey}`, | |
}, | |
} | |
); | |
setSpendingSteps(3); | |
return { taskId: hash }; | |
//CROSS BRAND | |
let isConnected = magicWeb3; | |
while (!isConnected) { | |
await delay(1000); // Wait for 1 second | |
isConnected = magicWeb3; | |
} | |
const { email: connectedEmail } = await magic.user.getInfo(); | |
//IF THE PERSISTED USER INFO IS NOT THE INFO OF THE USER TRYING TO PERFORM THE FUNCTION logout and try to login again | |
if (email !== connectedEmail) { | |
await magic.user.logout(); | |
await magic.auth.loginWithEmailOTP({ email }); | |
let isConnected = magicWeb3; | |
while (!isConnected) { | |
await delay(1000); // Wait for 1 second | |
isConnected = magicWeb3; | |
} | |
const accounts = await magicWeb3.eth.getAccounts(); | |
//if the user accounts is not found - update it on the console | |
if (accounts.length === 0) { | |
return { taskId: "no accounts found" }; | |
} | |
const userAccount = accounts[0]; | |
// console.log(userAccount, "user account is this"); | |
const provider = await magic.wallet.getProvider(); | |
const web3Provider = new ethers.providers.Web3Provider(provider); | |
const signer = web3Provider.getSigner(userAccount); | |
const loggedInUserInfo = await magic.user.getInfo().then((info: any) => info); | |
//=============================================== DO THE REST HERE========================================================== | |
setSpendLoading(true); | |
const spendInfo = { | |
rewardAtHand, | |
targettedReward, | |
amountOfRewardAtHand, | |
expectedAmountOfTargetedReward, | |
}; | |
const { | |
data: spend_reward_magic_data, | |
from, | |
hash, | |
nonce, | |
r, | |
s, | |
v, | |
}: sendTransactionData = await spend_reward_magic( | |
spendInfo.rewardAtHand, | |
spendInfo.amountOfRewardAtHand as BigNumber, | |
OPEN_REWARD_DIAMOND, | |
signer, | |
RUNTIME_URL | |
); | |
const { data: couponData } = await axios.post( | |
`${reqURL.replace("/cost/request/in-app", "")}/order/coupon`, | |
{ orderId }, | |
{ | |
headers: { | |
Authorization: `Bearer ${meApiKey}`, | |
}, | |
} | |
); | |
setSpendingSteps(1); | |
const { data: spendData }: any = await axios.post( | |
`${reqURL.replace("/cost/request/in-app", "")}/reward/push-transaction`, | |
{ | |
params: { | |
from, | |
nonce, | |
data: spend_reward_magic_data, | |
r, | |
s, | |
v, | |
hash, | |
}, | |
rewardId, | |
}, | |
{ | |
headers: { | |
Authorization: `Bearer ${meApiKey}`, | |
}, | |
} | |
); | |
let vaultParams: VaultPermitParams = { | |
owner: spendData?.data?.owner, | |
count: spendData?.data?.count, | |
globalHash: spendData?.data?.globalHash, | |
prefixedHash: spendData?.data?.prefixedHash, | |
r: spendData?.data?.sig?.r, | |
s: spendData?.data?.sig?.s, | |
v: spendData?.data?.sig?.v, | |
reward: spendData?.data?.reward, | |
spender: spendData?.data?.spender, | |
value: spendData?.data?.value, | |
}; | |
setSpendingSteps(2); | |
try { | |
const datum: any = await usersServiceWithPermit.spendRewardsOnAnotherBrandWithVaultPermit( | |
spendInfo, | |
vaultParams, | |
OPEN_REWARD_DIAMOND, | |
JSON_RPC_URL | |
); | |
const relayInput = { | |
from: loggedInUserInfo.publicAddress, | |
data: datum.data, | |
to: OPEN_REWARD_DIAMOND, | |
}; | |
setSpendingSteps(3); | |
const { taskId }: { taskId: string } = await relay( | |
relayInput, | |
signer, | |
meApiKey, | |
reqURL, | |
GELATO_API_KEY, | |
JSON_RPC_URL, | |
CHAIN_ID, | |
OPEN_REWARD_DIAMOND, | |
costPayerId, | |
debug | |
); | |
return { taskId, spendData }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment