UNPKG

@vincentt-sdks/campaign-sdk

Version:

Campaign SDK by Vincentt

421 lines (420 loc) 19.1 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { libConfig } from '../../config'; import { claimCoupon as claimCouponApi, createNewEntry, createNewFormEntry, createNewUser, createSession as createSessionApi, drawNewCoupon, getAllEntries, getCurrentUser, updateEntry as updateEntryApi, updateUser as updateUserApi, uploadNewImage, getSession as getSessionApi, fetchPrizeItemsByCampaign, claimCouponByPrizeItem as claimCouponByPrizeItemApi, createUserJourneyLogService, } from '../../services'; import { Logger } from '../../utils/logger'; import { parseUTMFromURL, getReferrer } from '../../utils/utm'; export class CampaignSDK { static initialize(opts) { CampaignSDK.instance = new CampaignSDK(opts); return CampaignSDK.instance; } static getInstance() { if (!CampaignSDK.instance) { throw new Error('Campaigns SDK not initialized. Please setup campaigns by calling `CampaignSDK.initialize` method first'); } return CampaignSDK.instance; } constructor(options) { this.options = options; this.storageKeyPrefix = libConfig.storageKeyPrefix; const { verbose, logPrefix, apiKey, campaignId } = this.options; this.apiKey = apiKey; this.campaignId = campaignId; this.logger = new Logger({ verbose, prefix: logPrefix }); this.logger.log('Campaign initialized, Campaign ID:', this.options.campaignId); } createWebUser() { return __awaiter(this, void 0, void 0, function* () { try { const user = yield createNewUser({ apiKey: this.apiKey, campaignId: this.campaignId, type: 'web', name: 'Web User', }); this.logger.log('user', user); localStorage.setItem(`${this.storageKeyPrefix}accessToken`, user.auth.accessToken); localStorage.setItem(`${this.storageKeyPrefix}refreshToken`, user.auth.refreshToken); return user; } catch (err) { this.logger.error(err); throw err; } }); } createExternalUser(_a) { return __awaiter(this, arguments, void 0, function* ({ name, type, externalUserId, }) { try { const user = yield createNewUser({ apiKey: this.apiKey, campaignId: this.campaignId, externalUserId, type, name, }); this.logger.log('user', user); localStorage.setItem(`${this.storageKeyPrefix}accessToken`, user.auth.accessToken); localStorage.setItem(`${this.storageKeyPrefix}refreshToken`, user.auth.refreshToken); return user; } catch (err) { this.logger.error(err); throw err; } }); } createUserWithToken(params) { return __awaiter(this, void 0, void 0, function* () { localStorage.setItem(`${this.storageKeyPrefix}accessToken`, params.accessToken); localStorage.setItem(`${this.storageKeyPrefix}refreshToken`, params.refreshToken); return this.getUser(); }); } getUser() { return __awaiter(this, void 0, void 0, function* () { const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; if (!accessToken || !refreshToken) { return null; } try { const user = yield getCurrentUser(accessToken, refreshToken, this.apiKey); this.logger.log('user', user); return user; } catch (err) { this.logger.error(err); throw err; } }); } updateUser(params) { return __awaiter(this, void 0, void 0, function* () { const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const user = yield updateUserApi(accessToken, refreshToken, this.apiKey, params); this.logger.log('user', user); return user; } catch (err) { this.logger.error(err); throw err; } }); } createEntry(params) { return __awaiter(this, void 0, void 0, function* () { if (!this.session) { throw new Error('Session not found. Please create a session before creating an entry'); } const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const entry = yield createNewEntry(accessToken, refreshToken, this.apiKey, Object.assign(Object.assign({}, params), { sessionId: this.session.id })); this.logger.log('entry', entry); return entry; } catch (err) { this.logger.error(err); throw err; } }); } fetchEntiesByCurrentUser(params) { return __awaiter(this, void 0, void 0, function* () { let fetchPage = params ? params.page : libConfig.defaultPage; let fetchPageSize = params ? params.pageSize : libConfig.defaultPageSize; const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const entries = yield getAllEntries(accessToken, refreshToken, this.apiKey, { page: fetchPage, pageSize: fetchPageSize, }); this.logger.log('entries', entries); return entries; } catch (err) { this.logger.error(err); throw err; } }); } updateEntry(params) { return __awaiter(this, void 0, void 0, function* () { if (!this.session) { throw new Error('Session not found. Please create a session before creating an entry'); } const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const entry = yield updateEntryApi(accessToken, refreshToken, this.apiKey, params.id, Object.assign(Object.assign({}, params), { sessionId: this.session.id })); this.logger.log('entry', entry); return entry; } catch (err) { this.logger.error(err); throw err; } }); } createFormEntry(params) { return __awaiter(this, void 0, void 0, function* () { const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const entry = yield createNewFormEntry(accessToken, refreshToken, this.apiKey, params); this.logger.log('entry', entry); return entry; } catch (err) { this.logger.error(err); throw err; } }); } uploadImage(params) { return __awaiter(this, void 0, void 0, function* () { const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const uploadedImage = yield uploadNewImage(accessToken, refreshToken, this.apiKey, params); this.logger.log('uploadedImage', uploadedImage); return uploadedImage; } catch (err) { this.logger.error(err); throw err; } }); } drawCoupon() { return __awaiter(this, void 0, void 0, function* () { var _a; const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const coupon = yield drawNewCoupon(accessToken, refreshToken, this.apiKey, { campaignId: this.campaignId, sessionId: ((_a = this.session) === null || _a === void 0 ? void 0 : _a.id) || '', }); this.logger.log('coupon', coupon); return coupon; } catch (err) { this.logger.error(err); throw err; } }); } fetchPrizeItems() { return __awaiter(this, void 0, void 0, function* () { const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const prizeItems = yield fetchPrizeItemsByCampaign(accessToken, refreshToken, this.apiKey, this.campaignId); this.logger.log('prizeItems', prizeItems); return prizeItems; } catch (err) { this.logger.error(err); throw err; } }); } createSession(params) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const utm = (_a = params === null || params === void 0 ? void 0 : params.utm) !== null && _a !== void 0 ? _a : parseUTMFromURL(); const referrer = (_b = params === null || params === void 0 ? void 0 : params.referrer) !== null && _b !== void 0 ? _b : getReferrer(); const sessionParams = { utm, referrer, }; const session = yield createSessionApi(accessToken, refreshToken, this.apiKey, sessionParams); this.session = session; return session; } catch (err) { this.logger.error(err); throw err; } }); } setSessionById(params) { return __awaiter(this, void 0, void 0, function* () { const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const session = yield getSessionApi(accessToken, refreshToken, this.apiKey, params.sessionId); if (!session) { throw new Error(`Session with ID ${params.sessionId} not found`); } this.session = session; return session; } catch (err) { this.logger.error(err); throw err; } }); } claimCoupon(params) { return __awaiter(this, void 0, void 0, function* () { var _a; if (!this.session) { throw new Error('Session not found. Please create a session before claiming a coupon'); } const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const result = yield claimCouponApi(accessToken, refreshToken, this.apiKey, Object.assign(Object.assign({}, params), { sessionId: (_a = this.session) === null || _a === void 0 ? void 0 : _a.id })); this.logger.log('result', result); return result; } catch (err) { this.logger.error(err); throw err; } }); } claimCouponByPrizeItem(params) { return __awaiter(this, void 0, void 0, function* () { var _a; if (!this.session) { throw new Error('Session not found. Please create a session before claiming a coupon'); } const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const result = yield claimCouponByPrizeItemApi(accessToken, refreshToken, this.apiKey, Object.assign(Object.assign({}, params), { sessionId: (_a = this.session) === null || _a === void 0 ? void 0 : _a.id })); this.logger.log('result', result); return result; } catch (err) { this.logger.error(err); throw err; } }); } createUserJourneyLog(params) { return __awaiter(this, void 0, void 0, function* () { var _a; if (!this.session) { throw new Error('Session not found. Please create a session before creating a user journey log'); } const accessToken = localStorage.getItem(`${this.storageKeyPrefix}accessToken`) || ''; const refreshToken = localStorage.getItem(`${this.storageKeyPrefix}refreshToken`) || ''; try { const userJourneyLog = yield createUserJourneyLogService(accessToken, refreshToken, this.apiKey, Object.assign(Object.assign({}, params), { sessionId: (_a = this.session) === null || _a === void 0 ? void 0 : _a.id })); this.logger.log('userJourneyLog', userJourneyLog); return userJourneyLog; } catch (err) { this.logger.error(err); throw err; } }); } } /** * Exposed function for making requests to public api routes */ export const createWebUser = () => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const user = yield campaign.createWebUser(); return user; }); export const createExternalUser = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const user = yield campaign.createExternalUser(params); return user; }); export const createUserWithToken = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const user = yield campaign.createUserWithToken(params); return user; }); export const getUser = () => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const user = yield campaign.getUser(); return user; }); export const updateUser = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const user = yield campaign.updateUser(params); return user; }); export const createEntry = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const entry = yield campaign.createEntry(params); return entry; }); export const updateEntry = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const entry = yield campaign.updateEntry(params); return entry; }); export const fetchEntriesByCurrentUser = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const entries = yield campaign.fetchEntiesByCurrentUser(params); return entries; }); export const createFormEntry = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const entry = yield campaign.createFormEntry(params); return entry; }); export const uploadImage = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const uploadedImage = yield campaign.uploadImage(params); return uploadedImage; }); export const drawCoupon = () => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const entry = yield campaign.drawCoupon(); return entry; }); export const createSession = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const session = yield campaign.createSession(params); return session; }); export const setSessionById = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const session = yield campaign.setSessionById(params); return session; }); export const claimCoupon = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const result = yield campaign.claimCoupon(params); return result; }); export const claimCouponByPrizeItem = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const result = yield campaign.claimCouponByPrizeItem(params); return result; }); export const fetchPrizeItems = () => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const prizeItems = yield campaign.fetchPrizeItems(); return prizeItems; }); export const createUserJourneyLog = (params) => __awaiter(void 0, void 0, void 0, function* () { const campaign = CampaignSDK.getInstance(); const userJourneyLog = yield campaign.createUserJourneyLog(params); return userJourneyLog; });