@omneedia/client-js
Version:
Isomorphic Javascript client for Omneedia
330 lines • 13.1 kB
JavaScript
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 { parseJwt, getHashParams, isBrowser, urlBase64Decode } from './util';
import { Capacitor } from '@capacitor/core';
import { Browser } from '@capacitor/browser';
export default class OmneediaAuth {
constructor(ref, options) {
this.tokenListener = null;
this.session = this.getSession;
this.options = options;
this.ref = ref;
this.tokenListener = setInterval(() => __awaiter(this, void 0, void 0, function* () {
if (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}`);
}
}
else {
let session = yield this.session().getUser();
if (!session)
return;
}
}), 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;
});
}
_setUserData(data) {
this.options.cookies.setAll([
{
name: 'omneedia.auth.token',
value: data.access_token,
lifetime: 60 * 3600 * 8,
domain: '',
path: '/',
sameSite: 'lax',
},
]);
}
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 (isBrowser()) {
if (data.err)
url = [`#error=${data.err}`];
else {
var url = [];
for (var el in data)
url.push(`${el}=${data[el]}`);
}
location.href = '#' + url.join('&');
}
else {
if (data.err)
return { data: { user: null, session: null }, error: { message: data.err } };
this._setUserData(data);
return this.getUser(data.access_token);
}
});
}
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 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 (isBrowser()) {
if (data === null || data === void 0 ? void 0 : data.uri) {
location.hash = data.uri;
Browser.close();
}
else
setTimeout(() => {
console.log('x');
getSession(uid);
}, 1000);
}
if (platform === 'ios' || platform === 'android') {
const uid = generateId();
getSession(uid);
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
return false;
});
}
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 (isBrowser()) {
var HashChange = () => {
if (location.href.indexOf('access_token') > -1) {
var params = 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();
}
else {
// cookie based auth
}
}
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 (isBrowser()) {
if (localStorage.getItem('omneedia.auth.token')) {
let token = localStorage.getItem('omneedia.auth.token');
session = parseJwt(token);
}
}
else {
// use cookie
}
return {
getUser: () => {
return session;
},
};
}
getUser(token) {
return __awaiter(this, void 0, void 0, function* () {
if (token) {
if (isBrowser()) {
try {
token = urlBase64Decode(token);
return token;
}
catch (e) {
return null;
}
}
else {
return { data: { user: urlBase64Decode(token), session: token }, error: null };
}
}
let { data } = yield this.ref.request.get(this.ref.PREFIX.AUTH + '/user');
if (data === false) {
if (isBrowser()) {
localStorage.removeItem('omneedia.auth.token');
localStorage.removeItem('omneedia.auth.refresh_token');
}
else {
// use cookie
this.options.cookies.deleteAll();
}
}
if (isBrowser())
return data;
else
return { data: { user: data }, error: null };
});
}
isAuthenticated() {
if (isBrowser()) {
if (window.localStorage.getItem('omneedia.auth.token'))
return true;
else
return false;
}
}
signOut() {
return __awaiter(this, void 0, void 0, function* () {
if (isBrowser()) {
yield this.ref.request.get(this.ref.PREFIX.AUTH + '/signout');
location.hash = '#logout';
return;
}
else {
yield this.ref.request.get(this.ref.PREFIX.AUTH + '/signout');
this.options.cookies.setAll([
{
name: 'omneedia.auth.token',
value: '',
lifetime: 0,
domain: '',
path: '/',
sameSite: 'lax',
},
]);
}
});
}
}
//# sourceMappingURL=auth.js.map