@nocios/crudify-ui 5.0.20 → 5.0.26

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkOK5STXOAjs = require('./chunk-OK5STXOA.js');var _chunkYWIPJYNHjs = require('./chunk-YWIPJYNH.js');require('./chunk-NSV6ECYO.js');require('./chunk-MFYHD6S5.js');var _react = require('react');var _jsxruntime = require('react/jsx-runtime');function z({showBelowMinutes:f=5,position:m="bottom-right",colorNormal:c="#ed6c02",colorCritical:x="#d32f2f",style:u,className:g}={}){let{isAuthenticated:o,tokens:t}=_chunkYWIPJYNHjs.c.call(void 0, ),[i,y]=_react.useState.call(void 0, 0),[h,C]=_react.useState.call(void 0, 100);if(_react.useEffect.call(void 0, ()=>{if(!o||!t)return;let v=setInterval(()=>{let P=Date.now(),p=t.expiresAt-P,w=900*1e3;y(Math.max(0,p)),C(Math.max(0,p/w*100))},1e3);return()=>clearInterval(v)},[o,t]),!o||i<=0)return null;let e=Math.floor(i/6e4),S=Math.floor(i%6e4/1e3);if(e>=f)return null;let s=e<2,a=s?x:c,b={"top-left":{top:"16px",left:"16px"},"top-right":{top:"16px",right:"16px"},"bottom-left":{bottom:"16px",left:"16px"},"bottom-right":{bottom:"16px",right:"16px"}}[m];return _jsxruntime.jsxs.call(void 0, "div",{className:g,style:{position:"fixed",...b,padding:"12px 16px",backgroundColor:"white",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",minWidth:"200px",zIndex:9999,fontFamily:"system-ui, -apple-system, sans-serif",...u},children:[_jsxruntime.jsxs.call(void 0, "div",{style:{marginBottom:"8px"},children:[_jsxruntime.jsx.call(void 0, "div",{style:{fontSize:"12px",fontWeight:600,color:a,marginBottom:"4px"},children:s?"\u26A0\uFE0F Sesi\xF3n expirando":"\u23F0 Sesi\xF3n por expirar"}),_jsxruntime.jsxs.call(void 0, "div",{style:{fontSize:"14px",color:"#333",fontWeight:500},children:[e,":",S.toString().padStart(2,"0")]})]}),_jsxruntime.jsx.call(void 0, "div",{style:{width:"100%",height:"6px",backgroundColor:"#e0e0e0",borderRadius:"3px",overflow:"hidden"},children:_jsxruntime.jsx.call(void 0, "div",{style:{width:`${h}%`,height:"100%",backgroundColor:a,transition:"width 1s linear"}})})]})}exports.CrudiaAutoGenerate = _chunkOK5STXOAjs.o; exports.CrudiaFileField = _chunkOK5STXOAjs.p; exports.CrudiaMarkdownField = _chunkOK5STXOAjs.q; exports.CrudifyLogin = _chunkOK5STXOAjs.h; exports.GlobalNotificationProvider = _chunkYWIPJYNHjs.d; exports.LoginComponent = _chunkOK5STXOAjs.m; exports.Policies = _chunkOK5STXOAjs.l; exports.SessionStatus = _chunkOK5STXOAjs.n; exports.SessionTimeIndicator = z; exports.UserProfileDisplay = _chunkOK5STXOAjs.i; exports.useGlobalNotification = _chunkYWIPJYNHjs.e;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunk4R472VF6js = require('./chunk-4R472VF6.js');var _chunk4AEUOTN2js = require('./chunk-4AEUOTN2.js');require('./chunk-NSV6ECYO.js');require('./chunk-MFYHD6S5.js');var _react = require('react');var _jsxruntime = require('react/jsx-runtime');function z({showBelowMinutes:f=5,position:m="bottom-right",colorNormal:c="#ed6c02",colorCritical:x="#d32f2f",style:u,className:g}={}){let{isAuthenticated:o,tokens:t}=_chunk4AEUOTN2js.c.call(void 0, ),[i,y]=_react.useState.call(void 0, 0),[h,C]=_react.useState.call(void 0, 100);if(_react.useEffect.call(void 0, ()=>{if(!o||!t)return;let v=setInterval(()=>{let P=Date.now(),p=t.expiresAt-P,w=900*1e3;y(Math.max(0,p)),C(Math.max(0,p/w*100))},1e3);return()=>clearInterval(v)},[o,t]),!o||i<=0)return null;let e=Math.floor(i/6e4),S=Math.floor(i%6e4/1e3);if(e>=f)return null;let s=e<2,a=s?x:c,b={"top-left":{top:"16px",left:"16px"},"top-right":{top:"16px",right:"16px"},"bottom-left":{bottom:"16px",left:"16px"},"bottom-right":{bottom:"16px",right:"16px"}}[m];return _jsxruntime.jsxs.call(void 0, "div",{className:g,style:{position:"fixed",...b,padding:"12px 16px",backgroundColor:"white",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",minWidth:"200px",zIndex:9999,fontFamily:"system-ui, -apple-system, sans-serif",...u},children:[_jsxruntime.jsxs.call(void 0, "div",{style:{marginBottom:"8px"},children:[_jsxruntime.jsx.call(void 0, "div",{style:{fontSize:"12px",fontWeight:600,color:a,marginBottom:"4px"},children:s?"\u26A0\uFE0F Sesi\xF3n expirando":"\u23F0 Sesi\xF3n por expirar"}),_jsxruntime.jsxs.call(void 0, "div",{style:{fontSize:"14px",color:"#333",fontWeight:500},children:[e,":",S.toString().padStart(2,"0")]})]}),_jsxruntime.jsx.call(void 0, "div",{style:{width:"100%",height:"6px",backgroundColor:"#e0e0e0",borderRadius:"3px",overflow:"hidden"},children:_jsxruntime.jsx.call(void 0, "div",{style:{width:`${h}%`,height:"100%",backgroundColor:a,transition:"width 1s linear"}})})]})}exports.CrudiaAutoGenerate = _chunk4R472VF6js.o; exports.CrudiaFileField = _chunk4R472VF6js.p; exports.CrudiaMarkdownField = _chunk4R472VF6js.q; exports.CrudifyLogin = _chunk4R472VF6js.h; exports.GlobalNotificationProvider = _chunk4AEUOTN2js.d; exports.LoginComponent = _chunk4R472VF6js.m; exports.Policies = _chunk4R472VF6js.l; exports.SessionStatus = _chunk4R472VF6js.n; exports.SessionTimeIndicator = z; exports.UserProfileDisplay = _chunk4R472VF6js.i; exports.useGlobalNotification = _chunk4AEUOTN2js.e;
@@ -1 +1 @@
1
- import{h as N,i as T,l as M,m as k,n as G,o as L,p as A,q as R}from"./chunk-YQROLB5L.mjs";import{c as d,d as F,e as I}from"./chunk-SNBJN4HI.mjs";import"./chunk-JAPL7EZJ.mjs";import"./chunk-MGJZTOEM.mjs";import{useEffect as B,useState as l}from"react";import{jsx as r,jsxs as n}from"react/jsx-runtime";function z({showBelowMinutes:f=5,position:m="bottom-right",colorNormal:c="#ed6c02",colorCritical:x="#d32f2f",style:u,className:g}={}){let{isAuthenticated:o,tokens:t}=d(),[i,y]=l(0),[h,C]=l(100);if(B(()=>{if(!o||!t)return;let v=setInterval(()=>{let P=Date.now(),p=t.expiresAt-P,w=900*1e3;y(Math.max(0,p)),C(Math.max(0,p/w*100))},1e3);return()=>clearInterval(v)},[o,t]),!o||i<=0)return null;let e=Math.floor(i/6e4),S=Math.floor(i%6e4/1e3);if(e>=f)return null;let s=e<2,a=s?x:c,b={"top-left":{top:"16px",left:"16px"},"top-right":{top:"16px",right:"16px"},"bottom-left":{bottom:"16px",left:"16px"},"bottom-right":{bottom:"16px",right:"16px"}}[m];return n("div",{className:g,style:{position:"fixed",...b,padding:"12px 16px",backgroundColor:"white",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",minWidth:"200px",zIndex:9999,fontFamily:"system-ui, -apple-system, sans-serif",...u},children:[n("div",{style:{marginBottom:"8px"},children:[r("div",{style:{fontSize:"12px",fontWeight:600,color:a,marginBottom:"4px"},children:s?"\u26A0\uFE0F Sesi\xF3n expirando":"\u23F0 Sesi\xF3n por expirar"}),n("div",{style:{fontSize:"14px",color:"#333",fontWeight:500},children:[e,":",S.toString().padStart(2,"0")]})]}),r("div",{style:{width:"100%",height:"6px",backgroundColor:"#e0e0e0",borderRadius:"3px",overflow:"hidden"},children:r("div",{style:{width:`${h}%`,height:"100%",backgroundColor:a,transition:"width 1s linear"}})})]})}export{L as CrudiaAutoGenerate,A as CrudiaFileField,R as CrudiaMarkdownField,N as CrudifyLogin,F as GlobalNotificationProvider,k as LoginComponent,M as Policies,G as SessionStatus,z as SessionTimeIndicator,T as UserProfileDisplay,I as useGlobalNotification};
1
+ import{h as N,i as T,l as M,m as k,n as G,o as L,p as A,q as R}from"./chunk-WVEMQ7DL.mjs";import{c as d,d as F,e as I}from"./chunk-Z2GYZNAL.mjs";import"./chunk-JAPL7EZJ.mjs";import"./chunk-MGJZTOEM.mjs";import{useEffect as B,useState as l}from"react";import{jsx as r,jsxs as n}from"react/jsx-runtime";function z({showBelowMinutes:f=5,position:m="bottom-right",colorNormal:c="#ed6c02",colorCritical:x="#d32f2f",style:u,className:g}={}){let{isAuthenticated:o,tokens:t}=d(),[i,y]=l(0),[h,C]=l(100);if(B(()=>{if(!o||!t)return;let v=setInterval(()=>{let P=Date.now(),p=t.expiresAt-P,w=900*1e3;y(Math.max(0,p)),C(Math.max(0,p/w*100))},1e3);return()=>clearInterval(v)},[o,t]),!o||i<=0)return null;let e=Math.floor(i/6e4),S=Math.floor(i%6e4/1e3);if(e>=f)return null;let s=e<2,a=s?x:c,b={"top-left":{top:"16px",left:"16px"},"top-right":{top:"16px",right:"16px"},"bottom-left":{bottom:"16px",left:"16px"},"bottom-right":{bottom:"16px",right:"16px"}}[m];return n("div",{className:g,style:{position:"fixed",...b,padding:"12px 16px",backgroundColor:"white",borderRadius:"8px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.15)",minWidth:"200px",zIndex:9999,fontFamily:"system-ui, -apple-system, sans-serif",...u},children:[n("div",{style:{marginBottom:"8px"},children:[r("div",{style:{fontSize:"12px",fontWeight:600,color:a,marginBottom:"4px"},children:s?"\u26A0\uFE0F Sesi\xF3n expirando":"\u23F0 Sesi\xF3n por expirar"}),n("div",{style:{fontSize:"14px",color:"#333",fontWeight:500},children:[e,":",S.toString().padStart(2,"0")]})]}),r("div",{style:{width:"100%",height:"6px",backgroundColor:"#e0e0e0",borderRadius:"3px",overflow:"hidden"},children:r("div",{style:{width:`${h}%`,height:"100%",backgroundColor:a,transition:"width 1s linear"}})})]})}export{L as CrudiaAutoGenerate,A as CrudiaFileField,R as CrudiaMarkdownField,N as CrudifyLogin,F as GlobalNotificationProvider,k as LoginComponent,M as Policies,G as SessionStatus,z as SessionTimeIndicator,T as UserProfileDisplay,I as useGlobalNotification};
package/dist/hooks.d.mts CHANGED
@@ -1,4 +1,4 @@
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-SS8n9MbX.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-8iJiQ3bI.mjs';
2
2
  export { A as AutoGenerateConfig, d as UseAutoGenerateOptions, U as UseAutoGenerateReturn, c as useAutoGenerate } from './GlobalNotificationProvider-Zq18OkpI.mjs';
3
3
  import './api-B4uXiHF0.mjs';
4
4
  import 'react/jsx-runtime';
package/dist/hooks.d.ts CHANGED
@@ -1,4 +1,4 @@
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-Dp5wNqtm.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-BaP3eAZd.js';
2
2
  export { A as AutoGenerateConfig, d as UseAutoGenerateOptions, U as UseAutoGenerateReturn, c as useAutoGenerate } from './GlobalNotificationProvider-Zq18OkpI.js';
3
3
  import './api-B4uXiHF0.js';
4
4
  import 'react/jsx-runtime';
package/dist/hooks.js CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkOZDU2F2Ljs = require('./chunk-OZDU2F2L.js');var _chunkYWIPJYNHjs = require('./chunk-YWIPJYNH.js');require('./chunk-MFYHD6S5.js');exports.useAuth = _chunkOZDU2F2Ljs.b; exports.useAutoGenerate = _chunkYWIPJYNHjs.m; exports.useCrudifyWithNotifications = _chunkOZDU2F2Ljs.d; exports.useData = _chunkOZDU2F2Ljs.c; exports.useFileUpload = _chunkYWIPJYNHjs.p; exports.useSession = _chunkYWIPJYNHjs.c; exports.useUserData = _chunkOZDU2F2Ljs.a; exports.useUserProfile = _chunkYWIPJYNHjs.l;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkBBA4D4JYjs = require('./chunk-BBA4D4JY.js');var _chunk4AEUOTN2js = require('./chunk-4AEUOTN2.js');require('./chunk-MFYHD6S5.js');exports.useAuth = _chunkBBA4D4JYjs.b; exports.useAutoGenerate = _chunk4AEUOTN2js.m; exports.useCrudifyWithNotifications = _chunkBBA4D4JYjs.d; exports.useData = _chunkBBA4D4JYjs.c; exports.useFileUpload = _chunk4AEUOTN2js.p; exports.useSession = _chunk4AEUOTN2js.c; exports.useUserData = _chunkBBA4D4JYjs.a; exports.useUserProfile = _chunk4AEUOTN2js.l;
package/dist/hooks.mjs CHANGED
@@ -1 +1 @@
1
- import{a as s,b as u,c as a,d as p}from"./chunk-VFICZQ4N.mjs";import{c as e,l as t,m as o,p as r}from"./chunk-SNBJN4HI.mjs";import"./chunk-MGJZTOEM.mjs";export{u as useAuth,o as useAutoGenerate,p as useCrudifyWithNotifications,a as useData,r as useFileUpload,e as useSession,s as useUserData,t as useUserProfile};
1
+ import{a as s,b as p,c as u,d as a}from"./chunk-I2GWDIIJ.mjs";import{c as e,l as t,m as o,p as r}from"./chunk-Z2GYZNAL.mjs";import"./chunk-MGJZTOEM.mjs";export{p as useAuth,o as useAutoGenerate,a as useCrudifyWithNotifications,u as useData,r as useFileUpload,e as useSession,s as useUserData,t as useUserProfile};
@@ -269,6 +269,13 @@ declare class SessionManager {
269
269
  private formatError;
270
270
  }
271
271
 
272
+ /**
273
+ * Tipos e interfaces para el hook useSession
274
+ */
275
+
276
+ /**
277
+ * Estado del hook useSession
278
+ */
272
279
  type SessionState = {
273
280
  isAuthenticated: boolean;
274
281
  isLoading: boolean;
@@ -277,6 +284,9 @@ type SessionState = {
277
284
  tokens: TokenData | null;
278
285
  error: string | null;
279
286
  };
287
+ /**
288
+ * Opciones de configuración para useSession
289
+ */
280
290
  type UseSessionOptions = {
281
291
  autoRestore?: boolean;
282
292
  enableLogging?: boolean;
@@ -289,45 +299,48 @@ type UseSessionOptions = {
289
299
  publicApiKey?: string;
290
300
  env?: "dev" | "stg" | "api" | "prod";
291
301
  };
292
- declare function useSession(options?: UseSessionOptions): {
302
+ /**
303
+ * Retorno completo del hook useSession
304
+ */
305
+ type UseSessionReturn = SessionState & {
293
306
  login: (email: string, password: string) => Promise<LoginResult>;
294
307
  logout: () => Promise<void>;
295
308
  refreshTokens: () => Promise<boolean>;
296
309
  clearError: () => void;
297
- getTokenInfo: () => Promise<{
298
- isLoggedIn: boolean;
299
- crudifyTokens: {
300
- accessToken: string;
301
- refreshToken: string;
302
- expiresAt: number;
303
- refreshExpiresAt: number;
304
- isExpired: boolean;
305
- isRefreshExpired: boolean;
306
- isValid: boolean;
307
- expiresIn: number;
308
- willExpireSoon: boolean;
309
- };
310
- storageInfo: {
311
- accessExpired: boolean;
312
- refreshExpired: boolean;
313
- accessExpiresIn: number;
314
- refreshExpiresIn: number;
315
- } | null;
316
- hasValidTokens: boolean;
317
- apiEndpointAdmin: string | undefined;
318
- apiKeyEndpointAdmin: string | undefined;
319
- }>;
310
+ getTokenInfo: () => Promise<TokenInfoResult>;
320
311
  updateActivity: () => void;
321
312
  isExpiringSoon: boolean;
322
313
  expiresIn: number;
323
314
  refreshExpiresIn: number;
324
- isAuthenticated: boolean;
325
- isLoading: boolean;
326
- isLoggingOut: boolean;
327
- isInitialized: boolean;
328
- tokens: TokenData | null;
329
- error: string | null;
330
315
  };
316
+ /**
317
+ * Resultado de getTokenInfo
318
+ */
319
+ type TokenInfoResult = {
320
+ crudifyTokens: {
321
+ accessToken: string | null;
322
+ refreshToken: string | null;
323
+ expiresAt: number;
324
+ refreshExpiresAt: number;
325
+ expiresIn: number;
326
+ };
327
+ };
328
+
329
+ /**
330
+ * Hook de React para manejo de sesiones con Refresh Token Pattern
331
+ * Proporciona una API simple para manejar autenticación en componentes React
332
+ *
333
+ * @param options - Opciones de configuración del hook
334
+ * @returns Estado de sesión y funciones de control
335
+ *
336
+ * @example
337
+ * ```tsx
338
+ * const { isAuthenticated, login, logout } = useSession({
339
+ * onSessionExpired: () => navigate('/login')
340
+ * });
341
+ * ```
342
+ */
343
+ declare function useSession(options?: UseSessionOptions): UseSessionReturn;
331
344
 
332
345
  type SessionData = {
333
346
  _id: string;
@@ -269,6 +269,13 @@ declare class SessionManager {
269
269
  private formatError;
270
270
  }
271
271
 
272
+ /**
273
+ * Tipos e interfaces para el hook useSession
274
+ */
275
+
276
+ /**
277
+ * Estado del hook useSession
278
+ */
272
279
  type SessionState = {
273
280
  isAuthenticated: boolean;
274
281
  isLoading: boolean;
@@ -277,6 +284,9 @@ type SessionState = {
277
284
  tokens: TokenData | null;
278
285
  error: string | null;
279
286
  };
287
+ /**
288
+ * Opciones de configuración para useSession
289
+ */
280
290
  type UseSessionOptions = {
281
291
  autoRestore?: boolean;
282
292
  enableLogging?: boolean;
@@ -289,45 +299,48 @@ type UseSessionOptions = {
289
299
  publicApiKey?: string;
290
300
  env?: "dev" | "stg" | "api" | "prod";
291
301
  };
292
- declare function useSession(options?: UseSessionOptions): {
302
+ /**
303
+ * Retorno completo del hook useSession
304
+ */
305
+ type UseSessionReturn = SessionState & {
293
306
  login: (email: string, password: string) => Promise<LoginResult>;
294
307
  logout: () => Promise<void>;
295
308
  refreshTokens: () => Promise<boolean>;
296
309
  clearError: () => void;
297
- getTokenInfo: () => Promise<{
298
- isLoggedIn: boolean;
299
- crudifyTokens: {
300
- accessToken: string;
301
- refreshToken: string;
302
- expiresAt: number;
303
- refreshExpiresAt: number;
304
- isExpired: boolean;
305
- isRefreshExpired: boolean;
306
- isValid: boolean;
307
- expiresIn: number;
308
- willExpireSoon: boolean;
309
- };
310
- storageInfo: {
311
- accessExpired: boolean;
312
- refreshExpired: boolean;
313
- accessExpiresIn: number;
314
- refreshExpiresIn: number;
315
- } | null;
316
- hasValidTokens: boolean;
317
- apiEndpointAdmin: string | undefined;
318
- apiKeyEndpointAdmin: string | undefined;
319
- }>;
310
+ getTokenInfo: () => Promise<TokenInfoResult>;
320
311
  updateActivity: () => void;
321
312
  isExpiringSoon: boolean;
322
313
  expiresIn: number;
323
314
  refreshExpiresIn: number;
324
- isAuthenticated: boolean;
325
- isLoading: boolean;
326
- isLoggingOut: boolean;
327
- isInitialized: boolean;
328
- tokens: TokenData | null;
329
- error: string | null;
330
315
  };
316
+ /**
317
+ * Resultado de getTokenInfo
318
+ */
319
+ type TokenInfoResult = {
320
+ crudifyTokens: {
321
+ accessToken: string | null;
322
+ refreshToken: string | null;
323
+ expiresAt: number;
324
+ refreshExpiresAt: number;
325
+ expiresIn: number;
326
+ };
327
+ };
328
+
329
+ /**
330
+ * Hook de React para manejo de sesiones con Refresh Token Pattern
331
+ * Proporciona una API simple para manejar autenticación en componentes React
332
+ *
333
+ * @param options - Opciones de configuración del hook
334
+ * @returns Estado de sesión y funciones de control
335
+ *
336
+ * @example
337
+ * ```tsx
338
+ * const { isAuthenticated, login, logout } = useSession({
339
+ * onSessionExpired: () => navigate('/login')
340
+ * });
341
+ * ```
342
+ */
343
+ declare function useSession(options?: UseSessionOptions): UseSessionReturn;
331
344
 
332
345
  type SessionData = {
333
346
  _id: string;
package/dist/index.d.mts CHANGED
@@ -5,7 +5,7 @@ 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
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-SS8n9MbX.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-8iJiQ3bI.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';
package/dist/index.d.ts CHANGED
@@ -5,7 +5,7 @@ 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
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-Dp5wNqtm.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-BaP3eAZd.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';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } async function _asyncOptionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkOK5STXOAjs = require('./chunk-OK5STXOA.js');var _chunkOZDU2F2Ljs = require('./chunk-OZDU2F2L.js');var _chunkYWIPJYNHjs = require('./chunk-YWIPJYNH.js');var _chunk5HFI5CZ5js = require('./chunk-5HFI5CZ5.js');var _chunkNSV6ECYOjs = require('./chunk-NSV6ECYO.js');var _chunkMFYHD6S5js = require('./chunk-MFYHD6S5.js');var _crudifybrowser = require('@nocios/crudify-browser'); var _crudifybrowser2 = _interopRequireDefault(_crudifybrowser); _createStarExport(_crudifybrowser);var _react = require('react');var _material = require('@mui/material');var _jsxruntime = require('react/jsx-runtime');var _e=(e={})=>{try{let r=_chunkMFYHD6S5js.b.call(void 0, "theme");if(r){let o=JSON.parse(decodeURIComponent(r));return{...e,...o}}}catch(r){_chunkMFYHD6S5js.a.warn("Error parsing theme from cookie",r instanceof Error?{errorMessage:r.message}:{message:String(r)})}return e};function Be({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=_react.useMemo.call(void 0, ()=>{let a=_e(r);return _material.createTheme.call(void 0, a)},[r]);return _jsxruntime.jsxs.call(void 0, _material.ThemeProvider,{theme:t,children:[!o&&_jsxruntime.jsx.call(void 0, _material.CssBaseline,{}),e]})}var _reactrouterdom = require('react-router-dom');var We={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},$e=()=>_jsxruntime.jsx.call(void 0, "style",{children:`
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _createStarExport(obj) { Object.keys(obj) .filter((key) => key !== "default" && key !== "__esModule") .forEach((key) => { if (exports.hasOwnProperty(key)) { return; } Object.defineProperty(exports, key, {enumerable: true, configurable: true, get: () => obj[key]}); }); } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } async function _asyncOptionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = await fn(value); } else if (op === 'call' || op === 'optionalCall') { value = await fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunk4R472VF6js = require('./chunk-4R472VF6.js');var _chunkBBA4D4JYjs = require('./chunk-BBA4D4JY.js');var _chunk4AEUOTN2js = require('./chunk-4AEUOTN2.js');var _chunk5HFI5CZ5js = require('./chunk-5HFI5CZ5.js');var _chunkNSV6ECYOjs = require('./chunk-NSV6ECYO.js');var _chunkMFYHD6S5js = require('./chunk-MFYHD6S5.js');var _crudifybrowser = require('@nocios/crudify-browser'); var _crudifybrowser2 = _interopRequireDefault(_crudifybrowser); _createStarExport(_crudifybrowser);var _react = require('react');var _material = require('@mui/material');var _jsxruntime = require('react/jsx-runtime');var _e=(e={})=>{try{let r=_chunkMFYHD6S5js.b.call(void 0, "theme");if(r){let o=JSON.parse(decodeURIComponent(r));return{...e,...o}}}catch(r){_chunkMFYHD6S5js.a.warn("Error parsing theme from cookie",r instanceof Error?{errorMessage:r.message}:{message:String(r)})}return e};function Be({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=_react.useMemo.call(void 0, ()=>{let a=_e(r);return _material.createTheme.call(void 0, a)},[r]);return _jsxruntime.jsxs.call(void 0, _material.ThemeProvider,{theme:t,children:[!o&&_jsxruntime.jsx.call(void 0, _material.CssBaseline,{}),e]})}var _reactrouterdom = require('react-router-dom');var We={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},Je=()=>_jsxruntime.jsx.call(void 0, "style",{children:`
2
2
  @keyframes spin {
3
3
  0% { transform: rotate(0deg); }
4
4
  100% { transform: rotate(360deg); }
5
5
  }
6
- `});function E({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, $e,{}),_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:We}),_jsxruntime.jsx.call(void 0, "p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var Ye=/^[a-zA-Z0-9\-_./\?=&%#]+$/,Ze=[/^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]/,/\\/],T= exports.validateInternalRedirect =(e,r="/")=>{if(!e||typeof e!="string")return r;let o=e.trim();if(!o)return r;if(!o.startsWith("/"))return _chunkMFYHD6S5js.a.warn("Open redirect blocked (relative path)",{path:e}),r;if(!Ye.test(o))return _chunkMFYHD6S5js.a.warn("Open redirect blocked (invalid characters)",{path:e}),r;let t=o.toLowerCase();for(let n of Ze)if(n.test(t))return _chunkMFYHD6S5js.a.warn("Open redirect blocked (dangerous pattern)",{path:e}),r;let a=o.split("?")[0].split("/").filter(Boolean);if(a.length===0)return o;for(let n of a)if(n===".."||n.includes(":")||n.length>100)return _chunkMFYHD6S5js.a.warn("Open redirect blocked (suspicious path part)",{part:n}),r;return o},M= exports.extractSafeRedirectFromUrl =(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let a=decodeURIComponent(t);return T(a,r)}catch(o){return _chunkMFYHD6S5js.a.warn("Error parsing redirect parameter",o instanceof Error?{errorMessage:o.message}:{message:String(o)}),r}};function F({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:a,isLoggingOut:n,isInitialized:f,tokens:c,error:d}=_chunkYWIPJYNHjs.j.call(void 0, ),u=_reactrouterdom.useLocation.call(void 0, );if(console.error("[ProtectedRoute] Render - state:",{isAuthenticated:t,isLoading:a,isLoggingOut:n,isInitialized:f,hasTokens:!!c,error:d,locationPathname:u.pathname}),!f||a&&!n)return console.error("[ProtectedRoute] Showing loading screen"),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:r||_jsxruntime.jsx.call(void 0, E,{stage:"validating-session"})});let R=t&&_optionalChain([c, 'optionalAccess', _2 => _2.accessToken])&&c.accessToken.length>0;if(d||!t||!R){if(c&&(!c.accessToken||c.accessToken.length===0)&&localStorage.removeItem("crudify_tokens"),n)return console.error("[ProtectedRoute] isLoggingOut=true -> Navigating to",o,"WITHOUT redirect param"),_jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:o,replace:!0});let x=u.pathname+u.search,C=T(x),I=encodeURIComponent(C);return console.error("[ProtectedRoute] isLoggingOut=false -> Navigating to",`${o}?redirect=${I}`),_jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:`${o}?redirect=${I}`,replace:!0})}return console.error("[ProtectedRoute] User authenticated - rendering children"),_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}function D({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=_chunkYWIPJYNHjs.j.call(void 0, ),t=_reactrouterdom.useLocation.call(void 0, );if(o){let a=new URLSearchParams(t.search),n=M(a,r);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:n,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}var V=_react.createContext.call(void 0, void 0),ir= exports.CrudifyInitializer =({config:e,children:r,fallback:o=null,onInitialized:t,onError:a})=>{let[n,f]=_react.useState.call(void 0, !1),[c,d]=_react.useState.call(void 0, !1),[u,R]=_react.useState.call(void 0, null),x=_react.useRef.call(void 0, !1),C=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{x.current||(_chunkYWIPJYNHjs.o.registerHighPriorityInitializer(),x.current=!0),C.current||(C.current=!0,(async()=>{d(!0),R(null);try{let l=_chunkMFYHD6S5js.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 h=l.env||"prod";_chunkMFYHD6S5js.a.setEnvironment(h),await _chunkYWIPJYNHjs.o.initialize({priority:"HIGH",publicApiKey:l.publicApiKey,env:l.env||"prod",enableLogging:_optionalChain([e, 'optionalAccess', _6 => _6.enableLogging]),requestedBy:"CrudifyInitializer"}),f(!0),d(!1),t&&t()}catch(l){let h=l instanceof Error?l:new Error(String(l));R(h),d(!1),a&&a(h)}})())},[_optionalChain([e, 'optionalAccess', _7 => _7.publicApiKey]),_optionalChain([e, 'optionalAccess', _8 => _8.env]),_optionalChain([e, 'optionalAccess', _9 => _9.enableLogging]),t,a]);let I={isInitialized:n,isInitializing:c,error:u};return c&&o?_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:o}):(u&&_chunkMFYHD6S5js.a.error("[CrudifyInitializer] Initialization failed",u),_jsxruntime.jsx.call(void 0, V.Provider,{value:I,children:r}))},nr= exports.useCrudifyInitializer =()=>{let e=_react.useContext.call(void 0, V);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};var _crudifyadmin = require('@nocios/crudify-admin'); var _crudifyadmin2 = _interopRequireDefault(_crudifyadmin);var _=!1,A=null,P=null;async function ar(){let r=await _chunkYWIPJYNHjs.b.getInstance().getTokenInfo(),o=_optionalChain([r, 'optionalAccess', _10 => _10.apiEndpointAdmin]),t=_optionalChain([r, 'optionalAccess', _11 => _11.apiKeyEndpointAdmin]);return o&&t?{apiUrl:o,apiKey:t}:_chunkYWIPJYNHjs.f.waitForCredentials()}async function pr(){if(!_)return A||(A=(async()=>{try{let e=_chunkYWIPJYNHjs.b.getInstance(),{apiUrl:r,apiKey:o}=await ar();P=await _asyncOptionalChain([(await e.getTokenInfo()), 'optionalAccess', async _12 => _12.crudifyTokens, 'optionalAccess', async _13 => _13.accessToken])||null,_crudifyadmin2.default.init({url:r,apiKey:o,getAdditionalHeaders:()=>P?{Authorization:`Bearer ${P}`}:{}}),_=!0}catch(e){throw A=null,_chunkMFYHD6S5js.a.error("[crudifyAdminWrapper] Initialization failed",e instanceof Error?e:{message:String(e)}),e}})(),A)}async function s(e){try{await pr();let r=_chunkYWIPJYNHjs.b.getInstance();P=await _asyncOptionalChain([(await r.getTokenInfo()), 'optionalAccess', async _14 => _14.crudifyTokens, 'optionalAccess', async _15 => _15.accessToken])||null;let t=await e(),a=t.errors&&(typeof t.errors=="string"&&t.errors.includes("401")||Array.isArray(t.errors)&&t.errors.some(n=>typeof n=="string"&&n.includes("401")));return!t.success&&a?await r.refreshTokens()?(P=await _asyncOptionalChain([(await r.getTokenInfo()), 'optionalAccess', async _16 => _16.crudifyTokens, 'optionalAccess', async _17 => _17.accessToken])||null,await e()):(_chunkMFYHD6S5js.a.error("[crudifyAdmin] Token refresh failed"),typeof window<"u"&&(window.location.href="/login"),t):t}catch(r){return _chunkMFYHD6S5js.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:()=>s(()=>_crudifyadmin2.default.listModules()),getModule:e=>s(()=>_crudifyadmin2.default.getModule(e)),createModule:e=>s(()=>_crudifyadmin2.default.createModule(e)),editModule:(e,r)=>s(()=>_crudifyadmin2.default.editModule(e,r)),deleteModule:e=>s(()=>_crudifyadmin2.default.deleteModule(e)),activateModule:e=>s(()=>_crudifyadmin2.default.activateModule(e)),deactivateModule:e=>s(()=>_crudifyadmin2.default.deactivateModule(e)),getModuleVersions:e=>s(()=>_crudifyadmin2.default.getModuleVersions(e)),listActions:e=>s(()=>_crudifyadmin2.default.listActions(e)),getAction:e=>s(()=>_crudifyadmin2.default.getAction(e)),createAction:e=>s(()=>_crudifyadmin2.default.createAction(e)),editAction:(e,r)=>s(()=>_crudifyadmin2.default.editAction(e,r)),deleteAction:e=>s(()=>_crudifyadmin2.default.deleteAction(e)),activateAction:e=>s(()=>_crudifyadmin2.default.activateAction(e)),deactivateAction:e=>s(()=>_crudifyadmin2.default.deactivateAction(e)),getActionVersions:e=>s(()=>_crudifyadmin2.default.getActionVersions(e)),getActionsByProfile:e=>s(()=>_crudifyadmin2.default.getActionsByProfile(e)),updateActionsProfiles:e=>s(()=>_crudifyadmin2.default.updateActionsProfiles(e)),calculatePermissions:e=>s(()=>_crudifyadmin2.default.calculatePermissions(e))};exports.AuthRoute = D; exports.CRITICAL_TRANSLATIONS = _chunkOK5STXOAjs.a; exports.CrudiaAutoGenerate = _chunkOK5STXOAjs.o; exports.CrudiaFileField = _chunkOK5STXOAjs.p; exports.CrudiaMarkdownField = _chunkOK5STXOAjs.q; exports.CrudifyInitializationManager = _chunkYWIPJYNHjs.n; exports.CrudifyInitializer = ir; exports.CrudifyLogin = _chunkOK5STXOAjs.h; exports.CrudifyProvider = _chunkYWIPJYNHjs.g; exports.CrudifyThemeProvider = Be; exports.ERROR_CODES = _chunkNSV6ECYOjs.a; exports.ERROR_SEVERITY_MAP = _chunkNSV6ECYOjs.b; exports.GlobalNotificationProvider = _chunkYWIPJYNHjs.d; exports.LoginComponent = _chunkOK5STXOAjs.m; exports.POLICY_ACTIONS = _chunkOK5STXOAjs.j; exports.PREFERRED_POLICY_ORDER = _chunkOK5STXOAjs.k; exports.Policies = _chunkOK5STXOAjs.l; exports.ProtectedRoute = F; exports.SessionDebugInfo = _chunkYWIPJYNHjs.k; exports.SessionLoadingScreen = E; exports.SessionManager = _chunkYWIPJYNHjs.b; exports.SessionProvider = _chunkYWIPJYNHjs.i; exports.SessionStatus = _chunkOK5STXOAjs.n; exports.TokenStorage = _chunkYWIPJYNHjs.a; exports.TranslationService = _chunkOK5STXOAjs.d; exports.TranslationsProvider = _chunkOK5STXOAjs.f; exports.UserProfileDisplay = _chunkOK5STXOAjs.i; exports.createErrorTranslator = _chunkMFYHD6S5js.o; exports.crudify = _crudifybrowser2.default; exports.crudifyAdmin = cr; exports.crudifyInitManager = _chunkYWIPJYNHjs.o; exports.decodeJwtSafely = _chunkMFYHD6S5js.q; exports.extractSafeRedirectFromUrl = M; exports.getCookie = _chunkMFYHD6S5js.b; exports.getCriticalLanguages = _chunkOK5STXOAjs.b; exports.getCriticalTranslations = _chunkOK5STXOAjs.c; exports.getCurrentUserEmail = _chunkMFYHD6S5js.r; exports.getErrorMessage = _chunkNSV6ECYOjs.e; exports.handleCrudifyError = _chunkNSV6ECYOjs.g; exports.isTokenExpired = _chunkMFYHD6S5js.s; exports.logger = _chunkMFYHD6S5js.a; exports.parseApiError = _chunkNSV6ECYOjs.c; exports.parseJavaScriptError = _chunkNSV6ECYOjs.f; exports.parseTransactionError = _chunkNSV6ECYOjs.d; exports.secureLocalStorage = _chunk5HFI5CZ5js.b; exports.secureSessionStorage = _chunk5HFI5CZ5js.a; exports.translateError = _chunkMFYHD6S5js.n; exports.translateErrorCode = _chunkMFYHD6S5js.l; exports.translateErrorCodes = _chunkMFYHD6S5js.m; exports.translationService = _chunkOK5STXOAjs.e; exports.useAuth = _chunkOZDU2F2Ljs.b; exports.useAutoGenerate = _chunkYWIPJYNHjs.m; exports.useCrudify = _chunkYWIPJYNHjs.h; exports.useCrudifyInitializer = nr; exports.useCrudifyWithNotifications = _chunkOZDU2F2Ljs.d; exports.useData = _chunkOZDU2F2Ljs.c; exports.useFileUpload = _chunkYWIPJYNHjs.p; exports.useGlobalNotification = _chunkYWIPJYNHjs.e; exports.useSession = _chunkYWIPJYNHjs.c; exports.useSessionContext = _chunkYWIPJYNHjs.j; exports.useTranslations = _chunkOK5STXOAjs.g; exports.useUserData = _chunkOZDU2F2Ljs.a; exports.useUserProfile = _chunkYWIPJYNHjs.l; exports.validateInternalRedirect = T;
6
+ `});function E({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, Je,{}),_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:We}),_jsxruntime.jsx.call(void 0, "p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var Ye=/^[a-zA-Z0-9\-_./\?=&%#]+$/,Ze=[/^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]/,/\\/],v= exports.validateInternalRedirect =(e,r="/")=>{if(!e||typeof e!="string")return r;let o=e.trim();if(!o)return r;if(!o.startsWith("/"))return _chunkMFYHD6S5js.a.warn("Open redirect blocked (relative path)",{path:e}),r;if(!Ye.test(o))return _chunkMFYHD6S5js.a.warn("Open redirect blocked (invalid characters)",{path:e}),r;let t=o.toLowerCase();for(let s of Ze)if(s.test(t))return _chunkMFYHD6S5js.a.warn("Open redirect blocked (dangerous pattern)",{path:e}),r;let a=o.split("?")[0].split("/").filter(Boolean);if(a.length===0)return o;for(let s of a)if(s===".."||s.includes(":")||s.length>100)return _chunkMFYHD6S5js.a.warn("Open redirect blocked (suspicious path part)",{part:s}),r;return o},M= exports.extractSafeRedirectFromUrl =(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let a=decodeURIComponent(t);return v(a,r)}catch(o){return _chunkMFYHD6S5js.a.warn("Error parsing redirect parameter",o instanceof Error?{errorMessage:o.message}:{message:String(o)}),r}};function F({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:a,isLoggingOut:s,isInitialized:x,tokens:c,error:f}=_chunk4AEUOTN2js.j.call(void 0, ),l=_reactrouterdom.useLocation.call(void 0, );if(!x||a&&!s)return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:r||_jsxruntime.jsx.call(void 0, E,{stage:"validating-session"})});let C=t&&_optionalChain([c, 'optionalAccess', _2 => _2.accessToken])&&c.accessToken.length>0;if(f||!t||!C){if(c&&(!c.accessToken||c.accessToken.length===0)&&localStorage.removeItem("crudify_tokens"),s)return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:o,replace:!0});let R=l.pathname+l.search;if(l.pathname===o||l.pathname.startsWith(o))return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:o,replace:!0});let P=v(R),T=encodeURIComponent(P);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:`${o}?redirect=${T}`,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}function D({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=_chunk4AEUOTN2js.j.call(void 0, ),t=_reactrouterdom.useLocation.call(void 0, );if(o){let a=new URLSearchParams(t.search),s=M(a,r);return _jsxruntime.jsx.call(void 0, _reactrouterdom.Navigate,{to:s,replace:!0})}return _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:e})}var V=_react.createContext.call(void 0, void 0),ir= exports.CrudifyInitializer =({config:e,children:r,fallback:o=null,onInitialized:t,onError:a})=>{let[s,x]=_react.useState.call(void 0, !1),[c,f]=_react.useState.call(void 0, !1),[l,C]=_react.useState.call(void 0, null),R=_react.useRef.call(void 0, !1),P=_react.useRef.call(void 0, !1);_react.useEffect.call(void 0, ()=>{R.current||(_chunk4AEUOTN2js.o.registerHighPriorityInitializer(),R.current=!0),P.current||(P.current=!0,(async()=>{f(!0),C(null);try{let u=_chunkMFYHD6S5js.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(!u.publicApiKey)throw new Error("Crudify configuration missing. Please provide publicApiKey via props or ensure cookies are set by Lambda.");let I=u.env||"prod";_chunkMFYHD6S5js.a.setEnvironment(I),await _chunk4AEUOTN2js.o.initialize({priority:"HIGH",publicApiKey:u.publicApiKey,env:u.env||"prod",enableLogging:_optionalChain([e, 'optionalAccess', _6 => _6.enableLogging]),requestedBy:"CrudifyInitializer"}),x(!0),f(!1),t&&t()}catch(u){let I=u instanceof Error?u:new Error(String(u));C(I),f(!1),a&&a(I)}})())},[_optionalChain([e, 'optionalAccess', _7 => _7.publicApiKey]),_optionalChain([e, 'optionalAccess', _8 => _8.env]),_optionalChain([e, 'optionalAccess', _9 => _9.enableLogging]),t,a]);let T={isInitialized:s,isInitializing:c,error:l};return c&&o?_jsxruntime.jsx.call(void 0, _jsxruntime.Fragment,{children:o}):(l&&_chunkMFYHD6S5js.a.error("[CrudifyInitializer] Initialization failed",l),_jsxruntime.jsx.call(void 0, V.Provider,{value:T,children:r}))},nr= exports.useCrudifyInitializer =()=>{let e=_react.useContext.call(void 0, V);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};var _crudifyadmin = require('@nocios/crudify-admin'); var _crudifyadmin2 = _interopRequireDefault(_crudifyadmin);var _=!1,y=null,A=null;async function ar(){let r=await _chunk4AEUOTN2js.b.getInstance().getTokenInfo(),o=_optionalChain([r, 'optionalAccess', _10 => _10.apiEndpointAdmin]),t=_optionalChain([r, 'optionalAccess', _11 => _11.apiKeyEndpointAdmin]);return o&&t?{apiUrl:o,apiKey:t}:_chunk4AEUOTN2js.f.waitForCredentials()}async function pr(){if(!_)return y||(y=(async()=>{try{let e=_chunk4AEUOTN2js.b.getInstance(),{apiUrl:r,apiKey:o}=await ar();A=await _asyncOptionalChain([(await e.getTokenInfo()), 'optionalAccess', async _12 => _12.crudifyTokens, 'optionalAccess', async _13 => _13.accessToken])||null,_crudifyadmin2.default.init({url:r,apiKey:o,getAdditionalHeaders:()=>A?{Authorization:`Bearer ${A}`}:{}}),_=!0}catch(e){throw y=null,_chunkMFYHD6S5js.a.error("[crudifyAdminWrapper] Initialization failed",e instanceof Error?e:{message:String(e)}),e}})(),y)}async function n(e){try{await pr();let r=_chunk4AEUOTN2js.b.getInstance();A=await _asyncOptionalChain([(await r.getTokenInfo()), 'optionalAccess', async _14 => _14.crudifyTokens, 'optionalAccess', async _15 => _15.accessToken])||null;let t=await e(),a=t.errors&&(typeof t.errors=="string"&&t.errors.includes("401")||Array.isArray(t.errors)&&t.errors.some(s=>typeof s=="string"&&s.includes("401")));return!t.success&&a?await r.refreshTokens()?(A=await _asyncOptionalChain([(await r.getTokenInfo()), 'optionalAccess', async _16 => _16.crudifyTokens, 'optionalAccess', async _17 => _17.accessToken])||null,await e()):(_chunkMFYHD6S5js.a.error("[crudifyAdmin] Token refresh failed"),typeof window<"u"&&(window.location.href="/login"),t):t}catch(r){return _chunkMFYHD6S5js.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)),calculatePermissions:e=>n(()=>_crudifyadmin2.default.calculatePermissions(e))};exports.AuthRoute = D; exports.CRITICAL_TRANSLATIONS = _chunk4R472VF6js.a; exports.CrudiaAutoGenerate = _chunk4R472VF6js.o; exports.CrudiaFileField = _chunk4R472VF6js.p; exports.CrudiaMarkdownField = _chunk4R472VF6js.q; exports.CrudifyInitializationManager = _chunk4AEUOTN2js.n; exports.CrudifyInitializer = ir; exports.CrudifyLogin = _chunk4R472VF6js.h; exports.CrudifyProvider = _chunk4AEUOTN2js.g; exports.CrudifyThemeProvider = Be; exports.ERROR_CODES = _chunkNSV6ECYOjs.a; exports.ERROR_SEVERITY_MAP = _chunkNSV6ECYOjs.b; exports.GlobalNotificationProvider = _chunk4AEUOTN2js.d; exports.LoginComponent = _chunk4R472VF6js.m; exports.POLICY_ACTIONS = _chunk4R472VF6js.j; exports.PREFERRED_POLICY_ORDER = _chunk4R472VF6js.k; exports.Policies = _chunk4R472VF6js.l; exports.ProtectedRoute = F; exports.SessionDebugInfo = _chunk4AEUOTN2js.k; exports.SessionLoadingScreen = E; exports.SessionManager = _chunk4AEUOTN2js.b; exports.SessionProvider = _chunk4AEUOTN2js.i; exports.SessionStatus = _chunk4R472VF6js.n; exports.TokenStorage = _chunk4AEUOTN2js.a; exports.TranslationService = _chunk4R472VF6js.d; exports.TranslationsProvider = _chunk4R472VF6js.f; exports.UserProfileDisplay = _chunk4R472VF6js.i; exports.createErrorTranslator = _chunkMFYHD6S5js.o; exports.crudify = _crudifybrowser2.default; exports.crudifyAdmin = cr; exports.crudifyInitManager = _chunk4AEUOTN2js.o; exports.decodeJwtSafely = _chunkMFYHD6S5js.q; exports.extractSafeRedirectFromUrl = M; exports.getCookie = _chunkMFYHD6S5js.b; exports.getCriticalLanguages = _chunk4R472VF6js.b; exports.getCriticalTranslations = _chunk4R472VF6js.c; exports.getCurrentUserEmail = _chunkMFYHD6S5js.r; exports.getErrorMessage = _chunkNSV6ECYOjs.e; exports.handleCrudifyError = _chunkNSV6ECYOjs.g; exports.isTokenExpired = _chunkMFYHD6S5js.s; exports.logger = _chunkMFYHD6S5js.a; exports.parseApiError = _chunkNSV6ECYOjs.c; exports.parseJavaScriptError = _chunkNSV6ECYOjs.f; exports.parseTransactionError = _chunkNSV6ECYOjs.d; exports.secureLocalStorage = _chunk5HFI5CZ5js.b; exports.secureSessionStorage = _chunk5HFI5CZ5js.a; exports.translateError = _chunkMFYHD6S5js.n; exports.translateErrorCode = _chunkMFYHD6S5js.l; exports.translateErrorCodes = _chunkMFYHD6S5js.m; exports.translationService = _chunk4R472VF6js.e; exports.useAuth = _chunkBBA4D4JYjs.b; exports.useAutoGenerate = _chunk4AEUOTN2js.m; exports.useCrudify = _chunk4AEUOTN2js.h; exports.useCrudifyInitializer = nr; exports.useCrudifyWithNotifications = _chunkBBA4D4JYjs.d; exports.useData = _chunkBBA4D4JYjs.c; exports.useFileUpload = _chunk4AEUOTN2js.p; exports.useGlobalNotification = _chunk4AEUOTN2js.e; exports.useSession = _chunk4AEUOTN2js.c; exports.useSessionContext = _chunk4AEUOTN2js.j; exports.useTranslations = _chunk4R472VF6js.g; exports.useUserData = _chunkBBA4D4JYjs.a; exports.useUserProfile = _chunk4AEUOTN2js.l; exports.validateInternalRedirect = v;
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import{a as B,b as H,c as q,d as W,e as $,f as J,g as Y,h as Pe,i as xe,j as Ce,k as Ie,l as he,m as ve,n as Se,o as ke,p as Le,q as we}from"./chunk-YQROLB5L.mjs";import{a as ze,b as be,c as Ue,d as Ne}from"./chunk-VFICZQ4N.mjs";import{a as Z,b as m,c as re,d as ne,e as se,f as z,g as ae,h as pe,i as ce,j as g,k as le,l as Re,m as Te,n as Ee,o as v,p as Me}from"./chunk-SNBJN4HI.mjs";import{a as Oe,b as Fe}from"./chunk-JNEWPO2J.mjs";import{a as ue,b as de,c as fe,d as me,e as ge,f as ye,g as Ae}from"./chunk-JAPL7EZJ.mjs";import{a as p,b as k,c as w,l as Q,m as X,n as j,o as ee,q as oe,r as te,s as ie}from"./chunk-MGJZTOEM.mjs";import{default as Qr}from"@nocios/crudify-browser";export*from"@nocios/crudify-browser";import{useMemo as De}from"react";import{ThemeProvider as Ge,createTheme as Ke,CssBaseline as Ve}from"@mui/material";import{jsx as He,jsxs as qe}from"react/jsx-runtime";var _e=(e={})=>{try{let r=k("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 Be({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=De(()=>{let a=_e(r);return Ke(a)},[r]);return qe(Ge,{theme:t,children:[!o&&He(Ve,{}),e]})}import{Navigate as U,useLocation as Qe}from"react-router-dom";import{Fragment as Je,jsx as S,jsxs as b}from"react/jsx-runtime";var We={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},$e=()=>S("style",{children:`
1
+ import{a as B,b as H,c as q,d as W,e as J,f as $,g as Y,h as xe,i as Re,j as Pe,k as Ie,l as he,m as Se,n as ve,o as ke,p as ze,q as we}from"./chunk-WVEMQ7DL.mjs";import{a as Le,b as be,c as Ue,d as Ne}from"./chunk-I2GWDIIJ.mjs";import{a as Z,b as m,c as re,d as ne,e as se,f as b,g as ae,h as pe,i as ce,j as g,k as le,l as Ce,m as Te,n as Ee,o as h,p as Me}from"./chunk-Z2GYZNAL.mjs";import{a as Oe,b as Fe}from"./chunk-JNEWPO2J.mjs";import{a as ue,b as de,c as fe,d as me,e as ge,f as ye,g as Ae}from"./chunk-JAPL7EZJ.mjs";import{a as p,b as k,c as L,l as Q,m as X,n as j,o as ee,q as oe,r as te,s as ie}from"./chunk-MGJZTOEM.mjs";import{default as Qr}from"@nocios/crudify-browser";export*from"@nocios/crudify-browser";import{useMemo as De}from"react";import{ThemeProvider as Ge,createTheme as Ke,CssBaseline as Ve}from"@mui/material";import{jsx as He,jsxs as qe}from"react/jsx-runtime";var _e=(e={})=>{try{let r=k("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 Be({children:e,defaultTheme:r={},disableCssBaseline:o=!1}){let t=De(()=>{let a=_e(r);return Ke(a)},[r]);return qe(Ge,{theme:t,children:[!o&&He(Ve,{}),e]})}import{Navigate as z,useLocation as Qe}from"react-router-dom";import{Fragment as $e,jsx as S,jsxs as U}from"react/jsx-runtime";var We={border:"5px solid rgba(0, 0, 0, 0.1)",borderTopColor:"#3B82F6",borderRadius:"50%",width:"50px",height:"50px",animation:"spin 1s linear infinite"},Je=()=>S("style",{children:`
2
2
  @keyframes spin {
3
3
  0% { transform: rotate(0deg); }
4
4
  100% { transform: rotate(360deg); }
5
5
  }
6
- `});function E({stage:e="loading",message:r}){let t=r||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return b(Je,{children:[S($e,{}),b("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:[S("div",{style:We}),S("p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var Ye=/^[a-zA-Z0-9\-_./\?=&%#]+$/,Ze=[/^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]/,/\\/],T=(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(!Ye.test(o))return p.warn("Open redirect blocked (invalid characters)",{path:e}),r;let t=o.toLowerCase();for(let n of Ze)if(n.test(t))return p.warn("Open redirect blocked (dangerous pattern)",{path:e}),r;let a=o.split("?")[0].split("/").filter(Boolean);if(a.length===0)return o;for(let n of a)if(n===".."||n.includes(":")||n.length>100)return p.warn("Open redirect blocked (suspicious path part)",{part:n}),r;return o},M=(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let a=decodeURIComponent(t);return T(a,r)}catch(o){return p.warn("Error parsing redirect parameter",o instanceof Error?{errorMessage:o.message}:{message:String(o)}),r}};import{Fragment as O,jsx as y}from"react/jsx-runtime";function F({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:a,isLoggingOut:n,isInitialized:f,tokens:c,error:d}=g(),u=Qe();if(console.error("[ProtectedRoute] Render - state:",{isAuthenticated:t,isLoading:a,isLoggingOut:n,isInitialized:f,hasTokens:!!c,error:d,locationPathname:u.pathname}),!f||a&&!n)return console.error("[ProtectedRoute] Showing loading screen"),y(O,{children:r||y(E,{stage:"validating-session"})});let R=t&&c?.accessToken&&c.accessToken.length>0;if(d||!t||!R){if(c&&(!c.accessToken||c.accessToken.length===0)&&localStorage.removeItem("crudify_tokens"),n)return console.error("[ProtectedRoute] isLoggingOut=true -> Navigating to",o,"WITHOUT redirect param"),y(U,{to:o,replace:!0});let x=u.pathname+u.search,C=T(x),I=encodeURIComponent(C);return console.error("[ProtectedRoute] isLoggingOut=false -> Navigating to",`${o}?redirect=${I}`),y(U,{to:`${o}?redirect=${I}`,replace:!0})}return console.error("[ProtectedRoute] User authenticated - rendering children"),y(O,{children:e})}import{Navigate as Xe,useLocation as je}from"react-router-dom";import{Fragment as er,jsx as N}from"react/jsx-runtime";function D({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=g(),t=je();if(o){let a=new URLSearchParams(t.search),n=M(a,r);return N(Xe,{to:n,replace:!0})}return N(er,{children:e})}import{createContext as rr,useContext as or,useEffect as tr,useRef as G,useState as L}from"react";import{Fragment as sr,jsx as K}from"react/jsx-runtime";var V=rr(void 0),ir=({config:e,children:r,fallback:o=null,onInitialized:t,onError:a})=>{let[n,f]=L(!1),[c,d]=L(!1),[u,R]=L(null),x=G(!1),C=G(!1);tr(()=>{x.current||(v.registerHighPriorityInitializer(),x.current=!0),C.current||(C.current=!0,(async()=>{d(!0),R(null);try{let l=w({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 h=l.env||"prod";p.setEnvironment(h),await v.initialize({priority:"HIGH",publicApiKey:l.publicApiKey,env:l.env||"prod",enableLogging:e?.enableLogging,requestedBy:"CrudifyInitializer"}),f(!0),d(!1),t&&t()}catch(l){let h=l instanceof Error?l:new Error(String(l));R(h),d(!1),a&&a(h)}})())},[e?.publicApiKey,e?.env,e?.enableLogging,t,a]);let I={isInitialized:n,isInitializing:c,error:u};return c&&o?K(sr,{children:o}):(u&&p.error("[CrudifyInitializer] Initialization failed",u),K(V.Provider,{value:I,children:r}))},nr=()=>{let e=or(V);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};import i from"@nocios/crudify-admin";var _=!1,A=null,P=null;async function ar(){let r=await m.getInstance().getTokenInfo(),o=r?.apiEndpointAdmin,t=r?.apiKeyEndpointAdmin;return o&&t?{apiUrl:o,apiKey:t}:z.waitForCredentials()}async function pr(){if(!_)return A||(A=(async()=>{try{let e=m.getInstance(),{apiUrl:r,apiKey:o}=await ar();P=(await e.getTokenInfo())?.crudifyTokens?.accessToken||null,i.init({url:r,apiKey:o,getAdditionalHeaders:()=>P?{Authorization:`Bearer ${P}`}:{}}),_=!0}catch(e){throw A=null,p.error("[crudifyAdminWrapper] Initialization failed",e instanceof Error?e:{message:String(e)}),e}})(),A)}async function s(e){try{await pr();let r=m.getInstance();P=(await r.getTokenInfo())?.crudifyTokens?.accessToken||null;let t=await e(),a=t.errors&&(typeof t.errors=="string"&&t.errors.includes("401")||Array.isArray(t.errors)&&t.errors.some(n=>typeof n=="string"&&n.includes("401")));return!t.success&&a?await r.refreshTokens()?(P=(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:()=>s(()=>i.listModules()),getModule:e=>s(()=>i.getModule(e)),createModule:e=>s(()=>i.createModule(e)),editModule:(e,r)=>s(()=>i.editModule(e,r)),deleteModule:e=>s(()=>i.deleteModule(e)),activateModule:e=>s(()=>i.activateModule(e)),deactivateModule:e=>s(()=>i.deactivateModule(e)),getModuleVersions:e=>s(()=>i.getModuleVersions(e)),listActions:e=>s(()=>i.listActions(e)),getAction:e=>s(()=>i.getAction(e)),createAction:e=>s(()=>i.createAction(e)),editAction:(e,r)=>s(()=>i.editAction(e,r)),deleteAction:e=>s(()=>i.deleteAction(e)),activateAction:e=>s(()=>i.activateAction(e)),deactivateAction:e=>s(()=>i.deactivateAction(e)),getActionVersions:e=>s(()=>i.getActionVersions(e)),getActionsByProfile:e=>s(()=>i.getActionsByProfile(e)),updateActionsProfiles:e=>s(()=>i.updateActionsProfiles(e)),calculatePermissions:e=>s(()=>i.calculatePermissions(e))};export{D as AuthRoute,B as CRITICAL_TRANSLATIONS,ke as CrudiaAutoGenerate,Le as CrudiaFileField,we as CrudiaMarkdownField,Ee as CrudifyInitializationManager,ir as CrudifyInitializer,Pe as CrudifyLogin,ae as CrudifyProvider,Be as CrudifyThemeProvider,ue as ERROR_CODES,de as ERROR_SEVERITY_MAP,ne as GlobalNotificationProvider,ve as LoginComponent,Ce as POLICY_ACTIONS,Ie as PREFERRED_POLICY_ORDER,he as Policies,F as ProtectedRoute,le as SessionDebugInfo,E as SessionLoadingScreen,m as SessionManager,ce as SessionProvider,Se as SessionStatus,Z as TokenStorage,W as TranslationService,J as TranslationsProvider,xe as UserProfileDisplay,ee as createErrorTranslator,Qr as crudify,cr as crudifyAdmin,v as crudifyInitManager,oe as decodeJwtSafely,M as extractSafeRedirectFromUrl,k as getCookie,H as getCriticalLanguages,q as getCriticalTranslations,te as getCurrentUserEmail,ge as getErrorMessage,Ae as handleCrudifyError,ie as isTokenExpired,p as logger,fe as parseApiError,ye as parseJavaScriptError,me as parseTransactionError,Fe as secureLocalStorage,Oe as secureSessionStorage,j as translateError,Q as translateErrorCode,X as translateErrorCodes,$ as translationService,be as useAuth,Te as useAutoGenerate,pe as useCrudify,nr as useCrudifyInitializer,Ne as useCrudifyWithNotifications,Ue as useData,Me as useFileUpload,se as useGlobalNotification,re as useSession,g as useSessionContext,Y as useTranslations,ze as useUserData,Re as useUserProfile,T as validateInternalRedirect};
6
+ `});function E({stage:e="loading",message:r}){let t=r||{initializing:"Initializing application...","validating-session":"Validating session...",loading:"Loading..."}[e];return U($e,{children:[S(Je,{}),U("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:[S("div",{style:We}),S("p",{style:{fontSize:"1.25em",fontWeight:"500",marginTop:"24px",color:"#1f2937"},children:t})]})]})}var Ye=/^[a-zA-Z0-9\-_./\?=&%#]+$/,Ze=[/^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]/,/\\/],v=(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(!Ye.test(o))return p.warn("Open redirect blocked (invalid characters)",{path:e}),r;let t=o.toLowerCase();for(let s of Ze)if(s.test(t))return p.warn("Open redirect blocked (dangerous pattern)",{path:e}),r;let a=o.split("?")[0].split("/").filter(Boolean);if(a.length===0)return o;for(let s of a)if(s===".."||s.includes(":")||s.length>100)return p.warn("Open redirect blocked (suspicious path part)",{part:s}),r;return o},M=(e,r="/")=>{try{let t=(typeof e=="string"?new URLSearchParams(e):e).get("redirect");if(!t)return r;let a=decodeURIComponent(t);return v(a,r)}catch(o){return p.warn("Error parsing redirect parameter",o instanceof Error?{errorMessage:o.message}:{message:String(o)}),r}};import{Fragment as O,jsx as d}from"react/jsx-runtime";function F({children:e,loadingComponent:r,loginPath:o="/login"}){let{isAuthenticated:t,isLoading:a,isLoggingOut:s,isInitialized:x,tokens:c,error:f}=g(),l=Qe();if(!x||a&&!s)return d(O,{children:r||d(E,{stage:"validating-session"})});let C=t&&c?.accessToken&&c.accessToken.length>0;if(f||!t||!C){if(c&&(!c.accessToken||c.accessToken.length===0)&&localStorage.removeItem("crudify_tokens"),s)return d(z,{to:o,replace:!0});let R=l.pathname+l.search;if(l.pathname===o||l.pathname.startsWith(o))return d(z,{to:o,replace:!0});let P=v(R),T=encodeURIComponent(P);return d(z,{to:`${o}?redirect=${T}`,replace:!0})}return d(O,{children:e})}import{Navigate as Xe,useLocation as je}from"react-router-dom";import{Fragment as er,jsx as N}from"react/jsx-runtime";function D({children:e,redirectTo:r="/"}){let{isAuthenticated:o}=g(),t=je();if(o){let a=new URLSearchParams(t.search),s=M(a,r);return N(Xe,{to:s,replace:!0})}return N(er,{children:e})}import{createContext as rr,useContext as or,useEffect as tr,useRef as G,useState as w}from"react";import{Fragment as sr,jsx as K}from"react/jsx-runtime";var V=rr(void 0),ir=({config:e,children:r,fallback:o=null,onInitialized:t,onError:a})=>{let[s,x]=w(!1),[c,f]=w(!1),[l,C]=w(null),R=G(!1),P=G(!1);tr(()=>{R.current||(h.registerHighPriorityInitializer(),R.current=!0),P.current||(P.current=!0,(async()=>{f(!0),C(null);try{let u=L({publicApiKey:e?.publicApiKey,env:e?.env,enableDebug:e?.enableLogging});if(!u.publicApiKey)throw new Error("Crudify configuration missing. Please provide publicApiKey via props or ensure cookies are set by Lambda.");let I=u.env||"prod";p.setEnvironment(I),await h.initialize({priority:"HIGH",publicApiKey:u.publicApiKey,env:u.env||"prod",enableLogging:e?.enableLogging,requestedBy:"CrudifyInitializer"}),x(!0),f(!1),t&&t()}catch(u){let I=u instanceof Error?u:new Error(String(u));C(I),f(!1),a&&a(I)}})())},[e?.publicApiKey,e?.env,e?.enableLogging,t,a]);let T={isInitialized:s,isInitializing:c,error:l};return c&&o?K(sr,{children:o}):(l&&p.error("[CrudifyInitializer] Initialization failed",l),K(V.Provider,{value:T,children:r}))},nr=()=>{let e=or(V);if(!e)throw new Error("useCrudifyInitializer must be used within CrudifyInitializer");return e};import i from"@nocios/crudify-admin";var _=!1,y=null,A=null;async function ar(){let r=await m.getInstance().getTokenInfo(),o=r?.apiEndpointAdmin,t=r?.apiKeyEndpointAdmin;return o&&t?{apiUrl:o,apiKey:t}:b.waitForCredentials()}async function pr(){if(!_)return y||(y=(async()=>{try{let e=m.getInstance(),{apiUrl:r,apiKey:o}=await ar();A=(await e.getTokenInfo())?.crudifyTokens?.accessToken||null,i.init({url:r,apiKey:o,getAdditionalHeaders:()=>A?{Authorization:`Bearer ${A}`}:{}}),_=!0}catch(e){throw y=null,p.error("[crudifyAdminWrapper] Initialization failed",e instanceof Error?e:{message:String(e)}),e}})(),y)}async function n(e){try{await pr();let r=m.getInstance();A=(await r.getTokenInfo())?.crudifyTokens?.accessToken||null;let t=await e(),a=t.errors&&(typeof t.errors=="string"&&t.errors.includes("401")||Array.isArray(t.errors)&&t.errors.some(s=>typeof s=="string"&&s.includes("401")));return!t.success&&a?await r.refreshTokens()?(A=(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)),calculatePermissions:e=>n(()=>i.calculatePermissions(e))};export{D as AuthRoute,B as CRITICAL_TRANSLATIONS,ke as CrudiaAutoGenerate,ze as CrudiaFileField,we as CrudiaMarkdownField,Ee as CrudifyInitializationManager,ir as CrudifyInitializer,xe as CrudifyLogin,ae as CrudifyProvider,Be as CrudifyThemeProvider,ue as ERROR_CODES,de as ERROR_SEVERITY_MAP,ne as GlobalNotificationProvider,Se as LoginComponent,Pe as POLICY_ACTIONS,Ie as PREFERRED_POLICY_ORDER,he as Policies,F as ProtectedRoute,le as SessionDebugInfo,E as SessionLoadingScreen,m as SessionManager,ce as SessionProvider,ve as SessionStatus,Z as TokenStorage,W as TranslationService,$ as TranslationsProvider,Re as UserProfileDisplay,ee as createErrorTranslator,Qr as crudify,cr as crudifyAdmin,h as crudifyInitManager,oe as decodeJwtSafely,M as extractSafeRedirectFromUrl,k as getCookie,H as getCriticalLanguages,q as getCriticalTranslations,te as getCurrentUserEmail,ge as getErrorMessage,Ae as handleCrudifyError,ie as isTokenExpired,p as logger,fe as parseApiError,ye as parseJavaScriptError,me as parseTransactionError,Fe as secureLocalStorage,Oe as secureSessionStorage,j as translateError,Q as translateErrorCode,X as translateErrorCodes,J as translationService,be as useAuth,Te as useAutoGenerate,pe as useCrudify,nr as useCrudifyInitializer,Ne as useCrudifyWithNotifications,Ue as useData,Me as useFileUpload,se as useGlobalNotification,re as useSession,g as useSessionContext,Y as useTranslations,Le as useUserData,Ce as useUserProfile,v as validateInternalRedirect};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocios/crudify-ui",
3
- "version": "5.0.20",
3
+ "version": "5.0.26",
4
4
  "engines": {
5
5
  "node": ">=24.12.0"
6
6
  },
package/vitest.config.ts CHANGED
@@ -17,7 +17,7 @@ export default defineConfig({
17
17
  coverage: {
18
18
  provider: "v8",
19
19
  reporter: ["text", "json", "html"],
20
- exclude: ["node_modules/", "src/__tests__/", "dist/", "**/*.d.ts", "**/*.config.*", "**/mockData.ts"],
20
+ exclude: ["node_modules/", "src/__tests__/", "dist/", "**/*.d.ts", "**/*.config.*", "**/mockData.ts", "**/testUtils.tsx", "**/testUtils.ts"],
21
21
  },
22
22
  },
23
23
  resolve: {
@@ -1 +0,0 @@
1
- {"result":[{"scriptId":"1245","url":"file:///Users/yamildiego/Projects/current/nocios/CRUDIFY/process/npm-crudify-ui/src/__tests__/setup.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":11746,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":11746,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":735,"endOffset":846,"count":20}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":881,"endOffset":1121,"count":20}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1246,"endOffset":1579,"count":0}],"isBlockCoverage":false},{"functionName":"IntersectionObserver","ranges":[{"startOffset":1650,"endOffset":1669,"count":0}],"isBlockCoverage":false},{"functionName":"disconnect","ranges":[{"startOffset":1672,"endOffset":1690,"count":0}],"isBlockCoverage":false},{"functionName":"observe","ranges":[{"startOffset":1693,"endOffset":1708,"count":0}],"isBlockCoverage":false},{"functionName":"takeRecords","ranges":[{"startOffset":1711,"endOffset":1745,"count":0}],"isBlockCoverage":false},{"functionName":"unobserve","ranges":[{"startOffset":1748,"endOffset":1765,"count":0}],"isBlockCoverage":false},{"functionName":"digest","ranges":[{"startOffset":1864,"endOffset":2087,"count":0}],"isBlockCoverage":false},{"functionName":"importKey","ranges":[{"startOffset":2138,"endOffset":2241,"count":0}],"isBlockCoverage":false},{"functionName":"deriveKey","ranges":[{"startOffset":2285,"endOffset":2396,"count":0}],"isBlockCoverage":false},{"functionName":"encrypt","ranges":[{"startOffset":2474,"endOffset":2712,"count":0}],"isBlockCoverage":false},{"functionName":"decrypt","ranges":[{"startOffset":2767,"endOffset":3005,"count":0}],"isBlockCoverage":false},{"functionName":"randomUUID","ranges":[{"startOffset":3082,"endOffset":3146,"count":0}],"isBlockCoverage":false},{"functionName":"getRandomValues","ranges":[{"startOffset":3169,"endOffset":3306,"count":0}],"isBlockCoverage":false}]},{"scriptId":"1561","url":"file:///Users/yamildiego/Projects/current/nocios/CRUDIFY/process/npm-crudify-ui/src/hooks/__tests__/useAutoGenerate.test.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":40741,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":40741,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":352,"endOffset":409,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":830,"endOffset":12867,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":937,"endOffset":972,"count":20}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":987,"endOffset":1022,"count":20}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1054,"endOffset":2532,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1131,"endOffset":1431,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1200,"endOffset":1274,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1494,"endOffset":2091,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1679,"endOffset":1752,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1847,"endOffset":1914,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2159,"endOffset":2526,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2323,"endOffset":2397,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2443,"endOffset":2518,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2560,"endOffset":4974,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2630,"endOffset":3014,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2813,"endOffset":2886,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2932,"endOffset":3006,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3067,"endOffset":3552,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3354,"endOffset":3426,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3472,"endOffset":3544,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3607,"endOffset":4092,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3895,"endOffset":3967,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4013,"endOffset":4084,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4151,"endOffset":4541,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4339,"endOffset":4412,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4458,"endOffset":4533,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4586,"endOffset":4968,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4767,"endOffset":4840,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4886,"endOffset":4960,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5006,"endOffset":7400,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5048,"endOffset":5574,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5263,"endOffset":5336,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5382,"endOffset":5449,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5615,"endOffset":6060,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5763,"endOffset":5836,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5882,"endOffset":5949,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6117,"endOffset":6823,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6314,"endOffset":6387,"count":4}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6433,"endOffset":6500,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6647,"endOffset":6711,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6869,"endOffset":7394,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7067,"endOffset":7140,"count":4}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7186,"endOffset":7258,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7287,"endOffset":7339,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7428,"endOffset":10009,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7483,"endOffset":8172,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7755,"endOffset":7828,"count":4}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7874,"endOffset":7948,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7983,"endOffset":8047,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8236,"endOffset":8678,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8433,"endOffset":8545,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8591,"endOffset":8670,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8727,"endOffset":9463,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9028,"endOffset":9140,"count":4}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9186,"endOffset":9265,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9329,"endOffset":9393,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9511,"endOffset":10003,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9718,"endOffset":9830,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9876,"endOffset":9947,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10043,"endOffset":10637,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10103,"endOffset":10631,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10296,"endOffset":10369,"count":4}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10415,"endOffset":10489,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10546,"endOffset":10623,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10668,"endOffset":11777,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10726,"endOffset":11331,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10800,"endOffset":10856,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10972,"endOffset":11045,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11136,"endOffset":11273,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11384,"endOffset":11771,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11577,"endOffset":11650,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11696,"endOffset":11763,"count":2}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11813,"endOffset":12863,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11873,"endOffset":12857,"count":1},{"startOffset":12292,"endOffset":12851,"count":5}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12603,"endOffset":12669,"count":15}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12719,"endOffset":12800,"count":10}],"isBlockCoverage":true}]},{"scriptId":"1562","url":"file:///Users/yamildiego/Projects/current/nocios/CRUDIFY/process/npm-crudify-ui/src/hooks/useAutoGenerate.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":11027,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":11027,"count":1}],"isBlockCoverage":true},{"functionName":"useAutoGenerate","ranges":[{"startOffset":511,"endOffset":2536,"count":73}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":979,"endOffset":1133,"count":19}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1235,"endOffset":1975,"count":25},{"startOffset":1384,"endOffset":1454,"count":24},{"startOffset":1454,"endOffset":1476,"count":19},{"startOffset":1478,"endOffset":1618,"count":19},{"startOffset":1592,"endOffset":1609,"count":3},{"startOffset":1618,"endOffset":1774,"count":5},{"startOffset":1680,"endOffset":1708,"count":0},{"startOffset":1753,"endOffset":1765,"count":0},{"startOffset":1781,"endOffset":1930,"count":1},{"startOffset":1853,"endOffset":1870,"count":0},{"startOffset":1911,"endOffset":1923,"count":0}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2075,"endOffset":2123,"count":3}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2202,"endOffset":2233,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2274,"endOffset":2411,"count":43},{"startOffset":2300,"endOffset":2309,"count":41},{"startOffset":2310,"endOffset":2335,"count":22},{"startOffset":2337,"endOffset":2407,"count":22}],"isBlockCoverage":true},{"functionName":"get","ranges":[{"startOffset":2641,"endOffset":2672,"count":73}],"isBlockCoverage":true}]}]}
@@ -1 +0,0 @@
1
- {"result":[{"scriptId":"1245","url":"file:///Users/yamildiego/Projects/current/nocios/CRUDIFY/process/npm-crudify-ui/src/__tests__/setup.ts","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":11746,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":11746,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":735,"endOffset":846,"count":35}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":881,"endOffset":1121,"count":35}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1246,"endOffset":1579,"count":0}],"isBlockCoverage":false},{"functionName":"IntersectionObserver","ranges":[{"startOffset":1650,"endOffset":1669,"count":0}],"isBlockCoverage":false},{"functionName":"disconnect","ranges":[{"startOffset":1672,"endOffset":1690,"count":0}],"isBlockCoverage":false},{"functionName":"observe","ranges":[{"startOffset":1693,"endOffset":1708,"count":0}],"isBlockCoverage":false},{"functionName":"takeRecords","ranges":[{"startOffset":1711,"endOffset":1745,"count":0}],"isBlockCoverage":false},{"functionName":"unobserve","ranges":[{"startOffset":1748,"endOffset":1765,"count":0}],"isBlockCoverage":false},{"functionName":"digest","ranges":[{"startOffset":1864,"endOffset":2087,"count":0}],"isBlockCoverage":false},{"functionName":"importKey","ranges":[{"startOffset":2138,"endOffset":2241,"count":0}],"isBlockCoverage":false},{"functionName":"deriveKey","ranges":[{"startOffset":2285,"endOffset":2396,"count":0}],"isBlockCoverage":false},{"functionName":"encrypt","ranges":[{"startOffset":2474,"endOffset":2712,"count":0}],"isBlockCoverage":false},{"functionName":"decrypt","ranges":[{"startOffset":2767,"endOffset":3005,"count":0}],"isBlockCoverage":false},{"functionName":"randomUUID","ranges":[{"startOffset":3082,"endOffset":3146,"count":0}],"isBlockCoverage":false},{"functionName":"getRandomValues","ranges":[{"startOffset":3169,"endOffset":3306,"count":0}],"isBlockCoverage":false}]},{"scriptId":"1565","url":"file:///Users/yamildiego/Projects/current/nocios/CRUDIFY/process/npm-crudify-ui/src/components/__tests__/CrudiaAutoGenerate.test.tsx","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":64734,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":64734,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":356,"endOffset":522,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":390,"endOffset":518,"count":0}],"isBlockCoverage":false},{"functionName":"","ranges":[{"startOffset":1089,"endOffset":26412,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1196,"endOffset":1231,"count":35}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1246,"endOffset":1281,"count":35}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1308,"endOffset":4327,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":1371,"endOffset":2100,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2143,"endOffset":2838,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":2901,"endOffset":3608,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":3640,"endOffset":4321,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4358,"endOffset":5938,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":4418,"endOffset":5124,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5185,"endOffset":5932,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":5970,"endOffset":9107,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6016,"endOffset":6698,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":6740,"endOffset":7457,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":7516,"endOffset":8299,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":8361,"endOffset":9101,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9150,"endOffset":12251,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9727,"endOffset":10636,"count":7}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":9809,"endOffset":10628,"count":7}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":10708,"endOffset":11440,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":11514,"endOffset":12245,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12286,"endOffset":15672,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":12350,"endOffset":13197,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13117,"endOffset":13189,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13253,"endOffset":14006,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":14079,"endOffset":14811,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":14865,"endOffset":15666,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":15707,"endOffset":19022,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":15763,"endOffset":16529,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":16586,"endOffset":17415,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":16671,"endOffset":16974,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":17483,"endOffset":18230,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":18293,"endOffset":19016,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":19057,"endOffset":24866,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":19111,"endOffset":19960,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":20018,"endOffset":20912,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":20973,"endOffset":21807,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":21874,"endOffset":22720,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":22773,"endOffset":23608,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":23668,"endOffset":24860,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":24898,"endOffset":26408,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":24968,"endOffset":25661,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":25720,"endOffset":26402,"count":1}],"isBlockCoverage":true}]},{"scriptId":"1570","url":"file:///Users/yamildiego/Projects/current/nocios/CRUDIFY/process/npm-crudify-ui/src/components/CrudiaAutoGenerate.tsx","functions":[{"functionName":"","ranges":[{"startOffset":0,"endOffset":16827,"count":1}],"isBlockCoverage":true},{"functionName":"","ranges":[{"startOffset":13,"endOffset":16827,"count":1}],"isBlockCoverage":true},{"functionName":"sanitizeHelperText","ranges":[{"startOffset":1198,"endOffset":1416,"count":24}],"isBlockCoverage":true},{"functionName":"SafeHtmlSpan","ranges":[{"startOffset":1439,"endOffset":1761,"count":24}],"isBlockCoverage":true},{"functionName":"CrudiaAutoGenerate","ranges":[{"startOffset":1790,"endOffset":6063,"count":35},{"startOffset":2246,"endOffset":2263,"count":33},{"startOffset":2290,"endOffset":2305,"count":12},{"startOffset":2341,"endOffset":2354,"count":32},{"startOffset":2392,"endOffset":2407,"count":24},{"startOffset":2408,"endOffset":2996,"count":24},{"startOffset":2461,"endOffset":2512,"count":16},{"startOffset":2513,"endOffset":2564,"count":15},{"startOffset":2565,"endOffset":2613,"count":15},{"startOffset":2614,"endOffset":2661,"count":14},{"startOffset":2662,"endOffset":2709,"count":12},{"startOffset":2710,"endOffset":2773,"count":12},{"startOffset":2774,"endOffset":2821,"count":12},{"startOffset":2822,"endOffset":2894,"count":12},{"startOffset":2895,"endOffset":2946,"count":11},{"startOffset":2947,"endOffset":2995,"count":10},{"startOffset":3322,"endOffset":3620,"count":24},{"startOffset":3621,"endOffset":3626,"count":11},{"startOffset":3748,"endOffset":4393,"count":2},{"startOffset":4394,"endOffset":4402,"count":33},{"startOffset":4512,"endOffset":4523,"count":14},{"startOffset":4524,"endOffset":5812,"count":13},{"startOffset":5813,"endOffset":5821,"count":22}],"isBlockCoverage":true},{"functionName":"onSuccess","ranges":[{"startOffset":2161,"endOffset":2202,"count":1}],"isBlockCoverage":true},{"functionName":"handleRegenerate","ranges":[{"startOffset":3025,"endOffset":3107,"count":1}],"isBlockCoverage":true},{"functionName":"get","ranges":[{"startOffset":6171,"endOffset":6205,"count":35}],"isBlockCoverage":true}]}]}