@bmdinner/logreg 2.1.0
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 +23 -0
- package/dist/AuthAPI.d.ts +21 -0
- package/dist/AuthProvider.d.ts +4 -0
- package/dist/components/LoginForm.d.ts +3 -0
- package/dist/components/RegisterForm.d.ts +3 -0
- package/dist/constants/endpoints.d.ts +9 -0
- package/dist/context/AuthContext.d.ts +4 -0
- package/dist/hooks/useAuth.d.ts +1 -0
- package/dist/hooks/useAuthForm.d.ts +19 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/services/api.d.ts +17 -0
- package/dist/types/index.d.ts +101 -0
- package/dist/utils/errorHandler.d.ts +6 -0
- package/dist/utils/tokenManager.d.ts +10 -0
- package/dist/utils/validation.d.ts +12 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# LogReg - An Auth Proxy Client
|
|
2
|
+
|
|
3
|
+
A flexible authentication client for React applications that integrates with my centralized Multi-Platform Authentication Service. The package provides authentication context, hooks, and form components for managing user authentication across multiple projects.
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
This package handles the client-side authentication flow by:
|
|
8
|
+
- Capturing user credentials through Login/Register forms
|
|
9
|
+
- Sending credentials to my centralized Multi-Platform Authentication Service
|
|
10
|
+
- Manages JWT tokens and authentication state
|
|
11
|
+
- Provides a consistent auth interface across all the projects
|
|
12
|
+
|
|
13
|
+
The actual authentication logic, OAuth2 integration, and user management happen separately in Multi-Platform Authentication Service backend.
|
|
14
|
+
|
|
15
|
+
## Features
|
|
16
|
+
|
|
17
|
+
- Ready-to-use LoginForm and RegisterForm components with built-in validation
|
|
18
|
+
- Customizable field rendering and validation rules
|
|
19
|
+
- Authentication context for global auth state management
|
|
20
|
+
- TypeScript support with full type definitions
|
|
21
|
+
- Token management and automatic refresh handling
|
|
22
|
+
- Works with any backend implementing the expected API contract
|
|
23
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AuthConfig, LoginCredentials, RegisterData, AuthResponse, User } from './types';
|
|
2
|
+
export declare class AuthAPI {
|
|
3
|
+
private api;
|
|
4
|
+
private config;
|
|
5
|
+
private isRefreshing;
|
|
6
|
+
private refreshSubscribers;
|
|
7
|
+
constructor(authUrl: string, apiKey: string, projectId: string, customEndpoints?: Partial<AuthConfig['endpoints']>);
|
|
8
|
+
private setupInterceptors;
|
|
9
|
+
private onRefreshSuccess;
|
|
10
|
+
private onRefreshFailure;
|
|
11
|
+
refreshAccessToken(): Promise<string>;
|
|
12
|
+
login(credentials: LoginCredentials): Promise<AuthResponse>;
|
|
13
|
+
register(userData: RegisterData): Promise<AuthResponse>;
|
|
14
|
+
forgotPassword(email: string): Promise<void>;
|
|
15
|
+
resetPassword(token: string, newPassword: string): Promise<void>;
|
|
16
|
+
logout(): Promise<void>;
|
|
17
|
+
verifyToken(): Promise<User | null>;
|
|
18
|
+
getToken(): string | null;
|
|
19
|
+
isAuthenticated(): boolean;
|
|
20
|
+
}
|
|
21
|
+
export default AuthAPI;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const DEFAULT_ENDPOINTS: {
|
|
2
|
+
readonly login: "/auth/login";
|
|
3
|
+
readonly register: "/auth/register";
|
|
4
|
+
readonly logout: "/auth/logout";
|
|
5
|
+
readonly refresh: "/auth/refresh";
|
|
6
|
+
readonly verify: "/auth/verify";
|
|
7
|
+
readonly forgotPassword: "/auth/forgot-password";
|
|
8
|
+
readonly resetPassword: "/auth/reset-password";
|
|
9
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useAuth: () => import("..").AuthContextType;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ChangeEvent } from 'react';
|
|
2
|
+
import { ValidationRules } from '../types';
|
|
3
|
+
interface UseAuthFormProps {
|
|
4
|
+
initialValues: Record<string, any>;
|
|
5
|
+
validationRules: ValidationRules;
|
|
6
|
+
onSubmit: (values: Record<string, any>) => Promise<any>;
|
|
7
|
+
}
|
|
8
|
+
export declare const useAuthForm: ({ initialValues, validationRules, onSubmit }: UseAuthFormProps) => {
|
|
9
|
+
values: Record<string, any>;
|
|
10
|
+
errors: Record<string, string>;
|
|
11
|
+
touched: Record<string, boolean>;
|
|
12
|
+
loading: boolean;
|
|
13
|
+
handleChange: (e: ChangeEvent<HTMLInputElement>) => void;
|
|
14
|
+
handleBlur: (e: ChangeEvent<HTMLInputElement>) => void;
|
|
15
|
+
handleSubmit: (e?: React.FormEvent<HTMLFormElement>) => Promise<any>;
|
|
16
|
+
reset: () => void;
|
|
17
|
+
setFieldValue: (field: string, value: any) => void;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { AuthProvider, AuthContext } from './AuthProvider';
|
|
2
|
+
export { useAuth } from './hooks/useAuth';
|
|
3
|
+
export { useAuthForm } from './hooks/useAuthForm';
|
|
4
|
+
export { LoginForm } from './components/LoginForm';
|
|
5
|
+
export { RegisterForm } from './components/RegisterForm';
|
|
6
|
+
export { default as AuthAPI } from './AuthAPI';
|
|
7
|
+
export { tokenManager } from './utils/tokenManager';
|
|
8
|
+
export { AuthError, handleAuthError } from './utils/errorHandler';
|
|
9
|
+
export { isRequired, isValidEmail, minLength, maxLength, matches, hasUppercase, hasNumber, validateForm } from './utils/validation';
|
|
10
|
+
export type { User, ProjectInfo, AuthResponse, LoginCredentials, RegisterData, ForgotPasswordRequest, ResetPasswordRequest, Field, ValidationRule, ValidationRules, AuthFormProps, AuthContextType, AuthProviderProps } from './types';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e,{createContext as r,useState as t,useEffect as n,useContext as o,useCallback as a}from"react";import i from"axios";function s(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}function u(e,r,t,n,o,a,i){try{var s=e[a](i),u=s.value}catch(e){return void t(e)}s.done?r(u):Promise.resolve(u).then(n,o)}function c(e){return function(){var r=this,t=arguments;return new Promise(function(n,o){var a=e.apply(r,t);function i(e){u(a,n,o,i,s,"next",e)}function s(e){u(a,n,o,i,s,"throw",e)}i(void 0)})}}function l(e,r,t){return r=m(r),function(e,r){if(r&&("object"==typeof r||"function"==typeof r))return r;if(void 0!==r)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,v()?Reflect.construct(r,t||[],m(e).constructor):r.apply(e,t))}function f(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function p(e,r,t){return r&&function(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,O(n.key),n)}}(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function d(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=E(e))||r){t&&(e=t);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,s=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return i=e.done,e},e:function(e){s=!0,a=e},f:function(){try{i||null==t.return||t.return()}finally{if(s)throw a}}}}function h(e,r,t){return(r=O(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function m(e){return m=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},m(e)}function v(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(v=function(){return!!e})()}function g(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function y(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?g(Object(t),!0).forEach(function(r){h(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):g(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function b(e,r){if(null==e)return{};var t,n,o=function(e,r){if(null==e)return{};var t={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==r.indexOf(n))continue;t[n]=e[n]}return t}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)t=a[n],-1===r.indexOf(t)&&{}.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function w(){var e,r,t="function"==typeof Symbol?Symbol:{},n=t.iterator||"@@iterator",o=t.toStringTag||"@@toStringTag";function a(t,n,o,a){var u=n&&n.prototype instanceof s?n:s,c=Object.create(u.prototype);return k(c,"_invoke",function(t,n,o){var a,s,u,c=0,l=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(r,t){return a=r,s=0,u=e,p.n=t,i}};function d(t,n){for(s=t,u=n,r=0;!f&&c&&!o&&r<l.length;r++){var o,a=l[r],d=p.p,h=a[2];t>3?(o=h===n)&&(u=a[(s=a[4])?5:(s=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=t<2&&d<a[1])?(s=0,p.v=n,p.n=a[1]):d<h&&(o=t<3||a[0]>n||n>h)&&(a[4]=t,a[5]=n,p.n=h,s=0))}if(o||t>1)return i;throw f=!0,n}return function(o,l,h){if(c>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),s=l,u=h;(r=s<2?e:u)||!f;){a||(s?s<3?(s>1&&(p.n=-1),d(s,u)):p.n=u:p.v=u);try{if(c=2,a){if(s||(o="next"),r=a[o]){if(!(r=r.call(a,u)))throw TypeError("iterator result is not an object");if(!r.done)return r;u=r.value,s<2&&(s=0)}else 1===s&&(r=a.return)&&r.call(a),s<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),s=1);a=e}else if((r=(f=p.n<0)?u:t.call(n,p))!==i)break}catch(r){a=e,s=1,u=r}finally{c=1}}return{value:r,done:f}}}(t,o,a),!0),c}var i={};function s(){}function u(){}function c(){}r=Object.getPrototypeOf;var l=[][n]?r(r([][n]())):(k(r={},n,function(){return this}),r),f=c.prototype=s.prototype=Object.create(l);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,k(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=c,k(f,"constructor",c),k(c,"constructor",u),u.displayName="GeneratorFunction",k(c,o,"GeneratorFunction"),k(f),k(f,o,"Generator"),k(f,n,function(){return this}),k(f,"toString",function(){return"[object Generator]"}),(w=function(){return{w:a,m:p}})()}function k(e,r,t,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}k=function(e,r,t,n){function a(r,t){k(e,r,function(e){return this._invoke(r,t,e)})}r?o?o(e,r,{value:t,enumerable:!n,configurable:!n,writable:!n}):e[r]=t:(a("next",0),a("throw",1),a("return",2))},k(e,r,t,n)}function P(e,r){return P=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,r){return e.__proto__=r,e},P(e,r)}function j(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,o,a,i,s=[],u=!0,c=!1;try{if(a=(t=t.call(e)).next,0===r);else for(;!(u=(n=a.call(t)).done)&&(s.push(n.value),s.length!==r);u=!0);}catch(e){c=!0,o=e}finally{try{if(!u&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(c)throw o}}return s}}(e,r)||E(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,r);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==typeof r?r:r+""}function E(e,r){if(e){if("string"==typeof e)return s(e,r);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?s(e,r):void 0}}function S(e){var r="function"==typeof Map?new Map:void 0;return S=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(r){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==r){if(r.has(e))return r.get(e);r.set(e,t)}function t(){return function(e,r,t){if(v())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,r);var o=new(e.bind.apply(e,n));return t&&P(o,t.prototype),o}(e,arguments,m(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),P(t,e)},S(e)}var T="token",A="refreshToken",N={getToken:function(){return localStorage.getItem(T)},setToken:function(e){localStorage.setItem(T,e)},removeToken:function(){localStorage.removeItem(T)},getRefreshToken:function(){return localStorage.getItem(A)},setRefreshToken:function(e){localStorage.setItem(A,e)},removeRefreshToken:function(){localStorage.removeItem(A)},clearAll:function(){localStorage.removeItem(T),localStorage.removeItem(A)},hasTokens:function(){return!!localStorage.getItem(T)&&!!localStorage.getItem(A)}},x=function(){function e(r,t,n){var o;return f(this,e),(o=l(this,e,[r])).name="AuthError",o.statusCode=t,o.originalError=n,o}return function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),r&&P(e,r)}(e,S(Error)),p(e)}(),I=function(e){var r,t;if(e.response){var n=e.response.status,o=(null===(r=e.response.data)||void 0===r?void 0:r.message)||(null===(t=e.response.data)||void 0===t?void 0:t.error)||"Authentication failed (".concat(n,")");return 401===n?(N.clearAll(),new x("Session expired. Please login again.",n,e)):new x(o,n,e)}return e.request?new x("Unable to connect to authentication service",503,e):new x(e.message||"An unknown error occurred",500,e)},R={login:"/auth/login",register:"/auth/register",logout:"/auth/logout",refresh:"/auth/refresh",verify:"/auth/verify",forgotPassword:"/auth/forgot-password",resetPassword:"/auth/reset-password"},q=function(){return p(function e(r,t,n,o){f(this,e),this.isRefreshing=!1,this.refreshSubscribers=[],this.config={authUrl:r,apiKey:t,projectId:n,endpoints:y(y({},R),o)},this.api=i.create({baseURL:r,timeout:15e3,headers:{"Content-Type":"application/json","x-api-key":t,"x-project-id":n}}),this.setupInterceptors()},[{key:"setupInterceptors",value:function(){var e=this;this.api.interceptors.request.use(function(e){var r=N.getToken();return r&&(e.headers.Authorization="Bearer ".concat(r)),e},function(e){return Promise.reject(e)}),this.api.interceptors.response.use(function(e){return e},function(){var r=c(w().m(function r(t){var n,o,a,i,s;return w().w(function(r){for(;;)switch(r.p=r.n){case 0:if((a=t.config)&&!(null===(n=a.url)||void 0===n?void 0:n.includes(e.config.endpoints.refresh))){r.n=1;break}return r.a(2,Promise.reject(t));case 1:if(401!==(null===(o=t.response)||void 0===o?void 0:o.status)||a._retry){r.n=7;break}if(!e.isRefreshing){r.n=2;break}return r.a(2,new Promise(function(r){e.refreshSubscribers.push(function(t){a.headers.Authorization="Bearer ".concat(t),r(e.api(a))})}));case 2:return a._retry=!0,e.isRefreshing=!0,r.p=3,r.n=4,e.refreshAccessToken();case 4:return i=r.v,e.onRefreshSuccess(i),a.headers.Authorization="Bearer ".concat(i),r.a(2,e.api(a));case 5:return r.p=5,s=r.v,e.onRefreshFailure(),r.a(2,Promise.reject(s));case 6:return r.p=6,e.isRefreshing=!1,r.f(6);case 7:return r.a(2,Promise.reject(t))}},r,null,[[3,5,6,7]])}));return function(e){return r.apply(this,arguments)}}())}},{key:"onRefreshSuccess",value:function(e){this.refreshSubscribers.forEach(function(r){return r(e)}),this.refreshSubscribers=[]}},{key:"onRefreshFailure",value:function(){N.clearAll(),this.refreshSubscribers=[]}},{key:"refreshAccessToken",value:(s=c(w().m(function e(){var r,t,n;return w().w(function(e){for(;;)switch(e.n){case 0:if(r=N.getRefreshToken()){e.n=1;break}throw new Error("No refresh token available");case 1:return e.n=2,this.api.post(this.config.endpoints.refresh,{refreshToken:r});case 2:return t=e.v,n=t.data.token,N.setToken(n),e.a(2,n)}},e,this)})),function(){return s.apply(this,arguments)})},{key:"login",value:(a=c(w().m(function e(r){var t,n,o;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this.api.post(this.config.endpoints.login,y(y({},r),{},{projectId:this.config.projectId}));case 1:return t=e.v,(n=t.data).token&&(N.setToken(n.token),N.setRefreshToken(n.refreshToken)),e.a(2,n);case 2:throw e.p=2,o=e.v,I(o);case 3:return e.a(2)}},e,this,[[0,2]])})),function(e){return a.apply(this,arguments)})},{key:"register",value:(o=c(w().m(function e(r){var t,n,o;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this.api.post(this.config.endpoints.register,y(y({},r),{},{projectId:this.config.projectId}));case 1:return t=e.v,(n=t.data).token&&(N.setToken(n.token),N.setRefreshToken(n.refreshToken)),e.a(2,n);case 2:throw e.p=2,o=e.v,I(o);case 3:return e.a(2)}},e,this,[[0,2]])})),function(e){return o.apply(this,arguments)})},{key:"forgotPassword",value:(n=c(w().m(function e(r){var t;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this.api.post(this.config.endpoints.forgotPassword,{email:r});case 1:e.n=3;break;case 2:throw e.p=2,t=e.v,I(t);case 3:return e.a(2)}},e,this,[[0,2]])})),function(e){return n.apply(this,arguments)})},{key:"resetPassword",value:(t=c(w().m(function e(r,t){var n;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this.api.post(this.config.endpoints.resetPassword,{token:r,newPassword:t});case 1:e.n=3;break;case 2:throw e.p=2,n=e.v,I(n);case 3:return e.a(2)}},e,this,[[0,2]])})),function(e,r){return t.apply(this,arguments)})},{key:"logout",value:(r=c(w().m(function e(){var r,t;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,!(r=N.getRefreshToken())){e.n=1;break}return e.n=1,this.api.post(this.config.endpoints.logout,{refreshToken:r});case 1:e.n=3;break;case 2:e.p=2,t=e.v,console.error("Logout error:",t);case 3:return e.p=3,N.clearAll(),e.f(3);case 4:return e.a(2)}},e,this,[[0,2,3,4]])})),function(){return r.apply(this,arguments)})},{key:"verifyToken",value:(e=c(w().m(function e(){var r;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,N.getToken()){e.n=1;break}return e.a(2,null);case 1:return e.n=2,this.api.get(this.config.endpoints.verify);case 2:return r=e.v,e.a(2,r.data);case 3:return e.p=3,e.v,N.clearAll(),e.a(2,null)}},e,this,[[0,3]])})),function(){return e.apply(this,arguments)})},{key:"getToken",value:function(){return N.getToken()}},{key:"isAuthenticated",value:function(){return N.hasTokens()}}]);var e,r,t,n,o,a,s}(),_=r(void 0),B=function(r){var o=r.children,a=r.authUrl,i=r.apiKey,s=r.projectId,u=r.loginEndpoint,l=void 0===u?R.login:u,f=r.registerEndpoint,p=void 0===f?R.register:f,d=r.logoutEndpoint,h=void 0===d?R.logout:d,m=r.refreshEndpoint,v=void 0===m?R.refresh:m,g=r.verifyEndpoint,y=void 0===g?R.verify:g,b=r.forgotPasswordEndpoint,k=void 0===b?R.forgotPassword:b,P=r.resetPasswordEndpoint,O=void 0===P?R.resetPassword:P,E=r.onError,S=j(t(null),2),T=S[0],A=S[1],N=j(t(null),2),x=N[0],I=N[1],B=j(t(!0),2),C=B[0],F=B[1],U=j(t(null),2),D=U[0],G=U[1],V=new q(a,i,s,{login:l,register:p,logout:h,refresh:v,verify:y,forgotPassword:k,resetPassword:O});n(function(){var e=function(){var e=c(w().m(function e(){var r,t;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,V.verifyToken();case 1:(r=e.v)&&A(r),e.n=3;break;case 2:e.p=2,t=e.v,console.error("Auth initialization error:",t);case 3:return e.p=3,F(!1),e.f(3);case 4:return e.a(2)}},e,null,[[0,2,3,4]])}));return function(){return e.apply(this,arguments)}}();e()},[]);var z=function(){var e=c(w().m(function e(r){var t,n,o;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,G(null),e.n=1,V.login(r);case 1:return t=e.v,A(t.user),t.project&&I(t.project),e.a(2,t);case 2:throw e.p=2,o=e.v,n=o.message||"Login failed",G(n),E&&E(o),o;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(r){return e.apply(this,arguments)}}(),L=function(){var e=c(w().m(function e(r){var t,n,o;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,G(null),e.n=1,V.register(r);case 1:return t=e.v,A(t.user),t.project&&I(t.project),e.a(2,t);case 2:throw e.p=2,o=e.v,n=o.message||"Registration failed",G(n),E&&E(o),o;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(r){return e.apply(this,arguments)}}(),M=function(){var e=c(w().m(function e(r){var t,n;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,G(null),e.n=1,V.forgotPassword(r);case 1:e.n=3;break;case 2:throw e.p=2,n=e.v,t=n.message||"Password reset request failed",G(t),E&&E(n),n;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(r){return e.apply(this,arguments)}}(),K=function(){var e=c(w().m(function e(r,t){var n,o;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,G(null),e.n=1,V.resetPassword(r,t);case 1:e.n=3;break;case 2:throw e.p=2,o=e.v,n=o.message||"Password reset failed",G(n),E&&E(o),o;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(r,t){return e.apply(this,arguments)}}(),Z=function(){var e=c(w().m(function e(){var r;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,V.logout();case 1:A(null),I(null),G(null),e.n=3;break;case 2:throw e.p=2,r=e.v,E&&E(r),r;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}(),$=function(){var e=c(w().m(function e(){var r;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,V.refreshAccessToken();case 1:return r=e.v,e.a(2,r);case 2:return e.p=2,e.v,e.a(2,null)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}(),W={user:T,project:x,loading:C,error:D,login:z,register:L,logout:Z,refreshToken:$,forgotPassword:M,resetPassword:K,isAuthenticated:!!T};return e.createElement(_.Provider,{value:W},o)},C=function(){var e=o(_);if(!e)throw new Error("useAuth must be used within an AuthProvider");return e},F=function(e){var r=e.initialValues,n=e.validationRules,o=e.onSubmit,i=j(t(r),2),s=i[0],u=i[1],l=j(t({}),2),f=l[0],p=l[1],m=j(t({}),2),v=m[0],g=m[1],b=j(t(!1),2),k=b[0],P=b[1],O=a(function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s,r={},t=0,o=Object.entries(n);t<o.length;t++){var a,i=j(o[t],2),u=i[0],c=d(i[1]);try{for(c.s();!(a=c.n()).done;){var l=a.value;if(!l.validate(e[u],e)){r[u]=l.message;break}}}catch(e){c.e(e)}finally{c.f()}}return p(r),0===Object.keys(r).length},[s,n]),E=function(){var e=c(w().m(function e(r){var t,n,a;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:if(null==r||r.preventDefault(),t=Object.keys(s).reduce(function(e,r){return y(y({},e),{},h({},r,!0))},{}),g(t),O()){e.n=1;break}return e.a(2);case 1:return P(!0),e.p=2,e.n=3,o(s);case 3:return n=e.v,e.a(2,n);case 4:throw e.p=4,a=e.v,p({form:a.message}),a;case 5:return e.p=5,P(!1),e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(r){return e.apply(this,arguments)}}();return{values:s,errors:f,touched:v,loading:k,handleChange:function(e){var r=e.target,t=r.name,n=r.value,o=y(y({},s),{},h({},t,n));u(o),v[t]&&O(o)},handleBlur:function(e){var r=e.target.name;g(y(y({},v),{},h({},r,!0))),O()},handleSubmit:E,reset:function(){u(r),p({}),g({})},setFieldValue:function(e,r){u(y(y({},s),{},h({},e,r)))}}},U=function(e){return null!=e&&("string"!=typeof e||e.trim().length>0)},D=function(e){return!!e&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)},G=function(e,r){return!!e&&String(e).length>=r},V=function(e,r){return!e||String(e).length<=r},z=function(e,r){return e===r},L=function(e){return/[A-Z]/.test(e)},M=function(e){return/[0-9]/.test(e)},K=function(e,r){for(var t={},n=0,o=Object.entries(r);n<o.length;n++){var a,i=j(o[n],2),s=i[0],u=d(i[1]);try{for(u.s();!(a=u.n()).done;){var c=a.value;if(!c.validate(e[s],e)){t[s]=c.message;break}}}catch(e){u.e(e)}finally{u.f()}}return{isValid:0===Object.keys(t).length,errors:t}},Z=function(r){var t,n=r.fields,o=void 0===n?[{name:"email",type:"email",label:"Email",required:!0,placeholder:"you@example.com"},{name:"password",type:"password",label:"Password",required:!0,placeholder:"password"}]:n,a=r.validationRules,i=void 0===a?{}:a,s=r.onSubmit,u=r.submitButtonText,l=void 0===u?"Sign In":u,f=r.renderField,p=r.onSuccess,d=r.onError,m=r.className,v=void 0===m?"":m,g=y({email:[{validate:U,message:"Email is required"},{validate:D,message:"Invalid email format"}],password:[{validate:U,message:"Password is required"},{validate:function(e){return(null==e?void 0:e.length)>=6},message:"Password must be at least 6 characters"}]},i),b=F({initialValues:o.reduce(function(e,r){return y(y({},e),{},h({},r.name,""))},{}),validationRules:g,onSubmit:(t=c(w().m(function e(r){var t,n;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,null==s?void 0:s(r);case 1:return t=e.v,null==p||p(t),e.a(2,t);case 2:throw e.p=2,n=e.v,null==d||d(n),n;case 3:return e.a(2)}},e,null,[[0,2]])})),function(e){return t.apply(this,arguments)})}),k=b.values,P=b.errors,j=b.loading,O=b.handleChange,E=b.handleBlur,S=b.handleSubmit;return e.createElement("form",{onSubmit:S,className:"auth-form ".concat(v)},o.map(function(r){return f?f(r,{values:k,errors:P,handleChange:O,handleBlur:E}):function(r){return e.createElement("div",{key:r.name,className:"auth-form-field"},e.createElement("label",{htmlFor:r.name},r.label,r.required&&e.createElement("span",{className:"required-star"},"*")),e.createElement("div",{className:"input-wrapper"},e.createElement("input",{id:r.name,name:r.name,type:r.type||"text",value:k[r.name]||"",onChange:O,onBlur:E,placeholder:r.placeholder,className:P[r.name]?"error":""})),P[r.name]&&e.createElement("small",{className:"error-message"},P[r.name]))}(r)}),P.form&&e.createElement("div",{className:"form-error"},P.form),e.createElement("button",{type:"submit",disabled:j,className:"auth-submit-btn"},j?"Please wait...":l))},$=["confirmPassword"],W=function(r){var t,n,o=r.fields,a=void 0===o?[{name:"username",type:"text",label:"Username",required:!0,placeholder:"johndoe"},{name:"email",type:"email",label:"Email",required:!0,placeholder:"you@example.com"},{name:"password",type:"password",label:"Password",required:!0,placeholder:"password"},{name:"confirmPassword",type:"password",label:"Confirm Password",required:!0,placeholder:"confirm password"}]:o,i=r.validationRules,s=void 0===i?{}:i,u=r.onSubmit,l=r.submitButtonText,f=void 0===l?"Sign Up":l,p=r.renderField,d=r.onSuccess,m=r.onError,v=r.className,g=void 0===v?"":v,k=y({username:[{validate:U,message:"Username is required"},{validate:function(e){return(null==e?void 0:e.length)>=3},message:"Username must be at least 3 characters"}],email:[{validate:U,message:"Email is required"},{validate:D,message:"Invalid email format"}],password:[{validate:U,message:"Password is required"},{validate:function(e){return G(e,8)},message:"Password must be at least 8 characters"},{validate:L,message:"Password must contain at least one uppercase letter"},{validate:M,message:"Password must contain at least one number"}],confirmPassword:[{validate:U,message:"Please confirm your password"},{validate:function(e,r){return z(e,null==r?void 0:r.password)},message:"Passwords do not match"}]},s),P=F({initialValues:a.reduce(function(e,r){return y(y({},e),{},h({},r.name,""))},{}),validationRules:k,onSubmit:(n=c(w().m(function e(r){var t,n,o;return w().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,r.confirmPassword,t=b(r,$),e.n=1,null==u?void 0:u(t);case 1:return n=e.v,null==d||d(n),e.a(2,n);case 2:throw e.p=2,o=e.v,null==m||m(o),o;case 3:return e.a(2)}},e,null,[[0,2]])})),function(e){return n.apply(this,arguments)})}),j=P.values,O=P.errors,E=P.loading,S=P.handleChange,T=P.handleBlur,A=P.handleSubmit,N=[{check:(null===(t=j.password)||void 0===t?void 0:t.length)>=8,text:"At least 8 characters"},{check:/[A-Z]/.test(j.password||""),text:"One uppercase letter"},{check:/[0-9]/.test(j.password||""),text:"One number"}],x=function(){var e=N.filter(function(e){return e.check}).length;return 3===e?"Strong":e>=2?"Medium":"Weak"};return e.createElement("form",{onSubmit:A,className:"auth-form ".concat(g)},a.map(function(r){return p?p(r,{values:j,errors:O,handleChange:S,handleBlur:T}):function(r){return e.createElement("div",{key:r.name,className:"auth-form-field"},e.createElement("label",{htmlFor:r.name},r.label,r.required&&e.createElement("span",{className:"required-star"},"*")),e.createElement("div",{className:"input-wrapper"},e.createElement("input",{id:r.name,name:r.name,type:r.type||"text",value:j[r.name]||"",onChange:S,onBlur:T,placeholder:r.placeholder,className:O[r.name]?"error":""})),O[r.name]&&e.createElement("small",{className:"error-message"},O[r.name]))}(r)}),j.password&&e.createElement("div",{className:"password-strength"},e.createElement("div",{className:"strength-label"},"Password Strength: ",e.createElement("span",{className:"strength-".concat(x().toLowerCase())},x())),e.createElement("div",{className:"password-checks"},N.map(function(r,t){return e.createElement("div",{key:t,className:"check-item"},e.createElement("span",{className:r.check?"check-pass":"check-fail"},r.check?"✓":"○"),e.createElement("span",{className:"check-text"},r.text))}))),O.form&&e.createElement("div",{className:"form-error"},O.form),e.createElement("button",{type:"submit",disabled:E,className:"auth-submit-btn"},E?"Creating account...":f))};export{q as AuthAPI,_ as AuthContext,x as AuthError,B as AuthProvider,Z as LoginForm,W as RegisterForm,I as handleAuthError,M as hasNumber,L as hasUppercase,U as isRequired,D as isValidEmail,z as matches,V as maxLength,G as minLength,N as tokenManager,C as useAuth,F as useAuthForm,K as validateForm};
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/utils/tokenManager.ts","../src/utils/errorHandler.ts","../src/constants/endpoints.ts","../src/AuthAPI.ts","../src/AuthProvider.tsx","../src/hooks/useAuth.ts","../src/hooks/useAuthForm.ts","../src/utils/validation.ts","../src/components/LoginForm.tsx","../src/components/RegisterForm.tsx"],"sourcesContent":["const TOKEN_KEY = 'token';\r\nconst REFRESH_TOKEN_KEY = 'refreshToken';\r\n\r\nexport const tokenManager = {\r\n getToken: (): string | null => {\r\n return localStorage.getItem(TOKEN_KEY);\r\n },\r\n \r\n setToken: (token: string): void => {\r\n localStorage.setItem(TOKEN_KEY, token);\r\n },\r\n \r\n removeToken: (): void => {\r\n localStorage.removeItem(TOKEN_KEY);\r\n },\r\n \r\n getRefreshToken: (): string | null => {\r\n return localStorage.getItem(REFRESH_TOKEN_KEY);\r\n },\r\n \r\n setRefreshToken: (refreshToken: string): void => {\r\n localStorage.setItem(REFRESH_TOKEN_KEY, refreshToken);\r\n },\r\n \r\n removeRefreshToken: (): void => {\r\n localStorage.removeItem(REFRESH_TOKEN_KEY);\r\n },\r\n \r\n clearAll: (): void => {\r\n localStorage.removeItem(TOKEN_KEY);\r\n localStorage.removeItem(REFRESH_TOKEN_KEY);\r\n },\r\n \r\n hasTokens: (): boolean => {\r\n return !!localStorage.getItem(TOKEN_KEY) && !!localStorage.getItem(REFRESH_TOKEN_KEY);\r\n }\r\n};","import { tokenManager } from './tokenManager';\r\n\r\nexport class AuthError extends Error {\r\n public statusCode?: number;\r\n public originalError?: any;\r\n\r\n constructor(message: string, statusCode?: number, originalError?: any) {\r\n super(message);\r\n this.name = 'AuthError';\r\n this.statusCode = statusCode;\r\n this.originalError = originalError;\r\n }\r\n}\r\n\r\nexport const handleAuthError = (error: any): AuthError => {\r\n if (error.response) {\r\n const statusCode = error.response.status;\r\n const message = error.response.data?.message || error.response.data?.error || `Authentication failed (${statusCode})`;\r\n \r\n if (statusCode === 401) {\r\n tokenManager.clearAll();\r\n return new AuthError('Session expired. Please login again.', statusCode, error);\r\n }\r\n \r\n return new AuthError(message, statusCode, error);\r\n }\r\n \r\n if (error.request) {\r\n return new AuthError('Unable to connect to authentication service', 503, error);\r\n }\r\n \r\n return new AuthError(error.message || 'An unknown error occurred', 500, error);\r\n};","export const DEFAULT_ENDPOINTS = {\r\n login: '/auth/login',\r\n register: '/auth/register',\r\n logout: '/auth/logout',\r\n refresh: '/auth/refresh',\r\n verify: '/auth/verify',\r\n forgotPassword: '/auth/forgot-password',\r\n resetPassword: '/auth/reset-password'\r\n} as const;","import axios, { AxiosInstance, InternalAxiosRequestConfig, AxiosError } from 'axios';\r\nimport { tokenManager } from './utils/tokenManager';\r\nimport { handleAuthError } from './utils/errorHandler';\r\nimport { AuthConfig, LoginCredentials, RegisterData, AuthResponse, User } from './types';\r\nimport { DEFAULT_ENDPOINTS } from './constants/endpoints';\r\n\r\ninterface ExtendedAxiosRequestConfig extends InternalAxiosRequestConfig {\r\n _retry?: boolean;\r\n}\r\n\r\nexport class AuthAPI {\r\n private api: AxiosInstance;\r\n private config: AuthConfig;\r\n private isRefreshing = false;\r\n private refreshSubscribers: ((token: string) => void)[] = [];\r\n\r\n constructor(\r\n authUrl: string,\r\n apiKey: string,\r\n projectId: string,\r\n customEndpoints?: Partial<AuthConfig['endpoints']>\r\n ) {\r\n this.config = {\r\n authUrl,\r\n apiKey,\r\n projectId,\r\n endpoints: {\r\n ...DEFAULT_ENDPOINTS,\r\n ...customEndpoints\r\n }\r\n };\r\n\r\n this.api = axios.create({\r\n baseURL: authUrl,\r\n timeout: 15000,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'x-api-key': apiKey,\r\n 'x-project-id': projectId\r\n }\r\n });\r\n\r\n this.setupInterceptors();\r\n }\r\n\r\n private setupInterceptors(): void {\r\n this.api.interceptors.request.use(\r\n (config: InternalAxiosRequestConfig) => {\r\n const token = tokenManager.getToken();\r\n if (token) {\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n return config;\r\n },\r\n (error) => Promise.reject(error)\r\n );\r\n\r\n this.api.interceptors.response.use(\r\n (response) => response,\r\n async (error: AxiosError) => {\r\n const originalRequest = error.config as ExtendedAxiosRequestConfig;\r\n \r\n if (!originalRequest || originalRequest.url?.includes(this.config.endpoints.refresh)) {\r\n return Promise.reject(error);\r\n }\r\n\r\n if (error.response?.status === 401 && !originalRequest._retry) {\r\n if (this.isRefreshing) {\r\n return new Promise((resolve) => {\r\n this.refreshSubscribers.push((token: string) => {\r\n originalRequest.headers.Authorization = `Bearer ${token}`;\r\n resolve(this.api(originalRequest));\r\n });\r\n });\r\n }\r\n\r\n originalRequest._retry = true;\r\n this.isRefreshing = true;\r\n\r\n try {\r\n const newToken = await this.refreshAccessToken();\r\n this.onRefreshSuccess(newToken);\r\n originalRequest.headers.Authorization = `Bearer ${newToken}`;\r\n return this.api(originalRequest);\r\n } catch (refreshError) {\r\n this.onRefreshFailure();\r\n return Promise.reject(refreshError);\r\n } finally {\r\n this.isRefreshing = false;\r\n }\r\n }\r\n\r\n return Promise.reject(error);\r\n }\r\n );\r\n }\r\n\r\n private onRefreshSuccess(token: string): void {\r\n this.refreshSubscribers.forEach(callback => callback(token));\r\n this.refreshSubscribers = [];\r\n }\r\n\r\n private onRefreshFailure(): void {\r\n tokenManager.clearAll();\r\n this.refreshSubscribers = [];\r\n }\r\n\r\n public async refreshAccessToken(): Promise<string> {\r\n const refreshToken = tokenManager.getRefreshToken();\r\n if (!refreshToken) {\r\n throw new Error('No refresh token available');\r\n }\r\n\r\n const response = await this.api.post(this.config.endpoints.refresh, {\r\n refreshToken\r\n });\r\n\r\n const { token } = response.data;\r\n tokenManager.setToken(token);\r\n return token;\r\n }\r\n\r\n async login(credentials: LoginCredentials): Promise<AuthResponse> {\r\n try {\r\n const response = await this.api.post(this.config.endpoints.login, {\r\n ...credentials,\r\n projectId: this.config.projectId\r\n });\r\n\r\n const data = response.data;\r\n \r\n if (data.token) {\r\n tokenManager.setToken(data.token);\r\n tokenManager.setRefreshToken(data.refreshToken);\r\n }\r\n \r\n return data;\r\n } catch (error) {\r\n throw handleAuthError(error);\r\n }\r\n }\r\n\r\n async register(userData: RegisterData): Promise<AuthResponse> {\r\n try {\r\n const response = await this.api.post(this.config.endpoints.register, {\r\n ...userData,\r\n projectId: this.config.projectId\r\n });\r\n\r\n const data = response.data;\r\n \r\n if (data.token) {\r\n tokenManager.setToken(data.token);\r\n tokenManager.setRefreshToken(data.refreshToken);\r\n }\r\n \r\n return data;\r\n } catch (error) {\r\n throw handleAuthError(error);\r\n }\r\n }\r\n\r\n async forgotPassword(email: string): Promise<void> {\r\n try {\r\n await this.api.post(this.config.endpoints.forgotPassword, { email });\r\n } catch (error) {\r\n throw handleAuthError(error);\r\n }\r\n }\r\n\r\n async resetPassword(token: string, newPassword: string): Promise<void> {\r\n try {\r\n await this.api.post(this.config.endpoints.resetPassword, { token, newPassword });\r\n } catch (error) {\r\n throw handleAuthError(error);\r\n }\r\n }\r\n\r\n async logout(): Promise<void> {\r\n try {\r\n const refreshToken = tokenManager.getRefreshToken();\r\n if (refreshToken) {\r\n await this.api.post(this.config.endpoints.logout, { refreshToken });\r\n }\r\n } catch (error) {\r\n console.error('Logout error:', error);\r\n } finally {\r\n tokenManager.clearAll();\r\n }\r\n }\r\n\r\n async verifyToken(): Promise<User | null> {\r\n try {\r\n const token = tokenManager.getToken();\r\n if (!token) return null;\r\n\r\n const response = await this.api.get(this.config.endpoints.verify);\r\n return response.data;\r\n } catch (error) {\r\n tokenManager.clearAll();\r\n return null;\r\n }\r\n }\r\n\r\n getToken(): string | null {\r\n return tokenManager.getToken();\r\n }\r\n\r\n isAuthenticated(): boolean {\r\n return tokenManager.hasTokens();\r\n }\r\n}\r\n\r\nexport default AuthAPI;","import React, { createContext, useState, useEffect } from 'react';\r\nimport AuthAPI from './AuthAPI';\r\nimport { AuthContextType, AuthProviderProps, User, ProjectInfo, AuthResponse, LoginCredentials, RegisterData } from './types';\r\nimport { DEFAULT_ENDPOINTS } from './constants/endpoints';\r\n\r\nexport const AuthContext = createContext<AuthContextType | undefined>(undefined);\r\n\r\nexport const AuthProvider: React.FC<AuthProviderProps> = ({\r\n children,\r\n authUrl,\r\n apiKey,\r\n projectId,\r\n loginEndpoint = DEFAULT_ENDPOINTS.login,\r\n registerEndpoint = DEFAULT_ENDPOINTS.register,\r\n logoutEndpoint = DEFAULT_ENDPOINTS.logout,\r\n refreshEndpoint = DEFAULT_ENDPOINTS.refresh,\r\n verifyEndpoint = DEFAULT_ENDPOINTS.verify,\r\n forgotPasswordEndpoint = DEFAULT_ENDPOINTS.forgotPassword,\r\n resetPasswordEndpoint = DEFAULT_ENDPOINTS.resetPassword,\r\n onError\r\n}) => {\r\n const [user, setUser] = useState<User | null>(null);\r\n const [project, setProject] = useState<ProjectInfo | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const authAPI = new AuthAPI(authUrl, apiKey, projectId, {\r\n login: loginEndpoint,\r\n register: registerEndpoint,\r\n logout: logoutEndpoint,\r\n refresh: refreshEndpoint,\r\n verify: verifyEndpoint,\r\n forgotPassword: forgotPasswordEndpoint,\r\n resetPassword: resetPasswordEndpoint\r\n });\r\n\r\n useEffect(() => {\r\n const initAuth = async () => {\r\n try {\r\n const verifiedUser = await authAPI.verifyToken();\r\n if (verifiedUser) {\r\n setUser(verifiedUser);\r\n }\r\n } catch (err) {\r\n console.error('Auth initialization error:', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n initAuth();\r\n }, []);\r\n\r\n const login = async (credentials: LoginCredentials): Promise<AuthResponse> => {\r\n try {\r\n setError(null);\r\n const response = await authAPI.login(credentials);\r\n setUser(response.user);\r\n if (response.project) {\r\n setProject(response.project);\r\n }\r\n return response;\r\n } catch (err: any) {\r\n const errorMessage = err.message || 'Login failed';\r\n setError(errorMessage);\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const register = async (data: RegisterData): Promise<AuthResponse> => {\r\n try {\r\n setError(null);\r\n const response = await authAPI.register(data);\r\n setUser(response.user);\r\n if (response.project) {\r\n setProject(response.project);\r\n }\r\n return response;\r\n } catch (err: any) {\r\n const errorMessage = err.message || 'Registration failed';\r\n setError(errorMessage);\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const forgotPassword = async (email: string): Promise<void> => {\r\n try {\r\n setError(null);\r\n await authAPI.forgotPassword(email);\r\n } catch (err: any) {\r\n const errorMessage = err.message || 'Password reset request failed';\r\n setError(errorMessage);\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const resetPassword = async (token: string, newPassword: string): Promise<void> => {\r\n try {\r\n setError(null);\r\n await authAPI.resetPassword(token, newPassword);\r\n } catch (err: any) {\r\n const errorMessage = err.message || 'Password reset failed';\r\n setError(errorMessage);\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const logout = async (): Promise<void> => {\r\n try {\r\n await authAPI.logout();\r\n setUser(null);\r\n setProject(null);\r\n setError(null);\r\n } catch (err: any) {\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const refreshToken = async (): Promise<string | null> => {\r\n try {\r\n const newToken = await authAPI.refreshAccessToken();\r\n return newToken;\r\n } catch (err) {\r\n return null;\r\n }\r\n };\r\n\r\n const value: AuthContextType = {\r\n user,\r\n project,\r\n loading,\r\n error,\r\n login,\r\n register,\r\n logout,\r\n refreshToken,\r\n forgotPassword,\r\n resetPassword,\r\n isAuthenticated: !!user\r\n };\r\n\r\n return React.createElement(AuthContext.Provider, { value }, children);\r\n};","import { useContext } from 'react';\nimport { AuthContext } from '../AuthProvider';\n\nexport const useAuth = () => {\n const context = useContext(AuthContext);\n \n if (!context) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n \n return context;\n};","import { useState, useCallback, ChangeEvent } from 'react';\nimport { ValidationRules } from '../types';\n\ninterface UseAuthFormProps {\n initialValues: Record<string, any>;\n validationRules: ValidationRules;\n onSubmit: (values: Record<string, any>) => Promise<any>;\n}\n\nexport const useAuthForm = ({ initialValues, validationRules, onSubmit }: UseAuthFormProps) => {\n const [values, setValues] = useState(initialValues);\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [loading, setLoading] = useState(false);\n\n const validate = useCallback((data = values) => {\n const newErrors: Record<string, string> = {};\n \n for (const [field, rules] of Object.entries(validationRules)) {\n for (const rule of rules) {\n if (!rule.validate(data[field], data)) {\n newErrors[field] = rule.message;\n break;\n }\n }\n }\n \n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n }, [values, validationRules]);\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n const newValues = { ...values, [name]: value };\n setValues(newValues);\n \n if (touched[name]) {\n validate(newValues);\n }\n };\n\n const handleBlur = (e: ChangeEvent<HTMLInputElement>) => {\n const { name } = e.target;\n setTouched({ ...touched, [name]: true });\n validate();\n };\n\n const handleSubmit = async (e?: React.FormEvent<HTMLFormElement>) => {\n e?.preventDefault();\n \n const allTouched = Object.keys(values).reduce((acc, key) => ({ \n ...acc, \n [key]: true \n }), {});\n setTouched(allTouched);\n \n if (!validate()) return;\n \n setLoading(true);\n try {\n const result = await onSubmit(values);\n return result;\n } catch (err: any) {\n setErrors({ form: err.message });\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const reset = () => {\n setValues(initialValues);\n setErrors({});\n setTouched({});\n };\n\n const setFieldValue = (field: string, value: any) => {\n setValues({ ...values, [field]: value });\n };\n\n return {\n values,\n errors,\n touched,\n loading,\n handleChange,\n handleBlur,\n handleSubmit,\n reset,\n setFieldValue\n };\n};","import { ValidationRules } from '../types';\n\nexport const isRequired = (value: any): boolean => {\n if (value == null) return false;\n if (typeof value === 'string') return value.trim().length > 0;\n return true;\n};\n\nexport const isValidEmail = (email: string): boolean => {\n if (!email) return false;\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n};\n\nexport const minLength = (value: string, min: number): boolean => {\n if (!value) return false;\n return String(value).length >= min;\n};\n\nexport const maxLength = (value: string, max: number): boolean => {\n if (!value) return true;\n return String(value).length <= max;\n};\n\nexport const matches = (value: string, otherValue: string): boolean => {\n return value === otherValue;\n};\n\nexport const hasUppercase = (value: string): boolean => {\n return /[A-Z]/.test(value);\n};\n\nexport const hasNumber = (value: string): boolean => {\n return /[0-9]/.test(value);\n};\n\nexport const validateForm = (values: Record<string, any>, rules: ValidationRules): {\n isValid: boolean;\n errors: Record<string, string>;\n} => {\n const errors: Record<string, string> = {};\n\n for (const [field, fieldRules] of Object.entries(rules)) {\n for (const rule of fieldRules) {\n if (!rule.validate(values[field], values)) {\n errors[field] = rule.message;\n break;\n }\n }\n }\n\n return {\n isValid: Object.keys(errors).length === 0,\n errors\n };\n};","import React from 'react';\nimport { useAuthForm } from '../hooks/useAuthForm';\nimport { isRequired, isValidEmail } from '../utils/validation';\nimport { AuthFormProps, Field } from '../types';\n\nexport const LoginForm: React.FC<AuthFormProps> = ({\n fields = [\n { name: 'email', type: 'email', label: 'Email', required: true, placeholder: 'you@example.com' },\n { name: 'password', type: 'password', label: 'Password', required: true, placeholder: 'password' }\n ],\n validationRules = {},\n onSubmit,\n submitButtonText = 'Sign In',\n renderField,\n onSuccess,\n onError,\n className = ''\n}) => {\n const rules = {\n email: [\n { validate: isRequired, message: 'Email is required' },\n { validate: isValidEmail, message: 'Invalid email format' }\n ],\n password: [\n { validate: isRequired, message: 'Password is required' },\n { validate: (v: string) => v?.length >= 6, message: 'Password must be at least 6 characters' }\n ],\n ...validationRules\n };\n\n const {\n values,\n errors,\n loading,\n handleChange,\n handleBlur,\n handleSubmit\n } = useAuthForm({\n initialValues: fields.reduce((acc, f) => ({ ...acc, [f.name]: '' }), {}),\n validationRules: rules,\n onSubmit: async (data) => {\n try {\n const result = await onSubmit?.(data);\n onSuccess?.(result);\n return result;\n } catch (err: any) {\n onError?.(err);\n throw err;\n }\n }\n });\n\n const defaultField = (field: Field) => {\n return React.createElement('div', { key: field.name, className: 'auth-form-field' },\n React.createElement('label', { htmlFor: field.name },\n field.label,\n field.required && React.createElement('span', { className: 'required-star' }, '*')\n ),\n React.createElement('div', { className: 'input-wrapper' },\n React.createElement('input', {\n id: field.name,\n name: field.name,\n type: field.type || 'text',\n value: values[field.name] || '',\n onChange: handleChange,\n onBlur: handleBlur,\n placeholder: field.placeholder,\n className: errors[field.name] ? 'error' : ''\n })\n ),\n errors[field.name] && React.createElement('small', { className: 'error-message' }, errors[field.name])\n );\n };\n\n return React.createElement('form', { onSubmit: handleSubmit, className: `auth-form ${className}` },\n fields.map(field => renderField ? renderField(field, { values, errors, handleChange, handleBlur }) : defaultField(field)),\n errors.form && React.createElement('div', { className: 'form-error' }, errors.form),\n React.createElement('button', { type: 'submit', disabled: loading, className: 'auth-submit-btn' },\n loading ? 'Please wait...' : submitButtonText\n )\n );\n};","import React from 'react';\nimport { useAuthForm } from '../hooks/useAuthForm';\nimport { isRequired, isValidEmail, minLength, hasUppercase, hasNumber, matches } from '../utils/validation';\nimport { AuthFormProps, Field } from '../types';\n\nexport const RegisterForm: React.FC<AuthFormProps> = ({\n fields = [\n { name: 'username', type: 'text', label: 'Username', required: true, placeholder: 'johndoe' },\n { name: 'email', type: 'email', label: 'Email', required: true, placeholder: 'you@example.com' },\n { name: 'password', type: 'password', label: 'Password', required: true, placeholder: 'password' },\n { name: 'confirmPassword', type: 'password', label: 'Confirm Password', required: true, placeholder: 'confirm password' }\n ],\n validationRules = {},\n onSubmit,\n submitButtonText = 'Sign Up',\n renderField,\n onSuccess,\n onError,\n className = ''\n}) => {\n const rules = {\n username: [\n { validate: isRequired, message: 'Username is required' },\n { validate: (v: string) => v?.length >= 3, message: 'Username must be at least 3 characters' }\n ],\n email: [\n { validate: isRequired, message: 'Email is required' },\n { validate: isValidEmail, message: 'Invalid email format' }\n ],\n password: [\n { validate: isRequired, message: 'Password is required' },\n { validate: (v: string) => minLength(v, 8), message: 'Password must be at least 8 characters' },\n { validate: hasUppercase, message: 'Password must contain at least one uppercase letter' },\n { validate: hasNumber, message: 'Password must contain at least one number' }\n ],\n confirmPassword: [\n { validate: isRequired, message: 'Please confirm your password' },\n { validate: (v: string, all: any) => matches(v, all?.password), message: 'Passwords do not match' }\n ],\n ...validationRules\n };\n\n const {\n values,\n errors,\n loading,\n handleChange,\n handleBlur,\n handleSubmit\n } = useAuthForm({\n initialValues: fields.reduce((acc, f) => ({ ...acc, [f.name]: '' }), {}),\n validationRules: rules,\n onSubmit: async (data) => {\n try {\n const { confirmPassword, ...submitData } = data;\n const result = await onSubmit?.(submitData);\n onSuccess?.(result);\n return result;\n } catch (err: any) {\n onError?.(err);\n throw err;\n }\n }\n });\n\n const defaultField = (field: Field) => {\n return React.createElement('div', { key: field.name, className: 'auth-form-field' },\n React.createElement('label', { htmlFor: field.name },\n field.label,\n field.required && React.createElement('span', { className: 'required-star' }, '*')\n ),\n React.createElement('div', { className: 'input-wrapper' },\n React.createElement('input', {\n id: field.name,\n name: field.name,\n type: field.type || 'text',\n value: values[field.name] || '',\n onChange: handleChange,\n onBlur: handleBlur,\n placeholder: field.placeholder,\n className: errors[field.name] ? 'error' : ''\n })\n ),\n errors[field.name] && React.createElement('small', { className: 'error-message' }, errors[field.name])\n );\n };\n\n const passwordChecks = [\n { check: values.password?.length >= 8, text: 'At least 8 characters' },\n { check: /[A-Z]/.test(values.password || ''), text: 'One uppercase letter' },\n { check: /[0-9]/.test(values.password || ''), text: 'One number' }\n ];\n\n const getPasswordStrength = () => {\n const passedCount = passwordChecks.filter(c => c.check).length;\n if (passedCount === 3) return 'Strong';\n if (passedCount >= 2) return 'Medium';\n return 'Weak';\n };\n\n return React.createElement('form', { onSubmit: handleSubmit, className: `auth-form ${className}` },\n fields.map(field => renderField ? renderField(field, { values, errors, handleChange, handleBlur }) : defaultField(field)),\n \n values.password && React.createElement('div', { className: 'password-strength' },\n React.createElement('div', { className: 'strength-label' },\n 'Password Strength: ',\n React.createElement('span', { className: `strength-${getPasswordStrength().toLowerCase()}` }, getPasswordStrength())\n ),\n React.createElement('div', { className: 'password-checks' },\n passwordChecks.map((item, index) =>\n React.createElement('div', { key: index, className: 'check-item' },\n React.createElement('span', { className: item.check ? 'check-pass' : 'check-fail' }, item.check ? '✓' : '○'),\n React.createElement('span', { className: 'check-text' }, item.text)\n )\n )\n )\n ),\n \n errors.form && React.createElement('div', { className: 'form-error' }, errors.form),\n \n React.createElement('button', { type: 'submit', disabled: loading, className: 'auth-submit-btn' },\n loading ? 'Creating account...' : submitButtonText\n )\n );\n};"],"names":["TOKEN_KEY","REFRESH_TOKEN_KEY","tokenManager","getToken","localStorage","getItem","setToken","token","setItem","removeToken","removeItem","getRefreshToken","setRefreshToken","refreshToken","removeRefreshToken","clearAll","hasTokens","AuthError","message","statusCode","originalError","_this","_classCallCheck","_callSuper","this","name","_inherits","_wrapNativeSuper","Error","_createClass","handleAuthError","error","response","status","_a","data","_b","concat","request","DEFAULT_ENDPOINTS","login","register","logout","refresh","verify","forgotPassword","resetPassword","AuthAPI","authUrl","apiKey","projectId","customEndpoints","isRefreshing","refreshSubscribers","config","endpoints","_objectSpread","api","axios","create","baseURL","timeout","headers","setupInterceptors","key","value","interceptors","use","Authorization","Promise","reject","_ref","_asyncToGenerator","_regenerator","m","_callee","originalRequest","newToken","_t","w","_context","p","n","url","includes","a","_retry","resolve","push","refreshAccessToken","v","onRefreshSuccess","onRefreshFailure","f","_x","apply","arguments","forEach","callback","_refreshAccessToken","_callee2","_context2","post","_login","_callee3","credentials","_t2","_context3","_x2","_register","_callee4","userData","_t3","_context4","_x3","_forgotPassword","_callee5","email","_t4","_context5","_x4","_resetPassword","_callee6","newPassword","_t5","_context6","_x5","_x6","_logout","_callee7","_t6","_context7","console","_verifyToken","_callee8","_context8","get","AuthContext","createContext","undefined","AuthProvider","children","_ref$loginEndpoint","loginEndpoint","_ref$registerEndpoint","registerEndpoint","_ref$logoutEndpoint","logoutEndpoint","_ref$refreshEndpoint","refreshEndpoint","_ref$verifyEndpoint","verifyEndpoint","_ref$forgotPasswordEn","forgotPasswordEndpoint","_ref$resetPasswordEnd","resetPasswordEndpoint","onError","_useState2","_slicedToArray","useState","user","setUser","_useState4","project","setProject","_useState6","loading","setLoading","_useState8","setError","authAPI","useEffect","initAuth","_ref2","verifiedUser","verifyToken","_ref3","errorMessage","_ref4","_ref5","_ref6","_ref7","_ref8","isAuthenticated","React","createElement","Provider","useAuth","context","useContext","useAuthForm","initialValues","validationRules","onSubmit","values","setValues","errors","setErrors","touched","setTouched","validate","useCallback","length","newErrors","_i","_Object$entries","Object","entries","_step","_Object$entries$_i","field","_iterator","_createForOfIteratorHelper","s","done","rule","err","e","keys","handleSubmit","allTouched","result","preventDefault","reduce","acc","_defineProperty","form","handleChange","_e$target","target","newValues","handleBlur","reset","setFieldValue","isRequired","trim","isValidEmail","test","minLength","min","String","maxLength","max","matches","otherValue","hasUppercase","hasNumber","validateForm","rules","isValid","LoginForm","_onSubmit2","_ref$fields","fields","type","label","required","placeholder","_ref$validationRules","_ref$submitButtonText","submitButtonText","renderField","onSuccess","_ref$className","className","password","_useAuthForm","map","htmlFor","id","onChange","onBlur","defaultField","disabled","RegisterForm","username","confirmPassword","all","submitData","_objectWithoutProperties","_excluded","passwordChecks","check","text","getPasswordStrength","passedCount","filter","c","toLowerCase","item","index"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("react"),r=require("axios");function t(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t<r;t++)n[t]=e[t];return n}function n(e,r,t,n,o,a,i){try{var s=e[a](i),u=s.value}catch(e){return void t(e)}s.done?r(u):Promise.resolve(u).then(n,o)}function o(e){return function(){var r=this,t=arguments;return new Promise(function(o,a){var i=e.apply(r,t);function s(e){n(i,o,a,s,u,"next",e)}function u(e){n(i,o,a,s,u,"throw",e)}s(void 0)})}}function a(e,r,t){return r=l(r),function(e,r){if(r&&("object"==typeof r||"function"==typeof r))return r;if(void 0!==r)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(r,t||[],l(e).constructor):r.apply(e,t))}function i(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}function s(e,r,t){return r&&function(e,r){for(var t=0;t<r.length;t++){var n=r[t];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,b(n.key),n)}}(e.prototype,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function u(e,r){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=w(e))||r){t&&(e=t);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,s=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return i=e.done,e},e:function(e){s=!0,a=e},f:function(){try{i||null==t.return||t.return()}finally{if(s)throw a}}}}function c(e,r,t){return(r=b(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function l(e){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},l(e)}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function p(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function h(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?p(Object(t),!0).forEach(function(r){c(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):p(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function d(e,r){if(null==e)return{};var t,n,o=function(e,r){if(null==e)return{};var t={};for(var n in e)if({}.hasOwnProperty.call(e,n)){if(-1!==r.indexOf(n))continue;t[n]=e[n]}return t}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n<a.length;n++)t=a[n],-1===r.indexOf(t)&&{}.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function m(){var e,r,t="function"==typeof Symbol?Symbol:{},n=t.iterator||"@@iterator",o=t.toStringTag||"@@toStringTag";function a(t,n,o,a){var u=n&&n.prototype instanceof s?n:s,c=Object.create(u.prototype);return v(c,"_invoke",function(t,n,o){var a,s,u,c=0,l=o||[],f=!1,p={p:0,n:0,v:e,a:h,f:h.bind(e,4),d:function(r,t){return a=r,s=0,u=e,p.n=t,i}};function h(t,n){for(s=t,u=n,r=0;!f&&c&&!o&&r<l.length;r++){var o,a=l[r],h=p.p,d=a[2];t>3?(o=d===n)&&(u=a[(s=a[4])?5:(s=3,3)],a[4]=a[5]=e):a[0]<=h&&((o=t<2&&h<a[1])?(s=0,p.v=n,p.n=a[1]):h<d&&(o=t<3||a[0]>n||n>d)&&(a[4]=t,a[5]=n,p.n=d,s=0))}if(o||t>1)return i;throw f=!0,n}return function(o,l,d){if(c>1)throw TypeError("Generator is already running");for(f&&1===l&&h(l,d),s=l,u=d;(r=s<2?e:u)||!f;){a||(s?s<3?(s>1&&(p.n=-1),h(s,u)):p.n=u:p.v=u);try{if(c=2,a){if(s||(o="next"),r=a[o]){if(!(r=r.call(a,u)))throw TypeError("iterator result is not an object");if(!r.done)return r;u=r.value,s<2&&(s=0)}else 1===s&&(r=a.return)&&r.call(a),s<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),s=1);a=e}else if((r=(f=p.n<0)?u:t.call(n,p))!==i)break}catch(r){a=e,s=1,u=r}finally{c=1}}return{value:r,done:f}}}(t,o,a),!0),c}var i={};function s(){}function u(){}function c(){}r=Object.getPrototypeOf;var l=[][n]?r(r([][n]())):(v(r={},n,function(){return this}),r),f=c.prototype=s.prototype=Object.create(l);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,v(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=c,v(f,"constructor",c),v(c,"constructor",u),u.displayName="GeneratorFunction",v(c,o,"GeneratorFunction"),v(f),v(f,o,"Generator"),v(f,n,function(){return this}),v(f,"toString",function(){return"[object Generator]"}),(m=function(){return{w:a,m:p}})()}function v(e,r,t,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}v=function(e,r,t,n){function a(r,t){v(e,r,function(e){return this._invoke(r,t,e)})}r?o?o(e,r,{value:t,enumerable:!n,configurable:!n,writable:!n}):e[r]=t:(a("next",0),a("throw",1),a("return",2))},v(e,r,t,n)}function g(e,r){return g=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,r){return e.__proto__=r,e},g(e,r)}function y(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,o,a,i,s=[],u=!0,c=!1;try{if(a=(t=t.call(e)).next,0===r);else for(;!(u=(n=a.call(t)).done)&&(s.push(n.value),s.length!==r);u=!0);}catch(e){c=!0,o=e}finally{try{if(!u&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(c)throw o}}return s}}(e,r)||w(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e){var r=function(e,r){if("object"!=typeof e||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,r);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(e)}(e,"string");return"symbol"==typeof r?r:r+""}function w(e,r){if(e){if("string"==typeof e)return t(e,r);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(e,r):void 0}}function k(e){var r="function"==typeof Map?new Map:void 0;return k=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(r){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==r){if(r.has(e))return r.get(e);r.set(e,t)}function t(){return function(e,r,t){if(f())return Reflect.construct.apply(null,arguments);var n=[null];n.push.apply(n,r);var o=new(e.bind.apply(e,n));return t&&g(o,t.prototype),o}(e,arguments,l(this).constructor)}return t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),g(t,e)},k(e)}var P="token",S="refreshToken",j={getToken:function(){return localStorage.getItem(P)},setToken:function(e){localStorage.setItem(P,e)},removeToken:function(){localStorage.removeItem(P)},getRefreshToken:function(){return localStorage.getItem(S)},setRefreshToken:function(e){localStorage.setItem(S,e)},removeRefreshToken:function(){localStorage.removeItem(S)},clearAll:function(){localStorage.removeItem(P),localStorage.removeItem(S)},hasTokens:function(){return!!localStorage.getItem(P)&&!!localStorage.getItem(S)}},E=function(){function e(r,t,n){var o;return i(this,e),(o=a(this,e,[r])).name="AuthError",o.statusCode=t,o.originalError=n,o}return function(e,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(r&&r.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),r&&g(e,r)}(e,k(Error)),s(e)}(),O=function(e){var r,t;if(e.response){var n=e.response.status,o=(null===(r=e.response.data)||void 0===r?void 0:r.message)||(null===(t=e.response.data)||void 0===t?void 0:t.error)||"Authentication failed (".concat(n,")");return 401===n?(j.clearAll(),new E("Session expired. Please login again.",n,e)):new E(o,n,e)}return e.request?new E("Unable to connect to authentication service",503,e):new E(e.message||"An unknown error occurred",500,e)},x={login:"/auth/login",register:"/auth/register",logout:"/auth/logout",refresh:"/auth/refresh",verify:"/auth/verify",forgotPassword:"/auth/forgot-password",resetPassword:"/auth/reset-password"},T=function(){return s(function e(t,n,o,a){i(this,e),this.isRefreshing=!1,this.refreshSubscribers=[],this.config={authUrl:t,apiKey:n,projectId:o,endpoints:h(h({},x),a)},this.api=r.create({baseURL:t,timeout:15e3,headers:{"Content-Type":"application/json","x-api-key":n,"x-project-id":o}}),this.setupInterceptors()},[{key:"setupInterceptors",value:function(){var e=this;this.api.interceptors.request.use(function(e){var r=j.getToken();return r&&(e.headers.Authorization="Bearer ".concat(r)),e},function(e){return Promise.reject(e)}),this.api.interceptors.response.use(function(e){return e},function(){var r=o(m().m(function r(t){var n,o,a,i,s;return m().w(function(r){for(;;)switch(r.p=r.n){case 0:if((a=t.config)&&!(null===(n=a.url)||void 0===n?void 0:n.includes(e.config.endpoints.refresh))){r.n=1;break}return r.a(2,Promise.reject(t));case 1:if(401!==(null===(o=t.response)||void 0===o?void 0:o.status)||a._retry){r.n=7;break}if(!e.isRefreshing){r.n=2;break}return r.a(2,new Promise(function(r){e.refreshSubscribers.push(function(t){a.headers.Authorization="Bearer ".concat(t),r(e.api(a))})}));case 2:return a._retry=!0,e.isRefreshing=!0,r.p=3,r.n=4,e.refreshAccessToken();case 4:return i=r.v,e.onRefreshSuccess(i),a.headers.Authorization="Bearer ".concat(i),r.a(2,e.api(a));case 5:return r.p=5,s=r.v,e.onRefreshFailure(),r.a(2,Promise.reject(s));case 6:return r.p=6,e.isRefreshing=!1,r.f(6);case 7:return r.a(2,Promise.reject(t))}},r,null,[[3,5,6,7]])}));return function(e){return r.apply(this,arguments)}}())}},{key:"onRefreshSuccess",value:function(e){this.refreshSubscribers.forEach(function(r){return r(e)}),this.refreshSubscribers=[]}},{key:"onRefreshFailure",value:function(){j.clearAll(),this.refreshSubscribers=[]}},{key:"refreshAccessToken",value:(l=o(m().m(function e(){var r,t,n;return m().w(function(e){for(;;)switch(e.n){case 0:if(r=j.getRefreshToken()){e.n=1;break}throw new Error("No refresh token available");case 1:return e.n=2,this.api.post(this.config.endpoints.refresh,{refreshToken:r});case 2:return t=e.v,n=t.data.token,j.setToken(n),e.a(2,n)}},e,this)})),function(){return l.apply(this,arguments)})},{key:"login",value:(c=o(m().m(function e(r){var t,n,o;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this.api.post(this.config.endpoints.login,h(h({},r),{},{projectId:this.config.projectId}));case 1:return t=e.v,(n=t.data).token&&(j.setToken(n.token),j.setRefreshToken(n.refreshToken)),e.a(2,n);case 2:throw e.p=2,o=e.v,O(o);case 3:return e.a(2)}},e,this,[[0,2]])})),function(e){return c.apply(this,arguments)})},{key:"register",value:(u=o(m().m(function e(r){var t,n,o;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this.api.post(this.config.endpoints.register,h(h({},r),{},{projectId:this.config.projectId}));case 1:return t=e.v,(n=t.data).token&&(j.setToken(n.token),j.setRefreshToken(n.refreshToken)),e.a(2,n);case 2:throw e.p=2,o=e.v,O(o);case 3:return e.a(2)}},e,this,[[0,2]])})),function(e){return u.apply(this,arguments)})},{key:"forgotPassword",value:(a=o(m().m(function e(r){var t;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this.api.post(this.config.endpoints.forgotPassword,{email:r});case 1:e.n=3;break;case 2:throw e.p=2,t=e.v,O(t);case 3:return e.a(2)}},e,this,[[0,2]])})),function(e){return a.apply(this,arguments)})},{key:"resetPassword",value:(n=o(m().m(function e(r,t){var n;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,this.api.post(this.config.endpoints.resetPassword,{token:r,newPassword:t});case 1:e.n=3;break;case 2:throw e.p=2,n=e.v,O(n);case 3:return e.a(2)}},e,this,[[0,2]])})),function(e,r){return n.apply(this,arguments)})},{key:"logout",value:(t=o(m().m(function e(){var r,t;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,!(r=j.getRefreshToken())){e.n=1;break}return e.n=1,this.api.post(this.config.endpoints.logout,{refreshToken:r});case 1:e.n=3;break;case 2:e.p=2,t=e.v,console.error("Logout error:",t);case 3:return e.p=3,j.clearAll(),e.f(3);case 4:return e.a(2)}},e,this,[[0,2,3,4]])})),function(){return t.apply(this,arguments)})},{key:"verifyToken",value:(e=o(m().m(function e(){var r;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:if(e.p=0,j.getToken()){e.n=1;break}return e.a(2,null);case 1:return e.n=2,this.api.get(this.config.endpoints.verify);case 2:return r=e.v,e.a(2,r.data);case 3:return e.p=3,e.v,j.clearAll(),e.a(2,null)}},e,this,[[0,3]])})),function(){return e.apply(this,arguments)})},{key:"getToken",value:function(){return j.getToken()}},{key:"isAuthenticated",value:function(){return j.hasTokens()}}]);var e,t,n,a,u,c,l}(),A=e.createContext(void 0),N=function(r){var t=r.initialValues,n=r.validationRules,a=r.onSubmit,i=y(e.useState(t),2),s=i[0],l=i[1],f=y(e.useState({}),2),p=f[0],d=f[1],v=y(e.useState({}),2),g=v[0],b=v[1],w=y(e.useState(!1),2),k=w[0],P=w[1],S=e.useCallback(function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:s,r={},t=0,o=Object.entries(n);t<o.length;t++){var a,i=y(o[t],2),c=i[0],l=u(i[1]);try{for(l.s();!(a=l.n()).done;){var f=a.value;if(!f.validate(e[c],e)){r[c]=f.message;break}}}catch(e){l.e(e)}finally{l.f()}}return d(r),0===Object.keys(r).length},[s,n]),j=function(){var e=o(m().m(function e(r){var t,n,o;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:if(null==r||r.preventDefault(),t=Object.keys(s).reduce(function(e,r){return h(h({},e),{},c({},r,!0))},{}),b(t),S()){e.n=1;break}return e.a(2);case 1:return P(!0),e.p=2,e.n=3,a(s);case 3:return n=e.v,e.a(2,n);case 4:throw e.p=4,o=e.v,d({form:o.message}),o;case 5:return e.p=5,P(!1),e.f(5);case 6:return e.a(2)}},e,null,[[2,4,5,6]])}));return function(r){return e.apply(this,arguments)}}();return{values:s,errors:p,touched:g,loading:k,handleChange:function(e){var r=e.target,t=r.name,n=r.value,o=h(h({},s),{},c({},t,n));l(o),g[t]&&S(o)},handleBlur:function(e){var r=e.target.name;b(h(h({},g),{},c({},r,!0))),S()},handleSubmit:j,reset:function(){l(t),d({}),b({})},setFieldValue:function(e,r){l(h(h({},s),{},c({},e,r)))}}},I=function(e){return null!=e&&("string"!=typeof e||e.trim().length>0)},R=function(e){return!!e&&/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e)},q=function(e,r){return!!e&&String(e).length>=r},C=function(e,r){return e===r},_=function(e){return/[A-Z]/.test(e)},F=function(e){return/[0-9]/.test(e)},B=["confirmPassword"];exports.AuthAPI=T,exports.AuthContext=A,exports.AuthError=E,exports.AuthProvider=function(r){var t=r.children,n=r.authUrl,a=r.apiKey,i=r.projectId,s=r.loginEndpoint,u=void 0===s?x.login:s,c=r.registerEndpoint,l=void 0===c?x.register:c,f=r.logoutEndpoint,p=void 0===f?x.logout:f,h=r.refreshEndpoint,d=void 0===h?x.refresh:h,v=r.verifyEndpoint,g=void 0===v?x.verify:v,b=r.forgotPasswordEndpoint,w=void 0===b?x.forgotPassword:b,k=r.resetPasswordEndpoint,P=void 0===k?x.resetPassword:k,S=r.onError,j=y(e.useState(null),2),E=j[0],O=j[1],N=y(e.useState(null),2),I=N[0],R=N[1],q=y(e.useState(!0),2),C=q[0],_=q[1],F=y(e.useState(null),2),B=F[0],U=F[1],L=new T(n,a,i,{login:u,register:l,logout:p,refresh:d,verify:g,forgotPassword:w,resetPassword:P});e.useEffect(function(){var e=function(){var e=o(m().m(function e(){var r,t;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,L.verifyToken();case 1:(r=e.v)&&O(r),e.n=3;break;case 2:e.p=2,t=e.v,console.error("Auth initialization error:",t);case 3:return e.p=3,_(!1),e.f(3);case 4:return e.a(2)}},e,null,[[0,2,3,4]])}));return function(){return e.apply(this,arguments)}}();e()},[]);var D=function(){var e=o(m().m(function e(r){var t,n,o;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,U(null),e.n=1,L.login(r);case 1:return t=e.v,O(t.user),t.project&&R(t.project),e.a(2,t);case 2:throw e.p=2,o=e.v,n=o.message||"Login failed",U(n),S&&S(o),o;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(r){return e.apply(this,arguments)}}(),G=function(){var e=o(m().m(function e(r){var t,n,o;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,U(null),e.n=1,L.register(r);case 1:return t=e.v,O(t.user),t.project&&R(t.project),e.a(2,t);case 2:throw e.p=2,o=e.v,n=o.message||"Registration failed",U(n),S&&S(o),o;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(r){return e.apply(this,arguments)}}(),V=function(){var e=o(m().m(function e(r){var t,n;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,U(null),e.n=1,L.forgotPassword(r);case 1:e.n=3;break;case 2:throw e.p=2,n=e.v,t=n.message||"Password reset request failed",U(t),S&&S(n),n;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(r){return e.apply(this,arguments)}}(),M=function(){var e=o(m().m(function e(r,t){var n,o;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,U(null),e.n=1,L.resetPassword(r,t);case 1:e.n=3;break;case 2:throw e.p=2,o=e.v,n=o.message||"Password reset failed",U(n),S&&S(o),o;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(r,t){return e.apply(this,arguments)}}(),z=function(){var e=o(m().m(function e(){var r;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,L.logout();case 1:O(null),R(null),U(null),e.n=3;break;case 2:throw e.p=2,r=e.v,S&&S(r),r;case 3:return e.a(2)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}(),K=function(){var e=o(m().m(function e(){var r;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,L.refreshAccessToken();case 1:return r=e.v,e.a(2,r);case 2:return e.p=2,e.v,e.a(2,null)}},e,null,[[0,2]])}));return function(){return e.apply(this,arguments)}}(),Z={user:E,project:I,loading:C,error:B,login:D,register:G,logout:z,refreshToken:K,forgotPassword:V,resetPassword:M,isAuthenticated:!!E};return e.createElement(A.Provider,{value:Z},t)},exports.LoginForm=function(r){var t,n=r.fields,a=void 0===n?[{name:"email",type:"email",label:"Email",required:!0,placeholder:"you@example.com"},{name:"password",type:"password",label:"Password",required:!0,placeholder:"password"}]:n,i=r.validationRules,s=void 0===i?{}:i,u=r.onSubmit,l=r.submitButtonText,f=void 0===l?"Sign In":l,p=r.renderField,d=r.onSuccess,v=r.onError,g=r.className,y=void 0===g?"":g,b=h({email:[{validate:I,message:"Email is required"},{validate:R,message:"Invalid email format"}],password:[{validate:I,message:"Password is required"},{validate:function(e){return(null==e?void 0:e.length)>=6},message:"Password must be at least 6 characters"}]},s),w=N({initialValues:a.reduce(function(e,r){return h(h({},e),{},c({},r.name,""))},{}),validationRules:b,onSubmit:(t=o(m().m(function e(r){var t,n;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,e.n=1,null==u?void 0:u(r);case 1:return t=e.v,null==d||d(t),e.a(2,t);case 2:throw e.p=2,n=e.v,null==v||v(n),n;case 3:return e.a(2)}},e,null,[[0,2]])})),function(e){return t.apply(this,arguments)})}),k=w.values,P=w.errors,S=w.loading,j=w.handleChange,E=w.handleBlur,O=w.handleSubmit;return e.createElement("form",{onSubmit:O,className:"auth-form ".concat(y)},a.map(function(r){return p?p(r,{values:k,errors:P,handleChange:j,handleBlur:E}):function(r){return e.createElement("div",{key:r.name,className:"auth-form-field"},e.createElement("label",{htmlFor:r.name},r.label,r.required&&e.createElement("span",{className:"required-star"},"*")),e.createElement("div",{className:"input-wrapper"},e.createElement("input",{id:r.name,name:r.name,type:r.type||"text",value:k[r.name]||"",onChange:j,onBlur:E,placeholder:r.placeholder,className:P[r.name]?"error":""})),P[r.name]&&e.createElement("small",{className:"error-message"},P[r.name]))}(r)}),P.form&&e.createElement("div",{className:"form-error"},P.form),e.createElement("button",{type:"submit",disabled:S,className:"auth-submit-btn"},S?"Please wait...":f))},exports.RegisterForm=function(r){var t,n,a=r.fields,i=void 0===a?[{name:"username",type:"text",label:"Username",required:!0,placeholder:"johndoe"},{name:"email",type:"email",label:"Email",required:!0,placeholder:"you@example.com"},{name:"password",type:"password",label:"Password",required:!0,placeholder:"password"},{name:"confirmPassword",type:"password",label:"Confirm Password",required:!0,placeholder:"confirm password"}]:a,s=r.validationRules,u=void 0===s?{}:s,l=r.onSubmit,f=r.submitButtonText,p=void 0===f?"Sign Up":f,v=r.renderField,g=r.onSuccess,y=r.onError,b=r.className,w=void 0===b?"":b,k=h({username:[{validate:I,message:"Username is required"},{validate:function(e){return(null==e?void 0:e.length)>=3},message:"Username must be at least 3 characters"}],email:[{validate:I,message:"Email is required"},{validate:R,message:"Invalid email format"}],password:[{validate:I,message:"Password is required"},{validate:function(e){return q(e,8)},message:"Password must be at least 8 characters"},{validate:_,message:"Password must contain at least one uppercase letter"},{validate:F,message:"Password must contain at least one number"}],confirmPassword:[{validate:I,message:"Please confirm your password"},{validate:function(e,r){return C(e,null==r?void 0:r.password)},message:"Passwords do not match"}]},u),P=N({initialValues:i.reduce(function(e,r){return h(h({},e),{},c({},r.name,""))},{}),validationRules:k,onSubmit:(n=o(m().m(function e(r){var t,n,o;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.p=0,r.confirmPassword,t=d(r,B),e.n=1,null==l?void 0:l(t);case 1:return n=e.v,null==g||g(n),e.a(2,n);case 2:throw e.p=2,o=e.v,null==y||y(o),o;case 3:return e.a(2)}},e,null,[[0,2]])})),function(e){return n.apply(this,arguments)})}),S=P.values,j=P.errors,E=P.loading,O=P.handleChange,x=P.handleBlur,T=P.handleSubmit,A=[{check:(null===(t=S.password)||void 0===t?void 0:t.length)>=8,text:"At least 8 characters"},{check:/[A-Z]/.test(S.password||""),text:"One uppercase letter"},{check:/[0-9]/.test(S.password||""),text:"One number"}],U=function(){var e=A.filter(function(e){return e.check}).length;return 3===e?"Strong":e>=2?"Medium":"Weak"};return e.createElement("form",{onSubmit:T,className:"auth-form ".concat(w)},i.map(function(r){return v?v(r,{values:S,errors:j,handleChange:O,handleBlur:x}):function(r){return e.createElement("div",{key:r.name,className:"auth-form-field"},e.createElement("label",{htmlFor:r.name},r.label,r.required&&e.createElement("span",{className:"required-star"},"*")),e.createElement("div",{className:"input-wrapper"},e.createElement("input",{id:r.name,name:r.name,type:r.type||"text",value:S[r.name]||"",onChange:O,onBlur:x,placeholder:r.placeholder,className:j[r.name]?"error":""})),j[r.name]&&e.createElement("small",{className:"error-message"},j[r.name]))}(r)}),S.password&&e.createElement("div",{className:"password-strength"},e.createElement("div",{className:"strength-label"},"Password Strength: ",e.createElement("span",{className:"strength-".concat(U().toLowerCase())},U())),e.createElement("div",{className:"password-checks"},A.map(function(r,t){return e.createElement("div",{key:t,className:"check-item"},e.createElement("span",{className:r.check?"check-pass":"check-fail"},r.check?"✓":"○"),e.createElement("span",{className:"check-text"},r.text))}))),j.form&&e.createElement("div",{className:"form-error"},j.form),e.createElement("button",{type:"submit",disabled:E,className:"auth-submit-btn"},E?"Creating account...":p))},exports.handleAuthError=O,exports.hasNumber=F,exports.hasUppercase=_,exports.isRequired=I,exports.isValidEmail=R,exports.matches=C,exports.maxLength=function(e,r){return!e||String(e).length<=r},exports.minLength=q,exports.tokenManager=j,exports.useAuth=function(){var r=e.useContext(A);if(!r)throw new Error("useAuth must be used within an AuthProvider");return r},exports.useAuthForm=N,exports.validateForm=function(e,r){for(var t={},n=0,o=Object.entries(r);n<o.length;n++){var a,i=y(o[n],2),s=i[0],c=u(i[1]);try{for(c.s();!(a=c.n()).done;){var l=a.value;if(!l.validate(e[s],e)){t[s]=l.message;break}}}catch(e){c.e(e)}finally{c.f()}}return{isValid:0===Object.keys(t).length,errors:t}};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/tokenManager.ts","../src/utils/errorHandler.ts","../src/constants/endpoints.ts","../src/AuthAPI.ts","../src/AuthProvider.tsx","../src/hooks/useAuthForm.ts","../src/utils/validation.ts","../src/components/LoginForm.tsx","../src/components/RegisterForm.tsx","../src/hooks/useAuth.ts"],"sourcesContent":["const TOKEN_KEY = 'token';\r\nconst REFRESH_TOKEN_KEY = 'refreshToken';\r\n\r\nexport const tokenManager = {\r\n getToken: (): string | null => {\r\n return localStorage.getItem(TOKEN_KEY);\r\n },\r\n \r\n setToken: (token: string): void => {\r\n localStorage.setItem(TOKEN_KEY, token);\r\n },\r\n \r\n removeToken: (): void => {\r\n localStorage.removeItem(TOKEN_KEY);\r\n },\r\n \r\n getRefreshToken: (): string | null => {\r\n return localStorage.getItem(REFRESH_TOKEN_KEY);\r\n },\r\n \r\n setRefreshToken: (refreshToken: string): void => {\r\n localStorage.setItem(REFRESH_TOKEN_KEY, refreshToken);\r\n },\r\n \r\n removeRefreshToken: (): void => {\r\n localStorage.removeItem(REFRESH_TOKEN_KEY);\r\n },\r\n \r\n clearAll: (): void => {\r\n localStorage.removeItem(TOKEN_KEY);\r\n localStorage.removeItem(REFRESH_TOKEN_KEY);\r\n },\r\n \r\n hasTokens: (): boolean => {\r\n return !!localStorage.getItem(TOKEN_KEY) && !!localStorage.getItem(REFRESH_TOKEN_KEY);\r\n }\r\n};","import { tokenManager } from './tokenManager';\r\n\r\nexport class AuthError extends Error {\r\n public statusCode?: number;\r\n public originalError?: any;\r\n\r\n constructor(message: string, statusCode?: number, originalError?: any) {\r\n super(message);\r\n this.name = 'AuthError';\r\n this.statusCode = statusCode;\r\n this.originalError = originalError;\r\n }\r\n}\r\n\r\nexport const handleAuthError = (error: any): AuthError => {\r\n if (error.response) {\r\n const statusCode = error.response.status;\r\n const message = error.response.data?.message || error.response.data?.error || `Authentication failed (${statusCode})`;\r\n \r\n if (statusCode === 401) {\r\n tokenManager.clearAll();\r\n return new AuthError('Session expired. Please login again.', statusCode, error);\r\n }\r\n \r\n return new AuthError(message, statusCode, error);\r\n }\r\n \r\n if (error.request) {\r\n return new AuthError('Unable to connect to authentication service', 503, error);\r\n }\r\n \r\n return new AuthError(error.message || 'An unknown error occurred', 500, error);\r\n};","export const DEFAULT_ENDPOINTS = {\r\n login: '/auth/login',\r\n register: '/auth/register',\r\n logout: '/auth/logout',\r\n refresh: '/auth/refresh',\r\n verify: '/auth/verify',\r\n forgotPassword: '/auth/forgot-password',\r\n resetPassword: '/auth/reset-password'\r\n} as const;","import axios, { AxiosInstance, InternalAxiosRequestConfig, AxiosError } from 'axios';\r\nimport { tokenManager } from './utils/tokenManager';\r\nimport { handleAuthError } from './utils/errorHandler';\r\nimport { AuthConfig, LoginCredentials, RegisterData, AuthResponse, User } from './types';\r\nimport { DEFAULT_ENDPOINTS } from './constants/endpoints';\r\n\r\ninterface ExtendedAxiosRequestConfig extends InternalAxiosRequestConfig {\r\n _retry?: boolean;\r\n}\r\n\r\nexport class AuthAPI {\r\n private api: AxiosInstance;\r\n private config: AuthConfig;\r\n private isRefreshing = false;\r\n private refreshSubscribers: ((token: string) => void)[] = [];\r\n\r\n constructor(\r\n authUrl: string,\r\n apiKey: string,\r\n projectId: string,\r\n customEndpoints?: Partial<AuthConfig['endpoints']>\r\n ) {\r\n this.config = {\r\n authUrl,\r\n apiKey,\r\n projectId,\r\n endpoints: {\r\n ...DEFAULT_ENDPOINTS,\r\n ...customEndpoints\r\n }\r\n };\r\n\r\n this.api = axios.create({\r\n baseURL: authUrl,\r\n timeout: 15000,\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'x-api-key': apiKey,\r\n 'x-project-id': projectId\r\n }\r\n });\r\n\r\n this.setupInterceptors();\r\n }\r\n\r\n private setupInterceptors(): void {\r\n this.api.interceptors.request.use(\r\n (config: InternalAxiosRequestConfig) => {\r\n const token = tokenManager.getToken();\r\n if (token) {\r\n config.headers.Authorization = `Bearer ${token}`;\r\n }\r\n return config;\r\n },\r\n (error) => Promise.reject(error)\r\n );\r\n\r\n this.api.interceptors.response.use(\r\n (response) => response,\r\n async (error: AxiosError) => {\r\n const originalRequest = error.config as ExtendedAxiosRequestConfig;\r\n \r\n if (!originalRequest || originalRequest.url?.includes(this.config.endpoints.refresh)) {\r\n return Promise.reject(error);\r\n }\r\n\r\n if (error.response?.status === 401 && !originalRequest._retry) {\r\n if (this.isRefreshing) {\r\n return new Promise((resolve) => {\r\n this.refreshSubscribers.push((token: string) => {\r\n originalRequest.headers.Authorization = `Bearer ${token}`;\r\n resolve(this.api(originalRequest));\r\n });\r\n });\r\n }\r\n\r\n originalRequest._retry = true;\r\n this.isRefreshing = true;\r\n\r\n try {\r\n const newToken = await this.refreshAccessToken();\r\n this.onRefreshSuccess(newToken);\r\n originalRequest.headers.Authorization = `Bearer ${newToken}`;\r\n return this.api(originalRequest);\r\n } catch (refreshError) {\r\n this.onRefreshFailure();\r\n return Promise.reject(refreshError);\r\n } finally {\r\n this.isRefreshing = false;\r\n }\r\n }\r\n\r\n return Promise.reject(error);\r\n }\r\n );\r\n }\r\n\r\n private onRefreshSuccess(token: string): void {\r\n this.refreshSubscribers.forEach(callback => callback(token));\r\n this.refreshSubscribers = [];\r\n }\r\n\r\n private onRefreshFailure(): void {\r\n tokenManager.clearAll();\r\n this.refreshSubscribers = [];\r\n }\r\n\r\n public async refreshAccessToken(): Promise<string> {\r\n const refreshToken = tokenManager.getRefreshToken();\r\n if (!refreshToken) {\r\n throw new Error('No refresh token available');\r\n }\r\n\r\n const response = await this.api.post(this.config.endpoints.refresh, {\r\n refreshToken\r\n });\r\n\r\n const { token } = response.data;\r\n tokenManager.setToken(token);\r\n return token;\r\n }\r\n\r\n async login(credentials: LoginCredentials): Promise<AuthResponse> {\r\n try {\r\n const response = await this.api.post(this.config.endpoints.login, {\r\n ...credentials,\r\n projectId: this.config.projectId\r\n });\r\n\r\n const data = response.data;\r\n \r\n if (data.token) {\r\n tokenManager.setToken(data.token);\r\n tokenManager.setRefreshToken(data.refreshToken);\r\n }\r\n \r\n return data;\r\n } catch (error) {\r\n throw handleAuthError(error);\r\n }\r\n }\r\n\r\n async register(userData: RegisterData): Promise<AuthResponse> {\r\n try {\r\n const response = await this.api.post(this.config.endpoints.register, {\r\n ...userData,\r\n projectId: this.config.projectId\r\n });\r\n\r\n const data = response.data;\r\n \r\n if (data.token) {\r\n tokenManager.setToken(data.token);\r\n tokenManager.setRefreshToken(data.refreshToken);\r\n }\r\n \r\n return data;\r\n } catch (error) {\r\n throw handleAuthError(error);\r\n }\r\n }\r\n\r\n async forgotPassword(email: string): Promise<void> {\r\n try {\r\n await this.api.post(this.config.endpoints.forgotPassword, { email });\r\n } catch (error) {\r\n throw handleAuthError(error);\r\n }\r\n }\r\n\r\n async resetPassword(token: string, newPassword: string): Promise<void> {\r\n try {\r\n await this.api.post(this.config.endpoints.resetPassword, { token, newPassword });\r\n } catch (error) {\r\n throw handleAuthError(error);\r\n }\r\n }\r\n\r\n async logout(): Promise<void> {\r\n try {\r\n const refreshToken = tokenManager.getRefreshToken();\r\n if (refreshToken) {\r\n await this.api.post(this.config.endpoints.logout, { refreshToken });\r\n }\r\n } catch (error) {\r\n console.error('Logout error:', error);\r\n } finally {\r\n tokenManager.clearAll();\r\n }\r\n }\r\n\r\n async verifyToken(): Promise<User | null> {\r\n try {\r\n const token = tokenManager.getToken();\r\n if (!token) return null;\r\n\r\n const response = await this.api.get(this.config.endpoints.verify);\r\n return response.data;\r\n } catch (error) {\r\n tokenManager.clearAll();\r\n return null;\r\n }\r\n }\r\n\r\n getToken(): string | null {\r\n return tokenManager.getToken();\r\n }\r\n\r\n isAuthenticated(): boolean {\r\n return tokenManager.hasTokens();\r\n }\r\n}\r\n\r\nexport default AuthAPI;","import React, { createContext, useState, useEffect } from 'react';\r\nimport AuthAPI from './AuthAPI';\r\nimport { AuthContextType, AuthProviderProps, User, ProjectInfo, AuthResponse, LoginCredentials, RegisterData } from './types';\r\nimport { DEFAULT_ENDPOINTS } from './constants/endpoints';\r\n\r\nexport const AuthContext = createContext<AuthContextType | undefined>(undefined);\r\n\r\nexport const AuthProvider: React.FC<AuthProviderProps> = ({\r\n children,\r\n authUrl,\r\n apiKey,\r\n projectId,\r\n loginEndpoint = DEFAULT_ENDPOINTS.login,\r\n registerEndpoint = DEFAULT_ENDPOINTS.register,\r\n logoutEndpoint = DEFAULT_ENDPOINTS.logout,\r\n refreshEndpoint = DEFAULT_ENDPOINTS.refresh,\r\n verifyEndpoint = DEFAULT_ENDPOINTS.verify,\r\n forgotPasswordEndpoint = DEFAULT_ENDPOINTS.forgotPassword,\r\n resetPasswordEndpoint = DEFAULT_ENDPOINTS.resetPassword,\r\n onError\r\n}) => {\r\n const [user, setUser] = useState<User | null>(null);\r\n const [project, setProject] = useState<ProjectInfo | null>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<string | null>(null);\r\n\r\n const authAPI = new AuthAPI(authUrl, apiKey, projectId, {\r\n login: loginEndpoint,\r\n register: registerEndpoint,\r\n logout: logoutEndpoint,\r\n refresh: refreshEndpoint,\r\n verify: verifyEndpoint,\r\n forgotPassword: forgotPasswordEndpoint,\r\n resetPassword: resetPasswordEndpoint\r\n });\r\n\r\n useEffect(() => {\r\n const initAuth = async () => {\r\n try {\r\n const verifiedUser = await authAPI.verifyToken();\r\n if (verifiedUser) {\r\n setUser(verifiedUser);\r\n }\r\n } catch (err) {\r\n console.error('Auth initialization error:', err);\r\n } finally {\r\n setLoading(false);\r\n }\r\n };\r\n\r\n initAuth();\r\n }, []);\r\n\r\n const login = async (credentials: LoginCredentials): Promise<AuthResponse> => {\r\n try {\r\n setError(null);\r\n const response = await authAPI.login(credentials);\r\n setUser(response.user);\r\n if (response.project) {\r\n setProject(response.project);\r\n }\r\n return response;\r\n } catch (err: any) {\r\n const errorMessage = err.message || 'Login failed';\r\n setError(errorMessage);\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const register = async (data: RegisterData): Promise<AuthResponse> => {\r\n try {\r\n setError(null);\r\n const response = await authAPI.register(data);\r\n setUser(response.user);\r\n if (response.project) {\r\n setProject(response.project);\r\n }\r\n return response;\r\n } catch (err: any) {\r\n const errorMessage = err.message || 'Registration failed';\r\n setError(errorMessage);\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const forgotPassword = async (email: string): Promise<void> => {\r\n try {\r\n setError(null);\r\n await authAPI.forgotPassword(email);\r\n } catch (err: any) {\r\n const errorMessage = err.message || 'Password reset request failed';\r\n setError(errorMessage);\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const resetPassword = async (token: string, newPassword: string): Promise<void> => {\r\n try {\r\n setError(null);\r\n await authAPI.resetPassword(token, newPassword);\r\n } catch (err: any) {\r\n const errorMessage = err.message || 'Password reset failed';\r\n setError(errorMessage);\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const logout = async (): Promise<void> => {\r\n try {\r\n await authAPI.logout();\r\n setUser(null);\r\n setProject(null);\r\n setError(null);\r\n } catch (err: any) {\r\n if (onError) onError(err);\r\n throw err;\r\n }\r\n };\r\n\r\n const refreshToken = async (): Promise<string | null> => {\r\n try {\r\n const newToken = await authAPI.refreshAccessToken();\r\n return newToken;\r\n } catch (err) {\r\n return null;\r\n }\r\n };\r\n\r\n const value: AuthContextType = {\r\n user,\r\n project,\r\n loading,\r\n error,\r\n login,\r\n register,\r\n logout,\r\n refreshToken,\r\n forgotPassword,\r\n resetPassword,\r\n isAuthenticated: !!user\r\n };\r\n\r\n return React.createElement(AuthContext.Provider, { value }, children);\r\n};","import { useState, useCallback, ChangeEvent } from 'react';\nimport { ValidationRules } from '../types';\n\ninterface UseAuthFormProps {\n initialValues: Record<string, any>;\n validationRules: ValidationRules;\n onSubmit: (values: Record<string, any>) => Promise<any>;\n}\n\nexport const useAuthForm = ({ initialValues, validationRules, onSubmit }: UseAuthFormProps) => {\n const [values, setValues] = useState(initialValues);\n const [errors, setErrors] = useState<Record<string, string>>({});\n const [touched, setTouched] = useState<Record<string, boolean>>({});\n const [loading, setLoading] = useState(false);\n\n const validate = useCallback((data = values) => {\n const newErrors: Record<string, string> = {};\n \n for (const [field, rules] of Object.entries(validationRules)) {\n for (const rule of rules) {\n if (!rule.validate(data[field], data)) {\n newErrors[field] = rule.message;\n break;\n }\n }\n }\n \n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n }, [values, validationRules]);\n\n const handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n const { name, value } = e.target;\n const newValues = { ...values, [name]: value };\n setValues(newValues);\n \n if (touched[name]) {\n validate(newValues);\n }\n };\n\n const handleBlur = (e: ChangeEvent<HTMLInputElement>) => {\n const { name } = e.target;\n setTouched({ ...touched, [name]: true });\n validate();\n };\n\n const handleSubmit = async (e?: React.FormEvent<HTMLFormElement>) => {\n e?.preventDefault();\n \n const allTouched = Object.keys(values).reduce((acc, key) => ({ \n ...acc, \n [key]: true \n }), {});\n setTouched(allTouched);\n \n if (!validate()) return;\n \n setLoading(true);\n try {\n const result = await onSubmit(values);\n return result;\n } catch (err: any) {\n setErrors({ form: err.message });\n throw err;\n } finally {\n setLoading(false);\n }\n };\n\n const reset = () => {\n setValues(initialValues);\n setErrors({});\n setTouched({});\n };\n\n const setFieldValue = (field: string, value: any) => {\n setValues({ ...values, [field]: value });\n };\n\n return {\n values,\n errors,\n touched,\n loading,\n handleChange,\n handleBlur,\n handleSubmit,\n reset,\n setFieldValue\n };\n};","import { ValidationRules } from '../types';\n\nexport const isRequired = (value: any): boolean => {\n if (value == null) return false;\n if (typeof value === 'string') return value.trim().length > 0;\n return true;\n};\n\nexport const isValidEmail = (email: string): boolean => {\n if (!email) return false;\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n};\n\nexport const minLength = (value: string, min: number): boolean => {\n if (!value) return false;\n return String(value).length >= min;\n};\n\nexport const maxLength = (value: string, max: number): boolean => {\n if (!value) return true;\n return String(value).length <= max;\n};\n\nexport const matches = (value: string, otherValue: string): boolean => {\n return value === otherValue;\n};\n\nexport const hasUppercase = (value: string): boolean => {\n return /[A-Z]/.test(value);\n};\n\nexport const hasNumber = (value: string): boolean => {\n return /[0-9]/.test(value);\n};\n\nexport const validateForm = (values: Record<string, any>, rules: ValidationRules): {\n isValid: boolean;\n errors: Record<string, string>;\n} => {\n const errors: Record<string, string> = {};\n\n for (const [field, fieldRules] of Object.entries(rules)) {\n for (const rule of fieldRules) {\n if (!rule.validate(values[field], values)) {\n errors[field] = rule.message;\n break;\n }\n }\n }\n\n return {\n isValid: Object.keys(errors).length === 0,\n errors\n };\n};","import React from 'react';\nimport { useAuthForm } from '../hooks/useAuthForm';\nimport { isRequired, isValidEmail } from '../utils/validation';\nimport { AuthFormProps, Field } from '../types';\n\nexport const LoginForm: React.FC<AuthFormProps> = ({\n fields = [\n { name: 'email', type: 'email', label: 'Email', required: true, placeholder: 'you@example.com' },\n { name: 'password', type: 'password', label: 'Password', required: true, placeholder: 'password' }\n ],\n validationRules = {},\n onSubmit,\n submitButtonText = 'Sign In',\n renderField,\n onSuccess,\n onError,\n className = ''\n}) => {\n const rules = {\n email: [\n { validate: isRequired, message: 'Email is required' },\n { validate: isValidEmail, message: 'Invalid email format' }\n ],\n password: [\n { validate: isRequired, message: 'Password is required' },\n { validate: (v: string) => v?.length >= 6, message: 'Password must be at least 6 characters' }\n ],\n ...validationRules\n };\n\n const {\n values,\n errors,\n loading,\n handleChange,\n handleBlur,\n handleSubmit\n } = useAuthForm({\n initialValues: fields.reduce((acc, f) => ({ ...acc, [f.name]: '' }), {}),\n validationRules: rules,\n onSubmit: async (data) => {\n try {\n const result = await onSubmit?.(data);\n onSuccess?.(result);\n return result;\n } catch (err: any) {\n onError?.(err);\n throw err;\n }\n }\n });\n\n const defaultField = (field: Field) => {\n return React.createElement('div', { key: field.name, className: 'auth-form-field' },\n React.createElement('label', { htmlFor: field.name },\n field.label,\n field.required && React.createElement('span', { className: 'required-star' }, '*')\n ),\n React.createElement('div', { className: 'input-wrapper' },\n React.createElement('input', {\n id: field.name,\n name: field.name,\n type: field.type || 'text',\n value: values[field.name] || '',\n onChange: handleChange,\n onBlur: handleBlur,\n placeholder: field.placeholder,\n className: errors[field.name] ? 'error' : ''\n })\n ),\n errors[field.name] && React.createElement('small', { className: 'error-message' }, errors[field.name])\n );\n };\n\n return React.createElement('form', { onSubmit: handleSubmit, className: `auth-form ${className}` },\n fields.map(field => renderField ? renderField(field, { values, errors, handleChange, handleBlur }) : defaultField(field)),\n errors.form && React.createElement('div', { className: 'form-error' }, errors.form),\n React.createElement('button', { type: 'submit', disabled: loading, className: 'auth-submit-btn' },\n loading ? 'Please wait...' : submitButtonText\n )\n );\n};","import React from 'react';\nimport { useAuthForm } from '../hooks/useAuthForm';\nimport { isRequired, isValidEmail, minLength, hasUppercase, hasNumber, matches } from '../utils/validation';\nimport { AuthFormProps, Field } from '../types';\n\nexport const RegisterForm: React.FC<AuthFormProps> = ({\n fields = [\n { name: 'username', type: 'text', label: 'Username', required: true, placeholder: 'johndoe' },\n { name: 'email', type: 'email', label: 'Email', required: true, placeholder: 'you@example.com' },\n { name: 'password', type: 'password', label: 'Password', required: true, placeholder: 'password' },\n { name: 'confirmPassword', type: 'password', label: 'Confirm Password', required: true, placeholder: 'confirm password' }\n ],\n validationRules = {},\n onSubmit,\n submitButtonText = 'Sign Up',\n renderField,\n onSuccess,\n onError,\n className = ''\n}) => {\n const rules = {\n username: [\n { validate: isRequired, message: 'Username is required' },\n { validate: (v: string) => v?.length >= 3, message: 'Username must be at least 3 characters' }\n ],\n email: [\n { validate: isRequired, message: 'Email is required' },\n { validate: isValidEmail, message: 'Invalid email format' }\n ],\n password: [\n { validate: isRequired, message: 'Password is required' },\n { validate: (v: string) => minLength(v, 8), message: 'Password must be at least 8 characters' },\n { validate: hasUppercase, message: 'Password must contain at least one uppercase letter' },\n { validate: hasNumber, message: 'Password must contain at least one number' }\n ],\n confirmPassword: [\n { validate: isRequired, message: 'Please confirm your password' },\n { validate: (v: string, all: any) => matches(v, all?.password), message: 'Passwords do not match' }\n ],\n ...validationRules\n };\n\n const {\n values,\n errors,\n loading,\n handleChange,\n handleBlur,\n handleSubmit\n } = useAuthForm({\n initialValues: fields.reduce((acc, f) => ({ ...acc, [f.name]: '' }), {}),\n validationRules: rules,\n onSubmit: async (data) => {\n try {\n const { confirmPassword, ...submitData } = data;\n const result = await onSubmit?.(submitData);\n onSuccess?.(result);\n return result;\n } catch (err: any) {\n onError?.(err);\n throw err;\n }\n }\n });\n\n const defaultField = (field: Field) => {\n return React.createElement('div', { key: field.name, className: 'auth-form-field' },\n React.createElement('label', { htmlFor: field.name },\n field.label,\n field.required && React.createElement('span', { className: 'required-star' }, '*')\n ),\n React.createElement('div', { className: 'input-wrapper' },\n React.createElement('input', {\n id: field.name,\n name: field.name,\n type: field.type || 'text',\n value: values[field.name] || '',\n onChange: handleChange,\n onBlur: handleBlur,\n placeholder: field.placeholder,\n className: errors[field.name] ? 'error' : ''\n })\n ),\n errors[field.name] && React.createElement('small', { className: 'error-message' }, errors[field.name])\n );\n };\n\n const passwordChecks = [\n { check: values.password?.length >= 8, text: 'At least 8 characters' },\n { check: /[A-Z]/.test(values.password || ''), text: 'One uppercase letter' },\n { check: /[0-9]/.test(values.password || ''), text: 'One number' }\n ];\n\n const getPasswordStrength = () => {\n const passedCount = passwordChecks.filter(c => c.check).length;\n if (passedCount === 3) return 'Strong';\n if (passedCount >= 2) return 'Medium';\n return 'Weak';\n };\n\n return React.createElement('form', { onSubmit: handleSubmit, className: `auth-form ${className}` },\n fields.map(field => renderField ? renderField(field, { values, errors, handleChange, handleBlur }) : defaultField(field)),\n \n values.password && React.createElement('div', { className: 'password-strength' },\n React.createElement('div', { className: 'strength-label' },\n 'Password Strength: ',\n React.createElement('span', { className: `strength-${getPasswordStrength().toLowerCase()}` }, getPasswordStrength())\n ),\n React.createElement('div', { className: 'password-checks' },\n passwordChecks.map((item, index) =>\n React.createElement('div', { key: index, className: 'check-item' },\n React.createElement('span', { className: item.check ? 'check-pass' : 'check-fail' }, item.check ? '✓' : '○'),\n React.createElement('span', { className: 'check-text' }, item.text)\n )\n )\n )\n ),\n \n errors.form && React.createElement('div', { className: 'form-error' }, errors.form),\n \n React.createElement('button', { type: 'submit', disabled: loading, className: 'auth-submit-btn' },\n loading ? 'Creating account...' : submitButtonText\n )\n );\n};","import { useContext } from 'react';\nimport { AuthContext } from '../AuthProvider';\n\nexport const useAuth = () => {\n const context = useContext(AuthContext);\n \n if (!context) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n \n return context;\n};"],"names":["TOKEN_KEY","REFRESH_TOKEN_KEY","tokenManager","getToken","localStorage","getItem","setToken","token","setItem","removeToken","removeItem","getRefreshToken","setRefreshToken","refreshToken","removeRefreshToken","clearAll","hasTokens","AuthError","message","statusCode","originalError","_this","_classCallCheck","_callSuper","this","name","_inherits","_wrapNativeSuper","Error","_createClass","handleAuthError","error","response","status","_a","data","_b","concat","request","DEFAULT_ENDPOINTS","login","register","logout","refresh","verify","forgotPassword","resetPassword","AuthAPI","authUrl","apiKey","projectId","customEndpoints","isRefreshing","refreshSubscribers","config","endpoints","_objectSpread","api","axios","create","baseURL","timeout","headers","setupInterceptors","key","value","interceptors","use","Authorization","Promise","reject","_ref","_asyncToGenerator","_regenerator","m","_callee","originalRequest","newToken","_t","w","_context","p","n","url","includes","a","_retry","resolve","push","refreshAccessToken","v","onRefreshSuccess","onRefreshFailure","f","_x","apply","arguments","forEach","callback","_refreshAccessToken","_callee2","_context2","post","_login","_callee3","credentials","_t2","_context3","_x2","_register","_callee4","userData","_t3","_context4","_x3","_forgotPassword","_callee5","email","_t4","_context5","_x4","_resetPassword","_callee6","newPassword","_t5","_context6","_x5","_x6","_logout","_callee7","_t6","_context7","console","_verifyToken","_callee8","_context8","get","AuthContext","createContext","undefined","useAuthForm","initialValues","validationRules","onSubmit","_useState2","_slicedToArray","useState","values","setValues","_useState4","errors","setErrors","_useState6","touched","setTouched","_useState8","loading","setLoading","validate","useCallback","length","newErrors","_i","_Object$entries","Object","entries","_step","_Object$entries$_i","field","_iterator","_createForOfIteratorHelper","s","done","rule","err","e","keys","handleSubmit","_ref2","allTouched","result","preventDefault","reduce","acc","_defineProperty","form","handleChange","_e$target","target","newValues","handleBlur","reset","setFieldValue","isRequired","trim","isValidEmail","test","minLength","min","String","matches","otherValue","hasUppercase","hasNumber","children","_ref$loginEndpoint","loginEndpoint","_ref$registerEndpoint","registerEndpoint","_ref$logoutEndpoint","logoutEndpoint","_ref$refreshEndpoint","refreshEndpoint","_ref$verifyEndpoint","verifyEndpoint","_ref$forgotPasswordEn","forgotPasswordEndpoint","_ref$resetPasswordEnd","resetPasswordEndpoint","onError","user","setUser","project","setProject","setError","authAPI","useEffect","initAuth","verifiedUser","verifyToken","_ref3","errorMessage","_ref4","_ref5","_ref6","_ref7","_ref8","isAuthenticated","React","createElement","Provider","_onSubmit2","_ref$fields","fields","type","label","required","placeholder","_ref$validationRules","_ref$submitButtonText","submitButtonText","renderField","onSuccess","_ref$className","className","rules","password","_useAuthForm","map","htmlFor","id","onChange","onBlur","defaultField","disabled","username","confirmPassword","all","submitData","_objectWithoutProperties","_excluded","passwordChecks","check","text","getPasswordStrength","passedCount","filter","c","toLowerCase","item","index","max","context","useContext","isValid"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { LoginCredentials, RegisterData, AuthResponse } from '../types';
|
|
2
|
+
declare class AuthAPI {
|
|
3
|
+
private api;
|
|
4
|
+
private refreshEndpoint;
|
|
5
|
+
private apiKey;
|
|
6
|
+
private projectId;
|
|
7
|
+
constructor(baseURL: string, apiKey: string, projectId: string, refreshEndpoint?: string);
|
|
8
|
+
private handleError;
|
|
9
|
+
login(credentials: LoginCredentials, endpoint: string): Promise<AuthResponse>;
|
|
10
|
+
register(userData: RegisterData, endpoint: string): Promise<AuthResponse>;
|
|
11
|
+
logout(endpoint: string): Promise<void>;
|
|
12
|
+
verifyToken(endpoint: string): Promise<any>;
|
|
13
|
+
refreshToken(endpoint: string, refreshToken: string): Promise<{
|
|
14
|
+
token: string;
|
|
15
|
+
}>;
|
|
16
|
+
}
|
|
17
|
+
export default AuthAPI;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export interface User {
|
|
2
|
+
id: string;
|
|
3
|
+
email: string;
|
|
4
|
+
username?: string;
|
|
5
|
+
provider: string;
|
|
6
|
+
providerId?: string;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
updatedAt: string;
|
|
9
|
+
}
|
|
10
|
+
export interface ProjectInfo {
|
|
11
|
+
id: string;
|
|
12
|
+
name: string;
|
|
13
|
+
role: string;
|
|
14
|
+
}
|
|
15
|
+
export interface AuthResponse {
|
|
16
|
+
token: string;
|
|
17
|
+
refreshToken: string;
|
|
18
|
+
user: User;
|
|
19
|
+
project?: ProjectInfo;
|
|
20
|
+
}
|
|
21
|
+
export interface LoginCredentials {
|
|
22
|
+
email: string;
|
|
23
|
+
password: string;
|
|
24
|
+
}
|
|
25
|
+
export interface RegisterData {
|
|
26
|
+
username: string;
|
|
27
|
+
email: string;
|
|
28
|
+
password: string;
|
|
29
|
+
}
|
|
30
|
+
export interface ForgotPasswordRequest {
|
|
31
|
+
email: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ResetPasswordRequest {
|
|
34
|
+
token: string;
|
|
35
|
+
newPassword: string;
|
|
36
|
+
}
|
|
37
|
+
export interface AuthContextType {
|
|
38
|
+
user: User | null;
|
|
39
|
+
project: ProjectInfo | null;
|
|
40
|
+
loading: boolean;
|
|
41
|
+
error: string | null;
|
|
42
|
+
login: (credentials: LoginCredentials) => Promise<AuthResponse>;
|
|
43
|
+
register: (data: RegisterData) => Promise<AuthResponse>;
|
|
44
|
+
logout: () => Promise<void>;
|
|
45
|
+
refreshToken: () => Promise<string | null>;
|
|
46
|
+
forgotPassword: (email: string) => Promise<void>;
|
|
47
|
+
resetPassword: (token: string, newPassword: string) => Promise<void>;
|
|
48
|
+
isAuthenticated: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface AuthProviderProps {
|
|
51
|
+
children: React.ReactNode;
|
|
52
|
+
authUrl: string;
|
|
53
|
+
apiKey: string;
|
|
54
|
+
projectId: string;
|
|
55
|
+
loginEndpoint?: string;
|
|
56
|
+
registerEndpoint?: string;
|
|
57
|
+
logoutEndpoint?: string;
|
|
58
|
+
refreshEndpoint?: string;
|
|
59
|
+
verifyEndpoint?: string;
|
|
60
|
+
forgotPasswordEndpoint?: string;
|
|
61
|
+
resetPasswordEndpoint?: string;
|
|
62
|
+
onError?: (error: Error) => void;
|
|
63
|
+
}
|
|
64
|
+
export interface AuthConfig {
|
|
65
|
+
authUrl: string;
|
|
66
|
+
apiKey: string;
|
|
67
|
+
projectId: string;
|
|
68
|
+
endpoints: {
|
|
69
|
+
login: string;
|
|
70
|
+
register: string;
|
|
71
|
+
logout: string;
|
|
72
|
+
refresh: string;
|
|
73
|
+
verify: string;
|
|
74
|
+
forgotPassword: string;
|
|
75
|
+
resetPassword: string;
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
export interface Field {
|
|
79
|
+
name: string;
|
|
80
|
+
type: string;
|
|
81
|
+
label: string;
|
|
82
|
+
required?: boolean;
|
|
83
|
+
placeholder?: string;
|
|
84
|
+
}
|
|
85
|
+
export interface ValidationRule {
|
|
86
|
+
validate: (value: any, allValues?: any) => boolean;
|
|
87
|
+
message: string;
|
|
88
|
+
}
|
|
89
|
+
export interface ValidationRules {
|
|
90
|
+
[key: string]: ValidationRule[];
|
|
91
|
+
}
|
|
92
|
+
export interface AuthFormProps {
|
|
93
|
+
fields?: Field[];
|
|
94
|
+
validationRules?: ValidationRules;
|
|
95
|
+
onSubmit?: (data: any) => Promise<any>;
|
|
96
|
+
submitButtonText?: string;
|
|
97
|
+
className?: string;
|
|
98
|
+
renderField?: (field: Field, formState: any) => React.ReactNode;
|
|
99
|
+
onSuccess?: (result: AuthResponse) => void;
|
|
100
|
+
onError?: (error: Error) => void;
|
|
101
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const tokenManager: {
|
|
2
|
+
getToken: () => string | null;
|
|
3
|
+
setToken: (token: string) => void;
|
|
4
|
+
removeToken: () => void;
|
|
5
|
+
getRefreshToken: () => string | null;
|
|
6
|
+
setRefreshToken: (refreshToken: string) => void;
|
|
7
|
+
removeRefreshToken: () => void;
|
|
8
|
+
clearAll: () => void;
|
|
9
|
+
hasTokens: () => boolean;
|
|
10
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ValidationRules } from '../types';
|
|
2
|
+
export declare const isRequired: (value: any) => boolean;
|
|
3
|
+
export declare const isValidEmail: (email: string) => boolean;
|
|
4
|
+
export declare const minLength: (value: string, min: number) => boolean;
|
|
5
|
+
export declare const maxLength: (value: string, max: number) => boolean;
|
|
6
|
+
export declare const matches: (value: string, otherValue: string) => boolean;
|
|
7
|
+
export declare const hasUppercase: (value: string) => boolean;
|
|
8
|
+
export declare const hasNumber: (value: string) => boolean;
|
|
9
|
+
export declare const validateForm: (values: Record<string, any>, rules: ValidationRules) => {
|
|
10
|
+
isValid: boolean;
|
|
11
|
+
errors: Record<string, string>;
|
|
12
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@bmdinner/logreg",
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Authentication package for AI Snippets Manager",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.esm.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "rollup -c",
|
|
15
|
+
"dev": "rollup -c -w",
|
|
16
|
+
"prepublishOnly": "npm run build"
|
|
17
|
+
},
|
|
18
|
+
"peerDependencies": {
|
|
19
|
+
"react": "^18.0.0",
|
|
20
|
+
"react-dom": "^18.0.0",
|
|
21
|
+
"axios": "^1.6.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"@babel/core": "^7.23.0",
|
|
25
|
+
"@babel/preset-env": "^7.23.0",
|
|
26
|
+
"@babel/preset-react": "^7.22.0",
|
|
27
|
+
"@babel/preset-typescript": "^7.23.0",
|
|
28
|
+
"@rollup/plugin-babel": "^6.0.4",
|
|
29
|
+
"@rollup/plugin-commonjs": "^25.0.5",
|
|
30
|
+
"@rollup/plugin-json": "^6.0.1",
|
|
31
|
+
"@rollup/plugin-node-resolve": "^15.2.3",
|
|
32
|
+
"@rollup/plugin-terser": "^1.0.0",
|
|
33
|
+
"@rollup/plugin-typescript": "^11.1.5",
|
|
34
|
+
"@types/react": "^18.2.0",
|
|
35
|
+
"rollup": "^4.0.0",
|
|
36
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
37
|
+
"tslib": "^2.6.0",
|
|
38
|
+
"typescript": "^5.2.0"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"react",
|
|
42
|
+
"authentication",
|
|
43
|
+
"jwt",
|
|
44
|
+
"auth"
|
|
45
|
+
],
|
|
46
|
+
"author": "Berke Dinner",
|
|
47
|
+
"license": "MIT",
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "https://github.com/BMDINNER/LogReg"
|
|
51
|
+
},
|
|
52
|
+
"bugs": {
|
|
53
|
+
"url": "https://github.com/BMDINNER/LogReg/issues"
|
|
54
|
+
},
|
|
55
|
+
"homepage": "https://github.com/BMDINNER/LogReg#readme"
|
|
56
|
+
}
|