UNPKG

10.7 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5var axios = require('axios');
6var get = require('lodash.get');
7var require$$0 = require('form-data');
8var require$$0$1 = require('fs');
9var require$$1 = require('path');
10var isnil = require('lodash.isnil');
11var sha1 = require('sha1');
12var Semaphore = require('@chriscdn/promise-semaphore');
13
14function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
15
16var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
17var get__default = /*#__PURE__*/_interopDefaultLegacy(get);
18var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
19var require$$0__default$1 = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
20var require$$1__default = /*#__PURE__*/_interopDefaultLegacy(require$$1);
21var isnil__default = /*#__PURE__*/_interopDefaultLegacy(isnil);
22var sha1__default = /*#__PURE__*/_interopDefaultLegacy(sha1);
23var Semaphore__default = /*#__PURE__*/_interopDefaultLegacy(Semaphore);
24
25var formDataFactory = {
26 createFormData() {
27 {
28 const klass = require$$0__default['default'];
29 return new klass
30 }
31 }
32};
33
34function getInstance(baseURL) {
35
36 const instance = axios__default['default'].create({
37 baseURL
38 });
39
40 instance.interceptors.response.use(response => {
41 const otcsticket = get__default['default'](response, 'headers.otcsticket');
42
43 if (otcsticket) {
44 instance.defaults.headers.common['OTCSTicket'] = otcsticket;
45 }
46 return response
47 }, error => {
48 return Promise.reject(error)
49 });
50
51 return instance
52}
53
54function axiosFactory(options) {
55 const instance = getInstance(options.baseURL);
56
57 const username = get__default['default'](options, 'username');
58 const password = get__default['default'](options, 'password');
59 const otcsticket = get__default['default'](options, 'otcsticket');
60
61 if (otcsticket) {
62
63 instance.defaults.headers.common['OTCSTicket'] = otcsticket;
64
65 } else if (username && password) {
66
67 instance.interceptors.request.use(async request => {
68
69 if (request.headers.common['OTCSTicket']) {
70
71 return request
72
73 } else {
74
75 const formData = formDataFactory.createFormData();
76
77 formData.append('username', username);
78 formData.append('password', password);
79
80 let response = await axios__default['default'].post(`${options.baseURL}/api/v1/auth/`, formData.getBuffer(), { headers: formData.getHeaders() }) ;
81
82 request.headers.common['OTCSTicket'] = get__default['default'](response, 'data.ticket');
83
84 return request
85 }
86 });
87 } else {
88 throw 'You must provide an otcsticket or username and password.'
89 }
90
91 return instance
92}
93
94var auth = axiosFactory;
95
96const SubTypes = {
97 FOLDER: 0,
98 DOCUMENT: 144
99};
100
101var nodes = session => ({
102
103 addablenodetypes(dataid) {
104 return session.get(`api/v1/nodes/${dataid}/addablenodetypes`)
105 },
106
107 async addDocument(parent_id, fileHandler, fileName = null) {
108
109 const url = 'api/v1/nodes';
110
111 const formData = formDataFactory.createFormData();
112
113 formData.append('type', SubTypes.DOCUMENT);
114 formData.append('parent_id', parent_id);
115
116 {
117 // node.js
118
119 const fsp = require$$0__default$1['default'].promises;
120 const path = require$$1__default['default'];
121
122 let f = await fsp.readFile(fileHandler);
123 let name = fileName || path.basename(fileHandler);
124
125 formData.append('file', f, name);
126 formData.append('name', name);
127
128 return session.post(url, formData.getBuffer(), { headers: formData.getHeaders() })
129
130 }
131 },
132
133 addItem(type, parent_id, name, params = {}) {
134 return session.postForm('api/v2/nodes', {
135 type,
136 parent_id,
137 name,
138 ...params
139 })
140 },
141
142 node(dataid, params = {}) {
143 return session.getCached(`api/v2/nodes/${dataid}`, { params })
144 },
145
146 ancestors(dataid, params = {}) {
147 return session.get(`api/v1/nodes/${dataid}/ancestors`, { params })
148 },
149
150 volumeInfo(objType) {
151 return session.get(`api/v1/volumes/${objType}`)
152 },
153
154 volumes() {
155 return session.get('api/v2/volumes')
156 },
157
158 addFolder(parent_id, name, params = {}) {
159 return this.addItem(SubTypes.FOLDER, parent_id, name, params)
160 },
161
162 children(dataid, params = {}) {
163 // https://developer.opentext.com/webaccess/#url=%2Fawd%2Fresources%2Fapis%2Fcs-rest-api-for-cs-16-s%23!%2Fnodes%2FgetSubnodes_get_15&tab=501
164 return session.get(`api/v2/nodes/${dataid}/nodes`, { params })
165 },
166
167 delete(dataid) {
168 return session.delete(`api/v1/nodes/${dataid}`)
169 },
170
171 download(dataid, version = 'v1', filePath) {
172 // session.nodes.download(1267501, 'v2', '/Users/chris/Downloads/test.pdf')
173 {
174 return session.get(`api/${version}/nodes/${dataid}/content`, { responseType: 'stream' })
175 .then(response => {
176 const fs = require$$0__default$1['default'];
177 const writer = fs.createWriteStream(filePath);
178
179 response.data.pipe(writer);
180
181 return new Promise((resolve, reject) => {
182 writer.on('finish', resolve);
183 writer.on('error', reject);
184 })
185 })
186 }
187 }
188
189});
190
191var workflow = session => ({
192
193 start(map_id) {
194 return this.draftprocesses(map_id)
195 .then(response => get__default['default'](response, 'data.results.draftprocess_id'))
196 .then(draftprocess_id => this.draftprocesses_update(draftprocess_id))
197 },
198
199 draftprocesses(workflow_id) {
200 return session.postForm('api/v2/draftprocesses', {workflow_id})
201 },
202
203 draftprocesses_update(draftprocess_id) {
204 return session.get('api/v1/forms/draftprocesses/update', {
205 params: {
206 draftprocess_id
207 }
208 })
209 },
210
211 draftprocesses_put(draftprocess_id, body) {
212 return session.putForm(`api/v2/draftprocesses/${draftprocess_id}`, { body })
213 }
214
215 // draftprocesses_formUpdate(draftprocess_id, values) {
216 // const body = {
217 // action: "formUpdate",
218 // values
219 // }
220
221 // return this.draftprocesses_put(draftprocess_id, body)
222 // }
223
224});
225
226var rhcore = session => ({
227 scriptNode(id, params = {}) {
228 return session.get(`api/v1/rhcore/${id}`, {
229 params
230 })
231 }
232});
233
234var members = session => ({
235
236 USER: 0,
237 GROUP: 1,
238
239 userQuery(query, options = {}, version = 'v2') {
240 const params = {
241 limit: 20,
242 where_type: JSON.stringify([this.USER, this.GROUP]),
243 query,
244 ...options
245 };
246
247 return session.get(`api/${version}/members`, { params })
248 },
249
250 member(id, version = 'v2') {
251 return session.getCached(`api/${version}/members/${id}`)
252 }
253
254});
255
256var versions = session => ({
257
258 async addVersion(dataid, fileHandler, options = {}) {
259
260 const url = `api/v1/nodes/${dataid}/versions`;
261
262 // const formData = FormDataFactory.createFormData()
263
264 {
265 // node.js
266 const fsp = require$$0__default$1['default'].promises;
267 const path = require$$1__default['default'];
268
269 let f = await fsp.readFile(fileHandler);
270 // let name = fileName || path.basename(fileHandler)
271
272 const params = {
273 file: {
274 file: f,
275 name: path.basename(fileHandler)
276 },
277 ...options
278 };
279
280 // console.log(params)
281
282 return session.postForm(url, params)
283
284 }
285 },
286
287 async list(dataid) {
288 const url = `api/v1/nodes/${dataid}/versions`;
289 return session.get(url)
290 },
291
292 async version(dataid, version_number='latest') {
293 // latest not supported in v2
294 const url = `api/v1/nodes/${dataid}/versions/${version_number}`;
295 return session.get(url)
296 }
297
298});
299
300var webreports = session => ({
301
302 run(dataid, params = {}) {
303 const url = `api/v1/nodes/${dataid}/output`;
304 return session.get(url, { params })
305 }
306
307});
308
309const semaphore = new Semaphore__default['default']();
310
311let getCache = {};
312
313var Session_1 = class Session {
314
315 constructor(options) {
316 this.axios = auth(options);
317 }
318
319 get nodes() {
320 // this creates a circular reference.. bad?
321 if (this._nodes == null) {
322 this._nodes = nodes(this);
323 }
324
325 return this._nodes
326 }
327
328 get workflow() {
329 // this creates a circular reference.. bad?
330 if (this._workflow == null) {
331 this._workflow = workflow(this);
332 }
333
334 return this._workflow
335 }
336
337 get rhcore() {
338 // this creates a circular reference.. bad?
339 if (this._rhcore == null) {
340 this._rhcore = rhcore(this);
341 }
342
343 return this._rhcore
344 }
345
346 get members() {
347 // this creates a circular reference.. bad?
348 if (this._members == null) {
349 this._members = members(this);
350 }
351
352 return this._members
353 }
354
355 get webreports() {
356 // this creates a circular reference.. bad?
357 if (this._webreports == null) {
358 this._webreports = webreports(this);
359 }
360
361 return this._webreports
362 }
363
364 get versions() {
365 // this creates a circular reference.. bad?
366 if (this._versions == null) {
367 this._versions = versions(this);
368 }
369
370 return this._versions
371 }
372
373 _isObject(value) {
374 return value && typeof value === 'object' && value.constructor === Object
375 }
376
377 _objectToForm(obj) {
378
379 const formData = formDataFactory.createFormData();
380
381 for (let [key, value] of Object.entries(obj)) {
382 if (value && value.name && value.file) {
383 formData.append(key, value.file, value.name);
384 } else if (Array.isArray(value) || this._isObject(value)) {
385 formData.append(key, JSON.stringify(value));
386 } else if (!isnil__default['default'](value)) {
387 // should empty strings be sent?
388 formData.append(key, value);
389 }
390 }
391
392 return formData
393 }
394
395 get(...args) {
396 return this.axios.get(...args)
397 }
398
399 async getCached(...args) {
400 const key = sha1__default['default'](JSON.stringify(args));
401
402 try {
403 await semaphore.acquire(key);
404
405 if (!getCache[key]) {
406 getCache[key] = this.get(...args);
407 }
408 } finally {
409 semaphore.release(key);
410 }
411
412 return getCache[key]
413 }
414
415 putForm(url, params) {
416 const formData = this._objectToForm(params);
417 return this.put(url, formData.getBuffer(), {
418 headers: formData.getHeaders()
419 })
420 }
421
422 postForm(url, params) {
423 const formData = this._objectToForm(params);
424 return this.post(url, formData.getBuffer(), {
425 headers: formData.getHeaders()
426 })
427 }
428
429 patchForm(url, params) {
430 const formData = this._objectToForm(params);
431 return this.patch(url, formData.getBuffer(), {
432 headers: formData.getHeaders()
433 })
434 }
435
436 post(...args) {
437 return this.axios.post(...args)
438 }
439
440 put(...args) {
441 return this.axios.put(...args)
442 }
443
444 delete(...args) {
445 return this.axios.delete(...args)
446 }
447
448 options(...args) {
449 return this.axios.options(...args)
450 }
451
452 patch(...args) {
453 return this.axios.patch(...args)
454 }
455
456};
457
458var auth_1 = auth;
459var Session_1$1 = Session_1;
460
461var src = {
462 auth: auth_1,
463 Session: Session_1$1
464};
465
466exports.Session = Session_1$1;
467exports.auth = auth_1;
468exports.default = src;
469//# sourceMappingURL=index.cjs.js.map