UNPKG

3.79 kBJavaScriptView Raw
1const FormDataFactory = require('./form-data-factory')
2const assert = require('assert')
3const SubTypes = require('./subtypes.json')
4const get = require('lodash.get')
5
6module.exports = session => ({
7
8 addablenodetypes(dataid) {
9 return session.get(`api/v1/nodes/${dataid}/addablenodetypes`)
10 },
11
12 async addDocument({
13 parent_id,
14 fileHandler,
15 apiVersion = 'v1', // v1 or v2
16 name = null,
17 options = {}
18 }) {
19 assert(parent_id != null, 'parent_id cannot be null')
20 assert(fileHandler != null, 'fileHandler cannot be null')
21 assert(['v1', 'v2'].includes(apiVersion), "apiVersion must be in ['v1','v2']")
22
23 const url = `api/${apiVersion}/nodes`
24
25 if (process.node) {
26 // node.js
27 const fsp = require('fs').promises
28 const path = require('path')
29
30 const f = await fsp.readFile(fileHandler)
31 const csName = name || path.basename(fileHandler)
32
33 const params = {
34 ...options,
35 type: SubTypes.Document,
36 name: csName,
37 parent_id,
38 file: {
39 file: f,
40 name: csName
41 },
42 }
43
44 return session.postForm(url, params)
45
46 } else {
47 // browser
48 const csName = name || fileHandler.name
49
50 const params = {
51 ...options,
52 type: SubTypes.Document,
53 name: csName,
54 parent_id,
55 file: {
56 file: fileHandler,
57 name: csName
58 }
59 }
60
61 return session.postForm(url, params)
62
63 }
64 },
65
66 async addDocumentMajor({
67 parent_id,
68 fileHandler,
69 name = null,
70 description = null,
71 options = {}
72 }) {
73 const response = await this.addDocument({
74 parent_id,
75 fileHandler,
76 name,
77 options: {
78 ...options,
79 advanced_versioning: true
80 }
81 })
82
83 const dataid = response.data.id
84
85 await session.versions.promote({
86 dataid,
87 versionNumber: 1,
88 description
89 })
90
91 await session.versions.deleteVersion({
92 dataid,
93 versionNumber: 1
94 })
95
96 return response
97 },
98
99 addItem(type, parent_id, name, params = {}) {
100 return session.postBody('api/v2/nodes', {
101 type,
102 parent_id,
103 name,
104 ...params
105 })
106 },
107
108 node(dataid, params = {}) {
109 return session.get(`api/v2/nodes/${dataid}`, {
110 params
111 })
112 },
113
114 ancestors(dataid, params = {}) {
115 return session.get(`api/v1/nodes/${dataid}/ancestors`, {
116 params
117 })
118 },
119
120 volumeInfo(objType) {
121 return session.get(`api/v1/volumes/${objType}`)
122 },
123
124 volumes() {
125 return session.get('api/v2/volumes')
126 },
127
128 addFolder(parent_id, name, params = {}) {
129 return this.addItem(SubTypes.Folder, parent_id, name, params)
130 },
131
132 addGeneration(parent_id, name, original_id, version_number, params = {}) {
133 return this.addItem(SubTypes.Generation, parent_id, name, {
134 original_id,
135 version_number,
136 ...params
137 })
138 },
139
140 nodes(dataid, params = {}) {
141 // https://developer.opentext.com/webaccess/#url=%2Fawd%2Fresources%2Fapis%2Fcs-rest-api-for-cs-16-s%23!%2Fnodes%2FgetSubnodes_get_15&tab=501
142 return session.get(`api/v2/nodes/${dataid}/nodes`, {
143 params
144 })
145 },
146
147 children(dataid, params = {}) {
148 return this.nodes(dataid, params)
149 },
150
151 delete(dataid) {
152 return session.delete(`api/v1/nodes/${dataid}`)
153 },
154
155 download(dataid, version = 'v1', filePath) {
156 // session.nodes.download(1267501, 'v2', '/Users/chris/Downloads/test.pdf')
157 if (process.node) {
158 return session.get(`api/${version}/nodes/${dataid}/content`, {
159 responseType: 'stream'
160 })
161 .then(response => {
162 const fs = require('fs')
163 const writer = fs.createWriteStream(filePath)
164
165 response.data.pipe(writer)
166
167 return new Promise((resolve, reject) => {
168 writer.on('finish', resolve)
169 writer.on('error', reject)
170 })
171 })
172 } else {
173 return Promise.reject('Not implemented yet')
174 }
175 }
176
177})
\No newline at end of file