This repository has been archived by the owner on Mar 8, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFeegowPublicAPI.js
118 lines (104 loc) · 3.02 KB
/
FeegowPublicAPI.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
if (typeof exports != "undefined") {
var { atob } = require("atob");
var fetch = require("node-fetch");
}
class FeegowPublicAPI {
constructor(token) {
this.getPatients = this.getPatients.bind(this);
this.checkAndFormatVersion = this.checkAndFormatVersion.bind(this);
const tokenInfo = this.decryptJwt(token);
if (!tokenInfo) {
throw "Token inválido";
}
this.token = token;
this.tokenInfo = tokenInfo;
}
/**
* @example
* const data = {
* "view_mode": "full", // not working
* "limit": 1, // not working
* "offset": 0,
* "telefone": "(21) 2018-0123",
* "cpf": "177.820.767-73"
* };
* */
getPatients(version = "v1", data = {}) {
version = this.checkAndFormatVersion(version);
return new Promise((resolve, reject) => {
const filter = new URLSearchParams(data).toString();
const headers = new Headers();
headers.append("X-Access-Token", this.token);
headers.append("Content-Type", "application/json");
fetch(` https://api.feegow.com/v1/api/${version}patient/list?${filter}`, {
method: "GET",
headers: headers,
})
.then((res) => res.json())
.then((json) => resolve(json))
.catch((error) =>
reject(error["response"] ? error["response"]["data"] : error)
);
});
}
/**
* @example
* const data = {
* "tipo": "P",
* "data_start": "2021-09-09",
* "data_end": "2021-09-09"
* };
* */
getAvailableSchedule(version = "v1", data = {}) {
version = this.checkAndFormatVersion(version);
return new Promise((resolve, reject) => {
const filter = new URLSearchParams(data).toString();
const headers = new Headers();
headers.append("X-Access-Token", this.token);
headers.append("Content-Type", "application/json");
fetch(` https://api.feegow.com/v1/api/${version}patient/list?${filter}`, {
method: 'GET',
headers: headers
})
.then(res => res.json())
.then(json => resolve(json))
.catch((error) => reject(error['response'] ? error['response']['data'] : error));
});
}
}
decryptJwt(token) {
try {
const base64Url = token.split(".")[1];
const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/");
const jsonPayload = decodeURIComponent(
atob(base64)
.split("")
.map(function (c) {
return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);
})
.join("")
);
return JSON.parse(jsonPayload);
} catch (err) {
return false;
}
}
checkAndFormatVersion(version) {
switch (version) {
case "v1":
case "V1":
return "";
case "v2":
case "V2":
return "v2/";
case "v3":
case "V3":
return "v3/";
default:
throw "Unknown API version.";
}
}
}
if (typeof exports != "undefined") {
module.exports = FeegowPublicAPI;
}