ver: 1.1.21:
- Lista dei Cataloghi - Gestione Cataloghi in base alla configurazione
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import axios, { AxiosInstance, AxiosResponse } from 'axios'
|
||||
import axios, { AxiosRequestConfig, AxiosInstance, AxiosResponse } from 'axios'
|
||||
|
||||
// import LoginModule from '../Modules/Auth/LoginStore'
|
||||
import { toolsext } from '@src/store/Modules/toolsext'
|
||||
import { serv_constants } from '@src/store/Modules/serv_constants'
|
||||
@@ -7,6 +8,9 @@ import { useUserStore } from '@store/UserStore'
|
||||
import { tools } from '@src/store/Modules/tools'
|
||||
import * as Types from './ApiTypes'
|
||||
|
||||
import { from, Observable } from 'rxjs';
|
||||
import { mergeMap, toArray } from 'rxjs/operators';
|
||||
|
||||
export let API_URL = ''
|
||||
export const axiosInstance: AxiosInstance = axios.create({
|
||||
baseURL: API_URL,
|
||||
@@ -15,6 +19,7 @@ export const axiosInstance: AxiosInstance = axios.create({
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
axiosInstance.interceptors.response.use(
|
||||
|
||||
(response) => {
|
||||
@@ -26,7 +31,7 @@ axiosInstance.interceptors.response.use(
|
||||
// console.log('error', error)
|
||||
if (error.response) {
|
||||
if (process.env.DEBUGGING === '1') console.log('Status = ', error.response.status)
|
||||
console.log('Request Error: ', error.response)
|
||||
console.log('Request Error: ', error.response)
|
||||
if (error.response.status !== 0) {
|
||||
globalStore.setStateConnection('online')
|
||||
} else {
|
||||
@@ -47,7 +52,64 @@ export const addAuthHeaders = () => {
|
||||
// delete axiosInstance.defaults.headers.Authorization
|
||||
//}
|
||||
|
||||
async function Request(type: string, path: string, payload: any, responsedata?: any): Promise<Types.AxiosSuccess | Types.AxiosError | undefined> {
|
||||
async function generateStream(path: string, payload: any, config?: RequestInit, options?: any): Promise<AsyncIterable<any>> {
|
||||
const userStore = useUserStore()
|
||||
|
||||
const mieiparam: any = {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-auth': userStore.x_auth_token,
|
||||
'x-refrtok': userStore.refreshToken,
|
||||
},
|
||||
body: JSON.stringify(payload),
|
||||
signal: options?.signal,
|
||||
...config
|
||||
}
|
||||
|
||||
console.log('marams: ', mieiparam)
|
||||
|
||||
const response = await fetch(
|
||||
path,
|
||||
mieiparam,
|
||||
);
|
||||
console.log('USCITA DA FETCH... !!!!!')
|
||||
if (response.status !== 200) throw new Error(response.status.toString());
|
||||
return getIterableStream(response);
|
||||
}
|
||||
|
||||
function getIterableStream(stream: NodeJS.ReadableStream): AsyncIterable<any> {
|
||||
return {
|
||||
[Symbol.asyncIterator](): AsyncIterator<any> {
|
||||
let buffer = '';
|
||||
return {
|
||||
async next(): Promise<IteratorResult<any>> {
|
||||
while (true) {
|
||||
const chunk = await new Promise<string>((resolve, reject) => {
|
||||
stream.once('data', (data: Buffer) => resolve(data.toString()));
|
||||
stream.once('error', (err) => reject(err));
|
||||
stream.once('end', () => resolve(''));
|
||||
});
|
||||
buffer += chunk;
|
||||
if (buffer.includes('\n\n')) {
|
||||
const event = buffer.slice(0, buffer.indexOf('\n\n'));
|
||||
buffer = buffer.slice(buffer.indexOf('\n\n') + 2);
|
||||
try {
|
||||
return { value: JSON.parse(event.slice('data: '.length)), done: false };
|
||||
} catch (error) {
|
||||
console.error('Error parsing event data:', error);
|
||||
}
|
||||
} else if (chunk === '') {
|
||||
return { value: undefined, done: true };
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
async function Request(type: string, path: string, payload: any, responsedata?: any, options?: any): Promise<Types.AxiosSuccess | Types.AxiosError | undefined> {
|
||||
|
||||
let ricevuto = false
|
||||
const userStore = useUserStore()
|
||||
@@ -57,59 +119,108 @@ async function Request(type: string, path: string, payload: any, responsedata?:
|
||||
try {
|
||||
if (tools.isDebug()) console.log('Axios Request', path, type, tools.notshowPwd(payload))
|
||||
let response: AxiosResponse
|
||||
const config: AxiosRequestConfig = {
|
||||
baseURL: globalStore.getServerHost(),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-auth': userStore.x_auth_token,
|
||||
'x-refrtok': userStore.refreshToken,
|
||||
},
|
||||
...responsedata,
|
||||
}
|
||||
|
||||
if (options?.stream) {
|
||||
config.responseType = 'stream';
|
||||
}
|
||||
|
||||
if (type === 'post' || type === 'put' || type === 'patch') {
|
||||
response = await axiosInstance[type](path, payload, {
|
||||
baseURL: globalStore.getServerHost(),
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-auth': userStore.x_auth_token,
|
||||
'x-refrtok': userStore.refreshToken,
|
||||
},
|
||||
...responsedata,
|
||||
})
|
||||
ricevuto = true
|
||||
// console.log('Request Response: ', response)
|
||||
// console.log(new Types.AxiosSuccess(response.data, response.status))
|
||||
|
||||
const setAuthToken = (path === '/updatepwd') || (path === '/users/login')
|
||||
if (options?.stream) {
|
||||
console.log('GENERATESTREAM...')
|
||||
const stream = await generateStream(path, payload, config, options);
|
||||
console.log('USCITOOOOOOOOOOOOOOOOOOOOO ------------------------')
|
||||
|
||||
// console.log('--------- 0 ')
|
||||
return new Promise((resolve, reject) => {
|
||||
const events$: Observable<any> = from(stream);
|
||||
events$
|
||||
.pipe(
|
||||
mergeMap((event) => from([event])),
|
||||
toArray()
|
||||
)
|
||||
.subscribe(
|
||||
(data) => {
|
||||
console.log('Received data:', data);
|
||||
// Elabora i dati ricevuti
|
||||
resolve({ data, status: response.status, statusText: response.statusText, headers: response.headers, config: response.config });
|
||||
},
|
||||
(error) => {
|
||||
console.error('Stream error:', error);
|
||||
reject(error);
|
||||
},
|
||||
() => {
|
||||
console.log('Stream completed');
|
||||
}
|
||||
);
|
||||
|
||||
if (response && (response.status === 200)) {
|
||||
let x_auth_token = ''
|
||||
let refreshToken = ''
|
||||
try {
|
||||
if (setAuthToken || (path === '/users/login')) {
|
||||
x_auth_token = String(response.headers['x-auth'])
|
||||
refreshToken = String(response.headers['x-refrtok'])
|
||||
});
|
||||
/*
|
||||
console.log('Stream response received, processing...');
|
||||
return handleStreamResponse(response, (data) => {
|
||||
console.log('data...' + data.content)
|
||||
// Aggiorna lo stato dell'applicazione qui
|
||||
// Ad esempio:
|
||||
// outputVisible.value += data.content;
|
||||
});
|
||||
*/
|
||||
|
||||
if (x_auth_token === '') {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
}
|
||||
if (setAuthToken) {
|
||||
userStore.UpdatePwd(x_auth_token, refreshToken)
|
||||
} else {
|
||||
|
||||
response = await axiosInstance[type](path, payload, config)
|
||||
|
||||
ricevuto = true
|
||||
// console.log('Request Response: ', response)
|
||||
// console.log(new Types.AxiosSuccess(response.data, response.status))
|
||||
|
||||
const setAuthToken = (path === '/updatepwd') || (path === '/users/login')
|
||||
|
||||
// console.log('--------- 0 ')
|
||||
|
||||
if (response && (response.status === 200)) {
|
||||
let x_auth_token = ''
|
||||
let refreshToken = ''
|
||||
try {
|
||||
if (setAuthToken || (path === '/users/login')) {
|
||||
x_auth_token = String(response.headers['x-auth'])
|
||||
refreshToken = String(response.headers['x-refrtok'])
|
||||
|
||||
if (x_auth_token === '') {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
}
|
||||
if (setAuthToken) {
|
||||
userStore.UpdatePwd(x_auth_token, refreshToken)
|
||||
localStorage.setItem(toolsext.localStorage.token, x_auth_token)
|
||||
localStorage.setItem(toolsext.localStorage.refreshToken, refreshToken)
|
||||
}
|
||||
|
||||
userStore.setAuth(x_auth_token, refreshToken)
|
||||
localStorage.setItem(toolsext.localStorage.token, x_auth_token)
|
||||
localStorage.setItem(toolsext.localStorage.refreshToken, refreshToken)
|
||||
}
|
||||
|
||||
userStore.setAuth(x_auth_token, refreshToken)
|
||||
localStorage.setItem(toolsext.localStorage.token, x_auth_token)
|
||||
localStorage.setItem(toolsext.localStorage.refreshToken, refreshToken)
|
||||
globalStore.setStateConnection(ricevuto ? 'online' : 'offline')
|
||||
userStore.setServerCode(tools.OK)
|
||||
} catch (e) {
|
||||
if (setAuthToken) {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
userStore.setAuth('', '')
|
||||
}
|
||||
globalStore.setStateConnection(ricevuto ? 'online' : 'offline')
|
||||
return Promise.reject(new Types.AxiosError(serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN, null, toolsext.ERR_AUTHENTICATION))
|
||||
}
|
||||
|
||||
globalStore.setStateConnection(ricevuto ? 'online' : 'offline')
|
||||
userStore.setServerCode(tools.OK)
|
||||
} catch (e) {
|
||||
if (setAuthToken) {
|
||||
userStore.setServerCode(toolsext.ERR_AUTHENTICATION)
|
||||
userStore.setAuth('', '')
|
||||
}
|
||||
globalStore.setStateConnection(ricevuto ? 'online' : 'offline')
|
||||
return Promise.reject(new Types.AxiosError(serv_constants.RIS_CODE__HTTP_FORBIDDEN_INVALID_TOKEN, null, toolsext.ERR_AUTHENTICATION))
|
||||
}
|
||||
}
|
||||
|
||||
return new Types.AxiosSuccess(response.data, response.status)
|
||||
return new Types.AxiosSuccess(response.data, response.status)
|
||||
}
|
||||
} else if (type === 'get' || type === 'delete') {
|
||||
// @ts-ignore
|
||||
response = await axiosInstance[type](path, {
|
||||
@@ -172,4 +283,33 @@ async function Request(type: string, path: string, payload: any, responsedata?:
|
||||
}
|
||||
}
|
||||
|
||||
function handleStreamResponse(response: AxiosResponse, updateCallback: (data: any) => void): Promise<any> {
|
||||
return new Promise((resolve, reject) => {
|
||||
// ... codice precedente ...
|
||||
|
||||
reader.on('data', (chunk: Buffer) => {
|
||||
// ... codice precedente ...
|
||||
if (line.startsWith('data: ')) {
|
||||
const eventData = line.slice(6);
|
||||
try {
|
||||
const parsedData = JSON.parse(eventData);
|
||||
console.log('Received data:', parsedData);
|
||||
updateCallback(parsedData); // Chiamata alla callback per aggiornare lo stato
|
||||
} catch (error) {
|
||||
console.error('Error parsing event data:', error);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
reader.on('end', () => {
|
||||
console.log('Stream ended');
|
||||
resolve('Stream completed');
|
||||
});
|
||||
|
||||
reader.on('error', (error: Error) => {
|
||||
console.error('Stream error:', error);
|
||||
reject(error);
|
||||
});
|
||||
});
|
||||
}
|
||||
export default Request
|
||||
|
||||
Reference in New Issue
Block a user