UNPKG

8.12 kBJavaScriptView Raw
1import axios from 'axios';
2import lodash from 'lodash.get';
3
4var formDataFactory = {
5 createFormData() {
6 {
7 return new FormData()
8 }
9 }
10};
11
12function getInstance(baseURL) {
13
14 const instance = axios.create({
15 baseURL
16 });
17
18 instance.interceptors.response.use(response => {
19 const otcsticket = lodash(response, 'headers.otcsticket');
20
21 if (otcsticket) {
22 instance.defaults.headers.common['OTCSTicket'] = otcsticket;
23 }
24 return response
25 }, error => {
26 return Promise.reject(error)
27 });
28
29 return instance
30}
31
32function axiosFactory(options) {
33 const instance = getInstance(options.baseURL);
34
35 const username = lodash(options, 'username');
36 const password = lodash(options, 'password');
37 const otcsticket = lodash(options, 'otcsticket');
38
39 if (otcsticket) {
40
41 instance.defaults.headers.common['OTCSTicket'] = otcsticket;
42
43 } else if (username && password) {
44
45 instance.interceptors.request.use(async request => {
46
47 if (request.headers.common['OTCSTicket']) {
48
49 return request
50
51 } else {
52
53 const formData = formDataFactory.createFormData();
54
55 formData.append('username', username);
56 formData.append('password', password);
57
58 let response = await axios.post(`${options.baseURL}/api/v1/auth/`, formData);
59
60 request.headers.common['OTCSTicket'] = lodash(response, 'data.ticket');
61
62 return request
63 }
64 });
65 } else {
66 throw 'You must provide an otcsticket or username and password.'
67 }
68
69 return instance
70}
71
72var auth = axiosFactory;
73
74const SubTypes = {
75 FOLDER: 0,
76 DOCUMENT: 144
77};
78
79var nodes = session => ({
80
81 addablenodetypes(dataid) {
82 return session.get(`api/v1/nodes/${dataid}/addablenodetypes`)
83 },
84
85 async addDocument(parent_id, fileHandler, fileName = null) {
86
87 const url = 'api/v1/nodes';
88
89 const formData = formDataFactory.createFormData();
90
91 formData.append('type', SubTypes.DOCUMENT);
92 formData.append('parent_id', parent_id);
93
94 {
95 // browser
96
97 let name = fileName || fileHandler.name;
98
99 formData.append('file', fileHandler, name);
100 formData.append('name', name);
101
102 return session.post(url, formData)
103 }
104 },
105
106 addItem(type, parent_id, name, params = {}) {
107 return session.postForm('api/v2/nodes', {
108 type,
109 parent_id,
110 name,
111 ...params
112 })
113 },
114
115 node(dataid, params = {}) {
116 return session.get(`api/v2/nodes/${dataid}`, { params })
117 },
118
119 ancestors(dataid, params = {}) {
120 return session.get(`api/v1/nodes/${dataid}/ancestors`, { params })
121 },
122
123 volumeInfo(objType) {
124 return session.get(`api/v1/volumes/${objType}`)
125 },
126
127 volumes() {
128 return session.get('api/v2/volumes')
129 },
130
131 addFolder(parent_id, name, params = {}) {
132 return this.addItem(SubTypes.FOLDER, parent_id, name, params)
133 },
134
135 children(dataid, params = {}) {
136 // https://developer.opentext.com/webaccess/#url=%2Fawd%2Fresources%2Fapis%2Fcs-rest-api-for-cs-16-s%23!%2Fnodes%2FgetSubnodes_get_15&tab=501
137 return session.get(`api/v2/nodes/${dataid}/nodes`, { params })
138 },
139
140 delete(dataid) {
141 return session.delete(`api/v1/nodes/${dataid}`)
142 }
143
144});
145
146var workflow = session => ({
147
148 start(map_id) {
149 return this.draftprocesses(map_id)
150 .then(response => lodash(response, 'data.results.draftprocess_id'))
151 .then(draftprocess_id => this.draftprocesses_update(draftprocess_id))
152 },
153
154 draftprocesses(workflow_id) {
155 return session.postForm('api/v2/draftprocesses', {workflow_id})
156 /*
157
158 return session.post('api/v2/draftprocesses', {}, {
159 params: {
160 workflow_id
161 }
162 })
163 */
164 },
165
166 draftprocesses_update(draftprocess_id) {
167 return session.get('api/v1/forms/draftprocesses/update', {
168 params: {
169 draftprocess_id
170 }
171 })
172 },
173
174 draftprocesses_put(draftprocess_id, body) {
175 return session.putForm(`api/v2/draftprocesses/${draftprocess_id}`, { body })
176 },
177
178 draftprocesses_formUpdate(draftprocess_id, values) {
179 // : {"WorkflowForm_2":"adsfasdf"}
180 const body = {
181 action: "formUpdate",
182 values
183 };
184
185 return this.draftprocesses_put(draftprocess_id, body)
186 },
187
188
189 // async start(map_id) {
190 // debugger
191 // // this API is inconsistent with above
192 // let response = await this.draftprocesses(map_id)
193
194 // let draftprocess_id = get(response, 'data.results.draftprocess_id')
195
196 // response = await this.draftprocesses_update(draftprocess_id)
197
198 // return response.data
199
200 // }
201
202
203
204
205});
206
207var rhcore = session => ({
208 scriptNode(id, params = {}) {
209 return session.get(`api/v1/rhcore/${id}`, {
210 params
211 })
212 }
213});
214
215var members = session => ({
216
217 USER: 0,
218 GROUP: 1,
219
220 // https://developer.opentext.com/awd/resources/apis/cs-rest-api-for-cs-16-s#!/members/SearchMember_get_1
221 userQuery(query, options = {}) {
222 const params = {
223 limit: 20,
224 where_type: [this.USER, this.GROUP],
225 query,
226 ...options
227 };
228
229 return session.get(`api/v2/members`, {params})
230 },
231
232 member(id) {
233 return session.get(`api/v2/members/${id}`)
234 }
235
236});
237
238var versions = session => ({
239
240 async addVersion(dataid, fileHandler, fileName = null) {
241 // ERROR: This seemed to only upload the first 2500 characters when the file extension
242 // was .lxe (e.g., and unknown mimetype). Must look into this.
243
244
245 const url = `api/v1/nodes/${dataid}/versions`;
246
247 const formData = formDataFactory.createFormData();
248
249 {
250 // browser
251 //
252
253 let name = fileName || fileHandler.name;
254
255 formData.append('file', fileHandler, name);
256 // formData.append('name', fileHandler.name)
257 return session.post(url, formData)
258 }
259 },
260
261});
262
263var webreports = session => ({
264
265 run(dataid, params = {}) {
266 const url = `api/v1/nodes/${dataid}/output`;
267 return session.get(url, { params })
268 }
269
270});
271
272var Session_1 = class Session {
273
274 constructor(options) {
275 this.axios = auth(options);
276 }
277
278 get nodes() {
279 // this creates a circular reference.. bad?
280 if (this._nodes == null) {
281 this._nodes = nodes(this);
282 }
283
284 return this._nodes
285 }
286
287 get workflow() {
288 // this creates a circular reference.. bad?
289 if (this._workflow == null) {
290 this._workflow = workflow(this);
291 }
292
293 return this._workflow
294 }
295
296 get rhcore() {
297 // this creates a circular reference.. bad?
298 if (this._rhcore == null) {
299 this._rhcore = rhcore(this);
300 }
301
302 return this._rhcore
303 }
304
305 get members() {
306 // this creates a circular reference.. bad?
307 if (this._members == null) {
308 this._members = members(this);
309 }
310
311 return this._members
312 }
313
314 get webreports() {
315 // this creates a circular reference.. bad?
316 if (this._webreports == null) {
317 this._webreports = webreports(this);
318 }
319
320 return this._webreports
321 }
322
323 get versions() {
324 // this creates a circular reference.. bad?
325 if (this._versions == null) {
326 this._versions = versions(this);
327 }
328
329 return this._versions
330 }
331
332 _isObject(value) {
333 return value && typeof value === 'object' && value.constructor === Object
334 }
335
336 _objectToForm(obj) {
337
338 const formData = formDataFactory.createFormData();
339
340 for (let [key, value] of Object.entries(obj)) {
341 if (Array.isArray(value) || this._isObject(value)) {
342 formData.append(key, JSON.stringify(value));
343 } else {
344 formData.append(key, value);
345 }
346 }
347
348 return formData
349 }
350
351 get(...args) {
352 return this.axios.get(...args)
353 }
354
355 putForm(url, params) {
356 const formData = this._objectToForm(params);
357 return this.put(url, formData)
358 }
359
360 postForm(url, params) {
361 const formData = this._objectToForm(params);
362 return this.post(url, formData)
363 }
364
365 patchForm(url, params) {
366 const formData = this._objectToForm(params);
367 return this.patch(url, formData)
368 }
369
370 post(...args) {
371 return this.axios.post(...args)
372 }
373
374 put(...args) {
375 return this.axios.put(...args)
376 }
377
378 delete(...args) {
379 return this.axios.delete(...args)
380 }
381
382 options(...args) {
383 return this.axios.options(...args)
384 }
385
386 patch(...args) {
387 return this.axios.patch(...args)
388 }
389
390};
391
392var src = {auth, Session: Session_1};
393var src_1 = src.auth;
394var src_2 = src.Session;
395
396export default src;
397export { src_2 as Session, src_1 as auth };
398//# sourceMappingURL=index.es.js.map