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