@nocios/crudify-ui 5.0.1 → 5.0.2

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.
@@ -115,4 +115,4 @@ interface TransactionOperation {
115
115
  */
116
116
  type TransactionInput = TransactionOperation | TransactionOperation[] | Record<string, unknown>;
117
117
 
118
- export type { ApiError as A, CrudifyApiResponse as C, ForgotPasswordRequest as F, JwtPayload as J, LoginResponse as L, ResetPasswordRequest as R, TransactionResponseData as T, UserProfile as U, ValidateCodeRequest as V, CrudifyTransactionResponse as a, LoginRequest as b, ValidationError as c, CrudifyRequestOptions as d, TransactionInput as e, CrudifyOperationOptions as f };
118
+ export type { ApiError as A, CrudifyApiResponse as C, ForgotPasswordRequest as F, JwtPayload as J, LoginResponse as L, ResetPasswordRequest as R, TransactionResponseData as T, UserProfile as U, ValidateCodeRequest as V, CrudifyTransactionResponse as a, LoginRequest as b, ValidationError as c, CrudifyOperationOptions as d, CrudifyRequestOptions as e, TransactionOperation as f, TransactionInput as g };
@@ -115,4 +115,4 @@ interface TransactionOperation {
115
115
  */
116
116
  type TransactionInput = TransactionOperation | TransactionOperation[] | Record<string, unknown>;
117
117
 
118
- export type { ApiError as A, CrudifyApiResponse as C, ForgotPasswordRequest as F, JwtPayload as J, LoginResponse as L, ResetPasswordRequest as R, TransactionResponseData as T, UserProfile as U, ValidateCodeRequest as V, CrudifyTransactionResponse as a, LoginRequest as b, ValidationError as c, CrudifyRequestOptions as d, TransactionInput as e, CrudifyOperationOptions as f };
118
+ export type { ApiError as A, CrudifyApiResponse as C, ForgotPasswordRequest as F, JwtPayload as J, LoginResponse as L, ResetPasswordRequest as R, TransactionResponseData as T, UserProfile as U, ValidateCodeRequest as V, CrudifyTransactionResponse as a, LoginRequest as b, ValidationError as c, CrudifyOperationOptions as d, CrudifyRequestOptions as e, TransactionOperation as f, TransactionInput as g };
@@ -1,4 +1,4 @@
1
- import { J as JwtPayload } from './api-slyZ8Gxc.js';
1
+ import { J as JwtPayload } from './api-B4uXiHF0.js';
2
2
 
3
3
  interface JWTPayload extends JwtPayload {
4
4
  "cognito:username"?: string;
@@ -1,4 +1,4 @@
1
- import { J as JwtPayload } from './api-slyZ8Gxc.mjs';
1
+ import { J as JwtPayload } from './api-B4uXiHF0.mjs';
2
2
 
3
3
  interface JWTPayload extends JwtPayload {
4
4
  "cognito:username"?: string;
package/dist/hooks.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- export { F as FileItem, v as FileStatus, d as SessionState, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, i as useUserData, q as useUserProfile } from './index-DD1mjOd6.mjs';
1
+ export { F as FileItem, v as FileStatus, d as SessionState, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, i as useUserData, q as useUserProfile } from './index-CErRRwM0.mjs';
2
2
  export { A as AutoGenerateConfig, d as UseAutoGenerateOptions, U as UseAutoGenerateReturn, c as useAutoGenerate } from './GlobalNotificationProvider-Zq18OkpI.mjs';
3
- import './api-slyZ8Gxc.mjs';
3
+ import './api-B4uXiHF0.mjs';
4
4
  import 'react/jsx-runtime';
5
5
  import 'react';
6
6
  import '@nocios/crudify-browser';
package/dist/hooks.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export { F as FileItem, v as FileStatus, d as SessionState, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, i as useUserData, q as useUserProfile } from './index-Dr4eHdgn.js';
1
+ export { F as FileItem, v as FileStatus, d as SessionState, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, i as useUserData, q as useUserProfile } from './index-B--DrAu9.js';
2
2
  export { A as AutoGenerateConfig, d as UseAutoGenerateOptions, U as UseAutoGenerateReturn, c as useAutoGenerate } from './GlobalNotificationProvider-Zq18OkpI.js';
3
- import './api-slyZ8Gxc.js';
3
+ import './api-B4uXiHF0.js';
4
4
  import 'react/jsx-runtime';
5
5
  import 'react';
6
6
  import '@nocios/crudify-browser';
@@ -1,4 +1,4 @@
1
- import { U as UserProfile, d as CrudifyRequestOptions, C as CrudifyApiResponse, e as TransactionInput, f as CrudifyOperationOptions } from './api-slyZ8Gxc.js';
1
+ import { U as UserProfile, e as CrudifyRequestOptions, C as CrudifyApiResponse, g as TransactionInput, d as CrudifyOperationOptions } from './api-B4uXiHF0.js';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import { ReactNode } from 'react';
4
4
  import { b as NotificationSeverity } from './GlobalNotificationProvider-Zq18OkpI.js';
@@ -1,4 +1,4 @@
1
- import { U as UserProfile, d as CrudifyRequestOptions, C as CrudifyApiResponse, e as TransactionInput, f as CrudifyOperationOptions } from './api-slyZ8Gxc.mjs';
1
+ import { U as UserProfile, e as CrudifyRequestOptions, C as CrudifyApiResponse, g as TransactionInput, d as CrudifyOperationOptions } from './api-B4uXiHF0.mjs';
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import { ReactNode } from 'react';
4
4
  import { b as NotificationSeverity } from './GlobalNotificationProvider-Zq18OkpI.mjs';
package/dist/index.d.mts CHANGED
@@ -4,12 +4,12 @@ export { default as crudify } from '@nocios/crudify-browser';
4
4
  import { d as CrudifyLoginConfig } from './CrudiaMarkdownField-8s252xsM.mjs';
5
5
  export { B as BoxScreenType, a as CrudiaAutoGenerate, i as CrudiaAutoGenerateProps, b as CrudiaFileField, n as CrudiaFileFieldDeletionHandlers, j as CrudiaFileFieldProps, c as CrudiaMarkdownField, k as CrudiaMarkdownFieldProps, C as CrudifyLogin, e as CrudifyLoginProps, f as CrudifyLoginTranslations, L as LoginComponent, l as POLICY_ACTIONS, m as PREFERRED_POLICY_ORDER, P as Policies, h as PolicyAction, S as SessionStatus, g as UserLoginData, U as UserProfileDisplay } from './CrudiaMarkdownField-8s252xsM.mjs';
6
6
  import React, { ReactNode } from 'react';
7
- export { A as ApiError, C as CrudifyApiResponse, a as CrudifyTransactionResponse, F as ForgotPasswordRequest, J as JwtPayload, b as LoginRequest, L as LoginResponse, R as ResetPasswordRequest, T as TransactionResponseData, U as UserProfile, V as ValidateCodeRequest, c as ValidationError } from './api-slyZ8Gxc.mjs';
8
- export { F as FileItem, v as FileStatus, L as LoginResult, N as NotificationOptions, a as SessionConfig, g as SessionDebugInfo, S as SessionManager, e as SessionProvider, h as SessionProviderProps, d as SessionState, c as StorageType, b as TokenData, T as TokenStorage, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, f as useSessionContext, i as useUserData, q as useUserProfile } from './index-DD1mjOd6.mjs';
7
+ export { A as ApiError, C as CrudifyApiResponse, d as CrudifyOperationOptions, e as CrudifyRequestOptions, a as CrudifyTransactionResponse, F as ForgotPasswordRequest, J as JwtPayload, b as LoginRequest, L as LoginResponse, R as ResetPasswordRequest, g as TransactionInput, f as TransactionOperation, T as TransactionResponseData, U as UserProfile, V as ValidateCodeRequest, c as ValidationError } from './api-B4uXiHF0.mjs';
8
+ export { F as FileItem, v as FileStatus, L as LoginResult, N as NotificationOptions, a as SessionConfig, g as SessionDebugInfo, S as SessionManager, e as SessionProvider, h as SessionProviderProps, d as SessionState, c as StorageType, b as TokenData, T as TokenStorage, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, f as useSessionContext, i as useUserData, q as useUserProfile } from './index-CErRRwM0.mjs';
9
9
  import * as react_jsx_runtime from 'react/jsx-runtime';
10
10
  import { ThemeOptions } from '@mui/material';
11
11
  export { A as AutoGenerateConfig, G as GlobalNotificationProvider, a as GlobalNotificationProviderProps, N as Notification, b as NotificationSeverity, d as UseAutoGenerateOptions, U as UseAutoGenerateReturn, c as useAutoGenerate, u as useGlobalNotification } from './GlobalNotificationProvider-Zq18OkpI.mjs';
12
- export { E as ERROR_CODES, j as ERROR_SEVERITY_MAP, n as ErrorCode, o as ErrorSeverity, q as ErrorTranslationConfig, P as ParsedError, m as createErrorTranslator, d as decodeJwtSafely, a as getCookie, g as getCurrentUserEmail, f as getErrorMessage, h as handleCrudifyError, i as isTokenExpired, p as parseApiError, e as parseJavaScriptError, c as parseTransactionError, b as secureLocalStorage, s as secureSessionStorage, l as translateError, t as translateErrorCode, k as translateErrorCodes } from './errorTranslation-DTUst6nq.mjs';
12
+ export { E as ERROR_CODES, j as ERROR_SEVERITY_MAP, n as ErrorCode, o as ErrorSeverity, q as ErrorTranslationConfig, P as ParsedError, m as createErrorTranslator, d as decodeJwtSafely, a as getCookie, g as getCurrentUserEmail, f as getErrorMessage, h as handleCrudifyError, i as isTokenExpired, p as parseApiError, e as parseJavaScriptError, c as parseTransactionError, b as secureLocalStorage, s as secureSessionStorage, l as translateError, t as translateErrorCode, k as translateErrorCodes } from './errorTranslation-qwwQTvCO.mjs';
13
13
  import { ApiResponse, IModule, ModuleCreateInput, ModuleEditInput, ActionListFilters, IAction, ActionCreateInput, ActionEditInput, UpdateActionsProfilesInput, UpdateActionsProfilesResponse } from '@nocios/crudify-admin';
14
14
  export { ActionCreateInput, ActionEditInput, ActionListFilters, ApiResponse, IAction, IModule, ModuleCreateInput, ModuleEditInput, UpdateActionsProfilesInput, UpdateActionsProfilesResponse } from '@nocios/crudify-admin';
15
15
 
package/dist/index.d.ts CHANGED
@@ -4,12 +4,12 @@ export { default as crudify } from '@nocios/crudify-browser';
4
4
  import { d as CrudifyLoginConfig } from './CrudiaMarkdownField-Dy2dVkBO.js';
5
5
  export { B as BoxScreenType, a as CrudiaAutoGenerate, i as CrudiaAutoGenerateProps, b as CrudiaFileField, n as CrudiaFileFieldDeletionHandlers, j as CrudiaFileFieldProps, c as CrudiaMarkdownField, k as CrudiaMarkdownFieldProps, C as CrudifyLogin, e as CrudifyLoginProps, f as CrudifyLoginTranslations, L as LoginComponent, l as POLICY_ACTIONS, m as PREFERRED_POLICY_ORDER, P as Policies, h as PolicyAction, S as SessionStatus, g as UserLoginData, U as UserProfileDisplay } from './CrudiaMarkdownField-Dy2dVkBO.js';
6
6
  import React, { ReactNode } from 'react';
7
- export { A as ApiError, C as CrudifyApiResponse, a as CrudifyTransactionResponse, F as ForgotPasswordRequest, J as JwtPayload, b as LoginRequest, L as LoginResponse, R as ResetPasswordRequest, T as TransactionResponseData, U as UserProfile, V as ValidateCodeRequest, c as ValidationError } from './api-slyZ8Gxc.js';
8
- export { F as FileItem, v as FileStatus, L as LoginResult, N as NotificationOptions, a as SessionConfig, g as SessionDebugInfo, S as SessionManager, e as SessionProvider, h as SessionProviderProps, d as SessionState, c as StorageType, b as TokenData, T as TokenStorage, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, f as useSessionContext, i as useUserData, q as useUserProfile } from './index-Dr4eHdgn.js';
7
+ export { A as ApiError, C as CrudifyApiResponse, d as CrudifyOperationOptions, e as CrudifyRequestOptions, a as CrudifyTransactionResponse, F as ForgotPasswordRequest, J as JwtPayload, b as LoginRequest, L as LoginResponse, R as ResetPasswordRequest, g as TransactionInput, f as TransactionOperation, T as TransactionResponseData, U as UserProfile, V as ValidateCodeRequest, c as ValidationError } from './api-B4uXiHF0.js';
8
+ export { F as FileItem, v as FileStatus, L as LoginResult, N as NotificationOptions, a as SessionConfig, g as SessionDebugInfo, S as SessionManager, e as SessionProvider, h as SessionProviderProps, d as SessionState, c as StorageType, b as TokenData, T as TokenStorage, n as UseAuthReturn, p as UseDataReturn, s as UseFileUploadOptions, t as UseFileUploadReturn, U as UseSessionOptions, k as UseUserDataOptions, j as UseUserDataReturn, l as UserData, m as useAuth, w as useCrudifyWithNotifications, o as useData, r as useFileUpload, u as useSession, f as useSessionContext, i as useUserData, q as useUserProfile } from './index-B--DrAu9.js';
9
9
  import * as react_jsx_runtime from 'react/jsx-runtime';
10
10
  import { ThemeOptions } from '@mui/material';
11
11
  export { A as AutoGenerateConfig, G as GlobalNotificationProvider, a as GlobalNotificationProviderProps, N as Notification, b as NotificationSeverity, d as UseAutoGenerateOptions, U as UseAutoGenerateReturn, c as useAutoGenerate, u as useGlobalNotification } from './GlobalNotificationProvider-Zq18OkpI.js';
12
- export { E as ERROR_CODES, j as ERROR_SEVERITY_MAP, n as ErrorCode, o as ErrorSeverity, q as ErrorTranslationConfig, P as ParsedError, m as createErrorTranslator, d as decodeJwtSafely, a as getCookie, g as getCurrentUserEmail, f as getErrorMessage, h as handleCrudifyError, i as isTokenExpired, p as parseApiError, e as parseJavaScriptError, c as parseTransactionError, b as secureLocalStorage, s as secureSessionStorage, l as translateError, t as translateErrorCode, k as translateErrorCodes } from './errorTranslation-BOha05J6.js';
12
+ export { E as ERROR_CODES, j as ERROR_SEVERITY_MAP, n as ErrorCode, o as ErrorSeverity, q as ErrorTranslationConfig, P as ParsedError, m as createErrorTranslator, d as decodeJwtSafely, a as getCookie, g as getCurrentUserEmail, f as getErrorMessage, h as handleCrudifyError, i as isTokenExpired, p as parseApiError, e as parseJavaScriptError, c as parseTransactionError, b as secureLocalStorage, s as secureSessionStorage, l as translateError, t as translateErrorCode, k as translateErrorCodes } from './errorTranslation-DGdrMidg.js';
13
13
  import { ApiResponse, IModule, ModuleCreateInput, ModuleEditInput, ActionListFilters, IAction, ActionCreateInput, ActionEditInput, UpdateActionsProfilesInput, UpdateActionsProfilesResponse } from '@nocios/crudify-admin';
14
14
  export { ActionCreateInput, ActionEditInput, ActionListFilters, ApiResponse, IAction, IModule, ModuleCreateInput, ModuleEditInput, UpdateActionsProfilesInput, UpdateActionsProfilesResponse } from '@nocios/crudify-admin';
15
15
 
package/dist/index.js CHANGED
@@ -3,4 +3,4 @@
3
3
  0% { transform: rotate(0deg); }
4
4
  100% { transform: rotate(360deg); }
5
5
  }
6
- `});function k({stage:e="loading",message:r}){let t=r||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, We,{}),_jsxruntime.jsxs.call(void 0, "div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",width:"100vw",backgroundColor:"#f0f2f5",fontFamily:'"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',color:"#333",textAlign:"center",boxSizing:"border-box",padding:"20px",background:"#fff"},children:[_jsxruntime.jsx.call(void 0, "div",{style:qe}),_jsxruntime.jsx.call(void 0, "p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var $e=/^[a-zA-Z0-9\-_./\?=&%#]+$/,Ye=[/^https?:\/\//i,/^ftp:\/\//i,/^\/\//,/javascript:/i,/data:/i,/vbscript:/i,/about:/i,/\.\.\//,/\.\.\\/,/%2e%2e%2f/i,/%2e%2e%5c/i,/%2f%2f/i,/%5c%5c/i,/[\x00-\x1f\x7f-\x9f]/,/\\/],S= exports.validateInternalRedirect =(e,r="/")=>{if(!e||typeof e!="string")return r;let o=e.trim();if(!o)return r;if(!o.startsWith("/"))return _chunkNXTXGTU6js.a.warn("Open redirect blocked (relative path)",{path:e}),r;if(!$e.test(o))return _chunkNXTXGTU6js.a.warn("Open redirect blocked (invalid characters)",{path:e}),r;let t=o.toLowerCase();for(let a of Ye)if(a.test(t))return _chunkNXTXGTU6js.a.warn("Open redirect blocked (dangerous pattern)",{path:e}),r;let s=o.split("?")[0].split("/").filter(Boolean);if(s.length===0)return o;for(let a of s)if(a===".."||a.includes(":")||a.length>100)return _chunkNXTXGTU6js.a.warn("Open redirect blocked (suspicious path part)",{part:a}),r;return o},E= exports.extractSafeRedirectFromUrl =(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let s=decodeURIComponent(t);return S(s,r)}catch(o){return _chunkNXTXGTU6js.a.warn("Error parsing redirect parameter",o instanceof Error?{errorMessage:o.message}:{message:String(o)}),r}};function U({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:s,isInitialized:a,tokens:c,error:A}=_chunk3XZ3TEKQjs.j.call(void 0, ),d=_reactrouterdom.useLocation.call(void 0, );if(!a||s)return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:r||_jsxruntime.jsx.call(void 0, k,{stage:"validating-session"})});let u=t&&_optionalChain([c, 'optionalAccess', _2 => _2.accessToken])&&c.accessToken.length>0;if(A||!t||!u){c&&(!c.accessToken||c.accessToken.length===0)&&localStorage.removeItem("crudify_tokens");let x=d.pathname+d.search,C=S(x),P=encodeURIComponent(C);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:`${o}?redirect=${P}`,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}function O({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=_chunk3XZ3TEKQjs.j.call(void 0, ),t=_reactrouterdom.useLocation.call(void 0, );if(o){let s=new URLSearchParams(t.search),a=E(s,r);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:a,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}var G=_react.createContext.call(void 0, void 0),ir= exports.CrudifyInitializer =({config:e,children:r,fallback:o=null,onInitialized:t,onError:s})=>{let[a,c]=_react.useState.call(void 0, !1),[A,d]=_react.useState.call(void 0, !1),[u,x]=_react.useState.call(void 0, null),C=_react.useRef.call(void 0, !1),P=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{C.current||(_chunk3XZ3TEKQjs.o.registerHighPriorityInitializer(),C.current=!0),P.current||(P.current=!0,(async()=>{d(!0),x(null);try{let l=_chunkNXTXGTU6js.c.call(void 0, {publicApiKey:_optionalChain([e, 'optionalAccess', _3 => _3.publicApiKey]),env:_optionalChain([e, 'optionalAccess', _4 => _4.env]),enableDebug:_optionalChain([e, 'optionalAccess', _5 => _5.enableLogging])});if(!l.publicApiKey)throw new Error("Crudify configuration missing. Please provide publicApiKey via props or ensure cookies are set by Lambda.");let R=l.env||"prod";_chunkNXTXGTU6js.a.setEnvironment(R),await _chunk3XZ3TEKQjs.o.initialize({priority:"HIGH",publicApiKey:l.publicApiKey,env:l.env||"prod",enableLogging:_optionalChain([e, 'optionalAccess', _6 => _6.enableLogging]),requestedBy:"CrudifyInitializer"}),c(!0),d(!1),t&&t()}catch(l){let R=l instanceof Error?l:new Error(String(l));x(R),d(!1),s&&s(R)}})())},[_optionalChain([e, 'optionalAccess', _7 => _7.publicApiKey]),_optionalChain([e, 'optionalAccess', _8 => _8.env]),_optionalChain([e, 'optionalAccess', _9 => _9.enableLogging]),t,s]);let V={isInitialized:a,isInitializing:A,error:u};return A&&o?_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:o}):(u&&_chunkNXTXGTU6js.a.error("[CrudifyInitializer] Initialization failed",u),_jsxruntime.jsx.call(void 0, G.Provider,{value:V,children:r}))},nr= exports.useCrudifyInitializer =()=>{let e=_react.useContext.call(void 0, G);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};var _crudifyadmin = require('@nocios/crudify-admin'); var _crudifyadmin2 = _interopRequireDefault(_crudifyadmin);var K=!1,g=null,y=null;async function ar(){let r=await _chunk3XZ3TEKQjs.b.getInstance().getTokenInfo(),o=_optionalChain([r, 'optionalAccess', _10 => _10.apiEndpointAdmin]),t=_optionalChain([r, 'optionalAccess', _11 => _11.apiKeyEndpointAdmin]);return o&&t?{apiUrl:o,apiKey:t}:_chunk3XZ3TEKQjs.f.waitForCredentials()}async function pr(){if(!K)return g||(g=(async()=>{try{let e=_chunk3XZ3TEKQjs.b.getInstance(),{apiUrl:r,apiKey:o}=await ar();y=await _asyncOptionalChain([(await e.getTokenInfo()), 'optionalAccess', async _12 => _12.crudifyTokens, 'optionalAccess', async _13 => _13.accessToken])||null,_crudifyadmin2.default.init({url:r,apiKey:o,getAdditionalHeaders:()=>y?{Authorization:`Bearer ${y}`}:{}}),K=!0}catch(e){throw g=null,_chunkNXTXGTU6js.a.error("[crudifyAdminWrapper] Initialization failed",e instanceof Error?e:{message:String(e)}),e}})(),g)}async function n(e){try{await pr();let r=_chunk3XZ3TEKQjs.b.getInstance();y=await _asyncOptionalChain([(await r.getTokenInfo()), 'optionalAccess', async _14 => _14.crudifyTokens, 'optionalAccess', async _15 => _15.accessToken])||null;let t=await e(),s=t.errors&&(typeof t.errors=="string"&&t.errors.includes("401")||Array.isArray(t.errors)&&t.errors.some(a=>typeof a=="string"&&a.includes("401")));return!t.success&&s?await r.refreshTokens()?(y=await _asyncOptionalChain([(await r.getTokenInfo()), 'optionalAccess', async _16 => _16.crudifyTokens, 'optionalAccess', async _17 => _17.accessToken])||null,await e()):(_chunkNXTXGTU6js.a.error("[crudifyAdmin] Token refresh failed"),typeof window<"u"&&(window.location.href="/login"),t):t}catch(r){return _chunkNXTXGTU6js.a.error("[crudifyAdmin] Operation error",r instanceof Error?r:{message:String(r)}),{success:!1,errors:r instanceof Error?r.message:"Unknown error"}}}var cr={listModules:()=>n(()=>_crudifyadmin2.default.listModules()),getModule:e=>n(()=>_crudifyadmin2.default.getModule(e)),createModule:e=>n(()=>_crudifyadmin2.default.createModule(e)),editModule:(e,r)=>n(()=>_crudifyadmin2.default.editModule(e,r)),deleteModule:e=>n(()=>_crudifyadmin2.default.deleteModule(e)),activateModule:e=>n(()=>_crudifyadmin2.default.activateModule(e)),deactivateModule:e=>n(()=>_crudifyadmin2.default.deactivateModule(e)),getModuleVersions:e=>n(()=>_crudifyadmin2.default.getModuleVersions(e)),listActions:e=>n(()=>_crudifyadmin2.default.listActions(e)),getAction:e=>n(()=>_crudifyadmin2.default.getAction(e)),createAction:e=>n(()=>_crudifyadmin2.default.createAction(e)),editAction:(e,r)=>n(()=>_crudifyadmin2.default.editAction(e,r)),deleteAction:e=>n(()=>_crudifyadmin2.default.deleteAction(e)),activateAction:e=>n(()=>_crudifyadmin2.default.activateAction(e)),deactivateAction:e=>n(()=>_crudifyadmin2.default.deactivateAction(e)),getActionVersions:e=>n(()=>_crudifyadmin2.default.getActionVersions(e)),getActionsByProfile:e=>n(()=>_crudifyadmin2.default.getActionsByProfile(e)),updateActionsProfiles:e=>n(()=>_crudifyadmin2.default.updateActionsProfiles(e))};exports.AuthRoute = O; exports.CRITICAL_TRANSLATIONS = _chunk5VOTRIDBjs.a; exports.CrudiaAutoGenerate = _chunk5VOTRIDBjs.o; exports.CrudiaFileField = _chunk5VOTRIDBjs.p; exports.CrudiaMarkdownField = _chunk5VOTRIDBjs.q; exports.CrudifyInitializationManager = _chunk3XZ3TEKQjs.n; exports.CrudifyInitializer = ir; exports.CrudifyLogin = _chunk5VOTRIDBjs.h; exports.CrudifyProvider = _chunk3XZ3TEKQjs.g; exports.CrudifyThemeProvider = _e; exports.ERROR_CODES = _chunkNSV6ECYOjs.a; exports.ERROR_SEVERITY_MAP = _chunkNSV6ECYOjs.b; exports.GlobalNotificationProvider = _chunk3XZ3TEKQjs.d; exports.LoginComponent = _chunk5VOTRIDBjs.m; exports.POLICY_ACTIONS = _chunk5VOTRIDBjs.j; exports.PREFERRED_POLICY_ORDER = _chunk5VOTRIDBjs.k; exports.Policies = _chunk5VOTRIDBjs.l; exports.ProtectedRoute = U; exports.SessionDebugInfo = _chunk3XZ3TEKQjs.k; exports.SessionLoadingScreen = k; exports.SessionManager = _chunk3XZ3TEKQjs.b; exports.SessionProvider = _chunk3XZ3TEKQjs.i; exports.SessionStatus = _chunk5VOTRIDBjs.n; exports.TokenStorage = _chunk3XZ3TEKQjs.a; exports.TranslationService = _chunk5VOTRIDBjs.d; exports.TranslationsProvider = _chunk5VOTRIDBjs.f; exports.UserProfileDisplay = _chunk5VOTRIDBjs.i; exports.createErrorTranslator = _chunkNXTXGTU6js.n; exports.crudify = _crudifybrowser2.default; exports.crudifyAdmin = cr; exports.crudifyInitManager = _chunk3XZ3TEKQjs.o; exports.decodeJwtSafely = _chunkNXTXGTU6js.q; exports.extractSafeRedirectFromUrl = E; exports.getCookie = _chunkNXTXGTU6js.b; exports.getCriticalLanguages = _chunk5VOTRIDBjs.b; exports.getCriticalTranslations = _chunk5VOTRIDBjs.c; exports.getCurrentUserEmail = _chunkNXTXGTU6js.r; exports.getErrorMessage = _chunkNSV6ECYOjs.e; exports.handleCrudifyError = _chunkNSV6ECYOjs.g; exports.isTokenExpired = _chunkNXTXGTU6js.s; exports.logger = _chunkNXTXGTU6js.a; exports.parseApiError = _chunkNSV6ECYOjs.c; exports.parseJavaScriptError = _chunkNSV6ECYOjs.f; exports.parseTransactionError = _chunkNSV6ECYOjs.d; exports.secureLocalStorage = _chunkKQ2XC5PNjs.b; exports.secureSessionStorage = _chunkKQ2XC5PNjs.a; exports.translateError = _chunkNXTXGTU6js.m; exports.translateErrorCode = _chunkNXTXGTU6js.k; exports.translateErrorCodes = _chunkNXTXGTU6js.l; exports.translationService = _chunk5VOTRIDBjs.e; exports.useAuth = _chunkLVSNJ4OMjs.b; exports.useAutoGenerate = _chunk3XZ3TEKQjs.m; exports.useCrudify = _chunk3XZ3TEKQjs.h; exports.useCrudifyInitializer = nr; exports.useCrudifyWithNotifications = _chunkLVSNJ4OMjs.d; exports.useData = _chunkLVSNJ4OMjs.c; exports.useFileUpload = _chunk3XZ3TEKQjs.p; exports.useGlobalNotification = _chunk3XZ3TEKQjs.e; exports.useSession = _chunk3XZ3TEKQjs.c; exports.useSessionContext = _chunk3XZ3TEKQjs.j; exports.useTranslations = _chunk5VOTRIDBjs.g; exports.useUserData = _chunkLVSNJ4OMjs.a; exports.useUserProfile = _chunk3XZ3TEKQjs.l; exports.validateInternalRedirect = S;
6
+ `});function k({stage:e="loading",message:r}){let t=r||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment,{children:[_jsxruntime.jsx.call(void 0, We,{}),_jsxruntime.jsxs.call(void 0, "div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",width:"100vw",backgroundColor:"#f0f2f5",fontFamily:'"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',color:"#333",textAlign:"center",boxSizing:"border-box",padding:"20px",background:"#fff"},children:[_jsxruntime.jsx.call(void 0, "div",{style:qe}),_jsxruntime.jsx.call(void 0, "p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var $e=/^[a-zA-Z0-9\-_./\?=&%#]+$/,Ye=[/^https?:\/\//i,/^ftp:\/\//i,/^\/\//,/javascript:/i,/data:/i,/vbscript:/i,/about:/i,/\.\.\//,/\.\.\\/,/%2e%2e%2f/i,/%2e%2e%5c/i,/%2f%2f/i,/%5c%5c/i,/[\x00-\x1f\x7f-\x9f]/,/\\/],S= exports.validateInternalRedirect =(e,r="/")=>{if(!e||typeof e!="string")return r;let o=e.trim();if(!o)return r;if(!o.startsWith("/"))return _chunkNXTXGTU6js.a.warn("Open redirect blocked (relative path)",{path:e}),r;if(!$e.test(o))return _chunkNXTXGTU6js.a.warn("Open redirect blocked (invalid characters)",{path:e}),r;let t=o.toLowerCase();for(let a of Ye)if(a.test(t))return _chunkNXTXGTU6js.a.warn("Open redirect blocked (dangerous pattern)",{path:e}),r;let s=o.split("?")[0].split("/").filter(Boolean);if(s.length===0)return o;for(let a of s)if(a===".."||a.includes(":")||a.length>100)return _chunkNXTXGTU6js.a.warn("Open redirect blocked (suspicious path part)",{part:a}),r;return o},E= exports.extractSafeRedirectFromUrl =(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let s=decodeURIComponent(t);return S(s,r)}catch(o){return _chunkNXTXGTU6js.a.warn("Error parsing redirect parameter",o instanceof Error?{errorMessage:o.message}:{message:String(o)}),r}};function U({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:s,isInitialized:a,tokens:c,error:A}=_chunk3XZ3TEKQjs.j.call(void 0, ),l=_reactrouterdom.useLocation.call(void 0, );if(!a||s)return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:r||_jsxruntime.jsx.call(void 0, k,{stage:"validating-session"})});let u=t&&_optionalChain([c, 'optionalAccess', _2 => _2.accessToken])&&c.accessToken.length>0;if(A||!t||!u){c&&(!c.accessToken||c.accessToken.length===0)&&localStorage.removeItem("crudify_tokens");let x=l.pathname+l.search,C=S(x),R=encodeURIComponent(C);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:`${o}?redirect=${R}`,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}function O({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=_chunk3XZ3TEKQjs.j.call(void 0, ),t=_reactrouterdom.useLocation.call(void 0, );if(o){let s=new URLSearchParams(t.search),a=E(s,r);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:a,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}var G=_react.createContext.call(void 0, void 0),ir= exports.CrudifyInitializer =({config:e,children:r,fallback:o=null,onInitialized:t,onError:s})=>{let[a,c]=_react.useState.call(void 0, !1),[A,l]=_react.useState.call(void 0, !1),[u,x]=_react.useState.call(void 0, null),C=_react.useRef.call(void 0, !1),R=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{C.current||(_chunk3XZ3TEKQjs.o.registerHighPriorityInitializer(),C.current=!0),R.current||(R.current=!0,(async()=>{l(!0),x(null);try{let d=_chunkNXTXGTU6js.c.call(void 0, {publicApiKey:_optionalChain([e, 'optionalAccess', _3 => _3.publicApiKey]),env:_optionalChain([e, 'optionalAccess', _4 => _4.env]),enableDebug:_optionalChain([e, 'optionalAccess', _5 => _5.enableLogging])});if(!d.publicApiKey)throw new Error("Crudify configuration missing. Please provide publicApiKey via props or ensure cookies are set by Lambda.");let I=d.env||"prod";_chunkNXTXGTU6js.a.setEnvironment(I),await _chunk3XZ3TEKQjs.o.initialize({priority:"HIGH",publicApiKey:d.publicApiKey,env:d.env||"prod",enableLogging:_optionalChain([e, 'optionalAccess', _6 => _6.enableLogging]),requestedBy:"CrudifyInitializer"}),c(!0),l(!1),t&&t()}catch(d){let I=d instanceof Error?d:new Error(String(d));x(I),l(!1),s&&s(I)}})())},[_optionalChain([e, 'optionalAccess', _7 => _7.publicApiKey]),_optionalChain([e, 'optionalAccess', _8 => _8.env]),_optionalChain([e, 'optionalAccess', _9 => _9.enableLogging]),t,s]);let V={isInitialized:a,isInitializing:A,error:u};return A&&o?_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:o}):(u&&_chunkNXTXGTU6js.a.error("[CrudifyInitializer] Initialization failed",u),_jsxruntime.jsx.call(void 0, G.Provider,{value:V,children:r}))},nr= exports.useCrudifyInitializer =()=>{let e=_react.useContext.call(void 0, G);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};var _crudifyadmin = require('@nocios/crudify-admin'); var _crudifyadmin2 = _interopRequireDefault(_crudifyadmin);var K=!1,g=null,y=null;async function ar(){let r=await _chunk3XZ3TEKQjs.b.getInstance().getTokenInfo(),o=_optionalChain([r, 'optionalAccess', _10 => _10.apiEndpointAdmin]),t=_optionalChain([r, 'optionalAccess', _11 => _11.apiKeyEndpointAdmin]);return o&&t?{apiUrl:o,apiKey:t}:_chunk3XZ3TEKQjs.f.waitForCredentials()}async function pr(){if(!K)return g||(g=(async()=>{try{let e=_chunk3XZ3TEKQjs.b.getInstance(),{apiUrl:r,apiKey:o}=await ar();y=await _asyncOptionalChain([(await e.getTokenInfo()), 'optionalAccess', async _12 => _12.crudifyTokens, 'optionalAccess', async _13 => _13.accessToken])||null,_crudifyadmin2.default.init({url:r,apiKey:o,getAdditionalHeaders:()=>y?{Authorization:`Bearer ${y}`}:{}}),K=!0}catch(e){throw g=null,_chunkNXTXGTU6js.a.error("[crudifyAdminWrapper] Initialization failed",e instanceof Error?e:{message:String(e)}),e}})(),g)}async function n(e){try{await pr();let r=_chunk3XZ3TEKQjs.b.getInstance();y=await _asyncOptionalChain([(await r.getTokenInfo()), 'optionalAccess', async _14 => _14.crudifyTokens, 'optionalAccess', async _15 => _15.accessToken])||null;let t=await e(),s=t.errors&&(typeof t.errors=="string"&&t.errors.includes("401")||Array.isArray(t.errors)&&t.errors.some(a=>typeof a=="string"&&a.includes("401")));return!t.success&&s?await r.refreshTokens()?(y=await _asyncOptionalChain([(await r.getTokenInfo()), 'optionalAccess', async _16 => _16.crudifyTokens, 'optionalAccess', async _17 => _17.accessToken])||null,await e()):(_chunkNXTXGTU6js.a.error("[crudifyAdmin] Token refresh failed"),typeof window<"u"&&(window.location.href="/login"),t):t}catch(r){return _chunkNXTXGTU6js.a.error("[crudifyAdmin] Operation error",r instanceof Error?r:{message:String(r)}),{success:!1,errors:r instanceof Error?r.message:"Unknown error"}}}var cr={listModules:()=>n(()=>_crudifyadmin2.default.listModules()),getModule:e=>n(()=>_crudifyadmin2.default.getModule(e)),createModule:e=>n(()=>_crudifyadmin2.default.createModule(e)),editModule:(e,r)=>n(()=>_crudifyadmin2.default.editModule(e,r)),deleteModule:e=>n(()=>_crudifyadmin2.default.deleteModule(e)),activateModule:e=>n(()=>_crudifyadmin2.default.activateModule(e)),deactivateModule:e=>n(()=>_crudifyadmin2.default.deactivateModule(e)),getModuleVersions:e=>n(()=>_crudifyadmin2.default.getModuleVersions(e)),listActions:e=>n(()=>_crudifyadmin2.default.listActions(e)),getAction:e=>n(()=>_crudifyadmin2.default.getAction(e)),createAction:e=>n(()=>_crudifyadmin2.default.createAction(e)),editAction:(e,r)=>n(()=>_crudifyadmin2.default.editAction(e,r)),deleteAction:e=>n(()=>_crudifyadmin2.default.deleteAction(e)),activateAction:e=>n(()=>_crudifyadmin2.default.activateAction(e)),deactivateAction:e=>n(()=>_crudifyadmin2.default.deactivateAction(e)),getActionVersions:e=>n(()=>_crudifyadmin2.default.getActionVersions(e)),getActionsByProfile:e=>n(()=>_crudifyadmin2.default.getActionsByProfile(e)),updateActionsProfiles:e=>n(()=>_crudifyadmin2.default.updateActionsProfiles(e))};exports.AuthRoute = O; exports.CRITICAL_TRANSLATIONS = _chunk5VOTRIDBjs.a; exports.CrudiaAutoGenerate = _chunk5VOTRIDBjs.o; exports.CrudiaFileField = _chunk5VOTRIDBjs.p; exports.CrudiaMarkdownField = _chunk5VOTRIDBjs.q; exports.CrudifyInitializationManager = _chunk3XZ3TEKQjs.n; exports.CrudifyInitializer = ir; exports.CrudifyLogin = _chunk5VOTRIDBjs.h; exports.CrudifyProvider = _chunk3XZ3TEKQjs.g; exports.CrudifyThemeProvider = _e; exports.ERROR_CODES = _chunkNSV6ECYOjs.a; exports.ERROR_SEVERITY_MAP = _chunkNSV6ECYOjs.b; exports.GlobalNotificationProvider = _chunk3XZ3TEKQjs.d; exports.LoginComponent = _chunk5VOTRIDBjs.m; exports.POLICY_ACTIONS = _chunk5VOTRIDBjs.j; exports.PREFERRED_POLICY_ORDER = _chunk5VOTRIDBjs.k; exports.Policies = _chunk5VOTRIDBjs.l; exports.ProtectedRoute = U; exports.SessionDebugInfo = _chunk3XZ3TEKQjs.k; exports.SessionLoadingScreen = k; exports.SessionManager = _chunk3XZ3TEKQjs.b; exports.SessionProvider = _chunk3XZ3TEKQjs.i; exports.SessionStatus = _chunk5VOTRIDBjs.n; exports.TokenStorage = _chunk3XZ3TEKQjs.a; exports.TranslationService = _chunk5VOTRIDBjs.d; exports.TranslationsProvider = _chunk5VOTRIDBjs.f; exports.UserProfileDisplay = _chunk5VOTRIDBjs.i; exports.createErrorTranslator = _chunkNXTXGTU6js.n; exports.crudify = _crudifybrowser2.default; exports.crudifyAdmin = cr; exports.crudifyInitManager = _chunk3XZ3TEKQjs.o; exports.decodeJwtSafely = _chunkNXTXGTU6js.q; exports.extractSafeRedirectFromUrl = E; exports.getCookie = _chunkNXTXGTU6js.b; exports.getCriticalLanguages = _chunk5VOTRIDBjs.b; exports.getCriticalTranslations = _chunk5VOTRIDBjs.c; exports.getCurrentUserEmail = _chunkNXTXGTU6js.r; exports.getErrorMessage = _chunkNSV6ECYOjs.e; exports.handleCrudifyError = _chunkNSV6ECYOjs.g; exports.isTokenExpired = _chunkNXTXGTU6js.s; exports.logger = _chunkNXTXGTU6js.a; exports.parseApiError = _chunkNSV6ECYOjs.c; exports.parseJavaScriptError = _chunkNSV6ECYOjs.f; exports.parseTransactionError = _chunkNSV6ECYOjs.d; exports.secureLocalStorage = _chunkKQ2XC5PNjs.b; exports.secureSessionStorage = _chunkKQ2XC5PNjs.a; exports.translateError = _chunkNXTXGTU6js.m; exports.translateErrorCode = _chunkNXTXGTU6js.k; exports.translateErrorCodes = _chunkNXTXGTU6js.l; exports.translationService = _chunk5VOTRIDBjs.e; exports.useAuth = _chunkLVSNJ4OMjs.b; exports.useAutoGenerate = _chunk3XZ3TEKQjs.m; exports.useCrudify = _chunk3XZ3TEKQjs.h; exports.useCrudifyInitializer = nr; exports.useCrudifyWithNotifications = _chunkLVSNJ4OMjs.d; exports.useData = _chunkLVSNJ4OMjs.c; exports.useFileUpload = _chunk3XZ3TEKQjs.p; exports.useGlobalNotification = _chunk3XZ3TEKQjs.e; exports.useSession = _chunk3XZ3TEKQjs.c; exports.useSessionContext = _chunk3XZ3TEKQjs.j; exports.useTranslations = _chunk5VOTRIDBjs.g; exports.useUserData = _chunkLVSNJ4OMjs.a; exports.useUserProfile = _chunk3XZ3TEKQjs.l; exports.validateInternalRedirect = S;
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import{a as _,b as B,c as H,d as q,e as W,f as J,g as $,h as Ae,i as Ce,j as Pe,k as Re,l as Ie,m as he,n as Se,o as Te,p as Me,q as ze}from"./chunk-NSA6YDHY.mjs";import{a as we,b as Le,c as be,d as Oe}from"./chunk-QPTL5FLE.mjs";import{a as Y,b as f,c as ee,d as ie,e as ne,f as w,g as se,h as ae,i as pe,j as m,k as ce,l as xe,m as ve,n as ke,o as I,p as Ee}from"./chunk-PARX2RMU.mjs";import{a as Ue,b as Fe}from"./chunk-OGAGYHG4.mjs";import{a as le,b as de,c as ue,d as fe,e as me,f as ge,g as ye}from"./chunk-JAPL7EZJ.mjs";import{a as p,b as T,c as z,k as Z,l as Q,m as X,n as j,q as re,r as oe,s as te}from"./chunk-6BQGRZYB.mjs";import{default as Qr}from"@nocios/crudify-browser";export*from"@nocios/crudify-browser";import{useMemo as Ne}from"react";import{ThemeProvider as De,createTheme as Ge,CssBaseline as Ke}from"@mui/material";import{jsx as Be,jsxs as He}from"react/jsx-runtime";var Ve=(e={})=>{try{let r=T("theme");if(r){let o=JSON.parse(decodeURIComponent(r));return{...e,...o}}}catch(r){p.warn("Error parsing theme from cookie",r instanceof Error?{errorMessage:r.message}:{message:String(r)})}return e};function _e({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=Ne(()=>{let s=Ve(r);return Ge(s)},[r]);return He(De,{theme:t,children:[!o&&Be(Ke,{}),e]})}import{Navigate as Ze,useLocation as Qe}from"react-router-dom";import{Fragment as Je,jsx as h,jsxs as L}from"react/jsx-runtime";var qe={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},We=()=>h("style",{children:`
1
+ import{a as _,b as B,c as H,d as q,e as W,f as J,g as $,h as Ae,i as Ce,j as Re,k as Ie,l as Pe,m as he,n as Se,o as Te,p as Me,q as ze}from"./chunk-NSA6YDHY.mjs";import{a as we,b as Le,c as be,d as Oe}from"./chunk-QPTL5FLE.mjs";import{a as Y,b as f,c as ee,d as ie,e as ne,f as w,g as se,h as ae,i as pe,j as m,k as ce,l as xe,m as ve,n as ke,o as P,p as Ee}from"./chunk-PARX2RMU.mjs";import{a as Ue,b as Fe}from"./chunk-OGAGYHG4.mjs";import{a as de,b as le,c as ue,d as fe,e as me,f as ge,g as ye}from"./chunk-JAPL7EZJ.mjs";import{a as p,b as T,c as z,k as Z,l as Q,m as X,n as j,q as re,r as oe,s as te}from"./chunk-6BQGRZYB.mjs";import{default as Qr}from"@nocios/crudify-browser";export*from"@nocios/crudify-browser";import{useMemo as Ne}from"react";import{ThemeProvider as De,createTheme as Ge,CssBaseline as Ke}from"@mui/material";import{jsx as Be,jsxs as He}from"react/jsx-runtime";var Ve=(e={})=>{try{let r=T("theme");if(r){let o=JSON.parse(decodeURIComponent(r));return{...e,...o}}}catch(r){p.warn("Error parsing theme from cookie",r instanceof Error?{errorMessage:r.message}:{message:String(r)})}return e};function _e({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=Ne(()=>{let s=Ve(r);return Ge(s)},[r]);return He(De,{theme:t,children:[!o&&Be(Ke,{}),e]})}import{Navigate as Ze,useLocation as Qe}from"react-router-dom";import{Fragment as Je,jsx as h,jsxs as L}from"react/jsx-runtime";var qe={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},We=()=>h("style",{children:`
2
2
  @keyframes spin {
3
3
  0% { transform: rotate(0deg); }
4
4
  100% { transform: rotate(360deg); }
5
5
  }
6
- `});function k({stage:e="loading",message:r}){let t=r||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return L(Je,{children:[h(We,{}),L("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",width:"100vw",backgroundColor:"#f0f2f5",fontFamily:'"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',color:"#333",textAlign:"center",boxSizing:"border-box",padding:"20px",background:"#fff"},children:[h("div",{style:qe}),h("p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var $e=/^[a-zA-Z0-9\-_./\?=&%#]+$/,Ye=[/^https?:\/\//i,/^ftp:\/\//i,/^\/\//,/javascript:/i,/data:/i,/vbscript:/i,/about:/i,/\.\.\//,/\.\.\\/,/%2e%2e%2f/i,/%2e%2e%5c/i,/%2f%2f/i,/%5c%5c/i,/[\x00-\x1f\x7f-\x9f]/,/\\/],S=(e,r="/")=>{if(!e||typeof e!="string")return r;let o=e.trim();if(!o)return r;if(!o.startsWith("/"))return p.warn("Open redirect blocked (relative path)",{path:e}),r;if(!$e.test(o))return p.warn("Open redirect blocked (invalid characters)",{path:e}),r;let t=o.toLowerCase();for(let a of Ye)if(a.test(t))return p.warn("Open redirect blocked (dangerous pattern)",{path:e}),r;let s=o.split("?")[0].split("/").filter(Boolean);if(s.length===0)return o;for(let a of s)if(a===".."||a.includes(":")||a.length>100)return p.warn("Open redirect blocked (suspicious path part)",{part:a}),r;return o},E=(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let s=decodeURIComponent(t);return S(s,r)}catch(o){return p.warn("Error parsing redirect parameter",o instanceof Error?{errorMessage:o.message}:{message:String(o)}),r}};import{Fragment as b,jsx as v}from"react/jsx-runtime";function U({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:s,isInitialized:a,tokens:c,error:A}=m(),d=Qe();if(!a||s)return v(b,{children:r||v(k,{stage:"validating-session"})});let u=t&&c?.accessToken&&c.accessToken.length>0;if(A||!t||!u){c&&(!c.accessToken||c.accessToken.length===0)&&localStorage.removeItem("crudify_tokens");let x=d.pathname+d.search,C=S(x),P=encodeURIComponent(C);return v(Ze,{to:`${o}?redirect=${P}`,replace:!0})}return v(b,{children:e})}import{Navigate as Xe,useLocation as je}from"react-router-dom";import{Fragment as er,jsx as F}from"react/jsx-runtime";function O({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=m(),t=je();if(o){let s=new URLSearchParams(t.search),a=E(s,r);return F(Xe,{to:a,replace:!0})}return F(er,{children:e})}import{createContext as rr,useContext as or,useEffect as tr,useRef as N,useState as M}from"react";import{Fragment as sr,jsx as D}from"react/jsx-runtime";var G=rr(void 0),ir=({config:e,children:r,fallback:o=null,onInitialized:t,onError:s})=>{let[a,c]=M(!1),[A,d]=M(!1),[u,x]=M(null),C=N(!1),P=N(!1);tr(()=>{C.current||(I.registerHighPriorityInitializer(),C.current=!0),P.current||(P.current=!0,(async()=>{d(!0),x(null);try{let l=z({publicApiKey:e?.publicApiKey,env:e?.env,enableDebug:e?.enableLogging});if(!l.publicApiKey)throw new Error("Crudify configuration missing. Please provide publicApiKey via props or ensure cookies are set by Lambda.");let R=l.env||"prod";p.setEnvironment(R),await I.initialize({priority:"HIGH",publicApiKey:l.publicApiKey,env:l.env||"prod",enableLogging:e?.enableLogging,requestedBy:"CrudifyInitializer"}),c(!0),d(!1),t&&t()}catch(l){let R=l instanceof Error?l:new Error(String(l));x(R),d(!1),s&&s(R)}})())},[e?.publicApiKey,e?.env,e?.enableLogging,t,s]);let V={isInitialized:a,isInitializing:A,error:u};return A&&o?D(sr,{children:o}):(u&&p.error("[CrudifyInitializer] Initialization failed",u),D(G.Provider,{value:V,children:r}))},nr=()=>{let e=or(G);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};import i from"@nocios/crudify-admin";var K=!1,g=null,y=null;async function ar(){let r=await f.getInstance().getTokenInfo(),o=r?.apiEndpointAdmin,t=r?.apiKeyEndpointAdmin;return o&&t?{apiUrl:o,apiKey:t}:w.waitForCredentials()}async function pr(){if(!K)return g||(g=(async()=>{try{let e=f.getInstance(),{apiUrl:r,apiKey:o}=await ar();y=(await e.getTokenInfo())?.crudifyTokens?.accessToken||null,i.init({url:r,apiKey:o,getAdditionalHeaders:()=>y?{Authorization:`Bearer ${y}`}:{}}),K=!0}catch(e){throw g=null,p.error("[crudifyAdminWrapper] Initialization failed",e instanceof Error?e:{message:String(e)}),e}})(),g)}async function n(e){try{await pr();let r=f.getInstance();y=(await r.getTokenInfo())?.crudifyTokens?.accessToken||null;let t=await e(),s=t.errors&&(typeof t.errors=="string"&&t.errors.includes("401")||Array.isArray(t.errors)&&t.errors.some(a=>typeof a=="string"&&a.includes("401")));return!t.success&&s?await r.refreshTokens()?(y=(await r.getTokenInfo())?.crudifyTokens?.accessToken||null,await e()):(p.error("[crudifyAdmin] Token refresh failed"),typeof window<"u"&&(window.location.href="/login"),t):t}catch(r){return p.error("[crudifyAdmin] Operation error",r instanceof Error?r:{message:String(r)}),{success:!1,errors:r instanceof Error?r.message:"Unknown error"}}}var cr={listModules:()=>n(()=>i.listModules()),getModule:e=>n(()=>i.getModule(e)),createModule:e=>n(()=>i.createModule(e)),editModule:(e,r)=>n(()=>i.editModule(e,r)),deleteModule:e=>n(()=>i.deleteModule(e)),activateModule:e=>n(()=>i.activateModule(e)),deactivateModule:e=>n(()=>i.deactivateModule(e)),getModuleVersions:e=>n(()=>i.getModuleVersions(e)),listActions:e=>n(()=>i.listActions(e)),getAction:e=>n(()=>i.getAction(e)),createAction:e=>n(()=>i.createAction(e)),editAction:(e,r)=>n(()=>i.editAction(e,r)),deleteAction:e=>n(()=>i.deleteAction(e)),activateAction:e=>n(()=>i.activateAction(e)),deactivateAction:e=>n(()=>i.deactivateAction(e)),getActionVersions:e=>n(()=>i.getActionVersions(e)),getActionsByProfile:e=>n(()=>i.getActionsByProfile(e)),updateActionsProfiles:e=>n(()=>i.updateActionsProfiles(e))};export{O as AuthRoute,_ as CRITICAL_TRANSLATIONS,Te as CrudiaAutoGenerate,Me as CrudiaFileField,ze as CrudiaMarkdownField,ke as CrudifyInitializationManager,ir as CrudifyInitializer,Ae as CrudifyLogin,se as CrudifyProvider,_e as CrudifyThemeProvider,le as ERROR_CODES,de as ERROR_SEVERITY_MAP,ie as GlobalNotificationProvider,he as LoginComponent,Pe as POLICY_ACTIONS,Re as PREFERRED_POLICY_ORDER,Ie as Policies,U as ProtectedRoute,ce as SessionDebugInfo,k as SessionLoadingScreen,f as SessionManager,pe as SessionProvider,Se as SessionStatus,Y as TokenStorage,q as TranslationService,J as TranslationsProvider,Ce as UserProfileDisplay,j as createErrorTranslator,Qr as crudify,cr as crudifyAdmin,I as crudifyInitManager,re as decodeJwtSafely,E as extractSafeRedirectFromUrl,T as getCookie,B as getCriticalLanguages,H as getCriticalTranslations,oe as getCurrentUserEmail,me as getErrorMessage,ye as handleCrudifyError,te as isTokenExpired,p as logger,ue as parseApiError,ge as parseJavaScriptError,fe as parseTransactionError,Fe as secureLocalStorage,Ue as secureSessionStorage,X as translateError,Z as translateErrorCode,Q as translateErrorCodes,W as translationService,Le as useAuth,ve as useAutoGenerate,ae as useCrudify,nr as useCrudifyInitializer,Oe as useCrudifyWithNotifications,be as useData,Ee as useFileUpload,ne as useGlobalNotification,ee as useSession,m as useSessionContext,$ as useTranslations,we as useUserData,xe as useUserProfile,S as validateInternalRedirect};
6
+ `});function k({stage:e="loading",message:r}){let t=r||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return L(Je,{children:[h(We,{}),L("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",height:"100vh",width:"100vw",backgroundColor:"#f0f2f5",fontFamily:'"Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif',color:"#333",textAlign:"center",boxSizing:"border-box",padding:"20px",background:"#fff"},children:[h("div",{style:qe}),h("p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var $e=/^[a-zA-Z0-9\-_./\?=&%#]+$/,Ye=[/^https?:\/\//i,/^ftp:\/\//i,/^\/\//,/javascript:/i,/data:/i,/vbscript:/i,/about:/i,/\.\.\//,/\.\.\\/,/%2e%2e%2f/i,/%2e%2e%5c/i,/%2f%2f/i,/%5c%5c/i,/[\x00-\x1f\x7f-\x9f]/,/\\/],S=(e,r="/")=>{if(!e||typeof e!="string")return r;let o=e.trim();if(!o)return r;if(!o.startsWith("/"))return p.warn("Open redirect blocked (relative path)",{path:e}),r;if(!$e.test(o))return p.warn("Open redirect blocked (invalid characters)",{path:e}),r;let t=o.toLowerCase();for(let a of Ye)if(a.test(t))return p.warn("Open redirect blocked (dangerous pattern)",{path:e}),r;let s=o.split("?")[0].split("/").filter(Boolean);if(s.length===0)return o;for(let a of s)if(a===".."||a.includes(":")||a.length>100)return p.warn("Open redirect blocked (suspicious path part)",{part:a}),r;return o},E=(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let s=decodeURIComponent(t);return S(s,r)}catch(o){return p.warn("Error parsing redirect parameter",o instanceof Error?{errorMessage:o.message}:{message:String(o)}),r}};import{Fragment as b,jsx as v}from"react/jsx-runtime";function U({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:s,isInitialized:a,tokens:c,error:A}=m(),l=Qe();if(!a||s)return v(b,{children:r||v(k,{stage:"validating-session"})});let u=t&&c?.accessToken&&c.accessToken.length>0;if(A||!t||!u){c&&(!c.accessToken||c.accessToken.length===0)&&localStorage.removeItem("crudify_tokens");let x=l.pathname+l.search,C=S(x),R=encodeURIComponent(C);return v(Ze,{to:`${o}?redirect=${R}`,replace:!0})}return v(b,{children:e})}import{Navigate as Xe,useLocation as je}from"react-router-dom";import{Fragment as er,jsx as F}from"react/jsx-runtime";function O({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=m(),t=je();if(o){let s=new URLSearchParams(t.search),a=E(s,r);return F(Xe,{to:a,replace:!0})}return F(er,{children:e})}import{createContext as rr,useContext as or,useEffect as tr,useRef as N,useState as M}from"react";import{Fragment as sr,jsx as D}from"react/jsx-runtime";var G=rr(void 0),ir=({config:e,children:r,fallback:o=null,onInitialized:t,onError:s})=>{let[a,c]=M(!1),[A,l]=M(!1),[u,x]=M(null),C=N(!1),R=N(!1);tr(()=>{C.current||(P.registerHighPriorityInitializer(),C.current=!0),R.current||(R.current=!0,(async()=>{l(!0),x(null);try{let d=z({publicApiKey:e?.publicApiKey,env:e?.env,enableDebug:e?.enableLogging});if(!d.publicApiKey)throw new Error("Crudify configuration missing. Please provide publicApiKey via props or ensure cookies are set by Lambda.");let I=d.env||"prod";p.setEnvironment(I),await P.initialize({priority:"HIGH",publicApiKey:d.publicApiKey,env:d.env||"prod",enableLogging:e?.enableLogging,requestedBy:"CrudifyInitializer"}),c(!0),l(!1),t&&t()}catch(d){let I=d instanceof Error?d:new Error(String(d));x(I),l(!1),s&&s(I)}})())},[e?.publicApiKey,e?.env,e?.enableLogging,t,s]);let V={isInitialized:a,isInitializing:A,error:u};return A&&o?D(sr,{children:o}):(u&&p.error("[CrudifyInitializer] Initialization failed",u),D(G.Provider,{value:V,children:r}))},nr=()=>{let e=or(G);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};import i from"@nocios/crudify-admin";var K=!1,g=null,y=null;async function ar(){let r=await f.getInstance().getTokenInfo(),o=r?.apiEndpointAdmin,t=r?.apiKeyEndpointAdmin;return o&&t?{apiUrl:o,apiKey:t}:w.waitForCredentials()}async function pr(){if(!K)return g||(g=(async()=>{try{let e=f.getInstance(),{apiUrl:r,apiKey:o}=await ar();y=(await e.getTokenInfo())?.crudifyTokens?.accessToken||null,i.init({url:r,apiKey:o,getAdditionalHeaders:()=>y?{Authorization:`Bearer ${y}`}:{}}),K=!0}catch(e){throw g=null,p.error("[crudifyAdminWrapper] Initialization failed",e instanceof Error?e:{message:String(e)}),e}})(),g)}async function n(e){try{await pr();let r=f.getInstance();y=(await r.getTokenInfo())?.crudifyTokens?.accessToken||null;let t=await e(),s=t.errors&&(typeof t.errors=="string"&&t.errors.includes("401")||Array.isArray(t.errors)&&t.errors.some(a=>typeof a=="string"&&a.includes("401")));return!t.success&&s?await r.refreshTokens()?(y=(await r.getTokenInfo())?.crudifyTokens?.accessToken||null,await e()):(p.error("[crudifyAdmin] Token refresh failed"),typeof window<"u"&&(window.location.href="/login"),t):t}catch(r){return p.error("[crudifyAdmin] Operation error",r instanceof Error?r:{message:String(r)}),{success:!1,errors:r instanceof Error?r.message:"Unknown error"}}}var cr={listModules:()=>n(()=>i.listModules()),getModule:e=>n(()=>i.getModule(e)),createModule:e=>n(()=>i.createModule(e)),editModule:(e,r)=>n(()=>i.editModule(e,r)),deleteModule:e=>n(()=>i.deleteModule(e)),activateModule:e=>n(()=>i.activateModule(e)),deactivateModule:e=>n(()=>i.deactivateModule(e)),getModuleVersions:e=>n(()=>i.getModuleVersions(e)),listActions:e=>n(()=>i.listActions(e)),getAction:e=>n(()=>i.getAction(e)),createAction:e=>n(()=>i.createAction(e)),editAction:(e,r)=>n(()=>i.editAction(e,r)),deleteAction:e=>n(()=>i.deleteAction(e)),activateAction:e=>n(()=>i.activateAction(e)),deactivateAction:e=>n(()=>i.deactivateAction(e)),getActionVersions:e=>n(()=>i.getActionVersions(e)),getActionsByProfile:e=>n(()=>i.getActionsByProfile(e)),updateActionsProfiles:e=>n(()=>i.updateActionsProfiles(e))};export{O as AuthRoute,_ as CRITICAL_TRANSLATIONS,Te as CrudiaAutoGenerate,Me as CrudiaFileField,ze as CrudiaMarkdownField,ke as CrudifyInitializationManager,ir as CrudifyInitializer,Ae as CrudifyLogin,se as CrudifyProvider,_e as CrudifyThemeProvider,de as ERROR_CODES,le as ERROR_SEVERITY_MAP,ie as GlobalNotificationProvider,he as LoginComponent,Re as POLICY_ACTIONS,Ie as PREFERRED_POLICY_ORDER,Pe as Policies,U as ProtectedRoute,ce as SessionDebugInfo,k as SessionLoadingScreen,f as SessionManager,pe as SessionProvider,Se as SessionStatus,Y as TokenStorage,q as TranslationService,J as TranslationsProvider,Ce as UserProfileDisplay,j as createErrorTranslator,Qr as crudify,cr as crudifyAdmin,P as crudifyInitManager,re as decodeJwtSafely,E as extractSafeRedirectFromUrl,T as getCookie,B as getCriticalLanguages,H as getCriticalTranslations,oe as getCurrentUserEmail,me as getErrorMessage,ye as handleCrudifyError,te as isTokenExpired,p as logger,ue as parseApiError,ge as parseJavaScriptError,fe as parseTransactionError,Fe as secureLocalStorage,Ue as secureSessionStorage,X as translateError,Z as translateErrorCode,Q as translateErrorCodes,W as translationService,Le as useAuth,ve as useAutoGenerate,ae as useCrudify,nr as useCrudifyInitializer,Oe as useCrudifyWithNotifications,be as useData,Ee as useFileUpload,ne as useGlobalNotification,ee as useSession,m as useSessionContext,$ as useTranslations,we as useUserData,xe as useUserProfile,S as validateInternalRedirect};
package/dist/utils.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- export { E as ERROR_CODES, j as ERROR_SEVERITY_MAP, n as ErrorCode, o as ErrorSeverity, q as ErrorTranslationConfig, P as ParsedError, m as createErrorTranslator, d as decodeJwtSafely, a as getCookie, g as getCurrentUserEmail, f as getErrorMessage, h as handleCrudifyError, i as isTokenExpired, p as parseApiError, e as parseJavaScriptError, c as parseTransactionError, b as secureLocalStorage, s as secureSessionStorage, l as translateError, t as translateErrorCode, k as translateErrorCodes } from './errorTranslation-DTUst6nq.mjs';
2
- import './api-slyZ8Gxc.mjs';
1
+ export { E as ERROR_CODES, j as ERROR_SEVERITY_MAP, n as ErrorCode, o as ErrorSeverity, q as ErrorTranslationConfig, P as ParsedError, m as createErrorTranslator, d as decodeJwtSafely, a as getCookie, g as getCurrentUserEmail, f as getErrorMessage, h as handleCrudifyError, i as isTokenExpired, p as parseApiError, e as parseJavaScriptError, c as parseTransactionError, b as secureLocalStorage, s as secureSessionStorage, l as translateError, t as translateErrorCode, k as translateErrorCodes } from './errorTranslation-qwwQTvCO.mjs';
2
+ import './api-B4uXiHF0.mjs';
3
3
 
4
4
  /**
5
5
  * Sistema centralizado de resolución de configuración para npm-crudify-ui
package/dist/utils.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- export { E as ERROR_CODES, j as ERROR_SEVERITY_MAP, n as ErrorCode, o as ErrorSeverity, q as ErrorTranslationConfig, P as ParsedError, m as createErrorTranslator, d as decodeJwtSafely, a as getCookie, g as getCurrentUserEmail, f as getErrorMessage, h as handleCrudifyError, i as isTokenExpired, p as parseApiError, e as parseJavaScriptError, c as parseTransactionError, b as secureLocalStorage, s as secureSessionStorage, l as translateError, t as translateErrorCode, k as translateErrorCodes } from './errorTranslation-BOha05J6.js';
2
- import './api-slyZ8Gxc.js';
1
+ export { E as ERROR_CODES, j as ERROR_SEVERITY_MAP, n as ErrorCode, o as ErrorSeverity, q as ErrorTranslationConfig, P as ParsedError, m as createErrorTranslator, d as decodeJwtSafely, a as getCookie, g as getCurrentUserEmail, f as getErrorMessage, h as handleCrudifyError, i as isTokenExpired, p as parseApiError, e as parseJavaScriptError, c as parseTransactionError, b as secureLocalStorage, s as secureSessionStorage, l as translateError, t as translateErrorCode, k as translateErrorCodes } from './errorTranslation-DGdrMidg.js';
2
+ import './api-B4uXiHF0.js';
3
3
 
4
4
  /**
5
5
  * Sistema centralizado de resolución de configuración para npm-crudify-ui
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocios/crudify-ui",
3
- "version": "5.0.1",
3
+ "version": "5.0.2",
4
4
  "engines": {
5
5
  "node": ">=24.12.0"
6
6
  },