Skip to content

Instantly share code, notes, and snippets.

@Teepheh-Git
Last active September 26, 2024 08:29
Show Gist options
  • Save Teepheh-Git/4b2adaab3b3c0c6aa3cf88126f88de8b to your computer and use it in GitHub Desktop.
Save Teepheh-Git/4b2adaab3b3c0c6aa3cf88126f88de8b to your computer and use it in GitHub Desktop.
SAME and Cross BRAND REDEM
//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