UNPKG

2.62 kBJavaScriptView Raw
1const FormDataFactory = require('./form-data-factory')
2const assert = require('assert')
3
4module.exports = session => ({
5
6 async addVersion({
7 dataid,
8 fileHandler,
9 apiVersion = 'v1',
10 fileName = null,
11 options = {}
12 }) {
13
14 assert(dataid != null, 'dataid cannot be null')
15 assert(fileHandler != null, 'fileHandler cannot be null')
16
17 const url = `api/${apiVersion}/nodes/${dataid}/versions`
18
19 if (process.node) {
20 // node.js
21 const fsp = require('fs').promises
22 const path = require('path')
23
24 const f = await fsp.readFile(fileHandler)
25 const name = fileName || path.basename(fileHandler)
26
27 const params = {
28 file: {
29 file: f,
30 name
31 },
32 ...options
33 }
34
35 // console.log(params)
36
37 return session.postForm(url, params)
38
39 } else {
40 // browser
41 const name = fileName || fileHandler.name
42
43 const params = {
44 file: {
45 file: fileHandler,
46 name
47 },
48 ...options
49 }
50
51 return session.postForm(url, params)
52
53 // formData.append('file', fileHandler, name)
54 // return session.post(url, formData)
55 }
56 },
57
58 async list(dataid) {
59 const url = `api/v1/nodes/${dataid}/versions`
60 return session.get(url)
61 },
62
63 async version(dataid, version_number = 'latest') {
64 // latest not supported in v2
65 const url = `api/v1/nodes/${dataid}/versions/${version_number}`
66 return session.get(url)
67 },
68
69 async promote({
70 dataid,
71 versionNumber,
72 description = null
73 }) {
74 assert(dataid != null, 'dataid cannot be null')
75 assert(versionNumber != null, 'number_to_keep must be an integer')
76
77 const url = `api/v2/nodes/${dataid}/versions/${versionNumber}/promote`
78
79 return session.postBody(url, {
80 ...(!!description && {
81 description
82 }),
83 })
84 },
85
86 async deleteVersion({
87 dataid,
88 versionNumber,
89 apiVersion = 'v1',
90 }) {
91 assert(dataid != null, 'dataid cannot be null')
92 assert(versionNumber != null, 'number_to_keep must be an integer')
93
94 const url = `api/${apiVersion}/nodes/${dataid}/versions/${versionNumber}`
95
96 // careful with deleteForm or deleteBody
97 return session.delete(url)
98 },
99
100 async purge({
101 dataid,
102 number_to_keep = 1
103 }) {
104 assert(dataid != null, 'dataid cannot be null')
105 assert(!isNaN(number_to_keep), 'number_to_keep must be an integer')
106
107 // delete parameters not supported
108 // https://stackoverflow.com/questions/51069552/axios-delete-request-with-body-and-headers
109 // number_to_keep is ignored
110
111 const url = `api/v2/nodes/${dataid}/versions`
112
113 return session.deleteForm(url, {
114 number_to_keep
115 })
116 }
117
118})
\No newline at end of file