anaf-ts-sdk
Version:
Complete TypeScript SDK for Romanian ANAF API -E-Factura, Company checks
129 lines (128 loc) • 3.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatDateForAnaf = formatDateForAnaf;
exports.getCurrentDateForAnaf = getCurrentDateForAnaf;
exports.isValidAnafDateFormat = isValidAnafDateFormat;
exports.dateToTimestamp = dateToTimestamp;
exports.getDayRange = getDayRange;
exports.daysBetween = daysBetween;
exports.getDaysAgo = getDaysAgo;
exports.isValidDaysParameter = isValidDaysParameter;
const date_fns_1 = require("date-fns");
/**
* Date utility functions for ANAF e-Factura SDK
*
* Provides consistent date formatting and validation
* that matches ANAF API requirements.
*/
/**
* Format date for ANAF API (YYYY-MM-DD format)
* @param date Date to format (string, Date, or number)
* @returns Formatted date string
*/
function formatDateForAnaf(date) {
if (typeof date === 'string') {
// If already in correct format, return as-is
if (/^\d{4}-\d{2}-\d{2}$/.test(date)) {
return date;
}
// Try to parse the string
date = new Date(date);
}
else if (typeof date === 'number') {
date = new Date(date);
}
if (!(date instanceof Date) || isNaN(date.getTime())) {
throw new Error('Invalid date provided');
}
return (0, date_fns_1.format)(date, 'yyyy-MM-dd');
}
/**
* Get current date in ANAF format
* @returns Current date as YYYY-MM-DD string
*/
function getCurrentDateForAnaf() {
return formatDateForAnaf(new Date());
}
/**
* Validate date string format for ANAF API
* @param dateString Date string to validate
* @returns True if format is valid
*/
function isValidAnafDateFormat(dateString) {
return /^\d{4}-\d{2}-\d{2}$/.test(dateString);
}
/**
* Convert date to Unix timestamp in milliseconds
* Used for pagination endpoints
* @param date Date to convert
* @returns Unix timestamp in milliseconds
*/
function dateToTimestamp(date) {
if (typeof date === 'string') {
date = new Date(date);
}
else if (typeof date === 'number') {
// Assume it's already a timestamp
return date;
}
if (!(date instanceof Date) || isNaN(date.getTime())) {
throw new Error('Invalid date provided for timestamp conversion');
}
return date.getTime();
}
/**
* Get date range for pagination (start of day to end of day)
* @param date Target date
* @returns Object with start and end timestamps
*/
function getDayRange(date) {
const targetDate = typeof date === 'string' ? new Date(date) : date;
if (!(targetDate instanceof Date) || isNaN(targetDate.getTime())) {
throw new Error('Invalid date provided for range calculation');
}
const start = new Date(targetDate);
start.setHours(0, 0, 0, 0);
const end = new Date(targetDate);
end.setHours(23, 59, 59, 999);
return {
start: start.getTime(),
end: end.getTime(),
};
}
/**
* Calculate days between two dates
* @param from Start date
* @param to End date
* @returns Number of days
*/
function daysBetween(from, to) {
const fromDate = typeof from === 'string' ? new Date(from) : from;
const toDate = typeof to === 'string' ? new Date(to) : to;
if (!(fromDate instanceof Date) ||
isNaN(fromDate.getTime()) ||
!(toDate instanceof Date) ||
isNaN(toDate.getTime())) {
throw new Error('Invalid dates provided for calculation');
}
const diffTime = Math.abs(toDate.getTime() - fromDate.getTime());
return Math.ceil(diffTime / (1000 * 60 * 60 * 24));
}
/**
* Get date N days ago from today
* @param days Number of days to subtract
* @returns Date N days ago
*/
function getDaysAgo(days) {
const date = new Date();
date.setDate(date.getDate() - days);
return date;
}
/**
* Validate that days parameter is within ANAF limits (1-60)
* @param days Days value to validate
* @returns True if valid
*/
function isValidDaysParameter(days) {
return Number.isInteger(days) && days >= 1 && days <= 60;
}