wiki-home
home
Aura Utils Library
A comprehensive utility library for the Aura platform, providing essential services, date manipulation, input sanitization, and more.
Table of Contents
Installation
npm install
Services
The library provides various utility services accessible through the services object:
import { services } from './src/modules/services'
// Available services:
services.hasPermissions({ role, permission })
services.isFeatureAvailable({ feature, profile })
services.getDateString({ date, translations })
services.sanitize(input, options)
services.downloadBlob(blob, filename)
services.getUuid()
// ... and more
Key Services
- hasPermissions: Check user permissions
- isFeatureAvailable: Verify feature availability
- getDateString: Format dates with translations
- sanitize: Input sanitization (see Sanitization)
- downloadBlob: File download functionality
- getUuid: Generate UUIDs
- getUniques: Array deduplication
- temporalData: Local storage operations
Day Class
A powerful date manipulation class built on top of dayjs with enhanced parsing and formatting capabilities.
Basic Usage
import { Day } from './src/modules/Day'
// Create Day instances
const now = Day.now()
const fromString = Day.from('2023-01-15T10:30:00')
const fromArray = Day.from([2023, 0, 15, 10, 30, 45])
const fromDate = Day.from(new Date())
Supported Input Formats
String Formats (Auto-detected)
// ISO formats
Day.from('2023-01-15')
Day.from('2023-01-15T10:30:00')
Day.from('2023-01-15T10:30:00Z')
Day.from('2023-01-15T10:30:00.123Z')
Day.from('2023-01-15T10:30:00+05:00')
// European formats
Day.from('15-01-2023')
Day.from('15/01/2023')
Day.from('15-01-2023 10:30:00')
// US formats
Day.from('2023/01/15')
Day.from('2023-01-15 10:30:00')
Array Format
// [year, month, day, hour, minute, second]
Day.from([2023, 0, 15, 10, 30, 45]) // Complete
Day.from([2023, 5]) // Partial (year, month)
Day.from([2023]) // Year only
Custom Format
Day.from('01/15/2023', { format: 'MM/DD/YYYY' })
Day.from('15.01.2023', { format: 'DD.MM.YYYY' })
Properties and Getters
const day = Day.from('2023-01-15T10:30:45')
// Basic getters
console.log(day.year) // 2023
console.log(day.month) // 0 (January)
console.log(day.day) // 15
console.log(day.hour) // 10
console.log(day.minute) // 30
console.log(day.second) // 45
// Short aliases
console.log(day.Y) // 2023
console.log(day.M) // 0
console.log(day.D) // 15
console.log(day.H) // 10
console.log(day.m) // 30
console.log(day.s) // 45
Time Manipulation
const day = Day.from('2023-01-15')
// Add time
const nextYear = day.add(1, 'year')
const nextMonth = day.add(2, 'month')
const nextWeek = day.add(7, 'day')
const nextHour = day.add(1, 'hour')
// Subtract time
const lastYear = day.subtract(1, 'year')
const lastMonth = day.subtract(1, 'month')
// Supported units: 'year', 'month', 'day', 'hour', 'minute', 'second', 'millisecond'
Comparison Methods
const day1 = Day.from('2023-01-15')
const day2 = Day.from('2023-02-01')
const day3 = Day.from('2023-01-15')
console.log(day1.isBefore(day2)) // true
console.log(day1.isAfter(day2)) // false
console.log(day1.isSame(day3)) // true
Custom App Format
The toAppFormat() method returns dates in the format "DD MonthShort 'YY" with automatic locale detection:
const day = Day.from('2023-01-15')
// With Spanish locale (es_ES, es_AR)
console.log(day.toAppFormat()) // "15 Ene '23"
// With English locale (en_US)
console.log(day.toAppFormat()) // "15 Jan '23"
// With Portuguese locale (pt_BR)
console.log(day.toAppFormat()) // "15 Jan '23"
// With French locale (fr_FR)
console.log(day.toAppFormat()) // "15 Jan '23"
Locale Detection Priority
MODULES_STATIC_CONFIG?.STOREMANAGER?.currentState?.user.data?.localenavigator.language(browser fallback)'en_US'(default fallback)
Access to dayjs Object
const day = Day.from('2023-01-15')
const dayjsObject = day.date // Access underlying dayjs instance
console.log(dayjsObject.format('YYYY-MM-DD')) // "2023-01-15"
Sanitization
Comprehensive input sanitization to prevent XSS, SQL injection, NoSQL injection, and command injection attacks.
Basic Sanitization
import { sanitize } from './src/modules/services/sanitize'
// Basic usage
const clean = sanitize('<script>alert("xss")</script>')
console.log(clean) // "<script>alert("xss")</script>"
// With options
const cleanHtml = sanitize('<b>Bold</b><script>evil</script>', {
allowHtml: true,
maxLength: 100
})
console.log(cleanHtml) // "<b>Bold</b>" (script removed)
Specialized Sanitizers
import { sanitizeEmail, sanitizeNumber, sanitizeUrl } from './src/modules/services/sanitize'
// Email sanitization
const email = sanitizeEmail('user@example.com') // "user@example.com"
const badEmail = sanitizeEmail('<script>@evil.com') // ""
// Number sanitization
const num = sanitizeNumber('123.45') // 123.45
const extracted = sanitizeNumber('abc123def') // 123
const invalid = sanitizeNumber('not-a-number') // null
// URL sanitization
const url = sanitizeUrl('https://example.com') // "https://example.com/"
const badUrl = sanitizeUrl('javascript:alert(1)') // ""
Sanitization Options
interface SanitizeOptions {
allowHtml?: boolean // Allow safe HTML tags (default: false)
maxLength?: number // Maximum string length (default: 10000)
allowSpecialChars?: boolean // Allow special characters (default: false)
}
Protection Against
- XSS: HTML entity escaping and DOMPurify integration
- SQL Injection: Dangerous SQL keyword and pattern removal
- NoSQL Injection: MongoDB operator removal
- Command Injection: Shell character and command removal
Testing
Run the test suite:
# Run all tests
npm test
# Run specific test files
npm test -- Day
npm test -- sanitize
npm test -- services
Test Coverage
- **30+ Day class tests covering all formats and methods
- **19+ Service function tests with proper mocking
- **8+ Sanitization tests covering various attack vectors
Development
# Install dependencies
npm install
# Run linting
npm run lint
# Build the project
npm run build
# Start development server
npm start
Dependencies
- dayjs: Date manipulation library
- dompurify: XSS sanitization
- amplitude-js: Analytics
- js-quantities: Unit conversions
License
ISC