@soramux/node-auth-sdk 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/env.ts","../../src/utils/url-utils.ts","../../src/utils/token-utils.ts","../../src/core/interceptor.ts","../../src/core/api.ts","../../src/utils/env-validator.ts","../../src/core/services.ts","../../src/react/AuthProvider.tsx","#style-inject:#style-inject","../../src/react/components/variables.css","../../src/react/components/components.css","../../src/react/components/Form/BasicInputField.tsx","../../src/react/components/Form/BasicSubmitButton.tsx","../../src/react/components/Form/CardAvatar.tsx","../../src/utils/field-validator.ts","../../src/react/components/SignIn/SignIn.tsx","../../src/react/components/Form/BasicSelectField.tsx","../../src/hooks/useFieldRules.ts","../../src/react/components/Form/DynamicFields.tsx","../../src/react/components/SignUp/SignUp.tsx","../../src/react/components/SignUp/TabbedSignUp.tsx","../../src/react/components/Extra/Copyright.tsx","../../src/react/components/Logout/BasicLogoutButton.tsx","../../src/utils/icons/device-icon-map.tsx","../../src/utils/ua/parse-user-agent.ts","../../src/utils/ua/get-device-info.ts","../../src/utils/date-utils.ts","../../src/react/components/Session/SessionCard.tsx","../../src/react/components/Session/Sessions.tsx","../../src/react/components/Profile/UpdateProfile.tsx","../../src/react/components/Form/EditorForm.tsx"],"names":["resolveEnv","isServer","viteEnv","safeProcessEnv","resolvedProjectId","resolvedApiKey","memoizedEnv","overrides","configure","config","getEnv","env","joinUrl","base","path","cleanBase","cleanPath","ACCESS_EXPIRY_KEY","REFRESH_EXPIRY_KEY","memoryClaims","saveTokenClaims","claims","getTokenClaims","isTokenExpiringSoon","thresholdSeconds","expiryStr","accessExpiryTimestamp","now","e","isRefreshSessionExpired","refreshExpiryTimestamp","clearAuthTokens","getUserInfo","fetchAndSaveClaims","apiInstance","res","error","AuthInterceptor","resJson","data","url","options","shouldAuth","shouldRefresh","finalUrl","Api","baseURL","authBaseURL","response","raw","errorMessage","body","validateProjectKey","createAuthService","email","password","flow_id","custom","params","bodyData","paramsUrl","id","revokeAll","token","new_password","user_id","keys","AuthContext","createContext","AuthProvider","children","projectId","isClient","ready","setReady","useState","isAuthenticated","setIsAuthenticated","useMemo","auth","useEffect","jsx","useAuth","ctx","useContext","styleInject","css","insertAt","head","style","BasicInputField","name","label","placeholder","type","value","onValueChange","onBlur","autoComplete","rulesStatus","submitted","inputRef","isSecretVisible","setIsSecretVisible","hasAnyFailing","r","jsxs","RiEyeCloseLine","RiEyeLine","i","classes","BasicSubmitButton","onSubmit","loading","CardAvatar","mainText","subText","GoPerson","evaluateRules","rules","SignIn","onSuccess","onFailed","signUpRedirect","forgotPasswordRedirect","emailRules","setEmail","setPassword","setSubmitted","loadingSubmit","setLoadingSubmit","emailRef","useRef","passwordRef","v","emailValidation","passwordValidation","emailInvalid","passwordInvalid","Fragment","BasicSelectField","triggerRef","disabled","isOpen","setIsOpen","selectedLabel","setSelectedLabel","containerRef","selected","opt","handleClickOutside","event","handleSelect","optionValue","handleToggle","handleBlur","displayValue","RiArrowDownSLine","useFieldRules","values","fieldsMap","results","rule","evaluateRule","dependentField","fieldValue","operator","compareValue","fieldTitle","passed","message","normalize","val","optionsStr","DynamicFields","fields","acc","field","sortedFields","a","b","FieldRenderer","visibilityResult","isVisible","requiredResult","isRequiredByRules","isRequired","isValueEmpty","statuses","commonProps","s","idx","currentValues","newValue","SignUp","loginRedirect","passwordRules","confirmPassword","setConfirmPassword","dynamicValues","setDynamicValues","confirmPasswordRef","handleDynamicChange","key","prev","confirmPasswordValidation","confirmPasswordInvalid","dynamicInvalid","f","TabbedSignUp","flowIds","rest","activeFlowId","setActiveFlowId","activeFlow","flow","Copyright","size","sizeClass","BasicLogoutButton","setLoading","ImExit","deviceIconMap","FaMobileAlt","FaTabletAlt","FaDesktop","parseUserAgent","userAgent","device","os","browser","UAParser","getDeviceInfo","parsed","normalizeDevice","timeAgo","isoDate","diff","sec","min","hour","day","week","SessionCard","is_current","session_id","user_agent","issued_at","user_ip","onClick","deviceI","DeviceIcon","FaTrashAlt","Sessions","sessions","setSessions","fetchSessions","currentSessionId","handleRevokeASession","sessionToRemove","UpdateProfile","initialValues","submitLabel","setValues","EditorForm","title","description","noFieldsMessage","handleValueChange"],"mappings":"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","file":"react.js","sourcesContent":["export interface TrieOHEnv {\n PROJECT_ID: string;\n API_KEY: string;\n BASE_URL: string;\n}\n\nexport function resolveEnv(): TrieOHEnv {\n const isServer = typeof window === \"undefined\";\n\n const viteEnv = (\n typeof import.meta !== \"undefined\" && import.meta.env\n ? import.meta.env\n : {}\n ) as Partial<ImportMetaEnv>;\n\n const safeProcessEnv: NodeJS.ProcessEnv = \n typeof process !== \"undefined\" ? process.env : {};\n\n const resolvedProjectId =\n viteEnv.VITE_TRIEOH_AUTH_PROJECT_ID ||\n safeProcessEnv.NEXT_PUBLIC_TRIEOH_AUTH_PROJECT_ID ||\n safeProcessEnv.PUBLIC_TRIEOH_AUTH_PROJECT_ID ||\n \"\";\n\n const resolvedApiKey = isServer\n ? (safeProcessEnv.TRIEOH_AUTH_API_KEY || \"\")\n : \"\";\n\n return {\n PROJECT_ID: resolvedProjectId,\n API_KEY: resolvedApiKey,\n BASE_URL: \"https://api.default.com\",\n };\n}\nlet memoizedEnv: TrieOHEnv | null = null;\nlet overrides: Partial<TrieOHEnv> = {};\n\n/**\n * Configure the SDK manually. This will override any environment variables.\n */\nexport function configure(config: Partial<TrieOHEnv>) {\n overrides = { ...overrides, ...config };\n memoizedEnv = null; // Reset memoization to apply new config\n}\n\nfunction getEnv(): TrieOHEnv {\n if (!memoizedEnv) {\n const resolved = resolveEnv();\n memoizedEnv = {\n ...resolved,\n ...overrides,\n };\n }\n return memoizedEnv;\n}\nexport const env: TrieOHEnv = {\n get PROJECT_ID() {\n return getEnv().PROJECT_ID;\n },\n get API_KEY() {\n return getEnv().API_KEY;\n },\n get BASE_URL() {\n return getEnv().BASE_URL;\n },\n};\n","export function joinUrl(base: string, path: string): string {\n if (path.startsWith(\"http\")) return path;\n \n const cleanBase = base.replace(/\\/$/, \"\");\n const cleanPath = path.replace(/^\\//, \"\");\n \n return `${cleanBase}/${cleanPath}`;\n}\n","import type { Api } from \"../core/api\";\n\ninterface TokenClaims {\n sub: {\n id: string;\n email: string;\n session_id: string;\n user_agent: string;\n user_ip: string;\n };\n iss: string;\n exp: number;\n iat: number;\n jti: string;\n}\n\nexport interface AuthTokenClaims {\n access: TokenClaims;\n refresh_expire_date: number;\n}\n\nconst ACCESS_EXPIRY_KEY = \"trieoh_access_expiry\";\nconst REFRESH_EXPIRY_KEY = \"trieoh_refresh_expiry\";\n\n// Stored only in memory\nlet memoryClaims: AuthTokenClaims | null = null;\n\nexport function saveTokenClaims(claims: AuthTokenClaims): void {\n memoryClaims = claims;\n localStorage.setItem(REFRESH_EXPIRY_KEY, String(claims.refresh_expire_date));\n localStorage.setItem(ACCESS_EXPIRY_KEY, String(claims.access.exp));\n console.log(\"[TRIEOH SDK] Token claims saved\");\n}\n\nexport function getTokenClaims(): AuthTokenClaims | null {\n return memoryClaims;\n}\n\nexport function isTokenExpiringSoon(thresholdSeconds: number = 30): boolean {\n try {\n const expiryStr = localStorage.getItem(ACCESS_EXPIRY_KEY);\n if (!expiryStr) return true;\n\n const accessExpiryTimestamp = parseInt(expiryStr, 10);\n const now = Math.floor(Date.now() / 1000);\n const timeUntilExpiry = accessExpiryTimestamp - now;\n \n return timeUntilExpiry <= thresholdSeconds;\n } catch (e) {\n console.warn(\"[TRIEOH SDK] Error reading access expiry date:\", e);\n return true;\n }\n}\n\nexport function isRefreshSessionExpired(): boolean {\n try {\n const expiryStr = localStorage.getItem(REFRESH_EXPIRY_KEY);\n if (!expiryStr) return true;\n\n const refreshExpiryTimestamp = parseInt(expiryStr, 10);\n const now = Math.floor(Date.now() / 1000);\n \n return refreshExpiryTimestamp <= now;\n } catch (e) {\n console.warn(\"[TRIEOH SDK] Error reading refresh expiry date:\", e);\n return true;\n }\n}\n\nexport function isAuthenticated(): boolean {\n const claims = getTokenClaims();\n if (!claims) return false;\n const now = Math.floor(Date.now() / 1000);\n return claims.access.exp > now;\n}\n\nexport function clearAuthTokens(): void {\n memoryClaims = null;\n localStorage.removeItem(ACCESS_EXPIRY_KEY);\n localStorage.removeItem(REFRESH_EXPIRY_KEY);\n console.log(\"[TRIEOH SDK] Auth tokens and claims cleared\");\n}\n\nexport function getUserInfo() {\n const claims = getTokenClaims();\n if (!claims) return null;\n \n return claims.access.sub\n}\n\nexport const fetchAndSaveClaims = async (apiInstance: Api) => {\n try {\n const res = await apiInstance.get<AuthTokenClaims>(\"/sessions/me\",\n { requiresAuth: true }\n );\n \n if (res.success) {\n saveTokenClaims(res.data);\n return res;\n }\n throw new Error(res.message || \"Failed to fetch session claims\");\n } catch (error) {\n console.warn(\"[TRIEOH SDK] fetch claims failed (network/server)\", error);\n throw error;\n }\n};","import { joinUrl } from \"../utils/url-utils\";\nimport {\n clearAuthTokens,\n isRefreshSessionExpired,\n isTokenExpiringSoon,\n saveTokenClaims,\n type AuthTokenClaims\n} from \"../utils/token-utils\";\nimport { env } from \"./env\";\n\n\nexport interface RequestOptions extends RequestInit {\n requiresAuth?: boolean;\n skipRefresh?: boolean;\n}\n\ninterface InterceptorConfig {\n baseURL?: string;\n authBaseURL?: string;\n onTokenRefreshed?: (claims: AuthTokenClaims) => void;\n onRefreshFailed?: (error: Error) => void;\n}\n\nexport class AuthInterceptor {\n private baseURL: string;\n private authBaseURL: string;\n private isRefreshing = false;\n private refreshPromise: Promise<void> | null = null;\n private onTokenRefreshed?: (claims: AuthTokenClaims) => void;\n private onRefreshFailed?: (error: Error) => void;\n\n constructor(config?: InterceptorConfig) {\n this.authBaseURL = config?.authBaseURL || env.BASE_URL;\n this.baseURL = config?.baseURL || this.authBaseURL;\n\n this.onTokenRefreshed = config?.onTokenRefreshed;\n this.onRefreshFailed = config?.onRefreshFailed;\n }\n\n private async fetchClaimsAndSave(): Promise<AuthTokenClaims> {\n const response = await fetch(joinUrl(this.authBaseURL, \"/sessions/me\"), {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n });\n\n const resJson = await response.json();\n\n if (resJson.code !== 200 || !resJson.data) {\n clearAuthTokens();\n throw new Error(resJson.message || \"Failed to fetch session claims after refresh\");\n }\n \n const claims = resJson.data as AuthTokenClaims;\n saveTokenClaims(claims);\n return claims;\n }\n\n private async refreshToken(): Promise<void> {\n if (this.isRefreshing && this.refreshPromise) return this.refreshPromise;\n \n this.isRefreshing = true;\n this.refreshPromise = (async () => {\n let claims: AuthTokenClaims;\n try {\n const response = await fetch(joinUrl(this.authBaseURL, \"/auth/refresh\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n });\n\n const data = await response.json();\n\n if (data.code !== 200) {\n if (data.code !== 503) clearAuthTokens();\n throw new Error(data.message || \"Failed to refresh token\");\n }\n\n claims = await this.fetchClaimsAndSave();\n this.onTokenRefreshed?.(claims);\n console.log(\"[TRIEOH SDK] Token refreshed successfully\");\n } catch (error) {\n console.warn(\"[TRIEOH SDK] Failed to refresh token:\", error);\n clearAuthTokens();\n this.onRefreshFailed?.(error as Error);\n throw error;\n } finally {\n this.isRefreshing = false;\n this.refreshPromise = null;\n }\n })();\n\n return this.refreshPromise;\n }\n\n async beforeRequest(): Promise<void> {\n if(isRefreshSessionExpired()) {\n clearAuthTokens();\n return;\n }\n \n if (isTokenExpiringSoon(30)) {\n console.log(\"[TRIEOH SDK] Token expiring soon, refreshing...\");\n try {\n await this.refreshToken();\n } catch (error) {\n console.warn(\"[TRIEOH SDK] Refresh interceptor failed:\", error);\n }\n }\n }\n\n async fetch(url: string, options?: RequestOptions): Promise<Response> {\n const shouldAuth = options?.requiresAuth !== false;\n const shouldRefresh = !options?.skipRefresh;\n\n if (shouldAuth && shouldRefresh) await this.beforeRequest();\n\n const finalUrl = joinUrl(this.baseURL, url);\n\n return fetch(finalUrl, {\n ...options,\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n }\n}\n\nexport const createAuthInterceptor = (config?: InterceptorConfig) => {\n return new AuthInterceptor(config);\n};\n\nexport const createAuthenticatedFetch = (config?: InterceptorConfig) => {\n const interceptor = new AuthInterceptor(config);\n \n return async (url: string, options?: RequestOptions): Promise<Response> => {\n return interceptor.fetch(url, options);\n };\n};","import { env } from \"./env\";\nimport { AuthInterceptor, type RequestOptions } from \"./interceptor\";\n\n/**\n * Base structure shared by all API responses.\n */\nexport interface BaseResponse {\n module: string;\n message: string;\n timestamp: string;\n code: number;\n}\n\n/**\n * Standardized API Response. \n * Use 'success' to narrow down to the data or error details.\n */\nexport type ApiResponse<T> = \n | (BaseResponse & { success: true; data: T })\n | (BaseResponse & { \n success: false; \n error_id: string; \n trace?: string[]; \n });\n\n/**\n * Internal type for parsing the raw response from the server.\n */\ntype RawApiResponse<T> = BaseResponse & { \n data?: T; \n error_id?: string; \n trace?: string[] \n};\n\n/**\n * Custom error class for API failures.\n * Provides access to the full standardized response.\n */\nexport class ApiError extends Error {\n code: number;\n trace?: string[];\n response: ApiResponse<unknown>;\n\n constructor(response: ApiResponse<unknown>) {\n super(response.message);\n this.name = \"ApiError\";\n this.code = response.code;\n this.trace = !response.success ? response.trace : [];\n this.response = response;\n }\n}\n\nexport class Api {\n private baseURL: string;\n private authInterceptor: AuthInterceptor;\n\n constructor(baseURL?: string, authBaseURL?: string) {\n this.baseURL = baseURL || env.BASE_URL;\n this.authInterceptor = new AuthInterceptor({ \n baseURL: this.baseURL,\n authBaseURL: authBaseURL\n });\n }\n\n private get headers() {\n return { \"Content-Type\": \"application/json\" };\n }\n\n async request<T = unknown>(path: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n try {\n const response = await this.authInterceptor.fetch(path, {\n ...options,\n headers: { ...this.headers, ...(options?.headers ?? {}) },\n });\n\n const raw: RawApiResponse<T> = await response.json().catch(() => ({\n module: \"Client\",\n message: response.statusText || \"Unknown error\",\n timestamp: new Date().toISOString(),\n code: response.status,\n error_id: \"CLIENT_PARSE_ERROR\",\n trace: [\"Failed to parse API response as JSON\"],\n }));\n\n if (!response.ok) {\n return {\n success: false,\n module: raw.module || \"Unknown\",\n message: raw.message || response.statusText || \"An unknown error occurred\",\n timestamp: raw.timestamp || new Date().toISOString(),\n code: raw.code || response.status,\n error_id: raw.error_id || \"UNKNOWN_ERROR\",\n trace: raw.trace,\n };\n }\n\n return {\n success: true,\n module: raw.module,\n message: raw.message,\n timestamp: raw.timestamp,\n code: raw.code,\n data: raw.data as T,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"A network or unknown error occurred.\";\n return {\n success: false,\n module: \"Network\",\n message: errorMessage,\n timestamp: new Date().toISOString(),\n code: 503,\n error_id: \"CLIENT_NETWORK_ERROR\",\n trace: error instanceof Error ? [error.stack || errorMessage] : [errorMessage],\n };\n }\n }\n\n get<T = unknown>(path: string, options?: RequestOptions) {\n return this.request<T>(path, { ...options, method: \"GET\" });\n }\n\n post<T = unknown>(path: string, body?: unknown, options?: RequestOptions) {\n return this.request<T>(path, {\n ...options,\n method: \"POST\",\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n put<T = unknown>(path: string, body?: unknown, options?: RequestOptions) {\n return this.request<T>(path, {\n ...options,\n method: \"PUT\",\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n patch<T = unknown>(path: string, body?: unknown, options?: RequestOptions) {\n return this.request<T>(path, {\n ...options,\n method: \"PATCH\",\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n delete<T = unknown>(path: string, body?: unknown, options?: RequestOptions) {\n return this.request<T>(path, { \n ...options, \n method: \"DELETE\", \n body: body ? JSON.stringify(body) : undefined \n });\n }\n}\n\n/**\n * Creates a fetcher object with all HTTP methods returning standardized ApiResponse.\n * \n * @param config - Optional configuration for the fetcher (baseURL, authBaseURL, etc.)\n * @returns An object with get, post, put, patch, delete, and request methods.\n */\nexport const createFetcher = (config?: { baseURL?: string; authBaseURL?: string }) => {\n const api = new Api(config?.baseURL, config?.authBaseURL);\n\n return {\n request: api.request.bind(api),\n get: api.get.bind(api),\n post: api.post.bind(api),\n put: api.put.bind(api),\n patch: api.patch.bind(api),\n delete: api.delete.bind(api),\n };\n};\n\n/**\n * Creates a simple fetcher function that returns data directly or throws an ApiError on failure.\n * Ideal for Query libraries like TanStack Query.\n * \n * @param config - Optional configuration for the fetcher (baseURL, authBaseURL, etc.)\n * @returns A single fetcher function that returns a Promise of TData.\n */\nexport const createQueryFetcher = (config?: { baseURL?: string; authBaseURL?: string }) => {\n const api = new Api(config?.baseURL, config?.authBaseURL);\n\n return async <TData>(path: string, init?: RequestOptions): Promise<TData> => {\n const response = await api.request<TData>(path, init);\n if (!response.success) throw new ApiError(response);\n return response.data;\n };\n};\n","import { env } from \"../core/env\";\n\nexport const validateProjectKey = () => {\n if (!env.PROJECT_ID || env.PROJECT_ID.trim() === \"\") {\n throw new Error(\n \"[TRIEOH SDK] Project ID is missing. Please set PUBLIC_TRIEOH_AUTH_PROJECT_ID, NEXT_PUBLIC_TRIEOH_AUTH_PROJECT_ID or VITE_TRIEOH_AUTH_PROJECT_ID.\"\n );\n }\n};\n\nexport const validateApiKey = () => {\n if (!env.API_KEY || env.API_KEY.trim() === \"\") {\n throw new Error(\n \"[TRIEOH SDK] Private API Key is missing. This operation requires TRIEOH_AUTH_API_KEY to be set in a server-side environment.\"\n );\n }\n};\n","import type { ProjectFieldDefinitionResultI, FieldValue } from \"../types/fields-types\";\nimport type { SessionI } from \"../types/sessions-types\";\nimport { clearAuthTokens, fetchAndSaveClaims, getUserInfo } from \"../utils/token-utils\";\nimport { validateApiKey, validateProjectKey } from \"../utils/env-validator\";\nimport type { Api } from \"./api\";\nimport { env } from \"./env\";\n\nexport const createAuthService = (apiInstance: Api) => ({\n login: async (email: string, password: string) => {\n const options = { requiresAuth: false };\n if (env.PROJECT_ID) {\n validateProjectKey();\n const url = `/projects/${env.PROJECT_ID}/login`;\n const res = await apiInstance.post<{is_up_to_date: boolean}>(\n url,\n { email, password },\n options\n );\n if(res.success) await fetchAndSaveClaims(apiInstance);\n return res;\n }\n\n const res = await apiInstance.post<{is_up_to_date: boolean}>(\n \"/auth/login\", \n { email, password }, \n options\n );\n if(res.success) await fetchAndSaveClaims(apiInstance);\n return res;\n },\n\n register: (email: string, password: string, flow_id?: string, custom: Record<string, FieldValue> = {}) => {\n const options = { requiresAuth: false };\n if (env.PROJECT_ID) {\n validateProjectKey();\n \n const params = new URLSearchParams(); \n if(flow_id) {\n params.append(\"flow_id\", flow_id);\n params.append(\"schema_type\", \"context\");\n params.append(\"version\", \"1\");\n }\n const bodyData = {...{email, password}, ...flow_id && { custom_fields: custom } };\n const paramsUrl = params.toString() ? `?${params.toString()}` : \"\";\n const url = `/projects/${env.PROJECT_ID}/register${paramsUrl}`;\n return apiInstance.post<string>(url, bodyData, options);\n }\n\n return apiInstance.post<string>(\"/auth/register\", { email, password }, options);\n }, \n \n logout: async () => {\n const res = await apiInstance.post<string>(\"/auth/logout\");\n if(res.success) clearAuthTokens();\n return res;\n },\n\n refresh: async () => {\n const res = await apiInstance.post<{is_up_to_date: boolean}>(\n \"/auth/refresh\",\n undefined,\n { skipRefresh: true }\n );\n if(res.success) await fetchAndSaveClaims(apiInstance);\n return res;\n },\n\n sessions: async () => {\n return apiInstance.get<SessionI[]>(\"/sessions\");\n },\n\n revokeASession: async (id: string) => {\n return apiInstance.delete<string>(`/sessions/${id}`);\n },\n\n revokeSessions: async (revokeAll: boolean = false) => {\n const path = revokeAll ? \"/sessions\" : \"/sessions/others\"\n return apiInstance.delete<string>(path);\n },\n\n refreshProfileInfo: async () => fetchAndSaveClaims(apiInstance),\n\n profile: () => getUserInfo(),\n\n getProfileUpgradeForms: async () => {\n validateProjectKey();\n const url = `/projects/${env.PROJECT_ID}/upgrade-form`;\n return apiInstance.get<ProjectFieldDefinitionResultI>(url);\n },\n\n updateProfile: async (custom: Record<string, FieldValue>) => {\n validateProjectKey();\n const url = `/projects/${env.PROJECT_ID}/metadata`;\n return apiInstance.post<string>(url, { custom_fields: custom });\n },\n\n sendForgotPassword: async (email: string) => {\n const options = { requiresAuth: false };\n if (env.PROJECT_ID) {\n validateProjectKey();\n return apiInstance.post<string>(\n \"/auth/forgot-password\",\n {email, project_id: env.PROJECT_ID}, \n options\n );\n }\n return apiInstance.post<string>(\"/auth/forgot-password\", {email}, options);\n },\n\n resetPassword: async (token: string, new_password: string) => {\n return apiInstance.post<string>(\n `/auth/reset-password?token=${token}`,\n {new_password}, \n { requiresAuth: false }\n );\n },\n\n resendVerifyEmail: async () => {\n return apiInstance.post<string>(\"/auth/verify/resend\");\n },\n\n verifyEmail: async () => {\n return apiInstance.get<string>(\n \"/auth/verify\",\n { requiresAuth: false }\n );\n },\n\n addSubContext: async (user_id: string, data: Record<string, unknown>) => {\n validateProjectKey();\n return apiInstance.post<void>(\n `/projects/${env.PROJECT_ID}/sub-context`,\n { data, user_id }\n );\n },\n\n removeSubContext: async (user_id: string, keys: string[]) => {\n validateProjectKey();\n return apiInstance.delete<void>(\n `/projects/${env.PROJECT_ID}/sub-context`,\n { keys, user_id }\n );\n },\n\n});\n\nexport const createServerAuthService = (apiInstance: Api) => ({\n getProjectLatestRegisterFields: async (flow_id: string) => {\n validateProjectKey();\n validateApiKey();\n\n let url = `/projects/${env.PROJECT_ID}/schemas/lookup/latest`\n const params = new URLSearchParams();\n params.append(\"flow_id\", flow_id);\n params.append(\"schema_type\", \"context\");\n url += `?${params.toString()}`;\n\n return apiInstance.get<ProjectFieldDefinitionResultI>(\n url,\n {\n headers: {\n \"Authorization\": `Bearer ${env.API_KEY}`,\n \"Content-Type\": \"application/json\"\n }\n }\n );\n },\n\n getProjectRegisterFields: async (flow_id: string) => {\n validateProjectKey();\n validateApiKey();\n\n const version = 1;\n let url = `/projects/${env.PROJECT_ID}/schemas/lookup/v${version}`\n const params = new URLSearchParams();\n params.append(\"flow_id\", flow_id);\n params.append(\"schema_type\", \"context\");\n url += `?${params.toString()}`;\n\n return apiInstance.get<ProjectFieldDefinitionResultI>(\n url,\n {\n headers: {\n \"Authorization\": `Bearer ${env.API_KEY}`,\n \"Content-Type\": \"application/json\"\n }\n }\n );\n },\n\n assignRoleByNameToUser: async (user_id: string, role_name: string, scope_id: string | null) => {\n validateProjectKey();\n validateApiKey();\n\n const url = `/projects/${env.PROJECT_ID}/identities/${user_id}/roles/by-name`\n\n return apiInstance.post<void>(\n url,\n { role_name, scope_id },\n {\n headers: {\n \"Authorization\": `Bearer ${env.API_KEY}`,\n \"Content-Type\": \"application/json\"\n }\n }\n );\n },\n\n removeRoleByNameFromUser: async (user_id: string, role_name: string, scope_id: string | null) => {\n validateProjectKey();\n validateApiKey();\n\n const url = `/projects/${env.PROJECT_ID}/identities/${user_id}/roles/by-name`\n\n return apiInstance.delete<void>(\n url,\n { role_name, scope_id },\n {\n headers: {\n \"Authorization\": `Bearer ${env.API_KEY}`,\n \"Content-Type\": \"application/json\"\n }\n }\n );\n },\n});\n","import { createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport { Api } from \"../core/api\";\nimport { createAuthService } from \"../core/services\";\nimport { getTokenClaims } from \"../utils/token-utils\";\nimport { validateProjectKey } from \"../utils/env-validator\";\nimport { configure } from \"../core/env\";\n\ntype AuthContextType = {\n auth: ReturnType<typeof createAuthService>;\n isAuthenticated: boolean;\n isClient?: boolean;\n};\n\nconst AuthContext = createContext<AuthContextType | null>(null);\n\nexport function AuthProvider({\n children,\n baseURL,\n projectId,\n isClient = true,\n}: {\n children: React.ReactNode;\n baseURL?: string;\n projectId?: string;\n isClient?: boolean;\n}) {\n const [ready, setReady] = useState(false);\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n\n // Apply manual configuration if provided\n useMemo(() => {\n if (projectId || baseURL) {\n configure({\n ...(projectId ? { PROJECT_ID: projectId } : {}),\n ...(baseURL ? { BASE_URL: baseURL } : {}),\n });\n }\n }, [projectId, baseURL]);\n\n const apiInstance = useMemo(() => new Api(baseURL), [baseURL]);\n const auth = useMemo(() => createAuthService(apiInstance), [apiInstance]);\n\n useEffect(() => {\n if (isClient) validateProjectKey();\n\n const loadAuthStatus = async () => {\n if(getTokenClaims()) {\n setIsAuthenticated(true);\n setReady(true);\n return;\n }\n console.log(\"[TRIEOH SDK] Attempting to refresh session...\");\n try {\n const res = await auth.refreshProfileInfo();\n if (res.success) {\n setIsAuthenticated(true);\n console.log(\"[TRIEOH SDK] Session restored successfully.\");\n } else {\n setIsAuthenticated(false);\n console.warn(\"[TRIEOH SDK] Session restoration failed/no session.\");\n }\n } catch(error) {\n console.warn(\"[TRIEOH SDK] Unable to verify session (offline?)\");\n setIsAuthenticated(false);\n } finally { setReady(true); }\n }\n loadAuthStatus();\n }, [auth, isClient]);\n\n if (!ready) return null;\n return (\n <AuthContext.Provider value={{ auth, isAuthenticated, isClient }}>\n {children}\n </AuthContext.Provider>\n );\n}\n\nexport function useAuth() {\n const ctx = useContext(AuthContext);\n if (!ctx) throw new Error(\"useAuth must be used inside <AuthProvider>\");\n return ctx;\n}\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"@import\\\"https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap\\\";:root{--trieoh-primary: oklch(.1139 .0789 264.05);--trieoh-secondary: oklch(.7975 .1018 262.7);--trieoh-neutral1: oklch(.9702 0 0);--trieoh-neutral2: oklch(.1944 .0051 248.09);--trieoh-radius-full: 50%;--trieoh-text-sm: .75rem;--trieoh-text-base: .875rem;--trieoh-text-xl: 1.25rem;--trieoh-text-2xl: 1.5rem;--trieoh-text-3xl: 1.875rem;--trieoh-text-6xl: 3.75rem}\\n\")","import styleInject from '#style-inject';styleInject(\".trieoh{font-family:Inter,sans-serif}.trieoh-input{position:relative;width:100%;display:flex;flex-direction:column;gap:.25rem;color:var(--trieoh-neutral2)}.trieoh-input__label{font-size:1rem;font-weight:600}.trieoh-input__container{display:flex;justify-content:space-between;align-items:center;padding:.0625rem .625rem;gap:.625rem;border-bottom:solid .125rem var(--trieoh-neutral2)}.trieoh-input__container--error{border-color:#e53935!important}.trieoh-input__container-field{min-width:10rem;flex:1;font-size:var(--trieoh-text-base);font-weight:300;color:var(--trieoh-neutral2);-webkit-appearance:none;background:none;outline:none;border:none;box-shadow:none!important;padding:.125rem 0}.trieoh-custom-select__wrapper{position:relative;width:100%}.trieoh-custom-select{cursor:pointer;user-select:none;box-sizing:border-box}.trieoh-custom-select.is-disabled{opacity:.5;cursor:not-allowed}.trieoh-custom-select:focus-visible{outline:2px solid var(--trieoh-primary);outline-offset:2px}.trieoh-custom-select__trigger{display:flex;align-items:center;width:100%}.trieoh-custom-select__trigger.placeholder{opacity:.6}.trieoh-custom-select__arrow{transition:transform .2s ease;flex-shrink:0}.trieoh-custom-select__arrow.is-open{transform:rotate(180deg)}.trieoh-custom-select__dropdown{position:absolute;top:calc(100% + .25rem);left:0;right:0;width:100%;box-sizing:border-box;background:var(--trieoh-neutral1);border:solid .125rem var(--trieoh-neutral2);border-radius:.25rem;box-shadow:0 4px 12px #00000026;z-index:1000;max-height:15rem;overflow-y:auto;animation:dropdownSlide .15s ease-out}@keyframes dropdownSlide{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.trieoh-custom-select__options{padding:.25rem 0}.trieoh-custom-select__option{padding:.5rem .625rem;font-size:var(--trieoh-text-base);font-weight:300;color:var(--trieoh-neutral2);cursor:pointer;transition:background-color .15s ease,color .15s ease;outline:none}.trieoh-custom-select__option:hover,.trieoh-custom-select__option:focus-visible{background-color:var(--trieoh-secondary);color:var(--trieoh-neutral2)}.trieoh-custom-select__option.is-selected{background-color:var(--trieoh-secondary);color:var(--trieoh-neutral2);font-weight:500}.trieoh-custom-select.is-open{border-color:var(--trieoh-primary, var(--trieoh-neutral2))}.trieoh-input__container-icon{cursor:pointer;flex-shrink:0;-webkit-user-select:none;user-select:none}.trieoh-input__hint{font-size:.75rem;color:#6b7280;transition:opacity .2s ease-in-out}.trieoh-input__hint .hint-part{transition:color .12s ease,text-decoration .12s ease,opacity .12s ease;opacity:.95;margin:.125rem}.trieoh-input__hint .hint-part.passed{text-decoration:line-through;opacity:.6;color:#10b981}.trieoh-input__hint .hint-part.failed-on-submit{color:#e53935;font-weight:600;opacity:1}.trieoh-button{--trieoh-button-color: var(--trieoh-neutral2);width:100%;height:3.25rem;font-size:var(--trieoh-text-xl);font-weight:600;color:var(--trieoh-button-color);outline:none;background:none;position:relative;overflow:hidden;min-width:10rem;flex-shrink:0;border:.125rem solid var(--trieoh-button-color);cursor:pointer;padding:0 1.5rem;transition:transform .5s}.trieoh-button--all-rounded{border-radius:.25rem}.trieoh-button:hover{transform:scale(102%)}.trieoh-button:active{transform:scale(99%)}.trieoh-button[disabled],.trieoh-button--logout[disabled]{opacity:.6;cursor:not-allowed;transform:none!important}.trieoh-button--loading:after{content:\\\"\\\";position:absolute;top:0;left:-150%;width:150%;height:100%;background:linear-gradient(120deg,transparent 0%,color-mix(in oklab,var(--trieoh-button-color) 40%,white 15%) 40%,transparent 80%);animation:trieoh-shine 1.5s infinite}@keyframes trieoh-shine{0%{left:-150%}to{left:150%}}.trieoh-button--logout{border:none;background:none;cursor:pointer;--trieoh-button-color: oklch(.628 .2577 29.23);display:flex;align-items:end;gap:.25rem;font-size:var(--trieoh-text-base);font-weight:500;color:var(--trieoh-button-color);transition:transform .2s}.trieoh-button--logout:hover{transform:scale(1.05)}.trieoh-button--logout:active{transform:scale(.98)}.trieoh-avacard{display:flex;flex-direction:column;align-items:center}.trieoh-avacard__container{display:flex;justify-content:center;align-items:center;padding:.5rem;background-color:#d9d9d94d;border-radius:var(--trieoh-radius-full);margin-bottom:.625rem}.trieoh-avacard__content{width:64px;height:64px;padding:.625rem;background-color:var(--trieoh-neutral1);border-radius:var(--trieoh-radius-full);box-shadow:0 .25rem 1rem #00000040}.trieoh-avacard__title{text-align:center;font-size:var(--trieoh-text-xl);font-weight:500;margin:0}.trieoh-avacard__sub-title{text-align:center;font-size:.875rem;font-weight:300;opacity:.6}.trieoh-card{display:flex;flex-direction:column;width:100%;max-width:30rem;min-width:15rem;max-height:max(75dvh,32rem);overflow:hidden;gap:1.25rem;align-items:center;background-color:var(--trieoh-neutral1);color:var(--trieoh-neutral2);padding:1.25rem 1.5rem;box-shadow:0 .25rem .25rem #00000040;transition:transform .15s ease}.trieoh-card--full-rounded{border-radius:.25rem}.trieoh-card__fields{width:100%;display:flex;flex-direction:column;gap:.625rem;flex:1 1 auto;overflow-y:auto;margin-bottom:.5rem}.trieoh-card__divider{display:flex;align-items:center;gap:.625rem;width:100%;font-size:var(--trieoh-text-base);font-weight:600;opacity:.6}.trieoh-card__divider hr{flex:1}.trieoh-card__other{font-size:var(--trieoh-text-sm);font-weight:600}.trieoh-card__other span{cursor:pointer;color:var(--trieoh-secondary);transition:color .2s}.trieoh-card__other span:hover{color:var(--trieoh-primary)}.trieoh-card__empty{display:block;padding:1.25rem .75rem;text-align:center;font-weight:400;opacity:.6}.trieoh-copyright{font-size:var(--trieoh-text-xl);font-weight:500}.trieoh-copyright--xs{font-size:var(--trieoh-text-sm)}.trieoh-copyright--sm{font-size:var(--trieoh-text-base)}.trieoh-copyright--md{font-size:var(--trieoh-text-xl)}.trieoh-copyright--lg{font-size:var(--trieoh-text-2xl)}.trieoh-copyright--xl{font-size:var(--trieoh-text-3xl)}.trieoh-copyright--2xl{font-size:var(--trieoh-text-6xl)}.trieoh-sessions{width:100%;min-width:20rem;margin:.5rem;container-type:inline-size;background-color:var(--trieoh-neutral1);color:var(--trieoh-neutral2);padding:1.5rem .5rem;border-radius:.5rem}.trieoh-sessions__header{width:100%;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;gap:1rem;box-sizing:border-box;padding:0 .75rem}.trieoh-sessions__header div{flex:0 1 auto;max-width:25rem}.trieoh-sessions__header div h3{font-weight:600;font-size:var(--trieoh-text-2xl);margin:0;margin-bottom:.25rem}.trieoh-sessions__header div p{font-weight:200;font-size:var(--trieoh-text-base);margin:0}.trieoh-sessions__header button{max-width:14rem;padding:1rem 0;height:auto;font-size:var(--trieoh-text-base)}.trieoh-sessions__content{margin-top:1rem}.trieoh-sessions__empty{display:block;border-top:1px solid rgba(0,0,0,.3);padding:1.25rem .75rem;text-align:center;font-weight:600}.trieoh-session{border-top:1px solid rgba(0,0,0,.3);padding:1.25rem .75rem;color:var(--trieoh-neutral2)}.trieoh-session__content{position:relative;display:flex;flex-direction:column;align-items:center;gap:.5rem;flex:1;text-align:center}.trieoh-session__info{display:flex;flex-direction:column;min-width:0}.trieoh-session__meta{display:inline-flex;flex-direction:column;font-size:var(--trieoh-text-sm);font-weight:200}.trieoh-session h3{font-size:var(--trieoh-text-base);font-weight:600;margin:0}.trieoh-session span strong{color:var(--trieoh-primary);font-weight:400}.trieoh-session__content svg:last-child{position:absolute;top:0;right:0;cursor:pointer;opacity:.6;transition:opacity .2s,transform .15s}.trieoh-session__content svg:last-child:hover{opacity:1;transform:scale(1.05)}.trieoh-session__content svg:last-child:active{transform:scale(.95)}@container (min-width: 640px){.trieoh-sessions__header{justify-content:space-between;text-align:left;gap:2rem}.trieoh-session{flex-direction:row;text-align:left}.trieoh-session__content{flex-direction:row;align-items:center;gap:1rem;text-align:left}.trieoh-session__meta{flex-direction:row;gap:.5rem;align-items:center}}.trieoh-tabbed-signup{width:100%;max-width:30rem;min-width:15rem;background-color:var(--trieoh-neutral1);color:var(--trieoh-neutral2);box-shadow:0 .25rem .25rem #00000040;transition:transform .15s ease}.trieoh-tabbed-signup__header{width:100%;display:flex;justify-content:space-between;gap:.25rem;overflow-x:auto;overflow-y:hidden;padding:.25rem 0;position:relative;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:transparent}.trieoh-tabbed-signup__tab{flex-shrink:0;padding:.875rem 1.5rem;border:none;background:transparent;color:var(--trieoh-neutral2);opacity:.8;font-size:.8125rem;font-weight:500;letter-spacing:.01em;cursor:pointer;position:relative;white-space:nowrap;transition:color .2s ease,opacity .2s ease;border-radius:.375rem .375rem 0 0}.trieoh-tabbed-signup__tab:hover{color:var(--trieoh-primary);opacity:1}.trieoh-tabbed-signup__tab.active{color:var(--trieoh-primary);background:transparent}.trieoh-tabbed-signup__tab.active:after{content:\\\"\\\";position:absolute;bottom:4px;left:1rem;right:1rem;height:2px;background:var(--trieoh-primary);border-radius:2px}.trieoh-tabbed-signup__tab:focus-visible{outline:none;color:var(--trieoh-primary)}.trieoh-tabbed-signup hr{opacity:.5;border-top:1px solid var(--trieoh-primary);margin:0 .5rem;border-radius:1rem}.trieoh-tabbed-signup .trieoh-card{box-shadow:none;background:none;overflow-y:auto;box-sizing:border-box}.trieoh-tabbed-signup__content{width:100%}\\n\")","import { useState } from \"react\";\nimport { RiEyeCloseLine, RiEyeLine } from \"react-icons/ri\";\nimport type { RuleStatus } from \"../../../utils/field-validator\";\n\ninterface BasicInputFieldProps {\n /** The Input ID/Name */\n name: string;\n /** The label text (name of the field) */\n label: string;\n /** The placeholder text (a default text to help the user) */\n placeholder: string;\n /** Input Type */\n type?: \"text\" | \"email\" | \"number\" | \"password\";\n /** Current Input Value */\n value?: string;\n /** Current Input Value On Change */\n onValueChange?: (value: string) => void;\n /** OnBlur event handler */\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n /** AutoComplete */\n autoComplete?: string;\n /** Validations and their results */\n rulesStatus?: RuleStatus[];\n /** Form submission status */\n submitted?: boolean;\n /** Ref to the input element */\n inputRef?: React.Ref<HTMLInputElement>;\n}\n\nexport default function BasicInputField({\n name,\n label,\n placeholder,\n type = \"text\",\n value,\n onValueChange,\n onBlur,\n autoComplete,\n rulesStatus = [],\n submitted = false,\n inputRef,\n}: BasicInputFieldProps) {\n const [isSecretVisible, setIsSecretVisible] = useState(false);\n const hasAnyFailing = rulesStatus.some(r => !r.passed);\n\n return (\n <div className=\"trieoh trieoh-input\">\n <label htmlFor={name} className=\"trieoh-input__label\">\n {label}\n </label>\n <div \n className={\n ((hasAnyFailing && submitted) ? \"trieoh-input__container--error \" : \"\")\n + \"trieoh-input__container\"\n }\n >\n <input \n type={isSecretVisible ? \"text\" : type} \n name={name} \n id={name} \n placeholder={placeholder}\n value={value}\n onChange={(e) => onValueChange && onValueChange(e.target.value)}\n onBlur={onBlur}\n autoComplete={autoComplete}\n aria-invalid={hasAnyFailing && submitted}\n ref={inputRef}\n className=\"trieoh-input__container-field\" \n />\n {type === \"password\" && (\n isSecretVisible ?\n <RiEyeCloseLine \n className=\"trieoh-input__container-icon\"\n size={24}\n onClick={() => setIsSecretVisible(false)} \n />\n :\n <RiEyeLine \n className=\"trieoh-input__container-icon\"\n size={24}\n onClick={() => setIsSecretVisible(true)} \n />\n )\n }\n </div>\n\n <div className=\"trieoh-input__hint\">\n {rulesStatus.map((r, i) => {\n const classes = [\n \"hint-part\",\n r.passed ? \"passed\" : \"\",\n !r.passed && submitted ? \"failed-on-submit\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <p key={r.id ?? i} className={classes}>\n {r.message}\n </p>\n );\n })}\n </div>\n \n </div>\n )\n}","import type { MouseEvent } from \"react\";\n\ninterface BasicSubmitButtonProps {\n /** The label text (Submit Text) */\n label: string;\n /** What will happen when the user click on the button */\n onSubmit: (e: MouseEvent<HTMLButtonElement>) => void;\n /** Is performing the submit */\n loading: boolean;\n}\n\nexport default function BasicSubmitButton({\n label,\n onSubmit,\n loading\n}: BasicSubmitButtonProps) {\n return (\n <button \n type=\"submit\"\n onClick={onSubmit}\n disabled={loading}\n className={\n `trieoh trieoh-button trieoh-button--all-rounded \n ${loading ? \"trieoh-button--loading\" : \"\"}`\n }\n >\n {label}\n </button>\n )\n}","import { GoPerson } from \"react-icons/go\";\n\n\ninterface CardAvatarProps {\n /** The main text */\n mainText: string;\n /** Sub Text that will appear below the main text */\n subText: string;\n}\n\nexport default function CardAvatar({\n mainText,\n subText,\n}: CardAvatarProps) {\n return (\n <div className=\"trieoh trieoh-avacard\">\n <div className=\"trieoh-avacard__container\">\n <GoPerson className=\"trieoh-avacard__content\" size={70} />\n </div>\n <h3 className=\"trieoh-avacard__title\">{mainText}</h3>\n <span className=\"trieoh-avacard__sub-title\">{subText}</span>\n </div>\n )\n}","export type Rule = {\n id?: string;\n message: string;\n test: (value: string) => boolean;\n};\n\nexport type RuleStatus = {\n id?: string;\n message: string;\n passed: boolean;\n};\n\nexport function evaluateRules(rules: Rule[], value: string): RuleStatus[] {\n return rules.map(r => ({ \n id: r.id,\n message: r.message,\n passed: !!r.test(value) \n }));\n}","import { type MouseEvent, useRef, useState } from \"react\";\nimport { useAuth } from \"../../AuthProvider\";\nimport BasicInputField from \"../Form/BasicInputField\";\nimport BasicSubmitButton from \"../Form/BasicSubmitButton\";\nimport CardAvatar from \"../Form/CardAvatar\";\nimport { \n evaluateRules, \n type Rule,\n} from \"../../../utils/field-validator\";\n\nexport interface SignInProps {\n onSuccess?: (is_up_to_date: boolean) => Promise<void>;\n onFailed?: (message: string) => Promise<void>;\n signUpRedirect?:(e: MouseEvent<HTMLSpanElement>) => void;\n forgotPasswordRedirect?: (e: MouseEvent<HTMLSpanElement>) => void;\n emailRules?: Rule[];\n}\n\nexport function SignIn({\n onSuccess,\n onFailed,\n signUpRedirect,\n forgotPasswordRedirect,\n emailRules,\n}: SignInProps) {\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [submitted, setSubmitted] = useState(false);\n const [loadingSubmit, setLoadingSubmit] = useState(false);\n const emailRef = useRef<HTMLInputElement | null>(null);\n const passwordRef = useRef<HTMLInputElement | null>(null);\n const { auth } = useAuth();\n\n const rules: Record<string, Rule[]> = {\n email: emailRules || [\n { message: \"Digite um e-mail válido, ex: exemplo@dominio.com\", test: v => /\\S+@\\S+\\.\\S+/.test(v) },\n ],\n password: [],\n };\n\n const emailValidation = evaluateRules(rules.email, email);\n const passwordValidation = evaluateRules(rules.password, password);\n\n const handleSubmit = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setSubmitted(true);\n\n const emailInvalid = emailValidation.some(r => !r.passed);\n const passwordInvalid = passwordValidation.some(r => !r.passed);\n\n if (emailInvalid) {\n emailRef.current?.focus();\n return;\n }\n if (passwordInvalid) {\n passwordRef.current?.focus();\n return;\n }\n\n setLoadingSubmit(true);\n\n const res = await auth.login(email, password);\n if(res.success && onSuccess) await onSuccess(res.data.is_up_to_date || true);\n else if(onFailed) await onFailed(res.message);\n setLoadingSubmit(false);\n }\n return (\n <form className=\"trieoh trieoh-card trieoh-card--full-rounded\">\n <CardAvatar mainText=\"Faça login na sua conta\" subText=\"Insira seus dados para fazer login\" />\n <div className=\"trieoh-card__fields\">\n <BasicInputField \n label=\"Email\" \n name=\"email\"\n placeholder=\"teste@gmail.com\"\n autoComplete=\"email\"\n type=\"email\"\n value={email}\n onValueChange={setEmail}\n inputRef={emailRef}\n rulesStatus={emailValidation}\n submitted={submitted}\n />\n <BasicInputField \n label=\"Senha\" \n name=\"password\"\n placeholder=\"**********\"\n autoComplete=\"current-password\"\n type=\"password\"\n value={password}\n onValueChange={setPassword}\n inputRef={passwordRef}\n rulesStatus={passwordValidation}\n submitted={submitted}\n />\n </div>\n <BasicSubmitButton label=\"Entrar\" onSubmit={handleSubmit} loading={loadingSubmit}/>\n {forgotPasswordRedirect && (\n <span className=\"trieoh-card__other\" style={{ textAlign: \"center\", cursor: \"pointer\" }}>\n <span onClick={forgotPasswordRedirect}>\n Esqueceu sua senha?\n </span>\n </span>\n )}\n {signUpRedirect && <>\n <div className=\"trieoh-card__divider\">\n <hr />\n OU\n <hr />\n </div>\n <span className=\"trieoh-card__other\">\n {\"Ainda não possui uma conta? \"}\n <span onClick={signUpRedirect}>Cadastra-se</span>\n </span>\n </>}\n </form>\n );\n}\n","import { useState, useRef, useEffect } from \"react\";\nimport { RiArrowDownSLine } from \"react-icons/ri\";\nimport type { RuleStatus } from \"../../../utils/field-validator\";\n\ninterface Option {\n id: string | number;\n value: string;\n label: string;\n}\n\ninterface CustomSelectProps {\n /** The Input ID/Name */\n name: string;\n /** The label text (name of the field) */\n label: string;\n /** The placeholder text (a default text to help the user) */\n placeholder?: string;\n /** Current selected value */\n value?: string;\n /** Available options */\n options: Option[];\n /** Current Value On Change */\n onValueChange?: (value: string) => void;\n /** OnBlur event handler */\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n /** Validations and their results */\n rulesStatus?: RuleStatus[];\n /** Form submission status */\n submitted?: boolean;\n /** Ref to the trigger element */\n triggerRef?: React.Ref<HTMLDivElement>;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport default function BasicSelectField({\n name,\n label,\n placeholder = \"Selecione uma opção\",\n value,\n options,\n onValueChange,\n onBlur,\n rulesStatus = [],\n submitted = false,\n triggerRef,\n disabled = false,\n}: CustomSelectProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState(\"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const hasAnyFailing = rulesStatus.some((r) => !r.passed);\n\n useEffect(() => {\n const selected = options.find((opt) => opt.value === value);\n setSelectedLabel(selected ? selected.label : \"\");\n }, [value, options]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) setIsOpen(false);\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const handleSelect = (optionValue: string) => {\n onValueChange && onValueChange(optionValue);\n setIsOpen(false);\n };\n\n const handleToggle = () => {\n if (!disabled) setIsOpen(!isOpen);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLDivElement> = (e) => {\n if (!containerRef.current?.contains(e.relatedTarget)) onBlur && onBlur(e);\n };\n\n const displayValue = selectedLabel || placeholder;\n\n return (\n <div className=\"trieoh trieoh-input\">\n <label htmlFor={name} className=\"trieoh-input__label\">\n {label}\n </label>\n \n <div className=\"trieoh-custom-select__wrapper\" ref={containerRef}>\n <div\n className={\n (hasAnyFailing && submitted ? \"trieoh-input__container--error \" : \"\") +\n \"trieoh-input__container trieoh-custom-select \" +\n (isOpen ? \"is-open \" : \"\") +\n (disabled ? \"is-disabled \" : \"\")\n }\n onClick={handleToggle}\n onBlur={handleBlur}\n ref={triggerRef}\n id={name}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n >\n <div\n className={\n \"trieoh-input__container-field trieoh-custom-select__trigger \" +\n (!selectedLabel ? \"placeholder\" : \"\")\n }\n >\n {displayValue}\n </div>\n <RiArrowDownSLine\n className={`trieoh-input__container-icon trieoh-custom-select__arrow ${\n isOpen ? \"is-open\" : \"\"\n }`}\n size={24}\n />\n </div>\n\n {isOpen && (\n <div\n className=\"trieoh-custom-select__dropdown\"\n role=\"listbox\"\n aria-label={`Opções para ${label}`}\n >\n <div className=\"trieoh-custom-select__options\">\n {options.map((opt) => (\n <div\n key={opt.id}\n className={`trieoh-custom-select__option ${\n opt.value === value ? \"is-selected\" : \"\"\n }`}\n onClick={() => handleSelect(opt.value)}\n role=\"option\"\n aria-selected={opt.value === value}\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleSelect(opt.value);\n }\n }}\n >\n {opt.label}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n <div className=\"trieoh-input__hint\">\n {rulesStatus.map((r, i) => {\n const classes = [\n \"hint-part\",\n r.passed ? \"passed\" : \"\",\n !r.passed && submitted ? \"failed-on-submit\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <p key={r.id ?? i} className={classes}>\n {r.message}\n </p>\n );\n })}\n </div>\n </div>\n );\n}","import { useMemo } from \"react\";\nimport type { FieldValue, Operator, RuleResultI } from \"../types/fields-types\";\nimport type { RuleStatus } from \"../utils/field-validator\";\n\nexport function useFieldRules(\n rules: RuleResultI[] | undefined,\n values: Record<string, FieldValue>,\n fieldsMap: Record<string, { key: string; title: string }>\n): { \n satisfied: boolean; \n statuses: RuleStatus[] \n} {\n return useMemo(() => {\n if (!rules || rules.length === 0) return { satisfied: true, statuses: [] };\n \n const results = rules.map((rule) => evaluateRule(rule, values, fieldsMap));\n const allPassed = results.every((r) => r.passed);\n\n return {\n satisfied: allPassed,\n statuses: results,\n };\n }, [rules, values, fieldsMap]);\n}\n\nfunction evaluateRule(\n rule: RuleResultI,\n values: Record<string, FieldValue>,\n fieldsMap: Record<string, { key: string; title: string }>\n): RuleStatus {\n const dependentField = fieldsMap[rule.depends_on_field_id];\n \n if (!dependentField) {\n const message = `Campo dependente não encontrado.`;\n return { id: rule.id, message, passed: false };\n }\n\n const fieldValue = values[dependentField.key];\n const operator = rule.operator as Operator;\n const compareValue = rule.value;\n const fieldTitle = dependentField.title;\n\n let passed: boolean;\n let message: string;\n\n const normalize = (val: FieldValue) => (val === undefined || val === null) ? \"\" : String(val);\n\n switch (operator) {\n case \"exists\": {\n passed = fieldValue !== undefined && fieldValue !== null && fieldValue !== \"\";\n message = `O campo \"${fieldTitle}\" deve estar preenchido.`;\n break;\n }\n \n case \"not_exists\": {\n passed = fieldValue === undefined || fieldValue === null || fieldValue === \"\";\n message = `O campo \"${fieldTitle}\" deve estar vazio.`;\n break;\n }\n \n case \"equals\": {\n passed = normalize(fieldValue) === normalize(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser igual a \"${normalize(compareValue)}\".`;\n break;\n }\n \n case \"not_equals\": {\n passed = normalize(fieldValue) !== normalize(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser diferente de \"${normalize(compareValue)}\".`;\n break;\n }\n \n case \"contains\": {\n passed = normalize(fieldValue).includes(normalize(compareValue));\n message = `O campo \"${fieldTitle}\" deve conter \"${normalize(compareValue)}\".`;\n break;\n }\n \n case \"greater_than\": {\n passed = Number(fieldValue) > Number(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser maior que ${normalize(compareValue)}.`;\n break;\n }\n \n case \"greater_than_equal\": {\n passed = Number(fieldValue) >= Number(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser maior ou igual a ${normalize(compareValue)}.`;\n break;\n }\n \n case \"lower_than\": {\n passed = Number(fieldValue) < Number(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser menor que ${normalize(compareValue)}.`;\n break;\n }\n \n case \"lower_than_equal\": {\n passed = Number(fieldValue) <= Number(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser menor ou igual a ${normalize(compareValue)}.`;\n break;\n }\n \n case \"in\": {\n const options = normalize(compareValue).split(\",\").map(v => v.trim());\n passed = options.includes(normalize(fieldValue));\n const optionsStr = options.join(\", \");\n message = `O campo \"${fieldTitle}\" deve ser um dos seguintes: ${optionsStr}.`;\n break;\n }\n \n case \"not_in\": {\n const options = normalize(compareValue).split(\",\").map(v => v.trim());\n passed = !options.includes(normalize(fieldValue));\n const optionsStr = options.join(\", \");\n message = `O campo \"${fieldTitle}\" não pode ser um dos seguintes: ${optionsStr}.`;\n break;\n }\n \n default: {\n passed = false;\n message = `Operador \"${operator}\" desconhecido.`;\n }\n }\n\n return {\n passed,\n id: rule.id,\n message,\n };\n}","import { useMemo } from \"react\";\nimport type { FieldDefinitionResultI, FieldValue } from \"../../../types/fields-types\";\nimport BasicInputField from \"./BasicInputField\";\nimport BasicSelectField from \"./BasicSelectField\";\nimport { useFieldRules } from \"../../../hooks/useFieldRules\";\n\ninterface DynamicFieldsProps {\n fields: FieldDefinitionResultI[];\n values: Record<string, FieldValue>;\n onValueChange: (key: string, value: FieldValue) => void;\n submitted?: boolean;\n}\n\nexport default function DynamicFields({\n fields,\n values,\n onValueChange,\n submitted = false,\n}: DynamicFieldsProps) {\n if (!fields || fields.length === 0) return null;\n\n const fieldsMap = useMemo(() => {\n return fields.reduce((acc, field) => {\n acc[field.id] = { key: field.key, title: field.title };\n if (field.object_id) acc[field.object_id] = { key: field.key, title: field.title };\n return acc;\n }, {} as Record<string, { key: string; title: string }>);\n }, [fields]);\n\n const sortedFields = useMemo(() => {\n return [...fields].sort((a, b) => a.position - b.position);\n }, [fields]);\n\n return (\n <>\n {sortedFields.map((field) => (\n <FieldRenderer\n key={field.id}\n field={field}\n values={values}\n onValueChange={onValueChange}\n submitted={submitted}\n fieldsMap={fieldsMap}\n />\n ))}\n </>\n );\n}\n\ninterface FieldRendererProps {\n field: FieldDefinitionResultI;\n values: Record<string, FieldValue>;\n onValueChange: (key: string, value: FieldValue) => void;\n submitted: boolean;\n fieldsMap: Record<string, { key: string; title: string }>;\n}\n\nfunction FieldRenderer({\n field,\n values,\n onValueChange,\n submitted,\n fieldsMap,\n}: FieldRendererProps) {\n const visibilityResult = useFieldRules(field.visibility_rules, values, fieldsMap);\n const hasVisibilityRules = field.visibility_rules && field.visibility_rules.length > 0;\n const isVisible = !hasVisibilityRules || visibilityResult.satisfied;\n\n const requiredResult = useFieldRules(field.required_rules, values, fieldsMap);\n const hasRequiredRules = field.required_rules && field.required_rules.length > 0;\n const isRequiredByRules = hasRequiredRules && requiredResult.satisfied;\n const isRequired = field.required || isRequiredByRules;\n\n const value = values[field.key] ?? field.default_value ?? \"\";\n const isValueEmpty = value === \"\" || value === undefined || value === null;\n\n const rulesStatus = useMemo(() => {\n const statuses = [];\n\n if (isRequired) statuses.push({ message: `${field.title} é obrigatório.`, passed: !isValueEmpty });\n\n return statuses;\n }, [\n field.title,\n isRequired,\n isValueEmpty,\n ]);\n\n if (!isVisible) return null;\n\n const commonProps = {\n name: field.key,\n label: field.title,\n placeholder: field.placeholder,\n value: String(value),\n submitted: submitted,\n rulesStatus: rulesStatus,\n required: isRequired,\n };\n\n switch (field.type) {\n case \"string\":\n case \"email\":\n return (\n <BasicInputField\n {...commonProps}\n type={field.type === \"email\" ? \"email\" : \"text\"}\n onValueChange={(val) => onValueChange(field.key, val)}\n />\n );\n\n case \"int\":\n return (\n <BasicInputField\n {...commonProps}\n type=\"number\"\n onValueChange={(val) => onValueChange(field.key, val)}\n />\n );\n\n case \"radio\":\n return (\n <div className=\"trieoh trieoh-input\">\n <label className=\"trieoh-input__label\">\n {field.title}\n {isRequired && <span style={{ color: \"#e74c3c\", marginLeft: \"4px\" }}>*</span>}\n </label>\n <div className=\"trieoh-radio-group\" style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {field.options?.map((opt) => (\n <label key={opt.id} style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", cursor: \"pointer\" }}>\n <input\n type=\"radio\"\n name={field.key}\n value={opt.value}\n checked={value === opt.value}\n onChange={(e) => onValueChange(field.key, e.target.value)}\n />\n <span>{opt.label}</span>\n </label>\n ))}\n </div>\n {submitted && rulesStatus\n .filter((s) => !s.passed)\n .map((s, idx) => (\n <span key={idx} style={{ color: \"#e74c3c\", fontSize: \"12px\", marginTop: \"4px\", display: \"block\" }}>\n {s.message}\n </span>\n ))}\n </div>\n );\n\n case \"select\":\n return (\n <BasicSelectField\n {...commonProps}\n options={field.options || []}\n onValueChange={(val) => onValueChange(field.key, val)}\n />\n );\n\n case \"checkbox\": {\n const currentValues = Array.isArray(values[field.key]) \n ? (values[field.key] as string[]) \n : [];\n \n return (\n <div className=\"trieoh trieoh-input\">\n <label className=\"trieoh-input__label\">\n {field.title}\n {isRequired && <span style={{ color: \"#e74c3c\", marginLeft: \"4px\" }}>*</span>}\n </label>\n <div className=\"trieoh-checkbox-group\" style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {field.options?.map((opt) => (\n <label key={opt.id} style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", cursor: \"pointer\" }}>\n <input\n type=\"checkbox\"\n name={field.key}\n value={opt.value}\n checked={currentValues.includes(opt.value)}\n onChange={(e) => {\n const newValue = e.target.checked\n ? [...currentValues, opt.value]\n : currentValues.filter((v) => v !== opt.value);\n onValueChange(field.key, newValue);\n }}\n />\n <span>{opt.label}</span>\n </label>\n ))}\n </div>\n {submitted && rulesStatus\n .filter((s) => !s.passed)\n .map((s, idx) => (\n <span key={idx} style={{ color: \"#e74c3c\", fontSize: \"12px\", marginTop: \"4px\", display: \"block\" }}>\n {s.message}\n </span>\n ))}\n </div>\n );\n }\n\n case \"bool\":\n return (\n <div \n className=\"trieoh trieoh-input\" \n style={{ flexDirection: \"row\", alignItems: \"center\", gap: \"8px\" }}\n >\n <input\n type=\"checkbox\"\n id={field.key}\n name={field.key}\n checked={!!values[field.key]}\n onChange={(e) => onValueChange(field.key, e.target.checked)}\n />\n <label htmlFor={field.key} className=\"trieoh-input__label\" style={{ marginBottom: 0 }}>\n {field.title}\n {isRequired && <span style={{ color: \"#e74c3c\", marginLeft: \"4px\" }}>*</span>}\n </label>\n {submitted && rulesStatus\n .filter((s) => !s.passed)\n .map((s, idx) => (\n <span key={idx} style={{ color: \"#e74c3c\", fontSize: \"12px\", marginLeft: \"8px\" }}>\n {s.message}\n </span>\n ))}\n </div>\n );\n\n default: return null;\n }\n}","import { type MouseEvent, useRef, useState } from \"react\";\nimport { useAuth } from \"../../AuthProvider\";\nimport BasicInputField from \"../Form/BasicInputField\";\nimport BasicSubmitButton from \"../Form/BasicSubmitButton\";\nimport CardAvatar from \"../Form/CardAvatar\";\nimport DynamicFields from \"../Form/DynamicFields\";\nimport { \n evaluateRules, \n type Rule,\n} from \"../../../utils/field-validator\";\nimport type { FieldDefinitionResultI, FieldValue } from \"../../../types/fields-types\";\n\nexport interface SignUpProps {\n onSuccess?: () => Promise<void>;\n onFailed?: (message: string, trace?: string[]) => Promise<void>;\n loginRedirect?:(e: MouseEvent<HTMLSpanElement>) => void;\n emailRules?: Rule[];\n passwordRules?: Rule[];\n flow_id?: string;\n fields?: FieldDefinitionResultI[];\n}\n\nexport function SignUp({\n onSuccess,\n onFailed,\n loginRedirect,\n emailRules,\n passwordRules,\n flow_id,\n fields = [],\n}: SignUpProps) {\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [dynamicValues, setDynamicValues] = useState<Record<string, FieldValue>>({});\n const [submitted, setSubmitted] = useState(false);\n const [loadingSubmit, setLoadingSubmit] = useState(false);\n const emailRef = useRef<HTMLInputElement | null>(null);\n const passwordRef = useRef<HTMLInputElement | null>(null);\n const confirmPasswordRef = useRef<HTMLInputElement | null>(null);\n const { auth } = useAuth();\n\n const handleDynamicChange = (key: string, value: FieldValue) => {\n setDynamicValues(prev => ({ ...prev, [key]: value }));\n };\n\n const rules: Record<string, Rule[]> = {\n email: emailRules || [\n { message: \"Digite um e-mail válido, ex: exemplo@dominio.com\", test: v => /\\S+@\\S+\\.\\S+/.test(v) },\n ],\n password: passwordRules || [\n { message: \"Mínimo de 8 caracteres.\", test: v => v.length >= 8 },\n { message: \"Deve conter uma letra maiúscula.\", test: v => /[A-Z]/.test(v) },\n { \n message: \"Inclua pelo menos um caractere especial, ex: ! @ # $ % & * . ,\", \n test: v => /[!@#$%^&*(),.?\":{}|<>_\\-+=~`;/\\\\[\\]]/.test(v) \n },\n { message: \"Deve conter um número.\", test: v => /\\d/.test(v) },\n ],\n confirmPassword: [\n { message: \"Senhas não conferem.\", test: v => v === password },\n ],\n };\n\n const emailValidation = evaluateRules(rules.email, email);\n const passwordValidation = evaluateRules(rules.password, password);\n const confirmPasswordValidation = evaluateRules(rules.confirmPassword, confirmPassword);\n\n const handleSubmit = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setSubmitted(true);\n\n const emailInvalid = emailValidation.some(r => !r.passed);\n const passwordInvalid = passwordValidation.some(r => !r.passed);\n const confirmPasswordInvalid = confirmPasswordValidation.some(r => !r.passed);\n \n // Simple validation for dynamic required fields\n const dynamicInvalid = fields.some(f => f.required && !dynamicValues[f.key]);\n\n if (emailInvalid) {\n emailRef.current?.focus();\n return;\n }\n if (passwordInvalid) {\n passwordRef.current?.focus();\n return;\n }\n if (confirmPasswordInvalid) {\n confirmPasswordRef.current?.focus();\n return;\n }\n if (dynamicInvalid) return;\n \n setLoadingSubmit(true);\n\n const res = await auth.register(email, password, flow_id, dynamicValues);\n if(res.success) {\n if(onSuccess) await onSuccess();\n } else if(onFailed) {\n await onFailed(res.message, res.trace);\n }\n setLoadingSubmit(false);\n }\n return (\n <form className=\"trieoh trieoh-card trieoh-card--full-rounded\">\n <CardAvatar mainText=\"Crie sua conta\" subText=\"Insira seus dados para começar\" />\n <div className=\"trieoh-card__fields\">\n <BasicInputField \n label=\"Email\" \n name=\"email\"\n placeholder=\"teste@gmail.com\"\n autoComplete=\"email\"\n type=\"email\"\n value={email}\n onValueChange={setEmail}\n inputRef={emailRef}\n rulesStatus={emailValidation}\n submitted={submitted}\n />\n <BasicInputField \n label=\"Senha\" \n name=\"password\"\n placeholder=\"**********\"\n autoComplete=\"new-password\"\n type=\"password\"\n value={password}\n onValueChange={setPassword}\n inputRef={passwordRef}\n rulesStatus={passwordValidation}\n submitted={submitted}\n />\n <BasicInputField \n label=\"Confirme a Senha\" \n name=\"confirm-password\"\n placeholder=\"**********\"\n autoComplete=\"new-password\"\n type=\"password\"\n value={confirmPassword}\n onValueChange={setConfirmPassword}\n inputRef={confirmPasswordRef}\n rulesStatus={confirmPasswordValidation}\n submitted={submitted}\n />\n <DynamicFields \n fields={fields} \n values={dynamicValues} \n onValueChange={handleDynamicChange}\n submitted={submitted}\n />\n </div>\n <BasicSubmitButton label=\"Criar Conta\" onSubmit={handleSubmit} loading={loadingSubmit}/>\n {loginRedirect && <>\n <div className=\"trieoh-card__divider\">\n <hr />\n OU\n <hr />\n </div>\n <span className=\"trieoh-card__other\">\n {\"Já possui uma conta? \"}\n <span onClick={loginRedirect}>Entre</span>\n </span>\n </>}\n </form>\n );\n}\n","import { useState } from \"react\";\nimport { SignUp, type SignUpProps } from \"./SignUp\";\nimport type { FieldDefinitionResultI } from \"../../../types/fields-types\";\n\nexport interface TabbedFlowI {\n label: string;\n value: string;\n fields: FieldDefinitionResultI[];\n}\n\nexport interface TabbedSignUpProps extends Omit<SignUpProps, 'flow_id' | 'fields'> {\n flowIds: TabbedFlowI[];\n}\n\nexport function TabbedSignUp({ flowIds, ...rest }: TabbedSignUpProps) {\n const [activeFlowId, setActiveFlowId] = useState<string>(flowIds[0]?.value || \"\");\n\n if (!flowIds || flowIds.length === 0) return null;\n\n const activeFlow = flowIds.find(f => f.value === activeFlowId);\n\n return (\n <div className=\"trieoh-tabbed-signup\">\n <div className=\"trieoh-tabbed-signup__header\">\n {flowIds.map((flow) => (\n <button\n key={flow.value}\n className={`trieoh-tabbed-signup__tab ${activeFlowId === flow.value ? \"active\" : \"\"}`}\n onClick={() => setActiveFlowId(flow.value)}\n type=\"button\"\n aria-selected={activeFlowId === flow.value}\n role=\"tab\"\n >\n <span className=\"trieoh-tabbed-signup__tab-text\">{flow.label}</span>\n </button>\n ))}\n </div>\n <hr />\n\n <div className=\"trieoh-tabbed-signup__content\">\n <SignUp \n key={activeFlowId} \n flow_id={activeFlowId} \n {...rest} \n fields={activeFlow?.fields} \n />\n </div>\n </div>\n );\n}","export interface CopyrightProps {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n}\n\nexport function Copyright({ size }: CopyrightProps) {\n const sizeClass = size ? `trieoh-copyright--${size}` : ''\n\n return (\n <span className={`trieoh trieoh-copyright ${sizeClass}`}>\n © {new Date().getFullYear()} TrieOH\n </span>\n )\n}","import { useState, type MouseEvent } from \"react\";\nimport { useAuth } from \"../../AuthProvider\";\nimport { ImExit } from \"react-icons/im\";\n\nexport interface LogoutProps {\n onSuccess?: () => Promise<void>;\n onFailed?: (message: string) => Promise<void>;\n}\n\nexport function BasicLogoutButton({\n onSuccess,\n onFailed\n}: LogoutProps) {\n const { auth } = useAuth();\n const [loading, setLoading] = useState(false);\n\n const handleLogout = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n if (loading) return;\n\n setLoading(true);\n\n const res = await auth.logout();\n if(res.success && onSuccess) await onSuccess();\n else if(onFailed) await onFailed(res.message);\n setLoading(false);\n }\n return (\n <button\n onClick={handleLogout}\n type=\"button\"\n disabled={loading}\n className={\"trieoh trieoh-button--logout\"}\n >\n <ImExit size={24}/> <span>Log out</span>\n </button>\n )\n}","import {\n FaMobileAlt,\n FaTabletAlt,\n FaDesktop\n} from \"react-icons/fa\";\n\nexport const deviceIconMap = {\n mobile: FaMobileAlt,\n tablet: FaTabletAlt,\n desktop: FaDesktop,\n};","import { UAParser } from \"ua-parser-js\";\n\nexport function parseUserAgent(userAgent: string) {\n const { device, os, browser } = UAParser(userAgent);\n\n return {\n deviceType: device.type ?? \"desktop\",\n os: os.name,\n browser: browser.name,\n };\n}\n","import { parseUserAgent } from \"./parse-user-agent\";\nimport type { DeviceType } from \"./device-types\";\n\nexport interface DeviceInfo {\n device: DeviceType;\n os?: string;\n browser?: string;\n}\n\nexport function getDeviceInfo(userAgent: string): DeviceInfo {\n const parsed = parseUserAgent(userAgent);\n\n return {\n device: normalizeDevice(parsed.deviceType),\n os: parsed.os,\n browser: parsed.browser,\n };\n}\n\nfunction normalizeDevice(type?: string): DeviceType {\n if (!type) return \"desktop\";\n\n switch (type) {\n case \"mobile\":\n return \"mobile\";\n case \"tablet\":\n return \"tablet\";\n default:\n return \"desktop\";\n }\n}","export function timeAgo(isoDate: string): string {\n const diff = Date.now() - new Date(isoDate).getTime();\n const sec = Math.floor(diff / 1000);\n const min = Math.floor(sec / 60);\n const hour = Math.floor(min / 60);\n const day = Math.floor(hour / 24);\n const week = Math.floor(day / 7);\n\n if (sec < 60) return \"agora mesmo\";\n if (min < 60) return `${min} minutos atrás`;\n if (hour < 24) return `${hour} horas atrás`;\n if (day < 7) return `${day} dias atrás`;\n return `${week} semanas atrás`;\n}\n","import { FaTrashAlt } from \"react-icons/fa\";\nimport { deviceIconMap } from \"../../../utils/icons/device-icon-map\";\nimport type { SessionI } from \"../../../types/sessions-types\";\nimport { getDeviceInfo } from \"../../../utils/ua/get-device-info\";\nimport type { MouseEvent } from \"react\";\nimport { timeAgo } from \"../../../utils/date-utils\";\n\ninterface SessionProps extends SessionI {\n is_current: boolean;\n onClick: (e: MouseEvent<SVGElement>, id: string) => void;\n}\n\nexport default function SessionCard({\n is_current,\n session_id,\n user_agent,\n issued_at,\n user_ip,\n onClick\n}: SessionProps) {\n const deviceI = getDeviceInfo(user_agent)\n const DeviceIcon = deviceIconMap[deviceI.device];\n return (\n <div className=\"trieoh-session\">\n <div className=\"trieoh-session__content\">\n <DeviceIcon size={40} />\n <div className=\"trieoh-session__info\">\n <h3>{deviceI.browser} - {deviceI.os}</h3>\n <span className=\"trieoh-session__meta\">\n {is_current && <strong>• Sessão Atual •</strong>}\n <span>{ `${user_ip} - ${timeAgo(issued_at)}` }</span>\n </span>\n </div>\n {!is_current && <FaTrashAlt size={20} color=\"red\" onClick={(e) => onClick(e, session_id)}/>}\n </div>\n </div>\n )\n}","import { type MouseEvent, useEffect, useState } from \"react\";\nimport SessionCard from \"./SessionCard\";\nimport { useAuth } from \"../../AuthProvider\";\nimport type { SessionI } from \"../../../types/sessions-types\";\n\nexport interface SessionsProps {\n /** If true will revoke even the current session */\n revokeAll?: boolean;\n /** What will happen when sessions are revoked */\n onSuccess?: () => Promise<void>;\n}\n\nexport function Sessions({\n revokeAll = false,\n onSuccess,\n}: SessionsProps) {\n const { auth } = useAuth();\n const [loading, setLoading] = useState(false);\n const [sessions, setSessions] = useState<SessionI[]>([]);\n\n const fetchSessions = async () => {\n const res = await auth.sessions();\n if (res.success) {\n const currentSessionId = auth.profile()?.session_id;\n\n const sessions = (res.data).sort((a, b) => {\n if (a.session_id === currentSessionId) return -1;\n if (b.session_id === currentSessionId) return 1;\n return 0;\n });\n setSessions(sessions);\n }\n }\n\n useEffect(() => {\n fetchSessions();\n }, []);\n\n const handleRevokeASession = async (e: MouseEvent<SVGElement>, id: string) => {\n e.preventDefault();\n const sessionToRemove = sessions.find(s => s.session_id === id);\n if(!sessionToRemove) return;\n setSessions(sessions.filter(s => s.session_id !== id))\n try {\n const res = await auth.revokeASession(id);\n if(!res.success) setSessions(prev => [...prev, sessionToRemove]);\n } catch {\n setSessions(prev => [...prev, sessionToRemove]);\n }\n }\n\n const handleRevokeSessions = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n if (loading) return;\n setLoading(true);\n\n const res = await auth.revokeSessions(revokeAll);\n const id = auth.profile()?.session_id;\n if(res.success) {\n setSessions(revokeAll ? [] : sessions.filter(s => s.session_id === id));\n if(onSuccess) onSuccess();\n }\n setLoading(false);\n }\n\n return (\n <div className=\"trieoh trieoh-sessions\">\n <div className=\"trieoh-sessions__header\">\n <div>\n <h3>Navegadores e Dispositivos</h3>\n <p>Esses navegadores e dispositivos estão atualmente conectados à sua conta. Remova quaisquer dispositivos não autorizados.</p>\n </div>\n <button \n type=\"submit\"\n onClick={handleRevokeSessions}\n disabled={loading}\n className={\n `trieoh trieoh-button trieoh-button--all-rounded \n ${loading ? \"trieoh-button--loading\" : \"\"}`\n }\n >\n Revogar todas as sessões\n </button>\n </div>\n <div className=\"trieoh-sessions__content\">\n {sessions.length > 0 ? sessions.map(s => (\n <SessionCard \n key={s.session_id} \n {...s} \n is_current={auth.profile()?.session_id === s.session_id}\n onClick={handleRevokeASession}\n />\n )) : <span className=\"trieoh-sessions__empty\">Nenhuma Sessão Disponível</span>}\n </div>\n </div>\n )\n}","import { useState, useEffect, type MouseEvent } from \"react\";\nimport { useAuth } from \"../../AuthProvider\";\nimport BasicSubmitButton from \"../Form/BasicSubmitButton\";\nimport type { FieldDefinitionResultI, FieldValue } from \"../../../types/fields-types\";\nimport DynamicFields from \"../Form/DynamicFields\";\n\nexport interface UpdateProfileProps {\n fields: FieldDefinitionResultI[];\n initialValues?: Record<string, FieldValue>;\n onSuccess?: () => Promise<void>;\n onFailed?: (message: string, trace?: string[]) => Promise<void>;\n submitLabel?: string;\n}\n\nexport function UpdateProfile({\n fields,\n initialValues,\n onSuccess,\n onFailed,\n submitLabel = \"Atualizar Dados\",\n}: UpdateProfileProps) {\n const [values, setValues] = useState<Record<string, FieldValue>>(initialValues || {});\n const [submitted, setSubmitted] = useState(false);\n const [loading, setLoading] = useState(false);\n const { auth } = useAuth();\n\n useEffect(() => {\n if (initialValues) {\n setValues(initialValues);\n }\n }, [initialValues]);\n\n const handleValueChange = (key: string, value: FieldValue) => {\n setValues(prev => ({ ...prev, [key]: value }));\n };\n\n const handleSubmit = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setSubmitted(true);\n\n const invalid = fields.some(f => f.required && !values[f.key]);\n if (invalid) return;\n\n setLoading(true);\n const res = await auth.updateProfile(values);\n if(res.success) {\n if(onSuccess) await onSuccess();\n } else if(onFailed) await onFailed(res.message, res.trace);\n setLoading(false);\n };\n\n return (\n <form className=\"trieoh trieoh-card trieoh-card--full-rounded\">\n <div className=\"trieoh-card__fields\">\n <DynamicFields \n fields={fields}\n values={values}\n onValueChange={handleValueChange}\n submitted={submitted}\n />\n </div>\n <BasicSubmitButton \n label={submitLabel} \n onSubmit={handleSubmit} \n loading={loading}\n />\n </form>\n );\n}\n","import { useState } from \"react\";\nimport type { FieldDefinitionResultI, FieldValue } from \"../../../types/fields-types\";\nimport DynamicFields from \"./DynamicFields\";\n\nexport interface EditorFormProps {\n fields: FieldDefinitionResultI[];\n submitted?: boolean;\n title?: string;\n description?: string;\n noFieldsMessage?: string;\n}\n\nexport function EditorForm({\n fields,\n submitted = false,\n title,\n description,\n noFieldsMessage = \"No fields available\",\n}: EditorFormProps) {\n const [values, setValues] = useState<Record<string, FieldValue>>({});\n\n const handleValueChange = (key: string, value: FieldValue) => {\n setValues((prev) => ({ ...prev, [key]: value }));\n };\n\n return (\n <div \n className=\"trieoh trieoh-card trieoh-card--full-rounded\"\n style={{ gap: '0.25rem' }}\n >\n {(title || description) && (\n <div style={{ width: \"100%\", textAlign: 'center'}}>\n {title && <h3 style={{ margin: 0, fontSize: \"1.25rem\", fontWeight: 600 }}>{title}</h3>}\n {description && <p style={{ margin: \"0.5rem 0 0\", fontSize: \"0.875rem\", opacity: 0.7 }}>{description}</p>}\n <hr style={{ marginTop: \"1rem\", border: 0, borderTop: \"1px solid rgba(0,0,0,0.1)\", marginBottom: \"0.5rem\" }} />\n </div>\n )}\n \n <div className=\"trieoh-card__fields\" >\n {fields && fields.length > 0 ? (\n <DynamicFields \n fields={fields}\n values={values}\n onValueChange={handleValueChange}\n submitted={submitted}\n />\n ) : (\n <div className=\"trieoh-card__empty\">\n {noFieldsMessage}\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}
1
+ {"version":3,"sources":["../../src/core/env.ts","../../src/utils/url-utils.ts","../../src/store/auth-store.ts","../../src/utils/token-utils.ts","../../src/core/interceptor.ts","../../src/core/api.ts","../../src/utils/env-validator.ts","../../src/core/services.ts","../../src/react/AuthProvider.tsx","#style-inject:#style-inject","../../src/react/components/variables.css","../../src/react/components/components.css","../../src/react/components/Form/BasicInputField.tsx","../../src/react/components/Form/BasicSubmitButton.tsx","../../src/react/components/Form/CardAvatar.tsx","../../src/utils/field-validator.ts","../../src/react/components/SignIn/SignIn.tsx","../../src/react/components/Form/BasicSelectField.tsx","../../src/hooks/useFieldRules.ts","../../src/react/components/Form/DynamicFields.tsx","../../src/react/components/SignUp/SignUp.tsx","../../src/react/components/SignUp/TabbedSignUp.tsx","../../src/react/components/Extra/Copyright.tsx","../../src/react/components/Logout/BasicLogoutButton.tsx","../../src/utils/icons/device-icon-map.tsx","../../src/utils/ua/parse-user-agent.ts","../../src/utils/ua/get-device-info.ts","../../src/utils/date-utils.ts","../../src/react/components/Session/SessionCard.tsx","../../src/react/components/Session/Sessions.tsx","../../src/react/components/Profile/UpdateProfile.tsx","../../src/react/components/Form/EditorForm.tsx"],"names":["resolveEnv","isServer","viteEnv","safeProcessEnv","resolvedProjectId","resolvedApiKey","memoizedEnv","overrides","configure","config","getEnv","env","joinUrl","base","path","cleanBase","cleanPath","_state","_listeners","notify","l","authStore","cb","partial","ACCESS_EXPIRY_KEY","REFRESH_EXPIRY_KEY","IS_UP_TO_DATE_KEY","COOKIE_OPTIONS","setCookie","name","value","expires","expiry","removeCookie","memoryClaims","saveTokenClaims","claims","refreshExpiry","accessExpiry","getTokenClaims","isUpToDate","isTokenExpiringSoon","thresholdSeconds","expiryStr","accessExpiryTimestamp","now","thresholdMs","e","isRefreshSessionExpired","refreshExpiryTimestamp","clearAuthTokens","getUserInfo","fetchAndSaveClaims","apiInstance","is_up_to_date","skipRefresh","res","error","exchangeAndSaveClaims","access_token","refresh_token","expiresDate","claimsRes","AuthInterceptor","resJson","data","url","options","shouldAuth","shouldRefresh","finalUrl","Api","baseURL","authBaseURL","onTokenRefreshed","response","raw","errorMessage","body","validateProjectKey","createAuthService","email","password","flow_id","custom","params","bodyData","paramsUrl","id","revokeAll","token","new_password","user_id","keys","AuthContext","createContext","AuthProvider","children","projectId","isClient","ready","setReady","useState","isAuthenticated","upToDate","useSyncExternalStore","prevConfig","useRef","useMemo","rawAuth","auth","args","useEffect","jsx","useAuth","ctx","useContext","styleInject","css","insertAt","head","style","BasicInputField","label","placeholder","type","onValueChange","onBlur","autoComplete","rulesStatus","submitted","inputRef","isSecretVisible","setIsSecretVisible","hasAnyFailing","r","jsxs","RiEyeCloseLine","RiEyeLine","i","classes","BasicSubmitButton","onSubmit","loading","CardAvatar","mainText","subText","GoPerson","evaluateRules","rules","SignIn","onSuccess","onFailed","signUpRedirect","forgotPasswordRedirect","emailRules","setEmail","setPassword","setSubmitted","loadingSubmit","setLoadingSubmit","emailRef","passwordRef","v","emailValidation","passwordValidation","emailInvalid","passwordInvalid","Fragment","BasicSelectField","triggerRef","disabled","isOpen","setIsOpen","selectedLabel","setSelectedLabel","containerRef","selected","opt","handleClickOutside","event","handleSelect","optionValue","handleToggle","handleBlur","displayValue","RiArrowDownSLine","useFieldRules","values","fieldsMap","results","rule","evaluateRule","dependentField","fieldValue","operator","compareValue","fieldTitle","passed","message","normalize","val","optionsStr","DynamicFields","fields","acc","field","sortedFields","a","b","FieldRenderer","visibilityResult","isVisible","requiredResult","isRequiredByRules","isRequired","isValueEmpty","statuses","commonProps","s","idx","currentValues","newValue","SignUp","loginRedirect","passwordRules","confirmPassword","setConfirmPassword","dynamicValues","setDynamicValues","confirmPasswordRef","handleDynamicChange","key","prev","confirmPasswordValidation","confirmPasswordInvalid","dynamicInvalid","f","TabbedSignUp","flowIds","rest","activeFlowId","setActiveFlowId","activeFlow","flow","Copyright","size","sizeClass","BasicLogoutButton","setLoading","ImExit","deviceIconMap","FaMobileAlt","FaTabletAlt","FaDesktop","parseUserAgent","userAgent","device","os","browser","UAParser","getDeviceInfo","parsed","normalizeDevice","timeAgo","isoDate","diff","sec","min","hour","day","week","SessionCard","is_current","session_id","user_agent","issued_at","user_ip","onClick","deviceI","DeviceIcon","FaTrashAlt","Sessions","sessions","setSessions","fetchSessions","currentSessionId","handleRevokeASession","sessionToRemove","UpdateProfile","initialValues","submitLabel","setValues","EditorForm","title","description","noFieldsMessage","handleValueChange"],"mappings":"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","file":"react.js","sourcesContent":["export interface TrieOHEnv {\n PROJECT_ID: string;\n API_KEY: string;\n BASE_URL: string;\n}\n\nexport function resolveEnv(): TrieOHEnv {\n const isServer = typeof window === \"undefined\";\n\n const viteEnv = (\n typeof import.meta !== \"undefined\" && import.meta.env\n ? import.meta.env\n : {}\n ) as Partial<ImportMetaEnv>;\n\n const safeProcessEnv: NodeJS.ProcessEnv = \n typeof process !== \"undefined\" ? process.env : {};\n\n const resolvedProjectId =\n viteEnv.VITE_TRIEOH_AUTH_PROJECT_ID ||\n safeProcessEnv.NEXT_PUBLIC_TRIEOH_AUTH_PROJECT_ID ||\n safeProcessEnv.PUBLIC_TRIEOH_AUTH_PROJECT_ID ||\n \"\";\n\n const resolvedApiKey = isServer\n ? (safeProcessEnv.TRIEOH_AUTH_API_KEY || \"\")\n : \"\";\n\n return {\n PROJECT_ID: resolvedProjectId,\n API_KEY: resolvedApiKey,\n BASE_URL: \"https://api.default.com\",\n };\n}\nlet memoizedEnv: TrieOHEnv | null = null;\nlet overrides: Partial<TrieOHEnv> = {};\n\n/**\n * Configure the SDK manually. This will override any environment variables.\n */\nexport function configure(config: Partial<TrieOHEnv>) {\n overrides = { ...overrides, ...config };\n memoizedEnv = null; // Reset memoization to apply new config\n}\n\nfunction getEnv(): TrieOHEnv {\n if (!memoizedEnv) {\n const resolved = resolveEnv();\n memoizedEnv = {\n ...resolved,\n ...overrides,\n };\n }\n return memoizedEnv;\n}\nexport const env: TrieOHEnv = {\n get PROJECT_ID() {\n return getEnv().PROJECT_ID;\n },\n get API_KEY() {\n return getEnv().API_KEY;\n },\n get BASE_URL() {\n return getEnv().BASE_URL;\n },\n};\n","export function joinUrl(base: string, path: string): string {\n if (path.startsWith(\"http\")) return path;\n \n const cleanBase = base.replace(/\\/$/, \"\");\n const cleanPath = path.replace(/^\\//, \"\");\n \n return `${cleanBase}/${cleanPath}`;\n}\n","// ---- Auth Store ----\ntype AuthState = {\n isAuthenticated: boolean;\n isUpToDate: boolean;\n};\n\nlet _state: AuthState = { isAuthenticated: false, isUpToDate: false };\nconst _listeners = new Set<() => void>();\n\nconst notify = () => _listeners.forEach(l => l());\n\nexport const authStore = {\n subscribe: (cb: () => void) => {\n _listeners.add(cb);\n return () => _listeners.delete(cb);\n },\n getSnapshot: () => _state,\n getServerSnapshot: () => _state,\n set: (partial: Partial<AuthState>) => {\n _state = { ..._state, ...partial };\n notify();\n },\n reset: () => {\n _state = { isAuthenticated: false, isUpToDate: false };\n notify();\n },\n};\n","import type { Api } from \"../core/api\";\nimport { authStore } from \"../store/auth-store\";\n\nexport interface TokenClaims {\n sub: {\n id: string;\n email: string;\n session_id: string;\n user_agent: string;\n user_ip: string;\n project_id: string | null;\n verified_at: string | null;\n is_verified: boolean;\n user_type: \"client\" | \"project\";\n metadata: Record<string, unknown> | null;\n };\n iss: string;\n exp: number;\n iat: number;\n jti: string;\n}\n\nexport interface AuthTokenClaims {\n access_data: TokenClaims;\n refresh_expiry_date: string | number;\n is_up_to_date?: boolean;\n}\n\nconst ACCESS_EXPIRY_KEY = \"trieoh_access_expiry\";\nconst REFRESH_EXPIRY_KEY = \"trieoh_refresh_expiry\";\nconst IS_UP_TO_DATE_KEY = \"trieoh_is_up_to_date\";\n\n// Cookie configuration constants\nconst COOKIE_OPTIONS = \"path=/; secure; samesite=none\";\n\nexport function setCookie(name: string, value: string, expires?: string): void {\n if (typeof window === \"undefined\") return;\n const expiry = expires ? `; expires=${expires}` : \"\";\n document.cookie = `${name}=${value}; ${COOKIE_OPTIONS}${expiry}`;\n}\n\nexport function removeCookie(name: string): void {\n setCookie(name, \"\", \"Thu, 01 Jan 1970 00:00:00 GMT\");\n}\n\n// Stored only in memory\nlet memoryClaims: AuthTokenClaims | null = null;\n\nexport function saveTokenClaims(claims: AuthTokenClaims): void {\n memoryClaims = claims;\n\n const refreshExpiry = new Date(claims.refresh_expiry_date).getTime();\n const accessExpiry = claims.access_data.exp * 1000;\n\n if (isNaN(refreshExpiry)) {\n console.error(\"[TRIEOH SDK] Invalid refresh_expiry_date received:\", claims.refresh_expiry_date);\n } else localStorage.setItem(REFRESH_EXPIRY_KEY, String(refreshExpiry));\n\n if (isNaN(accessExpiry)) {\n console.error(\"[TRIEOH SDK] Invalid access expiry received:\", claims.access_data.exp);\n } else localStorage.setItem(ACCESS_EXPIRY_KEY, String(accessExpiry));\n\n if (claims.is_up_to_date !== undefined) {\n localStorage.setItem(IS_UP_TO_DATE_KEY, String(claims.is_up_to_date));\n }\n\n console.log(\"[TRIEOH SDK] Token claims saved\");\n}\n\nexport function getTokenClaims(): AuthTokenClaims | null {\n if (memoryClaims) return memoryClaims;\n return null;\n}\n\nexport function isUpToDate(): boolean {\n if (memoryClaims?.is_up_to_date !== undefined) return memoryClaims.is_up_to_date;\n const stored = localStorage.getItem(IS_UP_TO_DATE_KEY);\n return stored === \"true\";\n}\n\nexport function isTokenExpiringSoon(thresholdSeconds: number = 30): boolean {\n try {\n const expiryStr = localStorage.getItem(ACCESS_EXPIRY_KEY);\n if (!expiryStr) return true;\n\n const accessExpiryTimestamp = parseInt(expiryStr, 10);\n if (isNaN(accessExpiryTimestamp)) return true;\n\n const now = Date.now();\n const thresholdMs = thresholdSeconds * 1000;\n\n return (accessExpiryTimestamp - now) <= thresholdMs;\n } catch (e) {\n console.warn(\"[TRIEOH SDK] Error reading access expiry date:\", e);\n return true;\n }\n}\n\nexport function isRefreshSessionExpired(thresholdSeconds: number = 10): boolean {\n try {\n const expiryStr = localStorage.getItem(REFRESH_EXPIRY_KEY);\n if (!expiryStr) return true;\n\n const refreshExpiryTimestamp = parseInt(expiryStr, 10);\n if (isNaN(refreshExpiryTimestamp)) return true;\n\n const now = Date.now();\n const thresholdMs = thresholdSeconds * 1000;\n\n return (refreshExpiryTimestamp - now) <= thresholdMs;\n } catch (e) {\n console.warn(\"[TRIEOH SDK] Error reading refresh expiry date:\", e);\n return true;\n }\n}\n\nexport function isAuthenticated(): boolean {\n const expiryStr = localStorage.getItem(ACCESS_EXPIRY_KEY);\n if (!expiryStr) return false;\n const accessExpiryTimestamp = parseInt(expiryStr, 10);\n return accessExpiryTimestamp > Date.now();\n}\n\nexport function clearAuthTokens(): void {\n memoryClaims = null;\n localStorage.removeItem(ACCESS_EXPIRY_KEY);\n localStorage.removeItem(REFRESH_EXPIRY_KEY);\n localStorage.removeItem(IS_UP_TO_DATE_KEY);\n\n removeCookie(\"svc_session\");\n removeCookie(\"refresh_token\");\n\n authStore.reset();\n\n console.log(\"[TRIEOH SDK] Auth tokens and claims cleared\");\n}\n\nexport function getUserInfo() {\n const claims = getTokenClaims();\n if (!claims) return null;\n\n return claims.access_data.sub\n}\n\nexport const fetchAndSaveClaims = async (\n apiInstance: Api,\n is_up_to_date?: boolean,\n skipRefresh?: boolean\n) => {\n try {\n const res = await apiInstance.get<AuthTokenClaims>(\"/sessions/me\",\n { requiresAuth: true, skipRefresh }\n );\n\n if (res.success) {\n const claims = { ...res.data, is_up_to_date: is_up_to_date ?? isUpToDate() };\n saveTokenClaims(claims);\n return { ...res, data: claims };\n }\n throw new Error(res.message || \"Failed to fetch session claims\");\n } catch (error) {\n console.warn(\"[TRIEOH SDK] fetch claims failed (network/server)\", error);\n throw error;\n }\n};\n\nexport const exchangeAndSaveClaims = async (\n apiInstance: Api,\n access_token: string,\n refresh_token: string,\n is_up_to_date: boolean\n) => {\n const res = await apiInstance.post<{ service_session_id: string, expires_at: string }>(\n \"/auth/exchange\",\n undefined,\n {\n requiresAuth: false,\n headers: {\n \"Authorization\": `Bearer ${access_token}`,\n },\n }\n );\n\n if (res.success) {\n const expiresDate = new Date(res.data.expires_at).toUTCString();\n setCookie(\"svc_session\", res.data.service_session_id, expiresDate);\n\n const claimsRes = await fetchAndSaveClaims(apiInstance, is_up_to_date, true);\n\n const refreshExpiry = new Date(claimsRes.data.refresh_expiry_date).toUTCString();\n setCookie(\"refresh_token\", refresh_token, refreshExpiry);\n\n return claimsRes;\n }\n\n throw new Error(res.message || \"Failed to exchange tokens\");\n};","import { joinUrl } from \"../utils/url-utils\";\nimport {\n clearAuthTokens,\n isRefreshSessionExpired,\n isTokenExpiringSoon,\n saveTokenClaims,\n setCookie,\n type AuthTokenClaims\n} from \"../utils/token-utils\";\nimport { env } from \"./env\";\n\n\nexport interface RequestOptions extends RequestInit {\n requiresAuth?: boolean;\n skipRefresh?: boolean;\n}\n\ninterface InterceptorConfig {\n baseURL?: string;\n authBaseURL?: string;\n onTokenRefreshed?: (claims: AuthTokenClaims) => void;\n onRefreshFailed?: (error: Error) => void;\n}\n\nexport class AuthInterceptor {\n private baseURL: string;\n private authBaseURL: string;\n private isRefreshing = false;\n private refreshPromise: Promise<void> | null = null;\n private onTokenRefreshed?: (claims: AuthTokenClaims) => void;\n private onRefreshFailed?: (error: Error) => void;\n\n constructor(config?: InterceptorConfig) {\n this.authBaseURL = config?.authBaseURL || env.BASE_URL;\n this.baseURL = config?.baseURL || this.authBaseURL;\n\n this.onTokenRefreshed = config?.onTokenRefreshed;\n this.onRefreshFailed = config?.onRefreshFailed;\n }\n\n private async fetchClaimsAndSave(is_up_to_date?: boolean): Promise<AuthTokenClaims> {\n const response = await fetch(joinUrl(this.authBaseURL, \"/sessions/me\"), {\n method: \"GET\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n });\n\n const resJson = await response.json();\n\n if (resJson.code !== 200 || !resJson.data) {\n clearAuthTokens();\n throw new Error(resJson.message || \"Failed to fetch session claims after refresh\");\n }\n\n const claims = { ...resJson.data, is_up_to_date } as AuthTokenClaims;\n saveTokenClaims(claims);\n return claims;\n }\n\n private async exchange(access_token: string, refresh_token: string, is_up_to_date: boolean): Promise<AuthTokenClaims> {\n const response = await fetch(joinUrl(this.authBaseURL, \"/auth/exchange\"), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${access_token}`,\n },\n credentials: \"include\",\n });\n\n const res = await response.json();\n\n if (res.code !== 200) {\n clearAuthTokens();\n throw new Error(res.message || \"Failed to exchange tokens for session\");\n }\n\n const expiresDate = new Date(res.data.expires_at).toUTCString();\n setCookie(\"svc_session\", res.data.service_session_id, expiresDate);\n\n const claims = await this.fetchClaimsAndSave(is_up_to_date);\n\n const refreshExpiry = new Date(claims.refresh_expiry_date).toUTCString();\n setCookie(\"refresh_token\", refresh_token, refreshExpiry);\n\n return claims;\n }\n\n private async refreshToken(): Promise<void> {\n if (this.isRefreshing && this.refreshPromise) return this.refreshPromise;\n\n this.isRefreshing = true;\n this.refreshPromise = (async () => {\n try {\n const response = await fetch(joinUrl(this.authBaseURL, \"/auth/refresh\"), {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n });\n\n const data = await response.json();\n\n if (data.code !== 200) {\n if (data.code !== 503) clearAuthTokens();\n throw new Error(data.message || \"Failed to refresh token\");\n }\n\n const { access_token, refresh_token, is_up_to_date } = data.data;\n\n const claims = await this.exchange(access_token, refresh_token, is_up_to_date);\n\n this.onTokenRefreshed?.(claims);\n console.log(\"[TRIEOH SDK] Token refreshed successfully\");\n } catch (error) {\n console.warn(\"[TRIEOH SDK] Failed to refresh token:\", error);\n clearAuthTokens();\n this.onRefreshFailed?.(error as Error);\n throw error;\n } finally {\n this.isRefreshing = false;\n this.refreshPromise = null;\n }\n })();\n\n return this.refreshPromise;\n }\n\n async beforeRequest(): Promise<void> {\n if (isRefreshSessionExpired()) {\n clearAuthTokens();\n return;\n }\n\n if (isTokenExpiringSoon(30)) {\n console.log(\"[TRIEOH SDK] Token expiring soon, refreshing...\");\n try {\n await this.refreshToken();\n } catch (error) {\n console.warn(\"[TRIEOH SDK] Refresh interceptor failed:\", error);\n }\n }\n }\n\n async fetch(url: string, options?: RequestOptions): Promise<Response> {\n const shouldAuth = options?.requiresAuth !== false;\n const shouldRefresh = !options?.skipRefresh;\n\n if (shouldAuth && shouldRefresh) await this.beforeRequest();\n\n const finalUrl = joinUrl(this.baseURL, url);\n\n return fetch(finalUrl, {\n ...options,\n credentials: \"include\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...options?.headers,\n },\n });\n }\n}\n\nexport const createAuthInterceptor = (config?: InterceptorConfig) => {\n return new AuthInterceptor(config);\n};\n\nexport const createAuthenticatedFetch = (config?: InterceptorConfig) => {\n const interceptor = new AuthInterceptor(config);\n\n return async (url: string, options?: RequestOptions): Promise<Response> => {\n return interceptor.fetch(url, options);\n };\n};","import { env } from \"./env\";\nimport { AuthInterceptor, type RequestOptions } from \"./interceptor\";\nimport type { AuthTokenClaims } from \"../utils/token-utils\";\n\n/**\n * Base structure shared by all API responses.\n */\nexport interface BaseResponse {\n module: string;\n message: string;\n timestamp: string;\n code: number;\n}\n\n/**\n * Standardized API Response. \n * Use 'success' to narrow down to the data or error details.\n */\nexport type ApiResponse<T> = \n | (BaseResponse & { success: true; data: T })\n | (BaseResponse & { \n success: false; \n error_id: string; \n trace?: string[]; \n });\n\n/**\n * Internal type for parsing the raw response from the server.\n */\ntype RawApiResponse<T> = BaseResponse & { \n data?: T; \n error_id?: string; \n trace?: string[] \n};\n\n/**\n * Custom error class for API failures.\n * Provides access to the full standardized response.\n */\nexport class ApiError extends Error {\n code: number;\n trace?: string[];\n response: ApiResponse<unknown>;\n\n constructor(response: ApiResponse<unknown>) {\n super(response.message);\n this.name = \"ApiError\";\n this.code = response.code;\n this.trace = !response.success ? response.trace : [];\n this.response = response;\n }\n}\n\nexport class Api {\n private baseURL: string;\n private authInterceptor: AuthInterceptor;\n\n constructor(baseURL?: string, authBaseURL?: string, onTokenRefreshed?: (claims: AuthTokenClaims) => void) {\n this.baseURL = baseURL || env.BASE_URL;\n this.authInterceptor = new AuthInterceptor({ \n baseURL: this.baseURL,\n authBaseURL: authBaseURL,\n onTokenRefreshed\n });\n }\n\n private get headers() {\n return { \"Content-Type\": \"application/json\" };\n }\n\n async request<T = unknown>(path: string, options?: RequestOptions): Promise<ApiResponse<T>> {\n try {\n const response = await this.authInterceptor.fetch(path, {\n ...options,\n headers: { ...this.headers, ...(options?.headers ?? {}) },\n });\n\n const raw: RawApiResponse<T> = await response.json().catch(() => ({\n module: \"Client\",\n message: response.statusText || \"Unknown error\",\n timestamp: new Date().toISOString(),\n code: response.status,\n error_id: \"CLIENT_PARSE_ERROR\",\n trace: [\"Failed to parse API response as JSON\"],\n }));\n\n if (!response.ok) {\n return {\n success: false,\n module: raw.module || \"Unknown\",\n message: raw.message || response.statusText || \"An unknown error occurred\",\n timestamp: raw.timestamp || new Date().toISOString(),\n code: raw.code || response.status,\n error_id: raw.error_id || \"UNKNOWN_ERROR\",\n trace: raw.trace,\n };\n }\n\n return {\n success: true,\n module: raw.module,\n message: raw.message,\n timestamp: raw.timestamp,\n code: raw.code,\n data: raw.data as T,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"A network or unknown error occurred.\";\n return {\n success: false,\n module: \"Network\",\n message: errorMessage,\n timestamp: new Date().toISOString(),\n code: 503,\n error_id: \"CLIENT_NETWORK_ERROR\",\n trace: error instanceof Error ? [error.stack || errorMessage] : [errorMessage],\n };\n }\n }\n\n get<T = unknown>(path: string, options?: RequestOptions) {\n return this.request<T>(path, { ...options, method: \"GET\" });\n }\n\n post<T = unknown>(path: string, body?: unknown, options?: RequestOptions) {\n return this.request<T>(path, {\n ...options,\n method: \"POST\",\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n put<T = unknown>(path: string, body?: unknown, options?: RequestOptions) {\n return this.request<T>(path, {\n ...options,\n method: \"PUT\",\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n patch<T = unknown>(path: string, body?: unknown, options?: RequestOptions) {\n return this.request<T>(path, {\n ...options,\n method: \"PATCH\",\n body: body ? JSON.stringify(body) : undefined,\n });\n }\n\n delete<T = unknown>(path: string, body?: unknown, options?: RequestOptions) {\n return this.request<T>(path, { \n ...options, \n method: \"DELETE\", \n body: body ? JSON.stringify(body) : undefined \n });\n }\n}\n\n/**\n * Creates a fetcher object with all HTTP methods returning standardized ApiResponse.\n * \n * @param config - Optional configuration for the fetcher (baseURL, authBaseURL, etc.)\n * @returns An object with get, post, put, patch, delete, and request methods.\n */\nexport const createFetcher = (config?: { baseURL?: string; authBaseURL?: string }) => {\n const api = new Api(config?.baseURL, config?.authBaseURL);\n\n return {\n request: api.request.bind(api),\n get: api.get.bind(api),\n post: api.post.bind(api),\n put: api.put.bind(api),\n patch: api.patch.bind(api),\n delete: api.delete.bind(api),\n };\n};\n\n/**\n * Creates a simple fetcher function that returns data directly or throws an ApiError on failure.\n * Ideal for Query libraries like TanStack Query.\n * \n * @param config - Optional configuration for the fetcher (baseURL, authBaseURL, etc.)\n * @returns A single fetcher function that returns a Promise of TData.\n */\nexport const createQueryFetcher = (config?: { baseURL?: string; authBaseURL?: string }) => {\n const api = new Api(config?.baseURL, config?.authBaseURL);\n\n return async <TData>(path: string, init?: RequestOptions): Promise<TData> => {\n const response = await api.request<TData>(path, init);\n if (!response.success) throw new ApiError(response);\n return response.data;\n };\n};\n","import { env } from \"../core/env\";\n\nexport const validateProjectKey = () => {\n if (!env.PROJECT_ID || env.PROJECT_ID.trim() === \"\") {\n throw new Error(\n \"[TRIEOH SDK] Project ID is missing. Please set PUBLIC_TRIEOH_AUTH_PROJECT_ID, NEXT_PUBLIC_TRIEOH_AUTH_PROJECT_ID or VITE_TRIEOH_AUTH_PROJECT_ID.\"\n );\n }\n};\n\nexport const validateApiKey = () => {\n if (!env.API_KEY || env.API_KEY.trim() === \"\") {\n throw new Error(\n \"[TRIEOH SDK] Private API Key is missing. This operation requires TRIEOH_AUTH_API_KEY to be set in a server-side environment.\"\n );\n }\n};\n","import type { ProjectFieldDefinitionResultI, FieldValue } from \"../types/fields-types\";\nimport type { SessionI } from \"../types/sessions-types\";\nimport {\n clearAuthTokens,\n exchangeAndSaveClaims,\n fetchAndSaveClaims,\n getUserInfo,\n isUpToDate,\n setCookie\n} from \"../utils/token-utils\";\nimport { validateApiKey, validateProjectKey } from \"../utils/env-validator\";\nimport type { Api, ApiResponse } from \"./api\";\nimport { env } from \"./env\";\n\nexport interface AuthTokens {\n access_token: string;\n refresh_token: string;\n is_up_to_date: boolean;\n}\n\nexport const createAuthService = (apiInstance: Api) => ({\n login: async (email: string, password: string) => {\n const options = { requiresAuth: false };\n let res: ApiResponse<AuthTokens>;\n\n if (env.PROJECT_ID) {\n validateProjectKey();\n const url = `/projects/${env.PROJECT_ID}/login`;\n res = await apiInstance.post<AuthTokens>(\n url,\n { email, password },\n options\n );\n } else {\n res = await apiInstance.post<AuthTokens>(\n \"/auth/login\",\n { email, password },\n options\n );\n }\n\n if (res.success) {\n try {\n const claims = await exchangeAndSaveClaims(\n apiInstance,\n res.data.access_token,\n res.data.refresh_token,\n res.data.is_up_to_date\n );\n return res;\n } catch (error) {\n console.error(\"[TRIEOH SDK] Exchange failed during login:\", error);\n clearAuthTokens();\n return {\n success: false,\n code: 500,\n message: error instanceof Error ? error.message : \"Authentication failed during exchange\"\n } as ApiResponse<AuthTokens>;\n }\n }\n\n return res;\n },\n\n register: (email: string, password: string, flow_id?: string, custom: Record<string, FieldValue> = {}) => {\n const options = { requiresAuth: false };\n if (env.PROJECT_ID) {\n validateProjectKey();\n\n const params = new URLSearchParams();\n if (flow_id) {\n params.append(\"flow_id\", flow_id);\n params.append(\"schema_type\", \"context\");\n params.append(\"version\", \"1\");\n }\n const bodyData = { ...{ email, password }, ...flow_id && { custom_fields: custom } };\n const paramsUrl = params.toString() ? `?${params.toString()}` : \"\";\n const url = `/projects/${env.PROJECT_ID}/register${paramsUrl}`;\n return apiInstance.post<string>(url, bodyData, options);\n }\n\n return apiInstance.post<string>(\"/auth/register\", { email, password }, options);\n },\n\n logout: async () => {\n const res = await apiInstance.post<string>(\"/auth/logout\");\n if (res.success) clearAuthTokens();\n return res;\n },\n\n refresh: async () => {\n const res = await apiInstance.post<AuthTokens>(\n \"/auth/refresh\",\n undefined,\n { skipRefresh: true }\n );\n\n if (res.success) {\n try {\n await exchangeAndSaveClaims(\n apiInstance,\n res.data.access_token,\n res.data.refresh_token,\n res.data.is_up_to_date\n );\n return res;\n } catch (error) {\n console.error(\"[TRIEOH SDK] Exchange failed during refresh:\", error);\n clearAuthTokens();\n return {\n success: false,\n code: 500,\n message: error instanceof Error ? error.message : \"Refresh failed during exchange\"\n } as ApiResponse<AuthTokens>;\n }\n }\n\n return res;\n },\n\n exchange: async (access_token: string) => {\n const res = await apiInstance.post<{ service_session_id: string, expires_at: string }>(\n \"/auth/exchange\",\n undefined,\n {\n requiresAuth: false,\n headers: {\n \"Authorization\": `Bearer ${access_token}`,\n }\n }\n );\n if (res.success) {\n const expiresDate = new Date(res.data.expires_at).toUTCString();\n setCookie(\"svc_session\", res.data.service_session_id, expiresDate);\n await fetchAndSaveClaims(apiInstance, undefined, true);\n }\n return res;\n },\n\n sessions: async () => {\n return apiInstance.get<SessionI[]>(\"/sessions\");\n },\n\n revokeASession: async (id: string) => {\n return apiInstance.delete<string>(`/sessions/${id}`);\n },\n\n revokeSessions: async (revokeAll: boolean = false) => {\n const path = revokeAll ? \"/sessions\" : \"/sessions/others\"\n return apiInstance.delete<string>(path);\n },\n\n refreshProfileInfo: async () => fetchAndSaveClaims(apiInstance),\n\n profile: () => getUserInfo(),\n\n isUpToDate: () => isUpToDate(),\n\n getProfileUpgradeForms: async () => {\n validateProjectKey();\n const url = `/projects/${env.PROJECT_ID}/upgrade-form`;\n return apiInstance.get<ProjectFieldDefinitionResultI>(url);\n },\n\n updateProfile: async (custom: Record<string, FieldValue>) => {\n validateProjectKey();\n const url = `/projects/${env.PROJECT_ID}/metadata`;\n return apiInstance.post<string>(url, { custom_fields: custom });\n },\n\n sendForgotPassword: async (email: string) => {\n const options = { requiresAuth: false };\n if (env.PROJECT_ID) {\n validateProjectKey();\n return apiInstance.post<string>(\n \"/auth/forgot-password\",\n { email, project_id: env.PROJECT_ID },\n options\n );\n }\n return apiInstance.post<string>(\"/auth/forgot-password\", { email }, options);\n },\n\n resetPassword: async (token: string, new_password: string) => {\n return apiInstance.post<string>(\n `/auth/reset-password?token=${token}`,\n { new_password },\n { requiresAuth: false }\n );\n },\n\n resendVerifyEmail: async () => {\n return apiInstance.post<string>(\"/auth/verify/resend\");\n },\n\n verifyEmail: async () => {\n return apiInstance.get<string>(\n \"/auth/verify\",\n { requiresAuth: false }\n );\n },\n\n addSubContext: async (user_id: string, data: Record<string, unknown>) => {\n validateProjectKey();\n return apiInstance.post<void>(\n `/projects/${env.PROJECT_ID}/sub-context`,\n { data, user_id }\n );\n },\n\n removeSubContext: async (user_id: string, keys: string[]) => {\n validateProjectKey();\n return apiInstance.delete<void>(\n `/projects/${env.PROJECT_ID}/sub-context`,\n { keys, user_id }\n );\n },\n\n\n});\n\nexport const createServerAuthService = (apiInstance: Api) => ({\n getProjectLatestRegisterFields: async (flow_id: string) => {\n validateProjectKey();\n validateApiKey();\n\n let url = `/projects/${env.PROJECT_ID}/schemas/lookup/latest`\n const params = new URLSearchParams();\n params.append(\"flow_id\", flow_id);\n params.append(\"schema_type\", \"context\");\n url += `?${params.toString()}`;\n\n return apiInstance.get<ProjectFieldDefinitionResultI>(\n url,\n {\n headers: {\n \"Authorization\": `Bearer ${env.API_KEY}`,\n \"Content-Type\": \"application/json\"\n }\n }\n );\n },\n\n getProjectRegisterFields: async (flow_id: string) => {\n validateProjectKey();\n validateApiKey();\n\n const version = 1;\n let url = `/projects/${env.PROJECT_ID}/schemas/lookup/v${version}`\n const params = new URLSearchParams();\n params.append(\"flow_id\", flow_id);\n params.append(\"schema_type\", \"context\");\n url += `?${params.toString()}`;\n\n return apiInstance.get<ProjectFieldDefinitionResultI>(\n url,\n {\n headers: {\n \"Authorization\": `Bearer ${env.API_KEY}`,\n \"Content-Type\": \"application/json\"\n }\n }\n );\n },\n\n assignRoleByNameToUser: async (user_id: string, role_name: string, scope_id: string | null) => {\n validateProjectKey();\n validateApiKey();\n\n const url = `/projects/${env.PROJECT_ID}/identities/${user_id}/roles/by-name`\n\n return apiInstance.post<void>(\n url,\n { role_name, scope_id },\n {\n headers: {\n \"Authorization\": `Bearer ${env.API_KEY}`,\n \"Content-Type\": \"application/json\"\n }\n }\n );\n },\n\n removeRoleByNameFromUser: async (user_id: string, role_name: string, scope_id: string | null) => {\n validateProjectKey();\n validateApiKey();\n\n const url = `/projects/${env.PROJECT_ID}/identities/${user_id}/roles/by-name`\n\n return apiInstance.delete<void>(\n url,\n { role_name, scope_id },\n {\n headers: {\n \"Authorization\": `Bearer ${env.API_KEY}`,\n \"Content-Type\": \"application/json\"\n }\n }\n );\n },\n});\n","import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore\n} from \"react\";\nimport { Api } from \"../core/api\";\nimport { createAuthService } from \"../core/services\";\nimport { getTokenClaims, isUpToDate } from \"../utils/token-utils\";\nimport { validateProjectKey } from \"../utils/env-validator\";\nimport { configure } from \"../core/env\";\nimport { authStore } from \"../store/auth-store\";\n\ntype AuthContextType = {\n auth: ReturnType<typeof createAuthService>;\n isAuthenticated: boolean;\n isUpToDate: boolean;\n isClient?: boolean;\n};\n\nconst AuthContext = createContext<AuthContextType | null>(null);\n\nexport function AuthProvider({\n children,\n baseURL,\n projectId,\n isClient = true,\n}: {\n children: React.ReactNode;\n baseURL?: string;\n projectId?: string;\n isClient?: boolean;\n}) {\n const [ready, setReady] = useState(false);\n const { isAuthenticated, isUpToDate: upToDate } = useSyncExternalStore(\n authStore.subscribe,\n authStore.getSnapshot,\n authStore.getServerSnapshot,\n );\n\n const prevConfig = useRef({ projectId, baseURL });\n if (prevConfig.current.projectId !== projectId || prevConfig.current.baseURL !== baseURL) {\n configure({\n ...(projectId ? { PROJECT_ID: projectId } : {}),\n ...(baseURL ? { BASE_URL: baseURL } : {}),\n });\n prevConfig.current = { projectId, baseURL };\n }\n\n const apiInstance = useMemo(() => new Api(baseURL, undefined, (claims) => {\n authStore.set({ isUpToDate: claims.is_up_to_date || false });\n }), [baseURL]);\n\n const rawAuth = useMemo(() => createAuthService(apiInstance), [apiInstance]);\n\n const auth = useMemo(() => ({\n ...rawAuth,\n login: async (...args: Parameters<typeof rawAuth.login>) => {\n const res = await rawAuth.login(...args);\n if (res.success) authStore.set({ isAuthenticated: true, isUpToDate: isUpToDate() });\n return res;\n },\n logout: async (...args: Parameters<typeof rawAuth.logout>) => {\n const res = await rawAuth.logout(...args);\n if (res.success) authStore.reset();\n return res;\n },\n refresh: async (...args: Parameters<typeof rawAuth.refresh>) => {\n const res = await rawAuth.refresh(...args);\n if (res.success) authStore.set({ isAuthenticated: true, isUpToDate: isUpToDate() });\n return res;\n },\n }), [rawAuth]);\n\n useEffect(() => {\n if (isClient) validateProjectKey();\n\n const loadAuthStatus = async () => {\n const claims = getTokenClaims();\n if (claims) {\n authStore.set({ isAuthenticated: true, isUpToDate: isUpToDate() });\n setReady(true);\n return;\n }\n\n console.log(\"[TRIEOH SDK] Attempting to refresh session...\");\n try {\n const res = await auth.refreshProfileInfo();\n if (res.success) {\n authStore.set({ isAuthenticated: true, isUpToDate: isUpToDate() });\n console.log(\"[TRIEOH SDK] Session restored successfully.\");\n } else {\n authStore.reset();\n console.warn(\"[TRIEOH SDK] Session restoration failed/no session.\");\n }\n } catch {\n console.warn(\"[TRIEOH SDK] Unable to verify session (offline?)\");\n authStore.reset();\n } finally {\n setReady(true);\n }\n };\n\n loadAuthStatus();\n }, []);\n\n if (!ready) return null;\n\n return (\n <AuthContext.Provider value={{ auth, isAuthenticated, isUpToDate: upToDate, isClient }}>\n {children}\n </AuthContext.Provider>\n );\n}\n\nexport function useAuth() {\n const ctx = useContext(AuthContext);\n if (!ctx) throw new Error(\"useAuth must be used inside <AuthProvider>\");\n return ctx;\n}","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"@import\\\"https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap\\\";:root{--trieoh-primary: oklch(.1139 .0789 264.05);--trieoh-secondary: oklch(.7975 .1018 262.7);--trieoh-neutral1: oklch(.9702 0 0);--trieoh-neutral2: oklch(.1944 .0051 248.09);--trieoh-radius-full: 50%;--trieoh-text-sm: .75rem;--trieoh-text-base: .875rem;--trieoh-text-xl: 1.25rem;--trieoh-text-2xl: 1.5rem;--trieoh-text-3xl: 1.875rem;--trieoh-text-6xl: 3.75rem}\\n\")","import styleInject from '#style-inject';styleInject(\".trieoh{font-family:Inter,sans-serif}.trieoh-input{position:relative;width:100%;display:flex;flex-direction:column;gap:.25rem;color:var(--trieoh-neutral2)}.trieoh-input__label{font-size:1rem;font-weight:600}.trieoh-input__container{display:flex;justify-content:space-between;align-items:center;padding:.0625rem .625rem;gap:.625rem;border-bottom:solid .125rem var(--trieoh-neutral2)}.trieoh-input__container--error{border-color:#e53935!important}.trieoh-input__container-field{min-width:10rem;flex:1;font-size:var(--trieoh-text-base);font-weight:300;color:var(--trieoh-neutral2);-webkit-appearance:none;background:none;outline:none;border:none;box-shadow:none!important;padding:.125rem 0}.trieoh-custom-select__wrapper{position:relative;width:100%}.trieoh-custom-select{cursor:pointer;user-select:none;box-sizing:border-box}.trieoh-custom-select.is-disabled{opacity:.5;cursor:not-allowed}.trieoh-custom-select:focus-visible{outline:2px solid var(--trieoh-primary);outline-offset:2px}.trieoh-custom-select__trigger{display:flex;align-items:center;width:100%}.trieoh-custom-select__trigger.placeholder{opacity:.6}.trieoh-custom-select__arrow{transition:transform .2s ease;flex-shrink:0}.trieoh-custom-select__arrow.is-open{transform:rotate(180deg)}.trieoh-custom-select__dropdown{position:absolute;top:calc(100% + .25rem);left:0;right:0;width:100%;box-sizing:border-box;background:var(--trieoh-neutral1);border:solid .125rem var(--trieoh-neutral2);border-radius:.25rem;box-shadow:0 4px 12px #00000026;z-index:1000;max-height:15rem;overflow-y:auto;animation:dropdownSlide .15s ease-out}@keyframes dropdownSlide{0%{opacity:0;transform:translateY(-.5rem)}to{opacity:1;transform:translateY(0)}}.trieoh-custom-select__options{padding:.25rem 0}.trieoh-custom-select__option{padding:.5rem .625rem;font-size:var(--trieoh-text-base);font-weight:300;color:var(--trieoh-neutral2);cursor:pointer;transition:background-color .15s ease,color .15s ease;outline:none}.trieoh-custom-select__option:hover,.trieoh-custom-select__option:focus-visible{background-color:var(--trieoh-secondary);color:var(--trieoh-neutral2)}.trieoh-custom-select__option.is-selected{background-color:var(--trieoh-secondary);color:var(--trieoh-neutral2);font-weight:500}.trieoh-custom-select.is-open{border-color:var(--trieoh-primary, var(--trieoh-neutral2))}.trieoh-input__container-icon{cursor:pointer;flex-shrink:0;-webkit-user-select:none;user-select:none}.trieoh-input__hint{font-size:.75rem;color:#6b7280;transition:opacity .2s ease-in-out}.trieoh-input__hint .hint-part{transition:color .12s ease,text-decoration .12s ease,opacity .12s ease;opacity:.95;margin:.125rem}.trieoh-input__hint .hint-part.passed{text-decoration:line-through;opacity:.6;color:#10b981}.trieoh-input__hint .hint-part.failed-on-submit{color:#e53935;font-weight:600;opacity:1}.trieoh-button{--trieoh-button-color: var(--trieoh-neutral2);width:100%;height:3.25rem;font-size:var(--trieoh-text-xl);font-weight:600;color:var(--trieoh-button-color);outline:none;background:none;position:relative;overflow:hidden;min-width:10rem;flex-shrink:0;border:.125rem solid var(--trieoh-button-color);cursor:pointer;padding:0 1.5rem;transition:transform .5s}.trieoh-button--all-rounded{border-radius:.25rem}.trieoh-button:hover{transform:scale(102%)}.trieoh-button:active{transform:scale(99%)}.trieoh-button[disabled],.trieoh-button--logout[disabled]{opacity:.6;cursor:not-allowed;transform:none!important}.trieoh-button--loading:after{content:\\\"\\\";position:absolute;top:0;left:-150%;width:150%;height:100%;background:linear-gradient(120deg,transparent 0%,color-mix(in oklab,var(--trieoh-button-color) 40%,white 15%) 40%,transparent 80%);animation:trieoh-shine 1.5s infinite}@keyframes trieoh-shine{0%{left:-150%}to{left:150%}}.trieoh-button--logout{border:none;background:none;cursor:pointer;--trieoh-button-color: oklch(.628 .2577 29.23);display:flex;align-items:end;gap:.25rem;font-size:var(--trieoh-text-base);font-weight:500;color:var(--trieoh-button-color);transition:transform .2s}.trieoh-button--logout:hover{transform:scale(1.05)}.trieoh-button--logout:active{transform:scale(.98)}.trieoh-avacard{display:flex;flex-direction:column;align-items:center}.trieoh-avacard__container{display:flex;justify-content:center;align-items:center;padding:.5rem;background-color:#d9d9d94d;border-radius:var(--trieoh-radius-full);margin-bottom:.625rem}.trieoh-avacard__content{width:64px;height:64px;padding:.625rem;background-color:var(--trieoh-neutral1);border-radius:var(--trieoh-radius-full);box-shadow:0 .25rem 1rem #00000040}.trieoh-avacard__title{text-align:center;font-size:var(--trieoh-text-xl);font-weight:500;margin:0}.trieoh-avacard__sub-title{text-align:center;font-size:.875rem;font-weight:300;opacity:.6}.trieoh-card{display:flex;flex-direction:column;width:100%;max-width:30rem;min-width:15rem;max-height:max(75dvh,32rem);overflow:hidden;gap:1.25rem;align-items:center;background-color:var(--trieoh-neutral1);color:var(--trieoh-neutral2);padding:1.25rem 1.5rem;box-shadow:0 .25rem .25rem #00000040;transition:transform .15s ease}.trieoh-card--full-rounded{border-radius:.25rem}.trieoh-card__fields{width:100%;display:flex;flex-direction:column;gap:.625rem;flex:1 1 auto;overflow-y:auto;margin-bottom:.5rem}.trieoh-card__divider{display:flex;align-items:center;gap:.625rem;width:100%;font-size:var(--trieoh-text-base);font-weight:600;opacity:.6}.trieoh-card__divider hr{flex:1}.trieoh-card__other{font-size:var(--trieoh-text-sm);font-weight:600}.trieoh-card__other span{cursor:pointer;color:var(--trieoh-secondary);transition:color .2s}.trieoh-card__other span:hover{color:var(--trieoh-primary)}.trieoh-card__empty{display:block;padding:1.25rem .75rem;text-align:center;font-weight:400;opacity:.6}.trieoh-copyright{font-size:var(--trieoh-text-xl);font-weight:500}.trieoh-copyright--xs{font-size:var(--trieoh-text-sm)}.trieoh-copyright--sm{font-size:var(--trieoh-text-base)}.trieoh-copyright--md{font-size:var(--trieoh-text-xl)}.trieoh-copyright--lg{font-size:var(--trieoh-text-2xl)}.trieoh-copyright--xl{font-size:var(--trieoh-text-3xl)}.trieoh-copyright--2xl{font-size:var(--trieoh-text-6xl)}.trieoh-sessions{width:100%;min-width:20rem;margin:.5rem;container-type:inline-size;background-color:var(--trieoh-neutral1);color:var(--trieoh-neutral2);padding:1.5rem .5rem;border-radius:.5rem}.trieoh-sessions__header{width:100%;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;text-align:center;gap:1rem;box-sizing:border-box;padding:0 .75rem}.trieoh-sessions__header div{flex:0 1 auto;max-width:25rem}.trieoh-sessions__header div h3{font-weight:600;font-size:var(--trieoh-text-2xl);margin:0;margin-bottom:.25rem}.trieoh-sessions__header div p{font-weight:200;font-size:var(--trieoh-text-base);margin:0}.trieoh-sessions__header button{max-width:14rem;padding:1rem 0;height:auto;font-size:var(--trieoh-text-base)}.trieoh-sessions__content{margin-top:1rem}.trieoh-sessions__empty{display:block;border-top:1px solid rgba(0,0,0,.3);padding:1.25rem .75rem;text-align:center;font-weight:600}.trieoh-session{border-top:1px solid rgba(0,0,0,.3);padding:1.25rem .75rem;color:var(--trieoh-neutral2)}.trieoh-session__content{position:relative;display:flex;flex-direction:column;align-items:center;gap:.5rem;flex:1;text-align:center}.trieoh-session__info{display:flex;flex-direction:column;min-width:0}.trieoh-session__meta{display:inline-flex;flex-direction:column;font-size:var(--trieoh-text-sm);font-weight:200}.trieoh-session h3{font-size:var(--trieoh-text-base);font-weight:600;margin:0}.trieoh-session span strong{color:var(--trieoh-primary);font-weight:400}.trieoh-session__content svg:last-child{position:absolute;top:0;right:0;cursor:pointer;opacity:.6;transition:opacity .2s,transform .15s}.trieoh-session__content svg:last-child:hover{opacity:1;transform:scale(1.05)}.trieoh-session__content svg:last-child:active{transform:scale(.95)}@container (min-width: 640px){.trieoh-sessions__header{justify-content:space-between;text-align:left;gap:2rem}.trieoh-session{flex-direction:row;text-align:left}.trieoh-session__content{flex-direction:row;align-items:center;gap:1rem;text-align:left}.trieoh-session__meta{flex-direction:row;gap:.5rem;align-items:center}}.trieoh-tabbed-signup{width:100%;max-width:30rem;min-width:15rem;background-color:var(--trieoh-neutral1);color:var(--trieoh-neutral2);box-shadow:0 .25rem .25rem #00000040;transition:transform .15s ease}.trieoh-tabbed-signup__header{width:100%;display:flex;justify-content:space-between;gap:.25rem;overflow-x:auto;overflow-y:hidden;padding:.25rem 0;position:relative;-webkit-overflow-scrolling:touch;scrollbar-width:thin;scrollbar-color:transparent}.trieoh-tabbed-signup__tab{flex-shrink:0;padding:.875rem 1.5rem;border:none;background:transparent;color:var(--trieoh-neutral2);opacity:.8;font-size:.8125rem;font-weight:500;letter-spacing:.01em;cursor:pointer;position:relative;white-space:nowrap;transition:color .2s ease,opacity .2s ease;border-radius:.375rem .375rem 0 0}.trieoh-tabbed-signup__tab:hover{color:var(--trieoh-primary);opacity:1}.trieoh-tabbed-signup__tab.active{color:var(--trieoh-primary);background:transparent}.trieoh-tabbed-signup__tab.active:after{content:\\\"\\\";position:absolute;bottom:4px;left:1rem;right:1rem;height:2px;background:var(--trieoh-primary);border-radius:2px}.trieoh-tabbed-signup__tab:focus-visible{outline:none;color:var(--trieoh-primary)}.trieoh-tabbed-signup hr{opacity:.5;border-top:1px solid var(--trieoh-primary);margin:0 .5rem;border-radius:1rem}.trieoh-tabbed-signup .trieoh-card{box-shadow:none;background:none;overflow-y:auto;box-sizing:border-box}.trieoh-tabbed-signup__content{width:100%}\\n\")","import { useState } from \"react\";\nimport { RiEyeCloseLine, RiEyeLine } from \"react-icons/ri\";\nimport type { RuleStatus } from \"../../../utils/field-validator\";\n\ninterface BasicInputFieldProps {\n /** The Input ID/Name */\n name: string;\n /** The label text (name of the field) */\n label: string;\n /** The placeholder text (a default text to help the user) */\n placeholder: string;\n /** Input Type */\n type?: \"text\" | \"email\" | \"number\" | \"password\";\n /** Current Input Value */\n value?: string;\n /** Current Input Value On Change */\n onValueChange?: (value: string) => void;\n /** OnBlur event handler */\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n /** AutoComplete */\n autoComplete?: string;\n /** Validations and their results */\n rulesStatus?: RuleStatus[];\n /** Form submission status */\n submitted?: boolean;\n /** Ref to the input element */\n inputRef?: React.Ref<HTMLInputElement>;\n}\n\nexport default function BasicInputField({\n name,\n label,\n placeholder,\n type = \"text\",\n value,\n onValueChange,\n onBlur,\n autoComplete,\n rulesStatus = [],\n submitted = false,\n inputRef,\n}: BasicInputFieldProps) {\n const [isSecretVisible, setIsSecretVisible] = useState(false);\n const hasAnyFailing = rulesStatus.some(r => !r.passed);\n\n return (\n <div className=\"trieoh trieoh-input\">\n <label htmlFor={name} className=\"trieoh-input__label\">\n {label}\n </label>\n <div \n className={\n ((hasAnyFailing && submitted) ? \"trieoh-input__container--error \" : \"\")\n + \"trieoh-input__container\"\n }\n >\n <input \n type={isSecretVisible ? \"text\" : type} \n name={name} \n id={name} \n placeholder={placeholder}\n value={value}\n onChange={(e) => onValueChange && onValueChange(e.target.value)}\n onBlur={onBlur}\n autoComplete={autoComplete}\n aria-invalid={hasAnyFailing && submitted}\n ref={inputRef}\n className=\"trieoh-input__container-field\" \n />\n {type === \"password\" && (\n isSecretVisible ?\n <RiEyeCloseLine \n className=\"trieoh-input__container-icon\"\n size={24}\n onClick={() => setIsSecretVisible(false)} \n />\n :\n <RiEyeLine \n className=\"trieoh-input__container-icon\"\n size={24}\n onClick={() => setIsSecretVisible(true)} \n />\n )\n }\n </div>\n\n <div className=\"trieoh-input__hint\">\n {rulesStatus.map((r, i) => {\n const classes = [\n \"hint-part\",\n r.passed ? \"passed\" : \"\",\n !r.passed && submitted ? \"failed-on-submit\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <p key={r.id ?? i} className={classes}>\n {r.message}\n </p>\n );\n })}\n </div>\n \n </div>\n )\n}","import type { MouseEvent } from \"react\";\n\ninterface BasicSubmitButtonProps {\n /** The label text (Submit Text) */\n label: string;\n /** What will happen when the user click on the button */\n onSubmit: (e: MouseEvent<HTMLButtonElement>) => void;\n /** Is performing the submit */\n loading: boolean;\n}\n\nexport default function BasicSubmitButton({\n label,\n onSubmit,\n loading\n}: BasicSubmitButtonProps) {\n return (\n <button \n type=\"submit\"\n onClick={onSubmit}\n disabled={loading}\n className={\n `trieoh trieoh-button trieoh-button--all-rounded \n ${loading ? \"trieoh-button--loading\" : \"\"}`\n }\n >\n {label}\n </button>\n )\n}","import { GoPerson } from \"react-icons/go\";\n\n\ninterface CardAvatarProps {\n /** The main text */\n mainText: string;\n /** Sub Text that will appear below the main text */\n subText: string;\n}\n\nexport default function CardAvatar({\n mainText,\n subText,\n}: CardAvatarProps) {\n return (\n <div className=\"trieoh trieoh-avacard\">\n <div className=\"trieoh-avacard__container\">\n <GoPerson className=\"trieoh-avacard__content\" size={70} />\n </div>\n <h3 className=\"trieoh-avacard__title\">{mainText}</h3>\n <span className=\"trieoh-avacard__sub-title\">{subText}</span>\n </div>\n )\n}","export type Rule = {\n id?: string;\n message: string;\n test: (value: string) => boolean;\n};\n\nexport type RuleStatus = {\n id?: string;\n message: string;\n passed: boolean;\n};\n\nexport function evaluateRules(rules: Rule[], value: string): RuleStatus[] {\n return rules.map(r => ({ \n id: r.id,\n message: r.message,\n passed: !!r.test(value) \n }));\n}","import { type MouseEvent, useRef, useState } from \"react\";\nimport { useAuth } from \"../../AuthProvider\";\nimport BasicInputField from \"../Form/BasicInputField\";\nimport BasicSubmitButton from \"../Form/BasicSubmitButton\";\nimport CardAvatar from \"../Form/CardAvatar\";\nimport {\n evaluateRules,\n type Rule,\n} from \"../../../utils/field-validator\";\n\nexport interface SignInProps {\n onSuccess?: () => Promise<void>;\n onFailed?: (message: string) => Promise<void>;\n signUpRedirect?: (e: MouseEvent<HTMLSpanElement>) => void;\n forgotPasswordRedirect?: (e: MouseEvent<HTMLSpanElement>) => void;\n emailRules?: Rule[];\n}\n\nexport function SignIn({\n onSuccess,\n onFailed,\n signUpRedirect,\n forgotPasswordRedirect,\n emailRules,\n}: SignInProps) {\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [submitted, setSubmitted] = useState(false);\n const [loadingSubmit, setLoadingSubmit] = useState(false);\n const emailRef = useRef<HTMLInputElement | null>(null);\n const passwordRef = useRef<HTMLInputElement | null>(null);\n const { auth } = useAuth();\n\n const rules: Record<string, Rule[]> = {\n email: emailRules || [\n { message: \"Digite um e-mail válido, ex: exemplo@dominio.com\", test: v => /\\S+@\\S+\\.\\S+/.test(v) },\n ],\n password: [],\n };\n\n const emailValidation = evaluateRules(rules.email, email);\n const passwordValidation = evaluateRules(rules.password, password);\n\n const handleSubmit = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setSubmitted(true);\n\n const emailInvalid = emailValidation.some(r => !r.passed);\n const passwordInvalid = passwordValidation.some(r => !r.passed);\n\n if (emailInvalid) {\n emailRef.current?.focus();\n return;\n }\n if (passwordInvalid) {\n passwordRef.current?.focus();\n return;\n }\n\n setLoadingSubmit(true);\n\n const res = await auth.login(email, password);\n if (res.success && onSuccess) await onSuccess();\n else if (onFailed) await onFailed(res.message);\n\n setLoadingSubmit(false);\n }\n return (\n <form className=\"trieoh trieoh-card trieoh-card--full-rounded\">\n <CardAvatar mainText=\"Faça login na sua conta\" subText=\"Insira seus dados para fazer login\" />\n <div className=\"trieoh-card__fields\">\n <BasicInputField\n label=\"Email\"\n name=\"email\"\n placeholder=\"teste@gmail.com\"\n autoComplete=\"email\"\n type=\"email\"\n value={email}\n onValueChange={setEmail}\n inputRef={emailRef}\n rulesStatus={emailValidation}\n submitted={submitted}\n />\n <BasicInputField\n label=\"Senha\"\n name=\"password\"\n placeholder=\"**********\"\n autoComplete=\"current-password\"\n type=\"password\"\n value={password}\n onValueChange={setPassword}\n inputRef={passwordRef}\n rulesStatus={passwordValidation}\n submitted={submitted}\n />\n </div>\n <BasicSubmitButton label=\"Entrar\" onSubmit={handleSubmit} loading={loadingSubmit} />\n {forgotPasswordRedirect && (\n <span className=\"trieoh-card__other\" style={{ textAlign: \"center\", cursor: \"pointer\" }}>\n <span onClick={forgotPasswordRedirect}>\n Esqueceu sua senha?\n </span>\n </span>\n )}\n {signUpRedirect && <>\n <div className=\"trieoh-card__divider\">\n <hr />\n OU\n <hr />\n </div>\n <span className=\"trieoh-card__other\">\n {\"Ainda não possui uma conta? \"}\n <span onClick={signUpRedirect}>Cadastra-se</span>\n </span>\n </>}\n </form>\n );\n}\n","import { useState, useRef, useEffect } from \"react\";\nimport { RiArrowDownSLine } from \"react-icons/ri\";\nimport type { RuleStatus } from \"../../../utils/field-validator\";\n\ninterface Option {\n id: string | number;\n value: string;\n label: string;\n}\n\ninterface CustomSelectProps {\n /** The Input ID/Name */\n name: string;\n /** The label text (name of the field) */\n label: string;\n /** The placeholder text (a default text to help the user) */\n placeholder?: string;\n /** Current selected value */\n value?: string;\n /** Available options */\n options: Option[];\n /** Current Value On Change */\n onValueChange?: (value: string) => void;\n /** OnBlur event handler */\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n /** Validations and their results */\n rulesStatus?: RuleStatus[];\n /** Form submission status */\n submitted?: boolean;\n /** Ref to the trigger element */\n triggerRef?: React.Ref<HTMLDivElement>;\n /** Disabled state */\n disabled?: boolean;\n}\n\nexport default function BasicSelectField({\n name,\n label,\n placeholder = \"Selecione uma opção\",\n value,\n options,\n onValueChange,\n onBlur,\n rulesStatus = [],\n submitted = false,\n triggerRef,\n disabled = false,\n}: CustomSelectProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [selectedLabel, setSelectedLabel] = useState(\"\");\n const containerRef = useRef<HTMLDivElement>(null);\n const hasAnyFailing = rulesStatus.some((r) => !r.passed);\n\n useEffect(() => {\n const selected = options.find((opt) => opt.value === value);\n setSelectedLabel(selected ? selected.label : \"\");\n }, [value, options]);\n\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) setIsOpen(false);\n };\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => document.removeEventListener(\"mousedown\", handleClickOutside);\n }, []);\n\n const handleSelect = (optionValue: string) => {\n onValueChange && onValueChange(optionValue);\n setIsOpen(false);\n };\n\n const handleToggle = () => {\n if (!disabled) setIsOpen(!isOpen);\n };\n\n const handleBlur: React.FocusEventHandler<HTMLDivElement> = (e) => {\n if (!containerRef.current?.contains(e.relatedTarget)) onBlur && onBlur(e);\n };\n\n const displayValue = selectedLabel || placeholder;\n\n return (\n <div className=\"trieoh trieoh-input\">\n <label htmlFor={name} className=\"trieoh-input__label\">\n {label}\n </label>\n \n <div className=\"trieoh-custom-select__wrapper\" ref={containerRef}>\n <div\n className={\n (hasAnyFailing && submitted ? \"trieoh-input__container--error \" : \"\") +\n \"trieoh-input__container trieoh-custom-select \" +\n (isOpen ? \"is-open \" : \"\") +\n (disabled ? \"is-disabled \" : \"\")\n }\n onClick={handleToggle}\n onBlur={handleBlur}\n ref={triggerRef}\n id={name}\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n >\n <div\n className={\n \"trieoh-input__container-field trieoh-custom-select__trigger \" +\n (!selectedLabel ? \"placeholder\" : \"\")\n }\n >\n {displayValue}\n </div>\n <RiArrowDownSLine\n className={`trieoh-input__container-icon trieoh-custom-select__arrow ${\n isOpen ? \"is-open\" : \"\"\n }`}\n size={24}\n />\n </div>\n\n {isOpen && (\n <div\n className=\"trieoh-custom-select__dropdown\"\n role=\"listbox\"\n aria-label={`Opções para ${label}`}\n >\n <div className=\"trieoh-custom-select__options\">\n {options.map((opt) => (\n <div\n key={opt.id}\n className={`trieoh-custom-select__option ${\n opt.value === value ? \"is-selected\" : \"\"\n }`}\n onClick={() => handleSelect(opt.value)}\n role=\"option\"\n aria-selected={opt.value === value}\n tabIndex={0}\n onKeyDown={(e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n handleSelect(opt.value);\n }\n }}\n >\n {opt.label}\n </div>\n ))}\n </div>\n </div>\n )}\n </div>\n\n <div className=\"trieoh-input__hint\">\n {rulesStatus.map((r, i) => {\n const classes = [\n \"hint-part\",\n r.passed ? \"passed\" : \"\",\n !r.passed && submitted ? \"failed-on-submit\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n return (\n <p key={r.id ?? i} className={classes}>\n {r.message}\n </p>\n );\n })}\n </div>\n </div>\n );\n}","import { useMemo } from \"react\";\nimport type { FieldValue, Operator, RuleResultI } from \"../types/fields-types\";\nimport type { RuleStatus } from \"../utils/field-validator\";\n\nexport function useFieldRules(\n rules: RuleResultI[] | undefined,\n values: Record<string, FieldValue>,\n fieldsMap: Record<string, { key: string; title: string }>\n): { \n satisfied: boolean; \n statuses: RuleStatus[] \n} {\n return useMemo(() => {\n if (!rules || rules.length === 0) return { satisfied: true, statuses: [] };\n \n const results = rules.map((rule) => evaluateRule(rule, values, fieldsMap));\n const allPassed = results.every((r) => r.passed);\n\n return {\n satisfied: allPassed,\n statuses: results,\n };\n }, [rules, values, fieldsMap]);\n}\n\nfunction evaluateRule(\n rule: RuleResultI,\n values: Record<string, FieldValue>,\n fieldsMap: Record<string, { key: string; title: string }>\n): RuleStatus {\n const dependentField = fieldsMap[rule.depends_on_field_id];\n \n if (!dependentField) {\n const message = `Campo dependente não encontrado.`;\n return { id: rule.id, message, passed: false };\n }\n\n const fieldValue = values[dependentField.key];\n const operator = rule.operator as Operator;\n const compareValue = rule.value;\n const fieldTitle = dependentField.title;\n\n let passed: boolean;\n let message: string;\n\n const normalize = (val: FieldValue) => (val === undefined || val === null) ? \"\" : String(val);\n\n switch (operator) {\n case \"exists\": {\n passed = fieldValue !== undefined && fieldValue !== null && fieldValue !== \"\";\n message = `O campo \"${fieldTitle}\" deve estar preenchido.`;\n break;\n }\n \n case \"not_exists\": {\n passed = fieldValue === undefined || fieldValue === null || fieldValue === \"\";\n message = `O campo \"${fieldTitle}\" deve estar vazio.`;\n break;\n }\n \n case \"equals\": {\n passed = normalize(fieldValue) === normalize(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser igual a \"${normalize(compareValue)}\".`;\n break;\n }\n \n case \"not_equals\": {\n passed = normalize(fieldValue) !== normalize(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser diferente de \"${normalize(compareValue)}\".`;\n break;\n }\n \n case \"contains\": {\n passed = normalize(fieldValue).includes(normalize(compareValue));\n message = `O campo \"${fieldTitle}\" deve conter \"${normalize(compareValue)}\".`;\n break;\n }\n \n case \"greater_than\": {\n passed = Number(fieldValue) > Number(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser maior que ${normalize(compareValue)}.`;\n break;\n }\n \n case \"greater_than_equal\": {\n passed = Number(fieldValue) >= Number(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser maior ou igual a ${normalize(compareValue)}.`;\n break;\n }\n \n case \"lower_than\": {\n passed = Number(fieldValue) < Number(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser menor que ${normalize(compareValue)}.`;\n break;\n }\n \n case \"lower_than_equal\": {\n passed = Number(fieldValue) <= Number(compareValue);\n message = `O campo \"${fieldTitle}\" deve ser menor ou igual a ${normalize(compareValue)}.`;\n break;\n }\n \n case \"in\": {\n const options = normalize(compareValue).split(\",\").map(v => v.trim());\n passed = options.includes(normalize(fieldValue));\n const optionsStr = options.join(\", \");\n message = `O campo \"${fieldTitle}\" deve ser um dos seguintes: ${optionsStr}.`;\n break;\n }\n \n case \"not_in\": {\n const options = normalize(compareValue).split(\",\").map(v => v.trim());\n passed = !options.includes(normalize(fieldValue));\n const optionsStr = options.join(\", \");\n message = `O campo \"${fieldTitle}\" não pode ser um dos seguintes: ${optionsStr}.`;\n break;\n }\n \n default: {\n passed = false;\n message = `Operador \"${operator}\" desconhecido.`;\n }\n }\n\n return {\n passed,\n id: rule.id,\n message,\n };\n}","import { useMemo } from \"react\";\nimport type { FieldDefinitionResultI, FieldValue } from \"../../../types/fields-types\";\nimport BasicInputField from \"./BasicInputField\";\nimport BasicSelectField from \"./BasicSelectField\";\nimport { useFieldRules } from \"../../../hooks/useFieldRules\";\n\ninterface DynamicFieldsProps {\n fields: FieldDefinitionResultI[];\n values: Record<string, FieldValue>;\n onValueChange: (key: string, value: FieldValue) => void;\n submitted?: boolean;\n}\n\nexport default function DynamicFields({\n fields,\n values,\n onValueChange,\n submitted = false,\n}: DynamicFieldsProps) {\n if (!fields || fields.length === 0) return null;\n\n const fieldsMap = useMemo(() => {\n return fields.reduce((acc, field) => {\n acc[field.id] = { key: field.key, title: field.title };\n if (field.object_id) acc[field.object_id] = { key: field.key, title: field.title };\n return acc;\n }, {} as Record<string, { key: string; title: string }>);\n }, [fields]);\n\n const sortedFields = useMemo(() => {\n return [...fields].sort((a, b) => a.position - b.position);\n }, [fields]);\n\n return (\n <>\n {sortedFields.map((field) => (\n <FieldRenderer\n key={field.id}\n field={field}\n values={values}\n onValueChange={onValueChange}\n submitted={submitted}\n fieldsMap={fieldsMap}\n />\n ))}\n </>\n );\n}\n\ninterface FieldRendererProps {\n field: FieldDefinitionResultI;\n values: Record<string, FieldValue>;\n onValueChange: (key: string, value: FieldValue) => void;\n submitted: boolean;\n fieldsMap: Record<string, { key: string; title: string }>;\n}\n\nfunction FieldRenderer({\n field,\n values,\n onValueChange,\n submitted,\n fieldsMap,\n}: FieldRendererProps) {\n const visibilityResult = useFieldRules(field.visibility_rules, values, fieldsMap);\n const hasVisibilityRules = field.visibility_rules && field.visibility_rules.length > 0;\n const isVisible = !hasVisibilityRules || visibilityResult.satisfied;\n\n const requiredResult = useFieldRules(field.required_rules, values, fieldsMap);\n const hasRequiredRules = field.required_rules && field.required_rules.length > 0;\n const isRequiredByRules = hasRequiredRules && requiredResult.satisfied;\n const isRequired = field.required || isRequiredByRules;\n\n const value = values[field.key] ?? field.default_value ?? \"\";\n const isValueEmpty = value === \"\" || value === undefined || value === null;\n\n const rulesStatus = useMemo(() => {\n const statuses = [];\n\n if (isRequired) statuses.push({ message: `${field.title} é obrigatório.`, passed: !isValueEmpty });\n\n return statuses;\n }, [\n field.title,\n isRequired,\n isValueEmpty,\n ]);\n\n if (!isVisible) return null;\n\n const commonProps = {\n name: field.key,\n label: field.title,\n placeholder: field.placeholder,\n value: String(value),\n submitted: submitted,\n rulesStatus: rulesStatus,\n required: isRequired,\n };\n\n switch (field.type) {\n case \"string\":\n case \"email\":\n return (\n <BasicInputField\n {...commonProps}\n type={field.type === \"email\" ? \"email\" : \"text\"}\n onValueChange={(val) => onValueChange(field.key, val)}\n />\n );\n\n case \"int\":\n return (\n <BasicInputField\n {...commonProps}\n type=\"number\"\n onValueChange={(val) => onValueChange(field.key, val)}\n />\n );\n\n case \"radio\":\n return (\n <div className=\"trieoh trieoh-input\">\n <label className=\"trieoh-input__label\">\n {field.title}\n {isRequired && <span style={{ color: \"#e74c3c\", marginLeft: \"4px\" }}>*</span>}\n </label>\n <div className=\"trieoh-radio-group\" style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {field.options?.map((opt) => (\n <label key={opt.id} style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", cursor: \"pointer\" }}>\n <input\n type=\"radio\"\n name={field.key}\n value={opt.value}\n checked={value === opt.value}\n onChange={(e) => onValueChange(field.key, e.target.value)}\n />\n <span>{opt.label}</span>\n </label>\n ))}\n </div>\n {submitted && rulesStatus\n .filter((s) => !s.passed)\n .map((s, idx) => (\n <span key={idx} style={{ color: \"#e74c3c\", fontSize: \"12px\", marginTop: \"4px\", display: \"block\" }}>\n {s.message}\n </span>\n ))}\n </div>\n );\n\n case \"select\":\n return (\n <BasicSelectField\n {...commonProps}\n options={field.options || []}\n onValueChange={(val) => onValueChange(field.key, val)}\n />\n );\n\n case \"checkbox\": {\n const currentValues = Array.isArray(values[field.key]) \n ? (values[field.key] as string[]) \n : [];\n \n return (\n <div className=\"trieoh trieoh-input\">\n <label className=\"trieoh-input__label\">\n {field.title}\n {isRequired && <span style={{ color: \"#e74c3c\", marginLeft: \"4px\" }}>*</span>}\n </label>\n <div className=\"trieoh-checkbox-group\" style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {field.options?.map((opt) => (\n <label key={opt.id} style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", cursor: \"pointer\" }}>\n <input\n type=\"checkbox\"\n name={field.key}\n value={opt.value}\n checked={currentValues.includes(opt.value)}\n onChange={(e) => {\n const newValue = e.target.checked\n ? [...currentValues, opt.value]\n : currentValues.filter((v) => v !== opt.value);\n onValueChange(field.key, newValue);\n }}\n />\n <span>{opt.label}</span>\n </label>\n ))}\n </div>\n {submitted && rulesStatus\n .filter((s) => !s.passed)\n .map((s, idx) => (\n <span key={idx} style={{ color: \"#e74c3c\", fontSize: \"12px\", marginTop: \"4px\", display: \"block\" }}>\n {s.message}\n </span>\n ))}\n </div>\n );\n }\n\n case \"bool\":\n return (\n <div \n className=\"trieoh trieoh-input\" \n style={{ flexDirection: \"row\", alignItems: \"center\", gap: \"8px\" }}\n >\n <input\n type=\"checkbox\"\n id={field.key}\n name={field.key}\n checked={!!values[field.key]}\n onChange={(e) => onValueChange(field.key, e.target.checked)}\n />\n <label htmlFor={field.key} className=\"trieoh-input__label\" style={{ marginBottom: 0 }}>\n {field.title}\n {isRequired && <span style={{ color: \"#e74c3c\", marginLeft: \"4px\" }}>*</span>}\n </label>\n {submitted && rulesStatus\n .filter((s) => !s.passed)\n .map((s, idx) => (\n <span key={idx} style={{ color: \"#e74c3c\", fontSize: \"12px\", marginLeft: \"8px\" }}>\n {s.message}\n </span>\n ))}\n </div>\n );\n\n default: return null;\n }\n}","import { type MouseEvent, useRef, useState } from \"react\";\nimport { useAuth } from \"../../AuthProvider\";\nimport BasicInputField from \"../Form/BasicInputField\";\nimport BasicSubmitButton from \"../Form/BasicSubmitButton\";\nimport CardAvatar from \"../Form/CardAvatar\";\nimport DynamicFields from \"../Form/DynamicFields\";\nimport { \n evaluateRules, \n type Rule,\n} from \"../../../utils/field-validator\";\nimport type { FieldDefinitionResultI, FieldValue } from \"../../../types/fields-types\";\n\nexport interface SignUpProps {\n onSuccess?: () => Promise<void>;\n onFailed?: (message: string, trace?: string[]) => Promise<void>;\n loginRedirect?:(e: MouseEvent<HTMLSpanElement>) => void;\n emailRules?: Rule[];\n passwordRules?: Rule[];\n flow_id?: string;\n fields?: FieldDefinitionResultI[];\n}\n\nexport function SignUp({\n onSuccess,\n onFailed,\n loginRedirect,\n emailRules,\n passwordRules,\n flow_id,\n fields = [],\n}: SignUpProps) {\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [confirmPassword, setConfirmPassword] = useState(\"\");\n const [dynamicValues, setDynamicValues] = useState<Record<string, FieldValue>>({});\n const [submitted, setSubmitted] = useState(false);\n const [loadingSubmit, setLoadingSubmit] = useState(false);\n const emailRef = useRef<HTMLInputElement | null>(null);\n const passwordRef = useRef<HTMLInputElement | null>(null);\n const confirmPasswordRef = useRef<HTMLInputElement | null>(null);\n const { auth } = useAuth();\n\n const handleDynamicChange = (key: string, value: FieldValue) => {\n setDynamicValues(prev => ({ ...prev, [key]: value }));\n };\n\n const rules: Record<string, Rule[]> = {\n email: emailRules || [\n { message: \"Digite um e-mail válido, ex: exemplo@dominio.com\", test: v => /\\S+@\\S+\\.\\S+/.test(v) },\n ],\n password: passwordRules || [\n { message: \"Mínimo de 8 caracteres.\", test: v => v.length >= 8 },\n { message: \"Deve conter uma letra maiúscula.\", test: v => /[A-Z]/.test(v) },\n { \n message: \"Inclua pelo menos um caractere especial, ex: ! @ # $ % & * . ,\", \n test: v => /[!@#$%^&*(),.?\":{}|<>_\\-+=~`;/\\\\[\\]]/.test(v) \n },\n { message: \"Deve conter um número.\", test: v => /\\d/.test(v) },\n ],\n confirmPassword: [\n { message: \"Senhas não conferem.\", test: v => v === password },\n ],\n };\n\n const emailValidation = evaluateRules(rules.email, email);\n const passwordValidation = evaluateRules(rules.password, password);\n const confirmPasswordValidation = evaluateRules(rules.confirmPassword, confirmPassword);\n\n const handleSubmit = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setSubmitted(true);\n\n const emailInvalid = emailValidation.some(r => !r.passed);\n const passwordInvalid = passwordValidation.some(r => !r.passed);\n const confirmPasswordInvalid = confirmPasswordValidation.some(r => !r.passed);\n \n // Simple validation for dynamic required fields\n const dynamicInvalid = fields.some(f => f.required && !dynamicValues[f.key]);\n\n if (emailInvalid) {\n emailRef.current?.focus();\n return;\n }\n if (passwordInvalid) {\n passwordRef.current?.focus();\n return;\n }\n if (confirmPasswordInvalid) {\n confirmPasswordRef.current?.focus();\n return;\n }\n if (dynamicInvalid) return;\n \n setLoadingSubmit(true);\n\n const res = await auth.register(email, password, flow_id, dynamicValues);\n if(res.success) {\n if(onSuccess) await onSuccess();\n } else if(onFailed) {\n await onFailed(res.message, res.trace);\n }\n setLoadingSubmit(false);\n }\n return (\n <form className=\"trieoh trieoh-card trieoh-card--full-rounded\">\n <CardAvatar mainText=\"Crie sua conta\" subText=\"Insira seus dados para começar\" />\n <div className=\"trieoh-card__fields\">\n <BasicInputField \n label=\"Email\" \n name=\"email\"\n placeholder=\"teste@gmail.com\"\n autoComplete=\"email\"\n type=\"email\"\n value={email}\n onValueChange={setEmail}\n inputRef={emailRef}\n rulesStatus={emailValidation}\n submitted={submitted}\n />\n <BasicInputField \n label=\"Senha\" \n name=\"password\"\n placeholder=\"**********\"\n autoComplete=\"new-password\"\n type=\"password\"\n value={password}\n onValueChange={setPassword}\n inputRef={passwordRef}\n rulesStatus={passwordValidation}\n submitted={submitted}\n />\n <BasicInputField \n label=\"Confirme a Senha\" \n name=\"confirm-password\"\n placeholder=\"**********\"\n autoComplete=\"new-password\"\n type=\"password\"\n value={confirmPassword}\n onValueChange={setConfirmPassword}\n inputRef={confirmPasswordRef}\n rulesStatus={confirmPasswordValidation}\n submitted={submitted}\n />\n <DynamicFields \n fields={fields} \n values={dynamicValues} \n onValueChange={handleDynamicChange}\n submitted={submitted}\n />\n </div>\n <BasicSubmitButton label=\"Criar Conta\" onSubmit={handleSubmit} loading={loadingSubmit}/>\n {loginRedirect && <>\n <div className=\"trieoh-card__divider\">\n <hr />\n OU\n <hr />\n </div>\n <span className=\"trieoh-card__other\">\n {\"Já possui uma conta? \"}\n <span onClick={loginRedirect}>Entre</span>\n </span>\n </>}\n </form>\n );\n}\n","import { useState } from \"react\";\nimport { SignUp, type SignUpProps } from \"./SignUp\";\nimport type { FieldDefinitionResultI } from \"../../../types/fields-types\";\n\nexport interface TabbedFlowI {\n label: string;\n value: string;\n fields: FieldDefinitionResultI[];\n}\n\nexport interface TabbedSignUpProps extends Omit<SignUpProps, 'flow_id' | 'fields'> {\n flowIds: TabbedFlowI[];\n}\n\nexport function TabbedSignUp({ flowIds, ...rest }: TabbedSignUpProps) {\n const [activeFlowId, setActiveFlowId] = useState<string>(flowIds[0]?.value || \"\");\n\n if (!flowIds || flowIds.length === 0) return null;\n\n const activeFlow = flowIds.find(f => f.value === activeFlowId);\n\n return (\n <div className=\"trieoh-tabbed-signup\">\n <div className=\"trieoh-tabbed-signup__header\">\n {flowIds.map((flow) => (\n <button\n key={flow.value}\n className={`trieoh-tabbed-signup__tab ${activeFlowId === flow.value ? \"active\" : \"\"}`}\n onClick={() => setActiveFlowId(flow.value)}\n type=\"button\"\n aria-selected={activeFlowId === flow.value}\n role=\"tab\"\n >\n <span className=\"trieoh-tabbed-signup__tab-text\">{flow.label}</span>\n </button>\n ))}\n </div>\n <hr />\n\n <div className=\"trieoh-tabbed-signup__content\">\n <SignUp \n key={activeFlowId} \n flow_id={activeFlowId} \n {...rest} \n fields={activeFlow?.fields} \n />\n </div>\n </div>\n );\n}","export interface CopyrightProps {\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'\n}\n\nexport function Copyright({ size }: CopyrightProps) {\n const sizeClass = size ? `trieoh-copyright--${size}` : ''\n\n return (\n <span className={`trieoh trieoh-copyright ${sizeClass}`}>\n © {new Date().getFullYear()} TrieOH\n </span>\n )\n}","import { useState, type MouseEvent } from \"react\";\nimport { useAuth } from \"../../AuthProvider\";\nimport { ImExit } from \"react-icons/im\";\n\nexport interface LogoutProps {\n onSuccess?: () => Promise<void>;\n onFailed?: (message: string) => Promise<void>;\n}\n\nexport function BasicLogoutButton({\n onSuccess,\n onFailed\n}: LogoutProps) {\n const { auth } = useAuth();\n const [loading, setLoading] = useState(false);\n\n const handleLogout = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n if (loading) return;\n\n setLoading(true);\n\n const res = await auth.logout();\n if(res.success && onSuccess) await onSuccess();\n else if(onFailed) await onFailed(res.message);\n setLoading(false);\n }\n return (\n <button\n onClick={handleLogout}\n type=\"button\"\n disabled={loading}\n className={\"trieoh trieoh-button--logout\"}\n >\n <ImExit size={24}/> <span>Log out</span>\n </button>\n )\n}","import {\n FaMobileAlt,\n FaTabletAlt,\n FaDesktop\n} from \"react-icons/fa\";\n\nexport const deviceIconMap = {\n mobile: FaMobileAlt,\n tablet: FaTabletAlt,\n desktop: FaDesktop,\n};","import { UAParser } from \"ua-parser-js\";\n\nexport function parseUserAgent(userAgent: string) {\n const { device, os, browser } = UAParser(userAgent);\n\n return {\n deviceType: device.type ?? \"desktop\",\n os: os.name,\n browser: browser.name,\n };\n}\n","import { parseUserAgent } from \"./parse-user-agent\";\nimport type { DeviceType } from \"./device-types\";\n\nexport interface DeviceInfo {\n device: DeviceType;\n os?: string;\n browser?: string;\n}\n\nexport function getDeviceInfo(userAgent: string): DeviceInfo {\n const parsed = parseUserAgent(userAgent);\n\n return {\n device: normalizeDevice(parsed.deviceType),\n os: parsed.os,\n browser: parsed.browser,\n };\n}\n\nfunction normalizeDevice(type?: string): DeviceType {\n if (!type) return \"desktop\";\n\n switch (type) {\n case \"mobile\":\n return \"mobile\";\n case \"tablet\":\n return \"tablet\";\n default:\n return \"desktop\";\n }\n}","export function timeAgo(isoDate: string): string {\n const diff = Date.now() - new Date(isoDate).getTime();\n const sec = Math.floor(diff / 1000);\n const min = Math.floor(sec / 60);\n const hour = Math.floor(min / 60);\n const day = Math.floor(hour / 24);\n const week = Math.floor(day / 7);\n\n if (sec < 60) return \"agora mesmo\";\n if (min < 60) return `${min} minutos atrás`;\n if (hour < 24) return `${hour} horas atrás`;\n if (day < 7) return `${day} dias atrás`;\n return `${week} semanas atrás`;\n}\n","import { FaTrashAlt } from \"react-icons/fa\";\nimport { deviceIconMap } from \"../../../utils/icons/device-icon-map\";\nimport type { SessionI } from \"../../../types/sessions-types\";\nimport { getDeviceInfo } from \"../../../utils/ua/get-device-info\";\nimport type { MouseEvent } from \"react\";\nimport { timeAgo } from \"../../../utils/date-utils\";\n\ninterface SessionProps extends SessionI {\n is_current: boolean;\n onClick: (e: MouseEvent<SVGElement>, id: string) => void;\n}\n\nexport default function SessionCard({\n is_current,\n session_id,\n user_agent,\n issued_at,\n user_ip,\n onClick\n}: SessionProps) {\n const deviceI = getDeviceInfo(user_agent)\n const DeviceIcon = deviceIconMap[deviceI.device];\n return (\n <div className=\"trieoh-session\">\n <div className=\"trieoh-session__content\">\n <DeviceIcon size={40} />\n <div className=\"trieoh-session__info\">\n <h3>{deviceI.browser} - {deviceI.os}</h3>\n <span className=\"trieoh-session__meta\">\n {is_current && <strong>• Sessão Atual •</strong>}\n <span>{ `${user_ip} - ${timeAgo(issued_at)}` }</span>\n </span>\n </div>\n {!is_current && <FaTrashAlt size={20} color=\"red\" onClick={(e) => onClick(e, session_id)}/>}\n </div>\n </div>\n )\n}","import { type MouseEvent, useEffect, useState } from \"react\";\nimport SessionCard from \"./SessionCard\";\nimport { useAuth } from \"../../AuthProvider\";\nimport type { SessionI } from \"../../../types/sessions-types\";\n\nexport interface SessionsProps {\n /** If true will revoke even the current session */\n revokeAll?: boolean;\n /** What will happen when sessions are revoked */\n onSuccess?: () => Promise<void>;\n}\n\nexport function Sessions({\n revokeAll = false,\n onSuccess,\n}: SessionsProps) {\n const { auth } = useAuth();\n const [loading, setLoading] = useState(false);\n const [sessions, setSessions] = useState<SessionI[]>([]);\n\n const fetchSessions = async () => {\n const res = await auth.sessions();\n if (res.success) {\n const currentSessionId = auth.profile()?.session_id;\n\n const sessions = (res.data).sort((a, b) => {\n if (a.session_id === currentSessionId) return -1;\n if (b.session_id === currentSessionId) return 1;\n return 0;\n });\n setSessions(sessions);\n }\n }\n\n useEffect(() => {\n fetchSessions();\n }, []);\n\n const handleRevokeASession = async (e: MouseEvent<SVGElement>, id: string) => {\n e.preventDefault();\n const sessionToRemove = sessions.find(s => s.session_id === id);\n if(!sessionToRemove) return;\n setSessions(sessions.filter(s => s.session_id !== id))\n try {\n const res = await auth.revokeASession(id);\n if(!res.success) setSessions(prev => [...prev, sessionToRemove]);\n } catch {\n setSessions(prev => [...prev, sessionToRemove]);\n }\n }\n\n const handleRevokeSessions = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n if (loading) return;\n setLoading(true);\n\n const res = await auth.revokeSessions(revokeAll);\n const id = auth.profile()?.session_id;\n if(res.success) {\n setSessions(revokeAll ? [] : sessions.filter(s => s.session_id === id));\n if(onSuccess) onSuccess();\n }\n setLoading(false);\n }\n\n return (\n <div className=\"trieoh trieoh-sessions\">\n <div className=\"trieoh-sessions__header\">\n <div>\n <h3>Navegadores e Dispositivos</h3>\n <p>Esses navegadores e dispositivos estão atualmente conectados à sua conta. Remova quaisquer dispositivos não autorizados.</p>\n </div>\n <button \n type=\"submit\"\n onClick={handleRevokeSessions}\n disabled={loading}\n className={\n `trieoh trieoh-button trieoh-button--all-rounded \n ${loading ? \"trieoh-button--loading\" : \"\"}`\n }\n >\n Revogar todas as sessões\n </button>\n </div>\n <div className=\"trieoh-sessions__content\">\n {sessions.length > 0 ? sessions.map(s => (\n <SessionCard \n key={s.session_id} \n {...s} \n is_current={auth.profile()?.session_id === s.session_id}\n onClick={handleRevokeASession}\n />\n )) : <span className=\"trieoh-sessions__empty\">Nenhuma Sessão Disponível</span>}\n </div>\n </div>\n )\n}","import { useState, useEffect, type MouseEvent } from \"react\";\nimport { useAuth } from \"../../AuthProvider\";\nimport BasicSubmitButton from \"../Form/BasicSubmitButton\";\nimport type { FieldDefinitionResultI, FieldValue } from \"../../../types/fields-types\";\nimport DynamicFields from \"../Form/DynamicFields\";\n\nexport interface UpdateProfileProps {\n fields: FieldDefinitionResultI[];\n initialValues?: Record<string, FieldValue>;\n onSuccess?: () => Promise<void>;\n onFailed?: (message: string, trace?: string[]) => Promise<void>;\n submitLabel?: string;\n}\n\nexport function UpdateProfile({\n fields,\n initialValues,\n onSuccess,\n onFailed,\n submitLabel = \"Atualizar Dados\",\n}: UpdateProfileProps) {\n const [values, setValues] = useState<Record<string, FieldValue>>(initialValues || {});\n const [submitted, setSubmitted] = useState(false);\n const [loading, setLoading] = useState(false);\n const { auth } = useAuth();\n\n useEffect(() => {\n if (initialValues) {\n setValues(initialValues);\n }\n }, [initialValues]);\n\n const handleValueChange = (key: string, value: FieldValue) => {\n setValues(prev => ({ ...prev, [key]: value }));\n };\n\n const handleSubmit = async (e: MouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n setSubmitted(true);\n\n const invalid = fields.some(f => f.required && !values[f.key]);\n if (invalid) return;\n\n setLoading(true);\n const res = await auth.updateProfile(values);\n if(res.success) {\n if(onSuccess) await onSuccess();\n } else if(onFailed) await onFailed(res.message, res.trace);\n setLoading(false);\n };\n\n return (\n <form className=\"trieoh trieoh-card trieoh-card--full-rounded\">\n <div className=\"trieoh-card__fields\">\n <DynamicFields \n fields={fields}\n values={values}\n onValueChange={handleValueChange}\n submitted={submitted}\n />\n </div>\n <BasicSubmitButton \n label={submitLabel} \n onSubmit={handleSubmit} \n loading={loading}\n />\n </form>\n );\n}\n","import { useState } from \"react\";\nimport type { FieldDefinitionResultI, FieldValue } from \"../../../types/fields-types\";\nimport DynamicFields from \"./DynamicFields\";\n\nexport interface EditorFormProps {\n fields: FieldDefinitionResultI[];\n submitted?: boolean;\n title?: string;\n description?: string;\n noFieldsMessage?: string;\n}\n\nexport function EditorForm({\n fields,\n submitted = false,\n title,\n description,\n noFieldsMessage = \"No fields available\",\n}: EditorFormProps) {\n const [values, setValues] = useState<Record<string, FieldValue>>({});\n\n const handleValueChange = (key: string, value: FieldValue) => {\n setValues((prev) => ({ ...prev, [key]: value }));\n };\n\n return (\n <div \n className=\"trieoh trieoh-card trieoh-card--full-rounded\"\n style={{ gap: '0.25rem' }}\n >\n {(title || description) && (\n <div style={{ width: \"100%\", textAlign: 'center'}}>\n {title && <h3 style={{ margin: 0, fontSize: \"1.25rem\", fontWeight: 600 }}>{title}</h3>}\n {description && <p style={{ margin: \"0.5rem 0 0\", fontSize: \"0.875rem\", opacity: 0.7 }}>{description}</p>}\n <hr style={{ marginTop: \"1rem\", border: 0, borderTop: \"1px solid rgba(0,0,0,0.1)\", marginBottom: \"0.5rem\" }} />\n </div>\n )}\n \n <div className=\"trieoh-card__fields\" >\n {fields && fields.length > 0 ? (\n <DynamicFields \n fields={fields}\n values={values}\n onValueChange={handleValueChange}\n submitted={submitted}\n />\n ) : (\n <div className=\"trieoh-card__empty\">\n {noFieldsMessage}\n </div>\n )}\n </div>\n </div>\n );\n}\n"]}