@forgepack/request 1.0.4
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.
- package/LICENCE +21 -0
- package/README.md +164 -0
- package/dist/api/api.d.ts +8 -0
- package/dist/api/api.d.ts.map +1 -0
- package/dist/api/api.js +35 -0
- package/dist/api/client.d.ts +30 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +50 -0
- package/dist/component/auth.d.ts +8 -0
- package/dist/component/auth.d.ts.map +1 -0
- package/dist/component/auth.js +9 -0
- package/dist/component/errorMessage.d.ts +6 -0
- package/dist/component/errorMessage.d.ts.map +1 -0
- package/dist/component/errorMessage.js +7 -0
- package/dist/component/request.d.ts +13 -0
- package/dist/component/request.d.ts.map +1 -0
- package/dist/component/request.js +12 -0
- package/dist/component/response.d.ts +13 -0
- package/dist/component/response.d.ts.map +1 -0
- package/dist/component/response.js +13 -0
- package/dist/component/token.d.ts +32 -0
- package/dist/component/token.d.ts.map +1 -0
- package/dist/component/token.js +16 -0
- package/dist/hook/useProvider.d.ts +13 -0
- package/dist/hook/useProvider.d.ts.map +1 -0
- package/dist/hook/useProvider.js +51 -0
- package/dist/hook/useRequest.d.ts +11 -0
- package/dist/hook/useRequest.d.ts.map +1 -0
- package/dist/hook/useRequest.js +38 -0
- package/dist/hook/useRequireAuth.d.ts +4 -0
- package/dist/hook/useRequireAuth.d.ts.map +1 -0
- package/dist/hook/useRequireAuth.js +21 -0
- package/dist/hooks/AuthContext.d.ts +19 -0
- package/dist/hooks/AuthContext.d.ts.map +1 -0
- package/dist/hooks/AuthContext.js +10 -0
- package/dist/hooks/AuthProvider.d.ts +27 -0
- package/dist/hooks/AuthProvider.d.ts.map +1 -0
- package/dist/hooks/AuthProvider.js +71 -0
- package/dist/hooks/useAuth.d.ts +33 -0
- package/dist/hooks/useAuth.d.ts.map +1 -0
- package/dist/hooks/useAuth.js +50 -0
- package/dist/hooks/useRequest.d.ts +37 -0
- package/dist/hooks/useRequest.d.ts.map +1 -0
- package/dist/hooks/useRequest.js +63 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/service/crud.d.ts +15 -0
- package/dist/service/crud.d.ts.map +1 -0
- package/dist/service/crud.js +116 -0
- package/dist/service/fetchPage.d.ts +5 -0
- package/dist/service/fetchPage.d.ts.map +1 -0
- package/dist/service/fetchPage.js +22 -0
- package/dist/service/token.d.ts +10 -0
- package/dist/service/token.d.ts.map +1 -0
- package/dist/service/token.js +93 -0
- package/dist/services/api.d.ts +33 -0
- package/dist/services/api.d.ts.map +1 -0
- package/dist/services/api.js +50 -0
- package/dist/services/auth.d.ts +51 -0
- package/dist/services/auth.d.ts.map +1 -0
- package/dist/services/auth.js +117 -0
- package/dist/services/crud.d.ts +120 -0
- package/dist/services/crud.d.ts.map +1 -0
- package/dist/services/crud.js +199 -0
- package/dist/services/token.d.ts +88 -0
- package/dist/services/token.d.ts.map +1 -0
- package/dist/services/token.js +176 -0
- package/dist/types/auth.d.ts +64 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +2 -0
- package/dist/types/error.d.ts +11 -0
- package/dist/types/error.d.ts.map +1 -0
- package/dist/types/error.js +2 -0
- package/dist/types/request.d.ts +25 -0
- package/dist/types/request.d.ts.map +1 -0
- package/dist/types/request.js +2 -0
- package/dist/types/response.d.ts +44 -0
- package/dist/types/response.d.ts.map +1 -0
- package/dist/types/response.js +2 -0
- package/dist/types/token.d.ts +43 -0
- package/dist/types/token.d.ts.map +1 -0
- package/dist/types/token.js +2 -0
- package/dist/utils/constants.d.ts +41 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +73 -0
- package/package.json +57 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Auth } from '../types/auth';
|
|
2
|
+
import { Header, Payload } from '../types/token';
|
|
3
|
+
/**
|
|
4
|
+
* Verifica se o token JWT atual é válido e não expirado
|
|
5
|
+
*
|
|
6
|
+
* @returns true se o token for válido e não expirado, false caso contrário
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* if (isValidToken()) {
|
|
11
|
+
* // Usuário autenticado
|
|
12
|
+
* } else {
|
|
13
|
+
* // Redirecionar para login
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export declare const isValidToken: () => boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Recupera o token JWT armazenado no localStorage
|
|
20
|
+
*
|
|
21
|
+
* @returns Objeto Auth com dados do token ou estado inicial se inválido
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const token = getToken()
|
|
26
|
+
* console.log(token.accessToken)
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare const getToken: () => Auth;
|
|
30
|
+
/**
|
|
31
|
+
* Armazena o token JWT no localStorage
|
|
32
|
+
*
|
|
33
|
+
* @param token - Dados de autenticação a serem armazenados
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* setToken({
|
|
38
|
+
* accessToken: 'jwt-token',
|
|
39
|
+
* refreshToken: 'refresh-token',
|
|
40
|
+
* tokenType: 'Bearer',
|
|
41
|
+
* role: ['USER']
|
|
42
|
+
* })
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare const setToken: (token: any) => void;
|
|
46
|
+
/**
|
|
47
|
+
* Remove o token JWT do localStorage
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* removeToken() // Usuário será deslogado
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare const removeToken: () => void;
|
|
55
|
+
/**
|
|
56
|
+
* Decodifica e retorna o payload do token JWT
|
|
57
|
+
*
|
|
58
|
+
* @returns Objeto Payload com informações do token ou estado inicial se inválido
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* const payload = getPayload()
|
|
63
|
+
* console.log(payload.exp) // Data de expiração
|
|
64
|
+
* console.log(payload.sub) // Subject (ID do usuário)
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare const getPayload: () => Payload;
|
|
68
|
+
/**
|
|
69
|
+
* Decodifica o token JWT e retorna o payload como string
|
|
70
|
+
*
|
|
71
|
+
* @deprecated Use getPayload() para uma abordagem mais segura
|
|
72
|
+
* @returns String com payload decodificado ou null se inválido
|
|
73
|
+
*/
|
|
74
|
+
export declare const decodeJwt: () => string | null;
|
|
75
|
+
/**
|
|
76
|
+
* Decodifica e retorna o cabeçalho do token JWT
|
|
77
|
+
*
|
|
78
|
+
* @returns Objeto Header com informações do cabeçalho ou estado inicial se inválido
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* const header = getHeader()
|
|
83
|
+
* console.log(header.alg) // Algoritmo usado
|
|
84
|
+
* console.log(header.typ) // Tipo do token
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
export declare const getHeader: () => Header;
|
|
88
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/services/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAiBhD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,QAAO,OAY/B,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,QAAO,IAG3B,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,QAAQ,GAAI,OAAO,GAAG,KAAG,IAErC,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,YAEvB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,QAAO,OAoB7B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,SAAS,qBAUrB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,QAAO,MAoB5B,CAAA"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getHeader = exports.decodeJwt = exports.getPayload = exports.removeToken = exports.setToken = exports.getToken = exports.isValidToken = void 0;
|
|
4
|
+
const constants_1 = require("../utils/constants");
|
|
5
|
+
/**
|
|
6
|
+
* Verifica se uma string é um JSON válido
|
|
7
|
+
*
|
|
8
|
+
* @param json - String a ser verificada
|
|
9
|
+
* @returns true se for JSON válido, false caso contrário
|
|
10
|
+
*/
|
|
11
|
+
const isValidJSON = (json) => {
|
|
12
|
+
try {
|
|
13
|
+
JSON.parse(json);
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Verifica se o token JWT atual é válido e não expirado
|
|
22
|
+
*
|
|
23
|
+
* @returns true se o token for válido e não expirado, false caso contrário
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* if (isValidToken()) {
|
|
28
|
+
* // Usuário autenticado
|
|
29
|
+
* } else {
|
|
30
|
+
* // Redirecionar para login
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
const isValidToken = () => {
|
|
35
|
+
try {
|
|
36
|
+
const token = (0, exports.getToken)();
|
|
37
|
+
if (!(token === null || token === void 0 ? void 0 : token.accessToken))
|
|
38
|
+
return false;
|
|
39
|
+
const { exp } = (0, exports.getPayload)();
|
|
40
|
+
if (typeof exp !== 'number')
|
|
41
|
+
return false;
|
|
42
|
+
return exp * 1000 > Date.now();
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
exports.isValidToken = isValidToken;
|
|
49
|
+
/**
|
|
50
|
+
* Recupera o token JWT armazenado no localStorage
|
|
51
|
+
*
|
|
52
|
+
* @returns Objeto Auth com dados do token ou estado inicial se inválido
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```typescript
|
|
56
|
+
* const token = getToken()
|
|
57
|
+
* console.log(token.accessToken)
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
const getToken = () => {
|
|
61
|
+
let token = `${localStorage.getItem(`token`)}`;
|
|
62
|
+
return isValidJSON(token) ? JSON.parse(token) : constants_1.initialAuth;
|
|
63
|
+
};
|
|
64
|
+
exports.getToken = getToken;
|
|
65
|
+
/**
|
|
66
|
+
* Armazena o token JWT no localStorage
|
|
67
|
+
*
|
|
68
|
+
* @param token - Dados de autenticação a serem armazenados
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* setToken({
|
|
73
|
+
* accessToken: 'jwt-token',
|
|
74
|
+
* refreshToken: 'refresh-token',
|
|
75
|
+
* tokenType: 'Bearer',
|
|
76
|
+
* role: ['USER']
|
|
77
|
+
* })
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
const setToken = (token) => {
|
|
81
|
+
localStorage.setItem(`token`, JSON.stringify(token));
|
|
82
|
+
};
|
|
83
|
+
exports.setToken = setToken;
|
|
84
|
+
/**
|
|
85
|
+
* Remove o token JWT do localStorage
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* removeToken() // Usuário será deslogado
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
const removeToken = () => {
|
|
93
|
+
localStorage.removeItem('token');
|
|
94
|
+
};
|
|
95
|
+
exports.removeToken = removeToken;
|
|
96
|
+
/**
|
|
97
|
+
* Decodifica e retorna o payload do token JWT
|
|
98
|
+
*
|
|
99
|
+
* @returns Objeto Payload com informações do token ou estado inicial se inválido
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const payload = getPayload()
|
|
104
|
+
* console.log(payload.exp) // Data de expiração
|
|
105
|
+
* console.log(payload.sub) // Subject (ID do usuário)
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
const getPayload = () => {
|
|
109
|
+
try {
|
|
110
|
+
const token = (0, exports.getToken)();
|
|
111
|
+
if (!(token === null || token === void 0 ? void 0 : token.accessToken))
|
|
112
|
+
return constants_1.initialPayload;
|
|
113
|
+
const base64 = token.accessToken.split('.')[1]
|
|
114
|
+
.replace(/-/g, '+')
|
|
115
|
+
.replace(/_/g, '/');
|
|
116
|
+
const payload = decodeURIComponent(atob(base64)
|
|
117
|
+
.split('')
|
|
118
|
+
.map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
|
|
119
|
+
.join(''));
|
|
120
|
+
return isValidJSON(payload) ? JSON.parse(payload) : constants_1.initialPayload;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return constants_1.initialPayload;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
exports.getPayload = getPayload;
|
|
127
|
+
/**
|
|
128
|
+
* Decodifica o token JWT e retorna o payload como string
|
|
129
|
+
*
|
|
130
|
+
* @deprecated Use getPayload() para uma abordagem mais segura
|
|
131
|
+
* @returns String com payload decodificado ou null se inválido
|
|
132
|
+
*/
|
|
133
|
+
const decodeJwt = () => {
|
|
134
|
+
if ((0, exports.getToken)() !== null) {
|
|
135
|
+
var base64Url = (0, exports.getToken)().accessToken.split('.')[1];
|
|
136
|
+
var base64 = decodeURIComponent(atob(base64Url).split('').map((c) => {
|
|
137
|
+
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
|
138
|
+
}).join(''));
|
|
139
|
+
return base64;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
exports.decodeJwt = decodeJwt;
|
|
146
|
+
/**
|
|
147
|
+
* Decodifica e retorna o cabeçalho do token JWT
|
|
148
|
+
*
|
|
149
|
+
* @returns Objeto Header com informações do cabeçalho ou estado inicial se inválido
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```typescript
|
|
153
|
+
* const header = getHeader()
|
|
154
|
+
* console.log(header.alg) // Algoritmo usado
|
|
155
|
+
* console.log(header.typ) // Tipo do token
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
const getHeader = () => {
|
|
159
|
+
try {
|
|
160
|
+
const token = (0, exports.getToken)();
|
|
161
|
+
if (!(token === null || token === void 0 ? void 0 : token.accessToken))
|
|
162
|
+
return constants_1.initialHeader;
|
|
163
|
+
const base64 = token.accessToken.split('.')[0]
|
|
164
|
+
.replace(/-/g, '+')
|
|
165
|
+
.replace(/_/g, '/');
|
|
166
|
+
const header = decodeURIComponent(atob(base64)
|
|
167
|
+
.split('')
|
|
168
|
+
.map(c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2))
|
|
169
|
+
.join(''));
|
|
170
|
+
return isValidJSON(header) ? JSON.parse(header) : constants_1.initialHeader;
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return constants_1.initialHeader;
|
|
174
|
+
}
|
|
175
|
+
};
|
|
176
|
+
exports.getHeader = getHeader;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface que representa os dados de autenticação do usuário
|
|
3
|
+
* @interface Auth
|
|
4
|
+
*/
|
|
5
|
+
export interface Auth {
|
|
6
|
+
/** Token de acesso JWT para autenticação */
|
|
7
|
+
readonly accessToken: string;
|
|
8
|
+
/** Token para renovação da sessão */
|
|
9
|
+
refreshToken: string;
|
|
10
|
+
/** Tipo do token (geralmente "Bearer") */
|
|
11
|
+
tokenType: string;
|
|
12
|
+
/** Lista de roles/permissões do usuário */
|
|
13
|
+
role: string[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Interface para credenciais de login
|
|
17
|
+
* @interface LoginCredentials
|
|
18
|
+
*/
|
|
19
|
+
export interface LoginCredentials {
|
|
20
|
+
/** Nome de usuário ou email */
|
|
21
|
+
username: string;
|
|
22
|
+
/** Senha do usuário */
|
|
23
|
+
password: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Interface para resposta de login
|
|
27
|
+
* @interface LoginResponse
|
|
28
|
+
*/
|
|
29
|
+
export interface LoginResponse {
|
|
30
|
+
/** Indica se o login foi bem-sucedido */
|
|
31
|
+
success: boolean;
|
|
32
|
+
/** Dados de autenticação (se sucesso) */
|
|
33
|
+
data?: Auth;
|
|
34
|
+
/** Erros de validação (se falha) */
|
|
35
|
+
errors?: Array<{
|
|
36
|
+
field: string;
|
|
37
|
+
message: string;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Interface para alteração de senha
|
|
42
|
+
* @interface ChangePasswordData
|
|
43
|
+
*/
|
|
44
|
+
export interface ChangePasswordData {
|
|
45
|
+
/** Senha atual */
|
|
46
|
+
currentPassword: string;
|
|
47
|
+
/** Nova senha */
|
|
48
|
+
newPassword: string;
|
|
49
|
+
/** Confirmação da nova senha */
|
|
50
|
+
confirmPassword?: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Interface genérica para reset de senha
|
|
54
|
+
* @interface ResetPasswordData
|
|
55
|
+
*/
|
|
56
|
+
export interface ResetPasswordData {
|
|
57
|
+
/** Email para reset */
|
|
58
|
+
email?: string;
|
|
59
|
+
/** Token de reset */
|
|
60
|
+
token?: string;
|
|
61
|
+
/** Nova senha */
|
|
62
|
+
newPassword?: string;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,IAAI;IACjB,4CAA4C;IAC5C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACxC,YAAY,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC7C,SAAS,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC9C,IAAI,EAAE,MAAM,EAAE,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC7B,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC1B,yCAAyC;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,yCAAyC;IACzC,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,oCAAoC;IACpC,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,kBAAkB;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface que representa uma mensagem de erro de validação
|
|
3
|
+
* @interface ErrorMessage
|
|
4
|
+
*/
|
|
5
|
+
export interface ErrorMessage {
|
|
6
|
+
/** Nome do campo que contém o erro */
|
|
7
|
+
field: string;
|
|
8
|
+
/** Mensagem descritiva do erro */
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/types/error.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAA;CAClB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface que define os parâmetros de ordenação
|
|
3
|
+
* @interface Sort
|
|
4
|
+
*/
|
|
5
|
+
export interface Sort {
|
|
6
|
+
/** Campo pelo qual ordenar */
|
|
7
|
+
key: string;
|
|
8
|
+
/** Direção da ordenação */
|
|
9
|
+
order: 'ASC' | 'DESC';
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Interface que define os parâmetros de busca e paginação
|
|
13
|
+
* @interface Search
|
|
14
|
+
*/
|
|
15
|
+
export interface Search {
|
|
16
|
+
/** Termo de busca/filtro */
|
|
17
|
+
value?: string;
|
|
18
|
+
/** Número da página (baseado em zero) */
|
|
19
|
+
page?: number;
|
|
20
|
+
/** Quantidade de itens por página */
|
|
21
|
+
size?: number;
|
|
22
|
+
/** Configuração de ordenação */
|
|
23
|
+
sort?: Sort;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/types/request.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,IAAI;IACjB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,KAAK,EAAE,KAAK,GAAG,MAAM,CAAA;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACnB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,IAAI,CAAC,EAAE,IAAI,CAAA;CACd"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface que representa as informações de paginação
|
|
3
|
+
* @interface PageInfo
|
|
4
|
+
*/
|
|
5
|
+
export interface PageInfo {
|
|
6
|
+
/** Tamanho da página atual */
|
|
7
|
+
size: number;
|
|
8
|
+
/** Número da página atual */
|
|
9
|
+
number: number;
|
|
10
|
+
/** Total de elementos em todas as páginas */
|
|
11
|
+
totalElements: number;
|
|
12
|
+
/** Total de páginas disponíveis */
|
|
13
|
+
totalPages: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Interface genérica que representa uma resposta paginada da API
|
|
17
|
+
* @template T Tipo dos elementos contidos na página
|
|
18
|
+
* @interface Page
|
|
19
|
+
*/
|
|
20
|
+
export interface Page<T = unknown> {
|
|
21
|
+
/** Array com os elementos da página atual */
|
|
22
|
+
content: T[];
|
|
23
|
+
/** Informações de paginação */
|
|
24
|
+
page: PageInfo;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Interface para respostas de API genéricas
|
|
28
|
+
* @template T Tipo dos dados retornados
|
|
29
|
+
* @interface ApiResponse
|
|
30
|
+
*/
|
|
31
|
+
export interface ApiResponse<T = unknown> {
|
|
32
|
+
/** Indica se a operação foi bem-sucedida */
|
|
33
|
+
success: boolean;
|
|
34
|
+
/** Dados retornados (se sucesso) */
|
|
35
|
+
data?: T;
|
|
36
|
+
/** Mensagem de resposta */
|
|
37
|
+
message?: string;
|
|
38
|
+
/** Erros de validação (se falha) */
|
|
39
|
+
errors?: Array<{
|
|
40
|
+
field: string;
|
|
41
|
+
message: string;
|
|
42
|
+
}>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/types/response.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACrB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAChC,MAAM,EAAE,MAAM,CAAC;IACZ,6CAA6C;IAChD,aAAa,EAAE,MAAM,CAAC;IACnB,mCAAmC;IACtC,UAAU,EAAE,MAAM,CAAA;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,IAAI,CAAC,CAAC,GAAG,OAAO;IAC7B,6CAA6C;IAChD,OAAO,EAAE,CAAC,EAAE,CAAC;IACV,+BAA+B;IAClC,IAAI,EAAE,QAAQ,CAAA;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACpC,4CAA4C;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,oCAAoC;IACpC,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACrD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interface que representa a estrutura completa de um token JWT
|
|
3
|
+
* @interface Token
|
|
4
|
+
*/
|
|
5
|
+
export interface Token {
|
|
6
|
+
/** Cabeçalho do token contendo algoritmo e tipo */
|
|
7
|
+
header: Header;
|
|
8
|
+
/** Payload do token contendo as claims */
|
|
9
|
+
payload: Payload;
|
|
10
|
+
/** Assinatura do token */
|
|
11
|
+
signature: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Interface que representa o cabeçalho de um token JWT
|
|
15
|
+
* @interface Header
|
|
16
|
+
*/
|
|
17
|
+
export interface Header {
|
|
18
|
+
/** Algoritmo usado para assinar o token */
|
|
19
|
+
alg: string;
|
|
20
|
+
/** Tipo do token */
|
|
21
|
+
typ: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Interface que representa o payload de um token JWT
|
|
25
|
+
* @interface Payload
|
|
26
|
+
*/
|
|
27
|
+
export interface Payload {
|
|
28
|
+
/** Identificador único do token JSON */
|
|
29
|
+
jti: string;
|
|
30
|
+
/** Emissor do token */
|
|
31
|
+
iss: string;
|
|
32
|
+
/** Data/hora de emissão do token (timestamp Unix) */
|
|
33
|
+
iat: number;
|
|
34
|
+
/** Token não é válido antes desta data/hora (timestamp Unix) */
|
|
35
|
+
nbf: number;
|
|
36
|
+
/** Data/hora de expiração do token (timestamp Unix) */
|
|
37
|
+
exp: number;
|
|
38
|
+
/** Assunto do token (geralmente ID do usuário) */
|
|
39
|
+
sub: string;
|
|
40
|
+
/** Audiência destinatária do token */
|
|
41
|
+
aud: string;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=token.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/types/token.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,KAAK;IAClB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACnB,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB;IACpB,GAAG,EAAE,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACpB,wCAAwC;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAA;CACd"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { Auth } from '../types/auth';
|
|
2
|
+
import { ErrorMessage } from '../types/error';
|
|
3
|
+
import { Search } from '../types/request';
|
|
4
|
+
import { Page, PageInfo } from '../types/response';
|
|
5
|
+
import { Header, Payload } from '../types/token';
|
|
6
|
+
/**
|
|
7
|
+
* Estado inicial vazio para dados de autenticação
|
|
8
|
+
* @constant
|
|
9
|
+
*/
|
|
10
|
+
export declare const initialAuth: Auth;
|
|
11
|
+
/**
|
|
12
|
+
* Estado inicial vazio para mensagens de erro
|
|
13
|
+
* @constant
|
|
14
|
+
*/
|
|
15
|
+
export declare const initialErrorMessage: ErrorMessage;
|
|
16
|
+
/**
|
|
17
|
+
* Configuração padrão para buscas e paginação
|
|
18
|
+
* @constant
|
|
19
|
+
*/
|
|
20
|
+
export declare const initialSearch: Search;
|
|
21
|
+
/**
|
|
22
|
+
* Estado inicial vazio para informações de paginação
|
|
23
|
+
* @constant
|
|
24
|
+
*/
|
|
25
|
+
export declare const initialPageInfo: PageInfo;
|
|
26
|
+
/**
|
|
27
|
+
* Estado inicial vazio para respostas paginadas
|
|
28
|
+
* @constant
|
|
29
|
+
*/
|
|
30
|
+
export declare const initialPage: Page;
|
|
31
|
+
/**
|
|
32
|
+
* Estado inicial vazio para cabeçalho de token
|
|
33
|
+
* @constant
|
|
34
|
+
*/
|
|
35
|
+
export declare const initialHeader: Header;
|
|
36
|
+
/**
|
|
37
|
+
* Estado inicial vazio para payload de token
|
|
38
|
+
* @constant
|
|
39
|
+
*/
|
|
40
|
+
export declare const initialPayload: Payload;
|
|
41
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAEhD;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,IAKzB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,YAGjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAQ3B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,QAK7B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,IAGzB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAG3B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,OAQ5B,CAAA"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initialPayload = exports.initialHeader = exports.initialPage = exports.initialPageInfo = exports.initialSearch = exports.initialErrorMessage = exports.initialAuth = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Estado inicial vazio para dados de autenticação
|
|
6
|
+
* @constant
|
|
7
|
+
*/
|
|
8
|
+
exports.initialAuth = {
|
|
9
|
+
accessToken: '',
|
|
10
|
+
refreshToken: '',
|
|
11
|
+
tokenType: '',
|
|
12
|
+
role: []
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Estado inicial vazio para mensagens de erro
|
|
16
|
+
* @constant
|
|
17
|
+
*/
|
|
18
|
+
exports.initialErrorMessage = {
|
|
19
|
+
field: '',
|
|
20
|
+
message: ''
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Configuração padrão para buscas e paginação
|
|
24
|
+
* @constant
|
|
25
|
+
*/
|
|
26
|
+
exports.initialSearch = {
|
|
27
|
+
value: '',
|
|
28
|
+
page: 0,
|
|
29
|
+
size: 15,
|
|
30
|
+
sort: {
|
|
31
|
+
key: 'id',
|
|
32
|
+
order: 'ASC',
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Estado inicial vazio para informações de paginação
|
|
37
|
+
* @constant
|
|
38
|
+
*/
|
|
39
|
+
exports.initialPageInfo = {
|
|
40
|
+
size: 0,
|
|
41
|
+
number: 0,
|
|
42
|
+
totalElements: 0,
|
|
43
|
+
totalPages: 0
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Estado inicial vazio para respostas paginadas
|
|
47
|
+
* @constant
|
|
48
|
+
*/
|
|
49
|
+
exports.initialPage = {
|
|
50
|
+
content: [],
|
|
51
|
+
page: exports.initialPageInfo
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Estado inicial vazio para cabeçalho de token
|
|
55
|
+
* @constant
|
|
56
|
+
*/
|
|
57
|
+
exports.initialHeader = {
|
|
58
|
+
alg: '',
|
|
59
|
+
typ: ''
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* Estado inicial vazio para payload de token
|
|
63
|
+
* @constant
|
|
64
|
+
*/
|
|
65
|
+
exports.initialPayload = {
|
|
66
|
+
jti: '',
|
|
67
|
+
iss: '',
|
|
68
|
+
iat: 0,
|
|
69
|
+
nbf: 0,
|
|
70
|
+
exp: 0,
|
|
71
|
+
sub: '',
|
|
72
|
+
aud: ''
|
|
73
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@forgepack/request",
|
|
3
|
+
"version": "1.0.4",
|
|
4
|
+
"description": "",
|
|
5
|
+
"homepage": "https://github.com/forgepack/request#readme",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/forgepack/request/issues"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/forgepack/request.git"
|
|
12
|
+
},
|
|
13
|
+
"license": "MIT License",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"react",
|
|
16
|
+
"frontend",
|
|
17
|
+
"admin",
|
|
18
|
+
"admin-dashboard",
|
|
19
|
+
"internal-tools",
|
|
20
|
+
"crud",
|
|
21
|
+
"authenticated-crud",
|
|
22
|
+
"datatable",
|
|
23
|
+
"data-table",
|
|
24
|
+
"modal",
|
|
25
|
+
"sidebar",
|
|
26
|
+
"layout",
|
|
27
|
+
"api-client",
|
|
28
|
+
"authentication",
|
|
29
|
+
"authorization",
|
|
30
|
+
"boilerplate",
|
|
31
|
+
"application-kit",
|
|
32
|
+
"react-admin",
|
|
33
|
+
"react-crud"
|
|
34
|
+
],
|
|
35
|
+
"author": "Marcelo Gadelha",
|
|
36
|
+
"type": "commonjs",
|
|
37
|
+
"main": "dist/index.js",
|
|
38
|
+
"types": "dist/index.d.ts",
|
|
39
|
+
"files": [
|
|
40
|
+
"dist"
|
|
41
|
+
],
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsc",
|
|
44
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"react": "^19.2.3",
|
|
48
|
+
"react-router-dom": "^7.12.0"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/react": "^19.2.9",
|
|
52
|
+
"typescript": "^5.9.3"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"axios": "^1.13.2"
|
|
56
|
+
}
|
|
57
|
+
}
|