@esfaenza/httpservice 12.2.17 → 12.2.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,6 +17,7 @@ export const Loc = {
17
17
  "redirecting to login": { "en-US": "redirecting to login", "it-IT": "redireziono al login", },
18
18
  "Redirecting to Login, ignoring HTTP error on call": { "en-US": "Redirecting to Login, ignoring HTTP error on call", "it-IT": "Redireziono al login ignorando errori sulla chiamata", },
19
19
  "Already Handling an error, ignoring HTTP error on call": { "en-US": "Already Handling an error, ignoring HTTP error on call", "it-IT": "sto già gestendo un errore, ignoro quello corrente per la chiamata HTTP", },
20
- "Error 444 on call": { "en-US": "Error 444 on call", "it-IT": "Errore 444 su chiamata", }
20
+ "Error 444 on call": { "en-US": "Error 444 on call", "it-IT": "Errore 444 su chiamata" },
21
+ "Resource not found": { "en-US": "Resource not found", "it-IT": "Risorsa non trovata" }
21
22
  };
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHNlcnZpY2Uuc2VydmljZS5sb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwc2VydmljZS9zcmMvbGliL2h0dHBzZXJ2aWNlLnNlcnZpY2UubG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFFO0lBQ2QsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsZUFBZSxHQUFHO0lBQ2xFLHNCQUFzQixFQUFFLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE9BQU8sRUFBRSx3QkFBd0IsR0FBRztJQUMvRixtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsOEJBQThCLEdBQUc7SUFDL0YsZUFBZSxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEdBQUc7SUFDN0UsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxHQUFHO0lBQ3BELDZCQUE2QixFQUFFLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE9BQU8sRUFBRSwrQkFBK0IsR0FBRztJQUNwSCxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEdBQUc7SUFDakYsYUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsV0FBVyxHQUFHO0lBQ2hFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsR0FBRztJQUN4RCxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEdBQUc7SUFDekQsbUJBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixHQUFHO0lBQ3pGLHdEQUF3RCxFQUFFLEVBQUUsT0FBTyxFQUFFLHdEQUF3RCxFQUFFLE9BQU8sRUFBRSwrQ0FBK0MsR0FBRztJQUMxTCxzQkFBc0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEdBQUc7SUFDN0YsbURBQW1ELEVBQUUsRUFBRSxPQUFPLEVBQUUsbURBQW1ELEVBQUUsT0FBTyxFQUFFLHNEQUFzRCxHQUFHO0lBQ3ZMLHdEQUF3RCxFQUFFLEVBQUUsT0FBTyxFQUFFLHdEQUF3RCxFQUFFLE9BQU8sRUFBRSx5RUFBeUUsR0FBRztJQUNwTixtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEdBQUc7Q0FDNUYsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBPZ2dldHRvIHN0YXRpY28gZGkgbG9jYWxpenphemlvbmUgcGVyIGkgbWVzc2FnZ2lcclxuICovXHJcbmV4cG9ydCBjb25zdCBMb2MgPXtcclxuICAgIFwiUmVzdWx0IGZvclwiOiB7IFwiZW4tVVNcIjogXCJSZXN1bHQgZm9yXCIsIFwiaXQtSVRcIjogXCJSaXN1bHRhdG8gcGVyXCIsIH0sXHJcbiAgICBcInJldHJpZXZlZCBmcm9tIGNhY2hlXCI6IHsgXCJlbi1VU1wiOiBcInJldHJpZXZlZCBmcm9tIGNhY2hlXCIsIFwiaXQtSVRcIjogXCJyZWN1cGVyYXRvIGRhbGxhIGNhY2hlXCIsIH0sXHJcbiAgICBcIkNhY2hlZCByZXN1bHQgZm9yXCI6IHsgXCJlbi1VU1wiOiBcIkNhY2hlZCByZXN1bHQgZm9yXCIsIFwiaXQtSVRcIjogXCJNZXNzbyBpbiBjYWNoZSByaXN1bHRhdG8gcGVyXCIsIH0sXHJcbiAgICBcIlN0YXJ0aW5nIGNhbGxcIjogeyBcImVuLVVTXCI6IFwiU3RhcnRpbmcgY2FsbFwiLCBcIml0LUlUXCI6IFwiSW5pemlvIGxhIGNoaWFtYXRhXCIsIH0sXHJcbiAgICBcImF0IFVSTFwiOiB7IFwiZW4tVVNcIjogXCJhdCBVUkxcIiwgXCJpdC1JVFwiOiBcImFsbCdVUkxcIiwgfSxcclxuICAgIFwiSW52bGFsaWRhdGluZyBjYWNoZSBlbGVtZW50XCI6IHsgXCJlbi1VU1wiOiBcIkludmxhbGlkYXRpbmcgY2FjaGUgZWxlbWVudFwiLCBcIml0LUlUXCI6IFwiSW52YWxpZG8gZWxlbWVudG8gZGVsbGEgY2FjaGVcIiwgfSxcclxuICAgIFwiRmluYWxpemluZyBjYWxsXCI6IHsgXCJlbi1VU1wiOiBcIkZpbmFsaXppbmcgY2FsbFwiLCBcIml0LUlUXCI6IFwiRmluYWxpenpvIGNoaWFtYXRhXCIsIH0sXHJcbiAgICBcIndpdGggc3RhdHVzXCI6IHsgXCJlbi1VU1wiOiBcIndpdGggc3RhdHVzXCIsIFwiaXQtSVRcIjogXCJjb24gc3RhdG9cIiwgfSxcclxuICAgIFwiU3VjY2Vzc1wiOiB7IFwiZW4tVVNcIjogXCJTdWNjZXNzXCIsIFwiaXQtSVRcIjogXCJTdWNjZXNzc29cIiwgfSxcclxuICAgIFwiRmFpbHVyZVwiOiB7IFwiZW4tVVNcIjogXCJGYWlsdXJlXCIsIFwiaXQtSVRcIjogXCJGYWxsaW1lbnRvXCIsIH0sXHJcbiAgICBcIkVycm9yIDQwMSBvbiBjYWxsXCI6IHsgXCJlbi1VU1wiOiBcIkVycm9yIDQwMSBvbiBjYWxsXCIsIFwiaXQtSVRcIjogXCJFcnJvcmUgNDAxIHN1IGNoaWFtYXRhXCIsIH0sXHJcbiAgICBcIndpdGggcmVkaXJlY3QgYWxyZWFkeSBpbiBwcm9ncmVzcy4gSWdub3JpbmcgdGhpcyBldmVudFwiOiB7IFwiZW4tVVNcIjogXCJ3aXRoIHJlZGlyZWN0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuIElnbm9yaW5nIHRoaXMgZXZlbnRcIiwgXCJpdC1JVFwiOiBcImNvbiByZWRpcmV6aW9uZSBnacOgIGluIGNvcnNvLiBJZ25vcm8gbCdldmVudG9cIiwgfSxcclxuICAgIFwicmVkaXJlY3RpbmcgdG8gbG9naW5cIjogeyBcImVuLVVTXCI6IFwicmVkaXJlY3RpbmcgdG8gbG9naW5cIiwgXCJpdC1JVFwiOiBcInJlZGlyZXppb25vIGFsIGxvZ2luXCIsIH0sXHJcbiAgICBcIlJlZGlyZWN0aW5nIHRvIExvZ2luLCBpZ25vcmluZyBIVFRQIGVycm9yIG9uIGNhbGxcIjogeyBcImVuLVVTXCI6IFwiUmVkaXJlY3RpbmcgdG8gTG9naW4sIGlnbm9yaW5nIEhUVFAgZXJyb3Igb24gY2FsbFwiLCBcIml0LUlUXCI6IFwiUmVkaXJlemlvbm8gYWwgbG9naW4gaWdub3JhbmRvIGVycm9yaSBzdWxsYSBjaGlhbWF0YVwiLCB9LFxyXG4gICAgXCJBbHJlYWR5IEhhbmRsaW5nIGFuIGVycm9yLCBpZ25vcmluZyBIVFRQIGVycm9yIG9uIGNhbGxcIjogeyBcImVuLVVTXCI6IFwiQWxyZWFkeSBIYW5kbGluZyBhbiBlcnJvciwgaWdub3JpbmcgSFRUUCBlcnJvciBvbiBjYWxsXCIsIFwiaXQtSVRcIjogXCJzdG8gZ2nDoCBnZXN0ZW5kbyB1biBlcnJvcmUsIGlnbm9ybyBxdWVsbG8gY29ycmVudGUgcGVyIGxhIGNoaWFtYXRhIEhUVFBcIiwgfSxcclxuICAgIFwiRXJyb3IgNDQ0IG9uIGNhbGxcIjogeyBcImVuLVVTXCI6IFwiRXJyb3IgNDQ0IG9uIGNhbGxcIiwgXCJpdC1JVFwiOiBcIkVycm9yZSA0NDQgc3UgY2hpYW1hdGFcIiwgfVxyXG59Il19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cHNlcnZpY2Uuc2VydmljZS5sb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwc2VydmljZS9zcmMvbGliL2h0dHBzZXJ2aWNlLnNlcnZpY2UubG9jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFFO0lBQ2QsWUFBWSxFQUFFLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsZUFBZSxHQUFHO0lBQ2xFLHNCQUFzQixFQUFFLEVBQUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE9BQU8sRUFBRSx3QkFBd0IsR0FBRztJQUMvRixtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsOEJBQThCLEdBQUc7SUFDL0YsZUFBZSxFQUFFLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEdBQUc7SUFDN0UsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxHQUFHO0lBQ3BELDZCQUE2QixFQUFFLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE9BQU8sRUFBRSwrQkFBK0IsR0FBRztJQUNwSCxpQkFBaUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEdBQUc7SUFDakYsYUFBYSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsV0FBVyxHQUFHO0lBQ2hFLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFdBQVcsR0FBRztJQUN4RCxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEdBQUc7SUFDekQsbUJBQW1CLEVBQUUsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixHQUFHO0lBQ3pGLHdEQUF3RCxFQUFFLEVBQUUsT0FBTyxFQUFFLHdEQUF3RCxFQUFFLE9BQU8sRUFBRSwrQ0FBK0MsR0FBRztJQUMxTCxzQkFBc0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEdBQUc7SUFDN0YsbURBQW1ELEVBQUUsRUFBRSxPQUFPLEVBQUUsbURBQW1ELEVBQUUsT0FBTyxFQUFFLHNEQUFzRCxHQUFHO0lBQ3ZMLHdEQUF3RCxFQUFFLEVBQUUsT0FBTyxFQUFFLHdEQUF3RCxFQUFFLE9BQU8sRUFBRSx5RUFBeUUsR0FBRztJQUNwTixtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUU7SUFDeEYsb0JBQW9CLEVBQUUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFO0NBQzFGLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogT2dnZXR0byBzdGF0aWNvIGRpIGxvY2FsaXp6YXppb25lIHBlciBpIG1lc3NhZ2dpXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTG9jID17XHJcbiAgICBcIlJlc3VsdCBmb3JcIjogeyBcImVuLVVTXCI6IFwiUmVzdWx0IGZvclwiLCBcIml0LUlUXCI6IFwiUmlzdWx0YXRvIHBlclwiLCB9LFxyXG4gICAgXCJyZXRyaWV2ZWQgZnJvbSBjYWNoZVwiOiB7IFwiZW4tVVNcIjogXCJyZXRyaWV2ZWQgZnJvbSBjYWNoZVwiLCBcIml0LUlUXCI6IFwicmVjdXBlcmF0byBkYWxsYSBjYWNoZVwiLCB9LFxyXG4gICAgXCJDYWNoZWQgcmVzdWx0IGZvclwiOiB7IFwiZW4tVVNcIjogXCJDYWNoZWQgcmVzdWx0IGZvclwiLCBcIml0LUlUXCI6IFwiTWVzc28gaW4gY2FjaGUgcmlzdWx0YXRvIHBlclwiLCB9LFxyXG4gICAgXCJTdGFydGluZyBjYWxsXCI6IHsgXCJlbi1VU1wiOiBcIlN0YXJ0aW5nIGNhbGxcIiwgXCJpdC1JVFwiOiBcIkluaXppbyBsYSBjaGlhbWF0YVwiLCB9LFxyXG4gICAgXCJhdCBVUkxcIjogeyBcImVuLVVTXCI6IFwiYXQgVVJMXCIsIFwiaXQtSVRcIjogXCJhbGwnVVJMXCIsIH0sXHJcbiAgICBcIkludmxhbGlkYXRpbmcgY2FjaGUgZWxlbWVudFwiOiB7IFwiZW4tVVNcIjogXCJJbnZsYWxpZGF0aW5nIGNhY2hlIGVsZW1lbnRcIiwgXCJpdC1JVFwiOiBcIkludmFsaWRvIGVsZW1lbnRvIGRlbGxhIGNhY2hlXCIsIH0sXHJcbiAgICBcIkZpbmFsaXppbmcgY2FsbFwiOiB7IFwiZW4tVVNcIjogXCJGaW5hbGl6aW5nIGNhbGxcIiwgXCJpdC1JVFwiOiBcIkZpbmFsaXp6byBjaGlhbWF0YVwiLCB9LFxyXG4gICAgXCJ3aXRoIHN0YXR1c1wiOiB7IFwiZW4tVVNcIjogXCJ3aXRoIHN0YXR1c1wiLCBcIml0LUlUXCI6IFwiY29uIHN0YXRvXCIsIH0sXHJcbiAgICBcIlN1Y2Nlc3NcIjogeyBcImVuLVVTXCI6IFwiU3VjY2Vzc1wiLCBcIml0LUlUXCI6IFwiU3VjY2Vzc3NvXCIsIH0sXHJcbiAgICBcIkZhaWx1cmVcIjogeyBcImVuLVVTXCI6IFwiRmFpbHVyZVwiLCBcIml0LUlUXCI6IFwiRmFsbGltZW50b1wiLCB9LFxyXG4gICAgXCJFcnJvciA0MDEgb24gY2FsbFwiOiB7IFwiZW4tVVNcIjogXCJFcnJvciA0MDEgb24gY2FsbFwiLCBcIml0LUlUXCI6IFwiRXJyb3JlIDQwMSBzdSBjaGlhbWF0YVwiLCB9LFxyXG4gICAgXCJ3aXRoIHJlZGlyZWN0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuIElnbm9yaW5nIHRoaXMgZXZlbnRcIjogeyBcImVuLVVTXCI6IFwid2l0aCByZWRpcmVjdCBhbHJlYWR5IGluIHByb2dyZXNzLiBJZ25vcmluZyB0aGlzIGV2ZW50XCIsIFwiaXQtSVRcIjogXCJjb24gcmVkaXJlemlvbmUgZ2nDoCBpbiBjb3Jzby4gSWdub3JvIGwnZXZlbnRvXCIsIH0sXHJcbiAgICBcInJlZGlyZWN0aW5nIHRvIGxvZ2luXCI6IHsgXCJlbi1VU1wiOiBcInJlZGlyZWN0aW5nIHRvIGxvZ2luXCIsIFwiaXQtSVRcIjogXCJyZWRpcmV6aW9ubyBhbCBsb2dpblwiLCB9LFxyXG4gICAgXCJSZWRpcmVjdGluZyB0byBMb2dpbiwgaWdub3JpbmcgSFRUUCBlcnJvciBvbiBjYWxsXCI6IHsgXCJlbi1VU1wiOiBcIlJlZGlyZWN0aW5nIHRvIExvZ2luLCBpZ25vcmluZyBIVFRQIGVycm9yIG9uIGNhbGxcIiwgXCJpdC1JVFwiOiBcIlJlZGlyZXppb25vIGFsIGxvZ2luIGlnbm9yYW5kbyBlcnJvcmkgc3VsbGEgY2hpYW1hdGFcIiwgfSxcclxuICAgIFwiQWxyZWFkeSBIYW5kbGluZyBhbiBlcnJvciwgaWdub3JpbmcgSFRUUCBlcnJvciBvbiBjYWxsXCI6IHsgXCJlbi1VU1wiOiBcIkFscmVhZHkgSGFuZGxpbmcgYW4gZXJyb3IsIGlnbm9yaW5nIEhUVFAgZXJyb3Igb24gY2FsbFwiLCBcIml0LUlUXCI6IFwic3RvIGdpw6AgZ2VzdGVuZG8gdW4gZXJyb3JlLCBpZ25vcm8gcXVlbGxvIGNvcnJlbnRlIHBlciBsYSBjaGlhbWF0YSBIVFRQXCIsIH0sXHJcbiAgICBcIkVycm9yIDQ0NCBvbiBjYWxsXCI6IHsgXCJlbi1VU1wiOiBcIkVycm9yIDQ0NCBvbiBjYWxsXCIsIFwiaXQtSVRcIjogXCJFcnJvcmUgNDQ0IHN1IGNoaWFtYXRhXCIgfSxcclxuICAgIFwiUmVzb3VyY2Ugbm90IGZvdW5kXCI6IHsgXCJlbi1VU1wiOiBcIlJlc291cmNlIG5vdCBmb3VuZFwiLCBcIml0LUlUXCI6IFwiUmlzb3JzYSBub24gdHJvdmF0YVwiIH1cclxufSJdfQ==
@@ -1,3 +1,4 @@
1
+ import { __awaiter } from 'tslib';
1
2
  import { HttpEventType, HttpHeaders, HttpErrorResponse, HttpClient } from '@angular/common/http';
2
3
  import { InjectionToken, Injectable, Inject, Optional, NgModule } from '@angular/core';
3
4
  import { delay, finalize, map, catchError, scan } from 'rxjs/operators';
@@ -130,10 +131,10 @@ const Loc = {
130
131
  "redirecting to login": { "en-US": "redirecting to login", "it-IT": "redireziono al login", },
131
132
  "Redirecting to Login, ignoring HTTP error on call": { "en-US": "Redirecting to Login, ignoring HTTP error on call", "it-IT": "Redireziono al login ignorando errori sulla chiamata", },
132
133
  "Already Handling an error, ignoring HTTP error on call": { "en-US": "Already Handling an error, ignoring HTTP error on call", "it-IT": "sto già gestendo un errore, ignoro quello corrente per la chiamata HTTP", },
133
- "Error 444 on call": { "en-US": "Error 444 on call", "it-IT": "Errore 444 su chiamata", }
134
+ "Error 444 on call": { "en-US": "Error 444 on call", "it-IT": "Errore 444 su chiamata" },
135
+ "Resource not found": { "en-US": "Resource not found", "it-IT": "Risorsa non trovata" }
134
136
  };
135
137
 
136
- // Angular
137
138
  /**
138
139
  * Servizio utilizzato per effettuare qualsiasi tipo di chiamata HTTP dall'applicazione, gestisce errori e cache delle risposte nativamente e ne può essere
139
140
  * esteso/modificato il comportamento implementando la classe di "hook" **IHttpServiceExtensions** e registrandola nel provider della classe **HttpServiceExtensions**
@@ -250,20 +251,63 @@ class HTTPService {
250
251
  }), finalize(() => { this.tryFinalizeByGuid(myGuid); }));
251
252
  }
252
253
  /**
253
- * Esecuzione di una POST HTTP. Tipizzata sia in Input che in Output
254
- *
254
+ * Esecuzione di una POST HTTP
255
255
  *
256
256
  * @param {string} url URL su cui effettuare la chiamata
257
257
  * @param {any} bodyData DTO per la chiamata
258
+ * @param {HttpParams} params Parametri della chiamata
259
+ * @param {string} transaction Codice transazione collegato a questa chiamata. Viene inserito nell'Header "X-TX-ID" e lato Backend dovrà essere gestito di conseguenza
260
+ * @param {boolean} succesfulResultMandatory Indica che questa chiamata deve assolutamente andare bene. In caso contrario viene fisicamente fatto il throw che può essere
261
+ * raccolto da chi usa la libreria nella pipe "onError" dell'Observable restituito ed essere gestito in maniera non standard
262
+ *
263
+ * @returns {Observable<T>} Observable che contiene il risultato della chiamata
264
+ */
265
+ post(url, bodyData, params = null, transaction = "", succesfulResultMandatory = true) {
266
+ let myGuid = this.defaultStartCall(url);
267
+ var httpCall = this.http.post(url, bodyData, { headers: this.getHeaders(transaction), params: params });
268
+ return httpCall.pipe(map((res) => {
269
+ let responseItem = res;
270
+ return responseItem;
271
+ }), catchError((err, caught) => {
272
+ return !succesfulResultMandatory ? throwError(err) : this.registerErrorAndReturnEmptyObservable(err, myGuid);
273
+ }), finalize(() => { this.tryFinalizeByGuid(myGuid); }));
274
+ }
275
+ /**
276
+ * Esecuzione di una DELETE HTTP
277
+ *
278
+ * @param {string} url URL su cui effettuare la chiamata
279
+ * @param {HttpParams} params Parametri della chiamata
258
280
  * @param {string} transaction Codice transazione collegato a questa chiamata. Viene inserito nell'Header "X-TX-ID" e lato Backend dovrà essere gestito di conseguenza
259
281
  * @param {boolean} succesfulResultMandatory Indica che questa chiamata deve assolutamente andare bene. In caso contrario viene fisicamente fatto il throw che può essere
260
282
  * raccolto da chi usa la libreria nella pipe "onError" dell'Observable restituito ed essere gestito in maniera non standard
261
283
  *
262
284
  * @returns {Observable<T>} Observable che contiene il risultato della chiamata
263
285
  */
264
- post(url, bodyData, transaction = "", succesfulResultMandatory = true) {
286
+ delete(url, params = null, transaction = "", succesfulResultMandatory = true) {
287
+ let myGuid = this.defaultStartCall(url);
288
+ var httpCall = this.http.delete(url, { headers: this.getHeaders(transaction), params: params });
289
+ return httpCall.pipe(map((res) => {
290
+ let responseItem = res;
291
+ return responseItem;
292
+ }), catchError((err, caught) => {
293
+ return !succesfulResultMandatory ? throwError(err) : this.registerErrorAndReturnEmptyObservable(err, myGuid);
294
+ }), finalize(() => { this.tryFinalizeByGuid(myGuid); }));
295
+ }
296
+ /**
297
+ * Esecuzione di una PUT HTTP
298
+ *
299
+ * @param {string} url URL su cui effettuare la chiamata
300
+ * @param {any} bodyData DTO per la chiamata
301
+ * @param {HttpParams} params Parametri della chiamata
302
+ * @param {string} transaction Codice transazione collegato a questa chiamata. Viene inserito nell'Header "X-TX-ID" e lato Backend dovrà essere gestito di conseguenza
303
+ * @param {boolean} succesfulResultMandatory Indica che questa chiamata deve assolutamente andare bene. In caso contrario viene fisicamente fatto il throw che può essere
304
+ * raccolto da chi usa la libreria nella pipe "onError" dell'Observable restituito ed essere gestito in maniera non standard
305
+ *
306
+ * @returns {Observable<T>} Observable che contiene il risultato della chiamata
307
+ */
308
+ put(url, bodyData, params = null, transaction = "", succesfulResultMandatory = true) {
265
309
  let myGuid = this.defaultStartCall(url);
266
- var httpCall = this.http.post(url, bodyData, { headers: this.getHeaders(transaction) });
310
+ var httpCall = this.http.put(url, bodyData, { headers: this.getHeaders(transaction), params: params });
267
311
  return httpCall.pipe(map((res) => {
268
312
  let responseItem = res;
269
313
  return responseItem;
@@ -297,7 +341,7 @@ class HTTPService {
297
341
  *
298
342
  * @param {string} url URL su cui effettuare la chiamata
299
343
  * @param {K} bodyData DTO per la chiamata
300
- * @param {string} filename Nome del file che si sta richiedendo, rimane lato Frontend e serve per assegnare arbitrariamente un nome al file restituito
344
+ * @param {string} filename Nome del file che si sta richiedendo, rimane lato Frontend e serve per assegnare arbitrariamente un nome al file restituito, se vuoto viene utilizzata la Content-Disposition della risposta
301
345
  * @param {Function} getFileCallback Callback a due parametri (url: string, filename: string) per gestire il risultato del file richiesto. **Utilizzare UtilityService.fileDownload** di @esfaenza/extensions
302
346
  * @param {Function} afterGetFile Callback da chiamare dopo aver gestito la risposta del **getFileCallback**, in caso **handleError** fosse **false** verrà richiamato anche in caso di errore
303
347
  * @param {boolean} handleError Indica se di default gli errori devono essere gestiti dalla libreria o se devono essere ignorati
@@ -309,12 +353,38 @@ class HTTPService {
309
353
  afterGetFile();
310
354
  return this.registerErrorAndReturnEmptyObservable(err, myGuid, handleError);
311
355
  }), finalize(() => { this.tryFinalizeByGuid(myGuid); })).subscribe((response) => {
312
- let blob = response.body;
313
- let retUrl = window.URL.createObjectURL(blob);
314
- let cdisp = response.headers.get('content-disposition');
315
- // Presa da SO... fa un po' schifo
316
- var cdispFilename = cdisp.split(';')[1].split('filename')[1].split('=')[1].trim().replace(/\"/g, '');
317
- getFileCallback(retUrl, filename || cdispFilename);
356
+ var _a, _b, _c, _d;
357
+ let retUrl = window.URL.createObjectURL(response.body);
358
+ let fn = (_d = (_c = (_b = (_a = response.headers.get('content-disposition')) === null || _a === void 0 ? void 0 : _a.split(';')[1]) === null || _b === void 0 ? void 0 : _b.split('filename')[1]) === null || _c === void 0 ? void 0 : _c.split('=')[1]) === null || _d === void 0 ? void 0 : _d.trim().replace(/\"/g, '');
359
+ getFileCallback(retUrl, filename || fn);
360
+ if (afterGetFile)
361
+ afterGetFile();
362
+ });
363
+ }
364
+ /**
365
+ * Esecuzione di una GET HTTP
366
+ *
367
+ * Casistica particolare in cui viene restituito un file gestito come ObjectURL il cui URL si può gestire dal parametro di callback **getFileCallback**.
368
+ * La chiamata non ha un tipo restituito in quanto il risultato dev'essere gestito attraverso la callback **getFileCallback**
369
+ *
370
+ * @param {string} url URL su cui effettuare la chiamata
371
+ * @param {HttpParams} params Parametri della chiamata
372
+ * @param {string} filename Nome del file che si sta richiedendo, rimane lato Frontend e serve per assegnare arbitrariamente un nome al file restituito, se vuoto viene utilizzata la Content-Disposition della risposta
373
+ * @param {Function} getFileCallback Callback a due parametri (url: string, filename: string) per gestire il risultato del file richiesto. **Utilizzare UtilityService.fileDownload** di @esfaenza/extensions
374
+ * @param {Function} afterGetFile Callback da chiamare dopo aver gestito la risposta del **getFileCallback**, in caso **handleError** fosse **false** verrà richiamato anche in caso di errore
375
+ * @param {boolean} handleError Indica se di default gli errori devono essere gestiti dalla libreria o se devono essere ignorati
376
+ */
377
+ getFile(url, params = null, filename, getFileCallback, afterGetFile = null, handleError = true) {
378
+ let myGuid = this.defaultStartCall(url);
379
+ this.http.get(url, { params: params, headers: this.getHeaders(), observe: 'response', responseType: "blob" }).pipe(catchError((err, caught) => {
380
+ if (afterGetFile && !handleError)
381
+ afterGetFile();
382
+ return this.registerErrorAndReturnEmptyObservable(err, myGuid, handleError);
383
+ }), finalize(() => { this.tryFinalizeByGuid(myGuid); })).subscribe((response) => {
384
+ var _a, _b, _c, _d;
385
+ let retUrl = window.URL.createObjectURL(response.body);
386
+ let fn = (_d = (_c = (_b = (_a = response.headers.get('content-disposition')) === null || _a === void 0 ? void 0 : _a.split(';')[1]) === null || _b === void 0 ? void 0 : _b.split('filename')[1]) === null || _c === void 0 ? void 0 : _c.split('=')[1]) === null || _d === void 0 ? void 0 : _d.trim().replace(/\"/g, '');
387
+ getFileCallback(retUrl, filename || fn);
318
388
  if (afterGetFile)
319
389
  afterGetFile();
320
390
  });
@@ -326,7 +396,7 @@ class HTTPService {
326
396
  * @param {HttpParams} params Parametri della chiamata
327
397
  */
328
398
  getFileNative(url, params = null) {
329
- let finalUrl = url + "?" + params.toString();
399
+ let finalUrl = url + (params ? "?" + params.toString() : "");
330
400
  window.location.href = finalUrl;
331
401
  }
332
402
  /**
@@ -481,65 +551,116 @@ class HTTPService {
481
551
  * @param {string} guid Identificativo GUID della chiamata effettuata
482
552
  */
483
553
  onError(res, guid) {
484
- this.callStatus[guid] = false;
485
- //Mi assicuro che tutti gli errori durante il redirect al login vengano ignorati
486
- if (this.ExtensionsImpl.readRedirectingToLogin()) {
487
- this.log(this.loc("Redirecting to Login, ignoring HTTP error on call") + " " + guid);
488
- return;
489
- }
490
- //Mi assicuro che venga gestito un solo errore per volta
491
- if (this.ExtensionsImpl.readHandlingErrorStatus()) {
492
- this.log(this.loc("Already Handling an error, ignoring HTTP error on call") + " " + guid);
493
- return;
494
- }
495
- else
496
- this.ExtensionsImpl.writeHandlingErrorStatus(true);
497
- let finalError = "";
498
- let finalStatus = "";
499
- if (this.isTypeError(res)) {
500
- finalError = res.message;
501
- finalStatus = "HTTP Service Internal Error";
502
- }
503
- else if (this.isHttpErrorResponse(res)) {
504
- finalError = res.error ? (res.error.error ? res.error.error.message : res.error.toString()) : res.statusText;
505
- finalStatus = res.status.toString();
506
- switch (res.status) {
507
- // Unauthorized
508
- case 401:
509
- if (this.ExtensionsImpl.readRedirectionStatus()) {
510
- this.log(this.loc("Error 401 on call") + " " + guid + " " + this.loc("with redirect already in progress. Ignoring this event"));
554
+ return __awaiter(this, void 0, void 0, function* () {
555
+ this.callStatus[guid] = false;
556
+ //Mi assicuro che tutti gli errori durante il redirect al login vengano ignorati
557
+ if (this.ExtensionsImpl.readRedirectingToLogin()) {
558
+ this.log(this.loc("Redirecting to Login, ignoring HTTP error on call") + " " + guid);
559
+ return;
560
+ }
561
+ //Mi assicuro che venga gestito un solo errore per volta
562
+ if (this.ExtensionsImpl.readHandlingErrorStatus()) {
563
+ this.log(this.loc("Already Handling an error, ignoring HTTP error on call") + " " + guid);
564
+ return;
565
+ }
566
+ else
567
+ this.ExtensionsImpl.writeHandlingErrorStatus(true);
568
+ let finalError = "";
569
+ let finalStatus = "";
570
+ if (this.isTypeError(res)) {
571
+ finalError = res.message;
572
+ finalStatus = "HTTP Service Internal Error";
573
+ }
574
+ else if (this.isHttpErrorResponse(res)) {
575
+ finalError = yield this.getHttpErrorText(res.error);
576
+ finalStatus = res.status.toString();
577
+ switch (res.status) {
578
+ // Unauthorized
579
+ case 401:
580
+ if (this.ExtensionsImpl.readRedirectionStatus()) {
581
+ this.log(this.loc("Error 401 on call") + " " + guid + " " + this.loc("with redirect already in progress. Ignoring this event"));
582
+ return;
583
+ }
584
+ this.log(this.loc("Error 401 on call") + " " + guid + " " + this.loc("redirecting to login."));
585
+ this.ExtensionsImpl.writeRedirectionStatus(true);
586
+ this.ExtensionsImpl.writeRedirectingToLogin(true);
587
+ this.ExtensionsImpl.redirectToLogin();
511
588
  return;
512
- }
513
- this.log(this.loc("Error 401 on call") + " " + guid + " " + this.loc("redirecting to login."));
514
- this.ExtensionsImpl.writeRedirectionStatus(true);
515
- this.ExtensionsImpl.writeRedirectingToLogin(true);
516
- this.ExtensionsImpl.redirectToLogin();
517
- return;
518
- // NotConfiguredException
519
- case 444:
520
- if (this.ExtensionsImpl.readRedirectionStatus())
521
- this.log(this.loc("Error 444 on call") + " " + guid + " " + this.loc("with redirect already in progress. Ignoring this event"));
522
- else if (!this.ExtensionsImpl.handleNotConfiguredException())
589
+ // Handled exception
590
+ case 400:
591
+ // No Permissions
592
+ case 403:
523
593
  this.ExtensionsImpl.handleBlockingException(res.status, finalError);
524
- return;
525
- // No Permissions
526
- case 403:
527
- this.ExtensionsImpl.handleBlockingException(res.status, finalError);
528
- return;
529
- case 0:
530
- finalError = "Server Offline?" + res.statusText ? " (" + res.statusText + ") " : "";
594
+ return;
595
+ // Not found
596
+ case 404:
597
+ this.ExtensionsImpl.handleBlockingException(res.status, this.loc("Resource not found"));
598
+ return;
599
+ // NotConfiguredException
600
+ case 444:
601
+ if (this.ExtensionsImpl.readRedirectionStatus())
602
+ this.log(this.loc("Error 444 on call") + " " + guid + " " + this.loc("with redirect already in progress. Ignoring this event"));
603
+ else if (!this.ExtensionsImpl.handleNotConfiguredException())
604
+ this.ExtensionsImpl.handleBlockingException(res.status, finalError);
605
+ return;
606
+ case 0:
607
+ finalError = "Server might be offline" + (res.statusText ? " (" + res.statusText + ") " : "");
608
+ }
531
609
  }
532
- }
533
- this.ExtensionsImpl.handleException(finalStatus, finalError);
610
+ this.ExtensionsImpl.handleException(finalStatus, finalError);
611
+ });
612
+ }
613
+ /**
614
+ * Dato un errore restituisce una promise con la stringa finale dell'errore in modo da poter fare un await
615
+ *
616
+ * @param {any} err Errore da controllare
617
+ *
618
+ * @returns {Promise<string>} Promise che risolve con la stringa finale dell'errore
619
+ */
620
+ getHttpErrorText(err) {
621
+ // Se ho un Blob può essere o un CallResult o suppongo una semplice stringa,
622
+ // altrimenti potrebbe essere direttamente un CallResult, oppure una semplice stringa
623
+ return new Promise((resolve) => {
624
+ if (err instanceof Blob) {
625
+ let reader = new FileReader();
626
+ reader.onload = (e) => {
627
+ let errMsg = e.target.result;
628
+ let jsonerrMsg;
629
+ try {
630
+ jsonerrMsg = JSON.parse(errMsg);
631
+ }
632
+ catch (e) { }
633
+ return resolve(jsonerrMsg && this.isCallResult(jsonerrMsg) ? jsonerrMsg.error.message : errMsg);
634
+ };
635
+ reader.readAsText(err);
636
+ }
637
+ else if (this.isCallResult(err))
638
+ return resolve(err.error.message);
639
+ else
640
+ return resolve(err === null || err === void 0 ? void 0 : err.toString());
641
+ });
642
+ }
643
+ /**
644
+ * Riconosce se l'oggetto è di tipo **CallResult** e, se sì, lo casta al tipo corretto per essere utilizzato correttamente nel blocco di codice successivo
645
+ *
646
+ * @param {any} err Errore da controllare
647
+ */
648
+ isCallResult(err) {
649
+ var _a;
650
+ return !!((_a = err === null || err === void 0 ? void 0 : err.error) === null || _a === void 0 ? void 0 : _a.message);
534
651
  }
535
652
  /**
536
653
  * Riconosce se l'errore è di tipo **HttpErrorResponse** e, se sì, lo casta al tipo corretto per essere utilizzato correttamente nel blocco di codice successivo
654
+ *
655
+ * @param {any} err Errore da controllare
537
656
  */
538
657
  isHttpErrorResponse(err) {
539
658
  return err instanceof HttpErrorResponse;
540
659
  }
541
660
  /**
542
661
  * Riconosce se l'errore è di tipo **TypeError** e, se sì, lo casta al tipo corretto per essere utilizzato correttamente nel blocco di codice successivo
662
+ *
663
+ * @param {any} err Errore da controllare
543
664
  */
544
665
  isTypeError(err) {
545
666
  return err.name == "TypeError";