Initial LinkedSign platform
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
import client from './client';
|
||||
|
||||
export const register = (data) => client.post('/auth/register', data);
|
||||
export const login = (data) => client.post('/auth/login', data);
|
||||
export const logout = (refreshToken) => client.post('/auth/logout', { refreshToken });
|
||||
export const getMe = () => client.get('/auth/me');
|
||||
export const verifyEmail = (token) => client.get(`/auth/verify/${token}`);
|
||||
export const changePassword = (data) => client.patch('/auth/change-password', data);
|
||||
export const confirmPasswordChange = (token) => client.get(`/auth/confirm-password-change/${token}`);
|
||||
@@ -0,0 +1,12 @@
|
||||
import client from './client';
|
||||
|
||||
export const uploadCertificate = (file, password, alias) => {
|
||||
const form = new FormData();
|
||||
form.append('file', file);
|
||||
if (password) form.append('password', password);
|
||||
if (alias) form.append('alias', alias);
|
||||
return client.post('/certificates', form, { headers: { 'Content-Type': 'multipart/form-data' } });
|
||||
};
|
||||
|
||||
export const listCertificates = () => client.get('/certificates');
|
||||
export const deleteCertificate = (id) => client.delete(`/certificates/${id}`);
|
||||
@@ -0,0 +1,42 @@
|
||||
import axios from 'axios';
|
||||
|
||||
const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:4000';
|
||||
|
||||
const client = axios.create({
|
||||
baseURL: API_URL,
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
});
|
||||
|
||||
client.interceptors.request.use((config) => {
|
||||
const token = localStorage.getItem('accessToken');
|
||||
if (token) config.headers.Authorization = `Bearer ${token}`;
|
||||
return config;
|
||||
});
|
||||
|
||||
client.interceptors.response.use(
|
||||
(res) => res,
|
||||
async (error) => {
|
||||
const original = error.config;
|
||||
if (error.response?.status === 401 && !original._retry) {
|
||||
original._retry = true;
|
||||
const refreshToken = localStorage.getItem('refreshToken');
|
||||
if (refreshToken) {
|
||||
try {
|
||||
const { data } = await axios.post(`${API_URL}/auth/refresh`, { refreshToken });
|
||||
const { accessToken, refreshToken: newRefresh } = data.data;
|
||||
localStorage.setItem('accessToken', accessToken);
|
||||
localStorage.setItem('refreshToken', newRefresh);
|
||||
original.headers.Authorization = `Bearer ${accessToken}`;
|
||||
return client(original);
|
||||
} catch {
|
||||
localStorage.removeItem('accessToken');
|
||||
localStorage.removeItem('refreshToken');
|
||||
window.location.href = '/login';
|
||||
}
|
||||
}
|
||||
}
|
||||
return Promise.reject(error);
|
||||
}
|
||||
);
|
||||
|
||||
export default client;
|
||||
@@ -0,0 +1,12 @@
|
||||
import client from './client';
|
||||
|
||||
export const uploadDocument = (file) => {
|
||||
const form = new FormData();
|
||||
form.append('file', file);
|
||||
return client.post('/documents', form, { headers: { 'Content-Type': 'multipart/form-data' } });
|
||||
};
|
||||
|
||||
export const listDocuments = (params) => client.get('/documents', { params });
|
||||
export const getDocument = (id) => client.get(`/documents/${id}`);
|
||||
export const deleteDocument = (id) => client.delete(`/documents/${id}`);
|
||||
export const downloadDocument = (id) => client.get(`/documents/${id}/download`, { responseType: 'blob' });
|
||||
@@ -0,0 +1,5 @@
|
||||
import axios from 'axios';
|
||||
|
||||
const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:4000';
|
||||
|
||||
export const verifySignature = (code) => axios.get(`${API_URL}/signatures/verify/${code}`);
|
||||
@@ -0,0 +1,6 @@
|
||||
import client from './client';
|
||||
|
||||
export const signDocument = (data) => client.post('/signatures/sign', data);
|
||||
export const listSignedDocuments = () => client.get('/signatures/mine');
|
||||
export const getSignatures = (documentId) => client.get(`/signatures/document/${documentId}`);
|
||||
export const downloadSigned = (sigId) => client.get(`/signatures/${sigId}/download`, { responseType: 'blob' });
|
||||
@@ -0,0 +1,4 @@
|
||||
import client from './client';
|
||||
|
||||
export const updateSignatureAppearancePreference = (signaturePreferences) =>
|
||||
client.patch('/users/me/preferences/signature-appearance', signaturePreferences);
|
||||
Reference in New Issue
Block a user