1 | const _ = require('lodash')
|
2 | const qs = require('querystring')
|
3 | const fetch = require('node-fetch')
|
4 | const FormData = require('form-data')
|
5 |
|
6 | const getAccessToken = (client) => {
|
7 | const oauth1Token = _.get(client, 'qs.access_token')
|
8 | return client.accessToken || oauth1Token
|
9 | }
|
10 |
|
11 | const getFormData = (fileDetails, data) => {
|
12 | const formData = new FormData()
|
13 |
|
14 | if (!_.isNil(fileDetails.folderId)) formData.append('folder_ids', fileDetails.folderId)
|
15 | if (!_.isNil(fileDetails.folderPath)) formData.append('folder_paths', fileDetails.folderPath)
|
16 |
|
17 | formData.append('file_names', fileDetails.name)
|
18 | formData.append('files', Buffer.from(data), fileDetails.name)
|
19 | return formData
|
20 | }
|
21 |
|
22 | const getUrlForFileUpload = (client, override, hidden) => {
|
23 | const hapikey = _.get(client, 'qs.hapikey')
|
24 | const params = {}
|
25 | if (override) params.override = override
|
26 | if (hidden) params.override = hidden
|
27 | if (hapikey) params.hapikey = hapikey
|
28 | const queryPart = _.isEmpty(params) ? '' : `?${qs.stringify(params)}`
|
29 |
|
30 | return `${client.baseUrl}/filemanager/api/v2/files${queryPart}`
|
31 | }
|
32 |
|
33 | class File {
|
34 | constructor(client) {
|
35 | this.client = client
|
36 | }
|
37 |
|
38 | get() {
|
39 | return this.client._request({
|
40 | method: 'GET',
|
41 | path: '/filemanager/api/v2/files',
|
42 | })
|
43 | }
|
44 |
|
45 | getOne(id) {
|
46 | return this.client._request({
|
47 | method: 'GET',
|
48 | path: `/filemanager/api/v2/files/${id}`,
|
49 | })
|
50 | }
|
51 |
|
52 | upload(fileDetails, override, hidden) {
|
53 | return fetch(fileDetails.url)
|
54 | .then((response) => response.blob())
|
55 | .then((blob) => blob.arrayBuffer())
|
56 | .then((arrayBuffer) => {
|
57 | const body = getFormData(fileDetails, arrayBuffer)
|
58 | const headers = body.getHeaders()
|
59 | headers.authorization = `Bearer ${getAccessToken(this.client)}`
|
60 |
|
61 |
|
62 |
|
63 | return fetch(getUrlForFileUpload(this.client, override, hidden), {
|
64 | method: 'POST',
|
65 | body,
|
66 | headers,
|
67 | })
|
68 | })
|
69 | .then((data) => data.json())
|
70 | }
|
71 | }
|
72 |
|
73 | module.exports = File
|