-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient_api.ts
96 lines (90 loc) · 2.64 KB
/
client_api.ts
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
/**
* client_api.ts provides the browser side API for interactive dataset API via the COLD web service.
* That in turn wraps the datasetd JSON API via ts_dataset.ts.
*/
/**
* ClientAPI wraps the browser facing web service and handles retrieving information about peoples, groups, etc.
*/
export class ClientAPI {
baseUrl: string = "../";
constructor(baseUrl?: string) {
(baseUrl === undefined) ? "" : this.baseUrl = baseUrl;
}
async getList(
c_name: string,
query_name: string,
params?: URLSearchParams,
): Promise<{ [key: string]: any }[]> {
const base_url = `${this.baseUrl}/api/${c_name}/${query_name}`;
let uri: string = base_url;
let resp: Response;
if (params !== undefined) {
uri = `${base_url}?${params}`;
}
try {
resp = await fetch(uri, {
headers: { "Content-Type": "application/json" },
method: "GET",
});
} catch (err) {
return [];
}
if (resp.ok) {
const src = await resp.text();
if (src !== undefined && src !== "") {
let l: { clgid: string; group_name: string }[] = [];
try {
l = JSON.parse(src);
} catch (err) {
return [];
}
return l;
}
}
return [];
}
/**
* getGroupsList returns an array of clgid and group names. If list can't be retrieved
* then an empty list is return.
* @returns an array of objects consisting of clgid and group name.
*/
async getGroupsList(): Promise<{ clgid: string; group_name: string }[]> {
const c_name = "groups";
const query_name = "group_names";
return await this.getList(c_name, query_name) as {
clgid: string;
group_name: string;
}[];
}
/**
* getPeopleList returns an array of clpid and group names. If list can't be retrieved
* then an empty list is return.
* @returns an array of objects consisting of clgid and group name.
*/
async getPeopleList(): Promise<
{ clpid: string; family_name: string; given_name: string; orcid: string }[]
> {
const c_name = "people";
const query_name = "people_names";
return await this.getList(c_name, query_name) as {
clpid: string;
family_name: string;
given_name: string;
orcid: string;
}[];
}
async lookupGroupName(name: string): Promise<
{ clgid: string; name: string; ok: boolean; msg: string }[]
> {
const c_name = "groups.ds";
const query_name = "lookup_name";
let params = new URLSearchParams();
params.append("q", name);
return await this.getList(c_name, query_name, params) as {
clgid: string;
name: string;
ok: boolean;
msg: string;
}[];
}
}