nav-connect
Version:
Nav Online Invoice connection module
80 lines • 3.23 kB
JavaScript
import { computeManageRequestSignature, generateRequestMetadata, sha3_512, sha512 } from "./crypto.js";
function buildBasicOnlineInvoiceRequest(config, requestId, timestamp, signature) {
const basicRequest = {
"@_xmlns": "http://schemas.nav.gov.hu/OSA/3.0/api",
"@_xmlns:common": "http://schemas.nav.gov.hu/NTCA/1.0/common",
header: {
requestId,
timestamp,
requestVersion: "3.0",
headerVersion: "1.0",
},
user: {
login: config.technicalUser.user,
passwordHash: {
"@_cryptoType": "SHA-512",
"#text": sha512(config.technicalUser.password),
},
taxNumber: config.taxNumber,
requestSignature: {
"@_cryptoType": "SHA3-512",
"#text": signature,
},
},
};
return {
...basicRequest,
software: {
softwareId: config.software.softwareId,
softwareName: config.software.softwareName,
softwareOperation: config.software.softwareOperation,
softwareMainVersion: config.software.softwareMainVersion,
softwareDevName: config.software.softwareDevName,
softwareDevContact: config.software.softwareDevContact,
softwareDevCountryCode: config.software.softwareDevCountryCode,
softwareDevTaxNumber: config.software.softwareDevTaxNumber,
},
};
}
export function createBasicOnlineInvoiceRequest(config) {
const { requestId, timestamp, navTimestampForHash } = generateRequestMetadata();
const signature = sha3_512(requestId + navTimestampForHash + config.technicalUser.signatureKey);
return buildBasicOnlineInvoiceRequest(config, requestId, timestamp, signature);
}
function createManageRequest(config, params, signatureParts) {
const { requestId, timestamp, navTimestampForHash } = generateRequestMetadata();
const signature = computeManageRequestSignature(requestId, navTimestampForHash, config.technicalUser.signatureKey, signatureParts);
return {
...buildBasicOnlineInvoiceRequest(config, requestId, timestamp, signature),
exchangeToken: params.exchangeToken,
...params.operations,
};
}
export function createManageInvoiceRequest(config, params) {
return createManageRequest(config, {
exchangeToken: params.exchangeToken,
operations: {
invoiceOperations: {
compressedContent: params.compressedContent,
invoiceOperation: params.invoiceOperation,
},
},
}, params.invoiceOperation.map((op) => ({
operation: op.invoiceOperation,
data: op.invoiceData,
})));
}
export function createManageAnnulmentRequest(config, params) {
return createManageRequest(config, {
exchangeToken: params.exchangeToken,
operations: {
annulmentOperations: {
annulmentOperation: params.annulmentOperations,
},
},
}, params.annulmentOperations.map((op) => ({
operation: op.annulmentOperation,
data: op.invoiceAnnulment,
})));
}
//# sourceMappingURL=requestBuilder.js.map