@digigov/auth
Advanced tools
Comparing version 1.1.4-0edebf87 to 1.1.4-d57821ba
@@ -1,7 +0,5 @@ | ||
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; | ||
import _extends from "@babel/runtime/helpers/extends"; | ||
import React, { createContext, useReducer, useMemo } from 'react'; | ||
import { readSession } from '@digigov/auth/localSession'; | ||
import { authReducer } from '@digigov/auth/authReducer'; | ||
export var DEFAULT_STATE = { | ||
import React, { createContext, useReducer, useMemo } from "react"; | ||
import { readSession } from "@digigov/auth/localSession"; | ||
import { authReducer } from "@digigov/auth/authReducer"; | ||
const DEFAULT_STATE = { | ||
user: null, | ||
@@ -14,46 +12,42 @@ authenticated: null, | ||
error: null, | ||
navigate: function navigate(url) { | ||
throw new Error("set a custom navigate function to handle URL ".concat(url)); | ||
navigate: (url) => { | ||
throw new Error(`set a custom navigate function to handle URL ${url}`); | ||
}, | ||
transformUserObject: function transformUserObject(user) { | ||
transformUserObject: (user) => { | ||
return user; | ||
} | ||
}; | ||
export var AuthContext = /*#__PURE__*/createContext({ | ||
state: _extends({ | ||
config: {} | ||
}, DEFAULT_STATE), | ||
const AuthContext = createContext({ | ||
state: { | ||
config: {}, | ||
...DEFAULT_STATE | ||
}, | ||
// eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
dispatch: function dispatch() { | ||
return undefined; | ||
} | ||
dispatch: (..._args) => void 0 | ||
}); | ||
export function AuthProvider(_ref) { | ||
var _ref$config = _ref.config, | ||
config = _ref$config === void 0 ? {} : _ref$config, | ||
navigate = _ref.navigate, | ||
transformUserObject = _ref.transformUserObject, | ||
children = _ref.children; | ||
var _useReducer = useReducer(authReducer, _extends({}, DEFAULT_STATE, { | ||
config: config, | ||
navigate: navigate, | ||
transformUserObject: transformUserObject | ||
}), function (state) { | ||
return _extends({}, state, readSession(), { | ||
processing: false | ||
}); | ||
}), | ||
_useReducer2 = _slicedToArray(_useReducer, 2), | ||
state = _useReducer2[0], | ||
dispatch = _useReducer2[1]; | ||
var data = useMemo(function () { | ||
return { | ||
state: state, | ||
dispatch: dispatch | ||
}; | ||
function AuthProvider({ | ||
config = {}, | ||
navigate, | ||
transformUserObject, | ||
children | ||
}) { | ||
const [state, dispatch] = useReducer( | ||
authReducer, | ||
{ ...DEFAULT_STATE, config, navigate, transformUserObject }, | ||
(state2) => { | ||
return { ...state2, ...readSession(), processing: false }; | ||
} | ||
); | ||
const data = useMemo(() => { | ||
return { state, dispatch }; | ||
}, [state, dispatch]); | ||
return /*#__PURE__*/React.createElement(AuthContext.Provider, { | ||
value: data | ||
}, children); | ||
return /* @__PURE__ */ React.createElement(AuthContext.Provider, { value: data }, children); | ||
} | ||
export default AuthProvider; | ||
var AuthProvider_default = AuthProvider; | ||
export { | ||
AuthContext, | ||
AuthProvider, | ||
DEFAULT_STATE, | ||
AuthProvider_default as default | ||
}; | ||
//# sourceMappingURL=AuthProvider.js.map |
@@ -1,8 +0,8 @@ | ||
import _extends from "@babel/runtime/helpers/extends"; | ||
import { updateSession } from '@digigov/auth/localSession'; | ||
export function authReducer(state, action) { | ||
var update = updateSession; | ||
import { updateSession } from "@digigov/auth/localSession"; | ||
function authReducer(state, action) { | ||
const update = updateSession; | ||
switch (action.type) { | ||
case 'login': | ||
return update(_extends({}, state, { | ||
case "login": | ||
return update({ | ||
...state, | ||
user: action.user, | ||
@@ -13,5 +13,6 @@ id: action.id, | ||
error: null | ||
})); | ||
case 'code': | ||
return update(_extends({}, state, { | ||
}); | ||
case "code": | ||
return update({ | ||
...state, | ||
code: action.code, | ||
@@ -22,5 +23,6 @@ token: null, | ||
error: null | ||
})); | ||
case 'token': | ||
return update(_extends({}, state, { | ||
}); | ||
case "token": | ||
return update({ | ||
...state, | ||
token: action.token, | ||
@@ -30,5 +32,6 @@ authenticated: false, | ||
error: null | ||
})); | ||
case 'logout': | ||
return update(_extends({}, state, { | ||
}); | ||
case "logout": | ||
return update({ | ||
...state, | ||
user: null, | ||
@@ -41,12 +44,14 @@ token: null, | ||
error: null | ||
})); | ||
case 'authenticating': | ||
return update(_extends({}, state, { | ||
}); | ||
case "authenticating": | ||
return update({ | ||
...state, | ||
processing: true, | ||
error: null, | ||
authenticated: false | ||
})); | ||
case 'error': | ||
console.error('Error occured on auth procedure', action.error); | ||
return update(_extends({}, state, { | ||
}); | ||
case "error": | ||
console.error("Error occured on auth procedure", action.error); | ||
return update({ | ||
...state, | ||
code: null, | ||
@@ -59,8 +64,13 @@ processing: false, | ||
id: false | ||
})); | ||
}); | ||
default: | ||
console.error(action); | ||
throw Error('Invalid Auth action.'); | ||
throw Error("Invalid Auth action."); | ||
} | ||
} | ||
export default authReducer; | ||
var authReducer_default = authReducer; | ||
export { | ||
authReducer, | ||
authReducer_default as default | ||
}; | ||
//# sourceMappingURL=authReducer.js.map |
@@ -1,19 +0,40 @@ | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
var _typeof = require("@babel/runtime/helpers/typeof"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var AuthProvider_exports = {}; | ||
__export(AuthProvider_exports, { | ||
AuthContext: () => AuthContext, | ||
AuthProvider: () => AuthProvider, | ||
DEFAULT_STATE: () => DEFAULT_STATE, | ||
default: () => AuthProvider_default | ||
}); | ||
exports.AuthContext = void 0; | ||
exports.AuthProvider = AuthProvider; | ||
exports["default"] = exports.DEFAULT_STATE = void 0; | ||
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); | ||
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); | ||
var _react = _interopRequireWildcard(require("react")); | ||
var _localSession = require("@digigov/auth/localSession"); | ||
var _authReducer = require("@digigov/auth/authReducer"); | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } | ||
var DEFAULT_STATE = exports.DEFAULT_STATE = { | ||
module.exports = __toCommonJS(AuthProvider_exports); | ||
var import_react = __toESM(require("react")); | ||
var import_localSession = require("@digigov/auth/localSession"); | ||
var import_authReducer = require("@digigov/auth/authReducer"); | ||
const DEFAULT_STATE = { | ||
user: null, | ||
@@ -26,46 +47,42 @@ authenticated: null, | ||
error: null, | ||
navigate: function navigate(url) { | ||
throw new Error("set a custom navigate function to handle URL ".concat(url)); | ||
navigate: (url) => { | ||
throw new Error(`set a custom navigate function to handle URL ${url}`); | ||
}, | ||
transformUserObject: function transformUserObject(user) { | ||
transformUserObject: (user) => { | ||
return user; | ||
} | ||
}; | ||
var AuthContext = exports.AuthContext = /*#__PURE__*/(0, _react.createContext)({ | ||
state: (0, _extends2["default"])({ | ||
config: {} | ||
}, DEFAULT_STATE), | ||
const AuthContext = (0, import_react.createContext)({ | ||
state: { | ||
config: {}, | ||
...DEFAULT_STATE | ||
}, | ||
// eslint-disable-next-line @typescript-eslint/no-unused-vars | ||
dispatch: function dispatch() { | ||
return undefined; | ||
} | ||
dispatch: (..._args) => void 0 | ||
}); | ||
function AuthProvider(_ref) { | ||
var _ref$config = _ref.config, | ||
config = _ref$config === void 0 ? {} : _ref$config, | ||
navigate = _ref.navigate, | ||
transformUserObject = _ref.transformUserObject, | ||
children = _ref.children; | ||
var _useReducer = (0, _react.useReducer)(_authReducer.authReducer, (0, _extends2["default"])({}, DEFAULT_STATE, { | ||
config: config, | ||
navigate: navigate, | ||
transformUserObject: transformUserObject | ||
}), function (state) { | ||
return (0, _extends2["default"])({}, state, (0, _localSession.readSession)(), { | ||
processing: false | ||
}); | ||
}), | ||
_useReducer2 = (0, _slicedToArray2["default"])(_useReducer, 2), | ||
state = _useReducer2[0], | ||
dispatch = _useReducer2[1]; | ||
var data = (0, _react.useMemo)(function () { | ||
return { | ||
state: state, | ||
dispatch: dispatch | ||
}; | ||
function AuthProvider({ | ||
config = {}, | ||
navigate, | ||
transformUserObject, | ||
children | ||
}) { | ||
const [state, dispatch] = (0, import_react.useReducer)( | ||
import_authReducer.authReducer, | ||
{ ...DEFAULT_STATE, config, navigate, transformUserObject }, | ||
(state2) => { | ||
return { ...state2, ...(0, import_localSession.readSession)(), processing: false }; | ||
} | ||
); | ||
const data = (0, import_react.useMemo)(() => { | ||
return { state, dispatch }; | ||
}, [state, dispatch]); | ||
return /*#__PURE__*/_react["default"].createElement(AuthContext.Provider, { | ||
value: data | ||
}, children); | ||
return /* @__PURE__ */ import_react.default.createElement(AuthContext.Provider, { value: data }, children); | ||
} | ||
var _default = exports["default"] = AuthProvider; | ||
var AuthProvider_default = AuthProvider; | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
AuthContext, | ||
AuthProvider, | ||
DEFAULT_STATE | ||
}); | ||
//# sourceMappingURL=AuthProvider.js.map |
@@ -1,16 +0,31 @@ | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var authReducer_exports = {}; | ||
__export(authReducer_exports, { | ||
authReducer: () => authReducer, | ||
default: () => authReducer_default | ||
}); | ||
exports.authReducer = authReducer; | ||
exports["default"] = void 0; | ||
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); | ||
var _localSession = require("@digigov/auth/localSession"); | ||
module.exports = __toCommonJS(authReducer_exports); | ||
var import_localSession = require("@digigov/auth/localSession"); | ||
function authReducer(state, action) { | ||
var update = _localSession.updateSession; | ||
const update = import_localSession.updateSession; | ||
switch (action.type) { | ||
case 'login': | ||
return update((0, _extends2["default"])({}, state, { | ||
case "login": | ||
return update({ | ||
...state, | ||
user: action.user, | ||
@@ -21,5 +36,6 @@ id: action.id, | ||
error: null | ||
})); | ||
case 'code': | ||
return update((0, _extends2["default"])({}, state, { | ||
}); | ||
case "code": | ||
return update({ | ||
...state, | ||
code: action.code, | ||
@@ -30,5 +46,6 @@ token: null, | ||
error: null | ||
})); | ||
case 'token': | ||
return update((0, _extends2["default"])({}, state, { | ||
}); | ||
case "token": | ||
return update({ | ||
...state, | ||
token: action.token, | ||
@@ -38,5 +55,6 @@ authenticated: false, | ||
error: null | ||
})); | ||
case 'logout': | ||
return update((0, _extends2["default"])({}, state, { | ||
}); | ||
case "logout": | ||
return update({ | ||
...state, | ||
user: null, | ||
@@ -49,12 +67,14 @@ token: null, | ||
error: null | ||
})); | ||
case 'authenticating': | ||
return update((0, _extends2["default"])({}, state, { | ||
}); | ||
case "authenticating": | ||
return update({ | ||
...state, | ||
processing: true, | ||
error: null, | ||
authenticated: false | ||
})); | ||
case 'error': | ||
console.error('Error occured on auth procedure', action.error); | ||
return update((0, _extends2["default"])({}, state, { | ||
}); | ||
case "error": | ||
console.error("Error occured on auth procedure", action.error); | ||
return update({ | ||
...state, | ||
code: null, | ||
@@ -67,8 +87,13 @@ processing: false, | ||
id: false | ||
})); | ||
}); | ||
default: | ||
console.error(action); | ||
throw Error('Invalid Auth action.'); | ||
throw Error("Invalid Auth action."); | ||
} | ||
} | ||
var _default = exports["default"] = authReducer; | ||
var authReducer_default = authReducer; | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
authReducer | ||
}); | ||
//# sourceMappingURL=authReducer.js.map |
@@ -1,42 +0,68 @@ | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var hooks_exports = {}; | ||
__export(hooks_exports, { | ||
disableLoginNextHook: () => disableLoginNextHook, | ||
makeRequireUserTypeHook: () => makeRequireUserTypeHook, | ||
useLoginPortal: () => useLoginPortal, | ||
useRequireAnonymous: () => useRequireAnonymous, | ||
useRequireUser: () => useRequireUser, | ||
useToken: () => useToken, | ||
useUser: () => useUser | ||
}); | ||
exports.disableLoginNextHook = void 0; | ||
exports.makeRequireUserTypeHook = makeRequireUserTypeHook; | ||
exports.useLoginPortal = useLoginPortal; | ||
exports.useRequireUser = exports.useRequireAnonymous = void 0; | ||
exports.useToken = useToken; | ||
exports.useUser = useUser; | ||
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); | ||
var _react = require("react"); | ||
var _auth = _interopRequireDefault(require("@digigov/auth/")); | ||
var _localSession = require("@digigov/auth/localSession"); | ||
module.exports = __toCommonJS(hooks_exports); | ||
var import_react = require("react"); | ||
var import_auth = __toESM(require("@digigov/auth/")); | ||
var import_localSession = require("@digigov/auth/localSession"); | ||
function useToken() { | ||
return (0, _auth["default"])().token; | ||
return (0, import_auth.default)().token; | ||
} | ||
function useUser() { | ||
return (0, _auth["default"])().user; | ||
return (0, import_auth.default)().user; | ||
} | ||
function makeRequireUserTypeHook(checkUserType, onError) { | ||
return function () { | ||
var auth = (0, _auth["default"])(); | ||
var user = auth.user; | ||
var navigate = auth.navigate; | ||
var location = window.location; | ||
var currentUrl = location.pathname + location.search; | ||
(0, _react.useEffect)(function () { | ||
if (auth.token) auth.revalidateToken(function () { | ||
return onError ? onError(navigate, currentUrl) : navigate('/'); | ||
}); | ||
return () => { | ||
const auth = (0, import_auth.default)(); | ||
const user = auth.user; | ||
const navigate = auth.navigate; | ||
const location = window.location; | ||
const currentUrl = location.pathname + location.search; | ||
(0, import_react.useEffect)(() => { | ||
if (auth.token) | ||
auth.revalidateToken( | ||
() => onError ? onError(navigate, currentUrl) : navigate("/") | ||
); | ||
}, []); | ||
(0, _react.useEffect)(function () { | ||
(0, import_react.useEffect)(() => { | ||
if (!auth.processing && (!auth.token || !auth.authenticated || auth.user && !checkUserType(user))) { | ||
if (onError) { | ||
localStorage.setItem('login-next', currentUrl); | ||
localStorage.setItem("login-next", currentUrl); | ||
onError(navigate, currentUrl); | ||
} else { | ||
navigate('/'); | ||
navigate("/"); | ||
} | ||
@@ -48,26 +74,21 @@ } | ||
} | ||
var useRequireUser = exports.useRequireUser = makeRequireUserTypeHook(function (user) { | ||
return !!user; | ||
}); | ||
var disableLoginNextHook = exports.disableLoginNextHook = function disableLoginNextHook() { | ||
const useRequireUser = makeRequireUserTypeHook((user) => !!user); | ||
const disableLoginNextHook = () => { | ||
function setDisableLoginNext(bool) { | ||
if (bool) { | ||
window.localStorage.setItem('disable-login-next', 'true'); | ||
window.localStorage.setItem("disable-login-next", "true"); | ||
} else { | ||
window.localStorage.removeItem('disable-login-next'); | ||
window.localStorage.removeItem("disable-login-next"); | ||
} | ||
} | ||
var disableLoginNext = !!window.localStorage.getItem('disable-login-next'); | ||
const disableLoginNext = !!window.localStorage.getItem("disable-login-next"); | ||
return [disableLoginNext, setDisableLoginNext]; | ||
}; | ||
var useRequireAnonymous = exports.useRequireAnonymous = function useRequireAnonymous() { | ||
var auth = (0, _auth["default"])(); | ||
var params = new URLSearchParams(window.location.search); | ||
var _disableLoginNextHook = disableLoginNextHook(), | ||
_disableLoginNextHook2 = (0, _slicedToArray2["default"])(_disableLoginNextHook, 2), | ||
disableLoginNext = _disableLoginNextHook2[0], | ||
setDisableLoginNext = _disableLoginNextHook2[1]; | ||
var isNewTab = window.history.length === 1; | ||
var nextParam = (0, _react.useMemo)(function () { | ||
return params.get('next') || ''; | ||
const useRequireAnonymous = () => { | ||
const auth = (0, import_auth.default)(); | ||
const params = new URLSearchParams(window.location.search); | ||
const [disableLoginNext, setDisableLoginNext] = disableLoginNextHook(); | ||
const isNewTab = window.history.length === 1; | ||
const nextParam = (0, import_react.useMemo)(() => { | ||
return params.get("next") || ""; | ||
}, [window.location.search]); | ||
@@ -79,41 +100,49 @@ if (nextParam) { | ||
} else { | ||
window.localStorage.setItem('login-next', nextParam); | ||
window.localStorage.setItem("login-next", nextParam); | ||
} | ||
} | ||
}; | ||
function useLoginPortal(_ref) { | ||
var loginUrl = _ref.loginUrl, | ||
_ref$size = _ref.size, | ||
size = _ref$size === void 0 ? { | ||
width: 600, | ||
height: 400 | ||
} : _ref$size, | ||
_ref$position = _ref.position, | ||
position = _ref$position === void 0 ? { | ||
left: 200, | ||
top: 200 | ||
} : _ref$position, | ||
title = _ref.title; | ||
(0, _react.useEffect)(function () { | ||
function useLoginPortal({ | ||
loginUrl, | ||
size = { width: 600, height: 400 }, | ||
position = { left: 200, top: 200 }, | ||
title | ||
}) { | ||
(0, import_react.useEffect)(() => { | ||
if (loginUrl) { | ||
var url = new URL(loginUrl, document.baseURI).href; | ||
var urlParams = new URLSearchParams(window.location.search); | ||
var nextURL = urlParams.get('next') || ''; | ||
var externalWindow = window.open(url, '', "width=".concat(size.width, ",height=").concat(size.height, ",left=").concat(position.left, ",top=").concat(position.top)); | ||
window.localStorage.setItem('popup-login', '1'); | ||
externalWindow.document.title = title || 'Login'; | ||
// this is a hack since we can't track a popup close event from different domain | ||
var checkWindowInterval = setInterval(function () { | ||
const url = new URL(loginUrl, document.baseURI).href; | ||
const urlParams = new URLSearchParams(window.location.search); | ||
const nextURL = urlParams.get("next") || ""; | ||
const externalWindow = window.open( | ||
url, | ||
"", | ||
`width=${size.width},height=${size.height},left=${position.left},top=${position.top}` | ||
); | ||
window.localStorage.setItem("popup-login", "1"); | ||
externalWindow.document.title = title || "Login"; | ||
const checkWindowInterval = setInterval(() => { | ||
try { | ||
if (externalWindow === null || externalWindow.closed) { | ||
clearInterval(checkWindowInterval); | ||
window.localStorage.removeItem('popup-login'); | ||
if ((0, _localSession.readSession)().authenticated) { | ||
window.localStorage.removeItem("popup-login"); | ||
if ((0, import_localSession.readSession)().authenticated) { | ||
window.location.href = new URL(nextURL, document.baseURI).href; | ||
} | ||
} | ||
} catch (err) {} | ||
} catch (err) { | ||
} | ||
}, 500); | ||
} | ||
}, [loginUrl]); | ||
} | ||
} | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
disableLoginNextHook, | ||
makeRequireUserTypeHook, | ||
useLoginPortal, | ||
useRequireAnonymous, | ||
useRequireUser, | ||
useToken, | ||
useUser | ||
}); | ||
//# sourceMappingURL=hooks.js.map |
319
cjs/index.js
@@ -1,222 +0,110 @@ | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
var _typeof = require("@babel/runtime/helpers/typeof"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
var _exportNames = { | ||
TOKEN_REVALIDATION_INTERVAL: true, | ||
useAuth: true | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
exports["default"] = exports.TOKEN_REVALIDATION_INTERVAL = void 0; | ||
exports.useAuth = useAuth; | ||
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); | ||
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); | ||
var _react = require("react"); | ||
var _AuthProvider = require("@digigov/auth/AuthProvider"); | ||
Object.keys(_AuthProvider).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
if (key in exports && exports[key] === _AuthProvider[key]) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return _AuthProvider[key]; | ||
} | ||
}); | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default")); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var src_exports = {}; | ||
__export(src_exports, { | ||
TOKEN_REVALIDATION_INTERVAL: () => TOKEN_REVALIDATION_INTERVAL, | ||
default: () => src_default, | ||
useAuth: () => useAuth | ||
}); | ||
var _hooks = require("@digigov/auth/hooks"); | ||
Object.keys(_hooks).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
if (key in exports && exports[key] === _hooks[key]) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return _hooks[key]; | ||
} | ||
}); | ||
}); | ||
var _TokenLogin = require("@digigov/auth/TokenLogin"); | ||
Object.keys(_TokenLogin).forEach(function (key) { | ||
if (key === "default" || key === "__esModule") return; | ||
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return; | ||
if (key in exports && exports[key] === _TokenLogin[key]) return; | ||
Object.defineProperty(exports, key, { | ||
enumerable: true, | ||
get: function get() { | ||
return _TokenLogin[key]; | ||
} | ||
}); | ||
}); | ||
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } | ||
var TOKEN_REVALIDATION_INTERVAL = exports.TOKEN_REVALIDATION_INTERVAL = 1; // seconds | ||
module.exports = __toCommonJS(src_exports); | ||
var import_react = require("react"); | ||
var import_AuthProvider = require("@digigov/auth/AuthProvider"); | ||
var import_hooks = require("@digigov/auth/hooks"); | ||
__reExport(src_exports, require("@digigov/auth/AuthProvider"), module.exports); | ||
__reExport(src_exports, require("@digigov/auth/hooks"), module.exports); | ||
__reExport(src_exports, require("@digigov/auth/TokenLogin"), module.exports); | ||
const TOKEN_REVALIDATION_INTERVAL = 1; | ||
function useAuth() { | ||
var _useContext = (0, _react.useContext)(_AuthProvider.AuthContext), | ||
state = _useContext.state, | ||
dispatch = _useContext.dispatch; | ||
var navigate = state.navigate; | ||
var transformUserObject = state.transformUserObject; | ||
var location = window.location; | ||
const { state, dispatch } = (0, import_react.useContext)(import_AuthProvider.AuthContext); | ||
const navigate = state.navigate; | ||
const transformUserObject = state.transformUserObject; | ||
const location = window.location; | ||
function login(id, data) { | ||
dispatch({ | ||
type: 'login', | ||
user: data, | ||
id: id | ||
}); | ||
dispatch({ type: "login", user: data, id }); | ||
} | ||
function logout(next) { | ||
var _disableLoginNextHook = (0, _hooks.disableLoginNextHook)(), | ||
_disableLoginNextHook2 = (0, _slicedToArray2["default"])(_disableLoginNextHook, 2), | ||
disableLoginNext = _disableLoginNextHook2[0], | ||
setDisableLoginNext = _disableLoginNextHook2[1]; | ||
const [disableLoginNext, setDisableLoginNext] = (0, import_hooks.disableLoginNextHook)(); | ||
if (disableLoginNext) { | ||
setDisableLoginNext(false); | ||
} | ||
if (typeof next === 'function') { | ||
if (typeof next === "function") { | ||
next(); | ||
} else { | ||
navigate(next || '/'); | ||
navigate(next || "/"); | ||
} | ||
dispatch({ | ||
type: 'logout', | ||
next: next | ||
}); | ||
dispatch({ type: "logout", next }); | ||
} | ||
function authenticate(token) { | ||
dispatch({ | ||
type: 'token', | ||
token: token | ||
}); | ||
dispatch({ type: "token", token }); | ||
} | ||
function resolveTokenFromCode(code) { | ||
dispatch({ | ||
type: 'code', | ||
code: code | ||
}); | ||
dispatch({ type: "code", code }); | ||
} | ||
function handleCode(_x, _x2) { | ||
return _handleCode.apply(this, arguments); | ||
async function handleCode(state2, dispatch2) { | ||
const code = state2.code; | ||
dispatch2({ type: "authenticating" }); | ||
try { | ||
const resp = await fetch(state2.config.tokenURL + "?code=" + code); | ||
const token = await resp.json(); | ||
authenticate(token.token); | ||
} catch (err) { | ||
console.error("Error occured in code handling", err); | ||
dispatch2({ type: "error", error: err }); | ||
} | ||
} | ||
function _handleCode() { | ||
_handleCode = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(state, dispatch) { | ||
var code, resp, _token; | ||
return _regeneratorRuntime().wrap(function _callee$(_context) { | ||
while (1) switch (_context.prev = _context.next) { | ||
case 0: | ||
code = state.code; | ||
dispatch({ | ||
type: 'authenticating' | ||
}); | ||
_context.prev = 2; | ||
_context.next = 5; | ||
return fetch(state.config.tokenURL + '?code=' + code); | ||
case 5: | ||
resp = _context.sent; | ||
_context.next = 8; | ||
return resp.json(); | ||
case 8: | ||
_token = _context.sent; | ||
authenticate(_token.token); | ||
_context.next = 16; | ||
break; | ||
case 12: | ||
_context.prev = 12; | ||
_context.t0 = _context["catch"](2); | ||
console.error('Error occured in code handling', _context.t0); | ||
dispatch({ | ||
type: 'error', | ||
error: _context.t0 | ||
}); | ||
case 16: | ||
case "end": | ||
return _context.stop(); | ||
async function handleToken(state2, dispatch2, onError) { | ||
const token = state2.token || ""; | ||
if (state2.config.userDataURL) { | ||
const userUpdatedAt = localStorage.getItem("userUpdatedAt"); | ||
if (userUpdatedAt && !state2.user) { | ||
const revalidatedBefore = (Date.now() - parseInt(userUpdatedAt)) / 1e3; | ||
if (revalidatedBefore < TOKEN_REVALIDATION_INTERVAL) { | ||
console.log( | ||
`Token validated before ${revalidatedBefore}. Aborting request.` | ||
); | ||
return; | ||
} | ||
}, _callee, null, [[2, 12]]); | ||
})); | ||
return _handleCode.apply(this, arguments); | ||
} | ||
function handleToken(_x3, _x4, _x5) { | ||
return _handleToken.apply(this, arguments); | ||
} | ||
function _handleToken() { | ||
_handleToken = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(state, dispatch, onError) { | ||
var token, userUpdatedAt, revalidatedBefore, data, _user; | ||
return _regeneratorRuntime().wrap(function _callee2$(_context2) { | ||
while (1) switch (_context2.prev = _context2.next) { | ||
case 0: | ||
token = state.token || ''; | ||
if (!state.config.userDataURL) { | ||
_context2.next = 31; | ||
break; | ||
} | ||
userUpdatedAt = localStorage.getItem('userUpdatedAt'); | ||
if (!(userUpdatedAt && !state.user)) { | ||
_context2.next = 8; | ||
break; | ||
} | ||
revalidatedBefore = (Date.now() - parseInt(userUpdatedAt)) / 1000; | ||
if (!(revalidatedBefore < TOKEN_REVALIDATION_INTERVAL)) { | ||
_context2.next = 8; | ||
break; | ||
} | ||
console.log("Token validated before ".concat(revalidatedBefore, ". Aborting request.")); | ||
return _context2.abrupt("return"); | ||
case 8: | ||
localStorage.setItem('userUpdatedAt', "".concat(Date.now())); | ||
dispatch({ | ||
type: 'authenticating' | ||
}); | ||
_context2.prev = 10; | ||
_context2.next = 13; | ||
return fetch(state.config.userDataURL, { | ||
headers: { | ||
Authorization: "Token ".concat(token) | ||
} | ||
}); | ||
case 13: | ||
data = _context2.sent; | ||
if (!(data.status === 404 || data.status === 401 || !data.ok)) { | ||
_context2.next = 20; | ||
break; | ||
} | ||
console.error('Error in fetch userDataURL response', data); | ||
dispatch({ | ||
type: 'error', | ||
error: data | ||
}); | ||
logout(onError); | ||
_context2.next = 24; | ||
break; | ||
case 20: | ||
_context2.next = 22; | ||
return data.json(); | ||
case 22: | ||
_user = _context2.sent; | ||
if (transformUserObject) { | ||
login(token, transformUserObject(_user)); | ||
} else { | ||
login(token, _user); | ||
} | ||
case 24: | ||
_context2.next = 31; | ||
break; | ||
case 26: | ||
_context2.prev = 26; | ||
_context2.t0 = _context2["catch"](10); | ||
console.error('Error in fetch userDataURL', _context2.t0); | ||
logout(onError); | ||
dispatch({ | ||
type: 'error', | ||
error: _context2.t0 | ||
}); | ||
case 31: | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
localStorage.setItem("userUpdatedAt", `${Date.now()}`); | ||
dispatch2({ type: "authenticating" }); | ||
try { | ||
const data = await fetch(state2.config.userDataURL, { | ||
headers: { | ||
Authorization: `Token ${token}` | ||
} | ||
}); | ||
if (data.status === 404 || data.status === 401 || !data.ok) { | ||
console.error("Error in fetch userDataURL response", data); | ||
dispatch2({ type: "error", error: data }); | ||
logout(onError); | ||
} else { | ||
const user = await data.json(); | ||
if (transformUserObject) { | ||
login(token, transformUserObject(user)); | ||
} else { | ||
login(token, user); | ||
} | ||
} | ||
}, _callee2, null, [[10, 26]]); | ||
})); | ||
return _handleToken.apply(this, arguments); | ||
} catch (err) { | ||
console.error("Error in fetch userDataURL", err); | ||
logout(onError); | ||
dispatch2({ type: "error", error: err }); | ||
} | ||
} | ||
} | ||
@@ -226,3 +114,3 @@ function revalidateToken(onError) { | ||
} | ||
(0, _react.useEffect)(function () { | ||
(0, import_react.useEffect)(() => { | ||
if (!state.processing && state.token && !state.user) { | ||
@@ -235,6 +123,4 @@ state.processing = true; | ||
}, [state.token]); | ||
(0, _react.useEffect)(function () { | ||
(0, import_react.useEffect)(() => { | ||
if (state.code && !state.token && !state.processing) { | ||
// modify state outside the reducer to prevent other useAuth on the same update | ||
// from handling the same code | ||
state.processing = true; | ||
@@ -244,3 +130,3 @@ handleCode(state, dispatch); | ||
}, [state.code, state.processing]); | ||
(0, _react.useEffect)(function () { | ||
(0, import_react.useEffect)(() => { | ||
if (state.processing) { | ||
@@ -259,10 +145,19 @@ state.processing = false; | ||
error: state.error, | ||
login: login, | ||
logout: logout, | ||
authenticate: authenticate, | ||
resolveTokenFromCode: resolveTokenFromCode, | ||
revalidateToken: revalidateToken, | ||
login, | ||
logout, | ||
authenticate, | ||
resolveTokenFromCode, | ||
revalidateToken, | ||
config: state.config | ||
}; | ||
} | ||
var _default = exports["default"] = useAuth; | ||
var src_default = useAuth; | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
TOKEN_REVALIDATION_INTERVAL, | ||
useAuth, | ||
...require("@digigov/auth/AuthProvider"), | ||
...require("@digigov/auth/hooks"), | ||
...require("@digigov/auth/TokenLogin") | ||
}); | ||
//# sourceMappingURL=index.js.map |
@@ -1,9 +0,25 @@ | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var localSession_exports = {}; | ||
__export(localSession_exports, { | ||
readSession: () => readSession, | ||
updateSession: () => updateSession | ||
}); | ||
exports.readSession = readSession; | ||
exports.updateSession = updateSession; | ||
var isBrowser = typeof window !== 'undefined'; | ||
module.exports = __toCommonJS(localSession_exports); | ||
const isBrowser = typeof window !== "undefined"; | ||
function readSession() { | ||
@@ -13,7 +29,6 @@ if (!isBrowser) { | ||
} | ||
var savedAuthSession = window.localStorage.getItem('auth-session'); | ||
const savedAuthSession = window.localStorage.getItem("auth-session"); | ||
if (savedAuthSession) { | ||
try { | ||
var newAuthState = JSON.parse(savedAuthSession); | ||
// only recover user related state | ||
const newAuthState = JSON.parse(savedAuthSession); | ||
return { | ||
@@ -36,3 +51,3 @@ token: newAuthState.token, | ||
} | ||
var s = '{}'; | ||
let s = "{}"; | ||
try { | ||
@@ -43,4 +58,10 @@ s = JSON.stringify(state); | ||
} | ||
window.localStorage.setItem('auth-session', s); | ||
window.localStorage.setItem("auth-session", s); | ||
return state; | ||
} | ||
} | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
readSession, | ||
updateSession | ||
}); | ||
//# sourceMappingURL=localSession.js.map |
@@ -1,34 +0,50 @@ | ||
"use strict"; | ||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); | ||
var _typeof = require("@babel/runtime/helpers/typeof"); | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __export = (target, all) => { | ||
for (var name in all) | ||
__defProp(target, name, { get: all[name], enumerable: true }); | ||
}; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); | ||
var TokenLogin_exports = {}; | ||
__export(TokenLogin_exports, { | ||
TokenLogin: () => TokenLogin, | ||
default: () => TokenLogin_default | ||
}); | ||
exports["default"] = exports.TokenLogin = void 0; | ||
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); | ||
var _react = _interopRequireWildcard(require("react")); | ||
var _qs = _interopRequireDefault(require("qs")); | ||
var _auth = _interopRequireDefault(require("@digigov/auth/")); | ||
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } | ||
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } | ||
var isBrowser = typeof window !== 'undefined'; | ||
var TokenLogin = exports.TokenLogin = function TokenLogin(_ref) { | ||
var code = _ref.code; | ||
var auth = (0, _auth["default"])(); | ||
var location = isBrowser ? window.location : { | ||
hash: '', | ||
search: '' | ||
}; | ||
var navigate = auth.navigate; | ||
var params = _qs["default"].parse(location.search.slice(1)); | ||
var _useState = (0, _react.useState)(auth.authenticated && auth.code === code), | ||
_useState2 = (0, _slicedToArray2["default"])(_useState, 1), | ||
isUsedCode = _useState2[0]; | ||
var next = params.next || isBrowser && window.localStorage.getItem('login-next') || '/'; | ||
var isPopup = window.localStorage.getItem('popup-login') === '1'; | ||
(0, _react.useEffect)(function () { | ||
module.exports = __toCommonJS(TokenLogin_exports); | ||
var import_react = __toESM(require("react")); | ||
var import_qs = __toESM(require("qs")); | ||
var import_auth = __toESM(require("@digigov/auth/")); | ||
const isBrowser = typeof window !== "undefined"; | ||
const TokenLogin = ({ code }) => { | ||
const auth = (0, import_auth.default)(); | ||
const location = isBrowser ? window.location : { hash: "", search: "" }; | ||
const navigate = auth.navigate; | ||
const params = import_qs.default.parse(location.search.slice(1)); | ||
const [isUsedCode] = (0, import_react.useState)(auth.authenticated && auth.code === code); | ||
const next = params.next || isBrowser && window.localStorage.getItem("login-next") || "/"; | ||
const isPopup = window.localStorage.getItem("popup-login") === "1"; | ||
(0, import_react.useEffect)(() => { | ||
if (!code) { | ||
if (!isPopup) { | ||
navigate('/'); | ||
navigate("/"); | ||
} else { | ||
@@ -43,8 +59,8 @@ isBrowser && window.close(); | ||
}, [code, isUsedCode]); | ||
(0, _react.useEffect)(function () { | ||
(0, import_react.useEffect)(() => { | ||
if (auth.authenticated) { | ||
if (!isPopup) { | ||
if (!isUsedCode) { | ||
isBrowser && window.localStorage.removeItem('login-next'); | ||
navigate(next || '/'); | ||
isBrowser && window.localStorage.removeItem("login-next"); | ||
navigate(next || "/"); | ||
} else { | ||
@@ -60,4 +76,4 @@ window.history.forward(); | ||
console.error(auth.error); | ||
isBrowser && window.localStorage.removeItem('login-next'); | ||
navigate('/'); | ||
isBrowser && window.localStorage.removeItem("login-next"); | ||
navigate("/"); | ||
} else { | ||
@@ -68,4 +84,9 @@ isBrowser && window.close(); | ||
}, [auth.authenticated, auth.error, auth.code]); | ||
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null); | ||
return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null); | ||
}; | ||
var _default = exports["default"] = TokenLogin; | ||
var TokenLogin_default = TokenLogin; | ||
// Annotate the CommonJS export names for ESM import in node: | ||
0 && (module.exports = { | ||
TokenLogin | ||
}); | ||
//# sourceMappingURL=TokenLogin.js.map |
@@ -1,30 +0,30 @@ | ||
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; | ||
import { useEffect, useMemo } from 'react'; | ||
import useAuth from '@digigov/auth/'; | ||
import { readSession } from '@digigov/auth/localSession'; | ||
export function useToken() { | ||
import { useEffect, useMemo } from "react"; | ||
import useAuth from "@digigov/auth/"; | ||
import { readSession } from "@digigov/auth/localSession"; | ||
function useToken() { | ||
return useAuth().token; | ||
} | ||
export function useUser() { | ||
function useUser() { | ||
return useAuth().user; | ||
} | ||
export function makeRequireUserTypeHook(checkUserType, onError) { | ||
return function () { | ||
var auth = useAuth(); | ||
var user = auth.user; | ||
var navigate = auth.navigate; | ||
var location = window.location; | ||
var currentUrl = location.pathname + location.search; | ||
useEffect(function () { | ||
if (auth.token) auth.revalidateToken(function () { | ||
return onError ? onError(navigate, currentUrl) : navigate('/'); | ||
}); | ||
function makeRequireUserTypeHook(checkUserType, onError) { | ||
return () => { | ||
const auth = useAuth(); | ||
const user = auth.user; | ||
const navigate = auth.navigate; | ||
const location = window.location; | ||
const currentUrl = location.pathname + location.search; | ||
useEffect(() => { | ||
if (auth.token) | ||
auth.revalidateToken( | ||
() => onError ? onError(navigate, currentUrl) : navigate("/") | ||
); | ||
}, []); | ||
useEffect(function () { | ||
useEffect(() => { | ||
if (!auth.processing && (!auth.token || !auth.authenticated || auth.user && !checkUserType(user))) { | ||
if (onError) { | ||
localStorage.setItem('login-next', currentUrl); | ||
localStorage.setItem("login-next", currentUrl); | ||
onError(navigate, currentUrl); | ||
} else { | ||
navigate('/'); | ||
navigate("/"); | ||
} | ||
@@ -36,26 +36,21 @@ } | ||
} | ||
export var useRequireUser = makeRequireUserTypeHook(function (user) { | ||
return !!user; | ||
}); | ||
export var disableLoginNextHook = function disableLoginNextHook() { | ||
const useRequireUser = makeRequireUserTypeHook((user) => !!user); | ||
const disableLoginNextHook = () => { | ||
function setDisableLoginNext(bool) { | ||
if (bool) { | ||
window.localStorage.setItem('disable-login-next', 'true'); | ||
window.localStorage.setItem("disable-login-next", "true"); | ||
} else { | ||
window.localStorage.removeItem('disable-login-next'); | ||
window.localStorage.removeItem("disable-login-next"); | ||
} | ||
} | ||
var disableLoginNext = !!window.localStorage.getItem('disable-login-next'); | ||
const disableLoginNext = !!window.localStorage.getItem("disable-login-next"); | ||
return [disableLoginNext, setDisableLoginNext]; | ||
}; | ||
export var useRequireAnonymous = function useRequireAnonymous() { | ||
var auth = useAuth(); | ||
var params = new URLSearchParams(window.location.search); | ||
var _disableLoginNextHook = disableLoginNextHook(), | ||
_disableLoginNextHook2 = _slicedToArray(_disableLoginNextHook, 2), | ||
disableLoginNext = _disableLoginNextHook2[0], | ||
setDisableLoginNext = _disableLoginNextHook2[1]; | ||
var isNewTab = window.history.length === 1; | ||
var nextParam = useMemo(function () { | ||
return params.get('next') || ''; | ||
const useRequireAnonymous = () => { | ||
const auth = useAuth(); | ||
const params = new URLSearchParams(window.location.search); | ||
const [disableLoginNext, setDisableLoginNext] = disableLoginNextHook(); | ||
const isNewTab = window.history.length === 1; | ||
const nextParam = useMemo(() => { | ||
return params.get("next") || ""; | ||
}, [window.location.search]); | ||
@@ -67,33 +62,29 @@ if (nextParam) { | ||
} else { | ||
window.localStorage.setItem('login-next', nextParam); | ||
window.localStorage.setItem("login-next", nextParam); | ||
} | ||
} | ||
}; | ||
export function useLoginPortal(_ref) { | ||
var loginUrl = _ref.loginUrl, | ||
_ref$size = _ref.size, | ||
size = _ref$size === void 0 ? { | ||
width: 600, | ||
height: 400 | ||
} : _ref$size, | ||
_ref$position = _ref.position, | ||
position = _ref$position === void 0 ? { | ||
left: 200, | ||
top: 200 | ||
} : _ref$position, | ||
title = _ref.title; | ||
useEffect(function () { | ||
function useLoginPortal({ | ||
loginUrl, | ||
size = { width: 600, height: 400 }, | ||
position = { left: 200, top: 200 }, | ||
title | ||
}) { | ||
useEffect(() => { | ||
if (loginUrl) { | ||
var url = new URL(loginUrl, document.baseURI).href; | ||
var urlParams = new URLSearchParams(window.location.search); | ||
var nextURL = urlParams.get('next') || ''; | ||
var externalWindow = window.open(url, '', "width=".concat(size.width, ",height=").concat(size.height, ",left=").concat(position.left, ",top=").concat(position.top)); | ||
window.localStorage.setItem('popup-login', '1'); | ||
externalWindow.document.title = title || 'Login'; | ||
// this is a hack since we can't track a popup close event from different domain | ||
var checkWindowInterval = setInterval(function () { | ||
const url = new URL(loginUrl, document.baseURI).href; | ||
const urlParams = new URLSearchParams(window.location.search); | ||
const nextURL = urlParams.get("next") || ""; | ||
const externalWindow = window.open( | ||
url, | ||
"", | ||
`width=${size.width},height=${size.height},left=${position.left},top=${position.top}` | ||
); | ||
window.localStorage.setItem("popup-login", "1"); | ||
externalWindow.document.title = title || "Login"; | ||
const checkWindowInterval = setInterval(() => { | ||
try { | ||
if (externalWindow === null || externalWindow.closed) { | ||
clearInterval(checkWindowInterval); | ||
window.localStorage.removeItem('popup-login'); | ||
window.localStorage.removeItem("popup-login"); | ||
if (readSession().authenticated) { | ||
@@ -103,6 +94,17 @@ window.location.href = new URL(nextURL, document.baseURI).href; | ||
} | ||
} catch (err) {} | ||
} catch (err) { | ||
} | ||
}, 500); | ||
} | ||
}, [loginUrl]); | ||
} | ||
} | ||
export { | ||
disableLoginNextHook, | ||
makeRequireUserTypeHook, | ||
useLoginPortal, | ||
useRequireAnonymous, | ||
useRequireUser, | ||
useToken, | ||
useUser | ||
}; | ||
//# sourceMappingURL=hooks.js.map |
256
index.js
@@ -1,2 +0,2 @@ | ||
/** @license Digigov v1.1.4-0edebf87 | ||
/** @license Digigov v1.1.4-d57821ba | ||
* | ||
@@ -6,177 +6,83 @@ * This source code is licensed under the BSD-2-Clause license found in the | ||
*/ | ||
import _typeof from "@babel/runtime/helpers/typeof"; | ||
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator"; | ||
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; | ||
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } | ||
import { useEffect, useContext } from 'react'; | ||
import { AuthContext } from '@digigov/auth/AuthProvider'; | ||
import { disableLoginNextHook } from '@digigov/auth/hooks'; | ||
export var TOKEN_REVALIDATION_INTERVAL = 1; // seconds | ||
export function useAuth() { | ||
var _useContext = useContext(AuthContext), | ||
state = _useContext.state, | ||
dispatch = _useContext.dispatch; | ||
var navigate = state.navigate; | ||
var transformUserObject = state.transformUserObject; | ||
var location = window.location; | ||
import { useEffect, useContext } from "react"; | ||
import { AuthContext } from "@digigov/auth/AuthProvider"; | ||
import { disableLoginNextHook } from "@digigov/auth/hooks"; | ||
const TOKEN_REVALIDATION_INTERVAL = 1; | ||
function useAuth() { | ||
const { state, dispatch } = useContext(AuthContext); | ||
const navigate = state.navigate; | ||
const transformUserObject = state.transformUserObject; | ||
const location = window.location; | ||
function login(id, data) { | ||
dispatch({ | ||
type: 'login', | ||
user: data, | ||
id: id | ||
}); | ||
dispatch({ type: "login", user: data, id }); | ||
} | ||
function logout(next) { | ||
var _disableLoginNextHook = disableLoginNextHook(), | ||
_disableLoginNextHook2 = _slicedToArray(_disableLoginNextHook, 2), | ||
disableLoginNext = _disableLoginNextHook2[0], | ||
setDisableLoginNext = _disableLoginNextHook2[1]; | ||
const [disableLoginNext, setDisableLoginNext] = disableLoginNextHook(); | ||
if (disableLoginNext) { | ||
setDisableLoginNext(false); | ||
} | ||
if (typeof next === 'function') { | ||
if (typeof next === "function") { | ||
next(); | ||
} else { | ||
navigate(next || '/'); | ||
navigate(next || "/"); | ||
} | ||
dispatch({ | ||
type: 'logout', | ||
next: next | ||
}); | ||
dispatch({ type: "logout", next }); | ||
} | ||
function authenticate(token) { | ||
dispatch({ | ||
type: 'token', | ||
token: token | ||
}); | ||
dispatch({ type: "token", token }); | ||
} | ||
function resolveTokenFromCode(code) { | ||
dispatch({ | ||
type: 'code', | ||
code: code | ||
}); | ||
dispatch({ type: "code", code }); | ||
} | ||
function handleCode(_x, _x2) { | ||
return _handleCode.apply(this, arguments); | ||
async function handleCode(state2, dispatch2) { | ||
const code = state2.code; | ||
dispatch2({ type: "authenticating" }); | ||
try { | ||
const resp = await fetch(state2.config.tokenURL + "?code=" + code); | ||
const token = await resp.json(); | ||
authenticate(token.token); | ||
} catch (err) { | ||
console.error("Error occured in code handling", err); | ||
dispatch2({ type: "error", error: err }); | ||
} | ||
} | ||
function _handleCode() { | ||
_handleCode = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(state, dispatch) { | ||
var code, resp, _token; | ||
return _regeneratorRuntime().wrap(function _callee$(_context) { | ||
while (1) switch (_context.prev = _context.next) { | ||
case 0: | ||
code = state.code; | ||
dispatch({ | ||
type: 'authenticating' | ||
}); | ||
_context.prev = 2; | ||
_context.next = 5; | ||
return fetch(state.config.tokenURL + '?code=' + code); | ||
case 5: | ||
resp = _context.sent; | ||
_context.next = 8; | ||
return resp.json(); | ||
case 8: | ||
_token = _context.sent; | ||
authenticate(_token.token); | ||
_context.next = 16; | ||
break; | ||
case 12: | ||
_context.prev = 12; | ||
_context.t0 = _context["catch"](2); | ||
console.error('Error occured in code handling', _context.t0); | ||
dispatch({ | ||
type: 'error', | ||
error: _context.t0 | ||
}); | ||
case 16: | ||
case "end": | ||
return _context.stop(); | ||
async function handleToken(state2, dispatch2, onError) { | ||
const token = state2.token || ""; | ||
if (state2.config.userDataURL) { | ||
const userUpdatedAt = localStorage.getItem("userUpdatedAt"); | ||
if (userUpdatedAt && !state2.user) { | ||
const revalidatedBefore = (Date.now() - parseInt(userUpdatedAt)) / 1e3; | ||
if (revalidatedBefore < TOKEN_REVALIDATION_INTERVAL) { | ||
console.log( | ||
`Token validated before ${revalidatedBefore}. Aborting request.` | ||
); | ||
return; | ||
} | ||
}, _callee, null, [[2, 12]]); | ||
})); | ||
return _handleCode.apply(this, arguments); | ||
} | ||
function handleToken(_x3, _x4, _x5) { | ||
return _handleToken.apply(this, arguments); | ||
} | ||
function _handleToken() { | ||
_handleToken = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(state, dispatch, onError) { | ||
var token, userUpdatedAt, revalidatedBefore, data, _user; | ||
return _regeneratorRuntime().wrap(function _callee2$(_context2) { | ||
while (1) switch (_context2.prev = _context2.next) { | ||
case 0: | ||
token = state.token || ''; | ||
if (!state.config.userDataURL) { | ||
_context2.next = 31; | ||
break; | ||
} | ||
userUpdatedAt = localStorage.getItem('userUpdatedAt'); | ||
if (!(userUpdatedAt && !state.user)) { | ||
_context2.next = 8; | ||
break; | ||
} | ||
revalidatedBefore = (Date.now() - parseInt(userUpdatedAt)) / 1000; | ||
if (!(revalidatedBefore < TOKEN_REVALIDATION_INTERVAL)) { | ||
_context2.next = 8; | ||
break; | ||
} | ||
console.log("Token validated before ".concat(revalidatedBefore, ". Aborting request.")); | ||
return _context2.abrupt("return"); | ||
case 8: | ||
localStorage.setItem('userUpdatedAt', "".concat(Date.now())); | ||
dispatch({ | ||
type: 'authenticating' | ||
}); | ||
_context2.prev = 10; | ||
_context2.next = 13; | ||
return fetch(state.config.userDataURL, { | ||
headers: { | ||
Authorization: "Token ".concat(token) | ||
} | ||
}); | ||
case 13: | ||
data = _context2.sent; | ||
if (!(data.status === 404 || data.status === 401 || !data.ok)) { | ||
_context2.next = 20; | ||
break; | ||
} | ||
console.error('Error in fetch userDataURL response', data); | ||
dispatch({ | ||
type: 'error', | ||
error: data | ||
}); | ||
logout(onError); | ||
_context2.next = 24; | ||
break; | ||
case 20: | ||
_context2.next = 22; | ||
return data.json(); | ||
case 22: | ||
_user = _context2.sent; | ||
if (transformUserObject) { | ||
login(token, transformUserObject(_user)); | ||
} else { | ||
login(token, _user); | ||
} | ||
case 24: | ||
_context2.next = 31; | ||
break; | ||
case 26: | ||
_context2.prev = 26; | ||
_context2.t0 = _context2["catch"](10); | ||
console.error('Error in fetch userDataURL', _context2.t0); | ||
logout(onError); | ||
dispatch({ | ||
type: 'error', | ||
error: _context2.t0 | ||
}); | ||
case 31: | ||
case "end": | ||
return _context2.stop(); | ||
} | ||
localStorage.setItem("userUpdatedAt", `${Date.now()}`); | ||
dispatch2({ type: "authenticating" }); | ||
try { | ||
const data = await fetch(state2.config.userDataURL, { | ||
headers: { | ||
Authorization: `Token ${token}` | ||
} | ||
}); | ||
if (data.status === 404 || data.status === 401 || !data.ok) { | ||
console.error("Error in fetch userDataURL response", data); | ||
dispatch2({ type: "error", error: data }); | ||
logout(onError); | ||
} else { | ||
const user = await data.json(); | ||
if (transformUserObject) { | ||
login(token, transformUserObject(user)); | ||
} else { | ||
login(token, user); | ||
} | ||
} | ||
}, _callee2, null, [[10, 26]]); | ||
})); | ||
return _handleToken.apply(this, arguments); | ||
} catch (err) { | ||
console.error("Error in fetch userDataURL", err); | ||
logout(onError); | ||
dispatch2({ type: "error", error: err }); | ||
} | ||
} | ||
} | ||
@@ -186,3 +92,3 @@ function revalidateToken(onError) { | ||
} | ||
useEffect(function () { | ||
useEffect(() => { | ||
if (!state.processing && state.token && !state.user) { | ||
@@ -195,6 +101,4 @@ state.processing = true; | ||
}, [state.token]); | ||
useEffect(function () { | ||
useEffect(() => { | ||
if (state.code && !state.token && !state.processing) { | ||
// modify state outside the reducer to prevent other useAuth on the same update | ||
// from handling the same code | ||
state.processing = true; | ||
@@ -204,3 +108,3 @@ handleCode(state, dispatch); | ||
}, [state.code, state.processing]); | ||
useEffect(function () { | ||
useEffect(() => { | ||
if (state.processing) { | ||
@@ -219,13 +123,19 @@ state.processing = false; | ||
error: state.error, | ||
login: login, | ||
logout: logout, | ||
authenticate: authenticate, | ||
resolveTokenFromCode: resolveTokenFromCode, | ||
revalidateToken: revalidateToken, | ||
login, | ||
logout, | ||
authenticate, | ||
resolveTokenFromCode, | ||
revalidateToken, | ||
config: state.config | ||
}; | ||
} | ||
export default useAuth; | ||
export * from '@digigov/auth/AuthProvider'; | ||
export * from '@digigov/auth/hooks'; | ||
export * from '@digigov/auth/TokenLogin'; | ||
var src_default = useAuth; | ||
export * from "@digigov/auth/AuthProvider"; | ||
export * from "@digigov/auth/hooks"; | ||
export * from "@digigov/auth/TokenLogin"; | ||
export { | ||
TOKEN_REVALIDATION_INTERVAL, | ||
src_default as default, | ||
useAuth | ||
}; | ||
//# sourceMappingURL=index.js.map |
@@ -1,11 +0,10 @@ | ||
var isBrowser = typeof window !== 'undefined'; | ||
export function readSession() { | ||
const isBrowser = typeof window !== "undefined"; | ||
function readSession() { | ||
if (!isBrowser) { | ||
return {}; | ||
} | ||
var savedAuthSession = window.localStorage.getItem('auth-session'); | ||
const savedAuthSession = window.localStorage.getItem("auth-session"); | ||
if (savedAuthSession) { | ||
try { | ||
var newAuthState = JSON.parse(savedAuthSession); | ||
// only recover user related state | ||
const newAuthState = JSON.parse(savedAuthSession); | ||
return { | ||
@@ -24,7 +23,7 @@ token: newAuthState.token, | ||
} | ||
export function updateSession(state) { | ||
function updateSession(state) { | ||
if (!isBrowser) { | ||
return state; | ||
} | ||
var s = '{}'; | ||
let s = "{}"; | ||
try { | ||
@@ -35,4 +34,9 @@ s = JSON.stringify(state); | ||
} | ||
window.localStorage.setItem('auth-session', s); | ||
window.localStorage.setItem("auth-session", s); | ||
return state; | ||
} | ||
} | ||
export { | ||
readSession, | ||
updateSession | ||
}; | ||
//# sourceMappingURL=localSession.js.map |
{ | ||
"name": "@digigov/auth", | ||
"version": "1.1.4-0edebf87", | ||
"version": "1.1.4-d57821ba", | ||
"description": "@digigov authentication client", | ||
@@ -14,4 +14,4 @@ "author": "GRNET Developers <devs@lists.grnet.gr>", | ||
"peerDependencies": { | ||
"react": "^16.8.0 || ^17.0.0", | ||
"react-dom": "^16.8.0 || ^17.0.0" | ||
"react": ">=16.8.0 <19.0.0", | ||
"react-dom": ">=16.8.0 <19.0.0" | ||
}, | ||
@@ -18,0 +18,0 @@ "gitHead": "c903a46306f77f55ad7fc4d2e274006f39a6c871", |
@@ -1,24 +0,17 @@ | ||
import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; | ||
import React, { useEffect, useState } from 'react'; | ||
import qs from 'qs'; | ||
import useAuth from '@digigov/auth/'; | ||
var isBrowser = typeof window !== 'undefined'; | ||
export var TokenLogin = function TokenLogin(_ref) { | ||
var code = _ref.code; | ||
var auth = useAuth(); | ||
var location = isBrowser ? window.location : { | ||
hash: '', | ||
search: '' | ||
}; | ||
var navigate = auth.navigate; | ||
var params = qs.parse(location.search.slice(1)); | ||
var _useState = useState(auth.authenticated && auth.code === code), | ||
_useState2 = _slicedToArray(_useState, 1), | ||
isUsedCode = _useState2[0]; | ||
var next = params.next || isBrowser && window.localStorage.getItem('login-next') || '/'; | ||
var isPopup = window.localStorage.getItem('popup-login') === '1'; | ||
useEffect(function () { | ||
import React, { useEffect, useState } from "react"; | ||
import qs from "qs"; | ||
import useAuth from "@digigov/auth/"; | ||
const isBrowser = typeof window !== "undefined"; | ||
const TokenLogin = ({ code }) => { | ||
const auth = useAuth(); | ||
const location = isBrowser ? window.location : { hash: "", search: "" }; | ||
const navigate = auth.navigate; | ||
const params = qs.parse(location.search.slice(1)); | ||
const [isUsedCode] = useState(auth.authenticated && auth.code === code); | ||
const next = params.next || isBrowser && window.localStorage.getItem("login-next") || "/"; | ||
const isPopup = window.localStorage.getItem("popup-login") === "1"; | ||
useEffect(() => { | ||
if (!code) { | ||
if (!isPopup) { | ||
navigate('/'); | ||
navigate("/"); | ||
} else { | ||
@@ -33,8 +26,8 @@ isBrowser && window.close(); | ||
}, [code, isUsedCode]); | ||
useEffect(function () { | ||
useEffect(() => { | ||
if (auth.authenticated) { | ||
if (!isPopup) { | ||
if (!isUsedCode) { | ||
isBrowser && window.localStorage.removeItem('login-next'); | ||
navigate(next || '/'); | ||
isBrowser && window.localStorage.removeItem("login-next"); | ||
navigate(next || "/"); | ||
} else { | ||
@@ -50,4 +43,4 @@ window.history.forward(); | ||
console.error(auth.error); | ||
isBrowser && window.localStorage.removeItem('login-next'); | ||
navigate('/'); | ||
isBrowser && window.localStorage.removeItem("login-next"); | ||
navigate("/"); | ||
} else { | ||
@@ -58,4 +51,9 @@ isBrowser && window.close(); | ||
}, [auth.authenticated, auth.error, auth.code]); | ||
return /*#__PURE__*/React.createElement(React.Fragment, null); | ||
return /* @__PURE__ */ React.createElement(React.Fragment, null); | ||
}; | ||
export default TokenLogin; | ||
var TokenLogin_default = TokenLogin; | ||
export { | ||
TokenLogin, | ||
TokenLogin_default as default | ||
}; | ||
//# sourceMappingURL=TokenLogin.js.map |
47
113185
1855