@in.pulse-crm/sdk 1.0.7 → 1.2.0
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/dist/auth.d.ts +75 -0
- package/dist/auth.js +97 -0
- package/dist/file.d.ts +97 -0
- package/dist/file.js +64 -0
- package/dist/index.d.ts +6 -4
- package/dist/index.js +44 -7
- package/dist/instance.d.ts +21 -0
- package/dist/instance.js +37 -0
- package/dist/response.d.ts +22 -0
- package/dist/response.js +2 -0
- package/dist/user.d.ts +192 -0
- package/dist/user.js +85 -0
- package/package.json +11 -4
- package/src/auth.ts +139 -0
- package/src/file.ts +137 -0
- package/src/index.ts +23 -4
- package/src/instance.ts +44 -0
- package/src/reports.ts +59 -0
- package/src/response.ts +26 -0
- package/src/user.ts +246 -0
- package/src/auth.sdk.ts +0 -80
- package/src/instance.sdk.ts +0 -38
- package/src/user.sdk.ts +0 -68
package/dist/user.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserRole = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Enum que representa os diferentes papéis de usuário dentro do sistema.
|
|
6
|
+
*
|
|
7
|
+
* @enum {string}
|
|
8
|
+
* @property {string} ADMIN - Representa um papel de administrador.
|
|
9
|
+
* @property {string} ACTIVE - Representa um papel de usuário ativo.
|
|
10
|
+
* @property {string} RECEPTIONIST - Representa um papel de recepcionista.
|
|
11
|
+
* @property {string} BOTH - Representa um papel que combina tanto recepcionista quanto usuário ativo.
|
|
12
|
+
*/
|
|
13
|
+
var UserRole;
|
|
14
|
+
(function (UserRole) {
|
|
15
|
+
UserRole["ADMIN"] = "ADMIN";
|
|
16
|
+
UserRole["ACTIVE"] = "ATIVO";
|
|
17
|
+
UserRole["RECEPTIONIST"] = "RECEP";
|
|
18
|
+
UserRole["BOTH"] = "AMBOS";
|
|
19
|
+
})(UserRole || (exports.UserRole = UserRole = {}));
|
|
20
|
+
/**
|
|
21
|
+
* SDK para operações de usuários.
|
|
22
|
+
*/
|
|
23
|
+
class UserSDK {
|
|
24
|
+
httpClient;
|
|
25
|
+
/**
|
|
26
|
+
* Cria uma instância do SDK de usuários.
|
|
27
|
+
* @param httpClient - A instância do cliente HTTP a ser usada para fazer requisições à API.
|
|
28
|
+
*/
|
|
29
|
+
constructor(httpClient) {
|
|
30
|
+
this.httpClient = httpClient;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Obtém a lista de usuários.
|
|
34
|
+
* @param instance - O nome da instância.
|
|
35
|
+
* @returns Uma resposta paginada contendo os usuários.
|
|
36
|
+
*/
|
|
37
|
+
async getUsers(instance) {
|
|
38
|
+
const response = await this.httpClient.get(`/${instance}/users`);
|
|
39
|
+
return response.data;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Obtém um usuário pelo ID.
|
|
43
|
+
* @param instance - O nome da instância.
|
|
44
|
+
* @param userId - O ID do usuário.
|
|
45
|
+
* @returns Uma resposta contendo os dados do usuário.
|
|
46
|
+
*/
|
|
47
|
+
async getUserById(instance, userId) {
|
|
48
|
+
const response = await this.httpClient.get(`/${instance}/users/${userId}`);
|
|
49
|
+
return response.data;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Cria um novo usuário.
|
|
53
|
+
* @param instance - O nome da instância.
|
|
54
|
+
* @param data - Os dados para criação do usuário.
|
|
55
|
+
* @returns Uma resposta contendo os dados do usuário criado.
|
|
56
|
+
* @throws Um erro se a criação do usuário falhar.
|
|
57
|
+
*/
|
|
58
|
+
async createUser(instance, data) {
|
|
59
|
+
try {
|
|
60
|
+
const response = await this.httpClient.post(`/${instance}/users`, data);
|
|
61
|
+
return response.data;
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
throw new Error("Failed to create user", { cause: error });
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Atualiza um usuário existente.
|
|
69
|
+
* @param instance - O nome da instância.
|
|
70
|
+
* @param userId - O ID do usuário.
|
|
71
|
+
* @param data - Os dados para atualização do usuário.
|
|
72
|
+
* @returns Uma resposta contendo os dados do usuário atualizado.
|
|
73
|
+
* @throws Um erro se a atualização do usuário falhar.
|
|
74
|
+
*/
|
|
75
|
+
async updateUser(instance, userId, data) {
|
|
76
|
+
try {
|
|
77
|
+
const response = await this.httpClient.patch(`/${instance}/users/${userId}`, data);
|
|
78
|
+
return response.data;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
throw new Error("Failed to update user", { cause: error });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.default = UserSDK;
|
package/package.json
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@in.pulse-crm/sdk",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "SDKs for abstraction of api consumption of in.pulse-crm application",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"require": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
6
14
|
"scripts": {
|
|
7
15
|
"build": "tsc",
|
|
8
16
|
"prettier": "prettier --write .",
|
|
@@ -16,11 +24,10 @@
|
|
|
16
24
|
"license": "ISC",
|
|
17
25
|
"dependencies": {
|
|
18
26
|
"@in.pulse-crm/utils": "^1.0.0",
|
|
19
|
-
"axios": "^1.8.
|
|
27
|
+
"axios": "^1.8.3"
|
|
20
28
|
},
|
|
21
29
|
"devDependencies": {
|
|
22
|
-
"@
|
|
23
|
-
"@types/node": "^22.13.8",
|
|
30
|
+
"@types/node": "^22.13.10",
|
|
24
31
|
"prettier": "^3.5.3",
|
|
25
32
|
"typescript": "^5.8.2"
|
|
26
33
|
}
|
package/src/auth.ts
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { User } from "./user";
|
|
3
|
+
import { sanitizeErrorMessage } from "@in.pulse-crm/utils";
|
|
4
|
+
import { DataResponse } from "./response";
|
|
5
|
+
|
|
6
|
+
export interface LoginData {
|
|
7
|
+
/**
|
|
8
|
+
* Token de autenticação.
|
|
9
|
+
*/
|
|
10
|
+
token: string;
|
|
11
|
+
/**
|
|
12
|
+
* Dados do usuário.
|
|
13
|
+
*/
|
|
14
|
+
user: User;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface SessionData {
|
|
18
|
+
/**
|
|
19
|
+
* ID do usuário.
|
|
20
|
+
*/
|
|
21
|
+
userId: number;
|
|
22
|
+
/**
|
|
23
|
+
* Papel do usuário.
|
|
24
|
+
*/
|
|
25
|
+
role: string;
|
|
26
|
+
/**
|
|
27
|
+
* Nome da instância.
|
|
28
|
+
*/
|
|
29
|
+
instance: string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Classe AuthSDK para interagir com a API de autenticação.
|
|
34
|
+
*/
|
|
35
|
+
export default class AuthSDK {
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Cria uma instância do SDK de autenticação.
|
|
39
|
+
* @param {AxiosInstance} httpClient A instância do cliente HTTP a ser usada para fazer requisições à API.
|
|
40
|
+
*/
|
|
41
|
+
constructor(private readonly httpClient: AxiosInstance) {
|
|
42
|
+
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Realiza o login do usuário.
|
|
47
|
+
* @param {string} instanceName Nome da instância do Inpulse.
|
|
48
|
+
* @param {string} username Nome de usuário.
|
|
49
|
+
* @param {string} password Senha do usuário.
|
|
50
|
+
* @returns {Promise<DataResponse<LoginData>>} Dados de login.
|
|
51
|
+
*/
|
|
52
|
+
public async login(instanceName: string, username: string, password: string): Promise<DataResponse<LoginData>> {
|
|
53
|
+
const response = await this.httpClient.post<DataResponse<LoginData>>(
|
|
54
|
+
`${instanceName}/login`,
|
|
55
|
+
{ LOGIN: username, SENHA: password },
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
return response.data;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Busca os dados da sessão.
|
|
63
|
+
* @param {string} instanceName Nome da instância do Inpulse.
|
|
64
|
+
* @param {string} authToken Token de autenticação.
|
|
65
|
+
* @returns {Promise<DataResponse<AuthTypes.SessionData>>} Dados da sessão.
|
|
66
|
+
*/
|
|
67
|
+
public async fetchSessionData(instanceName: string, authToken: string): Promise<DataResponse<SessionData>> {
|
|
68
|
+
const response = await this.httpClient
|
|
69
|
+
.get<DataResponse<SessionData>>(`/${instanceName}/auth`, {
|
|
70
|
+
headers: {
|
|
71
|
+
authorization: authToken,
|
|
72
|
+
},
|
|
73
|
+
})
|
|
74
|
+
.catch((error) => {
|
|
75
|
+
const message = sanitizeErrorMessage(error);
|
|
76
|
+
throw new Error("Failed to fetch session data! " + message);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
return response.data;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Busca os dados do usuário da sessão.
|
|
84
|
+
* @param {string} instanceName Nome da instância do Inpulse.
|
|
85
|
+
* @param {string} authToken Token de autenticação.
|
|
86
|
+
* @returns {Promise<DataResponse<AuthTypes.User>>} Dados do usuário.
|
|
87
|
+
*/
|
|
88
|
+
public async fetchSessionUser(instanceName: string, authToken: string): Promise<DataResponse<User>> {
|
|
89
|
+
const response = await this.httpClient
|
|
90
|
+
.get<DataResponse<User>>(`/${instanceName}/auth/user`, {
|
|
91
|
+
headers: {
|
|
92
|
+
authorization: authToken,
|
|
93
|
+
},
|
|
94
|
+
})
|
|
95
|
+
.catch((error) => {
|
|
96
|
+
const message = sanitizeErrorMessage(error);
|
|
97
|
+
throw new Error("Failed to fetch session user! " + message);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
return response.data;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Verifica se o usuário está autenticado.
|
|
105
|
+
* @param {string} instanceName Nome da instância do Inpulse.
|
|
106
|
+
* @param {string} authToken Token de autenticação.
|
|
107
|
+
* @returns {Promise<boolean>} Verdadeiro se o usuário estiver autenticado, falso caso contrário.
|
|
108
|
+
*/
|
|
109
|
+
public async isAuthenticated(instanceName: string, authToken: string): Promise<boolean> {
|
|
110
|
+
try {
|
|
111
|
+
const { data } = await this.fetchSessionData(instanceName, authToken);
|
|
112
|
+
|
|
113
|
+
return !!data.userId;
|
|
114
|
+
} catch {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Verifica se o usuário está autorizado.
|
|
121
|
+
* @param {string} instanceName Nome da instância do Inpulse.
|
|
122
|
+
* @param {string} authToken Token de autenticação.
|
|
123
|
+
* @param {string[]} authorizedRoles Lista de papéis autorizados.
|
|
124
|
+
* @returns {Promise<boolean>} Verdadeiro se o usuário estiver autorizado, falso caso contrário.
|
|
125
|
+
*/
|
|
126
|
+
public async isAuthorized(
|
|
127
|
+
instanceName: string,
|
|
128
|
+
authToken: string,
|
|
129
|
+
authorizedRoles: string[],
|
|
130
|
+
): Promise<boolean> {
|
|
131
|
+
try {
|
|
132
|
+
const { data } = await this.fetchSessionData(instanceName, authToken);
|
|
133
|
+
|
|
134
|
+
return authorizedRoles.includes(data.role);
|
|
135
|
+
} catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
package/src/file.ts
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { DataResponse } from "./response";
|
|
3
|
+
|
|
4
|
+
interface UploadFileOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Nome da instância onde o arquivo está armazenado.
|
|
7
|
+
*/
|
|
8
|
+
instance: string;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Tipo de diretório onde o arquivo está armazenado.
|
|
12
|
+
*/
|
|
13
|
+
dirType: FileDirType;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Nome do arquivo.
|
|
17
|
+
*/
|
|
18
|
+
fileName: string;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Buffer com o conteúdo do arquivo.
|
|
22
|
+
*/
|
|
23
|
+
buffer: Buffer;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Enum que representa os tipos de diretórios de arquivos.
|
|
28
|
+
*
|
|
29
|
+
* @enum {string}
|
|
30
|
+
* @property {string} PUBLIC - Representa o diretório público.
|
|
31
|
+
* @property {string} MODELS - Representa o diretório de modelos.
|
|
32
|
+
*/
|
|
33
|
+
export enum FileDirType {
|
|
34
|
+
PUBLIC = "public",
|
|
35
|
+
MODELS = "models",
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Representa um arquivo no sistema.
|
|
41
|
+
*/
|
|
42
|
+
export interface File {
|
|
43
|
+
/**
|
|
44
|
+
* Identificador único para o arquivo.
|
|
45
|
+
*/
|
|
46
|
+
id: number;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Identificador único para o arquivo no armazenamento.
|
|
50
|
+
*/
|
|
51
|
+
id_storage: string;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Identificador único para o armazenamento.
|
|
55
|
+
*/
|
|
56
|
+
storage_id: number;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Nome do arquivo.
|
|
60
|
+
*/
|
|
61
|
+
name: string;
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Tipo MIME do arquivo.
|
|
65
|
+
*/
|
|
66
|
+
mime_type: string;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Tamanho do arquivo em bytes.
|
|
70
|
+
*/
|
|
71
|
+
size: number;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Tipo de diretório onde o arquivo está armazenado.
|
|
75
|
+
*/
|
|
76
|
+
dir_type: FileDirType;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Data e hora em que o arquivo foi criado.
|
|
80
|
+
*/
|
|
81
|
+
created_at: Date;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* SDK para operações de arquivos.
|
|
87
|
+
*/
|
|
88
|
+
class FileSDK {
|
|
89
|
+
/**
|
|
90
|
+
* Cria uma instância do SDK de arquivos.
|
|
91
|
+
* @param httpClient A instância do cliente HTTP a ser usada para fazer requisições à API.
|
|
92
|
+
*/
|
|
93
|
+
constructor(private readonly httpClient: AxiosInstance) { }
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Busca um arquivo pelo ID.
|
|
97
|
+
* @param {number} id - ID do arquivo.
|
|
98
|
+
* @returns {Promise<Buffer>} Um buffer contendo os dados do arquivo.
|
|
99
|
+
*/
|
|
100
|
+
public async fetchFile(id: number): Promise<Buffer> {
|
|
101
|
+
const response = await this.httpClient.get(`/files/${id}`, {
|
|
102
|
+
responseType: "arraybuffer"
|
|
103
|
+
});
|
|
104
|
+
const buffer = Buffer.from(response.data, "binary");
|
|
105
|
+
|
|
106
|
+
return buffer;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Faz o upload de um arquivo.
|
|
111
|
+
* @param {UploadFileOptions} props - Opções para o upload do arquivo.
|
|
112
|
+
* @returns {Promise<File>} Os dados do arquivo enviado.
|
|
113
|
+
*/
|
|
114
|
+
public async uploadFile(props: UploadFileOptions): Promise<File> {
|
|
115
|
+
const form = new FormData();
|
|
116
|
+
form.append("instance", props.instance);
|
|
117
|
+
form.append("dirType", props.dirType);
|
|
118
|
+
form.append("file", new Blob([props.buffer]), props.fileName);
|
|
119
|
+
|
|
120
|
+
const response = await this.httpClient.post<DataResponse<File>>("/files", form, {
|
|
121
|
+
headers: { "Content-Type": "multipart/form-data" }
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
return response.data.data;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Deleta um arquivo pelo ID.
|
|
129
|
+
* @param {number} id - ID do arquivo.
|
|
130
|
+
* @returns {Promise<void>}
|
|
131
|
+
*/
|
|
132
|
+
public async deleteFile(id: number): Promise<void> {
|
|
133
|
+
await this.httpClient.delete(`/files/${id}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
export default FileSDK;
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
|
-
import AuthSDK from "./auth
|
|
2
|
-
import
|
|
3
|
-
import InstanceSDK from "./instance
|
|
1
|
+
import AuthSDK, { LoginData, SessionData } from "./auth";
|
|
2
|
+
import FileSDK, { File, FileDirType } from "./file";
|
|
3
|
+
import InstanceSDK from "./instance";
|
|
4
|
+
import UserSDK, { CreateUserDTO, UpdateUserDTO, User, UserRole } from "./user";
|
|
5
|
+
import { DataResponse, ErrorResponse, PaginatedResponse, QueryResponse } from "./response";
|
|
4
6
|
|
|
5
|
-
export {
|
|
7
|
+
export {
|
|
8
|
+
AuthSDK,
|
|
9
|
+
LoginData,
|
|
10
|
+
SessionData,
|
|
11
|
+
FileSDK,
|
|
12
|
+
File,
|
|
13
|
+
FileDirType,
|
|
14
|
+
InstanceSDK,
|
|
15
|
+
UserSDK,
|
|
16
|
+
CreateUserDTO,
|
|
17
|
+
UpdateUserDTO,
|
|
18
|
+
User,
|
|
19
|
+
UserRole,
|
|
20
|
+
DataResponse,
|
|
21
|
+
ErrorResponse,
|
|
22
|
+
PaginatedResponse,
|
|
23
|
+
QueryResponse,
|
|
24
|
+
};
|
package/src/instance.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { QueryResponse } from "./response";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Classe InstanceSDK para interagir com a API de instâncias.
|
|
6
|
+
*/
|
|
7
|
+
class InstanceSDK {
|
|
8
|
+
/**
|
|
9
|
+
* Cria uma instância do SDK de instância.
|
|
10
|
+
* @param {AxiosInstance} httpClient A instância do cliente HTTP a ser usada para fazer requisições à API.
|
|
11
|
+
*/
|
|
12
|
+
constructor(private readonly httpClient: AxiosInstance) { }
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Executa uma consulta na instância especificada.
|
|
16
|
+
* @param {string} instanceName Nome da instância do Inpulse.
|
|
17
|
+
* @param {string} query Consulta a ser executada.
|
|
18
|
+
* @param {any[]} parameters Parâmetros da consulta.
|
|
19
|
+
* @returns {Promise<T>} Resultado da consulta.
|
|
20
|
+
*/
|
|
21
|
+
public async executeQuery<T>(
|
|
22
|
+
instanceName: string,
|
|
23
|
+
query: string,
|
|
24
|
+
parameters: any[],
|
|
25
|
+
): Promise<T> {
|
|
26
|
+
const response = await this.httpClient
|
|
27
|
+
.post<QueryResponse<T>>(`/${instanceName}/query`, { query, parameters })
|
|
28
|
+
.catch((error) => {
|
|
29
|
+
if (error.response?.data?.message) {
|
|
30
|
+
throw new Error(error.response.data.message);
|
|
31
|
+
}
|
|
32
|
+
if (error.response?.status) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
`Failed to execute query, status: ${error.response.status}`,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
throw new Error(error.message);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return response.data.result;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export default InstanceSDK;
|
package/src/reports.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { AxiosInstance } from "axios";
|
|
2
|
+
import { DataResponse, MessageResponse } from "./response";
|
|
3
|
+
|
|
4
|
+
export interface ChatReport {
|
|
5
|
+
id: number;
|
|
6
|
+
userId: string;
|
|
7
|
+
fileId: number;
|
|
8
|
+
instance: string;
|
|
9
|
+
format: string;
|
|
10
|
+
startDate: string;
|
|
11
|
+
endDate: string;
|
|
12
|
+
exportDate: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface GenerateChatReportOptions {
|
|
16
|
+
instance: string;
|
|
17
|
+
userId: string;
|
|
18
|
+
format: ChatReportFileFormat;
|
|
19
|
+
startDate: string;
|
|
20
|
+
endDate: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export enum ChatReportFileFormat {
|
|
24
|
+
TXT = "txt",
|
|
25
|
+
CSV = "csv",
|
|
26
|
+
PDF = "pdf",
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default class ReportsSDK {
|
|
30
|
+
constructor(private readonly httpClient: AxiosInstance) {}
|
|
31
|
+
|
|
32
|
+
public async getChatsReports(instanceName: string) {
|
|
33
|
+
const url = `/${instanceName}/reports/chats`;
|
|
34
|
+
const response =
|
|
35
|
+
await this.httpClient.get<DataResponse<Array<ChatReport>>>(url);
|
|
36
|
+
|
|
37
|
+
return response.data;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public async generateChatReport({
|
|
41
|
+
instance,
|
|
42
|
+
...body
|
|
43
|
+
}: GenerateChatReportOptions) {
|
|
44
|
+
const url = `/${instance}/reports/chats`;
|
|
45
|
+
const response = await this.httpClient.post<DataResponse<ChatReport>>(
|
|
46
|
+
url,
|
|
47
|
+
body,
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
return response.data;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public async deleteReport(instanceName: string, reportId: number) {
|
|
54
|
+
const url = `/${instanceName}/reports/chats/${reportId}`;
|
|
55
|
+
const response = await this.httpClient.delete<MessageResponse>(url);
|
|
56
|
+
|
|
57
|
+
return response.data;
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/response.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface DataResponse<T> {
|
|
2
|
+
message: string;
|
|
3
|
+
data: T;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface MessageResponse {
|
|
7
|
+
message: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface ErrorResponse {
|
|
11
|
+
message: string;
|
|
12
|
+
cause?: any;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface PaginatedResponse<T> {
|
|
16
|
+
message: string;
|
|
17
|
+
data: Array<T>;
|
|
18
|
+
page: {
|
|
19
|
+
current: number;
|
|
20
|
+
next: boolean;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface QueryResponse<T> {
|
|
25
|
+
result: T;
|
|
26
|
+
}
|