UNPKG

@omneedia/client-js

Version:

Isomorphic Javascript client for Omneedia

283 lines 11.7 kB
"use strict"; 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()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const util_1 = require("./util"); const core_1 = require("@capacitor/core"); const browser_1 = require("@capacitor/browser"); const auth_api_1 = __importDefault(require("./auth_api")); class OmneediaAuth { constructor(ref, options) { this.tokenListener = null; this.session = this.getSession; this.ref = ref; this.api = new auth_api_1.default(this); this.tokenListener = setInterval(() => __awaiter(this, void 0, void 0, function* () { if ((0, util_1.isBrowser)()) { /** look storage */ let session = yield this.session().getUser(); if (!session) return; let refresh = localStorage.getItem('omneedia.auth.refresh_token'); if (!refresh) { localStorage.removeItem('omneedia.auth.token'); localStorage.removeItem('omneedia.auth.refresh_token'); return (location.href = `#new_token=${refresh}`); } let date = new Date(session.exp * 1000); if (date < new Date()) { let token = yield this.getNewToken(refresh); if (token === false) { localStorage.removeItem('omneedia.auth.token'); localStorage.removeItem('omneedia.auth.refresh_token'); return (location.href = `#new_token=${refresh}`); } localStorage.setItem('omneedia.auth.token', token); return (location.href = `#new_token=${refresh}`); } } }), 1000); } getNewToken(refresh_token) { return __awaiter(this, void 0, void 0, function* () { let { data } = yield this.ref.request.post(this.ref.PREFIX.AUTH + '/token?grant_type=refresh_token', { refresh_token: refresh_token, }); var response; if (data.err) response = false; else { response = data.access_token; } return response; }); } signInWithPassword(props) { return __awaiter(this, void 0, void 0, function* () { let { data } = yield this.ref.request.post(this.ref.PREFIX.AUTH + '/token?grant_type=password', { props, }); if (data.err) url = [`#error=${data.err}`]; else { var url = []; for (var el in data) url.push(`${el}=${data[el]}`); } location.href = '#' + url.join('&'); }); } signUp(props) { return __awaiter(this, void 0, void 0, function* () { let { data } = yield this.ref.request.post(this.ref.PREFIX.AUTH + '/signup', { props, }); if (data.err) url = [`#error=${data.err}`]; else { var url = []; for (var el in data) url.push(`${el}=${data[el]}`); } if (data.waiting) url = [`#waiting`]; location.href = '#' + url.join('&'); }); } signInWithProvider(props) { var _a; return __awaiter(this, void 0, void 0, function* () { // generateId :: Integer -> String const generateId = (len) => { const dec2hex = (dec) => { return dec.toString(16).padStart(2, '0'); }; var arr = new Uint8Array((len || 40) / 2); window.crypto.getRandomValues(arr); return Array.from(arr, dec2hex).join(''); }; if ((_a = props.config) === null || _a === void 0 ? void 0 : _a.callback) { return (location.href = `${this.ref.URI}${this.ref.PREFIX.AUTH}/authorize?provider=${props.provider}&callback=${props.config.callback}`); } const platform = yield core_1.Capacitor.getPlatform(); const getSession = (uid) => __awaiter(this, void 0, void 0, function* () { let { data } = yield this.ref.request.post(this.ref.PREFIX.AUTH + '/session', { sid: uid, }); if (data === null || data === void 0 ? void 0 : data.uri) { location.hash = data.uri; browser_1.Browser.close(); } else setTimeout(() => { getSession(uid); }, 1000); }); if (platform === 'ios' || platform === 'android') { const uid = generateId(); getSession(uid); browser_1.Browser.open({ url: `${this.ref.URI}${this.ref.PREFIX.AUTH}/authorize?provider=${props.provider}&sid=${uid}`, }); } else { var win = window.open(`${this.ref.URI}${this.ref.PREFIX.AUTH}/authorize?provider=${props.provider}`, '_blank'); window.addEventListener('message', (event) => { return (location.hash = event.data); }, false); } return true; }); } updateUser(props) { return __awaiter(this, void 0, void 0, function* () { const urlParams = new URLSearchParams(window.location.search); const token = urlParams.get('token'); if (token) props.token = token; let { data } = yield this.ref.request.put(this.ref.PREFIX.AUTH + '/user', props); return data; }); } onAuthStateChange(fn) { if ((0, util_1.isBrowser)()) { var HashChange = () => { if (location.href.indexOf('access_token') > -1) { var params = (0, util_1.getHashParams)(); window.location.hash = ''; localStorage.setItem('omneedia.auth.token', params.access_token); localStorage.setItem('omneedia.auth.refresh_token', params.refresh_token); return fn('SIGNED_IN', params); } if (location.href.indexOf('#waiting') > -1) { window.location.hash = ''; return fn('WAITING_FOR_CONFIRMATION', {}); } if (location.href.indexOf('#logout') > -1) { localStorage.removeItem('omneedia.auth.token'); localStorage.removeItem('omneedia.auth.refresh_token'); window.location.hash = ''; return fn('SIGNED_OUT', {}); } if (location.href.indexOf('#error') > -1) { var token = decodeURIComponent(location.href).split('#error=')[1]; fn('ERROR', token); window.location.hash = ''; return false; } if (location.href.indexOf('#new_token') > -1) { var token = decodeURIComponent(location.href).split('#new_token=')[1]; fn('REFRESH_TOKEN', localStorage.getItem('omneedia.auth.token')); window.location.hash = ''; return false; } if (localStorage.getItem('omneedia.auth.token')) { fn('AUTHENTICATED', localStorage.getItem('omneedia.auth.token')); } }; window.addEventListener('hashchange', HashChange); window.addEventListener('load', HashChange); HashChange(); } } resetPasswordForEmail(props) { return __awaiter(this, void 0, void 0, function* () { let { data } = yield this.ref.request.post(this.ref.PREFIX.AUTH + '/recover', props); if (data.err) url = [`error=${data.err}`]; else { var url = []; for (var el in data) url.push(`${el}=${data[el]}`); } if (data.waiting) url = [`waiting`]; location.href = '#' + url.join('&'); }); } signInWithEmail(props) { return __awaiter(this, void 0, void 0, function* () { let { data } = yield this.ref.request.post(this.ref.PREFIX.AUTH + '/magiclink', props); if (data.err) url = [`error=${data.err}`]; else { var url = []; for (var el in data) url.push(`${el}=${data[el]}`); } if (data.waiting) url = [`waiting`]; location.href = '#' + url.join('&'); }); } getSession() { var session = false; if (localStorage.getItem('omneedia.auth.token')) { let token = localStorage.getItem('omneedia.auth.token'); session = (0, util_1.parseJwt)(token); } return { getUser: () => { return session; }, }; } getUser(token) { return __awaiter(this, void 0, void 0, function* () { if (token) { try { token = (0, util_1.urlBase64Decode)(token); return token; } catch (e) { return null; } } let { data } = yield this.ref.request.get(this.ref.PREFIX.AUTH + '/user'); if (data === false) { localStorage.removeItem('omneedia.auth.token'); localStorage.removeItem('omneedia.auth.refresh_token'); } return data; }); } isAuthenticated() { if ((0, util_1.isBrowser)()) { if (window.localStorage.getItem('omneedia.auth.token')) return true; else return false; } } signOut() { return __awaiter(this, void 0, void 0, function* () { if ((0, util_1.isBrowser)()) { yield this.ref.request.get(this.ref.PREFIX.AUTH + '/signout'); /*location.href = this.ref.omneediaUrl + this.ref.PREFIX.AUTH + '/signout?redirect_to=' + location.href + '#logout'*/ location.hash = '#logout'; return; } else { yield this.ref.request.get(this.ref.PREFIX.AUTH + '/signout'); //location.hash = '#logout' } }); } } exports.default = OmneediaAuth; //# sourceMappingURL=auth.js.map