@a-cube-io/ereceipts-js-sdk 2.0.7 → 2.0.9

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 +0,0 @@
1
- {"version":3,"file":"react.esm.js","sources":["../src/core/types.ts","../src/core/config.ts","../src/core/roles.ts","../src/core/auth-manager.ts","../src/core/platform-detector.ts","../src/adapters/compression.ts","../src/platforms/react-native/cache.ts","../node_modules/idb/build/index.js","../src/platforms/web/cache.ts","../src/core/loaders/cache-loader.ts","../src/platforms/node/storage.ts","../src/platforms/react-native/storage.ts","../src/platforms/web/storage.ts","../src/core/loaders/storage-loader.ts","../src/platforms/node/network.ts","../src/platforms/react-native/network.ts","../src/platforms/web/network.ts","../src/core/loaders/network-loader.ts","../src/adapters/mtls.ts","../src/platforms/react-native/mtls.ts","../src/platforms/web/mtls.ts","../src/core/loaders/mtls-loader.ts","../src/core/adapter-loader.ts","../src/core/api/types.ts","../src/utils/object.ts","../src/core/http/utils/error-classifier.ts","../src/core/http/auth/mtls-handler.ts","../src/core/http/cache/cache-handler.ts","../src/core/http/utils/error-transformer.ts","../src/core/http/http-client.ts","../src/core/api/cash-registers.ts","../src/core/api/cashiers.ts","../src/core/api/daily-reports.ts","../src/core/api/journals.ts","../src/core/api/merchants.ts","../src/core/api/pems.ts","../src/core/api/point-of-sales.ts","../src/core/api/receipts.ts","../src/core/api/suppliers.ts","../src/core/api/api-client.ts","../src/core/certificates/certificate-errors.ts","../src/core/certificates/certificate-manager.ts","../src/offline/queue.ts","../src/offline/sync-manager.ts","../src/offline/offline-manager.ts","../src/acube-sdk.ts","../src/validations/api/receipts.ts","../src/validations/api/cashiers.ts","../src/validations/api/point-of-sales.ts","../src/validations/api/cash-registers.ts","../src/validations/api/merchants.ts","../src/validations/api/pems.ts","../src/validations/api/suppliers.ts","../src/validations/api/journals.ts","../src/validations/api/daily-reports.ts","../src/react-integration/context.tsx","../src/react-integration/hooks/use-auth.ts"],"sourcesContent":["/**\n * Core SDK types\n */\nimport type { UserRoles } from './roles';\n\nexport type Environment = 'production' | 'development' | 'sandbox';\n\n/**\n * Certificate management configuration\n */\nexport interface CertificateConfig {\n storagePrefix?: string;\n metadataKey?: string;\n}\n\n/**\n * SDK Configuration\n */\nexport interface SDKConfig {\n environment: Environment;\n apiUrl?: string;\n authUrl?: string;\n timeout?: number;\n retryAttempts?: number;\n debug?: boolean;\n customHeaders?: Record<string, string>;\n certificateConfig?: CertificateConfig;\n}\n\n/**\n * Authentication credentials\n */\nexport interface AuthCredentials {\n email: string;\n password: string;\n}\n\n/**\n * Token response from auth server\n */\nexport interface TokenResponse {\n token: string;\n}\n\n/**\n * JWT Token payload structure\n */\nexport interface JWTPayload {\n iat: number;\n exp: number;\n roles: Record<string, string[]>;\n username: string;\n uid: number;\n fid: string;\n pid: string | null;\n}\n\n/**\n * Stored token data\n */\nexport interface StoredTokenData {\n accessToken: string;\n expiresAt: number;\n}\n\n/**\n * User information\n */\nexport interface User {\n id: string;\n email: string;\n username: string;\n roles: UserRoles;\n fid: string;\n pid: string | null;\n expiresAt: number;\n}\n\n/**\n * User provider interface for accessing current user information\n */\nexport interface IUserProvider {\n getCurrentUser(): Promise<User | null>;\n isAuthenticated(): Promise<boolean>;\n getAccessToken(): Promise<string | null>;\n}\n\n/**\n * API Violation structure for validation errors\n */\nexport interface APIViolation {\n propertyPath: string;\n message: string;\n}\n\n/**\n * API Error response\n */\nexport interface APIError {\n type: string;\n title: string;\n status: number;\n detail: string;\n instance?: string;\n violations?: APIViolation[];\n}\n\n/**\n * SDK Error types\n */\nexport type SDKError =\n | 'NETWORK_ERROR'\n | 'AUTH_ERROR'\n | 'VALIDATION_ERROR'\n | 'NOT_FOUND_ERROR'\n | 'FORBIDDEN_ERROR'\n | 'UNKNOWN_ERROR'\n | 'STORAGE_CERTIFICATE_ERROR'\n | 'CERTIFICATE_MANAGER_NOT_INITIALIZED'\n | 'SDK_INITIALIZATION_ERROR'\n | 'API_CLIENT_NOT_INITIALIZED'\n | 'MTLS_ADAPTER_NOT_AVAILABLE'\n | 'CERTIFICATE_INFO_ERROR';\n\n/**\n * SDK Exception class\n */\nexport class ACubeSDKError extends Error {\n public violations?: APIViolation[];\n\n constructor(\n public type: SDKError,\n message: string,\n public originalError?: unknown,\n public statusCode?: number,\n violations?: APIViolation[]\n ) {\n super(message);\n this.name = 'ACubeSDKError';\n this.violations = violations;\n }\n}\n","import { Environment, SDKConfig } from './types';\n\n/**\n * Default SDK configuration\n */\nconst DEFAULT_CONFIG: Required<SDKConfig> = {\n environment: 'sandbox',\n apiUrl: '',\n authUrl: '',\n timeout: 30000,\n retryAttempts: 3,\n debug: false,\n customHeaders: {},\n certificateConfig: {},\n};\n\n/**\n * SDK Configuration manager\n */\nexport class ConfigManager {\n private config: Required<SDKConfig>;\n\n constructor(userConfig: SDKConfig) {\n this.config = this.mergeConfig(userConfig);\n }\n\n private mergeConfig(userConfig: SDKConfig): Required<SDKConfig> {\n return {\n ...DEFAULT_CONFIG,\n ...userConfig,\n apiUrl: userConfig.apiUrl || this.getDefaultApiUrl(userConfig.environment),\n authUrl: userConfig.authUrl || this.getDefaultAuthUrl(userConfig.environment),\n certificateConfig: {\n ...DEFAULT_CONFIG.certificateConfig,\n ...userConfig.certificateConfig,\n },\n };\n }\n\n private getDefaultApiUrl(environment: Environment): string {\n switch (environment) {\n case 'production':\n return 'https://ereceipts-it.acubeapi.com';\n case 'development':\n return 'https://ereceipts-it.dev.acubeapi.com';\n case 'sandbox':\n default:\n return 'https://ereceipts-it-sandbox.acubeapi.com';\n }\n }\n\n private getDefaultAuthUrl(environment: Environment): string {\n switch (environment) {\n case 'production':\n return 'https://common.api.acubeapi.com';\n case 'development':\n case 'sandbox':\n default:\n return 'https://common-sandbox.api.acubeapi.com';\n }\n }\n\n /**\n * Get the current configuration\n */\n getConfig(): Required<SDKConfig> {\n return { ...this.config };\n }\n\n /**\n * Get API URL\n */\n getApiUrl(): string {\n return this.config.apiUrl;\n }\n\n /**\n * Get Auth URL\n */\n getAuthUrl(): string {\n return this.config.authUrl;\n }\n\n /**\n * Get environment\n */\n getEnvironment(): Environment {\n return this.config.environment;\n }\n\n /**\n * Check if debug mode is enabled\n */\n isDebugEnabled(): boolean {\n return this.config.debug;\n }\n\n /**\n * Get timeout in milliseconds\n */\n getTimeout(): number {\n return this.config.timeout;\n }\n\n /**\n * Get retry attempts\n */\n getRetryAttempts(): number {\n return this.config.retryAttempts;\n }\n\n /**\n * Get custom headers\n */\n getCustomHeaders(): Record<string, string> {\n return { ...this.config.customHeaders };\n }\n\n /**\n * Update configuration\n */\n updateConfig(updates: Partial<SDKConfig>): void {\n this.config = this.mergeConfig({ ...this.config, ...updates });\n }\n}\n","/**\n * Role and Permission Management System\n *\n * This module provides type-safe role management with hierarchical permissions\n * and context-based authorization for the ACube E-Receipt system.\n */\n\n// Base role definitions\nexport type BaseRole = 'ROLE_SUPPLIER' | 'ROLE_CASHIER' | 'ROLE_MERCHANT';\n\n// Context definitions\nexport type RoleContext = 'ereceipts-it.acubeapi.com';\n\n// Role hierarchy mapping\nexport type RoleHierarchy = Record<BaseRole, BaseRole[]>;\n\n// User roles structure\nexport type UserRoles = Partial<Record<RoleContext, BaseRole[]>>;\n\n/**\n * Role hierarchy definition based on your system\n * Each role inherits permissions from roles listed in its array\n */\nexport const ROLE_HIERARCHY: RoleHierarchy = {\n ROLE_SUPPLIER: [],\n ROLE_CASHIER: [],\n ROLE_MERCHANT: ['ROLE_CASHIER'],\n};\n\n/**\n * Default context for e-receipt operations\n */\nexport const DEFAULT_CONTEXT: RoleContext = 'ereceipts-it.acubeapi.com';\n\n/**\n * Role permission levels (ascending order)\n */\nexport enum RoleLevel {\n SUPPLIER = 1,\n CASHIER = 2,\n MERCHANT = 3,\n}\n\n/**\n * Map roles to their permission levels\n */\nexport const ROLE_LEVELS: Record<BaseRole, RoleLevel> = {\n ROLE_SUPPLIER: RoleLevel.SUPPLIER,\n ROLE_CASHIER: RoleLevel.CASHIER,\n ROLE_MERCHANT: RoleLevel.MERCHANT,\n};\n\n/**\n * Get all roles that a user has (including inherited roles)\n * @param userRoles - User's role assignments by context\n * @param context - Context to check roles for\n * @returns Array of all effective roles (direct + inherited)\n */\nexport function getEffectiveRoles(\n userRoles: UserRoles,\n context: RoleContext = DEFAULT_CONTEXT\n): BaseRole[] {\n const directRoles = userRoles[context] || [];\n const effectiveRoles = new Set<BaseRole>();\n\n // Add direct roles\n directRoles.forEach((role) => effectiveRoles.add(role));\n\n // Add inherited roles\n directRoles.forEach((role) => {\n const inheritedRoles = getInheritedRoles(role);\n inheritedRoles.forEach((inheritedRole) => effectiveRoles.add(inheritedRole));\n });\n\n return Array.from(effectiveRoles);\n}\n\n/**\n * Get all roles inherited from a specific role\n * @param role - Role to get inheritance for\n * @returns Array of inherited roles\n */\nexport function getInheritedRoles(role: BaseRole): BaseRole[] {\n const inherited = new Set<BaseRole>();\n const toProcess = [role];\n\n while (toProcess.length > 0) {\n const currentRole = toProcess.pop()!;\n const childRoles = ROLE_HIERARCHY[currentRole] || [];\n\n childRoles.forEach((childRole) => {\n if (!inherited.has(childRole)) {\n inherited.add(childRole);\n toProcess.push(childRole);\n }\n });\n }\n\n return Array.from(inherited);\n}\n\n/**\n * Check if user has a specific role in a context\n * @param userRoles - User's role assignments\n * @param role - Role to check for\n * @param context - Context to check in\n * @returns True if user has the role (direct or inherited)\n */\nexport function hasRole(\n userRoles: UserRoles,\n role: BaseRole,\n context: RoleContext = DEFAULT_CONTEXT\n): boolean {\n const effectiveRoles = getEffectiveRoles(userRoles, context);\n return effectiveRoles.includes(role);\n}\n\n/**\n * Check if user has any of the specified roles\n * @param userRoles - User's role assignments\n * @param roles - Array of roles to check for\n * @param context - Context to check in\n * @returns True if user has any of the roles\n */\nexport function hasAnyRole(\n userRoles: UserRoles,\n roles: BaseRole[],\n context: RoleContext = DEFAULT_CONTEXT\n): boolean {\n return roles.some((role) => hasRole(userRoles, role, context));\n}\n\n/**\n * Check if user has all of the specified roles\n * @param userRoles - User's role assignments\n * @param roles - Array of roles to check for\n * @param context - Context to check in\n * @returns True if user has all of the roles\n */\nexport function hasAllRoles(\n userRoles: UserRoles,\n roles: BaseRole[],\n context: RoleContext = DEFAULT_CONTEXT\n): boolean {\n return roles.every((role) => hasRole(userRoles, role, context));\n}\n\n/**\n * Check if user has access to a specific context\n * @param userRoles - User's role assignments\n * @param context - Context to check\n * @returns True if user has any roles in the context\n */\nexport function hasContext(userRoles: UserRoles, context: RoleContext): boolean {\n return context in userRoles && !!userRoles[context] && userRoles[context].length > 0;\n}\n\n/**\n * Get all contexts that a user has access to\n * @param userRoles - User's role assignments\n * @returns Array of contexts the user has access to\n */\nexport function getUserContexts(userRoles: UserRoles): RoleContext[] {\n const contexts: RoleContext[] = [];\n if (\n DEFAULT_CONTEXT in userRoles &&\n userRoles[DEFAULT_CONTEXT] &&\n userRoles[DEFAULT_CONTEXT]!.length > 0\n ) {\n contexts.push(DEFAULT_CONTEXT);\n }\n return contexts;\n}\n\n/**\n * Check if user has minimum role level in a context\n * @param userRoles - User's role assignments\n * @param minimumLevel - Minimum role level required\n * @param context - Context to check in\n * @returns True if user has at least the minimum role level\n */\nexport function hasMinimumRoleLevel(\n userRoles: UserRoles,\n minimumLevel: RoleLevel,\n context: RoleContext = DEFAULT_CONTEXT\n): boolean {\n const effectiveRoles = getEffectiveRoles(userRoles, context);\n const userLevels = effectiveRoles.map((role) => ROLE_LEVELS[role]);\n const maxUserLevel = Math.max(...userLevels, 0);\n\n return maxUserLevel >= minimumLevel;\n}\n\n/**\n * Get the highest role level for a user in a context\n * @param userRoles - User's role assignments\n * @param context - Context to check in\n * @returns Highest role level or null if no roles\n */\nexport function getHighestRoleLevel(\n userRoles: UserRoles,\n context: RoleContext = DEFAULT_CONTEXT\n): RoleLevel | null {\n const effectiveRoles = getEffectiveRoles(userRoles, context);\n\n if (effectiveRoles.length === 0) {\n return null;\n }\n\n const userLevels = effectiveRoles.map((role) => ROLE_LEVELS[role]);\n return Math.max(...userLevels) as RoleLevel;\n}\n\n/**\n * Check if user can perform an action that requires specific roles\n * @param userRoles - User's role assignments\n * @param requiredRoles - Roles required for the action\n * @param context - Context for the action\n * @param requireAll - Whether all roles are required (default: false - any role)\n * @returns True if user can perform the action\n */\nexport function canPerformAction(\n userRoles: UserRoles,\n requiredRoles: BaseRole[],\n context: RoleContext = DEFAULT_CONTEXT,\n requireAll: boolean = false\n): boolean {\n if (requireAll) {\n return hasAllRoles(userRoles, requiredRoles, context);\n }\n return hasAnyRole(userRoles, requiredRoles, context);\n}\n\n/**\n * Create a role checker function for a specific context\n * @param context - Context to create checker for\n * @returns Function that checks roles in the specified context\n */\nexport function createContextRoleChecker(context: RoleContext) {\n return {\n hasRole: (userRoles: UserRoles, role: BaseRole) => hasRole(userRoles, role, context),\n\n hasAnyRole: (userRoles: UserRoles, roles: BaseRole[]) => hasAnyRole(userRoles, roles, context),\n\n hasAllRoles: (userRoles: UserRoles, roles: BaseRole[]) =>\n hasAllRoles(userRoles, roles, context),\n\n hasMinimumLevel: (userRoles: UserRoles, level: RoleLevel) =>\n hasMinimumRoleLevel(userRoles, level, context),\n\n canPerformAction: (userRoles: UserRoles, requiredRoles: BaseRole[], requireAll?: boolean) =>\n canPerformAction(userRoles, requiredRoles, context, requireAll),\n };\n}\n\n/**\n * Role-based authorization decorator for methods\n */\nexport function requiresRole(roles: BaseRole[], context: RoleContext = DEFAULT_CONTEXT) {\n return function (_target: object, _propertyName: string, descriptor: PropertyDescriptor) {\n const method = descriptor.value;\n\n descriptor.value = function (...args: unknown[]) {\n // Assume first parameter contains user roles or user object\n const firstArg = args[0] as { roles?: UserRoles } | UserRoles | undefined;\n const userRoles = (firstArg && 'roles' in firstArg ? firstArg.roles : firstArg) as\n | UserRoles\n | undefined;\n\n if (!userRoles || !hasAnyRole(userRoles, roles, context)) {\n throw new Error(\n `Access denied. Required roles: ${roles.join(', ')} in context: ${context}`\n );\n }\n\n return method.apply(this, args);\n };\n\n return descriptor;\n };\n}\n\n/**\n * Utility type for components that need role checking\n */\nexport interface RoleAware {\n roles: UserRoles;\n}\n\n/**\n * Type guard to check if an object has role information\n */\nexport function hasRoleInformation(obj: unknown): obj is RoleAware {\n return Boolean(obj && typeof obj === 'object' && 'roles' in obj);\n}\n\n/**\n * Parse roles from the legacy format to the new structured format\n * @param legacyRoles - Roles in Record<string, string[]> format\n * @returns Roles in UserRoles format\n */\nexport function parseLegacyRoles(legacyRoles: Record<string, string[]>): UserRoles {\n const userRoles: UserRoles = {};\n\n // Only process the default context\n if (DEFAULT_CONTEXT in legacyRoles) {\n userRoles[DEFAULT_CONTEXT] = legacyRoles[DEFAULT_CONTEXT].filter((role): role is BaseRole =>\n Object.keys(ROLE_HIERARCHY).includes(role)\n );\n }\n\n return userRoles;\n}\n\n/**\n * Convert UserRoles back to legacy format for API compatibility\n * @param userRoles - Roles in UserRoles format\n * @returns Roles in Record<string, string[]> format\n */\nexport function toLegacyRoles(userRoles: UserRoles): Record<string, string[]> {\n const legacyRoles: Record<string, string[]> = {};\n\n Object.entries(userRoles).forEach(([context, roles]) => {\n legacyRoles[context] = roles;\n });\n\n return legacyRoles;\n}\n\n/**\n * Default role checker for the e-receipts context\n */\nexport const ERoleChecker = createContextRoleChecker(DEFAULT_CONTEXT);\n\n/**\n * Common role combinations for quick checking\n */\nexport const RoleGroups = {\n CASHIER_ROLES: ['ROLE_CASHIER', 'ROLE_MERCHANT'] as BaseRole[],\n ALL_ROLES: Object.keys(ROLE_HIERARCHY) as BaseRole[],\n} as const;\n","import axios, { AxiosError, AxiosInstance } from 'axios';\n\nimport { ISecureStorage } from '../adapters';\nimport { ConfigManager } from './config';\nimport { parseLegacyRoles } from './roles';\nimport {\n ACubeSDKError,\n AuthCredentials,\n IUserProvider,\n JWTPayload,\n StoredTokenData,\n TokenResponse,\n User,\n} from './types';\n\n/**\n * Authentication events\n */\nexport interface AuthEvents {\n onAuthError?: (error: ACubeSDKError) => void;\n onUserChanged?: (user: User | null) => void;\n}\n\n/**\n * JWT Authentication Manager\n */\nexport class AuthManager implements IUserProvider {\n private static readonly TOKEN_KEY = 'acube_tokens';\n private static readonly USER_KEY = 'acube_user';\n\n private httpClient: AxiosInstance;\n private currentUser: User | null = null;\n\n constructor(\n private config: ConfigManager,\n private secureStorage: ISecureStorage,\n private events: AuthEvents = {}\n ) {\n this.httpClient = this.createHttpClient();\n this.setupInterceptors();\n }\n\n private createHttpClient(): AxiosInstance {\n return axios.create({\n baseURL: this.config.getAuthUrl(),\n timeout: this.config.getTimeout(),\n headers: {\n 'Content-Type': 'application/json',\n ...this.config.getCustomHeaders(),\n },\n });\n }\n\n private setupInterceptors(): void {\n // Request interceptor to add auth header\n this.httpClient.interceptors.request.use(\n async (config) => {\n const tokenData = await this.getStoredTokens();\n if (tokenData?.accessToken) {\n config.headers.Authorization = `Bearer ${tokenData.accessToken}`;\n }\n return config;\n },\n (error) => Promise.reject(error)\n );\n\n // Response interceptor for 401 errors\n this.httpClient.interceptors.response.use(\n (response) => response,\n async (error: AxiosError) => {\n if (error.response?.status === 401) {\n // Token expired, clear tokens and notify\n await this.clearTokens();\n const authError = new ACubeSDKError('AUTH_ERROR', 'Session expired');\n this.events.onAuthError?.(authError);\n }\n\n throw this.transformError(error);\n }\n );\n }\n\n /**\n * Login with email and password\n */\n async login(credentials: AuthCredentials): Promise<User> {\n try {\n const response = await this.httpClient.post<TokenResponse>(\n '/login',\n {\n email: credentials.email,\n password: credentials.password,\n },\n {\n headers: {\n 'Content-Type': 'application/json',\n },\n }\n );\n\n // Parse JWT token to extract expiration\n const jwtPayload = this.parseJWTToken(response.data.token);\n\n const tokenData: StoredTokenData = {\n accessToken: response.data.token,\n expiresAt: jwtPayload.exp * 1000, // Convert to milliseconds\n };\n\n await this.storeTokens(tokenData);\n\n // Create user from JWT payload\n const user: User = {\n id: jwtPayload.uid.toString(),\n email: jwtPayload.username,\n username: jwtPayload.username,\n roles: parseLegacyRoles(jwtPayload.roles),\n fid: jwtPayload.fid,\n pid: jwtPayload.pid,\n expiresAt: jwtPayload.exp * 1000, // Convert to milliseconds\n };\n\n this.currentUser = user;\n\n // Store user for future use\n await this.secureStorage.set(AuthManager.USER_KEY, JSON.stringify(user));\n\n this.events.onUserChanged?.(user);\n\n return user;\n } catch (error) {\n throw this.transformError(error);\n }\n }\n\n /**\n * Parse JWT token to extract payload\n */\n private parseJWTToken(token: string): JWTPayload {\n try {\n // JWT tokens have three parts separated by dots: header.payload.signature\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error('Invalid JWT token format');\n }\n\n // Decode the payload (second part)\n const payload = parts[1];\n if (!payload) {\n throw new Error('JWT token missing payload');\n }\n\n // Add padding if needed for base64 decoding\n const paddedPayload = payload + '==='.slice(0, (4 - (payload.length % 4)) % 4);\n\n // Decode from base64\n const decodedPayload = atob(paddedPayload);\n\n // Parse JSON\n return JSON.parse(decodedPayload) as JWTPayload;\n } catch (error) {\n throw new ACubeSDKError('AUTH_ERROR', 'Failed to parse JWT token', error);\n }\n }\n\n /**\n * Logout and clear tokens\n */\n async logout(): Promise<void> {\n await this.clearTokens();\n this.currentUser = null;\n this.events.onUserChanged?.(null);\n }\n\n /**\n * Get current user information\n */\n async getCurrentUser(): Promise<User> {\n if (this.currentUser) {\n return this.currentUser;\n }\n\n // Try to get from storage first\n try {\n const userJson = await this.secureStorage.get(AuthManager.USER_KEY);\n if (userJson) {\n this.currentUser = JSON.parse(userJson);\n return this.currentUser!;\n }\n } catch {\n // Ignore storage errors\n }\n\n // If no user in storage and no current user, check if we have a valid token\n const tokenData = await this.getStoredTokens();\n if (tokenData && !this.isTokenExpired(tokenData)) {\n // Parse user info from JWT token\n const jwtPayload = this.parseJWTToken(tokenData.accessToken);\n\n const user: User = {\n id: jwtPayload.uid.toString(),\n email: jwtPayload.username,\n username: jwtPayload.username,\n roles: parseLegacyRoles(jwtPayload.roles),\n fid: jwtPayload.fid,\n pid: jwtPayload.pid,\n expiresAt: jwtPayload.exp * 1000, // Convert to milliseconds\n };\n\n this.currentUser = user;\n\n // Store for future use\n await this.secureStorage.set(AuthManager.USER_KEY, JSON.stringify(user));\n\n return user;\n }\n\n throw new ACubeSDKError('AUTH_ERROR', 'No valid authentication found');\n }\n\n /**\n * Check if user is authenticated\n */\n async isAuthenticated(): Promise<boolean> {\n const tokenData = await this.getStoredTokens();\n return tokenData !== null && !this.isTokenExpired(tokenData);\n }\n\n /**\n * Get access token for API calls\n */\n async getAccessToken(): Promise<string | null> {\n const tokenData = await this.getStoredTokens();\n\n if (!tokenData) {\n return null;\n }\n\n if (this.isTokenExpired(tokenData)) {\n // Token expired, clear it\n await this.clearTokens();\n return null;\n }\n\n return tokenData.accessToken;\n }\n\n /**\n * Store tokens securely\n */\n private async storeTokens(tokenData: StoredTokenData): Promise<void> {\n await this.secureStorage.set(AuthManager.TOKEN_KEY, JSON.stringify(tokenData));\n }\n\n /**\n * Get stored tokens\n */\n private async getStoredTokens(): Promise<StoredTokenData | null> {\n try {\n const tokenJson = await this.secureStorage.get(AuthManager.TOKEN_KEY);\n return tokenJson ? JSON.parse(tokenJson) : null;\n } catch {\n return null;\n }\n }\n\n /**\n * Clear stored tokens\n */\n private async clearTokens(): Promise<void> {\n await Promise.all([\n this.secureStorage.remove(AuthManager.TOKEN_KEY),\n this.secureStorage.remove(AuthManager.USER_KEY),\n ]);\n }\n\n /**\n * Check if token is expired\n */\n private isTokenExpired(tokenData: StoredTokenData): boolean {\n // Add 5 minute buffer\n return Date.now() >= tokenData.expiresAt - 300000;\n }\n\n /**\n * Transform API errors to SDK errors\n */\n private transformError(error: unknown): ACubeSDKError {\n if (error instanceof ACubeSDKError) {\n return error;\n }\n\n if (axios.isAxiosError(error)) {\n const response = error.response;\n\n if (!response) {\n return new ACubeSDKError('NETWORK_ERROR', 'Network error occurred', error);\n }\n\n switch (response.status) {\n case 401:\n return new ACubeSDKError('AUTH_ERROR', 'Authentication failed', error, 401);\n case 403:\n return new ACubeSDKError('FORBIDDEN_ERROR', 'Access forbidden', error, 403);\n case 404:\n return new ACubeSDKError('NOT_FOUND_ERROR', 'Resource not found', error, 404);\n case 422:\n return new ACubeSDKError('VALIDATION_ERROR', 'Validation error', error, 422);\n default:\n return new ACubeSDKError(\n 'UNKNOWN_ERROR',\n 'Unknown error occurred',\n error,\n response.status\n );\n }\n }\n\n return new ACubeSDKError('UNKNOWN_ERROR', 'Unknown error occurred', error);\n }\n}\n","/**\n * Platform detection utilities\n */\n\nexport type Platform = 'web' | 'react-native' | 'node' | 'unknown';\n\nexport interface PlatformInfo {\n platform: Platform;\n isReactNative: boolean;\n isWeb: boolean;\n isNode: boolean;\n isExpo: boolean;\n}\n\n// Type declarations for global variables that may not be available\ndeclare const global: typeof globalThis & {\n __DEV__?: boolean;\n navigator?: { product?: string };\n Expo?: unknown;\n expo?: unknown;\n};\ndeclare const process: { versions?: { node?: string } } | undefined;\ndeclare const window: { document?: unknown; navigator?: unknown } | undefined;\n\n/**\n * Detect the current platform\n */\nexport function detectPlatform(): PlatformInfo {\n // Check for React Native\n if (\n typeof global !== 'undefined' &&\n global.__DEV__ !== undefined &&\n typeof global.navigator !== 'undefined' &&\n global.navigator.product === 'ReactNative'\n ) {\n return {\n platform: 'react-native',\n isReactNative: true,\n isWeb: false,\n isNode: false,\n isExpo: checkExpo(),\n };\n }\n\n // Check for Web/Browser\n if (\n typeof window !== 'undefined' &&\n typeof window.document !== 'undefined' &&\n typeof window.navigator !== 'undefined'\n ) {\n return {\n platform: 'web',\n isReactNative: false,\n isWeb: true,\n isNode: false,\n isExpo: false,\n };\n }\n\n // Check for Node.js\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n return {\n platform: 'node',\n isReactNative: false,\n isWeb: false,\n isNode: true,\n isExpo: false,\n };\n }\n\n // Unknown platform\n return {\n platform: 'unknown',\n isReactNative: false,\n isWeb: false,\n isNode: false,\n isExpo: false,\n };\n}\n\n/**\n * Check if running in Expo\n */\nfunction checkExpo(): boolean {\n try {\n return (\n typeof global !== 'undefined' &&\n (typeof global.Expo !== 'undefined' || typeof global.expo !== 'undefined')\n );\n } catch {\n return false;\n }\n}\n","/**\n * Compression utilities for cache adapters\n */\n\n/**\n * Compression result\n */\nexport interface CompressionResult {\n data: string;\n compressed: boolean;\n originalSize: number;\n compressedSize: number;\n}\n\n/**\n * Decompression result\n */\nexport interface DecompressionResult {\n data: string;\n wasCompressed: boolean;\n}\n\n/**\n * Compress data if it exceeds the threshold\n */\nexport function compressData(data: string, threshold: number = 1024): CompressionResult {\n const originalSize = data.length * 2; // UTF-16 estimation\n\n // Don't compress if below threshold\n if (originalSize < threshold) {\n return {\n data,\n compressed: false,\n originalSize,\n compressedSize: originalSize,\n };\n }\n\n try {\n // Use simple base64 + LZ-string style compression for cross-platform compatibility\n const compressed = compressString(data);\n const compressedSize = compressed.length * 2;\n\n // Only use compression if it actually reduces size\n if (compressedSize < originalSize) {\n return {\n data: compressed,\n compressed: true,\n originalSize,\n compressedSize,\n };\n } else {\n return {\n data,\n compressed: false,\n originalSize,\n compressedSize: originalSize,\n };\n }\n } catch (error) {\n // Fallback to uncompressed on error\n return {\n data,\n compressed: false,\n originalSize,\n compressedSize: originalSize,\n };\n }\n}\n\n/**\n * Decompress data if it was compressed\n */\nexport function decompressData(data: string, compressed: boolean): DecompressionResult {\n if (!compressed) {\n return {\n data,\n wasCompressed: false,\n };\n }\n\n try {\n const decompressed = decompressString(data);\n return {\n data: decompressed,\n wasCompressed: true,\n };\n } catch (error) {\n // Return original data if decompression fails\n return {\n data,\n wasCompressed: false,\n };\n }\n}\n\n/**\n * Simple string compression using run-length encoding and base64\n * Cross-platform compatible implementation\n */\nfunction compressString(input: string): string {\n // Simple run-length encoding\n let compressed = '';\n let i = 0;\n\n while (i < input.length) {\n let count = 1;\n const char = input[i];\n\n // Count consecutive characters\n while (i + count < input.length && input[i + count] === char && count < 255) {\n count++;\n }\n\n if (count > 3) {\n // Use run-length encoding for sequences > 3\n compressed += `~${count}${char}`;\n } else {\n // Add characters normally\n for (let j = 0; j < count; j++) {\n compressed += char;\n }\n }\n\n i += count;\n }\n\n // Add compression marker\n return `COMP:${btoa(compressed)}`;\n}\n\n/**\n * Simple string decompression\n */\nfunction decompressString(input: string): string {\n // Check for compression marker\n if (!input.startsWith('COMP:')) {\n return input;\n }\n\n try {\n const encodedData = input.substring(5);\n if (!encodedData) {\n return input;\n }\n const compressed = atob(encodedData);\n let decompressed = '';\n let i = 0;\n\n while (i < compressed.length) {\n if (compressed[i] === '~' && i + 2 < compressed.length) {\n // Run-length encoded sequence\n let countStr = '';\n i++; // Skip ~\n\n // Read count\n while (i < compressed.length) {\n const char = compressed[i];\n if (char && /\\d/.test(char)) {\n countStr += char;\n i++;\n } else {\n break;\n }\n }\n\n if (countStr && i < compressed.length) {\n const count = parseInt(countStr, 10);\n const char = compressed[i];\n\n for (let j = 0; j < count; j++) {\n decompressed += char;\n }\n i++;\n }\n } else {\n decompressed += compressed[i];\n i++;\n }\n }\n\n return decompressed;\n } catch (error) {\n // Return input if decompression fails\n return input;\n }\n}\n\n/**\n * Estimate compressed size without actually compressing\n */\nexport function estimateCompressionSavings(data: string): number {\n // Simple heuristic: look for repeated patterns\n const repeated = data.match(/(.)\\1{3,}/g);\n if (!repeated) return 0;\n\n let savings = 0;\n for (const match of repeated) {\n // Estimate savings from run-length encoding\n const originalBytes = match.length * 2;\n const compressedBytes = 6; // ~NNN + char\n if (originalBytes > compressedBytes) {\n savings += originalBytes - compressedBytes;\n }\n }\n\n return Math.min(savings, data.length * 2 * 0.5); // Max 50% savings\n}\n","import { CacheOptions, CacheSize, CachedItem, ICacheAdapter } from '../../adapters';\nimport { compressData, decompressData } from '../../adapters/compression';\nimport {\n CacheRow,\n ExpoSQLiteDatabase,\n RNSQLiteDatabase,\n SQLiteColumnInfo,\n SQLiteExecuteResult,\n SQLiteParams,\n SQLiteTransaction,\n} from './types';\n\n/**\n * React Native cache adapter using SQLite (Expo or react-native-sqlite-storage)\n * Cache never expires - data persists until explicitly invalidated\n */\nexport class ReactNativeCacheAdapter implements ICacheAdapter {\n private static readonly DB_NAME = 'acube_cache.db';\n private static readonly TABLE_NAME = 'cache_entries';\n\n private db: ExpoSQLiteDatabase | RNSQLiteDatabase | null = null;\n private initPromise: Promise<void> | null = null;\n private options: CacheOptions;\n private isExpo = false;\n private debugEnabled = false;\n private hasCompressedColumn = false;\n\n constructor(options: CacheOptions = {}) {\n this.options = {\n maxSize: 50 * 1024 * 1024, // 50MB\n maxEntries: 10000,\n compression: false,\n compressionThreshold: 1024,\n ...options,\n };\n this.debugEnabled = options.debugEnabled || false;\n this.initPromise = this.initialize();\n }\n\n private debug(message: string, data?: Record<string, unknown> | unknown): void {\n if (this.debugEnabled) {\n if (data) {\n console.log(`[CACHE-RN] ${message}`, data);\n } else {\n console.log(`[CACHE-RN] ${message}`);\n }\n }\n }\n\n private normalizeResults<T = CacheRow>(results: SQLiteExecuteResult): T[] {\n if (this.isExpo) {\n const expoResults = results as { results?: T[] } | T[];\n if (Array.isArray(expoResults)) {\n return expoResults;\n }\n return expoResults.results || [];\n } else {\n const rnResults = results as { rows?: { length: number; item(i: number): T } };\n const rows = rnResults.rows;\n if (!rows || rows.length === 0) return [];\n\n const normalizedRows: T[] = [];\n for (let i = 0; i < rows.length; i++) {\n normalizedRows.push(rows.item(i));\n }\n return normalizedRows;\n }\n }\n\n private async initialize(): Promise<void> {\n if (this.db) return;\n\n try {\n // Try Expo SQLite first\n const ExpoSQLite = require('expo-sqlite');\n this.db = await ExpoSQLite.openDatabaseAsync(ReactNativeCacheAdapter.DB_NAME);\n this.isExpo = true;\n await this.createTables();\n } catch (expoError) {\n try {\n // Fallback to react-native-sqlite-storage\n const SQLite = require('react-native-sqlite-storage');\n\n this.db = await new Promise<RNSQLiteDatabase>((resolve, reject) => {\n SQLite.openDatabase(\n {\n name: ReactNativeCacheAdapter.DB_NAME,\n location: 'default',\n },\n resolve,\n reject\n );\n });\n\n this.isExpo = false;\n await this.createTables();\n } catch (rnError) {\n throw new Error(\n `Failed to initialize SQLite: Expo error: ${expoError}, RN error: ${rnError}`\n );\n }\n }\n }\n\n private async createTables(): Promise<void> {\n // Create table with simplified schema (no TTL)\n const createTableSQL = `\n CREATE TABLE IF NOT EXISTS ${ReactNativeCacheAdapter.TABLE_NAME} (\n cache_key TEXT PRIMARY KEY,\n data TEXT NOT NULL,\n timestamp INTEGER NOT NULL\n );\n\n CREATE INDEX IF NOT EXISTS idx_timestamp ON ${ReactNativeCacheAdapter.TABLE_NAME}(timestamp);\n `;\n\n await this.executeSql(createTableSQL);\n\n // Then, run migrations to add new columns if they don't exist\n await this.runMigrations();\n }\n\n private async runMigrations(): Promise<void> {\n this.debug('Running database migrations...');\n\n try {\n // Check if compressed column exists\n this.hasCompressedColumn = await this.checkColumnExists('compressed');\n\n if (!this.hasCompressedColumn) {\n this.debug('Adding compressed column to cache table');\n const addColumnSQL = `ALTER TABLE ${ReactNativeCacheAdapter.TABLE_NAME} ADD COLUMN compressed INTEGER DEFAULT 0`;\n await this.executeSql(addColumnSQL);\n this.hasCompressedColumn = true;\n this.debug('Successfully added compressed column');\n } else {\n this.debug('Compressed column already exists');\n }\n\n this.debug('Database migrations completed', {\n hasCompressedColumn: this.hasCompressedColumn,\n });\n } catch (error) {\n this.debug('Migration failed, disabling compression features', error);\n this.hasCompressedColumn = false;\n // Don't throw - allow the app to continue even if migration fails\n // The compressed feature will just be disabled\n }\n }\n\n private async checkColumnExists(columnName: string): Promise<boolean> {\n try {\n const pragmaSQL = `PRAGMA table_info(${ReactNativeCacheAdapter.TABLE_NAME})`;\n const results = await this.executeSql(pragmaSQL);\n const columns = this.normalizeResults<SQLiteColumnInfo>(results);\n\n this.debug('Table columns found', { columns: columns.map((c) => c.name) });\n\n return columns.some((column) => column.name === columnName);\n } catch (error) {\n this.debug('Error checking column existence', error);\n return false;\n }\n }\n\n async get<T>(key: string): Promise<CachedItem<T> | null> {\n await this.ensureInitialized();\n\n const sql = `SELECT * FROM ${ReactNativeCacheAdapter.TABLE_NAME} WHERE cache_key = ?`;\n this.debug('Executing get query', { sql, key });\n const results = await this.executeSql(sql, [key]);\n this.debug('Get query results', { key, hasResults: !!results });\n\n // Normalize results from different SQLite implementations\n const rows = this.normalizeResults(results);\n\n if (!rows || rows.length === 0) {\n return null;\n }\n\n const row = rows[0];\n if (!row) {\n return null;\n }\n\n const isCompressed = this.hasCompressedColumn ? !!row.compressed : false;\n const rawData = isCompressed ? decompressData(row.data, true).data : row.data;\n\n return {\n data: JSON.parse(rawData),\n timestamp: row.timestamp,\n compressed: isCompressed,\n };\n }\n\n async set<T>(key: string, data: T): Promise<void> {\n const item: CachedItem<T> = {\n data,\n timestamp: Date.now(),\n };\n\n this.debug('Setting cache item', { key });\n\n return this.setItem(key, item);\n }\n\n async setItem<T>(key: string, item: CachedItem<T>): Promise<void> {\n await this.ensureInitialized();\n\n // Handle compression if enabled and compressed column is available\n const serializedData = JSON.stringify(item.data);\n let finalData = serializedData;\n let isCompressed = false;\n\n if (this.options.compression && this.options.compressionThreshold && this.hasCompressedColumn) {\n const compressionResult = compressData(serializedData, this.options.compressionThreshold);\n finalData = compressionResult.data;\n isCompressed = compressionResult.compressed;\n\n this.debug('Compression result', {\n key,\n originalSize: compressionResult.originalSize,\n compressedSize: compressionResult.compressedSize,\n compressed: isCompressed,\n savings: compressionResult.originalSize - compressionResult.compressedSize,\n });\n }\n\n this.debug('Setting item with metadata', {\n key,\n timestamp: item.timestamp,\n compressed: isCompressed,\n hasCompressedColumn: this.hasCompressedColumn,\n });\n\n // Build SQL and parameters based on available columns\n let sql: string;\n let params: SQLiteParams;\n\n if (this.hasCompressedColumn) {\n sql = `\n INSERT OR REPLACE INTO ${ReactNativeCacheAdapter.TABLE_NAME}\n (cache_key, data, timestamp, compressed)\n VALUES (?, ?, ?, ?)\n `;\n params = [key, finalData, item.timestamp, isCompressed ? 1 : 0];\n } else {\n // Fallback for databases without compressed column\n sql = `\n INSERT OR REPLACE INTO ${ReactNativeCacheAdapter.TABLE_NAME}\n (cache_key, data, timestamp)\n VALUES (?, ?, ?)\n `;\n params = [key, finalData, item.timestamp];\n }\n\n this.debug('Executing setItem SQL', { key, paramsCount: params.length });\n\n await this.executeSql(sql, params);\n }\n\n async setBatch<T>(items: Array<[string, CachedItem<T>]>): Promise<void> {\n if (items.length === 0) return;\n\n await this.ensureInitialized();\n\n this.debug('Batch setting items', { count: items.length });\n\n if (this.isExpo) {\n await (this.db as ExpoSQLiteDatabase).withTransactionAsync(async () => {\n for (const [key, item] of items) {\n await this.setBatchItem(key, item);\n }\n });\n } else {\n return new Promise<void>((resolve, reject) => {\n (this.db as RNSQLiteDatabase).transaction(\n (tx: SQLiteTransaction) => {\n const promises = items.map(([key, item]) => this.setBatchItemRN(tx, key, item));\n Promise.all(promises)\n .then(() => resolve())\n .catch(reject);\n },\n reject,\n () => resolve()\n );\n });\n }\n\n this.debug('Batch operation completed', { count: items.length });\n }\n\n private async setBatchItem<T>(key: string, item: CachedItem<T>): Promise<void> {\n // Handle compression if enabled and compressed column is available\n const serializedData = JSON.stringify(item.data);\n let finalData = serializedData;\n let isCompressed = false;\n\n if (this.options.compression && this.options.compressionThreshold && this.hasCompressedColumn) {\n const compressionResult = compressData(serializedData, this.options.compressionThreshold);\n finalData = compressionResult.data;\n isCompressed = compressionResult.compressed;\n }\n\n // Build SQL and parameters based on available columns\n let sql: string;\n let params: SQLiteParams;\n\n if (this.hasCompressedColumn) {\n sql = `\n INSERT OR REPLACE INTO ${ReactNativeCacheAdapter.TABLE_NAME}\n (cache_key, data, timestamp, compressed)\n VALUES (?, ?, ?, ?)\n `;\n params = [key, finalData, item.timestamp, isCompressed ? 1 : 0];\n } else {\n sql = `\n INSERT OR REPLACE INTO ${ReactNativeCacheAdapter.TABLE_NAME}\n (cache_key, data, timestamp)\n VALUES (?, ?, ?)\n `;\n params = [key, finalData, item.timestamp];\n }\n\n await (this.db as ExpoSQLiteDatabase).runAsync(sql, params);\n }\n\n private async setBatchItemRN<T>(\n tx: SQLiteTransaction,\n key: string,\n item: CachedItem<T>\n ): Promise<void> {\n // Handle compression if enabled and compressed column is available\n const serializedData = JSON.stringify(item.data);\n let finalData = serializedData;\n let isCompressed = false;\n\n if (this.options.compression && this.options.compressionThreshold && this.hasCompressedColumn) {\n const compressionResult = compressData(serializedData, this.options.compressionThreshold);\n finalData = compressionResult.data;\n isCompressed = compressionResult.compressed;\n }\n\n // Build SQL and parameters based on available columns\n let sql: string;\n let params: SQLiteParams;\n\n if (this.hasCompressedColumn) {\n sql = `\n INSERT OR REPLACE INTO ${ReactNativeCacheAdapter.TABLE_NAME}\n (cache_key, data, timestamp, compressed)\n VALUES (?, ?, ?, ?)\n `;\n params = [key, finalData, item.timestamp, isCompressed ? 1 : 0];\n } else {\n sql = `\n INSERT OR REPLACE INTO ${ReactNativeCacheAdapter.TABLE_NAME}\n (cache_key, data, timestamp)\n VALUES (?, ?, ?)\n `;\n params = [key, finalData, item.timestamp];\n }\n\n return new Promise<void>((resolve, reject) => {\n tx.executeSql(\n sql,\n params,\n () => resolve(),\n (_: SQLiteTransaction, error: Error) => {\n reject(error);\n return false;\n }\n );\n });\n }\n\n async invalidate(pattern: string): Promise<void> {\n await this.ensureInitialized();\n\n const keys = await this.getKeys(pattern);\n if (keys.length === 0) return;\n\n const placeholders = keys.map(() => '?').join(',');\n const sql = `DELETE FROM ${ReactNativeCacheAdapter.TABLE_NAME} WHERE cache_key IN (${placeholders})`;\n\n await this.executeSql(sql, keys);\n }\n\n async clear(): Promise<void> {\n await this.ensureInitialized();\n\n const sql = `DELETE FROM ${ReactNativeCacheAdapter.TABLE_NAME}`;\n await this.executeSql(sql);\n }\n\n async getSize(): Promise<CacheSize> {\n await this.ensureInitialized();\n\n const sql = `\n SELECT\n COUNT(*) as entries,\n SUM(LENGTH(data)) as bytes\n FROM ${ReactNativeCacheAdapter.TABLE_NAME}\n `;\n\n const results = await this.executeSql(sql);\n const rows = this.normalizeResults<{ entries: number; bytes: number }>(results);\n const row = rows[0] || { entries: 0, bytes: 0 };\n\n return {\n entries: row.entries || 0,\n bytes: (row.bytes || 0) * 2,\n lastCleanup: Date.now(),\n };\n }\n\n async cleanup(): Promise<number> {\n // No cleanup needed - cache never expires\n return 0;\n }\n\n async getKeys(pattern?: string): Promise<string[]> {\n await this.ensureInitialized();\n\n let sql = `SELECT cache_key FROM ${ReactNativeCacheAdapter.TABLE_NAME}`;\n const params: SQLiteParams = [];\n\n if (pattern) {\n // Simple pattern matching with LIKE\n const likePattern = pattern.replace(/\\*/g, '%').replace(/\\?/g, '_');\n sql += ' WHERE cache_key LIKE ?';\n params.push(likePattern);\n }\n\n const results = await this.executeSql(sql, params);\n const keys: string[] = [];\n\n const rows = this.normalizeResults(results);\n for (const row of rows) {\n keys.push(row.cache_key);\n }\n\n return keys;\n }\n\n private async executeSql(sql: string, params: SQLiteParams = []): Promise<SQLiteExecuteResult> {\n if (this.isExpo) {\n const expoDB = this.db as ExpoSQLiteDatabase;\n if (sql.toLowerCase().includes('select') || sql.toLowerCase().includes('pragma')) {\n const result = await expoDB.getAllAsync(sql, params);\n return Array.isArray(result) ? { results: result } : result;\n } else {\n return await expoDB.runAsync(sql, params);\n }\n } else {\n // react-native-sqlite-storage\n return new Promise((resolve, reject) => {\n (this.db as RNSQLiteDatabase).transaction((tx: SQLiteTransaction) => {\n tx.executeSql(\n sql,\n params,\n (_: SQLiteTransaction, results: SQLiteExecuteResult) => resolve(results),\n (_: SQLiteTransaction, error: Error) => {\n reject(error);\n return false;\n }\n );\n });\n });\n }\n }\n\n private async ensureInitialized(): Promise<void> {\n if (!this.initPromise) {\n this.initPromise = this.initialize();\n }\n await this.initPromise;\n }\n}\n\n/**\n * Memory-based fallback cache adapter for environments without SQLite\n * Cache never expires - data persists until explicitly invalidated\n */\nexport class MemoryCacheAdapter implements ICacheAdapter {\n private cache = new Map<string, CachedItem<unknown>>();\n private options: CacheOptions;\n private debugEnabled = false;\n private totalBytes = 0;\n\n constructor(options: CacheOptions = {}) {\n this.options = {\n maxEntries: 1000,\n ...options,\n };\n this.debugEnabled = options.debugEnabled || false;\n }\n\n private debug(message: string, data?: Record<string, unknown> | unknown): void {\n if (this.debugEnabled) {\n if (data) {\n console.log(`[CACHE-MEMORY] ${message}`, data);\n } else {\n console.log(`[CACHE-MEMORY] ${message}`);\n }\n }\n }\n\n private calculateItemSize(key: string, item: CachedItem<unknown>): number {\n // Calculate rough size estimation for memory usage\n const keySize = key.length * 2; // UTF-16 estimation\n const itemSize = JSON.stringify(item).length * 2; // UTF-16 estimation\n return keySize + itemSize;\n }\n\n async get<T>(key: string): Promise<CachedItem<T> | null> {\n this.debug('Getting cache item', { key });\n const item = this.cache.get(key);\n if (!item) {\n this.debug('Cache miss', { key });\n return null;\n }\n\n // Handle decompression if needed\n const isCompressed = !!item.compressed;\n let finalData = item.data;\n\n if (isCompressed) {\n const decompressed = decompressData(item.data as string, true);\n finalData = JSON.parse(decompressed.data);\n }\n\n this.debug('Cache hit', { key, compressed: isCompressed });\n\n return {\n ...item,\n data: finalData as T,\n compressed: isCompressed,\n };\n }\n\n async set<T>(key: string, data: T): Promise<void> {\n this.debug('Setting cache item', { key });\n\n // Handle compression if enabled\n let finalData: T | string = data;\n let isCompressed = false;\n\n if (this.options.compression && this.options.compressionThreshold) {\n const serializedData = JSON.stringify(data);\n const compressionResult = compressData(serializedData, this.options.compressionThreshold);\n\n if (compressionResult.compressed) {\n finalData = compressionResult.data;\n isCompressed = true;\n\n this.debug('Compression result', {\n key,\n originalSize: compressionResult.originalSize,\n compressedSize: compressionResult.compressedSize,\n savings: compressionResult.originalSize - compressionResult.compressedSize,\n });\n }\n }\n\n const item: CachedItem<T | string> = {\n data: finalData,\n timestamp: Date.now(),\n compressed: isCompressed,\n };\n\n return this.setItem(key, item);\n }\n\n async setItem<T>(key: string, item: CachedItem<T>): Promise<void> {\n // Calculate size of new item\n const newItemSize = this.calculateItemSize(key, item);\n\n // If item already exists, subtract old size\n if (this.cache.has(key)) {\n const oldItem = this.cache.get(key)!;\n const oldItemSize = this.calculateItemSize(key, oldItem);\n this.totalBytes -= oldItemSize;\n }\n\n // Enforce max entries limit\n if (this.cache.size >= (this.options.maxEntries || 1000) && !this.cache.has(key)) {\n const oldestKey = this.cache.keys().next().value;\n if (oldestKey) {\n const oldestItem = this.cache.get(oldestKey)!;\n const oldestItemSize = this.calculateItemSize(oldestKey, oldestItem);\n this.totalBytes -= oldestItemSize;\n this.cache.delete(oldestKey);\n this.debug('Removed oldest item for capacity', { oldestKey, freedBytes: oldestItemSize });\n }\n }\n\n // Set new item and update total size\n this.cache.set(key, item);\n this.totalBytes += newItemSize;\n\n this.debug('Updated cache size', {\n entries: this.cache.size,\n totalBytes: this.totalBytes,\n newItemSize,\n });\n }\n\n async setBatch<T>(items: Array<[string, CachedItem<T>]>): Promise<void> {\n if (items.length === 0) return;\n\n this.debug('Batch setting items', { count: items.length });\n\n let totalNewBytes = 0;\n let totalOldBytes = 0;\n const itemsToRemove: string[] = [];\n\n // First pass: calculate size changes and identify capacity issues\n for (const [key, item] of items) {\n const newItemSize = this.calculateItemSize(key, item);\n totalNewBytes += newItemSize;\n\n // If item already exists, track old size for removal\n if (this.cache.has(key)) {\n const oldItem = this.cache.get(key)!;\n const oldItemSize = this.calculateItemSize(key, oldItem);\n totalOldBytes += oldItemSize;\n }\n }\n\n // Handle capacity limits - remove oldest items if needed\n const projectedEntries = this.cache.size + items.filter(([key]) => !this.cache.has(key)).length;\n const maxEntries = this.options.maxEntries || 1000;\n\n if (projectedEntries > maxEntries) {\n const entriesToRemove = projectedEntries - maxEntries;\n const oldestKeys = Array.from(this.cache.keys()).slice(0, entriesToRemove);\n\n for (const oldKey of oldestKeys) {\n const oldItem = this.cache.get(oldKey)!;\n const oldItemSize = this.calculateItemSize(oldKey, oldItem);\n this.totalBytes -= oldItemSize;\n this.cache.delete(oldKey);\n itemsToRemove.push(oldKey);\n }\n\n if (itemsToRemove.length > 0) {\n this.debug('Removed items for batch capacity', {\n removedCount: itemsToRemove.length,\n removedKeys: itemsToRemove,\n });\n }\n }\n\n // Update total bytes accounting\n this.totalBytes = this.totalBytes - totalOldBytes + totalNewBytes;\n\n // Second pass: set all items\n for (const [key, item] of items) {\n this.cache.set(key, item);\n }\n\n this.debug('Batch operation completed', {\n count: items.length,\n totalBytes: this.totalBytes,\n entries: this.cache.size,\n bytesAdded: totalNewBytes - totalOldBytes,\n });\n }\n\n async invalidate(pattern: string): Promise<void> {\n const regex = this.patternToRegex(pattern);\n let removed = 0;\n let bytesFreed = 0;\n\n for (const key of this.cache.keys()) {\n if (regex.test(key)) {\n const item = this.cache.get(key)!;\n const itemSize = this.calculateItemSize(key, item);\n this.cache.delete(key);\n this.totalBytes -= itemSize;\n bytesFreed += itemSize;\n removed++;\n }\n }\n\n if (removed > 0) {\n this.debug('Invalidation completed', {\n pattern,\n entriesRemoved: removed,\n bytesFreed,\n remainingEntries: this.cache.size,\n remainingBytes: this.totalBytes,\n });\n }\n }\n\n async clear(): Promise<void> {\n this.cache.clear();\n this.totalBytes = 0;\n this.debug('Cache cleared', { entries: 0, bytes: 0 });\n }\n\n async getSize(): Promise<CacheSize> {\n return {\n entries: this.cache.size,\n bytes: this.totalBytes,\n lastCleanup: Date.now(),\n };\n }\n\n async cleanup(): Promise<number> {\n // No cleanup needed - cache never expires\n return 0;\n }\n\n async getKeys(pattern?: string): Promise<string[]> {\n const keys = Array.from(this.cache.keys());\n if (!pattern) return keys;\n\n const regex = this.patternToRegex(pattern);\n return keys.filter((key) => regex.test(key));\n }\n\n private patternToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&');\n const regexPattern = escaped.replace(/\\\\\\*/g, '.*').replace(/\\\\\\?/g, '.');\n return new RegExp(`^${regexPattern}$`);\n }\n}\n","const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst transactionDoneMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n // This mapping exists in reverseTransformCache but doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(this.request);\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction), event);\n });\n }\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event.newVersion, event));\n }\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking) {\n db.addEventListener('versionchange', (event) => blocking(event.oldVersion, event.newVersion, event));\n }\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked) {\n request.addEventListener('blocked', (event) => blocked(\n // Casting due to https://github.com/microsoft/TypeScript-DOM-lib-generator/pull/1405\n event.oldVersion, event));\n }\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nconst advanceMethodProps = ['continue', 'continuePrimaryKey', 'advance'];\nconst methodMap = {};\nconst advanceResults = new WeakMap();\nconst ittrProxiedCursorToOriginalProxy = new WeakMap();\nconst cursorIteratorTraps = {\n get(target, prop) {\n if (!advanceMethodProps.includes(prop))\n return target[prop];\n let cachedFunc = methodMap[prop];\n if (!cachedFunc) {\n cachedFunc = methodMap[prop] = function (...args) {\n advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args));\n };\n }\n return cachedFunc;\n },\n};\nasync function* iterate(...args) {\n // tslint:disable-next-line:no-this-assignment\n let cursor = this;\n if (!(cursor instanceof IDBCursor)) {\n cursor = await cursor.openCursor(...args);\n }\n if (!cursor)\n return;\n cursor = cursor;\n const proxiedCursor = new Proxy(cursor, cursorIteratorTraps);\n ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor);\n // Map this double-proxy back to the original, so other cursor methods work.\n reverseTransformCache.set(proxiedCursor, unwrap(cursor));\n while (cursor) {\n yield proxiedCursor;\n // If one of the advancing methods was not called, call continue().\n cursor = await (advanceResults.get(proxiedCursor) || cursor.continue());\n advanceResults.delete(proxiedCursor);\n }\n}\nfunction isIteratorProp(target, prop) {\n return ((prop === Symbol.asyncIterator &&\n instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor])) ||\n (prop === 'iterate' && instanceOfAny(target, [IDBIndex, IDBObjectStore])));\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get(target, prop, receiver) {\n if (isIteratorProp(target, prop))\n return iterate;\n return oldTraps.get(target, prop, receiver);\n },\n has(target, prop) {\n return isIteratorProp(target, prop) || oldTraps.has(target, prop);\n },\n}));\n\nexport { deleteDB, openDB, unwrap, wrap };\n","import { IDBPDatabase, IDBPTransaction, deleteDB, openDB } from 'idb';\n\nimport { CacheOptions, CacheSize, CachedItem, ICacheAdapter } from '../../adapters';\nimport { compressData, decompressData } from '../../adapters/compression';\n\n/**\n * Web cache adapter using IndexedDB with automatic error recovery\n * Cache never expires - data persists until explicitly invalidated\n */\nexport class WebCacheAdapter implements ICacheAdapter {\n private static readonly DB_NAME = 'acube_cache';\n private static readonly DB_VERSION = 2;\n private static readonly STORE_NAME = 'cache_entries';\n\n private db: IDBPDatabase | null = null;\n private initPromise: Promise<void> | null = null;\n private options: CacheOptions;\n private debugEnabled = false;\n private retryCount = 0;\n private maxRetries = 3;\n\n constructor(options: CacheOptions = {}) {\n this.options = {\n maxSize: 50 * 1024 * 1024, // 50MB\n maxEntries: 10000,\n compression: false,\n compressionThreshold: 1024,\n ...options,\n };\n this.debugEnabled = options.debugEnabled || process.env.NODE_ENV === 'development';\n this.initPromise = this.initialize();\n }\n\n private debug(message: string, data?: unknown): void {\n if (this.debugEnabled) {\n if (data) {\n console.log(`[CACHE-WEB] ${message}`, data);\n } else {\n console.log(`[CACHE-WEB] ${message}`);\n }\n }\n }\n\n private async initialize(): Promise<void> {\n if (this.db) return;\n\n this.debug('Initializing IndexedDB cache', {\n dbName: WebCacheAdapter.DB_NAME,\n version: WebCacheAdapter.DB_VERSION,\n });\n\n try {\n this.db = await this.openDatabase();\n this.debug('IndexedDB cache initialized successfully');\n this.retryCount = 0; // Reset retry count on success\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n this.debug('Failed to initialize IndexedDB', { error: errorMessage });\n\n // Check if this is a version conflict error\n if (this.isVersionConflictError(errorMessage)) {\n await this.handleVersionConflict();\n } else {\n throw new Error(`Failed to initialize IndexedDB: ${errorMessage}`);\n }\n }\n }\n\n private async openDatabase(): Promise<IDBPDatabase> {\n return await openDB(WebCacheAdapter.DB_NAME, WebCacheAdapter.DB_VERSION, {\n upgrade: (db, oldVersion, newVersion, transaction) => {\n this.debug('Database upgrade needed', { oldVersion, newVersion });\n this.handleUpgrade(db, oldVersion, newVersion, transaction);\n },\n blocked: () => {\n this.debug('Database blocked - another tab may be open');\n },\n blocking: () => {\n this.debug('Database blocking - will close connection');\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n },\n terminated: () => {\n this.debug('Database connection terminated unexpectedly');\n this.db = null;\n },\n });\n }\n\n private handleUpgrade(\n db: IDBPDatabase,\n oldVersion: number,\n newVersion: number | null,\n transaction: IDBPTransaction<unknown, string[], 'versionchange'>\n ): void {\n this.debug('Handling database upgrade', { oldVersion, newVersion });\n\n // Create cache store if it doesn't exist (initial setup)\n if (!db.objectStoreNames.contains(WebCacheAdapter.STORE_NAME)) {\n const store = db.createObjectStore(WebCacheAdapter.STORE_NAME, { keyPath: 'key' });\n store.createIndex('timestamp', 'timestamp', { unique: false });\n this.debug('Created cache store and timestamp index');\n }\n\n // Handle migration from version 1 to 2\n if (oldVersion < 2) {\n const store = transaction.objectStore(WebCacheAdapter.STORE_NAME);\n\n // Remove unused indexes from simplified cache structure\n const indexesToRemove = ['tags', 'source', 'syncStatus'];\n\n indexesToRemove.forEach((indexName) => {\n try {\n if (store.indexNames.contains(indexName)) {\n store.deleteIndex(indexName);\n this.debug(`Removed unused index: ${indexName}`);\n }\n } catch (error) {\n // Ignore errors if indexes don't exist\n this.debug(`Warning: Could not remove index ${indexName}`, error);\n }\n });\n }\n\n this.debug('Database upgrade completed');\n }\n\n private isVersionConflictError(errorMessage: string): boolean {\n return (\n errorMessage.includes('less than the existing version') ||\n errorMessage.includes('version conflict') ||\n errorMessage.includes('VersionError')\n );\n }\n\n private async handleVersionConflict(): Promise<void> {\n this.debug('Handling version conflict, attempting recovery...');\n\n if (this.retryCount >= this.maxRetries) {\n throw new Error('Failed to resolve IndexedDB version conflict after multiple attempts');\n }\n\n this.retryCount++;\n\n try {\n // Close any existing connection\n if (this.db) {\n this.db.close();\n this.db = null;\n }\n\n // Delete the problematic database\n this.debug('Deleting problematic database to resolve version conflict');\n await deleteDB(WebCacheAdapter.DB_NAME);\n\n // Wait a bit for the deletion to complete\n await new Promise((resolve) => setTimeout(resolve, 200));\n\n // Try to open the database again\n this.debug(\n `Retrying database initialization (attempt ${this.retryCount}/${this.maxRetries})`\n );\n this.db = await this.openDatabase();\n\n this.debug('Successfully recovered from version conflict');\n this.retryCount = 0; // Reset retry count on success\n } catch (retryError) {\n const retryErrorMessage = retryError instanceof Error ? retryError.message : 'Unknown error';\n this.debug('Recovery attempt failed', { attempt: this.retryCount, error: retryErrorMessage });\n\n if (this.retryCount < this.maxRetries) {\n // Try again\n await this.handleVersionConflict();\n } else {\n throw new Error(`Failed to recover from IndexedDB version conflict: ${retryErrorMessage}`);\n }\n }\n }\n\n async get<T>(key: string): Promise<CachedItem<T> | null> {\n await this.ensureInitialized();\n\n this.debug('Getting cache item', { key });\n\n try {\n const transaction = this.db!.transaction([WebCacheAdapter.STORE_NAME], 'readonly');\n const store = transaction.objectStore(WebCacheAdapter.STORE_NAME);\n const result = await store.get(key);\n\n if (!result) {\n return null;\n }\n\n const item = result as StoredCacheItem<T>;\n\n // Handle decompression if needed\n const isCompressed = !!item.compressed;\n let finalData: T;\n\n if (isCompressed) {\n const decompressed = decompressData(item.data as string, true);\n finalData = JSON.parse(decompressed.data) as T;\n } else {\n finalData = item.data as T;\n }\n\n return {\n data: finalData,\n timestamp: item.timestamp,\n compressed: isCompressed,\n };\n } catch (error) {\n this.debug('Error getting cache item', { key, error });\n return null; // Return null on error instead of throwing\n }\n }\n\n async set<T>(key: string, data: T): Promise<void> {\n const item: CachedItem<T> = {\n data,\n timestamp: Date.now(),\n };\n\n return this.setItem(key, item);\n }\n\n async setItem<T>(key: string, item: CachedItem<T>): Promise<void> {\n await this.ensureInitialized();\n\n // Handle compression if enabled\n let finalData: T | string = item.data;\n let isCompressed = false;\n\n if (this.options.compression && this.options.compressionThreshold) {\n const serializedData = JSON.stringify(item.data);\n const compressionResult = compressData(serializedData, this.options.compressionThreshold);\n\n if (compressionResult.compressed) {\n finalData = compressionResult.data;\n isCompressed = true;\n\n this.debug('Compression result', {\n key,\n originalSize: compressionResult.originalSize,\n compressedSize: compressionResult.compressedSize,\n compressed: isCompressed,\n savings: compressionResult.originalSize - compressionResult.compressedSize,\n });\n }\n }\n\n this.debug('Setting cache item', { key, timestamp: item.timestamp, compressed: isCompressed });\n\n const storedItem: StoredCacheItem<T | string> = {\n key,\n data: finalData,\n timestamp: item.timestamp,\n compressed: isCompressed,\n };\n\n try {\n const transaction = this.db!.transaction([WebCacheAdapter.STORE_NAME], 'readwrite');\n const store = transaction.objectStore(WebCacheAdapter.STORE_NAME);\n await store.put(storedItem);\n } catch (error) {\n this.debug('Error setting cache item', { key, error });\n // Silently fail for cache writes\n }\n }\n\n async setBatch<T>(items: Array<[string, CachedItem<T>]>): Promise<void> {\n if (items.length === 0) return;\n\n await this.ensureInitialized();\n\n this.debug('Batch setting items', { count: items.length });\n\n try {\n const transaction = this.db!.transaction([WebCacheAdapter.STORE_NAME], 'readwrite');\n const store = transaction.objectStore(WebCacheAdapter.STORE_NAME);\n\n // Process all items in the transaction\n const promises = items.map(([key, item]) => {\n const storedItem = this.prepareBatchItem(key, item);\n return store.put(storedItem);\n });\n\n await Promise.all(promises);\n this.debug('Batch operation completed', { count: items.length });\n } catch (error) {\n this.debug('Error in batch operation', { count: items.length, error });\n // Silently fail for batch writes\n }\n }\n\n private prepareBatchItem<T>(key: string, item: CachedItem<T>): StoredCacheItem<T | string> {\n // Handle compression if enabled (same logic as setItem)\n let finalData: T | string = item.data;\n let isCompressed = false;\n\n if (this.options.compression && this.options.compressionThreshold) {\n const serializedData = JSON.stringify(item.data);\n const compressionResult = compressData(serializedData, this.options.compressionThreshold);\n\n if (compressionResult.compressed) {\n finalData = compressionResult.data;\n isCompressed = true;\n }\n }\n\n return {\n key,\n data: finalData,\n timestamp: item.timestamp,\n compressed: isCompressed,\n };\n }\n\n async invalidate(pattern: string): Promise<void> {\n await this.ensureInitialized();\n\n const keys = await this.getKeys(pattern);\n const deletePromises = keys.map((key) => this.delete(key));\n await Promise.all(deletePromises);\n }\n\n async clear(): Promise<void> {\n await this.ensureInitialized();\n\n try {\n const transaction = this.db!.transaction([WebCacheAdapter.STORE_NAME], 'readwrite');\n const store = transaction.objectStore(WebCacheAdapter.STORE_NAME);\n await store.clear();\n this.debug('Cache cleared successfully');\n } catch (error) {\n this.debug('Error clearing cache', error);\n // Silently fail for cache clear\n }\n }\n\n async getSize(): Promise<CacheSize> {\n await this.ensureInitialized();\n\n try {\n const transaction = this.db!.transaction([WebCacheAdapter.STORE_NAME], 'readonly');\n const store = transaction.objectStore(WebCacheAdapter.STORE_NAME);\n\n let entries = 0;\n let bytes = 0;\n\n // Use cursor for efficient iteration\n let cursor = await store.openCursor();\n\n while (cursor) {\n entries++;\n // Rough estimation of size\n bytes += JSON.stringify(cursor.value).length * 2; // UTF-16 encoding\n cursor = await cursor.continue();\n }\n\n return {\n entries,\n bytes,\n lastCleanup: Date.now(),\n };\n } catch (error) {\n this.debug('Error getting cache size', error);\n return {\n entries: 0,\n bytes: 0,\n lastCleanup: Date.now(),\n };\n }\n }\n\n async cleanup(): Promise<number> {\n // No cleanup needed - cache never expires\n return 0;\n }\n\n async getKeys(pattern?: string): Promise<string[]> {\n await this.ensureInitialized();\n\n try {\n const transaction = this.db!.transaction([WebCacheAdapter.STORE_NAME], 'readonly');\n const store = transaction.objectStore(WebCacheAdapter.STORE_NAME);\n const allKeys = (await store.getAllKeys()) as string[];\n\n if (!pattern) {\n return allKeys;\n }\n\n const regex = this.patternToRegex(pattern);\n return allKeys.filter((key) => regex.test(key));\n } catch (error) {\n this.debug('Error getting cache keys', error);\n return [];\n }\n }\n\n private async delete(key: string): Promise<boolean> {\n await this.ensureInitialized();\n\n try {\n const transaction = this.db!.transaction([WebCacheAdapter.STORE_NAME], 'readwrite');\n const store = transaction.objectStore(WebCacheAdapter.STORE_NAME);\n await store.delete(key);\n return true;\n } catch (error) {\n this.debug('Error deleting cache item', { key, error });\n return false;\n }\n }\n\n private async ensureInitialized(): Promise<void> {\n if (!this.initPromise) {\n this.initPromise = this.initialize();\n }\n\n try {\n await this.initPromise;\n } catch (error) {\n this.debug('Failed to ensure initialization', error);\n // Reset and try once more\n this.initPromise = null;\n this.db = null;\n this.initPromise = this.initialize();\n await this.initPromise;\n }\n }\n\n private patternToRegex(pattern: string): RegExp {\n // Convert simple glob patterns to regex\n const escaped = pattern.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&');\n const regexPattern = escaped.replace(/\\\\\\*/g, '.*').replace(/\\\\\\?/g, '.');\n return new RegExp(`^${regexPattern}$`);\n }\n}\n\n/**\n * Internal storage format for IndexedDB (no expiration)\n */\ninterface StoredCacheItem<T> {\n key: string;\n data: T;\n timestamp: number;\n compressed?: boolean;\n}\n","import { ICacheAdapter } from '../../adapters';\nimport { MemoryCacheAdapter, ReactNativeCacheAdapter } from '../../platforms/react-native/cache';\n// Static imports for all platforms\nimport { WebCacheAdapter } from '../../platforms/web/cache';\n\n/**\n * Load platform-specific cache adapter\n */\nexport function loadCacheAdapter(platform: string): ICacheAdapter | undefined {\n try {\n switch (platform) {\n case 'web':\n return loadWebCacheAdapter();\n case 'react-native':\n return loadReactNativeCacheAdapter();\n case 'node':\n return loadNodeCacheAdapter();\n default:\n return loadMemoryCacheAdapter();\n }\n } catch (error) {\n console.warn(`Cache adapter not available for platform ${platform}:`, error);\n return undefined;\n }\n}\n\n/**\n * Load web cache adapter (IndexedDB-based with automatic error recovery)\n */\nfunction loadWebCacheAdapter(): ICacheAdapter {\n return new WebCacheAdapter({\n maxSize: 50 * 1024 * 1024, // 50MB\n maxEntries: 10000,\n compression: false,\n debugEnabled: process.env.NODE_ENV === 'development',\n });\n}\n\n/**\n * Load React Native cache adapter (SQLite-based with memory fallback)\n */\nfunction loadReactNativeCacheAdapter(): ICacheAdapter {\n try {\n return new ReactNativeCacheAdapter({\n maxSize: 100 * 1024 * 1024, // 100MB\n maxEntries: 15000,\n });\n } catch (error) {\n console.warn('SQLite cache not available, falling back to memory cache');\n return loadMemoryCacheAdapter();\n }\n}\n\n/**\n * Load Node.js cache adapter (memory-based)\n */\nfunction loadNodeCacheAdapter(): ICacheAdapter {\n return loadMemoryCacheAdapter();\n}\n\n/**\n * Load memory cache adapter (fallback for all platforms)\n */\nfunction loadMemoryCacheAdapter(): ICacheAdapter {\n return new MemoryCacheAdapter({\n maxSize: 10 * 1024 * 1024, // 10MB for memory cache\n maxEntries: 5000,\n });\n}\n\n/**\n * Cache adapter configuration by platform (simplified - no TTL/expiration)\n */\nexport const CACHE_CONFIG_BY_PLATFORM = {\n web: {\n maxSize: 50 * 1024 * 1024, // 50MB\n maxEntries: 10000,\n compression: false,\n },\n 'react-native': {\n maxSize: 100 * 1024 * 1024, // 100MB\n maxEntries: 15000,\n },\n node: {\n maxSize: 10 * 1024 * 1024, // 10MB\n maxEntries: 5000,\n },\n memory: {\n maxSize: 10 * 1024 * 1024, // 10MB\n maxEntries: 5000,\n },\n} as const;\n","import { ISecureStorage, IStorage } from '../../adapters';\n\n/**\n * Node.js storage adapter using in-memory storage (for testing)\n */\nexport class NodeStorageAdapter implements IStorage {\n private storage: Map<string, string> = new Map();\n\n async get(key: string): Promise<string | null> {\n return this.storage.get(key) || null;\n }\n\n async set(key: string, value: string): Promise<void> {\n this.storage.set(key, value);\n }\n\n async remove(key: string): Promise<void> {\n this.storage.delete(key);\n }\n\n async clear(): Promise<void> {\n this.storage.clear();\n }\n\n async getAllKeys(): Promise<string[]> {\n return Array.from(this.storage.keys());\n }\n\n async multiGet(keys: string[]): Promise<Record<string, string | null>> {\n const result: Record<string, string | null> = {};\n keys.forEach((key) => {\n result[key] = this.storage.get(key) || null;\n });\n return result;\n }\n\n async multiSet(items: Record<string, string>): Promise<void> {\n Object.entries(items).forEach(([key, value]) => {\n this.storage.set(key, value);\n });\n }\n\n async multiRemove(keys: string[]): Promise<void> {\n keys.forEach((key) => {\n this.storage.delete(key);\n });\n }\n}\n\n/**\n * Node.js secure storage adapter using in-memory storage (for testing)\n * In production, this should use OS-specific secure storage\n */\nexport class NodeSecureStorageAdapter implements ISecureStorage {\n private secureStorage: Map<string, string> = new Map();\n\n async get(key: string): Promise<string | null> {\n return this.secureStorage.get(key) || null;\n }\n\n async set(key: string, value: string): Promise<void> {\n this.secureStorage.set(key, value);\n }\n\n async remove(key: string): Promise<void> {\n this.secureStorage.delete(key);\n }\n\n async clear(): Promise<void> {\n this.secureStorage.clear();\n }\n\n async getAllKeys(): Promise<string[]> {\n return Array.from(this.secureStorage.keys());\n }\n\n async multiGet(keys: string[]): Promise<Record<string, string | null>> {\n const result: Record<string, string | null> = {};\n keys.forEach((key) => {\n result[key] = this.secureStorage.get(key) || null;\n });\n return result;\n }\n\n async multiSet(items: Record<string, string>): Promise<void> {\n Object.entries(items).forEach(([key, value]) => {\n this.secureStorage.set(key, value);\n });\n }\n\n async multiRemove(keys: string[]): Promise<void> {\n keys.forEach((key) => {\n this.secureStorage.delete(key);\n });\n }\n\n async isAvailable(): Promise<boolean> {\n return true;\n }\n\n async getSecurityLevel(): Promise<string> {\n return 'In-memory storage (testing only - not secure)';\n }\n}\n","import { ISecureStorage, IStorage } from '../../adapters';\n\n/**\n * React Native storage adapter using AsyncStorage\n */\ninterface AsyncStorageInterface {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n clear(): Promise<void>;\n getAllKeys(): Promise<string[]>;\n multiGet(keys: string[]): Promise<[string, string | null][]>;\n multiSet(pairs: [string, string][]): Promise<void>;\n multiRemove(keys: string[]): Promise<void>;\n}\n\ninterface ExpoSecureStoreInterface {\n getItemAsync(key: string): Promise<string | null>;\n setItemAsync(key: string, value: string): Promise<void>;\n deleteItemAsync(key: string): Promise<void>;\n}\n\ninterface KeychainCredentials {\n password: string;\n username: string;\n service: string;\n}\n\ninterface KeychainInterface {\n getInternetCredentials(server: string): Promise<KeychainCredentials | false>;\n setInternetCredentials(server: string, username: string, password: string): Promise<void>;\n resetInternetCredentials(server: string): Promise<void>;\n}\n\nexport class ReactNativeStorageAdapter implements IStorage {\n private AsyncStorage: AsyncStorageInterface | null = null;\n\n constructor() {\n this.initializeAsyncStorage();\n }\n\n private async initializeAsyncStorage() {\n try {\n // Try to require AsyncStorage - avoid dynamic import for Metro compatibility\n const AsyncStorageModule = require('@react-native-async-storage/async-storage');\n this.AsyncStorage = AsyncStorageModule.default || AsyncStorageModule;\n } catch {\n // Fallback to legacy AsyncStorage if available\n try {\n const ReactNative = require('react-native');\n this.AsyncStorage = ReactNative.AsyncStorage;\n } catch {\n throw new Error(\n 'AsyncStorage not available. Please install @react-native-async-storage/async-storage'\n );\n }\n }\n }\n\n async get(key: string): Promise<string | null> {\n if (!this.AsyncStorage) await this.initializeAsyncStorage();\n\n try {\n return await this.AsyncStorage!.getItem(key);\n } catch (error) {\n console.error('Failed to get item from AsyncStorage:', error);\n return null;\n }\n }\n\n async set(key: string, value: string): Promise<void> {\n if (!this.AsyncStorage) await this.initializeAsyncStorage();\n\n try {\n await this.AsyncStorage!.setItem(key, value);\n } catch (error) {\n throw new Error(`Failed to store item: ${error}`);\n }\n }\n\n async remove(key: string): Promise<void> {\n if (!this.AsyncStorage) await this.initializeAsyncStorage();\n\n try {\n await this.AsyncStorage!.removeItem(key);\n } catch (error) {\n throw new Error(`Failed to remove item: ${error}`);\n }\n }\n\n async clear(): Promise<void> {\n if (!this.AsyncStorage) await this.initializeAsyncStorage();\n\n try {\n await this.AsyncStorage!.clear();\n } catch (error) {\n throw new Error(`Failed to clear storage: ${error}`);\n }\n }\n\n async getAllKeys(): Promise<string[]> {\n if (!this.AsyncStorage) await this.initializeAsyncStorage();\n\n try {\n return await this.AsyncStorage!.getAllKeys();\n } catch (error) {\n console.error('Failed to get all keys:', error);\n return [];\n }\n }\n\n async multiGet(keys: string[]): Promise<Record<string, string | null>> {\n if (!this.AsyncStorage) await this.initializeAsyncStorage();\n\n try {\n const pairs = await this.AsyncStorage!.multiGet(keys);\n const result: Record<string, string | null> = {};\n pairs.forEach(([key, value]: [string, string | null]) => {\n result[key] = value;\n });\n return result;\n } catch (error) {\n console.error('Failed to get multiple items:', error);\n const result: Record<string, string | null> = {};\n keys.forEach((key) => {\n result[key] = null;\n });\n return result;\n }\n }\n\n async multiSet(items: Record<string, string>): Promise<void> {\n if (!this.AsyncStorage) await this.initializeAsyncStorage();\n\n try {\n const pairs = Object.entries(items);\n await this.AsyncStorage!.multiSet(pairs);\n } catch (error) {\n throw new Error(`Failed to store multiple items: ${error}`);\n }\n }\n\n async multiRemove(keys: string[]): Promise<void> {\n if (!this.AsyncStorage) await this.initializeAsyncStorage();\n\n try {\n await this.AsyncStorage!.multiRemove(keys);\n } catch (error) {\n throw new Error(`Failed to remove multiple items: ${error}`);\n }\n }\n}\n\n/**\n * React Native secure storage adapter using expo-secure-store or react-native-keychain\n */\nexport class ReactNativeSecureStorageAdapter implements ISecureStorage {\n private secureStore: ExpoSecureStoreInterface | null = null;\n private keychain: KeychainInterface | null = null;\n private isExpo: boolean = false;\n\n constructor() {\n this.initializeSecureStorage();\n }\n\n private async initializeSecureStorage() {\n // Try to initialize Expo SecureStore first\n try {\n // Use require() instead of dynamic import() to avoid Metro bundling issues\n const SecureStore = require('expo-secure-store');\n this.secureStore = SecureStore;\n this.isExpo = true;\n return;\n } catch (error) {\n // expo-secure-store not available, continue to fallback\n console.log('expo-secure-store not available, trying react-native-keychain');\n }\n\n // Fallback to react-native-keychain\n try {\n const Keychain = require('react-native-keychain');\n this.keychain = Keychain;\n this.isExpo = false;\n return;\n } catch (error) {\n // react-native-keychain not available\n console.error('react-native-keychain not available');\n }\n\n throw new Error(\n 'No secure storage available. Please install expo-secure-store or react-native-keychain'\n );\n }\n\n async get(key: string): Promise<string | null> {\n if (!this.secureStore && !this.keychain) {\n await this.initializeSecureStorage();\n }\n\n try {\n if (this.isExpo && this.secureStore) {\n return await this.secureStore.getItemAsync(key);\n } else if (this.keychain) {\n const credentials = await this.keychain.getInternetCredentials(key);\n return credentials ? credentials.password : null;\n }\n } catch (error) {\n console.error('Failed to get secure item:', error);\n }\n\n return null;\n }\n\n async set(key: string, value: string): Promise<void> {\n if (!this.secureStore && !this.keychain) {\n await this.initializeSecureStorage();\n }\n\n try {\n if (this.isExpo && this.secureStore) {\n await this.secureStore.setItemAsync(key, value);\n } else if (this.keychain) {\n await this.keychain.setInternetCredentials(key, key, value);\n }\n } catch (error) {\n throw new Error(`Failed to store secure item: ${error}`);\n }\n }\n\n async remove(key: string): Promise<void> {\n if (!this.secureStore && !this.keychain) {\n await this.initializeSecureStorage();\n }\n\n try {\n if (this.isExpo && this.secureStore) {\n await this.secureStore.deleteItemAsync(key);\n } else if (this.keychain) {\n await this.keychain.resetInternetCredentials(key);\n }\n } catch (error) {\n throw new Error(`Failed to remove secure item: ${error}`);\n }\n }\n\n async clear(): Promise<void> {\n // Note: This is a simplified implementation\n // In a real implementation, you'd need to track keys or use a different approach\n console.warn('Clear all secure items not fully implemented for React Native');\n }\n\n async getAllKeys(): Promise<string[]> {\n // Note: This is not easily implementable with current secure storage solutions\n // You would need to maintain a separate index of keys\n console.warn('Get all secure keys not implemented for React Native');\n return [];\n }\n\n async multiGet(keys: string[]): Promise<Record<string, string | null>> {\n const result: Record<string, string | null> = {};\n for (const key of keys) {\n result[key] = await this.get(key);\n }\n return result;\n }\n\n async multiSet(items: Record<string, string>): Promise<void> {\n for (const [key, value] of Object.entries(items)) {\n await this.set(key, value);\n }\n }\n\n async multiRemove(keys: string[]): Promise<void> {\n for (const key of keys) {\n await this.remove(key);\n }\n }\n\n async isAvailable(): Promise<boolean> {\n try {\n await this.initializeSecureStorage();\n return true;\n } catch {\n return false;\n }\n }\n\n async getSecurityLevel(): Promise<string> {\n if (this.isExpo) {\n return 'Expo SecureStore (iOS Keychain / Android EncryptedSharedPreferences)';\n } else {\n return 'React Native Keychain (iOS Keychain / Android Keystore)';\n }\n }\n}\n","import { ISecureStorage, IStorage } from '../../adapters';\n\n/**\n * Web storage adapter using localStorage\n */\nexport class WebStorageAdapter implements IStorage {\n async get(key: string): Promise<string | null> {\n try {\n return localStorage.getItem(key);\n } catch {\n return null;\n }\n }\n\n async set(key: string, value: string): Promise<void> {\n try {\n localStorage.setItem(key, value);\n } catch (error) {\n throw new Error(`Failed to store item: ${error}`);\n }\n }\n\n async remove(key: string): Promise<void> {\n try {\n localStorage.removeItem(key);\n } catch (error) {\n throw new Error(`Failed to remove item: ${error}`);\n }\n }\n\n async clear(): Promise<void> {\n try {\n localStorage.clear();\n } catch (error) {\n throw new Error(`Failed to clear storage: ${error}`);\n }\n }\n\n async getAllKeys(): Promise<string[]> {\n try {\n return Object.keys(localStorage);\n } catch {\n return [];\n }\n }\n\n async multiGet(keys: string[]): Promise<Record<string, string | null>> {\n const result: Record<string, string | null> = {};\n for (const key of keys) {\n result[key] = await this.get(key);\n }\n return result;\n }\n\n async multiSet(items: Record<string, string>): Promise<void> {\n for (const [key, value] of Object.entries(items)) {\n await this.set(key, value);\n }\n }\n\n async multiRemove(keys: string[]): Promise<void> {\n for (const key of keys) {\n await this.remove(key);\n }\n }\n}\n\n/**\n * Web secure storage adapter using encrypted localStorage\n */\nexport class WebSecureStorageAdapter implements ISecureStorage {\n private static readonly ENCRYPTION_KEY = 'acube_secure_key';\n private encryptionKey: string;\n\n constructor() {\n // Generate or retrieve encryption key\n this.encryptionKey = this.getOrCreateEncryptionKey();\n }\n\n async get(key: string): Promise<string | null> {\n try {\n const encrypted = localStorage.getItem(this.getSecureKey(key));\n if (!encrypted) return null;\n\n return this.decrypt(encrypted);\n } catch {\n return null;\n }\n }\n\n async set(key: string, value: string): Promise<void> {\n try {\n const encrypted = this.encrypt(value);\n localStorage.setItem(this.getSecureKey(key), encrypted);\n } catch (error) {\n throw new Error(`Failed to store secure item: ${error}`);\n }\n }\n\n async remove(key: string): Promise<void> {\n try {\n localStorage.removeItem(this.getSecureKey(key));\n } catch (error) {\n throw new Error(`Failed to remove secure item: ${error}`);\n }\n }\n\n async clear(): Promise<void> {\n try {\n const keys = Object.keys(localStorage);\n const secureKeys = keys.filter((key) => key.startsWith('secure_'));\n secureKeys.forEach((key) => localStorage.removeItem(key));\n } catch (error) {\n throw new Error(`Failed to clear secure storage: ${error}`);\n }\n }\n\n async getAllKeys(): Promise<string[]> {\n try {\n const keys = Object.keys(localStorage);\n return keys\n .filter((key) => key.startsWith('secure_'))\n .map((key) => key.replace('secure_', ''));\n } catch {\n return [];\n }\n }\n\n async multiGet(keys: string[]): Promise<Record<string, string | null>> {\n const result: Record<string, string | null> = {};\n for (const key of keys) {\n result[key] = await this.get(key);\n }\n return result;\n }\n\n async multiSet(items: Record<string, string>): Promise<void> {\n for (const [key, value] of Object.entries(items)) {\n await this.set(key, value);\n }\n }\n\n async multiRemove(keys: string[]): Promise<void> {\n for (const key of keys) {\n await this.remove(key);\n }\n }\n\n async isAvailable(): Promise<boolean> {\n try {\n const test = 'test';\n localStorage.setItem(test, test);\n localStorage.removeItem(test);\n return true;\n } catch {\n return false;\n }\n }\n\n async getSecurityLevel(): Promise<string> {\n return 'Basic encryption using Web Crypto API';\n }\n\n private getSecureKey(key: string): string {\n return `secure_${key}`;\n }\n\n private getOrCreateEncryptionKey(): string {\n let key = localStorage.getItem(WebSecureStorageAdapter.ENCRYPTION_KEY);\n if (!key) {\n key = this.generateKey();\n localStorage.setItem(WebSecureStorageAdapter.ENCRYPTION_KEY, key);\n }\n return key;\n }\n\n private generateKey(): string {\n // Simple key generation - in production, use crypto.getRandomValues()\n return Array.from(crypto.getRandomValues(new Uint8Array(32)))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n }\n\n private encrypt(text: string): string {\n // Simple XOR encryption - in production, use Web Crypto API\n let result = '';\n for (let i = 0; i < text.length; i++) {\n const keyChar = this.encryptionKey.charCodeAt(i % this.encryptionKey.length);\n const textChar = text.charCodeAt(i);\n result += String.fromCharCode(textChar ^ keyChar);\n }\n return btoa(result);\n }\n\n private decrypt(encrypted: string): string {\n const text = atob(encrypted);\n let result = '';\n for (let i = 0; i < text.length; i++) {\n const keyChar = this.encryptionKey.charCodeAt(i % this.encryptionKey.length);\n const textChar = text.charCodeAt(i);\n result += String.fromCharCode(textChar ^ keyChar);\n }\n return result;\n }\n}\n","import { ISecureStorage, IStorage } from '../../adapters';\nimport { NodeSecureStorageAdapter, NodeStorageAdapter } from '../../platforms/node/storage';\nimport {\n ReactNativeSecureStorageAdapter,\n ReactNativeStorageAdapter,\n} from '../../platforms/react-native/storage';\n// Static imports for all platforms\nimport { WebSecureStorageAdapter, WebStorageAdapter } from '../../platforms/web/storage';\n\n/**\n * Storage adapters result\n */\nexport interface StorageAdapters {\n storage: IStorage;\n secureStorage: ISecureStorage;\n}\n\n/**\n * Load platform-specific storage adapters\n */\nexport function loadStorageAdapters(platform: string): StorageAdapters {\n switch (platform) {\n case 'web':\n return loadWebStorageAdapters();\n case 'react-native':\n return loadReactNativeStorageAdapters();\n case 'node':\n return loadNodeStorageAdapters();\n default:\n return loadMemoryStorageAdapters();\n }\n}\n\n/**\n * Load web storage adapters (localStorage/sessionStorage-based)\n */\nfunction loadWebStorageAdapters(): StorageAdapters {\n return {\n storage: new WebStorageAdapter(),\n secureStorage: new WebSecureStorageAdapter(),\n };\n}\n\n/**\n * Load React Native storage adapters (AsyncStorage-based)\n */\nfunction loadReactNativeStorageAdapters(): StorageAdapters {\n return {\n storage: new ReactNativeStorageAdapter(),\n secureStorage: new ReactNativeSecureStorageAdapter(),\n };\n}\n\n/**\n * Load Node.js storage adapters (file-based)\n */\nfunction loadNodeStorageAdapters(): StorageAdapters {\n return {\n storage: new NodeStorageAdapter(),\n secureStorage: new NodeSecureStorageAdapter(),\n };\n}\n\n/**\n * Load memory storage adapters (fallback)\n */\nfunction loadMemoryStorageAdapters(): StorageAdapters {\n return {\n storage: new NodeStorageAdapter(),\n secureStorage: new NodeSecureStorageAdapter(),\n };\n}\n","import { INetworkMonitor, NetworkInfo } from '../../adapters';\n\n/**\n * Node.js network monitor (basic implementation)\n */\nexport class NodeNetworkMonitor implements INetworkMonitor {\n private listeners: Array<(online: boolean) => void> = [];\n private isConnected: boolean = true;\n\n isOnline(): boolean {\n return this.isConnected;\n }\n\n onStatusChange(callback: (online: boolean) => void): () => void {\n this.listeners.push(callback);\n\n // Return cleanup function\n return () => {\n const index = this.listeners.indexOf(callback);\n if (index > -1) {\n this.listeners.splice(index, 1);\n }\n };\n }\n\n async getNetworkInfo(): Promise<NetworkInfo | null> {\n // Basic implementation - in production, could use system-specific APIs\n return {\n type: 'ethernet', // Assume ethernet for Node.js\n };\n }\n\n /**\n * Manually set network status (for testing)\n */\n setNetworkStatus(online: boolean): void {\n if (online !== this.isConnected) {\n this.isConnected = online;\n this.notifyListeners(online);\n }\n }\n\n private notifyListeners(online: boolean): void {\n this.listeners.forEach((callback) => {\n try {\n callback(online);\n } catch (error) {\n console.error('Error in network status callback:', error);\n }\n });\n }\n\n /**\n * Cleanup method\n */\n destroy(): void {\n this.listeners = [];\n }\n}\n","import { INetworkMonitor, NetworkInfo } from '../../adapters';\nimport { detectPlatform } from '../../core/platform-detector';\n\ninterface NetworkState {\n isConnected: boolean;\n isInternetReachable: boolean | null;\n type?: string;\n details?: {\n cellularGeneration?: string;\n downlink?: number;\n rtt?: number;\n };\n}\n\ninterface NetInfoModule {\n fetch(): Promise<NetworkState>;\n getNetworkStateAsync(): Promise<NetworkState>;\n addEventListener(callback: (state: NetworkState) => void): () => void;\n addNetworkStateListener(callback: (state: NetworkState) => void): () => void;\n}\n\nexport class ReactNativeNetworkMonitor implements INetworkMonitor {\n private netInfoModule: NetInfoModule | null = null;\n private unsubscribeFn: (() => void) | null = null;\n private listeners: Array<(online: boolean) => void> = [];\n private currentState: boolean = true;\n private readonly isExpo: boolean;\n\n constructor() {\n this.isExpo = detectPlatform().isExpo;\n this.init().catch((error) => {\n console.error('Network monitor initialization failed:', error);\n });\n }\n\n private async init(): Promise<void> {\n if (this.isExpo) {\n await this.loadExpoModule();\n } else {\n await this.loadRNModule();\n }\n\n await this.fetchInitialState();\n this.subscribeToStateChanges();\n }\n\n private async loadRNModule(): Promise<void> {\n try {\n const module = require('@react-native-community/netinfo');\n this.netInfoModule = module.default || module;\n console.log('Loaded @react‑native‑community/netinfo module');\n } catch (error) {\n console.error('Failed to load React Native NetInfo module:', error);\n this.netInfoModule = null;\n }\n }\n\n private async loadExpoModule(): Promise<void> {\n try {\n const module = require('expo-network');\n this.netInfoModule = module.default || module;\n console.log('Loaded expo‑network module');\n } catch (error) {\n console.error('Failed to load Expo Network module:', error);\n this.netInfoModule = null;\n }\n }\n\n private async fetchInitialState(): Promise<void> {\n if (!this.netInfoModule) return;\n\n try {\n let online = false;\n if (this.isExpo) {\n const state = await this.netInfoModule.getNetworkStateAsync();\n online = !!(state.isConnected && state.isInternetReachable !== false);\n } else {\n const state = await this.netInfoModule.fetch();\n online = !!(state.isConnected && state.isInternetReachable !== false);\n }\n this.currentState = online;\n console.log('Initial network state:', online ? 'online' : 'offline');\n } catch (error) {\n console.warn('Could not fetch initial network state:', error);\n }\n }\n\n private subscribeToStateChanges(): void {\n if (!this.netInfoModule) return;\n\n console.debug('Subscribing to network state changes');\n console.dir(this.netInfoModule, { depth: 1 });\n\n if (this.isExpo) {\n // expo‑network: addNetworkStateListener returns unsubscribe function\n this.unsubscribeFn = this.netInfoModule.addNetworkStateListener((state: NetworkState) => {\n this.handleStateChange(!!state.isConnected, state.isInternetReachable ?? false);\n });\n } else {\n // @react‑native‑community/netinfo: addEventListener returns unsubscribe function\n this.unsubscribeFn = this.netInfoModule.addEventListener((state: NetworkState) => {\n this.handleStateChange(!!state.isConnected, state.isInternetReachable ?? false);\n });\n }\n }\n\n private handleStateChange(isConnected: boolean, isInternetReachable: boolean): void {\n const online = isConnected && isInternetReachable !== false;\n if (online !== this.currentState) {\n this.currentState = online;\n this.notifyListeners(online);\n }\n }\n\n private notifyListeners(online: boolean): void {\n // call listeners safely so one failing listener doesn't break others\n for (const cb of this.listeners.slice()) {\n try {\n cb(online);\n } catch (err) {\n console.error('Network status listener threw an error:', err);\n }\n }\n }\n\n isOnline(): boolean {\n return this.currentState;\n }\n\n onStatusChange(callback: (online: boolean) => void): () => void {\n this.listeners.push(callback);\n\n if (!this.netInfoModule) {\n // late init if needed\n this.init().catch((error) => {\n console.error('Late initialization of network monitor failed:', error);\n });\n }\n\n return () => {\n const idx = this.listeners.indexOf(callback);\n if (idx >= 0) {\n this.listeners.splice(idx, 1);\n }\n };\n }\n\n async getNetworkInfo(): Promise<NetworkInfo | null> {\n if (!this.netInfoModule) {\n await this.init();\n if (!this.netInfoModule) {\n return null;\n }\n }\n\n try {\n if (this.isExpo) {\n const state = await this.netInfoModule.getNetworkStateAsync();\n return {\n type: this.mapConnectionType(state.type),\n effectiveType: undefined, // expo‑network may not expose cellularGeneration\n downlink: undefined,\n rtt: undefined,\n };\n } else {\n const state = await this.netInfoModule.fetch();\n return {\n type: this.mapConnectionType(state.type),\n effectiveType: this.mapEffectiveType(state.details?.cellularGeneration),\n downlink: state.details?.downlink,\n rtt: state.details?.rtt,\n };\n }\n } catch (error) {\n console.error('Failed to fetch detailed network info:', error);\n return null;\n }\n }\n\n destroy(): void {\n if (this.unsubscribeFn) {\n this.unsubscribeFn();\n this.unsubscribeFn = null;\n }\n this.listeners = [];\n }\n\n private mapConnectionType(\n type: string | null | undefined\n ): 'wifi' | 'cellular' | 'ethernet' | 'unknown' {\n switch (type) {\n case 'wifi':\n return 'wifi';\n case 'cellular':\n return 'cellular';\n case 'ethernet':\n return 'ethernet';\n default:\n return 'unknown';\n }\n }\n\n private mapEffectiveType(gen: string | null | undefined): '2g' | '3g' | '4g' | '5g' | undefined {\n switch (gen) {\n case '2g':\n return '2g';\n case '3g':\n return '3g';\n case '4g':\n return '4g';\n case '5g':\n return '5g';\n default:\n return undefined;\n }\n }\n}\n","import { INetworkMonitor, NetworkInfo } from '../../adapters';\n\ninterface NetworkInformationConnection {\n type?: string;\n effectiveType?: '2g' | '3g' | '4g' | '5g';\n downlink?: number;\n rtt?: number;\n}\n\ninterface NavigatorWithConnection extends Navigator {\n connection?: NetworkInformationConnection;\n}\n\n/**\n * Web network monitor using navigator.onLine and Network Information API\n */\nexport class WebNetworkMonitor implements INetworkMonitor {\n private listeners: Array<(online: boolean) => void> = [];\n\n constructor() {\n // Set up global event listeners\n if (typeof window !== 'undefined') {\n window.addEventListener('online', this.handleOnline);\n window.addEventListener('offline', this.handleOffline);\n }\n }\n\n isOnline(): boolean {\n if (typeof navigator !== 'undefined' && 'onLine' in navigator) {\n return navigator.onLine;\n }\n // Fallback to true if navigator is not available\n return true;\n }\n\n onStatusChange(callback: (online: boolean) => void): () => void {\n this.listeners.push(callback);\n\n // Return cleanup function\n return () => {\n const index = this.listeners.indexOf(callback);\n if (index > -1) {\n this.listeners.splice(index, 1);\n }\n };\n }\n\n async getNetworkInfo(): Promise<NetworkInfo | null> {\n // Use Network Information API if available\n if ('connection' in navigator) {\n const connection = (navigator as NavigatorWithConnection).connection;\n\n return {\n type: this.mapConnectionType(connection?.type ?? 'unknown'),\n effectiveType: connection?.effectiveType,\n downlink: connection?.downlink,\n rtt: connection?.rtt,\n };\n }\n\n // Fallback to basic info\n return {\n type: this.isOnline() ? 'unknown' : 'unknown',\n };\n }\n\n private handleOnline = (): void => {\n this.notifyListeners(true);\n };\n\n private handleOffline = (): void => {\n this.notifyListeners(false);\n };\n\n private notifyListeners(online: boolean): void {\n this.listeners.forEach((callback) => {\n try {\n callback(online);\n } catch (error) {\n console.error('Error in network status callback:', error);\n }\n });\n }\n\n private mapConnectionType(type: string): 'wifi' | 'cellular' | 'ethernet' | 'unknown' {\n switch (type) {\n case 'wifi':\n return 'wifi';\n case 'cellular':\n case '2g':\n case '3g':\n case '4g':\n case '5g':\n return 'cellular';\n case 'ethernet':\n return 'ethernet';\n default:\n return 'unknown';\n }\n }\n\n /**\n * Cleanup method to remove event listeners\n */\n destroy(): void {\n if (typeof window !== 'undefined') {\n window.removeEventListener('online', this.handleOnline);\n window.removeEventListener('offline', this.handleOffline);\n }\n this.listeners = [];\n }\n}\n","import { INetworkMonitor } from '../../adapters';\nimport { NodeNetworkMonitor } from '../../platforms/node/network';\nimport { ReactNativeNetworkMonitor } from '../../platforms/react-native/network';\n// Static imports for all platforms\nimport { WebNetworkMonitor } from '../../platforms/web/network';\n\n/**\n * Load platform-specific network monitor\n */\nexport function loadNetworkMonitor(platform: string): INetworkMonitor {\n switch (platform) {\n case 'web':\n return loadWebNetworkMonitor();\n case 'react-native':\n return loadReactNativeNetworkMonitor();\n case 'node':\n return loadNodeNetworkMonitor();\n default:\n return loadMemoryNetworkMonitor();\n }\n}\n\n/**\n * Load web network monitor (navigator.onLine-based)\n */\nfunction loadWebNetworkMonitor(): INetworkMonitor {\n return new WebNetworkMonitor();\n}\n\n/**\n * Load React Native network monitor (NetInfo-based)\n */\nfunction loadReactNativeNetworkMonitor(): INetworkMonitor {\n return new ReactNativeNetworkMonitor();\n}\n\n/**\n * Load Node.js network monitor (DNS-based connectivity check)\n */\nfunction loadNodeNetworkMonitor(): INetworkMonitor {\n return new NodeNetworkMonitor();\n}\n\n/**\n * Load memory network monitor (fallback)\n */\nfunction loadMemoryNetworkMonitor(): INetworkMonitor {\n return new NodeNetworkMonitor();\n}\n","export type {\n CertificateData,\n MTLSConnectionConfig,\n MTLSRequestConfig,\n MTLSResponse,\n CertificateInfo,\n IMTLSPort,\n IMTLSPort as IMTLSAdapter,\n IMTLSAdapterFactory,\n} from '../application/ports/driven/mtls.port';\n\nexport enum MTLSErrorType {\n NOT_SUPPORTED = 'MTLS_NOT_SUPPORTED',\n CERTIFICATE_NOT_FOUND = 'MTLS_CERTIFICATE_NOT_FOUND',\n CERTIFICATE_EXPIRED = 'MTLS_CERTIFICATE_EXPIRED',\n CERTIFICATE_INVALID = 'MTLS_CERTIFICATE_INVALID',\n CONNECTION_FAILED = 'MTLS_CONNECTION_FAILED',\n AUTHENTICATION_FAILED = 'MTLS_AUTHENTICATION_FAILED',\n CONFIGURATION_ERROR = 'MTLS_CONFIGURATION_ERROR',\n}\n\nexport class MTLSError extends Error {\n constructor(\n public type: MTLSErrorType,\n message: string,\n public originalError?: Error,\n public statusCode?: number\n ) {\n super(message);\n this.name = 'MTLSError';\n }\n}\n\nexport class CertificateValidator {\n static validatePEMFormat(certificate: string, privateKey: string): boolean {\n const certRegex = /-----BEGIN CERTIFICATE-----[\\s\\S]*-----END CERTIFICATE-----/;\n const keyRegex = /-----BEGIN (RSA )?PRIVATE KEY-----[\\s\\S]*-----END (RSA )?PRIVATE KEY-----/;\n return certRegex.test(certificate) && keyRegex.test(privateKey);\n }\n\n static isCertificateExpired(validTo: Date): boolean {\n return new Date() > validTo;\n }\n\n static getDaysUntilExpiry(validTo: Date): number {\n const now = new Date();\n const diffTime = validTo.getTime() - now.getTime();\n return Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n }\n}\n\nexport class PlatformDetector {\n static detectPlatform(): 'react-native' | 'node' | 'web' {\n if (\n (typeof global !== 'undefined' && (global as { __expo?: unknown }).__expo) ||\n (typeof navigator !== 'undefined' &&\n (navigator as { product?: string }).product === 'ReactNative')\n ) {\n return 'react-native';\n }\n\n if (typeof process !== 'undefined' && process.versions?.node) {\n return 'node';\n }\n\n return 'web';\n }\n\n static isReactNative(): boolean {\n return this.detectPlatform() === 'react-native';\n }\n\n static isNode(): boolean {\n return this.detectPlatform() === 'node';\n }\n\n static isWeb(): boolean {\n return this.detectPlatform() === 'web';\n }\n\n static getPlatformDetails() {\n const platform = this.detectPlatform();\n\n return {\n platform,\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown',\n nodeVersion: typeof process !== 'undefined' ? process.version : undefined,\n isExpo: typeof global !== 'undefined' && !!(global as { __expo?: unknown }).__expo,\n hasWindow: typeof window !== 'undefined',\n hasDocument: typeof document !== 'undefined',\n hasProcess: typeof process !== 'undefined',\n };\n }\n}\n\nexport class MTLSAdapterFactory {\n private static debugEnabled = false;\n\n static enableDebug(enabled = true): void {\n this.debugEnabled = enabled;\n }\n\n static async createAdapter(debugEnabled?: boolean): Promise<IMTLSPort | null> {\n const debug = debugEnabled ?? this.debugEnabled;\n const platform = PlatformDetector.detectPlatform();\n\n if (debug) {\n console.log('[MTLS-FACTORY] Creating adapter for platform:', platform);\n }\n\n try {\n switch (platform) {\n case 'react-native': {\n const { ReactNativeMTLSAdapter } = await import('../platforms/react-native/mtls');\n return new ReactNativeMTLSAdapter(debug);\n }\n case 'node': {\n const { NodeMTLSAdapter } = await import('../platforms/node/mtls');\n return new NodeMTLSAdapter(debug);\n }\n case 'web': {\n const { WebMTLSAdapter } = await import('../platforms/web/mtls');\n return new WebMTLSAdapter(debug);\n }\n default: {\n if (debug) {\n console.warn('[MTLS-FACTORY] Unknown platform, falling back to web adapter');\n }\n const { WebMTLSAdapter: FallbackAdapter } = await import('../platforms/web/mtls');\n return new FallbackAdapter(debug);\n }\n }\n } catch (error) {\n if (debug) {\n console.error('[MTLS-FACTORY] Failed to create mTLS adapter:', error);\n }\n return null;\n }\n }\n\n static getPlatform(): string {\n return PlatformDetector.detectPlatform();\n }\n\n static async isMTLSSupported(): Promise<boolean> {\n try {\n const adapter = await this.createAdapter();\n if (!adapter) return false;\n return await adapter.isMTLSSupported();\n } catch {\n return false;\n }\n }\n}\n\ntype IMTLSPort = import('../application/ports/driven/mtls.port').IMTLSPort;\n","/**\n * React Native mTLS Adapter Implementation\n * Uses @a-cube-io/expo-mutual-tls for production-ready mTLS authentication\n */\nimport {\n CertificateData,\n CertificateInfo,\n CertificateValidator,\n IMTLSAdapter,\n MTLSConnectionConfig,\n MTLSError,\n MTLSErrorType,\n MTLSRequestConfig,\n MTLSResponse,\n} from '../../adapters';\nimport {\n MTLSCertificateExpiryEvent,\n MTLSDebugLogEvent,\n MTLSErrorEvent,\n MTLSEventSubscription,\n} from './types';\n\n// Import actual types from expo-mutual-tls\ninterface CertificateSubject {\n commonName?: string;\n organization?: string;\n organizationalUnit?: string;\n country?: string;\n state?: string;\n locality?: string;\n emailAddress?: string;\n}\n\ninterface CertificateFingerprints {\n sha1: string;\n sha256: string;\n}\n\ninterface CertificateInfoDetailed {\n subject: CertificateSubject;\n issuer: CertificateSubject;\n serialNumber: string;\n version: number;\n validFrom: number;\n validTo: number;\n fingerprints: CertificateFingerprints;\n publicKeyAlgorithm: string;\n publicKeySize?: number;\n signatureAlgorithm: string;\n keyUsage?: string[];\n extendedKeyUsage?: string[];\n subjectAlternativeNames?: string[];\n}\n\ninterface ParseCertificateResult {\n certificates: CertificateInfoDetailed[];\n}\n\ntype P12CertificateData = {\n p12Data: string;\n password: string;\n};\n\ntype PemCertificateData = {\n certificate: string;\n privateKey: string;\n passphrase?: string;\n};\n\ntype CertificateDataUnion = P12CertificateData | PemCertificateData;\n\ninterface ExpoMutualTLSClass {\n // Configuration methods (static)\n configurePEM(\n certService?: string,\n keyService?: string,\n enableLogging?: boolean\n ): Promise<{\n success: boolean;\n state: string;\n hasCertificate: boolean;\n }>;\n\n configureP12(\n keychainService?: string,\n enableLogging?: boolean\n ): Promise<{\n success: boolean;\n state: string;\n hasCertificate: boolean;\n }>;\n\n // Certificate storage methods (static)\n storePEM(certificate: string, privateKey: string, passphrase?: string): Promise<boolean>;\n storeP12(p12Base64: string, password: string): Promise<boolean>;\n\n // Certificate management (static)\n hasCertificate(): Promise<boolean>;\n removeCertificate(): Promise<void>;\n\n // Certificate parsing methods (static)\n parseCertificate(certificateData: CertificateDataUnion): Promise<ParseCertificateResult>;\n parseCertificateP12(p12Base64: string, password: string): Promise<ParseCertificateResult>;\n parseCertificatePEM(certificate: string): Promise<ParseCertificateResult>;\n getCertificatesInfo(): Promise<ParseCertificateResult>;\n\n // Network operations (static)\n request(\n url: string,\n options?: {\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';\n }\n ): Promise<{\n success: boolean;\n statusCode: number;\n statusMessage: string;\n headers: Record<string, string[]>;\n body: string;\n tlsVersion: string;\n cipherSuite: string;\n }>;\n\n testConnection(url: string): Promise<{\n success: boolean;\n statusCode: number;\n statusMessage: string;\n headers: Record<string, string[]>;\n body: string;\n tlsVersion: string;\n cipherSuite: string;\n }>;\n\n // Properties (static getters)\n isConfigured: boolean;\n currentState: string;\n\n // Event handlers (static)\n onDebugLog(\n callback: (event: {\n type: string;\n message?: string;\n method?: string;\n url?: string;\n statusCode?: number;\n duration?: number;\n }) => void\n ): () => void;\n onError(callback: (event: { message: string; code?: string }) => void): () => void;\n onCertificateExpiry(\n callback: (event: {\n alias?: string;\n subject: string;\n expiry: number;\n warning?: boolean;\n }) => void\n ): () => void;\n removeAllListeners(): void;\n}\n\n/**\n * React Native mTLS Adapter using @a-cube-io/expo-mutual-tls\n */\nexport class ReactNativeMTLSAdapter implements IMTLSAdapter {\n private expoMTLS: ExpoMutualTLSClass | null = null;\n private config: MTLSConnectionConfig | null = null;\n private readonly debugEnabled: boolean;\n private isConfigured = false;\n private eventListeners: MTLSEventSubscription[] = [];\n\n constructor(debugEnabled = false) {\n this.debugEnabled = debugEnabled;\n this.initializeEventHandlers();\n }\n\n /**\n * Initialize event handlers for debugging and monitoring\n */\n private initializeEventHandlers(): void {\n try {\n // Import the default export from @a-cube-io/expo-mutual-tls\n const ExpoMutualTls =\n require('@a-cube-io/expo-mutual-tls').default || require('@a-cube-io/expo-mutual-tls');\n this.expoMTLS = ExpoMutualTls;\n\n if (this.debugEnabled) {\n // Set up debug logging with the correct event signature\n const debugListener = ExpoMutualTls.onDebugLog((event: MTLSDebugLogEvent) => {\n console.log('[RN-MTLS-DEBUG]', `${event.type}: ${event.message}`, {\n method: event.method,\n url: event.url,\n statusCode: event.statusCode,\n duration: event.duration,\n });\n });\n this.eventListeners.push(debugListener);\n\n // Set up error logging with the correct event signature\n const errorListener = ExpoMutualTls.onError((event: MTLSErrorEvent) => {\n console.error('[RN-MTLS-ERROR]', `${event.message}`, {\n code: event.code,\n });\n });\n this.eventListeners.push(errorListener);\n\n // Set up certificate expiry monitoring with the correct event signature\n const expiryListener = ExpoMutualTls.onCertificateExpiry(\n (event: MTLSCertificateExpiryEvent) => {\n console.warn(\n '[RN-MTLS-CERT-EXPIRY]',\n `Certificate ${event.subject} expires at ${new Date(event.expiry)}`,\n {\n alias: event.alias,\n warning: event.warning,\n }\n );\n }\n );\n this.eventListeners.push(expiryListener);\n\n console.log('[RN-MTLS-ADAPTER] Expo mTLS module loaded successfully');\n }\n } catch (error) {\n if (this.debugEnabled) {\n console.warn('[RN-MTLS-ADAPTER] @a-cube-io/expo-mutual-tls not available:', error);\n }\n }\n }\n\n async isMTLSSupported(): Promise<boolean> {\n const supported = this.expoMTLS !== null;\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] mTLS support check:', {\n supported,\n platform: this.getPlatformInfo().platform,\n moduleAvailable: !!this.expoMTLS,\n });\n }\n\n return supported;\n }\n\n async initialize(config: MTLSConnectionConfig): Promise<void> {\n if (!this.expoMTLS) {\n throw new MTLSError(MTLSErrorType.NOT_SUPPORTED, 'Expo mTLS module not available');\n }\n\n this.config = config;\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Initialized with config:', {\n baseUrl: config.baseUrl,\n port: config.port,\n timeout: config.timeout,\n validateCertificate: config.validateCertificate,\n });\n }\n }\n\n async configureCertificate(certificateData: CertificateData): Promise<void> {\n if (!this.expoMTLS) {\n throw new MTLSError(MTLSErrorType.NOT_SUPPORTED, 'Expo mTLS module not available');\n }\n\n if (!this.config) {\n throw new MTLSError(\n MTLSErrorType.CONFIGURATION_ERROR,\n 'Adapter not initialized. Call initialize() first.'\n );\n }\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Configuring certificate:', {\n format: certificateData.format,\n hasPassword: !!certificateData.password,\n certificateLength: certificateData.certificate.length,\n privateKeyLength: certificateData.privateKey.length,\n });\n }\n\n try {\n if (certificateData.format === 'PEM') {\n // Validate PEM format\n if (\n !CertificateValidator.validatePEMFormat(\n certificateData.certificate,\n certificateData.privateKey\n )\n ) {\n throw new MTLSError(MTLSErrorType.CERTIFICATE_INVALID, 'Invalid PEM certificate format');\n }\n\n // Step 1: Configure PEM services (optional parameters for keychain services)\n const configResult = await this.expoMTLS.configurePEM(\n 'client-cert-service', // certService\n 'client-key-service', // keyService\n this.debugEnabled // enableLogging\n );\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] PEM services configured:', configResult);\n }\n\n if (!configResult.success) {\n throw new MTLSError(\n MTLSErrorType.CONFIGURATION_ERROR,\n `PEM configuration failed: ${configResult.state}`\n );\n }\n\n // Step 2: Store the actual PEM certificate and private key\n const storeResult = await this.expoMTLS.storePEM(\n certificateData.certificate,\n certificateData.privateKey,\n certificateData.password // passphrase (optional)\n );\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] PEM certificate store result:', storeResult);\n }\n\n if (!storeResult) {\n throw new MTLSError(MTLSErrorType.CERTIFICATE_INVALID, 'Failed to store PEM certificate');\n }\n } else if (certificateData.format === 'P12') {\n if (!certificateData.password) {\n throw new MTLSError(\n MTLSErrorType.CONFIGURATION_ERROR,\n 'P12 certificate requires password'\n );\n }\n\n // Step 1: Configure P12 keychain service\n const configResult = await this.expoMTLS.configureP12(\n 'client-p12-service', // keychainService\n this.debugEnabled // enableLogging\n );\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] P12 service configured:', configResult);\n }\n\n if (!configResult.success) {\n throw new MTLSError(\n MTLSErrorType.CONFIGURATION_ERROR,\n `P12 configuration failed: ${configResult.state}`\n );\n }\n\n // Step 2: Store the P12 certificate data\n const storeResult = await this.expoMTLS.storeP12(\n certificateData.certificate, // P12 data in certificate field\n certificateData.password\n );\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] P12 certificate store result:', storeResult);\n }\n\n if (!storeResult) {\n throw new MTLSError(MTLSErrorType.CERTIFICATE_INVALID, 'Failed to store P12 certificate');\n }\n } else {\n throw new MTLSError(\n MTLSErrorType.CERTIFICATE_INVALID,\n `Unsupported certificate format: ${certificateData.format}`\n );\n }\n\n this.isConfigured = true;\n } catch (error) {\n if (error instanceof MTLSError) {\n throw error;\n }\n\n if (this.debugEnabled) {\n console.error('[RN-MTLS-ADAPTER] Certificate configuration failed:', error);\n }\n\n throw new MTLSError(\n MTLSErrorType.CONFIGURATION_ERROR,\n 'Failed to configure certificate',\n error as Error\n );\n }\n }\n\n async hasCertificate(): Promise<boolean> {\n if (!this.expoMTLS) {\n return false;\n }\n\n try {\n // Use static method call\n const hasCert = await this.expoMTLS.hasCertificate();\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Certificate availability check:', hasCert);\n }\n\n return hasCert;\n } catch (error) {\n if (this.debugEnabled) {\n console.error('[RN-MTLS-ADAPTER] Certificate check failed:', error);\n }\n return false;\n }\n }\n\n async getCertificateInfo(): Promise<CertificateInfo | null> {\n if (!this.expoMTLS) {\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Certificate info requested but module not available');\n }\n return null;\n }\n\n try {\n const hasCert = await this.hasCertificate();\n if (!hasCert) {\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] No certificate stored');\n }\n return null;\n }\n\n // Use getCertificatesInfo to retrieve information about stored certificates\n const result = await this.expoMTLS.getCertificatesInfo();\n\n if (!result || !result.certificates || result.certificates.length === 0) {\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] No certificate information available');\n }\n return null;\n }\n\n // Get the first certificate (primary client certificate)\n const cert = result.certificates[0];\n\n if (!cert) {\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Certificate data is empty');\n }\n return null;\n }\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Retrieved certificate info:', {\n subject: cert.subject.commonName,\n issuer: cert.issuer.commonName,\n validFrom: new Date(cert.validFrom),\n validTo: new Date(cert.validTo),\n });\n }\n\n // Map to our CertificateInfo format\n return {\n subject: cert.subject.commonName || 'Unknown',\n issuer: cert.issuer.commonName || 'Unknown',\n validFrom: new Date(cert.validFrom),\n validTo: new Date(cert.validTo),\n serialNumber: cert.serialNumber,\n fingerprint: cert.fingerprints.sha256,\n pemId: cert.subject.commonName?.split(':')[1] || '', // PEM ID is part[1] (divide by : ) of commonName if available\n cashRegisterUUID: cert.subject.commonName?.split(':')[0] || '', // Cash Register UUID is part[0] (divide by : ) of commonName if available\n };\n } catch (error) {\n if (this.debugEnabled) {\n console.error('[RN-MTLS-ADAPTER] Failed to get certificate info:', error);\n }\n return null;\n }\n }\n\n /**\n * Parse certificate and extract detailed information\n * @param certificateData Certificate data in P12 or PEM format\n * @returns Detailed certificate information including subject, issuer, validity, etc.\n */\n async parseCertificateData(\n certificateData: CertificateData\n ): Promise<ParseCertificateResult | null> {\n if (!this.expoMTLS) {\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Parse certificate: Module not available');\n }\n return null;\n }\n\n try {\n let result: ParseCertificateResult;\n\n if (certificateData.format === 'P12') {\n if (!certificateData.password) {\n throw new MTLSError(\n MTLSErrorType.CONFIGURATION_ERROR,\n 'P12 certificate requires password for parsing'\n );\n }\n\n result = await this.expoMTLS.parseCertificateP12(\n certificateData.certificate,\n certificateData.password\n );\n } else if (certificateData.format === 'PEM') {\n result = await this.expoMTLS.parseCertificatePEM(certificateData.certificate);\n } else {\n throw new MTLSError(\n MTLSErrorType.CERTIFICATE_INVALID,\n `Unsupported certificate format: ${certificateData.format}`\n );\n }\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Certificate parsed successfully:', {\n certificateCount: result.certificates.length,\n subjects: result.certificates.map((cert) => cert.subject.commonName),\n });\n }\n\n return result;\n } catch (error) {\n if (this.debugEnabled) {\n console.error('[RN-MTLS-ADAPTER] Failed to parse certificate:', error);\n }\n\n if (error instanceof MTLSError) {\n throw error;\n }\n\n throw new MTLSError(\n MTLSErrorType.CERTIFICATE_INVALID,\n 'Failed to parse certificate data',\n error as Error\n );\n }\n }\n\n async request<T>(requestConfig: MTLSRequestConfig): Promise<MTLSResponse<T>> {\n if (!this.expoMTLS) {\n throw new MTLSError(MTLSErrorType.NOT_SUPPORTED, 'Expo mTLS module not available');\n }\n\n const hasCert = await this.hasCertificate();\n if (!hasCert) {\n throw new MTLSError(MTLSErrorType.CERTIFICATE_NOT_FOUND, 'No certificate configured');\n }\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Making mTLS request:', {\n method: requestConfig.method || 'GET',\n url: requestConfig.url,\n headers: requestConfig.headers,\n data: !!requestConfig.data,\n responseType: requestConfig.responseType,\n });\n }\n\n try {\n // ✅ FIXED: expo-mutual-tls v1.0.3+ supports binary responses\n // Binary data is returned as base64-encoded string when responseType is 'blob' or 'arraybuffer'\n const response = await this.expoMTLS.request(requestConfig.url, {\n method: requestConfig.method || 'GET',\n headers: requestConfig.headers,\n body: requestConfig.data ? JSON.stringify(requestConfig.data) : undefined,\n responseType: requestConfig.responseType,\n });\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] mTLS request successful:', response);\n }\n\n if (!response.success) {\n throw new MTLSError(\n MTLSErrorType.CONNECTION_FAILED,\n `mTLS request failed: ${response.statusMessage} (${response.statusCode})`,\n undefined,\n response.statusCode\n );\n }\n\n let data: string | Record<string, unknown> = response.body;\n // only parse if responseType is 'json' or if Content-Type header indicates JSON\n const contentType =\n response.headers['Content-Type'] || response.headers['content-type'] || '';\n if (requestConfig.responseType === 'json' || contentType.includes('application/json')) {\n try {\n data = JSON.parse(response.body);\n } catch (parseError) {\n if (this.debugEnabled) {\n console.warn('[RN-MTLS-ADAPTER] Failed to parse JSON response:', parseError);\n }\n // If parsing fails, keep raw body\n }\n }\n\n // Convert headers from string[] to string format\n const normalizedHeaders: Record<string, string> = {};\n Object.entries(response.headers).forEach(([key, value]) => {\n normalizedHeaders[key] = Array.isArray(value) ? value.join(', ') : value;\n });\n\n return {\n data: data as T,\n status: response.statusCode,\n statusText: response.statusMessage,\n headers: normalizedHeaders,\n };\n } catch (error) {\n if (this.debugEnabled) {\n console.error('[RN-MTLS-ADAPTER] mTLS request failed:', error);\n }\n\n throw new MTLSError(MTLSErrorType.CONNECTION_FAILED, 'mTLS request failed', error as Error);\n }\n }\n\n /**\n * Test mTLS connection (DIAGNOSTIC ONLY - not used for validation)\n *\n * WARNING: This method calls a test endpoint that may return 500 errors\n * even when actual mTLS requests work perfectly. It should only be used\n * for diagnostic purposes, not for determining if mTLS is ready.\n */\n async testConnection(): Promise<boolean> {\n if (!this.expoMTLS || !this.config) {\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] 🔍 Diagnostic test: No mTLS module or config available');\n }\n return false;\n }\n\n try {\n const hasCert = await this.hasCertificate();\n if (!hasCert) {\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] 🔍 Diagnostic test: No certificate configured');\n }\n return false;\n }\n\n if (this.debugEnabled) {\n console.log(\n '[RN-MTLS-ADAPTER] 🔍 Running diagnostic test (may fail even if mTLS works):',\n this.config.baseUrl\n );\n }\n\n const result = await this.expoMTLS.testConnection(this.config.baseUrl);\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] 🔍 Diagnostic test result (NOT validation):', {\n success: result.success,\n statusCode: result.statusCode,\n statusMessage: result.statusMessage,\n tlsVersion: result.tlsVersion,\n cipherSuite: result.cipherSuite,\n note: 'Test endpoint may return 500 while actual requests work',\n });\n }\n\n return result.success;\n } catch (error) {\n if (this.debugEnabled) {\n console.warn('[RN-MTLS-ADAPTER] 🔍 Diagnostic test failed (this is expected):', error);\n }\n return false;\n }\n }\n\n async removeCertificate(): Promise<void> {\n if (!this.expoMTLS) {\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Remove certificate: Module not available');\n }\n return;\n }\n\n try {\n // Use static method call\n await this.expoMTLS.removeCertificate();\n this.isConfigured = false;\n\n // Cleanup event listeners\n this.cleanupEventListeners();\n\n if (this.debugEnabled) {\n console.log('[RN-MTLS-ADAPTER] Certificate removed successfully');\n }\n } catch (error) {\n if (this.debugEnabled) {\n console.error('[RN-MTLS-ADAPTER] Failed to remove certificate:', error);\n }\n\n throw new MTLSError(\n MTLSErrorType.CONFIGURATION_ERROR,\n 'Failed to remove certificate',\n error as Error\n );\n }\n }\n\n /**\n * Cleanup event listeners\n */\n private cleanupEventListeners(): void {\n if (this.eventListeners.length > 0 && this.debugEnabled) {\n console.log(`[RN-MTLS-ADAPTER] Cleaning up ${this.eventListeners.length} event listeners`);\n }\n\n // Remove individual listeners if they have remove methods\n this.eventListeners.forEach((listener) => {\n if (listener && typeof listener.remove === 'function') {\n listener.remove();\n }\n });\n\n // Also call removeAllListeners on the module\n if (this.expoMTLS) {\n this.expoMTLS.removeAllListeners();\n }\n\n this.eventListeners.length = 0;\n }\n\n /**\n * Manually remove all event listeners\n */\n removeAllListeners(): void {\n this.cleanupEventListeners();\n }\n\n /**\n * Get the configured mTLS base URL\n */\n getBaseUrl(): string | null {\n return this.config?.baseUrl || null;\n }\n\n getPlatformInfo() {\n return {\n platform: 'react-native' as const,\n mtlsSupported: this.expoMTLS !== null,\n certificateStorage: 'keychain' as const,\n fallbackToJWT: true,\n configured: this.isConfigured,\n };\n }\n}\n","/**\n * Web mTLS Adapter Implementation\n * Web browsers do not support client certificate configuration via JavaScript\n * This adapter provides graceful fallback with clear error messages\n */\nimport {\n CertificateData,\n CertificateInfo,\n IMTLSAdapter,\n MTLSConnectionConfig,\n MTLSError,\n MTLSErrorType,\n MTLSRequestConfig,\n MTLSResponse,\n} from '../../adapters/mtls';\n\n/**\n * Web mTLS Adapter - Graceful fallback for web browsers\n *\n * Web browsers handle client certificates through:\n * 1. Browser certificate store (managed by user)\n * 2. TLS handshake (automatic, not script-controlled)\n * 3. User prompts for certificate selection\n *\n * JavaScript cannot programmatically configure client certificates\n * due to security restrictions in the browser sandbox.\n */\nexport class WebMTLSAdapter implements IMTLSAdapter {\n private debugEnabled = false;\n\n constructor(debugEnabled = false) {\n this.debugEnabled = debugEnabled;\n\n if (this.debugEnabled) {\n console.warn(\n '[WEB-MTLS-ADAPTER] Web browsers do not support programmatic mTLS configuration'\n );\n console.info(\n '[WEB-MTLS-ADAPTER] Use JWT authentication or configure client certificates in browser settings'\n );\n }\n }\n\n async isMTLSSupported(): Promise<boolean> {\n // mTLS is not supported programmatically in web browsers\n const supported = false;\n\n if (this.debugEnabled) {\n console.log('[WEB-MTLS-ADAPTER] mTLS support check:', {\n supported,\n platform: this.getPlatformInfo().platform,\n reason: 'Browser security model prevents programmatic certificate configuration',\n alternatives: ['JWT authentication', 'Browser-managed certificates', 'Server-side proxy'],\n });\n }\n\n return supported;\n }\n\n async initialize(config: MTLSConnectionConfig): Promise<void> {\n if (this.debugEnabled) {\n console.warn('[WEB-MTLS-ADAPTER] Initialized but mTLS not available in web browsers:', {\n baseUrl: config.baseUrl,\n port: config.port,\n recommendation: 'Use standard HTTPS with JWT authentication',\n });\n }\n }\n\n async configureCertificate(certificateData: CertificateData): Promise<void> {\n if (this.debugEnabled) {\n console.error('[WEB-MTLS-ADAPTER] Certificate configuration attempted:', {\n format: certificateData.format,\n reason: 'Not supported in web browsers',\n alternatives: [\n 'Import certificate into browser certificate store',\n 'Use JWT authentication instead',\n 'Configure server-side proxy for certificate handling',\n ],\n });\n }\n\n throw new MTLSError(\n MTLSErrorType.NOT_SUPPORTED,\n 'mTLS client certificate configuration is not supported in web browsers. ' +\n 'Web browsers manage client certificates through the browser certificate store. ' +\n 'Please use JWT authentication or import certificates manually into your browser.'\n );\n }\n\n async hasCertificate(): Promise<boolean> {\n // We cannot detect if the browser has certificates configured\n if (this.debugEnabled) {\n console.log(\n '[WEB-MTLS-ADAPTER] Certificate availability check: Cannot detect browser certificates programmatically'\n );\n }\n\n return false;\n }\n\n async getCertificateInfo(): Promise<CertificateInfo | null> {\n if (this.debugEnabled) {\n console.log('[WEB-MTLS-ADAPTER] Certificate info requested: Not accessible in web browsers');\n }\n\n return null;\n }\n\n async request<T>(requestConfig: MTLSRequestConfig): Promise<MTLSResponse<T>> {\n if (this.debugEnabled) {\n console.error('[WEB-MTLS-ADAPTER] mTLS request attempted:', {\n method: requestConfig.method,\n url: requestConfig.url,\n reason: 'Not supported in web browsers',\n alternatives: [\n 'Use standard fetch() or XMLHttpRequest',\n 'Configure JWT authentication',\n 'Rely on browser-managed certificates (if configured by user)',\n ],\n });\n }\n\n throw new MTLSError(\n MTLSErrorType.NOT_SUPPORTED,\n 'mTLS requests are not supported in web browsers via JavaScript. ' +\n 'Use standard HTTP client with JWT authentication, or ensure client certificates ' +\n 'are properly configured in the browser certificate store.'\n );\n }\n\n async testConnection(): Promise<boolean> {\n if (this.debugEnabled) {\n console.log('[WEB-MTLS-ADAPTER] Connection test: mTLS not available in web browsers');\n }\n\n return false;\n }\n\n async removeCertificate(): Promise<void> {\n if (this.debugEnabled) {\n console.log(\n '[WEB-MTLS-ADAPTER] Remove certificate: No certificates to remove (not supported in web browsers)'\n );\n }\n\n // No-op - cannot remove certificates programmatically in browsers\n }\n\n /**\n * Get the configured mTLS base URL\n * Always returns null for web browsers as mTLS is not supported\n */\n getBaseUrl(): string | null {\n if (this.debugEnabled) {\n console.log('[WEB-MTLS-ADAPTER] Base URL requested: Not supported in web browsers');\n }\n return null;\n }\n\n getPlatformInfo() {\n return {\n platform: 'web' as const,\n mtlsSupported: false,\n certificateStorage: 'browser-managed' as const,\n fallbackToJWT: true,\n limitations: [\n 'Browser security model prevents programmatic certificate access',\n 'Client certificates managed through browser UI only',\n 'TLS handshake handled automatically by browser',\n 'Certificate selection prompts managed by browser',\n ],\n recommendations: [\n 'Use JWT authentication for API access',\n 'Configure client certificates in browser settings if required',\n 'Consider server-side proxy for certificate handling',\n 'Use standard fetch API with browser-managed certificates',\n ],\n };\n }\n\n /**\n * Check if running in web browser environment\n */\n static isWebEnvironment(): boolean {\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined' &&\n typeof navigator !== 'undefined'\n );\n }\n\n /**\n * Get browser information for debugging\n */\n getBrowserInfo() {\n if (!WebMTLSAdapter.isWebEnvironment()) {\n return null;\n }\n\n return {\n userAgent: navigator.userAgent,\n platform: navigator.platform,\n language: navigator.language,\n cookieEnabled: navigator.cookieEnabled,\n onLine: navigator.onLine,\n };\n }\n\n /**\n * Provide guidance for web-based mTLS alternatives\n */\n getAlternatives() {\n return {\n jwtAuthentication: {\n description: 'Use JWT tokens for API authentication',\n implementation: 'Include JWT token in Authorization header',\n security: 'Secure token storage and rotation recommended',\n },\n browserCertificates: {\n description: 'Use browser-managed client certificates',\n implementation: 'Import certificates into browser certificate store',\n limitation: 'User must manually configure certificates',\n },\n serverSideProxy: {\n description: 'Server-side proxy handles certificate authentication',\n implementation: 'Proxy server manages mTLS, web app uses standard HTTPS',\n benefit: 'Transparent to web application',\n },\n webAuthn: {\n description: 'Use WebAuthn for strong authentication',\n implementation: 'Browser native authentication APIs',\n benefit: 'Hardware-backed authentication without certificates',\n },\n };\n }\n}\n","import { IMTLSAdapter, MTLSConnectionConfig } from '../../adapters';\n// Static imports for all platforms\nimport { ReactNativeMTLSAdapter } from '../../platforms/react-native/mtls';\nimport { WebMTLSAdapter } from '../../platforms/web/mtls';\nimport { Platform, detectPlatform } from '../platform-detector';\n\n/**\n * Load and optionally initialize a platform-specific mTLS adapter\n */\nexport function loadMTLSAdapter(\n platform: Platform,\n debugEnabled = false,\n config?: {\n baseUrl?: string;\n port?: number;\n timeout?: number;\n validateCertificate?: boolean;\n autoInitialize?: boolean;\n }\n): IMTLSAdapter | null {\n try {\n let adapter: IMTLSAdapter;\n\n switch (platform) {\n case 'react-native':\n adapter = loadReactNativeMTLSAdapter(debugEnabled);\n break;\n case 'node':\n adapter = loadNodeMTLSAdapter(debugEnabled);\n break;\n case 'web':\n adapter = loadWebMTLSAdapter(debugEnabled);\n break;\n default:\n // Fallback to web adapter for unknown platforms\n adapter = loadWebMTLSAdapter(debugEnabled);\n break;\n }\n\n // Auto-initialize if configuration is provided and requested\n if (config?.autoInitialize && config.baseUrl) {\n const mtlsConfig: MTLSConnectionConfig = {\n baseUrl: config.baseUrl,\n port: config.port || 444,\n timeout: config.timeout || 30000,\n validateCertificate: config.validateCertificate ?? true,\n };\n\n // Initialize asynchronously in the background - don't block adapter creation\n void initializeAdapterAsync(adapter, mtlsConfig, debugEnabled);\n }\n\n return adapter;\n } catch (error) {\n if (debugEnabled) {\n console.warn(`[MTLS-LOADER] mTLS adapter not available for platform ${platform}:`, error);\n }\n return null;\n }\n}\n\n/**\n * Initialize the adapter asynchronously without blocking\n */\nasync function initializeAdapterAsync(\n adapter: IMTLSAdapter,\n config: MTLSConnectionConfig,\n debugEnabled: boolean\n): Promise<void> {\n try {\n const isSupported = await adapter.isMTLSSupported();\n\n if (isSupported) {\n await adapter.initialize(config);\n\n if (debugEnabled) {\n const platformInfo = adapter.getPlatformInfo();\n console.log('[MTLS-LOADER] mTLS adapter initialized:', {\n platform: platformInfo.platform,\n mtlsSupported: platformInfo.mtlsSupported,\n certificateStorage: platformInfo.certificateStorage,\n baseUrl: config.baseUrl,\n });\n }\n } else {\n if (debugEnabled) {\n console.log('[MTLS-LOADER] mTLS not supported on current platform, JWT-only mode');\n }\n }\n } catch (error) {\n if (debugEnabled) {\n console.warn('[MTLS-LOADER] Failed to initialize mTLS adapter:', error);\n }\n }\n}\n\n/**\n * Load React Native mTLS adapter (Expo mTLS-based)\n */\nfunction loadReactNativeMTLSAdapter(debugEnabled = false): IMTLSAdapter {\n return new ReactNativeMTLSAdapter(debugEnabled);\n}\n\n/**\n * Load Node.js mTLS adapter (https.Agent + axios-based)\n * Only loaded dynamically to avoid bundling Node.js code in non-Node environments\n */\nfunction loadNodeMTLSAdapter(debugEnabled = false): IMTLSAdapter {\n try {\n // Dynamic import to avoid bundling Node.js code in React Native/Web builds\n const { NodeMTLSAdapter } = require('../../platforms/node/mtls');\n return new NodeMTLSAdapter(debugEnabled);\n } catch (error) {\n console.warn('Node.js mTLS adapter not available, falling back to Web adapter');\n return loadWebMTLSAdapter(debugEnabled);\n }\n}\n\n/**\n * Load Web mTLS adapter (graceful fallback - JWT only)\n */\nfunction loadWebMTLSAdapter(debugEnabled = false): IMTLSAdapter {\n return new WebMTLSAdapter(debugEnabled);\n}\n\n/**\n * Detect current platform for mTLS adapter loading\n * @deprecated Use detectPlatform() from platform-detector instead\n */\nexport function detectPlatformForMTLS(): 'react-native' | 'node' | 'web' {\n const { platform } = detectPlatform();\n return platform === 'unknown' ? 'web' : (platform as 'react-native' | 'node' | 'web');\n}\n\n/**\n * mTLS adapter configuration by platform\n */\nexport const MTLS_CONFIG_BY_PLATFORM = {\n 'react-native': {\n mtlsSupported: true,\n certificateStorage: 'keychain',\n fallbackToJWT: true,\n defaultTimeout: 30000,\n description: 'Uses @a-cube-io/expo-mutual-tls for native mTLS support',\n },\n node: {\n mtlsSupported: true,\n certificateStorage: 'filesystem',\n fallbackToJWT: true,\n defaultTimeout: 30000,\n description: 'Uses https.Agent with client certificates + axios',\n },\n web: {\n mtlsSupported: false,\n certificateStorage: 'browser-managed',\n fallbackToJWT: true,\n defaultTimeout: 30000,\n description: 'Browser security model prevents programmatic mTLS - uses JWT only',\n },\n} as const;\n\n/**\n * Check if mTLS is supported on the current platform\n */\nexport function isMTLSSupported(platform?: string): boolean {\n const detectedPlatform = platform || detectPlatformForMTLS();\n const config = MTLS_CONFIG_BY_PLATFORM[detectedPlatform as keyof typeof MTLS_CONFIG_BY_PLATFORM];\n return config?.mtlsSupported || false;\n}\n\n/**\n * Get mTLS configuration for platform\n */\nexport function getMTLSConfig(platform?: string) {\n const detectedPlatform = platform || detectPlatformForMTLS();\n return MTLS_CONFIG_BY_PLATFORM[detectedPlatform as keyof typeof MTLS_CONFIG_BY_PLATFORM];\n}\n","import { PlatformAdapters } from '../adapters';\nimport {\n loadCacheAdapter,\n loadMTLSAdapter,\n loadNetworkMonitor,\n loadStorageAdapters,\n} from './loaders';\nimport { detectPlatform } from './platform-detector';\n\n/**\n * Configuration for mTLS adapter initialization\n */\nexport interface MTLSAdapterConfig {\n baseUrl?: string;\n port?: number;\n timeout?: number;\n validateCertificate?: boolean;\n autoInitialize?: boolean;\n}\n\n/**\n * Options for platform adapter loading\n */\nexport interface PlatformAdapterOptions {\n debugEnabled?: boolean;\n mtlsConfig?: MTLSAdapterConfig;\n}\n\n/**\n * Dynamically load platform-specific adapters with enhanced mTLS support\n */\nexport function loadPlatformAdapters(\n optionsOrDebug: PlatformAdapterOptions | boolean = {}\n): PlatformAdapters {\n // Handle legacy boolean parameter for backward compatibility\n const options: PlatformAdapterOptions =\n typeof optionsOrDebug === 'boolean' ? { debugEnabled: optionsOrDebug } : optionsOrDebug;\n\n const { debugEnabled = false, mtlsConfig } = options;\n const { platform } = detectPlatform();\n\n if (debugEnabled) {\n console.log('[ADAPTER-LOADER] Loading adapters for platform:', platform);\n }\n\n // Load all adapters using dedicated loaders\n const storageAdapters = loadStorageAdapters(platform);\n const networkMonitor = loadNetworkMonitor(platform);\n const cache = loadCacheAdapter(platform);\n\n // Load mTLS adapter with optional configuration\n const mtls = loadMTLSAdapter(\n platform,\n debugEnabled,\n mtlsConfig\n ? {\n baseUrl: mtlsConfig.baseUrl,\n port: mtlsConfig.port,\n timeout: mtlsConfig.timeout,\n validateCertificate: mtlsConfig.validateCertificate,\n autoInitialize: mtlsConfig.autoInitialize,\n }\n : undefined\n );\n\n if (debugEnabled) {\n console.log('[ADAPTER-LOADER] Adapters loaded:', {\n platform,\n hasStorage: !!storageAdapters.storage,\n hasSecureStorage: !!storageAdapters.secureStorage,\n hasNetworkMonitor: !!networkMonitor,\n hasCache: !!cache,\n hasMTLS: !!mtls,\n mtlsAutoInitialize: mtlsConfig?.autoInitialize || false,\n baseUrl: mtlsConfig?.baseUrl || 'N/A',\n });\n }\n\n return {\n ...storageAdapters,\n networkMonitor,\n cache,\n mtls: mtls || undefined,\n };\n}\n\n/**\n * Create mTLS configuration for A-Cube endpoints\n * Note: Port modification is now handled dynamically by HttpClient based on authentication matrix\n */\nexport function createACubeMTLSConfig(\n baseUrl: string,\n timeout?: number,\n autoInitialize = true,\n forcePort444 = true\n): MTLSAdapterConfig {\n const mtlsBaseUrl =\n forcePort444 && !baseUrl.includes(':444')\n ? baseUrl.includes(':444')\n ? baseUrl.replace(':444', ':444')\n : baseUrl.replace(/:\\d+$/, '') + ':444'\n : baseUrl;\n\n return {\n baseUrl: mtlsBaseUrl,\n port: 444,\n timeout: timeout || 30000,\n validateCertificate: true,\n autoInitialize,\n };\n}\n","/**\n * Generated API types from OpenAPI spec\n */\n\n// Base types\nexport interface Page<T> {\n members: T[];\n total?: number;\n page?: number;\n size?: number;\n pages?: number;\n}\n\nexport interface LdJsonPage<T> {\n member: T[];\n totalItems?: number;\n view?: {\n '@id': string;\n type?: string;\n first?: string;\n last?: string;\n previous?: string;\n next?: string;\n };\n}\n\n// Cashier types (MF1)\nexport interface CashierCreateInput {\n email: string;\n password: string;\n name: string;\n display_name: string;\n}\n\nexport interface CashierOutput {\n uuid: string;\n merchant_uuid: string;\n display_name: string;\n email: string;\n name: string;\n}\n\nexport interface CashierListParams {\n page?: number;\n size?: number;\n}\n\n// Point of Sale types\nexport type PEMStatus = 'NEW' | 'REGISTERED' | 'ACTIVATED' | 'ONLINE' | 'OFFLINE' | 'DISCARDED';\n\nexport interface Address {\n street_address: string;\n street_number: string;\n zip_code: string;\n city: string;\n province: string;\n}\n\nexport type PointOfSaleMf2Type = 'AP' | 'SP' | 'TM' | 'PV';\n\nexport interface PointOfSaleOutputMf2 {\n id: string;\n status: PEMStatus;\n type: PointOfSaleMf2Type;\n}\n\nexport interface PointOfSaleOutput {\n serial_number: string;\n status: PEMStatus;\n address: Address;\n operational_status: string;\n}\n\nexport interface PointOfSaleListParams {\n status?: PEMStatus;\n page?: number;\n size?: number;\n}\n\nexport interface PointOfSaleDetailedOutput {\n serial_number: string;\n status: PEMStatus;\n address: Address;\n registration_key?: string;\n operational_status: string;\n}\n\nexport interface ActivationRequest {\n registration_key: string;\n}\n\nexport interface PEMStatusOfflineRequest {\n timestamp: string;\n reason: string;\n}\n\nexport interface PointOfSaleUpdateInput {\n address?: Address;\n}\n\n// Receipt types\nexport type ReceiptType = 'sale' | 'return' | 'void';\nexport type GoodOrService = 'goods' | 'service';\nexport type VatRateCode =\n | '4.00'\n | '5.00'\n | '10.00'\n | '22.00'\n | '2.00'\n | '6.40'\n | '7.00'\n | '7.30'\n | '7.50'\n | '7.65'\n | '7.95'\n | '8.30'\n | '8.50'\n | '8.80'\n | '9.50'\n | '12.30'\n | 'N1'\n | 'N2'\n | 'N3'\n | 'N4'\n | 'N5'\n | 'N6';\n\nexport const VatRateCodeOptions: VatRateCode[] = [\n '4.00',\n '5.00',\n '10.00',\n '22.00',\n '2.00',\n '6.40',\n '7.00',\n '7.30',\n '7.50',\n '7.65',\n '7.95',\n '8.30',\n '8.50',\n '8.80',\n '9.50',\n '12.30',\n 'N1',\n 'N2',\n 'N3',\n 'N4',\n 'N5',\n 'N6',\n];\n\nexport interface ReceiptItem {\n type?: GoodOrService;\n quantity: string;\n description: string;\n unit_price: string;\n vat_rate_code?: VatRateCode;\n simplified_vat_allocation?: boolean;\n discount?: string;\n is_down_payment_or_voucher_redemption?: boolean;\n complimentary?: boolean;\n}\n\nexport interface ReceiptReturnItem {\n id: number;\n quantity: string;\n}\n\nexport interface ReceiptInput {\n items: ReceiptItem[];\n customer_tax_code?: string;\n customer_lottery_code?: string;\n discount?: string;\n invoice_issuing?: boolean;\n uncollected_dcr_to_ssn?: boolean;\n services_uncollected_amount?: string;\n goods_uncollected_amount?: string;\n cash_payment_amount?: string;\n electronic_payment_amount?: string;\n ticket_restaurant_payment_amount?: string;\n ticket_restaurant_quantity?: number;\n}\n\nexport interface ReceiptOutput {\n uuid: string;\n type: ReceiptType;\n created_at: string;\n total_amount: string;\n document_number: string;\n document_datetime?: string;\n is_returnable: boolean;\n is_voidable: boolean;\n pdf_url?: string;\n parent_receipt_uuid?: string;\n}\n\nexport interface ReceiptDetailsOutput {\n uuid: string;\n type: ReceiptType;\n customer_lottery_code?: string;\n created_at: string;\n total_amount: string;\n document_number?: string;\n document_datetime?: string;\n vat_number: string;\n total_taxable_amount: string;\n total_uncollected_amount: string;\n deductible_amount: string;\n total_vat_amount: string;\n total_discount: string;\n total_gross_discount: string;\n discount: string;\n is_returnable: boolean;\n is_voidable: boolean;\n pdf_url?: string;\n parent_receipt_uuid?: string;\n items?: ReceiptItem[];\n}\n\nexport interface VoidReceiptInput {\n document_number: string;\n}\nexport interface ReceiptReturnInput {\n items: ReceiptReturnItem[];\n document_number: string;\n}\n\nexport interface ReturnableReceiptItem {\n id: number;\n type?: GoodOrService;\n quantity: string;\n returned_quantity: string;\n description: string;\n unit_price: string;\n vat_rate_code?: VatRateCode;\n}\n\nexport interface ReceiptReturnOrVoidViaPEMInput {\n pos_id?: string;\n items: ReceiptItem[];\n document_number: string;\n document_datetime?: string;\n lottery_code?: string;\n}\n\nexport type ReceiptProofType = 'POS' | 'VR' | 'ND';\n\nexport const RECEIPT_READY = 'ready';\nexport const RECEIPT_SENT = 'sent';\nexport type ReceiptStatus = typeof RECEIPT_READY | typeof RECEIPT_SENT;\n\nexport const RECEIPT_SORT_DESCENDING = 'descending';\nexport const RECEIPT_SORT_ASCENDING = 'ascending';\nexport type ReceiptSortOrder = typeof RECEIPT_SORT_DESCENDING | typeof RECEIPT_SORT_ASCENDING;\n\nexport interface ReceiptListParams {\n serial_number: string; // Path parameter for endpoint /mf1/point-of-sales/{serial_number}/receipts\n page?: number;\n size?: number;\n status?: ReceiptStatus;\n sort?: ReceiptSortOrder;\n document_number?: string;\n 'document_datetime[before]'?: string;\n 'document_datetime[after]'?: string | null;\n}\nexport interface ReceiptReturnOrVoidWithProofInput {\n items: ReceiptItem[];\n proof: ReceiptProofType;\n document_datetime: string;\n}\n\n// Cash Register types\nexport interface CashRegisterCreate {\n pem_serial_number: string;\n name: string;\n}\n\nexport interface CashRegisterBasicOutput {\n uuid: string;\n pem_serial_number: string;\n name: string;\n}\n\nexport interface CashRegisterDetailedOutput {\n uuid: string;\n pem_serial_number: string;\n name: string;\n mtls_certificate: string;\n private_key: string;\n}\n\nexport interface CashRegisterListParams {\n page?: number;\n size?: number;\n serial_number?: string;\n}\n\n// Merchant types (MF2)\nexport interface MerchantOutput {\n uuid: string;\n vat_number: string;\n fiscal_code?: string | null;\n email: string;\n business_name?: string | null;\n first_name?: string | null;\n last_name?: string | null;\n address?: Address;\n}\n\nexport interface MerchantsParams {\n page?: number;\n}\n\nexport interface MerchantCreateInput {\n vat_number: string;\n fiscal_code?: string;\n business_name?: string | null;\n first_name?: string | null;\n last_name?: string | null;\n email: string;\n password: string;\n address?: Address;\n}\n\nexport interface MerchantUpdateInput {\n business_name?: string | null;\n first_name?: string | null;\n last_name?: string | null;\n address?: Address | null;\n}\n\n// PEM types (MF2)\nexport interface PemCreateInput {\n merchant_uuid: string;\n address?: Address;\n /* external_pem_data?: PemData; */\n}\n\nexport interface PemData {\n version: string;\n type: PointOfSaleMf2Type;\n}\n\nexport interface PemCreateOutput {\n serial_number: string;\n registration_key: string;\n}\n\nexport interface PemCertificatesOutput {\n mtls_certificate: string;\n activation_xml_response?: string;\n}\n\n// Supplier types (MF2)\nexport interface SupplierOutput {\n uuid: string;\n fiscal_id: string;\n name: string;\n address?: Address;\n}\n\nexport interface SuppliersParams {\n page?: number;\n}\n\nexport interface SupplierCreateInput {\n fiscal_id: string;\n name: string;\n address?: Address;\n}\n\nexport interface SupplierUpdateInput {\n name: string;\n address?: Address;\n}\n\n// Daily Reports types (MF2)\nexport interface DailyReportOutput {\n uuid: string;\n pem_serial_number: string;\n date: string;\n total_receipts: number;\n total_amount: string;\n status: 'pending' | 'sent' | 'error';\n}\n\nexport interface DailyReportsParams {\n pem_serial_number?: string;\n date_from?: string;\n date_to?: string;\n status?: 'pending' | 'sent' | 'error';\n page?: number;\n}\n\n// Journal types (MF2)\nexport interface JournalOutput {\n uuid: string;\n pem_serial_number: string;\n date: string;\n sequence_number: number;\n total_receipts: number;\n total_amount: string;\n status: 'open' | 'closed';\n}\n\nexport interface JournalsParams {\n pem_serial_number?: string;\n status?: 'open' | 'closed';\n date_from?: string;\n date_to?: string;\n page?: number;\n}\n\n// Error types\nexport interface ErrorModel {\n type: string;\n title: string;\n status: number;\n detail: string;\n instance?: string;\n}\n\nexport interface ValidationError {\n loc: (string | number)[];\n msg: string;\n type: string;\n}\n\nexport interface HTTPValidationError {\n detail?: ValidationError[];\n}\n","/**\n * Object utility functions\n */\n\n/**\n * Deeply removes null, undefined, or empty string values from objects and arrays\n * @param input - The object or array to clean\n * @returns A new cleaned object/array\n */\nexport type Cleaned<T> = T extends (infer U)[]\n ? Cleaned<U>[]\n : T extends object\n ? {\n [K in keyof T as T[K] extends null | undefined | '' ? never : K]: Cleaned<T[K]>;\n }\n : T;\n\n/**\n * Recursively cleans objects and arrays\n * @param input - The object or array to clean\n * @returns A new cleaned object/array\n */\nexport function clearObject<T>(input: T): Cleaned<T> {\n if (input === null || input === undefined || input === '') {\n return undefined as unknown as Cleaned<T>;\n }\n\n if (Array.isArray(input)) {\n const cleanedArray = input\n .map((item) => clearObject(item))\n .filter((item): item is NonNullable<typeof item> => item !== undefined);\n return cleanedArray as unknown as Cleaned<T>;\n }\n\n if (typeof input === 'object' && input.constructor === Object) {\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(input)) {\n const cleanedValue = clearObject(value);\n if (cleanedValue !== undefined) {\n cleaned[key] = cleanedValue;\n }\n }\n return cleaned as Cleaned<T>;\n }\n\n return input as Cleaned<T>;\n}\n\n/**\n * Removes all keys with null, undefined, or empty string values from an object (shallow)\n * @param obj - The object to clean\n * @returns A new object with cleaned values (only top-level cleaning)\n */\n\nexport type CleanedShallow<T> = {\n [K in keyof T as T[K] extends null | undefined | '' ? never : K]: T[K];\n};\n\nexport function clearObjectShallow<T extends Record<string, unknown>>(obj: T): CleanedShallow<T> {\n if (!obj || typeof obj !== 'object') {\n return {} as CleanedShallow<T>;\n }\n\n const cleaned: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n if (value !== null && value !== undefined && value !== '') {\n cleaned[key] = value;\n }\n }\n\n return cleaned as CleanedShallow<T>;\n}\n\n/**\n * Checks if a value is considered \"empty\" (null, undefined, or empty string)\n * @param value - The value to check\n * @returns True if the value is considered empty\n */\nexport function isEmpty(value: unknown): boolean {\n return value === null || value === undefined || value === '';\n}\n\n/**\n * Checks if an object has any non-empty values\n * @param obj - The object to check\n * @returns True if the object has at least one non-empty value\n */\nexport function hasNonEmptyValues<T extends Record<string, unknown>>(obj: T): boolean {\n if (!obj || typeof obj !== 'object') {\n return false;\n }\n\n return Object.values(obj).some((value) => !isEmpty(value));\n}\n","import { MTLSError } from '../../../adapters';\n\n/**\n * Error types for better error classification\n */\nexport enum ErrorCategory {\n SERVER_ERROR = 'SERVER_ERROR', // 5xx - Server internal errors\n CLIENT_ERROR = 'CLIENT_ERROR', // 4xx - Client request errors\n AUTH_ERROR = 'AUTH_ERROR', // 401, 403 - Authentication/Authorization\n CERTIFICATE_ERROR = 'CERTIFICATE_ERROR', // Certificate-related errors\n NETWORK_ERROR = 'NETWORK_ERROR', // Network/connection errors\n UNKNOWN_ERROR = 'UNKNOWN_ERROR', // Unknown errors\n}\n\n/**\n * Error classification result\n */\nexport interface ErrorClassification {\n category: ErrorCategory;\n statusCode?: number;\n message: string;\n shouldRetry: boolean;\n userMessage: string;\n}\n\n/**\n * Extract status code from various error types\n */\nfunction extractStatusCode(error: unknown): number | undefined {\n // Check MTLSError\n if (error instanceof MTLSError && error.statusCode) {\n return error.statusCode;\n }\n\n const errorObj = error as { response?: { status?: number }; statusCode?: number };\n\n // Check axios error\n if (errorObj?.response?.status) {\n return errorObj.response.status;\n }\n\n // Check if error has statusCode property\n if (typeof errorObj?.statusCode === 'number') {\n return errorObj.statusCode;\n }\n\n return undefined;\n}\n\n/**\n * Classify error based on status code and error type\n */\nexport function classifyError(error: unknown): ErrorClassification {\n const statusCode = extractStatusCode(error);\n const errorMessage = error instanceof Error ? error.message : String(error);\n\n // Server errors (5xx) - Don't retry\n if (statusCode && statusCode >= 500 && statusCode < 600) {\n return {\n category: ErrorCategory.SERVER_ERROR,\n statusCode,\n message: errorMessage,\n shouldRetry: false,\n userMessage: `Server error (${statusCode}): The server encountered an error. Please contact support if this persists.`,\n };\n }\n\n // Authentication/Authorization errors (401, 403)\n if (statusCode === 401 || statusCode === 403) {\n return {\n category: ErrorCategory.AUTH_ERROR,\n statusCode,\n message: errorMessage,\n shouldRetry: false,\n userMessage: `Authentication error (${statusCode}): Invalid credentials or insufficient permissions.`,\n };\n }\n\n // Other client errors (4xx) - Don't retry\n if (statusCode && statusCode >= 400 && statusCode < 500) {\n return {\n category: ErrorCategory.CLIENT_ERROR,\n statusCode,\n message: errorMessage,\n shouldRetry: false,\n userMessage: `Request error (${statusCode}): ${errorMessage}`,\n };\n }\n\n // Certificate-specific errors - Retry once\n if (error instanceof MTLSError) {\n return {\n category: ErrorCategory.CERTIFICATE_ERROR,\n statusCode,\n message: errorMessage,\n shouldRetry: true,\n userMessage:\n 'Certificate error: Unable to establish secure connection. Please check your certificate.',\n };\n }\n\n // Network errors (no status code) - Retry once\n if (\n !statusCode &&\n (errorMessage.toLowerCase().includes('network') ||\n errorMessage.toLowerCase().includes('timeout') ||\n errorMessage.toLowerCase().includes('connection'))\n ) {\n return {\n category: ErrorCategory.NETWORK_ERROR,\n message: errorMessage,\n shouldRetry: true,\n userMessage: 'Network error: Unable to connect to server. Please check your connection.',\n };\n }\n\n // Unknown errors - Don't retry for safety\n return {\n category: ErrorCategory.UNKNOWN_ERROR,\n statusCode,\n message: errorMessage,\n shouldRetry: false,\n userMessage: `Unexpected error: ${errorMessage}`,\n };\n}\n\n/**\n * Check if error should trigger certificate reconfiguration\n */\nexport function shouldReconfigureCertificate(error: unknown): boolean {\n const classification = classifyError(error);\n\n // Only reconfigure for certificate errors, not for server/client errors\n return classification.category === ErrorCategory.CERTIFICATE_ERROR;\n}\n\n/**\n * Check if error should be retried\n */\nexport function shouldRetryRequest(error: unknown, isRetryAttempt: boolean): boolean {\n // Never retry if this is already a retry attempt\n if (isRetryAttempt) {\n return false;\n }\n\n const classification = classifyError(error);\n return classification.shouldRetry;\n}\n\n/**\n * Get user-friendly error message\n */\nexport function getUserFriendlyMessage(error: unknown): string {\n const classification = classifyError(error);\n return classification.userMessage;\n}\n","import {\n CertificateData,\n IMTLSAdapter,\n MTLSError,\n MTLSErrorType,\n MTLSRequestConfig,\n} from '../../../adapters';\nimport { CertificateManager, StoredCertificate } from '../../certificates';\nimport { hasRole } from '../../roles';\nimport { IUserProvider } from '../../types';\nimport {\n classifyError,\n shouldReconfigureCertificate,\n shouldRetryRequest,\n} from '../utils/error-classifier';\n\n/**\n * Simplified authentication modes\n */\nexport type AuthMode = 'jwt' | 'mtls' | 'auto';\n\n/**\n * Authentication configuration with port 444 support for browser certificates\n */\nexport interface AuthConfig {\n mode: AuthMode;\n usePort444: boolean; // For web platform browser certificate usage\n}\n\n/**\n * mTLS Handler for certificate selection and mTLS requests\n */\nexport class MTLSHandler {\n private isDebugEnabled: boolean = false;\n private pendingRequests = new Map<string, Promise<unknown>>();\n\n constructor(\n private mtlsAdapter: IMTLSAdapter | null,\n private certificateManager: CertificateManager | null,\n debugEnabled: boolean = false,\n private userProvider?: IUserProvider\n ) {\n this.isDebugEnabled = debugEnabled;\n }\n\n /**\n * Get the single certificate for mTLS requests\n */\n async getCertificate(): Promise<StoredCertificate | null> {\n if (!this.certificateManager) return null;\n\n try {\n const cert = await this.certificateManager.getCertificate();\n\n if (cert) {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Certificate found:', {\n format: cert.format,\n });\n }\n return cert;\n }\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] No certificate available for mTLS');\n }\n return null;\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] Certificate retrieval failed:', error);\n }\n return null;\n }\n }\n\n /**\n * Check if mTLS is ready for requests (simplified approach)\n *\n * New approach: Only check if certificate exists in storage.\n * No pre-flight validation or test connection.\n * Let makeRequestMTLS() handle configuration and retry on failure.\n */\n async isMTLSReady(): Promise<boolean> {\n if (!this.mtlsAdapter || !this.certificateManager) {\n return false;\n }\n\n try {\n const hasCertificate = await this.certificateManager.hasCertificate();\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] ✅ mTLS readiness check:', {\n hasCertificate,\n approach: 'certificate-existence-only',\n });\n }\n\n return hasCertificate;\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] ❌ mTLS readiness check failed:', error);\n }\n return false;\n }\n }\n\n /**\n * Determine authentication configuration for a request\n *\n * Authentication Matrix:\n * - SUPPLIER: JWT only (all platforms, all resources)\n * - MERCHANT: JWT for non-receipts, GET receipts; mTLS for POST/PUT/PATCH receipts on mobile; JWT+:444 for POST/PUT/PATCH receipts on web\n * - CASHIER: mTLS on mobile, JWT+:444 on web (receipts only)\n * - Web Platform: Always JWT, but uses :444 port for browser certificates when needed\n */\n async determineAuthConfig(\n url: string,\n explicitMode?: AuthMode,\n method?: string\n ): Promise<AuthConfig> {\n // Step 1: Detect platform (web always uses JWT)\n let platform: 'web' | 'mobile' | 'unknown' = 'unknown';\n if (this.mtlsAdapter) {\n try {\n const platformInfo = this.mtlsAdapter.getPlatformInfo();\n platform = platformInfo.platform === 'web' ? 'web' : 'mobile';\n } catch (error) {\n if (this.isDebugEnabled) {\n console.warn('[MTLS-HANDLER] ⚠️ Platform detection failed, defaulting to web:', error);\n }\n platform = 'web'; // Default to web (JWT) for safety\n }\n } else {\n platform = 'web'; // No adapter means web platform\n }\n\n // Step 2: Get user role\n let userRole: string | null = null;\n if (this.userProvider) {\n try {\n const currentUser = await this.userProvider.getCurrentUser();\n if (currentUser && currentUser.roles) {\n // Identify primary role\n if (hasRole(currentUser.roles, 'ROLE_SUPPLIER')) {\n userRole = 'SUPPLIER';\n } else if (hasRole(currentUser.roles, 'ROLE_MERCHANT')) {\n userRole = 'MERCHANT';\n } else if (hasRole(currentUser.roles, 'ROLE_CASHIER')) {\n userRole = 'CASHIER';\n }\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.warn('[MTLS-HANDLER] ⚠️ Failed to get user role:', error);\n }\n }\n }\n\n // Step 3: Determine if this is a receipt endpoint\n const isReceiptEndpoint = url.includes('/receipts') || url.includes('/mf1/receipts');\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🔍 Auth decision factors:', {\n platform,\n userRole,\n isReceiptEndpoint,\n method: method || 'unknown',\n url,\n });\n }\n\n // Step 4: Apply authentication matrix\n\n // SUPPLIER: Always JWT, no port 444 needed\n if (userRole === 'SUPPLIER') {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 👤 SUPPLIER role - JWT only');\n }\n return { mode: 'jwt', usePort444: false };\n }\n\n // CASHIER: Can only access receipts\n if (userRole === 'CASHIER') {\n if (!isReceiptEndpoint) {\n if (this.isDebugEnabled) {\n console.warn('[MTLS-HANDLER] ❌ CASHIER trying to access non-receipt endpoint');\n }\n // Cashiers can only access receipts - force JWT to let server reject\n return { mode: 'jwt', usePort444: false };\n }\n // Mobile cashier uses mTLS for receipts\n if (platform === 'mobile') {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🏧 CASHIER on mobile - mTLS for receipts');\n }\n return { mode: 'mtls', usePort444: true };\n }\n // Web cashier uses JWT with :444 port for browser certificates\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🏧 CASHIER on web - JWT with :444 for browser certificates');\n }\n return { mode: 'jwt', usePort444: true };\n }\n\n // MERCHANT: Complex rules\n if (userRole === 'MERCHANT') {\n // Non-receipt resources: Always JWT, no port 444\n if (!isReceiptEndpoint) {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🏪 MERCHANT accessing non-receipt - JWT');\n }\n return { mode: 'jwt', usePort444: false };\n }\n\n // Returnable items endpoint: Always mTLS\n const isReturnableItemsEndpoint =\n url.match(/\\/receipts\\/[a-f0-9-]+\\/returnable-items$/) ||\n url.match(/\\/mf1\\/receipts\\/[a-f0-9-]+\\/returnable-items$/);\n if (isReturnableItemsEndpoint) {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🏪 MERCHANT GET returnable items - mTLS');\n }\n return { mode: 'mtls', usePort444: true };\n }\n\n // Receipt GET: Always JWT, except for detailed receipt with mTLS\n if (method === 'GET') {\n // Detailed receipt GET (with ID) /details uses mTLS on mobile, JWT+:444 on web\n // ✅ FIXED: expo-mutual-tls v1.0.3+ supports binary responses via base64 encoding\n if (\n url.match(/\\/receipts\\/[a-f0-9-]+\\/details$/) ||\n url.match(/\\/mf1\\/receipts\\/[a-f0-9-]+\\/details$/)\n ) {\n if (platform === 'mobile') {\n if (this.isDebugEnabled) {\n console.log(\n '[MTLS-HANDLER] 🏪 MERCHANT GET detailed receipt on mobile - mTLS (binary response support)'\n );\n }\n return { mode: 'mtls', usePort444: true };\n } else {\n // Web platform: JWT with :444 for browser certificates\n if (this.isDebugEnabled) {\n console.log(\n '[MTLS-HANDLER] 🏪 MERCHANT GET detailed receipt on web - JWT with :444 for browser certificates'\n );\n }\n return { mode: 'jwt', usePort444: true };\n }\n }\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🏪 MERCHANT GET receipt - JWT');\n }\n return { mode: 'jwt', usePort444: false };\n }\n\n // Receipt POST/PUT/PATCH/DELETE: mTLS on mobile, JWT+:444 on web\n if (['POST', 'PUT', 'PATCH', 'DELETE'].includes(method || '')) {\n if (platform === 'mobile') {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🏪 MERCHANT modify receipt on mobile - mTLS');\n }\n return { mode: 'mtls', usePort444: true };\n } else {\n // Web platform: JWT with :444 for browser certificates\n if (this.isDebugEnabled) {\n console.log(\n '[MTLS-HANDLER] 🏪 MERCHANT modify receipt on web - JWT with :444 for browser certificates'\n );\n }\n return { mode: 'jwt', usePort444: true };\n }\n }\n\n // All other MERCHANT cases: JWT\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🏪 MERCHANT default - JWT');\n }\n return { mode: 'jwt', usePort444: false };\n }\n\n // Step 5: Handle explicit mode override (if allowed)\n if (explicitMode) {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] ⚠️ Explicit auth mode requested:', explicitMode);\n }\n // Security: Don't allow overriding SUPPLIER to mTLS\n if (userRole === 'SUPPLIER' && explicitMode === 'mtls') {\n if (this.isDebugEnabled) {\n console.warn('[MTLS-HANDLER] ❌ Blocking mTLS override for SUPPLIER');\n }\n return { mode: 'jwt', usePort444: false };\n }\n\n // Determine usePort444 based on explicit mode and context\n let usePort444 = false;\n\n if (explicitMode === 'mtls') {\n // mTLS always needs port 444\n usePort444 = true;\n } else if (explicitMode === 'jwt') {\n // JWT: check if the requesting role and resource needs browser certificates\n if (platform === 'web' && isReceiptEndpoint) {\n if (userRole === 'CASHIER') {\n // CASHIER needs :444 for all receipt operations on web\n usePort444 = true;\n } else if (userRole === 'MERCHANT') {\n // MERCHANT needs :444 for:\n // 1. Detailed receipt GET (/receipts/{id}/details)\n // 2. POST/PUT/PATCH receipt operations\n const isDetailedReceiptGet =\n method === 'GET' &&\n !!(\n url.match(/\\/receipts\\/[a-f0-9-]+\\/details$/) ||\n url.match(/\\/mf1\\/receipts\\/[a-f0-9-]+\\/details$/)\n );\n const isReceiptMutation = ['POST', 'PUT', 'PATCH'].includes(method || '');\n\n usePort444 = isDetailedReceiptGet || isReceiptMutation;\n }\n }\n }\n\n return {\n mode: explicitMode,\n usePort444,\n };\n }\n\n // Step 6: Default behavior for unknown roles\n // Web platform: Always use JWT for safety (never mTLS without explicit role)\n if (platform === 'web') {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🌐 Web platform with unknown role - defaulting to JWT (safe)');\n }\n // Use port 444 only for receipt endpoints that might need browser certificates\n return { mode: 'jwt', usePort444: isReceiptEndpoint };\n }\n\n // Mobile platform: For receipts without a known role, prefer mTLS\n if (isReceiptEndpoint && platform === 'mobile') {\n if (this.isDebugEnabled) {\n console.log(\n '[MTLS-HANDLER] 📱 Mobile with unknown role, receipt endpoint - defaulting to mTLS'\n );\n }\n return { mode: 'mtls', usePort444: true };\n }\n\n // Default to JWT for all other cases (unknown platform or non-receipt endpoints)\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 📝 Default case - JWT (platform:', platform, ')');\n }\n return { mode: 'jwt', usePort444: false };\n }\n\n /**\n * Legacy method for backward compatibility\n * @deprecated Use determineAuthConfig instead\n */\n async determineAuthMode(\n url: string,\n explicitMode?: AuthMode,\n method?: string\n ): Promise<AuthMode> {\n const config = await this.determineAuthConfig(url, explicitMode, method);\n return config.mode;\n }\n\n /**\n * Generate a unique key for request deduplication\n */\n private generateRequestKey(\n url: string,\n config: {\n method?: string;\n data?: unknown;\n headers?: Record<string, string>;\n timeout?: number;\n } = {},\n jwtToken?: string\n ): string {\n const method = config.method || 'GET';\n const dataHash = config.data ? JSON.stringify(config.data) : '';\n const authHash = jwtToken ? jwtToken.substring(0, 10) : 'no-auth';\n return `${method}:${url}:${dataHash}:${authHash}`;\n }\n\n /**\n * Make a request with mTLS authentication using retry-on-failure pattern\n * Includes request deduplication to prevent multiple concurrent requests to the same endpoint\n *\n * New approach: Try request → If fails → Reconfigure once → Retry → If fails → Error\n */\n async makeRequestMTLS<T>(\n url: string,\n config: {\n method?: string;\n data?: unknown;\n headers?: Record<string, string>;\n timeout?: number;\n responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';\n } = {},\n certificateOverride?: CertificateData,\n jwtToken?: string,\n isRetryAttempt: boolean = false\n ): Promise<T> {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Making mTLS request:', {\n config,\n url,\n });\n }\n // Generate request key for deduplication (only for non-retry attempts)\n const requestKey = !isRetryAttempt ? this.generateRequestKey(url, config, jwtToken) : null;\n\n // Check if there's already a pending request for this exact same request\n if (requestKey && this.pendingRequests.has(requestKey)) {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🔄 Deduplicating concurrent request:', {\n method: config.method || 'GET',\n url,\n requestKey: requestKey.substring(0, 50) + '...',\n pendingCount: this.pendingRequests.size,\n config,\n });\n }\n\n // Return the existing promise to prevent duplicate requests\n return this.pendingRequests.get(requestKey)! as Promise<T>;\n }\n\n // Create the actual request promise\n const requestPromise = this.executeRequestMTLS<T>(\n url,\n config,\n certificateOverride,\n jwtToken,\n isRetryAttempt\n );\n\n // Store the promise for deduplication (only for non-retry attempts)\n if (requestKey) {\n this.pendingRequests.set(requestKey, requestPromise);\n\n // Clean up the pending request when it completes (success or failure)\n requestPromise\n .then(() => {\n this.pendingRequests.delete(requestKey);\n })\n .catch(() => {\n this.pendingRequests.delete(requestKey);\n });\n }\n\n return requestPromise;\n }\n\n /**\n * Execute the actual mTLS request (internal method)\n */\n private async executeRequestMTLS<T>(\n url: string,\n config: {\n method?: string;\n data?: unknown;\n headers?: Record<string, string>;\n timeout?: number;\n responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';\n } = {},\n certificateOverride?: CertificateData,\n jwtToken?: string,\n isRetryAttempt: boolean = false\n ): Promise<T> {\n if (!this.mtlsAdapter) {\n throw new MTLSError(MTLSErrorType.NOT_SUPPORTED, 'mTLS adapter not available');\n }\n\n // Get the single certificate\n const selectedCert = await this.getCertificate();\n const certificateData =\n certificateOverride || (selectedCert ? this.certificateToData(selectedCert) : null);\n\n if (!certificateData) {\n throw new MTLSError(\n MTLSErrorType.CERTIFICATE_NOT_FOUND,\n 'No certificate available for mTLS request'\n );\n }\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Making mTLS request:', {\n method: config.method || 'GET',\n url,\n hasData: !!config.data,\n isRetryAttempt,\n approach: 'retry-on-failure',\n responseType: config.responseType,\n config,\n });\n }\n\n try {\n // Prepare headers including JWT Authorization if available\n const headers: Record<string, string> = {\n ...(config.method !== 'GET' && config.data ? { 'Content-Type': 'application/json' } : {}),\n ...(config.headers || {}),\n };\n\n // Include JWT Authorization header if available\n if (jwtToken) {\n headers['Authorization'] = jwtToken;\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Including JWT Authorization header in mTLS request');\n }\n }\n\n const mtlsConfig: MTLSRequestConfig = {\n url: this.constructMTLSUrl(url),\n method: (config.method || 'GET') as 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH',\n headers,\n data: config.data,\n timeout: config.timeout,\n responseType: config.responseType,\n };\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] mTLS request config:', mtlsConfig);\n }\n\n const response = await this.mtlsAdapter.request<T>(mtlsConfig);\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] mTLS request successful:', {\n status: response.status,\n hasData: !!response.data,\n response: response,\n isRetryAttempt,\n });\n }\n\n return response.data;\n } catch (error) {\n // Classify the error to determine appropriate handling\n const errorClassification = classifyError(error);\n\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] mTLS request failed:', {\n error: error instanceof Error ? error.message : error,\n category: errorClassification.category,\n statusCode: errorClassification.statusCode,\n shouldRetry: errorClassification.shouldRetry,\n isRetryAttempt,\n });\n }\n\n // If this is already a retry attempt, don't retry again to prevent infinite loops\n if (isRetryAttempt) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] ❌ Retry attempt failed:', errorClassification.userMessage);\n }\n throw error;\n }\n\n // Check if we should retry based on error classification\n if (!shouldRetryRequest(error, isRetryAttempt)) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] ❌ Error not retryable:', errorClassification.userMessage);\n }\n throw error;\n }\n\n // Only reconfigure certificate for certificate-specific errors\n if (!shouldReconfigureCertificate(error)) {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🔄 Retrying request without reconfiguring certificate...');\n }\n\n // Retry the request without reconfiguring\n return await this.executeRequestMTLS<T>(url, config, certificateOverride, jwtToken, true);\n }\n\n // Certificate error - try to reconfigure and retry\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] 🔄 Certificate error detected, reconfiguring and retrying...');\n }\n\n try {\n // Reconfigure the certificate in the mTLS adapter\n await this.mtlsAdapter.configureCertificate(certificateData);\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] ✅ Certificate reconfigured, retrying request...');\n }\n\n // Retry the request (with flag to prevent infinite recursion)\n return await this.executeRequestMTLS<T>(url, config, certificateOverride, jwtToken, true);\n } catch (reconfigError) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] ❌ Certificate reconfiguration failed:', reconfigError);\n }\n // If reconfiguration fails, throw the original error\n throw error;\n }\n }\n }\n\n /**\n * Store certificate with proper coordination between certificate manager and mTLS adapter\n * Ensures old certificates are cleared from both SDK storage and native keychain\n */\n async storeCertificate(\n certificate: string,\n privateKey: string,\n options: { format?: 'pem' | 'p12' | 'pkcs12' } = {}\n ): Promise<void> {\n if (!this.certificateManager) {\n throw new MTLSError(MTLSErrorType.CONFIGURATION_ERROR, 'Certificate manager not available');\n }\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Coordinated certificate storage initiated:', {\n format: options.format || 'pem',\n certificateLength: certificate.length,\n privateKeyLength: privateKey.length,\n });\n }\n\n try {\n // Step 1: Clear any existing certificate from a native keychain\n if (this.mtlsAdapter) {\n try {\n await this.mtlsAdapter.removeCertificate();\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Cleared old certificate from native keychain');\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.warn('[MTLS-HANDLER] No existing certificate to clear from keychain:', error);\n }\n }\n }\n\n // Step 2: Store new certificate in certificate manager\n await this.certificateManager.storeCertificate(certificate, privateKey, options);\n\n // Step 3: Configure a certificate in mTLS adapter for immediate use\n if (this.mtlsAdapter) {\n try {\n const certificateData = {\n certificate,\n privateKey,\n format: (options.format?.toUpperCase() || 'PEM') as 'PEM' | 'P12',\n password: undefined, // Not used in our simplified system\n };\n\n await this.mtlsAdapter.configureCertificate(certificateData);\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Certificate configured in mTLS adapter');\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] Failed to configure certificate in adapter:', error);\n }\n throw new MTLSError(\n MTLSErrorType.CONFIGURATION_ERROR,\n `Failed to configure certificate in mTLS adapter: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Certificate stored and configured successfully');\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] Coordinated certificate storage failed:', error);\n }\n throw error;\n }\n }\n\n /**\n * Clear certificate from both certificate manager and native keychain\n */\n async clearCertificate(): Promise<void> {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Coordinated certificate clearing initiated');\n }\n\n try {\n // Step 1: Clear from the native keychain\n if (this.mtlsAdapter) {\n try {\n await this.mtlsAdapter.removeCertificate();\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Cleared certificate from native keychain');\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.warn('[MTLS-HANDLER] No certificate to clear from keychain:', error);\n }\n }\n }\n\n // Step 2: Clear from the certificate manager\n if (this.certificateManager) {\n try {\n await this.certificateManager.clearCertificate();\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Cleared certificate from certificate manager');\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.warn('[MTLS-HANDLER] No certificate to clear from manager:', error);\n }\n }\n }\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Certificate cleared successfully from all storage systems');\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] Coordinated certificate clearing failed:', error);\n }\n throw error;\n }\n }\n\n /**\n * Test mTLS connection\n */\n async testConnection(): Promise<boolean> {\n if (!this.mtlsAdapter) return false;\n\n try {\n const result = await this.mtlsAdapter.testConnection();\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] mTLS connection test:', result);\n }\n\n return result;\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] mTLS connection test failed:', error);\n }\n return false;\n }\n }\n\n /**\n * Clear all pending requests (useful for testing or cleanup)\n */\n clearPendingRequests(): void {\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Clearing pending requests:', this.pendingRequests.size);\n }\n this.pendingRequests.clear();\n }\n\n /**\n * Get mTLS status information\n */\n async getStatus() {\n const status = {\n adapterAvailable: !!this.mtlsAdapter,\n certificateManagerAvailable: !!this.certificateManager,\n isReady: false,\n hasCertificate: false,\n certificateInfo: null as { format: string } | null,\n platformInfo: this.mtlsAdapter?.getPlatformInfo() || null,\n diagnosticTest: false, // Renamed to clarify this is diagnostic only\n diagnosticTestNote:\n 'Test endpoint may fail even when mTLS works - for diagnostic purposes only',\n pendingRequestsCount: this.pendingRequests.size,\n };\n\n if (this.certificateManager) {\n try {\n status.hasCertificate = await this.certificateManager.hasCertificate();\n if (status.hasCertificate) {\n status.certificateInfo = await this.certificateManager.getCertificateInfo();\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] Failed to get certificate info:', error);\n }\n }\n }\n\n if (this.mtlsAdapter && this.certificateManager) {\n try {\n status.isReady = await this.isMTLSReady();\n\n // Run diagnostic test but don't let it affect overall status\n try {\n status.diagnosticTest = await this.testConnection();\n if (this.isDebugEnabled) {\n console.log(\n '[MTLS-HANDLER] 🔍 Diagnostic test completed (result does not affect isReady status)'\n );\n }\n } catch (diagnosticError) {\n if (this.isDebugEnabled) {\n console.warn(\n '[MTLS-HANDLER] 🔍 Diagnostic test failed (this is expected and normal):',\n diagnosticError\n );\n }\n status.diagnosticTest = false;\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[MTLS-HANDLER] Status check failed:', error);\n }\n }\n }\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] mTLS Status:', {\n ...status,\n approach: 'retry-on-failure',\n });\n }\n\n return status;\n }\n\n /**\n * Convert StoredCertificate to CertificateData for mTLS adapter\n */\n private certificateToData(cert: StoredCertificate): CertificateData {\n return {\n certificate: cert.certificate,\n privateKey: cert.privateKey,\n format: cert.format.toUpperCase() as 'PEM' | 'P12',\n };\n }\n\n /**\n * Construct full absolute URL for mTLS requests\n */\n private constructMTLSUrl(relativePath: string): string {\n // Get the configured mTLS base URL from the adapter\n const mtlsBaseUrl = this.mtlsAdapter?.getBaseUrl();\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] Constructing mTLS URL:', {\n relativePath,\n mtlsBaseUrl,\n source: mtlsBaseUrl ? 'adapter' : 'fallback',\n });\n }\n\n if (!mtlsBaseUrl) {\n // This should not happen in normal operation, but provide a fallback\n throw new MTLSError(\n MTLSErrorType.CONFIGURATION_ERROR,\n 'mTLS adapter base URL not configured'\n );\n }\n\n return this.combineUrlAndPath(mtlsBaseUrl, relativePath);\n }\n\n /**\n * Combine base URL with a relative path, handling slashes correctly\n */\n private combineUrlAndPath(baseUrl: string, relativePath: string): string {\n const cleanPath = relativePath.startsWith('/') ? relativePath.substring(1) : relativePath;\n\n const fullUrl = baseUrl.endsWith('/') ? `${baseUrl}${cleanPath}` : `${baseUrl}/${cleanPath}`;\n\n if (this.isDebugEnabled) {\n console.log('[MTLS-HANDLER] URL construction:', {\n baseUrl,\n relativePath,\n cleanPath,\n fullUrl,\n });\n }\n\n return fullUrl;\n }\n}\n","import { AxiosResponse } from 'axios';\n\nimport { ICacheAdapter, INetworkMonitor } from '../../../adapters';\n\n/**\n * Simplified cache request configuration\n * Cache behavior: Online = always fetch fresh data, Offline = always use cache\n */\nexport interface CacheConfig {\n /** Whether to use cache for this request (default: true if cache available) */\n useCache?: boolean;\n}\n\n/**\n * Simplified Cache Handler with binary online/offline strategy\n * - Online: Always fetch fresh data from network and update cache\n * - Offline: Always use cached data (no TTL/expiration check)\n */\nexport class CacheHandler {\n private isDebugEnabled: boolean = false;\n\n constructor(\n private cache?: ICacheAdapter,\n private networkMonitor?: INetworkMonitor,\n debugEnabled: boolean = false\n ) {\n this.isDebugEnabled = debugEnabled;\n }\n\n /**\n * Check if the device/application is online\n */\n isOnline(): boolean {\n // Priority 1: Use injected network monitor for accurate platform-specific detection\n if (this.networkMonitor) {\n try {\n return this.networkMonitor.isOnline();\n } catch (error) {\n if (this.isDebugEnabled) {\n console.warn('[CACHE-HANDLER] Network monitor failed:', error);\n }\n }\n }\n\n // Priority 2: Fallback to navigator.onLine for web environments\n if (typeof navigator !== 'undefined' && 'onLine' in navigator) {\n return navigator.onLine;\n }\n\n // Priority 3: Conservative default - assume offline if cannot determine\n return false;\n }\n\n /**\n * Handle cached GET request with simplified binary strategy\n * - Online: Fetch from network and update cache\n * - Offline: Return from cache (no expiration check)\n */\n async handleCachedRequest<T>(\n url: string,\n requestFn: () => Promise<AxiosResponse<T>>,\n config?: CacheConfig\n ): Promise<T> {\n if (!this.cache || config?.useCache === false) {\n // No cache available or caching disabled - make direct request\n const response = await requestFn();\n return response.data;\n }\n\n const cacheKey = this.generateCacheKey(url);\n const online = this.isOnline();\n\n if (this.isDebugEnabled) {\n console.log('[CACHE-HANDLER] Request details:', {\n url,\n cacheKey,\n online,\n cacheAvailable: !!this.cache,\n });\n }\n\n if (online) {\n // ONLINE: Always fetch from network and update cache\n try {\n const response = await requestFn();\n\n // Cache the result (no TTL - cache never expires)\n // Note: Cache failures should NEVER block the main operation\n if (this.cache) {\n await this.cache.set(cacheKey, response.data).catch((error) => {\n // Always log cache failures (not just in debug mode)\n console.error('[CACHE-HANDLER] Failed to cache response (non-blocking):', {\n url,\n error: error instanceof Error ? error.message : error,\n });\n if (this.isDebugEnabled) {\n console.error('[CACHE-HANDLER] Full error details:', error);\n }\n });\n\n if (this.isDebugEnabled) {\n console.log('[CACHE-HANDLER] Data fetched and cached:', { cacheKey });\n }\n }\n\n return response.data;\n } catch (error) {\n // Network failed while online - try cache as fallback\n const cached = await this.cache.get<T>(cacheKey).catch((cacheError) => {\n console.error('[CACHE-HANDLER] Failed to read cache during fallback (non-blocking):', {\n url,\n error: cacheError instanceof Error ? cacheError.message : cacheError,\n });\n return null;\n });\n if (cached) {\n if (this.isDebugEnabled) {\n console.log('[CACHE-HANDLER] Network failed, using cached data as fallback');\n }\n return cached.data;\n }\n throw error;\n }\n } else {\n // OFFLINE: Always use cache (no expiration check)\n const cached = await this.cache.get<T>(cacheKey).catch((cacheError) => {\n console.error('[CACHE-HANDLER] Failed to read cache while offline (non-blocking):', {\n url,\n error: cacheError instanceof Error ? cacheError.message : cacheError,\n });\n return null;\n });\n if (cached) {\n if (this.isDebugEnabled) {\n console.log('[CACHE-HANDLER] Offline mode, returning cached data');\n }\n return cached.data;\n }\n\n throw new Error('Offline: No cached data available for this request');\n }\n }\n\n /**\n * Generate a cache key from URL\n */\n private generateCacheKey(url: string): string {\n return url;\n }\n\n /**\n * Invalidate cache entries matching a pattern (kept for manual cache clearing if needed)\n * Note: Invalidation failures are non-blocking and only logged\n */\n async invalidateCache(pattern: string): Promise<void> {\n if (!this.cache) return;\n\n try {\n await this.cache.invalidate(pattern);\n if (this.isDebugEnabled) {\n console.log('[CACHE-HANDLER] Cache invalidated:', pattern);\n }\n } catch (error) {\n // Always log invalidation failures\n console.error('[CACHE-HANDLER] Cache invalidation failed (non-blocking):', {\n pattern,\n error: error instanceof Error ? error.message : error,\n });\n if (this.isDebugEnabled) {\n console.error('[CACHE-HANDLER] Full error details:', error);\n }\n }\n }\n\n /**\n * Get cache status\n */\n getCacheStatus() {\n return {\n available: !!this.cache,\n networkMonitorAvailable: !!this.networkMonitor,\n isOnline: this.isOnline(),\n };\n }\n}\n","import axios from 'axios';\n\nimport { ACubeSDKError } from '../../types';\n\n/**\n * Transform axios errors to SDK errors\n */\nexport function transformError(error: unknown): ACubeSDKError {\n if (axios.isAxiosError(error)) {\n const response = error.response;\n\n if (!response) {\n return new ACubeSDKError('NETWORK_ERROR', 'Network error occurred', error);\n }\n\n const status = response.status;\n const data = response.data;\n\n // Extract violations if present\n const violations = data?.violations;\n\n // Try to extract an error message from response\n let message = 'Unknown error occurred';\n if (data?.detail) {\n message = data.detail;\n } else if (data?.title) {\n message = data.title;\n } else if (error.message) {\n message = error.message;\n }\n\n switch (status) {\n case 400:\n return new ACubeSDKError('VALIDATION_ERROR', message, error, status, violations);\n case 401:\n return new ACubeSDKError('AUTH_ERROR', message, error, status, violations);\n case 403:\n return new ACubeSDKError('FORBIDDEN_ERROR', message, error, status, violations);\n case 404:\n return new ACubeSDKError('NOT_FOUND_ERROR', message, error, status, violations);\n case 422:\n return new ACubeSDKError('VALIDATION_ERROR', message, error, status, violations);\n default:\n return new ACubeSDKError('UNKNOWN_ERROR', message, error, status, violations);\n }\n }\n\n return new ACubeSDKError('UNKNOWN_ERROR', 'Unknown error occurred', error);\n}\n","import axios, { AxiosInstance } from 'axios';\n\nimport { ICacheAdapter, IMTLSAdapter, INetworkMonitor } from '../../adapters';\nimport { clearObject } from '../../utils';\nimport { CertificateManager } from '../certificates/certificate-manager';\nimport { ConfigManager } from '../config';\nimport { IUserProvider } from '../types';\nimport { MTLSHandler } from './auth/mtls-handler';\nimport { CacheHandler } from './cache/cache-handler';\nimport { HttpRequestConfig } from './types';\nimport { transformError } from './utils/error-transformer';\n\n/**\n * Simplified HTTP client with mTLS and caching support\n */\nexport class HttpClient {\n private client: AxiosInstance;\n private mtlsHandler: MTLSHandler;\n private cacheHandler: CacheHandler;\n private certificateManager: CertificateManager | null;\n private mtlsAdapter: IMTLSAdapter | null;\n private userProvider: IUserProvider | null;\n private _isDebugEnabled: boolean = false;\n\n constructor(\n private config: ConfigManager,\n certificateManager?: CertificateManager,\n cache?: ICacheAdapter,\n networkMonitor?: INetworkMonitor,\n mtlsAdapter?: IMTLSAdapter,\n userProvider?: IUserProvider\n ) {\n this.client = axios.create({\n baseURL: this.config.getApiUrl(),\n timeout: this.config.getTimeout(),\n headers: { 'Content-Type': 'application/json' },\n });\n this.certificateManager = certificateManager || null;\n this.mtlsAdapter = mtlsAdapter || null;\n this.userProvider = userProvider || null;\n this._isDebugEnabled = config.isDebugEnabled();\n\n // Initialize handlers\n this.mtlsHandler = new MTLSHandler(\n mtlsAdapter || null,\n certificateManager || null,\n this._isDebugEnabled,\n userProvider\n );\n\n this.cacheHandler = new CacheHandler(cache, networkMonitor, this._isDebugEnabled);\n\n // Log initialization state\n if (this._isDebugEnabled) {\n console.log('[HTTP-CLIENT] Initialized:', {\n hasCertificateManager: !!certificateManager,\n hasCache: !!cache,\n hasNetworkMonitor: !!networkMonitor,\n hasMTLSAdapter: !!mtlsAdapter,\n networkState: networkMonitor?.isOnline() || 'unknown',\n });\n }\n }\n\n private async createClient(\n usePort444: boolean = false,\n withAuth: boolean = false\n ): Promise<AxiosInstance> {\n let baseURL = this.config.getApiUrl();\n\n // Modify URL for :444 port if needed\n if (usePort444) {\n try {\n const urlObj = new URL(baseURL);\n if (urlObj.port !== '444') {\n urlObj.port = '444';\n baseURL = urlObj.toString();\n }\n } catch (error) {\n if (this._isDebugEnabled) {\n console.warn('[HTTP-CLIENT] Failed to modify URL for :444, using default:', error);\n }\n }\n }\n\n if (this._isDebugEnabled) {\n console.log('[HTTP-CLIENT] Creating axios client:', {\n baseURL,\n timeout: this.config.getTimeout(),\n usePort444,\n });\n }\n\n // Prepare headers\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n\n // Add Authorization header if requested\n if (withAuth && this.userProvider) {\n try {\n const token = await this.userProvider.getAccessToken();\n if (token) {\n headers['Authorization'] = `Bearer ${token}`;\n if (this._isDebugEnabled) {\n console.log('[HTTP-CLIENT] JWT token added to client headers');\n }\n }\n } catch (error) {\n if (this._isDebugEnabled) {\n console.error('[HTTP-CLIENT] Failed to get JWT token for client:', error);\n }\n }\n }\n\n const client = axios.create({\n baseURL,\n timeout: this.config.getTimeout(),\n headers,\n });\n\n // Add request/response interceptors for debugging\n if (this._isDebugEnabled) {\n client.interceptors.request.use(\n (config) => {\n console.log('[HTTP-CLIENT] Request:', {\n method: config.method?.toUpperCase(),\n url: config.url,\n baseURL: config.baseURL,\n hasData: !!config.data,\n });\n return config;\n },\n (error) => {\n console.error('[HTTP-CLIENT] Request Error:', error);\n return Promise.reject(error);\n }\n );\n\n client.interceptors.response.use(\n (response) => {\n console.log('[HTTP-CLIENT] Response:', {\n status: response.status,\n statusText: response.statusText,\n hasData: !!response.data,\n });\n return response;\n },\n (error) => {\n console.error('[HTTP-CLIENT] Response Error:', {\n status: error.response?.status,\n statusText: error.response?.statusText,\n data: error.response?.data,\n message: error.message,\n });\n return Promise.reject(error);\n }\n );\n }\n\n return client;\n }\n\n /**\n * Set authorization header\n */\n setAuthorizationHeader(token: string): void {\n this.client.defaults.headers.common['Authorization'] = `Bearer ${token}`;\n }\n\n /**\n * Remove authorization header\n */\n removeAuthorizationHeader(): void {\n delete this.client.defaults.headers.common['Authorization'];\n }\n\n /**\n * Extract mTLS-compatible config from HttpRequestConfig\n */\n private extractMTLSConfig(config?: HttpRequestConfig): {\n method?: string;\n data?: unknown;\n headers?: Record<string, string>;\n timeout?: number;\n responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';\n } {\n if (!config) return {};\n\n const mtlsConfig: {\n method?: string;\n data?: unknown;\n headers?: Record<string, string>;\n timeout?: number;\n responseType?: 'json' | 'blob' | 'arraybuffer' | 'text';\n } = {};\n\n if (config.method) mtlsConfig.method = config.method;\n if (config.data) mtlsConfig.data = config.data;\n if (config.headers) mtlsConfig.headers = config.headers as Record<string, string>;\n if (config.timeout) mtlsConfig.timeout = config.timeout;\n\n // Only pass supported responseType values\n if (\n config.responseType &&\n ['json', 'blob', 'arraybuffer', 'text'].includes(config.responseType)\n ) {\n mtlsConfig.responseType = config.responseType as 'json' | 'blob' | 'arraybuffer' | 'text';\n }\n\n console.log('[HTTP-CLIENT] Extracted mTLS config:', mtlsConfig);\n\n return mtlsConfig;\n }\n\n /**\n * Execute request with consistent error handling\n * Eliminates duplicate try-catch blocks across all HTTP methods\n */\n private async executeRequest<T>(requestFn: () => Promise<T>): Promise<T> {\n try {\n return await requestFn();\n } catch (error) {\n throw transformError(error);\n }\n }\n\n /**\n * Get current network status\n */\n getNetworkStatus(): { isOnline: boolean; hasMonitor: boolean } {\n return {\n isOnline: this.cacheHandler.isOnline(),\n hasMonitor: !!this.cacheHandler,\n };\n }\n\n /**\n * Check if currently online\n */\n isOnline(): boolean {\n return this.cacheHandler.isOnline();\n }\n\n /**\n * GET request with authentication and caching support\n */\n async get<T>(url: string, config?: HttpRequestConfig): Promise<T> {\n const authConfig = await this.mtlsHandler.determineAuthConfig(url, config?.authMode, 'GET');\n const client = await this.createClient(authConfig.usePort444, true);\n\n // Only try mTLS if explicitly required\n if (authConfig.mode === 'mtls') {\n try {\n return await this.executeRequest(() =>\n this.mtlsHandler.makeRequestMTLS<T>(\n url,\n { ...this.extractMTLSConfig(config), method: 'GET' },\n undefined,\n this.client.defaults.headers.common['Authorization'] as string\n )\n );\n } catch (error) {\n if (this._isDebugEnabled) {\n console.warn('[HTTP-CLIENT] mTLS GET failed:', error);\n }\n\n if (config?.noFallback) {\n throw error;\n }\n }\n }\n\n // Use JWT with appropriate client (possibly :444)\n if (this._isDebugEnabled) {\n console.log('[HTTP-CLIENT] Using JWT for GET:', {\n url,\n usePort444: authConfig.usePort444,\n authMode: authConfig.mode,\n });\n }\n\n return this.executeRequest(() =>\n this.cacheHandler.handleCachedRequest<T>(url, () => client.get(url, config), config)\n );\n }\n\n /**\n * POST request with authentication support\n */\n async post<T>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<T> {\n const authConfig = await this.mtlsHandler.determineAuthConfig(url, config?.authMode, 'POST');\n const cleanedData = data ? clearObject(data) : data;\n const client = await this.createClient(authConfig.usePort444, true);\n\n if (this._isDebugEnabled && data !== cleanedData) {\n console.log('[HTTP-CLIENT] POST data cleaned:', { original: data, cleaned: cleanedData });\n }\n\n // Only try mTLS if explicitly required\n if (authConfig.mode === 'mtls') {\n try {\n return await this.executeRequest(() =>\n this.mtlsHandler.makeRequestMTLS<T>(\n url,\n { ...this.extractMTLSConfig(config), method: 'POST', data: cleanedData },\n undefined,\n this.client.defaults.headers.common['Authorization'] as string\n )\n );\n } catch (error) {\n if (this._isDebugEnabled) {\n console.warn('[HTTP-CLIENT] mTLS POST failed:', error);\n }\n\n if (config?.noFallback) {\n throw error;\n }\n }\n }\n\n // Use JWT with appropriate client (possibly :444)\n if (this._isDebugEnabled) {\n console.log('[HTTP-CLIENT] Using JWT for POST:', {\n url,\n usePort444: authConfig.usePort444,\n authMode: authConfig.mode,\n });\n }\n\n return this.executeRequest(async () => {\n const response = await client.post(url, cleanedData, config);\n return response.data;\n });\n }\n\n /**\n * PUT request with authentication support\n */\n async put<T>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<T> {\n const authConfig = await this.mtlsHandler.determineAuthConfig(url, config?.authMode, 'PUT');\n const cleanedData = data && typeof data === 'object' ? clearObject(data) : data;\n const client = await this.createClient(authConfig.usePort444, true);\n\n if (this._isDebugEnabled && data !== cleanedData) {\n console.log('[HTTP-CLIENT] PUT data cleaned:', { original: data, cleaned: cleanedData });\n }\n\n // Only try mTLS if explicitly required\n if (authConfig.mode === 'mtls') {\n try {\n return await this.executeRequest(() =>\n this.mtlsHandler.makeRequestMTLS<T>(\n url,\n { ...this.extractMTLSConfig(config), method: 'PUT', data: cleanedData },\n undefined,\n this.client.defaults.headers.common['Authorization'] as string\n )\n );\n } catch (error) {\n if (this._isDebugEnabled) {\n console.warn('[HTTP-CLIENT] mTLS PUT failed:', error);\n }\n\n if (config?.noFallback) {\n throw error;\n }\n }\n }\n\n // Use JWT with appropriate client (possibly :444)\n if (this._isDebugEnabled) {\n console.log('[HTTP-CLIENT] Using JWT for PUT:', {\n url,\n usePort444: authConfig.usePort444,\n authMode: authConfig.mode,\n });\n }\n\n return this.executeRequest(async () => {\n const response = await client.put(url, cleanedData, config);\n return response.data;\n });\n }\n\n /**\n * DELETE request with authentication support\n */\n async delete<T>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<T> {\n const authConfig = await this.mtlsHandler.determineAuthConfig(url, config?.authMode, 'DELETE');\n const cleanedData = data && typeof data === 'object' ? clearObject(data) : data;\n const client = await this.createClient(authConfig.usePort444, true);\n\n if (this._isDebugEnabled && data !== cleanedData) {\n console.log('[HTTP-CLIENT] DELETE data cleaned:', { original: data, cleaned: cleanedData });\n }\n\n // Only try mTLS if explicitly required\n if (authConfig.mode === 'mtls') {\n try {\n return await this.executeRequest(() =>\n this.mtlsHandler.makeRequestMTLS<T>(\n url,\n { ...this.extractMTLSConfig(config), method: 'DELETE', data: cleanedData },\n undefined,\n this.client.defaults.headers.common['Authorization'] as string\n )\n );\n } catch (error) {\n if (this._isDebugEnabled) {\n console.warn('[HTTP-CLIENT] mTLS DELETE failed:', error);\n }\n\n if (config?.noFallback) {\n throw error;\n }\n }\n }\n\n // Use JWT with appropriate client (possibly :444)\n if (this._isDebugEnabled) {\n console.log('[HTTP-CLIENT] Using JWT for DELETE:', {\n url,\n usePort444: authConfig.usePort444,\n authMode: authConfig.mode,\n });\n }\n\n return this.executeRequest(async () => {\n const response = await client.delete(url, { ...config, data: cleanedData });\n return response.data;\n });\n }\n\n /**\n * PATCH request with authentication support\n */\n async patch<T>(url: string, data?: unknown, config?: HttpRequestConfig): Promise<T> {\n const authConfig = await this.mtlsHandler.determineAuthConfig(url, config?.authMode, 'PATCH');\n const client = await this.createClient(authConfig.usePort444, true);\n\n // Only try mTLS if explicitly required\n if (authConfig.mode === 'mtls') {\n try {\n return await this.executeRequest(() =>\n this.mtlsHandler.makeRequestMTLS<T>(\n url,\n { ...this.extractMTLSConfig(config), method: 'PATCH', data },\n undefined,\n this.client.defaults.headers.common['Authorization'] as string\n )\n );\n } catch (error) {\n if (this._isDebugEnabled) {\n console.warn('[HTTP-CLIENT] mTLS PATCH failed:', error);\n }\n\n if (config?.noFallback) {\n throw error;\n }\n }\n }\n\n // Use JWT with appropriate client (possibly :444)\n if (this._isDebugEnabled) {\n console.log('[HTTP-CLIENT] Using JWT for PATCH:', {\n url,\n usePort444: authConfig.usePort444,\n authMode: authConfig.mode,\n });\n }\n\n return this.executeRequest(async () => {\n const cleanedData = data && typeof data === 'object' ? clearObject(data) : data;\n\n if (this._isDebugEnabled && data !== cleanedData) {\n console.log('[HTTP-CLIENT] PATCH data cleaned:', { original: data, cleaned: cleanedData });\n }\n\n const response = await client.patch(url, cleanedData, config);\n return response.data;\n });\n }\n\n /**\n * Get mTLS status and certificate information\n */\n async getMTLSStatus() {\n return this.mtlsHandler.getStatus();\n }\n\n /**\n * Store certificate with coordination between certificate manager and mTLS adapter\n * This ensures old certificates are properly cleared from both SDK storage and native keychain\n */\n async storeCertificate(\n certificate: string,\n privateKey: string,\n options: { format?: 'pem' | 'p12' | 'pkcs12' } = {}\n ): Promise<void> {\n return this.mtlsHandler.storeCertificate(certificate, privateKey, options);\n }\n\n /**\n * Clear certificate from both certificate manager and native keychain\n */\n async clearCertificate(): Promise<void> {\n return this.mtlsHandler.clearCertificate();\n }\n\n /**\n * Test mTLS connection\n */\n async testMTLSConnection(): Promise<boolean> {\n return this.mtlsHandler.testConnection();\n }\n\n /**\n * Check if mTLS is ready for requests\n */\n async isMTLSReady(): Promise<boolean> {\n return this.mtlsHandler.isMTLSReady();\n }\n\n /**\n * Get the mTLS adapter instance (for backward compatibility)\n */\n getMTLSAdapter() {\n return this.mtlsAdapter;\n }\n\n /**\n * Get a certificate manager instance\n */\n getCertificateManager(): CertificateManager | null {\n return this.certificateManager;\n }\n\n /**\n * Get the underlying axios instance for advanced use cases\n */\n getAxiosInstance(): AxiosInstance {\n return this.client;\n }\n\n /**\n * Invalidate cache entries\n */\n async invalidateCache(pattern: string): Promise<void> {\n return this.cacheHandler.invalidateCache(pattern);\n }\n\n get isDebugEnabled(): boolean {\n return this._isDebugEnabled;\n }\n}\n","import { HttpClient } from '../http';\nimport {\n CashRegisterBasicOutput,\n CashRegisterCreate,\n CashRegisterDetailedOutput,\n CashRegisterListParams,\n Page,\n} from './types';\n\n/**\n * Cash Registers API manager\n */\nexport class CashRegistersAPI {\n private debugEnabled: boolean = false;\n\n constructor(private httpClient: HttpClient) {\n this.debugEnabled = httpClient.isDebugEnabled || false;\n\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Cash Registers API initialized');\n }\n }\n\n /**\n * Create a new cash register\n */\n async create(cashRegisterData: CashRegisterCreate): Promise<CashRegisterDetailedOutput> {\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Creating cash register:', {\n name: cashRegisterData.name,\n pemId: (cashRegisterData as { pem_id?: string }).pem_id,\n });\n }\n\n try {\n // Create a cash register using standard JWT authentication\n const cashRegister = await this.httpClient.post<CashRegisterDetailedOutput>(\n '/mf1/cash-registers',\n cashRegisterData,\n { authMode: 'jwt' } // Use JWT for creation\n );\n\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Cash register created successfully:', {\n id: cashRegister.uuid,\n name: cashRegister.name,\n hasCertificate: !!cashRegister.mtls_certificate,\n hasPrivateKey: !!cashRegister.private_key,\n });\n }\n\n return cashRegister;\n } catch (error) {\n if (this.debugEnabled) {\n console.error('[CASH-REGISTERS-API] Cash register creation failed:', error);\n }\n throw error;\n }\n }\n\n /**\n * Get all cash registers for the current merchant\n */\n async list(params: CashRegisterListParams): Promise<Page<CashRegisterBasicOutput>> {\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Listing cash registers:', params);\n }\n\n // Use JWT for listing (standard operation)\n const searchParams = new URLSearchParams();\n\n if (params.page) {\n searchParams.append('page', params.page.toString());\n }\n if (params.size) {\n searchParams.append('size', params.size.toString());\n }\n\n if (params.serial_number) {\n searchParams.append('serial_number', params.serial_number);\n }\n\n const query = searchParams.toString();\n let url = `/mf1/cash-registers`;\n\n if (query) {\n url += `?${query}`;\n }\n\n return this.httpClient.get<Page<CashRegisterBasicOutput>>(url, { authMode: 'jwt' });\n }\n\n /**\n * Get a cash register by ID\n */\n async get(id: string): Promise<CashRegisterBasicOutput> {\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Getting cash register:', { id });\n }\n\n try {\n // Get cash register using JWT\n const cashRegister = await this.httpClient.get<CashRegisterBasicOutput>(\n `/mf1/cash-registers/${id}`,\n { authMode: 'jwt' }\n );\n\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Cash register retrieved:', {\n id: cashRegister.uuid,\n name: cashRegister.name,\n });\n }\n\n return cashRegister;\n } catch (error) {\n if (this.debugEnabled) {\n console.error('[CASH-REGISTERS-API] Failed to get cash register:', error);\n }\n throw error;\n }\n }\n\n /**\n * Get detailed cash register information\n */\n async getDetailed(id: string): Promise<CashRegisterDetailedOutput> {\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Getting detailed cash register:', id);\n }\n\n try {\n // Get detailed cash register data using JWT\n const cashRegister = await this.httpClient.get<CashRegisterDetailedOutput>(\n `/mf1/cash-registers/${id}/detailed`,\n { authMode: 'jwt' }\n );\n\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Detailed cash register retrieved:', {\n id: cashRegister.uuid,\n name: cashRegister.name,\n hasCertificate: !!cashRegister.mtls_certificate,\n hasPrivateKey: !!cashRegister.private_key,\n });\n }\n\n return cashRegister;\n } catch (error) {\n if (this.debugEnabled) {\n console.error('[CASH-REGISTERS-API] Failed to get detailed cash register:', error);\n }\n throw error;\n }\n }\n\n /**\n * Get certificate status for a cash register\n */\n async getCertificateStatus(cashRegisterId: string): Promise<{\n hasCertificate: boolean;\n isConfigured: boolean;\n canConnect: boolean;\n certificateInfo?: {\n configuredAt: Date;\n source: string;\n };\n }> {\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Getting certificate status for:', cashRegisterId);\n }\n\n const certificateManager = this.httpClient.getCertificateManager();\n if (!certificateManager) {\n return {\n hasCertificate: false,\n isConfigured: false,\n canConnect: false,\n };\n }\n\n try {\n const hasCertificate = await certificateManager.hasCertificate();\n let canConnect = false;\n\n if (hasCertificate) {\n // Test connection if the certificate is configured\n try {\n canConnect = await this.httpClient.testMTLSConnection();\n } catch (error) {\n if (this.debugEnabled) {\n console.warn('[CASH-REGISTERS-API] Connection test failed:', error);\n }\n }\n }\n\n const status = {\n hasCertificate,\n isConfigured: hasCertificate,\n canConnect,\n certificateInfo: hasCertificate\n ? {\n configuredAt: new Date(), // Since we don't have specific metadata anymore\n source: 'device',\n }\n : undefined,\n };\n\n if (this.debugEnabled) {\n console.log('[CASH-REGISTERS-API] Certificate status:', status);\n }\n\n return status;\n } catch (error) {\n if (this.debugEnabled) {\n console.error('[CASH-REGISTERS-API] Certificate status check failed:', error);\n }\n return {\n hasCertificate: false,\n isConfigured: false,\n canConnect: false,\n };\n }\n }\n}\n","import { HttpClient } from './http-client';\nimport { CashierCreateInput, CashierListParams, CashierOutput, Page } from './types';\n\n/**\n * Cashiers API manager\n */\nexport class CashiersAPI {\n constructor(private httpClient: HttpClient) {}\n\n /**\n * Read cashiers with pagination\n */\n async list(params: CashierListParams = {}): Promise<Page<CashierOutput>> {\n const searchParams = new URLSearchParams();\n\n if (params.page) {\n searchParams.append('page', params.page.toString());\n }\n if (params.size) {\n searchParams.append('size', params.size.toString());\n }\n\n const query = searchParams.toString();\n const url = query ? `/mf1/cashiers?${query}` : '/mf1/cashiers';\n\n return this.httpClient.get<Page<CashierOutput>>(url);\n }\n\n /**\n * Create a new cashier\n */\n async create(cashierData: CashierCreateInput): Promise<CashierOutput> {\n return this.httpClient.post<CashierOutput>('/mf1/cashiers', cashierData);\n }\n\n /**\n * Read currently authenticated cashier's information\n */\n async me(): Promise<CashierOutput> {\n return this.httpClient.get<CashierOutput>('/mf1/cashiers/me');\n }\n\n /**\n * Get a specific cashier by ID\n */\n async get(cashierId: string): Promise<CashierOutput> {\n return this.httpClient.get<CashierOutput>(`/mf1/cashiers/${cashierId}`);\n }\n\n /**\n * Delete a cashier\n */\n async delete(cashierId: string): Promise<void> {\n await this.httpClient.delete(`/mf1/cashiers/${cashierId}`);\n }\n}\n","import { HttpClient } from './http-client';\nimport { DailyReportOutput, DailyReportsParams } from './types';\n\n/**\n * Daily Reports API manager (MF2)\n */\nexport class DailyReportsAPI {\n constructor(private httpClient: HttpClient) {}\n\n /**\n * Retrieve the collection of Daily Report resources\n */\n async list(params: DailyReportsParams = {}): Promise<DailyReportOutput[]> {\n const searchParams = new URLSearchParams();\n\n if (params.pem_serial_number) {\n searchParams.append('pem_serial_number', params.pem_serial_number);\n }\n if (params.date_from) {\n searchParams.append('date_from', params.date_from);\n }\n if (params.date_to) {\n searchParams.append('date_to', params.date_to);\n }\n if (params.status) {\n searchParams.append('status', params.status);\n }\n if (params.page) {\n searchParams.append('page', params.page.toString());\n }\n\n const query = searchParams.toString();\n const url = query ? `/mf2/daily-reports?${query}` : '/mf2/daily-reports';\n\n return this.httpClient.get<DailyReportOutput[]>(url);\n }\n\n /**\n * Retrieve a Daily Report resource by UUID\n */\n async get(uuid: string): Promise<DailyReportOutput> {\n return this.httpClient.get<DailyReportOutput>(`/mf2/daily-reports/${uuid}`);\n }\n\n /**\n * Regenerate/resend a daily report\n */\n async regenerate(uuid: string): Promise<DailyReportOutput> {\n return this.httpClient.post<DailyReportOutput>(`/mf2/daily-reports/${uuid}/regenerate`);\n }\n}\n","import { HttpClient } from './http-client';\nimport { JournalOutput, JournalsParams } from './types';\n\n/**\n * Journals API manager (MF2)\n */\nexport class JournalsAPI {\n constructor(private httpClient: HttpClient) {}\n\n /**\n * Retrieve the collection of Journal resources\n */\n async list(params: JournalsParams = {}): Promise<JournalOutput[]> {\n const searchParams = new URLSearchParams();\n\n if (params.pem_serial_number) {\n searchParams.append('pem_serial_number', params.pem_serial_number);\n }\n if (params.status) {\n searchParams.append('status', params.status);\n }\n if (params.date_from) {\n searchParams.append('date_from', params.date_from);\n }\n if (params.date_to) {\n searchParams.append('date_to', params.date_to);\n }\n if (params.page) {\n searchParams.append('page', params.page.toString());\n }\n\n const query = searchParams.toString();\n const url = query ? `/mf2/journals?${query}` : '/mf2/journals';\n\n return this.httpClient.get<JournalOutput[]>(url);\n }\n\n /**\n * Retrieve a Journal resource by UUID\n */\n async get(uuid: string): Promise<JournalOutput> {\n return this.httpClient.get<JournalOutput>(`/mf2/journals/${uuid}`);\n }\n}\n","import { HttpClient } from './http-client';\nimport {\n LdJsonPage,\n MerchantCreateInput,\n MerchantOutput,\n MerchantUpdateInput,\n MerchantsParams,\n PointOfSaleOutputMf2,\n} from './types';\n\n/**\n * Merchants API manager (MF2)\n */\nexport class MerchantsAPI {\n constructor(private httpClient: HttpClient) {}\n\n /**\n * Retrieve the collection of Merchant resources\n */\n async list(params: MerchantsParams): Promise<MerchantOutput[]> {\n const searchParams = new URLSearchParams();\n\n if (params.page) {\n searchParams.append('page', params.page.toString());\n }\n\n const query = searchParams.toString();\n const url = query ? `/mf2/merchants?${query}` : '/mf2/merchants';\n\n return this.httpClient.get<MerchantOutput[]>(url);\n }\n\n /**\n * Create a Merchant resource\n */\n async create(merchantData: MerchantCreateInput): Promise<MerchantOutput> {\n return this.httpClient.post<MerchantOutput>('/mf2/merchants', merchantData);\n }\n\n /**\n * Retrieve a Merchant resource by UUID\n */\n async get(uuid: string): Promise<MerchantOutput> {\n return this.httpClient.get<MerchantOutput>(`/mf2/merchants/${uuid}`);\n }\n\n /**\n * Replace the Merchant resource\n */\n async update(uuid: string, merchantData: MerchantUpdateInput): Promise<MerchantOutput> {\n return this.httpClient.put<MerchantOutput>(`/mf2/merchants/${uuid}`, merchantData);\n }\n\n /**\n * Retrieve Point of Sale resources for a specific merchant by Supplier logged\n */\n async listPointOfSalesBySuppliers(\n merchantUuid: string,\n params?: {\n page?: number;\n }\n ): Promise<LdJsonPage<PointOfSaleOutputMf2>> {\n const searchParams = new URLSearchParams();\n\n if (params?.page) {\n searchParams.append('page', params.page.toString());\n }\n\n const query = searchParams.toString();\n const url = query\n ? `/mf2/merchants/${merchantUuid}/point-of-sales?${query}`\n : `/mf2/merchants/${merchantUuid}/point-of-sales`;\n\n return this.httpClient.get<LdJsonPage<PointOfSaleOutputMf2>>(url, {\n headers: { Accept: 'application/ld+json' },\n });\n }\n\n /**\n * Retrieve Point of Sale resources for a specific merchant by Merchant logged\n */\n async listPointOfSalesByMerchants(params?: {\n page?: number;\n }): Promise<LdJsonPage<PointOfSaleOutputMf2>> {\n const searchParams = new URLSearchParams();\n\n if (params?.page) {\n searchParams.append('page', params.page.toString());\n }\n\n const query = searchParams.toString();\n const url = query ? `/mf1/point-of-sales?${query}` : `/mf1/point-of-sales`;\n\n return this.httpClient.get<LdJsonPage<PointOfSaleOutputMf2>>(url, {\n headers: { Accept: 'application/ld+json' },\n });\n }\n}\n","import { HttpClient } from './http-client';\nimport {\n PemCertificatesOutput,\n PemCreateInput,\n PemCreateOutput,\n PointOfSaleDetailedOutput,\n} from './types';\n\n/**\n * PEMs API manager (MF2)\n */\nexport class PemsAPI {\n constructor(private httpClient: HttpClient) {}\n\n /**\n * Create a new PEM\n */\n async create(pemData: PemCreateInput): Promise<PemCreateOutput> {\n return this.httpClient.post<PemCreateOutput>('/mf2/point-of-sales', pemData);\n }\n\n /**\n * Get a specific PEM by serial number\n */\n async get(serialNumber: string): Promise<PointOfSaleDetailedOutput> {\n return this.httpClient.get<PointOfSaleDetailedOutput>(`/mf2/point-of-sales/${serialNumber}`);\n }\n\n /**\n * Get mTLS and signing certificates for a PEM\n */\n async getCertificates(serialNumber: string): Promise<PemCertificatesOutput> {\n return this.httpClient.get<PemCertificatesOutput>(\n `/mf2/point-of-sales/${serialNumber}/certificates`\n );\n }\n}\n","import { HttpClient } from './http-client';\nimport {\n ActivationRequest,\n PEMStatusOfflineRequest,\n Page,\n PointOfSaleDetailedOutput,\n PointOfSaleListParams,\n PointOfSaleOutput,\n PointOfSaleOutputMf2,\n PointOfSaleUpdateInput,\n} from './types';\n\n/**\n * Point of Sales API manager\n */\nexport class PointOfSalesAPI {\n constructor(private httpClient: HttpClient) {}\n\n /**\n * Retrieve Point of Sales (PEMs)\n */\n async list(params: PointOfSaleListParams = {}): Promise<Page<PointOfSaleOutput>> {\n const searchParams = new URLSearchParams();\n\n if (params.status) {\n searchParams.append('status', params.status);\n }\n if (params.page) {\n searchParams.append('page', params.page.toString());\n }\n if (params.size) {\n searchParams.append('size', params.size.toString());\n }\n\n const query = searchParams.toString();\n const url = query ? `/mf1/point-of-sales?${query}` : '/mf1/point-of-sales';\n\n return this.httpClient.get<Page<PointOfSaleOutput>>(url);\n }\n\n /**\n * Get a specific Point of Sale by serial number\n */\n async get(serialNumber: string): Promise<PointOfSaleDetailedOutput> {\n return this.httpClient.get<PointOfSaleDetailedOutput>(`/mf1/point-of-sales/${serialNumber}`);\n }\n\n /**\n * Update a Point of Sale\n */\n async update(\n serialNumber: string,\n updateData: PointOfSaleUpdateInput\n ): Promise<PointOfSaleDetailedOutput> {\n return this.httpClient.put<PointOfSaleDetailedOutput>(\n `/mf1/point-of-sales/${serialNumber}`,\n updateData\n );\n }\n\n /**\n * Close a journal\n */\n async close(serial_number: string) {\n this.httpClient.post(`/mf1/point-of-sales/${serial_number}/close`);\n }\n\n /**\n * Trigger the activation process of a Point of Sale\n */\n async activate(serialNumber: string, activationData: ActivationRequest): Promise<void> {\n return this.httpClient.post(`/mf1/point-of-sales/${serialNumber}/activation`, activationData);\n }\n\n /**\n * Create a new inactivity period\n */\n async createInactivityPeriod(serialNumber: string): Promise<void> {\n return this.httpClient.post(`/mf1/point-of-sales/${serialNumber}/inactivity`);\n }\n\n /**\n * Change the state of the Point of Sale to 'offline'\n */\n async setOffline(serialNumber: string, offlineData: PEMStatusOfflineRequest): Promise<void> {\n return this.httpClient.post(`/mf1/point-of-sales/${serialNumber}/status/offline`, offlineData);\n }\n\n /**\n * Retrieve a POS resource by UUID\n */\n async getMf2Pos(serialNumber: string): Promise<PointOfSaleOutputMf2> {\n return this.httpClient.get<PointOfSaleOutputMf2>(`/mf2/point-of-sales/${serialNumber}`);\n }\n}\n","import { CacheRequestConfig, HttpClient } from './http-client';\nimport {\n Page,\n RECEIPT_SENT,\n ReceiptDetailsOutput,\n ReceiptInput,\n ReceiptListParams,\n ReceiptOutput,\n ReceiptReturnInput,\n ReceiptReturnOrVoidViaPEMInput,\n ReceiptReturnOrVoidWithProofInput,\n ReturnableReceiptItem,\n VoidReceiptInput,\n} from './types';\n\n/**\n * User role information for authentication routing\n */\nexport interface UserContext {\n roles: string[];\n userId?: string;\n merchantId?: string;\n}\n\n/**\n * Receipts API manager with mTLS and role-based authentication\n */\nexport class ReceiptsAPI {\n private debugEnabled: boolean = false;\n private userContext: UserContext | null = null;\n\n constructor(private httpClient: HttpClient) {\n this.debugEnabled = httpClient.isDebugEnabled || true;\n\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Receipts API initialized with mTLS support');\n }\n }\n\n /**\n * Set user context for role-based authentication\n */\n setUserContext(context: UserContext): void {\n this.userContext = context;\n\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] User context set:', {\n roles: context.roles,\n userId: context.userId,\n merchantId: context.merchantId,\n });\n }\n }\n\n /**\n * Create request configuration\n * Let MTLSHandler determine the best authentication mode based on role/platform/method\n */\n private createRequestConfig(config?: Partial<CacheRequestConfig>): CacheRequestConfig {\n return {\n authMode: 'auto', // Let MTLSHandler decide based on authentication matrix\n ...config,\n };\n }\n\n /**\n * Create a new electronic receipt\n * Authentication mode determined by MTLSHandler based on role/platform\n */\n async create(receiptData: ReceiptInput): Promise<ReceiptOutput> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Creating receipt');\n }\n\n const config = this.createRequestConfig();\n return this.httpClient.post<ReceiptOutput>('/mf1/receipts', receiptData, config);\n }\n\n /**\n * Get a list of electronic receipts\n * Authentication mode determined by MTLSHandler (typically JWT for GET operations)\n */\n async list(params: ReceiptListParams): Promise<Page<ReceiptOutput>> {\n const searchParams = new URLSearchParams();\n\n searchParams.append('page', params.page?.toString() || '1');\n searchParams.append('size', params.size?.toString() || '30');\n searchParams.append('status', params.status?.toString() || RECEIPT_SENT);\n searchParams.append('document_number', params.document_number?.toString() || '');\n\n if (params.sort !== undefined && params.sort !== null) {\n searchParams.append('sort', params.sort);\n }\n\n if (params['document_datetime[before]'] !== undefined) {\n searchParams.append('document_datetime[before]', params['document_datetime[before]']);\n }\n if (\n params['document_datetime[after]'] !== undefined &&\n params['document_datetime[after]'] !== null\n ) {\n searchParams.append('document_datetime[after]', params['document_datetime[after]']);\n }\n\n const query = searchParams.toString();\n const url = `/mf1/point-of-sales/${params.serial_number}/receipts${query ? `?${query}` : ''}`;\n\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Listing receipts for POS:', params.serial_number);\n }\n\n const config = this.createRequestConfig();\n return this.httpClient.get<Page<ReceiptOutput>>(url, config);\n }\n\n /**\n * Get an electronic receipt by UUID\n * Authentication mode determined by MTLSHandler based on role/platform\n */\n async get(receiptUuid: string): Promise<ReceiptOutput> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Getting receipt by UUID:', receiptUuid);\n }\n\n const config = this.createRequestConfig();\n return this.httpClient.get<ReceiptOutput>(`/mf1/receipts/${receiptUuid}`, config);\n }\n\n /**\n * Get receipt details (JSON or PDF)\n * Authentication mode determined by MTLSHandler\n * ✅ PDF downloads now use mTLS with binary response support (expo-mutual-tls v1.0.3+)\n */\n async getDetails(\n receiptUuid: string,\n format: 'json' | 'pdf' = 'json'\n ): Promise<ReceiptDetailsOutput | string> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Getting receipt details:', {\n receiptUuid,\n format,\n });\n }\n\n const headers: Record<string, string> = {};\n\n if (format === 'pdf') {\n headers['Accept'] = 'application/pdf';\n const config = this.createRequestConfig({\n headers,\n authMode: 'mtls', // Force mTLS for PDF downloads\n responseType: 'blob',\n });\n\n if (this.debugEnabled) {\n console.log(\n '[RECEIPTS-API] Downloading PDF receipt (mTLS on mobile, JWT+:444 on web)',\n config\n );\n }\n\n return this.httpClient.get<string>(`/mf1/receipts/${receiptUuid}/details`, config);\n } else {\n headers['Accept'] = 'application/json';\n const config = this.createRequestConfig({\n headers,\n responseType: 'json',\n authMode: 'mtls', // Force mTLS for JSON responses\n });\n\n return this.httpClient.get<ReceiptDetailsOutput>(\n `/mf1/receipts/${receiptUuid}/details`,\n config\n );\n }\n }\n\n /**\n * Void an electronic receipt via same pos\n */\n async voidViaSamePos(voidData: VoidReceiptInput): Promise<void> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Voiding receipt via same pos');\n }\n\n const config = this.createRequestConfig();\n\n await this.httpClient.delete('/mf1/receipts', voidData, config);\n }\n\n /**\n * Void an electronic receipt via different pos\n */\n async voidViaDifferentPos(voidData: ReceiptReturnOrVoidViaPEMInput): Promise<void> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Voiding receipt via different pos');\n }\n\n const config = this.createRequestConfig();\n 1;\n await this.httpClient.delete('/mf1/receipts/void-via-different-pos', voidData, config);\n }\n\n /**\n * Void an electronic receipt identified by proof of purchase\n */\n async voidWithProof(voidData: ReceiptReturnOrVoidWithProofInput): Promise<void> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Voiding receipt with proof');\n }\n\n const config = this.createRequestConfig();\n\n await this.httpClient.delete('/mf1/receipts/void-with-proof', voidData, config);\n }\n\n /**\n * Return an electronic receipt via same pos\n */\n async return(returnData: ReceiptReturnInput): Promise<ReceiptOutput> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Processing return via same pos');\n }\n\n const config = this.createRequestConfig();\n return this.httpClient.post<ReceiptOutput>('/mf1/receipts/return', returnData, config);\n }\n\n /**\n * get returnable items for a receipt\n */\n async getReturnableItems(receiptUuid: string): Promise<ReturnableReceiptItem[]> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Getting returnable items for receipt UUID:', receiptUuid);\n }\n\n const config = this.createRequestConfig();\n return this.httpClient.get<ReturnableReceiptItem[]>(\n `/mf1/receipts/${receiptUuid}/returnable-items`,\n config\n );\n }\n\n /**\n * Return items from an electronic receipt via different pos\n */\n async returnViaDifferentPos(returnData: ReceiptReturnOrVoidViaPEMInput): Promise<ReceiptOutput> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Processing return via different pos');\n }\n\n const config = this.createRequestConfig();\n return this.httpClient.post<ReceiptOutput>(\n '/mf1/receipts/return-via-different-pos',\n returnData,\n config\n );\n }\n\n /**\n * Return items from an electronic receipt identified by proof of purchase\n * Authentication mode determined by MTLSHandler\n */\n async returnWithProof(returnData: ReceiptReturnOrVoidWithProofInput): Promise<ReceiptOutput> {\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Processing return with proof');\n }\n\n const config = this.createRequestConfig();\n return this.httpClient.post<ReceiptOutput>(\n '/mf1/receipts/return-with-proof',\n returnData,\n config\n );\n }\n\n /**\n * Get current authentication status\n */\n async getAuthenticationStatus(): Promise<{\n mtlsAvailable: boolean;\n mtlsReady: boolean;\n userContext: UserContext | null;\n recommendedAuthMode: 'auto';\n }> {\n const mtlsStatus = await this.httpClient.getMTLSStatus();\n\n const status = {\n mtlsAvailable: mtlsStatus.adapterAvailable,\n mtlsReady: mtlsStatus.isReady,\n userContext: this.userContext,\n recommendedAuthMode: 'auto' as const, // Let MTLSHandler decide based on role/platform/method\n };\n\n if (this.debugEnabled) {\n console.log('[RECEIPTS-API] Authentication status:', status);\n }\n\n return status;\n }\n}\n","import { HttpClient } from './http-client';\nimport { SupplierCreateInput, SupplierOutput, SupplierUpdateInput, SuppliersParams } from './types';\n\n/**\n * Suppliers API manager (MF2)\n */\nexport class SuppliersAPI {\n constructor(private httpClient: HttpClient) {}\n\n /**\n * Retrieve the collection of Supplier resources\n */\n async list(params: SuppliersParams): Promise<SupplierOutput[]> {\n const searchParams = new URLSearchParams();\n\n if (params.page) {\n searchParams.append('page', params.page.toString());\n }\n\n const query = searchParams.toString();\n const url = query ? `/mf2/suppliers?${query}` : '/mf2/suppliers';\n\n return this.httpClient.get<SupplierOutput[]>(url);\n }\n\n /**\n * Create a Supplier resource\n */\n async create(supplierData: SupplierCreateInput): Promise<SupplierOutput> {\n return this.httpClient.post<SupplierOutput>('/mf2/suppliers', supplierData);\n }\n\n /**\n * Retrieve a Supplier resource by UUID\n */\n async get(uuid: string): Promise<SupplierOutput> {\n return this.httpClient.get<SupplierOutput>(`/mf2/suppliers/${uuid}`);\n }\n\n /**\n * Replace the Supplier resource\n */\n async update(uuid: string, supplierData: SupplierUpdateInput): Promise<SupplierOutput> {\n return this.httpClient.put<SupplierOutput>(`/mf2/suppliers/${uuid}`, supplierData);\n }\n\n /**\n * Delete a Supplier resource\n */\n async delete(uuid: string): Promise<void> {\n return this.httpClient.delete(`/mf2/suppliers/${uuid}`);\n }\n}\n","import { ICacheAdapter, IMTLSAdapter, INetworkMonitor } from '../../adapters';\nimport { CertificateManager } from '../certificates/certificate-manager';\nimport { ConfigManager } from '../config';\nimport { IUserProvider } from '../types';\nimport { CashRegistersAPI } from './cash-registers';\nimport { CashiersAPI } from './cashiers';\nimport { DailyReportsAPI } from './daily-reports';\nimport { HttpClient } from './http-client';\nimport { JournalsAPI } from './journals';\nimport { MerchantsAPI } from './merchants';\nimport { PemsAPI } from './pems';\nimport { PointOfSalesAPI } from './point-of-sales';\nimport { ReceiptsAPI } from './receipts';\nimport { SuppliersAPI } from './suppliers';\n\n/**\n * Main API client that combines all resource managers\n */\nexport class APIClient {\n private httpClient: HttpClient;\n private cache?: ICacheAdapter;\n private networkMonitor?: INetworkMonitor;\n\n // Resource managers\n public readonly receipts: ReceiptsAPI;\n public readonly cashiers: CashiersAPI;\n public readonly pointOfSales: PointOfSalesAPI;\n public readonly cashRegisters: CashRegistersAPI;\n public readonly merchants: MerchantsAPI;\n public readonly pems: PemsAPI;\n public readonly suppliers: SuppliersAPI;\n public readonly dailyReports: DailyReportsAPI;\n public readonly journals: JournalsAPI;\n\n constructor(\n config: ConfigManager,\n certificateManager?: CertificateManager,\n cache?: ICacheAdapter,\n networkMonitor?: INetworkMonitor,\n mtlsAdapter?: IMTLSAdapter,\n userProvider?: IUserProvider\n ) {\n this.cache = cache;\n this.networkMonitor = networkMonitor;\n this.httpClient = new HttpClient(\n config,\n certificateManager,\n cache,\n networkMonitor,\n mtlsAdapter,\n userProvider\n );\n\n // Initialize resource managers\n this.receipts = new ReceiptsAPI(this.httpClient);\n this.cashiers = new CashiersAPI(this.httpClient);\n this.pointOfSales = new PointOfSalesAPI(this.httpClient);\n this.cashRegisters = new CashRegistersAPI(this.httpClient);\n this.merchants = new MerchantsAPI(this.httpClient);\n this.pems = new PemsAPI(this.httpClient);\n this.suppliers = new SuppliersAPI(this.httpClient);\n this.dailyReports = new DailyReportsAPI(this.httpClient);\n this.journals = new JournalsAPI(this.httpClient);\n }\n\n /**\n * Set an authorization header for all requests\n */\n setAuthorizationHeader(token: string): void {\n this.httpClient.setAuthorizationHeader(token);\n }\n\n /**\n * Remove authorization header\n */\n removeAuthorizationHeader(): void {\n this.httpClient.removeAuthorizationHeader();\n }\n\n /**\n * Get the underlying HTTP client for advanced use cases\n */\n getHttpClient(): HttpClient {\n return this.httpClient;\n }\n\n /**\n * Get the cache adapter if available\n */\n getCache(): ICacheAdapter | undefined {\n return this.cache;\n }\n\n /**\n * Check if the cache is available and enabled\n */\n isCacheEnabled(): boolean {\n return !!this.cache;\n }\n\n /**\n * Get the network monitor if available\n */\n getNetworkMonitor(): INetworkMonitor | undefined {\n return this.networkMonitor;\n }\n\n /**\n * Check if network monitoring is enabled\n */\n isNetworkMonitorEnabled(): boolean {\n return !!this.networkMonitor;\n }\n\n /**\n * Get current network status\n */\n getNetworkStatus(): { isOnline: boolean; hasMonitor: boolean } {\n return this.httpClient.getNetworkStatus();\n }\n\n /**\n * Check if currently online\n */\n isOnline(): boolean {\n return this.getNetworkStatus().isOnline;\n }\n\n /**\n * Get mTLS adapter if available through HttpClient\n */\n getMTLSAdapter(): IMTLSAdapter | null {\n return this.httpClient.getMTLSAdapter();\n }\n\n /**\n * Check if mTLS is ready\n */\n async isMTLSReady(): Promise<boolean> {\n return this.httpClient.isMTLSReady();\n }\n}\n","/**\n * Certificate-specific error types\n */\nexport enum CertificateErrorType {\n CERTIFICATE_NOT_FOUND = 'CERTIFICATE_NOT_FOUND',\n CERTIFICATE_MANAGER_NOT_AVAILABLE = 'CERTIFICATE_MANAGER_NOT_AVAILABLE',\n CERTIFICATE_EXPIRED = 'CERTIFICATE_EXPIRED',\n CERTIFICATE_INVALID = 'CERTIFICATE_INVALID',\n CERTIFICATE_STORAGE_ERROR = 'CERTIFICATE_STORAGE_ERROR',\n CERTIFICATE_VALIDATION_ERROR = 'CERTIFICATE_VALIDATION_ERROR',\n MTLS_REQUIRED = 'MTLS_REQUIRED',\n MTLS_NOT_SUPPORTED = 'MTLS_NOT_SUPPORTED',\n INVALID_CERTIFICATE = 'INVALID_CERTIFICATE',\n INVALID_PRIVATE_KEY = 'INVALID_PRIVATE_KEY',\n}\n\n/**\n * Certificate warning types for non-critical issues\n */\nexport enum CertificateWarningType {\n NO_CERTIFICATE_AVAILABLE = 'NO_CERTIFICATE_AVAILABLE',\n CERTIFICATE_NEAR_EXPIRY = 'CERTIFICATE_NEAR_EXPIRY',\n FALLBACK_TO_JWT = 'FALLBACK_TO_JWT',\n CERTIFICATE_NOT_CONFIGURED = 'CERTIFICATE_NOT_CONFIGURED',\n MTLS_CONNECTION_FAILED = 'MTLS_CONNECTION_FAILED',\n}\n\n/**\n * Custom error class for certificate-related errors\n */\nexport class CertificateError extends Error {\n public readonly type: CertificateErrorType;\n public readonly certificateId?: string;\n public readonly originalError?: Error;\n public readonly isRecoverable: boolean;\n\n constructor(\n type: CertificateErrorType,\n message: string,\n options: {\n certificateId?: string;\n originalError?: Error;\n isRecoverable?: boolean;\n } = {}\n ) {\n super(message);\n this.name = 'CertificateError';\n this.type = type;\n this.certificateId = options.certificateId;\n this.originalError = options.originalError;\n this.isRecoverable = options.isRecoverable ?? false;\n\n // Maintain proper stack trace for where our error was thrown (only available on V8)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CertificateError);\n }\n }\n\n /**\n * Check if this error indicates a missing certificate\n */\n isCertificateNotFound(): boolean {\n return this.type === CertificateErrorType.CERTIFICATE_NOT_FOUND;\n }\n\n /**\n * Check if this error requires mTLS configuration\n */\n requiresMTLSConfiguration(): boolean {\n return (\n this.type === CertificateErrorType.MTLS_REQUIRED ||\n this.type === CertificateErrorType.CERTIFICATE_NOT_FOUND ||\n this.type === CertificateErrorType.CERTIFICATE_MANAGER_NOT_AVAILABLE\n );\n }\n\n /**\n * Get user-friendly error message\n */\n getUserMessage(): string {\n switch (this.type) {\n case CertificateErrorType.CERTIFICATE_NOT_FOUND:\n return this.certificateId\n ? `Certificate \"${this.certificateId}\" not found. Please configure a certificate for mTLS authentication.`\n : 'No certificate found. Please configure a certificate for mTLS authentication.';\n\n case CertificateErrorType.CERTIFICATE_MANAGER_NOT_AVAILABLE:\n return 'Certificate manager is not available. Please ensure the SDK is properly initialized.';\n\n case CertificateErrorType.CERTIFICATE_EXPIRED:\n return this.certificateId\n ? `Certificate \"${this.certificateId}\" has expired. Please update your certificate.`\n : 'Certificate has expired. Please update your certificate.';\n\n case CertificateErrorType.CERTIFICATE_INVALID:\n return 'Certificate is invalid. Please check the certificate format and content.';\n\n case CertificateErrorType.CERTIFICATE_STORAGE_ERROR:\n return 'Failed to store certificate. Please check storage permissions and try again.';\n\n case CertificateErrorType.CERTIFICATE_VALIDATION_ERROR:\n return 'Certificate validation failed. Please ensure the certificate is valid and properly formatted.';\n\n case CertificateErrorType.MTLS_REQUIRED:\n return 'This endpoint requires mTLS authentication. Please configure a certificate.';\n\n case CertificateErrorType.MTLS_NOT_SUPPORTED:\n return 'mTLS is not supported on this platform.';\n\n default:\n return this.message;\n }\n }\n\n /**\n * Convert to JSON for logging/serialization\n */\n toJSON() {\n return {\n name: this.name,\n type: this.type,\n message: this.message,\n userMessage: this.getUserMessage(),\n certificateId: this.certificateId,\n isRecoverable: this.isRecoverable,\n stack: this.stack,\n originalError: this.originalError\n ? {\n name: this.originalError.name,\n message: this.originalError.message,\n stack: this.originalError.stack,\n }\n : undefined,\n };\n }\n}\n\n/**\n * Custom warning class for certificate-related warnings\n */\nexport class CertificateWarning {\n public readonly type: CertificateWarningType;\n public readonly message: string;\n public readonly certificateId?: string;\n public readonly context?: Record<string, unknown>;\n public readonly timestamp: Date;\n\n constructor(\n type: CertificateWarningType,\n message: string,\n options: {\n certificateId?: string;\n context?: Record<string, unknown>;\n } = {}\n ) {\n this.type = type;\n this.message = message;\n this.certificateId = options.certificateId;\n this.context = options.context;\n this.timestamp = new Date();\n }\n\n /**\n * Get user-friendly warning message\n */\n getUserMessage(): string {\n switch (this.type) {\n case CertificateWarningType.NO_CERTIFICATE_AVAILABLE:\n return 'No certificate available for mTLS authentication. Falling back to JWT authentication.';\n\n case CertificateWarningType.CERTIFICATE_NEAR_EXPIRY:\n return this.certificateId\n ? `Certificate \"${this.certificateId}\" will expire soon. Please renew your certificate.`\n : 'Certificate will expire soon. Please renew your certificate.';\n\n case CertificateWarningType.FALLBACK_TO_JWT:\n return 'mTLS authentication failed. Falling back to JWT authentication.';\n\n case CertificateWarningType.CERTIFICATE_NOT_CONFIGURED:\n return 'Certificate is not configured. Using JWT authentication for this request.';\n\n case CertificateWarningType.MTLS_CONNECTION_FAILED:\n return 'mTLS connection test failed. Certificate may not be properly configured.';\n\n default:\n return this.message;\n }\n }\n\n /**\n * Convert to JSON for logging\n */\n toJSON() {\n return {\n type: this.type,\n message: this.message,\n userMessage: this.getUserMessage(),\n certificateId: this.certificateId,\n context: this.context,\n timestamp: this.timestamp.toISOString(),\n };\n }\n}\n\n/**\n * Helper function to create certificate errors\n */\nexport function createCertificateError(\n type: CertificateErrorType,\n message: string,\n options?: {\n certificateId?: string;\n originalError?: Error;\n isRecoverable?: boolean;\n }\n): CertificateError {\n return new CertificateError(type, message, options);\n}\n\n/**\n * Helper function to create certificate warnings\n */\nexport function createCertificateWarning(\n type: CertificateWarningType,\n message: string,\n options?: {\n certificateId?: string;\n context?: Record<string, unknown>;\n }\n): CertificateWarning {\n return new CertificateWarning(type, message, options);\n}\n\n/**\n * Certificate event handler interface\n */\nexport interface CertificateEventHandler {\n onCertificateError?: (error: CertificateError) => void;\n onCertificateWarning?: (warning: CertificateWarning) => void;\n}\n","import { ISecureStorage } from '../../adapters';\nimport { CertificateError, CertificateErrorType } from './certificate-errors';\n\n/**\n * Single certificate data structure - Essential fields only\n */\nexport interface StoredCertificate {\n certificate: string;\n privateKey: string;\n format: 'pem' | 'p12' | 'pkcs12';\n}\n\n/**\n * Certificate storage options - Only format is configurable\n */\nexport interface CertificateOptions {\n format?: 'pem' | 'p12' | 'pkcs12';\n}\n\n/**\n * Certificate manager configuration\n */\nexport interface CertificateManagerConfig {\n storageKey?: string;\n}\n\n/**\n * Simplified Certificate Manager - Supports only ONE certificate per device\n *\n * Key behaviors:\n * - Installing a new certificate automatically removes the existing one\n * - No certificate IDs needed - there's only one\n * - Much simpler API and storage\n */\nexport class CertificateManager {\n private storageKey: string;\n private isDebugEnabled: boolean = false;\n\n constructor(\n private storage: ISecureStorage,\n config: CertificateManagerConfig = {},\n debugEnabled: boolean = false\n ) {\n this.storageKey = config.storageKey || 'acube_certificate';\n this.isDebugEnabled = debugEnabled;\n\n if (this.isDebugEnabled) {\n console.log('[CERTIFICATE-MANAGER] Initialized single certificate manager:', {\n storageKey: this.storageKey,\n });\n }\n }\n\n /**\n * Store a certificate (replaces any existing certificate)\n */\n async storeCertificate(\n certificate: string,\n privateKey: string,\n options: CertificateOptions = {}\n ): Promise<void> {\n try {\n // Validate inputs\n if (!certificate?.trim()) {\n throw new CertificateError(\n CertificateErrorType.INVALID_CERTIFICATE,\n 'Certificate content is required'\n );\n }\n\n if (!privateKey?.trim()) {\n throw new CertificateError(\n CertificateErrorType.INVALID_PRIVATE_KEY,\n 'Private key is required'\n );\n }\n\n // Check if the certificate already exists and warn the user\n const existingCert = await this.getCertificate().catch(() => null);\n if (existingCert) {\n if (this.isDebugEnabled) {\n console.warn('[CERTIFICATE-MANAGER] Replacing existing certificate');\n }\n }\n\n // Create certificate object\n const certData: StoredCertificate = {\n certificate: certificate.trim(),\n privateKey: privateKey.trim(),\n format: options.format || 'pem',\n };\n\n // Store the certificate (this replaces any existing one)\n await this.storage.set(this.storageKey, JSON.stringify(certData));\n\n if (this.isDebugEnabled) {\n console.log('[CERTIFICATE-MANAGER] Certificate stored successfully:', {\n format: certData.format,\n replacedExisting: !!existingCert,\n });\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[CERTIFICATE-MANAGER] Failed to store certificate:', error);\n }\n\n if (error instanceof CertificateError) {\n throw error;\n }\n\n throw new CertificateError(\n CertificateErrorType.CERTIFICATE_STORAGE_ERROR,\n `Failed to store certificate: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Get the stored certificate (returns null if none exists)\n */\n async getCertificate(): Promise<StoredCertificate | null> {\n try {\n const stored = await this.storage.get(this.storageKey);\n\n if (!stored) {\n if (this.isDebugEnabled) {\n console.log('[CERTIFICATE-MANAGER] No certificate found in storage');\n }\n return null;\n }\n\n const certData: StoredCertificate = JSON.parse(stored);\n\n // Validate stored data structure\n if (!certData.certificate || !certData.privateKey) {\n throw new CertificateError(\n CertificateErrorType.CERTIFICATE_INVALID,\n 'Stored certificate data is corrupted'\n );\n }\n\n if (this.isDebugEnabled) {\n console.log('[CERTIFICATE-MANAGER] Certificate retrieved:', {\n format: certData.format,\n });\n }\n\n return certData;\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[CERTIFICATE-MANAGER] Failed to retrieve certificate:', error);\n }\n\n if (error instanceof CertificateError) {\n throw error;\n }\n\n // If JSON parsing fails, the stored data is corrupted\n if (error instanceof SyntaxError) {\n throw new CertificateError(\n CertificateErrorType.CERTIFICATE_INVALID,\n 'Stored certificate data is corrupted and cannot be parsed'\n );\n }\n\n throw new CertificateError(\n CertificateErrorType.CERTIFICATE_STORAGE_ERROR,\n `Failed to retrieve certificate: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Check if a certificate is stored\n */\n async hasCertificate(): Promise<boolean> {\n try {\n const cert = await this.getCertificate();\n return cert !== null;\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[CERTIFICATE-MANAGER] Error checking certificate existence:', error);\n }\n return false;\n }\n }\n\n /**\n * Remove the stored certificate\n */\n async clearCertificate(): Promise<void> {\n try {\n await this.storage.remove(this.storageKey);\n\n if (this.isDebugEnabled) {\n console.log('[CERTIFICATE-MANAGER] Certificate cleared from storage');\n }\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[CERTIFICATE-MANAGER] Failed to clear certificate:', error);\n }\n\n throw new CertificateError(\n CertificateErrorType.CERTIFICATE_STORAGE_ERROR,\n `Failed to clear certificate: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Get certificate information without exposing a private key\n */\n async getCertificateInfo(): Promise<{ format: string } | null> {\n try {\n const cert = await this.getCertificate();\n\n if (!cert) {\n return null;\n }\n\n return {\n format: cert.format,\n };\n } catch (error) {\n if (this.isDebugEnabled) {\n console.error('[CERTIFICATE-MANAGER] Failed to get certificate info:', error);\n }\n return null;\n }\n }\n}\n","import { IStorage } from '../adapters';\nimport { OperationType, QueueConfig, QueueEvents, QueuedOperation, ResourceType } from './types';\n\n/**\n * Default queue configuration\n */\nconst DEFAULT_CONFIG: QueueConfig = {\n maxRetries: 3,\n retryDelay: 1000, // 1 second\n maxRetryDelay: 30000, // 30 seconds\n backoffMultiplier: 2,\n maxQueueSize: 1000,\n batchSize: 10,\n syncInterval: 0, // Disabled by default\n};\n\n/**\n * Operation queue manager for offline functionality\n */\nexport class OperationQueue {\n private static readonly QUEUE_KEY = 'acube_operation_queue';\n\n private queue: QueuedOperation[] = [];\n private isProcessing = false;\n private syncIntervalId?: NodeJS.Timeout;\n\n constructor(\n private storage: IStorage,\n private config: QueueConfig = DEFAULT_CONFIG,\n private events: QueueEvents = {}\n ) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n this.loadQueue();\n\n if (this.config.syncInterval > 0) {\n this.startAutoSync();\n }\n }\n\n /**\n * Add an operation to the queue\n */\n async addOperation(\n type: OperationType,\n resource: ResourceType,\n endpoint: string,\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n data?: unknown,\n priority: number = 1\n ): Promise<string> {\n // Check queue size limit\n if (this.queue.length >= this.config.maxQueueSize) {\n // Remove oldest low-priority operation\n const lowPriorityIndex = this.queue.findIndex((op) => op.priority === 1);\n if (lowPriorityIndex !== -1) {\n this.queue.splice(lowPriorityIndex, 1);\n } else {\n throw new Error('Queue is full and cannot add new operations');\n }\n }\n\n const operation: QueuedOperation = {\n id: this.generateId(),\n type,\n resource,\n endpoint,\n method,\n data,\n status: 'pending',\n createdAt: Date.now(),\n updatedAt: Date.now(),\n retryCount: 0,\n maxRetries: this.config.maxRetries,\n priority,\n };\n\n // Insert operation based on priority (higher priority first)\n const insertIndex = this.queue.findIndex((op) => op.priority < priority);\n if (insertIndex === -1) {\n this.queue.push(operation);\n } else {\n this.queue.splice(insertIndex, 0, operation);\n }\n\n await this.saveQueue();\n this.events.onOperationAdded?.(operation);\n\n return operation.id;\n }\n\n /**\n * Get all pending operations\n */\n getPendingOperations(): QueuedOperation[] {\n return this.queue.filter((op) => op.status === 'pending' || op.status === 'failed');\n }\n\n /**\n * Get operation by ID\n */\n getOperation(id: string): QueuedOperation | undefined {\n return this.queue.find((op) => op.id === id);\n }\n\n /**\n * Remove operation from queue\n */\n async removeOperation(id: string): Promise<boolean> {\n const index = this.queue.findIndex((op) => op.id === id);\n if (index === -1) {\n return false;\n }\n\n this.queue.splice(index, 1);\n await this.saveQueue();\n return true;\n }\n\n /**\n * Update operation status\n */\n async updateOperation(id: string, updates: Partial<QueuedOperation>): Promise<boolean> {\n const operation = this.queue.find((op) => op.id === id);\n if (!operation) {\n return false;\n }\n\n Object.assign(operation, {\n ...updates,\n updatedAt: Date.now(),\n });\n\n await this.saveQueue();\n return true;\n }\n\n /**\n * Get queue statistics\n */\n getStats(): {\n total: number;\n pending: number;\n processing: number;\n completed: number;\n failed: number;\n } {\n return {\n total: this.queue.length,\n pending: this.queue.filter((op) => op.status === 'pending').length,\n processing: this.queue.filter((op) => op.status === 'processing').length,\n completed: this.queue.filter((op) => op.status === 'completed').length,\n failed: this.queue.filter((op) => op.status === 'failed').length,\n };\n }\n\n /**\n * Clear all operations from queue\n */\n async clearQueue(): Promise<void> {\n this.queue = [];\n await this.saveQueue();\n }\n\n /**\n * Clear completed operations\n */\n async clearCompleted(): Promise<void> {\n this.queue = this.queue.filter((op) => op.status !== 'completed');\n await this.saveQueue();\n }\n\n /**\n * Clear failed operations\n */\n async clearFailed(): Promise<void> {\n this.queue = this.queue.filter((op) => op.status !== 'failed');\n await this.saveQueue();\n }\n\n /**\n * Retry failed operations\n */\n async retryFailed(): Promise<void> {\n const failedOperations = this.queue.filter((op) => op.status === 'failed');\n\n for (const operation of failedOperations) {\n if (operation.retryCount < operation.maxRetries) {\n operation.status = 'pending';\n operation.retryCount++;\n operation.updatedAt = Date.now();\n delete operation.error;\n }\n }\n\n await this.saveQueue();\n }\n\n /**\n * Get operations for batch processing\n */\n getNextBatch(): QueuedOperation[] {\n return this.queue\n .filter((op) => op.status === 'pending')\n .sort((a, b) => b.priority - a.priority || a.createdAt - b.createdAt)\n .slice(0, this.config.batchSize);\n }\n\n /**\n * Check if queue is empty (no pending operations)\n */\n isEmpty(): boolean {\n return this.getPendingOperations().length === 0;\n }\n\n /**\n * Start auto-sync timer\n */\n startAutoSync(): void {\n if (this.syncIntervalId) {\n return;\n }\n\n this.syncIntervalId = setInterval(() => {\n if (!this.isEmpty() && !this.isProcessing) {\n // Trigger sync through event\n this.events.onQueueEmpty?.();\n }\n }, this.config.syncInterval);\n }\n\n /**\n * Stop auto-sync timer\n */\n stopAutoSync(): void {\n if (this.syncIntervalId) {\n clearInterval(this.syncIntervalId);\n this.syncIntervalId = undefined;\n }\n }\n\n /**\n * Set processing state\n */\n setProcessing(processing: boolean): void {\n this.isProcessing = processing;\n }\n\n /**\n * Check if currently processing\n */\n isCurrentlyProcessing(): boolean {\n return this.isProcessing;\n }\n\n /**\n * Load queue from storage\n */\n private async loadQueue(): Promise<void> {\n try {\n const queueData = await this.storage.get(OperationQueue.QUEUE_KEY);\n if (queueData) {\n this.queue = JSON.parse(queueData);\n\n // Reset processing status on load (in case app crashed while processing)\n this.queue.forEach((op) => {\n if (op.status === 'processing') {\n op.status = 'pending';\n }\n });\n }\n } catch (error) {\n console.error('Failed to load queue from storage:', error);\n this.queue = [];\n }\n }\n\n /**\n * Save queue to storage\n */\n private async saveQueue(): Promise<void> {\n try {\n await this.storage.set(OperationQueue.QUEUE_KEY, JSON.stringify(this.queue));\n } catch (error) {\n console.error('Failed to save queue to storage:', error);\n this.events.onError?.(new Error(`Failed to save queue: ${error}`));\n }\n }\n\n /**\n * Generate unique ID for operations\n */\n private generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.stopAutoSync();\n }\n}\n","import { INetworkMonitor } from '../adapters';\nimport { HttpClient } from '../core/api';\nimport { OperationQueue } from './queue';\nimport { BatchSyncResult, QueueConfig, QueueEvents, QueuedOperation, SyncResult } from './types';\n\n/**\n * Sync manager for handling offline operations\n */\nexport class SyncManager {\n private isOnline = true;\n private networkUnsubscribe?: () => void;\n private syncTimeout?: NodeJS.Timeout;\n\n constructor(\n private queue: OperationQueue,\n private httpClient: HttpClient,\n private networkMonitor: INetworkMonitor,\n private config: QueueConfig,\n private events: QueueEvents = {}\n ) {\n this.isOnline = networkMonitor.isOnline();\n this.setupNetworkMonitoring();\n }\n\n /**\n * Setup network monitoring and auto-sync\n */\n private setupNetworkMonitoring(): void {\n this.networkUnsubscribe = this.networkMonitor.onStatusChange((online) => {\n const wasOffline = !this.isOnline;\n this.isOnline = online;\n\n if (online && wasOffline) {\n // Back online - sync pending operations\n this.syncPendingOperations();\n }\n });\n }\n\n /**\n * Sync all pending operations\n */\n async syncPendingOperations(): Promise<BatchSyncResult> {\n if (!this.isOnline) {\n throw new Error('Cannot sync while offline');\n }\n\n if (this.queue.isCurrentlyProcessing()) {\n throw new Error('Sync already in progress');\n }\n\n this.queue.setProcessing(true);\n\n try {\n const results: SyncResult[] = [];\n let successCount = 0;\n let failureCount = 0;\n\n while (!this.queue.isEmpty()) {\n const batch = this.queue.getNextBatch();\n if (batch.length === 0) break;\n\n // Process batch in parallel\n const batchPromises = batch.map((operation) => this.processOperation(operation));\n\n const batchResults = await Promise.allSettled(batchPromises);\n\n batchResults.forEach((result, index) => {\n const operation = batch[index];\n if (!operation) return;\n\n if (result.status === 'fulfilled') {\n const syncResult = result.value;\n results.push(syncResult);\n\n if (syncResult.success) {\n successCount++;\n this.events.onOperationCompleted?.(syncResult);\n } else {\n failureCount++;\n this.events.onOperationFailed?.(syncResult);\n }\n } else {\n // Promise rejected\n const syncResult: SyncResult = {\n operation,\n success: false,\n error: result.reason?.message || 'Unknown error',\n };\n\n results.push(syncResult);\n failureCount++;\n this.events.onOperationFailed?.(syncResult);\n\n // Update operation status\n this.queue.updateOperation(operation.id, {\n status: 'failed',\n error: syncResult.error,\n });\n }\n });\n\n // Add delay between batches to avoid overwhelming the server\n if (!this.queue.isEmpty()) {\n await this.delay(500);\n }\n }\n\n const batchResult: BatchSyncResult = {\n totalOperations: results.length,\n successCount,\n failureCount,\n results,\n };\n\n this.events.onBatchSyncCompleted?.(batchResult);\n\n if (this.queue.isEmpty()) {\n this.events.onQueueEmpty?.();\n }\n\n return batchResult;\n } finally {\n this.queue.setProcessing(false);\n }\n }\n\n /**\n * Process a single operation\n */\n private async processOperation(operation: QueuedOperation): Promise<SyncResult> {\n // Update operation status to processing\n await this.queue.updateOperation(operation.id, {\n status: 'processing',\n });\n\n try {\n const response = await this.executeOperation(operation);\n\n // Operation successful\n await this.queue.updateOperation(operation.id, {\n status: 'completed',\n });\n\n return {\n operation,\n success: true,\n response,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Unknown error';\n\n // Check if we should retry\n if (operation.retryCount < operation.maxRetries && this.isRetryableError(error)) {\n // Schedule retry with exponential backoff\n const delay = this.calculateRetryDelay(operation.retryCount);\n\n await this.queue.updateOperation(operation.id, {\n status: 'pending',\n retryCount: operation.retryCount + 1,\n error: errorMessage,\n });\n\n // Schedule retry\n setTimeout(() => {\n if (this.isOnline && !this.queue.isCurrentlyProcessing()) {\n this.syncPendingOperations();\n }\n }, delay);\n\n return {\n operation,\n success: false,\n error: `Retrying: ${errorMessage}`,\n };\n } else {\n // Max retries exceeded or non-retryable error\n await this.queue.updateOperation(operation.id, {\n status: 'failed',\n error: errorMessage,\n });\n\n return {\n operation,\n success: false,\n error: errorMessage,\n };\n }\n }\n }\n\n /**\n * Execute the actual HTTP operation\n */\n private async executeOperation(operation: QueuedOperation): Promise<unknown> {\n const { method, endpoint, data, headers } = operation;\n\n const config = headers ? { headers } : undefined;\n\n switch (method) {\n case 'GET':\n return await this.httpClient.get(endpoint, config);\n case 'POST':\n return await this.httpClient.post(endpoint, data, config);\n case 'PUT':\n return await this.httpClient.put(endpoint, data, config);\n case 'PATCH':\n return await this.httpClient.patch(endpoint, data, config);\n case 'DELETE':\n return await this.httpClient.delete(endpoint, config);\n default:\n throw new Error(`Unsupported HTTP method: ${method}`);\n }\n }\n\n /**\n * Check if an error is retryable\n */\n private isRetryableError(error: unknown): boolean {\n const errorObj = error as { code?: string; statusCode?: number };\n\n // Network errors are retryable\n if (errorObj.code === 'NETWORK_ERROR') {\n return true;\n }\n\n // Server errors (5xx) are retryable\n if (errorObj.statusCode && errorObj.statusCode >= 500) {\n return true;\n }\n\n // Rate limiting is retryable\n if (errorObj.statusCode === 429) {\n return true;\n }\n\n // Timeout errors are retryable\n const errorMessage = (error as Error)?.message;\n if (errorObj.code === 'ECONNABORTED' || errorMessage?.includes('timeout')) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Calculate retry delay with exponential backoff\n */\n private calculateRetryDelay(retryCount: number): number {\n const delay = this.config.retryDelay * Math.pow(this.config.backoffMultiplier, retryCount);\n return Math.min(delay, this.config.maxRetryDelay);\n }\n\n /**\n * Utility delay function\n */\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Check if currently online\n */\n isCurrentlyOnline(): boolean {\n return this.isOnline;\n }\n\n /**\n * Manually trigger sync (if online)\n */\n async triggerSync(): Promise<BatchSyncResult | null> {\n if (!this.isOnline) {\n return null;\n }\n\n if (this.queue.isEmpty()) {\n return {\n totalOperations: 0,\n successCount: 0,\n failureCount: 0,\n results: [],\n };\n }\n\n return await this.syncPendingOperations();\n }\n\n /**\n * Get sync status\n */\n getSyncStatus(): {\n isOnline: boolean;\n isProcessing: boolean;\n queueStats: ReturnType<OperationQueue['getStats']>;\n } {\n return {\n isOnline: this.isOnline,\n isProcessing: this.queue.isCurrentlyProcessing(),\n queueStats: this.queue.getStats(),\n };\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n if (this.networkUnsubscribe) {\n this.networkUnsubscribe();\n }\n\n if (this.syncTimeout) {\n clearTimeout(this.syncTimeout);\n }\n }\n}\n","import { ICacheAdapter, INetworkMonitor, IStorage } from '../adapters';\nimport { HttpClient } from '../core/api';\nimport { OperationQueue } from './queue';\nimport { SyncManager } from './sync-manager';\nimport { BatchSyncResult, OperationType, QueueConfig, QueueEvents, ResourceType } from './types';\n\n/**\n * Enhanced offline manager with optimistic update support\n */\nexport class OfflineManager {\n private queue: OperationQueue;\n private syncManager: SyncManager;\n\n constructor(\n storage: IStorage,\n httpClient: HttpClient,\n networkMonitor: INetworkMonitor,\n config: Partial<QueueConfig> = {},\n events: QueueEvents = {},\n _cache?: ICacheAdapter\n ) {\n // Create default config\n const defaultConfig: QueueConfig = {\n maxRetries: 3,\n retryDelay: 1000,\n maxRetryDelay: 30000,\n backoffMultiplier: 2,\n maxQueueSize: 1000,\n batchSize: 10,\n syncInterval: 30000, // 30 seconds\n };\n\n const finalConfig = { ...defaultConfig, ...config };\n\n // Use original events without optimistic manager integration\n const enhancedEvents: QueueEvents = {\n ...events,\n };\n\n // Initialize queue and sync manager with enhanced events\n this.queue = new OperationQueue(storage, finalConfig, enhancedEvents);\n this.syncManager = new SyncManager(\n this.queue,\n httpClient,\n networkMonitor,\n finalConfig,\n enhancedEvents\n );\n }\n\n /**\n * Queue an operation for offline execution\n */\n async queueOperation(\n type: OperationType,\n resource: ResourceType,\n endpoint: string,\n method: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n data?: unknown,\n priority: number = 1\n ): Promise<string> {\n return await this.queue.addOperation(type, resource, endpoint, method, data, priority);\n }\n\n /**\n * Queue a receipt creation\n */\n async queueReceiptCreation(receiptData: unknown, priority: number = 2): Promise<string> {\n return await this.queueOperation(\n 'CREATE',\n 'receipt',\n '/mf1/receipts',\n 'POST',\n receiptData,\n priority\n );\n }\n\n /**\n * Queue a receipt void operation\n */\n async queueReceiptVoid(voidData: unknown, priority: number = 3): Promise<string> {\n return await this.queueOperation(\n 'DELETE',\n 'receipt',\n '/mf1/receipts',\n 'DELETE',\n voidData,\n priority\n );\n }\n\n /**\n * Queue a receipt return operation\n */\n async queueReceiptReturn(returnData: unknown, priority: number = 3): Promise<string> {\n return await this.queueOperation(\n 'CREATE',\n 'receipt',\n '/mf1/receipts/return',\n 'POST',\n returnData,\n priority\n );\n }\n\n /**\n * Queue a cashier creation\n */\n async queueCashierCreation(cashierData: unknown, priority: number = 1): Promise<string> {\n return await this.queueOperation(\n 'CREATE',\n 'cashier',\n '/mf1/cashiers',\n 'POST',\n cashierData,\n priority\n );\n }\n\n /**\n * Check if currently online\n */\n isOnline(): boolean {\n return this.syncManager.isCurrentlyOnline();\n }\n\n /**\n * Get sync status and queue statistics\n */\n getStatus() {\n return this.syncManager.getSyncStatus();\n }\n\n /**\n * Get pending operations count\n */\n getPendingCount(): number {\n return this.queue.getPendingOperations().length;\n }\n\n /**\n * Check if queue is empty\n */\n isEmpty(): boolean {\n return this.queue.isEmpty();\n }\n\n /**\n * Manually trigger sync (if online)\n */\n async sync(): Promise<BatchSyncResult | null> {\n return await this.syncManager.triggerSync();\n }\n\n /**\n * Retry failed operations\n */\n async retryFailed(): Promise<void> {\n await this.queue.retryFailed();\n\n // Trigger sync if online\n if (this.isOnline()) {\n await this.sync();\n }\n }\n\n /**\n * Clear completed operations\n */\n async clearCompleted(): Promise<void> {\n await this.queue.clearCompleted();\n }\n\n /**\n * Clear failed operations\n */\n async clearFailed(): Promise<void> {\n await this.queue.clearFailed();\n }\n\n /**\n * Clear all operations\n */\n async clearAll(): Promise<void> {\n await this.queue.clearQueue();\n }\n\n /**\n * Get operation by ID\n */\n getOperation(id: string) {\n return this.queue.getOperation(id);\n }\n\n /**\n * Remove specific operation\n */\n async removeOperation(id: string): Promise<boolean> {\n return await this.queue.removeOperation(id);\n }\n\n /**\n * Get queue statistics\n */\n getQueueStats() {\n return this.queue.getStats();\n }\n\n /**\n * Start auto-sync (if not already started)\n */\n startAutoSync(): void {\n this.queue.startAutoSync();\n }\n\n /**\n * Stop auto-sync\n */\n stopAutoSync(): void {\n this.queue.stopAutoSync();\n }\n\n /**\n * Create optimistic update (requires cache)\n */\n async createOptimisticUpdate<T>(\n _resource: ResourceType,\n _operation: OperationType,\n _endpoint: string,\n _method: 'POST' | 'PUT' | 'PATCH' | 'DELETE',\n _data: unknown,\n _optimisticData: T,\n _cacheKey: string,\n _priority: number = 2\n ): Promise<string | null> {\n // Optimistic updates disabled in simplified cache system\n return null;\n }\n\n /**\n * Enhanced queue receipt creation with optimistic update\n */\n async queueReceiptCreationWithOptimistic<T>(\n receiptData: unknown,\n optimisticReceipt: T,\n cacheKey: string,\n priority: number = 2\n ): Promise<string | null> {\n return await this.createOptimisticUpdate(\n 'receipt',\n 'CREATE',\n '/mf1/receipts',\n 'POST',\n receiptData,\n optimisticReceipt,\n cacheKey,\n priority\n );\n }\n\n /**\n * Enhanced queue receipt void with optimistic update\n */\n async queueReceiptVoidWithOptimistic<T>(\n voidData: unknown,\n optimisticUpdate: T,\n cacheKey: string,\n priority: number = 3\n ): Promise<string | null> {\n return await this.createOptimisticUpdate(\n 'receipt',\n 'DELETE',\n '/mf1/receipts',\n 'DELETE',\n voidData,\n optimisticUpdate,\n cacheKey,\n priority\n );\n }\n\n /**\n * Enhanced queue receipt return with optimistic update\n */\n async queueReceiptReturnWithOptimistic<T>(\n returnData: unknown,\n optimisticReceipt: T,\n cacheKey: string,\n priority: number = 3\n ): Promise<string | null> {\n return await this.createOptimisticUpdate(\n 'receipt',\n 'CREATE',\n '/mf1/receipts/return',\n 'POST',\n returnData,\n optimisticReceipt,\n cacheKey,\n priority\n );\n }\n\n /**\n * Get optimistic operations (disabled in simplified cache system)\n */\n getOptimisticOperations() {\n return [];\n }\n\n /**\n * Get pending optimistic operations count (disabled in simplified cache system)\n */\n getOptimisticPendingCount(): number {\n return 0;\n }\n\n /**\n * Check if optimistic updates are enabled (disabled in simplified cache system)\n */\n isOptimisticEnabled(): boolean {\n return false;\n }\n\n /**\n * Check if resource has pending optimistic updates (disabled in simplified cache system)\n */\n hasPendingOptimisticUpdates(_resource: ResourceType, _resourceId?: string): boolean {\n return false;\n }\n\n /**\n * Get the optimistic manager (disabled in simplified cache system)\n */\n getOptimisticManager() {\n return null;\n }\n\n /**\n * Manually rollback a specific optimistic operation (disabled in simplified cache system)\n */\n async rollbackOptimisticOperation(_operationId: string, _reason?: string): Promise<void> {\n // Optimistic updates disabled in simplified cache system\n return;\n }\n\n /**\n * Manually rollback all pending optimistic operations for a resource (disabled in simplified cache system)\n */\n async rollbackOptimisticOperationsByResource(\n _resource: ResourceType,\n _resourceId?: string\n ): Promise<void> {\n // Optimistic updates disabled in simplified cache system\n return;\n }\n\n /**\n * Cleanup resources\n */\n destroy(): void {\n this.queue.destroy();\n this.syncManager.destroy();\n }\n}\n","import { CertificateInfo, PlatformAdapters } from './adapters';\nimport {\n ACubeSDKError,\n APIClient,\n AuthCredentials,\n AuthManager,\n ConfigManager,\n SDKConfig,\n User,\n createACubeMTLSConfig,\n loadPlatformAdapters,\n} from './core';\nimport { CertificateManager } from './core/certificates/certificate-manager';\nimport { OfflineManager, QueueEvents } from './offline';\n\n/**\n * SDK Events interface\n */\nexport interface SDKEvents {\n onUserChanged?: (user: User | null) => void;\n onAuthError?: (error: ACubeSDKError) => void;\n onNetworkStatusChanged?: (online: boolean) => void;\n onOfflineOperationAdded?: (operationId: string) => void;\n onOfflineOperationCompleted?: (operationId: string, success: boolean) => void;\n}\n\n/**\n * Main ACube SDK class\n */\nexport class ACubeSDK {\n private config: ConfigManager;\n private adapters?: PlatformAdapters;\n private authManager?: AuthManager;\n private offlineManager?: OfflineManager;\n private certificateManager?: CertificateManager;\n private isInitialized = false;\n\n // Public API clients\n public api?: APIClient;\n\n constructor(\n config: SDKConfig,\n customAdapters?: PlatformAdapters,\n private events: SDKEvents = {}\n ) {\n this.config = new ConfigManager(config);\n\n if (customAdapters) {\n this.adapters = customAdapters;\n }\n }\n\n /**\n * Initialize the SDK\n */\n async initialize(): Promise<void> {\n if (this.isInitialized) {\n return;\n }\n\n try {\n // Load platform adapters if not provided with automatic mTLS configuration\n if (!this.adapters) {\n const mtlsConfig = createACubeMTLSConfig(\n this.config.getApiUrl(),\n this.config.getTimeout(),\n true // autoInitialize\n );\n\n this.adapters = loadPlatformAdapters({\n debugEnabled: this.config.isDebugEnabled(),\n mtlsConfig,\n });\n }\n\n // Initialize a certificate manager with optional configuration\n const certificateConfig = this.config.getConfig().certificateConfig;\n this.certificateManager = new CertificateManager(\n this.adapters.secureStorage,\n {\n storageKey: certificateConfig?.storagePrefix || 'acube_certificate',\n },\n this.config.isDebugEnabled()\n );\n\n // Initialize auth manager first (needed for API client)\n this.authManager = new AuthManager(this.config, this.adapters.secureStorage, {\n onUserChanged: this.events.onUserChanged,\n onAuthError: this.events.onAuthError,\n });\n\n // Initialize the API client with all adapters (mTLS is pre-configured)\n // Pass authManager as userProvider for role-based auth decisions\n this.api = new APIClient(\n this.config,\n this.certificateManager,\n this.adapters.cache,\n this.adapters.networkMonitor,\n this.adapters.mtls,\n this.authManager // AuthManager implements IUserProvider\n );\n\n // Initialize offline manager\n const queueEvents: QueueEvents = {\n onOperationAdded: (operation) => {\n this.events.onOfflineOperationAdded?.(operation.id);\n },\n onOperationCompleted: (result) => {\n this.events.onOfflineOperationCompleted?.(result.operation.id, result.success);\n },\n onOperationFailed: (result) => {\n this.events.onOfflineOperationCompleted?.(result.operation.id, false);\n },\n };\n\n this.offlineManager = new OfflineManager(\n this.adapters.storage,\n this.api.getHttpClient(),\n this.adapters.networkMonitor,\n {\n syncInterval: 30000, // 30 seconds\n },\n queueEvents\n );\n\n // Set up network monitoring\n this.adapters.networkMonitor.onStatusChange((online) => {\n this.events.onNetworkStatusChanged?.(online);\n\n if (online && this.offlineManager) {\n // Auto-sync when back online\n this.offlineManager.sync().catch(console.error);\n }\n });\n\n // Check if the user is already authenticated\n if (await this.authManager.isAuthenticated()) {\n const token = await this.authManager.getAccessToken();\n if (token) {\n this.api.setAuthorizationHeader(token);\n }\n }\n\n // Auto-configure certificate if it exists in storage\n // This ensures mTLS is ready immediately without needing retry logic\n if (this.adapters?.mtls && this.certificateManager) {\n try {\n const hasCert = await this.certificateManager.hasCertificate();\n\n if (hasCert) {\n const storedCert = await this.certificateManager.getCertificate();\n\n if (storedCert) {\n if (this.config.isDebugEnabled()) {\n console.log(\n '[ACUBE-SDK] 🔄 Auto-configuring certificate during SDK initialization'\n );\n }\n\n await this.adapters.mtls.configureCertificate({\n certificate: storedCert.certificate,\n privateKey: storedCert.privateKey,\n format: storedCert.format.toUpperCase() as 'PEM' | 'P12',\n });\n\n if (this.config.isDebugEnabled()) {\n console.log('[ACUBE-SDK] ✅ Certificate auto-configured successfully');\n }\n }\n }\n } catch (certConfigError) {\n // Don't fail SDK initialization if certificate configuration fails\n // The retry logic in getCertificatesInfo will handle it\n if (this.config.isDebugEnabled()) {\n console.warn(\n '[ACUBE-SDK] ⚠️ Certificate auto-configuration failed (will retry on demand):',\n certConfigError\n );\n }\n }\n }\n\n this.isInitialized = true;\n } catch (error) {\n throw new ACubeSDKError(\n 'SDK_INITIALIZATION_ERROR',\n `Failed to initialize SDK: ${error instanceof Error ? error.message : 'Unknown error'}`,\n error\n );\n }\n }\n\n /**\n * Login with email and password\n */\n async login(credentials: AuthCredentials): Promise<User> {\n this.ensureInitialized();\n\n const user = await this.authManager!.login(credentials);\n\n // Set auth header for API calls\n const token = await this.authManager!.getAccessToken();\n if (token) {\n this.api!.setAuthorizationHeader(token);\n }\n\n return user;\n }\n\n /**\n * Logout current user\n */\n async logout(): Promise<void> {\n this.ensureInitialized();\n\n await this.authManager!.logout();\n this.api!.removeAuthorizationHeader();\n }\n\n /**\n * Get current user\n */\n async getCurrentUser(): Promise<User | null> {\n this.ensureInitialized();\n\n try {\n return await this.authManager!.getCurrentUser();\n } catch {\n return null;\n }\n }\n\n /**\n * Check if the user is authenticated\n */\n async isAuthenticated(): Promise<boolean> {\n this.ensureInitialized();\n return await this.authManager!.isAuthenticated();\n }\n\n /**\n * Get offline manager for manual queue operations\n */\n getOfflineManager(): OfflineManager {\n this.ensureInitialized();\n return this.offlineManager!;\n }\n\n /**\n * Check if currently online\n */\n isOnline(): boolean {\n this.ensureInitialized();\n return this.adapters!.networkMonitor.isOnline();\n }\n\n /**\n * Get SDK configuration\n */\n getConfig(): SDKConfig {\n return this.config.getConfig();\n }\n\n /**\n * Update SDK configuration\n */\n updateConfig(updates: Partial<SDKConfig>): void {\n this.config.updateConfig(updates);\n }\n\n /**\n * Get platform adapters (for advanced use cases)\n */\n getAdapters(): PlatformAdapters | undefined {\n return this.adapters;\n }\n\n /**\n * Store mTLS certificate (replaces any existing certificate)\n */\n async storeCertificate(\n certificate: string,\n privateKey: string,\n options: {\n name?: string;\n format?: 'pem' | 'p12' | 'pkcs12';\n password?: string;\n } = {}\n ): Promise<void> {\n this.ensureInitialized();\n\n if (!this.api) {\n throw new ACubeSDKError('API_CLIENT_NOT_INITIALIZED', 'API client not initialized');\n }\n\n const httpClient = this.api.getHttpClient();\n if (!httpClient) {\n throw new ACubeSDKError('API_CLIENT_NOT_INITIALIZED', 'HTTP client not available');\n }\n\n // Use coordinated storage to ensure proper clearing of old certificates\n await httpClient.storeCertificate(certificate, privateKey, { format: options.format });\n\n if (this.config.isDebugEnabled()) {\n console.log('[ACUBE-SDK] mTLS certificate stored successfully');\n }\n }\n\n /**\n * Get mTLS status and configuration info\n */\n async getMTLSStatus() {\n this.ensureInitialized();\n\n if (!this.api) {\n throw new ACubeSDKError('CERTIFICATE_MANAGER_NOT_INITIALIZED', 'API client not initialized');\n }\n\n const httpClient = this.api.getHttpClient();\n return await httpClient.getMTLSStatus();\n }\n\n /**\n * Test mTLS connection\n */\n async testMTLSConnection(): Promise<boolean> {\n this.ensureInitialized();\n\n if (!this.api) {\n throw new ACubeSDKError('UNKNOWN_ERROR', 'API client not initialized');\n }\n\n const httpClient = this.api.getHttpClient();\n return await httpClient.testMTLSConnection();\n }\n\n /**\n * Clear the stored certificate\n */\n async clearCertificate(): Promise<void> {\n this.ensureInitialized();\n\n if (!this.api) {\n throw new ACubeSDKError('SDK_INITIALIZATION_ERROR', 'API client not initialized');\n }\n\n const httpClient = this.api.getHttpClient();\n if (!httpClient) {\n throw new ACubeSDKError('API_CLIENT_NOT_INITIALIZED', 'HTTP client not available');\n }\n\n // Use coordinated clearing to ensure certificate is removed from both storages\n await httpClient.clearCertificate();\n\n if (this.config.isDebugEnabled()) {\n console.log('[ACUBE-SDK] mTLS certificate cleared');\n }\n }\n\n /**\n * Get certificate manager for advanced certificate operations\n */\n getCertificateManager() {\n this.ensureInitialized();\n return this.certificateManager;\n }\n\n /**\n * Get the stored certificate\n */\n async getCertificate() {\n this.ensureInitialized();\n\n if (!this.certificateManager) {\n throw new ACubeSDKError(\n 'CERTIFICATE_MANAGER_NOT_INITIALIZED',\n 'Certificate manager not initialized'\n );\n }\n\n return await this.certificateManager.getCertificate();\n }\n\n /**\n * Get certificate information (without private key)\n */\n async getCertificateInfo() {\n this.ensureInitialized();\n\n if (!this.certificateManager) {\n throw new ACubeSDKError(\n 'CERTIFICATE_MANAGER_NOT_INITIALIZED',\n 'Certificate manager not initialized'\n );\n }\n\n return await this.certificateManager.getCertificateInfo();\n }\n\n /**\n * Check if certificate is stored\n */\n async hasCertificate() {\n this.ensureInitialized();\n\n if (!this.certificateManager) {\n throw new ACubeSDKError(\n 'CERTIFICATE_MANAGER_NOT_INITIALIZED',\n 'Certificate manager not initialized'\n );\n }\n\n return await this.certificateManager.hasCertificate();\n }\n\n /**\n * Get detailed certificate information from stored certificates\n * This method retrieves certificate metadata including subject, issuer,\n * validity dates, fingerprints, key usage, and more from the mTLS adapter.\n *\n * Uses retry-on-failure pattern similar to executeRequestMTLS:\n * - First attempt: Try to get certificate info\n * - If null and certificate exists: Configure certificate and retry once\n * - Maximum 2 attempts to prevent infinite loops\n *\n * @param isRetryAttempt Internal flag to prevent infinite retry loops\n * @returns Promise with detailed certificate information or null if not available\n */\n async getCertificatesInfo(isRetryAttempt: boolean = false): Promise<CertificateInfo | null> {\n this.ensureInitialized();\n\n if (!this.adapters?.mtls) {\n throw new ACubeSDKError('MTLS_ADAPTER_NOT_AVAILABLE', 'mTLS adapter not available');\n }\n\n try {\n // Check if certificate exists first\n const hasCert = await this.adapters.mtls.hasCertificate();\n if (!hasCert) {\n if (this.config.isDebugEnabled()) {\n console.log('[ACUBE-SDK] No certificate stored, cannot retrieve certificate info');\n }\n return null;\n }\n\n // Try to get certificate info\n const certInfo = await this.adapters.mtls.getCertificateInfo();\n\n // Success - certificate info retrieved\n if (certInfo) {\n if (this.config.isDebugEnabled()) {\n console.log('[ACUBE-SDK] ✅ Certificate info retrieved:', {\n subject: certInfo.subject,\n issuer: certInfo.issuer,\n validFrom: certInfo.validFrom,\n validTo: certInfo.validTo,\n serialNumber: certInfo.serialNumber,\n attempt: isRetryAttempt ? 'retry' : 'first',\n });\n }\n return certInfo;\n }\n\n // Certificate exists but getCertificateInfo returned null\n // This means certificate isn't configured in native module yet\n\n // If this is already a retry attempt, don't retry again to prevent infinite loops\n if (isRetryAttempt) {\n if (this.config.isDebugEnabled()) {\n console.log(\n '[ACUBE-SDK] ❌ Retry attempt failed - certificate may be invalid or corrupted'\n );\n }\n return null;\n }\n\n // First attempt failed - try to reconfigure certificate and retry\n if (this.config.isDebugEnabled()) {\n console.log(\n '[ACUBE-SDK] 🔄 Certificate exists but not configured, configuring and retrying...'\n );\n }\n\n // Get certificate from storage\n if (!this.certificateManager) {\n if (this.config.isDebugEnabled()) {\n console.log('[ACUBE-SDK] Certificate manager not available');\n }\n return null;\n }\n\n const storedCert = await this.certificateManager.getCertificate();\n if (!storedCert) {\n if (this.config.isDebugEnabled()) {\n console.log('[ACUBE-SDK] No certificate found in storage');\n }\n return null;\n }\n\n // Configure certificate in mTLS adapter\n await this.adapters.mtls.configureCertificate({\n certificate: storedCert.certificate,\n privateKey: storedCert.privateKey,\n format: storedCert.format.toUpperCase() as 'PEM' | 'P12',\n });\n\n if (this.config.isDebugEnabled()) {\n console.log('[ACUBE-SDK] ✅ Certificate configured, retrying getCertificatesInfo...');\n }\n\n // Retry once (with flag to prevent infinite recursion)\n return await this.getCertificatesInfo(true);\n } catch (error) {\n if (this.config.isDebugEnabled()) {\n console.error('[ACUBE-SDK] Failed to get certificates info:', error);\n }\n\n throw new ACubeSDKError(\n 'CERTIFICATE_INFO_ERROR',\n `Failed to retrieve certificate information: ${error instanceof Error ? error.message : 'Unknown error'}`,\n error\n );\n }\n }\n\n /**\n * Destroy SDK and cleanup resources\n */\n destroy(): void {\n this.offlineManager?.destroy();\n this.isInitialized = false;\n }\n\n /**\n * Ensure SDK is initialized\n */\n private ensureInitialized(): void {\n if (!this.isInitialized) {\n throw new ACubeSDKError(\n 'CERTIFICATE_MANAGER_NOT_INITIALIZED',\n 'SDK not initialized. Call initialize() first.'\n );\n }\n }\n}\n\n/**\n * Create and initialize ACube SDK\n */\nexport async function createACubeSDK(\n config: SDKConfig,\n customAdapters?: PlatformAdapters,\n events?: SDKEvents\n): Promise<ACubeSDK> {\n const sdk = new ACubeSDK(config, customAdapters, events);\n await sdk.initialize();\n return sdk;\n}\n","import * as z from 'zod';\n\n// Enum options arrays\nexport const VAT_RATE_CODE_OPTIONS = [\n '4.00',\n '5.00',\n '10.00',\n '22.00',\n '2.00',\n '6.40',\n '7.00',\n '7.30',\n '7.50',\n '7.65',\n '7.95',\n '8.30',\n '8.50',\n '8.80',\n '9.50',\n '12.30',\n 'N1',\n 'N2',\n 'N3',\n 'N4',\n 'N5',\n 'N6',\n] as const;\n\nexport const GOOD_OR_SERVICE_OPTIONS = ['goods', 'service'] as const;\n\nexport const RECEIPT_PROOF_TYPE_OPTIONS = ['POS', 'VR', 'ND'] as const;\n\n// Enum types for receipt validation\nexport const VatRateCodeSchema = z.enum(VAT_RATE_CODE_OPTIONS);\n\nexport const GoodOrServiceSchema = z.enum(GOOD_OR_SERVICE_OPTIONS);\n\nexport const ReceiptProofTypeSchema = z.enum(RECEIPT_PROOF_TYPE_OPTIONS);\n\n// Receipt Item Schema\nexport const ReceiptItemSchema = z.object({\n type: GoodOrServiceSchema.optional(),\n quantity: z.string().min(1, { error: 'fieldIsRequired' }),\n description: z.string().min(1, { error: 'fieldIsRequired' }),\n unit_price: z.string().min(1, { error: 'fieldIsRequired' }),\n vat_rate_code: VatRateCodeSchema.optional(),\n simplified_vat_allocation: z.boolean().optional(),\n discount: z.string().nullable().optional(),\n is_down_payment_or_voucher_redemption: z.boolean().optional(),\n complimentary: z.boolean().optional(),\n});\n\n// Main Receipt Input Schema\nexport const ReceiptInputSchema = z\n .object({\n items: z.array(ReceiptItemSchema).min(1, { error: 'arrayMin1' }),\n customer_tax_code: z.string().optional(),\n customer_lottery_code: z.string().optional(),\n discount: z.string().nullable().optional(),\n invoice_issuing: z.boolean().optional(),\n uncollected_dcr_to_ssn: z.boolean().optional(),\n services_uncollected_amount: z.string().nullable().optional(),\n goods_uncollected_amount: z.string().nullable().optional(),\n cash_payment_amount: z.string().nullable().optional(),\n electronic_payment_amount: z.string().nullable().optional(),\n ticket_restaurant_payment_amount: z.string().nullable().optional(),\n ticket_restaurant_quantity: z.number().optional(),\n })\n .refine(\n (data) => {\n // At least one payment method should be provided\n const hasCashPayment = data.cash_payment_amount && parseFloat(data.cash_payment_amount) > 0;\n const hasElectronicPayment =\n data.electronic_payment_amount && parseFloat(data.electronic_payment_amount) > 0;\n const hasTicketPayment =\n data.ticket_restaurant_payment_amount &&\n parseFloat(data.ticket_restaurant_payment_amount) > 0;\n\n return hasCashPayment || hasElectronicPayment || hasTicketPayment;\n },\n {\n error: 'At least one payment method is required',\n path: ['payment_methods'],\n }\n )\n .refine(\n (data) => {\n // only one between customer_tax_code and customer_lottery_code can be provided\n return !data.customer_tax_code || !data.customer_lottery_code;\n },\n {\n error: 'Only one between customer_tax_code and customer_lottery_code can be provided',\n path: ['customer_tax_code', 'customer_lottery_code'],\n }\n );\n\n// Receipt Return or Void via PEM Schema\nexport const ReceiptReturnOrVoidViaPEMInputSchema = z.object({\n pos_id: z.string().optional(),\n items: z.array(ReceiptItemSchema).min(1, { error: 'arrayMin1' }),\n document_number: z.string().min(1, { error: 'fieldIsRequired' }),\n document_datetime: z.string().optional(),\n lottery_code: z.string().optional(),\n});\n\n// Receipt Return or Void with Proof Schema\nexport const ReceiptReturnOrVoidWithProofInputSchema = z.object({\n items: z.array(ReceiptItemSchema).min(1, { error: 'arrayMin1' }),\n proof: ReceiptProofTypeSchema,\n document_datetime: z.string().min(1, { error: 'fieldIsRequired' }),\n});\n\n// Void Receipt Schema\nexport const VoidReceiptInputSchema = z.object({\n document_number: z.string().min(1, { error: 'fieldIsRequired' }),\n});\n\nexport const ReceiptReturnItemSchema = z\n .array(\n z.object({\n id: z.number(),\n quantity: z.string().min(1, { error: 'fieldIsRequired' }),\n })\n )\n .min(1, { error: 'arrayMin1' });\n\n// Receipt Return Schema\nexport const ReceiptReturnInputSchema = z.object({\n items: z.array(ReceiptReturnItemSchema).min(1, { error: 'arrayMin1' }),\n document_number: z.string().min(1, { error: 'fieldIsRequired' }),\n});\n\n// Type exports\nexport type ReceiptItemType = z.infer<typeof ReceiptItemSchema>;\nexport type ReceiptInputType = z.infer<typeof ReceiptInputSchema>;\nexport type ReceiptReturnOrVoidViaPEMInputType = z.infer<\n typeof ReceiptReturnOrVoidViaPEMInputSchema\n>;\nexport type ReceiptReturnOrVoidWithProofInputType = z.infer<\n typeof ReceiptReturnOrVoidWithProofInputSchema\n>;\nexport type VatRateCodeType = z.infer<typeof VatRateCodeSchema>;\nexport type GoodOrServiceType = z.infer<typeof GoodOrServiceSchema>;\nexport type ReceiptProofTypeType = z.infer<typeof ReceiptProofTypeSchema>;\nexport type ReceiptReturnType = z.infer<typeof ReceiptReturnInputSchema>;\nexport type ReceiptReturnItemType = z.infer<typeof ReceiptReturnItemSchema>;\nexport type VoidReceiptInputType = z.infer<typeof VoidReceiptInputSchema>;\n","import * as z from 'zod';\n\n// Cashier Create Input Schema (MF1)\nexport const CashierCreateInputSchema = z.object({\n email: z\n .string()\n .min(1, { error: 'fieldIsRequired' })\n .max(255, { error: 'emailMaxLength' })\n .email({ error: 'invalidEmail' }),\n password: z\n .string()\n .min(8, { error: 'passwordMinLength' })\n .max(40, { error: 'passwordMaxLength' }),\n name: z.string().min(1, { error: 'fieldIsRequired' }).max(255, { error: 'nameMaxLength' }),\n display_name: z\n .string()\n .min(1, { error: 'fieldIsRequired' })\n .max(255, { error: 'displayNameMaxLength' }),\n});\n\n// Type exports\nexport type CashierCreateInputType = z.infer<typeof CashierCreateInputSchema>;\n","import * as z from 'zod';\n\n// Enum options arrays\nexport const PEM_STATUS_OPTIONS = [\n 'NEW',\n 'REGISTERED',\n 'ACTIVATED',\n 'ONLINE',\n 'OFFLINE',\n 'DISCARDED',\n] as const;\n\n// Address Schema (reusable)\nexport const AddressSchema = z.object({\n street_address: z.string().min(1, { error: 'fieldIsRequired' }),\n street_number: z.string().min(1, { error: 'fieldIsRequired' }),\n zip_code: z\n .string()\n .min(1, { error: 'fieldIsRequired' })\n .regex(/^\\d{5}$/, { error: 'invalidZipCode' }),\n city: z.string().min(1, { error: 'fieldIsRequired' }),\n province: z\n .string()\n .min(2, { error: 'provinceMinLength' })\n .max(2, { error: 'provinceMaxLength' })\n .toUpperCase(),\n});\n\n// PEM Status Schema\nexport const PEMStatusSchema = z.enum(PEM_STATUS_OPTIONS);\n\n// Activation Request Schema\nexport const ActivationRequestSchema = z.object({\n registration_key: z.string().min(1, { error: 'fieldIsRequired' }),\n});\n\n// PEM Status Offline Request Schema\nexport const PEMStatusOfflineRequestSchema = z.object({\n timestamp: z\n .string()\n .min(1, { error: 'fieldIsRequired' })\n .refine((val) => !isNaN(Date.parse(val)), {\n error: 'invalidDateFormat',\n }),\n reason: z.string().min(1, { error: 'fieldIsRequired' }),\n});\n\n// Type exports\nexport type AddressType = z.infer<typeof AddressSchema>;\nexport type PEMStatusType = z.infer<typeof PEMStatusSchema>;\nexport type ActivationRequestType = z.infer<typeof ActivationRequestSchema>;\nexport type PEMStatusOfflineRequestType = z.infer<typeof PEMStatusOfflineRequestSchema>;\n","import * as z from 'zod';\n\n// Cash Register Create Schema\nexport const CashRegisterCreateSchema = z.object({\n pem_serial_number: z.string().min(1, { error: 'fieldIsRequired' }),\n name: z.string().min(1, { error: 'fieldIsRequired' }).max(100, { error: 'nameMaxLength' }),\n});\n\n// Type exports\nexport type CashRegisterCreateType = z.infer<typeof CashRegisterCreateSchema>;\n","import * as z from 'zod';\n\nimport { AddressSchema } from './point-of-sales';\n\n// VAT number validation regex (Partita IVA - 11 digits)\nconst VAT_NUMBER_REGEX = /^\\d{11}$/;\n\n// Fiscal code validation regex (Codice Fiscale - 11 digits only for merchants)\nconst FISCAL_CODE_REGEX = /^\\d{11}$/;\n\n// Password validation regex (from OpenAPI spec)\nconst PASSWORD_REGEX = /^((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{10,}).*)$/;\n\n// Merchant Create Input Schema\nexport const MerchantCreateInputSchema = z\n .object({\n vat_number: z\n .string()\n .min(1, { error: 'fieldIsRequired' })\n .regex(VAT_NUMBER_REGEX, { error: 'invalidVatNumber' }),\n fiscal_code: z.string().regex(FISCAL_CODE_REGEX, { error: 'invalidFiscalCode' }).optional(),\n business_name: z.string().max(200, { error: 'businessNameMaxLength' }).optional().nullable(),\n first_name: z.string().max(100, { error: 'firstNameMaxLength' }).optional().nullable(),\n last_name: z.string().max(100, { error: 'lastNameMaxLength' }).optional().nullable(),\n email: z.string().min(1, { error: 'fieldIsRequired' }).email({ error: 'invalidEmail' }),\n password: z\n .string()\n .min(1, { error: 'fieldIsRequired' })\n .regex(PASSWORD_REGEX, { error: 'passwordComplexity' }),\n address: AddressSchema.optional(),\n })\n .refine(\n (data) => {\n const hasBusinessName = data.business_name && data.business_name.trim() !== '';\n const hasPersonalNames =\n (data.first_name && data.first_name.trim() !== '') ||\n (data.last_name && data.last_name.trim() !== '');\n\n // If business name is set, first/last name must not be provided\n if (hasBusinessName && hasPersonalNames) {\n return false;\n }\n\n // At least one naming method must be provided\n if (!hasBusinessName && !hasPersonalNames) {\n return false;\n }\n\n return true;\n },\n {\n error: 'businessNameOrPersonalNamesRequired',\n path: ['business_name'],\n }\n );\n\n// Merchant Update Input Schema\nexport const MerchantUpdateInputSchema = z.object({\n business_name: z.string().max(200, { error: 'businessNameMaxLength' }).optional().nullable(),\n first_name: z.string().max(100, { error: 'firstNameMaxLength' }).optional().nullable(),\n last_name: z.string().max(100, { error: 'lastNameMaxLength' }).optional().nullable(),\n address: AddressSchema.optional().nullable(),\n});\n\n// Type exports\nexport type MerchantCreateInputType = z.infer<typeof MerchantCreateInputSchema>;\nexport type MerchantUpdateInputType = z.infer<typeof MerchantUpdateInputSchema>;\n","import * as z from 'zod';\n\nimport { AddressSchema } from './point-of-sales';\n\n// Enum options arrays\nexport const PEM_TYPE_OPTIONS = ['AP', 'SP', 'TM', 'PV'] as const;\n\n// PEM Data Schema\nexport const PemDataSchema = z.object({\n version: z.string().min(1, { error: 'fieldIsRequired' }),\n type: z.enum(PEM_TYPE_OPTIONS, {\n error: 'invalidPemType',\n }),\n});\n\n// PEM Create Input Schema\nexport const PemCreateInputSchema = z.object({\n merchant_uuid: z.string().min(1, { error: 'fieldIsRequired' }).uuid({ error: 'invalidUuid' }),\n address: AddressSchema.optional(),\n /* external_pem_data: PemDataSchema.optional(), */\n});\n\n// Type exports\nexport type PemDataType = z.infer<typeof PemDataSchema>;\nexport type PemCreateInputType = z.infer<typeof PemCreateInputSchema>;\n","import * as z from 'zod';\n\nimport { AddressSchema } from './point-of-sales';\n\n// Italian Fiscal ID validation regex (Codice Fiscale for individuals or Partita IVA for companies)\nconst FISCAL_ID_REGEX =\n /^([A-Z]{6}[0-9LMNPQRSTUV]{2}[ABCDEHLMPRST][0-9LMNPQRSTUV]{2}[A-Z][0-9LMNPQRSTUV]{3}[A-Z]|[0-9]{11})$/;\n\n// Supplier Create Input Schema\nexport const SupplierCreateInputSchema = z.object({\n fiscal_id: z\n .string()\n .min(1, { error: 'fieldIsRequired' })\n .regex(FISCAL_ID_REGEX, { error: 'invalidFiscalId' })\n .toUpperCase(),\n name: z.string().min(1, { error: 'fieldIsRequired' }).max(200, { error: 'nameMaxLength' }),\n address: AddressSchema.optional(),\n});\n\n// Supplier Update Input Schema\nexport const SupplierUpdateInputSchema = z.object({\n name: z.string().min(1, { error: 'fieldIsRequired' }).max(200, { error: 'nameMaxLength' }),\n address: AddressSchema.optional(),\n});\n\n// Type exports\nexport type SupplierCreateInputType = z.infer<typeof SupplierCreateInputSchema>;\nexport type SupplierUpdateInputType = z.infer<typeof SupplierUpdateInputSchema>;\n","import * as z from 'zod';\n\n// Journal Close Input Schema\nexport const JournalCloseInputSchema = z.object({\n closing_timestamp: z\n .string()\n .min(1, { error: 'fieldIsRequired' })\n .refine((val) => !isNaN(Date.parse(val)), {\n error: 'invalidDateFormat',\n }),\n reason: z.string().max(255, { error: 'reasonMaxLength' }).optional(),\n});\n\n// Type exports\nexport type JournalCloseInputType = z.infer<typeof JournalCloseInputSchema>;\n","import * as z from 'zod';\n\n// Daily Report Status Options\nexport const DAILY_REPORT_STATUS_OPTIONS = ['pending', 'sent', 'error'] as const;\n\n// Daily Report Status Schema\nexport const DailyReportStatusSchema = z.enum(DAILY_REPORT_STATUS_OPTIONS, {\n error: 'invalidDailyReportStatus',\n});\n\n// Daily Reports List Parameters Schema\nexport const DailyReportsParamsSchema = z.object({\n pem_serial_number: z.string().min(1, { error: 'fieldIsRequired' }).optional(),\n date_from: z\n .string()\n .refine((val) => !isNaN(Date.parse(val)), {\n error: 'invalidDateFormat',\n })\n .optional(),\n date_to: z\n .string()\n .refine((val) => !isNaN(Date.parse(val)), {\n error: 'invalidDateFormat',\n })\n .optional(),\n status: DailyReportStatusSchema.optional(),\n page: z.number().min(1, { error: 'pageMinValue' }).optional(),\n});\n\n// Type exports\nexport type DailyReportStatusType = z.infer<typeof DailyReportStatusSchema>;\nexport type DailyReportsParamsType = z.infer<typeof DailyReportsParamsSchema>;\n","import * as React from 'react';\n\nimport { ACubeSDK, ACubeSDKError, SDKConfig, SDKEvents, User } from '../';\n\nexport interface ACubeContextValue {\n sdk: ACubeSDK | null;\n user: User | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n isOnline: boolean;\n error: ACubeSDKError | null;\n pendingOperations: number;\n}\n\nconst ACubeContext = React.createContext<ACubeContextValue | undefined>(undefined);\n\nexport interface ACubeProviderProps {\n config: SDKConfig;\n children: React.ReactNode;\n onUserChanged?: (user: User | null) => void;\n onAuthError?: (error: ACubeSDKError) => void;\n onNetworkStatusChanged?: (online: boolean) => void;\n}\n\nexport function ACubeProvider({\n config,\n children,\n onUserChanged,\n onAuthError,\n onNetworkStatusChanged,\n}: ACubeProviderProps) {\n const [sdk, setSDK] = React.useState<ACubeSDK | null>(null);\n const [user, setUser] = React.useState<User | null>(null);\n const [isAuthenticated, setIsAuthenticated] = React.useState(false);\n const [isLoading, setIsLoading] = React.useState(true);\n const [isOnline, setIsOnline] = React.useState(true);\n const [error, setError] = React.useState<ACubeSDKError | null>(null);\n const [pendingOperations, setPendingOperations] = React.useState(0);\n\n React.useEffect(() => {\n let mounted = true;\n let sdkInstance: ACubeSDK | null = null;\n\n async function initializeSDK() {\n try {\n setIsLoading(true);\n setError(null);\n\n const events: SDKEvents = {\n onUserChanged: (newUser) => {\n if (mounted) {\n setUser(newUser);\n setIsAuthenticated(!!newUser);\n onUserChanged?.(newUser);\n }\n },\n onAuthError: (authError) => {\n if (mounted) {\n setError(authError);\n setUser(null);\n setIsAuthenticated(false);\n onAuthError?.(authError);\n }\n },\n onNetworkStatusChanged: (online) => {\n if (mounted) {\n setIsOnline(online);\n onNetworkStatusChanged?.(online);\n }\n },\n onOfflineOperationAdded: () => {\n if (mounted && sdkInstance) {\n setPendingOperations(sdkInstance.getOfflineManager().getPendingCount());\n }\n },\n onOfflineOperationCompleted: () => {\n if (mounted && sdkInstance) {\n setPendingOperations(sdkInstance.getOfflineManager().getPendingCount());\n }\n },\n };\n\n sdkInstance = new ACubeSDK(config, undefined, events);\n await sdkInstance.initialize();\n\n if (mounted) {\n setSDK(sdkInstance);\n setIsOnline(sdkInstance.isOnline());\n\n const authenticated = await sdkInstance.isAuthenticated();\n setIsAuthenticated(authenticated);\n\n if (authenticated) {\n const currentUser = await sdkInstance.getCurrentUser();\n setUser(currentUser);\n }\n\n setPendingOperations(sdkInstance.getOfflineManager().getPendingCount());\n }\n } catch (err) {\n if (mounted) {\n const sdkError =\n err instanceof ACubeSDKError\n ? err\n : new ACubeSDKError('UNKNOWN_ERROR', 'Failed to initialize SDK', err);\n setError(sdkError);\n }\n } finally {\n if (mounted) {\n setIsLoading(false);\n }\n }\n }\n\n initializeSDK();\n\n return () => {\n mounted = false;\n if (sdkInstance) {\n sdkInstance.destroy();\n }\n };\n }, [config, onUserChanged, onAuthError, onNetworkStatusChanged]);\n\n const contextValue: ACubeContextValue = {\n sdk,\n user,\n isAuthenticated,\n isLoading,\n isOnline,\n error,\n pendingOperations,\n };\n\n return <ACubeContext.Provider value={contextValue}>{children}</ACubeContext.Provider>;\n}\n\nexport function useACube(): ACubeContextValue {\n const context = React.useContext(ACubeContext);\n if (context === undefined) {\n throw new Error('useACube must be used within an ACubeProvider');\n }\n return context;\n}\n","import * as React from 'react';\n\nimport { ACubeSDKError, AuthCredentials, User } from '../../';\nimport { useACube } from '../context';\n\nexport interface UseAuthReturn {\n user: User | null;\n isAuthenticated: boolean;\n isLoading: boolean;\n error: ACubeSDKError | null;\n login: (credentials: AuthCredentials) => Promise<User | null>;\n logout: () => Promise<void>;\n clearError: () => void;\n}\n\nexport function useAuth(): UseAuthReturn {\n const { sdk, user, isAuthenticated } = useACube();\n const [isLoading, setIsLoading] = React.useState(false);\n const [error, setError] = React.useState<ACubeSDKError | null>(null);\n\n const login = React.useCallback(\n async (credentials: AuthCredentials): Promise<User | null> => {\n if (!sdk) {\n const authError = new ACubeSDKError('UNKNOWN_ERROR', 'SDK not initialized');\n setError(authError);\n return null;\n }\n\n try {\n setIsLoading(true);\n setError(null);\n\n const loggedInUser = await sdk.login(credentials);\n return loggedInUser;\n } catch (err) {\n const authError =\n err instanceof ACubeSDKError ? err : new ACubeSDKError('AUTH_ERROR', 'Login failed', err);\n setError(authError);\n return null;\n } finally {\n setIsLoading(false);\n }\n },\n [sdk]\n );\n\n const logout = React.useCallback(async (): Promise<void> => {\n if (!sdk) {\n const authError = new ACubeSDKError('UNKNOWN_ERROR', 'SDK not initialized');\n setError(authError);\n return;\n }\n\n try {\n setIsLoading(true);\n setError(null);\n\n await sdk.logout();\n } catch (err) {\n const authError =\n err instanceof ACubeSDKError ? err : new ACubeSDKError('AUTH_ERROR', 'Logout failed', err);\n setError(authError);\n } finally {\n setIsLoading(false);\n }\n }, [sdk]);\n\n const clearError = React.useCallback(() => {\n setError(null);\n }, []);\n\n return {\n user,\n isAuthenticated,\n isLoading,\n error,\n login,\n logout,\n clearError,\n };\n}\n"],"names":["DEFAULT_CONFIG"],"mappings":"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","x_google_ignoreList":[7]}