feat: implement SalesInvoiceTspSwitchService and SalesInvoiceTspService for handling TSP provider interactions
- Add SalesInvoiceTspSwitchService to manage TSP provider selection and sending invoices. - Introduce SalesInvoiceTspService for creating, sending, and retrieving sales invoices. - Implement NamaProviderSwitchAdapter for communication with the NAMA TSP provider API. - Define DTOs for request and response structures specific to the NAMA provider. - Enhance error handling and logging for TSP provider interactions.
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
export interface FetchRequestContext {
|
||||
url: string
|
||||
init: RequestInit
|
||||
}
|
||||
|
||||
export interface FetchRequestInterceptor {
|
||||
onRequest?(
|
||||
context: FetchRequestContext,
|
||||
): Promise<FetchRequestContext> | FetchRequestContext
|
||||
onResponse?(
|
||||
context: FetchRequestContext,
|
||||
response: Response,
|
||||
): Promise<Response> | Response
|
||||
onError?(context: FetchRequestContext, error: unknown): Promise<void> | void
|
||||
}
|
||||
|
||||
function mergeHeaders(
|
||||
currentHeaders: HeadersInit | undefined,
|
||||
newHeaders: HeadersInit,
|
||||
): Headers {
|
||||
const mergedHeaders = new Headers(currentHeaders)
|
||||
const incomingHeaders = new Headers(newHeaders)
|
||||
|
||||
incomingHeaders.forEach((value, key) => {
|
||||
mergedHeaders.set(key, value)
|
||||
})
|
||||
|
||||
return mergedHeaders
|
||||
}
|
||||
|
||||
export function createHeaderRequestInterceptor(
|
||||
headers: HeadersInit,
|
||||
): FetchRequestInterceptor {
|
||||
return {
|
||||
onRequest(context) {
|
||||
return {
|
||||
...context,
|
||||
init: {
|
||||
...context.init,
|
||||
headers: mergeHeaders(context.init.headers, headers),
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
export function createEnsureSuccessResponseInterceptor(): FetchRequestInterceptor {
|
||||
return {
|
||||
async onResponse(_, response) {
|
||||
if (response.ok) {
|
||||
return response
|
||||
}
|
||||
|
||||
const errorBody = await response.text().catch(() => '')
|
||||
const normalizedBody = errorBody
|
||||
return Promise.reject({
|
||||
status: response.status,
|
||||
statusText: response.statusText,
|
||||
body: normalizedBody,
|
||||
})
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user