connectwise-rest 0.23.3 → 1.0.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 (288) hide show
  1. package/.eslintrc +19 -52
  2. package/.gitattributes +1 -0
  3. package/.github/workflows/codeql-analysis.yml +70 -0
  4. package/.github/workflows/node.js.yml +42 -0
  5. package/.mocharc.json +5 -0
  6. package/.prettierrc +7 -0
  7. package/.travis.yml +4 -2
  8. package/README.md +243 -230
  9. package/api-extractor.json +364 -0
  10. package/dist/Automate/AVTemplatePoliciesAPI.d.ts +27 -0
  11. package/dist/Automate/AVTemplatePoliciesAPI.d.ts.map +1 -0
  12. package/dist/Automate/AVTemplatePoliciesAPI.js +87 -0
  13. package/dist/Automate/AVTemplatePoliciesAPI.js.map +1 -0
  14. package/dist/Automate/ClientsAPI.d.ts +34 -0
  15. package/dist/Automate/ClientsAPI.d.ts.map +1 -0
  16. package/dist/Automate/ClientsAPI.js +114 -0
  17. package/dist/Automate/ClientsAPI.js.map +1 -0
  18. package/dist/Automate/CommandsAPI.d.ts +15 -0
  19. package/dist/Automate/CommandsAPI.d.ts.map +1 -0
  20. package/dist/Automate/CommandsAPI.js +31 -0
  21. package/dist/Automate/CommandsAPI.js.map +1 -0
  22. package/dist/Automate/ComputersAPI.d.ts +94 -0
  23. package/dist/Automate/ComputersAPI.d.ts.map +1 -0
  24. package/dist/Automate/ComputersAPI.js +353 -0
  25. package/dist/Automate/ComputersAPI.js.map +1 -0
  26. package/dist/Automate/ContactsAPI.d.ts +18 -0
  27. package/dist/Automate/ContactsAPI.d.ts.map +1 -0
  28. package/dist/Automate/ContactsAPI.js +45 -0
  29. package/dist/Automate/ContactsAPI.js.map +1 -0
  30. package/dist/Automate/DataViewsAPI.d.ts +16 -0
  31. package/dist/Automate/DataViewsAPI.d.ts.map +1 -0
  32. package/dist/Automate/DataViewsAPI.js +31 -0
  33. package/dist/Automate/DataViewsAPI.js.map +1 -0
  34. package/dist/Automate/DrivesAPI.d.ts +19 -0
  35. package/dist/Automate/DrivesAPI.d.ts.map +1 -0
  36. package/dist/Automate/DrivesAPI.js +52 -0
  37. package/dist/Automate/DrivesAPI.js.map +1 -0
  38. package/dist/Automate/EventLogsAPI.d.ts +14 -0
  39. package/dist/Automate/EventLogsAPI.d.ts.map +1 -0
  40. package/dist/Automate/EventLogsAPI.js +24 -0
  41. package/dist/Automate/EventLogsAPI.js.map +1 -0
  42. package/dist/Automate/LocationsAPI.d.ts +42 -0
  43. package/dist/Automate/LocationsAPI.d.ts.map +1 -0
  44. package/dist/Automate/LocationsAPI.js +133 -0
  45. package/dist/Automate/LocationsAPI.js.map +1 -0
  46. package/dist/Automate/MaintenanceWindowDefinitionsAPI.d.ts +14 -0
  47. package/dist/Automate/MaintenanceWindowDefinitionsAPI.d.ts.map +1 -0
  48. package/dist/Automate/MaintenanceWindowDefinitionsAPI.js +24 -0
  49. package/dist/Automate/MaintenanceWindowDefinitionsAPI.js.map +1 -0
  50. package/dist/Automate/MonitorsAPI.d.ts +23 -0
  51. package/dist/Automate/MonitorsAPI.d.ts.map +1 -0
  52. package/dist/Automate/MonitorsAPI.js +80 -0
  53. package/dist/Automate/MonitorsAPI.js.map +1 -0
  54. package/dist/Automate/NetworkDevicesAPI.d.ts +17 -0
  55. package/dist/Automate/NetworkDevicesAPI.d.ts.map +1 -0
  56. package/dist/Automate/NetworkDevicesAPI.js +38 -0
  57. package/dist/Automate/NetworkDevicesAPI.js.map +1 -0
  58. package/dist/Automate/PatchingAPI.d.ts +27 -0
  59. package/dist/Automate/PatchingAPI.d.ts.map +1 -0
  60. package/dist/Automate/PatchingAPI.js +94 -0
  61. package/dist/Automate/PatchingAPI.js.map +1 -0
  62. package/dist/Automate/RemoteAgentAPI.d.ts +18 -0
  63. package/dist/Automate/RemoteAgentAPI.d.ts.map +1 -0
  64. package/dist/Automate/RemoteAgentAPI.js +45 -0
  65. package/dist/Automate/RemoteAgentAPI.js.map +1 -0
  66. package/dist/Automate/ScriptingAPI.d.ts +32 -0
  67. package/dist/Automate/ScriptingAPI.d.ts.map +1 -0
  68. package/dist/Automate/ScriptingAPI.js +104 -0
  69. package/dist/Automate/ScriptingAPI.js.map +1 -0
  70. package/dist/Automate/SearchesAPI.d.ts +17 -0
  71. package/dist/Automate/SearchesAPI.d.ts.map +1 -0
  72. package/dist/Automate/SearchesAPI.js +38 -0
  73. package/dist/Automate/SearchesAPI.js.map +1 -0
  74. package/dist/Automate/SystemAPI.d.ts +72 -0
  75. package/dist/Automate/SystemAPI.d.ts.map +1 -0
  76. package/dist/Automate/SystemAPI.js +268 -0
  77. package/dist/Automate/SystemAPI.js.map +1 -0
  78. package/dist/Automate/TicketsAPI.d.ts +10 -0
  79. package/dist/Automate/TicketsAPI.d.ts.map +1 -0
  80. package/dist/Automate/TicketsAPI.js +24 -0
  81. package/dist/Automate/TicketsAPI.js.map +1 -0
  82. package/dist/Automate/UserProfilesAPI.d.ts +14 -0
  83. package/dist/Automate/UserProfilesAPI.d.ts.map +1 -0
  84. package/dist/Automate/UserProfilesAPI.js +23 -0
  85. package/dist/Automate/UserProfilesAPI.js.map +1 -0
  86. package/dist/Automate.d.ts +48 -0
  87. package/dist/Automate.d.ts.map +1 -0
  88. package/dist/Automate.js +167 -0
  89. package/dist/Automate.js.map +1 -0
  90. package/dist/AutomateAPI.d.ts +96 -0
  91. package/dist/AutomateAPI.d.ts.map +1 -0
  92. package/dist/AutomateAPI.js +168 -0
  93. package/dist/AutomateAPI.js.map +1 -0
  94. package/dist/AutomateTypes.d.ts +10437 -0
  95. package/dist/AutomateTypes.d.ts.map +1 -0
  96. package/dist/AutomateTypes.js +3 -0
  97. package/dist/AutomateTypes.js.map +1 -0
  98. package/dist/BaseAPI.d.ts +13 -0
  99. package/dist/BaseAPI.d.ts.map +1 -0
  100. package/dist/BaseAPI.js +53 -0
  101. package/dist/BaseAPI.js.map +1 -0
  102. package/dist/Manage/CompanyAPI.d.ts +573 -0
  103. package/dist/Manage/CompanyAPI.d.ts.map +1 -0
  104. package/dist/Manage/CompanyAPI.js +3294 -0
  105. package/dist/Manage/CompanyAPI.js.map +1 -0
  106. package/dist/Manage/ConfigurationsAPI.d.ts +24 -0
  107. package/dist/Manage/ConfigurationsAPI.d.ts.map +1 -0
  108. package/dist/Manage/ConfigurationsAPI.js +73 -0
  109. package/dist/Manage/ConfigurationsAPI.js.map +1 -0
  110. package/dist/Manage/ExpenseAPI.d.ts +68 -0
  111. package/dist/Manage/ExpenseAPI.d.ts.map +1 -0
  112. package/dist/Manage/ExpenseAPI.js +306 -0
  113. package/dist/Manage/ExpenseAPI.js.map +1 -0
  114. package/dist/Manage/FinanceAPI.d.ts +460 -0
  115. package/dist/Manage/FinanceAPI.d.ts.map +1 -0
  116. package/dist/Manage/FinanceAPI.js +2587 -0
  117. package/dist/Manage/FinanceAPI.js.map +1 -0
  118. package/dist/Manage/MarketingAPI.d.ts +120 -0
  119. package/dist/Manage/MarketingAPI.d.ts.map +1 -0
  120. package/dist/Manage/MarketingAPI.js +629 -0
  121. package/dist/Manage/MarketingAPI.js.map +1 -0
  122. package/dist/Manage/ProcurementAPI.d.ts +373 -0
  123. package/dist/Manage/ProcurementAPI.d.ts.map +1 -0
  124. package/dist/Manage/ProcurementAPI.js +2098 -0
  125. package/dist/Manage/ProcurementAPI.js.map +1 -0
  126. package/dist/Manage/ProjectAPI.d.ts +179 -0
  127. package/dist/Manage/ProjectAPI.d.ts.map +1 -0
  128. package/dist/Manage/ProjectAPI.js +940 -0
  129. package/dist/Manage/ProjectAPI.js.map +1 -0
  130. package/dist/Manage/SalesAPI.d.ts +254 -0
  131. package/dist/Manage/SalesAPI.d.ts.map +1 -0
  132. package/dist/Manage/SalesAPI.js +1392 -0
  133. package/dist/Manage/SalesAPI.js.map +1 -0
  134. package/dist/Manage/ScheduleAPI.d.ts +111 -0
  135. package/dist/Manage/ScheduleAPI.d.ts.map +1 -0
  136. package/dist/Manage/ScheduleAPI.js +575 -0
  137. package/dist/Manage/ScheduleAPI.js.map +1 -0
  138. package/dist/Manage/ServiceAPI.d.ts +419 -0
  139. package/dist/Manage/ServiceAPI.d.ts.map +1 -0
  140. package/dist/Manage/ServiceAPI.js +2334 -0
  141. package/dist/Manage/ServiceAPI.js.map +1 -0
  142. package/dist/Manage/SystemAPI.d.ts +809 -0
  143. package/dist/Manage/SystemAPI.d.ts.map +1 -0
  144. package/dist/Manage/SystemAPI.js +4531 -0
  145. package/dist/Manage/SystemAPI.js.map +1 -0
  146. package/dist/Manage/TimeAPI.d.ts +157 -0
  147. package/dist/Manage/TimeAPI.d.ts.map +1 -0
  148. package/dist/Manage/TimeAPI.js +835 -0
  149. package/dist/Manage/TimeAPI.js.map +1 -0
  150. package/dist/Manage.d.ts +34 -0
  151. package/dist/Manage.d.ts.map +1 -0
  152. package/dist/Manage.js +127 -0
  153. package/dist/Manage.js.map +1 -0
  154. package/dist/ManageAPI.d.ts +99 -0
  155. package/dist/ManageAPI.d.ts.map +1 -0
  156. package/dist/ManageAPI.js +112 -0
  157. package/dist/ManageAPI.js.map +1 -0
  158. package/dist/ManageTypes.d.ts +91320 -0
  159. package/dist/ManageTypes.d.ts.map +1 -0
  160. package/dist/ManageTypes.js +7 -0
  161. package/dist/ManageTypes.js.map +1 -0
  162. package/dist/index.d.ts +9 -0
  163. package/dist/index.d.ts.map +1 -0
  164. package/dist/index.js +38 -0
  165. package/dist/index.js.map +1 -0
  166. package/dist/types.d.ts +46 -0
  167. package/dist/types.d.ts.map +1 -0
  168. package/dist/types.js +21 -0
  169. package/dist/types.js.map +1 -0
  170. package/dist/utils/Callback.d.ts +67 -0
  171. package/dist/utils/Callback.d.ts.map +1 -0
  172. package/dist/utils/Callback.js +109 -0
  173. package/dist/utils/Callback.js.map +1 -0
  174. package/dist/utils/Series.d.ts +36 -0
  175. package/dist/utils/Series.d.ts.map +1 -0
  176. package/dist/utils/Series.js +64 -0
  177. package/dist/utils/Series.js.map +1 -0
  178. package/dist/utils/index.d.ts +7 -0
  179. package/dist/utils/index.d.ts.map +1 -0
  180. package/dist/utils/index.js +11 -0
  181. package/dist/utils/index.js.map +1 -0
  182. package/generator/automate-generator.js +75 -0
  183. package/generator/automate-json.js +61 -0
  184. package/generator/automate-types.js +15 -0
  185. package/generator/generator.d.ts +67 -0
  186. package/generator/generator.js +255 -0
  187. package/generator/manage-generator.js +71 -0
  188. package/generator/manage-types.js +14 -0
  189. package/package.json +48 -21
  190. package/src/Automate/AVTemplatePoliciesAPI.ts +114 -0
  191. package/src/Automate/ClientsAPI.ts +161 -0
  192. package/src/Automate/CommandsAPI.ts +33 -0
  193. package/src/Automate/ComputersAPI.ts +550 -0
  194. package/src/Automate/ContactsAPI.ts +56 -0
  195. package/src/Automate/DataViewsAPI.ts +36 -0
  196. package/src/Automate/DrivesAPI.ts +74 -0
  197. package/src/Automate/EventLogsAPI.ts +25 -0
  198. package/src/Automate/LocationsAPI.ts +206 -0
  199. package/src/Automate/MaintenanceWindowDefinitionsAPI.ts +28 -0
  200. package/src/Automate/MonitorsAPI.ts +94 -0
  201. package/src/Automate/NetworkDevicesAPI.ts +44 -0
  202. package/src/Automate/PatchingAPI.ts +109 -0
  203. package/src/Automate/RemoteAgentAPI.ts +58 -0
  204. package/src/Automate/ScriptingAPI.ts +137 -0
  205. package/src/Automate/SearchesAPI.ts +42 -0
  206. package/src/Automate/SystemAPI.ts +386 -0
  207. package/src/Automate/TicketsAPI.ts +24 -0
  208. package/src/Automate/UserProfilesAPI.ts +25 -0
  209. package/src/Automate.ts +216 -0
  210. package/src/AutomateAPI.ts +144 -0
  211. package/src/AutomateTypes.ts +10492 -0
  212. package/src/BaseAPI.ts +83 -0
  213. package/src/Manage/CompanyAPI.ts +4851 -0
  214. package/src/Manage/ConfigurationsAPI.ts +107 -0
  215. package/src/Manage/ExpenseAPI.ts +395 -0
  216. package/src/Manage/FinanceAPI.ts +3851 -0
  217. package/src/Manage/MarketingAPI.ts +935 -0
  218. package/src/Manage/ProcurementAPI.ts +3044 -0
  219. package/src/Manage/ProjectAPI.ts +1400 -0
  220. package/src/Manage/SalesAPI.ts +1922 -0
  221. package/src/Manage/ScheduleAPI.ts +751 -0
  222. package/src/Manage/ServiceAPI.ts +3401 -0
  223. package/src/Manage/SystemAPI.ts +6269 -0
  224. package/src/Manage/TimeAPI.ts +1121 -0
  225. package/src/Manage.ts +152 -0
  226. package/src/ManageAPI.ts +133 -0
  227. package/src/ManageTypes.ts +91318 -0
  228. package/src/index.ts +18 -0
  229. package/src/types.ts +66 -0
  230. package/src/utils/Callback.ts +145 -0
  231. package/src/utils/Series.ts +83 -0
  232. package/src/utils/index.ts +7 -0
  233. package/swagger-errors.md +30 -0
  234. package/test/.env.example +12 -4
  235. package/test/test-utils.ts +27 -0
  236. package/test/test.ts +320 -0
  237. package/tsconfig.json +29 -0
  238. package/doc.md +0 -5984
  239. package/docs/jsdoc.json +0 -15
  240. package/index.js +0 -10
  241. package/src/CompanyAPI/Companies.js +0 -149
  242. package/src/CompanyAPI/CompanyCompanyTypeAssociations.js +0 -111
  243. package/src/CompanyAPI/CompanySites.js +0 -70
  244. package/src/CompanyAPI/CompanyTeams.js +0 -108
  245. package/src/CompanyAPI/CompanyTypeInfos.js +0 -58
  246. package/src/CompanyAPI/CompanyTypes.js +0 -52
  247. package/src/CompanyAPI/Configurations.js +0 -152
  248. package/src/CompanyAPI/ContactContactTypeAssociations.js +0 -55
  249. package/src/CompanyAPI/ContactRelationships.js +0 -36
  250. package/src/CompanyAPI/Contacts.js +0 -199
  251. package/src/CompanyAPI/index.js +0 -53
  252. package/src/ConnectWise.js +0 -339
  253. package/src/ConnectWiseRest.js +0 -512
  254. package/src/FinanceAPI/Additions.js +0 -127
  255. package/src/FinanceAPI/Adjustments.js +0 -109
  256. package/src/FinanceAPI/AgreementSites.js +0 -108
  257. package/src/FinanceAPI/Agreements.js +0 -220
  258. package/src/FinanceAPI/BoardDefaults.js +0 -109
  259. package/src/FinanceAPI/WorkRoles.js +0 -113
  260. package/src/FinanceAPI/WorkTypeExclusions.js +0 -78
  261. package/src/FinanceAPI/WorkTypes.js +0 -124
  262. package/src/FinanceAPI/index.js +0 -50
  263. package/src/ProjectAPI/Projects.js +0 -142
  264. package/src/ProjectAPI/index.js +0 -28
  265. package/src/SalesAPI/Activities.js +0 -149
  266. package/src/SalesAPI/index.js +0 -14
  267. package/src/ScheduleAPI/ScheduleEntries.js +0 -109
  268. package/src/ScheduleAPI/ScheduleTypes.js +0 -101
  269. package/src/ScheduleAPI/index.js +0 -30
  270. package/src/ServiceDeskAPI/BoardItems.js +0 -134
  271. package/src/ServiceDeskAPI/BoardSubTypes.js +0 -112
  272. package/src/ServiceDeskAPI/BoardTeams.js +0 -108
  273. package/src/ServiceDeskAPI/BoardTypes.js +0 -139
  274. package/src/ServiceDeskAPI/Boards.js +0 -100
  275. package/src/ServiceDeskAPI/Priorities.js +0 -47
  276. package/src/ServiceDeskAPI/ServiceNotes.js +0 -172
  277. package/src/ServiceDeskAPI/Statuses.js +0 -116
  278. package/src/ServiceDeskAPI/Tickets.js +0 -588
  279. package/src/ServiceDeskAPI/index.js +0 -53
  280. package/src/SystemAPI/Members.js +0 -139
  281. package/src/SystemAPI/Reports.js +0 -116
  282. package/src/SystemAPI/index.js +0 -32
  283. package/src/TimeAPI/TimeEntries.js +0 -121
  284. package/src/TimeAPI/index.js +0 -27
  285. package/src/utils/Callback.js +0 -125
  286. package/src/utils/Series.js +0 -64
  287. package/src/utils/index.js +0 -21
  288. package/test/test.js +0 -114
@@ -1,339 +0,0 @@
1
- /**
2
- * Created by kevin on 12/20/2015
3
- * @author kgrube
4
- */
5
-
6
- /**
7
- * @private
8
- */
9
- const request = require('request');
10
- const promiseRetry = require('promise-retry');
11
-
12
- /**
13
- * @const {string} DEFAULTS.apiPath
14
- * @const {string} DEFAULTS.apiVersion
15
- */
16
- const DEFAULTS = {
17
- apiPath: '/apis/3.0',
18
- };
19
-
20
- /**
21
- * @property {CWOptions} options
22
- * @constructor
23
- */
24
- function ConnectWise(options) {
25
- this.options = options;
26
-
27
- if (!options) {
28
- throw new Error('Options must be defined');
29
- }
30
-
31
- if (!options.companyId) {
32
- throw new Error('companyId must be defined');
33
- }
34
-
35
- if (!options.publicKey) {
36
- throw new Error('publicKey must be defined');
37
- }
38
-
39
- if (!options.privateKey) {
40
- throw new Error('privateKey must be defined');
41
- }
42
-
43
- if (!options.companyUrl) {
44
- throw new Error('companyUrl must be defined');
45
- }
46
-
47
- if (!options.entryPoint) {
48
- options.entryPoint = 'v4_6_release';
49
- }
50
-
51
- if (!options.timeout) {
52
- options.timeout = 20000;
53
- }
54
-
55
- if (!options.apiVersion) {
56
- options.apiVersion = '3.0.0';
57
- }
58
-
59
- if (!options.retry) {
60
- options.retry = false;
61
- }
62
-
63
- if (!options.retryOptions) {
64
- options.retryOptions = Object.assign({
65
- retries: 4,
66
- minTimeout: 50,
67
- maxTimeout: options.timeout,
68
- randomize: true,
69
- }, options.retryOptions);
70
- }
71
-
72
- if (!options.debug) {
73
- options.debug = !!process.env.CW_REST_DEBUG;
74
- }
75
-
76
- if (typeof options.logger === 'undefined') {
77
- options.logger = (level, text, meta) => {
78
- switch (level) {
79
- case 'error':
80
- console.error(`${level}: ${text}`, meta);
81
- return;
82
- case 'info': {
83
- if (options.debug) {
84
- console.info(`${level}: ${text}`, meta);
85
- }
86
- return;
87
- }
88
- default:
89
- console.log(`${level}: ${text}`, meta);
90
- return;
91
- }
92
- };
93
- }
94
-
95
- this.config = {};
96
-
97
- this.config.companyId = options.companyId;
98
- this.config.companyUrl = options.companyUrl;
99
- this.config.apiUrl = `https://${options.companyUrl}/${options.entryPoint}${DEFAULTS.apiPath}`;
100
- this.config.apiVersion = options.apiVersion;
101
- this.config.publicKey = options.publicKey;
102
- this.config.privateKey = options.privateKey;
103
- this.config.clientId = options.clientId;
104
- this.config.authRaw = `${options.companyId}+${options.publicKey}:${options.privateKey}`;
105
- this.config.auth = `Basic ${Buffer.from(this.config.authRaw).toString('base64')}`;
106
- this.config.timeout = options.timeout;
107
- this.config.retry = options.retry;
108
- this.config.retryOptions = options.retryOptions;
109
- this.config.debug = options.debug;
110
- this.config.logger = options.logger;
111
- }
112
-
113
- /**
114
- *
115
- * @param {string} path API method path or full URL to perform method upon
116
- * @param {string} method HTTP method, GET, POST, PUT, PATCH, DELETE
117
- * @param {object} [params] if required by route, include required params
118
- * if a GET request, the params are joined into a string
119
- * if a POST/PUT/PATCH, the params are included in the body
120
- * @returns {Promise<*>}
121
- */
122
- ConnectWise.prototype.api = function (path, method, params) {
123
- const retryCodes = ['ECONNRESET', 'ETIMEDOUT', 'ESOCKETTIMEDOUT'];
124
-
125
- const config = this.config;
126
- let startTime = Date.now();
127
-
128
- // if retries are enabled
129
- if (config.retry) {
130
- return promiseRetry((retry, number) => {
131
- // use retry promises
132
- return apiPromise(path, method, params, config)
133
- .catch(err => {
134
- if (config.debug) {
135
- config.logger('warn',
136
- `${method} ${path} ${Date.now() - startTime}ms error occurred: ${err.code}, retry=${number}, params=${JSON.stringify(
137
- params)}`,
138
- err);
139
- }
140
- startTime = Date.now();
141
- if (retryCodes.indexOf(err.code) >= 0) {
142
- return retry(err);
143
- }
144
- throw err;
145
- });
146
- }, config.retryOptions)
147
- .then(res => {
148
- if (config.debug) {
149
- config.logger('info', `${method} ${path} ${Date.now() - startTime}ms params=${JSON.stringify(params)}`);
150
- }
151
- return res;
152
- })
153
- .catch(err => {
154
- if (config.debug) {
155
- config.logger('error',
156
- `${method} ${path} ${Date.now() - startTime}ms error occurred: ${err.code}, params=${JSON.stringify(params)}`,
157
- err);
158
- }
159
- throw err;
160
- });
161
-
162
- // retries are not enabled
163
- } else {
164
- return apiPromise(path, method, params, config)
165
- .then(res => {
166
- if (config.debug) {
167
- config.logger('info', `${method} ${path} ${Date.now() - startTime}ms params=${JSON.stringify(params)}`);
168
- }
169
- return res;
170
- })
171
- .catch(err => {
172
- if (config.debug) {
173
- config.logger('error', `${method} ${path} ${Date.now() - startTime}ms params=${JSON.stringify(params)}`, err);
174
- }
175
- throw err;
176
- });
177
- }
178
- };
179
-
180
- function apiPromise(path, method, params, config) {
181
- return new Promise((resolve, reject) => {
182
- if (!path) {
183
- return reject(new Error('path must be defined'));
184
- }
185
- if (!method) {
186
- return reject(new Error('method must be defined'));
187
- }
188
-
189
- const options = {
190
- url: config.apiUrl + path,
191
- headers: {
192
- 'Accept': `application/vnd.connectwise.com+json; version=${config.apiVersion}, application/json`,
193
- 'Cache-Control': 'no-cache',
194
- 'Authorization': config.auth,
195
- },
196
- method: method,
197
- timeout: config.timeout,
198
- gzip: true,
199
- };
200
-
201
- if (config.clientId) {
202
- options.headers.clientid = config.clientId;
203
- }
204
-
205
- //@TODO perform URL validation here
206
- if (path.match(/http:\/\//i) || path.match(/https:\/\//i)) {
207
- options.url = path;
208
- }
209
-
210
- if (method === 'GET' && params) {
211
- options.url += parameterize(params);
212
- }
213
-
214
- if (method === 'POST' || method === 'PUT' || method === 'PATCH') {
215
- options.headers['Content-Type'] = 'application/json';
216
- options.body = JSON.stringify(params);
217
- }
218
-
219
- request(options, (err, res) => {
220
- if (err) {
221
- return reject({
222
- code: err.code,
223
- message: err.message,
224
- errors: [err],
225
- });
226
- } else {
227
- if (method === 'DELETE' && res.body === '' || method === 'POST' && res.statusCode === 204) {
228
- /** @type DeleteResponse */
229
- return resolve({});
230
- } else {
231
- try {
232
- const body = JSON.parse(res.body);
233
- if (body.code) {
234
- return reject(body);
235
- } else {
236
- return resolve(body);
237
- }
238
- } catch (e) {
239
- return reject({
240
- code: 'EPARSE',
241
- message: 'Error parsing response from server.',
242
- errors: [e],
243
- });
244
- }
245
- }
246
- }
247
- });
248
- });
249
- }
250
-
251
- /**
252
- * Wrap a module's function to get all results.
253
- * @param {function} fn
254
- * @param {object[]} args
255
- * @param {object} module
256
- * @param {string|number} [pageSize] defaults to 1000
257
- * @param {string|number} [startPage] defaults to 1
258
- * @returns {Promise<*>}
259
- */
260
- ConnectWise.prototype.paginate = function (fn, args, module, pageSize, startPage) {
261
- return new Promise((resolve, reject) => {
262
- let results = [];
263
-
264
- let page = startPage;
265
- if (startPage === undefined || startPage < 1) {
266
- page = 1;
267
- }
268
-
269
- if (pageSize === undefined) {
270
- pageSize = 1000;
271
- }
272
-
273
- getPage(page);
274
-
275
- function getPage(pageNumber) {
276
-
277
- function pageHandler(res) {
278
- if (res.length > 0) {
279
- results = results.concat(res);
280
- }
281
-
282
- if (res.length === pageSize) {
283
- getPage(++pageNumber);
284
- } else {
285
- return resolve(results);
286
- }
287
- }
288
-
289
- //inject page key into params arg
290
- args.forEach(function (arg) {
291
- for (const key in arg) {
292
- if (arg.hasOwnProperty(key)) {
293
- if (key === 'page' || key === 'pageSize' || key === 'conditions' || key === 'orderBy') {
294
- arg.page = pageNumber;
295
- arg.pageSize = pageSize;
296
- }
297
- }
298
- }
299
- });
300
-
301
- fn.apply(module, args)
302
- .then(pageHandler)
303
- .catch(function (err) {
304
- return reject(err);
305
- });
306
- }
307
-
308
- });
309
- };
310
-
311
- /**
312
- * Create a parameterized string for GET requests.
313
- * Able to use contains, like, etc
314
- * Example params object: { id: 1234, conditions: 'board=CTS Helpdesk and , orderBy: 'id' }
315
- * Returns: ?id=1234&conditions%2Fboard%2Fboard=Service%20Board&orderBy=id
316
- * @private
317
- * @param {object|string} params
318
- * @returns {string}
319
- */
320
- function parameterize(params) {
321
- if (typeof params === 'string') {
322
- return params;
323
- }
324
-
325
- const result = [];
326
- for (const param in params) {
327
- if (params.hasOwnProperty(param)) {
328
- result.push(`${param}=${encodeURIComponent(params[param])}`);
329
- }
330
- }
331
-
332
- return `?${result.join('&')}`;
333
- }
334
-
335
- /**
336
- *
337
- * @type {ConnectWise}
338
- */
339
- module.exports = ConnectWise;