@plyaz/config 1.8.11 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/env.ts","../src/providers/alchemy.ts","../src/providers/oauth.ts","../src/providers/apiConfig.ts","../src/chains/contracts.ts","../src/chains/supportedChains.ts","../src/features.ts","../src/domains.ts","../src/locales.ts","../src/app.ts","../src/security.ts","../src/utils/string/constants.ts","../src/utils/collection/constants.ts","../src/utils/hash/constants.ts","../src/locale/iso.ts","../src/locale/formats.ts","../src/locale/phone.ts","../src/locale/address.ts","../src/locale/currencies.ts","../src/locale/countries.ts","../src/locale/languages.ts","../src/locale/timezone.ts","../src/locale/athlete_position.ts","../src/time/constants.ts","../src/math/constants.ts","../src/performance/index.ts","../src/network/constants.ts","../src/display/constants.ts","../src/db/constants.ts","../src/db/config.ts","../src/social.ts","../src/a11y/constants.ts","../src/errors/constants.ts","../src/logger/constants.ts","../src/api/environments.ts","../src/api/package/defaults.ts","../src/auth/constants.ts","../src/notifications/constants.ts","../src/payments/error-messages.ts","../src/payments/events.ts","../src/payments/gateway.ts","../src/payments/providers/stripe/constant.ts","../src/payments/providers/stripe/config.ts","../src/payments/validators.ts","../src/payments/routing/methods/ab-testing/ab-testing.ts","../src/payments/routing/methods/failover/strategies/priority-order.config.ts","../src/payments/routing/methods/failover/strategies/next-available.config.ts","../src/payments/routing/methods/failover/strategies/performance-based.config.ts","../src/payments/routing/methods/failover/strategies/load-balanced.config.ts","../src/payments/routing/methods/failover/strategies/geographic.config.ts","../src/payments/routing/methods/failover/failover-registry.ts","../src/payments/routing/methods/geographic/geographic.ts","../src/payments/routing/methods/performance/performance.ts","../src/payments/routing/methods/load-balancing/strategies/weighted.config.ts","../src/payments/routing/methods/load-balancing/strategies/round-robin.config.ts","../src/payments/routing/methods/load-balancing/strategies/least-connections.config.ts","../src/payments/routing/methods/load-balancing/strategies/performance-based.config.ts","../src/payments/routing/methods/load-balancing/strategies/custom.config.ts","../src/payments/routing/methods/load-balancing/load-balancing-registry.ts","../src/payments/routing/methods/cost-optimization/strategies/aggressive.config.ts","../src/payments/routing/methods/cost-optimization/strategies/balanced.config.ts","../src/payments/routing/methods/cost-optimization/strategies/conservative.config.ts","../src/payments/routing/methods/cost-optimization/strategies/targeted.config.ts","../src/payments/routing/methods/cost-optimization/cost-optimization-registry.ts","../src/payments/routing/provider-selection/amount-based-selection.ts","../src/payments/routing/provider-selection/currency-specific-providers.ts","../src/payments/routing/provider-selection/custom-rules.ts","../src/payments/routing/provider-selection/default-providers.ts","../src/payments/routing/provider-selection/method-specific-providers.ts","../src/payments/routing/provider-selection/region-specific-providers.ts","../src/payments/routing/provider-selection/time-based-selection.ts","../src/payments/routing/provider-selection/user-type-providers.ts","../src/storage/constants.ts","../src/storage/defaults.ts","../src/storage/validation.ts","../src/storage/mime-types.ts","../src/storage/categories.ts","../src/storage/chunked-upload.ts","../src/aws/constants.ts"],"names":["isServer","isDev","isProd","isTest","ALCHEMY_CONFIG","OAUTH_PROVIDERS","ENV_CONFIG","API_CONFIG","CONTRACTS","PROD_SUPPORTED_CHAINS","mainnet","STAGING_SUPPORTED_CHAINS","sepolia","DEV_SUPPORTED_CHAINS","FEATURES","DEFAULT_BACKEND_CONFIG","DEFAULT_FRONTEND_CONFIG","FILE_CHECK_INTERVAL_DEFAULT","FEATURE_FLAG_CACHE_TTL_DEFAULT","CACHE_CLEANUP_INTERVAL_DEFAULT","CACHE_MAX_SIZE_DEFAULT","CACHE_EVICTION_PERCENTAGE","FEATURE_FLAG_PROVIDERS","FEATURE_FLAG_FILE_FORMATS","FEATURE_FLAG_FILE_PATHS","FEATURE_FLAG_EVALUATION_REASONS","DOMAINS","DEFAULT_LOCALE","SUPPORTED_LOCALES","TIMEZONE","TIMEZONE_OFFSET","DEFAULT_COUNTRY","DEFAULT_CURRENCY","DEFAULT_LANGUAGE","LANDING_PAGE_APP","WEB_APP","SECURITY","STRING_CONSTANTS","FORMAT_CONSTANTS","COLLECTION_CONSTANTS","FNV_CONSTANTS","HASH_SEED_CONSTANTS","HASH_DISTRIBUTION_CONSTANTS","SHA_CONSTANTS","MD5_CONSTANTS","HASH_ENCODING","HASH_ALGORITHMS","MURMUR_CONSTANTS","CRC_CONSTANTS","ISO_STANDARDS","LOCALE_FORMATS","DATE_FORMATS","TEXT_DIRECTION","PHONE_FORMATS","PHONE_PATTERNS","ADDRESS_FORMATS","ADDRESS_FIELDS","CURRENCY_CODES","CURRENCY_INFO","COUNTRY_CODES","COUNTRY_CODES_SCOPED","COUNTRY_NAMES","COUNTRY_CALLING_CODES","COUNTRY_REGIONS","COUNTRY_REGIONS_DETAILED","LOCALE_REGIONS","LOCALE_REGIONS_DETAILED","TIMEZONE_REGIONS","ATHLETE_POSITIONS","DAYS_IN_WEEK","EARLY_MORNING_HOURS","TIME_CONSTANTS","COUNTRY_TIMEZONES","ALL_COUNTRY_TIMEZONES","DAYS_OF_WEEK","_","i","HOURS_OF_DAY","NUMBER_SYSTEM","MATH_CONSTANTS","MULTIPLIERS","NUMERIC_CONSTANTS","PERFORMANCE_CONSTANTS","NETWORK_CONSTANTS","RTT_THRESHOLDS","SPEED_THRESHOLDS","NETWORK_SCORES","NETWORK_TIMEOUTS","CACHE_TTL","CACHE_STALE","DEDUPE_TIME","RETRY_ATTEMPTS","RETRY_DELAYS","RETRY_BACKOFF","BATCH_SIZES","PAGE_SIZES","DISPLAY_CONSTANTS","CHAR_CODES","NUMERIX","dynamicPoolDefaultConfig","SOCIAL_LINKS","PRODUCT_LINKS","BLOG","A11Y_CONSTANTS","ARIA_ROLES","ARIA_ATTRIBUTES","KEYBOARD_CODES","ANNOUNCEMENT_PRIORITY","FOCUS_TRAP","ERRORS_CODES","BASE_ERRORS_RESPONSE","DEFAULT_ERROR_EVENT_SCOPES","LOGGER_LEVELS","SENSITIVE_DATA","LOGGER_TRANSPORT_CONFIGURATION","PRODUCTION_CONFIG","STAGING_CONFIG","DEVELOPMENT_CONFIG","DEFAULT_API_CONFIG","DEFAULT_API_CLIENT_OPTIONS","SUPABASE_CONFIG","CLERK_PUBLISHABLE_KEY","SIZE_25_MB","SIZE_30_MB","DEFAULT_NOTIFICATION_CATEGORY","NOTIFICATION_CATEGORIES","RETRY_CONFIG","ATTACHMENT_CONFIG","CIRCUIT_BREAKER_CONFIG","QUEUE_CONFIG","RATE_LIMIT_CONFIG","TEMPLATE_CONFIG","SMS_CONFIG","NOTIFICATION_CONFIG","LOGGING_CONFIG","HEALTH_CHECK_CONFIG","NOTIFICATION_PACKAGE_CONFIG","DEFAULT_HMAC_ALGORITHM","DEFAULT_ENVIRONMENT","THRESHOLDS","SENSITIVE_KEYS","RISK_SCORE","LOG_LEVELS","REDACTED","PAYMENT_ERROR_MESSAGES","PAYMENT_ALERT_SEVERITY","ERROR_SEVERITY","PROCESSING_ERROR_MESSAGES","WEBHOOK_CONSTANTS","RECOVERY_STEPS","REFUND_ERROR_MESSAGES","DEFAULT_REFUND_LEVELS","FACTORY_MESSAGES","PAYLOAD_KEYS","STRIPE_ERROR_TYPES","PROVIDER_ERROR_MESSAGES","SECURITY_ERROR_MESSAGES","DEFAULT_PAYEMNT_PRIORITY","DEFAULT_URGENT","DEFAULT_MAX_LISTENERS","DEFAULT_HANDLER_TIMEOUT_MS","DEFAULT_EVENT_COUNT","DEFAULT_SUCCESS_THRESHOLD","DEFAULT_PARTIAL_SUCCESS_THRESHOLD","EVENT_DEFAULTS","EVENT_COMPONENT","EVENT_ERROR_CODE","EVENT_ERROR_MESSAGE","EVENT_ENVIRONMENT","PHASE_NONE","PHASE_CAPTURING","PHASE_AT_TARGET","PHASE_BUBBLING","EVENT_PHASE","EVENT_META_KEY","EVENT_SOURCE_FIELD","EVENT_RESULT_STATUS","EmptyArray","__name","CurrentTimestamp","SETTLED_PROMISE_STATUS","EVENT_NORMALIZER_MESSAGES","field","DEFAULT_RETRY_DELAY_MS","MAX_CIRCUIT_OPEN_MS","DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD","FALLBACK_REASON","FALLBACK_NEXT_STEPS","RISK_LEVEL","SECURITY_FLAGS","CUSTOM_RULE_OPERATER","PAYMENT_GATEWAY_ERROR_MESSAGE","STRIPE_API_VERSION","STRIPE_MAPPING_VERSION","ZERO_AMOUNT","DEFAULT_PROCESSING_RATE","DEFAULT_PLATFORM_RATE","DEFAULT_CROSS_BORDER_RATE","DEFAULT_PRIORITY","FIXED_FEES","NEXT_STEP_EXPECTED_UPDATE_IN","STRIPE_CONFIDENCE_HIGH","STRIPE_PRIORITY_HIGH","STRIPE_CONFIDENCE_MEDIUM","STRIPE_PRIORITY_MEDIUM","AMOUNT_DECIMALS","AMOUNT_DIVISOR","UNIX_TIMESTAMP_MULTIPLIER","TIMESTAMP_FALLBACK","NEXT_STEP_USER_ACTION","NEXT_STEP_SYSTEM_ACTION","STRIPE_EVENT_TYPE","STRIPE_PAYMENT_INTENT_STATUS","DEFAULT_PROCESSING_TIME","DEFAULT_SETTLEMENT_TIME","STRIPE_DATA_PATHS","PAYMENT_OPERATION","STRIPE_MESSAGES","stripeConfig","PAYMENT_PROVIDER_TYPE","PAYMENT_METHOD","HTTP_STATUS","SUPPORTED_CURRENCIES","VALIDATION_MESSAGES","VALIDATOR_NAMES","CORE_FIELDS","VALID_BILLING_CYCLES","VALID_RISK_LEVELS","VALID_RECURRENCE_FREQUENCIES","MIN_POSITIVE_AMOUNT","CURRENCY_CODE_LENGTH","ABTesting","ROUTING_STRATEGY","COST_OPTIMIZATION_STRATEGY","FAILOVER_PRIORITY_ORDER","FAIL_OVER_STRATEGY","FAILOVER_NEXT_AVAILABLE","FAILOVER_PERFORMANCE_BASED","FAILOVER_LOAD_BALANCED","FAILOVER_GEOGRAPHIC","FAILOVER_REGISTRY","Geographic","REGULATORY_FRAMEWORK","TRANSACTION_TYPE","Performance","PERFORMANCE_METRIC_TYPE","WeightedLoadBalancing","LOAD_BALANCING_STRATEGY","RoundRobinLoadBalancing","LeastConnectionsLoadBalancing","PerformanceBasedLoadBalancing","CustomLoadBalancing","LoadBalancingRegistry","COST_OPTIMIZATION_AGGRESSIVE","COST_OPTIMIZATION_BALANCED","COST_OPTIMIZATION_CONSERVATIVE","COST_OPTIMIZATION_TARGETED","COST_OPTIMIZATION","AMOUNT_BASED_SELECTION","CurrencySpecificProviders","CUSTOM_RULES","DEFAULT_PROVIDERS","MethodSpecificProviders","regionSpecificProviders","TIME_BASED_SELECTION","UserTypeSelection","USER_TYPE","SIZE_5_MB","SIZE_10_MB","SIZE_50_MB","SIZE_100_MB","SIZE_500_MB","SIZE_1_GB","FILE_VALIDATION_CONFIG","STORAGE_RETRY_CONFIG","RETRY_STRATEGY","PATH_GENERATION_CONFIG","PATH_GENERATION_STRATEGY","STORAGE_QUEUE_CONFIG","STORAGE_QUEUE_PRIORITY","ADAPTER_CONFIG","ADAPTER_HEALTH_STATUS","UPLOAD_CONFIG","FILE_ACCESS_LEVEL","DOWNLOAD_CONFIG","MEDIA_PROCESSING_CONFIG","VIRUS_SCAN_CONFIG","COMPLIANCE_CONFIG","STORAGE_TEMPLATE_CONFIG","SHARE_LINK_CONFIG","TTL_CONFIG","CORS_CONFIG","AUDIT_CONFIG","CDN_CONFIG","MONITORING_CONFIG","CLOUDFLARE_R2_CONFIG","SUPABASE_STORAGE_CONFIG","STORAGE_PACKAGE_CONFIG","DEFAULT_RETENTION_POLICY","STORAGE_JURISDICTION","STORAGE_REGULATORY_FRAMEWORK","DEFAULT_COMPLIANCE_CONFIG","PRESET_RETENTION_POLICIES","BUILT_IN_PRESETS","STORAGE_DEVICE_TYPE","FILE_CATEGORY","DEFAULT_VARIANTS_BY_CATEGORY","DEVICE_SPECIFIC_VARIANT_OVERRIDES","MINIMUM_VARIANTS_BY_CATEGORY","STANDARD_VARIANT_DEFINITIONS","STORAGE_VARIANT_NAME","STORAGE_FILE_SIZE_LIMITS","STORAGE_DEFAULT_VALIDATION_CONFIG","BUCKET_PURPOSE","getStorageValidationRulesForPurpose","purpose","config","validationConfig","purposeRules","defaultRules","STORAGE_OUTPUT_FORMAT_TO_EXTENSION","STORAGE_OUTPUT_FORMAT_TO_MIME_TYPE","getStorageExtensionForFormat","format","getStorageMimeTypeForFormat","getStorageFormatInfo","STORAGE_RETENTION_DAYS","STORAGE_TTL_CONSTANTS","STORAGE_CATEGORIES","STORAGE_VISIBILITY","STORAGE_CHUNK_MULTIPLIERS","STORAGE_CHUNK_SIZE","STORAGE_FILE_SIZE_THRESHOLDS","shouldUseStorageChunkedUpload","file","threshold","getStorageOptimalChunkSize","totalSize","AWS_DEFAULT_REGIONS","AWS_SERVICE_NAMES","AWS_SERVICE_HOSTS","AWS_CLOUDFRONT_CONFIG","AWS_S3_CONFIG","getAWSServiceEndpoint","service","region"],"mappings":"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K,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MAGL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAA,CAAM,MAAA,CACN,KAAM,MACR,CAAA,CAKaC,EAAAA,CAAgB,CAI3B,qBAAA,CAAuB,CAAC,KAAA,CAAO,KAAA,CAAO,MAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAK,CAAA,CAKvE,wBAAA,CAA0B,CAAC,KAAA,CAAO,MAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAK,EAKnE,kBAAA,CAAoB,CAAC,KAAA,CAAO,KAAA,CAAO,MAAO,KAAA,CAAO,KAAK,CAAA,CAKtD,aAAA,CAAe,CAAC,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,MAAO,KAAK,CAAA,CAKjD,sBAAA,CAAwB,CAC1B,EC7IO,IAAMC,CAAAA,CAAgB,CAE3B,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,C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AI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CA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","file":"index.cjs","sourcesContent":["export const isServer = typeof window === 'undefined';\nexport const isDev = globalThis.process.env.NODE_ENV === 'development';\nexport const isProd = globalThis.process.env.NODE_ENV === 'production';\nexport const isTest = globalThis.process.env.NODE_ENV === 'test';\n","/**\n * Alchemy blockchain provider configuration\n */\nexport const ALCHEMY_CONFIG = {\n /**\n * Alchemy API key from environment\n */\n apiKey: globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY!,\n\n /**\n * RPC URLs for different blockchain networks\n */\n rpcUrls: {\n /**\n * Ethereum mainnet RPC URL\n */\n ethereum: `https://eth-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Polygon mainnet RPC URL\n */\n polygon: `https://polygon-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Arbitrum mainnet RPC URL\n */\n arbitrum: `https://arb-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Optimism mainnet RPC URL\n */\n optimism: `https://opt-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Base mainnet RPC URL\n */\n base: `https://base-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Solana mainnet RPC URL\n */\n solana: `https://solana-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n },\n};\n","/**\n * OAuth provider configurations\n */\nexport const OAUTH_PROVIDERS = {\n /**\n * Google OAuth configuration\n */\n google: {\n /**\n * Google OAuth client ID\n */\n clientId: globalThis.process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID!,\n /**\n * Google OAuth client secret\n */\n clientSecret: globalThis.process.env.GOOGLE_CLIENT_SECRET!,\n /**\n * Google OAuth redirect URI\n */\n redirectUri: globalThis.process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URI!,\n /**\n * Google OAuth permission scopes\n */\n scopes: ['openid', 'profile', 'email'],\n },\n\n /**\n * Discord OAuth configuration\n */\n discord: {\n /**\n * Discord OAuth client ID\n */\n clientId: globalThis.process.env.NEXT_PUBLIC_DISCORD_CLIENT_ID!,\n /**\n * Discord OAuth client secret\n */\n clientSecret: globalThis.process.env.DISCORD_CLIENT_SECRET!,\n /**\n * Discord OAuth redirect URI\n */\n redirectUri: globalThis.process.env.NEXT_PUBLIC_DISCORD_REDIRECT_URI!,\n /**\n * Discord OAuth permission scopes\n */\n scopes: ['identify', 'email'],\n },\n\n /**\n * Facebook OAuth configuration\n */\n facebook: {\n /**\n * Facebook OAuth client ID\n */\n clientId: globalThis.process.env.NEXT_PUBLIC_FACEBOOK_CLIENT_ID!,\n /**\n * Facebook OAuth client secret\n */\n clientSecret: globalThis.process.env.FACEBOOK_CLIENT_SECRET!,\n /**\n * Facebook OAuth redirect URI\n */\n redirectUri: globalThis.process.env.NEXT_PUBLIC_FACEBOOK_REDIRECT_URI!,\n /**\n * Facebook OAuth permission scopes\n */\n scopes: ['public_profile', 'email'],\n },\n} as const;\n","/**\n * API Client Provider Configuration\n * Environment and API client configuration constants\n */\n\n/**\n * Environment configuration for API client\n */\nexport const ENV_CONFIG = {\n /**\n * Current Node.js environment (development, production, test)\n */\n env: globalThis.process.env.NODE_ENV as 'development' | 'production',\n \n /**\n * Public API key from environment variables\n */\n apiKey: globalThis.process.env.NEXT_PUBLIC_API_KEY,\n};\n\n/**\n * API client configuration with encryption settings\n */\nexport const API_CONFIG = {\n /**\n * Base URL for API requests\n */\n baseURL: globalThis.process.env.NEXT_PUBLIC_API_URL ?? '/api',\n \n /**\n * Encryption configuration for secure API communication\n */\n encryption: {\n /**\n * Whether encryption is enabled\n */\n enabled: true,\n \n /**\n * Encryption key configuration\n */\n key: {\n /**\n * Key identifier for production environment\n */\n id: 'prod-key-v1',\n \n /**\n * Encryption key from environment variables\n */\n key: globalThis.process.env.ENCRYPTION_KEY ?? '',\n \n /**\n * Encryption algorithm (AES-GCM)\n */\n algorithm: 'AES-GCM' as const,\n \n /**\n * Key format specification\n */\n format: 'raw' as const\n }\n },\n};","/**\n * Smart contract addresses for different networks\n */\nexport const CONTRACTS = {\n /**\n * NFT Manager contract addresses\n */\n nftManager: {\n /**\n * Read-only contract addresses\n */\n read: {\n /**\n * Arbitrum network NFT Manager address\n */\n arbitrum: '',\n },\n /**\n * Write-enabled contract addresses\n */\n write: {\n /**\n * Arbitrum network NFT Manager address\n */\n arbitrum: '',\n },\n },\n\n /**\n * Token Manager contract addresses\n */\n tokenManager: {\n /**\n * Read-only contract addresses\n */\n read: {\n /**\n * Arbitrum network Token Manager address\n */\n arbitrum: '',\n },\n /**\n * Write-enabled contract addresses\n */\n write: {\n /**\n * Arbitrum network Token Manager address\n */\n arbitrum: '',\n },\n },\n} as const;\n","import { mainnet, sepolia } from 'viem/chains';\n\n/**\n * Blockchain chains supported in production environment\n */\nexport const PROD_SUPPORTED_CHAINS = {\n /**\n * Ethereum mainnet\n */\n ethereum: mainnet,\n} as const;\n\n/**\n * Blockchain chains supported in staging environment\n */\nexport const STAGING_SUPPORTED_CHAINS = {\n /**\n * Ethereum mainnet\n */\n ethereum: mainnet,\n /**\n * Sepolia testnet (Ethereum)\n */\n sepolia,\n} as const;\n\n/**\n * Blockchain chains supported in development environment\n */\nexport const DEV_SUPPORTED_CHAINS = {\n /**\n * Sepolia testnet (Ethereum)\n */\n sepolia,\n} as const;\n","/**\n * Feature Flag Constants\n *\n */\n\nimport { isDev } from './env';\n\n/**\n * Feature flags for authentication providers and other features\n */\nexport const FEATURES = {\n /**\n * Enable Google OAuth authentication\n */\n AUTH_GOOGLE: true,\n\n /**\n * Enable Discord OAuth authentication (dev only)\n */\n AUTH_DISCORD: isDev,\n\n /**\n * Enable Facebook OAuth authentication\n */\n AUTH_FACEBOOK: false,\n\n /**\n * Enable GitHub OAuth authentication\n */\n AUTH_GITHUB: true,\n} as const satisfies Record<string, boolean>;\n\n/**\n * Default backend configuration for feature flags.\n * Optimized for server-side usage with reasonable defaults.\n */\nexport const DEFAULT_BACKEND_CONFIG = {\n provider: 'database',\n isCacheEnabled: true,\n cacheTtl: 300, // 5 minutes\n refreshInterval: 60, // 1 minute auto-refresh\n shouldFallbackToDefaults: true,\n isLoggingEnabled: globalThis.process.env.NODE_ENV === 'development',\n} as const;\n\n/**\n * Default frontend configuration for feature flags.\n * Optimized for client-side usage with reasonable defaults.\n */\nexport const DEFAULT_FRONTEND_CONFIG = {\n provider: 'memory',\n isCacheEnabled: true,\n cacheTtl: 300, // 5 minutes\n refreshInterval: 0, // No auto-refresh for frontend\n shouldFallbackToDefaults: true,\n isLoggingEnabled: false, // Disabled in production\n} as const;\n\n/**\n * Default file check interval for file watcher debouncing (in milliseconds)\n * Prevents rapid reloads when files are saved multiple times quickly\n * @default 100\n */\nexport const FILE_CHECK_INTERVAL_DEFAULT = 100;\n\n/**\n * Default cache TTL for feature flags (in seconds)\n * @default 300 (5 minutes)\n */\nexport const FEATURE_FLAG_CACHE_TTL_DEFAULT = 300;\n\n/**\n * Default cleanup interval for memory cache (in milliseconds)\n * @default 60000 (1 minute)\n */\nexport const CACHE_CLEANUP_INTERVAL_DEFAULT = 60000;\n\n/**\n * Default maximum cache size for memory strategy\n * @default 1000\n */\nexport const CACHE_MAX_SIZE_DEFAULT = 1000;\n\n/**\n * Percentage of cache entries to evict when cache is full\n * @default 0.1 (10%)\n */\nexport const CACHE_EVICTION_PERCENTAGE = 0.1;\n\n/**\n * Feature flag provider types\n */\nexport const FEATURE_FLAG_PROVIDERS = {\n MEMORY: 'memory',\n FILE: 'file',\n REDIS: 'redis',\n API: 'api',\n DATABASE: 'database',\n} as const;\n\n/**\n * Feature flag file formats\n */\nexport const FEATURE_FLAG_FILE_FORMATS = {\n JSON: 'json',\n YAML: 'yaml',\n} as const;\n\n/**\n * Default file paths for feature flag configuration\n */\nexport const FEATURE_FLAG_FILE_PATHS = {\n DEFAULT: 'src/config/feature-provider.json',\n JSON_EXAMPLE: 'src/config/feature-provider.json.example',\n YAML_EXAMPLE: 'src/config/feature-provider.yaml.example',\n} as const;\n\n/**\n * Feature flag evaluation reasons\n */\nexport const FEATURE_FLAG_EVALUATION_REASONS = {\n DEFAULT: 'default',\n OVERRIDE: 'override',\n RULE_MATCH: 'rule_match',\n FLAG_DISABLED: 'flag_disabled',\n ERROR: 'error',\n} as const;\n","/**\n * Domain and URL configuration\n */\nexport const DOMAINS = {\n /**\n * Main application URL\n */\n app: 'https://plyaz.co.uk',\n\n /**\n * API endpoint URL from environment\n */\n api: globalThis.process.env.NEXT_PUBLIC_API_URL!,\n} as const;\n","/**\n * Default locale for the application (ISO 639-1 language code)\n */\nexport const DEFAULT_LOCALE = 'en';\n\n/**\n * List of supported locale codes for the application\n */\nexport const SUPPORTED_LOCALES = ['en', 'es', 'pt'] as const;\n\n/**\n * Default timezone for the application (IANA timezone identifier)\n */\nexport const TIMEZONE = 'America/Sao_Paulo';\n\n/**\n * Default timezone offset from UTC\n */\nexport const TIMEZONE_OFFSET = -3; // UTC-3 for Brasília Time (BRT)\n\n/**\n * Default country code (ISO 3166-1 alpha-2)\n */\nexport const DEFAULT_COUNTRY = 'BR';\n\n/**\n * Default currency code (ISO 4217)\n */\nexport const DEFAULT_CURRENCY = 'BRL';\n\n/**\n * Default language code (ISO 639-1)\n */\nexport const DEFAULT_LANGUAGE = 'en';\n\n/**\n * Type for supported locales\n */\nexport type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];\n","import { DEFAULT_LOCALE, SUPPORTED_LOCALES } from './locales';\n\n/**\n * Landing page application configuration\n */\nexport const LANDING_PAGE_APP = {\n /**\n * Application name\n */\n NAME: 'Plyaz',\n\n /**\n * Application version\n */\n VERSION: '1.0.0',\n\n /**\n * Default locale for the application\n */\n DEFAULT_LOCALE,\n\n /**\n * List of supported locales\n */\n SUPPORTED_LOCALES,\n} as const;\n\n/**\n * Web application configuration\n */\nexport const WEB_APP = {\n /**\n * Application name\n */\n NAME: 'Plyaz The App',\n\n /**\n * Application version\n */\n VERSION: '1.0.0',\n\n /**\n * Default locale for the application\n */\n DEFAULT_LOCALE,\n\n /**\n * List of supported locales\n */\n SUPPORTED_LOCALES,\n} as const;\n","/**\n * Security and compliance configuration\n */\nexport const SECURITY = {\n /**\n * ISO country codes for blocked regions (sanctions/compliance)\n * KP: North Korea, SY: Syria, IR: Iran, CU: Cuba, SD: Sudan, SO: Somalia\n * UA-CR: Ukraine-Crimea, UA-DP: Ukraine-Donetsk, UA-LU: Ukraine-Luhansk\n */\n BLOCKED_REGIONS: ['KP', 'SY', 'IR', 'CU', 'SD', 'SO', 'UA-CR', 'UA-DP', 'UA-LU'],\n} as const;\n","/**\n * String Manipulation Constants\n *\n * Constants used for string generation, manipulation,\n * and UUID-related operations.\n *\n * @module utils/string/constants\n */\n\n/**\n * String generation and manipulation constants\n */\nexport const STRING_CONSTANTS = {\n /**\n * Starting position for random string extraction\n */\n RANDOM_STRING_START: 2,\n\n /**\n * Length of random string segment\n */\n RANDOM_STRING_LENGTH: 9,\n\n /**\n * Multiplier for UUID random value generation\n */\n UUID_RANDOM_MULTIPLIER: 16,\n\n /**\n * Hexadecimal mask for UUID generation\n */\n UUID_HEX_MASK: 0x3,\n\n /**\n * OR value for UUID hexadecimal operations\n */\n UUID_HEX_OR_VALUE: 0x8,\n} as const;\n\n/**\n * Formatting and serialization constants\n */\nexport const FORMAT_CONSTANTS = {\n /**\n * Default indentation for JSON stringification (spaces)\n */\n JSON_INDENT_SPACES: 2,\n\n /**\n * Default indentation for code formatting (spaces)\n */\n CODE_INDENT_SPACES: 2,\n\n /**\n * Tab size in spaces\n */\n TAB_SIZE: 4,\n\n /**\n * Maximum line length for code formatting\n */\n MAX_LINE_LENGTH: 80,\n\n /**\n * Maximum line length for prettier\n */\n PRETTIER_LINE_WIDTH: 100,\n\n /**\n * Default encoding for text files\n */\n DEFAULT_ENCODING: 'utf-8',\n\n /**\n * Line endings\n */\n LINE_ENDING_LF: '\\n',\n LINE_ENDING_CRLF: '\\r\\n',\n\n /**\n * Common file extensions\n */\n EXTENSION_JSON: '.json',\n EXTENSION_JS: '.js',\n EXTENSION_TS: '.ts',\n EXTENSION_TSX: '.tsx',\n EXTENSION_JSX: '.jsx',\n EXTENSION_CSS: '.css',\n EXTENSION_SCSS: '.scss',\n EXTENSION_MD: '.md',\n EXTENSION_YML: '.yml',\n EXTENSION_YAML: '.yaml',\n\n /**\n * Quote styles\n */\n SINGLE_QUOTE: \"'\",\n DOUBLE_QUOTE: '\"',\n BACKTICK: '`',\n\n /**\n * Common separators\n */\n COMMA: ',',\n SEMICOLON: ';',\n COLON: ':',\n DOT: '.',\n SLASH: '/',\n BACKSLASH: '\\\\',\n UNDERSCORE: '_',\n HYPHEN: '-',\n PIPE: '|',\n SPACE: ' ',\n EMPTY_STRING: '',\n\n /**\n * Whitespace characters\n */\n TAB: '\\t',\n NEWLINE: '\\n',\n CARRIAGE_RETURN: '\\r',\n FORM_FEED: '\\f',\n VERTICAL_TAB: '\\v',\n\n /**\n * Common brackets\n */\n OPEN_PAREN: '(',\n CLOSE_PAREN: ')',\n OPEN_BRACKET: '[',\n CLOSE_BRACKET: ']',\n OPEN_BRACE: '{',\n CLOSE_BRACE: '}',\n OPEN_ANGLE: '<',\n CLOSE_ANGLE: '>',\n} as const;\n\n/**\n * Type for string constant values\n */\nexport type StringConstant = (typeof STRING_CONSTANTS)[keyof typeof STRING_CONSTANTS];\n\n/**\n * Type for format constant values\n */\nexport type FormatConstant = (typeof FORMAT_CONSTANTS)[keyof typeof FORMAT_CONSTANTS];\n","/**\n * Collection and Array Constants\n *\n * Constants for array operations, pagination,\n * and collection manipulation.\n *\n * @module utils/collection/constants\n */\n\n/**\n * Array and collection operation constants\n */\nexport const COLLECTION_CONSTANTS = {\n /**\n * Center point for array splitting (50%)\n */\n ARRAY_SPLIT_CENTER: 0.5,\n\n /**\n * Default page size for pagination\n */\n DEFAULT_PAGE_SIZE: 10,\n\n /**\n * Default maximum number of retries for operations\n */\n DEFAULT_MAX_RETRIES: 3,\n\n /**\n * Constant for three items (used in various contexts)\n */\n THREE_ITEMS: 3,\n} as const;\n\n/**\n * Type for collection constant values\n */\nexport type CollectionConstant = (typeof COLLECTION_CONSTANTS)[keyof typeof COLLECTION_CONSTANTS];\n","/**\n * Hash Algorithm Constants\n *\n * Constants used for various hash algorithms including FNV-1a,\n * SHA, and other cryptographic operations.\n *\n * @module utils/hash/constants\n */\n\n/**\n * FNV (Fowler-Noll-Vo) Hash Algorithm Constants\n *\n * FNV-1a is a non-cryptographic hash function created by Glenn Fowler,\n * Landon Curt Noll, and Kiem-Phong Vo. It's designed to be fast while\n * maintaining a low collision rate.\n */\nexport const FNV_CONSTANTS = {\n /**\n * FNV-1a 32-bit prime number\n * Used as the multiplication factor in the hash algorithm\n * Decimal: 16777619\n */\n FNV_32_PRIME: 0x01000193,\n\n /**\n * FNV-1a 32-bit offset basis\n * Initial hash value for FNV-1a 32-bit\n * Decimal: 2166136261\n */\n FNV_32_OFFSET: 0x811c9dc5,\n\n /**\n * FNV-1a 64-bit prime number (as BigInt)\n * Used for 64-bit hash calculations\n * Decimal: 1099511628211\n */\n FNV_64_PRIME: BigInt('0x100000001b3'),\n\n /**\n * FNV-1a 64-bit offset basis (as BigInt)\n * Initial hash value for FNV-1a 64-bit\n * Decimal: 14695981039346656037\n */\n FNV_64_OFFSET: BigInt('0xcbf29ce484222325'),\n\n /**\n * Mask for 32-bit operations\n */\n MASK_32: 0xffffffff,\n\n /**\n * Number of bits for 32-bit hash\n */\n BITS_32: 32,\n\n /**\n * Number of bits for 64-bit hash\n */\n BITS_64: 64,\n} as const;\n\n/**\n * Hash Seed Constants\n *\n * Constants for deterministic random seed generation\n */\nexport const HASH_SEED_CONSTANTS = {\n /**\n * Maximum safe seed value for 31-bit positive integer\n * Used for compatibility with libraries expecting positive signed 32-bit integers\n * Value: 2^31 - 1 = 2147483647\n */\n MAX_SAFE_SEED: 0x7fffffff,\n\n /**\n * Maximum 32-bit unsigned integer\n * Value: 2^32 - 1 = 4294967295\n */\n MAX_UINT32: 0xffffffff,\n} as const;\n\n/**\n * Hash Distribution Constants\n *\n * Constants for hash distribution and bucketing\n */\nexport const HASH_DISTRIBUTION_CONSTANTS = {\n /**\n * Default number of buckets for hash distribution\n */\n DEFAULT_BUCKET_COUNT: 10,\n\n /**\n * Default total buckets for percentage-based distribution\n * Same as MATH_CONSTANTS.PERCENTAGE_MAX for consistency\n */\n DEFAULT_PERCENTAGE_BUCKETS: 100,\n\n /**\n * Bit shift amount for simple hash algorithms\n * Used in polynomial rolling hash\n */\n HASH_SHIFT: 5,\n} as const;\n\n/**\n * SHA (Secure Hash Algorithm) constants\n */\nexport const SHA_CONSTANTS = {\n /**\n * SHA-1 output length in bytes\n */\n SHA1_LENGTH: 20,\n\n /**\n * SHA-256 output length in bytes\n */\n SHA256_LENGTH: 32,\n\n /**\n * SHA-384 output length in bytes\n */\n SHA384_LENGTH: 48,\n\n /**\n * SHA-512 output length in bytes\n */\n SHA512_LENGTH: 64,\n\n /**\n * SHA block size in bytes\n */\n SHA_BLOCK_SIZE: 64,\n\n /**\n * SHA-512 block size in bytes\n */\n SHA512_BLOCK_SIZE: 128,\n} as const;\n\n/**\n * MD5 hash algorithm constants\n */\nexport const MD5_CONSTANTS = {\n /**\n * MD5 output length in bytes\n */\n MD5_LENGTH: 16,\n\n /**\n * MD5 block size in bytes\n */\n MD5_BLOCK_SIZE: 64,\n} as const;\n\n/**\n * Hash encoding formats\n */\nexport const HASH_ENCODING = {\n /**\n * Hexadecimal encoding\n */\n HEX: 'hex',\n\n /**\n * Base64 encoding\n */\n BASE64: 'base64',\n\n /**\n * Base64 URL-safe encoding\n */\n BASE64URL: 'base64url',\n\n /**\n * Binary encoding\n */\n BINARY: 'binary',\n\n /**\n * UTF-8 encoding\n */\n UTF8: 'utf8',\n} as const;\n\n/**\n * Hash algorithm names\n */\nexport const HASH_ALGORITHMS = {\n /**\n * MD5 algorithm (deprecated for security, use only for checksums)\n */\n MD5: 'md5',\n\n /**\n * SHA-1 algorithm (deprecated for security)\n */\n SHA1: 'sha1',\n\n /**\n * SHA-256 algorithm\n */\n SHA256: 'sha256',\n\n /**\n * SHA-384 algorithm\n */\n SHA384: 'sha384',\n\n /**\n * SHA-512 algorithm\n */\n SHA512: 'sha512',\n\n /**\n * SHA3-256 algorithm\n */\n SHA3_256: 'sha3-256',\n\n /**\n * SHA3-384 algorithm\n */\n SHA3_384: 'sha3-384',\n\n /**\n * SHA3-512 algorithm\n */\n SHA3_512: 'sha3-512',\n\n /**\n * BLAKE2b algorithm\n */\n BLAKE2B: 'blake2b',\n\n /**\n * BLAKE2s algorithm\n */\n BLAKE2S: 'blake2s',\n\n /**\n * FNV-1a 32-bit algorithm\n */\n FNV1A_32: 'fnv1a-32',\n\n /**\n * FNV-1a 64-bit algorithm\n */\n FNV1A_64: 'fnv1a-64',\n} as const;\n\n/**\n * Murmur hash constants\n */\nexport const MURMUR_CONSTANTS = {\n /**\n * MurmurHash3 32-bit seed\n */\n MURMUR3_32_SEED: 0,\n\n /**\n * MurmurHash3 32-bit c1 constant\n */\n MURMUR3_32_C1: 0xcc9e2d51,\n\n /**\n * MurmurHash3 32-bit c2 constant\n */\n MURMUR3_32_C2: 0x1b873593,\n\n /**\n * MurmurHash3 32-bit r1 rotation\n */\n MURMUR3_32_R1: 15,\n\n /**\n * MurmurHash3 32-bit r2 rotation\n */\n MURMUR3_32_R2: 13,\n\n /**\n * MurmurHash3 32-bit m constant\n */\n MURMUR3_32_M: 5,\n\n /**\n * MurmurHash3 32-bit n constant\n */\n MURMUR3_32_N: 0xe6546b64,\n} as const;\n\n/**\n * CRC (Cyclic Redundancy Check) constants\n */\nexport const CRC_CONSTANTS = {\n /**\n * CRC-32 polynomial\n */\n CRC32_POLYNOMIAL: 0xedb88320,\n\n /**\n * CRC-32 initial value\n */\n CRC32_INITIAL: 0xffffffff,\n\n /**\n * CRC-32 XOR output\n */\n CRC32_XOR_OUTPUT: 0xffffffff,\n\n /**\n * CRC-16 polynomial\n */\n CRC16_POLYNOMIAL: 0xa001,\n\n /**\n * CRC-16 initial value\n */\n CRC16_INITIAL: 0x0000,\n} as const;\n\n/**\n * Type exports\n */\nexport type FnvConstant = (typeof FNV_CONSTANTS)[keyof typeof FNV_CONSTANTS];\nexport type HashSeedConstant = (typeof HASH_SEED_CONSTANTS)[keyof typeof HASH_SEED_CONSTANTS];\nexport type HashDistributionConstant =\n (typeof HASH_DISTRIBUTION_CONSTANTS)[keyof typeof HASH_DISTRIBUTION_CONSTANTS];\nexport type SHAConstant = (typeof SHA_CONSTANTS)[keyof typeof SHA_CONSTANTS];\nexport type MD5Constant = (typeof MD5_CONSTANTS)[keyof typeof MD5_CONSTANTS];\nexport type HashEncoding = (typeof HASH_ENCODING)[keyof typeof HASH_ENCODING];\nexport type HashAlgorithm = (typeof HASH_ALGORITHMS)[keyof typeof HASH_ALGORITHMS];\nexport type MurmurConstant = (typeof MURMUR_CONSTANTS)[keyof typeof MURMUR_CONSTANTS];\nexport type CRCConstant = (typeof CRC_CONSTANTS)[keyof typeof CRC_CONSTANTS];\n","/**\n * ISO Standards Constants\n *\n * International Organization for Standardization (ISO) code lengths\n * and standards used for country codes, language codes, currencies, etc.\n *\n * @module locale/iso\n */\n\n/**\n * ISO code length standards\n */\nexport const ISO_STANDARDS = {\n /**\n * ISO 3166-1 alpha-2 country code length (e.g., \"US\", \"GB\", \"FR\")\n */\n ISO_COUNTRY_CODE_LENGTH: 2,\n\n /**\n * ISO 3166-1 alpha-3 country code length (e.g., \"USA\", \"GBR\", \"FRA\")\n */\n ISO_COUNTRY_CODE_ALPHA3_LENGTH: 3,\n\n /**\n * ISO 639-1 language code length (e.g., \"en\", \"fr\", \"es\")\n */\n ISO_LANGUAGE_CODE_LENGTH: 2,\n\n /**\n * ISO 639-2 language code length (e.g., \"eng\", \"fra\", \"spa\")\n */\n ISO_LANGUAGE_CODE_ALPHA3_LENGTH: 3,\n\n /**\n * ISO 4217 currency code length (e.g., \"USD\", \"EUR\", \"GBP\")\n */\n ISO_CURRENCY_CODE_LENGTH: 3,\n\n /**\n * ISO 8601 date format length (YYYY-MM-DD)\n */\n ISO_DATE_LENGTH: 10,\n\n /**\n * ISO 8601 datetime format length (YYYY-MM-DDTHH:mm:ss.sssZ)\n */\n ISO_DATETIME_LENGTH: 24,\n\n /**\n * ISO 8601 time format length (HH:mm:ss)\n */\n ISO_TIME_LENGTH: 8,\n\n /**\n * ISO week date format length (YYYY-Www)\n */\n ISO_WEEK_DATE_LENGTH: 8,\n\n /**\n * BCP 47 language tag minimum length (e.g., \"en\")\n */\n BCP47_MIN_LENGTH: 2,\n\n /**\n * BCP 47 language tag with region (e.g., \"en-US\")\n */\n BCP47_WITH_REGION_LENGTH: 5,\n\n /**\n * RFC 5646 maximum language tag length\n */\n RFC5646_MAX_LENGTH: 35,\n\n /**\n * ISO 3166-1 numeric country code length\n */\n ISO_NUMERIC_COUNTRY_CODE_LENGTH: 3,\n\n /**\n * ISO 639-3 language code length\n */\n ISO_639_3_LENGTH: 3,\n} as const;\n\n/**\n * Type for ISO standard values\n */\nexport type IsoStandard = (typeof ISO_STANDARDS)[keyof typeof ISO_STANDARDS];\n","/**\n * Locale and Date Formatting Constants\n *\n * Constants for formatting dates, numbers, and locale-specific values.\n *\n * @module locale/formats\n */\n\n/**\n * Number and currency formatting constants\n */\nexport const LOCALE_FORMATS = {\n /**\n * Locale separator character\n */\n LOCALE_SEPARATOR: '-',\n\n /**\n * BCP 47 separator character\n */\n BCP47_SEPARATOR: '-',\n\n /**\n * Currency decimal places\n */\n CURRENCY_DECIMALS: 2,\n\n /**\n * Currency symbol placement (before/after)\n */\n CURRENCY_SYMBOL_BEFORE: true,\n\n /**\n * Thousands separator\n */\n THOUSANDS_SEPARATOR: ',',\n\n /**\n * Decimal separator\n */\n DECIMAL_SEPARATOR: '.',\n\n /**\n * Maximum locale string length\n */\n MAX_LOCALE_LENGTH: 35,\n\n /**\n * Minimum locale string length\n */\n MIN_LOCALE_LENGTH: 2,\n\n /**\n * Percentage decimal places\n */\n PERCENTAGE_DECIMALS: 2,\n\n /**\n * Default number of fraction digits\n */\n DEFAULT_FRACTION_DIGITS: 2,\n\n /**\n * Maximum fraction digits\n */\n MAX_FRACTION_DIGITS: 20,\n} as const;\n\n/**\n * Date and time formatting patterns\n */\nexport const DATE_FORMATS = {\n /**\n * ISO 8601 date format\n */\n ISO_DATE: 'YYYY-MM-DD',\n\n /**\n * ISO 8601 datetime format\n */\n ISO_DATETIME: 'YYYY-MM-DDTHH:mm:ss.sssZ',\n\n /**\n * ISO 8601 time format\n */\n ISO_TIME: 'HH:mm:ss',\n\n /**\n * US date format\n */\n US_DATE: 'MM/DD/YYYY',\n\n /**\n * European date format\n */\n EU_DATE: 'DD/MM/YYYY',\n\n /**\n * UK date format\n */\n UK_DATE: 'DD/MM/YYYY',\n\n /**\n * Japanese date format\n */\n JP_DATE: 'YYYY/MM/DD',\n\n /**\n * Short date format\n */\n SHORT_DATE: 'MMM DD',\n\n /**\n * Long date format\n */\n LONG_DATE: 'MMMM DD, YYYY',\n\n /**\n * Full date format\n */\n FULL_DATE: 'dddd, MMMM DD, YYYY',\n\n /**\n * Time format 12-hour\n */\n TIME_12H: 'hh:mm A',\n\n /**\n * Time format 24-hour\n */\n TIME_24H: 'HH:mm',\n\n /**\n * Time with seconds 12-hour\n */\n TIME_12H_SECONDS: 'hh:mm:ss A',\n\n /**\n * Time with seconds 24-hour\n */\n TIME_24H_SECONDS: 'HH:mm:ss',\n\n /**\n * Relative time threshold in seconds\n */\n RELATIVE_TIME_THRESHOLD: 86400,\n\n /**\n * Month/Year format\n */\n MONTH_YEAR: 'MMMM YYYY',\n\n /**\n * Short month/Year format\n */\n SHORT_MONTH_YEAR: 'MMM YYYY',\n\n /**\n * Year only format\n */\n YEAR_ONLY: 'YYYY',\n} as const;\n\n/**\n * Text direction constants\n */\nexport const TEXT_DIRECTION = {\n /**\n * Left-to-right\n */\n LTR: 'ltr',\n\n /**\n * Right-to-left\n */\n RTL: 'rtl',\n\n /**\n * Auto-detect\n */\n AUTO: 'auto',\n} as const;\n\n/**\n * Type exports\n */\nexport type LocaleFormat = (typeof LOCALE_FORMATS)[keyof typeof LOCALE_FORMATS];\nexport type DateFormat = (typeof DATE_FORMATS)[keyof typeof DATE_FORMATS];\nexport type TextDirectionValue = (typeof TEXT_DIRECTION)[keyof typeof TEXT_DIRECTION];\n","/**\n * Phone Number Formatting Constants\n *\n * Constants for phone number validation and formatting across different countries.\n *\n * @module locale/phone\n */\n\n/**\n * Phone number formats and validation\n */\nexport const PHONE_FORMATS = {\n /**\n * International prefix\n */\n INTERNATIONAL_PREFIX: '+',\n\n /**\n * International direct dialing prefix\n */\n IDD_PREFIX: '00',\n\n /**\n * US country code\n */\n US_COUNTRY_CODE: '1',\n\n /**\n * UK country code\n */\n UK_COUNTRY_CODE: '44',\n\n /**\n * Germany country code\n */\n DE_COUNTRY_CODE: '49',\n\n /**\n * France country code\n */\n FR_COUNTRY_CODE: '33',\n\n /**\n * Japan country code\n */\n JP_COUNTRY_CODE: '81',\n\n /**\n * China country code\n */\n CN_COUNTRY_CODE: '86',\n\n /**\n * India country code\n */\n IN_COUNTRY_CODE: '91',\n\n /**\n * Brazil country code\n */\n BR_COUNTRY_CODE: '55',\n\n /**\n * US phone number length (without country code)\n */\n US_PHONE_LENGTH: 10,\n\n /**\n * UK phone number length (without country code)\n */\n UK_PHONE_LENGTH: 10,\n\n /**\n * International phone minimum length\n */\n MIN_PHONE_LENGTH: 7,\n\n /**\n * International phone maximum length\n */\n MAX_PHONE_LENGTH: 15,\n\n /**\n * E.164 format maximum length (with +)\n */\n E164_MAX_LENGTH: 16,\n\n /**\n * E.164 format minimum length (with +)\n */\n E164_MIN_LENGTH: 8,\n\n /**\n * Area code length (US)\n */\n US_AREA_CODE_LENGTH: 3,\n\n /**\n * Exchange code length (US)\n */\n US_EXCHANGE_CODE_LENGTH: 3,\n\n /**\n * Line number length (US)\n */\n US_LINE_NUMBER_LENGTH: 4,\n\n /**\n * Extension maximum length\n */\n MAX_EXTENSION_LENGTH: 6,\n\n /**\n * Country code maximum length\n */\n MAX_COUNTRY_CODE_LENGTH: 3,\n\n /**\n * National number maximum length\n */\n MAX_NATIONAL_NUMBER_LENGTH: 15,\n} as const;\n\n/**\n * Phone number format patterns\n */\nexport const PHONE_PATTERNS = {\n /**\n * US phone format pattern\n */\n US_FORMAT: '(XXX) XXX-XXXX',\n\n /**\n * UK phone format pattern\n */\n UK_FORMAT: 'XXXX XXX XXXX',\n\n /**\n * International format pattern\n */\n INTERNATIONAL_FORMAT: '+X XXX XXX XXXX',\n\n /**\n * E.164 format pattern\n */\n E164_FORMAT: '+XXXXXXXXXXXX',\n\n /**\n * Extension format\n */\n EXTENSION_FORMAT: 'ext. XXXX',\n} as const;\n\n/**\n * Type exports\n */\nexport type PhoneFormat = (typeof PHONE_FORMATS)[keyof typeof PHONE_FORMATS];\nexport type PhonePattern = (typeof PHONE_PATTERNS)[keyof typeof PHONE_PATTERNS];\n","/**\n * Address Formatting Constants\n *\n * Constants for address validation and formatting across different countries.\n *\n * @module locale/address\n */\n\n/**\n * Address formatting and validation constants\n */\nexport const ADDRESS_FORMATS = {\n /**\n * US ZIP code length\n */\n US_ZIP_LENGTH: 5,\n\n /**\n * US ZIP+4 code length\n */\n US_ZIP_PLUS4_LENGTH: 9,\n\n /**\n * US ZIP+4 separator\n */\n US_ZIP_SEPARATOR: '-',\n\n /**\n * Canadian postal code length\n */\n CA_POSTAL_CODE_LENGTH: 6,\n\n /**\n * UK postcode minimum length\n */\n UK_POSTCODE_MIN_LENGTH: 5,\n\n /**\n * UK postcode maximum length\n */\n UK_POSTCODE_MAX_LENGTH: 8,\n\n /**\n * German postal code length\n */\n DE_POSTAL_CODE_LENGTH: 5,\n\n /**\n * French postal code length\n */\n FR_POSTAL_CODE_LENGTH: 5,\n\n /**\n * Japanese postal code length\n */\n JP_POSTAL_CODE_LENGTH: 7,\n\n /**\n * Australian postal code length\n */\n AU_POSTAL_CODE_LENGTH: 4,\n\n /**\n * Brazilian CEP code length\n */\n BR_CEP_LENGTH: 8,\n\n /**\n * State/Province code length\n */\n STATE_CODE_LENGTH: 2,\n\n /**\n * State/Province full name maximum length\n */\n STATE_NAME_MAX_LENGTH: 50,\n\n /**\n * Maximum address line length\n */\n MAX_ADDRESS_LINE_LENGTH: 100,\n\n /**\n * Minimum address line length\n */\n MIN_ADDRESS_LINE_LENGTH: 3,\n\n /**\n * Maximum city name length\n */\n MAX_CITY_LENGTH: 50,\n\n /**\n * Minimum city name length\n */\n MIN_CITY_LENGTH: 2,\n\n /**\n * Maximum country name length\n */\n MAX_COUNTRY_LENGTH: 56,\n\n /**\n * Maximum building number length\n */\n MAX_BUILDING_NUMBER_LENGTH: 10,\n\n /**\n * Maximum apartment/suite number length\n */\n MAX_UNIT_NUMBER_LENGTH: 10,\n\n /**\n * PO Box number maximum length\n */\n MAX_PO_BOX_LENGTH: 10,\n\n /**\n * Maximum number of address lines\n */\n MAX_ADDRESS_LINES: 3,\n} as const;\n\n/**\n * Address field types\n */\nexport const ADDRESS_FIELDS = {\n /**\n * Street address line 1\n */\n ADDRESS_LINE_1: 'addressLine1',\n\n /**\n * Street address line 2\n */\n ADDRESS_LINE_2: 'addressLine2',\n\n /**\n * City or locality\n */\n CITY: 'city',\n\n /**\n * State or province\n */\n STATE: 'state',\n\n /**\n * Postal or ZIP code\n */\n POSTAL_CODE: 'postalCode',\n\n /**\n * Country\n */\n COUNTRY: 'country',\n\n /**\n * Building number\n */\n BUILDING_NUMBER: 'buildingNumber',\n\n /**\n * Unit/Apartment number\n */\n UNIT_NUMBER: 'unitNumber',\n\n /**\n * PO Box\n */\n PO_BOX: 'poBox',\n\n /**\n * District or neighborhood\n */\n DISTRICT: 'district',\n\n /**\n * County\n */\n COUNTY: 'county',\n} as const;\n\n/**\n * Type exports\n */\nexport type AddressFormat = (typeof ADDRESS_FORMATS)[keyof typeof ADDRESS_FORMATS];\nexport type AddressField = (typeof ADDRESS_FIELDS)[keyof typeof ADDRESS_FIELDS];\n","/**\n * Currency Code Constants\n *\n * ISO 4217 currency codes for international currencies.\n *\n * @module locale/currencies\n */\n\n/**\n * Common currency codes (ISO 4217)\n */\nexport const CURRENCY_CODES = {\n // Major currencies\n USD: 'USD', // US Dollar\n EUR: 'EUR', // Euro\n GBP: 'GBP', // British Pound Sterling\n JPY: 'JPY', // Japanese Yen\n CHF: 'CHF', // Swiss Franc\n CAD: 'CAD', // Canadian Dollar\n AUD: 'AUD', // Australian Dollar\n CNY: 'CNY', // Chinese Yuan Renminbi\n\n // Asian currencies\n INR: 'INR', // Indian Rupee\n KRW: 'KRW', // South Korean Won\n SGD: 'SGD', // Singapore Dollar\n HKD: 'HKD', // Hong Kong Dollar\n TWD: 'TWD', // Taiwan New Dollar\n THB: 'THB', // Thai Baht\n IDR: 'IDR', // Indonesian Rupiah\n MYR: 'MYR', // Malaysian Ringgit\n PHP: 'PHP', // Philippine Peso\n VND: 'VND', // Vietnamese Dong\n BDT: 'BDT', // Bangladeshi Taka\n PKR: 'PKR', // Pakistani Rupee\n LKR: 'LKR', // Sri Lankan Rupee\n\n // European currencies\n SEK: 'SEK', // Swedish Krona\n NOK: 'NOK', // Norwegian Krone\n DKK: 'DKK', // Danish Krone\n PLN: 'PLN', // Polish Zloty\n CZK: 'CZK', // Czech Koruna\n HUF: 'HUF', // Hungarian Forint\n RON: 'RON', // Romanian Leu\n BGN: 'BGN', // Bulgarian Lev\n HRK: 'HRK', // Croatian Kuna\n RSD: 'RSD', // Serbian Dinar\n ISK: 'ISK', // Icelandic Króna\n\n // Americas currencies\n BRL: 'BRL', // Brazilian Real\n MXN: 'MXN', // Mexican Peso\n ARS: 'ARS', // Argentine Peso\n CLP: 'CLP', // Chilean Peso\n COP: 'COP', // Colombian Peso\n PEN: 'PEN', // Peruvian Sol\n UYU: 'UYU', // Uruguayan Peso\n VES: 'VES', // Venezuelan Bolívar\n BOB: 'BOB', // Bolivian Boliviano\n PYG: 'PYG', // Paraguayan Guarani\n CRC: 'CRC', // Costa Rican Colón\n GTQ: 'GTQ', // Guatemalan Quetzal\n HNL: 'HNL', // Honduran Lempira\n NIO: 'NIO', // Nicaraguan Córdoba\n PAB: 'PAB', // Panamanian Balboa\n DOP: 'DOP', // Dominican Peso\n JMD: 'JMD', // Jamaican Dollar\n TTD: 'TTD', // Trinidad and Tobago Dollar\n BBD: 'BBD', // Barbadian Dollar\n\n // Middle Eastern currencies\n AED: 'AED', // UAE Dirham\n SAR: 'SAR', // Saudi Riyal\n QAR: 'QAR', // Qatari Riyal\n KWD: 'KWD', // Kuwaiti Dinar\n BHD: 'BHD', // Bahraini Dinar\n OMR: 'OMR', // Omani Rial\n JOD: 'JOD', // Jordanian Dinar\n ILS: 'ILS', // Israeli New Shekel\n TRY: 'TRY', // Turkish Lira\n IQD: 'IQD', // Iraqi Dinar\n IRR: 'IRR', // Iranian Rial\n LBP: 'LBP', // Lebanese Pound\n SYP: 'SYP', // Syrian Pound\n\n // African currencies\n ZAR: 'ZAR', // South African Rand\n NGN: 'NGN', // Nigerian Naira\n EGP: 'EGP', // Egyptian Pound\n KES: 'KES', // Kenyan Shilling\n GHS: 'GHS', // Ghanaian Cedi\n MAD: 'MAD', // Moroccan Dirham\n TND: 'TND', // Tunisian Dinar\n DZD: 'DZD', // Algerian Dinar\n ETB: 'ETB', // Ethiopian Birr\n TZS: 'TZS', // Tanzanian Shilling\n UGX: 'UGX', // Ugandan Shilling\n ZMW: 'ZMW', // Zambian Kwacha\n BWP: 'BWP', // Botswana Pula\n MUR: 'MUR', // Mauritian Rupee\n\n // Pacific currencies\n NZD: 'NZD', // New Zealand Dollar\n FJD: 'FJD', // Fijian Dollar\n PGK: 'PGK', // Papua New Guinean Kina\n\n // Former Soviet Union currencies\n RUB: 'RUB', // Russian Ruble\n UAH: 'UAH', // Ukrainian Hryvnia\n BYN: 'BYN', // Belarusian Ruble\n KZT: 'KZT', // Kazakhstani Tenge\n UZS: 'UZS', // Uzbekistani Som\n AZN: 'AZN', // Azerbaijani Manat\n GEL: 'GEL', // Georgian Lari\n AMD: 'AMD', // Armenian Dram\n\n // Cryptocurrency representations (unofficial)\n BTC: 'BTC', // Bitcoin\n ETH: 'ETH', // Ethereum\n USDT: 'USDT', // Tether\n USDC: 'USDC', // USD Coin\n} as const;\n\n/**\n * Currency metadata\n */\nexport const CURRENCY_INFO = {\n /**\n * Currencies with no decimal places\n */\n NO_DECIMAL_CURRENCIES: ['JPY', 'KRW', 'VND', 'IDR', 'CLP', 'ISK', 'TWD'],\n\n /**\n * Currencies with 3 decimal places\n */\n THREE_DECIMAL_CURRENCIES: ['BHD', 'IQD', 'JOD', 'KWD', 'OMR', 'TND'],\n\n /**\n * Major reserve currencies\n */\n RESERVE_CURRENCIES: ['USD', 'EUR', 'GBP', 'JPY', 'CNY'],\n\n /**\n * G7 currencies\n */\n G7_CURRENCIES: ['USD', 'EUR', 'GBP', 'JPY', 'CAD'],\n\n /**\n * Default decimal places for most currencies\n */\n DEFAULT_DECIMAL_PLACES: 2,\n} as const;\n\n/**\n * Type exports\n */\nexport type CurrencyCode = (typeof CURRENCY_CODES)[keyof typeof CURRENCY_CODES];\nexport type CurrencyInfo = (typeof CURRENCY_INFO)[keyof typeof CURRENCY_INFO];\n","/**\n * Country Constants\n *\n * ISO 3166-1 country codes and related data.\n *\n * @module locale/countries\n */\n\n/**\n * Common country codes (ISO 3166-1 alpha-2)\n */\nexport const COUNTRY_CODES = {\n // Americas\n US: 'US', // United States\n CA: 'CA', // Canada\n MX: 'MX', // Mexico\n BR: 'BR', // Brazil\n AR: 'AR', // Argentina\n CL: 'CL', // Chile\n CO: 'CO', // Colombia\n PE: 'PE', // Peru\n VE: 'VE', // Venezuela\n EC: 'EC', // Ecuador\n BO: 'BO', // Bolivia\n PY: 'PY', // Paraguay\n UY: 'UY', // Uruguay\n GY: 'GY', // Guyana\n SR: 'SR', // Suriname\n GF: 'GF', // French Guiana\n FK: 'FK', // Falkland Islands\n\n // Caribbean\n CU: 'CU', // Cuba\n DO: 'DO', // Dominican Republic\n HT: 'HT', // Haiti\n JM: 'JM', // Jamaica\n TT: 'TT', // Trinidad and Tobago\n BB: 'BB', // Barbados\n BS: 'BS', // Bahamas\n PR: 'PR', // Puerto Rico\n\n // Central America\n GT: 'GT', // Guatemala\n HN: 'HN', // Honduras\n SV: 'SV', // El Salvador\n NI: 'NI', // Nicaragua\n CR: 'CR', // Costa Rica\n PA: 'PA', // Panama\n BZ: 'BZ', // Belize\n\n // Europe\n GB: 'GB', // United Kingdom\n FR: 'FR', // France\n DE: 'DE', // Germany\n IT: 'IT', // Italy\n ES: 'ES', // Spain\n PT: 'PT', // Portugal\n NL: 'NL', // Netherlands\n BE: 'BE', // Belgium\n LU: 'LU', // Luxembourg\n CH: 'CH', // Switzerland\n AT: 'AT', // Austria\n IE: 'IE', // Ireland\n DK: 'DK', // Denmark\n SE: 'SE', // Sweden\n NO: 'NO', // Norway\n FI: 'FI', // Finland\n IS: 'IS', // Iceland\n PL: 'PL', // Poland\n CZ: 'CZ', // Czech Republic\n SK: 'SK', // Slovakia\n HU: 'HU', // Hungary\n RO: 'RO', // Romania\n BG: 'BG', // Bulgaria\n GR: 'GR', // Greece\n HR: 'HR', // Croatia\n SI: 'SI', // Slovenia\n RS: 'RS', // Serbia\n BA: 'BA', // Bosnia and Herzegovina\n ME: 'ME', // Montenegro\n MK: 'MK', // North Macedonia\n AL: 'AL', // Albania\n XK: 'XK', // Kosovo\n EE: 'EE', // Estonia\n LV: 'LV', // Latvia\n LT: 'LT', // Lithuania\n BY: 'BY', // Belarus\n UA: 'UA', // Ukraine\n MD: 'MD', // Moldova\n RU: 'RU', // Russia\n CY: 'CY', // Cyprus\n MT: 'MT', // Malta\n AD: 'AD', // Andorra\n MC: 'MC', // Monaco\n SM: 'SM', // San Marino\n VA: 'VA', // Vatican City\n LI: 'LI', // Liechtenstein\n\n // Asia\n CN: 'CN', // China\n JP: 'JP', // Japan\n KR: 'KR', // South Korea\n KP: 'KP', // North Korea\n TW: 'TW', // Taiwan\n HK: 'HK', // Hong Kong\n MO: 'MO', // Macao\n IN: 'IN', // India\n PK: 'PK', // Pakistan\n BD: 'BD', // Bangladesh\n LK: 'LK', // Sri Lanka\n NP: 'NP', // Nepal\n BT: 'BT', // Bhutan\n MV: 'MV', // Maldives\n AF: 'AF', // Afghanistan\n TH: 'TH', // Thailand\n VN: 'VN', // Vietnam\n MY: 'MY', // Malaysia\n SG: 'SG', // Singapore\n ID: 'ID', // Indonesia\n PH: 'PH', // Philippines\n BN: 'BN', // Brunei\n KH: 'KH', // Cambodia\n LA: 'LA', // Laos\n MM: 'MM', // Myanmar\n TL: 'TL', // Timor-Leste\n MN: 'MN', // Mongolia\n KZ: 'KZ', // Kazakhstan\n UZ: 'UZ', // Uzbekistan\n TJ: 'TJ', // Tajikistan\n KG: 'KG', // Kyrgyzstan\n TM: 'TM', // Turkmenistan\n AZ: 'AZ', // Azerbaijan\n GE: 'GE', // Georgia\n AM: 'AM', // Armenia\n\n // Middle East\n SA: 'SA', // Saudi Arabia\n AE: 'AE', // United Arab Emirates\n QA: 'QA', // Qatar\n KW: 'KW', // Kuwait\n BH: 'BH', // Bahrain\n OM: 'OM', // Oman\n YE: 'YE', // Yemen\n JO: 'JO', // Jordan\n LB: 'LB', // Lebanon\n SY: 'SY', // Syria\n IQ: 'IQ', // Iraq\n IR: 'IR', // Iran\n IL: 'IL', // Israel\n PS: 'PS', // Palestine\n TR: 'TR', // Turkey\n\n // Africa\n EG: 'EG', // Egypt\n LY: 'LY', // Libya\n TN: 'TN', // Tunisia\n DZ: 'DZ', // Algeria\n MA: 'MA', // Morocco\n EH: 'EH', // Western Sahara\n MR: 'MR', // Mauritania\n ML: 'ML', // Mali\n NE: 'NE', // Niger\n TD: 'TD', // Chad\n SD: 'SD', // Sudan\n SS: 'SS', // South Sudan\n ER: 'ER', // Eritrea\n DJ: 'DJ', // Djibouti\n SO: 'SO', // Somalia\n ET: 'ET', // Ethiopia\n KE: 'KE', // Kenya\n UG: 'UG', // Uganda\n RW: 'RW', // Rwanda\n BI: 'BI', // Burundi\n TZ: 'TZ', // Tanzania\n MZ: 'MZ', // Mozambique\n MW: 'MW', // Malawi\n ZM: 'ZM', // Zambia\n ZW: 'ZW', // Zimbabwe\n BW: 'BW', // Botswana\n NA: 'NA', // Namibia\n ZA: 'ZA', // South Africa\n LS: 'LS', // Lesotho\n SZ: 'SZ', // Eswatini\n AO: 'AO', // Angola\n CD: 'CD', // Democratic Republic of the Congo\n CG: 'CG', // Republic of the Congo\n GA: 'GA', // Gabon\n GQ: 'GQ', // Equatorial Guinea\n CM: 'CM', // Cameroon\n CF: 'CF', // Central African Republic\n NG: 'NG', // Nigeria\n BJ: 'BJ', // Benin\n TG: 'TG', // Togo\n GH: 'GH', // Ghana\n BF: 'BF', // Burkina Faso\n CI: 'CI', // Côte d'Ivoire\n LR: 'LR', // Liberia\n SL: 'SL', // Sierra Leone\n GN: 'GN', // Guinea\n GW: 'GW', // Guinea-Bissau\n SN: 'SN', // Senegal\n GM: 'GM', // Gambia\n CV: 'CV', // Cape Verde\n ST: 'ST', // São Tomé and Príncipe\n MG: 'MG', // Madagascar\n MU: 'MU', // Mauritius\n SC: 'SC', // Seychelles\n KM: 'KM', // Comoros\n RE: 'RE', // Réunion\n\n // Oceania\n AU: 'AU', // Australia\n NZ: 'NZ', // New Zealand\n PG: 'PG', // Papua New Guinea\n FJ: 'FJ', // Fiji\n SB: 'SB', // Solomon Islands\n VU: 'VU', // Vanuatu\n NC: 'NC', // New Caledonia\n PF: 'PF', // French Polynesia\n WS: 'WS', // Samoa\n TO: 'TO', // Tonga\n TV: 'TV', // Tuvalu\n NR: 'NR', // Nauru\n KI: 'KI', // Kiribati\n PW: 'PW', // Palau\n MH: 'MH', // Marshall Islands\n FM: 'FM', // Micronesia\n GU: 'GU', // Guam\n MP: 'MP', // Northern Mariana Islands\n AS: 'AS', // American Samoa\n CK: 'CK', // Cook Islands\n NU: 'NU', // Niue\n TK: 'TK', // Tokelau\n WF: 'WF', // Wallis and Futuna\n PN: 'PN', // Pitcairn Islands\n\n // Antarctica\n AQ: 'AQ', // Antarctica\n} as const;\n\n/**\n * MVP DEFINED SCOPE: Only include Europe (EU) and Brazil (BR).\n */\nexport const COUNTRY_CODES_SCOPED = {\n // Brazil\n BR: 'BR',\n // Europe\n GB: 'GB',\n FR: 'FR',\n DE: 'DE',\n IT: 'IT',\n ES: 'ES',\n PT: 'PT',\n NL: 'NL',\n BE: 'BE',\n LU: 'LU',\n CH: 'CH',\n AT: 'AT',\n IE: 'IE',\n DK: 'DK',\n SE: 'SE',\n NO: 'NO',\n FI: 'FI',\n IS: 'IS',\n PL: 'PL',\n CZ: 'CZ',\n SK: 'SK',\n HU: 'HU',\n RO: 'RO',\n BG: 'BG',\n GR: 'GR',\n HR: 'HR',\n SI: 'SI',\n RS: 'RS',\n BA: 'BA',\n ME: 'ME',\n MK: 'MK',\n AL: 'AL',\n XK: 'XK',\n EE: 'EE',\n LV: 'LV',\n LT: 'LT',\n BY: 'BY',\n UA: 'UA',\n MD: 'MD',\n RU: 'RU',\n CY: 'CY',\n MT: 'MT',\n AD: 'AD',\n MC: 'MC',\n SM: 'SM',\n VA: 'VA',\n LI: 'LI',\n} as const;\n\n/**\n * MVP scoped country names\n */\nexport const COUNTRY_NAMES: { [key: string]: string } = {\n // Brazil (BR)\n BR: 'Brazil',\n\n // European Union (EU) Member States\n AT: 'Austria',\n BE: 'Belgium',\n BG: 'Bulgaria',\n HR: 'Croatia',\n CY: 'Cyprus',\n CZ: 'Czechia', // Using the modern short name\n DK: 'Denmark',\n EE: 'Estonia',\n FI: 'Finland',\n FR: 'France',\n DE: 'Germany',\n GR: 'Greece',\n HU: 'Hungary',\n IE: 'Ireland',\n IT: 'Italy',\n LV: 'Latvia',\n LT: 'Lithuania',\n LU: 'Luxembourg',\n MT: 'Malta',\n NL: 'Netherlands',\n PL: 'Poland',\n PT: 'Portugal',\n RO: 'Romania',\n SK: 'Slovakia',\n SI: 'Slovenia',\n ES: 'Spain',\n SE: 'Sweden',\n};\n\n/**\n * Country calling codes\n */\nexport const COUNTRY_CALLING_CODES = {\n /**\n * United States and Canada\n */\n '+1': ['US', 'CA'],\n /**\n * Egypt\n */\n '+20': ['EG'],\n /**\n * South Africa\n */\n '+27': ['ZA'],\n /**\n * Greece\n */\n '+30': ['GR'],\n /**\n * Netherlands\n */\n '+31': ['NL'],\n /**\n * Belgium\n */\n '+32': ['BE'],\n /**\n * France\n */\n '+33': ['FR'],\n /**\n * Spain\n */\n '+34': ['ES'],\n /**\n * Hungary\n */\n '+36': ['HU'],\n /**\n * Italy\n */\n '+39': ['IT'],\n /**\n * Romania\n */\n '+40': ['RO'],\n /**\n * Switzerland\n */\n '+41': ['CH'],\n /**\n * Austria\n */\n '+43': ['AT'],\n /**\n * United Kingdom\n */\n '+44': ['GB'],\n /**\n * Denmark\n */\n '+45': ['DK'],\n /**\n * Sweden\n */\n '+46': ['SE'],\n /**\n * Norway\n */\n '+47': ['NO'],\n /**\n * Poland\n */\n '+48': ['PL'],\n /**\n * Germany\n */\n '+49': ['DE'],\n /**\n * Peru\n */\n '+51': ['PE'],\n /**\n * Mexico\n */\n '+52': ['MX'],\n /**\n * Cuba\n */\n '+53': ['CU'],\n /**\n * Argentina\n */\n '+54': ['AR'],\n /**\n * Brazil\n */\n '+55': ['BR'],\n /**\n * Chile\n */\n '+56': ['CL'],\n /**\n * Colombia\n */\n '+57': ['CO'],\n /**\n * Venezuela\n */\n '+58': ['VE'],\n /**\n * Malaysia\n */\n '+60': ['MY'],\n /**\n * Australia\n */\n '+61': ['AU'],\n /**\n * Indonesia\n */\n '+62': ['ID'],\n /**\n * Philippines\n */\n '+63': ['PH'],\n /**\n * New Zealand\n */\n '+64': ['NZ'],\n /**\n * Singapore\n */\n '+65': ['SG'],\n /**\n * Thailand\n */\n '+66': ['TH'],\n /**\n * Russia and Kazakhstan\n */\n '+7': ['RU', 'KZ'],\n /**\n * Japan\n */\n '+81': ['JP'],\n /**\n * South Korea\n */\n '+82': ['KR'],\n /**\n * Vietnam\n */\n '+84': ['VN'],\n /**\n * China\n */\n '+86': ['CN'],\n /**\n * Turkey\n */\n '+90': ['TR'],\n /**\n * India\n */\n '+91': ['IN'],\n /**\n * Pakistan\n */\n '+92': ['PK'],\n /**\n * Afghanistan\n */\n '+93': ['AF'],\n /**\n * Sri Lanka\n */\n '+94': ['LK'],\n /**\n * Myanmar\n */\n '+95': ['MM'],\n /**\n * Iran\n */\n '+98': ['IR'],\n /**\n * Morocco\n */\n '+212': ['MA'],\n /**\n * Algeria\n */\n '+213': ['DZ'],\n /**\n * Tunisia\n */\n '+216': ['TN'],\n /**\n * Libya\n */\n '+218': ['LY'],\n /**\n * Gambia\n */\n '+220': ['GM'],\n /**\n * Senegal\n */\n '+221': ['SN'],\n /**\n * Mali\n */\n '+223': ['ML'],\n /**\n * Guinea\n */\n '+224': ['GN'],\n /**\n * Côte d'Ivoire\n */\n '+225': ['CI'],\n /**\n * Burkina Faso\n */\n '+226': ['BF'],\n /**\n * Niger\n */\n '+227': ['NE'],\n /**\n * Togo\n */\n '+228': ['TG'],\n /**\n * Benin\n */\n '+229': ['BJ'],\n /**\n * Mauritius\n */\n '+230': ['MU'],\n /**\n * Liberia\n */\n '+231': ['LR'],\n /**\n * Sierra Leone\n */\n '+232': ['SL'],\n /**\n * Ghana\n */\n '+233': ['GH'],\n /**\n * Nigeria\n */\n '+234': ['NG'],\n /**\n * Chad\n */\n '+235': ['TD'],\n /**\n * Central African Republic\n */\n '+236': ['CF'],\n /**\n * Cameroon\n */\n '+237': ['CM'],\n /**\n * Cape Verde\n */\n '+238': ['CV'],\n /**\n * São Tomé and Príncipe\n */\n '+239': ['ST'],\n /**\n * Equatorial Guinea\n */\n '+240': ['GQ'],\n /**\n * Gabon\n */\n '+241': ['GA'],\n /**\n * Congo\n */\n '+242': ['CG'],\n /**\n * Democratic Republic of the Congo\n */\n '+243': ['CD'],\n /**\n * Angola\n */\n '+244': ['AO'],\n /**\n * Guinea-Bissau\n */\n '+245': ['GW'],\n /**\n * Kenya\n */\n '+254': ['KE'],\n /**\n * Tanzania\n */\n '+255': ['TZ'],\n /**\n * Uganda\n */\n '+256': ['UG'],\n /**\n * Burundi\n */\n '+257': ['BI'],\n /**\n * Mozambique\n */\n '+258': ['MZ'],\n /**\n * Zambia\n */\n '+260': ['ZM'],\n /**\n * Madagascar\n */\n '+261': ['MG'],\n /**\n * Zimbabwe\n */\n '+263': ['ZW'],\n /**\n * Namibia\n */\n '+264': ['NA'],\n /**\n * Malawi\n */\n '+265': ['MW'],\n /**\n * Lesotho\n */\n '+266': ['LS'],\n /**\n * Botswana\n */\n '+267': ['BW'],\n /**\n * Eswatini\n */\n '+268': ['SZ'],\n /**\n * Seychelles\n */\n '+248': ['SC'],\n /**\n * Rwanda\n */\n '+250': ['RW'],\n /**\n * Ethiopia\n */\n '+251': ['ET'],\n /**\n * Somalia\n */\n '+252': ['SO'],\n /**\n * Djibouti\n */\n '+253': ['DJ'],\n /**\n * Hong Kong\n */\n '+852': ['HK'],\n /**\n * Macao\n */\n '+853': ['MO'],\n /**\n * Bangladesh\n */\n '+880': ['BD'],\n /**\n * Taiwan\n */\n '+886': ['TW'],\n /**\n * Maldives\n */\n '+960': ['MV'],\n /**\n * Lebanon\n */\n '+961': ['LB'],\n /**\n * Jordan\n */\n '+962': ['JO'],\n /**\n * Syria\n */\n '+963': ['SY'],\n /**\n * Iraq\n */\n '+964': ['IQ'],\n /**\n * Kuwait\n */\n '+965': ['KW'],\n /**\n * Saudi Arabia\n */\n '+966': ['SA'],\n /**\n * Yemen\n */\n '+967': ['YE'],\n /**\n * Oman\n */\n '+968': ['OM'],\n /**\n * Palestine\n */\n '+970': ['PS'],\n /**\n * United Arab Emirates\n */\n '+971': ['AE'],\n /**\n * Israel\n */\n '+972': ['IL'],\n /**\n * Bahrain\n */\n '+973': ['BH'],\n /**\n * Qatar\n */\n '+974': ['QA'],\n /**\n * Bhutan\n */\n '+975': ['BT'],\n /**\n * Mongolia\n */\n '+976': ['MN'],\n /**\n * Nepal\n */\n '+977': ['NP'],\n /**\n * Tajikistan\n */\n '+992': ['TJ'],\n /**\n * Turkmenistan\n */\n '+993': ['TM'],\n /**\n * Azerbaijan\n */\n '+994': ['AZ'],\n /**\n * Georgia\n */\n '+995': ['GE'],\n /**\n * Kyrgyzstan\n */\n '+996': ['KG'],\n /**\n * Uzbekistan\n */\n '+998': ['UZ'],\n} as const;\n\n/**\n * Regional groupings\n */\nexport const COUNTRY_REGIONS = {\n /**\n * European Union member states\n */\n EU: [\n 'AT',\n 'BE',\n 'BG',\n 'HR',\n 'CY',\n 'CZ',\n 'DK',\n 'EE',\n 'FI',\n 'FR',\n 'DE',\n 'GR',\n 'HU',\n 'IE',\n 'IT',\n 'LV',\n 'LT',\n 'LU',\n 'MT',\n 'NL',\n 'PL',\n 'PT',\n 'RO',\n 'SK',\n 'SI',\n 'ES',\n 'SE',\n ],\n\n /**\n * North American countries\n */\n NORTH_AMERICA: ['US', 'CA', 'MX'],\n\n /**\n * South American countries\n */\n SOUTH_AMERICA: ['AR', 'BO', 'BR', 'CL', 'CO', 'EC', 'GF', 'GY', 'PY', 'PE', 'SR', 'UY', 'VE'],\n\n /**\n * G7 countries\n */\n G7: ['US', 'CA', 'GB', 'FR', 'DE', 'IT', 'JP'],\n\n /**\n * G20 countries\n */\n G20: [\n 'AR',\n 'AU',\n 'BR',\n 'CA',\n 'CN',\n 'FR',\n 'DE',\n 'IN',\n 'ID',\n 'IT',\n 'JP',\n 'KR',\n 'MX',\n 'RU',\n 'SA',\n 'ZA',\n 'TR',\n 'GB',\n 'US',\n ],\n\n /**\n * ASEAN countries\n */\n ASEAN: ['BN', 'KH', 'ID', 'LA', 'MY', 'MM', 'PH', 'SG', 'TH', 'VN'],\n\n /**\n * BRICS countries\n */\n BRICS: ['BR', 'RU', 'IN', 'CN', 'ZA'],\n\n /**\n * OECD countries\n */\n OECD: [\n 'AU',\n 'AT',\n 'BE',\n 'CA',\n 'CL',\n 'CO',\n 'CR',\n 'CZ',\n 'DK',\n 'EE',\n 'FI',\n 'FR',\n 'DE',\n 'GR',\n 'HU',\n 'IS',\n 'IE',\n 'IL',\n 'IT',\n 'JP',\n 'KR',\n 'LV',\n 'LT',\n 'LU',\n 'MX',\n 'NL',\n 'NZ',\n 'NO',\n 'PL',\n 'PT',\n 'SK',\n 'SI',\n 'ES',\n 'SE',\n 'CH',\n 'TR',\n 'GB',\n 'US',\n ],\n\n /**\n * Commonwealth countries\n */\n COMMONWEALTH: [\n 'AG',\n 'AU',\n 'BS',\n 'BD',\n 'BB',\n 'BZ',\n 'BW',\n 'BN',\n 'CM',\n 'CA',\n 'CY',\n 'DM',\n 'FJ',\n 'GM',\n 'GH',\n 'GD',\n 'GY',\n 'IN',\n 'JM',\n 'KE',\n 'KI',\n 'LS',\n 'MW',\n 'MY',\n 'MV',\n 'MT',\n 'MU',\n 'MZ',\n 'NA',\n 'NR',\n 'NZ',\n 'NG',\n 'PK',\n 'PG',\n 'RW',\n 'KN',\n 'LC',\n 'VC',\n 'WS',\n 'SC',\n 'SL',\n 'SG',\n 'SB',\n 'ZA',\n 'LK',\n 'SZ',\n 'TZ',\n 'TO',\n 'TT',\n 'TV',\n 'UG',\n 'GB',\n 'VU',\n 'ZM',\n ],\n} as const;\n\n/**\n * Country code to region mapping for CDN headers\n */\nexport const COUNTRY_REGIONS_DETAILED: Record<string, { region: string; state?: string }> = {\n // EU countries\n DE: { region: 'eu' },\n FR: { region: 'eu' },\n IT: { region: 'eu' },\n ES: { region: 'eu' },\n NL: { region: 'eu' },\n BE: { region: 'eu' },\n AT: { region: 'eu' },\n SE: { region: 'eu' },\n DK: { region: 'eu' },\n FI: { region: 'eu' },\n NO: { region: 'eu' },\n PL: { region: 'eu' },\n CZ: { region: 'eu' },\n HU: { region: 'eu' },\n SK: { region: 'eu' },\n SI: { region: 'eu' },\n HR: { region: 'eu' },\n BG: { region: 'eu' },\n RO: { region: 'eu' },\n GR: { region: 'eu' },\n PT: { region: 'eu' },\n IE: { region: 'eu' },\n LU: { region: 'eu' },\n MT: { region: 'eu' },\n CY: { region: 'eu' },\n EE: { region: 'eu' },\n LV: { region: 'eu' },\n LT: { region: 'eu' },\n GB: { region: 'eu' },\n IS: { region: 'eu' },\n LI: { region: 'eu' },\n CH: { region: 'eu' },\n\n // US and states (would need more sophisticated detection for states)\n US: { region: 'us' },\n CA: { region: 'ca' }, // Canada as separate region\n\n // China\n CN: { region: 'cn' },\n HK: { region: 'cn' },\n MO: { region: 'cn' },\n\n // Japan\n JP: { region: 'jp' },\n\n // Other Asian countries\n KR: { region: 'global' }, // South Korea\n TW: { region: 'global' }, // Taiwan\n SG: { region: 'global' }, // Singapore\n MY: { region: 'global' }, // Malaysia\n TH: { region: 'global' }, // Thailand\n IN: { region: 'global' }, // India\n ID: { region: 'global' }, // Indonesia\n PH: { region: 'global' }, // Philippines\n VN: { region: 'global' }, // Vietnam\n\n // Oceania\n AU: { region: 'global' }, // Australia\n NZ: { region: 'global' }, // New Zealand\n\n // Americas (other than US/CA)\n MX: { region: 'global' }, // Mexico\n BR: { region: 'global' }, // Brazil\n AR: { region: 'global' }, // Argentina\n CL: { region: 'global' }, // Chile\n CO: { region: 'global' }, // Colombia\n\n // Middle East\n AE: { region: 'global' }, // UAE\n SA: { region: 'global' }, // Saudi Arabia\n IL: { region: 'global' }, // Israel\n TR: { region: 'global' }, // Turkey\n\n // Africa\n ZA: { region: 'global' }, // South Africa\n EG: { region: 'global' }, // Egypt\n NG: { region: 'global' }, // Nigeria\n KE: { region: 'global' }, // Kenya\n\n // Russia\n RU: { region: 'global' }, // Russia\n\n // Other countries default to global\n};\n\n/**\n * Type exports\n */\nexport type CountryCode = (typeof COUNTRY_CODES)[keyof typeof COUNTRY_CODES];\nexport type CountryCallingCode = keyof typeof COUNTRY_CALLING_CODES;\nexport type CountryRegion = keyof typeof COUNTRY_REGIONS;\nexport type CountryRegionDetailed =\n (typeof COUNTRY_REGIONS_DETAILED)[keyof typeof COUNTRY_REGIONS_DETAILED];\n","/**\n * Common Locale Constants\n *\n * BCP 47 language tags for common locales worldwide.\n *\n * @module locale/locales\n */\n\n/**\n * Locale regions\n */\nexport const LOCALE_REGIONS = {\n AMERICAS: ['en-US', 'es-MX', 'pt-BR', 'en-CA', 'fr-CA'],\n EUROPE: ['en-GB', 'de-DE', 'fr-FR', 'it-IT', 'es-ES', 'nl-NL'],\n ASIA_PACIFIC: ['zh-CN', 'ja-JP', 'ko-KR', 'hi-IN', 'en-AU'],\n MIDDLE_EAST_AFRICA: ['ar-SA', 'he-IL', 'tr-TR', 'en-ZA'],\n} as const;\n\n/**\n * Locale to region mapping\n */\nexport const LOCALE_REGIONS_DETAILED: Record<string, { region: string; country?: string }> = {\n // EU locales\n de: { region: 'eu', country: 'DE' },\n 'de-de': { region: 'eu', country: 'DE' },\n 'de-at': { region: 'eu', country: 'AT' },\n 'de-ch': { region: 'eu', country: 'CH' },\n 'it-ch': { region: 'eu', country: 'CH' },\n 'fr-ch': { region: 'eu', country: 'CH' },\n fr: { region: 'eu', country: 'FR' },\n 'fr-fr': { region: 'eu', country: 'FR' },\n 'fr-be': { region: 'eu', country: 'BE' },\n es: { region: 'eu', country: 'ES' },\n 'es-es': { region: 'eu', country: 'ES' },\n it: { region: 'eu', country: 'IT' },\n 'it-it': { region: 'eu', country: 'IT' },\n nl: { region: 'eu', country: 'NL' },\n 'nl-nl': { region: 'eu', country: 'NL' },\n 'nl-be': { region: 'eu', country: 'BE' },\n pl: { region: 'eu', country: 'PL' },\n 'pl-pl': { region: 'eu', country: 'PL' },\n pt: { region: 'eu', country: 'PT' },\n 'pt-pt': { region: 'eu', country: 'PT' },\n sv: { region: 'eu', country: 'SE' },\n 'sv-se': { region: 'eu', country: 'SE' },\n 'sv-fi': { region: 'eu', country: 'FI' },\n da: { region: 'eu', country: 'DK' },\n 'da-dk': { region: 'eu', country: 'DK' },\n fi: { region: 'eu', country: 'FI' },\n 'fi-fi': { region: 'eu', country: 'FI' },\n 'en-gb': { region: 'eu', country: 'GB' },\n 'en-ie': { region: 'eu', country: 'IE' },\n\n // US locales\n 'en-us': { region: 'us', country: 'US' },\n en: { region: 'global', country: undefined }, // Default English to global (no specific country)\n\n // China locales\n zh: { region: 'cn', country: 'CN' },\n 'zh-cn': { region: 'cn', country: 'CN' },\n 'zh-hans': { region: 'cn', country: 'CN' },\n 'zh-hk': { region: 'cn', country: 'HK' },\n 'zh-tw': { region: 'global', country: 'TW' }, // Taiwan as global\n\n // Japan locales\n ja: { region: 'jp', country: 'JP' },\n 'ja-jp': { region: 'jp', country: 'JP' },\n\n // Other locales\n 'en-ca': { region: 'ca', country: 'CA' },\n 'fr-ca': { region: 'ca', country: 'CA' },\n 'en-au': { region: 'global', country: 'AU' },\n 'en-nz': { region: 'global', country: 'NZ' },\n ko: { region: 'global', country: 'KR' },\n 'ko-kr': { region: 'global', country: 'KR' },\n\n // Latin America locales\n 'pt-br': { region: 'global', country: 'BR' },\n 'es-mx': { region: 'global', country: 'MX' },\n 'es-ar': { region: 'global', country: 'AR' },\n 'es-cl': { region: 'global', country: 'CL' },\n 'es-co': { region: 'global', country: 'CO' },\n 'es-pe': { region: 'global', country: 'PE' },\n 'es-VE': { region: 'global', country: 'VE' },\n 'es-EC': { region: 'global', country: 'EC' },\n 'es-UY': { region: 'global', country: 'UY' },\n 'es-PY': { region: 'global', country: 'PY' },\n 'es-BO': { region: 'global', country: 'BO' },\n 'es-DO': { region: 'global', country: 'DO' },\n 'es-GT': { region: 'global', country: 'GT' },\n 'es-HN': { region: 'global', country: 'HN' },\n 'es-NI': { region: 'global', country: 'NI' },\n 'es-PA': { region: 'global', country: 'PA' },\n 'es-CR': { region: 'global', country: 'CR' },\n 'es-SV': { region: 'global', country: 'SV' },\n\n // Asian locales\n 'zh-SG': { region: 'global', country: 'SG' },\n 'en-SG': { region: 'global', country: 'SG' },\n 'en-IN': { region: 'global', country: 'IN' },\n 'hi-IN': { region: 'global', country: 'IN' },\n 'en-PH': { region: 'global', country: 'PH' },\n 'tl-PH': { region: 'global', country: 'PH' },\n 'id-ID': { region: 'global', country: 'ID' },\n 'ms-MY': { region: 'global', country: 'MY' },\n 'en-MY': { region: 'global', country: 'MY' },\n 'th-TH': { region: 'global', country: 'TH' },\n 'vi-VN': { region: 'global', country: 'VN' },\n\n // Middle East & Africa locales\n 'ar-SA': { region: 'global', country: 'SA' },\n 'ar-AE': { region: 'global', country: 'AE' },\n 'ar-EG': { region: 'global', country: 'EG' },\n 'ar-DZ': { region: 'global', country: 'DZ' },\n 'ar-MA': { region: 'global', country: 'MA' },\n 'he-IL': { region: 'global', country: 'IL' },\n 'tr-TR': { region: 'global', country: 'TR' },\n 'en-ZA': { region: 'global', country: 'ZA' },\n 'af-ZA': { region: 'global', country: 'ZA' },\n 'en-NG': { region: 'global', country: 'NG' },\n 'en-KE': { region: 'global', country: 'KE' },\n 'sw-KE': { region: 'global', country: 'KE' },\n\n // Eastern Europe/Russia locales\n 'ru-RU': { region: 'global', country: 'RU' },\n 'uk-UA': { region: 'eu', country: 'UA' },\n 'be-BY': { region: 'global', country: 'BY' },\n 'kk-KZ': { region: 'global', country: 'KZ' },\n};\n\n/**\n * Type exports\n */\nexport type LocaleRegion = (typeof LOCALE_REGIONS)[keyof typeof LOCALE_REGIONS];\nexport type LocaleRegionDetailed =\n (typeof LOCALE_REGIONS_DETAILED)[keyof typeof LOCALE_REGIONS_DETAILED];\n","/**\n * Timezone to region mapping\n */\nexport const TIMEZONE_REGIONS: Record<\n string,\n { region: string; country?: string; state?: string }\n> = {\n // Europe\n 'Europe/London': { region: 'eu', country: 'GB' },\n 'Europe/Berlin': { region: 'eu', country: 'DE' },\n 'Europe/Paris': { region: 'eu', country: 'FR' },\n 'Europe/Rome': { region: 'eu', country: 'IT' },\n 'Europe/Madrid': { region: 'eu', country: 'ES' },\n 'Europe/Amsterdam': { region: 'eu', country: 'NL' },\n 'Europe/Stockholm': { region: 'eu', country: 'SE' },\n 'Europe/Helsinki': { region: 'eu', country: 'FI' },\n 'Europe/Vienna': { region: 'eu', country: 'AT' },\n 'Europe/Brussels': { region: 'eu', country: 'BE' },\n 'Europe/Dublin': { region: 'eu', country: 'IE' },\n 'Europe/Copenhagen': { region: 'eu', country: 'DK' },\n 'Europe/Warsaw': { region: 'eu', country: 'PL' },\n 'Europe/Prague': { region: 'eu', country: 'CZ' },\n 'Europe/Budapest': { region: 'eu', country: 'HU' },\n 'Europe/Bucharest': { region: 'eu', country: 'RO' },\n 'Europe/Athens': { region: 'eu', country: 'GR' },\n 'Europe/Lisbon': { region: 'eu', country: 'PT' },\n 'Europe/Zagreb': { region: 'eu', country: 'HR' },\n 'Europe/Ljubljana': { region: 'eu', country: 'SI' },\n 'Europe/Bratislava': { region: 'eu', country: 'SK' },\n 'Europe/Sofia': { region: 'eu', country: 'BG' },\n 'Europe/Tallinn': { region: 'eu', country: 'EE' },\n 'Europe/Riga': { region: 'eu', country: 'LV' },\n 'Europe/Vilnius': { region: 'eu', country: 'LT' },\n 'Europe/Luxembourg': { region: 'eu', country: 'LU' },\n 'Europe/Malta': { region: 'eu', country: 'MT' },\n 'Europe/Oslo': { region: 'eu', country: 'NO' },\n 'Europe/Zurich': { region: 'eu', country: 'CH' },\n 'Europe/Reykjavik': { region: 'eu', country: 'IS' },\n 'Europe/Kiev': { region: 'eu', country: 'UA' },\n 'Europe/Minsk': { region: 'global', country: 'BY' },\n 'Europe/Moscow': { region: 'global', country: 'RU' },\n\n // United States\n 'America/Los_Angeles': { region: 'us', country: 'US', state: 'ca' },\n 'America/San_Francisco': { region: 'us', country: 'US', state: 'ca' },\n 'America/New_York': { region: 'us', country: 'US', state: 'ny' },\n 'America/Chicago': { region: 'us', country: 'US', state: 'il' },\n 'America/Denver': { region: 'us', country: 'US', state: 'co' },\n 'America/Phoenix': { region: 'us', country: 'US', state: 'az' },\n 'America/Detroit': { region: 'us', country: 'US', state: 'mi' },\n 'America/Atlanta': { region: 'us', country: 'US', state: 'ga' },\n 'America/Miami': { region: 'us', country: 'US', state: 'fl' },\n 'America/Dallas': { region: 'us', country: 'US', state: 'tx' },\n 'America/Houston': { region: 'us', country: 'US', state: 'tx' },\n 'America/Seattle': { region: 'us', country: 'US', state: 'wa' },\n 'America/Boston': { region: 'us', country: 'US', state: 'ma' },\n 'America/Philadelphia': { region: 'us', country: 'US', state: 'pa' },\n\n // China\n 'Asia/Shanghai': { region: 'cn', country: 'CN' },\n 'Asia/Beijing': { region: 'cn', country: 'CN' },\n 'Asia/Hong_Kong': { region: 'cn', country: 'HK' },\n 'Asia/Macau': { region: 'cn', country: 'MO' },\n 'Asia/Chongqing': { region: 'cn', country: 'CN' },\n 'Asia/Urumqi': { region: 'cn', country: 'CN' },\n\n // Japan\n 'Asia/Tokyo': { region: 'jp', country: 'JP' },\n 'Asia/Osaka': { region: 'jp', country: 'JP' },\n\n // Other Asian regions\n 'Asia/Bangkok': { region: 'global', country: 'TH' },\n 'Asia/Jakarta': { region: 'global', country: 'ID' },\n 'Asia/Manila': { region: 'global', country: 'PH' },\n 'Asia/Kuala_Lumpur': { region: 'global', country: 'MY' },\n 'Asia/Ho_Chi_Minh': { region: 'global', country: 'VN' },\n 'Asia/Taipei': { region: 'global', country: 'TW' },\n 'Asia/Kolkata': { region: 'global', country: 'IN' },\n 'Asia/Delhi': { region: 'global', country: 'IN' },\n 'Asia/Karachi': { region: 'global', country: 'PK' },\n 'Asia/Dhaka': { region: 'global', country: 'BD' },\n 'Asia/Colombo': { region: 'global', country: 'LK' },\n 'Asia/Kathmandu': { region: 'global', country: 'NP' },\n\n // Pacific regions\n 'Pacific/Fiji': { region: 'global', country: 'FJ' },\n 'Pacific/Guam': { region: 'us', country: 'GU' },\n 'Pacific/Honolulu': { region: 'us', country: 'US', state: 'hi' },\n\n // Canada\n 'America/Toronto': { region: 'us', country: 'CA' }, // Treat Canada as US for simplicity\n 'America/Vancouver': { region: 'us', country: 'CA' },\n 'America/Montreal': { region: 'us', country: 'CA' },\n 'America/Edmonton': { region: 'us', country: 'CA' },\n 'America/Winnipeg': { region: 'us', country: 'CA' },\n 'America/Halifax': { region: 'us', country: 'CA' },\n\n // Australia & New Zealand\n 'Australia/Sydney': { region: 'global', country: 'AU' },\n 'Australia/Melbourne': { region: 'global', country: 'AU' },\n 'Australia/Brisbane': { region: 'global', country: 'AU' },\n 'Australia/Perth': { region: 'global', country: 'AU' },\n 'Australia/Adelaide': { region: 'global', country: 'AU' },\n 'Australia/Darwin': { region: 'global', country: 'AU' },\n 'Australia/Hobart': { region: 'global', country: 'AU' },\n 'Pacific/Auckland': { region: 'global', country: 'NZ' },\n 'Pacific/Wellington': { region: 'global', country: 'NZ' },\n 'Pacific/Christchurch': { region: 'global', country: 'NZ' },\n\n // Other Asian regions\n 'Asia/Singapore': { region: 'global', country: 'SG' },\n 'Asia/Seoul': { region: 'global', country: 'KR' },\n 'Asia/Mumbai': { region: 'global', country: 'IN' },\n 'Asia/Dubai': { region: 'global', country: 'AE' },\n 'Asia/Riyadh': { region: 'global', country: 'SA' },\n 'Asia/Jerusalem': { region: 'global', country: 'IL' },\n 'Asia/Tel_Aviv': { region: 'global', country: 'IL' },\n 'Asia/Istanbul': { region: 'global', country: 'TR' },\n 'Asia/Tehran': { region: 'global', country: 'IR' },\n 'Asia/Baghdad': { region: 'global', country: 'IQ' },\n 'Asia/Kuwait': { region: 'global', country: 'KW' },\n 'Asia/Doha': { region: 'global', country: 'QA' },\n 'Asia/Muscat': { region: 'global', country: 'OM' },\n 'Asia/Amman': { region: 'global', country: 'JO' },\n 'Asia/Beirut': { region: 'global', country: 'LB' },\n 'Asia/Damascus': { region: 'global', country: 'SY' },\n\n // Latin America\n 'America/Sao_Paulo': { region: 'global', country: 'BR' },\n 'America/Rio_de_Janeiro': { region: 'global', country: 'BR' },\n 'America/Brasilia': { region: 'global', country: 'BR' },\n 'America/Mexico_City': { region: 'global', country: 'MX' },\n 'America/Tijuana': { region: 'global', country: 'MX' },\n 'America/Monterrey': { region: 'global', country: 'MX' },\n 'America/Buenos_Aires': { region: 'global', country: 'AR' },\n 'America/Santiago': { region: 'global', country: 'CL' },\n 'America/Bogota': { region: 'global', country: 'CO' },\n 'America/Lima': { region: 'global', country: 'PE' },\n 'America/Caracas': { region: 'global', country: 'VE' },\n 'America/La_Paz': { region: 'global', country: 'BO' },\n 'America/Guayaquil': { region: 'global', country: 'EC' },\n 'America/Montevideo': { region: 'global', country: 'UY' },\n 'America/Asuncion': { region: 'global', country: 'PY' },\n 'America/Santo_Domingo': { region: 'global', country: 'DO' },\n 'America/Havana': { region: 'global', country: 'CU' },\n 'America/Panama': { region: 'global', country: 'PA' },\n 'America/Guatemala': { region: 'global', country: 'GT' },\n 'America/Costa_Rica': { region: 'global', country: 'CR' },\n 'America/San_Salvador': { region: 'global', country: 'SV' },\n 'America/Tegucigalpa': { region: 'global', country: 'HN' },\n 'America/Managua': { region: 'global', country: 'NI' },\n 'America/Jamaica': { region: 'global', country: 'JM' },\n 'America/Port-au-Prince': { region: 'global', country: 'HT' },\n\n // Africa\n 'Africa/Johannesburg': { region: 'global', country: 'ZA' },\n 'Africa/Cairo': { region: 'global', country: 'EG' },\n 'Africa/Lagos': { region: 'global', country: 'NG' },\n 'Africa/Nairobi': { region: 'global', country: 'KE' },\n 'Africa/Casablanca': { region: 'global', country: 'MA' },\n 'Africa/Algiers': { region: 'global', country: 'DZ' },\n 'Africa/Tunis': { region: 'global', country: 'TN' },\n 'Africa/Addis_Ababa': { region: 'global', country: 'ET' },\n 'Africa/Dar_es_Salaam': { region: 'global', country: 'TZ' },\n 'Africa/Kinshasa': { region: 'global', country: 'CD' },\n 'Africa/Luanda': { region: 'global', country: 'AO' },\n 'Africa/Kampala': { region: 'global', country: 'UG' },\n 'Africa/Harare': { region: 'global', country: 'ZW' },\n 'Africa/Accra': { region: 'global', country: 'GH' },\n 'Africa/Dakar': { region: 'global', country: 'SN' },\n 'Africa/Abidjan': { region: 'global', country: 'CI' },\n\n // Fallback prefix patterns (should be at the end for proper precedence)\n 'Europe/': { region: 'eu' }, // Catch-all for European timezones\n 'America/': { region: 'us' }, // Default Americas to US\n 'Asia/': { region: 'asia' }, // Default Asia to asia region\n 'Africa/': { region: 'global' }, // Default Africa to global\n 'Pacific/': { region: 'global' }, // Default Pacific to global\n};\n\n/**\n * Type exports\n */\nexport type TimezoneRegion = (typeof TIMEZONE_REGIONS)[keyof typeof TIMEZONE_REGIONS];\n","export const ATHLETE_POSITIONS = [\n { name: 'Goalkeeper', value: 'goal_keeper' },\n { name: 'Centre Back', value: 'centre_back' },\n { name: 'Right Back', value: 'right_back' },\n { name: 'Left Back', value: 'left_back' },\n { name: 'Wing Back (Right/Left)', value: 'wing_back' },\n { name: 'Defensive Midfielder', value: 'defensive_midfielder' },\n { name: 'Central Midfielder', value: 'central_midfielder' },\n { name: 'Attacking Midfielder', value: 'attacking_midfielder' },\n { name: 'Right Midfielder/Winger', value: 'right_midfielder_winger' },\n { name: 'Left Midfielder/Winger', value: 'left_midfielder_winger' },\n { name: 'Centre Forward/Striker', value: 'centre_forward_striker' },\n] as const;\n\nexport type AthletePosition = (typeof ATHLETE_POSITIONS)[keyof typeof ATHLETE_POSITIONS];\n","/**\n * Time-related Constants\n *\n * Common time values and durations used throughout the application\n * for timeouts, delays, caching, and other time-based operations.\n *\n * @module time/constants\n */\n\nimport { type CountryCode } from '@plyaz/types';\nimport { COUNTRY_CODES } from '../locale';\n\nexport const DAYS_IN_WEEK = 7;\nexport const EARLY_MORNING_HOURS = 6;\n/**\n * Time conversion and duration constants\n */\nexport const TIME_CONSTANTS = {\n // Time unit conversions (in milliseconds)\n /**\n * One millisecond in milliseconds\n */\n MILLISECOND: 1,\n\n /**\n * One second in milliseconds\n */\n SECOND: 1000,\n\n /**\n * One minute in milliseconds\n */\n MINUTE: 60000,\n\n /**\n * One hour in milliseconds\n */\n HOUR: 3600000,\n\n /**\n * One day in milliseconds\n */\n DAY: 86400000,\n\n /**\n * One week in milliseconds\n */\n WEEK: 604800000,\n\n /**\n * One month in milliseconds (30 days average)\n */\n MONTH: 2592000000,\n\n /**\n * One year in milliseconds (365 days)\n */\n YEAR: 31536000000,\n\n // Time unit ratios\n /**\n * Number of milliseconds in one second\n */\n MILLISECONDS_PER_SECOND: 1000,\n\n /**\n * Number of seconds in one minute\n */\n SECONDS_PER_MINUTE: 60,\n\n /**\n * Number of minutes in one hour\n */\n MINUTES_PER_HOUR: 60,\n\n /**\n * Number of hours in one day\n */\n HOURS_PER_DAY: 24,\n\n /**\n * Number of days in one week\n */\n DAYS_PER_WEEK: 7,\n\n /**\n * Number of days in one month (average)\n */\n DAYS_PER_MONTH: 30,\n\n /**\n * Number of days in one year\n */\n DAYS_PER_YEAR: 365,\n\n /**\n * Number of weeks in one year\n */\n WEEKS_PER_YEAR: 52,\n\n /**\n * Number of months in one year\n */\n MONTHS_PER_YEAR: 12,\n\n // Common durations in milliseconds\n /**\n * 100 milliseconds\n */\n HUNDRED_MS: 100,\n\n /**\n * 250 milliseconds\n */\n QUARTER_SECOND: 250,\n\n /**\n * 500 milliseconds (half second)\n */\n HALF_SECOND: 500,\n\n /**\n * 2 seconds in milliseconds\n */\n TWO_SECONDS: 2000,\n\n /**\n * 3 seconds in milliseconds\n */\n THREE_SECONDS: 3000,\n\n /**\n * 5 seconds in milliseconds\n */\n FIVE_SECONDS: 5000,\n\n /**\n * 10 seconds in milliseconds\n */\n TEN_SECONDS: 10000,\n\n /**\n * 30 seconds in milliseconds\n */\n THIRTY_SECONDS: 30000,\n\n /**\n * 2 minutes in milliseconds\n */\n TWO_MINUTES: 120000,\n\n /**\n * 5 minutes in milliseconds\n */\n FIVE_MINUTES: 300000,\n\n /**\n * 10 minutes in milliseconds\n */\n TEN_MINUTES: 600000,\n\n /**\n * 15 minutes in milliseconds\n */\n FIFTEEN_MINUTES: 900000,\n\n /**\n * 30 minutes in milliseconds\n */\n THIRTY_MINUTES: 1800000,\n\n /**\n * 1 hour in milliseconds\n */\n ONE_HOUR: 3600000,\n\n /**\n * 2 hours in milliseconds\n */\n TWO_HOURS: 7200000,\n\n /**\n * 6 hours in milliseconds\n */\n SIX_HOURS: 21600000,\n\n /**\n * 12 hours in milliseconds\n */\n TWELVE_HOURS: 43200000,\n\n // Default values\n /**\n * Default timeout duration in milliseconds (5 seconds)\n */\n DEFAULT_TIMEOUT: 5000,\n\n /**\n * Default short timeout in milliseconds (1 second)\n */\n DEFAULT_SHORT_TIMEOUT: 1000,\n\n /**\n * Default long timeout in milliseconds (30 seconds)\n */\n DEFAULT_LONG_TIMEOUT: 30000,\n\n /**\n * Default retry delay in milliseconds (100ms)\n */\n DEFAULT_RETRY_DELAY: 100,\n\n /**\n * Default exponential backoff base delay in milliseconds (1 second)\n */\n DEFAULT_BACKOFF_BASE: 1000,\n\n /**\n * Default maximum backoff delay in milliseconds (30 seconds)\n */\n DEFAULT_MAX_BACKOFF: 30000,\n\n /**\n * Default number of retry attempts\n */\n DEFAULT_RETRY_ATTEMPTS: 3,\n\n /**\n * Default debounce delay in milliseconds (50ms)\n */\n DEFAULT_DEBOUNCE_DELAY: 50,\n\n /**\n * Default throttle delay in milliseconds (100ms)\n */\n DEFAULT_THROTTLE_DELAY: 100,\n\n /**\n * Default animation frame duration in milliseconds (~60fps)\n */\n DEFAULT_ANIMATION_FRAME: 16.67,\n\n /**\n * Default transition duration in milliseconds (300ms)\n */\n DEFAULT_TRANSITION_DURATION: 300,\n\n /**\n * Default cache time-to-live in seconds (5 minutes)\n */\n DEFAULT_CACHE_TTL: 300,\n\n /**\n * Default short cache TTL in seconds (1 minute)\n */\n DEFAULT_SHORT_CACHE_TTL: 60,\n\n /**\n * Default long cache TTL in seconds (1 hour)\n */\n DEFAULT_LONG_CACHE_TTL: 3600,\n\n /**\n * Default session timeout in milliseconds (30 minutes)\n */\n DEFAULT_SESSION_TIMEOUT: 1800000,\n\n /**\n * Default idle timeout in milliseconds (15 minutes)\n */\n DEFAULT_IDLE_TIMEOUT: 900000,\n\n /**\n * Default poll interval in milliseconds (5 seconds)\n */\n DEFAULT_POLL_INTERVAL: 5000,\n\n /**\n * Default heartbeat interval in milliseconds (30 seconds)\n */\n DEFAULT_HEARTBEAT_INTERVAL: 30000,\n\n // Network and ports\n /**\n * Default port number for servers\n */\n DEFAULT_PORT: 3000,\n\n /**\n * Default HTTP port\n */\n HTTP_PORT: 80,\n\n /**\n * Default HTTPS port\n */\n HTTPS_PORT: 443,\n\n /**\n * Default WebSocket port\n */\n WEBSOCKET_PORT: 8080,\n\n /**\n * Default database port (PostgreSQL)\n */\n DATABASE_PORT: 5432,\n\n /**\n * Default Redis port\n */\n REDIS_PORT: 6379,\n\n // WebSocket specific\n /**\n * WebSocket normal closure code\n */\n WEBSOCKET_CLOSE_NORMAL: 1000,\n\n /**\n * WebSocket going away code\n */\n WEBSOCKET_CLOSE_GOING_AWAY: 1001,\n\n /**\n * WebSocket protocol error code\n */\n WEBSOCKET_CLOSE_PROTOCOL_ERROR: 1002,\n\n /**\n * WebSocket unsupported data code\n */\n WEBSOCKET_CLOSE_UNSUPPORTED: 1003,\n\n /**\n * WebSocket abnormal closure code\n */\n WEBSOCKET_CLOSE_ABNORMAL: 1006,\n\n /**\n * WebSocket retry delay in milliseconds (500ms)\n */\n WEBSOCKET_RETRY_DELAY: 500,\n\n /**\n * WebSocket ping interval in milliseconds (30 seconds)\n */\n WEBSOCKET_PING_INTERVAL: 30000,\n\n /**\n * WebSocket reconnect delay in milliseconds (1 second)\n */\n WEBSOCKET_RECONNECT_DELAY: 1000,\n\n /**\n * WebSocket max reconnect delay in milliseconds (30 seconds)\n */\n WEBSOCKET_MAX_RECONNECT_DELAY: 30000,\n} as const;\n\n/**\n * Country → Time Zone Mapping\n * Based on IANA time zone database (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)\n */\nexport const COUNTRY_TIMEZONES: Record<string, string[]> = {\n // --- AMERICAS ---\n [COUNTRY_CODES.US]: [\n 'America/New_York',\n 'America/Chicago',\n 'America/Denver',\n 'America/Los_Angeles',\n 'America/Anchorage',\n 'Pacific/Honolulu',\n ],\n [COUNTRY_CODES.CA]: [\n 'America/Toronto',\n 'America/Vancouver',\n 'America/Edmonton',\n 'America/Halifax',\n 'America/St_Johns',\n ],\n [COUNTRY_CODES.MX]: ['America/Mexico_City', 'America/Monterrey', 'America/Tijuana'],\n [COUNTRY_CODES.BR]: ['America/Sao_Paulo', 'America/Manaus', 'America/Fortaleza'],\n [COUNTRY_CODES.AR]: ['America/Argentina/Buenos_Aires'],\n [COUNTRY_CODES.CL]: ['America/Santiago'],\n [COUNTRY_CODES.CO]: ['America/Bogota'],\n [COUNTRY_CODES.PE]: ['America/Lima'],\n [COUNTRY_CODES.VE]: ['America/Caracas'],\n\n // --- EUROPE ---\n [COUNTRY_CODES.GB]: ['Europe/London'],\n [COUNTRY_CODES.FR]: ['Europe/Paris'],\n [COUNTRY_CODES.DE]: ['Europe/Berlin'],\n [COUNTRY_CODES.IT]: ['Europe/Rome'],\n [COUNTRY_CODES.ES]: ['Europe/Madrid'],\n [COUNTRY_CODES.PT]: ['Europe/Lisbon'],\n [COUNTRY_CODES.NL]: ['Europe/Amsterdam'],\n [COUNTRY_CODES.SE]: ['Europe/Stockholm'],\n [COUNTRY_CODES.PL]: ['Europe/Warsaw'],\n [COUNTRY_CODES.FI]: ['Europe/Helsinki'],\n [COUNTRY_CODES.NO]: ['Europe/Oslo'],\n [COUNTRY_CODES.CH]: ['Europe/Zurich'],\n [COUNTRY_CODES.RU]: ['Europe/Moscow', 'Asia/Yekaterinburg', 'Asia/Irkutsk', 'Asia/Vladivostok'],\n [COUNTRY_CODES.UA]: ['Europe/Kyiv'],\n [COUNTRY_CODES.GR]: ['Europe/Athens'],\n [COUNTRY_CODES.TR]: ['Europe/Istanbul'],\n\n // --- ASIA ---\n [COUNTRY_CODES.CN]: ['Asia/Shanghai', 'Asia/Urumqi'],\n [COUNTRY_CODES.JP]: ['Asia/Tokyo'],\n [COUNTRY_CODES.KR]: ['Asia/Seoul'],\n [COUNTRY_CODES.IN]: ['Asia/Kolkata'],\n [COUNTRY_CODES.PK]: ['Asia/Karachi'],\n [COUNTRY_CODES.BD]: ['Asia/Dhaka'],\n [COUNTRY_CODES.TH]: ['Asia/Bangkok'],\n [COUNTRY_CODES.VN]: ['Asia/Ho_Chi_Minh'],\n [COUNTRY_CODES.MY]: ['Asia/Kuala_Lumpur'],\n [COUNTRY_CODES.SG]: ['Asia/Singapore'],\n [COUNTRY_CODES.ID]: [\n 'Asia/Jakarta',\n 'Asia/Makassar',\n 'Asia/Jayapura', // Indonesia has 3 time zones\n ],\n [COUNTRY_CODES.PH]: ['Asia/Manila'],\n [COUNTRY_CODES.AE]: ['Asia/Dubai'],\n [COUNTRY_CODES.SA]: ['Asia/Riyadh'],\n [COUNTRY_CODES.IR]: ['Asia/Tehran'],\n [COUNTRY_CODES.IQ]: ['Asia/Baghdad'],\n [COUNTRY_CODES.IL]: ['Asia/Jerusalem'],\n [COUNTRY_CODES.QA]: ['Asia/Qatar'],\n [COUNTRY_CODES.KW]: ['Asia/Kuwait'],\n\n // --- AFRICA ---\n [COUNTRY_CODES.EG]: ['Africa/Cairo'],\n [COUNTRY_CODES.NG]: ['Africa/Lagos'],\n [COUNTRY_CODES.ZA]: ['Africa/Johannesburg'],\n [COUNTRY_CODES.KE]: ['Africa/Nairobi'],\n [COUNTRY_CODES.MA]: ['Africa/Casablanca'],\n [COUNTRY_CODES.GH]: ['Africa/Accra'],\n [COUNTRY_CODES.ET]: ['Africa/Addis_Ababa'],\n [COUNTRY_CODES.TZ]: ['Africa/Dar_es_Salaam'],\n [COUNTRY_CODES.SN]: ['Africa/Dakar'],\n\n // --- OCEANIA ---\n [COUNTRY_CODES.AU]: [\n 'Australia/Sydney',\n 'Australia/Melbourne',\n 'Australia/Perth',\n 'Australia/Brisbane',\n ],\n [COUNTRY_CODES.NZ]: ['Pacific/Auckland'],\n [COUNTRY_CODES.FJ]: ['Pacific/Fiji'],\n [COUNTRY_CODES.PG]: ['Pacific/Port_Moresby'],\n\n // --- ANTARCTICA ---\n [COUNTRY_CODES.AQ]: ['Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Casey'],\n};\n\nexport const ALL_COUNTRY_TIMEZONES: string[] = Array.from(\n new Set(Object.values(COUNTRY_TIMEZONES).flat())\n);\n\n/**\n * A single record describing the available time zones for a given country.\n */\nexport interface CountryTimezoneEntry {\n countryCode: CountryCode;\n timeZones: string[];\n}\n\n/**\n * Full mapping of all countries → time zones.\n */\nexport type CountryTimezones = Record<CountryCode, string[]>;\n\n/**\n * A flattened list of all unique IANA time zones supported globally.\n */\nexport type AllTimezones = string[];\n\nexport const DAYS_OF_WEEK = Array.from({ length: DAYS_IN_WEEK }, (_, i) => i);\nexport const HOURS_OF_DAY = Array.from({ length: EARLY_MORNING_HOURS }, (_, i) => i);\n\n/**\n * Type for time constant values\n */\nexport type TimeConstant = (typeof TIME_CONSTANTS)[keyof typeof TIME_CONSTANTS];\n","/**\n * Mathematical Constants\n *\n * Common mathematical values, number system bases, and calculation constants\n * used throughout the application for various computations.\n *\n * @module math/constants\n */\n\n/**\n * Number system base constants\n */\nexport const NUMBER_SYSTEM = {\n // Number bases\n /**\n * Base 2 - Binary number system\n */\n BINARY_BASE: 2,\n\n /**\n * Base 8 - Octal number system\n */\n OCTAL_BASE: 8,\n\n /**\n * Base 10 - Decimal number system\n */\n DECIMAL_BASE: 10,\n\n /**\n * Base 12 - Duodecimal number system\n */\n DUODECIMAL_BASE: 12,\n\n /**\n * Base 16 - Hexadecimal number system\n */\n HEX_BASE: 16,\n\n /**\n * Base 32 - Base32 encoding\n */\n BASE32: 32,\n\n /**\n * Base 36 - Alphanumeric number system (0-9, a-z)\n */\n BASE36: 36,\n\n /**\n * Base 58 - Bitcoin base58 encoding (excludes similar looking characters)\n */\n BASE58: 58,\n\n /**\n * Base 62 - Alphanumeric with uppercase (0-9, a-z, A-Z)\n */\n BASE62: 62,\n\n /**\n * Base 64 - Base64 encoding\n */\n BASE64: 64,\n\n // Formatting and padding\n /**\n * Default padding length for hexadecimal values (e.g., \"0F\" instead of \"F\")\n */\n HEX_PAD_LENGTH: 2,\n\n /**\n * Padding length for RGB hex colors (6 characters)\n */\n HEX_COLOR_LENGTH: 6,\n\n /**\n * Padding length for RGBA hex colors with alpha (8 characters)\n */\n HEX_COLOR_ALPHA_LENGTH: 8,\n\n /**\n * Standard byte size in bits\n */\n BITS_PER_BYTE: 8,\n\n /**\n * Standard nibble size in bits (half byte)\n */\n BITS_PER_NIBBLE: 4,\n\n /**\n * Number of bytes in a kilobyte (binary)\n */\n BYTES_PER_KB: 1024,\n\n /**\n * Number of bytes in a megabyte (binary)\n */\n BYTES_PER_MB: 1048576,\n\n /**\n * Number of bytes in a gigabyte (binary)\n */\n BYTES_PER_GB: 1073741824,\n\n // Precision and rounding\n /**\n * Default decimal places for currency\n */\n CURRENCY_DECIMAL_PLACES: 2,\n\n /**\n * Default decimal places for percentages\n */\n PERCENTAGE_DECIMAL_PLACES: 2,\n\n /**\n * Default decimal places for coordinates\n */\n COORDINATE_DECIMAL_PLACES: 6,\n\n /**\n * Maximum safe integer in JavaScript\n */\n MAX_SAFE_INTEGER: 9007199254740991,\n\n /**\n * Minimum safe integer in JavaScript\n */\n MIN_SAFE_INTEGER: -9007199254740991,\n\n /**\n * Maximum 32-bit signed integer\n */\n MAX_INT32: 2147483647,\n\n /**\n * Minimum 32-bit signed integer\n */\n MIN_INT32: -2147483648,\n\n /**\n * Maximum 16-bit unsigned integer\n */\n MAX_UINT16: 65535,\n\n /**\n * Maximum 8-bit unsigned integer\n */\n MAX_UINT8: 255,\n\n // Common angles in degrees\n /**\n * Full circle in degrees\n */\n DEGREES_FULL_CIRCLE: 360,\n\n /**\n * Half circle in degrees\n */\n DEGREES_HALF_CIRCLE: 180,\n\n /**\n * Quarter circle in degrees (right angle)\n */\n DEGREES_RIGHT_ANGLE: 90,\n\n /**\n * Degrees in a radian\n */\n DEGREES_PER_RADIAN: 57.29577951308232,\n\n /**\n * Radians in a degree\n */\n RADIANS_PER_DEGREE: 0.017453292519943295,\n\n // Mathematical constants\n /**\n * Pi (π)\n */\n PI: 3.141592653589793,\n\n /**\n * Two times Pi (2π) - full circle in radians\n */\n TWO_PI: 6.283185307179586,\n\n /**\n * Half Pi (π/2) - quarter circle in radians\n */\n HALF_PI: 1.5707963267948966,\n\n /**\n * Euler's number (e)\n */\n E: 2.718281828459045,\n\n /**\n * Golden ratio (φ)\n */\n GOLDEN_RATIO: 1.618033988749895,\n\n /**\n * Square root of 2\n */\n SQRT2: 1.4142135623730951,\n\n /**\n * Square root of 3\n */\n SQRT3: 1.7320508075688772,\n\n /**\n * Natural logarithm of 2\n */\n LN2: 0.6931471805599453,\n\n /**\n * Natural logarithm of 10\n */\n LN10: 2.302585092994046,\n\n /**\n * Base 2 logarithm of E\n */\n LOG2E: 1.4426950408889634,\n\n /**\n * Base 10 logarithm of E\n */\n LOG10E: 0.4342944819032518,\n} as const;\n\n/**\n * Mathematical and percentage constants\n */\nexport const MATH_CONSTANTS = {\n /**\n * Maximum percentage value\n */\n PERCENTAGE_MAX: 100,\n\n /**\n * Half value (50%)\n */\n HALF: 0.5,\n\n /**\n * One tenth (10%)\n */\n TENTH: 0.1,\n\n /**\n * One twentieth (5%)\n */\n TWENTIETH: 0.05,\n\n /**\n * 95th percentile\n */\n PERCENT_95: 0.95,\n\n /**\n * 99th percentile\n */\n PERCENT_99: 0.99,\n\n /**\n * Threshold for quadratic algorithm detection\n */\n QUADRATIC_THRESHOLD: 1.5,\n\n /**\n * Threshold for exponential algorithm detection\n */\n EXPONENTIAL_THRESHOLD: 3,\n\n /**\n * Multiplier for variance calculations\n */\n VARIANCE_MULTIPLIER: 4,\n\n /**\n * Offset for variance calculations\n */\n VARIANCE_OFFSET: 2,\n} as const;\n\n/**\n * Common numeric multipliers for calculations\n */\nexport const MULTIPLIERS = {\n /**\n * One and a half times (1.5x)\n */\n ONE_AND_HALF: 1.5,\n\n /**\n * Double (2x)\n */\n DOUBLE: 2,\n\n /**\n * Triple (3x)\n */\n TRIPLE: 3,\n\n /**\n * Quadruple (4x)\n */\n QUADRUPLE: 4,\n\n /**\n * Quintuple (5x)\n */\n QUINTUPLE: 5,\n\n /**\n * Ten times (10x)\n */\n TEN: 10,\n} as const;\n\n/**\n * Common numeric constants for general use\n */\nexport const NUMERIC_CONSTANTS = {\n /**\n * Milliseconds in one second\n */\n MILLISECONDS_PER_SECOND: 1000,\n\n /**\n * Seconds in one minute\n */\n SECONDS_PER_MINUTE: 60,\n\n /**\n * Minutes in one hour\n */\n MINUTES_PER_HOUR: 60,\n\n /**\n * Hours in one day\n */\n HOURS_PER_DAY: 24,\n\n /**\n * Negative one (-1)\n */\n NEGATIVE_ONE: -1,\n\n /**\n * Zero (0)\n */\n ZERO: 0,\n\n /**\n * One (1)\n */\n ONE: 1,\n\n /**\n * Two (2)\n */\n TWO: 2,\n\n /**\n * Three (3)\n */\n THREE: 3,\n\n /**\n * Five (5)\n */\n FIVE: 5,\n\n /**\n * Ten (10)\n */\n TEN: 10,\n /**\n * One hour in seconds (3600)\n */\n ONE_HOUR_SECONDS: 3600,\n /**\n * Minimum pool size (1)\n */\n MIN_POOL_SIZE: 1,\n /**\n * Maximum pool size (100)\n */\n MAX_POOL_SIZE: 100,\n /**\n * Minimum timeout in milliseconds (1000)\n */\n MIN_TIMEOUT_MS: 1000,\n} as const;\n\n/**\n * Type for number system values\n */\nexport type NumberSystemBase = (typeof NUMBER_SYSTEM)[keyof typeof NUMBER_SYSTEM];\n\n/**\n * Type for math constant values\n */\nexport type MathConstant = (typeof MATH_CONSTANTS)[keyof typeof MATH_CONSTANTS];\n\n/**\n * Type for multiplier values\n */\nexport type Multiplier = (typeof MULTIPLIERS)[keyof typeof MULTIPLIERS];\n\n/**\n * Type for numeric constant values\n */\nexport type NumericConstant = (typeof NUMERIC_CONSTANTS)[keyof typeof NUMERIC_CONSTANTS];\n","/**\n * Performance Module\n *\n * Performance monitoring and benchmarking constants used for\n * measuring application performance, detecting memory leaks,\n * and configuring performance tests.\n *\n * @module performance\n */\n\n/**\n * Performance measurement constants\n */\nexport const PERFORMANCE_CONSTANTS = {\n /**\n * Threshold for detecting memory leaks (10% growth)\n */\n MEMORY_LEAK_THRESHOLD: 0.1,\n\n /**\n * Default number of benchmark runs for performance testing\n */\n DEFAULT_BENCHMARK_RUNS: 100,\n\n /**\n * Default number of warmup runs before benchmarking\n */\n DEFAULT_WARMUP_RUNS: 10,\n} as const;\n\n/**\n * Type for performance constant values\n */\nexport type PerformanceConstant =\n (typeof PERFORMANCE_CONSTANTS)[keyof typeof PERFORMANCE_CONSTANTS];\n","/**\n * Network-related Constants\n *\n * Constants for network operations including IP addresses,\n * byte ranges, and process identifiers.\n *\n * @module network/constants\n */\n\n/**\n * Network and connection constants\n */\nexport const NETWORK_CONSTANTS = {\n /**\n * Minimum value for an IPv4 octet (excluding 0 for first octet)\n */\n IPV4_OCTET_MIN: 1,\n\n /**\n * Maximum value for an IPv4 octet\n */\n IPV4_OCTET_MAX: 255,\n\n /**\n * Number of octets in an IPv4 address\n */\n IPV4_OCTET_COUNT: 4,\n\n /**\n * Maximum value for a random byte (256 exclusive)\n */\n RANDOM_BYTE_MAX: 256,\n\n /**\n * Default maximum process ID for testing\n */\n DEFAULT_PROCESS_ID_MAX: 10000,\n} as const;\n\n/**\n * Round-trip time (RTT) thresholds in milliseconds\n * Used to classify network latency quality\n */\nexport const RTT_THRESHOLDS = {\n /**\n * Excellent network latency - under 50ms\n */\n EXCELLENT: 50,\n\n /**\n * Good network latency - under 150ms\n */\n GOOD: 150,\n\n /**\n * Fair network latency - under 400ms\n */\n FAIR: 400,\n} as const;\n\n/**\n * Network speed thresholds in Mbps\n * Used to classify connection speed quality\n */\nexport const SPEED_THRESHOLDS = {\n /**\n * Excellent connection speed - 10+ Mbps\n */\n EXCELLENT: 10,\n\n /**\n * Good connection speed - 2+ Mbps\n */\n GOOD: 2,\n\n /**\n * Fair connection speed - 0.5+ Mbps\n */\n FAIR: 0.5,\n} as const;\n\n/**\n * Network quality scores (0-100 scale)\n * Used to quantify overall network performance\n */\nexport const NETWORK_SCORES = {\n /**\n * Excellent network quality score\n */\n EXCELLENT: 100,\n\n /**\n * Good network quality score\n */\n GOOD: 75,\n\n /**\n * Fair network quality score\n */\n FAIR: 50,\n\n /**\n * Poor network quality score\n */\n POOR: 25,\n\n /**\n * Offline - no network connection\n */\n OFFLINE: 0,\n} as const;\n\n/**\n * Network timeout constants in milliseconds\n * Used for request timeout configuration based on network quality\n */\nexport const NETWORK_TIMEOUTS = {\n /**\n * Fast network timeout - 15 seconds\n */\n FAST: 15000,\n\n /**\n * Medium network timeout - 30 seconds\n */\n MEDIUM: 30000,\n\n /**\n * Slow network timeout - 60 seconds\n */\n SLOW: 60000,\n\n /**\n * Very slow network timeout - 90 seconds\n */\n VERY_SLOW: 90000,\n\n /**\n * Offline timeout - 5 seconds (fail fast)\n */\n OFFLINE: 5000,\n} as const;\n\n/**\n * Cache TTL (Time-To-Live) constants in seconds\n * Used for cache expiration strategies\n */\nexport const CACHE_TTL = {\n /**\n * Short cache TTL - 5 minutes\n */\n SHORT: 300,\n\n /**\n * Medium cache TTL - 10 minutes\n */\n MEDIUM: 600,\n\n /**\n * Long cache TTL - 30 minutes\n */\n LONG: 1800,\n} as const;\n\n/**\n * Cache stale time constants in seconds\n * Used to determine when cached data is considered stale\n */\nexport const CACHE_STALE = {\n /**\n * Short stale time - 1 minute\n */\n SHORT: 60,\n\n /**\n * Medium stale time - 5 minutes\n */\n MEDIUM: 300,\n\n /**\n * Long stale time - 15 minutes\n */\n LONG: 900,\n} as const;\n\n/**\n * Request deduplication time constants in milliseconds\n * Used to prevent duplicate requests within time windows\n */\nexport const DEDUPE_TIME = {\n /**\n * Aggressive deduplication - 1 second\n */\n AGGRESSIVE: 1000,\n\n /**\n * Balanced deduplication - 2 seconds\n */\n BALANCED: 2000,\n\n /**\n * Conservative deduplication - 5 seconds\n */\n CONSERVATIVE: 5000,\n} as const;\n\n/**\n * Retry attempt constants\n * Number of retry attempts for failed requests\n */\nexport const RETRY_ATTEMPTS = {\n /**\n * Few retry attempts - 2\n */\n FEW: 2,\n\n /**\n * Standard retry attempts - 3\n */\n STANDARD: 3,\n\n /**\n * Many retry attempts - 5\n */\n MANY: 5,\n} as const;\n\n/**\n * Retry delay constants in milliseconds\n * Initial delays between retry attempts\n */\nexport const RETRY_DELAYS = {\n /**\n * Short retry delay - 1 second\n */\n SHORT: 1000,\n\n /**\n * Long retry delay - 2 seconds\n */\n LONG: 2000,\n\n /**\n * Maximum retry delay - 30 seconds\n */\n MAX: 30000,\n} as const;\n\n/**\n * Retry backoff multiplier constants\n * Exponential backoff multipliers for retry delays\n */\nexport const RETRY_BACKOFF = {\n /**\n * Small backoff multiplier - 1.5x\n */\n SMALL: 1.5,\n\n /**\n * Medium backoff multiplier - 2x\n */\n MEDIUM: 2,\n\n /**\n * Large backoff multiplier - 2.5x\n */\n LARGE: 2.5,\n} as const;\n\n/**\n * Batch size constants\n * Number of items to process in a single batch\n */\nexport const BATCH_SIZES = {\n /**\n * Huge batch size - 50 items\n */\n HUGE: 50,\n\n /**\n * Large batch size - 25 items\n */\n LARGE: 25,\n\n /**\n * Medium batch size - 10 items\n */\n MEDIUM: 10,\n\n /**\n * Small batch size - 5 items\n */\n SMALL: 5,\n\n /**\n * No batching - 0 items\n */\n NONE: 0,\n} as const;\n\n/**\n * Page size constants\n * Number of items per page for pagination\n */\nexport const PAGE_SIZES = {\n /**\n * Huge page size - 100 items\n */\n HUGE: 100,\n\n /**\n * Large page size - 50 items\n */\n LARGE: 50,\n\n /**\n * Medium page size - 25 items\n */\n MEDIUM: 25,\n\n /**\n * Small page size - 10 items\n */\n SMALL: 10,\n\n /**\n * No pagination - 0 items\n */\n NONE: 0,\n} as const;\n\n/**\n * Type for network constant values\n */\nexport type NetworkConstant = (typeof NETWORK_CONSTANTS)[keyof typeof NETWORK_CONSTANTS];\n\n/**\n * Type for RTT threshold values\n */\nexport type RTTThreshold = (typeof RTT_THRESHOLDS)[keyof typeof RTT_THRESHOLDS];\n\n/**\n * Type for speed threshold values\n */\nexport type SpeedThreshold = (typeof SPEED_THRESHOLDS)[keyof typeof SPEED_THRESHOLDS];\n\n/**\n * Type for network score values\n */\nexport type NetworkScore = (typeof NETWORK_SCORES)[keyof typeof NETWORK_SCORES];\n\n/**\n * Type for network timeout values\n */\nexport type NetworkTimeout = (typeof NETWORK_TIMEOUTS)[keyof typeof NETWORK_TIMEOUTS];\n\n/**\n * Type for cache TTL values\n */\nexport type CacheTTL = (typeof CACHE_TTL)[keyof typeof CACHE_TTL];\n\n/**\n * Type for cache stale values\n */\nexport type CacheStale = (typeof CACHE_STALE)[keyof typeof CACHE_STALE];\n\n/**\n * Type for dedupe time values\n */\nexport type DedupeTime = (typeof DEDUPE_TIME)[keyof typeof DEDUPE_TIME];\n\n/**\n * Type for retry attempt values\n */\nexport type RetryAttempt = (typeof RETRY_ATTEMPTS)[keyof typeof RETRY_ATTEMPTS];\n\n/**\n * Type for retry delay values\n */\nexport type RetryDelay = (typeof RETRY_DELAYS)[keyof typeof RETRY_DELAYS];\n\n/**\n * Type for retry backoff values\n */\nexport type RetryBackoff = (typeof RETRY_BACKOFF)[keyof typeof RETRY_BACKOFF];\n\n/**\n * Type for batch size values\n */\nexport type BatchSize = (typeof BATCH_SIZES)[keyof typeof BATCH_SIZES];\n\n/**\n * Type for page size values\n */\nexport type PageSize = (typeof PAGE_SIZES)[keyof typeof PAGE_SIZES];\n","/**\n * Display and Character Constants\n *\n * Constants for display formatting, charting,\n * and character code operations.\n *\n * @module display/constants\n */\n\n/**\n * Display and chart formatting constants\n */\nexport const DISPLAY_CONSTANTS = {\n /**\n * Maximum length for chart bar display\n */\n CHART_BAR_MAX_LENGTH: 40,\n\n /**\n * Length of chart separator lines\n */\n CHART_SEPARATOR_LENGTH: 60,\n\n /**\n * Number of decimal places for display precision\n */\n DECIMAL_PRECISION: 3,\n} as const;\n\n/**\n * Character code constants\n */\nexport const CHAR_CODES = {\n /**\n * ASCII code for lowercase 'a'\n */\n LOWERCASE_A: 97,\n\n /**\n * Number of letters in the alphabet\n */\n ALPHABET_SIZE: 26,\n\n /**\n * ASCII code for space character\n */\n SPACE: 32,\n} as const;\n\n/**\n * Type for display constant values\n */\nexport type DisplayConstant = (typeof DISPLAY_CONSTANTS)[keyof typeof DISPLAY_CONSTANTS];\n\n/**\n * Type for character code values\n */\nexport type CharCode = (typeof CHAR_CODES)[keyof typeof CHAR_CODES];\n","/**\n * A centralized collection of numeric constants used to avoid magic numbers across the codebase.\n *\n * Purpose:\n * - Provide named aliases for common numeric values so intent is clearer and maintenance is easier.\n * - Keep commonly used numeric literals (counts, thresholds, time durations, limits) in one place.\n *\n * Typical uses:\n * - Time and duration calculations (e.g., seconds/minutes/hours, TTLs, timeouts).\n * - Pagination, limit and capacity defaults.\n * - Validation thresholds, scaling factors and numeric formatting.\n * - Bit/byte or base arithmetic where small numeric constants improve readability.\n *\n * Properties (brief intent and common usage):\n * - TWO (2) — small counts, boolean-like numeric operations, pair-related logic.\n * - FIVE (5) — small retry counts or UI/validation limits.\n * - NINE (9) — index/format boundaries or small-range checks.\n * - TEN (10) — decimal/base operations, digit limits, common loop bounds.\n * - SIXTEEN (16) — bit/hex operations, buffer sizes or base-16 related math.\n * - TWENTY_FOUR (24) — hours-in-day, daily calculations.\n * - THIRTY_SIX (36) — base-36 or domain-specific scaling factors.\n * - SIXTY (60) — seconds/minutes conversions.\n * - NINETY (90) — percentage/angle thresholds or large-range caps.\n * - HUNDERD (100) — percentage base or general scaling (note: name preserved for backward compatibility).\n * - THOUSAND (1000) — millisecond/rounding bases or thousand-scale thresholds.\n * - FIVE_THOUSAND (5000) — medium-duration timeouts or capacity hints (e.g., ms).\n * - THREE_HUNDERD (300) — short timeouts or conventional numeric boundaries (name preserved).\n * - THIRTY_SIX_HUNDERD (3600) — seconds-per-hour; common default TTL/cache durations (3600 seconds).\n * - THIRTY_THOUSAND (30000) — longer timeouts/polling intervals in milliseconds.\n *\n * Remarks:\n * - Using these constants improves readability and makes it easier to change a value in one place.\n * - Several keys contain spelling inconsistencies (e.g., \"HUNDERD\", \"THREE_HUNDERD\", \"THIRTY_SIX_HUNDERD\") — keep names stable to avoid breaking callers; consider normalizing names in a planned refactor.\n *\n * Example:\n * - const timeoutMs = digits.FIVE_THOUSAND; // use 5000 ms timeout\n * - const hourlySeconds = digits.THIRTY_SIX_HUNDERD; // use 3600 seconds for TTL\n */\nexport const NUMERIX = {\n TWO: 2,\n FIVE: 5,\n NINE: 9,\n TEN: 10,\n TWENTY_FOUR: 24,\n THIRTY_SIX: 36,\n FIFTY: 50,\n SIXTY: 60,\n NINETY: 90,\n HUNDERD: 100,\n FIVE_HUNDERD: 500,\n ONE_THOUSAND_AND_FIVE_HUNDERD: 1500,\n THOUSAND: 1000,\n TWO_THOUSAND: 2000,\n THREE_THOUSAND: 3000,\n FOUR_THOUSAND: 4000,\n FIVE_THOUSAND: 5000,\n THIRTY_SIX_HUNDERD: 3600,\n THREE_HUNDERD: 300,\n SIXTEEN: 16,\n TWENTY_THOUSAND: 20000,\n THIRTY_THOUSAND: 30000,\n FORTY_FIVE_THOUSAND: 45000,\n FIFTY_THOUSAND: 50000,\n SIXTY_THOUSAND: 60000,\n};\n","// Default configuration for the dynamic PostgreSQL connection pool.\n// Defines minimum/maximum connections, timeouts, and auto-scaling thresholds\n// to maintain optimal performance and resource utilization.\nexport const dynamicPoolDefaultConfig = {\n min: 2,\n max: 10,\n idleTimeoutMillis: 30000,\n acquireTimeoutMillis: 10000,\n scaling: {\n enabled: true,\n scaleUpThreshold: 80, // Scale up when pool usage exceeds 80%\n scaleDownThreshold: 20, // Scale down when usage drops below 20%\n scaleInterval: 30000, // Interval (ms) to check scaling conditions\n maxScale: 2, // Maximum scaling multiplier\n },\n};\n","/**\n * Social media platform URLs\n */\nexport const SOCIAL_LINKS = {\n /**\n * X (formerly Twitter) profile URL\n */\n x: 'https://x.com/Plyaz_',\n\n /**\n * Instagram profile URL\n */\n instagram: 'https://instagram.com/plyaz_',\n\n /**\n * LinkedIn company page URL\n */\n linkedin: 'https://linkedin.com/company/plyaz',\n} as const;\n\n/**\n * Product-related external links\n */\nexport const PRODUCT_LINKS = {\n /**\n * Documentation site URL\n */\n docs: 'https://plyaz.gitbook.io/plyaz',\n\n /**\n * Community platform URL\n */\n community: 'https://community.plyaz.co.uk',\n\n /**\n * Support email address\n */\n support: 'mailto:help@plyaz.co.uk',\n} as const;\n\n/**\n * Blog configuration constants\n */\nexport const BLOG = {\n /**\n * Number of posts to display initially\n */\n INITIAL_POSTS_TO_SHOW: 3,\n\n /**\n * Number of posts to load when \"Load More\" is clicked\n */\n POSTS_INCREMENT: 3,\n\n /**\n * Animation delay in milliseconds between post appearances\n */\n ANIMATION_DELAY: 100,\n} as const;\n","/**\n * Accessibility (a11y) Constants\n *\n * WCAG compliance constants, ARIA attributes, color contrast calculations,\n * and other accessibility-related values used throughout the application.\n *\n * @module a11y/constants\n */\n\n/**\n * Core accessibility constants for testing and validation\n */\nexport const A11Y_CONSTANTS = {\n // Focus and interaction timing\n /**\n * Delay before checking focus state (milliseconds)\n */\n FOCUS_CHECK_DELAY: 100,\n\n /**\n * Maximum number of tab key presses for focus testing\n */\n FOCUS_TAB_COUNT: 10,\n\n /**\n * Minimum time for focus to be visible (milliseconds)\n */\n MIN_FOCUS_VISIBLE_TIME: 200,\n\n /**\n * Maximum time to wait for focus change (milliseconds)\n */\n MAX_FOCUS_WAIT_TIME: 3000,\n\n /**\n * Debounce delay for screen reader announcements (milliseconds)\n */\n SCREEN_READER_DEBOUNCE: 150,\n\n // Text size thresholds\n /**\n * Minimum font size for large text (points)\n */\n MIN_LARGE_TEXT_SIZE: 18,\n\n /**\n * Minimum font size for bold large text (points)\n */\n MIN_LARGE_TEXT_BOLD_SIZE: 14,\n\n /**\n * Minimum font size for normal text (points)\n */\n MIN_NORMAL_TEXT_SIZE: 14,\n\n /**\n * Minimum touch target size (pixels) - WCAG 2.5.5\n */\n MIN_TOUCH_TARGET_SIZE: 44,\n\n /**\n * Minimum touch target size for inline elements (pixels)\n */\n MIN_INLINE_TARGET_SIZE: 24,\n\n // Color and contrast calculations\n /**\n * Maximum value for RGB color channels\n */\n COLOR_CHANNEL_MAX: 255,\n\n /**\n * sRGB threshold for luminance calculation\n */\n SRGB_THRESHOLD: 0.03928,\n\n /**\n * sRGB divisor for linear conversion\n */\n SRGB_DIVISOR: 12.92,\n\n /**\n * sRGB offset for gamma correction\n */\n SRGB_OFFSET: 0.055,\n\n /**\n * sRGB scale factor for gamma correction\n */\n SRGB_SCALE: 1.055,\n\n /**\n * sRGB exponent for gamma correction\n */\n SRGB_EXPONENT: 2.4,\n\n /**\n * Red channel weight for luminance calculation\n */\n LUMINANCE_RED: 0.2126,\n\n /**\n * Green channel weight for luminance calculation\n */\n LUMINANCE_GREEN: 0.7152,\n\n /**\n * Blue channel weight for luminance calculation\n */\n LUMINANCE_BLUE: 0.0722,\n\n /**\n * Offset added to luminance for contrast ratio calculation\n */\n LUMINANCE_OFFSET: 0.05,\n\n // WCAG contrast ratios\n /**\n * Minimum contrast ratio for AA compliance (normal text)\n */\n CONTRAST_RATIO_AA: 4.5,\n\n /**\n * Minimum contrast ratio for AA compliance (large text)\n */\n CONTRAST_RATIO_AA_LARGE: 3,\n\n /**\n * Minimum contrast ratio for AAA compliance (normal text)\n */\n CONTRAST_RATIO_AAA: 7,\n\n /**\n * Minimum contrast ratio for AAA compliance (large text)\n */\n CONTRAST_RATIO_AAA_LARGE: 4.5,\n\n /**\n * Minimum contrast ratio for non-text elements (graphics, UI components)\n */\n CONTRAST_RATIO_GRAPHICS: 3,\n\n /**\n * Maximum percentage value\n */\n PERCENTAGE_MAX: 100,\n\n // Animation and motion\n /**\n * Maximum duration for essential animations (milliseconds)\n */\n MAX_ESSENTIAL_ANIMATION_DURATION: 5000,\n\n /**\n * Default duration for reduced motion (milliseconds)\n */\n REDUCED_MOTION_DURATION: 1,\n\n /**\n * Maximum flashes per second to avoid seizures (WCAG 2.3.1)\n */\n MAX_FLASH_RATE: 3,\n\n /**\n * Minimum time between auto-updating content (seconds)\n */\n MIN_AUTO_UPDATE_INTERVAL: 5,\n\n // Timing and session\n /**\n * Minimum warning time before timeout (seconds) - WCAG 2.2.1\n */\n MIN_TIMEOUT_WARNING: 20,\n\n /**\n * Default session timeout (minutes)\n */\n DEFAULT_SESSION_TIMEOUT: 20,\n\n /**\n * Extended session timeout for accessibility (minutes)\n */\n EXTENDED_SESSION_TIMEOUT: 120,\n\n // Audio and video\n /**\n * Maximum background audio level (dB) - WCAG 1.4.7\n */\n MAX_BACKGROUND_AUDIO_LEVEL: -20,\n\n /**\n * Default caption offset from bottom (pixels)\n */\n DEFAULT_CAPTION_OFFSET: 50,\n\n /**\n * Minimum caption font size (pixels)\n */\n MIN_CAPTION_FONT_SIZE: 16,\n\n /**\n * Default audio description delay (milliseconds)\n */\n AUDIO_DESCRIPTION_DELAY: 100,\n\n // Form validation\n /**\n * Delay before showing validation errors (milliseconds)\n */\n VALIDATION_DELAY: 1000,\n\n /**\n * Maximum error message length for screen readers\n */\n MAX_ERROR_MESSAGE_LENGTH: 150,\n\n /**\n * Minimum password length for accessibility\n */\n MIN_PASSWORD_LENGTH: 8,\n\n // Zoom and scaling\n /**\n * Maximum zoom level without horizontal scrolling (percentage)\n */\n MAX_ZOOM_WITHOUT_SCROLL: 200,\n\n /**\n * Minimum zoom level supported (percentage)\n */\n MIN_ZOOM_LEVEL: 50,\n\n /**\n * Maximum zoom level supported (percentage)\n */\n MAX_ZOOM_LEVEL: 500,\n\n // Reading and comprehension\n /**\n * Maximum line length for readability (characters)\n */\n MAX_LINE_LENGTH: 80,\n\n /**\n * Optimal line length for reading (characters)\n */\n OPTIMAL_LINE_LENGTH: 66,\n\n /**\n * Minimum line height for readability\n */\n MIN_LINE_HEIGHT: 1.5,\n\n /**\n * Maximum paragraph width for readability (pixels)\n */\n MAX_PARAGRAPH_WIDTH: 600,\n} as const;\n\n/**\n * ARIA roles for semantic HTML\n */\nexport const ARIA_ROLES = {\n // Landmark roles\n BANNER: 'banner',\n COMPLEMENTARY: 'complementary',\n CONTENTINFO: 'contentinfo',\n FORM: 'form',\n MAIN: 'main',\n NAVIGATION: 'navigation',\n REGION: 'region',\n SEARCH: 'search',\n\n // Structure roles\n APPLICATION: 'application',\n ARTICLE: 'article',\n CELL: 'cell',\n COLUMNHEADER: 'columnheader',\n DEFINITION: 'definition',\n DIRECTORY: 'directory',\n DOCUMENT: 'document',\n FEED: 'feed',\n FIGURE: 'figure',\n GROUP: 'group',\n HEADING: 'heading',\n IMG: 'img',\n LIST: 'list',\n LISTITEM: 'listitem',\n MATH: 'math',\n NOTE: 'note',\n PRESENTATION: 'presentation',\n ROW: 'row',\n ROWGROUP: 'rowgroup',\n ROWHEADER: 'rowheader',\n SEPARATOR: 'separator',\n TABLE: 'table',\n TERM: 'term',\n\n // Widget roles\n ALERT: 'alert',\n ALERTDIALOG: 'alertdialog',\n BUTTON: 'button',\n CHECKBOX: 'checkbox',\n COMBOBOX: 'combobox',\n DIALOG: 'dialog',\n GRIDCELL: 'gridcell',\n LINK: 'link',\n LISTBOX: 'listbox',\n LOG: 'log',\n MARQUEE: 'marquee',\n MENU: 'menu',\n MENUBAR: 'menubar',\n MENUITEM: 'menuitem',\n MENUITEMCHECKBOX: 'menuitemcheckbox',\n MENUITEMRADIO: 'menuitemradio',\n OPTION: 'option',\n PROGRESSBAR: 'progressbar',\n RADIO: 'radio',\n RADIOGROUP: 'radiogroup',\n SCROLLBAR: 'scrollbar',\n SEARCHBOX: 'searchbox',\n SLIDER: 'slider',\n SPINBUTTON: 'spinbutton',\n STATUS: 'status',\n SWITCH: 'switch',\n TAB: 'tab',\n TABLIST: 'tablist',\n TABPANEL: 'tabpanel',\n TEXTBOX: 'textbox',\n TIMER: 'timer',\n TOOLBAR: 'toolbar',\n TOOLTIP: 'tooltip',\n TREE: 'tree',\n TREEGRID: 'treegrid',\n TREEITEM: 'treeitem',\n\n // Abstract roles (should not be used directly)\n COMMAND: 'command',\n COMPOSITE: 'composite',\n INPUT: 'input',\n LANDMARK: 'landmark',\n RANGE: 'range',\n ROLETYPE: 'roletype',\n SECTION: 'section',\n SECTIONHEAD: 'sectionhead',\n SELECT: 'select',\n STRUCTURE: 'structure',\n WIDGET: 'widget',\n WINDOW: 'window',\n} as const;\n\n/**\n * Common ARIA attributes\n */\nexport const ARIA_ATTRIBUTES = {\n // Widget attributes\n ARIA_AUTOCOMPLETE: 'aria-autocomplete',\n ARIA_CHECKED: 'aria-checked',\n ARIA_DISABLED: 'aria-disabled',\n ARIA_ERRORMESSAGE: 'aria-errormessage',\n ARIA_EXPANDED: 'aria-expanded',\n ARIA_HASPOPUP: 'aria-haspopup',\n ARIA_HIDDEN: 'aria-hidden',\n ARIA_INVALID: 'aria-invalid',\n ARIA_LABEL: 'aria-label',\n ARIA_LEVEL: 'aria-level',\n ARIA_MODAL: 'aria-modal',\n ARIA_MULTILINE: 'aria-multiline',\n ARIA_MULTISELECTABLE: 'aria-multiselectable',\n ARIA_ORIENTATION: 'aria-orientation',\n ARIA_PLACEHOLDER: 'aria-placeholder',\n ARIA_PRESSED: 'aria-pressed',\n ARIA_READONLY: 'aria-readonly',\n ARIA_REQUIRED: 'aria-required',\n ARIA_SELECTED: 'aria-selected',\n ARIA_SORT: 'aria-sort',\n ARIA_VALUEMAX: 'aria-valuemax',\n ARIA_VALUEMIN: 'aria-valuemin',\n ARIA_VALUENOW: 'aria-valuenow',\n ARIA_VALUETEXT: 'aria-valuetext',\n\n // Live region attributes\n ARIA_LIVE: 'aria-live',\n ARIA_ATOMIC: 'aria-atomic',\n ARIA_RELEVANT: 'aria-relevant',\n ARIA_BUSY: 'aria-busy',\n\n // Drag and drop attributes\n ARIA_DROPEFFECT: 'aria-dropeffect',\n ARIA_GRABBED: 'aria-grabbed',\n\n // Relationship attributes\n ARIA_ACTIVEDESCENDANT: 'aria-activedescendant',\n ARIA_COLCOUNT: 'aria-colcount',\n ARIA_COLINDEX: 'aria-colindex',\n ARIA_COLSPAN: 'aria-colspan',\n ARIA_CONTROLS: 'aria-controls',\n ARIA_DESCRIBEDBY: 'aria-describedby',\n ARIA_DETAILS: 'aria-details',\n ARIA_FLOWTO: 'aria-flowto',\n ARIA_LABELLEDBY: 'aria-labelledby',\n ARIA_OWNS: 'aria-owns',\n ARIA_POSINSET: 'aria-posinset',\n ARIA_ROWCOUNT: 'aria-rowcount',\n ARIA_ROWINDEX: 'aria-rowindex',\n ARIA_ROWSPAN: 'aria-rowspan',\n ARIA_SETSIZE: 'aria-setsize',\n\n // Global attributes\n ARIA_CURRENT: 'aria-current',\n ARIA_DESCRIPTION: 'aria-description',\n ARIA_KEYSHORTCUTS: 'aria-keyshortcuts',\n ARIA_ROLEDESCRIPTION: 'aria-roledescription',\n} as const;\n\n/**\n * Keyboard navigation constants\n */\nexport const KEYBOARD_CODES = {\n // Navigation keys\n TAB: 'Tab',\n ENTER: 'Enter',\n SPACE: ' ',\n ESCAPE: 'Escape',\n ARROW_UP: 'ArrowUp',\n ARROW_DOWN: 'ArrowDown',\n ARROW_LEFT: 'ArrowLeft',\n ARROW_RIGHT: 'ArrowRight',\n HOME: 'Home',\n END: 'End',\n PAGE_UP: 'PageUp',\n PAGE_DOWN: 'PageDown',\n\n // Legacy key codes (for compatibility)\n TAB_KEYCODE: 9,\n ENTER_KEYCODE: 13,\n ESCAPE_KEYCODE: 27,\n SPACE_KEYCODE: 32,\n ARROW_LEFT_KEYCODE: 37,\n ARROW_UP_KEYCODE: 38,\n ARROW_RIGHT_KEYCODE: 39,\n ARROW_DOWN_KEYCODE: 40,\n} as const;\n\n/**\n * Screen reader announcement priorities\n */\nexport const ANNOUNCEMENT_PRIORITY = {\n /**\n * Polite announcement - waits for current speech to finish\n */\n POLITE: 'polite',\n\n /**\n * Assertive announcement - interrupts current speech\n */\n ASSERTIVE: 'assertive',\n\n /**\n * Off - no announcement\n */\n OFF: 'off',\n} as const;\n\n/**\n * Focus trap configurations\n */\nexport const FOCUS_TRAP = {\n /**\n * Initial focus selector\n */\n INITIAL_FOCUS: '[data-focus-initial], [autofocus]',\n\n /**\n * Focusable elements selector\n */\n FOCUSABLE_ELEMENTS:\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n\n /**\n * Interactive elements selector\n */\n INTERACTIVE_ELEMENTS: 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n\n /**\n * Skip link selector\n */\n SKIP_LINK: '[data-skip-link], .skip-link',\n} as const;\n\n/**\n * Type exports\n */\nexport type A11yConstant = (typeof A11Y_CONSTANTS)[keyof typeof A11Y_CONSTANTS];\nexport type AriaRole = (typeof ARIA_ROLES)[keyof typeof ARIA_ROLES];\nexport type AriaAttribute = (typeof ARIA_ATTRIBUTES)[keyof typeof ARIA_ATTRIBUTES];\nexport type KeyboardCode = (typeof KEYBOARD_CODES)[keyof typeof KEYBOARD_CODES];\nexport type AnnouncementPriority =\n (typeof ANNOUNCEMENT_PRIORITY)[keyof typeof ANNOUNCEMENT_PRIORITY];\n","import type { EventScope } from '@plyaz/types/errors';\n\n// Errors Code with messages\nexport const ERRORS_CODES = {\n validation_error: {\n status: 400,\n message: 'errors.validation.error',\n },\n unauthorized: {\n status: 401,\n message: 'errors.auth.unauthorized',\n },\n payment_failed: {\n status: 402,\n message: 'errors.payment.failed',\n },\n forbidden: {\n status: 403,\n message: 'errors.auth.forbidden',\n },\n not_found: {\n status: 404,\n message: 'errors.common.notFound',\n },\n method_not_allowed: {\n status: 405,\n message: 'errors.common.methodNotAllowed',\n },\n user_already_exists: {\n status: 409,\n message: 'errors.user.alreadyExists',\n },\n unprocessable_entity: {\n status: 422,\n message: 'errors.validation.unprocessable',\n },\n too_many_requests: {\n status: 429,\n message: 'errors.rateLimit.tooManyRequests',\n },\n internal_server_error: {\n status: 500,\n message: 'errors.server.internal',\n },\n not_implemented: {\n status: 501,\n message: 'errors.server.notImplemented',\n },\n bad_gateway: {\n status: 502,\n message: 'errors.server.badGateway',\n },\n service_unavailable: {\n status: 503,\n message: 'errors.server.serviceUnavailable',\n },\n gateway_timeout: {\n status: 504,\n message: 'errors.server.gatewayTimeout',\n },\n} as const;\n\nexport const BASE_ERRORS_RESPONSE = {\n ['InvalidInput']: {\n type: 'form',\n message: 'Invalid input',\n timestamp: new Date().toISOString(),\n },\n [ERRORS_CODES.internal_server_error.status]: {\n type: 'server',\n message: 'Something went wrong',\n timestamp: new Date().toISOString(),\n },\n [ERRORS_CODES.unauthorized.status]: {\n type: 'auth',\n message: 'Please log in again',\n timestamp: new Date().toISOString(),\n },\n};\n\n/**\n * Default event scopes for errors\n */\nexport const DEFAULT_ERROR_EVENT_SCOPES = [\n 'GLOBAL',\n 'CONFIG',\n 'CLIENT',\n 'REQUEST',\n 'TEMPORARY',\n] as const as EventScope[];\n","// levels of the loggers\nexport const LOGGER_LEVELS = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60,\n};\n\n// Sensitive fields excluded from logs\nexport const SENSITIVE_DATA = ['email', 'password', 'wallet', 'token', 'secret', 'ssn'];\n\nexport const LOGGER_TRANSPORT_CONFIGURATION = [\n {\n target: 'pino-pretty',\n options: {\n colorize: true,\n },\n },\n];\n","/**\n * API Client Environment Configurations\n *\n * Provides environment-specific default configurations for the API client service.\n * These configs are optimized for production, staging, and development environments.\n *\n * @module config/api/environments\n */\n\nimport type { ApiConfig, HeaderPresetName, EncryptionKey } from '@plyaz/types/api';\nimport { TIME_CONSTANTS } from '../time';\n\n/**\n * Production configuration for the API client service.\n * Optimized for reliability, security, and performance in production environments.\n *\n * Key Production Features:\n * - Encryption REQUIRED (enforced)\n * - Minimal headers (privacy-focused)\n * - Network adaptation enabled (auto-adjust to conditions)\n * - Balanced telemetry (monitoring without overhead)\n * - Aggressive retry strategy (5 attempts with exponential backoff)\n * - Uses retry PRESET strings instead of hardcoded values\n */\nexport const PRODUCTION_CONFIG: Partial<ApiConfig> = {\n // Core settings\n timeout: TIME_CONSTANTS.THIRTY_SECONDS,\n\n // Unified strategy - includes cache, retry, performance strategies\n // 'interactive' = standard cache + standard retry + balanced performance\n unifiedStrategy: 'interactive',\n\n // Revalidation strategy - NOT covered by unifiedStrategy\n // Controls when to revalidate cached data (SWR pattern)\n revalidationStrategy: 'balanced', // Revalidate on focus, network reconnect\n\n // Error handling strategy - return {data, error} without throwing\n strategy: 'softFail',\n\n // Default JSON headers for most API interactions\n headers: {\n presets: ['json' as unknown as HeaderPresetName] as const, // Sets Accept and Content-Type to application/json\n autoDetectNetwork: true,\n requestClientHints: false,\n },\n\n // Enriched headers - minimal preset with GLOBAL compliance\n // Adds ~5-7 headers: platform, app version, timezone, locale, network type\n // Privacy-conscious: respects DNT, no device fingerprinting\n // Global compliance: covers GDPR, CCPA, PIPL, APPI automatically\n enrichedHeaders: {\n enabled: true,\n preset: 'standard', // standard context headers\n includeDevice: false, // No device fingerprinting (privacy)\n includeNetwork: true, // Network type (wifi/cellular/etc)\n includePlatform: true, // Platform (web/ios/android)\n includeCompliance: true, // Timezone, locale for regional compliance\n respectDoNotTrack: true, // Honor DNT header (GDPR/CCPA)\n autoDetectRegion: true, // Auto-detect region from timezone\n regionalPreset: 'global', // Global compliance (GDPR+CCPA+PIPL+APPI)\n useTimezone: true, // Use timezone for region detection\n },\n\n // Network awareness - monitoring enabled, WITH auto-adaptation\n // Adjusts strategies based on network quality\n networkAware: {\n enabled: true, // Enable network quality monitoring\n adaptConfig: true, // Auto-adjust strategies based on network\n requestClientHints: false, // Don't request extra browser hints\n },\n\n // Tracking configuration - balanced for production (monitoring without overhead)\n tracking: {\n enabled: true,\n operations: true,\n events: true,\n performanceMode: 'minimal', // Not 'full' - avoid overhead in prod\n queueStrategy: 'batch',\n eventStrategy: 'queued',\n telemetry: true, // Send to monitoring in production\n },\n\n // Retry strategy - use preset instead of hardcoded values\n retryStrategy: 'aggressive', // More retries for production reliability (5 attempts)\n // Note: unifiedStrategy 'interactive' already includes 'standard' retry (3 attempts)\n // This overrides it for production to be more aggressive\n\n // Encryption - ENABLED by default for regulatory compliance (GDPR, CCPA, PIPL, etc.)\n // Encrypts common sensitive fields automatically\n // User MUST provide encryption key via init() - defaults don't include key\n encryption: {\n enabled: true,\n algorithm: 'AES-GCM', // Industry standard, FIPS 140-2 compliant\n autoDecrypt: true, // Auto-decrypt responses\n target: ['all'], // Encrypt in request body and query params\n // Key will be provided by user during initialization\n key: undefined as unknown as EncryptionKey, // Placeholder - user must provide via apiConfig\n\n // Common sensitive field patterns (uses glob matching)\n // Covers: email, SSN, phone, card numbers, passwords, tokens, wallet addresses\n fields: [\n // Personal Identifiable Information (PII) - GDPR Art. 9\n '*.email',\n '*.ssn',\n '*.taxId',\n '*.nationalId',\n '*.passport',\n '*.driverLicense',\n '*.governmentId',\n\n // Contact Information - GDPR Art. 4(1)\n '*.phone',\n '*.phoneNumber',\n '*.mobile',\n '*.telephone',\n '*.address.street',\n '*.address.line1',\n '*.address.line2',\n '*.postalCode',\n '*.zipCode',\n\n // Financial Information - PCI-DSS Req 3.4\n '*.cardNumber',\n '*.creditCard',\n '*.debitCard',\n '*.cvv',\n '*.cvc',\n '*.iban',\n '*.accountNumber',\n '*.routingNumber',\n '*.swiftCode',\n '*.sortCode',\n\n // Authentication Credentials - OWASP ASVS 2.1\n '*.password',\n '*.apiKey',\n '*.secret',\n '*.token',\n '*.accessToken',\n '*.refreshToken',\n '*.privateKey',\n '*.secretKey',\n\n // Crypto/Blockchain - Web3 security\n '*.wallet',\n '*.walletAddress',\n '*.mnemonic',\n '*.seedPhrase',\n '*.privateKeyHex',\n\n // Health Information - HIPAA §164.312(a)(2)(iv)\n '*.medicalRecord',\n '*.medicalRecordNumber',\n '*.healthInfo',\n '*.diagnosis',\n '*.prescription',\n '*.healthInsurance',\n\n // Biometric Data - GDPR Art. 9(1)\n '*.fingerprint',\n '*.faceId',\n '*.biometric',\n\n // Date of Birth - Age verification\n '*.birthDate',\n '*.dateOfBirth',\n '*.dob',\n\n // IP Addresses - GDPR considers PII\n '*.ipAddress',\n '*.ip',\n ],\n\n // Key provider - MUST be provided by user via init()\n // Supports three patterns:\n //\n // 1. EncryptionKey object (with metadata):\n // key: {\n // id: 'prod-key-v1',\n // key: process.env.ENCRYPTION_KEY!,\n // algorithm: 'AES-GCM',\n // format: 'raw'\n // }\n //\n // 2. KeyProvider function (for key rotation):\n // key: async (context) => {\n // const keyId = await getActiveKeyId();\n // const key = await keyManagementService.getKey(keyId);\n // return { id: keyId, key, algorithm: 'AES-GCM' };\n // }\n //\n // 3. Simple string (auto-converted to EncryptionKey):\n // key: process.env.ENCRYPTION_KEY!\n //\n // NO default key - user provides via init()\n },\n};\n\n/**\n * Staging configuration for the API client service.\n * ALIGNED with production for accurate pre-production testing.\n * Only differences: standard headers for debugging, full performance tracking.\n *\n * Key Staging Features:\n * - Encryption ENABLED (same as production)\n * - Standard headers (slightly more context for debugging than prod)\n * - Full performance tracking (catch issues before production)\n * - Same retry strategy as production (aggressive)\n * - Same network adaptation as production\n */\nexport const STAGING_CONFIG: Partial<ApiConfig> = {\n // Core settings - SAME AS PRODUCTION\n timeout: TIME_CONSTANTS.THIRTY_SECONDS,\n\n // Unified strategy - SAME AS PRODUCTION\n unifiedStrategy: 'interactive',\n\n // Revalidation strategy - SAME AS PRODUCTION\n revalidationStrategy: 'balanced',\n\n // Error handling strategy - SAME AS PRODUCTION\n strategy: 'softFail',\n\n // Headers preset - SAME AS PRODUCTION\n headers: {\n presets: ['json' as unknown as HeaderPresetName] as const,\n autoDetectNetwork: true,\n requestClientHints: false, // Same as prod\n },\n\n // Enriched headers - SLIGHTLY MORE than prod for debugging\n enrichedHeaders: {\n enabled: true,\n preset: 'standard', // One level up from prod's 'minimal'\n includeDevice: true, // Include device info for debugging\n includeNetwork: true,\n includePlatform: true,\n includeCompliance: true,\n respectDoNotTrack: true, // Same as prod\n autoDetectRegion: true,\n regionalPreset: 'global', // Same as prod\n useTimezone: true,\n },\n\n // Network awareness - SAME AS PRODUCTION\n networkAware: {\n enabled: true,\n adaptConfig: true, // Same as prod\n requestClientHints: false, // Same as prod\n },\n\n // Tracking configuration - FULL in staging (only difference from prod)\n tracking: {\n enabled: true,\n operations: true,\n events: true,\n performanceMode: 'full', // Full tracking to catch issues (prod uses 'balanced')\n queueStrategy: 'batch',\n eventStrategy: 'queued',\n telemetry: true, // Same as prod\n },\n\n // Retry strategy - SAME AS PRODUCTION\n retryStrategy: 'aggressive', // Same aggressive retries as production\n // Test production retry behavior in staging\n\n // Encryption - SAME AS PRODUCTION (REQUIRED)\n encryption: {\n enabled: true, // REQUIRED in staging (same as prod)\n algorithm: 'AES-GCM',\n autoDecrypt: true,\n target: ['all'],\n key: undefined as unknown as EncryptionKey, // Placeholder - user must provide via apiConfig\n fields: [\n // Same 50+ fields as production\n '*.email',\n '*.ssn',\n '*.taxId',\n '*.nationalId',\n '*.passport',\n '*.driverLicense',\n '*.governmentId',\n '*.phone',\n '*.phoneNumber',\n '*.mobile',\n '*.telephone',\n '*.address.street',\n '*.address.line1',\n '*.address.line2',\n '*.postalCode',\n '*.zipCode',\n '*.cardNumber',\n '*.creditCard',\n '*.debitCard',\n '*.cvv',\n '*.cvc',\n '*.iban',\n '*.accountNumber',\n '*.routingNumber',\n '*.swiftCode',\n '*.sortCode',\n '*.password',\n '*.apiKey',\n '*.secret',\n '*.token',\n '*.accessToken',\n '*.refreshToken',\n '*.privateKey',\n '*.secretKey',\n '*.wallet',\n '*.walletAddress',\n '*.mnemonic',\n '*.seedPhrase',\n '*.privateKeyHex',\n '*.medicalRecord',\n '*.medicalRecordNumber',\n '*.healthInfo',\n '*.diagnosis',\n '*.prescription',\n '*.healthInsurance',\n '*.fingerprint',\n '*.faceId',\n '*.biometric',\n '*.birthDate',\n '*.dateOfBirth',\n '*.dob',\n '*.ipAddress',\n '*.ip',\n ],\n },\n};\n\n/**\n * Development configuration for the API client service.\n * Optimized for debugging and fast feedback during development.\n *\n * Key Development Features:\n * - Encryption OPTIONAL (disable for easier debugging)\n * - Full headers (all context for debugging)\n * - No network adaptation (consistent behavior)\n * - Minimal retries (fail fast to see errors quickly)\n * - Full performance tracking (optimize during development)\n * - Longer timeout (allow for debugging/breakpoints)\n */\nexport const DEVELOPMENT_CONFIG: Partial<ApiConfig> = {\n // Core settings - longer timeout for debugging\n timeout: TIME_CONSTANTS.TWO_MINUTES,\n\n // Unified strategy - interactive works well for dev\n unifiedStrategy: 'interactive',\n\n // Revalidation strategy\n revalidationStrategy: 'balanced',\n\n // Error handling strategy\n strategy: 'softFail',\n\n // Full headers preset for maximum debugging context\n headers: {\n presets: ['json' as unknown as HeaderPresetName] as const,\n autoDetectNetwork: true,\n requestClientHints: true,\n },\n\n // Enriched headers - FULL preset with all context\n enrichedHeaders: {\n enabled: true,\n preset: 'full', // All possible headers for debugging\n includeDevice: true, // Include everything\n includeNetwork: true,\n includePlatform: true,\n includeCompliance: true,\n includePerformance: true, // Performance hints\n respectDoNotTrack: false, // Ignore DNT in dev\n autoDetectRegion: true,\n regionalPreset: 'global',\n useTimezone: true,\n },\n\n // Network awareness - DISABLED (consistent behavior in dev)\n networkAware: {\n enabled: false, // Don't adapt config in dev\n adaptConfig: false,\n requestClientHints: false,\n },\n\n // Tracking configuration - FULL to see everything\n tracking: {\n enabled: true,\n operations: true,\n events: true,\n performanceMode: 'full', // Track everything in dev\n queueStrategy: 'immediate', // Process immediately (no batching)\n eventStrategy: 'immediate', // Immediate events for debugging\n telemetry: false, // Don't send to monitoring from dev\n },\n\n // Retry strategy - MINIMAL (fail fast to see errors)\n retryStrategy: 'conservative', // Minimal retries (1 attempt) to see errors immediately\n // Note: unifiedStrategy 'interactive' includes 'standard' retry (3 attempts)\n // This overrides it for development to fail faster\n\n // Encryption - DISABLED by default but with SAME fields as production\n // This allows developers to test encryption locally when needed\n encryption: {\n enabled: false, // Disabled in dev by default (enable via apiConfig when testing)\n algorithm: 'AES-GCM',\n autoDecrypt: true,\n target: ['all'],\n\n // NO default key in development - encryption is disabled\n // To test encryption locally, pass key via apiConfig:\n // encryption: {\n // enabled: true,\n // key: \"your-test-key\" // Auto-converted to EncryptionKey\n // // Or use EncryptionKey object:\n // // key: { id: \"test-1\", key: \"your-key\", algorithm: \"AES-GCM\" }\n // }\n key: undefined as unknown as EncryptionKey, // Placeholder - encryption disabled in development\n\n // Same 50+ fields as production for testing\n fields: [\n '*.email',\n '*.ssn',\n '*.taxId',\n '*.nationalId',\n '*.passport',\n '*.driverLicense',\n '*.governmentId',\n '*.phone',\n '*.phoneNumber',\n '*.mobile',\n '*.telephone',\n '*.address.street',\n '*.address.line1',\n '*.address.line2',\n '*.postalCode',\n '*.zipCode',\n '*.cardNumber',\n '*.creditCard',\n '*.debitCard',\n '*.cvv',\n '*.cvc',\n '*.iban',\n '*.accountNumber',\n '*.routingNumber',\n '*.swiftCode',\n '*.sortCode',\n '*.password',\n '*.apiKey',\n '*.secret',\n '*.token',\n '*.accessToken',\n '*.refreshToken',\n '*.privateKey',\n '*.secretKey',\n '*.wallet',\n '*.walletAddress',\n '*.mnemonic',\n '*.seedPhrase',\n '*.privateKeyHex',\n '*.medicalRecord',\n '*.medicalRecordNumber',\n '*.healthInfo',\n '*.diagnosis',\n '*.prescription',\n '*.healthInsurance',\n '*.fingerprint',\n '*.faceId',\n '*.biometric',\n '*.birthDate',\n '*.dateOfBirth',\n '*.dob',\n '*.ipAddress',\n '*.ip',\n ],\n },\n};\n","import type { ApiClientOptions, ApiConfig } from '@plyaz/types/api';\nimport { TIME_CONSTANTS } from '../../time/constants';\n\n/**\n * Default configuration for API clients\n *\n * These defaults provide sensible out-of-the-box behavior:\n * - 30 second timeout for requests\n * - 3 retry attempts with exponential backoff\n * - 60 second cache TTL with 5 minute stale time\n * - Standard JSON content-type headers\n * - Soft-fail error strategy (returns error without throwing)\n */\nexport const DEFAULT_API_CONFIG: ApiConfig = {\n baseURL: '',\n timeout: TIME_CONSTANTS.THIRTY_SECONDS,\n retry: {\n attempts: 3,\n delay: TIME_CONSTANTS.SECOND,\n maxDelay: TIME_CONSTANTS.THIRTY_SECONDS,\n backoff: 1.5,\n },\n cache: {\n ttl: 60,\n stale: 300,\n },\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n strategy: 'softFail',\n};\n\n/**\n * Default client options with global compliance enabled by default\n *\n * This ensures maximum privacy protection out of the box:\n * - Enriched headers enabled with standard preset\n * - Global compliance level (minimum data collection)\n */\nexport const DEFAULT_API_CLIENT_OPTIONS: Partial<ApiClientOptions> = {\n enrichedHeaders: {\n enabled: true,\n preset: 'standard', // Uses 'global' compliance by default\n },\n};\n","export const SUPABASE_CONFIG = {\n SUPABASE_URL: globalThis.process.env.NEXT_PUBLIC_SUPABASE_URL ?? '',\n SUPABASE_ANON_KEY: globalThis.process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ?? '',\n};\n\nexport const CLERK_PUBLISHABLE_KEY = globalThis.process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY ?? '';\n","/**\n * Notification Configuration Constants\n *\n * Default configuration values for the notifications system.\n * These can be overridden at runtime through configuration objects.\n *\n * @module src/notifications/constants\n */\n\n// Import type-level constants from @plyaz/types\nimport { NOTIFICATION_CATEGORIES } from '@plyaz/types';\n\n// Import byte calculation constants from @plyaz/config/math\nimport { NUMBER_SYSTEM } from '../math/constants';\n\n// Common size values in MB\nconst SIZE_25_MB = 25;\nconst SIZE_30_MB = 30;\n\n/**\n * Default notification category\n * Safest default for compliance - transactional emails must always be sent\n */\nexport const DEFAULT_NOTIFICATION_CATEGORY = NOTIFICATION_CATEGORIES.TRANSACTIONAL;\n\n/**\n * Retry Configuration\n */\nexport const RETRY_CONFIG = {\n /**\n * Default maximum number of retry attempts\n * Used when no specific retry count is provided\n */\n DEFAULT_MAX_ATTEMPTS: 3,\n\n /**\n * Default initial delay between retries (milliseconds)\n * Used for exponential backoff calculation\n */\n DEFAULT_INITIAL_DELAY_MS: 1000,\n\n /**\n * Maximum delay between retries (milliseconds)\n * Prevents exponential backoff from growing too large\n */\n MAX_DELAY_MS: 30000,\n\n /**\n * Backoff multiplier for exponential backoff\n * Each retry delay = previous delay * multiplier\n */\n BACKOFF_MULTIPLIER: 2,\n} as const;\n\n/**\n * Attachment Configuration\n */\nexport const ATTACHMENT_CONFIG = {\n /**\n * Default maximum number of attachments per notification\n */\n DEFAULT_MAX_ATTACHMENTS: 10,\n\n /**\n * Default maximum size per attachment (bytes)\n * 25MB - Common limit across providers\n */\n DEFAULT_MAX_SIZE_PER_ATTACHMENT: SIZE_25_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Default maximum total size of all attachments (bytes)\n * 25MB - Ensures we don't exceed provider limits\n */\n DEFAULT_MAX_TOTAL_SIZE: SIZE_25_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum attachment size for SendGrid (bytes)\n * 30MB per SendGrid documentation\n */\n SENDGRID_MAX_SIZE: SIZE_30_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum total attachment size for SendGrid (bytes)\n * 30MB per SendGrid documentation\n */\n SENDGRID_MAX_TOTAL_SIZE: SIZE_30_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum attachment size for Infobip (bytes)\n * 30MB - matching SendGrid for consistency\n */\n INFOBIP_MAX_SIZE: SIZE_30_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum total attachment size for Infobip (bytes)\n * 30MB - matching SendGrid for consistency\n */\n INFOBIP_MAX_TOTAL_SIZE: SIZE_30_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Default timeout for URL attachment fetching (milliseconds)\n */\n URL_FETCH_TIMEOUT_MS: 30000,\n\n /**\n * Maximum number of retry attempts for failed URL fetches\n */\n URL_FETCH_MAX_RETRIES: 3,\n} as const;\n\n/**\n * Circuit Breaker Configuration\n */\nexport const CIRCUIT_BREAKER_CONFIG = {\n /**\n * Default failure threshold before opening circuit\n * Circuit opens after this many consecutive failures\n */\n DEFAULT_FAILURE_THRESHOLD: 5,\n\n /**\n * Default timeout before attempting half-open state (milliseconds)\n * How long to wait before testing if provider has recovered\n */\n DEFAULT_TIMEOUT_MS: 60000,\n\n /**\n * Default success threshold in half-open state\n * Number of successful requests needed to close circuit\n */\n DEFAULT_SUCCESS_THRESHOLD: 2,\n} as const;\n\n/**\n * Queue Configuration\n */\nexport const QUEUE_CONFIG = {\n /**\n * Default maximum queue size\n */\n DEFAULT_MAX_SIZE: 10000,\n\n /**\n * Default number of concurrent workers\n */\n DEFAULT_CONCURRENCY: 5,\n\n /**\n * Default queue processing interval (milliseconds)\n */\n DEFAULT_PROCESSING_INTERVAL_MS: 100,\n} as const;\n\n/**\n * Rate Limiting Configuration\n */\nexport const RATE_LIMIT_CONFIG = {\n /**\n * Default requests per second per provider\n */\n DEFAULT_REQUESTS_PER_SECOND: 10,\n\n /**\n * Default burst allowance\n * Number of requests that can be sent in a burst\n */\n DEFAULT_BURST_ALLOWANCE: 20,\n\n /**\n * Default window size for rate limiting (milliseconds)\n */\n DEFAULT_WINDOW_MS: 1000,\n} as const;\n\n/**\n * Template Configuration\n */\nexport const TEMPLATE_CONFIG = {\n /**\n * Default locale for templates\n */\n DEFAULT_LOCALE: 'en',\n\n /**\n * Fallback locale when requested locale not found\n */\n FALLBACK_LOCALE: 'en',\n\n /**\n * Template cache TTL (milliseconds)\n * How long to cache compiled templates\n */\n CACHE_TTL_MS: 300000, // 5 minutes\n\n /**\n * Maximum template size (bytes)\n */\n MAX_TEMPLATE_SIZE: NUMBER_SYSTEM.BYTES_PER_MB, // 1MB\n} as const;\n\n/**\n * SMS Character Limits and Encoding\n * Based on GSM-7 and UCS-2 encoding standards\n */\nexport const SMS_CONFIG = {\n /**\n * Single SMS message limit for GSM-7 encoding (standard characters)\n * Includes: A-Z, a-z, 0-9, and basic punctuation\n */\n GSM7_SINGLE_MESSAGE_LIMIT: 160,\n\n /**\n * Multi-part SMS message segment limit for GSM-7 encoding\n * Each segment in a concatenated message is limited to 153 characters (7 chars for UDH)\n */\n GSM7_MULTI_PART_SEGMENT_LIMIT: 153,\n\n /**\n * Single SMS message limit for UCS-2 encoding (unicode characters)\n * Used when message contains emoji, non-Latin characters, etc.\n */\n UCS2_SINGLE_MESSAGE_LIMIT: 70,\n\n /**\n * Multi-part SMS message segment limit for UCS-2 encoding\n * Each segment in a concatenated message is limited to 67 characters\n */\n UCS2_MULTI_PART_SEGMENT_LIMIT: 67,\n\n /**\n * Maximum number of SMS segments to allow\n * Prevents accidentally sending very expensive multi-part messages\n */\n DEFAULT_MAX_SEGMENTS: 10,\n\n /**\n * Warning threshold (percentage of limit)\n * Emit warning when message reaches this percentage of the limit\n */\n WARNING_THRESHOLD_PERCENTAGE: 90,\n} as const;\n\n/**\n * Notification Configuration\n */\nexport const NOTIFICATION_CONFIG = {\n /**\n * Default notification priority\n */\n DEFAULT_PRIORITY: 'normal' as const,\n\n /**\n * Maximum subject line length\n */\n MAX_SUBJECT_LENGTH: 255,\n\n /**\n * Maximum push notification title length\n */\n MAX_PUSH_TITLE_LENGTH: 100,\n\n /**\n * Maximum push notification body length\n */\n MAX_PUSH_BODY_LENGTH: 500,\n} as const;\n\n/**\n * Logging Configuration\n */\nexport const LOGGING_CONFIG = {\n /**\n * Default log level\n */\n DEFAULT_LEVEL: 'info' as const,\n\n /**\n * Maximum log message size (bytes)\n * Prevents excessive log sizes\n */\n MAX_LOG_SIZE: 10000,\n} as const;\n\n/**\n * Health Check Configuration\n */\nexport const HEALTH_CHECK_CONFIG = {\n /**\n * Default health check interval (milliseconds)\n */\n DEFAULT_INTERVAL_MS: 30000,\n\n /**\n * Default health check timeout (milliseconds)\n */\n DEFAULT_TIMEOUT_MS: 5000,\n\n /**\n * Maximum acceptable latency (milliseconds)\n * Health check fails if latency exceeds this\n */\n MAX_ACCEPTABLE_LATENCY_MS: 2000,\n} as const;\n\n/**\n * Export all configuration as a single object for convenience\n */\nexport const NOTIFICATION_PACKAGE_CONFIG = {\n RETRY: RETRY_CONFIG,\n ATTACHMENT: ATTACHMENT_CONFIG,\n CIRCUIT_BREAKER: CIRCUIT_BREAKER_CONFIG,\n QUEUE: QUEUE_CONFIG,\n RATE_LIMIT: RATE_LIMIT_CONFIG,\n TEMPLATE: TEMPLATE_CONFIG,\n SMS: SMS_CONFIG,\n NOTIFICATION: NOTIFICATION_CONFIG,\n LOGGING: LOGGING_CONFIG,\n HEALTH_CHECK: HEALTH_CHECK_CONFIG,\n} as const;\n","import { ERROR_SEVERITY } from '@plyaz/types';\n\nexport const DEFAULT_HMAC_ALGORITHM = 'sha256';\nexport const DEFAULT_ENVIRONMENT = 'unknown';\n\nexport const THRESHOLDS = {\n RETRYABLE_ERROR_RATIO: 0.5,\n USER_FACING_ERROR_RATIO: 0.3,\n};\n\nexport const SENSITIVE_KEYS = ['token', 'secret', 'signature'];\n\nexport const RISK_SCORE = {\n MIN_SCORE: 100,\n} as const;\n\n// Log levels\nexport const LOG_LEVELS = {\n CRITICAL: 'critical',\n ERROR: 'error',\n WARN: 'warn',\n} as const;\n\n// Webhook redacted placeholders\nexport const REDACTED = {\n RAW_BODY: '[REDACTED_RAW_BODY]',\n SENSITIVE: '[REDACTED]',\n};\n\nexport const PAYMENT_ERROR_MESSAGES = {\n GENERIC_SYSTEM_ERROR: 'An unexpected error occurred while processing payment.',\n USER_FRIENDLY_SYSTEM_ERROR: 'A payment system error occurred. Please try again later.',\n USER_FRIENDLY_ALT: 'Payment error. Please try again.',\n SYSTEM: 'An internal payment error occurred. Our team has been notified.',\n VALIDATION: 'Some payment information is invalid. Please review your details.',\n AUTHENTICATION: 'Your session has expired. Please log in again.',\n AUTHORIZATION: 'You are not authorized to perform this payment action.',\n PROVIDER: 'There was an issue communicating with the payment provider.',\n NETWORK: 'Network error. Please try again later.',\n FRAUD: 'Suspicious activity detected. Please contact support.',\n REFUND: 'Refund could not be processed. Please try again later.',\n WEBHOOK: 'Payment notification failed. We are investigating.',\n PROCESSING: 'Payment is currently being processed. Please wait a moment.',\n COMPLIANCE: 'This transaction violates compliance rules. Please contact support.',\n LIMITS: 'The payment exceeds your transaction limit.',\n CONFIGURATION: 'Payment configuration error. Please contact your administrator.',\n DEFAULT: 'An unexpected error occurred while processing your payment.',\n INVALID_VALUE: 'Invalid value provided',\n PROVIDER_GENERIC: 'Provider error occurred',\n REFUND_NOT_ALLOWED: 'Refund not allowed',\n REFUND_AUTHORIZATION: 'Refund authorization failed',\n REFUND_PROCESSING: 'Refund processing failed',\n STRIPE_GENERIC: 'An unexpected error occurred while communicating with Stripe',\n};\n\nexport const PAYMENT_ALERT_SEVERITY: Record<\n (typeof ERROR_SEVERITY)[keyof typeof ERROR_SEVERITY],\n boolean\n> = {\n [ERROR_SEVERITY.Low]: true,\n [ERROR_SEVERITY.Medium]: false,\n [ERROR_SEVERITY.High]: true,\n [ERROR_SEVERITY.Critical]: true,\n};\n\nexport const PROCESSING_ERROR_MESSAGES = {\n GENERIC: 'There was an error processing your payment. Please try again.',\n API_RESPONSE_GENERIC: 'A processing error occurred.',\n};\n\nexport const WEBHOOK_CONSTANTS = {\n DEFAULT_MESSAGE: 'An error occurred while processing the webhook.',\n DEFAULT_USER_MESSAGE: 'An error occurred while handling the webhook.',\n};\n\nexport const RECOVERY_STEPS = {\n RETRY: 'Retry transaction after delay.',\n NOTIFY_USER: 'Notify user and suggest contacting support.',\n LOG_ONLY: 'Log and continue monitoring.',\n};\n\nexport const REFUND_ERROR_MESSAGES = {\n NOT_ALLOWED: 'Refund not allowed',\n AUTHORIZATION: 'Refund authorization failed',\n PROCESSING: 'Refund processing failed',\n DEFAULT_API_MESSAGE: 'An error occurred during the refund process.',\n DEFAULT_USER_MESSAGE: 'Refund could not be processed. Please try again or contact support.',\n};\n\nexport const DEFAULT_REFUND_LEVELS = {\n REQUIRED: 'manager',\n CURRENT: 'user',\n};\n\nexport const FACTORY_MESSAGES = {\n PROVIDER_ERROR_PREFIX: 'Provider {provider} error',\n STRIPE_GENERIC: 'An unexpected error occurred while communicating with Stripe.',\n WEBHOOK_SANITIZE_FAIL: 'Failed to sanitize webhook payload',\n UNKNOWN_REFUND_TYPE: 'Unknown refund error type: {type}',\n REDACTION_FAIL: 'Failed to sanitize object.',\n};\n\nexport const PAYLOAD_KEYS = {\n PROVIDER: 'provider',\n EVENT: 'event',\n};\n\nexport const STRIPE_ERROR_TYPES = {\n API_CONNECTION: 'api_connection_error',\n RATE_LIMIT: 'rate_limit_error',\n INVALID_REQUEST: 'invalid_request_error',\n CARD_ERROR: 'card_error',\n AUTHENTICATION: 'authentication_error',\n CARD_DECLINED: 'card_declined',\n} as const;\n\nexport const PROVIDER_ERROR_MESSAGES = {\n DEFAULT_API_MESSAGE: 'An error occurred with the payment provider.',\n DEFAULT_USER_MESSAGE: 'A payment provider error occurred. Please try again later.',\n};\n\nexport const SECURITY_ERROR_MESSAGES = {\n DEFAULT_API_MESSAGE: 'A security error occurred while processing the payment.',\n DEFAULT_USER_MESSAGE: 'A security issue was detected with the payment. Please contact support.',\n\n FRAUD_DETECTED: {\n CODE: 'FRAUD_DETECTED',\n DEFAULT_COMPONENT: 'fraud-detector',\n USER_MESSAGE: 'This transaction appears to be suspicious and has been blocked for your safety.',\n RISK_THRESHOLDS: {\n HIGH: 70,\n CRITICAL: 90,\n },\n },\n};\n","/**\n * Event System Constants\n * Centralized constants for event emitter, handlers, and system-level configurations.\n */\n\n// Numeric Constants\nexport const DEFAULT_PAYEMNT_PRIORITY = 1;\nexport const DEFAULT_URGENT = 0;\nexport const DEFAULT_MAX_LISTENERS = 10;\nexport const DEFAULT_HANDLER_TIMEOUT_MS = 10000;\nexport const DEFAULT_EVENT_COUNT = 0;\n\n// Success Thresholds\nexport const DEFAULT_SUCCESS_THRESHOLD = 1.0; // 100% handlers succeeded\nexport const DEFAULT_PARTIAL_SUCCESS_THRESHOLD = 0.9; // 90% handlers succeeded\n\n// Default Values\nexport const EVENT_DEFAULTS = {\n PRIORITY: DEFAULT_PAYEMNT_PRIORITY,\n URGENT: DEFAULT_URGENT,\n MAX_LISTENERS: DEFAULT_MAX_LISTENERS,\n HANDLER_TIMEOUT_MS: DEFAULT_HANDLER_TIMEOUT_MS,\n SUCCESS_THRESHOLD: DEFAULT_SUCCESS_THRESHOLD,\n PARTIAL_SUCCESS_THRESHOLD: DEFAULT_PARTIAL_SUCCESS_THRESHOLD,\n EVENT_COUNT: DEFAULT_EVENT_COUNT,\n};\n\n// Component Names\nexport const EVENT_COMPONENT = {\n EMITTER: 'event-emitter',\n PAYMENT_GATEWAY: 'payment-gateway',\n SUBSCRIPTION_MANAGER: 'subscription-manager',\n PROVIDER_ADAPTER: 'provider-adapter',\n} as const;\n\n// Error Codes\nexport const EVENT_ERROR_CODE = {\n HANDLER_FAILED: 'HANDLER_FAILED',\n HANDLER_CRASHED: 'HANDLER_CRASHED',\n HANDLER_TIMEOUT: 'HANDLER_TIMEOUT',\n} as const;\n\n// Error Messages\nexport const EVENT_ERROR_MESSAGE = {\n HANDLER_FAILED: 'Handler execution failed',\n HANDLER_TIMEOUT: 'Handler execution timed out',\n};\n\n// Environment\nexport const EVENT_ENVIRONMENT = {\n DEVELOPMENT: 'development',\n PRODUCTION: 'production',\n TEST: 'test',\n} as const;\n\n//Event Phases\nexport const PHASE_NONE = 0;\nexport const PHASE_CAPTURING = 1;\nexport const PHASE_AT_TARGET = 2;\nexport const PHASE_BUBBLING = 3;\n\nexport const EVENT_PHASE = {\n NONE: PHASE_NONE,\n CAPTURING_PHASE: PHASE_CAPTURING,\n AT_TARGET: PHASE_AT_TARGET,\n BUBBLING_PHASE: PHASE_BUBBLING,\n} as const;\n\n// Event Meta Keys\nexport const EVENT_META_KEY = {\n PRIORITY: 'priority',\n URGENT: 'urgent',\n CATEGORY: 'category',\n TAGS: 'tags',\n SOURCE: 'source',\n} as const;\n\n// Event Source Fields\nexport const EVENT_SOURCE_FIELD = {\n COMPONENT: 'component',\n ENVIRONMENT: 'environment',\n} as const;\n\n// Event Result Status\nexport const EVENT_RESULT_STATUS = {\n ERROR: 'error',\n INFO: 'info',\n WARNING: 'warning',\n CRITICAL: 'critical',\n} as const;\n\n// Utils\nexport const EmptyArray = <T = unknown>(): T[] => [];\nexport const CurrentTimestamp = (): number => Date.now();\n\n/**\n * Enum representing the state of a Promise.\n */\nexport const SETTLED_PROMISE_STATUS = {\n FULFILLED: 'fulfilled',\n REJECTED: 'rejected',\n} as const;\n\nexport const EVENT_NORMALIZER_MESSAGES = {\n NORMALIZATION_FAILED: 'Event normalization failed.',\n MAPPING_MISSING: 'No mapping configuration found for provider.',\n MAPPING_RETRIEVE_FAILED: 'Failed to retrieve provider mapping.',\n BUILD_NORMALIZED_DATA_FAILED: 'Failed to build normalized payment data.',\n BUILD_UNIFIED_EVENT_FAILED: 'Failed to build unified event.',\n EVENT_TYPE_MAPPING_FAILED: 'Event type mapping failed.',\n STATUS_MAPPING_FAILED: 'Status mapping failed.',\n PAYLOAD_EXTRACTION_FAILED: 'Payload extraction failed.',\n requiredFileMissing: (field: string): string => `Required field \"${field}\" is missing.`,\n} as const;\n","export const DEFAULT_RETRY_DELAY_MS = 1000;\nexport const MAX_CIRCUIT_OPEN_MS = 60_000;\nexport const DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD = 3;\n\nexport const FALLBACK_REASON = {\n NO_PROVIDER: 'NO_PROVIDER_SELECTED',\n PROVIDER_FAILURE: 'PROVIDER_FAILURE',\n CIRCUIT_OPEN: 'CIRCUIT_OPEN',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\n\nexport const FALLBACK_NEXT_STEPS = {\n USER_ACTION: 'contact_support',\n SYSTEM_ACTION: 'manual_review',\n} as const;\n\n/** Risk levels */\nexport const RISK_LEVEL = {\n LOW: 'low',\n MEDIUM: 'medium',\n HIGH: 'high',\n} as const;\n\n/** Security flags */\nexport const SECURITY_FLAGS = {\n FALLBACK_USED: 'fallback_used',\n} as const;\n\n/** Allowed operators for custom rules */\nexport enum CUSTOM_RULE_OPERATER {\n ASSIGNMENT = 'assignment',\n LOGICAL = 'logical',\n COMPARISON = 'comparison',\n ARITHMETIC = 'arithmetic',\n CONDITIONAL = 'conditional',\n CONCATENATE = 'concatenate',\n}\n\nexport const PAYMENT_GATEWAY_ERROR_MESSAGE = {\n // General\n INITIAL_PAYMENT_ATTEMPT: 'Initial payment attempt.',\n PAYMENT_OPERATION_FAILED: 'Payment operation failed.',\n NON_PAYMENT_OPERATION_FAILED: 'Non-payment operation failed.',\n ADAPTER_NOT_FOUND: 'Adapter not found for provider:',\n NO_VALID_ADAPTER: 'No valid provider adapter found.',\n UNSUPPORTED_FEATURE: 'Requested feature is not supported by the provider.',\n UNKNOWN_PROVIDER: 'Unknown payment provider specified.',\n UNKNOWN_ERROR: 'An unknown error occurred during payment processing.',\n\n // Idempotency / concurrency\n DUPLICATE_PAYMENT_IN_PROGRESS: 'A payment with this idempotency key is already in progress.',\n DUPLICATE_REFUND_IN_PROGRESS: 'A refund for this transaction is already in progress.',\n\n // Validation\n MISSING_TRANSACTION_ID: 'Transaction ID is required for refund operation.',\n INVALID_PAYMENT_REQUEST: 'Invalid payment request payload.',\n INVALID_PROVIDER_CONFIGURATION: 'Invalid or missing provider configuration.',\n\n // Operations\n CAPTURE_PAYMENT_FAILED: 'Capture payment operation failed.',\n CANCEL_PAYMENT_FAILED: 'Cancel payment operation failed.',\n PROCESS_REFUND_FAILED: 'Refund operation failed.',\n GET_REFUND_STATUS_FAILED: 'Failed to retrieve refund status.',\n GET_PAYMENT_STATUS_FAILED: 'Failed to retrieve payment status.',\n GET_TRANSACTION_FAILED: 'Failed to retrieve transaction details.',\n CREATE_CUSTOMER_UNSUPPORTED: 'Create customer not supported by this provider.',\n SAVE_PAYMENT_METHOD_UNSUPPORTED: 'Save payment method not supported by this provider.',\n DELETE_PAYMENT_METHOD_UNSUPPORTED: 'Delete payment method not supported by this provider.',\n GET_USER_PAYMENT_METHODS_UNSUPPORTED: 'Get user payment methods not supported by this provider.',\n CREATE_SUBSCRIPTION_UNSUPPORTED: 'Create subscription not supported by this provider.',\n CANCEL_SUBSCRIPTION_UNSUPPORTED: 'Cancel subscription not supported by this provider.',\n PROCESS_PAYOUT_UNSUPPORTED: 'Payout not supported by this provider.',\n GET_TRANSACTION_HISTORY_UNSUPPORTED: 'Transaction history not supported by this provider.',\n\n // Gateway internal\n IDEMPOTENCY_LOCK_FAILED: 'Another operation with the same key is currently being processed.',\n FALLBACK_HANDLER_ERROR: 'An error occurred while executing fallback handling.',\n ROUTER_RESOLUTION_FAILED: 'Failed to resolve provider adapter route.',\n} as const;\n","export const STRIPE_API_VERSION = '2022-11-15';\nexport const STRIPE_MAPPING_VERSION = 'v1.0.0';\nexport const ZERO_AMOUNT = 0;\nexport const DEFAULT_PROCESSING_RATE = 0.029;\nexport const DEFAULT_PLATFORM_RATE = 0;\nexport const DEFAULT_CROSS_BORDER_RATE = 0.01;\nexport const DEFAULT_PRIORITY = 100;\n\nexport const FIXED_FEES = {\n CREDIT_CARD: 30,\n BANK_TRANSFER: 500,\n BOLETO_BANCARIO: 200,\n SEPA_DIRECT_DEBIT: 50,\n IDEAL_BANK: 50,\n} as const;\n\nexport const NEXT_STEP_EXPECTED_UPDATE_IN = {\n REDIRECT: 10,\n} as const;\n\n// Stripe mapping priorities & confidence\nexport const STRIPE_CONFIDENCE_HIGH = 1;\nexport const STRIPE_PRIORITY_HIGH = 100;\nexport const STRIPE_CONFIDENCE_MEDIUM = 0.9;\nexport const STRIPE_PRIORITY_MEDIUM = 80;\n\n// Display formatting\nexport const AMOUNT_DECIMALS = 2;\nexport const AMOUNT_DIVISOR = 100;\n\n// Timestamp conversion\nexport const UNIX_TIMESTAMP_MULTIPLIER = 1000;\n\n// Timestamps & limits\nexport const TIMESTAMP_FALLBACK = 0;\n\n/** Actions a user should take next in the payment flow */\nexport const NEXT_STEP_USER_ACTION = {\n REDIRECT: 'redirect',\n WAIT: 'wait',\n RETRY: 'retry',\n CONTACT_SUPPORT: 'contact_support',\n} as const;\n\n/** Actions the system should take next in the payment flow */\nexport const NEXT_STEP_SYSTEM_ACTION = {\n WEBHOOK_PENDING: 'webhook_pending',\n MANUAL_REVIEW: 'manual_review',\n AUTO_RETRY: 'auto_retry',\n} as const;\n\n/** Stripe provider event types for mapping */\nexport const STRIPE_EVENT_TYPE = {\n // Refunds\n CHARGE_REFUND_CREATED: 'charge.refund.created',\n REFUND_UPDATED: 'refund.updated',\n CHARGE_REFUND_SUCCEEDED: 'charge.refund.succeeded',\n CHARGE_REFUND_FAILED: 'charge.refund.failed',\n CHARGE_REFUND_CANCELED: 'charge.refund.canceled',\n\n // Disputes / Chargebacks\n CHARGE_DISPUTE_CREATED: 'charge.dispute.created',\n CHARGE_DISPUTE_UPDATED: 'charge.dispute.updated',\n CHARGE_DISPUTE_CLOSED: 'charge.dispute.closed',\n CHARGEBACK_RECEIVED: 'chargeback.received',\n CHARGEBACK_RESPONDED: 'chargeback.responded',\n CHARGE_DISPUTE_WON: 'charge.dispute.won',\n CHARGE_DISPUTE_LOST: 'charge.dispute.lost',\n\n // Payment methods\n PAYMENT_METHOD_ATTACHED: 'payment_method.attached',\n PAYMENT_METHOD_UPDATED: 'payment_method.updated',\n PAYMENT_METHOD_DETACHED: 'payment_method.detached',\n PAYMENT_METHOD_EXPIRED: 'payment_method.expired',\n\n // Subscriptions\n SUBSCRIPTION_CREATED: 'customer.subscription.created',\n SUBSCRIPTION_UPDATED: 'customer.subscription.updated',\n SUBSCRIPTION_DELETED: 'customer.subscription.deleted',\n SUBSCRIPTION_RENEWED: 'customer.subscription.renewed',\n SUBSCRIPTION_FAILED: 'customer.subscription.failed',\n SUBSCRIPTION_TRIAL_STARTED: 'customer.subscription.trial_started',\n SUBSCRIPTION_TRIAL_ENDED: 'customer.subscription.trial_ended',\n\n // Invoice / Checkout (Payment Links)\n INVOICE_PAYMENT_SUCCEEDED: 'invoice.payment_succeeded',\n INVOICE_PAYMENT_FAILED: 'invoice.payment_failed',\n CHECKOUT_SESSION_COMPLETED: 'checkout.session.completed',\n CHECKOUT_SESSION_EXPIRED: 'checkout.session.expired',\n CHECKOUT_SESSION_CANCELED: 'checkout.session.canceled',\n\n // Products & Pricing\n PRODUCT_CREATED: 'product.created',\n PRODUCT_UPDATED: 'product.updated',\n PRODUCT_DELETED: 'product.deleted',\n PRICE_CREATED: 'price.created',\n PRICE_UPDATED: 'price.updated',\n PRICE_DELETED: 'price.deleted',\n\n // Provider / System events\n PROVIDER_WEBHOOK_RECEIVED: 'provider.webhook.received',\n PROVIDER_WEBHOOK_PROCESSED: 'provider.webhook.processed',\n PROVIDER_API_CALLED: 'provider.api.called',\n PROVIDER_API_SUCCEEDED: 'provider.api.succeeded',\n PROVIDER_API_FAILED: 'provider.api.failed',\n} as const;\n\nexport const STRIPE_PAYMENT_INTENT_STATUS = {\n SUCCEEDED: 'succeeded',\n PROCESSING: 'processing',\n REQUIRES_ACTION: 'requires_action',\n REQUIRES_CONFIRMATION: 'requires_confirmation',\n REQUIRES_PAYMENT_METHOD: 'requires_payment_method',\n CANCELED: 'canceled',\n FAILED: 'failed',\n DECLINED: 'declined',\n EXPIRED: 'expired',\n AUTHORIZED: 'authorized',\n CAPTURED: 'captured',\n HELD: 'held',\n REFUNDED: 'refunded',\n PARTIALLY_REFUNDED: 'partially_refunded',\n DISPUTED: 'disputed',\n CHARGEBACK: 'chargeback',\n CHARGEBACK_RESOLVED: 'chargeback_resolved',\n} as const;\n\n/** Default processing time estimate */\nexport const DEFAULT_PROCESSING_TIME = {\n minimumMinutes: 5,\n maximumMinutes: 120,\n typicalMinutes: 30,\n factors: ['default estimate'],\n};\n\n/** Default settlement time estimate */\nexport const DEFAULT_SETTLEMENT_TIME = {\n minimumDays: 1,\n maximumDays: 5,\n typicalDays: 3,\n affectedByHolidays: true,\n};\n\nexport const STRIPE_DATA_PATHS = {\n TRANSACTION_ID: 'data.object.id',\n AMOUNT: 'data.object.amount',\n CURRENCY: 'data.object.currency',\n STATUS: 'data.object.status',\n PAYMENT_METHOD: 'data.object.payment_method',\n METADATA: 'data.object.metadata',\n};\n\nexport const PAYMENT_OPERATION = {\n INITIALIZE: 'initialize',\n CREATE_PAYMENT: 'createPayment',\n CAPTURE_PAYMENT: 'capturePayment',\n CANCEL_PAYMENT: 'cancelPayment',\n PROCESS_REFUND: 'processRefund',\n GET_REFUND_STATUS: 'getRefundStatus',\n GET_PAYMENT_STATUS: 'getPaymentStatus',\n PROCESS_WEBHOOK: 'processWebhook',\n VERIFY_WEBHOOK_SIGNATURE: 'verifyWebhookSignature',\n CALCULATE_FEES: 'calculateFees',\n GET_FEE_STRUCTURE: 'getFeeStructure',\n GET_TRANSACTION: 'getTransaction',\n WEBHOOK_PROCESS: 'webhookProcess',\n} as const;\n\nexport const STRIPE_MESSAGES = {\n MISSING_API_KEY: 'Missing Stripe API key',\n UNKNOWN_EVENT: 'unknown',\n MISSING_EVENT: 'missing',\n INIT_FAILED: 'Stripe SDK initialization failed',\n CREATE_PAYMENT_FAILED: 'Failed to create payment intent',\n CAPTURE_PAYMENT_FAILED: 'Failed to capture payment',\n CANCEL_PAYMENT_FAILED: 'Failed to cancel payment',\n REFUND_FAILED: 'Failed to process refund',\n REFUND_STATUS_FAILED: 'Failed to retrieve refund status',\n GET_PAYMENT_STATUS_FAILED: 'Failed to retrieve payment status',\n PROCESS_WEBHOOK_FAILED: 'Failed to process webhook',\n VERIFY_WEBHOOK_FAILED: 'Failed to verify webhook signature',\n CALCULATE_FEES_FAILED: 'Failed to calculate fees',\n GET_FEE_STRUCTURE_FAILED: 'Failed to get fee structure',\n GET_TRANSACTION_FAILED: 'Failed to retrieve transaction details',\n} as const;\n","import type { BaseProviderConfig } from '@plyaz/types';\nimport { PAYMENT_METHOD, PAYMENT_PROVIDER_TYPE } from '@plyaz/types';\nimport { CURRENCY_CODES } from '../../../locale';\nimport { TIME_CONSTANTS } from '../../../time';\nimport { HTTP_STATUS } from '../../../http';\n\nexport const stripeConfig: BaseProviderConfig = {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n displayName: PAYMENT_PROVIDER_TYPE.Stripe,\n enabled: true,\n environment: {\n current: 'sandbox',\n apiUrls: {\n sandbox: 'https://api.stripe.com',\n staging: 'https://api.stripe.com',\n production: 'https://api.stripe.com',\n },\n environmentOverrides: {\n sandbox: {\n payments: {\n enabled: true,\n subscriptions: true,\n preauthorization: true,\n cancellation: true,\n updates: true,\n },\n },\n },\n debug: {\n enabled: true,\n logLevel: 'debug',\n logRequests: true,\n logResponses: true,\n },\n },\n\n credentials: {\n apiKey: globalThis.process.env.STRIPE_API_KEY ?? '',\n secretKey: globalThis.process.env.STRIPE_SECRET_KEY ?? '',\n additionalCredentials: {\n webhookSecret: globalThis.process.env.STRIPE_WEBHOOK_SECRET ?? '',\n merchantId: globalThis.process.env.STRIPE_MERCHANT_ID ?? '',\n },\n rotation: {\n enabled: false,\n intervalDays: 90,\n warningDays: 10,\n },\n encryption: {\n encrypted: false,\n },\n },\n\n webhooks: {\n enabled: true,\n endpoints: {\n primary: 'https://yourdomain.com/api/webhooks/stripe',\n },\n security: {\n signatureMethod: 'hmac_sha256',\n signatureHeader: 'Stripe-Signature',\n secret: globalThis.process.env.STRIPE_WEBHOOK_SECRET ?? '',\n timestampTolerance: 300,\n },\n events: {\n subscribed: [\n 'payment_intent.succeeded',\n 'payment_intent.payment_failed',\n 'charge.refunded',\n 'customer.subscription.created',\n 'customer.subscription.deleted',\n ],\n },\n reliability: {\n retryEnabled: true,\n maxRetries: 5,\n retryDelays: [\n TIME_CONSTANTS.SECOND,\n TIME_CONSTANTS.THREE_SECONDS,\n TIME_CONSTANTS.FIVE_SECONDS,\n TIME_CONSTANTS.TEN_SECONDS,\n ],\n timeout: 10000,\n deadLetterQueue: {\n enabled: true,\n retentionDays: 7,\n },\n },\n },\n features: {\n payments: {\n enabled: true,\n subscriptions: true,\n preauthorization: true,\n cancellation: true,\n updates: true,\n },\n refunds: {\n enabled: true,\n partial: true,\n instant: true,\n scheduled: false,\n },\n security: {\n threeDS: true,\n fraudDetection: true,\n velocityChecking: true,\n tokenization: true,\n },\n customers: {\n profiles: true,\n savedMethods: true,\n authentication: true,\n },\n marketplace: {\n enabled: true,\n splitPayments: true,\n connectedAccounts: true,\n instantPayouts: true,\n },\n advanced: {\n multiCurrency: true,\n currencyConversion: true,\n smartRouting: true,\n costOptimization: true,\n abTesting: true,\n },\n },\n\n /** Fees */\n fees: {\n baseFees: {\n percentage: 2.9,\n fixed: 30,\n currency: CURRENCY_CODES.USD,\n },\n methodFees: {\n [PAYMENT_METHOD.CreditCard]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.DebitCard]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BankTransfer]: { percentage: 0.8, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PaypalAccount]: { percentage: 3.5, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoBitcoin]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoEthereum]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoPolygon]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoOptimism]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdc]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdt]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoNativeToken]: {\n percentage: 1.0,\n fixed: 0,\n currency: CURRENCY_CODES.USD,\n },\n [PAYMENT_METHOD.PixInstant]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BoletoBancario]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SepaDirectDebit]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.IdealBank]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SofortBanking]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.AlipayDigital]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.WechatPayDigital]: {\n percentage: 1.0,\n fixed: 0,\n currency: CURRENCY_CODES.USD,\n },\n [PAYMENT_METHOD.ApplePay]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.GooglePay]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SamsungPay]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n },\n volumeTiers: [\n {\n name: 'Tier 1',\n minimumVolume: { amount: 0, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n },\n {\n name: 'Tier 2',\n minimumVolume: { amount: 1000000, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.5, fixed: 25, currency: CURRENCY_CODES.USD },\n },\n ],\n regionalFees: {\n EU: { percentage: 2.5, fixed: 30, currency: CURRENCY_CODES.EUR },\n PK: { percentage: 3.0, fixed: 50, currency: CURRENCY_CODES.PKR },\n US: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n CA: { percentage: 2.9, fixed: 40, currency: CURRENCY_CODES.CAD },\n GB: { percentage: 2.8, fixed: 25, currency: CURRENCY_CODES.GBP },\n AU: { percentage: 3.0, fixed: 35, currency: CURRENCY_CODES.AUD },\n IN: { percentage: 3.5, fixed: 40, currency: CURRENCY_CODES.INR },\n JP: { percentage: 3.0, fixed: 300, currency: CURRENCY_CODES.JPY },\n CN: { percentage: 3.5, fixed: 20, currency: CURRENCY_CODES.CNY },\n SG: { percentage: 3.0, fixed: 30, currency: CURRENCY_CODES.SGD },\n BR: { percentage: 3.8, fixed: 50, currency: CURRENCY_CODES.BRL },\n MX: { percentage: 3.5, fixed: 40, currency: CURRENCY_CODES.MXN },\n ZA: { percentage: 3.0, fixed: 50, currency: CURRENCY_CODES.ZAR },\n AE: { percentage: 3.0, fixed: 25, currency: CURRENCY_CODES.AED },\n NZ: { percentage: 3.0, fixed: 35, currency: CURRENCY_CODES.NZD },\n },\n additionalFees: {\n crossBorder: { percentage: 1.0 },\n currencyConversion: { percentage: 1.0, minimumFee: 50 },\n chargeback: { amount: 1500, currency: CURRENCY_CODES.USD },\n refund: { percentage: 2.9, fixed: 30 },\n },\n calculation: {\n rounding: 'nearest',\n minimumFee: { amount: 50, currency: CURRENCY_CODES.USD },\n },\n },\n limits: {\n amounts: {\n minimum: {\n [PAYMENT_METHOD.CreditCard]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.DebitCard]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BankTransfer]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PaypalAccount]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoBitcoin]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoEthereum]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoPolygon]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoOptimism]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdc]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdt]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoNativeToken]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PixInstant]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BoletoBancario]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SepaDirectDebit]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.IdealBank]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SofortBanking]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.AlipayDigital]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.WechatPayDigital]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.ApplePay]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.GooglePay]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SamsungPay]: { amount: 10, currency: CURRENCY_CODES.USD },\n },\n maximum: {\n [PAYMENT_METHOD.CreditCard]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.DebitCard]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BankTransfer]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PaypalAccount]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoBitcoin]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoEthereum]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoPolygon]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoOptimism]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdc]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdt]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoNativeToken]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PixInstant]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BoletoBancario]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SepaDirectDebit]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.IdealBank]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SofortBanking]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.AlipayDigital]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.WechatPayDigital]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.ApplePay]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.GooglePay]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SamsungPay]: { amount: 10000, currency: CURRENCY_CODES.USD },\n },\n },\n velocity: {\n daily: {\n maxTransactions: 5000,\n maxAmount: { amount: 5000000, currency: CURRENCY_CODES.USD },\n },\n monthly: {\n maxTransactions: 100000,\n maxAmount: { amount: 100000000, currency: CURRENCY_CODES.USD },\n },\n },\n apiLimits: {\n requestsPerSecond: 100,\n requestsPerMinute: 6000,\n requestsPerHour: 360000,\n },\n providerSpecific: {},\n },\n\n performance: {\n timeouts: {\n connection: 5000,\n request: 15000,\n total: 20000,\n },\n retries: {\n enabled: true,\n maxAttempts: 0,\n strategy: 'exponential',\n baseDelay: 1000,\n maxDelay: 10000,\n jitter: true,\n retryableStatusCodes: [\n HTTP_STATUS.REQUEST_TIMEOUT,\n HTTP_STATUS.TOO_MANY_REQUESTS,\n HTTP_STATUS.INTERNAL_SERVER_ERROR,\n HTTP_STATUS.BAD_GATEWAY,\n HTTP_STATUS.SERVICE_UNAVAILABLE,\n HTTP_STATUS.GATEWAY_TIMEOUT,\n ],\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n windowSize: 60_000,\n timeout: 30_000,\n minimumRequests: 10,\n },\n connectionPool: {\n maxConnections: 50,\n minConnections: 5,\n idleTimeout: 30000,\n validationInterval: 60000,\n },\n caching: {\n enabled: true,\n ttl: {\n getPaymentStatus: 60,\n getTransaction: 60,\n },\n maxSize: 1000,\n evictionStrategy: 'lru',\n },\n },\n customSettings: {\n enableRadar: true,\n enableApplePay: true,\n },\n};\n","import { CURRENCY_CODES } from '../locale';\n\n// Convert enum to array for inclusion checks\nexport const SUPPORTED_CURRENCIES = Object.values(CURRENCY_CODES);\n\n// Validation Messages\nexport const VALIDATION_MESSAGES = {\n AMOUNT: 'Amount must be a positive number with valid currency format.',\n CORE_FIELDS:\n 'Missing required core fields: amount, paymentMethod, userId, userType, productId, productType.',\n CURRENCY: 'Unsupported or missing currency code.',\n METADATA: 'Invalid metadata structure or missing required metadata fields.',\n RISK_ASSESSMENT: 'Invalid or inconsistent risk assessment fields.',\n SCHEDULING: 'Invalid scheduling configuration.',\n REFUND_TRANSACTION_ID: 'Transaction ID is required.',\n REFUND_PROVIDER: 'Provider is required.',\n REFUND_AMOUNT: 'Refund amount must be positive.',\n};\n\n// Validator Names\nexport const VALIDATOR_NAMES = {\n AMOUNT: 'AmountValidator',\n CORE_FIELDS: 'CoreFieldValidator',\n CURRENCY: 'CurrencyValidator',\n METADATA: 'MetadataValidator',\n RISK_ASSESSMENT: 'RiskAssessmentValidator',\n SCHEDULING: 'SchedulingValidator',\n};\n\n// Core Fields\nexport const CORE_FIELDS = [\n 'amount',\n 'paymentMethod',\n 'userId',\n 'userType',\n 'productId',\n 'productType',\n] as const;\n\n// Billing Cycles\nexport const VALID_BILLING_CYCLES = ['monthly', 'quarterly', 'yearly'] as const;\n\n// Risk Levels\nexport const VALID_RISK_LEVELS = ['low', 'medium', 'high'] as const;\n\n// Recurrence Frequencies\nexport const VALID_RECURRENCE_FREQUENCIES = [\n 'daily',\n 'weekly',\n 'monthly',\n 'quarterly',\n 'yearly',\n] as const;\n\n// Numeric and Length Constants\nexport const MIN_POSITIVE_AMOUNT = 0;\nexport const CURRENCY_CODE_LENGTH = 3;\n","/**\n * @file ABTestingConfig.ts\n * @description\n * Production-ready A/B testing configuration for routing experiments.\n * Currently supports Cost Optimization strategy, with future extensibility\n * for reliability, performance, and hybrid routing.\n */\n\nimport {\n type ABTestingConfig,\n COST_OPTIMIZATION_STRATEGY,\n PAYMENT_METHOD,\n PAYMENT_PROVIDER_TYPE,\n ROUTING_STRATEGY,\n} from '@plyaz/types';\nimport { COUNTRY_CODES } from '../../../../locale';\n\n/**\n * Global A/B Testing Configuration\n *\n * Used by the routing engine to control experiment behavior, traffic allocation,\n * and dynamic routing strategy selection.\n */\nexport const ABTesting: ABTestingConfig = {\n enabled: true,\n\n /**\n * Default experiment ID used when no specific test is matched\n * or when experiment assignment fails.\n */\n defaultExperimentId: 'cost_vs_reliability_v1',\n\n /**\n * Registered A/B test experiments.\n * Each experiment defines targeting, traffic allocation, and routing overrides.\n */\n experiments: [\n {\n id: 'cost_vs_reliability_v1',\n description:\n 'Compare cost-optimized Moonpay routing vs. control group (Stripe reliability) for USD credit card payments in NA and APAC regions.',\n\n /**\n * Traffic allocation (in percentage).\n * Control: Default routing logic (e.g., reliability-first / baseline).\n * Variant: Modified routing logic (e.g., cost-optimized Moonpay).\n */\n allocation: {\n control: 70,\n variant: 30,\n },\n\n /**\n * Experiment-specific overrides for variant users.\n * These are merged with the default routing configuration.\n */\n overrides: {\n strategy: ROUTING_STRATEGY.CostOptimized,\n preferredProviders: [PAYMENT_PROVIDER_TYPE.Moonpay],\n costOptimization: {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Aggressive,\n // Additional configuration fields can be extended here when full cost optimization\n // support is implemented.\n },\n },\n\n /**\n * Targeting criteria for experiment eligibility.\n */\n targeting: {\n regions: [\n // North America\n COUNTRY_CODES.US,\n COUNTRY_CODES.CA,\n COUNTRY_CODES.MX,\n\n // APAC\n COUNTRY_CODES.SG,\n COUNTRY_CODES.HK,\n COUNTRY_CODES.JP,\n COUNTRY_CODES.KR,\n COUNTRY_CODES.AU,\n COUNTRY_CODES.NZ,\n COUNTRY_CODES.IN,\n COUNTRY_CODES.MY,\n COUNTRY_CODES.TH,\n COUNTRY_CODES.ID,\n COUNTRY_CODES.PH,\n COUNTRY_CODES.VN,\n\n // Europe + UK\n COUNTRY_CODES.GB, // United Kingdom\n COUNTRY_CODES.IE, // Ireland\n COUNTRY_CODES.FR, // France\n COUNTRY_CODES.DE, // Germany\n COUNTRY_CODES.IT, // Italy\n COUNTRY_CODES.ES, // Spain\n COUNTRY_CODES.PT, // Portugal\n COUNTRY_CODES.NL, // Netherlands\n COUNTRY_CODES.BE, // Belgium\n COUNTRY_CODES.LU, // Luxembourg\n COUNTRY_CODES.CH, // Switzerland\n COUNTRY_CODES.AT, // Austria\n COUNTRY_CODES.SE, // Sweden\n COUNTRY_CODES.NO, // Norway\n COUNTRY_CODES.DK, // Denmark\n COUNTRY_CODES.FI, // Finland\n COUNTRY_CODES.PL, // Poland\n COUNTRY_CODES.CZ, // Czech Republic\n COUNTRY_CODES.HU, // Hungary\n COUNTRY_CODES.GR, // Greece\n ],\n\n paymentMethods: [PAYMENT_METHOD.CreditCard],\n },\n\n /**\n * Scheduling controls.\n * Start immediately; no predefined end date.\n */\n schedule: {\n start: new Date(),\n end: undefined,\n },\n\n /** Experiment activation flag. */\n active: true,\n },\n ],\n\n /**\n * Fallback behavior when experiment assignment or execution fails.\n */\n fallback: {\n useControlOnFailure: true,\n logErrors: true,\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_PRIORITY_ORDER: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.PriorityOrder,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n failureDetection: {\n consecutiveFailureThreshold: 5,\n errorRateThreshold: 10,\n responseTimeThreshold: NUMERIX.FOUR_THOUSAND,\n healthCheckInterval: 30,\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.THOUSAND, NUMERIX.TWO_THOUSAND],\n exponentialBackoff: false,\n },\n recovery: {\n autoRecovery: false,\n recoveryInterval: 120,\n recoveryThreshold: 10,\n gradualRestoration: false,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 8,\n successThreshold: 5,\n timeout: NUMERIX.SIXTY_THOUSAND,\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_NEXT_AVAILABLE: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.NextAvailable,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n failureDetection: {\n consecutiveFailureThreshold: 3,\n errorRateThreshold: 5, // %\n responseTimeThreshold: NUMERIX.THREE_THOUSAND, // 3s\n healthCheckInterval: 15, // sec\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.FIVE_HUNDERD, NUMERIX.THOUSAND, NUMERIX.TWO_THOUSAND],\n exponentialBackoff: true,\n },\n recovery: {\n autoRecovery: true,\n recoveryInterval: 60, // sec\n recoveryThreshold: 5, // success events\n gradualRestoration: true,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n successThreshold: 3,\n timeout: NUMERIX.THIRTY_THOUSAND, // ms\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_PERFORMANCE_BASED: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.PerformanceBased,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n failureDetection: {\n consecutiveFailureThreshold: 2,\n errorRateThreshold: 3,\n responseTimeThreshold: NUMERIX.TWO_THOUSAND,\n healthCheckInterval: 10,\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.FIVE_HUNDERD, NUMERIX.THOUSAND],\n exponentialBackoff: true,\n },\n recovery: {\n autoRecovery: true,\n recoveryInterval: 30,\n recoveryThreshold: 3,\n gradualRestoration: true,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 4,\n successThreshold: 2,\n timeout: NUMERIX.TWENTY_THOUSAND,\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_LOAD_BALANCED: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.LoadBalanced,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n failureDetection: {\n consecutiveFailureThreshold: 3,\n errorRateThreshold: 5,\n responseTimeThreshold: NUMERIX.THREE_THOUSAND,\n healthCheckInterval: 20,\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.FIVE_HUNDERD, NUMERIX.THOUSAND, NUMERIX.TWO_THOUSAND],\n exponentialBackoff: true,\n },\n recovery: {\n autoRecovery: true,\n recoveryInterval: 45,\n recoveryThreshold: 4,\n gradualRestoration: true,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 6,\n successThreshold: 3,\n timeout: NUMERIX.FORTY_FIVE_THOUSAND,\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_GEOGRAPHIC: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.Geographic,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Moonpay, PAYMENT_PROVIDER_TYPE.Stripe],\n failureDetection: {\n consecutiveFailureThreshold: 3,\n errorRateThreshold: 6,\n responseTimeThreshold: NUMERIX.THREE_THOUSAND,\n healthCheckInterval: 25,\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.THOUSAND, NUMERIX.TWO_THOUSAND],\n exponentialBackoff: true,\n },\n recovery: {\n autoRecovery: true,\n recoveryInterval: 90,\n recoveryThreshold: 7,\n gradualRestoration: true,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n successThreshold: 4,\n timeout: NUMERIX.FIFTY_THOUSAND,\n },\n};\n","import { FAIL_OVER_STRATEGY, type FailoverConfiguration } from '@plyaz/types';\nimport { FAILOVER_PRIORITY_ORDER } from './strategies/priority-order.config';\nimport { FAILOVER_NEXT_AVAILABLE } from './strategies/next-available.config';\nimport { FAILOVER_PERFORMANCE_BASED } from './strategies/performance-based.config';\nimport { FAILOVER_LOAD_BALANCED } from './strategies/load-balanced.config';\nimport { FAILOVER_GEOGRAPHIC } from './strategies/geographic.config';\n\nexport const FAILOVER_REGISTRY: Record<FAIL_OVER_STRATEGY, FailoverConfiguration> = {\n [FAIL_OVER_STRATEGY.PriorityOrder]: FAILOVER_PRIORITY_ORDER,\n [FAIL_OVER_STRATEGY.NextAvailable]: FAILOVER_NEXT_AVAILABLE,\n [FAIL_OVER_STRATEGY.PerformanceBased]: FAILOVER_PERFORMANCE_BASED,\n [FAIL_OVER_STRATEGY.LoadBalanced]: FAILOVER_LOAD_BALANCED,\n [FAIL_OVER_STRATEGY.Geographic]: FAILOVER_GEOGRAPHIC,\n};\n","import {\n type GeographicRoutingConfig,\n PAYMENT_METHOD,\n PAYMENT_PROVIDER_TYPE,\n REGULATORY_FRAMEWORK,\n TRANSACTION_TYPE,\n} from '@plyaz/types';\nimport { SUPPORTED_CURRENCIES } from '../../../validators';\n\n/**\n * Global geographic routing configuration\n *\n * Defines provider routing, regulations, and optimizations\n * per geographic region and currency zone.\n */\nexport const Geographic: GeographicRoutingConfig = {\n enabled: true,\n\n /** Region-based preferences */\n regionPreferences: {\n /** Pakistan */\n PK: {\n regionId: 'PK',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 95,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer, PAYMENT_METHOD.CryptoNativeToken],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 50000, currency: 'PKR' },\n monthly: { amount: 1000000, currency: 'PKR' },\n },\n requiredLicenses: [],\n },\n optimizations: {\n preferredDataCenters: ['asia-south1'],\n cdnEndpoints: ['cdn-pk.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** India */\n IN: {\n regionId: 'IN',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1600, checkInterval: 8 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 100000, currency: 'INR' },\n monthly: { amount: 2000000, currency: 'INR' },\n },\n requiredLicenses: ['RBI'],\n },\n optimizations: {\n preferredDataCenters: ['asia-south2'],\n cdnEndpoints: ['cdn-in.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** United Arab Emirates */\n AE: {\n regionId: 'AE',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1700, checkInterval: 10 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer, PAYMENT_METHOD.CreditCard],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 50000, currency: 'AED' },\n monthly: { amount: 1000000, currency: 'AED' },\n },\n requiredLicenses: ['CBUAE'],\n },\n optimizations: {\n preferredDataCenters: ['me-central1'],\n cdnEndpoints: ['cdn-ae.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** Singapore */\n SG: {\n regionId: 'SG',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer, PAYMENT_METHOD.CryptoNativeToken],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 60000, currency: 'SGD' },\n monthly: { amount: 1200000, currency: 'SGD' },\n },\n requiredLicenses: ['MAS'],\n },\n optimizations: {\n preferredDataCenters: ['asia-southeast1'],\n cdnEndpoints: ['cdn-sg.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** Japan */\n JP: {\n regionId: 'JP',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 1200, checkInterval: 6 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard, PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 8000000, currency: 'JPY' },\n monthly: { amount: 20000000, currency: 'JPY' },\n },\n requiredLicenses: ['FSA'],\n },\n optimizations: {\n preferredDataCenters: ['asia-northeast1'],\n cdnEndpoints: ['cdn-jp.plyaz.com'],\n cachingStrategy: 'aggressive',\n },\n },\n\n /** United States */\n US: {\n regionId: 'US',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 1000, checkInterval: 5 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard, PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 100000, currency: 'USD' },\n monthly: { amount: 2000000, currency: 'USD' },\n },\n requiredLicenses: ['FINTRAC', 'MSB'],\n },\n optimizations: {\n preferredDataCenters: ['us-central1'],\n cdnEndpoints: ['cdn-us.plyaz.com'],\n cachingStrategy: 'aggressive',\n },\n },\n\n /**Canada */\n CA: {\n regionId: 'CA',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard, PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 100000, currency: 'CAD' },\n monthly: { amount: 1500000, currency: 'CAD' },\n },\n requiredLicenses: ['FINTRAC'],\n },\n optimizations: {\n preferredDataCenters: ['northamerica-northeast1'],\n cdnEndpoints: ['cdn-ca.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** European Union */\n EU: {\n regionId: 'EU',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 1300, checkInterval: 5 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 80000, currency: 'EUR' },\n monthly: { amount: 1500000, currency: 'EUR' },\n },\n requiredLicenses: ['PSD2'],\n },\n optimizations: {\n preferredDataCenters: ['europe-west1'],\n cdnEndpoints: ['cdn-eu.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /**United Kingdom */\n UK: {\n regionId: 'UK',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard, PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 70000, currency: 'GBP' },\n monthly: { amount: 1400000, currency: 'GBP' },\n },\n requiredLicenses: ['FCA'],\n },\n optimizations: {\n preferredDataCenters: ['europe-west2'],\n cdnEndpoints: ['cdn-uk.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** Australia */\n AU: {\n regionId: 'AU',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer, PAYMENT_METHOD.CreditCard],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 100000, currency: 'AUD' },\n monthly: { amount: 2000000, currency: 'AUD' },\n },\n requiredLicenses: ['AUSTRAC'],\n },\n optimizations: {\n preferredDataCenters: ['australia-southeast1'],\n cdnEndpoints: ['cdn-au.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n },\n\n /** Cross-border routing setup */\n crossBorder: {\n enabled: true,\n preferredProviders: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n additionalFees: { percentage: 2.5 },\n },\n\n /** Global AML/KYC compliance rules */\n compliance: {\n enabled: true,\n rules: {\n GLOBAL: [\n {\n ruleId: 'aml_kyc_high_value',\n description: 'High-value transactions require KYC & AML checks',\n framework: REGULATORY_FRAMEWORK.Aml,\n conditions: {\n transactionTypes: [\n TRANSACTION_TYPE.Payment,\n TRANSACTION_TYPE.Refund,\n TRANSACTION_TYPE.Subscription,\n ],\n amountThresholds: { min: { amount: 1000, currency: 'USD' } },\n },\n actions: { verification: ['identity_document'], reporting: true, approval: true },\n enforcement: 'mandatory',\n },\n ],\n },\n },\n\n /** Currency zones configuration */\n currencyZones: {\n enabled: true,\n zones: {\n Fiat: {\n currencies: SUPPORTED_CURRENCIES,\n preferredProviders: [PAYMENT_PROVIDER_TYPE.Stripe],\n },\n Crypto: {\n currencies: ['BTC', 'ETH', 'USDT'],\n preferredProviders: [PAYMENT_PROVIDER_TYPE.Moonpay],\n },\n },\n },\n};\n","import { PERFORMANCE_METRIC_TYPE, type PerformanceMonitoringConfig } from '@plyaz/types';\n\n/**\n * Performance monitoring configuration\n *\n * Defines which metrics to collect, how often, and alert thresholds.\n * Tuned for high-availability payment routing with moderate sampling.\n *\n * @see PerformanceMonitoringConfig\n */\nexport const Performance: PerformanceMonitoringConfig = {\n /** Enable or disable performance monitoring globally */\n enabled: true,\n\n /** Metrics to collect and report */\n metrics: [\n PERFORMANCE_METRIC_TYPE.Cost,\n PERFORMANCE_METRIC_TYPE.SuccessRate,\n PERFORMANCE_METRIC_TYPE.Latency,\n PERFORMANCE_METRIC_TYPE.ErrorRate,\n PERFORMANCE_METRIC_TYPE.Throughput,\n ],\n\n /** Data retention period in minutes (1440 = 24 hours) */\n retentionPeriod: 1440,\n\n /** Sampling rate (0–1): 0.5 means 50% of events are sampled */\n samplingRate: 0.5,\n\n /** Alerting thresholds and sensitivity configuration */\n alerting: {\n enabled: true,\n\n /** Trigger alert if error rate exceeds 2% */\n errorRateThreshold: 2,\n\n /** Trigger alert if latency exceeds 1500ms */\n latencyThreshold: 1500,\n\n /** Trigger alert if success rate drops below 98% */\n successRateThreshold: 98,\n\n /** Minimum number of samples required before evaluating alert conditions */\n minSampleSize: 100,\n },\n\n /** Integration endpoints for metrics and logs */\n integrations: {\n metricsSink: 'prometheus',\n logSink: 'logstash',\n },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\nimport { TIME_CONSTANTS } from '../../../../../time';\n\nexport const WeightedLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.Weighted,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 40,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 60,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n maxConnections: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: NUMERIX.THOUSAND,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: NUMERIX.FIVE_HUNDERD,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n stickiness: {\n enabled: true,\n duration: TIME_CONSTANTS.HOUR, // 1 hour\n key: 'user',\n },\n autoRebalance: {\n enabled: true,\n interval: TIME_CONSTANTS.FIVE_MINUTES, // every 5 minutes\n basedOn: 'cost',\n },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\n\nexport const RoundRobinLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.RoundRobin,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 1,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 1,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n stickiness: { enabled: false, duration: 0, key: 'user' },\n autoRebalance: { enabled: false, interval: 0, basedOn: 'mixed' },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const LeastConnectionsLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.LeastConnections,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 1,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 1,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n maxConnections: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: NUMERIX.THOUSAND,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: NUMERIX.FIVE_HUNDERD,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n stickiness: { enabled: false, duration: 0, key: 'user' },\n autoRebalance: { enabled: false, interval: 0, basedOn: 'mixed' },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const PerformanceBasedLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.PerformanceBased,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 50,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 50,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n autoRebalance: {\n enabled: true,\n interval: NUMERIX.SIXTY,\n basedOn: 'latency',\n },\n stickiness: { enabled: false, duration: 0, key: 'user' },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\n\nexport const CustomLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.Custom,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 50,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 50,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n stickiness: { enabled: false, duration: 0, key: 'user' },\n autoRebalance: { enabled: false, interval: 0, basedOn: 'mixed' },\n};\n","import { LOAD_BALANCING_STRATEGY, type LoadBalancingConfig } from '@plyaz/types';\nimport { WeightedLoadBalancing } from './strategies/weighted.config';\nimport { RoundRobinLoadBalancing } from './strategies/round-robin.config';\nimport { LeastConnectionsLoadBalancing } from './strategies/least-connections.config';\nimport { PerformanceBasedLoadBalancing } from './strategies/performance-based.config';\nimport { CustomLoadBalancing } from './strategies/custom.config';\n\nexport const LoadBalancingRegistry: Record<LOAD_BALANCING_STRATEGY, LoadBalancingConfig> = {\n [LOAD_BALANCING_STRATEGY.Weighted]: WeightedLoadBalancing,\n [LOAD_BALANCING_STRATEGY.RoundRobin]: RoundRobinLoadBalancing,\n [LOAD_BALANCING_STRATEGY.LeastConnections]: LeastConnectionsLoadBalancing,\n [LOAD_BALANCING_STRATEGY.PerformanceBased]: PerformanceBasedLoadBalancing,\n [LOAD_BALANCING_STRATEGY.Custom]: CustomLoadBalancing,\n};\n","import {\n COST_OPTIMIZATION_STRATEGY,\n type CostOptimizationConfig,\n CURRENCY_CODES,\n} from '@plyaz/types';\n\nexport const COST_OPTIMIZATION_AGGRESSIVE: CostOptimizationConfig = {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Aggressive,\n calculation: {\n includeNetworkFees: true,\n includeFxCosts: true,\n includeOpportunityCosts: false,\n updateFrequency: 10, // minutes\n },\n feePreferences: {\n preferenceType: 'lowest_total',\n percentageWeight: 0.7,\n fixedWeight: 0.3,\n },\n volumeOptimization: {\n enabled: true,\n trackingWindow: 30, // days\n volumeTiers: [\n {\n name: 'Tier 1',\n minimumVolume: { amount: 0, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.9, fixed: 0.3, currency: CURRENCY_CODES.USD },\n },\n {\n name: 'Tier 2',\n minimumVolume: { amount: 10000, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.7, fixed: 0.25, currency: CURRENCY_CODES.USD },\n benefits: ['Reduced processing fees'],\n },\n ],\n },\n currencyOptimization: {\n enabled: true,\n rateProviders: ['internal_fx', 'openexchangerates'],\n updateFrequency: 60,\n spreadTolerance: 0.01,\n },\n};\n","import {\n COST_OPTIMIZATION_STRATEGY,\n type CostOptimizationConfig,\n CURRENCY_CODES,\n} from '@plyaz/types';\n\nexport const COST_OPTIMIZATION_BALANCED: CostOptimizationConfig = {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Balanced,\n calculation: {\n includeNetworkFees: true,\n includeFxCosts: true,\n includeOpportunityCosts: true,\n updateFrequency: 20,\n },\n feePreferences: {\n preferenceType: 'hybrid',\n percentageWeight: 0.5,\n fixedWeight: 0.5,\n },\n volumeOptimization: {\n enabled: true,\n trackingWindow: 60,\n volumeTiers: [\n {\n name: 'Base Tier',\n minimumVolume: { amount: 0, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.8, fixed: 0.3, currency: CURRENCY_CODES.USD },\n },\n {\n name: 'Growth Tier',\n minimumVolume: { amount: 50000, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.6, fixed: 0.25, currency: CURRENCY_CODES.USD },\n benefits: ['Priority routing', 'Fee stability'],\n },\n ],\n },\n currencyOptimization: {\n enabled: true,\n rateProviders: ['internal_fx', 'xe', 'reuters'],\n updateFrequency: 120,\n spreadTolerance: 0.015,\n },\n};\n","import { COST_OPTIMIZATION_STRATEGY, type CostOptimizationConfig } from '@plyaz/types';\n\nexport const COST_OPTIMIZATION_CONSERVATIVE: CostOptimizationConfig = {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Conservative,\n calculation: {\n includeNetworkFees: true,\n includeFxCosts: false,\n includeOpportunityCosts: true,\n updateFrequency: 60,\n },\n feePreferences: {\n preferenceType: 'fixed',\n percentageWeight: 0.3,\n fixedWeight: 0.7,\n },\n volumeOptimization: {\n enabled: false,\n trackingWindow: 90,\n volumeTiers: [],\n },\n currencyOptimization: {\n enabled: false,\n rateProviders: [],\n updateFrequency: 0,\n spreadTolerance: 0,\n },\n};\n","import {\n COST_OPTIMIZATION_STRATEGY,\n type CostOptimizationConfig,\n CURRENCY_CODES,\n} from '@plyaz/types';\n\nexport const COST_OPTIMIZATION_TARGETED: CostOptimizationConfig = {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Targeted,\n calculation: {\n includeNetworkFees: true,\n includeFxCosts: true,\n includeOpportunityCosts: true,\n updateFrequency: 15,\n },\n feePreferences: {\n preferenceType: 'percentage',\n percentageWeight: 0.8,\n fixedWeight: 0.2,\n },\n volumeOptimization: {\n enabled: true,\n trackingWindow: 45,\n volumeTiers: [\n {\n name: 'Target Tier 1',\n minimumVolume: { amount: 0, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.9, fixed: 0.25, currency: CURRENCY_CODES.USD },\n },\n {\n name: 'Target Tier 2',\n minimumVolume: { amount: 25000, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.5, fixed: 0.2, currency: CURRENCY_CODES.USD },\n benefits: ['Custom FX routing', 'Preferred provider path'],\n },\n ],\n },\n currencyOptimization: {\n enabled: true,\n rateProviders: ['openexchangerates', 'currencylayer'],\n updateFrequency: 30,\n spreadTolerance: 0.008,\n },\n};\n","import { COST_OPTIMIZATION_STRATEGY, type CostOptimizationConfig } from '@plyaz/types';\nimport { COST_OPTIMIZATION_AGGRESSIVE } from './strategies/aggressive.config';\nimport { COST_OPTIMIZATION_BALANCED } from './strategies/balanced.config';\nimport { COST_OPTIMIZATION_CONSERVATIVE } from './strategies/conservative.config';\nimport { COST_OPTIMIZATION_TARGETED } from './strategies/targeted.config';\n\nexport const COST_OPTIMIZATION: Record<COST_OPTIMIZATION_STRATEGY, CostOptimizationConfig> = {\n [COST_OPTIMIZATION_STRATEGY.Aggressive]: COST_OPTIMIZATION_AGGRESSIVE,\n [COST_OPTIMIZATION_STRATEGY.Balanced]: COST_OPTIMIZATION_BALANCED,\n [COST_OPTIMIZATION_STRATEGY.Conservative]: COST_OPTIMIZATION_CONSERVATIVE,\n [COST_OPTIMIZATION_STRATEGY.Targeted]: COST_OPTIMIZATION_TARGETED,\n};\n","import { type AmountBasedRule, PAYMENT_PROVIDER_TYPE } from '@plyaz/types';\n\nexport const AMOUNT_BASED_SELECTION: AmountBasedRule[] = [\n // United States (USD)\n {\n name: 'USD',\n amountRange: {\n min: { amount: 1000, currency: 'USD' },\n max: { amount: 1000000, currency: 'USD' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Paypal,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Eurozone (EUR)\n {\n name: 'EUR',\n amountRange: {\n min: { amount: 900, currency: 'EUR' },\n max: { amount: 1000000, currency: 'EUR' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Brazil (BRL)\n {\n name: 'BRL',\n amountRange: {\n min: { amount: 50000, currency: 'BRL' },\n max: { amount: 1000000, currency: 'BRL' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Pix,\n weight: 100,\n trafficPercentage: 60,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 25,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 15,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 900, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // China (CNY)\n {\n name: 'CNY',\n amountRange: {\n min: { amount: 7000, currency: 'CNY' },\n max: { amount: 1000000, currency: 'CNY' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Alipay,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.WechatPay,\n weight: 90,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 850, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Canada (CAD)\n {\n name: 'CAD',\n amountRange: {\n min: { amount: 1300, currency: 'CAD' },\n max: { amount: 1000000, currency: 'CAD' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Australia (AUD)\n {\n name: 'AUD',\n amountRange: {\n min: { amount: 1400, currency: 'AUD' },\n max: { amount: 1000000, currency: 'AUD' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // India (INR)\n {\n name: 'INR',\n amountRange: {\n min: { amount: 75000, currency: 'INR' },\n max: { amount: 100000000, currency: 'INR' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Other international (USD fallback)\n {\n name: 'INTL',\n amountRange: {\n min: { amount: 1000, currency: 'USD' },\n max: { amount: 1000000, currency: 'USD' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n];\n","import { type CurrencyCode, PAYMENT_PROVIDER_TYPE, type ProviderPreference } from '@plyaz/types';\n\nexport const CurrencySpecificProviders: Record<CurrencyCode, ProviderPreference[]> = {\n // --- Major currencies ---\n USD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1200, checkInterval: 5 },\n },\n ],\n EUR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 800, checkInterval: 3 },\n },\n ],\n GBP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n JPY: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n CHF: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 850, checkInterval: 3 },\n },\n ],\n CAD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n AUD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1200, checkInterval: 5 },\n },\n ],\n CNY: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n\n // --- Asian currencies ---\n INR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1500, checkInterval: 6 },\n },\n ],\n KRW: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n SGD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 3 },\n },\n ],\n HKD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n TWD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n THB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n IDR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n MYR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n PHP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n VND: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n BDT: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1700, checkInterval: 10 },\n },\n ],\n PKR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n LKR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1700, checkInterval: 10 },\n },\n ],\n\n // --- European currencies ---\n SEK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n NOK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n DKK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n PLN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n CZK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n HUF: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n RON: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n BGN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n HRK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n RSD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n ISK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n\n // --- Americas ---\n BRL: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n MXN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n ARS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n CLP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n COP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n PEN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n UYU: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n VES: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 89, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n BOB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 89, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n PYG: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 89, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n CRC: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n DOP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n JMD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n TTD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n\n // --- Middle East / Africa ---\n AED: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n SAR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n QAR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n KWD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n BHD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n OMR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n JOD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n ILS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n TRY: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n ZAR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n NGN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n EGP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n KES: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n GHS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n MAD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n TND: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n DZD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n\n // --- Crypto pseudo-currencies ---\n BTC: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n ETH: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n USDT: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n USDC: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n\n // --- Central America / Caribbean ---\n GTQ: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n HNL: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n NIO: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n PAB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1000, checkInterval: 5 },\n },\n ],\n BBD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n\n // --- Middle East (additional) ---\n IQD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n IRR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 85, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n LBP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 85, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n SYP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 85, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n\n // --- Africa (additional) ---\n ETB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n TZS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n UGX: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n ZMW: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n BWP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n MUR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n\n // --- Pacific / Oceania ---\n NZD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 1000, checkInterval: 4 },\n },\n ],\n FJD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n PGK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n\n // --- Former Soviet / Central Asia ---\n RUB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n UAH: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n BYN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n KZT: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n UZS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n AZN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n GEL: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n AMD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n};\n","import { type CustomSelectionRule, PAYMENT_PROVIDER_TYPE } from '@plyaz/types';\n\nexport const CUSTOM_RULES: CustomSelectionRule[] = [\n {\n ruleId: 'crypto_onramp',\n name: 'Crypto: force Moonpay',\n description: 'If payment method is crypto-onramp, prefer Moonpay',\n conditions: {\n expression:\n \"['crypto_bitcoin','crypto_ethereum','crypto_polygon','crypto_native_token'].includes(paymentMethod)\",\n requiredContext: ['paymentMethod'],\n },\n providerSelection: {\n preferred: [PAYMENT_PROVIDER_TYPE.Moonpay],\n excluded: [PAYMENT_PROVIDER_TYPE.Stripe],\n weightAdjustments: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: -20,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 20,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n },\n priority: 100,\n enabled: true,\n },\n];\n","import { PAYMENT_PROVIDER_TYPE, type ProviderPreference } from '@plyaz/types';\nimport { SUPPORTED_CURRENCIES } from '../../validators';\nimport { NUMERIX } from '../../../db';\nimport { CURRENCY_CODES } from '../../../locale';\n\n/**\n * Default provider preferences used for global or fallback routing.\n * Includes weight-based prioritization and health check parameters.\n */\nexport const DEFAULT_PROVIDERS: ProviderPreference[] = [\n {\n /** Primary high-performance global provider */\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 40, // slightly adjusted for balance\n conditions: [],\n minAmount: { amount: 1, currency: CURRENCY_CODES.USD },\n maxAmount: { amount: 10000, currency: CURRENCY_CODES.USD },\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 800,\n checkInterval: 2, // frequent health checks\n },\n },\n {\n /** Secondary fallback or region-optimized provider */\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 60,\n conditions: [\n {\n type: 'currency',\n operator: 'in',\n value: SUPPORTED_CURRENCIES.slice(0, NUMERIX.FIFTY),\n required: false,\n },\n ],\n minAmount: { amount: 5, currency: CURRENCY_CODES.USD },\n maxAmount: { amount: 20000, currency: CURRENCY_CODES.USD },\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 1500,\n checkInterval: 5,\n },\n },\n];\n","import { PAYMENT_METHOD, PAYMENT_PROVIDER_TYPE, type ProviderPreference } from '@plyaz/types';\n\nexport const MethodSpecificProviders: Record<PAYMENT_METHOD, ProviderPreference[]> = {\n // --- CARD PAYMENTS ---\n [PAYMENT_METHOD.CreditCard]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 110,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Adyen,\n weight: 90,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 800,\n checkInterval: 3,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 40,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 94,\n maxResponseTime: 1200,\n checkInterval: 5,\n },\n },\n ],\n\n [PAYMENT_METHOD.DebitCard]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 60,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 700,\n checkInterval: 3,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.CheckoutCom,\n weight: 90,\n trafficPercentage: 40,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 900,\n checkInterval: 4,\n },\n },\n ],\n\n [PAYMENT_METHOD.BankTransfer]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Adyen,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 900,\n checkInterval: 3,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 800,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.PaypalAccount]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Paypal,\n weight: 150,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 99,\n maxResponseTime: 700,\n checkInterval: 2,\n },\n },\n ],\n\n // --- CRYPTO PAYMENTS ---\n [PAYMENT_METHOD.CryptoBitcoin]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.CoinbaseCommerce,\n weight: 100,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 1400,\n checkInterval: 8,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoEthereum]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.CoinbaseCommerce,\n weight: 100,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 1400,\n checkInterval: 8,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoPolygon]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 110,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 94,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoOptimism]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 110,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 94,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoUsdc]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 60,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 1300,\n checkInterval: 8,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.CoinbaseCommerce,\n weight: 90,\n trafficPercentage: 40,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 1200,\n checkInterval: 8,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoUsdt]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 1300,\n checkInterval: 8,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoNativeToken]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.BlockchainBridge,\n weight: 100,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 93,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n ],\n\n // --- LOCAL / ALT PAYMENTS ---\n [PAYMENT_METHOD.PixInstant]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Pix,\n weight: 130,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 500,\n checkInterval: 2,\n },\n },\n ],\n\n [PAYMENT_METHOD.BoletoBancario]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Boleto,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 900,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.SepaDirectDebit]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Sepa,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 800,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.IdealBank]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Ideal,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 700,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.SofortBanking]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Sofort,\n weight: 110,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 800,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.AlipayDigital]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Alipay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 99,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n ],\n\n [PAYMENT_METHOD.WechatPayDigital]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.WechatPay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 99,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n ],\n\n // --- DIGITAL WALLETS ---\n [PAYMENT_METHOD.ApplePay]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 110,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 500,\n checkInterval: 2,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Adyen,\n weight: 100,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n ],\n\n [PAYMENT_METHOD.GooglePay]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 110,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 500,\n checkInterval: 2,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Adyen,\n weight: 100,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n ],\n\n [PAYMENT_METHOD.SamsungPay]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 600,\n checkInterval: 3,\n },\n },\n ],\n};\n","import { PAYMENT_PROVIDER_TYPE, type ProviderPreference } from '@plyaz/types';\n\nexport const regionSpecificProviders: Record<string, ProviderPreference[]> = {\n // United States\n US: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // European Union\n EU: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Brazil\n BR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Pix,\n weight: 100,\n trafficPercentage: 60,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 25,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 15,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 900, checkInterval: 5 },\n },\n ],\n\n // China\n CN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Alipay,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.WechatPay,\n weight: 90,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 850, checkInterval: 5 },\n },\n ],\n\n // Canada\n CA: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Australia\n AU: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // India\n IN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Japan\n JP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Korea\n KR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Mexico\n MX: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n};\n","import { PAYMENT_PROVIDER_TYPE, type TimeBasedRule } from '@plyaz/types';\nimport { ALL_COUNTRY_TIMEZONES, DAYS_OF_WEEK, HOURS_OF_DAY } from '../../../time';\n\nexport const TIME_BASED_SELECTION: TimeBasedRule[] = [\n {\n name: 'Night / low-traffic cost save',\n timeConditions: {\n daysOfWeek: DAYS_OF_WEEK,\n hoursOfDay: HOURS_OF_DAY,\n timeZones: ALL_COUNTRY_TIMEZONES,\n },\n providerPreferences: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 100,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n reason: 'lower fees observed during off-peak — route to cheaper provider',\n },\n];\n","import { PAYMENT_PROVIDER_TYPE, type ProviderPreference, USER_TYPE } from '@plyaz/types';\n\nexport const UserTypeSelection: Record<USER_TYPE, ProviderPreference[]> = {\n [USER_TYPE.Fan]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1200, checkInterval: 5 },\n },\n ],\n [USER_TYPE.Athlete]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 3 },\n },\n ],\n [USER_TYPE.Club]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 110,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n ],\n [USER_TYPE.Agent]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n [USER_TYPE.Scout]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n [USER_TYPE.Admin]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 600, checkInterval: 2 },\n },\n ],\n [USER_TYPE.System]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 600, checkInterval: 2 },\n },\n ],\n};\n","/**\n * Storage Configuration Constants\n *\n * Default configuration values for the storage system.\n * These can be overridden at runtime through configuration objects.\n *\n * @module src/storage/constants\n */\n\n// Import type-level constants from @plyaz/types\nimport {\n ADAPTER_HEALTH_STATUS,\n FILE_ACCESS_LEVEL,\n PATH_GENERATION_STRATEGY,\n STORAGE_QUEUE_PRIORITY,\n RETRY_STRATEGY,\n} from '@plyaz/types';\n\n// Import byte calculation constants from @plyaz/config/math\nimport { NUMBER_SYSTEM } from '../math/constants';\n\n// Common size values in MB and GB\nconst SIZE_5_MB = 5;\nconst SIZE_10_MB = 10;\nconst SIZE_25_MB = 25;\nconst SIZE_50_MB = 50;\nconst SIZE_100_MB = 100;\nconst SIZE_500_MB = 500;\nconst SIZE_1_GB = 1;\n/**\n * File Validation Configuration\n */\nexport const FILE_VALIDATION_CONFIG = {\n /**\n * Default maximum file size (bytes)\n * 100MB - reasonable default for most applications\n */\n DEFAULT_MAX_FILE_SIZE: SIZE_100_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Default minimum file size (bytes)\n * 1 byte - allow any non-empty file\n */\n DEFAULT_MIN_FILE_SIZE: 1,\n\n /**\n * Maximum file size for images (bytes)\n * 25MB - covers high-resolution images\n */\n IMAGE_MAX_SIZE: SIZE_25_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum file size for videos (bytes)\n * 500MB - allows reasonable quality videos\n */\n VIDEO_MAX_SIZE: SIZE_500_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum file size for documents (bytes)\n * 50MB - covers most document types including PDFs\n */\n DOCUMENT_MAX_SIZE: SIZE_50_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum file size for audio (bytes)\n * 100MB - allows high-quality audio files\n */\n AUDIO_MAX_SIZE: SIZE_100_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum file size for archives (bytes)\n * 1GB - allows compressed collections\n */\n ARCHIVE_MAX_SIZE: SIZE_1_GB * NUMBER_SYSTEM.BYTES_PER_GB,\n\n /**\n * Default allowed MIME types for images\n */\n DEFAULT_ALLOWED_IMAGE_TYPES: [\n 'image/jpeg',\n 'image/jpg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/avif',\n 'image/svg+xml',\n ],\n\n /**\n * Default allowed MIME types for videos\n */\n DEFAULT_ALLOWED_VIDEO_TYPES: [\n 'video/mp4',\n 'video/mpeg',\n 'video/quicktime',\n 'video/x-msvideo',\n 'video/webm',\n ],\n\n /**\n * Default allowed MIME types for documents\n */\n DEFAULT_ALLOWED_DOCUMENT_TYPES: [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/plain',\n 'text/csv',\n ],\n\n /**\n * Default allowed MIME types for audio\n */\n DEFAULT_ALLOWED_AUDIO_TYPES: ['audio/mpeg', 'audio/mp3', 'audio/wav', 'audio/ogg', 'audio/webm'],\n\n /**\n * Blocked executable extensions\n */\n BLOCKED_EXECUTABLE_EXTENSIONS: [\n '.exe',\n '.bat',\n '.cmd',\n '.com',\n '.sh',\n '.bash',\n '.ps1',\n '.app',\n '.deb',\n '.rpm',\n '.dmg',\n '.pkg',\n '.msi',\n ],\n} as const;\n\n/**\n * Storage Retry Configuration\n */\nexport const STORAGE_RETRY_CONFIG = {\n /**\n * Default retry strategy\n */\n DEFAULT_STRATEGY: RETRY_STRATEGY.ExponentialBackoff,\n\n /**\n * Default maximum number of retry attempts\n */\n DEFAULT_MAX_ATTEMPTS: 3,\n\n /**\n * Default initial delay between retries (milliseconds)\n */\n DEFAULT_INITIAL_DELAY_MS: 1000,\n\n /**\n * Maximum delay between retries (milliseconds)\n */\n MAX_DELAY_MS: 30000,\n\n /**\n * Backoff multiplier for exponential backoff\n */\n BACKOFF_MULTIPLIER: 2,\n} as const;\n\n/**\n * Path Generation Configuration\n */\nexport const PATH_GENERATION_CONFIG = {\n /**\n * Default path generation strategy\n */\n DEFAULT_STRATEGY: PATH_GENERATION_STRATEGY.HashBased,\n\n /**\n * Whether to include hash in path by default\n */\n DEFAULT_INCLUDE_HASH: true,\n\n /**\n * Whether to include timestamp in path by default\n */\n DEFAULT_INCLUDE_TIMESTAMP: false,\n\n /**\n * Default path template for entity-based strategy\n * Supports: {entityType}, {entityId}, {category}, {filename}, {hash}, {timestamp}\n */\n DEFAULT_ENTITY_TEMPLATE: '{entityType}/{entityId}/{category}/{filename}',\n\n /**\n * Default path template for date-based strategy\n */\n DEFAULT_DATE_TEMPLATE: '{year}/{month}/{day}/{filename}',\n\n /**\n * Default path template for category-based strategy\n */\n DEFAULT_CATEGORY_TEMPLATE: '{category}/{filename}',\n} as const;\n\n/**\n * Storage Queue Configuration\n */\nexport const STORAGE_QUEUE_CONFIG = {\n /**\n * Default maximum queue size\n */\n DEFAULT_MAX_SIZE: 10000,\n\n /**\n * Default number of concurrent workers\n */\n DEFAULT_CONCURRENCY: 5,\n\n /**\n * Default queue priority\n */\n DEFAULT_PRIORITY: STORAGE_QUEUE_PRIORITY.NORMAL,\n\n /**\n * Default maximum retries for queue items\n */\n DEFAULT_MAX_RETRIES: 3,\n\n /**\n * Default retry delay for failed queue items (milliseconds)\n */\n DEFAULT_RETRY_DELAY_MS: 5000,\n} as const;\n\n/**\n * Adapter Configuration\n */\nexport const ADAPTER_CONFIG = {\n /**\n * Default adapter priority\n */\n DEFAULT_PRIORITY: 1,\n\n /**\n * Default health check interval (milliseconds)\n */\n DEFAULT_HEALTH_CHECK_INTERVAL_MS: 30000,\n\n /**\n * Default health check timeout (milliseconds)\n */\n DEFAULT_HEALTH_CHECK_TIMEOUT_MS: 5000,\n\n /**\n * Default healthy status\n */\n DEFAULT_HEALTH_STATUS: ADAPTER_HEALTH_STATUS.UNKNOWN,\n\n /**\n * Maximum acceptable health check response time (milliseconds)\n */\n MAX_ACCEPTABLE_RESPONSE_TIME_MS: 2000,\n} as const;\n\n/**\n * Upload Configuration\n */\nexport const UPLOAD_CONFIG = {\n /**\n * Default maximum concurrent uploads\n */\n DEFAULT_MAX_CONCURRENT: 3,\n\n /**\n * Default upload timeout (milliseconds)\n * 5 minutes for large files\n */\n DEFAULT_TIMEOUT_MS: 300000,\n\n /**\n * Default chunk size for chunked uploads (bytes)\n * 5MB per chunk\n */\n DEFAULT_CHUNK_SIZE: SIZE_5_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Minimum file size to trigger chunked upload (bytes)\n * 50MB - files larger than this use chunked upload\n */\n CHUNKED_UPLOAD_THRESHOLD: SIZE_50_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum number of upload retries\n */\n MAX_UPLOAD_RETRIES: 3,\n\n /**\n * Whether to extract metadata by default\n */\n DEFAULT_EXTRACT_METADATA: true,\n\n /**\n * Whether to scan for viruses by default\n */\n DEFAULT_VIRUS_SCAN: false,\n\n /**\n * Default file access level\n */\n DEFAULT_ACCESS_LEVEL: FILE_ACCESS_LEVEL.PRIVATE,\n} as const;\n\n/**\n * Download Configuration\n */\nexport const DOWNLOAD_CONFIG = {\n /**\n * Default download timeout (milliseconds)\n */\n DEFAULT_TIMEOUT_MS: 120000, // 2 minutes\n\n /**\n * Default signed URL expiry (seconds)\n * 1 hour\n */\n DEFAULT_SIGNED_URL_EXPIRY_SECONDS: 3600,\n\n /**\n * Maximum signed URL expiry (seconds)\n * 7 days\n */\n MAX_SIGNED_URL_EXPIRY_SECONDS: 604800,\n\n /**\n * Minimum signed URL expiry (seconds)\n * 5 minutes\n */\n MIN_SIGNED_URL_EXPIRY_SECONDS: 300,\n} as const;\n\n/**\n * Media Processing Configuration\n */\nexport const MEDIA_PROCESSING_CONFIG = {\n /**\n * Default image quality (1-100)\n */\n DEFAULT_IMAGE_QUALITY: 85,\n\n /**\n * Default thumbnail width (pixels)\n */\n DEFAULT_THUMBNAIL_WIDTH: 200,\n\n /**\n * Default thumbnail height (pixels)\n */\n DEFAULT_THUMBNAIL_HEIGHT: 200,\n\n /**\n * Default image format for conversion\n */\n DEFAULT_IMAGE_FORMAT: 'jpeg' as const,\n\n /**\n * Maximum processing timeout (milliseconds)\n * 10 minutes for complex media processing\n */\n MAX_PROCESSING_TIMEOUT_MS: 600000,\n\n /**\n * Maximum image dimensions (pixels)\n */\n MAX_IMAGE_DIMENSIONS: 10000,\n\n /**\n * Whether to generate thumbnails by default\n */\n DEFAULT_GENERATE_THUMBNAIL: true,\n} as const;\n\n/**\n * Virus Scan Configuration\n */\nexport const VIRUS_SCAN_CONFIG = {\n /**\n * Maximum file size to scan (bytes)\n * 100MB - VirusTotal free tier limit\n */\n MAX_SCAN_SIZE: SIZE_100_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Whether to fail upload on virus detection\n */\n FAIL_ON_DETECTION: true,\n\n /**\n * Scan timeout (milliseconds)\n */\n SCAN_TIMEOUT_MS: 60000, // 1 minute\n} as const;\n\n/**\n * Compliance Configuration\n */\nexport const COMPLIANCE_CONFIG = {\n /**\n * Default retention period (days)\n */\n DEFAULT_RETENTION_DAYS: 365,\n\n /**\n * Whether files are immutable by default\n */\n DEFAULT_IMMUTABLE: false,\n\n /**\n * Whether to auto-delete after retention expires\n */\n DEFAULT_AUTO_DELETE: false,\n\n /**\n * Retention check interval (milliseconds)\n * Check daily\n */\n RETENTION_CHECK_INTERVAL_MS: 86400000, // 24 hours\n} as const;\n\n/**\n * Storage Template & PDF Configuration\n */\nexport const STORAGE_TEMPLATE_CONFIG = {\n /**\n * Default PDF format\n */\n DEFAULT_PDF_FORMAT: 'A4' as const,\n\n /**\n * Default PDF orientation\n */\n DEFAULT_PDF_ORIENTATION: 'portrait' as const,\n\n /**\n * Default PDF margin\n */\n DEFAULT_PDF_MARGIN: {\n top: '20mm',\n right: '15mm',\n bottom: '20mm',\n left: '15mm',\n },\n\n /**\n * Whether to print background by default\n */\n DEFAULT_PRINT_BACKGROUND: true,\n\n /**\n * PDF generation timeout (milliseconds)\n */\n PDF_GENERATION_TIMEOUT_MS: 60000, // 1 minute\n\n /**\n * Maximum template size (bytes)\n */\n MAX_TEMPLATE_SIZE: NUMBER_SYSTEM.BYTES_PER_MB, // 1MB\n} as const;\n\n/**\n * Share Link Configuration\n */\nexport const SHARE_LINK_CONFIG = {\n /**\n * Default share link expiry (seconds)\n * 7 days\n */\n DEFAULT_EXPIRY_SECONDS: 604800,\n\n /**\n * Maximum share link expiry (seconds)\n * 30 days\n */\n MAX_EXPIRY_SECONDS: 2592000,\n\n /**\n * Default maximum downloads per share link\n */\n DEFAULT_MAX_DOWNLOADS: 100,\n\n /**\n * Whether to require password by default\n */\n DEFAULT_REQUIRE_PASSWORD: false,\n} as const;\n\n/**\n * TTL Configuration\n */\nexport const TTL_CONFIG = {\n /**\n * Default TTL for temporary files (seconds)\n * 24 hours\n */\n DEFAULT_TTL_SECONDS: 86400,\n\n /**\n * TTL cleanup interval (milliseconds)\n * Check every hour\n */\n CLEANUP_INTERVAL_MS: 3600000,\n\n /**\n * Grace period before actual deletion (milliseconds)\n * 1 hour buffer\n */\n DELETION_GRACE_PERIOD_MS: 3600000,\n} as const;\n\n/**\n * CORS Configuration\n */\nexport const CORS_CONFIG = {\n /**\n * Default allowed origins\n */\n DEFAULT_ALLOWED_ORIGINS: ['*'],\n\n /**\n * Default allowed methods\n */\n DEFAULT_ALLOWED_METHODS: ['GET', 'POST', 'PUT', 'DELETE', 'HEAD'],\n\n /**\n * Default allowed headers\n */\n DEFAULT_ALLOWED_HEADERS: [\n 'Content-Type',\n 'Authorization',\n 'X-Requested-With',\n 'X-Upload-Content-Type',\n 'X-Upload-Content-Length',\n ],\n\n /**\n * Default exposed headers\n */\n DEFAULT_EXPOSED_HEADERS: ['ETag', 'Content-Length', 'Content-Type', 'Last-Modified'],\n\n /**\n * Default max age (seconds)\n */\n DEFAULT_MAX_AGE_SECONDS: 3600,\n\n /**\n * Whether to allow credentials by default\n */\n DEFAULT_ALLOW_CREDENTIALS: false,\n} as const;\n\n/**\n * Audit Log Configuration\n */\nexport const AUDIT_CONFIG = {\n /**\n * Whether to log uploads by default\n */\n DEFAULT_LOG_UPLOADS: true,\n\n /**\n * Whether to log downloads by default\n */\n DEFAULT_LOG_DOWNLOADS: true,\n\n /**\n * Whether to log deletes by default\n */\n DEFAULT_LOG_DELETES: true,\n\n /**\n * Audit log retention period (days)\n */\n LOG_RETENTION_DAYS: 365,\n\n /**\n * Maximum audit log size per file (bytes)\n */\n MAX_LOG_SIZE: SIZE_10_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n} as const;\n\n/**\n * CDN Invalidation Configuration\n */\nexport const CDN_CONFIG = {\n /**\n * Default invalidation timeout (milliseconds)\n */\n DEFAULT_INVALIDATION_TIMEOUT_MS: 30000,\n\n /**\n * Maximum batch size for invalidation\n */\n MAX_INVALIDATION_BATCH_SIZE: 100,\n\n /**\n * Invalidation retry attempts\n */\n INVALIDATION_MAX_RETRIES: 3,\n} as const;\n\n/**\n * Monitoring Configuration\n */\nexport const MONITORING_CONFIG = {\n /**\n * Metrics collection interval (milliseconds)\n */\n METRICS_INTERVAL_MS: 60000, // 1 minute\n\n /**\n * Whether to track upload progress by default\n */\n DEFAULT_TRACK_PROGRESS: true,\n\n /**\n * Progress update interval (milliseconds)\n */\n PROGRESS_UPDATE_INTERVAL_MS: 500,\n} as const;\n\n/**\n * Cloudflare R2 Configuration\n */\nexport const CLOUDFLARE_R2_CONFIG = {\n /**\n * Default region\n */\n DEFAULT_REGION: 'auto' as const,\n\n /**\n * Default endpoint format\n */\n DEFAULT_ENDPOINT_FORMAT: 'https://{accountId}.r2.cloudflarestorage.com',\n} as const;\n\n/**\n * Supabase Storage Configuration\n */\nexport const SUPABASE_STORAGE_CONFIG = {\n /**\n * Default bucket name\n */\n DEFAULT_BUCKET: 'uploads',\n\n /**\n * Upload upsert by default\n */\n DEFAULT_UPSERT: false,\n} as const;\n\n/**\n * Export all configuration as a single object for convenience\n */\nexport const STORAGE_PACKAGE_CONFIG = {\n FILE_VALIDATION: FILE_VALIDATION_CONFIG,\n RETRY: STORAGE_RETRY_CONFIG,\n PATH_GENERATION: PATH_GENERATION_CONFIG,\n QUEUE: STORAGE_QUEUE_CONFIG,\n ADAPTER: ADAPTER_CONFIG,\n UPLOAD: UPLOAD_CONFIG,\n DOWNLOAD: DOWNLOAD_CONFIG,\n MEDIA_PROCESSING: MEDIA_PROCESSING_CONFIG,\n VIRUS_SCAN: VIRUS_SCAN_CONFIG,\n COMPLIANCE: COMPLIANCE_CONFIG,\n TEMPLATE: STORAGE_TEMPLATE_CONFIG,\n SHARE_LINK: SHARE_LINK_CONFIG,\n TTL: TTL_CONFIG,\n CORS: CORS_CONFIG,\n AUDIT: AUDIT_CONFIG,\n CDN: CDN_CONFIG,\n MONITORING: MONITORING_CONFIG,\n CLOUDFLARE_R2: CLOUDFLARE_R2_CONFIG,\n SUPABASE_STORAGE: SUPABASE_STORAGE_CONFIG,\n} as const;\n","/**\n * Storage Default Configurations\n *\n * Sensible default configurations for the storage system.\n * These defaults provide production-ready compliance and operational behavior.\n *\n * @module src/storage/defaults\n */\n\nimport type {\n StorageComplianceConfig,\n StorageRetentionPolicy,\n StoragePresetConfig,\n StorageVariantConfig,\n} from '@plyaz/types';\nimport {\n STORAGE_JURISDICTION,\n STORAGE_REGULATORY_FRAMEWORK,\n FILE_CATEGORY,\n STORAGE_VARIANT_NAME,\n STORAGE_DEVICE_TYPE,\n} from '@plyaz/types';\n\n/**\n * Default retention policy - FINANCE/CRYPTO FOCUSED\n *\n * - 7 years retention (financial/tax compliance requirement)\n * - Soft delete enabled with 60-day grace period\n * - Not immutable by default (allows correction of errors)\n * - Financial industry standard retention\n *\n * This policy is designed for crypto/blockchain platforms and provides:\n * - IRS/SEC compliance (7-year retention)\n * - Extended grace period for financial data recovery (60 days)\n * - Audit trail for regulatory requirements\n * - Transaction record preservation\n *\n * Suitable for: Crypto wallets, blockchain platforms, financial services\n */\nexport const DEFAULT_RETENTION_POLICY: StorageRetentionPolicy = {\n type: 'regulatory',\n retentionYears: 7, // Financial/tax compliance (IRS/SEC requirement)\n immutable: false, // Can be corrected if needed\n softDelete: true, // Use soft delete for safety\n gracePeriodDays: 60, // Extended grace period for financial data\n name: 'financial-default',\n description: 'Financial/crypto platform default: 7-year retention with 60-day grace period',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.IRS,\n STORAGE_REGULATORY_FRAMEWORK.SEC,\n STORAGE_REGULATORY_FRAMEWORK.FINCEN,\n STORAGE_REGULATORY_FRAMEWORK.GDPR,\n ],\n};\n\n/**\n * Default compliance configuration - CRYPTO/FINANCE PLATFORM\n *\n * Compliance is enabled by default with finance-focused defaults:\n * - 7-year retention (IRS/SEC/FinCEN compliance)\n * - Soft delete with 60-day grace period\n * - Financial transaction audit trails\n * - Not in strict mode (warnings instead of errors)\n *\n * Designed for crypto wallets, blockchain platforms, and financial services.\n *\n * Override this configuration for specific categories:\n * - Transaction records: 7+ years retention, audit trail\n * - Wallet backups: 7+ years retention, immutable\n * - KYC/AML documents: 5-7 years retention per jurisdiction\n * - Tax documents: 7+ years retention, immutable\n * - Audit logs: 7+ years retention, immutable\n * - Legal documents: 7+ years retention, immutable\n * - Personal data: GDPR/CCPA-compliant deletion (user request)\n */\nexport const DEFAULT_COMPLIANCE_CONFIG: StorageComplianceConfig = {\n enabled: true,\n strictMode: true, // Enforce compliance by throwing errors on violations\n // ⚠️ For crypto/finance platforms, compliance violations are legal violations.\n // Set to false in development/testing only: { strictMode: false }\n\n // ⭐ DEFAULT RETENTION: 7 years for ALL files (IRS/SEC/FinCEN compliance)\n // This policy applies to EVERY uploaded file unless overridden per category below\n defaultRetentionPolicy: DEFAULT_RETENTION_POLICY,\n\n // 📋 CATEGORY-SPECIFIC OVERRIDES (Empty by default)\n //\n // By design, retentionPolicies is empty. The defaultRetentionPolicy (7 years)\n // already applies to ALL files automatically.\n //\n // ✅ RECOMMENDED: Use PRESET_RETENTION_POLICIES for category-specific rules:\n //\n // import { FileCategory } from '@plyaz/types';\n // import { PRESET_RETENTION_POLICIES } from '@plyaz/config';\n //\n // const service = new StorageService({\n // compliance: {\n // retentionPolicies: {\n // [FILE_CATEGORY.KYC_DOCUMENT]: PRESET_RETENTION_POLICIES.KYC_AML,\n // [FILE_CATEGORY.TaxDocument]: PRESET_RETENTION_POLICIES.TAX,\n // [FILE_CATEGORY.PROFILE_DATA]: PRESET_RETENTION_POLICIES.PERSONAL_DATA,\n // },\n // },\n // });\n //\n // Available presets:\n // - CRYPTO_TRANSACTION: 7 years, immutable (IRS/SEC/FinCEN/MiCA/FATF)\n // - KYC_AML: 7 years, immutable (FinCEN/BSA/AML/5AMLD/MiCA/FATF)\n // - WALLET_BACKUP: 7 years, immutable (security best practice)\n // - FINANCIAL: 7 years, immutable (IRS/SEC/SOX)\n // - TAX: 7 years, immutable (IRS)\n // - LEGAL: 7 years, immutable (SOX/GDPR/SEC)\n // - MEDICAL: 10 years, immutable (HIPAA/GDPR)\n // - AUDIT: 1 year, immutable (SOC2/ISO27001)\n // - TEMPORARY: 0 years, 7-day grace period\n // - PERSONAL_DATA: 0 years, GDPR/CCPA compliant\n retentionPolicies: {},\n\n // 🔒 IMMUTABLE PATTERNS (Empty by default)\n //\n // Add regex patterns to protect critical files from deletion/modification:\n //\n // immutablePatterns: [\n // /^transactions\\//, // Blockchain transaction records\n // /^audit\\//, // Audit logs\n // /^kyc\\//, // KYC/AML documents\n // /^legal\\//, // Legal documents\n // /^compliance\\//, // Compliance records\n // /^wallet-backups\\//, // Wallet backups\n // ],\n immutablePatterns: [],\n};\n\n/**\n * Preset retention policies for common use cases\n *\n * These can be used as templates or applied directly to file categories.\n */\nexport const PRESET_RETENTION_POLICIES = {\n /**\n * Legal document retention\n * - 7 years retention (common legal requirement)\n * - Immutable during retention period\n * - Soft delete with grace period\n * - Compliant with SOX, GDPR, and other frameworks\n */\n LEGAL: {\n type: 'legal',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 30,\n name: 'legal-retention',\n description: 'Legal documents with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.SOX,\n STORAGE_REGULATORY_FRAMEWORK.GDPR,\n STORAGE_REGULATORY_FRAMEWORK.SEC,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * Financial document retention\n * - 7 years retention (IRS, SEC requirements)\n * - Immutable during retention period\n * - Soft delete with extended grace period\n */\n FINANCIAL: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 60,\n name: 'financial-retention',\n description: 'Financial records with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.IRS,\n STORAGE_REGULATORY_FRAMEWORK.SEC,\n STORAGE_REGULATORY_FRAMEWORK.SOX,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * Tax document retention\n * - 7 years retention (IRS requirement)\n * - Immutable during retention period\n * - Soft delete enabled\n */\n TAX: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 60,\n name: 'tax-retention',\n description: 'Tax documents with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US],\n regulatoryFrameworks: [STORAGE_REGULATORY_FRAMEWORK.IRS],\n } as StorageRetentionPolicy,\n\n /**\n * Medical/health record retention\n * - 10 years retention (HIPAA recommendation)\n * - Immutable during retention period\n * - Strict soft delete\n */\n MEDICAL: {\n type: 'regulatory',\n retentionYears: 10,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 90,\n name: 'medical-retention',\n description: 'Medical records with 10-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU],\n regulatoryFrameworks: [STORAGE_REGULATORY_FRAMEWORK.HIPAA, STORAGE_REGULATORY_FRAMEWORK.GDPR],\n } as StorageRetentionPolicy,\n\n /**\n * Audit log retention\n * - 1 year retention (security best practice)\n * - Immutable (cannot be modified or deleted)\n * - No grace period (permanent)\n */\n AUDIT: {\n type: 'regulatory',\n retentionYears: 1,\n immutable: true,\n softDelete: false, // Audit logs shouldn't be soft-deleted\n name: 'audit-retention',\n description: 'Audit logs with 1-year immutable retention',\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.SOC2,\n STORAGE_REGULATORY_FRAMEWORK.ISO27001,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * Temporary file retention\n * - No retention requirement\n * - Can be deleted immediately\n * - 7-day grace period for recovery\n */\n TEMPORARY: {\n type: 'time-based',\n retentionYears: 0,\n immutable: false,\n softDelete: true,\n gracePeriodDays: 7,\n name: 'temporary-retention',\n description: 'Temporary files with 7-day grace period',\n } as StorageRetentionPolicy,\n\n /**\n * Personal data retention (GDPR/CCPA)\n * - No mandatory retention\n * - Can be deleted on user request\n * - 30-day grace period for accidental deletion\n */\n PERSONAL_DATA: {\n type: 'regulatory',\n retentionYears: 0,\n immutable: false,\n softDelete: true,\n gracePeriodDays: 30,\n name: 'personal-data-retention',\n description: 'Personal data compliant with GDPR/CCPA right to erasure',\n jurisdictions: [STORAGE_JURISDICTION.EU, STORAGE_JURISDICTION.UsCa],\n regulatoryFrameworks: [STORAGE_REGULATORY_FRAMEWORK.GDPR, STORAGE_REGULATORY_FRAMEWORK.CCPA],\n } as StorageRetentionPolicy,\n\n /**\n * Crypto transaction records\n * - 7 years retention (IRS/SEC/FinCEN requirement)\n * - Immutable for audit trail integrity\n * - Extended grace period for recovery\n * - Blockchain transaction records, wallet operations, trades\n */\n CRYPTO_TRANSACTION: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 60,\n name: 'crypto-transaction-retention',\n description: 'Blockchain transaction records with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.IRS,\n STORAGE_REGULATORY_FRAMEWORK.SEC,\n STORAGE_REGULATORY_FRAMEWORK.FINCEN,\n STORAGE_REGULATORY_FRAMEWORK.MICA,\n STORAGE_REGULATORY_FRAMEWORK.FATF,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * KYC/AML documents\n * - 7 years retention (FinCEN/BSA requirement)\n * - Immutable for regulatory audit\n * - Extended grace period (90 days)\n * - Identity verification, proof of address, source of funds\n */\n KYC_AML: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 90,\n name: 'kyc-aml-retention',\n description: 'KYC/AML documents with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU, STORAGE_JURISDICTION.GLOBAL],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.FINCEN,\n STORAGE_REGULATORY_FRAMEWORK.BSA,\n STORAGE_REGULATORY_FRAMEWORK.AML,\n STORAGE_REGULATORY_FRAMEWORK.AMLD5,\n STORAGE_REGULATORY_FRAMEWORK.MICA,\n STORAGE_REGULATORY_FRAMEWORK.FATF,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * Wallet backups & recovery seeds\n * - 7 years retention (security best practice)\n * - Immutable for security\n * - Extended grace period (90 days)\n * - Encrypted wallet backups, recovery phrases, private key backups\n */\n WALLET_BACKUP: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 90,\n name: 'wallet-backup-retention',\n description: 'Wallet backup files with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.GLOBAL],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.InternalSecurity,\n STORAGE_REGULATORY_FRAMEWORK.IndustryBestPractices,\n ],\n } as StorageRetentionPolicy,\n};\n\n// ============================================================================\n// PRESET SYSTEM - Device-aware variant optimization\n// ============================================================================\n\n/**\n * Built-in Variant Presets\n *\n * Standard transformation presets optimized for common use cases.\n * Each preset includes device-aware variants for optimal performance\n * across mobile, tablet, desktop, and 4K displays.\n *\n * Available presets:\n * - profile-picture: Square images for user profiles (1:1)\n * - post-image: Feed/content images with flexible aspect ratios\n * - hero-banner: Large banner images with 16:9 aspect ratio\n * - video-streaming: Multi-resolution video transcoding\n * - social-share: Optimized for social media platforms\n * - product-image: E-commerce product photos\n */\nexport const BUILT_IN_PRESETS: StoragePresetConfig[] = [\n // Profile Picture Preset\n {\n name: 'profile-picture',\n description: 'Square images for user profiles (1:1 aspect ratio)',\n variants: [\n {\n name: 'thumbnail',\n width: 150,\n height: 150,\n format: 'webp',\n quality: 80,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n },\n {\n name: 'small',\n width: 300,\n height: 300,\n format: 'webp',\n quality: 85,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'medium',\n width: 600,\n height: 600,\n format: 'webp',\n quality: 85,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n },\n {\n name: 'large',\n width: 1024,\n height: 1024,\n format: 'webp',\n quality: 90,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n ] as StorageVariantConfig[],\n format: 'webp',\n quality: 85,\n aspectRatio: '1:1',\n categories: [FILE_CATEGORY.ProfileImage],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n priority: 1,\n enabled: true,\n },\n\n // Post Image Preset\n {\n name: 'post-image',\n description: 'Flexible images for content feeds (preserve aspect ratio)',\n variants: [\n {\n name: 'thumbnail',\n width: 400,\n height: 225,\n format: 'webp',\n quality: 80,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'mobile',\n width: 640,\n height: 360,\n format: 'webp',\n quality: 82,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [STORAGE_DEVICE_TYPE.MOBILE],\n },\n {\n name: 'tablet',\n width: 1024,\n height: 576,\n format: 'webp',\n quality: 85,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [STORAGE_DEVICE_TYPE.TABLET],\n },\n {\n name: 'desktop',\n width: 1920,\n height: 1080,\n format: 'webp',\n quality: 85,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n {\n name: 'hd',\n width: 2560,\n height: 1440,\n format: 'webp',\n quality: 90,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [STORAGE_DEVICE_TYPE.FourK],\n },\n ] as StorageVariantConfig[],\n format: 'webp',\n quality: 85,\n aspectRatio: 'preserve',\n categories: [FILE_CATEGORY.PostImage, FILE_CATEGORY.GalleryImage],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n priority: 2,\n enabled: true,\n },\n\n // Hero Banner Preset\n {\n name: 'hero-banner',\n description: 'Large banner images for hero sections (16:9 aspect ratio)',\n variants: [\n {\n name: 'mobile',\n width: 800,\n height: 450,\n format: 'webp',\n quality: 82,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.MOBILE],\n },\n {\n name: 'tablet',\n width: 1280,\n height: 720,\n format: 'webp',\n quality: 85,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.TABLET],\n },\n {\n name: 'desktop',\n width: 1920,\n height: 1080,\n format: 'webp',\n quality: 88,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP],\n },\n {\n name: '4k',\n width: 3840,\n height: 2160,\n format: 'webp',\n quality: 90,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n ] as StorageVariantConfig[],\n format: 'webp',\n quality: 88,\n aspectRatio: '16:9',\n categories: [FILE_CATEGORY.BrandAsset, FILE_CATEGORY.MarketingAsset, FILE_CATEGORY.PostImage],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n STORAGE_DEVICE_TYPE.TV,\n ],\n priority: 3,\n enabled: true,\n },\n\n // Video Streaming Preset\n {\n name: 'video-streaming',\n description: 'Multi-resolution video transcoding for adaptive streaming',\n variants: [\n {\n name: '360p',\n width: 640,\n height: 360,\n format: 'mp4',\n quality: 75,\n codec: 'h264',\n bitrate: '800k',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.WATCH],\n },\n {\n name: '480p',\n width: 854,\n height: 480,\n format: 'mp4',\n quality: 80,\n codec: 'h264',\n bitrate: '1200k',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET],\n },\n {\n name: '720p',\n width: 1280,\n height: 720,\n format: 'mp4',\n quality: 85,\n codec: 'h264',\n bitrate: '2500k',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: '1080p',\n width: 1920,\n height: 1080,\n format: 'mp4',\n quality: 88,\n codec: 'h264',\n bitrate: '5000k',\n devices: [\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n },\n {\n name: '4k',\n width: 3840,\n height: 2160,\n format: 'mp4',\n quality: 90,\n codec: 'h265',\n bitrate: '15000k',\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n ] as StorageVariantConfig[],\n format: 'mp4',\n quality: 85,\n codec: 'h264',\n categories: [FILE_CATEGORY.PostVideo, FILE_CATEGORY.ProductVideo, FILE_CATEGORY.GalleryVideo],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n STORAGE_DEVICE_TYPE.TV,\n ],\n priority: 4,\n enabled: true,\n },\n\n // Social Share Preset\n {\n name: 'social-share',\n description: 'Optimized for social media sharing (Open Graph, Twitter Card)',\n variants: [\n {\n name: 'og-image',\n width: 1200,\n height: 630,\n format: 'jpeg',\n quality: 85,\n aspectRatio: '1.91:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'twitter-card',\n width: 1200,\n height: 675,\n format: 'jpeg',\n quality: 85,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'linkedin-share',\n width: 1200,\n height: 627,\n format: 'jpeg',\n quality: 85,\n aspectRatio: '1.91:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n ] as StorageVariantConfig[],\n format: 'jpeg',\n quality: 85,\n categories: [FILE_CATEGORY.PostImage, FILE_CATEGORY.BrandAsset, FILE_CATEGORY.MarketingAsset],\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP],\n priority: 5,\n enabled: true,\n },\n\n // Product Image Preset\n {\n name: 'product-image',\n description: 'E-commerce product photos with zoom capability',\n variants: [\n {\n name: 'thumbnail',\n width: 200,\n height: 200,\n format: 'webp',\n quality: 80,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'small',\n width: 400,\n height: 400,\n format: 'webp',\n quality: 85,\n aspectRatio: '1:1',\n fit: 'contain',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET],\n },\n {\n name: 'medium',\n width: 800,\n height: 800,\n format: 'webp',\n quality: 88,\n aspectRatio: '1:1',\n fit: 'contain',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP],\n },\n {\n name: 'large',\n width: 1500,\n height: 1500,\n format: 'webp',\n quality: 90,\n aspectRatio: '1:1',\n fit: 'contain',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n {\n name: 'zoom',\n width: 2500,\n height: 2500,\n format: 'webp',\n quality: 92,\n aspectRatio: '1:1',\n fit: 'contain',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n ] as StorageVariantConfig[],\n format: 'webp',\n quality: 88,\n aspectRatio: '1:1',\n categories: [FILE_CATEGORY.PostImage],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n priority: 6,\n enabled: true,\n },\n];\n\n/**\n * Default Variants by File Category\n *\n * Automatic variant generation based on file category.\n * When no preset is specified, these defaults are applied.\n *\n * Device-aware: Variants are automatically filtered based on target device\n * to avoid generating unnecessary files and reduce storage costs.\n */\nexport const DEFAULT_VARIANTS_BY_CATEGORY: Partial<Record<FILE_CATEGORY, string[]>> = {\n // Profile and avatar images - Square 1:1 ratio\n [FILE_CATEGORY.ProfileImage]: ['thumbnail', 'small', 'medium', 'large'],\n\n // Post and content images - Flexible aspect ratio\n [FILE_CATEGORY.PostImage]: ['thumbnail', 'mobile', 'tablet', 'desktop'],\n\n // Brand logos - Multiple sizes for different contexts\n [FILE_CATEGORY.BrandLogo]: ['small', 'medium', 'large', 'xlarge'],\n\n // Brand assets and marketing - Wide format\n [FILE_CATEGORY.BrandAsset]: ['mobile', 'tablet', 'desktop', '4k'],\n [FILE_CATEGORY.MarketingAsset]: ['mobile', 'tablet', 'desktop', '4k'],\n\n // Gallery images - Small preview images\n [FILE_CATEGORY.GalleryImage]: ['thumbnail', 'small', 'medium'],\n\n // Videos - Multi-resolution for adaptive streaming\n [FILE_CATEGORY.PostVideo]: ['360p', '480p', '720p', '1080p'],\n [FILE_CATEGORY.ProductVideo]: ['480p', '720p', '1080p', '4k-video'],\n [FILE_CATEGORY.GalleryVideo]: ['480p', '720p', '1080p'],\n\n // Documents - Typically no variants needed (PDFs, etc.)\n [FILE_CATEGORY.InvoiceDocument]: [],\n [FILE_CATEGORY.ReceiptDocument]: [],\n [FILE_CATEGORY.TaxDocument]: [],\n\n // Attachments - No variants by default\n [FILE_CATEGORY.ATTACHMENT]: [],\n\n // Archives - No variants (ZIP, RAR, etc.)\n [FILE_CATEGORY.PostArchive]: [],\n\n // Audio - Could add different bitrates in future\n [FILE_CATEGORY.PostAudio]: [],\n\n // Other categories without specific defaults\n [FILE_CATEGORY.OTHER]: [],\n};\n\n/**\n * Device-specific Variant Overrides\n *\n * These mappings override the category defaults when a specific device is targeted.\n * Useful for mobile-first or desktop-first optimizations.\n */\nexport const DEVICE_SPECIFIC_VARIANT_OVERRIDES: Partial<\n Record<string, Partial<Record<FILE_CATEGORY, string[]>>>\n> = {\n // Mobile - Prioritize smaller variants\n mobile: {\n [FILE_CATEGORY.ProfileImage]: ['thumbnail', 'small'],\n [FILE_CATEGORY.PostImage]: ['thumbnail', 'mobile'],\n [FILE_CATEGORY.BrandAsset]: ['mobile'],\n [FILE_CATEGORY.MarketingAsset]: ['mobile'],\n [FILE_CATEGORY.PostVideo]: ['360p', '480p', '720p'],\n },\n\n // Tablet - Balanced variants\n tablet: {\n [FILE_CATEGORY.ProfileImage]: ['thumbnail', 'small', 'medium'],\n [FILE_CATEGORY.PostImage]: ['thumbnail', 'mobile', 'tablet'],\n [FILE_CATEGORY.BrandAsset]: ['tablet', 'desktop'],\n [FILE_CATEGORY.MarketingAsset]: ['tablet', 'desktop'],\n [FILE_CATEGORY.PostVideo]: ['480p', '720p', '1080p'],\n },\n\n // Desktop - Full quality variants\n desktop: {\n [FILE_CATEGORY.ProfileImage]: ['small', 'medium', 'large'],\n [FILE_CATEGORY.PostImage]: ['mobile', 'tablet', 'desktop', 'hd'],\n [FILE_CATEGORY.BrandAsset]: ['desktop', '4k'],\n [FILE_CATEGORY.MarketingAsset]: ['desktop', '4k'],\n [FILE_CATEGORY.PostVideo]: ['720p', '1080p'],\n },\n\n // 4K displays - Highest quality\n '4k': {\n [FILE_CATEGORY.ProfileImage]: ['medium', 'large', 'xlarge'],\n [FILE_CATEGORY.PostImage]: ['desktop', 'hd', '4k'],\n [FILE_CATEGORY.BrandAsset]: ['4k'],\n [FILE_CATEGORY.MarketingAsset]: ['4k'],\n [FILE_CATEGORY.PostVideo]: ['1080p', '4k-video'],\n },\n\n // TV - Optimized for large screens\n tv: {\n [FILE_CATEGORY.BrandAsset]: ['4k'],\n [FILE_CATEGORY.MarketingAsset]: ['4k'],\n [FILE_CATEGORY.PostVideo]: ['1080p', '4k-video'],\n },\n\n // Watch/Wearables - Minimal variants\n watch: {\n [FILE_CATEGORY.ProfileImage]: ['thumbnail'],\n [FILE_CATEGORY.PostImage]: ['thumbnail'],\n [FILE_CATEGORY.PostVideo]: ['360p'],\n },\n};\n\n/**\n * Minimum Variant Requirements\n *\n * These categories must always generate at least these variants,\n * regardless of device targeting, for fallback compatibility.\n */\nexport const MINIMUM_VARIANTS_BY_CATEGORY: Partial<Record<FILE_CATEGORY, string[]>> = {\n [FILE_CATEGORY.ProfileImage]: ['thumbnail'], // Always need thumbnail\n [FILE_CATEGORY.PostImage]: ['thumbnail'], // Always need thumbnail\n [FILE_CATEGORY.BrandLogo]: ['small'], // Always need at least small logo\n};\n\n/**\n * Standard Variant Definitions\n *\n * Maps variant names to their configuration.\n * Used by PresetManager to resolve variant names like 'thumbnail', 'mobile', '720p'\n * to actual variant configurations with dimensions, format, quality, etc.\n *\n * This is the source of truth for all standard variant names across the platform.\n */\nexport const STANDARD_VARIANT_DEFINITIONS: Record<\n STORAGE_VARIANT_NAME,\n Partial<StorageVariantConfig>\n> = {\n // Image variants - Square/standard sizes\n [STORAGE_VARIANT_NAME.THUMBNAIL]: {\n width: 150,\n height: 150,\n format: 'webp',\n quality: 80,\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n },\n [STORAGE_VARIANT_NAME.SMALL]: {\n width: 400,\n height: 400,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP],\n },\n [STORAGE_VARIANT_NAME.MEDIUM]: {\n width: 800,\n height: 800,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n [STORAGE_VARIANT_NAME.LARGE]: {\n width: 1200,\n height: 1200,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n [STORAGE_VARIANT_NAME.XLARGE]: {\n width: 1920,\n height: 1920,\n format: 'webp',\n quality: 90,\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n\n // Device-specific image variants\n [STORAGE_VARIANT_NAME.MOBILE]: {\n width: 480,\n height: 854,\n format: 'webp',\n quality: 80,\n devices: [STORAGE_DEVICE_TYPE.MOBILE],\n },\n [STORAGE_VARIANT_NAME.TABLET]: {\n width: 768,\n height: 1024,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.TABLET],\n },\n [STORAGE_VARIANT_NAME.DESKTOP]: {\n width: 1920,\n height: 1080,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.DESKTOP],\n },\n [STORAGE_VARIANT_NAME.HD]: {\n width: 1920,\n height: 1080,\n format: 'webp',\n quality: 90,\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n [STORAGE_VARIANT_NAME.FourK]: {\n width: 3840,\n height: 2160,\n format: 'webp',\n quality: 90,\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n [STORAGE_VARIANT_NAME.RETINA]: {\n width: 2880,\n height: 1800,\n format: 'webp',\n quality: 90,\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n\n // Video variants - Standard resolutions\n [STORAGE_VARIANT_NAME.Video360p]: {\n width: 640,\n height: 360,\n format: 'mp4',\n bitrate: '800k',\n codec: 'h264',\n devices: [STORAGE_DEVICE_TYPE.MOBILE],\n },\n [STORAGE_VARIANT_NAME.Video480p]: {\n width: 854,\n height: 480,\n format: 'mp4',\n bitrate: '1200k',\n codec: 'h264',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET],\n },\n [STORAGE_VARIANT_NAME.Video720p]: {\n width: 1280,\n height: 720,\n format: 'mp4',\n bitrate: '2500k',\n codec: 'h264',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP],\n },\n [STORAGE_VARIANT_NAME.Video1080p]: {\n width: 1920,\n height: 1080,\n format: 'mp4',\n bitrate: '5000k',\n codec: 'h264',\n devices: [STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n [STORAGE_VARIANT_NAME.Video4k]: {\n width: 3840,\n height: 2160,\n format: 'mp4',\n bitrate: '15000k',\n codec: 'h265',\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n};\n","/**\n * Storage Validation Configuration\n *\n * Defines file size limits and MIME type restrictions per bucket purpose.\n * Centralized configuration for storage validation across backend and frontend.\n *\n * @module @plyaz/config/storage/validation\n */\n\nimport type { StorageValidationConfig } from '@plyaz/types';\nimport { BUCKET_PURPOSE } from '@plyaz/types';\nimport { NUMBER_SYSTEM } from '../math/constants';\n\n// File size limits (in MB/GB)\nconst STORAGE_FILE_SIZE_LIMITS = {\n IMAGE_MAX_MB: 50,\n VIDEO_MAX_GB: 5,\n COMPLIANCE_MAX_MB: 100,\n USER_UPLOAD_MAX_MB: 100,\n STATIC_MAX_MB: 10,\n TEMPORARY_MAX_MB: 500,\n ARCHIVE_MAX_GB: 10,\n BACKUP_MAX_GB: 50,\n DEFAULT_MAX_MB: 100,\n} as const;\n\n/**\n * Default storage validation configuration\n * Used when adapter config doesn't specify validation rules\n */\nexport const STORAGE_DEFAULT_VALIDATION_CONFIG: StorageValidationConfig = {\n rules: {\n [BUCKET_PURPOSE.MediaImages]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.IMAGE_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 50MB for images\n allowedMimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.MediaVideos]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.VIDEO_MAX_GB * NUMBER_SYSTEM.BYTES_PER_GB, // 5GB for videos\n allowedMimeTypes: ['video/mp4', 'video/webm', 'video/ogg', 'video/quicktime'],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.COMPLIANCE]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.COMPLIANCE_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 100MB for compliance docs\n allowedMimeTypes: [\n 'application/pdf',\n 'application/json',\n 'text/csv',\n // Excel formats\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', // .xlsx\n 'application/vnd.ms-excel', // .xls\n // Word formats\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', // .docx\n 'application/msword', // .doc\n ],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.UserUploads]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.USER_UPLOAD_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 100MB for general user uploads\n allowExecutables: false, // Block executables for security\n },\n\n [BUCKET_PURPOSE.MediaStatic]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.STATIC_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 10MB for static assets\n allowedMimeTypes: [\n 'text/css',\n 'text/javascript',\n 'application/javascript',\n 'font/woff',\n 'font/woff2',\n 'font/ttf',\n 'font/otf',\n 'image/svg+xml',\n ],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.TEMPORARY]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.TEMPORARY_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 500MB for temporary files\n allowExecutables: false, // Block executables for security\n },\n\n [BUCKET_PURPOSE.ARCHIVES]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.ARCHIVE_MAX_GB * NUMBER_SYSTEM.BYTES_PER_GB, // 10GB for archives\n allowedMimeTypes: [\n 'application/zip',\n 'application/x-tar',\n 'application/gzip',\n 'application/x-7z-compressed',\n 'application/x-rar-compressed',\n ],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.BACKUPS]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.BACKUP_MAX_GB * NUMBER_SYSTEM.BYTES_PER_GB, // 50GB for backups\n allowedMimeTypes: [\n 'application/zip',\n 'application/x-tar',\n 'application/gzip',\n 'application/octet-stream',\n 'application/sql',\n ],\n allowExecutables: false,\n },\n },\n\n defaultRules: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.DEFAULT_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 100MB default\n allowExecutables: false, // Always block executables by default\n },\n} as const;\n\n/**\n * Get validation rules for a specific bucket purpose\n * Falls back to default rules if purpose-specific rules not defined\n *\n * @param purpose - Bucket purpose\n * @param config - Optional custom validation config (overrides defaults)\n * @returns Validation rules for the purpose\n */\n// eslint-disable-next-line complexity\nexport function getStorageValidationRulesForPurpose(\n purpose: BUCKET_PURPOSE,\n config?: StorageValidationConfig\n): {\n maxFileSize?: number;\n allowedMimeTypes?: string[];\n allowExecutables?: boolean;\n} {\n // Use custom config if provided, otherwise use defaults\n const validationConfig = config ?? STORAGE_DEFAULT_VALIDATION_CONFIG;\n\n // Get purpose-specific rules\n const purposeRules = validationConfig.rules?.[purpose];\n const defaultRules =\n validationConfig.defaultRules ?? STORAGE_DEFAULT_VALIDATION_CONFIG.defaultRules;\n\n // Merge purpose rules with defaults\n return {\n maxFileSize: purposeRules?.maxFileSize ?? defaultRules?.maxFileSize,\n allowedMimeTypes: purposeRules?.allowedMimeTypes ?? defaultRules?.allowedMimeTypes,\n allowExecutables: purposeRules?.allowExecutables ?? defaultRules?.allowExecutables,\n };\n}\n","/**\n * Storage MIME Type Mappings\n *\n * Centralized mapping between output formats, file extensions, and MIME types.\n * Used for file generation, validation, and content-type handling.\n *\n * @module @plyaz/config/storage/mime-types\n */\n\nimport type { OUTPUT_FORMAT } from '@plyaz/types';\n\n/**\n * Map of output formats to file extensions\n */\nexport const STORAGE_OUTPUT_FORMAT_TO_EXTENSION: Record<OUTPUT_FORMAT, string> = {\n pdf: 'pdf',\n excel: 'xlsx',\n word: 'docx',\n png: 'png',\n jpeg: 'jpeg',\n html: 'html',\n csv: 'csv',\n json: 'json',\n};\n\n/**\n * Map of output formats to MIME types\n */\nexport const STORAGE_OUTPUT_FORMAT_TO_MIME_TYPE: Record<OUTPUT_FORMAT, string> = {\n pdf: 'application/pdf',\n excel: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n word: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n png: 'image/png',\n jpeg: 'image/jpeg',\n html: 'text/html',\n csv: 'text/csv',\n json: 'application/json',\n};\n\n/**\n * Get file extension for output format\n */\nexport function getStorageExtensionForFormat(format: OUTPUT_FORMAT): string {\n return STORAGE_OUTPUT_FORMAT_TO_EXTENSION[format];\n}\n\n/**\n * Get MIME type for output format\n */\nexport function getStorageMimeTypeForFormat(format: OUTPUT_FORMAT): string {\n return STORAGE_OUTPUT_FORMAT_TO_MIME_TYPE[format];\n}\n\n/**\n * Get both extension and MIME type for output format\n */\nexport function getStorageFormatInfo(format: OUTPUT_FORMAT): {\n extension: string;\n mimeType: string;\n} {\n return {\n extension: STORAGE_OUTPUT_FORMAT_TO_EXTENSION[format],\n mimeType: STORAGE_OUTPUT_FORMAT_TO_MIME_TYPE[format],\n };\n}\n","/**\n * Storage Categories & Bucket Organization\n *\n * Provider-agnostic storage organization by PURPOSE and CONTENT TYPE.\n * Adapters internally translate these purposes to their naming conventions.\n *\n * Universal approach:\n * - Define buckets by PURPOSE (compliance, media-images, backups, etc.)\n * - Paths are universal across all providers\n * - Adapters handle their own naming rules internally\n *\n * @module @plyaz/config/storage/categories\n */\n\nimport type { StorageCategory } from '@plyaz/types';\nimport { BUCKET_PURPOSE, STORAGE_VISIBILITY } from '@plyaz/types';\n\n/**\n * Constants for storage retention policies (in days)\n */\nexport const STORAGE_RETENTION_DAYS = {\n DAYS_PER_YEAR: 365,\n COMPLIANCE_YEARS: 7,\n TEMPORARY_DAYS: 7,\n BACKUP_DAYS: 90,\n} as const;\n\n/**\n * Constants for TTL calculations\n */\nexport const STORAGE_TTL_CONSTANTS = {\n SECONDS_PER_DAY: 86400,\n} as const;\n\n/**\n * Storage category definitions\n * Provider-agnostic organization by purpose\n */\nexport const STORAGE_CATEGORIES: Record<BUCKET_PURPOSE, StorageCategory> = {\n [BUCKET_PURPOSE.COMPLIANCE]: {\n purpose: BUCKET_PURPOSE.COMPLIANCE,\n description: 'Financial and legal documents requiring audit trail',\n useCases: ['Invoices', 'Receipts', 'Tax documents', 'Contracts', 'Certificates'],\n recommendedRetention:\n STORAGE_RETENTION_DAYS.DAYS_PER_YEAR * STORAGE_RETENTION_DAYS.COMPLIANCE_YEARS, // 7 years\n requiresCompliance: true,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n\n [BUCKET_PURPOSE.MediaImages]: {\n purpose: BUCKET_PURPOSE.MediaImages,\n description: 'Image files with optimization variants',\n useCases: ['Profile pictures', 'Product photos', 'Banners', 'Logos'],\n requiresCompliance: false,\n supportsPublicAccess: true,\n defaultVisibility: STORAGE_VISIBILITY.PUBLIC,\n },\n\n [BUCKET_PURPOSE.MediaVideos]: {\n purpose: BUCKET_PURPOSE.MediaVideos,\n description: 'Video files with transcoding variants',\n useCases: ['Match highlights', 'Training videos', 'Promotional content'],\n requiresCompliance: false,\n supportsPublicAccess: true,\n defaultVisibility: STORAGE_VISIBILITY.PUBLIC,\n },\n\n [BUCKET_PURPOSE.MediaStatic]: {\n purpose: BUCKET_PURPOSE.MediaStatic,\n description: 'Static assets and general files',\n useCases: ['CSS files', 'JavaScript', 'Fonts', 'Icons', 'PDFs'],\n requiresCompliance: false,\n supportsPublicAccess: true,\n defaultVisibility: STORAGE_VISIBILITY.PUBLIC,\n },\n\n [BUCKET_PURPOSE.UserUploads]: {\n purpose: BUCKET_PURPOSE.UserUploads,\n description: 'User-uploaded files and attachments',\n useCases: ['Document uploads', 'Attachments', 'User-generated content'],\n requiresCompliance: false,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n\n [BUCKET_PURPOSE.TEMPORARY]: {\n purpose: BUCKET_PURPOSE.TEMPORARY,\n description: 'Temporary files for processing',\n useCases: ['Upload staging', 'Processing queue', 'Temporary exports'],\n recommendedRetention: STORAGE_RETENTION_DAYS.TEMPORARY_DAYS, // 7 days\n requiresCompliance: false,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n\n [BUCKET_PURPOSE.ARCHIVES]: {\n purpose: BUCKET_PURPOSE.ARCHIVES,\n description: 'Long-term archived files (cold storage)',\n useCases: ['Historical records', 'Old documents', 'Compliance archives'],\n requiresCompliance: true,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n\n [BUCKET_PURPOSE.BACKUPS]: {\n purpose: BUCKET_PURPOSE.BACKUPS,\n description: 'System and database backups',\n useCases: ['Database dumps', 'Configuration backups', 'Disaster recovery'],\n recommendedRetention: STORAGE_RETENTION_DAYS.BACKUP_DAYS, // 90 days\n requiresCompliance: true,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n};\n\n/**\n * Example adapter bucket name translation:\n *\n * Identifier: \"compliance:enterprise:acme-corp:prod\"\n *\n * CloudflareR2Adapter translates to:\n * → plyaz-prod-weur-enterprise-acme-corp-records-vault\n *\n * SupabaseStorageAdapter translates to:\n * → compliance-acme-corp (projects handle env)\n *\n * S3Adapter translates to:\n * → plyaz-compliance-enterprise-acme-corp-prod-us-east-1\n *\n * All use the SAME paths internally!\n */\n","/**\n * Storage Chunked Upload Configuration\n *\n * Configuration constants for multipart/chunked file uploads.\n * Used by adapters that support chunked uploads (R2, Supabase, S3).\n *\n * @module @plyaz/config/storage/chunked-upload\n */\n\nimport { NUMBER_SYSTEM } from '../math/constants';\n\n// Multipliers for chunk sizes (in MB/GB)\nconst STORAGE_CHUNK_MULTIPLIERS = {\n MIN_MB: 5,\n MAX_GB: 5,\n SMALL_MB: 5,\n MEDIUM_MB: 10,\n LARGE_MB: 50,\n HUGE_MB: 100,\n THRESHOLD_SMALL_MB: 100,\n THRESHOLD_LARGE_GB: 10,\n} as const;\n\n/**\n * Chunk size configuration for multipart uploads\n * Based on S3/R2 limits: 5MB min, 5GB max per part, 10,000 parts max\n */\nexport const STORAGE_CHUNK_SIZE = {\n MIN: STORAGE_CHUNK_MULTIPLIERS.MIN_MB * NUMBER_SYSTEM.BYTES_PER_MB, // S3/R2 minimum part size\n MAX: STORAGE_CHUNK_MULTIPLIERS.MAX_GB * NUMBER_SYSTEM.BYTES_PER_GB, // S3/R2 maximum part size\n DEFAULT_SMALL: STORAGE_CHUNK_MULTIPLIERS.SMALL_MB * NUMBER_SYSTEM.BYTES_PER_MB, // For files < 100MB\n DEFAULT_MEDIUM: STORAGE_CHUNK_MULTIPLIERS.MEDIUM_MB * NUMBER_SYSTEM.BYTES_PER_MB, // For files < 1GB\n DEFAULT_LARGE: STORAGE_CHUNK_MULTIPLIERS.LARGE_MB * NUMBER_SYSTEM.BYTES_PER_MB, // For files < 10GB\n DEFAULT_HUGE: STORAGE_CHUNK_MULTIPLIERS.HUGE_MB * NUMBER_SYSTEM.BYTES_PER_MB, // For files > 10GB\n} as const;\n\n/**\n * File size thresholds for determining chunk strategy\n */\nexport const STORAGE_FILE_SIZE_THRESHOLDS = {\n SMALL: STORAGE_CHUNK_MULTIPLIERS.THRESHOLD_SMALL_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n MEDIUM: NUMBER_SYSTEM.BYTES_PER_GB,\n LARGE: STORAGE_CHUNK_MULTIPLIERS.THRESHOLD_LARGE_GB * NUMBER_SYSTEM.BYTES_PER_GB,\n CHUNKED_UPLOAD: STORAGE_CHUNK_MULTIPLIERS.THRESHOLD_SMALL_MB * NUMBER_SYSTEM.BYTES_PER_MB, // Default threshold for switching to chunked upload\n} as const;\n\n/**\n * Check if file should use chunked upload based on size\n *\n * @param file - File buffer or stream\n * @param threshold - Size threshold in bytes (defaults to 100MB)\n * @returns True if file should use chunked upload\n *\n * @example\n * ```typescript\n * const shouldChunk = shouldUseStorageChunkedUpload(fileBuffer);\n * const shouldChunkCustom = shouldUseStorageChunkedUpload(fileBuffer, 50 * 1024 * 1024);\n * ```\n */\nexport function shouldUseStorageChunkedUpload(\n file: globalThis.Buffer | globalThis.NodeJS.ReadableStream | null | undefined,\n threshold: number = STORAGE_FILE_SIZE_THRESHOLDS.CHUNKED_UPLOAD\n): boolean {\n if (!file || !globalThis.Buffer.isBuffer(file)) {\n return false;\n }\n return file.length > threshold;\n}\n\n/**\n * Get optimal chunk size based on file size\n * Follows S3/R2 limits: 5MB min, 5GB max per part, 10,000 parts max\n *\n * @param totalSize - Total file size in bytes\n * @returns Optimal chunk size in bytes\n *\n * @example\n * ```typescript\n * const chunkSize = getStorageOptimalChunkSize(50 * 1024 * 1024); // 50MB file\n * console.log(chunkSize); // 5242880 (5MB)\n * ```\n */\nexport function getStorageOptimalChunkSize(totalSize: number): number {\n if (totalSize < STORAGE_FILE_SIZE_THRESHOLDS.SMALL) {\n return STORAGE_CHUNK_SIZE.DEFAULT_SMALL; // 5MB for < 100MB\n }\n\n if (totalSize < STORAGE_FILE_SIZE_THRESHOLDS.MEDIUM) {\n return STORAGE_CHUNK_SIZE.DEFAULT_MEDIUM; // 10MB for < 1GB\n }\n\n if (totalSize < STORAGE_FILE_SIZE_THRESHOLDS.LARGE) {\n return STORAGE_CHUNK_SIZE.DEFAULT_LARGE; // 50MB for < 10GB\n }\n\n return STORAGE_CHUNK_SIZE.DEFAULT_HUGE; // 100MB for huge files\n}\n","/**\n * AWS Configuration Constants\n * Centralized source of truth for AWS service configurations\n */\n\n/**\n * AWS Default Regions\n */\nexport const AWS_DEFAULT_REGIONS = {\n /** Default region for most AWS services */\n DEFAULT: 'us-east-1',\n /** CloudFront distributions are global but use us-east-1 for API calls */\n CLOUDFRONT: 'us-east-1',\n /** S3 default region */\n S3: 'us-east-1',\n} as const;\n\n/**\n * AWS Service Names (used for AWS Signature V4)\n */\nexport const AWS_SERVICE_NAMES = {\n CLOUDFRONT: 'cloudfront',\n S3: 's3',\n LAMBDA: 'lambda',\n DYNAMODB: 'dynamodb',\n SQS: 'sqs',\n SNS: 'sns',\n SES: 'ses',\n} as const;\n\n/**\n * AWS Service Hosts/Endpoints\n */\nexport const AWS_SERVICE_HOSTS = {\n /** CloudFront API endpoint (global) */\n CLOUDFRONT: 'cloudfront.amazonaws.com',\n /** S3 endpoint pattern - use with region substitution */\n S3: 's3.amazonaws.com',\n /** SES endpoint pattern - use with region substitution */\n SES: 'email.{region}.amazonaws.com',\n} as const;\n\n/**\n * AWS CloudFront Configuration\n */\nexport const AWS_CLOUDFRONT_CONFIG = {\n /** Default region for CloudFront API calls */\n DEFAULT_REGION: AWS_DEFAULT_REGIONS.CLOUDFRONT,\n /** Service name for AWS Signature V4 */\n SERVICE_NAME: AWS_SERVICE_NAMES.CLOUDFRONT,\n /** API endpoint host */\n HOST: AWS_SERVICE_HOSTS.CLOUDFRONT,\n /** API version used in paths */\n API_VERSION: '2020-05-31',\n /** Maximum paths per invalidation request */\n MAX_PATHS_PER_INVALIDATION: 1000,\n /** Free tier invalidation limit per month */\n FREE_TIER_INVALIDATIONS_PER_MONTH: 3000,\n} as const;\n\n/**\n * AWS S3 Configuration\n */\nexport const AWS_S3_CONFIG = {\n /** Default region for S3 operations */\n DEFAULT_REGION: AWS_DEFAULT_REGIONS.S3,\n /** Service name for AWS Signature V4 */\n SERVICE_NAME: AWS_SERVICE_NAMES.S3,\n /** API endpoint host */\n HOST: AWS_SERVICE_HOSTS.S3,\n} as const;\n\n/**\n * Helper function to get AWS service endpoint with region\n * @param service - AWS service name\n * @param region - AWS region\n * @returns Formatted endpoint URL\n *\n * @example\n * ```typescript\n * const s3Endpoint = getAWSServiceEndpoint('s3', 'us-west-2');\n * console.log(s3Endpoint); // 's3.us-west-2.amazonaws.com'\n *\n * const dynamoEndpoint = getAWSServiceEndpoint('dynamodb', 'eu-central-1');\n * console.log(dynamoEndpoint); // 'dynamodb.eu-central-1.amazonaws.com'\n * ```\n */\nexport function getAWSServiceEndpoint(service: string, region: string): string {\n return `${service}.${region}.amazonaws.com`;\n}\n"]}
1
+ {"version":3,"sources":["../src/env.ts","../src/providers/alchemy.ts","../src/providers/oauth.ts","../src/providers/apiConfig.ts","../src/chains/contracts.ts","../src/chains/supportedChains.ts","../src/features.ts","../src/domains.ts","../src/locales.ts","../src/app.ts","../src/security.ts","../src/utils/string/constants.ts","../src/utils/collection/constants.ts","../src/utils/hash/constants.ts","../src/locale/iso.ts","../src/locale/formats.ts","../src/locale/phone.ts","../src/locale/address.ts","../src/locale/currencies.ts","../src/locale/countries.ts","../src/locale/languages.ts","../src/locale/timezone.ts","../src/locale/athlete_position.ts","../src/time/constants.ts","../src/math/constants.ts","../src/performance/index.ts","../src/network/constants.ts","../src/display/constants.ts","../src/db/constants.ts","../src/db/config.ts","../src/social.ts","../src/a11y/constants.ts","../src/errors/constants.ts","../src/logger/constants.ts","../src/api/encryption.ts","../src/api/environments.ts","../src/api/package/defaults.ts","../src/auth/constants.ts","../src/notifications/constants.ts","../src/payments/error-messages.ts","../src/payments/events.ts","../src/payments/gateway.ts","../src/payments/providers/stripe/constant.ts","../src/payments/providers/stripe/config.ts","../src/payments/validators.ts","../src/payments/routing/methods/ab-testing/ab-testing.ts","../src/payments/routing/methods/failover/strategies/priority-order.config.ts","../src/payments/routing/methods/failover/strategies/next-available.config.ts","../src/payments/routing/methods/failover/strategies/performance-based.config.ts","../src/payments/routing/methods/failover/strategies/load-balanced.config.ts","../src/payments/routing/methods/failover/strategies/geographic.config.ts","../src/payments/routing/methods/failover/failover-registry.ts","../src/payments/routing/methods/geographic/geographic.ts","../src/payments/routing/methods/performance/performance.ts","../src/payments/routing/methods/load-balancing/strategies/weighted.config.ts","../src/payments/routing/methods/load-balancing/strategies/round-robin.config.ts","../src/payments/routing/methods/load-balancing/strategies/least-connections.config.ts","../src/payments/routing/methods/load-balancing/strategies/performance-based.config.ts","../src/payments/routing/methods/load-balancing/strategies/custom.config.ts","../src/payments/routing/methods/load-balancing/load-balancing-registry.ts","../src/payments/routing/methods/cost-optimization/strategies/aggressive.config.ts","../src/payments/routing/methods/cost-optimization/strategies/balanced.config.ts","../src/payments/routing/methods/cost-optimization/strategies/conservative.config.ts","../src/payments/routing/methods/cost-optimization/strategies/targeted.config.ts","../src/payments/routing/methods/cost-optimization/cost-optimization-registry.ts","../src/payments/routing/provider-selection/amount-based-selection.ts","../src/payments/routing/provider-selection/currency-specific-providers.ts","../src/payments/routing/provider-selection/custom-rules.ts","../src/payments/routing/provider-selection/default-providers.ts","../src/payments/routing/provider-selection/method-specific-providers.ts","../src/payments/routing/provider-selection/region-specific-providers.ts","../src/payments/routing/provider-selection/time-based-selection.ts","../src/payments/routing/provider-selection/user-type-providers.ts","../src/storage/constants.ts","../src/storage/defaults.ts","../src/storage/validation.ts","../src/storage/mime-types.ts","../src/storage/categories.ts","../src/storage/chunked-upload.ts","../src/aws/constants.ts"],"names":["isServer","isDev","isProd","isTest","ALCHEMY_CONFIG","OAUTH_PROVIDERS","ENV_CONFIG","API_CONFIG","CONTRACTS","PROD_SUPPORTED_CHAINS","mainnet","STAGING_SUPPORTED_CHAINS","sepolia","DEV_SUPPORTED_CHAINS","FEATURES","DEFAULT_BACKEND_CONFIG","DEFAULT_FRONTEND_CONFIG","FILE_CHECK_INTERVAL_DEFAULT","FEATURE_FLAG_CACHE_TTL_DEFAULT","CACHE_CLEANUP_INTERVAL_DEFAULT","CACHE_MAX_SIZE_DEFAULT","CACHE_EVICTION_PERCENTAGE","FEATURE_FLAG_PROVIDERS","FEATURE_FLAG_FILE_FORMATS","FEATURE_FLAG_FILE_PATHS","FEATURE_FLAG_EVALUATION_REASONS","DOMAINS","DEFAULT_LOCALE","SUPPORTED_LOCALES","TIMEZONE","TIMEZONE_OFFSET","DEFAULT_COUNTRY","DEFAULT_CURRENCY","DEFAULT_LANGUAGE","LANDING_PAGE_APP","WEB_APP","SECURITY","STRING_CONSTANTS","FORMAT_CONSTANTS","COLLECTION_CONSTANTS","FNV_CONSTANTS","HASH_SEED_CONSTANTS","HASH_DISTRIBUTION_CONSTANTS","SHA_CONSTANTS","MD5_CONSTANTS","HASH_ENCODING","HASH_ALGORITHMS","MURMUR_CONSTANTS","CRC_CONSTANTS","ISO_STANDARDS","LOCALE_FORMATS","DATE_FORMATS","TEXT_DIRECTION","PHONE_FORMATS","PHONE_PATTERNS","ADDRESS_FORMATS","ADDRESS_FIELDS","CURRENCY_CODES","CURRENCY_INFO","COUNTRY_CODES","COUNTRY_CODES_SCOPED","COUNTRY_NAMES","COUNTRY_CALLING_CODES","COUNTRY_REGIONS","COUNTRY_REGIONS_DETAILED","LOCALE_REGIONS","LOCALE_REGIONS_DETAILED","TIMEZONE_REGIONS","ATHLETE_POSITIONS","DAYS_IN_WEEK","EARLY_MORNING_HOURS","TIME_CONSTANTS","COUNTRY_TIMEZONES","ALL_COUNTRY_TIMEZONES","DAYS_OF_WEEK","_","i","HOURS_OF_DAY","NUMBER_SYSTEM","MATH_CONSTANTS","MULTIPLIERS","NUMERIC_CONSTANTS","PERFORMANCE_CONSTANTS","NETWORK_CONSTANTS","RTT_THRESHOLDS","SPEED_THRESHOLDS","NETWORK_SCORES","NETWORK_TIMEOUTS","CACHE_TTL","CACHE_STALE","DEDUPE_TIME","RETRY_ATTEMPTS","RETRY_DELAYS","RETRY_BACKOFF","BATCH_SIZES","PAGE_SIZES","DISPLAY_CONSTANTS","CHAR_CODES","NUMERIX","dynamicPoolDefaultConfig","SOCIAL_LINKS","PRODUCT_LINKS","BLOG","A11Y_CONSTANTS","ARIA_ROLES","ARIA_ATTRIBUTES","KEYBOARD_CODES","ANNOUNCEMENT_PRIORITY","FOCUS_TRAP","ERRORS_CODES","BASE_ERRORS_RESPONSE","DEFAULT_ERROR_EVENT_SCOPES","LOGGER_LEVELS","SENSITIVE_DATA","LOGGER_TRANSPORT_CONFIGURATION","API_ENCRYPTION_DEFAULTS","createDefaultEncryptionKey","key","options","__name","createEncryptionConfig","PRODUCTION_CONFIG","STAGING_CONFIG","DEVELOPMENT_CONFIG","DEFAULT_API_CONFIG","DEFAULT_API_CLIENT_OPTIONS","SUPABASE_CONFIG","CLERK_PUBLISHABLE_KEY","SIZE_25_MB","SIZE_30_MB","DEFAULT_NOTIFICATION_CATEGORY","NOTIFICATION_CATEGORIES","RETRY_CONFIG","ATTACHMENT_CONFIG","CIRCUIT_BREAKER_CONFIG","QUEUE_CONFIG","RATE_LIMIT_CONFIG","TEMPLATE_CONFIG","SMS_CONFIG","NOTIFICATION_CONFIG","LOGGING_CONFIG","HEALTH_CHECK_CONFIG","NOTIFICATION_PACKAGE_CONFIG","DEFAULT_HMAC_ALGORITHM","DEFAULT_ENVIRONMENT","THRESHOLDS","SENSITIVE_KEYS","RISK_SCORE","LOG_LEVELS","REDACTED","PAYMENT_ERROR_MESSAGES","PAYMENT_ALERT_SEVERITY","ERROR_SEVERITY","PROCESSING_ERROR_MESSAGES","WEBHOOK_CONSTANTS","RECOVERY_STEPS","REFUND_ERROR_MESSAGES","DEFAULT_REFUND_LEVELS","FACTORY_MESSAGES","PAYLOAD_KEYS","STRIPE_ERROR_TYPES","PROVIDER_ERROR_MESSAGES","SECURITY_ERROR_MESSAGES","DEFAULT_PAYEMNT_PRIORITY","DEFAULT_URGENT","DEFAULT_MAX_LISTENERS","DEFAULT_HANDLER_TIMEOUT_MS","DEFAULT_EVENT_COUNT","DEFAULT_SUCCESS_THRESHOLD","DEFAULT_PARTIAL_SUCCESS_THRESHOLD","EVENT_DEFAULTS","EVENT_COMPONENT","EVENT_ERROR_CODE","EVENT_ERROR_MESSAGE","EVENT_ENVIRONMENT","PHASE_NONE","PHASE_CAPTURING","PHASE_AT_TARGET","PHASE_BUBBLING","EVENT_PHASE","EVENT_META_KEY","EVENT_SOURCE_FIELD","EVENT_RESULT_STATUS","EmptyArray","CurrentTimestamp","SETTLED_PROMISE_STATUS","EVENT_NORMALIZER_MESSAGES","field","DEFAULT_RETRY_DELAY_MS","MAX_CIRCUIT_OPEN_MS","DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD","FALLBACK_REASON","FALLBACK_NEXT_STEPS","RISK_LEVEL","SECURITY_FLAGS","CUSTOM_RULE_OPERATER","PAYMENT_GATEWAY_ERROR_MESSAGE","STRIPE_API_VERSION","STRIPE_MAPPING_VERSION","ZERO_AMOUNT","DEFAULT_PROCESSING_RATE","DEFAULT_PLATFORM_RATE","DEFAULT_CROSS_BORDER_RATE","DEFAULT_PRIORITY","FIXED_FEES","NEXT_STEP_EXPECTED_UPDATE_IN","STRIPE_CONFIDENCE_HIGH","STRIPE_PRIORITY_HIGH","STRIPE_CONFIDENCE_MEDIUM","STRIPE_PRIORITY_MEDIUM","AMOUNT_DECIMALS","AMOUNT_DIVISOR","UNIX_TIMESTAMP_MULTIPLIER","TIMESTAMP_FALLBACK","NEXT_STEP_USER_ACTION","NEXT_STEP_SYSTEM_ACTION","STRIPE_EVENT_TYPE","STRIPE_PAYMENT_INTENT_STATUS","DEFAULT_PROCESSING_TIME","DEFAULT_SETTLEMENT_TIME","STRIPE_DATA_PATHS","PAYMENT_OPERATION","STRIPE_MESSAGES","stripeConfig","PAYMENT_PROVIDER_TYPE","PAYMENT_METHOD","HTTP_STATUS","SUPPORTED_CURRENCIES","VALIDATION_MESSAGES","VALIDATOR_NAMES","CORE_FIELDS","VALID_BILLING_CYCLES","VALID_RISK_LEVELS","VALID_RECURRENCE_FREQUENCIES","MIN_POSITIVE_AMOUNT","CURRENCY_CODE_LENGTH","ABTesting","ROUTING_STRATEGY","COST_OPTIMIZATION_STRATEGY","FAILOVER_PRIORITY_ORDER","FAIL_OVER_STRATEGY","FAILOVER_NEXT_AVAILABLE","FAILOVER_PERFORMANCE_BASED","FAILOVER_LOAD_BALANCED","FAILOVER_GEOGRAPHIC","FAILOVER_REGISTRY","Geographic","REGULATORY_FRAMEWORK","TRANSACTION_TYPE","Performance","PERFORMANCE_METRIC_TYPE","WeightedLoadBalancing","LOAD_BALANCING_STRATEGY","RoundRobinLoadBalancing","LeastConnectionsLoadBalancing","PerformanceBasedLoadBalancing","CustomLoadBalancing","LoadBalancingRegistry","COST_OPTIMIZATION_AGGRESSIVE","COST_OPTIMIZATION_BALANCED","COST_OPTIMIZATION_CONSERVATIVE","COST_OPTIMIZATION_TARGETED","COST_OPTIMIZATION","AMOUNT_BASED_SELECTION","CurrencySpecificProviders","CUSTOM_RULES","DEFAULT_PROVIDERS","MethodSpecificProviders","regionSpecificProviders","TIME_BASED_SELECTION","UserTypeSelection","USER_TYPE","SIZE_5_MB","SIZE_10_MB","SIZE_50_MB","SIZE_100_MB","SIZE_500_MB","SIZE_1_GB","FILE_VALIDATION_CONFIG","STORAGE_RETRY_CONFIG","RETRY_STRATEGY","PATH_GENERATION_CONFIG","PATH_GENERATION_STRATEGY","STORAGE_QUEUE_CONFIG","STORAGE_QUEUE_PRIORITY","ADAPTER_CONFIG","ADAPTER_HEALTH_STATUS","UPLOAD_CONFIG","FILE_ACCESS_LEVEL","DOWNLOAD_CONFIG","MEDIA_PROCESSING_CONFIG","VIRUS_SCAN_CONFIG","COMPLIANCE_CONFIG","STORAGE_TEMPLATE_CONFIG","SHARE_LINK_CONFIG","TTL_CONFIG","CORS_CONFIG","AUDIT_CONFIG","CDN_CONFIG","MONITORING_CONFIG","CLOUDFLARE_R2_CONFIG","SUPABASE_STORAGE_CONFIG","STORAGE_PACKAGE_CONFIG","DEFAULT_RETENTION_POLICY","STORAGE_JURISDICTION","STORAGE_REGULATORY_FRAMEWORK","DEFAULT_COMPLIANCE_CONFIG","PRESET_RETENTION_POLICIES","BUILT_IN_PRESETS","STORAGE_DEVICE_TYPE","FILE_CATEGORY","DEFAULT_VARIANTS_BY_CATEGORY","DEVICE_SPECIFIC_VARIANT_OVERRIDES","MINIMUM_VARIANTS_BY_CATEGORY","STANDARD_VARIANT_DEFINITIONS","STORAGE_VARIANT_NAME","STORAGE_FILE_SIZE_LIMITS","STORAGE_DEFAULT_VALIDATION_CONFIG","BUCKET_PURPOSE","getStorageValidationRulesForPurpose","purpose","config","validationConfig","purposeRules","defaultRules","STORAGE_OUTPUT_FORMAT_TO_EXTENSION","STORAGE_OUTPUT_FORMAT_TO_MIME_TYPE","getStorageExtensionForFormat","format","getStorageMimeTypeForFormat","getStorageFormatInfo","STORAGE_RETENTION_DAYS","STORAGE_TTL_CONSTANTS","STORAGE_CATEGORIES","STORAGE_VISIBILITY","STORAGE_CHUNK_MULTIPLIERS","STORAGE_CHUNK_SIZE","STORAGE_FILE_SIZE_THRESHOLDS","shouldUseStorageChunkedUpload","file","threshold","getStorageOptimalChunkSize","totalSize","AWS_DEFAULT_REGIONS","AWS_SERVICE_NAMES","AWS_SERVICE_HOSTS","AWS_CLOUDFRONT_CONFIG","AWS_S3_CONFIG","getAWSServiceEndpoint","service","region"],"mappings":"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AA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CAGL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,MAGL,GAAA,CAAK,KAAA,CACL,GAAA,CAAK,KAAA,CACL,IAAA,CAAM,MAAA,CACN,IAAA,CAAM,MACR,EAKaC,EAAAA,CAAgB,CAI3B,qBAAA,CAAuB,CAAC,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,MAAO,KAAA,CAAO,KAAK,CAAA,CAKvE,wBAAA,CAA0B,CAAC,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,MAAO,KAAA,CAAO,KAAK,CAAA,CAKnE,kBAAA,CAAoB,CAAC,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAK,CAAA,CAKtD,aAAA,CAAe,CAAC,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAA,CAAO,KAAK,EAKjD,sBAAA,CAAwB,CAC1B,EC7IO,IAAMC,CAAAA,CAAgB,CAE3B,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CAGJ,EAAA,CAAI,IACN,CAAA,CAKaC,GAAuB,CAElC,EAAA,CAAI,IAAA,CAEJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,GAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,IAAA,CACJ,EAAA,CAAI,KACJ,EAAA,CAAI,IACN,CAAA,CAKaC,EAAAA,CAA2C,CAEtD,EAAA,CAAI,QAAA,CAGJ,EAAA,CAAI,SAAA,CACJ,GAAI,SAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,QAAA,CACJ,EAAA,CAAI,UACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,SAAA,CACJ,GAAI,SAAA,CACJ,EAAA,CAAI,QAAA,CACJ,EAAA,CAAI,UACJ,EAAA,CAAI,QAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,OAAA,CACJ,GAAI,QAAA,CACJ,EAAA,CAAI,WAAA,CACJ,EAAA,CAAI,YAAA,CACJ,EAAA,CAAI,OAAA,CACJ,EAAA,CAAI,cACJ,EAAA,CAAI,QAAA,CACJ,EAAA,CAAI,UAAA,CACJ,EAAA,CAAI,SAAA,CACJ,EAAA,CAAI,UAAA,CACJ,GAAI,UAAA,CACJ,EAAA,CAAI,OAAA,CACJ,EAAA,CAAI,QACN,CAAA,CAKaC,EAAAA,CAAwB,CAInC,IAAA,CAAM,CAAC,IAAA,CAAM,IAAI,CAAA,CAIjB,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,EAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,MAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,EAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,MAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,EAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,MAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,EAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,MAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,IAAA,CAAM,CAAC,KAAM,IAAI,CAAA,CAIjB,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,EAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,MAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,KAAA,CAAO,CAAC,IAAI,EAIZ,KAAA,CAAO,CAAC,IAAI,CAAA,CAIZ,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,EAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,OAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CAIb,MAAA,CAAQ,CAAC,IAAI,CAAA,CA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","file":"index.cjs","sourcesContent":["export const isServer = typeof window === 'undefined';\nexport const isDev = globalThis.process.env.NODE_ENV === 'development';\nexport const isProd = globalThis.process.env.NODE_ENV === 'production';\nexport const isTest = globalThis.process.env.NODE_ENV === 'test';\n","/**\n * Alchemy blockchain provider configuration\n */\nexport const ALCHEMY_CONFIG = {\n /**\n * Alchemy API key from environment\n */\n apiKey: globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY!,\n\n /**\n * RPC URLs for different blockchain networks\n */\n rpcUrls: {\n /**\n * Ethereum mainnet RPC URL\n */\n ethereum: `https://eth-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Polygon mainnet RPC URL\n */\n polygon: `https://polygon-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Arbitrum mainnet RPC URL\n */\n arbitrum: `https://arb-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Optimism mainnet RPC URL\n */\n optimism: `https://opt-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Base mainnet RPC URL\n */\n base: `https://base-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n\n /**\n * Solana mainnet RPC URL\n */\n solana: `https://solana-mainnet.g.alchemy.com/v2/${globalThis.process.env.NEXT_PUBLIC_ALCHEMY_KEY}`,\n },\n};\n","/**\n * OAuth provider configurations\n */\nexport const OAUTH_PROVIDERS = {\n /**\n * Google OAuth configuration\n */\n google: {\n /**\n * Google OAuth client ID\n */\n clientId: globalThis.process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID!,\n /**\n * Google OAuth client secret\n */\n clientSecret: globalThis.process.env.GOOGLE_CLIENT_SECRET!,\n /**\n * Google OAuth redirect URI\n */\n redirectUri: globalThis.process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URI!,\n /**\n * Google OAuth permission scopes\n */\n scopes: ['openid', 'profile', 'email'],\n },\n\n /**\n * Discord OAuth configuration\n */\n discord: {\n /**\n * Discord OAuth client ID\n */\n clientId: globalThis.process.env.NEXT_PUBLIC_DISCORD_CLIENT_ID!,\n /**\n * Discord OAuth client secret\n */\n clientSecret: globalThis.process.env.DISCORD_CLIENT_SECRET!,\n /**\n * Discord OAuth redirect URI\n */\n redirectUri: globalThis.process.env.NEXT_PUBLIC_DISCORD_REDIRECT_URI!,\n /**\n * Discord OAuth permission scopes\n */\n scopes: ['identify', 'email'],\n },\n\n /**\n * Facebook OAuth configuration\n */\n facebook: {\n /**\n * Facebook OAuth client ID\n */\n clientId: globalThis.process.env.NEXT_PUBLIC_FACEBOOK_CLIENT_ID!,\n /**\n * Facebook OAuth client secret\n */\n clientSecret: globalThis.process.env.FACEBOOK_CLIENT_SECRET!,\n /**\n * Facebook OAuth redirect URI\n */\n redirectUri: globalThis.process.env.NEXT_PUBLIC_FACEBOOK_REDIRECT_URI!,\n /**\n * Facebook OAuth permission scopes\n */\n scopes: ['public_profile', 'email'],\n },\n} as const;\n","/**\n * API Client Provider Configuration\n * Environment and API client configuration constants\n */\n\n/**\n * Environment configuration for API client\n */\nexport const ENV_CONFIG = {\n /**\n * Current Node.js environment (development, production, test)\n */\n env: globalThis.process.env.NODE_ENV as 'development' | 'production',\n\n /**\n * Public API key from environment variables\n */\n apiKey: globalThis.process.env.NEXT_PUBLIC_API_KEY,\n};\n\n/**\n * API client configuration with encryption settings\n */\nexport const API_CONFIG = {\n /**\n * Base URL for API requests\n */\n baseURL: globalThis.process.env.NEXT_PUBLIC_API_URL ?? '/api',\n\n /**\n * Encryption configuration for secure API communication\n */\n encryption: {\n /**\n * Whether encryption is enabled\n */\n enabled: true,\n\n /**\n * Encryption key configuration\n */\n key: {\n /**\n * Key identifier for production environment\n */\n id: 'prod-key-v1',\n\n /**\n * Encryption key from environment variables\n */\n key: globalThis.process.env.ENCRYPTION_KEY ?? '',\n\n /**\n * Encryption algorithm (AES-GCM)\n */\n algorithm: 'AES-GCM' as const,\n\n /**\n * Key format specification\n */\n format: 'raw' as const,\n },\n },\n};\n","/**\n * Smart contract addresses for different networks\n */\nexport const CONTRACTS = {\n /**\n * NFT Manager contract addresses\n */\n nftManager: {\n /**\n * Read-only contract addresses\n */\n read: {\n /**\n * Arbitrum network NFT Manager address\n */\n arbitrum: '',\n },\n /**\n * Write-enabled contract addresses\n */\n write: {\n /**\n * Arbitrum network NFT Manager address\n */\n arbitrum: '',\n },\n },\n\n /**\n * Token Manager contract addresses\n */\n tokenManager: {\n /**\n * Read-only contract addresses\n */\n read: {\n /**\n * Arbitrum network Token Manager address\n */\n arbitrum: '',\n },\n /**\n * Write-enabled contract addresses\n */\n write: {\n /**\n * Arbitrum network Token Manager address\n */\n arbitrum: '',\n },\n },\n} as const;\n","import { mainnet, sepolia } from 'viem/chains';\n\n/**\n * Blockchain chains supported in production environment\n */\nexport const PROD_SUPPORTED_CHAINS = {\n /**\n * Ethereum mainnet\n */\n ethereum: mainnet,\n} as const;\n\n/**\n * Blockchain chains supported in staging environment\n */\nexport const STAGING_SUPPORTED_CHAINS = {\n /**\n * Ethereum mainnet\n */\n ethereum: mainnet,\n /**\n * Sepolia testnet (Ethereum)\n */\n sepolia,\n} as const;\n\n/**\n * Blockchain chains supported in development environment\n */\nexport const DEV_SUPPORTED_CHAINS = {\n /**\n * Sepolia testnet (Ethereum)\n */\n sepolia,\n} as const;\n","/**\n * Feature Flag Constants\n *\n */\n\nimport { isDev } from './env';\n\n/**\n * Feature flags for authentication providers and other features\n */\nexport const FEATURES = {\n /**\n * Enable Google OAuth authentication\n */\n AUTH_GOOGLE: true,\n\n /**\n * Enable Discord OAuth authentication (dev only)\n */\n AUTH_DISCORD: isDev,\n\n /**\n * Enable Facebook OAuth authentication\n */\n AUTH_FACEBOOK: false,\n\n /**\n * Enable GitHub OAuth authentication\n */\n AUTH_GITHUB: true,\n} as const satisfies Record<string, boolean>;\n\n/**\n * Default backend configuration for feature flags.\n * Optimized for server-side usage with reasonable defaults.\n */\nexport const DEFAULT_BACKEND_CONFIG = {\n provider: 'database',\n isCacheEnabled: true,\n cacheTtl: 300, // 5 minutes\n refreshInterval: 60, // 1 minute auto-refresh\n shouldFallbackToDefaults: true,\n isLoggingEnabled: globalThis.process.env.NODE_ENV === 'development',\n} as const;\n\n/**\n * Default frontend configuration for feature flags.\n * Optimized for client-side usage with reasonable defaults.\n */\nexport const DEFAULT_FRONTEND_CONFIG = {\n provider: 'memory',\n isCacheEnabled: true,\n cacheTtl: 300, // 5 minutes\n refreshInterval: 0, // No auto-refresh for frontend\n shouldFallbackToDefaults: true,\n isLoggingEnabled: false, // Disabled in production\n} as const;\n\n/**\n * Default file check interval for file watcher debouncing (in milliseconds)\n * Prevents rapid reloads when files are saved multiple times quickly\n * @default 100\n */\nexport const FILE_CHECK_INTERVAL_DEFAULT = 100;\n\n/**\n * Default cache TTL for feature flags (in seconds)\n * @default 300 (5 minutes)\n */\nexport const FEATURE_FLAG_CACHE_TTL_DEFAULT = 300;\n\n/**\n * Default cleanup interval for memory cache (in milliseconds)\n * @default 60000 (1 minute)\n */\nexport const CACHE_CLEANUP_INTERVAL_DEFAULT = 60000;\n\n/**\n * Default maximum cache size for memory strategy\n * @default 1000\n */\nexport const CACHE_MAX_SIZE_DEFAULT = 1000;\n\n/**\n * Percentage of cache entries to evict when cache is full\n * @default 0.1 (10%)\n */\nexport const CACHE_EVICTION_PERCENTAGE = 0.1;\n\n/**\n * Feature flag provider types\n */\nexport const FEATURE_FLAG_PROVIDERS = {\n MEMORY: 'memory',\n FILE: 'file',\n REDIS: 'redis',\n API: 'api',\n DATABASE: 'database',\n} as const;\n\n/**\n * Feature flag file formats\n */\nexport const FEATURE_FLAG_FILE_FORMATS = {\n JSON: 'json',\n YAML: 'yaml',\n} as const;\n\n/**\n * Default file paths for feature flag configuration\n */\nexport const FEATURE_FLAG_FILE_PATHS = {\n DEFAULT: 'src/config/feature-provider.json',\n JSON_EXAMPLE: 'src/config/feature-provider.json.example',\n YAML_EXAMPLE: 'src/config/feature-provider.yaml.example',\n} as const;\n\n/**\n * Feature flag evaluation reasons\n */\nexport const FEATURE_FLAG_EVALUATION_REASONS = {\n DEFAULT: 'default',\n OVERRIDE: 'override',\n RULE_MATCH: 'rule_match',\n FLAG_DISABLED: 'flag_disabled',\n ERROR: 'error',\n} as const;\n","/**\n * Domain and URL configuration\n */\nexport const DOMAINS = {\n /**\n * Main application URL\n */\n app: 'https://plyaz.co.uk',\n\n /**\n * API endpoint URL from environment\n */\n api: globalThis.process.env.NEXT_PUBLIC_API_URL!,\n} as const;\n","/**\n * Default locale for the application (ISO 639-1 language code)\n */\nexport const DEFAULT_LOCALE = 'en';\n\n/**\n * List of supported locale codes for the application\n */\nexport const SUPPORTED_LOCALES = ['en', 'es', 'pt'] as const;\n\n/**\n * Default timezone for the application (IANA timezone identifier)\n */\nexport const TIMEZONE = 'America/Sao_Paulo';\n\n/**\n * Default timezone offset from UTC\n */\nexport const TIMEZONE_OFFSET = -3; // UTC-3 for Brasília Time (BRT)\n\n/**\n * Default country code (ISO 3166-1 alpha-2)\n */\nexport const DEFAULT_COUNTRY = 'BR';\n\n/**\n * Default currency code (ISO 4217)\n */\nexport const DEFAULT_CURRENCY = 'BRL';\n\n/**\n * Default language code (ISO 639-1)\n */\nexport const DEFAULT_LANGUAGE = 'en';\n\n/**\n * Type for supported locales\n */\nexport type SupportedLocale = (typeof SUPPORTED_LOCALES)[number];\n","import { DEFAULT_LOCALE, SUPPORTED_LOCALES } from './locales';\n\n/**\n * Landing page application configuration\n */\nexport const LANDING_PAGE_APP = {\n /**\n * Application name\n */\n NAME: 'Plyaz',\n\n /**\n * Application version\n */\n VERSION: '1.0.0',\n\n /**\n * Default locale for the application\n */\n DEFAULT_LOCALE,\n\n /**\n * List of supported locales\n */\n SUPPORTED_LOCALES,\n} as const;\n\n/**\n * Web application configuration\n */\nexport const WEB_APP = {\n /**\n * Application name\n */\n NAME: 'Plyaz The App',\n\n /**\n * Application version\n */\n VERSION: '1.0.0',\n\n /**\n * Default locale for the application\n */\n DEFAULT_LOCALE,\n\n /**\n * List of supported locales\n */\n SUPPORTED_LOCALES,\n} as const;\n","/**\n * Security and compliance configuration\n */\nexport const SECURITY = {\n /**\n * ISO country codes for blocked regions (sanctions/compliance)\n * KP: North Korea, SY: Syria, IR: Iran, CU: Cuba, SD: Sudan, SO: Somalia\n * UA-CR: Ukraine-Crimea, UA-DP: Ukraine-Donetsk, UA-LU: Ukraine-Luhansk\n */\n BLOCKED_REGIONS: ['KP', 'SY', 'IR', 'CU', 'SD', 'SO', 'UA-CR', 'UA-DP', 'UA-LU'],\n} as const;\n","/**\n * String Manipulation Constants\n *\n * Constants used for string generation, manipulation,\n * and UUID-related operations.\n *\n * @module utils/string/constants\n */\n\n/**\n * String generation and manipulation constants\n */\nexport const STRING_CONSTANTS = {\n /**\n * Starting position for random string extraction\n */\n RANDOM_STRING_START: 2,\n\n /**\n * Length of random string segment\n */\n RANDOM_STRING_LENGTH: 9,\n\n /**\n * Multiplier for UUID random value generation\n */\n UUID_RANDOM_MULTIPLIER: 16,\n\n /**\n * Hexadecimal mask for UUID generation\n */\n UUID_HEX_MASK: 0x3,\n\n /**\n * OR value for UUID hexadecimal operations\n */\n UUID_HEX_OR_VALUE: 0x8,\n} as const;\n\n/**\n * Formatting and serialization constants\n */\nexport const FORMAT_CONSTANTS = {\n /**\n * Default indentation for JSON stringification (spaces)\n */\n JSON_INDENT_SPACES: 2,\n\n /**\n * Default indentation for code formatting (spaces)\n */\n CODE_INDENT_SPACES: 2,\n\n /**\n * Tab size in spaces\n */\n TAB_SIZE: 4,\n\n /**\n * Maximum line length for code formatting\n */\n MAX_LINE_LENGTH: 80,\n\n /**\n * Maximum line length for prettier\n */\n PRETTIER_LINE_WIDTH: 100,\n\n /**\n * Default encoding for text files\n */\n DEFAULT_ENCODING: 'utf-8',\n\n /**\n * Line endings\n */\n LINE_ENDING_LF: '\\n',\n LINE_ENDING_CRLF: '\\r\\n',\n\n /**\n * Common file extensions\n */\n EXTENSION_JSON: '.json',\n EXTENSION_JS: '.js',\n EXTENSION_TS: '.ts',\n EXTENSION_TSX: '.tsx',\n EXTENSION_JSX: '.jsx',\n EXTENSION_CSS: '.css',\n EXTENSION_SCSS: '.scss',\n EXTENSION_MD: '.md',\n EXTENSION_YML: '.yml',\n EXTENSION_YAML: '.yaml',\n\n /**\n * Quote styles\n */\n SINGLE_QUOTE: \"'\",\n DOUBLE_QUOTE: '\"',\n BACKTICK: '`',\n\n /**\n * Common separators\n */\n COMMA: ',',\n SEMICOLON: ';',\n COLON: ':',\n DOT: '.',\n SLASH: '/',\n BACKSLASH: '\\\\',\n UNDERSCORE: '_',\n HYPHEN: '-',\n PIPE: '|',\n SPACE: ' ',\n EMPTY_STRING: '',\n\n /**\n * Whitespace characters\n */\n TAB: '\\t',\n NEWLINE: '\\n',\n CARRIAGE_RETURN: '\\r',\n FORM_FEED: '\\f',\n VERTICAL_TAB: '\\v',\n\n /**\n * Common brackets\n */\n OPEN_PAREN: '(',\n CLOSE_PAREN: ')',\n OPEN_BRACKET: '[',\n CLOSE_BRACKET: ']',\n OPEN_BRACE: '{',\n CLOSE_BRACE: '}',\n OPEN_ANGLE: '<',\n CLOSE_ANGLE: '>',\n} as const;\n\n/**\n * Type for string constant values\n */\nexport type StringConstant = (typeof STRING_CONSTANTS)[keyof typeof STRING_CONSTANTS];\n\n/**\n * Type for format constant values\n */\nexport type FormatConstant = (typeof FORMAT_CONSTANTS)[keyof typeof FORMAT_CONSTANTS];\n","/**\n * Collection and Array Constants\n *\n * Constants for array operations, pagination,\n * and collection manipulation.\n *\n * @module utils/collection/constants\n */\n\n/**\n * Array and collection operation constants\n */\nexport const COLLECTION_CONSTANTS = {\n /**\n * Center point for array splitting (50%)\n */\n ARRAY_SPLIT_CENTER: 0.5,\n\n /**\n * Default page size for pagination\n */\n DEFAULT_PAGE_SIZE: 10,\n\n /**\n * Default maximum number of retries for operations\n */\n DEFAULT_MAX_RETRIES: 3,\n\n /**\n * Constant for three items (used in various contexts)\n */\n THREE_ITEMS: 3,\n} as const;\n\n/**\n * Type for collection constant values\n */\nexport type CollectionConstant = (typeof COLLECTION_CONSTANTS)[keyof typeof COLLECTION_CONSTANTS];\n","/**\n * Hash Algorithm Constants\n *\n * Constants used for various hash algorithms including FNV-1a,\n * SHA, and other cryptographic operations.\n *\n * @module utils/hash/constants\n */\n\n/**\n * FNV (Fowler-Noll-Vo) Hash Algorithm Constants\n *\n * FNV-1a is a non-cryptographic hash function created by Glenn Fowler,\n * Landon Curt Noll, and Kiem-Phong Vo. It's designed to be fast while\n * maintaining a low collision rate.\n */\nexport const FNV_CONSTANTS = {\n /**\n * FNV-1a 32-bit prime number\n * Used as the multiplication factor in the hash algorithm\n * Decimal: 16777619\n */\n FNV_32_PRIME: 0x01000193,\n\n /**\n * FNV-1a 32-bit offset basis\n * Initial hash value for FNV-1a 32-bit\n * Decimal: 2166136261\n */\n FNV_32_OFFSET: 0x811c9dc5,\n\n /**\n * FNV-1a 64-bit prime number (as BigInt)\n * Used for 64-bit hash calculations\n * Decimal: 1099511628211\n */\n FNV_64_PRIME: BigInt('0x100000001b3'),\n\n /**\n * FNV-1a 64-bit offset basis (as BigInt)\n * Initial hash value for FNV-1a 64-bit\n * Decimal: 14695981039346656037\n */\n FNV_64_OFFSET: BigInt('0xcbf29ce484222325'),\n\n /**\n * Mask for 32-bit operations\n */\n MASK_32: 0xffffffff,\n\n /**\n * Number of bits for 32-bit hash\n */\n BITS_32: 32,\n\n /**\n * Number of bits for 64-bit hash\n */\n BITS_64: 64,\n} as const;\n\n/**\n * Hash Seed Constants\n *\n * Constants for deterministic random seed generation\n */\nexport const HASH_SEED_CONSTANTS = {\n /**\n * Maximum safe seed value for 31-bit positive integer\n * Used for compatibility with libraries expecting positive signed 32-bit integers\n * Value: 2^31 - 1 = 2147483647\n */\n MAX_SAFE_SEED: 0x7fffffff,\n\n /**\n * Maximum 32-bit unsigned integer\n * Value: 2^32 - 1 = 4294967295\n */\n MAX_UINT32: 0xffffffff,\n} as const;\n\n/**\n * Hash Distribution Constants\n *\n * Constants for hash distribution and bucketing\n */\nexport const HASH_DISTRIBUTION_CONSTANTS = {\n /**\n * Default number of buckets for hash distribution\n */\n DEFAULT_BUCKET_COUNT: 10,\n\n /**\n * Default total buckets for percentage-based distribution\n * Same as MATH_CONSTANTS.PERCENTAGE_MAX for consistency\n */\n DEFAULT_PERCENTAGE_BUCKETS: 100,\n\n /**\n * Bit shift amount for simple hash algorithms\n * Used in polynomial rolling hash\n */\n HASH_SHIFT: 5,\n} as const;\n\n/**\n * SHA (Secure Hash Algorithm) constants\n */\nexport const SHA_CONSTANTS = {\n /**\n * SHA-1 output length in bytes\n */\n SHA1_LENGTH: 20,\n\n /**\n * SHA-256 output length in bytes\n */\n SHA256_LENGTH: 32,\n\n /**\n * SHA-384 output length in bytes\n */\n SHA384_LENGTH: 48,\n\n /**\n * SHA-512 output length in bytes\n */\n SHA512_LENGTH: 64,\n\n /**\n * SHA block size in bytes\n */\n SHA_BLOCK_SIZE: 64,\n\n /**\n * SHA-512 block size in bytes\n */\n SHA512_BLOCK_SIZE: 128,\n} as const;\n\n/**\n * MD5 hash algorithm constants\n */\nexport const MD5_CONSTANTS = {\n /**\n * MD5 output length in bytes\n */\n MD5_LENGTH: 16,\n\n /**\n * MD5 block size in bytes\n */\n MD5_BLOCK_SIZE: 64,\n} as const;\n\n/**\n * Hash encoding formats\n */\nexport const HASH_ENCODING = {\n /**\n * Hexadecimal encoding\n */\n HEX: 'hex',\n\n /**\n * Base64 encoding\n */\n BASE64: 'base64',\n\n /**\n * Base64 URL-safe encoding\n */\n BASE64URL: 'base64url',\n\n /**\n * Binary encoding\n */\n BINARY: 'binary',\n\n /**\n * UTF-8 encoding\n */\n UTF8: 'utf8',\n} as const;\n\n/**\n * Hash algorithm names\n */\nexport const HASH_ALGORITHMS = {\n /**\n * MD5 algorithm (deprecated for security, use only for checksums)\n */\n MD5: 'md5',\n\n /**\n * SHA-1 algorithm (deprecated for security)\n */\n SHA1: 'sha1',\n\n /**\n * SHA-256 algorithm\n */\n SHA256: 'sha256',\n\n /**\n * SHA-384 algorithm\n */\n SHA384: 'sha384',\n\n /**\n * SHA-512 algorithm\n */\n SHA512: 'sha512',\n\n /**\n * SHA3-256 algorithm\n */\n SHA3_256: 'sha3-256',\n\n /**\n * SHA3-384 algorithm\n */\n SHA3_384: 'sha3-384',\n\n /**\n * SHA3-512 algorithm\n */\n SHA3_512: 'sha3-512',\n\n /**\n * BLAKE2b algorithm\n */\n BLAKE2B: 'blake2b',\n\n /**\n * BLAKE2s algorithm\n */\n BLAKE2S: 'blake2s',\n\n /**\n * FNV-1a 32-bit algorithm\n */\n FNV1A_32: 'fnv1a-32',\n\n /**\n * FNV-1a 64-bit algorithm\n */\n FNV1A_64: 'fnv1a-64',\n} as const;\n\n/**\n * Murmur hash constants\n */\nexport const MURMUR_CONSTANTS = {\n /**\n * MurmurHash3 32-bit seed\n */\n MURMUR3_32_SEED: 0,\n\n /**\n * MurmurHash3 32-bit c1 constant\n */\n MURMUR3_32_C1: 0xcc9e2d51,\n\n /**\n * MurmurHash3 32-bit c2 constant\n */\n MURMUR3_32_C2: 0x1b873593,\n\n /**\n * MurmurHash3 32-bit r1 rotation\n */\n MURMUR3_32_R1: 15,\n\n /**\n * MurmurHash3 32-bit r2 rotation\n */\n MURMUR3_32_R2: 13,\n\n /**\n * MurmurHash3 32-bit m constant\n */\n MURMUR3_32_M: 5,\n\n /**\n * MurmurHash3 32-bit n constant\n */\n MURMUR3_32_N: 0xe6546b64,\n} as const;\n\n/**\n * CRC (Cyclic Redundancy Check) constants\n */\nexport const CRC_CONSTANTS = {\n /**\n * CRC-32 polynomial\n */\n CRC32_POLYNOMIAL: 0xedb88320,\n\n /**\n * CRC-32 initial value\n */\n CRC32_INITIAL: 0xffffffff,\n\n /**\n * CRC-32 XOR output\n */\n CRC32_XOR_OUTPUT: 0xffffffff,\n\n /**\n * CRC-16 polynomial\n */\n CRC16_POLYNOMIAL: 0xa001,\n\n /**\n * CRC-16 initial value\n */\n CRC16_INITIAL: 0x0000,\n} as const;\n\n/**\n * Type exports\n */\nexport type FnvConstant = (typeof FNV_CONSTANTS)[keyof typeof FNV_CONSTANTS];\nexport type HashSeedConstant = (typeof HASH_SEED_CONSTANTS)[keyof typeof HASH_SEED_CONSTANTS];\nexport type HashDistributionConstant =\n (typeof HASH_DISTRIBUTION_CONSTANTS)[keyof typeof HASH_DISTRIBUTION_CONSTANTS];\nexport type SHAConstant = (typeof SHA_CONSTANTS)[keyof typeof SHA_CONSTANTS];\nexport type MD5Constant = (typeof MD5_CONSTANTS)[keyof typeof MD5_CONSTANTS];\nexport type HashEncoding = (typeof HASH_ENCODING)[keyof typeof HASH_ENCODING];\nexport type HashAlgorithm = (typeof HASH_ALGORITHMS)[keyof typeof HASH_ALGORITHMS];\nexport type MurmurConstant = (typeof MURMUR_CONSTANTS)[keyof typeof MURMUR_CONSTANTS];\nexport type CRCConstant = (typeof CRC_CONSTANTS)[keyof typeof CRC_CONSTANTS];\n","/**\n * ISO Standards Constants\n *\n * International Organization for Standardization (ISO) code lengths\n * and standards used for country codes, language codes, currencies, etc.\n *\n * @module locale/iso\n */\n\n/**\n * ISO code length standards\n */\nexport const ISO_STANDARDS = {\n /**\n * ISO 3166-1 alpha-2 country code length (e.g., \"US\", \"GB\", \"FR\")\n */\n ISO_COUNTRY_CODE_LENGTH: 2,\n\n /**\n * ISO 3166-1 alpha-3 country code length (e.g., \"USA\", \"GBR\", \"FRA\")\n */\n ISO_COUNTRY_CODE_ALPHA3_LENGTH: 3,\n\n /**\n * ISO 639-1 language code length (e.g., \"en\", \"fr\", \"es\")\n */\n ISO_LANGUAGE_CODE_LENGTH: 2,\n\n /**\n * ISO 639-2 language code length (e.g., \"eng\", \"fra\", \"spa\")\n */\n ISO_LANGUAGE_CODE_ALPHA3_LENGTH: 3,\n\n /**\n * ISO 4217 currency code length (e.g., \"USD\", \"EUR\", \"GBP\")\n */\n ISO_CURRENCY_CODE_LENGTH: 3,\n\n /**\n * ISO 8601 date format length (YYYY-MM-DD)\n */\n ISO_DATE_LENGTH: 10,\n\n /**\n * ISO 8601 datetime format length (YYYY-MM-DDTHH:mm:ss.sssZ)\n */\n ISO_DATETIME_LENGTH: 24,\n\n /**\n * ISO 8601 time format length (HH:mm:ss)\n */\n ISO_TIME_LENGTH: 8,\n\n /**\n * ISO week date format length (YYYY-Www)\n */\n ISO_WEEK_DATE_LENGTH: 8,\n\n /**\n * BCP 47 language tag minimum length (e.g., \"en\")\n */\n BCP47_MIN_LENGTH: 2,\n\n /**\n * BCP 47 language tag with region (e.g., \"en-US\")\n */\n BCP47_WITH_REGION_LENGTH: 5,\n\n /**\n * RFC 5646 maximum language tag length\n */\n RFC5646_MAX_LENGTH: 35,\n\n /**\n * ISO 3166-1 numeric country code length\n */\n ISO_NUMERIC_COUNTRY_CODE_LENGTH: 3,\n\n /**\n * ISO 639-3 language code length\n */\n ISO_639_3_LENGTH: 3,\n} as const;\n\n/**\n * Type for ISO standard values\n */\nexport type IsoStandard = (typeof ISO_STANDARDS)[keyof typeof ISO_STANDARDS];\n","/**\n * Locale and Date Formatting Constants\n *\n * Constants for formatting dates, numbers, and locale-specific values.\n *\n * @module locale/formats\n */\n\n/**\n * Number and currency formatting constants\n */\nexport const LOCALE_FORMATS = {\n /**\n * Locale separator character\n */\n LOCALE_SEPARATOR: '-',\n\n /**\n * BCP 47 separator character\n */\n BCP47_SEPARATOR: '-',\n\n /**\n * Currency decimal places\n */\n CURRENCY_DECIMALS: 2,\n\n /**\n * Currency symbol placement (before/after)\n */\n CURRENCY_SYMBOL_BEFORE: true,\n\n /**\n * Thousands separator\n */\n THOUSANDS_SEPARATOR: ',',\n\n /**\n * Decimal separator\n */\n DECIMAL_SEPARATOR: '.',\n\n /**\n * Maximum locale string length\n */\n MAX_LOCALE_LENGTH: 35,\n\n /**\n * Minimum locale string length\n */\n MIN_LOCALE_LENGTH: 2,\n\n /**\n * Percentage decimal places\n */\n PERCENTAGE_DECIMALS: 2,\n\n /**\n * Default number of fraction digits\n */\n DEFAULT_FRACTION_DIGITS: 2,\n\n /**\n * Maximum fraction digits\n */\n MAX_FRACTION_DIGITS: 20,\n} as const;\n\n/**\n * Date and time formatting patterns\n */\nexport const DATE_FORMATS = {\n /**\n * ISO 8601 date format\n */\n ISO_DATE: 'YYYY-MM-DD',\n\n /**\n * ISO 8601 datetime format\n */\n ISO_DATETIME: 'YYYY-MM-DDTHH:mm:ss.sssZ',\n\n /**\n * ISO 8601 time format\n */\n ISO_TIME: 'HH:mm:ss',\n\n /**\n * US date format\n */\n US_DATE: 'MM/DD/YYYY',\n\n /**\n * European date format\n */\n EU_DATE: 'DD/MM/YYYY',\n\n /**\n * UK date format\n */\n UK_DATE: 'DD/MM/YYYY',\n\n /**\n * Japanese date format\n */\n JP_DATE: 'YYYY/MM/DD',\n\n /**\n * Short date format\n */\n SHORT_DATE: 'MMM DD',\n\n /**\n * Long date format\n */\n LONG_DATE: 'MMMM DD, YYYY',\n\n /**\n * Full date format\n */\n FULL_DATE: 'dddd, MMMM DD, YYYY',\n\n /**\n * Time format 12-hour\n */\n TIME_12H: 'hh:mm A',\n\n /**\n * Time format 24-hour\n */\n TIME_24H: 'HH:mm',\n\n /**\n * Time with seconds 12-hour\n */\n TIME_12H_SECONDS: 'hh:mm:ss A',\n\n /**\n * Time with seconds 24-hour\n */\n TIME_24H_SECONDS: 'HH:mm:ss',\n\n /**\n * Relative time threshold in seconds\n */\n RELATIVE_TIME_THRESHOLD: 86400,\n\n /**\n * Month/Year format\n */\n MONTH_YEAR: 'MMMM YYYY',\n\n /**\n * Short month/Year format\n */\n SHORT_MONTH_YEAR: 'MMM YYYY',\n\n /**\n * Year only format\n */\n YEAR_ONLY: 'YYYY',\n} as const;\n\n/**\n * Text direction constants\n */\nexport const TEXT_DIRECTION = {\n /**\n * Left-to-right\n */\n LTR: 'ltr',\n\n /**\n * Right-to-left\n */\n RTL: 'rtl',\n\n /**\n * Auto-detect\n */\n AUTO: 'auto',\n} as const;\n\n/**\n * Type exports\n */\nexport type LocaleFormat = (typeof LOCALE_FORMATS)[keyof typeof LOCALE_FORMATS];\nexport type DateFormat = (typeof DATE_FORMATS)[keyof typeof DATE_FORMATS];\nexport type TextDirectionValue = (typeof TEXT_DIRECTION)[keyof typeof TEXT_DIRECTION];\n","/**\n * Phone Number Formatting Constants\n *\n * Constants for phone number validation and formatting across different countries.\n *\n * @module locale/phone\n */\n\n/**\n * Phone number formats and validation\n */\nexport const PHONE_FORMATS = {\n /**\n * International prefix\n */\n INTERNATIONAL_PREFIX: '+',\n\n /**\n * International direct dialing prefix\n */\n IDD_PREFIX: '00',\n\n /**\n * US country code\n */\n US_COUNTRY_CODE: '1',\n\n /**\n * UK country code\n */\n UK_COUNTRY_CODE: '44',\n\n /**\n * Germany country code\n */\n DE_COUNTRY_CODE: '49',\n\n /**\n * France country code\n */\n FR_COUNTRY_CODE: '33',\n\n /**\n * Japan country code\n */\n JP_COUNTRY_CODE: '81',\n\n /**\n * China country code\n */\n CN_COUNTRY_CODE: '86',\n\n /**\n * India country code\n */\n IN_COUNTRY_CODE: '91',\n\n /**\n * Brazil country code\n */\n BR_COUNTRY_CODE: '55',\n\n /**\n * US phone number length (without country code)\n */\n US_PHONE_LENGTH: 10,\n\n /**\n * UK phone number length (without country code)\n */\n UK_PHONE_LENGTH: 10,\n\n /**\n * International phone minimum length\n */\n MIN_PHONE_LENGTH: 7,\n\n /**\n * International phone maximum length\n */\n MAX_PHONE_LENGTH: 15,\n\n /**\n * E.164 format maximum length (with +)\n */\n E164_MAX_LENGTH: 16,\n\n /**\n * E.164 format minimum length (with +)\n */\n E164_MIN_LENGTH: 8,\n\n /**\n * Area code length (US)\n */\n US_AREA_CODE_LENGTH: 3,\n\n /**\n * Exchange code length (US)\n */\n US_EXCHANGE_CODE_LENGTH: 3,\n\n /**\n * Line number length (US)\n */\n US_LINE_NUMBER_LENGTH: 4,\n\n /**\n * Extension maximum length\n */\n MAX_EXTENSION_LENGTH: 6,\n\n /**\n * Country code maximum length\n */\n MAX_COUNTRY_CODE_LENGTH: 3,\n\n /**\n * National number maximum length\n */\n MAX_NATIONAL_NUMBER_LENGTH: 15,\n} as const;\n\n/**\n * Phone number format patterns\n */\nexport const PHONE_PATTERNS = {\n /**\n * US phone format pattern\n */\n US_FORMAT: '(XXX) XXX-XXXX',\n\n /**\n * UK phone format pattern\n */\n UK_FORMAT: 'XXXX XXX XXXX',\n\n /**\n * International format pattern\n */\n INTERNATIONAL_FORMAT: '+X XXX XXX XXXX',\n\n /**\n * E.164 format pattern\n */\n E164_FORMAT: '+XXXXXXXXXXXX',\n\n /**\n * Extension format\n */\n EXTENSION_FORMAT: 'ext. XXXX',\n} as const;\n\n/**\n * Type exports\n */\nexport type PhoneFormat = (typeof PHONE_FORMATS)[keyof typeof PHONE_FORMATS];\nexport type PhonePattern = (typeof PHONE_PATTERNS)[keyof typeof PHONE_PATTERNS];\n","/**\n * Address Formatting Constants\n *\n * Constants for address validation and formatting across different countries.\n *\n * @module locale/address\n */\n\n/**\n * Address formatting and validation constants\n */\nexport const ADDRESS_FORMATS = {\n /**\n * US ZIP code length\n */\n US_ZIP_LENGTH: 5,\n\n /**\n * US ZIP+4 code length\n */\n US_ZIP_PLUS4_LENGTH: 9,\n\n /**\n * US ZIP+4 separator\n */\n US_ZIP_SEPARATOR: '-',\n\n /**\n * Canadian postal code length\n */\n CA_POSTAL_CODE_LENGTH: 6,\n\n /**\n * UK postcode minimum length\n */\n UK_POSTCODE_MIN_LENGTH: 5,\n\n /**\n * UK postcode maximum length\n */\n UK_POSTCODE_MAX_LENGTH: 8,\n\n /**\n * German postal code length\n */\n DE_POSTAL_CODE_LENGTH: 5,\n\n /**\n * French postal code length\n */\n FR_POSTAL_CODE_LENGTH: 5,\n\n /**\n * Japanese postal code length\n */\n JP_POSTAL_CODE_LENGTH: 7,\n\n /**\n * Australian postal code length\n */\n AU_POSTAL_CODE_LENGTH: 4,\n\n /**\n * Brazilian CEP code length\n */\n BR_CEP_LENGTH: 8,\n\n /**\n * State/Province code length\n */\n STATE_CODE_LENGTH: 2,\n\n /**\n * State/Province full name maximum length\n */\n STATE_NAME_MAX_LENGTH: 50,\n\n /**\n * Maximum address line length\n */\n MAX_ADDRESS_LINE_LENGTH: 100,\n\n /**\n * Minimum address line length\n */\n MIN_ADDRESS_LINE_LENGTH: 3,\n\n /**\n * Maximum city name length\n */\n MAX_CITY_LENGTH: 50,\n\n /**\n * Minimum city name length\n */\n MIN_CITY_LENGTH: 2,\n\n /**\n * Maximum country name length\n */\n MAX_COUNTRY_LENGTH: 56,\n\n /**\n * Maximum building number length\n */\n MAX_BUILDING_NUMBER_LENGTH: 10,\n\n /**\n * Maximum apartment/suite number length\n */\n MAX_UNIT_NUMBER_LENGTH: 10,\n\n /**\n * PO Box number maximum length\n */\n MAX_PO_BOX_LENGTH: 10,\n\n /**\n * Maximum number of address lines\n */\n MAX_ADDRESS_LINES: 3,\n} as const;\n\n/**\n * Address field types\n */\nexport const ADDRESS_FIELDS = {\n /**\n * Street address line 1\n */\n ADDRESS_LINE_1: 'addressLine1',\n\n /**\n * Street address line 2\n */\n ADDRESS_LINE_2: 'addressLine2',\n\n /**\n * City or locality\n */\n CITY: 'city',\n\n /**\n * State or province\n */\n STATE: 'state',\n\n /**\n * Postal or ZIP code\n */\n POSTAL_CODE: 'postalCode',\n\n /**\n * Country\n */\n COUNTRY: 'country',\n\n /**\n * Building number\n */\n BUILDING_NUMBER: 'buildingNumber',\n\n /**\n * Unit/Apartment number\n */\n UNIT_NUMBER: 'unitNumber',\n\n /**\n * PO Box\n */\n PO_BOX: 'poBox',\n\n /**\n * District or neighborhood\n */\n DISTRICT: 'district',\n\n /**\n * County\n */\n COUNTY: 'county',\n} as const;\n\n/**\n * Type exports\n */\nexport type AddressFormat = (typeof ADDRESS_FORMATS)[keyof typeof ADDRESS_FORMATS];\nexport type AddressField = (typeof ADDRESS_FIELDS)[keyof typeof ADDRESS_FIELDS];\n","/**\n * Currency Code Constants\n *\n * ISO 4217 currency codes for international currencies.\n *\n * @module locale/currencies\n */\n\n/**\n * Common currency codes (ISO 4217)\n */\nexport const CURRENCY_CODES = {\n // Major currencies\n USD: 'USD', // US Dollar\n EUR: 'EUR', // Euro\n GBP: 'GBP', // British Pound Sterling\n JPY: 'JPY', // Japanese Yen\n CHF: 'CHF', // Swiss Franc\n CAD: 'CAD', // Canadian Dollar\n AUD: 'AUD', // Australian Dollar\n CNY: 'CNY', // Chinese Yuan Renminbi\n\n // Asian currencies\n INR: 'INR', // Indian Rupee\n KRW: 'KRW', // South Korean Won\n SGD: 'SGD', // Singapore Dollar\n HKD: 'HKD', // Hong Kong Dollar\n TWD: 'TWD', // Taiwan New Dollar\n THB: 'THB', // Thai Baht\n IDR: 'IDR', // Indonesian Rupiah\n MYR: 'MYR', // Malaysian Ringgit\n PHP: 'PHP', // Philippine Peso\n VND: 'VND', // Vietnamese Dong\n BDT: 'BDT', // Bangladeshi Taka\n PKR: 'PKR', // Pakistani Rupee\n LKR: 'LKR', // Sri Lankan Rupee\n\n // European currencies\n SEK: 'SEK', // Swedish Krona\n NOK: 'NOK', // Norwegian Krone\n DKK: 'DKK', // Danish Krone\n PLN: 'PLN', // Polish Zloty\n CZK: 'CZK', // Czech Koruna\n HUF: 'HUF', // Hungarian Forint\n RON: 'RON', // Romanian Leu\n BGN: 'BGN', // Bulgarian Lev\n HRK: 'HRK', // Croatian Kuna\n RSD: 'RSD', // Serbian Dinar\n ISK: 'ISK', // Icelandic Króna\n\n // Americas currencies\n BRL: 'BRL', // Brazilian Real\n MXN: 'MXN', // Mexican Peso\n ARS: 'ARS', // Argentine Peso\n CLP: 'CLP', // Chilean Peso\n COP: 'COP', // Colombian Peso\n PEN: 'PEN', // Peruvian Sol\n UYU: 'UYU', // Uruguayan Peso\n VES: 'VES', // Venezuelan Bolívar\n BOB: 'BOB', // Bolivian Boliviano\n PYG: 'PYG', // Paraguayan Guarani\n CRC: 'CRC', // Costa Rican Colón\n GTQ: 'GTQ', // Guatemalan Quetzal\n HNL: 'HNL', // Honduran Lempira\n NIO: 'NIO', // Nicaraguan Córdoba\n PAB: 'PAB', // Panamanian Balboa\n DOP: 'DOP', // Dominican Peso\n JMD: 'JMD', // Jamaican Dollar\n TTD: 'TTD', // Trinidad and Tobago Dollar\n BBD: 'BBD', // Barbadian Dollar\n\n // Middle Eastern currencies\n AED: 'AED', // UAE Dirham\n SAR: 'SAR', // Saudi Riyal\n QAR: 'QAR', // Qatari Riyal\n KWD: 'KWD', // Kuwaiti Dinar\n BHD: 'BHD', // Bahraini Dinar\n OMR: 'OMR', // Omani Rial\n JOD: 'JOD', // Jordanian Dinar\n ILS: 'ILS', // Israeli New Shekel\n TRY: 'TRY', // Turkish Lira\n IQD: 'IQD', // Iraqi Dinar\n IRR: 'IRR', // Iranian Rial\n LBP: 'LBP', // Lebanese Pound\n SYP: 'SYP', // Syrian Pound\n\n // African currencies\n ZAR: 'ZAR', // South African Rand\n NGN: 'NGN', // Nigerian Naira\n EGP: 'EGP', // Egyptian Pound\n KES: 'KES', // Kenyan Shilling\n GHS: 'GHS', // Ghanaian Cedi\n MAD: 'MAD', // Moroccan Dirham\n TND: 'TND', // Tunisian Dinar\n DZD: 'DZD', // Algerian Dinar\n ETB: 'ETB', // Ethiopian Birr\n TZS: 'TZS', // Tanzanian Shilling\n UGX: 'UGX', // Ugandan Shilling\n ZMW: 'ZMW', // Zambian Kwacha\n BWP: 'BWP', // Botswana Pula\n MUR: 'MUR', // Mauritian Rupee\n\n // Pacific currencies\n NZD: 'NZD', // New Zealand Dollar\n FJD: 'FJD', // Fijian Dollar\n PGK: 'PGK', // Papua New Guinean Kina\n\n // Former Soviet Union currencies\n RUB: 'RUB', // Russian Ruble\n UAH: 'UAH', // Ukrainian Hryvnia\n BYN: 'BYN', // Belarusian Ruble\n KZT: 'KZT', // Kazakhstani Tenge\n UZS: 'UZS', // Uzbekistani Som\n AZN: 'AZN', // Azerbaijani Manat\n GEL: 'GEL', // Georgian Lari\n AMD: 'AMD', // Armenian Dram\n\n // Cryptocurrency representations (unofficial)\n BTC: 'BTC', // Bitcoin\n ETH: 'ETH', // Ethereum\n USDT: 'USDT', // Tether\n USDC: 'USDC', // USD Coin\n} as const;\n\n/**\n * Currency metadata\n */\nexport const CURRENCY_INFO = {\n /**\n * Currencies with no decimal places\n */\n NO_DECIMAL_CURRENCIES: ['JPY', 'KRW', 'VND', 'IDR', 'CLP', 'ISK', 'TWD'],\n\n /**\n * Currencies with 3 decimal places\n */\n THREE_DECIMAL_CURRENCIES: ['BHD', 'IQD', 'JOD', 'KWD', 'OMR', 'TND'],\n\n /**\n * Major reserve currencies\n */\n RESERVE_CURRENCIES: ['USD', 'EUR', 'GBP', 'JPY', 'CNY'],\n\n /**\n * G7 currencies\n */\n G7_CURRENCIES: ['USD', 'EUR', 'GBP', 'JPY', 'CAD'],\n\n /**\n * Default decimal places for most currencies\n */\n DEFAULT_DECIMAL_PLACES: 2,\n} as const;\n\n/**\n * Type exports\n */\nexport type CurrencyCode = (typeof CURRENCY_CODES)[keyof typeof CURRENCY_CODES];\nexport type CurrencyInfo = (typeof CURRENCY_INFO)[keyof typeof CURRENCY_INFO];\n","/**\n * Country Constants\n *\n * ISO 3166-1 country codes and related data.\n *\n * @module locale/countries\n */\n\n/**\n * Common country codes (ISO 3166-1 alpha-2)\n */\nexport const COUNTRY_CODES = {\n // Americas\n US: 'US', // United States\n CA: 'CA', // Canada\n MX: 'MX', // Mexico\n BR: 'BR', // Brazil\n AR: 'AR', // Argentina\n CL: 'CL', // Chile\n CO: 'CO', // Colombia\n PE: 'PE', // Peru\n VE: 'VE', // Venezuela\n EC: 'EC', // Ecuador\n BO: 'BO', // Bolivia\n PY: 'PY', // Paraguay\n UY: 'UY', // Uruguay\n GY: 'GY', // Guyana\n SR: 'SR', // Suriname\n GF: 'GF', // French Guiana\n FK: 'FK', // Falkland Islands\n\n // Caribbean\n CU: 'CU', // Cuba\n DO: 'DO', // Dominican Republic\n HT: 'HT', // Haiti\n JM: 'JM', // Jamaica\n TT: 'TT', // Trinidad and Tobago\n BB: 'BB', // Barbados\n BS: 'BS', // Bahamas\n PR: 'PR', // Puerto Rico\n\n // Central America\n GT: 'GT', // Guatemala\n HN: 'HN', // Honduras\n SV: 'SV', // El Salvador\n NI: 'NI', // Nicaragua\n CR: 'CR', // Costa Rica\n PA: 'PA', // Panama\n BZ: 'BZ', // Belize\n\n // Europe\n GB: 'GB', // United Kingdom\n FR: 'FR', // France\n DE: 'DE', // Germany\n IT: 'IT', // Italy\n ES: 'ES', // Spain\n PT: 'PT', // Portugal\n NL: 'NL', // Netherlands\n BE: 'BE', // Belgium\n LU: 'LU', // Luxembourg\n CH: 'CH', // Switzerland\n AT: 'AT', // Austria\n IE: 'IE', // Ireland\n DK: 'DK', // Denmark\n SE: 'SE', // Sweden\n NO: 'NO', // Norway\n FI: 'FI', // Finland\n IS: 'IS', // Iceland\n PL: 'PL', // Poland\n CZ: 'CZ', // Czech Republic\n SK: 'SK', // Slovakia\n HU: 'HU', // Hungary\n RO: 'RO', // Romania\n BG: 'BG', // Bulgaria\n GR: 'GR', // Greece\n HR: 'HR', // Croatia\n SI: 'SI', // Slovenia\n RS: 'RS', // Serbia\n BA: 'BA', // Bosnia and Herzegovina\n ME: 'ME', // Montenegro\n MK: 'MK', // North Macedonia\n AL: 'AL', // Albania\n XK: 'XK', // Kosovo\n EE: 'EE', // Estonia\n LV: 'LV', // Latvia\n LT: 'LT', // Lithuania\n BY: 'BY', // Belarus\n UA: 'UA', // Ukraine\n MD: 'MD', // Moldova\n RU: 'RU', // Russia\n CY: 'CY', // Cyprus\n MT: 'MT', // Malta\n AD: 'AD', // Andorra\n MC: 'MC', // Monaco\n SM: 'SM', // San Marino\n VA: 'VA', // Vatican City\n LI: 'LI', // Liechtenstein\n\n // Asia\n CN: 'CN', // China\n JP: 'JP', // Japan\n KR: 'KR', // South Korea\n KP: 'KP', // North Korea\n TW: 'TW', // Taiwan\n HK: 'HK', // Hong Kong\n MO: 'MO', // Macao\n IN: 'IN', // India\n PK: 'PK', // Pakistan\n BD: 'BD', // Bangladesh\n LK: 'LK', // Sri Lanka\n NP: 'NP', // Nepal\n BT: 'BT', // Bhutan\n MV: 'MV', // Maldives\n AF: 'AF', // Afghanistan\n TH: 'TH', // Thailand\n VN: 'VN', // Vietnam\n MY: 'MY', // Malaysia\n SG: 'SG', // Singapore\n ID: 'ID', // Indonesia\n PH: 'PH', // Philippines\n BN: 'BN', // Brunei\n KH: 'KH', // Cambodia\n LA: 'LA', // Laos\n MM: 'MM', // Myanmar\n TL: 'TL', // Timor-Leste\n MN: 'MN', // Mongolia\n KZ: 'KZ', // Kazakhstan\n UZ: 'UZ', // Uzbekistan\n TJ: 'TJ', // Tajikistan\n KG: 'KG', // Kyrgyzstan\n TM: 'TM', // Turkmenistan\n AZ: 'AZ', // Azerbaijan\n GE: 'GE', // Georgia\n AM: 'AM', // Armenia\n\n // Middle East\n SA: 'SA', // Saudi Arabia\n AE: 'AE', // United Arab Emirates\n QA: 'QA', // Qatar\n KW: 'KW', // Kuwait\n BH: 'BH', // Bahrain\n OM: 'OM', // Oman\n YE: 'YE', // Yemen\n JO: 'JO', // Jordan\n LB: 'LB', // Lebanon\n SY: 'SY', // Syria\n IQ: 'IQ', // Iraq\n IR: 'IR', // Iran\n IL: 'IL', // Israel\n PS: 'PS', // Palestine\n TR: 'TR', // Turkey\n\n // Africa\n EG: 'EG', // Egypt\n LY: 'LY', // Libya\n TN: 'TN', // Tunisia\n DZ: 'DZ', // Algeria\n MA: 'MA', // Morocco\n EH: 'EH', // Western Sahara\n MR: 'MR', // Mauritania\n ML: 'ML', // Mali\n NE: 'NE', // Niger\n TD: 'TD', // Chad\n SD: 'SD', // Sudan\n SS: 'SS', // South Sudan\n ER: 'ER', // Eritrea\n DJ: 'DJ', // Djibouti\n SO: 'SO', // Somalia\n ET: 'ET', // Ethiopia\n KE: 'KE', // Kenya\n UG: 'UG', // Uganda\n RW: 'RW', // Rwanda\n BI: 'BI', // Burundi\n TZ: 'TZ', // Tanzania\n MZ: 'MZ', // Mozambique\n MW: 'MW', // Malawi\n ZM: 'ZM', // Zambia\n ZW: 'ZW', // Zimbabwe\n BW: 'BW', // Botswana\n NA: 'NA', // Namibia\n ZA: 'ZA', // South Africa\n LS: 'LS', // Lesotho\n SZ: 'SZ', // Eswatini\n AO: 'AO', // Angola\n CD: 'CD', // Democratic Republic of the Congo\n CG: 'CG', // Republic of the Congo\n GA: 'GA', // Gabon\n GQ: 'GQ', // Equatorial Guinea\n CM: 'CM', // Cameroon\n CF: 'CF', // Central African Republic\n NG: 'NG', // Nigeria\n BJ: 'BJ', // Benin\n TG: 'TG', // Togo\n GH: 'GH', // Ghana\n BF: 'BF', // Burkina Faso\n CI: 'CI', // Côte d'Ivoire\n LR: 'LR', // Liberia\n SL: 'SL', // Sierra Leone\n GN: 'GN', // Guinea\n GW: 'GW', // Guinea-Bissau\n SN: 'SN', // Senegal\n GM: 'GM', // Gambia\n CV: 'CV', // Cape Verde\n ST: 'ST', // São Tomé and Príncipe\n MG: 'MG', // Madagascar\n MU: 'MU', // Mauritius\n SC: 'SC', // Seychelles\n KM: 'KM', // Comoros\n RE: 'RE', // Réunion\n\n // Oceania\n AU: 'AU', // Australia\n NZ: 'NZ', // New Zealand\n PG: 'PG', // Papua New Guinea\n FJ: 'FJ', // Fiji\n SB: 'SB', // Solomon Islands\n VU: 'VU', // Vanuatu\n NC: 'NC', // New Caledonia\n PF: 'PF', // French Polynesia\n WS: 'WS', // Samoa\n TO: 'TO', // Tonga\n TV: 'TV', // Tuvalu\n NR: 'NR', // Nauru\n KI: 'KI', // Kiribati\n PW: 'PW', // Palau\n MH: 'MH', // Marshall Islands\n FM: 'FM', // Micronesia\n GU: 'GU', // Guam\n MP: 'MP', // Northern Mariana Islands\n AS: 'AS', // American Samoa\n CK: 'CK', // Cook Islands\n NU: 'NU', // Niue\n TK: 'TK', // Tokelau\n WF: 'WF', // Wallis and Futuna\n PN: 'PN', // Pitcairn Islands\n\n // Antarctica\n AQ: 'AQ', // Antarctica\n} as const;\n\n/**\n * MVP DEFINED SCOPE: Only include Europe (EU) and Brazil (BR).\n */\nexport const COUNTRY_CODES_SCOPED = {\n // Brazil\n BR: 'BR',\n // Europe\n GB: 'GB',\n FR: 'FR',\n DE: 'DE',\n IT: 'IT',\n ES: 'ES',\n PT: 'PT',\n NL: 'NL',\n BE: 'BE',\n LU: 'LU',\n CH: 'CH',\n AT: 'AT',\n IE: 'IE',\n DK: 'DK',\n SE: 'SE',\n NO: 'NO',\n FI: 'FI',\n IS: 'IS',\n PL: 'PL',\n CZ: 'CZ',\n SK: 'SK',\n HU: 'HU',\n RO: 'RO',\n BG: 'BG',\n GR: 'GR',\n HR: 'HR',\n SI: 'SI',\n RS: 'RS',\n BA: 'BA',\n ME: 'ME',\n MK: 'MK',\n AL: 'AL',\n XK: 'XK',\n EE: 'EE',\n LV: 'LV',\n LT: 'LT',\n BY: 'BY',\n UA: 'UA',\n MD: 'MD',\n RU: 'RU',\n CY: 'CY',\n MT: 'MT',\n AD: 'AD',\n MC: 'MC',\n SM: 'SM',\n VA: 'VA',\n LI: 'LI',\n} as const;\n\n/**\n * MVP scoped country names\n */\nexport const COUNTRY_NAMES: { [key: string]: string } = {\n // Brazil (BR)\n BR: 'Brazil',\n\n // European Union (EU) Member States\n AT: 'Austria',\n BE: 'Belgium',\n BG: 'Bulgaria',\n HR: 'Croatia',\n CY: 'Cyprus',\n CZ: 'Czechia', // Using the modern short name\n DK: 'Denmark',\n EE: 'Estonia',\n FI: 'Finland',\n FR: 'France',\n DE: 'Germany',\n GR: 'Greece',\n HU: 'Hungary',\n IE: 'Ireland',\n IT: 'Italy',\n LV: 'Latvia',\n LT: 'Lithuania',\n LU: 'Luxembourg',\n MT: 'Malta',\n NL: 'Netherlands',\n PL: 'Poland',\n PT: 'Portugal',\n RO: 'Romania',\n SK: 'Slovakia',\n SI: 'Slovenia',\n ES: 'Spain',\n SE: 'Sweden',\n};\n\n/**\n * Country calling codes\n */\nexport const COUNTRY_CALLING_CODES = {\n /**\n * United States and Canada\n */\n '+1': ['US', 'CA'],\n /**\n * Egypt\n */\n '+20': ['EG'],\n /**\n * South Africa\n */\n '+27': ['ZA'],\n /**\n * Greece\n */\n '+30': ['GR'],\n /**\n * Netherlands\n */\n '+31': ['NL'],\n /**\n * Belgium\n */\n '+32': ['BE'],\n /**\n * France\n */\n '+33': ['FR'],\n /**\n * Spain\n */\n '+34': ['ES'],\n /**\n * Hungary\n */\n '+36': ['HU'],\n /**\n * Italy\n */\n '+39': ['IT'],\n /**\n * Romania\n */\n '+40': ['RO'],\n /**\n * Switzerland\n */\n '+41': ['CH'],\n /**\n * Austria\n */\n '+43': ['AT'],\n /**\n * United Kingdom\n */\n '+44': ['GB'],\n /**\n * Denmark\n */\n '+45': ['DK'],\n /**\n * Sweden\n */\n '+46': ['SE'],\n /**\n * Norway\n */\n '+47': ['NO'],\n /**\n * Poland\n */\n '+48': ['PL'],\n /**\n * Germany\n */\n '+49': ['DE'],\n /**\n * Peru\n */\n '+51': ['PE'],\n /**\n * Mexico\n */\n '+52': ['MX'],\n /**\n * Cuba\n */\n '+53': ['CU'],\n /**\n * Argentina\n */\n '+54': ['AR'],\n /**\n * Brazil\n */\n '+55': ['BR'],\n /**\n * Chile\n */\n '+56': ['CL'],\n /**\n * Colombia\n */\n '+57': ['CO'],\n /**\n * Venezuela\n */\n '+58': ['VE'],\n /**\n * Malaysia\n */\n '+60': ['MY'],\n /**\n * Australia\n */\n '+61': ['AU'],\n /**\n * Indonesia\n */\n '+62': ['ID'],\n /**\n * Philippines\n */\n '+63': ['PH'],\n /**\n * New Zealand\n */\n '+64': ['NZ'],\n /**\n * Singapore\n */\n '+65': ['SG'],\n /**\n * Thailand\n */\n '+66': ['TH'],\n /**\n * Russia and Kazakhstan\n */\n '+7': ['RU', 'KZ'],\n /**\n * Japan\n */\n '+81': ['JP'],\n /**\n * South Korea\n */\n '+82': ['KR'],\n /**\n * Vietnam\n */\n '+84': ['VN'],\n /**\n * China\n */\n '+86': ['CN'],\n /**\n * Turkey\n */\n '+90': ['TR'],\n /**\n * India\n */\n '+91': ['IN'],\n /**\n * Pakistan\n */\n '+92': ['PK'],\n /**\n * Afghanistan\n */\n '+93': ['AF'],\n /**\n * Sri Lanka\n */\n '+94': ['LK'],\n /**\n * Myanmar\n */\n '+95': ['MM'],\n /**\n * Iran\n */\n '+98': ['IR'],\n /**\n * Morocco\n */\n '+212': ['MA'],\n /**\n * Algeria\n */\n '+213': ['DZ'],\n /**\n * Tunisia\n */\n '+216': ['TN'],\n /**\n * Libya\n */\n '+218': ['LY'],\n /**\n * Gambia\n */\n '+220': ['GM'],\n /**\n * Senegal\n */\n '+221': ['SN'],\n /**\n * Mali\n */\n '+223': ['ML'],\n /**\n * Guinea\n */\n '+224': ['GN'],\n /**\n * Côte d'Ivoire\n */\n '+225': ['CI'],\n /**\n * Burkina Faso\n */\n '+226': ['BF'],\n /**\n * Niger\n */\n '+227': ['NE'],\n /**\n * Togo\n */\n '+228': ['TG'],\n /**\n * Benin\n */\n '+229': ['BJ'],\n /**\n * Mauritius\n */\n '+230': ['MU'],\n /**\n * Liberia\n */\n '+231': ['LR'],\n /**\n * Sierra Leone\n */\n '+232': ['SL'],\n /**\n * Ghana\n */\n '+233': ['GH'],\n /**\n * Nigeria\n */\n '+234': ['NG'],\n /**\n * Chad\n */\n '+235': ['TD'],\n /**\n * Central African Republic\n */\n '+236': ['CF'],\n /**\n * Cameroon\n */\n '+237': ['CM'],\n /**\n * Cape Verde\n */\n '+238': ['CV'],\n /**\n * São Tomé and Príncipe\n */\n '+239': ['ST'],\n /**\n * Equatorial Guinea\n */\n '+240': ['GQ'],\n /**\n * Gabon\n */\n '+241': ['GA'],\n /**\n * Congo\n */\n '+242': ['CG'],\n /**\n * Democratic Republic of the Congo\n */\n '+243': ['CD'],\n /**\n * Angola\n */\n '+244': ['AO'],\n /**\n * Guinea-Bissau\n */\n '+245': ['GW'],\n /**\n * Kenya\n */\n '+254': ['KE'],\n /**\n * Tanzania\n */\n '+255': ['TZ'],\n /**\n * Uganda\n */\n '+256': ['UG'],\n /**\n * Burundi\n */\n '+257': ['BI'],\n /**\n * Mozambique\n */\n '+258': ['MZ'],\n /**\n * Zambia\n */\n '+260': ['ZM'],\n /**\n * Madagascar\n */\n '+261': ['MG'],\n /**\n * Zimbabwe\n */\n '+263': ['ZW'],\n /**\n * Namibia\n */\n '+264': ['NA'],\n /**\n * Malawi\n */\n '+265': ['MW'],\n /**\n * Lesotho\n */\n '+266': ['LS'],\n /**\n * Botswana\n */\n '+267': ['BW'],\n /**\n * Eswatini\n */\n '+268': ['SZ'],\n /**\n * Seychelles\n */\n '+248': ['SC'],\n /**\n * Rwanda\n */\n '+250': ['RW'],\n /**\n * Ethiopia\n */\n '+251': ['ET'],\n /**\n * Somalia\n */\n '+252': ['SO'],\n /**\n * Djibouti\n */\n '+253': ['DJ'],\n /**\n * Hong Kong\n */\n '+852': ['HK'],\n /**\n * Macao\n */\n '+853': ['MO'],\n /**\n * Bangladesh\n */\n '+880': ['BD'],\n /**\n * Taiwan\n */\n '+886': ['TW'],\n /**\n * Maldives\n */\n '+960': ['MV'],\n /**\n * Lebanon\n */\n '+961': ['LB'],\n /**\n * Jordan\n */\n '+962': ['JO'],\n /**\n * Syria\n */\n '+963': ['SY'],\n /**\n * Iraq\n */\n '+964': ['IQ'],\n /**\n * Kuwait\n */\n '+965': ['KW'],\n /**\n * Saudi Arabia\n */\n '+966': ['SA'],\n /**\n * Yemen\n */\n '+967': ['YE'],\n /**\n * Oman\n */\n '+968': ['OM'],\n /**\n * Palestine\n */\n '+970': ['PS'],\n /**\n * United Arab Emirates\n */\n '+971': ['AE'],\n /**\n * Israel\n */\n '+972': ['IL'],\n /**\n * Bahrain\n */\n '+973': ['BH'],\n /**\n * Qatar\n */\n '+974': ['QA'],\n /**\n * Bhutan\n */\n '+975': ['BT'],\n /**\n * Mongolia\n */\n '+976': ['MN'],\n /**\n * Nepal\n */\n '+977': ['NP'],\n /**\n * Tajikistan\n */\n '+992': ['TJ'],\n /**\n * Turkmenistan\n */\n '+993': ['TM'],\n /**\n * Azerbaijan\n */\n '+994': ['AZ'],\n /**\n * Georgia\n */\n '+995': ['GE'],\n /**\n * Kyrgyzstan\n */\n '+996': ['KG'],\n /**\n * Uzbekistan\n */\n '+998': ['UZ'],\n} as const;\n\n/**\n * Regional groupings\n */\nexport const COUNTRY_REGIONS = {\n /**\n * European Union member states\n */\n EU: [\n 'AT',\n 'BE',\n 'BG',\n 'HR',\n 'CY',\n 'CZ',\n 'DK',\n 'EE',\n 'FI',\n 'FR',\n 'DE',\n 'GR',\n 'HU',\n 'IE',\n 'IT',\n 'LV',\n 'LT',\n 'LU',\n 'MT',\n 'NL',\n 'PL',\n 'PT',\n 'RO',\n 'SK',\n 'SI',\n 'ES',\n 'SE',\n ],\n\n /**\n * North American countries\n */\n NORTH_AMERICA: ['US', 'CA', 'MX'],\n\n /**\n * South American countries\n */\n SOUTH_AMERICA: ['AR', 'BO', 'BR', 'CL', 'CO', 'EC', 'GF', 'GY', 'PY', 'PE', 'SR', 'UY', 'VE'],\n\n /**\n * G7 countries\n */\n G7: ['US', 'CA', 'GB', 'FR', 'DE', 'IT', 'JP'],\n\n /**\n * G20 countries\n */\n G20: [\n 'AR',\n 'AU',\n 'BR',\n 'CA',\n 'CN',\n 'FR',\n 'DE',\n 'IN',\n 'ID',\n 'IT',\n 'JP',\n 'KR',\n 'MX',\n 'RU',\n 'SA',\n 'ZA',\n 'TR',\n 'GB',\n 'US',\n ],\n\n /**\n * ASEAN countries\n */\n ASEAN: ['BN', 'KH', 'ID', 'LA', 'MY', 'MM', 'PH', 'SG', 'TH', 'VN'],\n\n /**\n * BRICS countries\n */\n BRICS: ['BR', 'RU', 'IN', 'CN', 'ZA'],\n\n /**\n * OECD countries\n */\n OECD: [\n 'AU',\n 'AT',\n 'BE',\n 'CA',\n 'CL',\n 'CO',\n 'CR',\n 'CZ',\n 'DK',\n 'EE',\n 'FI',\n 'FR',\n 'DE',\n 'GR',\n 'HU',\n 'IS',\n 'IE',\n 'IL',\n 'IT',\n 'JP',\n 'KR',\n 'LV',\n 'LT',\n 'LU',\n 'MX',\n 'NL',\n 'NZ',\n 'NO',\n 'PL',\n 'PT',\n 'SK',\n 'SI',\n 'ES',\n 'SE',\n 'CH',\n 'TR',\n 'GB',\n 'US',\n ],\n\n /**\n * Commonwealth countries\n */\n COMMONWEALTH: [\n 'AG',\n 'AU',\n 'BS',\n 'BD',\n 'BB',\n 'BZ',\n 'BW',\n 'BN',\n 'CM',\n 'CA',\n 'CY',\n 'DM',\n 'FJ',\n 'GM',\n 'GH',\n 'GD',\n 'GY',\n 'IN',\n 'JM',\n 'KE',\n 'KI',\n 'LS',\n 'MW',\n 'MY',\n 'MV',\n 'MT',\n 'MU',\n 'MZ',\n 'NA',\n 'NR',\n 'NZ',\n 'NG',\n 'PK',\n 'PG',\n 'RW',\n 'KN',\n 'LC',\n 'VC',\n 'WS',\n 'SC',\n 'SL',\n 'SG',\n 'SB',\n 'ZA',\n 'LK',\n 'SZ',\n 'TZ',\n 'TO',\n 'TT',\n 'TV',\n 'UG',\n 'GB',\n 'VU',\n 'ZM',\n ],\n} as const;\n\n/**\n * Country code to region mapping for CDN headers\n */\nexport const COUNTRY_REGIONS_DETAILED: Record<string, { region: string; state?: string }> = {\n // EU countries\n DE: { region: 'eu' },\n FR: { region: 'eu' },\n IT: { region: 'eu' },\n ES: { region: 'eu' },\n NL: { region: 'eu' },\n BE: { region: 'eu' },\n AT: { region: 'eu' },\n SE: { region: 'eu' },\n DK: { region: 'eu' },\n FI: { region: 'eu' },\n NO: { region: 'eu' },\n PL: { region: 'eu' },\n CZ: { region: 'eu' },\n HU: { region: 'eu' },\n SK: { region: 'eu' },\n SI: { region: 'eu' },\n HR: { region: 'eu' },\n BG: { region: 'eu' },\n RO: { region: 'eu' },\n GR: { region: 'eu' },\n PT: { region: 'eu' },\n IE: { region: 'eu' },\n LU: { region: 'eu' },\n MT: { region: 'eu' },\n CY: { region: 'eu' },\n EE: { region: 'eu' },\n LV: { region: 'eu' },\n LT: { region: 'eu' },\n GB: { region: 'eu' },\n IS: { region: 'eu' },\n LI: { region: 'eu' },\n CH: { region: 'eu' },\n\n // US and states (would need more sophisticated detection for states)\n US: { region: 'us' },\n CA: { region: 'ca' }, // Canada as separate region\n\n // China\n CN: { region: 'cn' },\n HK: { region: 'cn' },\n MO: { region: 'cn' },\n\n // Japan\n JP: { region: 'jp' },\n\n // Other Asian countries\n KR: { region: 'global' }, // South Korea\n TW: { region: 'global' }, // Taiwan\n SG: { region: 'global' }, // Singapore\n MY: { region: 'global' }, // Malaysia\n TH: { region: 'global' }, // Thailand\n IN: { region: 'global' }, // India\n ID: { region: 'global' }, // Indonesia\n PH: { region: 'global' }, // Philippines\n VN: { region: 'global' }, // Vietnam\n\n // Oceania\n AU: { region: 'global' }, // Australia\n NZ: { region: 'global' }, // New Zealand\n\n // Americas (other than US/CA)\n MX: { region: 'global' }, // Mexico\n BR: { region: 'global' }, // Brazil\n AR: { region: 'global' }, // Argentina\n CL: { region: 'global' }, // Chile\n CO: { region: 'global' }, // Colombia\n\n // Middle East\n AE: { region: 'global' }, // UAE\n SA: { region: 'global' }, // Saudi Arabia\n IL: { region: 'global' }, // Israel\n TR: { region: 'global' }, // Turkey\n\n // Africa\n ZA: { region: 'global' }, // South Africa\n EG: { region: 'global' }, // Egypt\n NG: { region: 'global' }, // Nigeria\n KE: { region: 'global' }, // Kenya\n\n // Russia\n RU: { region: 'global' }, // Russia\n\n // Other countries default to global\n};\n\n/**\n * Type exports\n */\nexport type CountryCode = (typeof COUNTRY_CODES)[keyof typeof COUNTRY_CODES];\nexport type CountryCallingCode = keyof typeof COUNTRY_CALLING_CODES;\nexport type CountryRegion = keyof typeof COUNTRY_REGIONS;\nexport type CountryRegionDetailed =\n (typeof COUNTRY_REGIONS_DETAILED)[keyof typeof COUNTRY_REGIONS_DETAILED];\n","/**\n * Common Locale Constants\n *\n * BCP 47 language tags for common locales worldwide.\n *\n * @module locale/locales\n */\n\n/**\n * Locale regions\n */\nexport const LOCALE_REGIONS = {\n AMERICAS: ['en-US', 'es-MX', 'pt-BR', 'en-CA', 'fr-CA'],\n EUROPE: ['en-GB', 'de-DE', 'fr-FR', 'it-IT', 'es-ES', 'nl-NL'],\n ASIA_PACIFIC: ['zh-CN', 'ja-JP', 'ko-KR', 'hi-IN', 'en-AU'],\n MIDDLE_EAST_AFRICA: ['ar-SA', 'he-IL', 'tr-TR', 'en-ZA'],\n} as const;\n\n/**\n * Locale to region mapping\n */\nexport const LOCALE_REGIONS_DETAILED: Record<string, { region: string; country?: string }> = {\n // EU locales\n de: { region: 'eu', country: 'DE' },\n 'de-de': { region: 'eu', country: 'DE' },\n 'de-at': { region: 'eu', country: 'AT' },\n 'de-ch': { region: 'eu', country: 'CH' },\n 'it-ch': { region: 'eu', country: 'CH' },\n 'fr-ch': { region: 'eu', country: 'CH' },\n fr: { region: 'eu', country: 'FR' },\n 'fr-fr': { region: 'eu', country: 'FR' },\n 'fr-be': { region: 'eu', country: 'BE' },\n es: { region: 'eu', country: 'ES' },\n 'es-es': { region: 'eu', country: 'ES' },\n it: { region: 'eu', country: 'IT' },\n 'it-it': { region: 'eu', country: 'IT' },\n nl: { region: 'eu', country: 'NL' },\n 'nl-nl': { region: 'eu', country: 'NL' },\n 'nl-be': { region: 'eu', country: 'BE' },\n pl: { region: 'eu', country: 'PL' },\n 'pl-pl': { region: 'eu', country: 'PL' },\n pt: { region: 'eu', country: 'PT' },\n 'pt-pt': { region: 'eu', country: 'PT' },\n sv: { region: 'eu', country: 'SE' },\n 'sv-se': { region: 'eu', country: 'SE' },\n 'sv-fi': { region: 'eu', country: 'FI' },\n da: { region: 'eu', country: 'DK' },\n 'da-dk': { region: 'eu', country: 'DK' },\n fi: { region: 'eu', country: 'FI' },\n 'fi-fi': { region: 'eu', country: 'FI' },\n 'en-gb': { region: 'eu', country: 'GB' },\n 'en-ie': { region: 'eu', country: 'IE' },\n\n // US locales\n 'en-us': { region: 'us', country: 'US' },\n en: { region: 'global', country: undefined }, // Default English to global (no specific country)\n\n // China locales\n zh: { region: 'cn', country: 'CN' },\n 'zh-cn': { region: 'cn', country: 'CN' },\n 'zh-hans': { region: 'cn', country: 'CN' },\n 'zh-hk': { region: 'cn', country: 'HK' },\n 'zh-tw': { region: 'global', country: 'TW' }, // Taiwan as global\n\n // Japan locales\n ja: { region: 'jp', country: 'JP' },\n 'ja-jp': { region: 'jp', country: 'JP' },\n\n // Other locales\n 'en-ca': { region: 'ca', country: 'CA' },\n 'fr-ca': { region: 'ca', country: 'CA' },\n 'en-au': { region: 'global', country: 'AU' },\n 'en-nz': { region: 'global', country: 'NZ' },\n ko: { region: 'global', country: 'KR' },\n 'ko-kr': { region: 'global', country: 'KR' },\n\n // Latin America locales\n 'pt-br': { region: 'global', country: 'BR' },\n 'es-mx': { region: 'global', country: 'MX' },\n 'es-ar': { region: 'global', country: 'AR' },\n 'es-cl': { region: 'global', country: 'CL' },\n 'es-co': { region: 'global', country: 'CO' },\n 'es-pe': { region: 'global', country: 'PE' },\n 'es-VE': { region: 'global', country: 'VE' },\n 'es-EC': { region: 'global', country: 'EC' },\n 'es-UY': { region: 'global', country: 'UY' },\n 'es-PY': { region: 'global', country: 'PY' },\n 'es-BO': { region: 'global', country: 'BO' },\n 'es-DO': { region: 'global', country: 'DO' },\n 'es-GT': { region: 'global', country: 'GT' },\n 'es-HN': { region: 'global', country: 'HN' },\n 'es-NI': { region: 'global', country: 'NI' },\n 'es-PA': { region: 'global', country: 'PA' },\n 'es-CR': { region: 'global', country: 'CR' },\n 'es-SV': { region: 'global', country: 'SV' },\n\n // Asian locales\n 'zh-SG': { region: 'global', country: 'SG' },\n 'en-SG': { region: 'global', country: 'SG' },\n 'en-IN': { region: 'global', country: 'IN' },\n 'hi-IN': { region: 'global', country: 'IN' },\n 'en-PH': { region: 'global', country: 'PH' },\n 'tl-PH': { region: 'global', country: 'PH' },\n 'id-ID': { region: 'global', country: 'ID' },\n 'ms-MY': { region: 'global', country: 'MY' },\n 'en-MY': { region: 'global', country: 'MY' },\n 'th-TH': { region: 'global', country: 'TH' },\n 'vi-VN': { region: 'global', country: 'VN' },\n\n // Middle East & Africa locales\n 'ar-SA': { region: 'global', country: 'SA' },\n 'ar-AE': { region: 'global', country: 'AE' },\n 'ar-EG': { region: 'global', country: 'EG' },\n 'ar-DZ': { region: 'global', country: 'DZ' },\n 'ar-MA': { region: 'global', country: 'MA' },\n 'he-IL': { region: 'global', country: 'IL' },\n 'tr-TR': { region: 'global', country: 'TR' },\n 'en-ZA': { region: 'global', country: 'ZA' },\n 'af-ZA': { region: 'global', country: 'ZA' },\n 'en-NG': { region: 'global', country: 'NG' },\n 'en-KE': { region: 'global', country: 'KE' },\n 'sw-KE': { region: 'global', country: 'KE' },\n\n // Eastern Europe/Russia locales\n 'ru-RU': { region: 'global', country: 'RU' },\n 'uk-UA': { region: 'eu', country: 'UA' },\n 'be-BY': { region: 'global', country: 'BY' },\n 'kk-KZ': { region: 'global', country: 'KZ' },\n};\n\n/**\n * Type exports\n */\nexport type LocaleRegion = (typeof LOCALE_REGIONS)[keyof typeof LOCALE_REGIONS];\nexport type LocaleRegionDetailed =\n (typeof LOCALE_REGIONS_DETAILED)[keyof typeof LOCALE_REGIONS_DETAILED];\n","/**\n * Timezone to region mapping\n */\nexport const TIMEZONE_REGIONS: Record<\n string,\n { region: string; country?: string; state?: string }\n> = {\n // Europe\n 'Europe/London': { region: 'eu', country: 'GB' },\n 'Europe/Berlin': { region: 'eu', country: 'DE' },\n 'Europe/Paris': { region: 'eu', country: 'FR' },\n 'Europe/Rome': { region: 'eu', country: 'IT' },\n 'Europe/Madrid': { region: 'eu', country: 'ES' },\n 'Europe/Amsterdam': { region: 'eu', country: 'NL' },\n 'Europe/Stockholm': { region: 'eu', country: 'SE' },\n 'Europe/Helsinki': { region: 'eu', country: 'FI' },\n 'Europe/Vienna': { region: 'eu', country: 'AT' },\n 'Europe/Brussels': { region: 'eu', country: 'BE' },\n 'Europe/Dublin': { region: 'eu', country: 'IE' },\n 'Europe/Copenhagen': { region: 'eu', country: 'DK' },\n 'Europe/Warsaw': { region: 'eu', country: 'PL' },\n 'Europe/Prague': { region: 'eu', country: 'CZ' },\n 'Europe/Budapest': { region: 'eu', country: 'HU' },\n 'Europe/Bucharest': { region: 'eu', country: 'RO' },\n 'Europe/Athens': { region: 'eu', country: 'GR' },\n 'Europe/Lisbon': { region: 'eu', country: 'PT' },\n 'Europe/Zagreb': { region: 'eu', country: 'HR' },\n 'Europe/Ljubljana': { region: 'eu', country: 'SI' },\n 'Europe/Bratislava': { region: 'eu', country: 'SK' },\n 'Europe/Sofia': { region: 'eu', country: 'BG' },\n 'Europe/Tallinn': { region: 'eu', country: 'EE' },\n 'Europe/Riga': { region: 'eu', country: 'LV' },\n 'Europe/Vilnius': { region: 'eu', country: 'LT' },\n 'Europe/Luxembourg': { region: 'eu', country: 'LU' },\n 'Europe/Malta': { region: 'eu', country: 'MT' },\n 'Europe/Oslo': { region: 'eu', country: 'NO' },\n 'Europe/Zurich': { region: 'eu', country: 'CH' },\n 'Europe/Reykjavik': { region: 'eu', country: 'IS' },\n 'Europe/Kiev': { region: 'eu', country: 'UA' },\n 'Europe/Minsk': { region: 'global', country: 'BY' },\n 'Europe/Moscow': { region: 'global', country: 'RU' },\n\n // United States\n 'America/Los_Angeles': { region: 'us', country: 'US', state: 'ca' },\n 'America/San_Francisco': { region: 'us', country: 'US', state: 'ca' },\n 'America/New_York': { region: 'us', country: 'US', state: 'ny' },\n 'America/Chicago': { region: 'us', country: 'US', state: 'il' },\n 'America/Denver': { region: 'us', country: 'US', state: 'co' },\n 'America/Phoenix': { region: 'us', country: 'US', state: 'az' },\n 'America/Detroit': { region: 'us', country: 'US', state: 'mi' },\n 'America/Atlanta': { region: 'us', country: 'US', state: 'ga' },\n 'America/Miami': { region: 'us', country: 'US', state: 'fl' },\n 'America/Dallas': { region: 'us', country: 'US', state: 'tx' },\n 'America/Houston': { region: 'us', country: 'US', state: 'tx' },\n 'America/Seattle': { region: 'us', country: 'US', state: 'wa' },\n 'America/Boston': { region: 'us', country: 'US', state: 'ma' },\n 'America/Philadelphia': { region: 'us', country: 'US', state: 'pa' },\n\n // China\n 'Asia/Shanghai': { region: 'cn', country: 'CN' },\n 'Asia/Beijing': { region: 'cn', country: 'CN' },\n 'Asia/Hong_Kong': { region: 'cn', country: 'HK' },\n 'Asia/Macau': { region: 'cn', country: 'MO' },\n 'Asia/Chongqing': { region: 'cn', country: 'CN' },\n 'Asia/Urumqi': { region: 'cn', country: 'CN' },\n\n // Japan\n 'Asia/Tokyo': { region: 'jp', country: 'JP' },\n 'Asia/Osaka': { region: 'jp', country: 'JP' },\n\n // Other Asian regions\n 'Asia/Bangkok': { region: 'global', country: 'TH' },\n 'Asia/Jakarta': { region: 'global', country: 'ID' },\n 'Asia/Manila': { region: 'global', country: 'PH' },\n 'Asia/Kuala_Lumpur': { region: 'global', country: 'MY' },\n 'Asia/Ho_Chi_Minh': { region: 'global', country: 'VN' },\n 'Asia/Taipei': { region: 'global', country: 'TW' },\n 'Asia/Kolkata': { region: 'global', country: 'IN' },\n 'Asia/Delhi': { region: 'global', country: 'IN' },\n 'Asia/Karachi': { region: 'global', country: 'PK' },\n 'Asia/Dhaka': { region: 'global', country: 'BD' },\n 'Asia/Colombo': { region: 'global', country: 'LK' },\n 'Asia/Kathmandu': { region: 'global', country: 'NP' },\n\n // Pacific regions\n 'Pacific/Fiji': { region: 'global', country: 'FJ' },\n 'Pacific/Guam': { region: 'us', country: 'GU' },\n 'Pacific/Honolulu': { region: 'us', country: 'US', state: 'hi' },\n\n // Canada\n 'America/Toronto': { region: 'us', country: 'CA' }, // Treat Canada as US for simplicity\n 'America/Vancouver': { region: 'us', country: 'CA' },\n 'America/Montreal': { region: 'us', country: 'CA' },\n 'America/Edmonton': { region: 'us', country: 'CA' },\n 'America/Winnipeg': { region: 'us', country: 'CA' },\n 'America/Halifax': { region: 'us', country: 'CA' },\n\n // Australia & New Zealand\n 'Australia/Sydney': { region: 'global', country: 'AU' },\n 'Australia/Melbourne': { region: 'global', country: 'AU' },\n 'Australia/Brisbane': { region: 'global', country: 'AU' },\n 'Australia/Perth': { region: 'global', country: 'AU' },\n 'Australia/Adelaide': { region: 'global', country: 'AU' },\n 'Australia/Darwin': { region: 'global', country: 'AU' },\n 'Australia/Hobart': { region: 'global', country: 'AU' },\n 'Pacific/Auckland': { region: 'global', country: 'NZ' },\n 'Pacific/Wellington': { region: 'global', country: 'NZ' },\n 'Pacific/Christchurch': { region: 'global', country: 'NZ' },\n\n // Other Asian regions\n 'Asia/Singapore': { region: 'global', country: 'SG' },\n 'Asia/Seoul': { region: 'global', country: 'KR' },\n 'Asia/Mumbai': { region: 'global', country: 'IN' },\n 'Asia/Dubai': { region: 'global', country: 'AE' },\n 'Asia/Riyadh': { region: 'global', country: 'SA' },\n 'Asia/Jerusalem': { region: 'global', country: 'IL' },\n 'Asia/Tel_Aviv': { region: 'global', country: 'IL' },\n 'Asia/Istanbul': { region: 'global', country: 'TR' },\n 'Asia/Tehran': { region: 'global', country: 'IR' },\n 'Asia/Baghdad': { region: 'global', country: 'IQ' },\n 'Asia/Kuwait': { region: 'global', country: 'KW' },\n 'Asia/Doha': { region: 'global', country: 'QA' },\n 'Asia/Muscat': { region: 'global', country: 'OM' },\n 'Asia/Amman': { region: 'global', country: 'JO' },\n 'Asia/Beirut': { region: 'global', country: 'LB' },\n 'Asia/Damascus': { region: 'global', country: 'SY' },\n\n // Latin America\n 'America/Sao_Paulo': { region: 'global', country: 'BR' },\n 'America/Rio_de_Janeiro': { region: 'global', country: 'BR' },\n 'America/Brasilia': { region: 'global', country: 'BR' },\n 'America/Mexico_City': { region: 'global', country: 'MX' },\n 'America/Tijuana': { region: 'global', country: 'MX' },\n 'America/Monterrey': { region: 'global', country: 'MX' },\n 'America/Buenos_Aires': { region: 'global', country: 'AR' },\n 'America/Santiago': { region: 'global', country: 'CL' },\n 'America/Bogota': { region: 'global', country: 'CO' },\n 'America/Lima': { region: 'global', country: 'PE' },\n 'America/Caracas': { region: 'global', country: 'VE' },\n 'America/La_Paz': { region: 'global', country: 'BO' },\n 'America/Guayaquil': { region: 'global', country: 'EC' },\n 'America/Montevideo': { region: 'global', country: 'UY' },\n 'America/Asuncion': { region: 'global', country: 'PY' },\n 'America/Santo_Domingo': { region: 'global', country: 'DO' },\n 'America/Havana': { region: 'global', country: 'CU' },\n 'America/Panama': { region: 'global', country: 'PA' },\n 'America/Guatemala': { region: 'global', country: 'GT' },\n 'America/Costa_Rica': { region: 'global', country: 'CR' },\n 'America/San_Salvador': { region: 'global', country: 'SV' },\n 'America/Tegucigalpa': { region: 'global', country: 'HN' },\n 'America/Managua': { region: 'global', country: 'NI' },\n 'America/Jamaica': { region: 'global', country: 'JM' },\n 'America/Port-au-Prince': { region: 'global', country: 'HT' },\n\n // Africa\n 'Africa/Johannesburg': { region: 'global', country: 'ZA' },\n 'Africa/Cairo': { region: 'global', country: 'EG' },\n 'Africa/Lagos': { region: 'global', country: 'NG' },\n 'Africa/Nairobi': { region: 'global', country: 'KE' },\n 'Africa/Casablanca': { region: 'global', country: 'MA' },\n 'Africa/Algiers': { region: 'global', country: 'DZ' },\n 'Africa/Tunis': { region: 'global', country: 'TN' },\n 'Africa/Addis_Ababa': { region: 'global', country: 'ET' },\n 'Africa/Dar_es_Salaam': { region: 'global', country: 'TZ' },\n 'Africa/Kinshasa': { region: 'global', country: 'CD' },\n 'Africa/Luanda': { region: 'global', country: 'AO' },\n 'Africa/Kampala': { region: 'global', country: 'UG' },\n 'Africa/Harare': { region: 'global', country: 'ZW' },\n 'Africa/Accra': { region: 'global', country: 'GH' },\n 'Africa/Dakar': { region: 'global', country: 'SN' },\n 'Africa/Abidjan': { region: 'global', country: 'CI' },\n\n // Fallback prefix patterns (should be at the end for proper precedence)\n 'Europe/': { region: 'eu' }, // Catch-all for European timezones\n 'America/': { region: 'us' }, // Default Americas to US\n 'Asia/': { region: 'asia' }, // Default Asia to asia region\n 'Africa/': { region: 'global' }, // Default Africa to global\n 'Pacific/': { region: 'global' }, // Default Pacific to global\n};\n\n/**\n * Type exports\n */\nexport type TimezoneRegion = (typeof TIMEZONE_REGIONS)[keyof typeof TIMEZONE_REGIONS];\n","export const ATHLETE_POSITIONS = [\n { name: 'Goalkeeper', value: 'goal_keeper' },\n { name: 'Centre Back', value: 'centre_back' },\n { name: 'Right Back', value: 'right_back' },\n { name: 'Left Back', value: 'left_back' },\n { name: 'Wing Back (Right/Left)', value: 'wing_back' },\n { name: 'Defensive Midfielder', value: 'defensive_midfielder' },\n { name: 'Central Midfielder', value: 'central_midfielder' },\n { name: 'Attacking Midfielder', value: 'attacking_midfielder' },\n { name: 'Right Midfielder/Winger', value: 'right_midfielder_winger' },\n { name: 'Left Midfielder/Winger', value: 'left_midfielder_winger' },\n { name: 'Centre Forward/Striker', value: 'centre_forward_striker' },\n] as const;\n\nexport type AthletePosition = (typeof ATHLETE_POSITIONS)[keyof typeof ATHLETE_POSITIONS];\n","/**\n * Time-related Constants\n *\n * Common time values and durations used throughout the application\n * for timeouts, delays, caching, and other time-based operations.\n *\n * @module time/constants\n */\n\nimport { type CountryCode } from '@plyaz/types';\nimport { COUNTRY_CODES } from '../locale';\n\nexport const DAYS_IN_WEEK = 7;\nexport const EARLY_MORNING_HOURS = 6;\n/**\n * Time conversion and duration constants\n */\nexport const TIME_CONSTANTS = {\n // Time unit conversions (in milliseconds)\n /**\n * One millisecond in milliseconds\n */\n MILLISECOND: 1,\n\n /**\n * One second in milliseconds\n */\n SECOND: 1000,\n\n /**\n * One minute in milliseconds\n */\n MINUTE: 60000,\n\n /**\n * One hour in milliseconds\n */\n HOUR: 3600000,\n\n /**\n * One day in milliseconds\n */\n DAY: 86400000,\n\n /**\n * One week in milliseconds\n */\n WEEK: 604800000,\n\n /**\n * One month in milliseconds (30 days average)\n */\n MONTH: 2592000000,\n\n /**\n * One year in milliseconds (365 days)\n */\n YEAR: 31536000000,\n\n // Time unit ratios\n /**\n * Number of milliseconds in one second\n */\n MILLISECONDS_PER_SECOND: 1000,\n\n /**\n * Number of seconds in one minute\n */\n SECONDS_PER_MINUTE: 60,\n\n /**\n * Number of minutes in one hour\n */\n MINUTES_PER_HOUR: 60,\n\n /**\n * Number of hours in one day\n */\n HOURS_PER_DAY: 24,\n\n /**\n * Number of days in one week\n */\n DAYS_PER_WEEK: 7,\n\n /**\n * Number of days in one month (average)\n */\n DAYS_PER_MONTH: 30,\n\n /**\n * Number of days in one year\n */\n DAYS_PER_YEAR: 365,\n\n /**\n * Number of weeks in one year\n */\n WEEKS_PER_YEAR: 52,\n\n /**\n * Number of months in one year\n */\n MONTHS_PER_YEAR: 12,\n\n // Common durations in milliseconds\n /**\n * 100 milliseconds\n */\n HUNDRED_MS: 100,\n\n /**\n * 250 milliseconds\n */\n QUARTER_SECOND: 250,\n\n /**\n * 500 milliseconds (half second)\n */\n HALF_SECOND: 500,\n\n /**\n * 2 seconds in milliseconds\n */\n TWO_SECONDS: 2000,\n\n /**\n * 3 seconds in milliseconds\n */\n THREE_SECONDS: 3000,\n\n /**\n * 5 seconds in milliseconds\n */\n FIVE_SECONDS: 5000,\n\n /**\n * 10 seconds in milliseconds\n */\n TEN_SECONDS: 10000,\n\n /**\n * 30 seconds in milliseconds\n */\n THIRTY_SECONDS: 30000,\n\n /**\n * 2 minutes in milliseconds\n */\n TWO_MINUTES: 120000,\n\n /**\n * 5 minutes in milliseconds\n */\n FIVE_MINUTES: 300000,\n\n /**\n * 10 minutes in milliseconds\n */\n TEN_MINUTES: 600000,\n\n /**\n * 15 minutes in milliseconds\n */\n FIFTEEN_MINUTES: 900000,\n\n /**\n * 30 minutes in milliseconds\n */\n THIRTY_MINUTES: 1800000,\n\n /**\n * 1 hour in milliseconds\n */\n ONE_HOUR: 3600000,\n\n /**\n * 2 hours in milliseconds\n */\n TWO_HOURS: 7200000,\n\n /**\n * 6 hours in milliseconds\n */\n SIX_HOURS: 21600000,\n\n /**\n * 12 hours in milliseconds\n */\n TWELVE_HOURS: 43200000,\n\n // Default values\n /**\n * Default timeout duration in milliseconds (5 seconds)\n */\n DEFAULT_TIMEOUT: 5000,\n\n /**\n * Default short timeout in milliseconds (1 second)\n */\n DEFAULT_SHORT_TIMEOUT: 1000,\n\n /**\n * Default long timeout in milliseconds (30 seconds)\n */\n DEFAULT_LONG_TIMEOUT: 30000,\n\n /**\n * Default retry delay in milliseconds (100ms)\n */\n DEFAULT_RETRY_DELAY: 100,\n\n /**\n * Default exponential backoff base delay in milliseconds (1 second)\n */\n DEFAULT_BACKOFF_BASE: 1000,\n\n /**\n * Default maximum backoff delay in milliseconds (30 seconds)\n */\n DEFAULT_MAX_BACKOFF: 30000,\n\n /**\n * Default number of retry attempts\n */\n DEFAULT_RETRY_ATTEMPTS: 3,\n\n /**\n * Default debounce delay in milliseconds (50ms)\n */\n DEFAULT_DEBOUNCE_DELAY: 50,\n\n /**\n * Default throttle delay in milliseconds (100ms)\n */\n DEFAULT_THROTTLE_DELAY: 100,\n\n /**\n * Default animation frame duration in milliseconds (~60fps)\n */\n DEFAULT_ANIMATION_FRAME: 16.67,\n\n /**\n * Default transition duration in milliseconds (300ms)\n */\n DEFAULT_TRANSITION_DURATION: 300,\n\n /**\n * Default cache time-to-live in seconds (5 minutes)\n */\n DEFAULT_CACHE_TTL: 300,\n\n /**\n * Default short cache TTL in seconds (1 minute)\n */\n DEFAULT_SHORT_CACHE_TTL: 60,\n\n /**\n * Default long cache TTL in seconds (1 hour)\n */\n DEFAULT_LONG_CACHE_TTL: 3600,\n\n /**\n * Default session timeout in milliseconds (30 minutes)\n */\n DEFAULT_SESSION_TIMEOUT: 1800000,\n\n /**\n * Default idle timeout in milliseconds (15 minutes)\n */\n DEFAULT_IDLE_TIMEOUT: 900000,\n\n /**\n * Default poll interval in milliseconds (5 seconds)\n */\n DEFAULT_POLL_INTERVAL: 5000,\n\n /**\n * Default heartbeat interval in milliseconds (30 seconds)\n */\n DEFAULT_HEARTBEAT_INTERVAL: 30000,\n\n // Network and ports\n /**\n * Default port number for servers\n */\n DEFAULT_PORT: 3000,\n\n /**\n * Default HTTP port\n */\n HTTP_PORT: 80,\n\n /**\n * Default HTTPS port\n */\n HTTPS_PORT: 443,\n\n /**\n * Default WebSocket port\n */\n WEBSOCKET_PORT: 8080,\n\n /**\n * Default database port (PostgreSQL)\n */\n DATABASE_PORT: 5432,\n\n /**\n * Default Redis port\n */\n REDIS_PORT: 6379,\n\n // WebSocket specific\n /**\n * WebSocket normal closure code\n */\n WEBSOCKET_CLOSE_NORMAL: 1000,\n\n /**\n * WebSocket going away code\n */\n WEBSOCKET_CLOSE_GOING_AWAY: 1001,\n\n /**\n * WebSocket protocol error code\n */\n WEBSOCKET_CLOSE_PROTOCOL_ERROR: 1002,\n\n /**\n * WebSocket unsupported data code\n */\n WEBSOCKET_CLOSE_UNSUPPORTED: 1003,\n\n /**\n * WebSocket abnormal closure code\n */\n WEBSOCKET_CLOSE_ABNORMAL: 1006,\n\n /**\n * WebSocket retry delay in milliseconds (500ms)\n */\n WEBSOCKET_RETRY_DELAY: 500,\n\n /**\n * WebSocket ping interval in milliseconds (30 seconds)\n */\n WEBSOCKET_PING_INTERVAL: 30000,\n\n /**\n * WebSocket reconnect delay in milliseconds (1 second)\n */\n WEBSOCKET_RECONNECT_DELAY: 1000,\n\n /**\n * WebSocket max reconnect delay in milliseconds (30 seconds)\n */\n WEBSOCKET_MAX_RECONNECT_DELAY: 30000,\n} as const;\n\n/**\n * Country → Time Zone Mapping\n * Based on IANA time zone database (https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)\n */\nexport const COUNTRY_TIMEZONES: Record<string, string[]> = {\n // --- AMERICAS ---\n [COUNTRY_CODES.US]: [\n 'America/New_York',\n 'America/Chicago',\n 'America/Denver',\n 'America/Los_Angeles',\n 'America/Anchorage',\n 'Pacific/Honolulu',\n ],\n [COUNTRY_CODES.CA]: [\n 'America/Toronto',\n 'America/Vancouver',\n 'America/Edmonton',\n 'America/Halifax',\n 'America/St_Johns',\n ],\n [COUNTRY_CODES.MX]: ['America/Mexico_City', 'America/Monterrey', 'America/Tijuana'],\n [COUNTRY_CODES.BR]: ['America/Sao_Paulo', 'America/Manaus', 'America/Fortaleza'],\n [COUNTRY_CODES.AR]: ['America/Argentina/Buenos_Aires'],\n [COUNTRY_CODES.CL]: ['America/Santiago'],\n [COUNTRY_CODES.CO]: ['America/Bogota'],\n [COUNTRY_CODES.PE]: ['America/Lima'],\n [COUNTRY_CODES.VE]: ['America/Caracas'],\n\n // --- EUROPE ---\n [COUNTRY_CODES.GB]: ['Europe/London'],\n [COUNTRY_CODES.FR]: ['Europe/Paris'],\n [COUNTRY_CODES.DE]: ['Europe/Berlin'],\n [COUNTRY_CODES.IT]: ['Europe/Rome'],\n [COUNTRY_CODES.ES]: ['Europe/Madrid'],\n [COUNTRY_CODES.PT]: ['Europe/Lisbon'],\n [COUNTRY_CODES.NL]: ['Europe/Amsterdam'],\n [COUNTRY_CODES.SE]: ['Europe/Stockholm'],\n [COUNTRY_CODES.PL]: ['Europe/Warsaw'],\n [COUNTRY_CODES.FI]: ['Europe/Helsinki'],\n [COUNTRY_CODES.NO]: ['Europe/Oslo'],\n [COUNTRY_CODES.CH]: ['Europe/Zurich'],\n [COUNTRY_CODES.RU]: ['Europe/Moscow', 'Asia/Yekaterinburg', 'Asia/Irkutsk', 'Asia/Vladivostok'],\n [COUNTRY_CODES.UA]: ['Europe/Kyiv'],\n [COUNTRY_CODES.GR]: ['Europe/Athens'],\n [COUNTRY_CODES.TR]: ['Europe/Istanbul'],\n\n // --- ASIA ---\n [COUNTRY_CODES.CN]: ['Asia/Shanghai', 'Asia/Urumqi'],\n [COUNTRY_CODES.JP]: ['Asia/Tokyo'],\n [COUNTRY_CODES.KR]: ['Asia/Seoul'],\n [COUNTRY_CODES.IN]: ['Asia/Kolkata'],\n [COUNTRY_CODES.PK]: ['Asia/Karachi'],\n [COUNTRY_CODES.BD]: ['Asia/Dhaka'],\n [COUNTRY_CODES.TH]: ['Asia/Bangkok'],\n [COUNTRY_CODES.VN]: ['Asia/Ho_Chi_Minh'],\n [COUNTRY_CODES.MY]: ['Asia/Kuala_Lumpur'],\n [COUNTRY_CODES.SG]: ['Asia/Singapore'],\n [COUNTRY_CODES.ID]: [\n 'Asia/Jakarta',\n 'Asia/Makassar',\n 'Asia/Jayapura', // Indonesia has 3 time zones\n ],\n [COUNTRY_CODES.PH]: ['Asia/Manila'],\n [COUNTRY_CODES.AE]: ['Asia/Dubai'],\n [COUNTRY_CODES.SA]: ['Asia/Riyadh'],\n [COUNTRY_CODES.IR]: ['Asia/Tehran'],\n [COUNTRY_CODES.IQ]: ['Asia/Baghdad'],\n [COUNTRY_CODES.IL]: ['Asia/Jerusalem'],\n [COUNTRY_CODES.QA]: ['Asia/Qatar'],\n [COUNTRY_CODES.KW]: ['Asia/Kuwait'],\n\n // --- AFRICA ---\n [COUNTRY_CODES.EG]: ['Africa/Cairo'],\n [COUNTRY_CODES.NG]: ['Africa/Lagos'],\n [COUNTRY_CODES.ZA]: ['Africa/Johannesburg'],\n [COUNTRY_CODES.KE]: ['Africa/Nairobi'],\n [COUNTRY_CODES.MA]: ['Africa/Casablanca'],\n [COUNTRY_CODES.GH]: ['Africa/Accra'],\n [COUNTRY_CODES.ET]: ['Africa/Addis_Ababa'],\n [COUNTRY_CODES.TZ]: ['Africa/Dar_es_Salaam'],\n [COUNTRY_CODES.SN]: ['Africa/Dakar'],\n\n // --- OCEANIA ---\n [COUNTRY_CODES.AU]: [\n 'Australia/Sydney',\n 'Australia/Melbourne',\n 'Australia/Perth',\n 'Australia/Brisbane',\n ],\n [COUNTRY_CODES.NZ]: ['Pacific/Auckland'],\n [COUNTRY_CODES.FJ]: ['Pacific/Fiji'],\n [COUNTRY_CODES.PG]: ['Pacific/Port_Moresby'],\n\n // --- ANTARCTICA ---\n [COUNTRY_CODES.AQ]: ['Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Casey'],\n};\n\nexport const ALL_COUNTRY_TIMEZONES: string[] = Array.from(\n new Set(Object.values(COUNTRY_TIMEZONES).flat())\n);\n\n/**\n * A single record describing the available time zones for a given country.\n */\nexport interface CountryTimezoneEntry {\n countryCode: CountryCode;\n timeZones: string[];\n}\n\n/**\n * Full mapping of all countries → time zones.\n */\nexport type CountryTimezones = Record<CountryCode, string[]>;\n\n/**\n * A flattened list of all unique IANA time zones supported globally.\n */\nexport type AllTimezones = string[];\n\nexport const DAYS_OF_WEEK = Array.from({ length: DAYS_IN_WEEK }, (_, i) => i);\nexport const HOURS_OF_DAY = Array.from({ length: EARLY_MORNING_HOURS }, (_, i) => i);\n\n/**\n * Type for time constant values\n */\nexport type TimeConstant = (typeof TIME_CONSTANTS)[keyof typeof TIME_CONSTANTS];\n","/**\n * Mathematical Constants\n *\n * Common mathematical values, number system bases, and calculation constants\n * used throughout the application for various computations.\n *\n * @module math/constants\n */\n\n/**\n * Number system base constants\n */\nexport const NUMBER_SYSTEM = {\n // Number bases\n /**\n * Base 2 - Binary number system\n */\n BINARY_BASE: 2,\n\n /**\n * Base 8 - Octal number system\n */\n OCTAL_BASE: 8,\n\n /**\n * Base 10 - Decimal number system\n */\n DECIMAL_BASE: 10,\n\n /**\n * Base 12 - Duodecimal number system\n */\n DUODECIMAL_BASE: 12,\n\n /**\n * Base 16 - Hexadecimal number system\n */\n HEX_BASE: 16,\n\n /**\n * Base 32 - Base32 encoding\n */\n BASE32: 32,\n\n /**\n * Base 36 - Alphanumeric number system (0-9, a-z)\n */\n BASE36: 36,\n\n /**\n * Base 58 - Bitcoin base58 encoding (excludes similar looking characters)\n */\n BASE58: 58,\n\n /**\n * Base 62 - Alphanumeric with uppercase (0-9, a-z, A-Z)\n */\n BASE62: 62,\n\n /**\n * Base 64 - Base64 encoding\n */\n BASE64: 64,\n\n // Formatting and padding\n /**\n * Default padding length for hexadecimal values (e.g., \"0F\" instead of \"F\")\n */\n HEX_PAD_LENGTH: 2,\n\n /**\n * Padding length for RGB hex colors (6 characters)\n */\n HEX_COLOR_LENGTH: 6,\n\n /**\n * Padding length for RGBA hex colors with alpha (8 characters)\n */\n HEX_COLOR_ALPHA_LENGTH: 8,\n\n /**\n * Standard byte size in bits\n */\n BITS_PER_BYTE: 8,\n\n /**\n * Standard nibble size in bits (half byte)\n */\n BITS_PER_NIBBLE: 4,\n\n /**\n * Number of bytes in a kilobyte (binary)\n */\n BYTES_PER_KB: 1024,\n\n /**\n * Number of bytes in a megabyte (binary)\n */\n BYTES_PER_MB: 1048576,\n\n /**\n * Number of bytes in a gigabyte (binary)\n */\n BYTES_PER_GB: 1073741824,\n\n // Precision and rounding\n /**\n * Default decimal places for currency\n */\n CURRENCY_DECIMAL_PLACES: 2,\n\n /**\n * Default decimal places for percentages\n */\n PERCENTAGE_DECIMAL_PLACES: 2,\n\n /**\n * Default decimal places for coordinates\n */\n COORDINATE_DECIMAL_PLACES: 6,\n\n /**\n * Maximum safe integer in JavaScript\n */\n MAX_SAFE_INTEGER: 9007199254740991,\n\n /**\n * Minimum safe integer in JavaScript\n */\n MIN_SAFE_INTEGER: -9007199254740991,\n\n /**\n * Maximum 32-bit signed integer\n */\n MAX_INT32: 2147483647,\n\n /**\n * Minimum 32-bit signed integer\n */\n MIN_INT32: -2147483648,\n\n /**\n * Maximum 16-bit unsigned integer\n */\n MAX_UINT16: 65535,\n\n /**\n * Maximum 8-bit unsigned integer\n */\n MAX_UINT8: 255,\n\n // Common angles in degrees\n /**\n * Full circle in degrees\n */\n DEGREES_FULL_CIRCLE: 360,\n\n /**\n * Half circle in degrees\n */\n DEGREES_HALF_CIRCLE: 180,\n\n /**\n * Quarter circle in degrees (right angle)\n */\n DEGREES_RIGHT_ANGLE: 90,\n\n /**\n * Degrees in a radian\n */\n DEGREES_PER_RADIAN: 57.29577951308232,\n\n /**\n * Radians in a degree\n */\n RADIANS_PER_DEGREE: 0.017453292519943295,\n\n // Mathematical constants\n /**\n * Pi (π)\n */\n PI: 3.141592653589793,\n\n /**\n * Two times Pi (2π) - full circle in radians\n */\n TWO_PI: 6.283185307179586,\n\n /**\n * Half Pi (π/2) - quarter circle in radians\n */\n HALF_PI: 1.5707963267948966,\n\n /**\n * Euler's number (e)\n */\n E: 2.718281828459045,\n\n /**\n * Golden ratio (φ)\n */\n GOLDEN_RATIO: 1.618033988749895,\n\n /**\n * Square root of 2\n */\n SQRT2: 1.4142135623730951,\n\n /**\n * Square root of 3\n */\n SQRT3: 1.7320508075688772,\n\n /**\n * Natural logarithm of 2\n */\n LN2: 0.6931471805599453,\n\n /**\n * Natural logarithm of 10\n */\n LN10: 2.302585092994046,\n\n /**\n * Base 2 logarithm of E\n */\n LOG2E: 1.4426950408889634,\n\n /**\n * Base 10 logarithm of E\n */\n LOG10E: 0.4342944819032518,\n} as const;\n\n/**\n * Mathematical and percentage constants\n */\nexport const MATH_CONSTANTS = {\n /**\n * Maximum percentage value\n */\n PERCENTAGE_MAX: 100,\n\n /**\n * Half value (50%)\n */\n HALF: 0.5,\n\n /**\n * One tenth (10%)\n */\n TENTH: 0.1,\n\n /**\n * One twentieth (5%)\n */\n TWENTIETH: 0.05,\n\n /**\n * 95th percentile\n */\n PERCENT_95: 0.95,\n\n /**\n * 99th percentile\n */\n PERCENT_99: 0.99,\n\n /**\n * Threshold for quadratic algorithm detection\n */\n QUADRATIC_THRESHOLD: 1.5,\n\n /**\n * Threshold for exponential algorithm detection\n */\n EXPONENTIAL_THRESHOLD: 3,\n\n /**\n * Multiplier for variance calculations\n */\n VARIANCE_MULTIPLIER: 4,\n\n /**\n * Offset for variance calculations\n */\n VARIANCE_OFFSET: 2,\n} as const;\n\n/**\n * Common numeric multipliers for calculations\n */\nexport const MULTIPLIERS = {\n /**\n * One and a half times (1.5x)\n */\n ONE_AND_HALF: 1.5,\n\n /**\n * Double (2x)\n */\n DOUBLE: 2,\n\n /**\n * Triple (3x)\n */\n TRIPLE: 3,\n\n /**\n * Quadruple (4x)\n */\n QUADRUPLE: 4,\n\n /**\n * Quintuple (5x)\n */\n QUINTUPLE: 5,\n\n /**\n * Ten times (10x)\n */\n TEN: 10,\n} as const;\n\n/**\n * Common numeric constants for general use\n */\nexport const NUMERIC_CONSTANTS = {\n /**\n * Milliseconds in one second\n */\n MILLISECONDS_PER_SECOND: 1000,\n\n /**\n * Seconds in one minute\n */\n SECONDS_PER_MINUTE: 60,\n\n /**\n * Minutes in one hour\n */\n MINUTES_PER_HOUR: 60,\n\n /**\n * Hours in one day\n */\n HOURS_PER_DAY: 24,\n\n /**\n * Negative one (-1)\n */\n NEGATIVE_ONE: -1,\n\n /**\n * Zero (0)\n */\n ZERO: 0,\n\n /**\n * One (1)\n */\n ONE: 1,\n\n /**\n * Two (2)\n */\n TWO: 2,\n\n /**\n * Three (3)\n */\n THREE: 3,\n\n /**\n * Five (5)\n */\n FIVE: 5,\n\n /**\n * Ten (10)\n */\n TEN: 10,\n /**\n * One hour in seconds (3600)\n */\n ONE_HOUR_SECONDS: 3600,\n /**\n * Minimum pool size (1)\n */\n MIN_POOL_SIZE: 1,\n /**\n * Maximum pool size (100)\n */\n MAX_POOL_SIZE: 100,\n /**\n * Minimum timeout in milliseconds (1000)\n */\n MIN_TIMEOUT_MS: 1000,\n} as const;\n\n/**\n * Type for number system values\n */\nexport type NumberSystemBase = (typeof NUMBER_SYSTEM)[keyof typeof NUMBER_SYSTEM];\n\n/**\n * Type for math constant values\n */\nexport type MathConstant = (typeof MATH_CONSTANTS)[keyof typeof MATH_CONSTANTS];\n\n/**\n * Type for multiplier values\n */\nexport type Multiplier = (typeof MULTIPLIERS)[keyof typeof MULTIPLIERS];\n\n/**\n * Type for numeric constant values\n */\nexport type NumericConstant = (typeof NUMERIC_CONSTANTS)[keyof typeof NUMERIC_CONSTANTS];\n","/**\n * Performance Module\n *\n * Performance monitoring and benchmarking constants used for\n * measuring application performance, detecting memory leaks,\n * and configuring performance tests.\n *\n * @module performance\n */\n\n/**\n * Performance measurement constants\n */\nexport const PERFORMANCE_CONSTANTS = {\n /**\n * Threshold for detecting memory leaks (10% growth)\n */\n MEMORY_LEAK_THRESHOLD: 0.1,\n\n /**\n * Default number of benchmark runs for performance testing\n */\n DEFAULT_BENCHMARK_RUNS: 100,\n\n /**\n * Default number of warmup runs before benchmarking\n */\n DEFAULT_WARMUP_RUNS: 10,\n} as const;\n\n/**\n * Type for performance constant values\n */\nexport type PerformanceConstant =\n (typeof PERFORMANCE_CONSTANTS)[keyof typeof PERFORMANCE_CONSTANTS];\n","/**\n * Network-related Constants\n *\n * Constants for network operations including IP addresses,\n * byte ranges, and process identifiers.\n *\n * @module network/constants\n */\n\n/**\n * Network and connection constants\n */\nexport const NETWORK_CONSTANTS = {\n /**\n * Minimum value for an IPv4 octet (excluding 0 for first octet)\n */\n IPV4_OCTET_MIN: 1,\n\n /**\n * Maximum value for an IPv4 octet\n */\n IPV4_OCTET_MAX: 255,\n\n /**\n * Number of octets in an IPv4 address\n */\n IPV4_OCTET_COUNT: 4,\n\n /**\n * Maximum value for a random byte (256 exclusive)\n */\n RANDOM_BYTE_MAX: 256,\n\n /**\n * Default maximum process ID for testing\n */\n DEFAULT_PROCESS_ID_MAX: 10000,\n} as const;\n\n/**\n * Round-trip time (RTT) thresholds in milliseconds\n * Used to classify network latency quality\n */\nexport const RTT_THRESHOLDS = {\n /**\n * Excellent network latency - under 50ms\n */\n EXCELLENT: 50,\n\n /**\n * Good network latency - under 150ms\n */\n GOOD: 150,\n\n /**\n * Fair network latency - under 400ms\n */\n FAIR: 400,\n} as const;\n\n/**\n * Network speed thresholds in Mbps\n * Used to classify connection speed quality\n */\nexport const SPEED_THRESHOLDS = {\n /**\n * Excellent connection speed - 10+ Mbps\n */\n EXCELLENT: 10,\n\n /**\n * Good connection speed - 2+ Mbps\n */\n GOOD: 2,\n\n /**\n * Fair connection speed - 0.5+ Mbps\n */\n FAIR: 0.5,\n} as const;\n\n/**\n * Network quality scores (0-100 scale)\n * Used to quantify overall network performance\n */\nexport const NETWORK_SCORES = {\n /**\n * Excellent network quality score\n */\n EXCELLENT: 100,\n\n /**\n * Good network quality score\n */\n GOOD: 75,\n\n /**\n * Fair network quality score\n */\n FAIR: 50,\n\n /**\n * Poor network quality score\n */\n POOR: 25,\n\n /**\n * Offline - no network connection\n */\n OFFLINE: 0,\n} as const;\n\n/**\n * Network timeout constants in milliseconds\n * Used for request timeout configuration based on network quality\n */\nexport const NETWORK_TIMEOUTS = {\n /**\n * Fast network timeout - 15 seconds\n */\n FAST: 15000,\n\n /**\n * Medium network timeout - 30 seconds\n */\n MEDIUM: 30000,\n\n /**\n * Slow network timeout - 60 seconds\n */\n SLOW: 60000,\n\n /**\n * Very slow network timeout - 90 seconds\n */\n VERY_SLOW: 90000,\n\n /**\n * Offline timeout - 5 seconds (fail fast)\n */\n OFFLINE: 5000,\n} as const;\n\n/**\n * Cache TTL (Time-To-Live) constants in seconds\n * Used for cache expiration strategies\n */\nexport const CACHE_TTL = {\n /**\n * Short cache TTL - 5 minutes\n */\n SHORT: 300,\n\n /**\n * Medium cache TTL - 10 minutes\n */\n MEDIUM: 600,\n\n /**\n * Long cache TTL - 30 minutes\n */\n LONG: 1800,\n} as const;\n\n/**\n * Cache stale time constants in seconds\n * Used to determine when cached data is considered stale\n */\nexport const CACHE_STALE = {\n /**\n * Short stale time - 1 minute\n */\n SHORT: 60,\n\n /**\n * Medium stale time - 5 minutes\n */\n MEDIUM: 300,\n\n /**\n * Long stale time - 15 minutes\n */\n LONG: 900,\n} as const;\n\n/**\n * Request deduplication time constants in milliseconds\n * Used to prevent duplicate requests within time windows\n */\nexport const DEDUPE_TIME = {\n /**\n * Aggressive deduplication - 1 second\n */\n AGGRESSIVE: 1000,\n\n /**\n * Balanced deduplication - 2 seconds\n */\n BALANCED: 2000,\n\n /**\n * Conservative deduplication - 5 seconds\n */\n CONSERVATIVE: 5000,\n} as const;\n\n/**\n * Retry attempt constants\n * Number of retry attempts for failed requests\n */\nexport const RETRY_ATTEMPTS = {\n /**\n * Few retry attempts - 2\n */\n FEW: 2,\n\n /**\n * Standard retry attempts - 3\n */\n STANDARD: 3,\n\n /**\n * Many retry attempts - 5\n */\n MANY: 5,\n} as const;\n\n/**\n * Retry delay constants in milliseconds\n * Initial delays between retry attempts\n */\nexport const RETRY_DELAYS = {\n /**\n * Short retry delay - 1 second\n */\n SHORT: 1000,\n\n /**\n * Long retry delay - 2 seconds\n */\n LONG: 2000,\n\n /**\n * Maximum retry delay - 30 seconds\n */\n MAX: 30000,\n} as const;\n\n/**\n * Retry backoff multiplier constants\n * Exponential backoff multipliers for retry delays\n */\nexport const RETRY_BACKOFF = {\n /**\n * Small backoff multiplier - 1.5x\n */\n SMALL: 1.5,\n\n /**\n * Medium backoff multiplier - 2x\n */\n MEDIUM: 2,\n\n /**\n * Large backoff multiplier - 2.5x\n */\n LARGE: 2.5,\n} as const;\n\n/**\n * Batch size constants\n * Number of items to process in a single batch\n */\nexport const BATCH_SIZES = {\n /**\n * Huge batch size - 50 items\n */\n HUGE: 50,\n\n /**\n * Large batch size - 25 items\n */\n LARGE: 25,\n\n /**\n * Medium batch size - 10 items\n */\n MEDIUM: 10,\n\n /**\n * Small batch size - 5 items\n */\n SMALL: 5,\n\n /**\n * No batching - 0 items\n */\n NONE: 0,\n} as const;\n\n/**\n * Page size constants\n * Number of items per page for pagination\n */\nexport const PAGE_SIZES = {\n /**\n * Huge page size - 100 items\n */\n HUGE: 100,\n\n /**\n * Large page size - 50 items\n */\n LARGE: 50,\n\n /**\n * Medium page size - 25 items\n */\n MEDIUM: 25,\n\n /**\n * Small page size - 10 items\n */\n SMALL: 10,\n\n /**\n * No pagination - 0 items\n */\n NONE: 0,\n} as const;\n\n/**\n * Type for network constant values\n */\nexport type NetworkConstant = (typeof NETWORK_CONSTANTS)[keyof typeof NETWORK_CONSTANTS];\n\n/**\n * Type for RTT threshold values\n */\nexport type RTTThreshold = (typeof RTT_THRESHOLDS)[keyof typeof RTT_THRESHOLDS];\n\n/**\n * Type for speed threshold values\n */\nexport type SpeedThreshold = (typeof SPEED_THRESHOLDS)[keyof typeof SPEED_THRESHOLDS];\n\n/**\n * Type for network score values\n */\nexport type NetworkScore = (typeof NETWORK_SCORES)[keyof typeof NETWORK_SCORES];\n\n/**\n * Type for network timeout values\n */\nexport type NetworkTimeout = (typeof NETWORK_TIMEOUTS)[keyof typeof NETWORK_TIMEOUTS];\n\n/**\n * Type for cache TTL values\n */\nexport type CacheTTL = (typeof CACHE_TTL)[keyof typeof CACHE_TTL];\n\n/**\n * Type for cache stale values\n */\nexport type CacheStale = (typeof CACHE_STALE)[keyof typeof CACHE_STALE];\n\n/**\n * Type for dedupe time values\n */\nexport type DedupeTime = (typeof DEDUPE_TIME)[keyof typeof DEDUPE_TIME];\n\n/**\n * Type for retry attempt values\n */\nexport type RetryAttempt = (typeof RETRY_ATTEMPTS)[keyof typeof RETRY_ATTEMPTS];\n\n/**\n * Type for retry delay values\n */\nexport type RetryDelay = (typeof RETRY_DELAYS)[keyof typeof RETRY_DELAYS];\n\n/**\n * Type for retry backoff values\n */\nexport type RetryBackoff = (typeof RETRY_BACKOFF)[keyof typeof RETRY_BACKOFF];\n\n/**\n * Type for batch size values\n */\nexport type BatchSize = (typeof BATCH_SIZES)[keyof typeof BATCH_SIZES];\n\n/**\n * Type for page size values\n */\nexport type PageSize = (typeof PAGE_SIZES)[keyof typeof PAGE_SIZES];\n","/**\n * Display and Character Constants\n *\n * Constants for display formatting, charting,\n * and character code operations.\n *\n * @module display/constants\n */\n\n/**\n * Display and chart formatting constants\n */\nexport const DISPLAY_CONSTANTS = {\n /**\n * Maximum length for chart bar display\n */\n CHART_BAR_MAX_LENGTH: 40,\n\n /**\n * Length of chart separator lines\n */\n CHART_SEPARATOR_LENGTH: 60,\n\n /**\n * Number of decimal places for display precision\n */\n DECIMAL_PRECISION: 3,\n} as const;\n\n/**\n * Character code constants\n */\nexport const CHAR_CODES = {\n /**\n * ASCII code for lowercase 'a'\n */\n LOWERCASE_A: 97,\n\n /**\n * Number of letters in the alphabet\n */\n ALPHABET_SIZE: 26,\n\n /**\n * ASCII code for space character\n */\n SPACE: 32,\n} as const;\n\n/**\n * Type for display constant values\n */\nexport type DisplayConstant = (typeof DISPLAY_CONSTANTS)[keyof typeof DISPLAY_CONSTANTS];\n\n/**\n * Type for character code values\n */\nexport type CharCode = (typeof CHAR_CODES)[keyof typeof CHAR_CODES];\n","/**\n * A centralized collection of numeric constants used to avoid magic numbers across the codebase.\n *\n * Purpose:\n * - Provide named aliases for common numeric values so intent is clearer and maintenance is easier.\n * - Keep commonly used numeric literals (counts, thresholds, time durations, limits) in one place.\n *\n * Typical uses:\n * - Time and duration calculations (e.g., seconds/minutes/hours, TTLs, timeouts).\n * - Pagination, limit and capacity defaults.\n * - Validation thresholds, scaling factors and numeric formatting.\n * - Bit/byte or base arithmetic where small numeric constants improve readability.\n *\n * Properties (brief intent and common usage):\n * - TWO (2) — small counts, boolean-like numeric operations, pair-related logic.\n * - FIVE (5) — small retry counts or UI/validation limits.\n * - NINE (9) — index/format boundaries or small-range checks.\n * - TEN (10) — decimal/base operations, digit limits, common loop bounds.\n * - SIXTEEN (16) — bit/hex operations, buffer sizes or base-16 related math.\n * - TWENTY_FOUR (24) — hours-in-day, daily calculations.\n * - THIRTY_SIX (36) — base-36 or domain-specific scaling factors.\n * - SIXTY (60) — seconds/minutes conversions.\n * - NINETY (90) — percentage/angle thresholds or large-range caps.\n * - HUNDERD (100) — percentage base or general scaling (note: name preserved for backward compatibility).\n * - THOUSAND (1000) — millisecond/rounding bases or thousand-scale thresholds.\n * - FIVE_THOUSAND (5000) — medium-duration timeouts or capacity hints (e.g., ms).\n * - THREE_HUNDERD (300) — short timeouts or conventional numeric boundaries (name preserved).\n * - THIRTY_SIX_HUNDERD (3600) — seconds-per-hour; common default TTL/cache durations (3600 seconds).\n * - THIRTY_THOUSAND (30000) — longer timeouts/polling intervals in milliseconds.\n *\n * Remarks:\n * - Using these constants improves readability and makes it easier to change a value in one place.\n * - Several keys contain spelling inconsistencies (e.g., \"HUNDERD\", \"THREE_HUNDERD\", \"THIRTY_SIX_HUNDERD\") — keep names stable to avoid breaking callers; consider normalizing names in a planned refactor.\n *\n * Example:\n * - const timeoutMs = digits.FIVE_THOUSAND; // use 5000 ms timeout\n * - const hourlySeconds = digits.THIRTY_SIX_HUNDERD; // use 3600 seconds for TTL\n */\nexport const NUMERIX = {\n TWO: 2,\n FIVE: 5,\n NINE: 9,\n TEN: 10,\n TWENTY_FOUR: 24,\n THIRTY_SIX: 36,\n FIFTY: 50,\n SIXTY: 60,\n NINETY: 90,\n HUNDERD: 100,\n FIVE_HUNDERD: 500,\n ONE_THOUSAND_AND_FIVE_HUNDERD: 1500,\n THOUSAND: 1000,\n TWO_THOUSAND: 2000,\n THREE_THOUSAND: 3000,\n FOUR_THOUSAND: 4000,\n FIVE_THOUSAND: 5000,\n THIRTY_SIX_HUNDERD: 3600,\n THREE_HUNDERD: 300,\n SIXTEEN: 16,\n TWENTY_THOUSAND: 20000,\n THIRTY_THOUSAND: 30000,\n FORTY_FIVE_THOUSAND: 45000,\n FIFTY_THOUSAND: 50000,\n SIXTY_THOUSAND: 60000,\n};\n","// Default configuration for the dynamic PostgreSQL connection pool.\n// Defines minimum/maximum connections, timeouts, and auto-scaling thresholds\n// to maintain optimal performance and resource utilization.\nexport const dynamicPoolDefaultConfig = {\n min: 2,\n max: 10,\n idleTimeoutMillis: 30000,\n acquireTimeoutMillis: 10000,\n scaling: {\n enabled: true,\n scaleUpThreshold: 80, // Scale up when pool usage exceeds 80%\n scaleDownThreshold: 20, // Scale down when usage drops below 20%\n scaleInterval: 30000, // Interval (ms) to check scaling conditions\n maxScale: 2, // Maximum scaling multiplier\n },\n};\n","/**\n * Social media platform URLs\n */\nexport const SOCIAL_LINKS = {\n /**\n * X (formerly Twitter) profile URL\n */\n x: 'https://x.com/Plyaz_',\n\n /**\n * Instagram profile URL\n */\n instagram: 'https://instagram.com/plyaz_',\n\n /**\n * LinkedIn company page URL\n */\n linkedin: 'https://linkedin.com/company/plyaz',\n} as const;\n\n/**\n * Product-related external links\n */\nexport const PRODUCT_LINKS = {\n /**\n * Documentation site URL\n */\n docs: 'https://plyaz.gitbook.io/plyaz',\n\n /**\n * Community platform URL\n */\n community: 'https://community.plyaz.co.uk',\n\n /**\n * Support email address\n */\n support: 'mailto:help@plyaz.co.uk',\n} as const;\n\n/**\n * Blog configuration constants\n */\nexport const BLOG = {\n /**\n * Number of posts to display initially\n */\n INITIAL_POSTS_TO_SHOW: 3,\n\n /**\n * Number of posts to load when \"Load More\" is clicked\n */\n POSTS_INCREMENT: 3,\n\n /**\n * Animation delay in milliseconds between post appearances\n */\n ANIMATION_DELAY: 100,\n} as const;\n","/**\n * Accessibility (a11y) Constants\n *\n * WCAG compliance constants, ARIA attributes, color contrast calculations,\n * and other accessibility-related values used throughout the application.\n *\n * @module a11y/constants\n */\n\n/**\n * Core accessibility constants for testing and validation\n */\nexport const A11Y_CONSTANTS = {\n // Focus and interaction timing\n /**\n * Delay before checking focus state (milliseconds)\n */\n FOCUS_CHECK_DELAY: 100,\n\n /**\n * Maximum number of tab key presses for focus testing\n */\n FOCUS_TAB_COUNT: 10,\n\n /**\n * Minimum time for focus to be visible (milliseconds)\n */\n MIN_FOCUS_VISIBLE_TIME: 200,\n\n /**\n * Maximum time to wait for focus change (milliseconds)\n */\n MAX_FOCUS_WAIT_TIME: 3000,\n\n /**\n * Debounce delay for screen reader announcements (milliseconds)\n */\n SCREEN_READER_DEBOUNCE: 150,\n\n // Text size thresholds\n /**\n * Minimum font size for large text (points)\n */\n MIN_LARGE_TEXT_SIZE: 18,\n\n /**\n * Minimum font size for bold large text (points)\n */\n MIN_LARGE_TEXT_BOLD_SIZE: 14,\n\n /**\n * Minimum font size for normal text (points)\n */\n MIN_NORMAL_TEXT_SIZE: 14,\n\n /**\n * Minimum touch target size (pixels) - WCAG 2.5.5\n */\n MIN_TOUCH_TARGET_SIZE: 44,\n\n /**\n * Minimum touch target size for inline elements (pixels)\n */\n MIN_INLINE_TARGET_SIZE: 24,\n\n // Color and contrast calculations\n /**\n * Maximum value for RGB color channels\n */\n COLOR_CHANNEL_MAX: 255,\n\n /**\n * sRGB threshold for luminance calculation\n */\n SRGB_THRESHOLD: 0.03928,\n\n /**\n * sRGB divisor for linear conversion\n */\n SRGB_DIVISOR: 12.92,\n\n /**\n * sRGB offset for gamma correction\n */\n SRGB_OFFSET: 0.055,\n\n /**\n * sRGB scale factor for gamma correction\n */\n SRGB_SCALE: 1.055,\n\n /**\n * sRGB exponent for gamma correction\n */\n SRGB_EXPONENT: 2.4,\n\n /**\n * Red channel weight for luminance calculation\n */\n LUMINANCE_RED: 0.2126,\n\n /**\n * Green channel weight for luminance calculation\n */\n LUMINANCE_GREEN: 0.7152,\n\n /**\n * Blue channel weight for luminance calculation\n */\n LUMINANCE_BLUE: 0.0722,\n\n /**\n * Offset added to luminance for contrast ratio calculation\n */\n LUMINANCE_OFFSET: 0.05,\n\n // WCAG contrast ratios\n /**\n * Minimum contrast ratio for AA compliance (normal text)\n */\n CONTRAST_RATIO_AA: 4.5,\n\n /**\n * Minimum contrast ratio for AA compliance (large text)\n */\n CONTRAST_RATIO_AA_LARGE: 3,\n\n /**\n * Minimum contrast ratio for AAA compliance (normal text)\n */\n CONTRAST_RATIO_AAA: 7,\n\n /**\n * Minimum contrast ratio for AAA compliance (large text)\n */\n CONTRAST_RATIO_AAA_LARGE: 4.5,\n\n /**\n * Minimum contrast ratio for non-text elements (graphics, UI components)\n */\n CONTRAST_RATIO_GRAPHICS: 3,\n\n /**\n * Maximum percentage value\n */\n PERCENTAGE_MAX: 100,\n\n // Animation and motion\n /**\n * Maximum duration for essential animations (milliseconds)\n */\n MAX_ESSENTIAL_ANIMATION_DURATION: 5000,\n\n /**\n * Default duration for reduced motion (milliseconds)\n */\n REDUCED_MOTION_DURATION: 1,\n\n /**\n * Maximum flashes per second to avoid seizures (WCAG 2.3.1)\n */\n MAX_FLASH_RATE: 3,\n\n /**\n * Minimum time between auto-updating content (seconds)\n */\n MIN_AUTO_UPDATE_INTERVAL: 5,\n\n // Timing and session\n /**\n * Minimum warning time before timeout (seconds) - WCAG 2.2.1\n */\n MIN_TIMEOUT_WARNING: 20,\n\n /**\n * Default session timeout (minutes)\n */\n DEFAULT_SESSION_TIMEOUT: 20,\n\n /**\n * Extended session timeout for accessibility (minutes)\n */\n EXTENDED_SESSION_TIMEOUT: 120,\n\n // Audio and video\n /**\n * Maximum background audio level (dB) - WCAG 1.4.7\n */\n MAX_BACKGROUND_AUDIO_LEVEL: -20,\n\n /**\n * Default caption offset from bottom (pixels)\n */\n DEFAULT_CAPTION_OFFSET: 50,\n\n /**\n * Minimum caption font size (pixels)\n */\n MIN_CAPTION_FONT_SIZE: 16,\n\n /**\n * Default audio description delay (milliseconds)\n */\n AUDIO_DESCRIPTION_DELAY: 100,\n\n // Form validation\n /**\n * Delay before showing validation errors (milliseconds)\n */\n VALIDATION_DELAY: 1000,\n\n /**\n * Maximum error message length for screen readers\n */\n MAX_ERROR_MESSAGE_LENGTH: 150,\n\n /**\n * Minimum password length for accessibility\n */\n MIN_PASSWORD_LENGTH: 8,\n\n // Zoom and scaling\n /**\n * Maximum zoom level without horizontal scrolling (percentage)\n */\n MAX_ZOOM_WITHOUT_SCROLL: 200,\n\n /**\n * Minimum zoom level supported (percentage)\n */\n MIN_ZOOM_LEVEL: 50,\n\n /**\n * Maximum zoom level supported (percentage)\n */\n MAX_ZOOM_LEVEL: 500,\n\n // Reading and comprehension\n /**\n * Maximum line length for readability (characters)\n */\n MAX_LINE_LENGTH: 80,\n\n /**\n * Optimal line length for reading (characters)\n */\n OPTIMAL_LINE_LENGTH: 66,\n\n /**\n * Minimum line height for readability\n */\n MIN_LINE_HEIGHT: 1.5,\n\n /**\n * Maximum paragraph width for readability (pixels)\n */\n MAX_PARAGRAPH_WIDTH: 600,\n} as const;\n\n/**\n * ARIA roles for semantic HTML\n */\nexport const ARIA_ROLES = {\n // Landmark roles\n BANNER: 'banner',\n COMPLEMENTARY: 'complementary',\n CONTENTINFO: 'contentinfo',\n FORM: 'form',\n MAIN: 'main',\n NAVIGATION: 'navigation',\n REGION: 'region',\n SEARCH: 'search',\n\n // Structure roles\n APPLICATION: 'application',\n ARTICLE: 'article',\n CELL: 'cell',\n COLUMNHEADER: 'columnheader',\n DEFINITION: 'definition',\n DIRECTORY: 'directory',\n DOCUMENT: 'document',\n FEED: 'feed',\n FIGURE: 'figure',\n GROUP: 'group',\n HEADING: 'heading',\n IMG: 'img',\n LIST: 'list',\n LISTITEM: 'listitem',\n MATH: 'math',\n NOTE: 'note',\n PRESENTATION: 'presentation',\n ROW: 'row',\n ROWGROUP: 'rowgroup',\n ROWHEADER: 'rowheader',\n SEPARATOR: 'separator',\n TABLE: 'table',\n TERM: 'term',\n\n // Widget roles\n ALERT: 'alert',\n ALERTDIALOG: 'alertdialog',\n BUTTON: 'button',\n CHECKBOX: 'checkbox',\n COMBOBOX: 'combobox',\n DIALOG: 'dialog',\n GRIDCELL: 'gridcell',\n LINK: 'link',\n LISTBOX: 'listbox',\n LOG: 'log',\n MARQUEE: 'marquee',\n MENU: 'menu',\n MENUBAR: 'menubar',\n MENUITEM: 'menuitem',\n MENUITEMCHECKBOX: 'menuitemcheckbox',\n MENUITEMRADIO: 'menuitemradio',\n OPTION: 'option',\n PROGRESSBAR: 'progressbar',\n RADIO: 'radio',\n RADIOGROUP: 'radiogroup',\n SCROLLBAR: 'scrollbar',\n SEARCHBOX: 'searchbox',\n SLIDER: 'slider',\n SPINBUTTON: 'spinbutton',\n STATUS: 'status',\n SWITCH: 'switch',\n TAB: 'tab',\n TABLIST: 'tablist',\n TABPANEL: 'tabpanel',\n TEXTBOX: 'textbox',\n TIMER: 'timer',\n TOOLBAR: 'toolbar',\n TOOLTIP: 'tooltip',\n TREE: 'tree',\n TREEGRID: 'treegrid',\n TREEITEM: 'treeitem',\n\n // Abstract roles (should not be used directly)\n COMMAND: 'command',\n COMPOSITE: 'composite',\n INPUT: 'input',\n LANDMARK: 'landmark',\n RANGE: 'range',\n ROLETYPE: 'roletype',\n SECTION: 'section',\n SECTIONHEAD: 'sectionhead',\n SELECT: 'select',\n STRUCTURE: 'structure',\n WIDGET: 'widget',\n WINDOW: 'window',\n} as const;\n\n/**\n * Common ARIA attributes\n */\nexport const ARIA_ATTRIBUTES = {\n // Widget attributes\n ARIA_AUTOCOMPLETE: 'aria-autocomplete',\n ARIA_CHECKED: 'aria-checked',\n ARIA_DISABLED: 'aria-disabled',\n ARIA_ERRORMESSAGE: 'aria-errormessage',\n ARIA_EXPANDED: 'aria-expanded',\n ARIA_HASPOPUP: 'aria-haspopup',\n ARIA_HIDDEN: 'aria-hidden',\n ARIA_INVALID: 'aria-invalid',\n ARIA_LABEL: 'aria-label',\n ARIA_LEVEL: 'aria-level',\n ARIA_MODAL: 'aria-modal',\n ARIA_MULTILINE: 'aria-multiline',\n ARIA_MULTISELECTABLE: 'aria-multiselectable',\n ARIA_ORIENTATION: 'aria-orientation',\n ARIA_PLACEHOLDER: 'aria-placeholder',\n ARIA_PRESSED: 'aria-pressed',\n ARIA_READONLY: 'aria-readonly',\n ARIA_REQUIRED: 'aria-required',\n ARIA_SELECTED: 'aria-selected',\n ARIA_SORT: 'aria-sort',\n ARIA_VALUEMAX: 'aria-valuemax',\n ARIA_VALUEMIN: 'aria-valuemin',\n ARIA_VALUENOW: 'aria-valuenow',\n ARIA_VALUETEXT: 'aria-valuetext',\n\n // Live region attributes\n ARIA_LIVE: 'aria-live',\n ARIA_ATOMIC: 'aria-atomic',\n ARIA_RELEVANT: 'aria-relevant',\n ARIA_BUSY: 'aria-busy',\n\n // Drag and drop attributes\n ARIA_DROPEFFECT: 'aria-dropeffect',\n ARIA_GRABBED: 'aria-grabbed',\n\n // Relationship attributes\n ARIA_ACTIVEDESCENDANT: 'aria-activedescendant',\n ARIA_COLCOUNT: 'aria-colcount',\n ARIA_COLINDEX: 'aria-colindex',\n ARIA_COLSPAN: 'aria-colspan',\n ARIA_CONTROLS: 'aria-controls',\n ARIA_DESCRIBEDBY: 'aria-describedby',\n ARIA_DETAILS: 'aria-details',\n ARIA_FLOWTO: 'aria-flowto',\n ARIA_LABELLEDBY: 'aria-labelledby',\n ARIA_OWNS: 'aria-owns',\n ARIA_POSINSET: 'aria-posinset',\n ARIA_ROWCOUNT: 'aria-rowcount',\n ARIA_ROWINDEX: 'aria-rowindex',\n ARIA_ROWSPAN: 'aria-rowspan',\n ARIA_SETSIZE: 'aria-setsize',\n\n // Global attributes\n ARIA_CURRENT: 'aria-current',\n ARIA_DESCRIPTION: 'aria-description',\n ARIA_KEYSHORTCUTS: 'aria-keyshortcuts',\n ARIA_ROLEDESCRIPTION: 'aria-roledescription',\n} as const;\n\n/**\n * Keyboard navigation constants\n */\nexport const KEYBOARD_CODES = {\n // Navigation keys\n TAB: 'Tab',\n ENTER: 'Enter',\n SPACE: ' ',\n ESCAPE: 'Escape',\n ARROW_UP: 'ArrowUp',\n ARROW_DOWN: 'ArrowDown',\n ARROW_LEFT: 'ArrowLeft',\n ARROW_RIGHT: 'ArrowRight',\n HOME: 'Home',\n END: 'End',\n PAGE_UP: 'PageUp',\n PAGE_DOWN: 'PageDown',\n\n // Legacy key codes (for compatibility)\n TAB_KEYCODE: 9,\n ENTER_KEYCODE: 13,\n ESCAPE_KEYCODE: 27,\n SPACE_KEYCODE: 32,\n ARROW_LEFT_KEYCODE: 37,\n ARROW_UP_KEYCODE: 38,\n ARROW_RIGHT_KEYCODE: 39,\n ARROW_DOWN_KEYCODE: 40,\n} as const;\n\n/**\n * Screen reader announcement priorities\n */\nexport const ANNOUNCEMENT_PRIORITY = {\n /**\n * Polite announcement - waits for current speech to finish\n */\n POLITE: 'polite',\n\n /**\n * Assertive announcement - interrupts current speech\n */\n ASSERTIVE: 'assertive',\n\n /**\n * Off - no announcement\n */\n OFF: 'off',\n} as const;\n\n/**\n * Focus trap configurations\n */\nexport const FOCUS_TRAP = {\n /**\n * Initial focus selector\n */\n INITIAL_FOCUS: '[data-focus-initial], [autofocus]',\n\n /**\n * Focusable elements selector\n */\n FOCUSABLE_ELEMENTS:\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])',\n\n /**\n * Interactive elements selector\n */\n INTERACTIVE_ELEMENTS: 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n\n /**\n * Skip link selector\n */\n SKIP_LINK: '[data-skip-link], .skip-link',\n} as const;\n\n/**\n * Type exports\n */\nexport type A11yConstant = (typeof A11Y_CONSTANTS)[keyof typeof A11Y_CONSTANTS];\nexport type AriaRole = (typeof ARIA_ROLES)[keyof typeof ARIA_ROLES];\nexport type AriaAttribute = (typeof ARIA_ATTRIBUTES)[keyof typeof ARIA_ATTRIBUTES];\nexport type KeyboardCode = (typeof KEYBOARD_CODES)[keyof typeof KEYBOARD_CODES];\nexport type AnnouncementPriority =\n (typeof ANNOUNCEMENT_PRIORITY)[keyof typeof ANNOUNCEMENT_PRIORITY];\n","import type { EventScope } from '@plyaz/types/errors';\n\n// Errors Code with messages\nexport const ERRORS_CODES = {\n validation_error: {\n status: 400,\n message: 'errors.validation.error',\n },\n unauthorized: {\n status: 401,\n message: 'errors.auth.unauthorized',\n },\n payment_failed: {\n status: 402,\n message: 'errors.payment.failed',\n },\n forbidden: {\n status: 403,\n message: 'errors.auth.forbidden',\n },\n not_found: {\n status: 404,\n message: 'errors.common.notFound',\n },\n method_not_allowed: {\n status: 405,\n message: 'errors.common.methodNotAllowed',\n },\n user_already_exists: {\n status: 409,\n message: 'errors.user.alreadyExists',\n },\n unprocessable_entity: {\n status: 422,\n message: 'errors.validation.unprocessable',\n },\n too_many_requests: {\n status: 429,\n message: 'errors.rateLimit.tooManyRequests',\n },\n internal_server_error: {\n status: 500,\n message: 'errors.server.internal',\n },\n not_implemented: {\n status: 501,\n message: 'errors.server.notImplemented',\n },\n bad_gateway: {\n status: 502,\n message: 'errors.server.badGateway',\n },\n service_unavailable: {\n status: 503,\n message: 'errors.server.serviceUnavailable',\n },\n gateway_timeout: {\n status: 504,\n message: 'errors.server.gatewayTimeout',\n },\n} as const;\n\nexport const BASE_ERRORS_RESPONSE = {\n ['InvalidInput']: {\n type: 'form',\n message: 'Invalid input',\n timestamp: new Date().toISOString(),\n },\n [ERRORS_CODES.internal_server_error.status]: {\n type: 'server',\n message: 'Something went wrong',\n timestamp: new Date().toISOString(),\n },\n [ERRORS_CODES.unauthorized.status]: {\n type: 'auth',\n message: 'Please log in again',\n timestamp: new Date().toISOString(),\n },\n};\n\n/**\n * Default event scopes for errors\n */\nexport const DEFAULT_ERROR_EVENT_SCOPES = [\n 'GLOBAL',\n 'CONFIG',\n 'CLIENT',\n 'REQUEST',\n 'TEMPORARY',\n] as const as EventScope[];\n","// levels of the loggers\nexport const LOGGER_LEVELS = {\n trace: 10,\n debug: 20,\n info: 30,\n warn: 40,\n error: 50,\n fatal: 60,\n};\n\n// Sensitive fields excluded from logs\nexport const SENSITIVE_DATA = ['email', 'password', 'wallet', 'token', 'secret', 'ssn'];\n\nexport const LOGGER_TRANSPORT_CONFIGURATION = [\n {\n target: 'pino-pretty',\n options: {\n colorize: true,\n },\n },\n];\n","/**\n * API Encryption Constants\n *\n * Centralized constants for API encryption configuration.\n * Uses Web Crypto API compatible algorithms.\n *\n * @module config/api/encryption\n */\n\nimport type {\n EncryptionAlgorithm,\n KeyFormat,\n EncryptionKey,\n EncryptionConfig,\n} from '@plyaz/types/api';\n\n/**\n * Default encryption configuration values for API clients\n */\nexport const API_ENCRYPTION_DEFAULTS = {\n /** Default algorithm - AES-GCM is recommended for Web Crypto API */\n ALGORITHM: 'AES-GCM' as EncryptionAlgorithm,\n\n /** Default key format */\n KEY_FORMAT: 'base64' as KeyFormat,\n\n /** Default key ID for frontend clients */\n FRONTEND_KEY_ID: 'frontend-key',\n\n /** Default key ID for backend clients */\n BACKEND_KEY_ID: 'backend-key',\n} as const;\n\n/**\n * Create a default encryption key configuration\n *\n * @param key - The encryption key (base64 encoded)\n * @param options - Optional overrides\n * @returns EncryptionKey configuration\n *\n * @example\n * ```ts\n * const encryptionKey = createDefaultEncryptionKey(process.env.API_ENCRYPTION_KEY!);\n * ```\n */\nexport function createDefaultEncryptionKey(\n key: string,\n options?: {\n id?: string;\n format?: KeyFormat;\n algorithm?: EncryptionAlgorithm;\n }\n): EncryptionKey {\n return {\n id: options?.id ?? API_ENCRYPTION_DEFAULTS.FRONTEND_KEY_ID,\n key,\n format: options?.format ?? API_ENCRYPTION_DEFAULTS.KEY_FORMAT,\n algorithm: options?.algorithm ?? API_ENCRYPTION_DEFAULTS.ALGORITHM,\n };\n}\n\n/**\n * Create the full encryption configuration for API clients\n *\n * @param key - The encryption key (base64 encoded)\n * @param options - Optional overrides for key and config\n * @returns Full EncryptionConfig ready for use\n *\n * @example\n * ```ts\n * // Basic usage\n * const encryptionConfig = createEncryptionConfig(process.env.API_ENCRYPTION_KEY!);\n *\n * // With overrides\n * const encryptionConfig = createEncryptionConfig(key, {\n * algorithm: 'AES-CBC',\n * keyId: 'custom-key-id',\n * });\n * ```\n */\nexport function createEncryptionConfig(\n key: string,\n options?: {\n algorithm?: EncryptionAlgorithm;\n keyId?: string;\n keyFormat?: KeyFormat;\n }\n): EncryptionConfig {\n return {\n enabled: true,\n algorithm: options?.algorithm ?? API_ENCRYPTION_DEFAULTS.ALGORITHM,\n key: createDefaultEncryptionKey(key, {\n id: options?.keyId,\n format: options?.keyFormat,\n algorithm: options?.algorithm,\n }),\n };\n}\n","/**\n * API Client Environment Configurations\n *\n * Provides environment-specific default configurations for the API client service.\n * These configs are optimized for production, staging, and development environments.\n *\n * @module config/api/environments\n */\n\nimport type { ApiConfig, HeaderPresetName, EncryptionKey } from '@plyaz/types/api';\nimport { TIME_CONSTANTS } from '../time';\n\n/**\n * Production configuration for the API client service.\n * Optimized for reliability, security, and performance in production environments.\n *\n * Key Production Features:\n * - Encryption REQUIRED (enforced)\n * - Minimal headers (privacy-focused)\n * - Network adaptation enabled (auto-adjust to conditions)\n * - Balanced telemetry (monitoring without overhead)\n * - Aggressive retry strategy (5 attempts with exponential backoff)\n * - Uses retry PRESET strings instead of hardcoded values\n */\nexport const PRODUCTION_CONFIG: Partial<ApiConfig> = {\n // Core settings\n timeout: TIME_CONSTANTS.THIRTY_SECONDS,\n\n // Unified strategy - includes cache, retry, performance strategies\n // 'interactive' = standard cache + standard retry + balanced performance\n unifiedStrategy: 'interactive',\n\n // Revalidation strategy - NOT covered by unifiedStrategy\n // Controls when to revalidate cached data (SWR pattern)\n revalidationStrategy: 'balanced', // Revalidate on focus, network reconnect\n\n // Error handling strategy - return {data, error} without throwing\n strategy: 'softFail',\n\n // Default JSON headers for most API interactions\n headers: {\n presets: ['json' as unknown as HeaderPresetName] as const, // Sets Accept and Content-Type to application/json\n autoDetectNetwork: true,\n requestClientHints: false,\n },\n\n // Enriched headers - minimal preset with GLOBAL compliance\n // Adds ~5-7 headers: platform, app version, timezone, locale, network type\n // Privacy-conscious: respects DNT, no device fingerprinting\n // Global compliance: covers GDPR, CCPA, PIPL, APPI automatically\n enrichedHeaders: {\n enabled: true,\n preset: 'standard', // standard context headers\n includeDevice: false, // No device fingerprinting (privacy)\n includeNetwork: true, // Network type (wifi/cellular/etc)\n includePlatform: true, // Platform (web/ios/android)\n includeCompliance: true, // Timezone, locale for regional compliance\n respectDoNotTrack: true, // Honor DNT header (GDPR/CCPA)\n autoDetectRegion: true, // Auto-detect region from timezone\n regionalPreset: 'global', // Global compliance (GDPR+CCPA+PIPL+APPI)\n useTimezone: true, // Use timezone for region detection\n },\n\n // Network awareness - monitoring enabled, WITH auto-adaptation\n // Adjusts strategies based on network quality\n networkAware: {\n enabled: true, // Enable network quality monitoring\n adaptConfig: true, // Auto-adjust strategies based on network\n requestClientHints: false, // Don't request extra browser hints\n },\n\n // Tracking configuration - balanced for production (monitoring without overhead)\n tracking: {\n enabled: true,\n operations: true,\n events: true,\n performanceMode: 'minimal', // Not 'full' - avoid overhead in prod\n queueStrategy: 'batch',\n eventStrategy: 'queued',\n telemetry: true, // Send to monitoring in production\n },\n\n // Retry strategy - use preset instead of hardcoded values\n retryStrategy: 'aggressive', // More retries for production reliability (5 attempts)\n // Note: unifiedStrategy 'interactive' already includes 'standard' retry (3 attempts)\n // This overrides it for production to be more aggressive\n\n // Encryption - ENABLED by default for regulatory compliance (GDPR, CCPA, PIPL, etc.)\n // Encrypts common sensitive fields automatically\n // User MUST provide encryption key via init() - defaults don't include key\n encryption: {\n enabled: true,\n algorithm: 'AES-GCM', // Industry standard, FIPS 140-2 compliant\n autoDecrypt: true, // Auto-decrypt responses\n target: ['all'], // Encrypt in request body and query params\n // Key will be provided by user during initialization\n key: undefined as unknown as EncryptionKey, // Placeholder - user must provide via apiConfig\n\n // Common sensitive field patterns (uses glob matching)\n // Covers: email, SSN, phone, card numbers, passwords, tokens, wallet addresses\n fields: [\n // Personal Identifiable Information (PII) - GDPR Art. 9\n '*.email',\n '*.ssn',\n '*.taxId',\n '*.nationalId',\n '*.passport',\n '*.driverLicense',\n '*.governmentId',\n\n // Contact Information - GDPR Art. 4(1)\n '*.phone',\n '*.phoneNumber',\n '*.mobile',\n '*.telephone',\n '*.address.street',\n '*.address.line1',\n '*.address.line2',\n '*.postalCode',\n '*.zipCode',\n\n // Financial Information - PCI-DSS Req 3.4\n '*.cardNumber',\n '*.creditCard',\n '*.debitCard',\n '*.cvv',\n '*.cvc',\n '*.iban',\n '*.accountNumber',\n '*.routingNumber',\n '*.swiftCode',\n '*.sortCode',\n\n // Authentication Credentials - OWASP ASVS 2.1\n '*.password',\n '*.apiKey',\n '*.secret',\n '*.token',\n '*.accessToken',\n '*.refreshToken',\n '*.privateKey',\n '*.secretKey',\n\n // Crypto/Blockchain - Web3 security\n '*.wallet',\n '*.walletAddress',\n '*.mnemonic',\n '*.seedPhrase',\n '*.privateKeyHex',\n\n // Health Information - HIPAA §164.312(a)(2)(iv)\n '*.medicalRecord',\n '*.medicalRecordNumber',\n '*.healthInfo',\n '*.diagnosis',\n '*.prescription',\n '*.healthInsurance',\n\n // Biometric Data - GDPR Art. 9(1)\n '*.fingerprint',\n '*.faceId',\n '*.biometric',\n\n // Date of Birth - Age verification\n '*.birthDate',\n '*.dateOfBirth',\n '*.dob',\n\n // IP Addresses - GDPR considers PII\n '*.ipAddress',\n '*.ip',\n ],\n\n // Key provider - MUST be provided by user via init()\n // Supports three patterns:\n //\n // 1. EncryptionKey object (with metadata):\n // key: {\n // id: 'prod-key-v1',\n // key: process.env.ENCRYPTION_KEY!,\n // algorithm: 'AES-GCM',\n // format: 'raw'\n // }\n //\n // 2. KeyProvider function (for key rotation):\n // key: async (context) => {\n // const keyId = await getActiveKeyId();\n // const key = await keyManagementService.getKey(keyId);\n // return { id: keyId, key, algorithm: 'AES-GCM' };\n // }\n //\n // 3. Simple string (auto-converted to EncryptionKey):\n // key: process.env.ENCRYPTION_KEY!\n //\n // NO default key - user provides via init()\n },\n};\n\n/**\n * Staging configuration for the API client service.\n * ALIGNED with production for accurate pre-production testing.\n * Only differences: standard headers for debugging, full performance tracking.\n *\n * Key Staging Features:\n * - Encryption ENABLED (same as production)\n * - Standard headers (slightly more context for debugging than prod)\n * - Full performance tracking (catch issues before production)\n * - Same retry strategy as production (aggressive)\n * - Same network adaptation as production\n */\nexport const STAGING_CONFIG: Partial<ApiConfig> = {\n // Core settings - SAME AS PRODUCTION\n timeout: TIME_CONSTANTS.THIRTY_SECONDS,\n\n // Unified strategy - SAME AS PRODUCTION\n unifiedStrategy: 'interactive',\n\n // Revalidation strategy - SAME AS PRODUCTION\n revalidationStrategy: 'balanced',\n\n // Error handling strategy - SAME AS PRODUCTION\n strategy: 'softFail',\n\n // Headers preset - SAME AS PRODUCTION\n headers: {\n presets: ['json' as unknown as HeaderPresetName] as const,\n autoDetectNetwork: true,\n requestClientHints: false, // Same as prod\n },\n\n // Enriched headers - SLIGHTLY MORE than prod for debugging\n enrichedHeaders: {\n enabled: true,\n preset: 'standard', // One level up from prod's 'minimal'\n includeDevice: true, // Include device info for debugging\n includeNetwork: true,\n includePlatform: true,\n includeCompliance: true,\n respectDoNotTrack: true, // Same as prod\n autoDetectRegion: true,\n regionalPreset: 'global', // Same as prod\n useTimezone: true,\n },\n\n // Network awareness - SAME AS PRODUCTION\n networkAware: {\n enabled: true,\n adaptConfig: true, // Same as prod\n requestClientHints: false, // Same as prod\n },\n\n // Tracking configuration - FULL in staging (only difference from prod)\n tracking: {\n enabled: true,\n operations: true,\n events: true,\n performanceMode: 'full', // Full tracking to catch issues (prod uses 'balanced')\n queueStrategy: 'batch',\n eventStrategy: 'queued',\n telemetry: true, // Same as prod\n },\n\n // Retry strategy - SAME AS PRODUCTION\n retryStrategy: 'aggressive', // Same aggressive retries as production\n // Test production retry behavior in staging\n\n // Encryption - SAME AS PRODUCTION (REQUIRED)\n encryption: {\n enabled: true, // REQUIRED in staging (same as prod)\n algorithm: 'AES-GCM',\n autoDecrypt: true,\n target: ['all'],\n key: undefined as unknown as EncryptionKey, // Placeholder - user must provide via apiConfig\n fields: [\n // Same 50+ fields as production\n '*.email',\n '*.ssn',\n '*.taxId',\n '*.nationalId',\n '*.passport',\n '*.driverLicense',\n '*.governmentId',\n '*.phone',\n '*.phoneNumber',\n '*.mobile',\n '*.telephone',\n '*.address.street',\n '*.address.line1',\n '*.address.line2',\n '*.postalCode',\n '*.zipCode',\n '*.cardNumber',\n '*.creditCard',\n '*.debitCard',\n '*.cvv',\n '*.cvc',\n '*.iban',\n '*.accountNumber',\n '*.routingNumber',\n '*.swiftCode',\n '*.sortCode',\n '*.password',\n '*.apiKey',\n '*.secret',\n '*.token',\n '*.accessToken',\n '*.refreshToken',\n '*.privateKey',\n '*.secretKey',\n '*.wallet',\n '*.walletAddress',\n '*.mnemonic',\n '*.seedPhrase',\n '*.privateKeyHex',\n '*.medicalRecord',\n '*.medicalRecordNumber',\n '*.healthInfo',\n '*.diagnosis',\n '*.prescription',\n '*.healthInsurance',\n '*.fingerprint',\n '*.faceId',\n '*.biometric',\n '*.birthDate',\n '*.dateOfBirth',\n '*.dob',\n '*.ipAddress',\n '*.ip',\n ],\n },\n};\n\n/**\n * Development configuration for the API client service.\n * Optimized for debugging and fast feedback during development.\n *\n * Key Development Features:\n * - Encryption OPTIONAL (disable for easier debugging)\n * - Full headers (all context for debugging)\n * - No network adaptation (consistent behavior)\n * - Minimal retries (fail fast to see errors quickly)\n * - Full performance tracking (optimize during development)\n * - Longer timeout (allow for debugging/breakpoints)\n */\nexport const DEVELOPMENT_CONFIG: Partial<ApiConfig> = {\n // Core settings - longer timeout for debugging\n timeout: TIME_CONSTANTS.TWO_MINUTES,\n\n // Unified strategy - interactive works well for dev\n unifiedStrategy: 'interactive',\n\n // Revalidation strategy\n revalidationStrategy: 'balanced',\n\n // Error handling strategy\n strategy: 'softFail',\n\n // Full headers preset for maximum debugging context\n headers: {\n presets: ['json' as unknown as HeaderPresetName] as const,\n autoDetectNetwork: true,\n requestClientHints: true,\n },\n\n // Enriched headers - FULL preset with all context\n enrichedHeaders: {\n enabled: true,\n preset: 'full', // All possible headers for debugging\n includeDevice: true, // Include everything\n includeNetwork: true,\n includePlatform: true,\n includeCompliance: true,\n includePerformance: true, // Performance hints\n respectDoNotTrack: false, // Ignore DNT in dev\n autoDetectRegion: true,\n regionalPreset: 'global',\n useTimezone: true,\n },\n\n // Network awareness - DISABLED (consistent behavior in dev)\n networkAware: {\n enabled: false, // Don't adapt config in dev\n adaptConfig: false,\n requestClientHints: false,\n },\n\n // Tracking configuration - FULL to see everything\n tracking: {\n enabled: true,\n operations: true,\n events: true,\n performanceMode: 'full', // Track everything in dev\n queueStrategy: 'immediate', // Process immediately (no batching)\n eventStrategy: 'immediate', // Immediate events for debugging\n telemetry: false, // Don't send to monitoring from dev\n },\n\n // Retry strategy - MINIMAL (fail fast to see errors)\n retryStrategy: 'conservative', // Minimal retries (1 attempt) to see errors immediately\n // Note: unifiedStrategy 'interactive' includes 'standard' retry (3 attempts)\n // This overrides it for development to fail faster\n\n // Encryption - DISABLED by default but with SAME fields as production\n // This allows developers to test encryption locally when needed\n encryption: {\n enabled: false, // Disabled in dev by default (enable via apiConfig when testing)\n algorithm: 'AES-GCM',\n autoDecrypt: true,\n target: ['all'],\n\n // NO default key in development - encryption is disabled\n // To test encryption locally, pass key via apiConfig:\n // encryption: {\n // enabled: true,\n // key: \"your-test-key\" // Auto-converted to EncryptionKey\n // // Or use EncryptionKey object:\n // // key: { id: \"test-1\", key: \"your-key\", algorithm: \"AES-GCM\" }\n // }\n key: undefined as unknown as EncryptionKey, // Placeholder - encryption disabled in development\n\n // Same 50+ fields as production for testing\n fields: [\n '*.email',\n '*.ssn',\n '*.taxId',\n '*.nationalId',\n '*.passport',\n '*.driverLicense',\n '*.governmentId',\n '*.phone',\n '*.phoneNumber',\n '*.mobile',\n '*.telephone',\n '*.address.street',\n '*.address.line1',\n '*.address.line2',\n '*.postalCode',\n '*.zipCode',\n '*.cardNumber',\n '*.creditCard',\n '*.debitCard',\n '*.cvv',\n '*.cvc',\n '*.iban',\n '*.accountNumber',\n '*.routingNumber',\n '*.swiftCode',\n '*.sortCode',\n '*.password',\n '*.apiKey',\n '*.secret',\n '*.token',\n '*.accessToken',\n '*.refreshToken',\n '*.privateKey',\n '*.secretKey',\n '*.wallet',\n '*.walletAddress',\n '*.mnemonic',\n '*.seedPhrase',\n '*.privateKeyHex',\n '*.medicalRecord',\n '*.medicalRecordNumber',\n '*.healthInfo',\n '*.diagnosis',\n '*.prescription',\n '*.healthInsurance',\n '*.fingerprint',\n '*.faceId',\n '*.biometric',\n '*.birthDate',\n '*.dateOfBirth',\n '*.dob',\n '*.ipAddress',\n '*.ip',\n ],\n },\n};\n","import type { ApiClientOptions, ApiConfig } from '@plyaz/types/api';\nimport { TIME_CONSTANTS } from '../../time/constants';\n\n/**\n * Default configuration for API clients\n *\n * These defaults provide sensible out-of-the-box behavior:\n * - 30 second timeout for requests\n * - 3 retry attempts with exponential backoff\n * - 60 second cache TTL with 5 minute stale time\n * - Standard JSON content-type headers\n * - Soft-fail error strategy (returns error without throwing)\n */\nexport const DEFAULT_API_CONFIG: ApiConfig = {\n baseURL: '',\n timeout: TIME_CONSTANTS.THIRTY_SECONDS,\n retry: {\n attempts: 3,\n delay: TIME_CONSTANTS.SECOND,\n maxDelay: TIME_CONSTANTS.THIRTY_SECONDS,\n backoff: 1.5,\n },\n cache: {\n ttl: 60,\n stale: 300,\n },\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n strategy: 'softFail',\n};\n\n/**\n * Default client options with global compliance enabled by default\n *\n * This ensures maximum privacy protection out of the box:\n * - Enriched headers enabled with standard preset\n * - Global compliance level (minimum data collection)\n */\nexport const DEFAULT_API_CLIENT_OPTIONS: Partial<ApiClientOptions> = {\n enrichedHeaders: {\n enabled: true,\n preset: 'standard', // Uses 'global' compliance by default\n },\n};\n","export const SUPABASE_CONFIG = {\n SUPABASE_URL: globalThis.process.env.NEXT_PUBLIC_SUPABASE_URL ?? '',\n SUPABASE_ANON_KEY: globalThis.process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY ?? '',\n};\n\nexport const CLERK_PUBLISHABLE_KEY = globalThis.process.env.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY ?? '';\n","/**\n * Notification Configuration Constants\n *\n * Default configuration values for the notifications system.\n * These can be overridden at runtime through configuration objects.\n *\n * @module src/notifications/constants\n */\n\n// Import type-level constants from @plyaz/types\nimport { NOTIFICATION_CATEGORIES } from '@plyaz/types';\n\n// Import byte calculation constants from @plyaz/config/math\nimport { NUMBER_SYSTEM } from '../math/constants';\n\n// Common size values in MB\nconst SIZE_25_MB = 25;\nconst SIZE_30_MB = 30;\n\n/**\n * Default notification category\n * Safest default for compliance - transactional emails must always be sent\n */\nexport const DEFAULT_NOTIFICATION_CATEGORY = NOTIFICATION_CATEGORIES.TRANSACTIONAL;\n\n/**\n * Retry Configuration\n */\nexport const RETRY_CONFIG = {\n /**\n * Default maximum number of retry attempts\n * Used when no specific retry count is provided\n */\n DEFAULT_MAX_ATTEMPTS: 3,\n\n /**\n * Default initial delay between retries (milliseconds)\n * Used for exponential backoff calculation\n */\n DEFAULT_INITIAL_DELAY_MS: 1000,\n\n /**\n * Maximum delay between retries (milliseconds)\n * Prevents exponential backoff from growing too large\n */\n MAX_DELAY_MS: 30000,\n\n /**\n * Backoff multiplier for exponential backoff\n * Each retry delay = previous delay * multiplier\n */\n BACKOFF_MULTIPLIER: 2,\n} as const;\n\n/**\n * Attachment Configuration\n */\nexport const ATTACHMENT_CONFIG = {\n /**\n * Default maximum number of attachments per notification\n */\n DEFAULT_MAX_ATTACHMENTS: 10,\n\n /**\n * Default maximum size per attachment (bytes)\n * 25MB - Common limit across providers\n */\n DEFAULT_MAX_SIZE_PER_ATTACHMENT: SIZE_25_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Default maximum total size of all attachments (bytes)\n * 25MB - Ensures we don't exceed provider limits\n */\n DEFAULT_MAX_TOTAL_SIZE: SIZE_25_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum attachment size for SendGrid (bytes)\n * 30MB per SendGrid documentation\n */\n SENDGRID_MAX_SIZE: SIZE_30_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum total attachment size for SendGrid (bytes)\n * 30MB per SendGrid documentation\n */\n SENDGRID_MAX_TOTAL_SIZE: SIZE_30_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum attachment size for Infobip (bytes)\n * 30MB - matching SendGrid for consistency\n */\n INFOBIP_MAX_SIZE: SIZE_30_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum total attachment size for Infobip (bytes)\n * 30MB - matching SendGrid for consistency\n */\n INFOBIP_MAX_TOTAL_SIZE: SIZE_30_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Default timeout for URL attachment fetching (milliseconds)\n */\n URL_FETCH_TIMEOUT_MS: 30000,\n\n /**\n * Maximum number of retry attempts for failed URL fetches\n */\n URL_FETCH_MAX_RETRIES: 3,\n} as const;\n\n/**\n * Circuit Breaker Configuration\n */\nexport const CIRCUIT_BREAKER_CONFIG = {\n /**\n * Default failure threshold before opening circuit\n * Circuit opens after this many consecutive failures\n */\n DEFAULT_FAILURE_THRESHOLD: 5,\n\n /**\n * Default timeout before attempting half-open state (milliseconds)\n * How long to wait before testing if provider has recovered\n */\n DEFAULT_TIMEOUT_MS: 60000,\n\n /**\n * Default success threshold in half-open state\n * Number of successful requests needed to close circuit\n */\n DEFAULT_SUCCESS_THRESHOLD: 2,\n} as const;\n\n/**\n * Queue Configuration\n */\nexport const QUEUE_CONFIG = {\n /**\n * Default maximum queue size\n */\n DEFAULT_MAX_SIZE: 10000,\n\n /**\n * Default number of concurrent workers\n */\n DEFAULT_CONCURRENCY: 5,\n\n /**\n * Default queue processing interval (milliseconds)\n */\n DEFAULT_PROCESSING_INTERVAL_MS: 100,\n} as const;\n\n/**\n * Rate Limiting Configuration\n */\nexport const RATE_LIMIT_CONFIG = {\n /**\n * Default requests per second per provider\n */\n DEFAULT_REQUESTS_PER_SECOND: 10,\n\n /**\n * Default burst allowance\n * Number of requests that can be sent in a burst\n */\n DEFAULT_BURST_ALLOWANCE: 20,\n\n /**\n * Default window size for rate limiting (milliseconds)\n */\n DEFAULT_WINDOW_MS: 1000,\n} as const;\n\n/**\n * Template Configuration\n */\nexport const TEMPLATE_CONFIG = {\n /**\n * Default locale for templates\n */\n DEFAULT_LOCALE: 'en',\n\n /**\n * Fallback locale when requested locale not found\n */\n FALLBACK_LOCALE: 'en',\n\n /**\n * Template cache TTL (milliseconds)\n * How long to cache compiled templates\n */\n CACHE_TTL_MS: 300000, // 5 minutes\n\n /**\n * Maximum template size (bytes)\n */\n MAX_TEMPLATE_SIZE: NUMBER_SYSTEM.BYTES_PER_MB, // 1MB\n} as const;\n\n/**\n * SMS Character Limits and Encoding\n * Based on GSM-7 and UCS-2 encoding standards\n */\nexport const SMS_CONFIG = {\n /**\n * Single SMS message limit for GSM-7 encoding (standard characters)\n * Includes: A-Z, a-z, 0-9, and basic punctuation\n */\n GSM7_SINGLE_MESSAGE_LIMIT: 160,\n\n /**\n * Multi-part SMS message segment limit for GSM-7 encoding\n * Each segment in a concatenated message is limited to 153 characters (7 chars for UDH)\n */\n GSM7_MULTI_PART_SEGMENT_LIMIT: 153,\n\n /**\n * Single SMS message limit for UCS-2 encoding (unicode characters)\n * Used when message contains emoji, non-Latin characters, etc.\n */\n UCS2_SINGLE_MESSAGE_LIMIT: 70,\n\n /**\n * Multi-part SMS message segment limit for UCS-2 encoding\n * Each segment in a concatenated message is limited to 67 characters\n */\n UCS2_MULTI_PART_SEGMENT_LIMIT: 67,\n\n /**\n * Maximum number of SMS segments to allow\n * Prevents accidentally sending very expensive multi-part messages\n */\n DEFAULT_MAX_SEGMENTS: 10,\n\n /**\n * Warning threshold (percentage of limit)\n * Emit warning when message reaches this percentage of the limit\n */\n WARNING_THRESHOLD_PERCENTAGE: 90,\n} as const;\n\n/**\n * Notification Configuration\n */\nexport const NOTIFICATION_CONFIG = {\n /**\n * Default notification priority\n */\n DEFAULT_PRIORITY: 'normal' as const,\n\n /**\n * Maximum subject line length\n */\n MAX_SUBJECT_LENGTH: 255,\n\n /**\n * Maximum push notification title length\n */\n MAX_PUSH_TITLE_LENGTH: 100,\n\n /**\n * Maximum push notification body length\n */\n MAX_PUSH_BODY_LENGTH: 500,\n} as const;\n\n/**\n * Logging Configuration\n */\nexport const LOGGING_CONFIG = {\n /**\n * Default log level\n */\n DEFAULT_LEVEL: 'info' as const,\n\n /**\n * Maximum log message size (bytes)\n * Prevents excessive log sizes\n */\n MAX_LOG_SIZE: 10000,\n} as const;\n\n/**\n * Health Check Configuration\n */\nexport const HEALTH_CHECK_CONFIG = {\n /**\n * Default health check interval (milliseconds)\n */\n DEFAULT_INTERVAL_MS: 30000,\n\n /**\n * Default health check timeout (milliseconds)\n */\n DEFAULT_TIMEOUT_MS: 5000,\n\n /**\n * Maximum acceptable latency (milliseconds)\n * Health check fails if latency exceeds this\n */\n MAX_ACCEPTABLE_LATENCY_MS: 2000,\n} as const;\n\n/**\n * Export all configuration as a single object for convenience\n */\nexport const NOTIFICATION_PACKAGE_CONFIG = {\n RETRY: RETRY_CONFIG,\n ATTACHMENT: ATTACHMENT_CONFIG,\n CIRCUIT_BREAKER: CIRCUIT_BREAKER_CONFIG,\n QUEUE: QUEUE_CONFIG,\n RATE_LIMIT: RATE_LIMIT_CONFIG,\n TEMPLATE: TEMPLATE_CONFIG,\n SMS: SMS_CONFIG,\n NOTIFICATION: NOTIFICATION_CONFIG,\n LOGGING: LOGGING_CONFIG,\n HEALTH_CHECK: HEALTH_CHECK_CONFIG,\n} as const;\n","import { ERROR_SEVERITY } from '@plyaz/types';\n\nexport const DEFAULT_HMAC_ALGORITHM = 'sha256';\nexport const DEFAULT_ENVIRONMENT = 'unknown';\n\nexport const THRESHOLDS = {\n RETRYABLE_ERROR_RATIO: 0.5,\n USER_FACING_ERROR_RATIO: 0.3,\n};\n\nexport const SENSITIVE_KEYS = ['token', 'secret', 'signature'];\n\nexport const RISK_SCORE = {\n MIN_SCORE: 100,\n} as const;\n\n// Log levels\nexport const LOG_LEVELS = {\n CRITICAL: 'critical',\n ERROR: 'error',\n WARN: 'warn',\n} as const;\n\n// Webhook redacted placeholders\nexport const REDACTED = {\n RAW_BODY: '[REDACTED_RAW_BODY]',\n SENSITIVE: '[REDACTED]',\n};\n\nexport const PAYMENT_ERROR_MESSAGES = {\n GENERIC_SYSTEM_ERROR: 'An unexpected error occurred while processing payment.',\n USER_FRIENDLY_SYSTEM_ERROR: 'A payment system error occurred. Please try again later.',\n USER_FRIENDLY_ALT: 'Payment error. Please try again.',\n SYSTEM: 'An internal payment error occurred. Our team has been notified.',\n VALIDATION: 'Some payment information is invalid. Please review your details.',\n AUTHENTICATION: 'Your session has expired. Please log in again.',\n AUTHORIZATION: 'You are not authorized to perform this payment action.',\n PROVIDER: 'There was an issue communicating with the payment provider.',\n NETWORK: 'Network error. Please try again later.',\n FRAUD: 'Suspicious activity detected. Please contact support.',\n REFUND: 'Refund could not be processed. Please try again later.',\n WEBHOOK: 'Payment notification failed. We are investigating.',\n PROCESSING: 'Payment is currently being processed. Please wait a moment.',\n COMPLIANCE: 'This transaction violates compliance rules. Please contact support.',\n LIMITS: 'The payment exceeds your transaction limit.',\n CONFIGURATION: 'Payment configuration error. Please contact your administrator.',\n DEFAULT: 'An unexpected error occurred while processing your payment.',\n INVALID_VALUE: 'Invalid value provided',\n PROVIDER_GENERIC: 'Provider error occurred',\n REFUND_NOT_ALLOWED: 'Refund not allowed',\n REFUND_AUTHORIZATION: 'Refund authorization failed',\n REFUND_PROCESSING: 'Refund processing failed',\n STRIPE_GENERIC: 'An unexpected error occurred while communicating with Stripe',\n};\n\nexport const PAYMENT_ALERT_SEVERITY: Record<\n (typeof ERROR_SEVERITY)[keyof typeof ERROR_SEVERITY],\n boolean\n> = {\n [ERROR_SEVERITY.Low]: true,\n [ERROR_SEVERITY.Medium]: false,\n [ERROR_SEVERITY.High]: true,\n [ERROR_SEVERITY.Critical]: true,\n};\n\nexport const PROCESSING_ERROR_MESSAGES = {\n GENERIC: 'There was an error processing your payment. Please try again.',\n API_RESPONSE_GENERIC: 'A processing error occurred.',\n};\n\nexport const WEBHOOK_CONSTANTS = {\n DEFAULT_MESSAGE: 'An error occurred while processing the webhook.',\n DEFAULT_USER_MESSAGE: 'An error occurred while handling the webhook.',\n};\n\nexport const RECOVERY_STEPS = {\n RETRY: 'Retry transaction after delay.',\n NOTIFY_USER: 'Notify user and suggest contacting support.',\n LOG_ONLY: 'Log and continue monitoring.',\n};\n\nexport const REFUND_ERROR_MESSAGES = {\n NOT_ALLOWED: 'Refund not allowed',\n AUTHORIZATION: 'Refund authorization failed',\n PROCESSING: 'Refund processing failed',\n DEFAULT_API_MESSAGE: 'An error occurred during the refund process.',\n DEFAULT_USER_MESSAGE: 'Refund could not be processed. Please try again or contact support.',\n};\n\nexport const DEFAULT_REFUND_LEVELS = {\n REQUIRED: 'manager',\n CURRENT: 'user',\n};\n\nexport const FACTORY_MESSAGES = {\n PROVIDER_ERROR_PREFIX: 'Provider {provider} error',\n STRIPE_GENERIC: 'An unexpected error occurred while communicating with Stripe.',\n WEBHOOK_SANITIZE_FAIL: 'Failed to sanitize webhook payload',\n UNKNOWN_REFUND_TYPE: 'Unknown refund error type: {type}',\n REDACTION_FAIL: 'Failed to sanitize object.',\n};\n\nexport const PAYLOAD_KEYS = {\n PROVIDER: 'provider',\n EVENT: 'event',\n};\n\nexport const STRIPE_ERROR_TYPES = {\n API_CONNECTION: 'api_connection_error',\n RATE_LIMIT: 'rate_limit_error',\n INVALID_REQUEST: 'invalid_request_error',\n CARD_ERROR: 'card_error',\n AUTHENTICATION: 'authentication_error',\n CARD_DECLINED: 'card_declined',\n} as const;\n\nexport const PROVIDER_ERROR_MESSAGES = {\n DEFAULT_API_MESSAGE: 'An error occurred with the payment provider.',\n DEFAULT_USER_MESSAGE: 'A payment provider error occurred. Please try again later.',\n};\n\nexport const SECURITY_ERROR_MESSAGES = {\n DEFAULT_API_MESSAGE: 'A security error occurred while processing the payment.',\n DEFAULT_USER_MESSAGE: 'A security issue was detected with the payment. Please contact support.',\n\n FRAUD_DETECTED: {\n CODE: 'FRAUD_DETECTED',\n DEFAULT_COMPONENT: 'fraud-detector',\n USER_MESSAGE: 'This transaction appears to be suspicious and has been blocked for your safety.',\n RISK_THRESHOLDS: {\n HIGH: 70,\n CRITICAL: 90,\n },\n },\n};\n","/**\n * Event System Constants\n * Centralized constants for event emitter, handlers, and system-level configurations.\n */\n\n// Numeric Constants\nexport const DEFAULT_PAYEMNT_PRIORITY = 1;\nexport const DEFAULT_URGENT = 0;\nexport const DEFAULT_MAX_LISTENERS = 10;\nexport const DEFAULT_HANDLER_TIMEOUT_MS = 10000;\nexport const DEFAULT_EVENT_COUNT = 0;\n\n// Success Thresholds\nexport const DEFAULT_SUCCESS_THRESHOLD = 1.0; // 100% handlers succeeded\nexport const DEFAULT_PARTIAL_SUCCESS_THRESHOLD = 0.9; // 90% handlers succeeded\n\n// Default Values\nexport const EVENT_DEFAULTS = {\n PRIORITY: DEFAULT_PAYEMNT_PRIORITY,\n URGENT: DEFAULT_URGENT,\n MAX_LISTENERS: DEFAULT_MAX_LISTENERS,\n HANDLER_TIMEOUT_MS: DEFAULT_HANDLER_TIMEOUT_MS,\n SUCCESS_THRESHOLD: DEFAULT_SUCCESS_THRESHOLD,\n PARTIAL_SUCCESS_THRESHOLD: DEFAULT_PARTIAL_SUCCESS_THRESHOLD,\n EVENT_COUNT: DEFAULT_EVENT_COUNT,\n};\n\n// Component Names\nexport const EVENT_COMPONENT = {\n EMITTER: 'event-emitter',\n PAYMENT_GATEWAY: 'payment-gateway',\n SUBSCRIPTION_MANAGER: 'subscription-manager',\n PROVIDER_ADAPTER: 'provider-adapter',\n} as const;\n\n// Error Codes\nexport const EVENT_ERROR_CODE = {\n HANDLER_FAILED: 'HANDLER_FAILED',\n HANDLER_CRASHED: 'HANDLER_CRASHED',\n HANDLER_TIMEOUT: 'HANDLER_TIMEOUT',\n} as const;\n\n// Error Messages\nexport const EVENT_ERROR_MESSAGE = {\n HANDLER_FAILED: 'Handler execution failed',\n HANDLER_TIMEOUT: 'Handler execution timed out',\n};\n\n// Environment\nexport const EVENT_ENVIRONMENT = {\n DEVELOPMENT: 'development',\n PRODUCTION: 'production',\n TEST: 'test',\n} as const;\n\n//Event Phases\nexport const PHASE_NONE = 0;\nexport const PHASE_CAPTURING = 1;\nexport const PHASE_AT_TARGET = 2;\nexport const PHASE_BUBBLING = 3;\n\nexport const EVENT_PHASE = {\n NONE: PHASE_NONE,\n CAPTURING_PHASE: PHASE_CAPTURING,\n AT_TARGET: PHASE_AT_TARGET,\n BUBBLING_PHASE: PHASE_BUBBLING,\n} as const;\n\n// Event Meta Keys\nexport const EVENT_META_KEY = {\n PRIORITY: 'priority',\n URGENT: 'urgent',\n CATEGORY: 'category',\n TAGS: 'tags',\n SOURCE: 'source',\n} as const;\n\n// Event Source Fields\nexport const EVENT_SOURCE_FIELD = {\n COMPONENT: 'component',\n ENVIRONMENT: 'environment',\n} as const;\n\n// Event Result Status\nexport const EVENT_RESULT_STATUS = {\n ERROR: 'error',\n INFO: 'info',\n WARNING: 'warning',\n CRITICAL: 'critical',\n} as const;\n\n// Utils\nexport const EmptyArray = <T = unknown>(): T[] => [];\nexport const CurrentTimestamp = (): number => Date.now();\n\n/**\n * Enum representing the state of a Promise.\n */\nexport const SETTLED_PROMISE_STATUS = {\n FULFILLED: 'fulfilled',\n REJECTED: 'rejected',\n} as const;\n\nexport const EVENT_NORMALIZER_MESSAGES = {\n NORMALIZATION_FAILED: 'Event normalization failed.',\n MAPPING_MISSING: 'No mapping configuration found for provider.',\n MAPPING_RETRIEVE_FAILED: 'Failed to retrieve provider mapping.',\n BUILD_NORMALIZED_DATA_FAILED: 'Failed to build normalized payment data.',\n BUILD_UNIFIED_EVENT_FAILED: 'Failed to build unified event.',\n EVENT_TYPE_MAPPING_FAILED: 'Event type mapping failed.',\n STATUS_MAPPING_FAILED: 'Status mapping failed.',\n PAYLOAD_EXTRACTION_FAILED: 'Payload extraction failed.',\n requiredFileMissing: (field: string): string => `Required field \"${field}\" is missing.`,\n} as const;\n","export const DEFAULT_RETRY_DELAY_MS = 1000;\nexport const MAX_CIRCUIT_OPEN_MS = 60_000;\nexport const DEFAULT_CIRCUIT_BREAKER_FAILURE_THRESHOLD = 3;\n\nexport const FALLBACK_REASON = {\n NO_PROVIDER: 'NO_PROVIDER_SELECTED',\n PROVIDER_FAILURE: 'PROVIDER_FAILURE',\n CIRCUIT_OPEN: 'CIRCUIT_OPEN',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n};\n\nexport const FALLBACK_NEXT_STEPS = {\n USER_ACTION: 'contact_support',\n SYSTEM_ACTION: 'manual_review',\n} as const;\n\n/** Risk levels */\nexport const RISK_LEVEL = {\n LOW: 'low',\n MEDIUM: 'medium',\n HIGH: 'high',\n} as const;\n\n/** Security flags */\nexport const SECURITY_FLAGS = {\n FALLBACK_USED: 'fallback_used',\n} as const;\n\n/** Allowed operators for custom rules */\nexport enum CUSTOM_RULE_OPERATER {\n ASSIGNMENT = 'assignment',\n LOGICAL = 'logical',\n COMPARISON = 'comparison',\n ARITHMETIC = 'arithmetic',\n CONDITIONAL = 'conditional',\n CONCATENATE = 'concatenate',\n}\n\nexport const PAYMENT_GATEWAY_ERROR_MESSAGE = {\n // General\n INITIAL_PAYMENT_ATTEMPT: 'Initial payment attempt.',\n PAYMENT_OPERATION_FAILED: 'Payment operation failed.',\n NON_PAYMENT_OPERATION_FAILED: 'Non-payment operation failed.',\n ADAPTER_NOT_FOUND: 'Adapter not found for provider:',\n NO_VALID_ADAPTER: 'No valid provider adapter found.',\n UNSUPPORTED_FEATURE: 'Requested feature is not supported by the provider.',\n UNKNOWN_PROVIDER: 'Unknown payment provider specified.',\n UNKNOWN_ERROR: 'An unknown error occurred during payment processing.',\n\n // Idempotency / concurrency\n DUPLICATE_PAYMENT_IN_PROGRESS: 'A payment with this idempotency key is already in progress.',\n DUPLICATE_REFUND_IN_PROGRESS: 'A refund for this transaction is already in progress.',\n\n // Validation\n MISSING_TRANSACTION_ID: 'Transaction ID is required for refund operation.',\n INVALID_PAYMENT_REQUEST: 'Invalid payment request payload.',\n INVALID_PROVIDER_CONFIGURATION: 'Invalid or missing provider configuration.',\n\n // Operations\n CAPTURE_PAYMENT_FAILED: 'Capture payment operation failed.',\n CANCEL_PAYMENT_FAILED: 'Cancel payment operation failed.',\n PROCESS_REFUND_FAILED: 'Refund operation failed.',\n GET_REFUND_STATUS_FAILED: 'Failed to retrieve refund status.',\n GET_PAYMENT_STATUS_FAILED: 'Failed to retrieve payment status.',\n GET_TRANSACTION_FAILED: 'Failed to retrieve transaction details.',\n CREATE_CUSTOMER_UNSUPPORTED: 'Create customer not supported by this provider.',\n SAVE_PAYMENT_METHOD_UNSUPPORTED: 'Save payment method not supported by this provider.',\n DELETE_PAYMENT_METHOD_UNSUPPORTED: 'Delete payment method not supported by this provider.',\n GET_USER_PAYMENT_METHODS_UNSUPPORTED: 'Get user payment methods not supported by this provider.',\n CREATE_SUBSCRIPTION_UNSUPPORTED: 'Create subscription not supported by this provider.',\n CANCEL_SUBSCRIPTION_UNSUPPORTED: 'Cancel subscription not supported by this provider.',\n PROCESS_PAYOUT_UNSUPPORTED: 'Payout not supported by this provider.',\n GET_TRANSACTION_HISTORY_UNSUPPORTED: 'Transaction history not supported by this provider.',\n\n // Gateway internal\n IDEMPOTENCY_LOCK_FAILED: 'Another operation with the same key is currently being processed.',\n FALLBACK_HANDLER_ERROR: 'An error occurred while executing fallback handling.',\n ROUTER_RESOLUTION_FAILED: 'Failed to resolve provider adapter route.',\n} as const;\n","export const STRIPE_API_VERSION = '2022-11-15';\nexport const STRIPE_MAPPING_VERSION = 'v1.0.0';\nexport const ZERO_AMOUNT = 0;\nexport const DEFAULT_PROCESSING_RATE = 0.029;\nexport const DEFAULT_PLATFORM_RATE = 0;\nexport const DEFAULT_CROSS_BORDER_RATE = 0.01;\nexport const DEFAULT_PRIORITY = 100;\n\nexport const FIXED_FEES = {\n CREDIT_CARD: 30,\n BANK_TRANSFER: 500,\n BOLETO_BANCARIO: 200,\n SEPA_DIRECT_DEBIT: 50,\n IDEAL_BANK: 50,\n} as const;\n\nexport const NEXT_STEP_EXPECTED_UPDATE_IN = {\n REDIRECT: 10,\n} as const;\n\n// Stripe mapping priorities & confidence\nexport const STRIPE_CONFIDENCE_HIGH = 1;\nexport const STRIPE_PRIORITY_HIGH = 100;\nexport const STRIPE_CONFIDENCE_MEDIUM = 0.9;\nexport const STRIPE_PRIORITY_MEDIUM = 80;\n\n// Display formatting\nexport const AMOUNT_DECIMALS = 2;\nexport const AMOUNT_DIVISOR = 100;\n\n// Timestamp conversion\nexport const UNIX_TIMESTAMP_MULTIPLIER = 1000;\n\n// Timestamps & limits\nexport const TIMESTAMP_FALLBACK = 0;\n\n/** Actions a user should take next in the payment flow */\nexport const NEXT_STEP_USER_ACTION = {\n REDIRECT: 'redirect',\n WAIT: 'wait',\n RETRY: 'retry',\n CONTACT_SUPPORT: 'contact_support',\n} as const;\n\n/** Actions the system should take next in the payment flow */\nexport const NEXT_STEP_SYSTEM_ACTION = {\n WEBHOOK_PENDING: 'webhook_pending',\n MANUAL_REVIEW: 'manual_review',\n AUTO_RETRY: 'auto_retry',\n} as const;\n\n/** Stripe provider event types for mapping */\nexport const STRIPE_EVENT_TYPE = {\n // Refunds\n CHARGE_REFUND_CREATED: 'charge.refund.created',\n REFUND_UPDATED: 'refund.updated',\n CHARGE_REFUND_SUCCEEDED: 'charge.refund.succeeded',\n CHARGE_REFUND_FAILED: 'charge.refund.failed',\n CHARGE_REFUND_CANCELED: 'charge.refund.canceled',\n\n // Disputes / Chargebacks\n CHARGE_DISPUTE_CREATED: 'charge.dispute.created',\n CHARGE_DISPUTE_UPDATED: 'charge.dispute.updated',\n CHARGE_DISPUTE_CLOSED: 'charge.dispute.closed',\n CHARGEBACK_RECEIVED: 'chargeback.received',\n CHARGEBACK_RESPONDED: 'chargeback.responded',\n CHARGE_DISPUTE_WON: 'charge.dispute.won',\n CHARGE_DISPUTE_LOST: 'charge.dispute.lost',\n\n // Payment methods\n PAYMENT_METHOD_ATTACHED: 'payment_method.attached',\n PAYMENT_METHOD_UPDATED: 'payment_method.updated',\n PAYMENT_METHOD_DETACHED: 'payment_method.detached',\n PAYMENT_METHOD_EXPIRED: 'payment_method.expired',\n\n // Subscriptions\n SUBSCRIPTION_CREATED: 'customer.subscription.created',\n SUBSCRIPTION_UPDATED: 'customer.subscription.updated',\n SUBSCRIPTION_DELETED: 'customer.subscription.deleted',\n SUBSCRIPTION_RENEWED: 'customer.subscription.renewed',\n SUBSCRIPTION_FAILED: 'customer.subscription.failed',\n SUBSCRIPTION_TRIAL_STARTED: 'customer.subscription.trial_started',\n SUBSCRIPTION_TRIAL_ENDED: 'customer.subscription.trial_ended',\n\n // Invoice / Checkout (Payment Links)\n INVOICE_PAYMENT_SUCCEEDED: 'invoice.payment_succeeded',\n INVOICE_PAYMENT_FAILED: 'invoice.payment_failed',\n CHECKOUT_SESSION_COMPLETED: 'checkout.session.completed',\n CHECKOUT_SESSION_EXPIRED: 'checkout.session.expired',\n CHECKOUT_SESSION_CANCELED: 'checkout.session.canceled',\n\n // Products & Pricing\n PRODUCT_CREATED: 'product.created',\n PRODUCT_UPDATED: 'product.updated',\n PRODUCT_DELETED: 'product.deleted',\n PRICE_CREATED: 'price.created',\n PRICE_UPDATED: 'price.updated',\n PRICE_DELETED: 'price.deleted',\n\n // Provider / System events\n PROVIDER_WEBHOOK_RECEIVED: 'provider.webhook.received',\n PROVIDER_WEBHOOK_PROCESSED: 'provider.webhook.processed',\n PROVIDER_API_CALLED: 'provider.api.called',\n PROVIDER_API_SUCCEEDED: 'provider.api.succeeded',\n PROVIDER_API_FAILED: 'provider.api.failed',\n} as const;\n\nexport const STRIPE_PAYMENT_INTENT_STATUS = {\n SUCCEEDED: 'succeeded',\n PROCESSING: 'processing',\n REQUIRES_ACTION: 'requires_action',\n REQUIRES_CONFIRMATION: 'requires_confirmation',\n REQUIRES_PAYMENT_METHOD: 'requires_payment_method',\n CANCELED: 'canceled',\n FAILED: 'failed',\n DECLINED: 'declined',\n EXPIRED: 'expired',\n AUTHORIZED: 'authorized',\n CAPTURED: 'captured',\n HELD: 'held',\n REFUNDED: 'refunded',\n PARTIALLY_REFUNDED: 'partially_refunded',\n DISPUTED: 'disputed',\n CHARGEBACK: 'chargeback',\n CHARGEBACK_RESOLVED: 'chargeback_resolved',\n} as const;\n\n/** Default processing time estimate */\nexport const DEFAULT_PROCESSING_TIME = {\n minimumMinutes: 5,\n maximumMinutes: 120,\n typicalMinutes: 30,\n factors: ['default estimate'],\n};\n\n/** Default settlement time estimate */\nexport const DEFAULT_SETTLEMENT_TIME = {\n minimumDays: 1,\n maximumDays: 5,\n typicalDays: 3,\n affectedByHolidays: true,\n};\n\nexport const STRIPE_DATA_PATHS = {\n TRANSACTION_ID: 'data.object.id',\n AMOUNT: 'data.object.amount',\n CURRENCY: 'data.object.currency',\n STATUS: 'data.object.status',\n PAYMENT_METHOD: 'data.object.payment_method',\n METADATA: 'data.object.metadata',\n};\n\nexport const PAYMENT_OPERATION = {\n INITIALIZE: 'initialize',\n CREATE_PAYMENT: 'createPayment',\n CAPTURE_PAYMENT: 'capturePayment',\n CANCEL_PAYMENT: 'cancelPayment',\n PROCESS_REFUND: 'processRefund',\n GET_REFUND_STATUS: 'getRefundStatus',\n GET_PAYMENT_STATUS: 'getPaymentStatus',\n PROCESS_WEBHOOK: 'processWebhook',\n VERIFY_WEBHOOK_SIGNATURE: 'verifyWebhookSignature',\n CALCULATE_FEES: 'calculateFees',\n GET_FEE_STRUCTURE: 'getFeeStructure',\n GET_TRANSACTION: 'getTransaction',\n WEBHOOK_PROCESS: 'webhookProcess',\n} as const;\n\nexport const STRIPE_MESSAGES = {\n MISSING_API_KEY: 'Missing Stripe API key',\n UNKNOWN_EVENT: 'unknown',\n MISSING_EVENT: 'missing',\n INIT_FAILED: 'Stripe SDK initialization failed',\n CREATE_PAYMENT_FAILED: 'Failed to create payment intent',\n CAPTURE_PAYMENT_FAILED: 'Failed to capture payment',\n CANCEL_PAYMENT_FAILED: 'Failed to cancel payment',\n REFUND_FAILED: 'Failed to process refund',\n REFUND_STATUS_FAILED: 'Failed to retrieve refund status',\n GET_PAYMENT_STATUS_FAILED: 'Failed to retrieve payment status',\n PROCESS_WEBHOOK_FAILED: 'Failed to process webhook',\n VERIFY_WEBHOOK_FAILED: 'Failed to verify webhook signature',\n CALCULATE_FEES_FAILED: 'Failed to calculate fees',\n GET_FEE_STRUCTURE_FAILED: 'Failed to get fee structure',\n GET_TRANSACTION_FAILED: 'Failed to retrieve transaction details',\n} as const;\n","import type { BaseProviderConfig } from '@plyaz/types';\nimport { PAYMENT_METHOD, PAYMENT_PROVIDER_TYPE } from '@plyaz/types';\nimport { CURRENCY_CODES } from '../../../locale';\nimport { TIME_CONSTANTS } from '../../../time';\nimport { HTTP_STATUS } from '../../../http';\n\nexport const stripeConfig: BaseProviderConfig = {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n displayName: PAYMENT_PROVIDER_TYPE.Stripe,\n enabled: true,\n environment: {\n current: 'sandbox',\n apiUrls: {\n sandbox: 'https://api.stripe.com',\n staging: 'https://api.stripe.com',\n production: 'https://api.stripe.com',\n },\n environmentOverrides: {\n sandbox: {\n payments: {\n enabled: true,\n subscriptions: true,\n preauthorization: true,\n cancellation: true,\n updates: true,\n },\n },\n },\n debug: {\n enabled: true,\n logLevel: 'debug',\n logRequests: true,\n logResponses: true,\n },\n },\n\n credentials: {\n apiKey: globalThis.process.env.STRIPE_API_KEY ?? '',\n secretKey: globalThis.process.env.STRIPE_SECRET_KEY ?? '',\n additionalCredentials: {\n webhookSecret: globalThis.process.env.STRIPE_WEBHOOK_SECRET ?? '',\n merchantId: globalThis.process.env.STRIPE_MERCHANT_ID ?? '',\n },\n rotation: {\n enabled: false,\n intervalDays: 90,\n warningDays: 10,\n },\n encryption: {\n encrypted: false,\n },\n },\n\n webhooks: {\n enabled: true,\n endpoints: {\n primary: 'https://yourdomain.com/api/webhooks/stripe',\n },\n security: {\n signatureMethod: 'hmac_sha256',\n signatureHeader: 'Stripe-Signature',\n secret: globalThis.process.env.STRIPE_WEBHOOK_SECRET ?? '',\n timestampTolerance: 300,\n },\n events: {\n subscribed: [\n 'payment_intent.succeeded',\n 'payment_intent.payment_failed',\n 'charge.refunded',\n 'customer.subscription.created',\n 'customer.subscription.deleted',\n ],\n },\n reliability: {\n retryEnabled: true,\n maxRetries: 5,\n retryDelays: [\n TIME_CONSTANTS.SECOND,\n TIME_CONSTANTS.THREE_SECONDS,\n TIME_CONSTANTS.FIVE_SECONDS,\n TIME_CONSTANTS.TEN_SECONDS,\n ],\n timeout: 10000,\n deadLetterQueue: {\n enabled: true,\n retentionDays: 7,\n },\n },\n },\n features: {\n payments: {\n enabled: true,\n subscriptions: true,\n preauthorization: true,\n cancellation: true,\n updates: true,\n },\n refunds: {\n enabled: true,\n partial: true,\n instant: true,\n scheduled: false,\n },\n security: {\n threeDS: true,\n fraudDetection: true,\n velocityChecking: true,\n tokenization: true,\n },\n customers: {\n profiles: true,\n savedMethods: true,\n authentication: true,\n },\n marketplace: {\n enabled: true,\n splitPayments: true,\n connectedAccounts: true,\n instantPayouts: true,\n },\n advanced: {\n multiCurrency: true,\n currencyConversion: true,\n smartRouting: true,\n costOptimization: true,\n abTesting: true,\n },\n },\n\n /** Fees */\n fees: {\n baseFees: {\n percentage: 2.9,\n fixed: 30,\n currency: CURRENCY_CODES.USD,\n },\n methodFees: {\n [PAYMENT_METHOD.CreditCard]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.DebitCard]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BankTransfer]: { percentage: 0.8, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PaypalAccount]: { percentage: 3.5, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoBitcoin]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoEthereum]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoPolygon]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoOptimism]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdc]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdt]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoNativeToken]: {\n percentage: 1.0,\n fixed: 0,\n currency: CURRENCY_CODES.USD,\n },\n [PAYMENT_METHOD.PixInstant]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BoletoBancario]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SepaDirectDebit]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.IdealBank]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SofortBanking]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.AlipayDigital]: { percentage: 1.0, fixed: 0, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.WechatPayDigital]: {\n percentage: 1.0,\n fixed: 0,\n currency: CURRENCY_CODES.USD,\n },\n [PAYMENT_METHOD.ApplePay]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.GooglePay]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SamsungPay]: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n },\n volumeTiers: [\n {\n name: 'Tier 1',\n minimumVolume: { amount: 0, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n },\n {\n name: 'Tier 2',\n minimumVolume: { amount: 1000000, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.5, fixed: 25, currency: CURRENCY_CODES.USD },\n },\n ],\n regionalFees: {\n EU: { percentage: 2.5, fixed: 30, currency: CURRENCY_CODES.EUR },\n PK: { percentage: 3.0, fixed: 50, currency: CURRENCY_CODES.PKR },\n US: { percentage: 2.9, fixed: 30, currency: CURRENCY_CODES.USD },\n CA: { percentage: 2.9, fixed: 40, currency: CURRENCY_CODES.CAD },\n GB: { percentage: 2.8, fixed: 25, currency: CURRENCY_CODES.GBP },\n AU: { percentage: 3.0, fixed: 35, currency: CURRENCY_CODES.AUD },\n IN: { percentage: 3.5, fixed: 40, currency: CURRENCY_CODES.INR },\n JP: { percentage: 3.0, fixed: 300, currency: CURRENCY_CODES.JPY },\n CN: { percentage: 3.5, fixed: 20, currency: CURRENCY_CODES.CNY },\n SG: { percentage: 3.0, fixed: 30, currency: CURRENCY_CODES.SGD },\n BR: { percentage: 3.8, fixed: 50, currency: CURRENCY_CODES.BRL },\n MX: { percentage: 3.5, fixed: 40, currency: CURRENCY_CODES.MXN },\n ZA: { percentage: 3.0, fixed: 50, currency: CURRENCY_CODES.ZAR },\n AE: { percentage: 3.0, fixed: 25, currency: CURRENCY_CODES.AED },\n NZ: { percentage: 3.0, fixed: 35, currency: CURRENCY_CODES.NZD },\n },\n additionalFees: {\n crossBorder: { percentage: 1.0 },\n currencyConversion: { percentage: 1.0, minimumFee: 50 },\n chargeback: { amount: 1500, currency: CURRENCY_CODES.USD },\n refund: { percentage: 2.9, fixed: 30 },\n },\n calculation: {\n rounding: 'nearest',\n minimumFee: { amount: 50, currency: CURRENCY_CODES.USD },\n },\n },\n limits: {\n amounts: {\n minimum: {\n [PAYMENT_METHOD.CreditCard]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.DebitCard]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BankTransfer]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PaypalAccount]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoBitcoin]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoEthereum]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoPolygon]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoOptimism]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdc]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdt]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoNativeToken]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PixInstant]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BoletoBancario]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SepaDirectDebit]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.IdealBank]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SofortBanking]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.AlipayDigital]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.WechatPayDigital]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.ApplePay]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.GooglePay]: { amount: 10, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SamsungPay]: { amount: 10, currency: CURRENCY_CODES.USD },\n },\n maximum: {\n [PAYMENT_METHOD.CreditCard]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.DebitCard]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BankTransfer]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PaypalAccount]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoBitcoin]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoEthereum]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoPolygon]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoOptimism]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdc]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoUsdt]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.CryptoNativeToken]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.PixInstant]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.BoletoBancario]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SepaDirectDebit]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.IdealBank]: { amount: 100000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SofortBanking]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.AlipayDigital]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.WechatPayDigital]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.ApplePay]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.GooglePay]: { amount: 10000, currency: CURRENCY_CODES.USD },\n [PAYMENT_METHOD.SamsungPay]: { amount: 10000, currency: CURRENCY_CODES.USD },\n },\n },\n velocity: {\n daily: {\n maxTransactions: 5000,\n maxAmount: { amount: 5000000, currency: CURRENCY_CODES.USD },\n },\n monthly: {\n maxTransactions: 100000,\n maxAmount: { amount: 100000000, currency: CURRENCY_CODES.USD },\n },\n },\n apiLimits: {\n requestsPerSecond: 100,\n requestsPerMinute: 6000,\n requestsPerHour: 360000,\n },\n providerSpecific: {},\n },\n\n performance: {\n timeouts: {\n connection: 5000,\n request: 15000,\n total: 20000,\n },\n retries: {\n enabled: true,\n maxAttempts: 0,\n strategy: 'exponential',\n baseDelay: 1000,\n maxDelay: 10000,\n jitter: true,\n retryableStatusCodes: [\n HTTP_STATUS.REQUEST_TIMEOUT,\n HTTP_STATUS.TOO_MANY_REQUESTS,\n HTTP_STATUS.INTERNAL_SERVER_ERROR,\n HTTP_STATUS.BAD_GATEWAY,\n HTTP_STATUS.SERVICE_UNAVAILABLE,\n HTTP_STATUS.GATEWAY_TIMEOUT,\n ],\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n windowSize: 60_000,\n timeout: 30_000,\n minimumRequests: 10,\n },\n connectionPool: {\n maxConnections: 50,\n minConnections: 5,\n idleTimeout: 30000,\n validationInterval: 60000,\n },\n caching: {\n enabled: true,\n ttl: {\n getPaymentStatus: 60,\n getTransaction: 60,\n },\n maxSize: 1000,\n evictionStrategy: 'lru',\n },\n },\n customSettings: {\n enableRadar: true,\n enableApplePay: true,\n },\n};\n","import { CURRENCY_CODES } from '../locale';\n\n// Convert enum to array for inclusion checks\nexport const SUPPORTED_CURRENCIES = Object.values(CURRENCY_CODES);\n\n// Validation Messages\nexport const VALIDATION_MESSAGES = {\n AMOUNT: 'Amount must be a positive number with valid currency format.',\n CORE_FIELDS:\n 'Missing required core fields: amount, paymentMethod, userId, userType, productId, productType.',\n CURRENCY: 'Unsupported or missing currency code.',\n METADATA: 'Invalid metadata structure or missing required metadata fields.',\n RISK_ASSESSMENT: 'Invalid or inconsistent risk assessment fields.',\n SCHEDULING: 'Invalid scheduling configuration.',\n REFUND_TRANSACTION_ID: 'Transaction ID is required.',\n REFUND_PROVIDER: 'Provider is required.',\n REFUND_AMOUNT: 'Refund amount must be positive.',\n};\n\n// Validator Names\nexport const VALIDATOR_NAMES = {\n AMOUNT: 'AmountValidator',\n CORE_FIELDS: 'CoreFieldValidator',\n CURRENCY: 'CurrencyValidator',\n METADATA: 'MetadataValidator',\n RISK_ASSESSMENT: 'RiskAssessmentValidator',\n SCHEDULING: 'SchedulingValidator',\n};\n\n// Core Fields\nexport const CORE_FIELDS = [\n 'amount',\n 'paymentMethod',\n 'userId',\n 'userType',\n 'productId',\n 'productType',\n] as const;\n\n// Billing Cycles\nexport const VALID_BILLING_CYCLES = ['monthly', 'quarterly', 'yearly'] as const;\n\n// Risk Levels\nexport const VALID_RISK_LEVELS = ['low', 'medium', 'high'] as const;\n\n// Recurrence Frequencies\nexport const VALID_RECURRENCE_FREQUENCIES = [\n 'daily',\n 'weekly',\n 'monthly',\n 'quarterly',\n 'yearly',\n] as const;\n\n// Numeric and Length Constants\nexport const MIN_POSITIVE_AMOUNT = 0;\nexport const CURRENCY_CODE_LENGTH = 3;\n","/**\n * @file ABTestingConfig.ts\n * @description\n * Production-ready A/B testing configuration for routing experiments.\n * Currently supports Cost Optimization strategy, with future extensibility\n * for reliability, performance, and hybrid routing.\n */\n\nimport {\n type ABTestingConfig,\n COST_OPTIMIZATION_STRATEGY,\n PAYMENT_METHOD,\n PAYMENT_PROVIDER_TYPE,\n ROUTING_STRATEGY,\n} from '@plyaz/types';\nimport { COUNTRY_CODES } from '../../../../locale';\n\n/**\n * Global A/B Testing Configuration\n *\n * Used by the routing engine to control experiment behavior, traffic allocation,\n * and dynamic routing strategy selection.\n */\nexport const ABTesting: ABTestingConfig = {\n enabled: true,\n\n /**\n * Default experiment ID used when no specific test is matched\n * or when experiment assignment fails.\n */\n defaultExperimentId: 'cost_vs_reliability_v1',\n\n /**\n * Registered A/B test experiments.\n * Each experiment defines targeting, traffic allocation, and routing overrides.\n */\n experiments: [\n {\n id: 'cost_vs_reliability_v1',\n description:\n 'Compare cost-optimized Moonpay routing vs. control group (Stripe reliability) for USD credit card payments in NA and APAC regions.',\n\n /**\n * Traffic allocation (in percentage).\n * Control: Default routing logic (e.g., reliability-first / baseline).\n * Variant: Modified routing logic (e.g., cost-optimized Moonpay).\n */\n allocation: {\n control: 70,\n variant: 30,\n },\n\n /**\n * Experiment-specific overrides for variant users.\n * These are merged with the default routing configuration.\n */\n overrides: {\n strategy: ROUTING_STRATEGY.CostOptimized,\n preferredProviders: [PAYMENT_PROVIDER_TYPE.Moonpay],\n costOptimization: {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Aggressive,\n // Additional configuration fields can be extended here when full cost optimization\n // support is implemented.\n },\n },\n\n /**\n * Targeting criteria for experiment eligibility.\n */\n targeting: {\n regions: [\n // North America\n COUNTRY_CODES.US,\n COUNTRY_CODES.CA,\n COUNTRY_CODES.MX,\n\n // APAC\n COUNTRY_CODES.SG,\n COUNTRY_CODES.HK,\n COUNTRY_CODES.JP,\n COUNTRY_CODES.KR,\n COUNTRY_CODES.AU,\n COUNTRY_CODES.NZ,\n COUNTRY_CODES.IN,\n COUNTRY_CODES.MY,\n COUNTRY_CODES.TH,\n COUNTRY_CODES.ID,\n COUNTRY_CODES.PH,\n COUNTRY_CODES.VN,\n\n // Europe + UK\n COUNTRY_CODES.GB, // United Kingdom\n COUNTRY_CODES.IE, // Ireland\n COUNTRY_CODES.FR, // France\n COUNTRY_CODES.DE, // Germany\n COUNTRY_CODES.IT, // Italy\n COUNTRY_CODES.ES, // Spain\n COUNTRY_CODES.PT, // Portugal\n COUNTRY_CODES.NL, // Netherlands\n COUNTRY_CODES.BE, // Belgium\n COUNTRY_CODES.LU, // Luxembourg\n COUNTRY_CODES.CH, // Switzerland\n COUNTRY_CODES.AT, // Austria\n COUNTRY_CODES.SE, // Sweden\n COUNTRY_CODES.NO, // Norway\n COUNTRY_CODES.DK, // Denmark\n COUNTRY_CODES.FI, // Finland\n COUNTRY_CODES.PL, // Poland\n COUNTRY_CODES.CZ, // Czech Republic\n COUNTRY_CODES.HU, // Hungary\n COUNTRY_CODES.GR, // Greece\n ],\n\n paymentMethods: [PAYMENT_METHOD.CreditCard],\n },\n\n /**\n * Scheduling controls.\n * Start immediately; no predefined end date.\n */\n schedule: {\n start: new Date(),\n end: undefined,\n },\n\n /** Experiment activation flag. */\n active: true,\n },\n ],\n\n /**\n * Fallback behavior when experiment assignment or execution fails.\n */\n fallback: {\n useControlOnFailure: true,\n logErrors: true,\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_PRIORITY_ORDER: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.PriorityOrder,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n failureDetection: {\n consecutiveFailureThreshold: 5,\n errorRateThreshold: 10,\n responseTimeThreshold: NUMERIX.FOUR_THOUSAND,\n healthCheckInterval: 30,\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.THOUSAND, NUMERIX.TWO_THOUSAND],\n exponentialBackoff: false,\n },\n recovery: {\n autoRecovery: false,\n recoveryInterval: 120,\n recoveryThreshold: 10,\n gradualRestoration: false,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 8,\n successThreshold: 5,\n timeout: NUMERIX.SIXTY_THOUSAND,\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_NEXT_AVAILABLE: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.NextAvailable,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n failureDetection: {\n consecutiveFailureThreshold: 3,\n errorRateThreshold: 5, // %\n responseTimeThreshold: NUMERIX.THREE_THOUSAND, // 3s\n healthCheckInterval: 15, // sec\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.FIVE_HUNDERD, NUMERIX.THOUSAND, NUMERIX.TWO_THOUSAND],\n exponentialBackoff: true,\n },\n recovery: {\n autoRecovery: true,\n recoveryInterval: 60, // sec\n recoveryThreshold: 5, // success events\n gradualRestoration: true,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n successThreshold: 3,\n timeout: NUMERIX.THIRTY_THOUSAND, // ms\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_PERFORMANCE_BASED: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.PerformanceBased,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n failureDetection: {\n consecutiveFailureThreshold: 2,\n errorRateThreshold: 3,\n responseTimeThreshold: NUMERIX.TWO_THOUSAND,\n healthCheckInterval: 10,\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.FIVE_HUNDERD, NUMERIX.THOUSAND],\n exponentialBackoff: true,\n },\n recovery: {\n autoRecovery: true,\n recoveryInterval: 30,\n recoveryThreshold: 3,\n gradualRestoration: true,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 4,\n successThreshold: 2,\n timeout: NUMERIX.TWENTY_THOUSAND,\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_LOAD_BALANCED: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.LoadBalanced,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n failureDetection: {\n consecutiveFailureThreshold: 3,\n errorRateThreshold: 5,\n responseTimeThreshold: NUMERIX.THREE_THOUSAND,\n healthCheckInterval: 20,\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.FIVE_HUNDERD, NUMERIX.THOUSAND, NUMERIX.TWO_THOUSAND],\n exponentialBackoff: true,\n },\n recovery: {\n autoRecovery: true,\n recoveryInterval: 45,\n recoveryThreshold: 4,\n gradualRestoration: true,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 6,\n successThreshold: 3,\n timeout: NUMERIX.FORTY_FIVE_THOUSAND,\n },\n};\n","import {\n FAIL_OVER_STRATEGY,\n type FailoverConfiguration,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const FAILOVER_GEOGRAPHIC: FailoverConfiguration = {\n enabled: true,\n strategy: FAIL_OVER_STRATEGY.Geographic,\n providerOrder: [PAYMENT_PROVIDER_TYPE.Moonpay, PAYMENT_PROVIDER_TYPE.Stripe],\n failureDetection: {\n consecutiveFailureThreshold: 3,\n errorRateThreshold: 6,\n responseTimeThreshold: NUMERIX.THREE_THOUSAND,\n healthCheckInterval: 25,\n },\n retry: {\n enabled: true,\n maxAttempts: 1,\n delays: [NUMERIX.THOUSAND, NUMERIX.TWO_THOUSAND],\n exponentialBackoff: true,\n },\n recovery: {\n autoRecovery: true,\n recoveryInterval: 90,\n recoveryThreshold: 7,\n gradualRestoration: true,\n },\n circuitBreaker: {\n enabled: true,\n failureThreshold: 5,\n successThreshold: 4,\n timeout: NUMERIX.FIFTY_THOUSAND,\n },\n};\n","import { FAIL_OVER_STRATEGY, type FailoverConfiguration } from '@plyaz/types';\nimport { FAILOVER_PRIORITY_ORDER } from './strategies/priority-order.config';\nimport { FAILOVER_NEXT_AVAILABLE } from './strategies/next-available.config';\nimport { FAILOVER_PERFORMANCE_BASED } from './strategies/performance-based.config';\nimport { FAILOVER_LOAD_BALANCED } from './strategies/load-balanced.config';\nimport { FAILOVER_GEOGRAPHIC } from './strategies/geographic.config';\n\nexport const FAILOVER_REGISTRY: Record<FAIL_OVER_STRATEGY, FailoverConfiguration> = {\n [FAIL_OVER_STRATEGY.PriorityOrder]: FAILOVER_PRIORITY_ORDER,\n [FAIL_OVER_STRATEGY.NextAvailable]: FAILOVER_NEXT_AVAILABLE,\n [FAIL_OVER_STRATEGY.PerformanceBased]: FAILOVER_PERFORMANCE_BASED,\n [FAIL_OVER_STRATEGY.LoadBalanced]: FAILOVER_LOAD_BALANCED,\n [FAIL_OVER_STRATEGY.Geographic]: FAILOVER_GEOGRAPHIC,\n};\n","import {\n type GeographicRoutingConfig,\n PAYMENT_METHOD,\n PAYMENT_PROVIDER_TYPE,\n REGULATORY_FRAMEWORK,\n TRANSACTION_TYPE,\n} from '@plyaz/types';\nimport { SUPPORTED_CURRENCIES } from '../../../validators';\n\n/**\n * Global geographic routing configuration\n *\n * Defines provider routing, regulations, and optimizations\n * per geographic region and currency zone.\n */\nexport const Geographic: GeographicRoutingConfig = {\n enabled: true,\n\n /** Region-based preferences */\n regionPreferences: {\n /** Pakistan */\n PK: {\n regionId: 'PK',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 95,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer, PAYMENT_METHOD.CryptoNativeToken],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 50000, currency: 'PKR' },\n monthly: { amount: 1000000, currency: 'PKR' },\n },\n requiredLicenses: [],\n },\n optimizations: {\n preferredDataCenters: ['asia-south1'],\n cdnEndpoints: ['cdn-pk.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** India */\n IN: {\n regionId: 'IN',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1600, checkInterval: 8 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 100000, currency: 'INR' },\n monthly: { amount: 2000000, currency: 'INR' },\n },\n requiredLicenses: ['RBI'],\n },\n optimizations: {\n preferredDataCenters: ['asia-south2'],\n cdnEndpoints: ['cdn-in.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** United Arab Emirates */\n AE: {\n regionId: 'AE',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1700, checkInterval: 10 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer, PAYMENT_METHOD.CreditCard],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 50000, currency: 'AED' },\n monthly: { amount: 1000000, currency: 'AED' },\n },\n requiredLicenses: ['CBUAE'],\n },\n optimizations: {\n preferredDataCenters: ['me-central1'],\n cdnEndpoints: ['cdn-ae.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** Singapore */\n SG: {\n regionId: 'SG',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer, PAYMENT_METHOD.CryptoNativeToken],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 60000, currency: 'SGD' },\n monthly: { amount: 1200000, currency: 'SGD' },\n },\n requiredLicenses: ['MAS'],\n },\n optimizations: {\n preferredDataCenters: ['asia-southeast1'],\n cdnEndpoints: ['cdn-sg.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** Japan */\n JP: {\n regionId: 'JP',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 1200, checkInterval: 6 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard, PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 8000000, currency: 'JPY' },\n monthly: { amount: 20000000, currency: 'JPY' },\n },\n requiredLicenses: ['FSA'],\n },\n optimizations: {\n preferredDataCenters: ['asia-northeast1'],\n cdnEndpoints: ['cdn-jp.plyaz.com'],\n cachingStrategy: 'aggressive',\n },\n },\n\n /** United States */\n US: {\n regionId: 'US',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 1000, checkInterval: 5 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard, PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 100000, currency: 'USD' },\n monthly: { amount: 2000000, currency: 'USD' },\n },\n requiredLicenses: ['FINTRAC', 'MSB'],\n },\n optimizations: {\n preferredDataCenters: ['us-central1'],\n cdnEndpoints: ['cdn-us.plyaz.com'],\n cachingStrategy: 'aggressive',\n },\n },\n\n /**Canada */\n CA: {\n regionId: 'CA',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard, PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 100000, currency: 'CAD' },\n monthly: { amount: 1500000, currency: 'CAD' },\n },\n requiredLicenses: ['FINTRAC'],\n },\n optimizations: {\n preferredDataCenters: ['northamerica-northeast1'],\n cdnEndpoints: ['cdn-ca.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** European Union */\n EU: {\n regionId: 'EU',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 1300, checkInterval: 5 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 80000, currency: 'EUR' },\n monthly: { amount: 1500000, currency: 'EUR' },\n },\n requiredLicenses: ['PSD2'],\n },\n optimizations: {\n preferredDataCenters: ['europe-west1'],\n cdnEndpoints: ['cdn-eu.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /**United Kingdom */\n UK: {\n regionId: 'UK',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.CreditCard, PAYMENT_METHOD.BankTransfer],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 70000, currency: 'GBP' },\n monthly: { amount: 1400000, currency: 'GBP' },\n },\n requiredLicenses: ['FCA'],\n },\n optimizations: {\n preferredDataCenters: ['europe-west2'],\n cdnEndpoints: ['cdn-uk.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n\n /** Australia */\n AU: {\n regionId: 'AU',\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n localPaymentMethods: [PAYMENT_METHOD.BankTransfer, PAYMENT_METHOD.CreditCard],\n regulations: {\n kycRequired: true,\n transactionLimits: {\n daily: { amount: 100000, currency: 'AUD' },\n monthly: { amount: 2000000, currency: 'AUD' },\n },\n requiredLicenses: ['AUSTRAC'],\n },\n optimizations: {\n preferredDataCenters: ['australia-southeast1'],\n cdnEndpoints: ['cdn-au.plyaz.com'],\n cachingStrategy: 'standard',\n },\n },\n },\n\n /** Cross-border routing setup */\n crossBorder: {\n enabled: true,\n preferredProviders: [PAYMENT_PROVIDER_TYPE.Stripe, PAYMENT_PROVIDER_TYPE.Moonpay],\n additionalFees: { percentage: 2.5 },\n },\n\n /** Global AML/KYC compliance rules */\n compliance: {\n enabled: true,\n rules: {\n GLOBAL: [\n {\n ruleId: 'aml_kyc_high_value',\n description: 'High-value transactions require KYC & AML checks',\n framework: REGULATORY_FRAMEWORK.Aml,\n conditions: {\n transactionTypes: [\n TRANSACTION_TYPE.Payment,\n TRANSACTION_TYPE.Refund,\n TRANSACTION_TYPE.Subscription,\n ],\n amountThresholds: { min: { amount: 1000, currency: 'USD' } },\n },\n actions: { verification: ['identity_document'], reporting: true, approval: true },\n enforcement: 'mandatory',\n },\n ],\n },\n },\n\n /** Currency zones configuration */\n currencyZones: {\n enabled: true,\n zones: {\n Fiat: {\n currencies: SUPPORTED_CURRENCIES,\n preferredProviders: [PAYMENT_PROVIDER_TYPE.Stripe],\n },\n Crypto: {\n currencies: ['BTC', 'ETH', 'USDT'],\n preferredProviders: [PAYMENT_PROVIDER_TYPE.Moonpay],\n },\n },\n },\n};\n","import { PERFORMANCE_METRIC_TYPE, type PerformanceMonitoringConfig } from '@plyaz/types';\n\n/**\n * Performance monitoring configuration\n *\n * Defines which metrics to collect, how often, and alert thresholds.\n * Tuned for high-availability payment routing with moderate sampling.\n *\n * @see PerformanceMonitoringConfig\n */\nexport const Performance: PerformanceMonitoringConfig = {\n /** Enable or disable performance monitoring globally */\n enabled: true,\n\n /** Metrics to collect and report */\n metrics: [\n PERFORMANCE_METRIC_TYPE.Cost,\n PERFORMANCE_METRIC_TYPE.SuccessRate,\n PERFORMANCE_METRIC_TYPE.Latency,\n PERFORMANCE_METRIC_TYPE.ErrorRate,\n PERFORMANCE_METRIC_TYPE.Throughput,\n ],\n\n /** Data retention period in minutes (1440 = 24 hours) */\n retentionPeriod: 1440,\n\n /** Sampling rate (0–1): 0.5 means 50% of events are sampled */\n samplingRate: 0.5,\n\n /** Alerting thresholds and sensitivity configuration */\n alerting: {\n enabled: true,\n\n /** Trigger alert if error rate exceeds 2% */\n errorRateThreshold: 2,\n\n /** Trigger alert if latency exceeds 1500ms */\n latencyThreshold: 1500,\n\n /** Trigger alert if success rate drops below 98% */\n successRateThreshold: 98,\n\n /** Minimum number of samples required before evaluating alert conditions */\n minSampleSize: 100,\n },\n\n /** Integration endpoints for metrics and logs */\n integrations: {\n metricsSink: 'prometheus',\n logSink: 'logstash',\n },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\nimport { TIME_CONSTANTS } from '../../../../../time';\n\nexport const WeightedLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.Weighted,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 40,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 60,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n maxConnections: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: NUMERIX.THOUSAND,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: NUMERIX.FIVE_HUNDERD,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n stickiness: {\n enabled: true,\n duration: TIME_CONSTANTS.HOUR, // 1 hour\n key: 'user',\n },\n autoRebalance: {\n enabled: true,\n interval: TIME_CONSTANTS.FIVE_MINUTES, // every 5 minutes\n basedOn: 'cost',\n },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\n\nexport const RoundRobinLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.RoundRobin,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 1,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 1,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n stickiness: { enabled: false, duration: 0, key: 'user' },\n autoRebalance: { enabled: false, interval: 0, basedOn: 'mixed' },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const LeastConnectionsLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.LeastConnections,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 1,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 1,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n maxConnections: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: NUMERIX.THOUSAND,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: NUMERIX.FIVE_HUNDERD,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n stickiness: { enabled: false, duration: 0, key: 'user' },\n autoRebalance: { enabled: false, interval: 0, basedOn: 'mixed' },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\nimport { NUMERIX } from '../../../../../db';\n\nexport const PerformanceBasedLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.PerformanceBased,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 50,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 50,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n autoRebalance: {\n enabled: true,\n interval: NUMERIX.SIXTY,\n basedOn: 'latency',\n },\n stickiness: { enabled: false, duration: 0, key: 'user' },\n};\n","import {\n type LoadBalancingConfig,\n LOAD_BALANCING_STRATEGY,\n PAYMENT_PROVIDER_TYPE,\n} from '@plyaz/types';\n\nexport const CustomLoadBalancing: LoadBalancingConfig = {\n enabled: true,\n strategy: LOAD_BALANCING_STRATEGY.Custom,\n providerWeights: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: 50,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 50,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n stickiness: { enabled: false, duration: 0, key: 'user' },\n autoRebalance: { enabled: false, interval: 0, basedOn: 'mixed' },\n};\n","import { LOAD_BALANCING_STRATEGY, type LoadBalancingConfig } from '@plyaz/types';\nimport { WeightedLoadBalancing } from './strategies/weighted.config';\nimport { RoundRobinLoadBalancing } from './strategies/round-robin.config';\nimport { LeastConnectionsLoadBalancing } from './strategies/least-connections.config';\nimport { PerformanceBasedLoadBalancing } from './strategies/performance-based.config';\nimport { CustomLoadBalancing } from './strategies/custom.config';\n\nexport const LoadBalancingRegistry: Record<LOAD_BALANCING_STRATEGY, LoadBalancingConfig> = {\n [LOAD_BALANCING_STRATEGY.Weighted]: WeightedLoadBalancing,\n [LOAD_BALANCING_STRATEGY.RoundRobin]: RoundRobinLoadBalancing,\n [LOAD_BALANCING_STRATEGY.LeastConnections]: LeastConnectionsLoadBalancing,\n [LOAD_BALANCING_STRATEGY.PerformanceBased]: PerformanceBasedLoadBalancing,\n [LOAD_BALANCING_STRATEGY.Custom]: CustomLoadBalancing,\n};\n","import {\n COST_OPTIMIZATION_STRATEGY,\n type CostOptimizationConfig,\n CURRENCY_CODES,\n} from '@plyaz/types';\n\nexport const COST_OPTIMIZATION_AGGRESSIVE: CostOptimizationConfig = {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Aggressive,\n calculation: {\n includeNetworkFees: true,\n includeFxCosts: true,\n includeOpportunityCosts: false,\n updateFrequency: 10, // minutes\n },\n feePreferences: {\n preferenceType: 'lowest_total',\n percentageWeight: 0.7,\n fixedWeight: 0.3,\n },\n volumeOptimization: {\n enabled: true,\n trackingWindow: 30, // days\n volumeTiers: [\n {\n name: 'Tier 1',\n minimumVolume: { amount: 0, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.9, fixed: 0.3, currency: CURRENCY_CODES.USD },\n },\n {\n name: 'Tier 2',\n minimumVolume: { amount: 10000, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.7, fixed: 0.25, currency: CURRENCY_CODES.USD },\n benefits: ['Reduced processing fees'],\n },\n ],\n },\n currencyOptimization: {\n enabled: true,\n rateProviders: ['internal_fx', 'openexchangerates'],\n updateFrequency: 60,\n spreadTolerance: 0.01,\n },\n};\n","import {\n COST_OPTIMIZATION_STRATEGY,\n type CostOptimizationConfig,\n CURRENCY_CODES,\n} from '@plyaz/types';\n\nexport const COST_OPTIMIZATION_BALANCED: CostOptimizationConfig = {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Balanced,\n calculation: {\n includeNetworkFees: true,\n includeFxCosts: true,\n includeOpportunityCosts: true,\n updateFrequency: 20,\n },\n feePreferences: {\n preferenceType: 'hybrid',\n percentageWeight: 0.5,\n fixedWeight: 0.5,\n },\n volumeOptimization: {\n enabled: true,\n trackingWindow: 60,\n volumeTiers: [\n {\n name: 'Base Tier',\n minimumVolume: { amount: 0, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.8, fixed: 0.3, currency: CURRENCY_CODES.USD },\n },\n {\n name: 'Growth Tier',\n minimumVolume: { amount: 50000, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.6, fixed: 0.25, currency: CURRENCY_CODES.USD },\n benefits: ['Priority routing', 'Fee stability'],\n },\n ],\n },\n currencyOptimization: {\n enabled: true,\n rateProviders: ['internal_fx', 'xe', 'reuters'],\n updateFrequency: 120,\n spreadTolerance: 0.015,\n },\n};\n","import { COST_OPTIMIZATION_STRATEGY, type CostOptimizationConfig } from '@plyaz/types';\n\nexport const COST_OPTIMIZATION_CONSERVATIVE: CostOptimizationConfig = {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Conservative,\n calculation: {\n includeNetworkFees: true,\n includeFxCosts: false,\n includeOpportunityCosts: true,\n updateFrequency: 60,\n },\n feePreferences: {\n preferenceType: 'fixed',\n percentageWeight: 0.3,\n fixedWeight: 0.7,\n },\n volumeOptimization: {\n enabled: false,\n trackingWindow: 90,\n volumeTiers: [],\n },\n currencyOptimization: {\n enabled: false,\n rateProviders: [],\n updateFrequency: 0,\n spreadTolerance: 0,\n },\n};\n","import {\n COST_OPTIMIZATION_STRATEGY,\n type CostOptimizationConfig,\n CURRENCY_CODES,\n} from '@plyaz/types';\n\nexport const COST_OPTIMIZATION_TARGETED: CostOptimizationConfig = {\n enabled: true,\n strategy: COST_OPTIMIZATION_STRATEGY.Targeted,\n calculation: {\n includeNetworkFees: true,\n includeFxCosts: true,\n includeOpportunityCosts: true,\n updateFrequency: 15,\n },\n feePreferences: {\n preferenceType: 'percentage',\n percentageWeight: 0.8,\n fixedWeight: 0.2,\n },\n volumeOptimization: {\n enabled: true,\n trackingWindow: 45,\n volumeTiers: [\n {\n name: 'Target Tier 1',\n minimumVolume: { amount: 0, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.9, fixed: 0.25, currency: CURRENCY_CODES.USD },\n },\n {\n name: 'Target Tier 2',\n minimumVolume: { amount: 25000, currency: CURRENCY_CODES.USD },\n feeRates: { percentage: 2.5, fixed: 0.2, currency: CURRENCY_CODES.USD },\n benefits: ['Custom FX routing', 'Preferred provider path'],\n },\n ],\n },\n currencyOptimization: {\n enabled: true,\n rateProviders: ['openexchangerates', 'currencylayer'],\n updateFrequency: 30,\n spreadTolerance: 0.008,\n },\n};\n","import { COST_OPTIMIZATION_STRATEGY, type CostOptimizationConfig } from '@plyaz/types';\nimport { COST_OPTIMIZATION_AGGRESSIVE } from './strategies/aggressive.config';\nimport { COST_OPTIMIZATION_BALANCED } from './strategies/balanced.config';\nimport { COST_OPTIMIZATION_CONSERVATIVE } from './strategies/conservative.config';\nimport { COST_OPTIMIZATION_TARGETED } from './strategies/targeted.config';\n\nexport const COST_OPTIMIZATION: Record<COST_OPTIMIZATION_STRATEGY, CostOptimizationConfig> = {\n [COST_OPTIMIZATION_STRATEGY.Aggressive]: COST_OPTIMIZATION_AGGRESSIVE,\n [COST_OPTIMIZATION_STRATEGY.Balanced]: COST_OPTIMIZATION_BALANCED,\n [COST_OPTIMIZATION_STRATEGY.Conservative]: COST_OPTIMIZATION_CONSERVATIVE,\n [COST_OPTIMIZATION_STRATEGY.Targeted]: COST_OPTIMIZATION_TARGETED,\n};\n","import { type AmountBasedRule, PAYMENT_PROVIDER_TYPE } from '@plyaz/types';\n\nexport const AMOUNT_BASED_SELECTION: AmountBasedRule[] = [\n // United States (USD)\n {\n name: 'USD',\n amountRange: {\n min: { amount: 1000, currency: 'USD' },\n max: { amount: 1000000, currency: 'USD' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Paypal,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Eurozone (EUR)\n {\n name: 'EUR',\n amountRange: {\n min: { amount: 900, currency: 'EUR' },\n max: { amount: 1000000, currency: 'EUR' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Brazil (BRL)\n {\n name: 'BRL',\n amountRange: {\n min: { amount: 50000, currency: 'BRL' },\n max: { amount: 1000000, currency: 'BRL' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Pix,\n weight: 100,\n trafficPercentage: 60,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 25,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 15,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 900, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // China (CNY)\n {\n name: 'CNY',\n amountRange: {\n min: { amount: 7000, currency: 'CNY' },\n max: { amount: 1000000, currency: 'CNY' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Alipay,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.WechatPay,\n weight: 90,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 850, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Canada (CAD)\n {\n name: 'CAD',\n amountRange: {\n min: { amount: 1300, currency: 'CAD' },\n max: { amount: 1000000, currency: 'CAD' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Australia (AUD)\n {\n name: 'AUD',\n amountRange: {\n min: { amount: 1400, currency: 'AUD' },\n max: { amount: 1000000, currency: 'AUD' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // India (INR)\n {\n name: 'INR',\n amountRange: {\n min: { amount: 75000, currency: 'INR' },\n max: { amount: 100000000, currency: 'INR' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n\n // Other international (USD fallback)\n {\n name: 'INTL',\n amountRange: {\n min: { amount: 1000, currency: 'USD' },\n max: { amount: 1000000, currency: 'USD' },\n },\n preferredProviders: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n specialHandling: { requireVerification: true, enhancedSecurity: true, manualReview: false },\n },\n];\n","import { type CurrencyCode, PAYMENT_PROVIDER_TYPE, type ProviderPreference } from '@plyaz/types';\n\nexport const CurrencySpecificProviders: Record<CurrencyCode, ProviderPreference[]> = {\n // --- Major currencies ---\n USD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1200, checkInterval: 5 },\n },\n ],\n EUR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 800, checkInterval: 3 },\n },\n ],\n GBP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n JPY: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n CHF: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 850, checkInterval: 3 },\n },\n ],\n CAD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n AUD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1200, checkInterval: 5 },\n },\n ],\n CNY: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n\n // --- Asian currencies ---\n INR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1500, checkInterval: 6 },\n },\n ],\n KRW: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n SGD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 3 },\n },\n ],\n HKD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n TWD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n THB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n IDR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n MYR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n PHP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n VND: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n BDT: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1700, checkInterval: 10 },\n },\n ],\n PKR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n LKR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1700, checkInterval: 10 },\n },\n ],\n\n // --- European currencies ---\n SEK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n NOK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n DKK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n PLN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n CZK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n HUF: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n RON: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n BGN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n HRK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n RSD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n ISK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n\n // --- Americas ---\n BRL: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n MXN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n ARS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n CLP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n COP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n PEN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n UYU: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n VES: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 89, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n BOB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 89, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n PYG: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 89, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n CRC: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n DOP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n JMD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n TTD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n\n // --- Middle East / Africa ---\n AED: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n SAR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n QAR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n KWD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n BHD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n OMR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n JOD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n ILS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 900, checkInterval: 3 },\n },\n ],\n TRY: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n ZAR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n NGN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n EGP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n KES: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n GHS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n MAD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n TND: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n DZD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n\n // --- Crypto pseudo-currencies ---\n BTC: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n ETH: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n USDT: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n USDC: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1500, checkInterval: 10 },\n },\n ],\n\n // --- Central America / Caribbean ---\n GTQ: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n HNL: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n NIO: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n PAB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 95, maxResponseTime: 1000, checkInterval: 5 },\n },\n ],\n BBD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n\n // --- Middle East (additional) ---\n IQD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n IRR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 85, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n LBP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 85, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n SYP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 85, maxResponseTime: 1800, checkInterval: 10 },\n },\n ],\n\n // --- Africa (additional) ---\n ETB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n TZS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n UGX: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n ZMW: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n BWP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n MUR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n\n // --- Pacific / Oceania ---\n NZD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 95,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 1000, checkInterval: 4 },\n },\n ],\n FJD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 92, maxResponseTime: 1400, checkInterval: 6 },\n },\n ],\n PGK: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 90, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n\n // --- Former Soviet / Central Asia ---\n RUB: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n UAH: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n BYN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n KZT: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n UZS: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n AZN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n GEL: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n AMD: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 85,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 91, maxResponseTime: 1500, checkInterval: 8 },\n },\n ],\n};\n","import { type CustomSelectionRule, PAYMENT_PROVIDER_TYPE } from '@plyaz/types';\n\nexport const CUSTOM_RULES: CustomSelectionRule[] = [\n {\n ruleId: 'crypto_onramp',\n name: 'Crypto: force Moonpay',\n description: 'If payment method is crypto-onramp, prefer Moonpay',\n conditions: {\n expression:\n \"['crypto_bitcoin','crypto_ethereum','crypto_polygon','crypto_native_token'].includes(paymentMethod)\",\n requiredContext: ['paymentMethod'],\n },\n providerSelection: {\n preferred: [PAYMENT_PROVIDER_TYPE.Moonpay],\n excluded: [PAYMENT_PROVIDER_TYPE.Stripe],\n weightAdjustments: {\n [PAYMENT_PROVIDER_TYPE.Stripe]: -20,\n [PAYMENT_PROVIDER_TYPE.Paypal]: 0,\n [PAYMENT_PROVIDER_TYPE.CheckoutCom]: 0,\n [PAYMENT_PROVIDER_TYPE.Adyen]: 0,\n [PAYMENT_PROVIDER_TYPE.Moonpay]: 20,\n [PAYMENT_PROVIDER_TYPE.CoinbaseCommerce]: 0,\n [PAYMENT_PROVIDER_TYPE.BlockchainBridge]: 0,\n [PAYMENT_PROVIDER_TYPE.Pix]: 0,\n [PAYMENT_PROVIDER_TYPE.Boleto]: 0,\n [PAYMENT_PROVIDER_TYPE.Sepa]: 0,\n [PAYMENT_PROVIDER_TYPE.Ideal]: 0,\n [PAYMENT_PROVIDER_TYPE.Sofort]: 0,\n [PAYMENT_PROVIDER_TYPE.Alipay]: 0,\n [PAYMENT_PROVIDER_TYPE.WechatPay]: 0,\n [PAYMENT_PROVIDER_TYPE.MockProvider]: 0,\n },\n },\n priority: 100,\n enabled: true,\n },\n];\n","import { PAYMENT_PROVIDER_TYPE, type ProviderPreference } from '@plyaz/types';\nimport { SUPPORTED_CURRENCIES } from '../../validators';\nimport { NUMERIX } from '../../../db';\nimport { CURRENCY_CODES } from '../../../locale';\n\n/**\n * Default provider preferences used for global or fallback routing.\n * Includes weight-based prioritization and health check parameters.\n */\nexport const DEFAULT_PROVIDERS: ProviderPreference[] = [\n {\n /** Primary high-performance global provider */\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 40, // slightly adjusted for balance\n conditions: [],\n minAmount: { amount: 1, currency: CURRENCY_CODES.USD },\n maxAmount: { amount: 10000, currency: CURRENCY_CODES.USD },\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 800,\n checkInterval: 2, // frequent health checks\n },\n },\n {\n /** Secondary fallback or region-optimized provider */\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 60,\n conditions: [\n {\n type: 'currency',\n operator: 'in',\n value: SUPPORTED_CURRENCIES.slice(0, NUMERIX.FIFTY),\n required: false,\n },\n ],\n minAmount: { amount: 5, currency: CURRENCY_CODES.USD },\n maxAmount: { amount: 20000, currency: CURRENCY_CODES.USD },\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 1500,\n checkInterval: 5,\n },\n },\n];\n","import { PAYMENT_METHOD, PAYMENT_PROVIDER_TYPE, type ProviderPreference } from '@plyaz/types';\n\nexport const MethodSpecificProviders: Record<PAYMENT_METHOD, ProviderPreference[]> = {\n // --- CARD PAYMENTS ---\n [PAYMENT_METHOD.CreditCard]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 110,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Adyen,\n weight: 90,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 800,\n checkInterval: 3,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 40,\n trafficPercentage: 10,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 94,\n maxResponseTime: 1200,\n checkInterval: 5,\n },\n },\n ],\n\n [PAYMENT_METHOD.DebitCard]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 60,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 700,\n checkInterval: 3,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.CheckoutCom,\n weight: 90,\n trafficPercentage: 40,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 900,\n checkInterval: 4,\n },\n },\n ],\n\n [PAYMENT_METHOD.BankTransfer]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Adyen,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 900,\n checkInterval: 3,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 800,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.PaypalAccount]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Paypal,\n weight: 150,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 99,\n maxResponseTime: 700,\n checkInterval: 2,\n },\n },\n ],\n\n // --- CRYPTO PAYMENTS ---\n [PAYMENT_METHOD.CryptoBitcoin]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.CoinbaseCommerce,\n weight: 100,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 1400,\n checkInterval: 8,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoEthereum]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.CoinbaseCommerce,\n weight: 100,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 1400,\n checkInterval: 8,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoPolygon]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 110,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 94,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoOptimism]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 110,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 94,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoUsdc]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 60,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 1300,\n checkInterval: 8,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.CoinbaseCommerce,\n weight: 90,\n trafficPercentage: 40,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 95,\n maxResponseTime: 1200,\n checkInterval: 8,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoUsdt]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 1300,\n checkInterval: 8,\n },\n },\n ],\n\n [PAYMENT_METHOD.CryptoNativeToken]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.BlockchainBridge,\n weight: 100,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 93,\n maxResponseTime: 1500,\n checkInterval: 10,\n },\n },\n ],\n\n // --- LOCAL / ALT PAYMENTS ---\n [PAYMENT_METHOD.PixInstant]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Pix,\n weight: 130,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 500,\n checkInterval: 2,\n },\n },\n ],\n\n [PAYMENT_METHOD.BoletoBancario]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Boleto,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 900,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.SepaDirectDebit]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Sepa,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 800,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.IdealBank]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Ideal,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 700,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.SofortBanking]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Sofort,\n weight: 110,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 96,\n maxResponseTime: 800,\n checkInterval: 3,\n },\n },\n ],\n\n [PAYMENT_METHOD.AlipayDigital]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Alipay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 99,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n ],\n\n [PAYMENT_METHOD.WechatPayDigital]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.WechatPay,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 99,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n ],\n\n // --- DIGITAL WALLETS ---\n [PAYMENT_METHOD.ApplePay]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 110,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 500,\n checkInterval: 2,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Adyen,\n weight: 100,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n ],\n\n [PAYMENT_METHOD.GooglePay]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 110,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 98,\n maxResponseTime: 500,\n checkInterval: 2,\n },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Adyen,\n weight: 100,\n trafficPercentage: 20,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 600,\n checkInterval: 2,\n },\n },\n ],\n\n [PAYMENT_METHOD.SamsungPay]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: {\n minSuccessRate: 97,\n maxResponseTime: 600,\n checkInterval: 3,\n },\n },\n ],\n};\n","import { PAYMENT_PROVIDER_TYPE, type ProviderPreference } from '@plyaz/types';\n\nexport const regionSpecificProviders: Record<string, ProviderPreference[]> = {\n // United States\n US: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // European Union\n EU: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Brazil\n BR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Pix,\n weight: 100,\n trafficPercentage: 60,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 90,\n trafficPercentage: 25,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 15,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 900, checkInterval: 5 },\n },\n ],\n\n // China\n CN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Alipay,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.WechatPay,\n weight: 90,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 850, checkInterval: 5 },\n },\n ],\n\n // Canada\n CA: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Australia\n AU: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // India\n IN: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Japan\n JP: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Korea\n KR: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n\n // Mexico\n MX: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 70,\n conditions: [],\n healthRequirements: { minSuccessRate: 98, maxResponseTime: 750, checkInterval: 5 },\n },\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 80,\n trafficPercentage: 30,\n conditions: [],\n healthRequirements: { minSuccessRate: 96, maxResponseTime: 800, checkInterval: 5 },\n },\n ],\n};\n","import { PAYMENT_PROVIDER_TYPE, type TimeBasedRule } from '@plyaz/types';\nimport { ALL_COUNTRY_TIMEZONES, DAYS_OF_WEEK, HOURS_OF_DAY } from '../../../time';\n\nexport const TIME_BASED_SELECTION: TimeBasedRule[] = [\n {\n name: 'Night / low-traffic cost save',\n timeConditions: {\n daysOfWeek: DAYS_OF_WEEK,\n hoursOfDay: HOURS_OF_DAY,\n timeZones: ALL_COUNTRY_TIMEZONES,\n },\n providerPreferences: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 100,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1600, checkInterval: 10 },\n },\n ],\n reason: 'lower fees observed during off-peak — route to cheaper provider',\n },\n];\n","import { PAYMENT_PROVIDER_TYPE, type ProviderPreference, USER_TYPE } from '@plyaz/types';\n\nexport const UserTypeSelection: Record<USER_TYPE, ProviderPreference[]> = {\n [USER_TYPE.Fan]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 94, maxResponseTime: 1200, checkInterval: 5 },\n },\n ],\n [USER_TYPE.Athlete]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 100,\n trafficPercentage: 90,\n conditions: [],\n healthRequirements: { minSuccessRate: 97, maxResponseTime: 800, checkInterval: 3 },\n },\n ],\n [USER_TYPE.Club]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 110,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 700, checkInterval: 2 },\n },\n ],\n [USER_TYPE.Agent]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n [USER_TYPE.Scout]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Moonpay,\n weight: 90,\n trafficPercentage: 80,\n conditions: [],\n healthRequirements: { minSuccessRate: 93, maxResponseTime: 1300, checkInterval: 6 },\n },\n ],\n [USER_TYPE.Admin]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 600, checkInterval: 2 },\n },\n ],\n [USER_TYPE.System]: [\n {\n provider: PAYMENT_PROVIDER_TYPE.Stripe,\n weight: 120,\n trafficPercentage: 100,\n conditions: [],\n healthRequirements: { minSuccessRate: 99, maxResponseTime: 600, checkInterval: 2 },\n },\n ],\n};\n","/**\n * Storage Configuration Constants\n *\n * Default configuration values for the storage system.\n * These can be overridden at runtime through configuration objects.\n *\n * @module src/storage/constants\n */\n\n// Import type-level constants from @plyaz/types\nimport {\n ADAPTER_HEALTH_STATUS,\n FILE_ACCESS_LEVEL,\n PATH_GENERATION_STRATEGY,\n STORAGE_QUEUE_PRIORITY,\n RETRY_STRATEGY,\n} from '@plyaz/types';\n\n// Import byte calculation constants from @plyaz/config/math\nimport { NUMBER_SYSTEM } from '../math/constants';\n\n// Common size values in MB and GB\nconst SIZE_5_MB = 5;\nconst SIZE_10_MB = 10;\nconst SIZE_25_MB = 25;\nconst SIZE_50_MB = 50;\nconst SIZE_100_MB = 100;\nconst SIZE_500_MB = 500;\nconst SIZE_1_GB = 1;\n/**\n * File Validation Configuration\n */\nexport const FILE_VALIDATION_CONFIG = {\n /**\n * Default maximum file size (bytes)\n * 100MB - reasonable default for most applications\n */\n DEFAULT_MAX_FILE_SIZE: SIZE_100_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Default minimum file size (bytes)\n * 1 byte - allow any non-empty file\n */\n DEFAULT_MIN_FILE_SIZE: 1,\n\n /**\n * Maximum file size for images (bytes)\n * 25MB - covers high-resolution images\n */\n IMAGE_MAX_SIZE: SIZE_25_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum file size for videos (bytes)\n * 500MB - allows reasonable quality videos\n */\n VIDEO_MAX_SIZE: SIZE_500_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum file size for documents (bytes)\n * 50MB - covers most document types including PDFs\n */\n DOCUMENT_MAX_SIZE: SIZE_50_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum file size for audio (bytes)\n * 100MB - allows high-quality audio files\n */\n AUDIO_MAX_SIZE: SIZE_100_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum file size for archives (bytes)\n * 1GB - allows compressed collections\n */\n ARCHIVE_MAX_SIZE: SIZE_1_GB * NUMBER_SYSTEM.BYTES_PER_GB,\n\n /**\n * Default allowed MIME types for images\n */\n DEFAULT_ALLOWED_IMAGE_TYPES: [\n 'image/jpeg',\n 'image/jpg',\n 'image/png',\n 'image/gif',\n 'image/webp',\n 'image/avif',\n 'image/svg+xml',\n ],\n\n /**\n * Default allowed MIME types for videos\n */\n DEFAULT_ALLOWED_VIDEO_TYPES: [\n 'video/mp4',\n 'video/mpeg',\n 'video/quicktime',\n 'video/x-msvideo',\n 'video/webm',\n ],\n\n /**\n * Default allowed MIME types for documents\n */\n DEFAULT_ALLOWED_DOCUMENT_TYPES: [\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/plain',\n 'text/csv',\n ],\n\n /**\n * Default allowed MIME types for audio\n */\n DEFAULT_ALLOWED_AUDIO_TYPES: ['audio/mpeg', 'audio/mp3', 'audio/wav', 'audio/ogg', 'audio/webm'],\n\n /**\n * Blocked executable extensions\n */\n BLOCKED_EXECUTABLE_EXTENSIONS: [\n '.exe',\n '.bat',\n '.cmd',\n '.com',\n '.sh',\n '.bash',\n '.ps1',\n '.app',\n '.deb',\n '.rpm',\n '.dmg',\n '.pkg',\n '.msi',\n ],\n} as const;\n\n/**\n * Storage Retry Configuration\n */\nexport const STORAGE_RETRY_CONFIG = {\n /**\n * Default retry strategy\n */\n DEFAULT_STRATEGY: RETRY_STRATEGY.ExponentialBackoff,\n\n /**\n * Default maximum number of retry attempts\n */\n DEFAULT_MAX_ATTEMPTS: 3,\n\n /**\n * Default initial delay between retries (milliseconds)\n */\n DEFAULT_INITIAL_DELAY_MS: 1000,\n\n /**\n * Maximum delay between retries (milliseconds)\n */\n MAX_DELAY_MS: 30000,\n\n /**\n * Backoff multiplier for exponential backoff\n */\n BACKOFF_MULTIPLIER: 2,\n} as const;\n\n/**\n * Path Generation Configuration\n */\nexport const PATH_GENERATION_CONFIG = {\n /**\n * Default path generation strategy\n */\n DEFAULT_STRATEGY: PATH_GENERATION_STRATEGY.HashBased,\n\n /**\n * Whether to include hash in path by default\n */\n DEFAULT_INCLUDE_HASH: true,\n\n /**\n * Whether to include timestamp in path by default\n */\n DEFAULT_INCLUDE_TIMESTAMP: false,\n\n /**\n * Default path template for entity-based strategy\n * Supports: {entityType}, {entityId}, {category}, {filename}, {hash}, {timestamp}\n */\n DEFAULT_ENTITY_TEMPLATE: '{entityType}/{entityId}/{category}/{filename}',\n\n /**\n * Default path template for date-based strategy\n */\n DEFAULT_DATE_TEMPLATE: '{year}/{month}/{day}/{filename}',\n\n /**\n * Default path template for category-based strategy\n */\n DEFAULT_CATEGORY_TEMPLATE: '{category}/{filename}',\n} as const;\n\n/**\n * Storage Queue Configuration\n */\nexport const STORAGE_QUEUE_CONFIG = {\n /**\n * Default maximum queue size\n */\n DEFAULT_MAX_SIZE: 10000,\n\n /**\n * Default number of concurrent workers\n */\n DEFAULT_CONCURRENCY: 5,\n\n /**\n * Default queue priority\n */\n DEFAULT_PRIORITY: STORAGE_QUEUE_PRIORITY.NORMAL,\n\n /**\n * Default maximum retries for queue items\n */\n DEFAULT_MAX_RETRIES: 3,\n\n /**\n * Default retry delay for failed queue items (milliseconds)\n */\n DEFAULT_RETRY_DELAY_MS: 5000,\n} as const;\n\n/**\n * Adapter Configuration\n */\nexport const ADAPTER_CONFIG = {\n /**\n * Default adapter priority\n */\n DEFAULT_PRIORITY: 1,\n\n /**\n * Default health check interval (milliseconds)\n */\n DEFAULT_HEALTH_CHECK_INTERVAL_MS: 30000,\n\n /**\n * Default health check timeout (milliseconds)\n */\n DEFAULT_HEALTH_CHECK_TIMEOUT_MS: 5000,\n\n /**\n * Default healthy status\n */\n DEFAULT_HEALTH_STATUS: ADAPTER_HEALTH_STATUS.UNKNOWN,\n\n /**\n * Maximum acceptable health check response time (milliseconds)\n */\n MAX_ACCEPTABLE_RESPONSE_TIME_MS: 2000,\n} as const;\n\n/**\n * Upload Configuration\n */\nexport const UPLOAD_CONFIG = {\n /**\n * Default maximum concurrent uploads\n */\n DEFAULT_MAX_CONCURRENT: 3,\n\n /**\n * Default upload timeout (milliseconds)\n * 5 minutes for large files\n */\n DEFAULT_TIMEOUT_MS: 300000,\n\n /**\n * Default chunk size for chunked uploads (bytes)\n * 5MB per chunk\n */\n DEFAULT_CHUNK_SIZE: SIZE_5_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Minimum file size to trigger chunked upload (bytes)\n * 50MB - files larger than this use chunked upload\n */\n CHUNKED_UPLOAD_THRESHOLD: SIZE_50_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Maximum number of upload retries\n */\n MAX_UPLOAD_RETRIES: 3,\n\n /**\n * Whether to extract metadata by default\n */\n DEFAULT_EXTRACT_METADATA: true,\n\n /**\n * Whether to scan for viruses by default\n */\n DEFAULT_VIRUS_SCAN: false,\n\n /**\n * Default file access level\n */\n DEFAULT_ACCESS_LEVEL: FILE_ACCESS_LEVEL.PRIVATE,\n} as const;\n\n/**\n * Download Configuration\n */\nexport const DOWNLOAD_CONFIG = {\n /**\n * Default download timeout (milliseconds)\n */\n DEFAULT_TIMEOUT_MS: 120000, // 2 minutes\n\n /**\n * Default signed URL expiry (seconds)\n * 1 hour\n */\n DEFAULT_SIGNED_URL_EXPIRY_SECONDS: 3600,\n\n /**\n * Maximum signed URL expiry (seconds)\n * 7 days\n */\n MAX_SIGNED_URL_EXPIRY_SECONDS: 604800,\n\n /**\n * Minimum signed URL expiry (seconds)\n * 5 minutes\n */\n MIN_SIGNED_URL_EXPIRY_SECONDS: 300,\n} as const;\n\n/**\n * Media Processing Configuration\n */\nexport const MEDIA_PROCESSING_CONFIG = {\n /**\n * Default image quality (1-100)\n */\n DEFAULT_IMAGE_QUALITY: 85,\n\n /**\n * Default thumbnail width (pixels)\n */\n DEFAULT_THUMBNAIL_WIDTH: 200,\n\n /**\n * Default thumbnail height (pixels)\n */\n DEFAULT_THUMBNAIL_HEIGHT: 200,\n\n /**\n * Default image format for conversion\n */\n DEFAULT_IMAGE_FORMAT: 'jpeg' as const,\n\n /**\n * Maximum processing timeout (milliseconds)\n * 10 minutes for complex media processing\n */\n MAX_PROCESSING_TIMEOUT_MS: 600000,\n\n /**\n * Maximum image dimensions (pixels)\n */\n MAX_IMAGE_DIMENSIONS: 10000,\n\n /**\n * Whether to generate thumbnails by default\n */\n DEFAULT_GENERATE_THUMBNAIL: true,\n} as const;\n\n/**\n * Virus Scan Configuration\n */\nexport const VIRUS_SCAN_CONFIG = {\n /**\n * Maximum file size to scan (bytes)\n * 100MB - VirusTotal free tier limit\n */\n MAX_SCAN_SIZE: SIZE_100_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n\n /**\n * Whether to fail upload on virus detection\n */\n FAIL_ON_DETECTION: true,\n\n /**\n * Scan timeout (milliseconds)\n */\n SCAN_TIMEOUT_MS: 60000, // 1 minute\n} as const;\n\n/**\n * Compliance Configuration\n */\nexport const COMPLIANCE_CONFIG = {\n /**\n * Default retention period (days)\n */\n DEFAULT_RETENTION_DAYS: 365,\n\n /**\n * Whether files are immutable by default\n */\n DEFAULT_IMMUTABLE: false,\n\n /**\n * Whether to auto-delete after retention expires\n */\n DEFAULT_AUTO_DELETE: false,\n\n /**\n * Retention check interval (milliseconds)\n * Check daily\n */\n RETENTION_CHECK_INTERVAL_MS: 86400000, // 24 hours\n} as const;\n\n/**\n * Storage Template & PDF Configuration\n */\nexport const STORAGE_TEMPLATE_CONFIG = {\n /**\n * Default PDF format\n */\n DEFAULT_PDF_FORMAT: 'A4' as const,\n\n /**\n * Default PDF orientation\n */\n DEFAULT_PDF_ORIENTATION: 'portrait' as const,\n\n /**\n * Default PDF margin\n */\n DEFAULT_PDF_MARGIN: {\n top: '20mm',\n right: '15mm',\n bottom: '20mm',\n left: '15mm',\n },\n\n /**\n * Whether to print background by default\n */\n DEFAULT_PRINT_BACKGROUND: true,\n\n /**\n * PDF generation timeout (milliseconds)\n */\n PDF_GENERATION_TIMEOUT_MS: 60000, // 1 minute\n\n /**\n * Maximum template size (bytes)\n */\n MAX_TEMPLATE_SIZE: NUMBER_SYSTEM.BYTES_PER_MB, // 1MB\n} as const;\n\n/**\n * Share Link Configuration\n */\nexport const SHARE_LINK_CONFIG = {\n /**\n * Default share link expiry (seconds)\n * 7 days\n */\n DEFAULT_EXPIRY_SECONDS: 604800,\n\n /**\n * Maximum share link expiry (seconds)\n * 30 days\n */\n MAX_EXPIRY_SECONDS: 2592000,\n\n /**\n * Default maximum downloads per share link\n */\n DEFAULT_MAX_DOWNLOADS: 100,\n\n /**\n * Whether to require password by default\n */\n DEFAULT_REQUIRE_PASSWORD: false,\n} as const;\n\n/**\n * TTL Configuration\n */\nexport const TTL_CONFIG = {\n /**\n * Default TTL for temporary files (seconds)\n * 24 hours\n */\n DEFAULT_TTL_SECONDS: 86400,\n\n /**\n * TTL cleanup interval (milliseconds)\n * Check every hour\n */\n CLEANUP_INTERVAL_MS: 3600000,\n\n /**\n * Grace period before actual deletion (milliseconds)\n * 1 hour buffer\n */\n DELETION_GRACE_PERIOD_MS: 3600000,\n} as const;\n\n/**\n * CORS Configuration\n */\nexport const CORS_CONFIG = {\n /**\n * Default allowed origins\n */\n DEFAULT_ALLOWED_ORIGINS: ['*'],\n\n /**\n * Default allowed methods\n */\n DEFAULT_ALLOWED_METHODS: ['GET', 'POST', 'PUT', 'DELETE', 'HEAD'],\n\n /**\n * Default allowed headers\n */\n DEFAULT_ALLOWED_HEADERS: [\n 'Content-Type',\n 'Authorization',\n 'X-Requested-With',\n 'X-Upload-Content-Type',\n 'X-Upload-Content-Length',\n ],\n\n /**\n * Default exposed headers\n */\n DEFAULT_EXPOSED_HEADERS: ['ETag', 'Content-Length', 'Content-Type', 'Last-Modified'],\n\n /**\n * Default max age (seconds)\n */\n DEFAULT_MAX_AGE_SECONDS: 3600,\n\n /**\n * Whether to allow credentials by default\n */\n DEFAULT_ALLOW_CREDENTIALS: false,\n} as const;\n\n/**\n * Audit Log Configuration\n */\nexport const AUDIT_CONFIG = {\n /**\n * Whether to log uploads by default\n */\n DEFAULT_LOG_UPLOADS: true,\n\n /**\n * Whether to log downloads by default\n */\n DEFAULT_LOG_DOWNLOADS: true,\n\n /**\n * Whether to log deletes by default\n */\n DEFAULT_LOG_DELETES: true,\n\n /**\n * Audit log retention period (days)\n */\n LOG_RETENTION_DAYS: 365,\n\n /**\n * Maximum audit log size per file (bytes)\n */\n MAX_LOG_SIZE: SIZE_10_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n} as const;\n\n/**\n * CDN Invalidation Configuration\n */\nexport const CDN_CONFIG = {\n /**\n * Default invalidation timeout (milliseconds)\n */\n DEFAULT_INVALIDATION_TIMEOUT_MS: 30000,\n\n /**\n * Maximum batch size for invalidation\n */\n MAX_INVALIDATION_BATCH_SIZE: 100,\n\n /**\n * Invalidation retry attempts\n */\n INVALIDATION_MAX_RETRIES: 3,\n} as const;\n\n/**\n * Monitoring Configuration\n */\nexport const MONITORING_CONFIG = {\n /**\n * Metrics collection interval (milliseconds)\n */\n METRICS_INTERVAL_MS: 60000, // 1 minute\n\n /**\n * Whether to track upload progress by default\n */\n DEFAULT_TRACK_PROGRESS: true,\n\n /**\n * Progress update interval (milliseconds)\n */\n PROGRESS_UPDATE_INTERVAL_MS: 500,\n} as const;\n\n/**\n * Cloudflare R2 Configuration\n */\nexport const CLOUDFLARE_R2_CONFIG = {\n /**\n * Default region\n */\n DEFAULT_REGION: 'auto' as const,\n\n /**\n * Default endpoint format\n */\n DEFAULT_ENDPOINT_FORMAT: 'https://{accountId}.r2.cloudflarestorage.com',\n} as const;\n\n/**\n * Supabase Storage Configuration\n */\nexport const SUPABASE_STORAGE_CONFIG = {\n /**\n * Default bucket name\n */\n DEFAULT_BUCKET: 'uploads',\n\n /**\n * Upload upsert by default\n */\n DEFAULT_UPSERT: false,\n} as const;\n\n/**\n * Export all configuration as a single object for convenience\n */\nexport const STORAGE_PACKAGE_CONFIG = {\n FILE_VALIDATION: FILE_VALIDATION_CONFIG,\n RETRY: STORAGE_RETRY_CONFIG,\n PATH_GENERATION: PATH_GENERATION_CONFIG,\n QUEUE: STORAGE_QUEUE_CONFIG,\n ADAPTER: ADAPTER_CONFIG,\n UPLOAD: UPLOAD_CONFIG,\n DOWNLOAD: DOWNLOAD_CONFIG,\n MEDIA_PROCESSING: MEDIA_PROCESSING_CONFIG,\n VIRUS_SCAN: VIRUS_SCAN_CONFIG,\n COMPLIANCE: COMPLIANCE_CONFIG,\n TEMPLATE: STORAGE_TEMPLATE_CONFIG,\n SHARE_LINK: SHARE_LINK_CONFIG,\n TTL: TTL_CONFIG,\n CORS: CORS_CONFIG,\n AUDIT: AUDIT_CONFIG,\n CDN: CDN_CONFIG,\n MONITORING: MONITORING_CONFIG,\n CLOUDFLARE_R2: CLOUDFLARE_R2_CONFIG,\n SUPABASE_STORAGE: SUPABASE_STORAGE_CONFIG,\n} as const;\n","/**\n * Storage Default Configurations\n *\n * Sensible default configurations for the storage system.\n * These defaults provide production-ready compliance and operational behavior.\n *\n * @module src/storage/defaults\n */\n\nimport type {\n StorageComplianceConfig,\n StorageRetentionPolicy,\n StoragePresetConfig,\n StorageVariantConfig,\n} from '@plyaz/types';\nimport {\n STORAGE_JURISDICTION,\n STORAGE_REGULATORY_FRAMEWORK,\n FILE_CATEGORY,\n STORAGE_VARIANT_NAME,\n STORAGE_DEVICE_TYPE,\n} from '@plyaz/types';\n\n/**\n * Default retention policy - FINANCE/CRYPTO FOCUSED\n *\n * - 7 years retention (financial/tax compliance requirement)\n * - Soft delete enabled with 60-day grace period\n * - Not immutable by default (allows correction of errors)\n * - Financial industry standard retention\n *\n * This policy is designed for crypto/blockchain platforms and provides:\n * - IRS/SEC compliance (7-year retention)\n * - Extended grace period for financial data recovery (60 days)\n * - Audit trail for regulatory requirements\n * - Transaction record preservation\n *\n * Suitable for: Crypto wallets, blockchain platforms, financial services\n */\nexport const DEFAULT_RETENTION_POLICY: StorageRetentionPolicy = {\n type: 'regulatory',\n retentionYears: 7, // Financial/tax compliance (IRS/SEC requirement)\n immutable: false, // Can be corrected if needed\n softDelete: true, // Use soft delete for safety\n gracePeriodDays: 60, // Extended grace period for financial data\n name: 'financial-default',\n description: 'Financial/crypto platform default: 7-year retention with 60-day grace period',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.IRS,\n STORAGE_REGULATORY_FRAMEWORK.SEC,\n STORAGE_REGULATORY_FRAMEWORK.FINCEN,\n STORAGE_REGULATORY_FRAMEWORK.GDPR,\n ],\n};\n\n/**\n * Default compliance configuration - CRYPTO/FINANCE PLATFORM\n *\n * Compliance is enabled by default with finance-focused defaults:\n * - 7-year retention (IRS/SEC/FinCEN compliance)\n * - Soft delete with 60-day grace period\n * - Financial transaction audit trails\n * - Not in strict mode (warnings instead of errors)\n *\n * Designed for crypto wallets, blockchain platforms, and financial services.\n *\n * Override this configuration for specific categories:\n * - Transaction records: 7+ years retention, audit trail\n * - Wallet backups: 7+ years retention, immutable\n * - KYC/AML documents: 5-7 years retention per jurisdiction\n * - Tax documents: 7+ years retention, immutable\n * - Audit logs: 7+ years retention, immutable\n * - Legal documents: 7+ years retention, immutable\n * - Personal data: GDPR/CCPA-compliant deletion (user request)\n */\nexport const DEFAULT_COMPLIANCE_CONFIG: StorageComplianceConfig = {\n enabled: true,\n strictMode: true, // Enforce compliance by throwing errors on violations\n // ⚠️ For crypto/finance platforms, compliance violations are legal violations.\n // Set to false in development/testing only: { strictMode: false }\n\n // ⭐ DEFAULT RETENTION: 7 years for ALL files (IRS/SEC/FinCEN compliance)\n // This policy applies to EVERY uploaded file unless overridden per category below\n defaultRetentionPolicy: DEFAULT_RETENTION_POLICY,\n\n // 📋 CATEGORY-SPECIFIC OVERRIDES (Empty by default)\n //\n // By design, retentionPolicies is empty. The defaultRetentionPolicy (7 years)\n // already applies to ALL files automatically.\n //\n // ✅ RECOMMENDED: Use PRESET_RETENTION_POLICIES for category-specific rules:\n //\n // import { FileCategory } from '@plyaz/types';\n // import { PRESET_RETENTION_POLICIES } from '@plyaz/config';\n //\n // const service = new StorageService({\n // compliance: {\n // retentionPolicies: {\n // [FILE_CATEGORY.KYC_DOCUMENT]: PRESET_RETENTION_POLICIES.KYC_AML,\n // [FILE_CATEGORY.TaxDocument]: PRESET_RETENTION_POLICIES.TAX,\n // [FILE_CATEGORY.PROFILE_DATA]: PRESET_RETENTION_POLICIES.PERSONAL_DATA,\n // },\n // },\n // });\n //\n // Available presets:\n // - CRYPTO_TRANSACTION: 7 years, immutable (IRS/SEC/FinCEN/MiCA/FATF)\n // - KYC_AML: 7 years, immutable (FinCEN/BSA/AML/5AMLD/MiCA/FATF)\n // - WALLET_BACKUP: 7 years, immutable (security best practice)\n // - FINANCIAL: 7 years, immutable (IRS/SEC/SOX)\n // - TAX: 7 years, immutable (IRS)\n // - LEGAL: 7 years, immutable (SOX/GDPR/SEC)\n // - MEDICAL: 10 years, immutable (HIPAA/GDPR)\n // - AUDIT: 1 year, immutable (SOC2/ISO27001)\n // - TEMPORARY: 0 years, 7-day grace period\n // - PERSONAL_DATA: 0 years, GDPR/CCPA compliant\n retentionPolicies: {},\n\n // 🔒 IMMUTABLE PATTERNS (Empty by default)\n //\n // Add regex patterns to protect critical files from deletion/modification:\n //\n // immutablePatterns: [\n // /^transactions\\//, // Blockchain transaction records\n // /^audit\\//, // Audit logs\n // /^kyc\\//, // KYC/AML documents\n // /^legal\\//, // Legal documents\n // /^compliance\\//, // Compliance records\n // /^wallet-backups\\//, // Wallet backups\n // ],\n immutablePatterns: [],\n};\n\n/**\n * Preset retention policies for common use cases\n *\n * These can be used as templates or applied directly to file categories.\n */\nexport const PRESET_RETENTION_POLICIES = {\n /**\n * Legal document retention\n * - 7 years retention (common legal requirement)\n * - Immutable during retention period\n * - Soft delete with grace period\n * - Compliant with SOX, GDPR, and other frameworks\n */\n LEGAL: {\n type: 'legal',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 30,\n name: 'legal-retention',\n description: 'Legal documents with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.SOX,\n STORAGE_REGULATORY_FRAMEWORK.GDPR,\n STORAGE_REGULATORY_FRAMEWORK.SEC,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * Financial document retention\n * - 7 years retention (IRS, SEC requirements)\n * - Immutable during retention period\n * - Soft delete with extended grace period\n */\n FINANCIAL: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 60,\n name: 'financial-retention',\n description: 'Financial records with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.IRS,\n STORAGE_REGULATORY_FRAMEWORK.SEC,\n STORAGE_REGULATORY_FRAMEWORK.SOX,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * Tax document retention\n * - 7 years retention (IRS requirement)\n * - Immutable during retention period\n * - Soft delete enabled\n */\n TAX: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 60,\n name: 'tax-retention',\n description: 'Tax documents with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US],\n regulatoryFrameworks: [STORAGE_REGULATORY_FRAMEWORK.IRS],\n } as StorageRetentionPolicy,\n\n /**\n * Medical/health record retention\n * - 10 years retention (HIPAA recommendation)\n * - Immutable during retention period\n * - Strict soft delete\n */\n MEDICAL: {\n type: 'regulatory',\n retentionYears: 10,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 90,\n name: 'medical-retention',\n description: 'Medical records with 10-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU],\n regulatoryFrameworks: [STORAGE_REGULATORY_FRAMEWORK.HIPAA, STORAGE_REGULATORY_FRAMEWORK.GDPR],\n } as StorageRetentionPolicy,\n\n /**\n * Audit log retention\n * - 1 year retention (security best practice)\n * - Immutable (cannot be modified or deleted)\n * - No grace period (permanent)\n */\n AUDIT: {\n type: 'regulatory',\n retentionYears: 1,\n immutable: true,\n softDelete: false, // Audit logs shouldn't be soft-deleted\n name: 'audit-retention',\n description: 'Audit logs with 1-year immutable retention',\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.SOC2,\n STORAGE_REGULATORY_FRAMEWORK.ISO27001,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * Temporary file retention\n * - No retention requirement\n * - Can be deleted immediately\n * - 7-day grace period for recovery\n */\n TEMPORARY: {\n type: 'time-based',\n retentionYears: 0,\n immutable: false,\n softDelete: true,\n gracePeriodDays: 7,\n name: 'temporary-retention',\n description: 'Temporary files with 7-day grace period',\n } as StorageRetentionPolicy,\n\n /**\n * Personal data retention (GDPR/CCPA)\n * - No mandatory retention\n * - Can be deleted on user request\n * - 30-day grace period for accidental deletion\n */\n PERSONAL_DATA: {\n type: 'regulatory',\n retentionYears: 0,\n immutable: false,\n softDelete: true,\n gracePeriodDays: 30,\n name: 'personal-data-retention',\n description: 'Personal data compliant with GDPR/CCPA right to erasure',\n jurisdictions: [STORAGE_JURISDICTION.EU, STORAGE_JURISDICTION.UsCa],\n regulatoryFrameworks: [STORAGE_REGULATORY_FRAMEWORK.GDPR, STORAGE_REGULATORY_FRAMEWORK.CCPA],\n } as StorageRetentionPolicy,\n\n /**\n * Crypto transaction records\n * - 7 years retention (IRS/SEC/FinCEN requirement)\n * - Immutable for audit trail integrity\n * - Extended grace period for recovery\n * - Blockchain transaction records, wallet operations, trades\n */\n CRYPTO_TRANSACTION: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 60,\n name: 'crypto-transaction-retention',\n description: 'Blockchain transaction records with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.IRS,\n STORAGE_REGULATORY_FRAMEWORK.SEC,\n STORAGE_REGULATORY_FRAMEWORK.FINCEN,\n STORAGE_REGULATORY_FRAMEWORK.MICA,\n STORAGE_REGULATORY_FRAMEWORK.FATF,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * KYC/AML documents\n * - 7 years retention (FinCEN/BSA requirement)\n * - Immutable for regulatory audit\n * - Extended grace period (90 days)\n * - Identity verification, proof of address, source of funds\n */\n KYC_AML: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 90,\n name: 'kyc-aml-retention',\n description: 'KYC/AML documents with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.US, STORAGE_JURISDICTION.EU, STORAGE_JURISDICTION.GLOBAL],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.FINCEN,\n STORAGE_REGULATORY_FRAMEWORK.BSA,\n STORAGE_REGULATORY_FRAMEWORK.AML,\n STORAGE_REGULATORY_FRAMEWORK.AMLD5,\n STORAGE_REGULATORY_FRAMEWORK.MICA,\n STORAGE_REGULATORY_FRAMEWORK.FATF,\n ],\n } as StorageRetentionPolicy,\n\n /**\n * Wallet backups & recovery seeds\n * - 7 years retention (security best practice)\n * - Immutable for security\n * - Extended grace period (90 days)\n * - Encrypted wallet backups, recovery phrases, private key backups\n */\n WALLET_BACKUP: {\n type: 'regulatory',\n retentionYears: 7,\n immutable: true,\n softDelete: true,\n gracePeriodDays: 90,\n name: 'wallet-backup-retention',\n description: 'Wallet backup files with 7-year retention',\n jurisdictions: [STORAGE_JURISDICTION.GLOBAL],\n regulatoryFrameworks: [\n STORAGE_REGULATORY_FRAMEWORK.InternalSecurity,\n STORAGE_REGULATORY_FRAMEWORK.IndustryBestPractices,\n ],\n } as StorageRetentionPolicy,\n};\n\n// ============================================================================\n// PRESET SYSTEM - Device-aware variant optimization\n// ============================================================================\n\n/**\n * Built-in Variant Presets\n *\n * Standard transformation presets optimized for common use cases.\n * Each preset includes device-aware variants for optimal performance\n * across mobile, tablet, desktop, and 4K displays.\n *\n * Available presets:\n * - profile-picture: Square images for user profiles (1:1)\n * - post-image: Feed/content images with flexible aspect ratios\n * - hero-banner: Large banner images with 16:9 aspect ratio\n * - video-streaming: Multi-resolution video transcoding\n * - social-share: Optimized for social media platforms\n * - product-image: E-commerce product photos\n */\nexport const BUILT_IN_PRESETS: StoragePresetConfig[] = [\n // Profile Picture Preset\n {\n name: 'profile-picture',\n description: 'Square images for user profiles (1:1 aspect ratio)',\n variants: [\n {\n name: 'thumbnail',\n width: 150,\n height: 150,\n format: 'webp',\n quality: 80,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n },\n {\n name: 'small',\n width: 300,\n height: 300,\n format: 'webp',\n quality: 85,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'medium',\n width: 600,\n height: 600,\n format: 'webp',\n quality: 85,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n },\n {\n name: 'large',\n width: 1024,\n height: 1024,\n format: 'webp',\n quality: 90,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n ] as StorageVariantConfig[],\n format: 'webp',\n quality: 85,\n aspectRatio: '1:1',\n categories: [FILE_CATEGORY.ProfileImage],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n priority: 1,\n enabled: true,\n },\n\n // Post Image Preset\n {\n name: 'post-image',\n description: 'Flexible images for content feeds (preserve aspect ratio)',\n variants: [\n {\n name: 'thumbnail',\n width: 400,\n height: 225,\n format: 'webp',\n quality: 80,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'mobile',\n width: 640,\n height: 360,\n format: 'webp',\n quality: 82,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [STORAGE_DEVICE_TYPE.MOBILE],\n },\n {\n name: 'tablet',\n width: 1024,\n height: 576,\n format: 'webp',\n quality: 85,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [STORAGE_DEVICE_TYPE.TABLET],\n },\n {\n name: 'desktop',\n width: 1920,\n height: 1080,\n format: 'webp',\n quality: 85,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n {\n name: 'hd',\n width: 2560,\n height: 1440,\n format: 'webp',\n quality: 90,\n aspectRatio: 'preserve',\n fit: 'inside',\n devices: [STORAGE_DEVICE_TYPE.FourK],\n },\n ] as StorageVariantConfig[],\n format: 'webp',\n quality: 85,\n aspectRatio: 'preserve',\n categories: [FILE_CATEGORY.PostImage, FILE_CATEGORY.GalleryImage],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n priority: 2,\n enabled: true,\n },\n\n // Hero Banner Preset\n {\n name: 'hero-banner',\n description: 'Large banner images for hero sections (16:9 aspect ratio)',\n variants: [\n {\n name: 'mobile',\n width: 800,\n height: 450,\n format: 'webp',\n quality: 82,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.MOBILE],\n },\n {\n name: 'tablet',\n width: 1280,\n height: 720,\n format: 'webp',\n quality: 85,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.TABLET],\n },\n {\n name: 'desktop',\n width: 1920,\n height: 1080,\n format: 'webp',\n quality: 88,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP],\n },\n {\n name: '4k',\n width: 3840,\n height: 2160,\n format: 'webp',\n quality: 90,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n ] as StorageVariantConfig[],\n format: 'webp',\n quality: 88,\n aspectRatio: '16:9',\n categories: [FILE_CATEGORY.BrandAsset, FILE_CATEGORY.MarketingAsset, FILE_CATEGORY.PostImage],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n STORAGE_DEVICE_TYPE.TV,\n ],\n priority: 3,\n enabled: true,\n },\n\n // Video Streaming Preset\n {\n name: 'video-streaming',\n description: 'Multi-resolution video transcoding for adaptive streaming',\n variants: [\n {\n name: '360p',\n width: 640,\n height: 360,\n format: 'mp4',\n quality: 75,\n codec: 'h264',\n bitrate: '800k',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.WATCH],\n },\n {\n name: '480p',\n width: 854,\n height: 480,\n format: 'mp4',\n quality: 80,\n codec: 'h264',\n bitrate: '1200k',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET],\n },\n {\n name: '720p',\n width: 1280,\n height: 720,\n format: 'mp4',\n quality: 85,\n codec: 'h264',\n bitrate: '2500k',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: '1080p',\n width: 1920,\n height: 1080,\n format: 'mp4',\n quality: 88,\n codec: 'h264',\n bitrate: '5000k',\n devices: [\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n },\n {\n name: '4k',\n width: 3840,\n height: 2160,\n format: 'mp4',\n quality: 90,\n codec: 'h265',\n bitrate: '15000k',\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n ] as StorageVariantConfig[],\n format: 'mp4',\n quality: 85,\n codec: 'h264',\n categories: [FILE_CATEGORY.PostVideo, FILE_CATEGORY.ProductVideo, FILE_CATEGORY.GalleryVideo],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n STORAGE_DEVICE_TYPE.TV,\n ],\n priority: 4,\n enabled: true,\n },\n\n // Social Share Preset\n {\n name: 'social-share',\n description: 'Optimized for social media sharing (Open Graph, Twitter Card)',\n variants: [\n {\n name: 'og-image',\n width: 1200,\n height: 630,\n format: 'jpeg',\n quality: 85,\n aspectRatio: '1.91:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'twitter-card',\n width: 1200,\n height: 675,\n format: 'jpeg',\n quality: 85,\n aspectRatio: '16:9',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'linkedin-share',\n width: 1200,\n height: 627,\n format: 'jpeg',\n quality: 85,\n aspectRatio: '1.91:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n ] as StorageVariantConfig[],\n format: 'jpeg',\n quality: 85,\n categories: [FILE_CATEGORY.PostImage, FILE_CATEGORY.BrandAsset, FILE_CATEGORY.MarketingAsset],\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP],\n priority: 5,\n enabled: true,\n },\n\n // Product Image Preset\n {\n name: 'product-image',\n description: 'E-commerce product photos with zoom capability',\n variants: [\n {\n name: 'thumbnail',\n width: 200,\n height: 200,\n format: 'webp',\n quality: 80,\n aspectRatio: '1:1',\n fit: 'cover',\n position: 'center',\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n ],\n },\n {\n name: 'small',\n width: 400,\n height: 400,\n format: 'webp',\n quality: 85,\n aspectRatio: '1:1',\n fit: 'contain',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET],\n },\n {\n name: 'medium',\n width: 800,\n height: 800,\n format: 'webp',\n quality: 88,\n aspectRatio: '1:1',\n fit: 'contain',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP],\n },\n {\n name: 'large',\n width: 1500,\n height: 1500,\n format: 'webp',\n quality: 90,\n aspectRatio: '1:1',\n fit: 'contain',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n {\n name: 'zoom',\n width: 2500,\n height: 2500,\n format: 'webp',\n quality: 92,\n aspectRatio: '1:1',\n fit: 'contain',\n position: 'center',\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n ] as StorageVariantConfig[],\n format: 'webp',\n quality: 88,\n aspectRatio: '1:1',\n categories: [FILE_CATEGORY.PostImage],\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n priority: 6,\n enabled: true,\n },\n];\n\n/**\n * Default Variants by File Category\n *\n * Automatic variant generation based on file category.\n * When no preset is specified, these defaults are applied.\n *\n * Device-aware: Variants are automatically filtered based on target device\n * to avoid generating unnecessary files and reduce storage costs.\n */\nexport const DEFAULT_VARIANTS_BY_CATEGORY: Partial<Record<FILE_CATEGORY, string[]>> = {\n // Profile and avatar images - Square 1:1 ratio\n [FILE_CATEGORY.ProfileImage]: ['thumbnail', 'small', 'medium', 'large'],\n\n // Post and content images - Flexible aspect ratio\n [FILE_CATEGORY.PostImage]: ['thumbnail', 'mobile', 'tablet', 'desktop'],\n\n // Brand logos - Multiple sizes for different contexts\n [FILE_CATEGORY.BrandLogo]: ['small', 'medium', 'large', 'xlarge'],\n\n // Brand assets and marketing - Wide format\n [FILE_CATEGORY.BrandAsset]: ['mobile', 'tablet', 'desktop', '4k'],\n [FILE_CATEGORY.MarketingAsset]: ['mobile', 'tablet', 'desktop', '4k'],\n\n // Gallery images - Small preview images\n [FILE_CATEGORY.GalleryImage]: ['thumbnail', 'small', 'medium'],\n\n // Videos - Multi-resolution for adaptive streaming\n [FILE_CATEGORY.PostVideo]: ['360p', '480p', '720p', '1080p'],\n [FILE_CATEGORY.ProductVideo]: ['480p', '720p', '1080p', '4k-video'],\n [FILE_CATEGORY.GalleryVideo]: ['480p', '720p', '1080p'],\n\n // Documents - Typically no variants needed (PDFs, etc.)\n [FILE_CATEGORY.InvoiceDocument]: [],\n [FILE_CATEGORY.ReceiptDocument]: [],\n [FILE_CATEGORY.TaxDocument]: [],\n\n // Attachments - No variants by default\n [FILE_CATEGORY.ATTACHMENT]: [],\n\n // Archives - No variants (ZIP, RAR, etc.)\n [FILE_CATEGORY.PostArchive]: [],\n\n // Audio - Could add different bitrates in future\n [FILE_CATEGORY.PostAudio]: [],\n\n // Other categories without specific defaults\n [FILE_CATEGORY.OTHER]: [],\n};\n\n/**\n * Device-specific Variant Overrides\n *\n * These mappings override the category defaults when a specific device is targeted.\n * Useful for mobile-first or desktop-first optimizations.\n */\nexport const DEVICE_SPECIFIC_VARIANT_OVERRIDES: Partial<\n Record<string, Partial<Record<FILE_CATEGORY, string[]>>>\n> = {\n // Mobile - Prioritize smaller variants\n mobile: {\n [FILE_CATEGORY.ProfileImage]: ['thumbnail', 'small'],\n [FILE_CATEGORY.PostImage]: ['thumbnail', 'mobile'],\n [FILE_CATEGORY.BrandAsset]: ['mobile'],\n [FILE_CATEGORY.MarketingAsset]: ['mobile'],\n [FILE_CATEGORY.PostVideo]: ['360p', '480p', '720p'],\n },\n\n // Tablet - Balanced variants\n tablet: {\n [FILE_CATEGORY.ProfileImage]: ['thumbnail', 'small', 'medium'],\n [FILE_CATEGORY.PostImage]: ['thumbnail', 'mobile', 'tablet'],\n [FILE_CATEGORY.BrandAsset]: ['tablet', 'desktop'],\n [FILE_CATEGORY.MarketingAsset]: ['tablet', 'desktop'],\n [FILE_CATEGORY.PostVideo]: ['480p', '720p', '1080p'],\n },\n\n // Desktop - Full quality variants\n desktop: {\n [FILE_CATEGORY.ProfileImage]: ['small', 'medium', 'large'],\n [FILE_CATEGORY.PostImage]: ['mobile', 'tablet', 'desktop', 'hd'],\n [FILE_CATEGORY.BrandAsset]: ['desktop', '4k'],\n [FILE_CATEGORY.MarketingAsset]: ['desktop', '4k'],\n [FILE_CATEGORY.PostVideo]: ['720p', '1080p'],\n },\n\n // 4K displays - Highest quality\n '4k': {\n [FILE_CATEGORY.ProfileImage]: ['medium', 'large', 'xlarge'],\n [FILE_CATEGORY.PostImage]: ['desktop', 'hd', '4k'],\n [FILE_CATEGORY.BrandAsset]: ['4k'],\n [FILE_CATEGORY.MarketingAsset]: ['4k'],\n [FILE_CATEGORY.PostVideo]: ['1080p', '4k-video'],\n },\n\n // TV - Optimized for large screens\n tv: {\n [FILE_CATEGORY.BrandAsset]: ['4k'],\n [FILE_CATEGORY.MarketingAsset]: ['4k'],\n [FILE_CATEGORY.PostVideo]: ['1080p', '4k-video'],\n },\n\n // Watch/Wearables - Minimal variants\n watch: {\n [FILE_CATEGORY.ProfileImage]: ['thumbnail'],\n [FILE_CATEGORY.PostImage]: ['thumbnail'],\n [FILE_CATEGORY.PostVideo]: ['360p'],\n },\n};\n\n/**\n * Minimum Variant Requirements\n *\n * These categories must always generate at least these variants,\n * regardless of device targeting, for fallback compatibility.\n */\nexport const MINIMUM_VARIANTS_BY_CATEGORY: Partial<Record<FILE_CATEGORY, string[]>> = {\n [FILE_CATEGORY.ProfileImage]: ['thumbnail'], // Always need thumbnail\n [FILE_CATEGORY.PostImage]: ['thumbnail'], // Always need thumbnail\n [FILE_CATEGORY.BrandLogo]: ['small'], // Always need at least small logo\n};\n\n/**\n * Standard Variant Definitions\n *\n * Maps variant names to their configuration.\n * Used by PresetManager to resolve variant names like 'thumbnail', 'mobile', '720p'\n * to actual variant configurations with dimensions, format, quality, etc.\n *\n * This is the source of truth for all standard variant names across the platform.\n */\nexport const STANDARD_VARIANT_DEFINITIONS: Record<\n STORAGE_VARIANT_NAME,\n Partial<StorageVariantConfig>\n> = {\n // Image variants - Square/standard sizes\n [STORAGE_VARIANT_NAME.THUMBNAIL]: {\n width: 150,\n height: 150,\n format: 'webp',\n quality: 80,\n devices: [\n STORAGE_DEVICE_TYPE.MOBILE,\n STORAGE_DEVICE_TYPE.TABLET,\n STORAGE_DEVICE_TYPE.DESKTOP,\n STORAGE_DEVICE_TYPE.FourK,\n ],\n },\n [STORAGE_VARIANT_NAME.SMALL]: {\n width: 400,\n height: 400,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP],\n },\n [STORAGE_VARIANT_NAME.MEDIUM]: {\n width: 800,\n height: 800,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n [STORAGE_VARIANT_NAME.LARGE]: {\n width: 1200,\n height: 1200,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n [STORAGE_VARIANT_NAME.XLARGE]: {\n width: 1920,\n height: 1920,\n format: 'webp',\n quality: 90,\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n\n // Device-specific image variants\n [STORAGE_VARIANT_NAME.MOBILE]: {\n width: 480,\n height: 854,\n format: 'webp',\n quality: 80,\n devices: [STORAGE_DEVICE_TYPE.MOBILE],\n },\n [STORAGE_VARIANT_NAME.TABLET]: {\n width: 768,\n height: 1024,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.TABLET],\n },\n [STORAGE_VARIANT_NAME.DESKTOP]: {\n width: 1920,\n height: 1080,\n format: 'webp',\n quality: 85,\n devices: [STORAGE_DEVICE_TYPE.DESKTOP],\n },\n [STORAGE_VARIANT_NAME.HD]: {\n width: 1920,\n height: 1080,\n format: 'webp',\n quality: 90,\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n [STORAGE_VARIANT_NAME.FourK]: {\n width: 3840,\n height: 2160,\n format: 'webp',\n quality: 90,\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n [STORAGE_VARIANT_NAME.RETINA]: {\n width: 2880,\n height: 1800,\n format: 'webp',\n quality: 90,\n devices: [STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n\n // Video variants - Standard resolutions\n [STORAGE_VARIANT_NAME.Video360p]: {\n width: 640,\n height: 360,\n format: 'mp4',\n bitrate: '800k',\n codec: 'h264',\n devices: [STORAGE_DEVICE_TYPE.MOBILE],\n },\n [STORAGE_VARIANT_NAME.Video480p]: {\n width: 854,\n height: 480,\n format: 'mp4',\n bitrate: '1200k',\n codec: 'h264',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET],\n },\n [STORAGE_VARIANT_NAME.Video720p]: {\n width: 1280,\n height: 720,\n format: 'mp4',\n bitrate: '2500k',\n codec: 'h264',\n devices: [STORAGE_DEVICE_TYPE.MOBILE, STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP],\n },\n [STORAGE_VARIANT_NAME.Video1080p]: {\n width: 1920,\n height: 1080,\n format: 'mp4',\n bitrate: '5000k',\n codec: 'h264',\n devices: [STORAGE_DEVICE_TYPE.TABLET, STORAGE_DEVICE_TYPE.DESKTOP, STORAGE_DEVICE_TYPE.FourK],\n },\n [STORAGE_VARIANT_NAME.Video4k]: {\n width: 3840,\n height: 2160,\n format: 'mp4',\n bitrate: '15000k',\n codec: 'h265',\n devices: [STORAGE_DEVICE_TYPE.FourK, STORAGE_DEVICE_TYPE.TV],\n },\n};\n","/**\n * Storage Validation Configuration\n *\n * Defines file size limits and MIME type restrictions per bucket purpose.\n * Centralized configuration for storage validation across backend and frontend.\n *\n * @module @plyaz/config/storage/validation\n */\n\nimport type { StorageValidationConfig } from '@plyaz/types';\nimport { BUCKET_PURPOSE } from '@plyaz/types';\nimport { NUMBER_SYSTEM } from '../math/constants';\n\n// File size limits (in MB/GB)\nconst STORAGE_FILE_SIZE_LIMITS = {\n IMAGE_MAX_MB: 50,\n VIDEO_MAX_GB: 5,\n COMPLIANCE_MAX_MB: 100,\n USER_UPLOAD_MAX_MB: 100,\n STATIC_MAX_MB: 10,\n TEMPORARY_MAX_MB: 500,\n ARCHIVE_MAX_GB: 10,\n BACKUP_MAX_GB: 50,\n DEFAULT_MAX_MB: 100,\n} as const;\n\n/**\n * Default storage validation configuration\n * Used when adapter config doesn't specify validation rules\n */\nexport const STORAGE_DEFAULT_VALIDATION_CONFIG: StorageValidationConfig = {\n rules: {\n [BUCKET_PURPOSE.MediaImages]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.IMAGE_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 50MB for images\n allowedMimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'image/webp', 'image/svg+xml'],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.MediaVideos]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.VIDEO_MAX_GB * NUMBER_SYSTEM.BYTES_PER_GB, // 5GB for videos\n allowedMimeTypes: ['video/mp4', 'video/webm', 'video/ogg', 'video/quicktime'],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.COMPLIANCE]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.COMPLIANCE_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 100MB for compliance docs\n allowedMimeTypes: [\n 'application/pdf',\n 'application/json',\n 'text/csv',\n // Excel formats\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', // .xlsx\n 'application/vnd.ms-excel', // .xls\n // Word formats\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', // .docx\n 'application/msword', // .doc\n ],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.UserUploads]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.USER_UPLOAD_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 100MB for general user uploads\n allowExecutables: false, // Block executables for security\n },\n\n [BUCKET_PURPOSE.MediaStatic]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.STATIC_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 10MB for static assets\n allowedMimeTypes: [\n 'text/css',\n 'text/javascript',\n 'application/javascript',\n 'font/woff',\n 'font/woff2',\n 'font/ttf',\n 'font/otf',\n 'image/svg+xml',\n ],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.TEMPORARY]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.TEMPORARY_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 500MB for temporary files\n allowExecutables: false, // Block executables for security\n },\n\n [BUCKET_PURPOSE.ARCHIVES]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.ARCHIVE_MAX_GB * NUMBER_SYSTEM.BYTES_PER_GB, // 10GB for archives\n allowedMimeTypes: [\n 'application/zip',\n 'application/x-tar',\n 'application/gzip',\n 'application/x-7z-compressed',\n 'application/x-rar-compressed',\n ],\n allowExecutables: false,\n },\n\n [BUCKET_PURPOSE.BACKUPS]: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.BACKUP_MAX_GB * NUMBER_SYSTEM.BYTES_PER_GB, // 50GB for backups\n allowedMimeTypes: [\n 'application/zip',\n 'application/x-tar',\n 'application/gzip',\n 'application/octet-stream',\n 'application/sql',\n ],\n allowExecutables: false,\n },\n },\n\n defaultRules: {\n maxFileSize: STORAGE_FILE_SIZE_LIMITS.DEFAULT_MAX_MB * NUMBER_SYSTEM.BYTES_PER_MB, // 100MB default\n allowExecutables: false, // Always block executables by default\n },\n} as const;\n\n/**\n * Get validation rules for a specific bucket purpose\n * Falls back to default rules if purpose-specific rules not defined\n *\n * @param purpose - Bucket purpose\n * @param config - Optional custom validation config (overrides defaults)\n * @returns Validation rules for the purpose\n */\n// eslint-disable-next-line complexity\nexport function getStorageValidationRulesForPurpose(\n purpose: BUCKET_PURPOSE,\n config?: StorageValidationConfig\n): {\n maxFileSize?: number;\n allowedMimeTypes?: string[];\n allowExecutables?: boolean;\n} {\n // Use custom config if provided, otherwise use defaults\n const validationConfig = config ?? STORAGE_DEFAULT_VALIDATION_CONFIG;\n\n // Get purpose-specific rules\n const purposeRules = validationConfig.rules?.[purpose];\n const defaultRules =\n validationConfig.defaultRules ?? STORAGE_DEFAULT_VALIDATION_CONFIG.defaultRules;\n\n // Merge purpose rules with defaults\n return {\n maxFileSize: purposeRules?.maxFileSize ?? defaultRules?.maxFileSize,\n allowedMimeTypes: purposeRules?.allowedMimeTypes ?? defaultRules?.allowedMimeTypes,\n allowExecutables: purposeRules?.allowExecutables ?? defaultRules?.allowExecutables,\n };\n}\n","/**\n * Storage MIME Type Mappings\n *\n * Centralized mapping between output formats, file extensions, and MIME types.\n * Used for file generation, validation, and content-type handling.\n *\n * @module @plyaz/config/storage/mime-types\n */\n\nimport type { OUTPUT_FORMAT } from '@plyaz/types';\n\n/**\n * Map of output formats to file extensions\n */\nexport const STORAGE_OUTPUT_FORMAT_TO_EXTENSION: Record<OUTPUT_FORMAT, string> = {\n pdf: 'pdf',\n excel: 'xlsx',\n word: 'docx',\n png: 'png',\n jpeg: 'jpeg',\n html: 'html',\n csv: 'csv',\n json: 'json',\n};\n\n/**\n * Map of output formats to MIME types\n */\nexport const STORAGE_OUTPUT_FORMAT_TO_MIME_TYPE: Record<OUTPUT_FORMAT, string> = {\n pdf: 'application/pdf',\n excel: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n word: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n png: 'image/png',\n jpeg: 'image/jpeg',\n html: 'text/html',\n csv: 'text/csv',\n json: 'application/json',\n};\n\n/**\n * Get file extension for output format\n */\nexport function getStorageExtensionForFormat(format: OUTPUT_FORMAT): string {\n return STORAGE_OUTPUT_FORMAT_TO_EXTENSION[format];\n}\n\n/**\n * Get MIME type for output format\n */\nexport function getStorageMimeTypeForFormat(format: OUTPUT_FORMAT): string {\n return STORAGE_OUTPUT_FORMAT_TO_MIME_TYPE[format];\n}\n\n/**\n * Get both extension and MIME type for output format\n */\nexport function getStorageFormatInfo(format: OUTPUT_FORMAT): {\n extension: string;\n mimeType: string;\n} {\n return {\n extension: STORAGE_OUTPUT_FORMAT_TO_EXTENSION[format],\n mimeType: STORAGE_OUTPUT_FORMAT_TO_MIME_TYPE[format],\n };\n}\n","/**\n * Storage Categories & Bucket Organization\n *\n * Provider-agnostic storage organization by PURPOSE and CONTENT TYPE.\n * Adapters internally translate these purposes to their naming conventions.\n *\n * Universal approach:\n * - Define buckets by PURPOSE (compliance, media-images, backups, etc.)\n * - Paths are universal across all providers\n * - Adapters handle their own naming rules internally\n *\n * @module @plyaz/config/storage/categories\n */\n\nimport type { StorageCategory } from '@plyaz/types';\nimport { BUCKET_PURPOSE, STORAGE_VISIBILITY } from '@plyaz/types';\n\n/**\n * Constants for storage retention policies (in days)\n */\nexport const STORAGE_RETENTION_DAYS = {\n DAYS_PER_YEAR: 365,\n COMPLIANCE_YEARS: 7,\n TEMPORARY_DAYS: 7,\n BACKUP_DAYS: 90,\n} as const;\n\n/**\n * Constants for TTL calculations\n */\nexport const STORAGE_TTL_CONSTANTS = {\n SECONDS_PER_DAY: 86400,\n} as const;\n\n/**\n * Storage category definitions\n * Provider-agnostic organization by purpose\n */\nexport const STORAGE_CATEGORIES: Record<BUCKET_PURPOSE, StorageCategory> = {\n [BUCKET_PURPOSE.COMPLIANCE]: {\n purpose: BUCKET_PURPOSE.COMPLIANCE,\n description: 'Financial and legal documents requiring audit trail',\n useCases: ['Invoices', 'Receipts', 'Tax documents', 'Contracts', 'Certificates'],\n recommendedRetention:\n STORAGE_RETENTION_DAYS.DAYS_PER_YEAR * STORAGE_RETENTION_DAYS.COMPLIANCE_YEARS, // 7 years\n requiresCompliance: true,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n\n [BUCKET_PURPOSE.MediaImages]: {\n purpose: BUCKET_PURPOSE.MediaImages,\n description: 'Image files with optimization variants',\n useCases: ['Profile pictures', 'Product photos', 'Banners', 'Logos'],\n requiresCompliance: false,\n supportsPublicAccess: true,\n defaultVisibility: STORAGE_VISIBILITY.PUBLIC,\n },\n\n [BUCKET_PURPOSE.MediaVideos]: {\n purpose: BUCKET_PURPOSE.MediaVideos,\n description: 'Video files with transcoding variants',\n useCases: ['Match highlights', 'Training videos', 'Promotional content'],\n requiresCompliance: false,\n supportsPublicAccess: true,\n defaultVisibility: STORAGE_VISIBILITY.PUBLIC,\n },\n\n [BUCKET_PURPOSE.MediaStatic]: {\n purpose: BUCKET_PURPOSE.MediaStatic,\n description: 'Static assets and general files',\n useCases: ['CSS files', 'JavaScript', 'Fonts', 'Icons', 'PDFs'],\n requiresCompliance: false,\n supportsPublicAccess: true,\n defaultVisibility: STORAGE_VISIBILITY.PUBLIC,\n },\n\n [BUCKET_PURPOSE.UserUploads]: {\n purpose: BUCKET_PURPOSE.UserUploads,\n description: 'User-uploaded files and attachments',\n useCases: ['Document uploads', 'Attachments', 'User-generated content'],\n requiresCompliance: false,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n\n [BUCKET_PURPOSE.TEMPORARY]: {\n purpose: BUCKET_PURPOSE.TEMPORARY,\n description: 'Temporary files for processing',\n useCases: ['Upload staging', 'Processing queue', 'Temporary exports'],\n recommendedRetention: STORAGE_RETENTION_DAYS.TEMPORARY_DAYS, // 7 days\n requiresCompliance: false,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n\n [BUCKET_PURPOSE.ARCHIVES]: {\n purpose: BUCKET_PURPOSE.ARCHIVES,\n description: 'Long-term archived files (cold storage)',\n useCases: ['Historical records', 'Old documents', 'Compliance archives'],\n requiresCompliance: true,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n\n [BUCKET_PURPOSE.BACKUPS]: {\n purpose: BUCKET_PURPOSE.BACKUPS,\n description: 'System and database backups',\n useCases: ['Database dumps', 'Configuration backups', 'Disaster recovery'],\n recommendedRetention: STORAGE_RETENTION_DAYS.BACKUP_DAYS, // 90 days\n requiresCompliance: true,\n supportsPublicAccess: false,\n defaultVisibility: STORAGE_VISIBILITY.PRIVATE,\n },\n};\n\n/**\n * Example adapter bucket name translation:\n *\n * Identifier: \"compliance:enterprise:acme-corp:prod\"\n *\n * CloudflareR2Adapter translates to:\n * → plyaz-prod-weur-enterprise-acme-corp-records-vault\n *\n * SupabaseStorageAdapter translates to:\n * → compliance-acme-corp (projects handle env)\n *\n * S3Adapter translates to:\n * → plyaz-compliance-enterprise-acme-corp-prod-us-east-1\n *\n * All use the SAME paths internally!\n */\n","/**\n * Storage Chunked Upload Configuration\n *\n * Configuration constants for multipart/chunked file uploads.\n * Used by adapters that support chunked uploads (R2, Supabase, S3).\n *\n * @module @plyaz/config/storage/chunked-upload\n */\n\nimport { NUMBER_SYSTEM } from '../math/constants';\n\n// Multipliers for chunk sizes (in MB/GB)\nconst STORAGE_CHUNK_MULTIPLIERS = {\n MIN_MB: 5,\n MAX_GB: 5,\n SMALL_MB: 5,\n MEDIUM_MB: 10,\n LARGE_MB: 50,\n HUGE_MB: 100,\n THRESHOLD_SMALL_MB: 100,\n THRESHOLD_LARGE_GB: 10,\n} as const;\n\n/**\n * Chunk size configuration for multipart uploads\n * Based on S3/R2 limits: 5MB min, 5GB max per part, 10,000 parts max\n */\nexport const STORAGE_CHUNK_SIZE = {\n MIN: STORAGE_CHUNK_MULTIPLIERS.MIN_MB * NUMBER_SYSTEM.BYTES_PER_MB, // S3/R2 minimum part size\n MAX: STORAGE_CHUNK_MULTIPLIERS.MAX_GB * NUMBER_SYSTEM.BYTES_PER_GB, // S3/R2 maximum part size\n DEFAULT_SMALL: STORAGE_CHUNK_MULTIPLIERS.SMALL_MB * NUMBER_SYSTEM.BYTES_PER_MB, // For files < 100MB\n DEFAULT_MEDIUM: STORAGE_CHUNK_MULTIPLIERS.MEDIUM_MB * NUMBER_SYSTEM.BYTES_PER_MB, // For files < 1GB\n DEFAULT_LARGE: STORAGE_CHUNK_MULTIPLIERS.LARGE_MB * NUMBER_SYSTEM.BYTES_PER_MB, // For files < 10GB\n DEFAULT_HUGE: STORAGE_CHUNK_MULTIPLIERS.HUGE_MB * NUMBER_SYSTEM.BYTES_PER_MB, // For files > 10GB\n} as const;\n\n/**\n * File size thresholds for determining chunk strategy\n */\nexport const STORAGE_FILE_SIZE_THRESHOLDS = {\n SMALL: STORAGE_CHUNK_MULTIPLIERS.THRESHOLD_SMALL_MB * NUMBER_SYSTEM.BYTES_PER_MB,\n MEDIUM: NUMBER_SYSTEM.BYTES_PER_GB,\n LARGE: STORAGE_CHUNK_MULTIPLIERS.THRESHOLD_LARGE_GB * NUMBER_SYSTEM.BYTES_PER_GB,\n CHUNKED_UPLOAD: STORAGE_CHUNK_MULTIPLIERS.THRESHOLD_SMALL_MB * NUMBER_SYSTEM.BYTES_PER_MB, // Default threshold for switching to chunked upload\n} as const;\n\n/**\n * Check if file should use chunked upload based on size\n *\n * @param file - File buffer or stream\n * @param threshold - Size threshold in bytes (defaults to 100MB)\n * @returns True if file should use chunked upload\n *\n * @example\n * ```typescript\n * const shouldChunk = shouldUseStorageChunkedUpload(fileBuffer);\n * const shouldChunkCustom = shouldUseStorageChunkedUpload(fileBuffer, 50 * 1024 * 1024);\n * ```\n */\nexport function shouldUseStorageChunkedUpload(\n file: globalThis.Buffer | globalThis.NodeJS.ReadableStream | null | undefined,\n threshold: number = STORAGE_FILE_SIZE_THRESHOLDS.CHUNKED_UPLOAD\n): boolean {\n if (!file || !globalThis.Buffer.isBuffer(file)) {\n return false;\n }\n return file.length > threshold;\n}\n\n/**\n * Get optimal chunk size based on file size\n * Follows S3/R2 limits: 5MB min, 5GB max per part, 10,000 parts max\n *\n * @param totalSize - Total file size in bytes\n * @returns Optimal chunk size in bytes\n *\n * @example\n * ```typescript\n * const chunkSize = getStorageOptimalChunkSize(50 * 1024 * 1024); // 50MB file\n * console.log(chunkSize); // 5242880 (5MB)\n * ```\n */\nexport function getStorageOptimalChunkSize(totalSize: number): number {\n if (totalSize < STORAGE_FILE_SIZE_THRESHOLDS.SMALL) {\n return STORAGE_CHUNK_SIZE.DEFAULT_SMALL; // 5MB for < 100MB\n }\n\n if (totalSize < STORAGE_FILE_SIZE_THRESHOLDS.MEDIUM) {\n return STORAGE_CHUNK_SIZE.DEFAULT_MEDIUM; // 10MB for < 1GB\n }\n\n if (totalSize < STORAGE_FILE_SIZE_THRESHOLDS.LARGE) {\n return STORAGE_CHUNK_SIZE.DEFAULT_LARGE; // 50MB for < 10GB\n }\n\n return STORAGE_CHUNK_SIZE.DEFAULT_HUGE; // 100MB for huge files\n}\n","/**\n * AWS Configuration Constants\n * Centralized source of truth for AWS service configurations\n */\n\n/**\n * AWS Default Regions\n */\nexport const AWS_DEFAULT_REGIONS = {\n /** Default region for most AWS services */\n DEFAULT: 'us-east-1',\n /** CloudFront distributions are global but use us-east-1 for API calls */\n CLOUDFRONT: 'us-east-1',\n /** S3 default region */\n S3: 'us-east-1',\n} as const;\n\n/**\n * AWS Service Names (used for AWS Signature V4)\n */\nexport const AWS_SERVICE_NAMES = {\n CLOUDFRONT: 'cloudfront',\n S3: 's3',\n LAMBDA: 'lambda',\n DYNAMODB: 'dynamodb',\n SQS: 'sqs',\n SNS: 'sns',\n SES: 'ses',\n} as const;\n\n/**\n * AWS Service Hosts/Endpoints\n */\nexport const AWS_SERVICE_HOSTS = {\n /** CloudFront API endpoint (global) */\n CLOUDFRONT: 'cloudfront.amazonaws.com',\n /** S3 endpoint pattern - use with region substitution */\n S3: 's3.amazonaws.com',\n /** SES endpoint pattern - use with region substitution */\n SES: 'email.{region}.amazonaws.com',\n} as const;\n\n/**\n * AWS CloudFront Configuration\n */\nexport const AWS_CLOUDFRONT_CONFIG = {\n /** Default region for CloudFront API calls */\n DEFAULT_REGION: AWS_DEFAULT_REGIONS.CLOUDFRONT,\n /** Service name for AWS Signature V4 */\n SERVICE_NAME: AWS_SERVICE_NAMES.CLOUDFRONT,\n /** API endpoint host */\n HOST: AWS_SERVICE_HOSTS.CLOUDFRONT,\n /** API version used in paths */\n API_VERSION: '2020-05-31',\n /** Maximum paths per invalidation request */\n MAX_PATHS_PER_INVALIDATION: 1000,\n /** Free tier invalidation limit per month */\n FREE_TIER_INVALIDATIONS_PER_MONTH: 3000,\n} as const;\n\n/**\n * AWS S3 Configuration\n */\nexport const AWS_S3_CONFIG = {\n /** Default region for S3 operations */\n DEFAULT_REGION: AWS_DEFAULT_REGIONS.S3,\n /** Service name for AWS Signature V4 */\n SERVICE_NAME: AWS_SERVICE_NAMES.S3,\n /** API endpoint host */\n HOST: AWS_SERVICE_HOSTS.S3,\n} as const;\n\n/**\n * Helper function to get AWS service endpoint with region\n * @param service - AWS service name\n * @param region - AWS region\n * @returns Formatted endpoint URL\n *\n * @example\n * ```typescript\n * const s3Endpoint = getAWSServiceEndpoint('s3', 'us-west-2');\n * console.log(s3Endpoint); // 's3.us-west-2.amazonaws.com'\n *\n * const dynamoEndpoint = getAWSServiceEndpoint('dynamodb', 'eu-central-1');\n * console.log(dynamoEndpoint); // 'dynamodb.eu-central-1.amazonaws.com'\n * ```\n */\nexport function getAWSServiceEndpoint(service: string, region: string): string {\n return `${service}.${region}.amazonaws.com`;\n}\n"]}