@charamza/next-password-protect 0.0.0-development → 0.0.1-development

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,14 +1,11 @@
1
1
  <p align="center">
2
- <a aria-label="Story of AMS logo" href="https://storyofams.com/" target="_blank" align="center">
3
- <img src="https://avatars.githubusercontent.com/u/19343504" alt="Story of AMS" width="100">
4
- </a>
5
- <h1 align="center">@storyofams/next-password-protect</h1>
2
+ <h1 align="center">@charamza/next-password-protect</h1>
6
3
  <p align="center">
7
4
  <a aria-label="releases" href="https://GitHub.com/storyofams/next-password-protect/releases/" target="_blank">
8
5
  <img src="https://github.com/storyofams/next-password-protect/workflows/Release/badge.svg">
9
6
  </a>
10
- <a aria-label="npm" href="https://www.npmjs.com/package/@storyofams/next-password-protect" target="_blank">
11
- <img src="https://img.shields.io/npm/v/@storyofams/next-password-protect">
7
+ <a aria-label="npm" href="https://www.npmjs.com/package/@charamza/next-password-protect" target="_blank">
8
+ <img src="https://img.shields.io/npm/v/@charamza/next-password-protect">
12
9
  </a>
13
10
  <a aria-label="codecov" href="https://codecov.io/gh/storyofams/next-password-protect" target="_blank">
14
11
  <img src="https://codecov.io/gh/storyofams/next-password-protect/branch/master/graph/badge.svg?token=ZV0YT4HU5H">
@@ -39,9 +36,9 @@ This library adds a password prompt to your Next.js deployment. It consists of t
39
36
  ## Installation
40
37
 
41
38
  ```sh
42
- yarn add @storyofams/next-password-protect
39
+ yarn add @charamza/next-password-protect
43
40
  # or
44
- npm install @storyofams/next-password-protect
41
+ npm install @charamza/next-password-protect
45
42
  ```
46
43
 
47
44
  ## Usage
@@ -66,7 +63,7 @@ module.exports = {
66
63
  Add two api routes, one with the `loginHandler` and one with the `passwordCheckHandler` api function. You can name them anything, as long as you pass the names to `loginApiUrl` and `checkApiUrl` respectively, in the next step. By default it expects `/login` and `/passwordCheck`.
67
64
 
68
65
  ```javascript
69
- import { loginHandler } from "@storyofams/next-password-protect";
66
+ import { loginHandler } from "@charamza/next-password-protect";
70
67
 
71
68
  export default loginHandler("YOUR_SECRET_PASSWORD", {
72
69
  // Options go here (optional)
@@ -75,7 +72,7 @@ export default loginHandler("YOUR_SECRET_PASSWORD", {
75
72
  ```
76
73
 
77
74
  ```javascript
78
- import { passwordCheckHandler } from "@storyofams/next-password-protect";
75
+ import { passwordCheckHandler } from "@charamza/next-password-protect";
79
76
 
80
77
  export default passwordCheckHandler("YOUR_SECRET_PASSWORD", {
81
78
  // Options go here (optional)
@@ -88,7 +85,7 @@ export default passwordCheckHandler("YOUR_SECRET_PASSWORD", {
88
85
  Add the `withPasswordProtect` HOC to the default export of `App` in `pages/_app.tsx`:
89
86
 
90
87
  ```javascript
91
- import { withPasswordProtect } from "@storyofams/next-password-protect";
88
+ import { withPasswordProtect } from "@charamza/next-password-protect";
92
89
 
93
90
  // Before: export default App;
94
91
  export default process.env.PASSWORD_PROTECT
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/buffer-alloc-unsafe/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/buffer-fill/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index10.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/buffer-fill/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/buffer-alloc-unsafe/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index11.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/jwa/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/safe-buffer/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index13.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/safe-buffer/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/jwa/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index14.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.isnumber/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.isboolean/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index3.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.isboolean/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.isnumber/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index4.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.once/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.includes/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index5.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.isstring/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.isplainobject/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index6.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.includes/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.isstring/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index7.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.isplainobject/index.js");exports.default=e.default;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../node_modules/lodash.once/index.js");exports.default=e.default;
2
2
  //# sourceMappingURL=index8.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/@babel/runtime/helpers/esm/extends.js"),t=require("../../node_modules/tslib/tslib.es6.js"),r=require("react"),n=require("next/amp"),o=require("next/router"),u=require("./LoginComponent.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=i(r);exports.withPasswordProtect=function(i,s){return function(a){var d,p,c=a.Component,f=a.pageProps,v=t.__rest(a,["Component","pageProps"]),m=n.useAmp(),_=r.useState(void 0),g=_[0],b=_[1],h=o.useRouter();if(r.useEffect((function(){t.__awaiter(void 0,void 0,void 0,(function(){return t.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,fetch((null==s?void 0:s.checkApiUrl)||"/api/passwordCheck",{credentials:"include"})];case 1:return 200===e.sent().status?b(!0):b(!1),[3,3];case 2:return e.sent(),b(!1),[3,3];case 3:return[2]}}))}))}),[]),void 0===g)return null;var C=null!==(p=null===(d=null==s?void 0:s.bypassProtection)||void 0===d?void 0:d.call(s,h))&&void 0!==p&&p;if(g||C)return l.default.createElement(i,e.default({Component:c,pageProps:f},v));if(m)return null;var P=(null==s?void 0:s.loginComponent)||u.LoginComponent;return l.default.createElement(P,e.default({apiUrl:null==s?void 0:s.loginApiUrl},(null==s?void 0:s.loginComponentProps)||{}))}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../node_modules/@babel/runtime/helpers/esm/extends.js"),t=require("../../node_modules/tslib/tslib.es6.js"),r=require("react"),n=require("next/router"),o=require("./LoginComponent.js");exports.withPasswordProtect=function(i,s){return function(u){var l,a,c=u.Component,d=u.pageProps,p=t.__rest(u,["Component","pageProps"]),v=r.useState(void 0),f=v[0],m=v[1],_=n.useRouter();if(r.useEffect((function(){t.__awaiter(void 0,void 0,void 0,(function(){return t.__generator(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,fetch((null==s?void 0:s.checkApiUrl)||"/api/passwordCheck",{credentials:"include"})];case 1:return 200===e.sent().status?m(!0):m(!1),[3,3];case 2:return e.sent(),m(!1),[3,3];case 3:return[2]}}))}))}),[]),void 0===f)return null;var g=null!==(a=null===(l=null==s?void 0:s.bypassProtection)||void 0===l?void 0:l.call(s,_))&&void 0!==a&&a;if(f||g)return React.createElement(i,e.default({Component:c,pageProps:d},p));var h=(null==s?void 0:s.loginComponent)||o.LoginComponent;return React.createElement(h,e.default({apiUrl:null==s?void 0:s.loginApiUrl},(null==s?void 0:s.loginComponentProps)||{}))}};
2
2
  //# sourceMappingURL=withPasswordProtect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"withPasswordProtect.js","sources":["../../../../src/hoc/withPasswordProtect.tsx"],"sourcesContent":["import React, { ElementType, useEffect, useState } from 'react';\nimport { useAmp } from 'next/amp';\nimport type { AppProps } from 'next/app';\n\nimport { NextRouter, useRouter } from 'next/router';\nimport {\n LoginComponent as DefaultLoginComponent,\n LoginComponentProps,\n} from './LoginComponent';\n\ninterface PasswordProtectHOCOptions {\n /* @default /api/passwordCheck */\n checkApiUrl?: string;\n /* @default /api/login */\n loginApiUrl?: string;\n loginComponent?: ElementType;\n loginComponentProps?: Omit<LoginComponentProps, 'apiUrl'>;\n bypassProtection?: (route: NextRouter) => boolean;\n}\n\n/// TODO: improve App typing\nexport const withPasswordProtect = (\n App: any,\n options?: PasswordProtectHOCOptions,\n) => {\n const ProtectedApp = ({ Component, pageProps, ...props }: AppProps) => {\n const isAmp = useAmp();\n const [isAuthenticated, setAuthenticated] = useState<undefined | boolean>(\n undefined,\n );\n const router = useRouter();\n\n const checkIfLoggedIn = async () => {\n try {\n const res = await fetch(options?.checkApiUrl || '/api/passwordCheck', {\n credentials: 'include',\n });\n\n if (res.status === 200) {\n setAuthenticated(true);\n } else {\n setAuthenticated(false);\n }\n } catch (e) {\n setAuthenticated(false);\n }\n };\n\n useEffect(() => {\n checkIfLoggedIn();\n }, []);\n\n if (isAuthenticated === undefined) {\n return null;\n }\n\n const bypassProtection = options?.bypassProtection?.(router) ?? false;\n if (isAuthenticated || bypassProtection) {\n return <App Component={Component} pageProps={pageProps} {...props} />;\n }\n\n // AMP is not yet supported\n if (isAmp) {\n return null;\n }\n\n const LoginComponent: ElementType =\n options?.loginComponent || DefaultLoginComponent;\n\n return (\n <LoginComponent\n apiUrl={options?.loginApiUrl}\n {...(options?.loginComponentProps || {})}\n />\n );\n };\n\n return ProtectedApp;\n};\n"],"names":["App","options","_a","Component","pageProps","props","isAmp","useAmp","_d","useState","undefined","isAuthenticated","setAuthenticated","router","useRouter","useEffect","fetch","checkApiUrl","credentials","status","bypassProtection","React","LoginComponent","loginComponent","DefaultLoginComponent","apiUrl","loginApiUrl","loginComponentProps"],"mappings":"mZAqBmC,SACjCA,EACAC,UAEqB,SAACC,WAAEC,cAAWC,cAAcC,aAA3B,2BACdC,EAAQC,WACRC,EAAsCC,gBAC1CC,GADKC,OAAiBC,OAGlBC,EAASC,iBAkBfC,aAAU,sJAdYC,OAAMf,MAAAA,SAAAA,EAASgB,cAAe,qBAAsB,CACpEC,YAAa,2BAGI,MAJPhB,SAIJiB,OACNP,GAAiB,GAEjBA,GAAiB,gCAGnBA,GAAiB,mCAMlB,SAEqBF,IAApBC,SACK,SAGHS,sBAAmBnB,MAAAA,SAAAA,EAASmB,4CAATnB,EAA4BY,sBACjDF,GAAmBS,SACdC,wBAACrB,aAAIG,UAAWA,EAAWC,UAAWA,GAAeC,OAI1DC,SACK,SAGHgB,GACJrB,MAAAA,SAAAA,EAASsB,iBAAkBC,wBAG3BH,wBAACC,aACCG,OAAQxB,MAAAA,SAAAA,EAASyB,cACZzB,MAAAA,SAAAA,EAAS0B,sBAAuB"}
1
+ {"version":3,"file":"withPasswordProtect.js","sources":["../../../../src/hoc/withPasswordProtect.tsx"],"sourcesContent":["import { ElementType, useEffect, useState } from 'react';\nimport type { AppProps } from 'next/app';\n\nimport { NextRouter, useRouter } from 'next/router';\nimport {\n LoginComponent as DefaultLoginComponent,\n LoginComponentProps,\n} from './LoginComponent';\n\ninterface PasswordProtectHOCOptions {\n /* @default /api/passwordCheck */\n checkApiUrl?: string;\n /* @default /api/login */\n loginApiUrl?: string;\n loginComponent?: ElementType;\n loginComponentProps?: Omit<LoginComponentProps, 'apiUrl'>;\n bypassProtection?: (route: NextRouter) => boolean;\n}\n\n/// TODO: improve App typing\nexport const withPasswordProtect = (\n App: any,\n options?: PasswordProtectHOCOptions,\n) => {\n const ProtectedApp = ({ Component, pageProps, ...props }: AppProps) => {\n const [isAuthenticated, setAuthenticated] = useState<undefined | boolean>(\n undefined,\n );\n const router = useRouter();\n\n const checkIfLoggedIn = async () => {\n try {\n const res = await fetch(options?.checkApiUrl || '/api/passwordCheck', {\n credentials: 'include',\n });\n\n if (res.status === 200) {\n setAuthenticated(true);\n } else {\n setAuthenticated(false);\n }\n } catch (e) {\n setAuthenticated(false);\n }\n };\n\n useEffect(() => {\n checkIfLoggedIn();\n }, []);\n\n if (isAuthenticated === undefined) {\n return null;\n }\n\n const bypassProtection = options?.bypassProtection?.(router) ?? false;\n if (isAuthenticated || bypassProtection) {\n return <App Component={Component} pageProps={pageProps} {...props} />;\n }\n\n const LoginComponent: ElementType =\n options?.loginComponent || DefaultLoginComponent;\n\n return (\n <LoginComponent\n apiUrl={options?.loginApiUrl}\n {...(options?.loginComponentProps || {})}\n />\n );\n };\n\n return ProtectedApp;\n};\n"],"names":["App","options","_a","Component","pageProps","props","_d","useState","undefined","isAuthenticated","setAuthenticated","router","useRouter","useEffect","fetch","checkApiUrl","credentials","status","bypassProtection","React","LoginComponent","loginComponent","DefaultLoginComponent","apiUrl","loginApiUrl","loginComponentProps"],"mappings":"0SAoBmC,SACjCA,EACAC,UAEqB,SAACC,WAAEC,cAAWC,cAAcC,aAA3B,2BACdC,EAAsCC,gBAC1CC,GADKC,OAAiBC,OAGlBC,EAASC,iBAkBfC,aAAU,sJAdYC,OAAMb,MAAAA,SAAAA,EAASc,cAAe,qBAAsB,CACpEC,YAAa,2BAGI,MAJPd,SAIJe,OACNP,GAAiB,GAEjBA,GAAiB,gCAGnBA,GAAiB,mCAMlB,SAEqBF,IAApBC,SACK,SAGHS,sBAAmBjB,MAAAA,SAAAA,EAASiB,4CAATjB,EAA4BU,sBACjDF,GAAmBS,SACdC,oBAACnB,aAAIG,UAAWA,EAAWC,UAAWA,GAAeC,QAGxDe,GACJnB,MAAAA,SAAAA,EAASoB,iBAAkBC,wBAG3BH,oBAACC,aACCG,OAAQtB,MAAAA,SAAAA,EAASuB,cACZvB,MAAAA,SAAAA,EAASwB,sBAAuB"}
@@ -1,2 +1,2 @@
1
- import e from"../node_modules/buffer-alloc-unsafe/index.js";export{default}from"../node_modules/buffer-alloc-unsafe/index.js";
1
+ import e from"../node_modules/buffer-fill/index.js";export{default}from"../node_modules/buffer-fill/index.js";
2
2
  //# sourceMappingURL=index10.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import e from"../node_modules/buffer-fill/index.js";export{default}from"../node_modules/buffer-fill/index.js";
1
+ import e from"../node_modules/buffer-alloc-unsafe/index.js";export{default}from"../node_modules/buffer-alloc-unsafe/index.js";
2
2
  //# sourceMappingURL=index11.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import e from"../node_modules/jwa/index.js";export{default}from"../node_modules/jwa/index.js";
1
+ import e from"../node_modules/safe-buffer/index.js";export{default}from"../node_modules/safe-buffer/index.js";
2
2
  //# sourceMappingURL=index13.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import e from"../node_modules/safe-buffer/index.js";export{default}from"../node_modules/safe-buffer/index.js";
1
+ import e from"../node_modules/jwa/index.js";export{default}from"../node_modules/jwa/index.js";
2
2
  //# sourceMappingURL=index14.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import e from"../node_modules/lodash.isnumber/index.js";export{default}from"../node_modules/lodash.isnumber/index.js";
1
+ import o from"../node_modules/lodash.isboolean/index.js";export{default}from"../node_modules/lodash.isboolean/index.js";
2
2
  //# sourceMappingURL=index3.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import o from"../node_modules/lodash.isboolean/index.js";export{default}from"../node_modules/lodash.isboolean/index.js";
1
+ import e from"../node_modules/lodash.isnumber/index.js";export{default}from"../node_modules/lodash.isnumber/index.js";
2
2
  //# sourceMappingURL=index4.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import o from"../node_modules/lodash.once/index.js";export{default}from"../node_modules/lodash.once/index.js";
1
+ import d from"../node_modules/lodash.includes/index.js";export{default}from"../node_modules/lodash.includes/index.js";
2
2
  //# sourceMappingURL=index5.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import o from"../node_modules/lodash.isstring/index.js";export{default}from"../node_modules/lodash.isstring/index.js";
1
+ import o from"../node_modules/lodash.isplainobject/index.js";export{default}from"../node_modules/lodash.isplainobject/index.js";
2
2
  //# sourceMappingURL=index6.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import d from"../node_modules/lodash.includes/index.js";export{default}from"../node_modules/lodash.includes/index.js";
1
+ import o from"../node_modules/lodash.isstring/index.js";export{default}from"../node_modules/lodash.isstring/index.js";
2
2
  //# sourceMappingURL=index7.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import o from"../node_modules/lodash.isplainobject/index.js";export{default}from"../node_modules/lodash.isplainobject/index.js";
1
+ import o from"../node_modules/lodash.once/index.js";export{default}from"../node_modules/lodash.once/index.js";
2
2
  //# sourceMappingURL=index8.js_commonjs-proxy.map
@@ -1,2 +1,2 @@
1
- import o from"../../node_modules/@babel/runtime/helpers/esm/extends.js";import{__rest as e,__awaiter as n,__generator as r}from"../../node_modules/tslib/tslib.es6.js";import t,{useState as i,useEffect as l}from"react";import{useAmp as s}from"next/amp";import{useRouter as u}from"next/router";import{LoginComponent as p}from"./LoginComponent.js";var m=function(m,a){return function(c){var d,v,f=c.Component,g=c.pageProps,h=e(c,["Component","pageProps"]),C=s(),b=i(void 0),P=b[0],x=b[1],j=u();if(l((function(){n(void 0,void 0,void 0,(function(){return r(this,(function(o){switch(o.label){case 0:return o.trys.push([0,2,,3]),[4,fetch((null==a?void 0:a.checkApiUrl)||"/api/passwordCheck",{credentials:"include"})];case 1:return 200===o.sent().status?x(!0):x(!1),[3,3];case 2:return o.sent(),x(!1),[3,3];case 3:return[2]}}))}))}),[]),void 0===P)return null;var U=null!==(v=null===(d=null==a?void 0:a.bypassProtection)||void 0===d?void 0:d.call(a,j))&&void 0!==v&&v;if(P||U)return t.createElement(m,o({Component:f,pageProps:g},h));if(C)return null;var k=(null==a?void 0:a.loginComponent)||p;return t.createElement(k,o({apiUrl:null==a?void 0:a.loginApiUrl},(null==a?void 0:a.loginComponentProps)||{}))}};export{m as withPasswordProtect};
1
+ import e from"../../node_modules/@babel/runtime/helpers/esm/extends.js";import{__rest as o,__awaiter as n,__generator as r}from"../../node_modules/tslib/tslib.es6.js";import{useState as t,useEffect as i}from"react";import{useRouter as l}from"next/router";import{LoginComponent as s}from"./LoginComponent.js";var u=function(u,p){return function(a){var c,m,d=a.Component,v=a.pageProps,f=o(a,["Component","pageProps"]),g=t(void 0),h=g[0],C=g[1],b=l();if(i((function(){n(void 0,void 0,void 0,(function(){return r(this,(function(e){switch(e.label){case 0:return e.trys.push([0,2,,3]),[4,fetch((null==p?void 0:p.checkApiUrl)||"/api/passwordCheck",{credentials:"include"})];case 1:return 200===e.sent().status?C(!0):C(!1),[3,3];case 2:return e.sent(),C(!1),[3,3];case 3:return[2]}}))}))}),[]),void 0===h)return null;var P=null!==(m=null===(c=null==p?void 0:p.bypassProtection)||void 0===c?void 0:c.call(p,b))&&void 0!==m&&m;if(h||P)return React.createElement(u,e({Component:d,pageProps:v},f));var j=(null==p?void 0:p.loginComponent)||s;return React.createElement(j,e({apiUrl:null==p?void 0:p.loginApiUrl},(null==p?void 0:p.loginComponentProps)||{}))}};export{u as withPasswordProtect};
2
2
  //# sourceMappingURL=withPasswordProtect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"withPasswordProtect.js","sources":["../../../../src/hoc/withPasswordProtect.tsx"],"sourcesContent":["import React, { ElementType, useEffect, useState } from 'react';\nimport { useAmp } from 'next/amp';\nimport type { AppProps } from 'next/app';\n\nimport { NextRouter, useRouter } from 'next/router';\nimport {\n LoginComponent as DefaultLoginComponent,\n LoginComponentProps,\n} from './LoginComponent';\n\ninterface PasswordProtectHOCOptions {\n /* @default /api/passwordCheck */\n checkApiUrl?: string;\n /* @default /api/login */\n loginApiUrl?: string;\n loginComponent?: ElementType;\n loginComponentProps?: Omit<LoginComponentProps, 'apiUrl'>;\n bypassProtection?: (route: NextRouter) => boolean;\n}\n\n/// TODO: improve App typing\nexport const withPasswordProtect = (\n App: any,\n options?: PasswordProtectHOCOptions,\n) => {\n const ProtectedApp = ({ Component, pageProps, ...props }: AppProps) => {\n const isAmp = useAmp();\n const [isAuthenticated, setAuthenticated] = useState<undefined | boolean>(\n undefined,\n );\n const router = useRouter();\n\n const checkIfLoggedIn = async () => {\n try {\n const res = await fetch(options?.checkApiUrl || '/api/passwordCheck', {\n credentials: 'include',\n });\n\n if (res.status === 200) {\n setAuthenticated(true);\n } else {\n setAuthenticated(false);\n }\n } catch (e) {\n setAuthenticated(false);\n }\n };\n\n useEffect(() => {\n checkIfLoggedIn();\n }, []);\n\n if (isAuthenticated === undefined) {\n return null;\n }\n\n const bypassProtection = options?.bypassProtection?.(router) ?? false;\n if (isAuthenticated || bypassProtection) {\n return <App Component={Component} pageProps={pageProps} {...props} />;\n }\n\n // AMP is not yet supported\n if (isAmp) {\n return null;\n }\n\n const LoginComponent: ElementType =\n options?.loginComponent || DefaultLoginComponent;\n\n return (\n <LoginComponent\n apiUrl={options?.loginApiUrl}\n {...(options?.loginComponentProps || {})}\n />\n );\n };\n\n return ProtectedApp;\n};\n"],"names":["withPasswordProtect","App","options","_a","Component","pageProps","props","isAmp","useAmp","_d","useState","undefined","isAuthenticated","setAuthenticated","router","useRouter","useEffect","fetch","checkApiUrl","credentials","status","bypassProtection","React","LoginComponent","loginComponent","DefaultLoginComponent","apiUrl","loginApiUrl","loginComponentProps"],"mappings":"6VAqBaA,EAAsB,SACjCC,EACAC,UAEqB,SAACC,WAAEC,cAAWC,cAAcC,MAA3B,2BACdC,EAAQC,IACRC,EAAsCC,OAC1CC,GADKC,OAAiBC,OAGlBC,EAASC,OAkBfC,GAAU,gIAdYC,OAAMf,MAAAA,SAAAA,EAASgB,cAAe,qBAAsB,CACpEC,YAAa,2BAGI,MAJPhB,SAIJiB,OACNP,GAAiB,GAEjBA,GAAiB,gCAGnBA,GAAiB,mCAMlB,SAEqBF,IAApBC,SACK,SAGHS,sBAAmBnB,MAAAA,SAAAA,EAASmB,4CAATnB,EAA4BY,sBACjDF,GAAmBS,SACdC,gBAACrB,KAAIG,UAAWA,EAAWC,UAAWA,GAAeC,OAI1DC,SACK,SAGHgB,GACJrB,MAAAA,SAAAA,EAASsB,iBAAkBC,SAG3BH,gBAACC,KACCG,OAAQxB,MAAAA,SAAAA,EAASyB,cACZzB,MAAAA,SAAAA,EAAS0B,sBAAuB"}
1
+ {"version":3,"file":"withPasswordProtect.js","sources":["../../../../src/hoc/withPasswordProtect.tsx"],"sourcesContent":["import { ElementType, useEffect, useState } from 'react';\nimport type { AppProps } from 'next/app';\n\nimport { NextRouter, useRouter } from 'next/router';\nimport {\n LoginComponent as DefaultLoginComponent,\n LoginComponentProps,\n} from './LoginComponent';\n\ninterface PasswordProtectHOCOptions {\n /* @default /api/passwordCheck */\n checkApiUrl?: string;\n /* @default /api/login */\n loginApiUrl?: string;\n loginComponent?: ElementType;\n loginComponentProps?: Omit<LoginComponentProps, 'apiUrl'>;\n bypassProtection?: (route: NextRouter) => boolean;\n}\n\n/// TODO: improve App typing\nexport const withPasswordProtect = (\n App: any,\n options?: PasswordProtectHOCOptions,\n) => {\n const ProtectedApp = ({ Component, pageProps, ...props }: AppProps) => {\n const [isAuthenticated, setAuthenticated] = useState<undefined | boolean>(\n undefined,\n );\n const router = useRouter();\n\n const checkIfLoggedIn = async () => {\n try {\n const res = await fetch(options?.checkApiUrl || '/api/passwordCheck', {\n credentials: 'include',\n });\n\n if (res.status === 200) {\n setAuthenticated(true);\n } else {\n setAuthenticated(false);\n }\n } catch (e) {\n setAuthenticated(false);\n }\n };\n\n useEffect(() => {\n checkIfLoggedIn();\n }, []);\n\n if (isAuthenticated === undefined) {\n return null;\n }\n\n const bypassProtection = options?.bypassProtection?.(router) ?? false;\n if (isAuthenticated || bypassProtection) {\n return <App Component={Component} pageProps={pageProps} {...props} />;\n }\n\n const LoginComponent: ElementType =\n options?.loginComponent || DefaultLoginComponent;\n\n return (\n <LoginComponent\n apiUrl={options?.loginApiUrl}\n {...(options?.loginComponentProps || {})}\n />\n );\n };\n\n return ProtectedApp;\n};\n"],"names":["withPasswordProtect","App","options","_a","Component","pageProps","props","_d","useState","undefined","isAuthenticated","setAuthenticated","router","useRouter","useEffect","fetch","checkApiUrl","credentials","status","bypassProtection","React","LoginComponent","loginComponent","DefaultLoginComponent","apiUrl","loginApiUrl","loginComponentProps"],"mappings":"wTAoBaA,EAAsB,SACjCC,EACAC,UAEqB,SAACC,WAAEC,cAAWC,cAAcC,MAA3B,2BACdC,EAAsCC,OAC1CC,GADKC,OAAiBC,OAGlBC,EAASC,OAkBfC,GAAU,gIAdYC,OAAMb,MAAAA,SAAAA,EAASc,cAAe,qBAAsB,CACpEC,YAAa,2BAGI,MAJPd,SAIJe,OACNP,GAAiB,GAEjBA,GAAiB,gCAGnBA,GAAiB,mCAMlB,SAEqBF,IAApBC,SACK,SAGHS,sBAAmBjB,MAAAA,SAAAA,EAASiB,4CAATjB,EAA4BU,sBACjDF,GAAmBS,SACdC,oBAACnB,KAAIG,UAAWA,EAAWC,UAAWA,GAAeC,QAGxDe,GACJnB,MAAAA,SAAAA,EAASoB,iBAAkBC,SAG3BH,oBAACC,KACCG,OAAQtB,MAAAA,SAAAA,EAASuB,cACZvB,MAAAA,SAAAA,EAASwB,sBAAuB"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@charamza/next-password-protect",
3
3
  "description": "Password protect your Next.js deployments.",
4
- "version": "0.0.0-development",
4
+ "version": "0.0.1-development",
5
5
  "license": "MIT",
6
6
  "main": "dist/cjs/src/index.js",
7
7
  "module": "dist/esm/src/index.js",
@@ -71,7 +71,6 @@
71
71
  "@typescript-eslint/eslint-plugin": "4.13.0",
72
72
  "@typescript-eslint/parser": "4.13.0",
73
73
  "@zerollup/ts-transform-paths": "1.7.18",
74
- "awesome-typescript-loader": "5.2.1",
75
74
  "babel-eslint": "10.1.0",
76
75
  "babel-loader": "8.2.2",
77
76
  "babel-preset-react-app": "10.0.0",
@@ -96,9 +95,9 @@
96
95
  "next": "11.1.1",
97
96
  "node-mocks-http": "^1.10.1",
98
97
  "prettier": "2.2.1",
99
- "react": "17.0.1",
100
- "react-dom": "17.0.1",
101
- "react-test-renderer": "17.0.1",
98
+ "react": "17.0.2",
99
+ "react-dom": "17.0.2",
100
+ "react-test-renderer": "17.0.2",
102
101
  "rollup": "2.38.5",
103
102
  "rollup-plugin-analyzer": "4.0.0",
104
103
  "rollup-plugin-clear": "2.0.7",
@@ -114,7 +113,6 @@
114
113
  "ts-node": "^9.1.1",
115
114
  "tsconfig-paths-webpack-plugin": "^3.3.0",
116
115
  "tslib": "2.1.0",
117
- "ttypescript": "1.5.12",
118
116
  "typescript": "4.1.3"
119
117
  },
120
118
  "eslintConfig": {