anaf-ts-sdk
Version:
Complete TypeScript SDK for Romanian ANAF API -E-Factura, Company checks
214 lines (213 loc) • 8.72 kB
JavaScript
"use strict";
/**
* ANAF e-Factura API Constants
*
* This file contains all the endpoints and configuration constants
* for interacting with the Romanian ANAF e-Factura system.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildPaginatedMessagesParams = exports.buildListMessagesParams = exports.buildDownloadParams = exports.buildStatusParams = exports.buildUploadParams = exports.getBasePath = exports.INVOICE_TYPE_CODE = exports.UBL_CUSTOMIZATION_ID = exports.DEFAULT_UNIT_CODE = exports.DEFAULT_COUNTRY_CODE = exports.DEFAULT_CURRENCY = exports.DEFAULT_TIMEOUT = exports.VALIDATE_SIGNATURE_CERT_URL = exports.VALIDATE_SIGNATURE_OAUTH_URL = exports.XML_TO_PDF_CERT_URL = exports.XML_TO_PDF_OAUTH_URL = exports.VALIDATE_XML_CERT_URL = exports.VALIDATE_XML_OAUTH_URL = exports.LIST_MESSAGES_PAGINATED_PATH = exports.LIST_MESSAGES_PATH = exports.DOWNLOAD_PATH = exports.STATUS_MESSAGE_PATH = exports.UPLOAD_B2C_PATH = exports.UPLOAD_PATH = exports.OAUTH_TOKEN_URL = exports.OAUTH_AUTHORIZE_URL = exports.BASE_PATH_CERT_PROD = exports.BASE_PATH_CERT_TEST = exports.BASE_PATH_OAUTH_PROD = exports.BASE_PATH_OAUTH_TEST = void 0;
// =============================================================================
// Base API Paths
// =============================================================================
/**
* OAuth-based API endpoints (recommended)
*/
exports.BASE_PATH_OAUTH_TEST = 'https://api.anaf.ro/test/FCTEL/rest';
exports.BASE_PATH_OAUTH_PROD = 'https://api.anaf.ro/prod/FCTEL/rest';
/**
* Certificate-based API endpoints
*/
exports.BASE_PATH_CERT_TEST = 'https://webserviceapl.anaf.ro/test/FCTEL/rest';
exports.BASE_PATH_CERT_PROD = 'https://webserviceapl.anaf.ro/prod/FCTEL/rest';
// =============================================================================
// OAuth 2.0 Authentication Endpoints
// =============================================================================
/**
* OAuth authorization endpoint
* Used to initiate the OAuth flow and obtain authorization code
*/
exports.OAUTH_AUTHORIZE_URL = 'https://logincert.anaf.ro/anaf-oauth2/v1/authorize';
/**
* OAuth token endpoint
* Used to exchange authorization code for access token and refresh tokens
*/
exports.OAUTH_TOKEN_URL = 'https://logincert.anaf.ro/anaf-oauth2/v1/token';
// =============================================================================
// Core e-Factura API Endpoints (relative paths)
// =============================================================================
/**
* Upload invoice document
* POST {basePath}/upload?standard={UBL|CN|CII|RASP}&cif={vatNumber}
* Optional params: extern, autofactura, executare
*/
exports.UPLOAD_PATH = '/upload';
/**
* Upload B2C (Business to Consumer) invoice
* POST {basePath}/uploadb2c?cif={vatNumber}
* Used for simplified B2C invoices
*/
exports.UPLOAD_B2C_PATH = '/uploadb2c';
/**
* Check upload status
* GET {basePath}/stareMesaj?id_incarcare={uploadId}
* Returns current processing status of uploaded document
*/
exports.STATUS_MESSAGE_PATH = '/stareMesaj';
/**
* Download processed document
* GET {basePath}/descarcare?id={downloadId}
* Downloads the processed invoice or error details
*/
exports.DOWNLOAD_PATH = '/descarcare';
/**
* List messages (simple)
* GET {basePath}/listaMesajeFactura?zile={days}&cif={vatNumber}
* Optional param: filtru={E|T|P|R}
*/
exports.LIST_MESSAGES_PATH = '/listaMesajeFactura';
/**
* List messages with pagination
* GET {basePath}/listaMesajePaginatieFactura?startTime={timestamp}&endTime={timestamp}&pagina={page}&cif={vatNumber}
* Optional param: filtru={E|T|P|R}
*/
exports.LIST_MESSAGES_PAGINATED_PATH = '/listaMesajePaginatieFactura';
// =============================================================================
// Validation and Conversion Endpoints
// =============================================================================
/**
* XML validation endpoint for OAuth
* POST https://api.anaf.ro/prod/FCTEL/rest/validare
* Validates XML documents against ANAF schemas
*/
exports.VALIDATE_XML_OAUTH_URL = 'https://api.anaf.ro/prod/FCTEL/rest/validare';
/**
* XML validation endpoint for Certificate auth
* POST https://webservicesp.anaf.ro/prod/FCTEL/rest/validare
*/
exports.VALIDATE_XML_CERT_URL = 'https://webservicesp.anaf.ro/prod/FCTEL/rest/validare';
/**
* XML to PDF conversion endpoint for OAuth
* POST https://api.anaf.ro/prod/FCTEL/rest/transformare/{standard}[/DA]
* Converts e-Factura XML to PDF format
*/
exports.XML_TO_PDF_OAUTH_URL = 'https://api.anaf.ro/prod/FCTEL/rest/transformare';
/**
* XML to PDF conversion endpoint for Certificate auth
* POST https://webservicesp.anaf.ro/prod/FCTEL/rest/transformare/{standard}[/DA]
*/
exports.XML_TO_PDF_CERT_URL = 'https://webservicesp.anaf.ro/prod/FCTEL/rest/transformare';
/**
* Digital signature validation endpoint for OAuth
* POST https://api.anaf.ro/api/validate/signature
* Validates digital signatures on XML documents
*/
exports.VALIDATE_SIGNATURE_OAUTH_URL = 'https://api.anaf.ro/api/validate/signature';
/**
* Digital signature validation endpoint for Certificate auth
* POST https://webservicesp.anaf.ro/api/validate/signature
*/
exports.VALIDATE_SIGNATURE_CERT_URL = 'https://webservicesp.anaf.ro/api/validate/signature';
// =============================================================================
// Default Configuration Values
// =============================================================================
/**
* Default request timeout in milliseconds
*/
exports.DEFAULT_TIMEOUT = 30000;
/**
* Default currency for invoices
*/
exports.DEFAULT_CURRENCY = 'RON';
/**
* Default country code for addresses
*/
exports.DEFAULT_COUNTRY_CODE = 'RO';
/**
* Default unit of measure code
*/
exports.DEFAULT_UNIT_CODE = 'EA'; // Each
/**
* UBL customization ID for CIUS-RO compliance
*/
exports.UBL_CUSTOMIZATION_ID = 'urn:cen.eu:en16931:2017#compliant#urn:efactura.mfinante.ro:CIUS-RO:1.0.1';
/**
* Default invoice type code (Commercial Invoice)
*/
exports.INVOICE_TYPE_CODE = '380';
// =============================================================================
// Helper Functions for URL Construction
// =============================================================================
/**
* Get the appropriate base path based on auth mode and environment
*/
const getBasePath = (authMode = 'oauth', testMode = false) => {
if (authMode === 'cert') {
return testMode ? exports.BASE_PATH_CERT_TEST : exports.BASE_PATH_CERT_PROD;
}
return testMode ? exports.BASE_PATH_OAUTH_TEST : exports.BASE_PATH_OAUTH_PROD;
};
exports.getBasePath = getBasePath;
// =============================================================================
// Query Parameter Builders
// =============================================================================
/**
* Build upload query parameters
*/
const buildUploadParams = (vatNumber, options = {}) => {
const params = new URLSearchParams();
params.append('cif', vatNumber);
params.append('standard', options.standard || 'UBL');
if (options.extern)
params.append('extern', 'DA');
if (options.autofactura)
params.append('autofactura', 'DA');
if (options.executare)
params.append('executare', 'DA');
return params;
};
exports.buildUploadParams = buildUploadParams;
/**
* Build status check query parameters
*/
const buildStatusParams = (uploadId) => {
const params = new URLSearchParams();
params.append('id_incarcare', uploadId);
return params;
};
exports.buildStatusParams = buildStatusParams;
/**
* Build download query parameters
*/
const buildDownloadParams = (downloadId) => {
const params = new URLSearchParams();
params.append('id', downloadId);
return params;
};
exports.buildDownloadParams = buildDownloadParams;
/**
* Build list messages query parameters
*/
const buildListMessagesParams = (vatNumber, days, filter) => {
const params = new URLSearchParams();
params.append('cif', vatNumber);
params.append('zile', days.toString());
if (filter)
params.append('filtru', filter);
return params;
};
exports.buildListMessagesParams = buildListMessagesParams;
/**
* Build paginated list messages query parameters
*/
const buildPaginatedMessagesParams = (vatNumber, startTime, endTime, page, filter) => {
const params = new URLSearchParams();
params.append('cif', vatNumber);
params.append('startTime', startTime.toString());
params.append('endTime', endTime.toString());
params.append('pagina', page.toString());
if (filter)
params.append('filtru', filter);
return params;
};
exports.buildPaginatedMessagesParams = buildPaginatedMessagesParams;