Saltar al contenido principal

wiki-home

Ver en Git


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​

  1. MODULES_STATIC_CONFIG?.STOREMANAGER?.currentState?.user.data?.locale
  2. navigator.language (browser fallback)
  3. '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) // "&lt;script&gt;alert(&quot;xss&quot;)&lt;/script&gt;"

// 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