Skip to content

Instantly share code, notes, and snippets.

@steven4354
Created December 14, 2020 05:20
Show Gist options
  • Save steven4354/42b0e10ec6785cb7e22229ce05b46eec to your computer and use it in GitHub Desktop.
Save steven4354/42b0e10ec6785cb7e22229ce05b46eec to your computer and use it in GitHub Desktop.
Refmonkey JS functions
import { setCookie, getCookie, getRef } from './refHandler'
import { postRequest, getRequest } from './request'
export default class RefMonkey {
static client(token) {
const refCode = getRef()
if (refCode) {
setCookie('ref', refCode, 60)
//register as link click
postRequest(token, `/click?ref_code=${refCode}`)
}
return getClient(token)
}
}
//TODO HANDLE USE CASES WHERE AN ERROR OCCURS OR THE SERVER RETURNS AN ERROR
//todo get a referrals data
//todo get an advocates data
function getClient(accessToken) {
/**
* add a referral to an advocate
*
* //todo automatically detect the refcode
* //todo figure out how to get the referral
* //probably when refmonkey gets init you store the ref in a cookie,as well as the accesstoken so that refmonkey should only be initiated in the entry file
* @param {*} identifier
* @param {*} refCode
*/
async function advocate(identifier) {
return await postRequest(accessToken, `/advocate?identifier=${identifier}`)
}
async function user(identifier, name) {
let refCode
if (getRef()) {
refCode = getRef()
} else {
refCode = getCookie('ref')
}
if (refCode) {
return await postRequest(accessToken, `/user?identifier=${identifier}&ref_code=${refCode}&name=${name}`)
} else {
return { success: false }
}
}
async function purchase(identifier, price, advocateReward, disableMultipleRewards = false) {
let refCode
if (getRef()) {
refCode = getRef()
} else {
refCode = getCookie('ref')
}
const advocateRewardParams = advocateReward ? `&advocate_reward=${advocateReward}` : ''
const refCodeParams = refCode ? `&ref_code=${refCode}` : ''
const disableMultipleRewardsParams = refCode ? `&disable_multiple_rewards=${disableMultipleRewards}` : ''
const priceValue = `&price=${price}`
let priceParams = price ? priceValue : ''
if (price === 0) {
priceParams = priceValue
}
return await postRequest(accessToken, `/purchase?identifier=${identifier}${advocateRewardParams}${priceParams}${refCodeParams}${disableMultipleRewardsParams}`)
}
async function reversePurchase(identifier) {
let refCode
if (getRef()) {
refCode = getRef()
} else {
refCode = getCookie('ref')
}
return await postRequest(accessToken, `/purchase/reverse?identifier=${identifier}`)
}
async function redeemReward(identifier, type) {
if (type === 'advocate') {
return await rewardAdvocate(identifier)
} else {
return await rewardReferral(identifier)
}
}
async function rewardAdvocate(identifier) {
return await postRequest(accessToken, `/reward/advocate?identifier=${identifier}`)
}
async function rewardReferral(identifier) {
return await postRequest(accessToken, `/reward/referral?identifier=${identifier}`)
}
/**
* get the referrals of an advocate
*
* @param {*} identifier
* @param {*} callback
*
*/
async function getReferrals(identifier, callback) {
const response = await getRequest(accessToken, `/referral/list?identifier=${identifier}`)
if (callback) {
callback(response.success, response.referrals)
}
return response
}
async function getPendingRewards(type, identifier, callback) {
const response = await getRequest(accessToken, `/reward/pending?type=${type}&identifier=${identifier}`)
if (callback) {
callback(response.success, response.pendingRewards)
}
return response
}
/**
*
* get the referral code of an advocate
* @param {*} identifier
* @param {*} callback
*
*/
async function getRefCode(identifier, callback) {
const response = await getRequest(accessToken, `/advocate/code?identifier=${identifier}`)
if (callback) {
callback(response.success, response.data)
}
return response
}
/**
*
* get the email of an advocate
* @param {*} identifier
* @param {*} callback
*
*/
async function getAdvocateEmail(identifier, callback) {
const response = await getRequest(accessToken, `/advocate-email?identifier=${identifier}`)
if (callback) {
callback(response.success, response.data)
}
return response
}
/**
*
* get the referral link of an advocate
* @param {*} identifier
* @param {*} url
* @param {*} callback
*
*/
async function getUrlFor(identifier, callback) {
const response = await getRequest(accessToken, `/advocate/code?identifier=${identifier}`)
if (callback) {
callback(response.success, response.data)
}
return response
}
return {
user,
getReferrals,
getRefCode,
getUrlFor,
purchase,
redeemReward,
getPendingRewards,
reversePurchase,
getAdvocateEmail,
advocate
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment