files.com 1.1.18 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/.eslintrc.js +0 -3
  2. package/_VERSION +1 -1
  3. package/docs/Errors.md +1 -0
  4. package/lib/Api.js +1 -1
  5. package/lib/Errors.js +957 -933
  6. package/lib/Files.js +1 -1
  7. package/lib/models/ActionNotificationExport.js +25 -25
  8. package/lib/models/ActionNotificationExportResult.js +10 -10
  9. package/lib/models/ActionWebhookFailure.js +5 -9
  10. package/lib/models/ApiKey.js +62 -70
  11. package/lib/models/App.js +5 -5
  12. package/lib/models/As2IncomingMessage.js +7 -7
  13. package/lib/models/As2OutgoingMessage.js +7 -7
  14. package/lib/models/As2Partner.js +54 -58
  15. package/lib/models/As2Station.js +51 -55
  16. package/lib/models/Automation.js +102 -110
  17. package/lib/models/AutomationRun.js +13 -13
  18. package/lib/models/BandwidthSnapshot.js +5 -5
  19. package/lib/models/Behavior.js +77 -85
  20. package/lib/models/Bundle.js +102 -110
  21. package/lib/models/BundleDownload.js +9 -9
  22. package/lib/models/BundleNotification.js +37 -41
  23. package/lib/models/BundleRecipient.js +22 -22
  24. package/lib/models/BundleRegistration.js +7 -7
  25. package/lib/models/Clickwrap.js +52 -56
  26. package/lib/models/DnsRecord.js +5 -5
  27. package/lib/models/EmailIncomingMessage.js +5 -5
  28. package/lib/models/ExternalEvent.js +18 -18
  29. package/lib/models/File.js +89 -93
  30. package/lib/models/FileComment.js +41 -45
  31. package/lib/models/FileCommentReaction.js +15 -19
  32. package/lib/models/FileMigration.js +5 -5
  33. package/lib/models/Folder.js +24 -24
  34. package/lib/models/FormFieldSet.js +44 -48
  35. package/lib/models/GpgKey.js +53 -57
  36. package/lib/models/Group.js +51 -55
  37. package/lib/models/GroupUser.js +53 -57
  38. package/lib/models/History.js +72 -72
  39. package/lib/models/HistoryExport.js +51 -51
  40. package/lib/models/HistoryExportResult.js +10 -10
  41. package/lib/models/InboxRecipient.js +22 -22
  42. package/lib/models/InboxRegistration.js +7 -7
  43. package/lib/models/InboxUpload.js +9 -9
  44. package/lib/models/Invoice.js +12 -12
  45. package/lib/models/IpAddress.js +17 -17
  46. package/lib/models/Lock.js +27 -31
  47. package/lib/models/Message.js +60 -64
  48. package/lib/models/MessageComment.js +46 -50
  49. package/lib/models/MessageCommentReaction.js +27 -31
  50. package/lib/models/MessageReaction.js +27 -31
  51. package/lib/models/Notification.js +66 -70
  52. package/lib/models/Payment.js +12 -12
  53. package/lib/models/Permission.js +28 -32
  54. package/lib/models/Priority.js +9 -9
  55. package/lib/models/Project.js +39 -43
  56. package/lib/models/PublicKey.js +46 -50
  57. package/lib/models/RemoteBandwidthSnapshot.js +5 -5
  58. package/lib/models/RemoteServer.js +306 -310
  59. package/lib/models/Request.js +33 -37
  60. package/lib/models/Session.js +11 -15
  61. package/lib/models/SettingsChange.js +5 -5
  62. package/lib/models/SftpHostKey.js +40 -44
  63. package/lib/models/ShareGroup.js +50 -54
  64. package/lib/models/Site.js +138 -138
  65. package/lib/models/Snapshot.js +44 -48
  66. package/lib/models/SsoStrategy.js +15 -19
  67. package/lib/models/Style.js +17 -21
  68. package/lib/models/UsageDailySnapshot.js +5 -5
  69. package/lib/models/UsageSnapshot.js +5 -5
  70. package/lib/models/User.js +156 -172
  71. package/lib/models/UserCipherUse.js +7 -7
  72. package/lib/models/UserRequest.js +26 -30
  73. package/lib/models/WebhookTest.js +15 -15
  74. package/package.json +6 -2
  75. package/src/Api.js +2 -1
  76. package/src/Errors.js +189 -177
  77. package/src/Files.js +1 -1
  78. package/src/models/AccountLineItem.js +5 -2
  79. package/src/models/Action.js +5 -2
  80. package/src/models/ActionNotificationExport.js +36 -35
  81. package/src/models/ActionNotificationExportResult.js +15 -13
  82. package/src/models/ActionWebhookFailure.js +9 -8
  83. package/src/models/ApiKey.js +69 -72
  84. package/src/models/App.js +10 -8
  85. package/src/models/As2IncomingMessage.js +12 -10
  86. package/src/models/As2OutgoingMessage.js +12 -10
  87. package/src/models/As2Partner.js +61 -60
  88. package/src/models/As2Station.js +58 -57
  89. package/src/models/Auto.js +5 -2
  90. package/src/models/Automation.js +121 -110
  91. package/src/models/AutomationRun.js +18 -17
  92. package/src/models/BandwidthSnapshot.js +10 -8
  93. package/src/models/Behavior.js +85 -86
  94. package/src/models/Bundle.js +121 -110
  95. package/src/models/BundleDownload.js +14 -12
  96. package/src/models/BundleNotification.js +40 -43
  97. package/src/models/BundleRecipient.js +33 -32
  98. package/src/models/BundleRegistration.js +12 -10
  99. package/src/models/Clickwrap.js +60 -58
  100. package/src/models/DnsRecord.js +10 -8
  101. package/src/models/EmailIncomingMessage.js +10 -8
  102. package/src/models/Errors.js +5 -2
  103. package/src/models/ExternalEvent.js +29 -29
  104. package/src/models/File.js +116 -108
  105. package/src/models/FileAction.js +5 -2
  106. package/src/models/FileComment.js +45 -46
  107. package/src/models/FileCommentReaction.js +26 -26
  108. package/src/models/FileMigration.js +10 -8
  109. package/src/models/FileUploadPart.js +5 -2
  110. package/src/models/Folder.js +32 -29
  111. package/src/models/FormField.js +5 -2
  112. package/src/models/FormFieldSet.js +49 -50
  113. package/src/models/GpgKey.js +60 -59
  114. package/src/models/Group.js +58 -57
  115. package/src/models/GroupUser.js +60 -58
  116. package/src/models/History.js +77 -74
  117. package/src/models/HistoryExport.js +62 -61
  118. package/src/models/HistoryExportResult.js +15 -13
  119. package/src/models/Image.js +5 -2
  120. package/src/models/InboxRecipient.js +33 -32
  121. package/src/models/InboxRegistration.js +12 -10
  122. package/src/models/InboxUpload.js +14 -12
  123. package/src/models/Invoice.js +17 -14
  124. package/src/models/InvoiceLineItem.js +5 -2
  125. package/src/models/IpAddress.js +22 -20
  126. package/src/models/Lock.js +36 -36
  127. package/src/models/Message.js +66 -66
  128. package/src/models/MessageComment.js +50 -52
  129. package/src/models/MessageCommentReaction.js +38 -40
  130. package/src/models/MessageReaction.js +38 -40
  131. package/src/models/Notification.js +74 -72
  132. package/src/models/Payment.js +17 -14
  133. package/src/models/PaymentLineItem.js +5 -2
  134. package/src/models/Permission.js +39 -40
  135. package/src/models/Preview.js +5 -2
  136. package/src/models/Priority.js +14 -12
  137. package/src/models/Project.js +43 -45
  138. package/src/models/PublicIpAddress.js +5 -2
  139. package/src/models/PublicKey.js +50 -52
  140. package/src/models/RemoteBandwidthSnapshot.js +10 -8
  141. package/src/models/RemoteServer.js +380 -312
  142. package/src/models/RemoteServerConfigurationFile.js +5 -2
  143. package/src/models/Request.js +44 -46
  144. package/src/models/Session.js +22 -22
  145. package/src/models/SettingsChange.js +10 -8
  146. package/src/models/SftpHostKey.js +45 -46
  147. package/src/models/ShareGroup.js +56 -56
  148. package/src/models/ShareGroupMember.js +5 -2
  149. package/src/models/Site.js +143 -142
  150. package/src/models/Snapshot.js +50 -50
  151. package/src/models/SsoStrategy.js +20 -21
  152. package/src/models/Status.js +5 -2
  153. package/src/models/Style.js +22 -23
  154. package/src/models/UsageDailySnapshot.js +10 -8
  155. package/src/models/UsageSnapshot.js +10 -8
  156. package/src/models/User.js +185 -168
  157. package/src/models/UserCipherUse.js +12 -10
  158. package/src/models/UserRequest.js +37 -39
  159. package/src/models/WebhookTest.js +26 -24
  160. package/test/Api.test.js +163 -0
  161. package/test/{package.json → integration/package.json} +1 -1
  162. package/test/{src → integration/src}/index.js +1 -1
  163. package/test.sh +2 -1
  164. /package/test/{.babelrc → integration/.babelrc} +0 -0
  165. /package/test/{index.js → integration/index.js} +0 -0
@@ -1,7 +1,9 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import Api from '../Api'
3
3
  import * as errors from '../Errors'
4
- import { getType, isArray, isInt, isObject, isString } from '../utils'
4
+ import {
5
+ getType, isArray, isInt, isObject, isString,
6
+ } from '../utils'
5
7
  /* eslint-enable no-unused-vars */
6
8
 
7
9
  /**
@@ -9,6 +11,7 @@ import { getType, isArray, isInt, isObject, isString } from '../utils'
9
11
  */
10
12
  class UserCipherUse {
11
13
  attributes = {}
14
+
12
15
  options = {}
13
16
 
14
17
  constructor(attributes = {}, options = {}) {
@@ -24,6 +27,7 @@ class UserCipherUse {
24
27
  }
25
28
 
26
29
  isLoaded = () => !!this.attributes.id
30
+
27
31
  // int64 # UserCipherUse ID
28
32
  getId = () => this.attributes.id
29
33
 
@@ -42,27 +46,25 @@ class UserCipherUse {
42
46
  // int64 # ID of the user who performed this access
43
47
  getUserId = () => this.attributes.user_id
44
48
 
45
-
46
49
  // Parameters:
47
50
  // user_id - int64 - User ID. Provide a value of `0` to operate the current session's user.
48
51
  // cursor - string - Used for pagination. When a list request has more records available, cursors are provided in the response headers `X-Files-Cursor-Next` and `X-Files-Cursor-Prev`. Send one of those cursor value here to resume an existing list from the next available record. Note: many of our SDKs have iterator methods that will automatically handle cursor-based pagination.
49
52
  // per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
50
53
  static list = async (params = {}, options = {}) => {
51
- if (params['user_id'] && !isInt(params['user_id'])) {
52
- throw new errors.InvalidParameterError(`Bad parameter: user_id must be of type Int, received ${getType(params['user_id'])}`)
54
+ if (params.user_id && !isInt(params.user_id)) {
55
+ throw new errors.InvalidParameterError(`Bad parameter: user_id must be of type Int, received ${getType(params.user_id)}`)
53
56
  }
54
57
 
55
- if (params['cursor'] && !isString(params['cursor'])) {
56
- throw new errors.InvalidParameterError(`Bad parameter: cursor must be of type String, received ${getType(params['cursor'])}`)
58
+ if (params.cursor && !isString(params.cursor)) {
59
+ throw new errors.InvalidParameterError(`Bad parameter: cursor must be of type String, received ${getType(params.cursor)}`)
57
60
  }
58
61
 
59
- if (params['per_page'] && !isInt(params['per_page'])) {
60
- throw new errors.InvalidParameterError(`Bad parameter: per_page must be of type Int, received ${getType(params['per_page'])}`)
62
+ if (params.per_page && !isInt(params.per_page)) {
63
+ throw new errors.InvalidParameterError(`Bad parameter: per_page must be of type Int, received ${getType(params.per_page)}`)
61
64
  }
62
65
 
63
- const response = await Api.sendRequest(`/user_cipher_uses`, 'GET', params, options)
66
+ const response = await Api.sendRequest('/user_cipher_uses', 'GET', params, options)
64
67
 
65
-
66
68
  return response?.data?.map(obj => new UserCipherUse(obj, options)) || []
67
69
  }
68
70
 
@@ -1,7 +1,9 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import Api from '../Api'
3
3
  import * as errors from '../Errors'
4
- import { getType, isArray, isInt, isObject, isString } from '../utils'
4
+ import {
5
+ getType, isArray, isInt, isObject, isString,
6
+ } from '../utils'
5
7
  /* eslint-enable no-unused-vars */
6
8
 
7
9
  /**
@@ -9,6 +11,7 @@ import { getType, isArray, isInt, isObject, isString } from '../utils'
9
11
  */
10
12
  class UserRequest {
11
13
  attributes = {}
14
+
12
15
  options = {}
13
16
 
14
17
  constructor(attributes = {}, options = {}) {
@@ -24,6 +27,7 @@ class UserRequest {
24
27
  }
25
28
 
26
29
  isLoaded = () => !!this.attributes.id
30
+
27
31
  // int64 # ID
28
32
  getId = () => this.attributes.id
29
33
 
@@ -52,7 +56,6 @@ class UserRequest {
52
56
  this.attributes.details = value
53
57
  }
54
58
 
55
-
56
59
  delete = async (params = {}) => {
57
60
  if (!this.attributes.id) {
58
61
  throw new errors.EmptyPropertyError('Current object has no id')
@@ -63,51 +66,48 @@ class UserRequest {
63
66
  }
64
67
 
65
68
  params.id = this.attributes.id
66
- if (params['id'] && !isInt(params['id'])) {
67
- throw new errors.InvalidParameterError(`Bad parameter: id must be of type Int, received ${getType(params['id'])}`)
69
+ if (params.id && !isInt(params.id)) {
70
+ throw new errors.InvalidParameterError(`Bad parameter: id must be of type Int, received ${getType(params.id)}`)
68
71
  }
69
72
 
70
- if (!params['id']) {
73
+ if (!params.id) {
71
74
  if (this.attributes.id) {
72
- params['id'] = this.id
75
+ params.id = this.id
73
76
  } else {
74
77
  throw new errors.MissingParameterError('Parameter missing: id')
75
78
  }
76
79
  }
77
80
 
78
- const response = await Api.sendRequest(`/user_requests/${encodeURIComponent(params['id'])}`, 'DELETE', params, this.options)
79
-
80
- return
81
+ await Api.sendRequest(`/user_requests/${encodeURIComponent(params.id)}`, 'DELETE', params, this.options)
81
82
  }
82
83
 
83
84
  destroy = (params = {}) =>
84
85
  this.delete(params)
85
86
 
86
87
  save = async () => {
87
- if (this.attributes['id']) {
88
- throw new errors.NotImplementedError('The UserRequest object doesn\'t support updates.')
89
- } else {
90
- const newObject = await UserRequest.create(this.attributes, this.options)
91
- this.attributes = { ...newObject.attributes }
92
- return true
93
- }
88
+ if (this.attributes.id) {
89
+ throw new errors.NotImplementedError('The UserRequest object doesn\'t support updates.')
90
+ } else {
91
+ const newObject = await UserRequest.create(this.attributes, this.options)
92
+ this.attributes = { ...newObject.attributes }
93
+ return true
94
+ }
94
95
  }
95
96
 
96
97
  // Parameters:
97
98
  // cursor - string - Used for pagination. When a list request has more records available, cursors are provided in the response headers `X-Files-Cursor-Next` and `X-Files-Cursor-Prev`. Send one of those cursor value here to resume an existing list from the next available record. Note: many of our SDKs have iterator methods that will automatically handle cursor-based pagination.
98
99
  // per_page - int64 - Number of records to show per page. (Max: 10,000, 1,000 or less is recommended).
99
100
  static list = async (params = {}, options = {}) => {
100
- if (params['cursor'] && !isString(params['cursor'])) {
101
- throw new errors.InvalidParameterError(`Bad parameter: cursor must be of type String, received ${getType(params['cursor'])}`)
101
+ if (params.cursor && !isString(params.cursor)) {
102
+ throw new errors.InvalidParameterError(`Bad parameter: cursor must be of type String, received ${getType(params.cursor)}`)
102
103
  }
103
104
 
104
- if (params['per_page'] && !isInt(params['per_page'])) {
105
- throw new errors.InvalidParameterError(`Bad parameter: per_page must be of type Int, received ${getType(params['per_page'])}`)
105
+ if (params.per_page && !isInt(params.per_page)) {
106
+ throw new errors.InvalidParameterError(`Bad parameter: per_page must be of type Int, received ${getType(params.per_page)}`)
106
107
  }
107
108
 
108
- const response = await Api.sendRequest(`/user_requests`, 'GET', params, options)
109
+ const response = await Api.sendRequest('/user_requests', 'GET', params, options)
109
110
 
110
-
111
111
  return response?.data?.map(obj => new UserRequest(obj, options)) || []
112
112
  }
113
113
 
@@ -121,19 +121,18 @@ class UserRequest {
121
121
  throw new errors.InvalidParameterError(`Bad parameter: params must be of type object, received ${getType(params)}`)
122
122
  }
123
123
 
124
- params['id'] = id
124
+ params.id = id
125
125
 
126
- if (!params['id']) {
126
+ if (!params.id) {
127
127
  throw new errors.MissingParameterError('Parameter missing: id')
128
128
  }
129
129
 
130
- if (params['id'] && !isInt(params['id'])) {
131
- throw new errors.InvalidParameterError(`Bad parameter: id must be of type Int, received ${getType(params['id'])}`)
130
+ if (params.id && !isInt(params.id)) {
131
+ throw new errors.InvalidParameterError(`Bad parameter: id must be of type Int, received ${getType(params.id)}`)
132
132
  }
133
133
 
134
- const response = await Api.sendRequest(`/user_requests/${encodeURIComponent(params['id'])}`, 'GET', params, options)
134
+ const response = await Api.sendRequest(`/user_requests/${encodeURIComponent(params.id)}`, 'GET', params, options)
135
135
 
136
-
137
136
  return new UserRequest(response?.data, options)
138
137
  }
139
138
 
@@ -145,33 +144,32 @@ class UserRequest {
145
144
  // email (required) - string - Email of user requested
146
145
  // details (required) - string - Details of the user request
147
146
  static create = async (params = {}, options = {}) => {
148
- if (!params['name']) {
147
+ if (!params.name) {
149
148
  throw new errors.MissingParameterError('Parameter missing: name')
150
149
  }
151
150
 
152
- if (!params['email']) {
151
+ if (!params.email) {
153
152
  throw new errors.MissingParameterError('Parameter missing: email')
154
153
  }
155
154
 
156
- if (!params['details']) {
155
+ if (!params.details) {
157
156
  throw new errors.MissingParameterError('Parameter missing: details')
158
157
  }
159
158
 
160
- if (params['name'] && !isString(params['name'])) {
161
- throw new errors.InvalidParameterError(`Bad parameter: name must be of type String, received ${getType(params['name'])}`)
159
+ if (params.name && !isString(params.name)) {
160
+ throw new errors.InvalidParameterError(`Bad parameter: name must be of type String, received ${getType(params.name)}`)
162
161
  }
163
162
 
164
- if (params['email'] && !isString(params['email'])) {
165
- throw new errors.InvalidParameterError(`Bad parameter: email must be of type String, received ${getType(params['email'])}`)
163
+ if (params.email && !isString(params.email)) {
164
+ throw new errors.InvalidParameterError(`Bad parameter: email must be of type String, received ${getType(params.email)}`)
166
165
  }
167
166
 
168
- if (params['details'] && !isString(params['details'])) {
169
- throw new errors.InvalidParameterError(`Bad parameter: details must be of type String, received ${getType(params['details'])}`)
167
+ if (params.details && !isString(params.details)) {
168
+ throw new errors.InvalidParameterError(`Bad parameter: details must be of type String, received ${getType(params.details)}`)
170
169
  }
171
170
 
172
- const response = await Api.sendRequest(`/user_requests`, 'POST', params, options)
171
+ const response = await Api.sendRequest('/user_requests', 'POST', params, options)
173
172
 
174
-
175
173
  return new UserRequest(response?.data, options)
176
174
  }
177
175
  }
@@ -1,7 +1,9 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  import Api from '../Api'
3
3
  import * as errors from '../Errors'
4
- import { getType, isArray, isInt, isObject, isString } from '../utils'
4
+ import {
5
+ getType, isArray, isInt, isObject, isString,
6
+ } from '../utils'
5
7
  /* eslint-enable no-unused-vars */
6
8
 
7
9
  /**
@@ -9,6 +11,7 @@ import { getType, isArray, isInt, isObject, isString } from '../utils'
9
11
  */
10
12
  class WebhookTest {
11
13
  attributes = {}
14
+
12
15
  options = {}
13
16
 
14
17
  constructor(attributes = {}, options = {}) {
@@ -24,6 +27,7 @@ class WebhookTest {
24
27
  }
25
28
 
26
29
  isLoaded = () => !!this.attributes.id
30
+
27
31
  // int64 # Status HTTP code
28
32
  getCode = () => this.attributes.code
29
33
 
@@ -129,15 +133,14 @@ class WebhookTest {
129
133
  this.attributes.use_dedicated_ips = value
130
134
  }
131
135
 
132
-
133
136
  save = async () => {
134
- if (this.attributes['id']) {
135
- throw new errors.NotImplementedError('The WebhookTest object doesn\'t support updates.')
136
- } else {
137
- const newObject = await WebhookTest.create(this.attributes, this.options)
138
- this.attributes = { ...newObject.attributes }
139
- return true
140
- }
137
+ if (this.attributes.id) {
138
+ throw new errors.NotImplementedError('The WebhookTest object doesn\'t support updates.')
139
+ } else {
140
+ const newObject = await WebhookTest.create(this.attributes, this.options)
141
+ this.attributes = { ...newObject.attributes }
142
+ return true
143
+ }
141
144
  }
142
145
 
143
146
  // Parameters:
@@ -152,37 +155,36 @@ class WebhookTest {
152
155
  // action - string - action for test body
153
156
  // use_dedicated_ips - boolean - Use dedicated IPs for sending the webhook?
154
157
  static create = async (params = {}, options = {}) => {
155
- if (!params['url']) {
158
+ if (!params.url) {
156
159
  throw new errors.MissingParameterError('Parameter missing: url')
157
160
  }
158
161
 
159
- if (params['url'] && !isString(params['url'])) {
160
- throw new errors.InvalidParameterError(`Bad parameter: url must be of type String, received ${getType(params['url'])}`)
162
+ if (params.url && !isString(params.url)) {
163
+ throw new errors.InvalidParameterError(`Bad parameter: url must be of type String, received ${getType(params.url)}`)
161
164
  }
162
165
 
163
- if (params['method'] && !isString(params['method'])) {
164
- throw new errors.InvalidParameterError(`Bad parameter: method must be of type String, received ${getType(params['method'])}`)
166
+ if (params.method && !isString(params.method)) {
167
+ throw new errors.InvalidParameterError(`Bad parameter: method must be of type String, received ${getType(params.method)}`)
165
168
  }
166
169
 
167
- if (params['encoding'] && !isString(params['encoding'])) {
168
- throw new errors.InvalidParameterError(`Bad parameter: encoding must be of type String, received ${getType(params['encoding'])}`)
170
+ if (params.encoding && !isString(params.encoding)) {
171
+ throw new errors.InvalidParameterError(`Bad parameter: encoding must be of type String, received ${getType(params.encoding)}`)
169
172
  }
170
173
 
171
- if (params['raw_body'] && !isString(params['raw_body'])) {
172
- throw new errors.InvalidParameterError(`Bad parameter: raw_body must be of type String, received ${getType(params['raw_body'])}`)
174
+ if (params.raw_body && !isString(params.raw_body)) {
175
+ throw new errors.InvalidParameterError(`Bad parameter: raw_body must be of type String, received ${getType(params.raw_body)}`)
173
176
  }
174
177
 
175
- if (params['file_form_field'] && !isString(params['file_form_field'])) {
176
- throw new errors.InvalidParameterError(`Bad parameter: file_form_field must be of type String, received ${getType(params['file_form_field'])}`)
178
+ if (params.file_form_field && !isString(params.file_form_field)) {
179
+ throw new errors.InvalidParameterError(`Bad parameter: file_form_field must be of type String, received ${getType(params.file_form_field)}`)
177
180
  }
178
181
 
179
- if (params['action'] && !isString(params['action'])) {
180
- throw new errors.InvalidParameterError(`Bad parameter: action must be of type String, received ${getType(params['action'])}`)
182
+ if (params.action && !isString(params.action)) {
183
+ throw new errors.InvalidParameterError(`Bad parameter: action must be of type String, received ${getType(params.action)}`)
181
184
  }
182
185
 
183
- const response = await Api.sendRequest(`/webhook_tests`, 'POST', params, options)
186
+ const response = await Api.sendRequest('/webhook_tests', 'POST', params, options)
184
187
 
185
-
186
188
  return new WebhookTest(response?.data, options)
187
189
  }
188
190
  }
@@ -0,0 +1,163 @@
1
+ import nock from 'nock'
2
+
3
+ import {
4
+ FilesError,
5
+ NotAuthenticated_LockoutRegionMismatchError,
6
+ NotFound_FolderNotFoundError,
7
+ } from '../lib/Errors'
8
+ import Files from '../lib/Files'
9
+ import ApiKey from '../lib/models/ApiKey'
10
+ import Folder from '../lib/models/Folder'
11
+
12
+ const API_URL = 'http://example.test'
13
+ Files.setBaseUrl(API_URL)
14
+ Files.setApiKey('test-key')
15
+
16
+ describe('API client', () => {
17
+ it('lists API keys', () => {
18
+ const params = { user_id: 1 }
19
+ nock(API_URL)
20
+ .get('/api/rest/v1/api_keys')
21
+ .query(params)
22
+ .reply(200, [{
23
+ id: 1,
24
+ name: 'test1',
25
+ }, {
26
+ id: 2,
27
+ name: 'test2',
28
+ }])
29
+
30
+ return ApiKey.list(params)
31
+ .then(items => {
32
+ expect(items.length).toBe(2)
33
+ expect(items[0].name).toBe('test1')
34
+ expect(items[0].id).toBe(1)
35
+ expect(items[1].name).toBe('test2')
36
+ expect(items[1].id).toBe(2)
37
+ })
38
+ })
39
+
40
+ it('creates an API key', () => {
41
+ nock(API_URL)
42
+ .post('/api/rest/v1/api_keys')
43
+ .reply(201, {
44
+ id: 123,
45
+ name: 'testing',
46
+ })
47
+
48
+ return ApiKey.create({ name: 'testing' })
49
+ .then(apiKey => {
50
+ expect(apiKey.name).toBe('testing')
51
+ expect(apiKey.id).toBe(123)
52
+ })
53
+ })
54
+
55
+ it('updates an API key', () => {
56
+ nock(API_URL)
57
+ .patch('/api/rest/v1/api_keys/123', {
58
+ id: 123,
59
+ name: 'testing123',
60
+ })
61
+ .reply(200, {
62
+ id: 123,
63
+ name: 'testing123',
64
+ })
65
+
66
+ const apiKey = new ApiKey({ id: 123 })
67
+ apiKey.setName('testing123')
68
+ return apiKey.save()
69
+ .then(() => {
70
+ expect(apiKey.getName()).toBe('testing123')
71
+ expect(apiKey.getId()).toBe(123)
72
+ })
73
+ })
74
+
75
+ it('deletes an API key', () => {
76
+ nock(API_URL)
77
+ .delete('/api/rest/v1/api_keys/123')
78
+ .reply(204)
79
+
80
+ const apiKey = new ApiKey({ id: 123 })
81
+ return apiKey.delete()
82
+ })
83
+
84
+ it('handles empty response', () => {
85
+ const params = { user_id: 1 }
86
+ nock(API_URL)
87
+ .get('/api/rest/v1/api_keys')
88
+ .query(params)
89
+ .reply(200, [])
90
+
91
+ return ApiKey.list(params)
92
+ .then(items => {
93
+ expect(items.length).toBe(0)
94
+ })
95
+ })
96
+
97
+ it('handles not found', () => {
98
+ nock(API_URL)
99
+ .get('/api/rest/v1/folders/missing')
100
+ .query(true)
101
+ .reply(404, {
102
+ error: 'Folder missing not found.',
103
+ 'http-code': 404,
104
+ title: 'Folder Not Found',
105
+ type: 'not-found/folder-not-found',
106
+ })
107
+
108
+ return Folder.listFor('missing')
109
+ .then(() => {
110
+ throw new Error('Missing folder did not throw an error')
111
+ })
112
+ .catch(error => {
113
+ expect(error).toBeInstanceOf(NotFound_FolderNotFoundError)
114
+ expect(error.error).toBe('Folder missing not found.')
115
+ expect(error.httpCode).toBe(404)
116
+ expect(error.title).toBe('Folder Not Found')
117
+ expect(error.type).toBe('not-found/folder-not-found')
118
+ })
119
+ })
120
+
121
+ it('handles bad gateway', () => {
122
+ nock(API_URL)
123
+ .get('/api/rest/v1/api_keys')
124
+ .reply(502, '<html><head><title>502 Bad Gateway</title></head><body><center><h1>502 Bad Gateway</h1></center><hr><center>files.com</center></body></html>')
125
+
126
+ return ApiKey.list()
127
+ .then(() => {
128
+ throw new Error('Missing folder did not throw an error')
129
+ })
130
+ .catch(error => {
131
+ expect(error).toBeInstanceOf(FilesError)
132
+ expect(error.code).toBe(502)
133
+ })
134
+ })
135
+
136
+ it('handles region mismatch', () => {
137
+ nock(API_URL)
138
+ .get('/api/rest/v1/folders/test')
139
+ .query(true)
140
+ .reply(401, {
141
+ data: {
142
+ host: 'test.host',
143
+ },
144
+ error: 'Your account must login using a different server, test.host.',
145
+ 'http-code': 401,
146
+ title: 'Lockout Region Mismatch',
147
+ type: 'not-authenticated/lockout-region-mismatch',
148
+ })
149
+
150
+ return Folder.listFor('test')
151
+ .then(() => {
152
+ throw new Error('Missing folder did not throw an error')
153
+ })
154
+ .catch(error => {
155
+ expect(error).toBeInstanceOf(NotAuthenticated_LockoutRegionMismatchError)
156
+ expect(error.error).toBe('Your account must login using a different server, test.host.')
157
+ expect(error.httpCode).toBe(401)
158
+ expect(error.title).toBe('Lockout Region Mismatch')
159
+ expect(error.type).toBe('not-authenticated/lockout-region-mismatch')
160
+ expect(error.data.host).toBe('test.host')
161
+ })
162
+ })
163
+ })
@@ -7,7 +7,7 @@
7
7
  "license": "ISC",
8
8
  "dependencies": {
9
9
  "@babel/runtime": "^7.10.3",
10
- "files.com": "file:../",
10
+ "files.com": "file:../../",
11
11
  "readable-stream": "^3.6.0",
12
12
  "tiny-invariant": "^1.3.1"
13
13
  },
@@ -71,7 +71,7 @@ const testSuite = async () => {
71
71
  }
72
72
 
73
73
  const testUploadAndDownloadToFile = async () => {
74
- const sourceFilePath = '../files.com-logo.png'
74
+ const sourceFilePath = '../../files.com-logo.png'
75
75
 
76
76
  const displayName = `files.com-logo__${nonce}.png`
77
77
  const destinationPath = `${SDK_TEST_ROOT_FOLDER}/${displayName}`
package/test.sh CHANGED
@@ -7,5 +7,6 @@ cd "$(dirname "$0")"
7
7
 
8
8
  # Install dependencies
9
9
  npm install
10
- npm run lint
10
+ npm run lint && \
11
+ npm run build && \
11
12
  npm run test
File without changes
File without changes