@b-jones-rfd/qualtrics-api-tasks 0.1.1 → 0.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @b-jones-rfd/qualtrics-api-tasks
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - a5028bb: Support file export multiple formats
8
+
3
9
  ## 0.1.1
4
10
 
5
11
  ### Patch Changes
package/dist/index.js CHANGED
@@ -133,9 +133,6 @@ function safeParseStartFileExportResponse(response) {
133
133
  function safeParseFileProgressResponse(response) {
134
134
  return "result" in response ? "fileId" in response.result && "percentComplete" in response.result && "status" in response.result ? success(response.result) : failure("File Progress Response invalid format") : "error" in response ? failure(`${response.error.errorCode}: ${response.error.errorMessage}`) : failure(`Unable to parse File Progress Response`);
135
135
  }
136
- function safeParseFileResponse(response) {
137
- return Buffer.isBuffer(response) ? success(response) : failure("Incorrect file response format");
138
- }
139
136
 
140
137
  // src/qualtrics/index.ts
141
138
  async function execute(config) {
@@ -151,7 +148,6 @@ async function execute(config) {
151
148
  if (body) {
152
149
  if (typeof body === "string") {
153
150
  headers.append("Content-Type", "application/json");
154
- headers.append("Accept", "application/json");
155
151
  }
156
152
  options.method = "POST";
157
153
  options.headers = headers;
@@ -161,8 +157,17 @@ async function execute(config) {
161
157
  const response = await fetch(resource, options);
162
158
  clearTimeout(timer);
163
159
  if (response.ok) {
164
- const data = await response.json();
165
- return Promise.resolve(data);
160
+ const contentType = response.headers.get("content-type");
161
+ switch (contentType) {
162
+ case "application/json":
163
+ return Promise.resolve(await response.json());
164
+ case "application/csv":
165
+ case "application/tsv":
166
+ case "application/xml":
167
+ return Promise.resolve(await response.text());
168
+ default:
169
+ return Promise.resolve(response.body);
170
+ }
166
171
  } else {
167
172
  const message = await response.json();
168
173
  return Promise.reject(`${response.status}: ${message}`);
@@ -197,7 +202,7 @@ var getBearerToken = (connectionOptions) => async ({ clientId, clientSecret, sco
197
202
 
198
203
  // src/methods/getResponseExportProgress.ts
199
204
  var getResponseExportProgress = (connectionOptions) => async ({ exportProgressId, surveyId, bearerToken }) => {
200
- const route = `/surveys/${surveyId}/export-responses/${exportProgressId}`;
205
+ const route = `/API/v3/surveys/${surveyId}/export-responses/${exportProgressId}`;
201
206
  try {
202
207
  const headers = getAuthHeaders(connectionOptions.apiToken, bearerToken);
203
208
  const config = {
@@ -217,7 +222,7 @@ var getResponseExportProgress = (connectionOptions) => async ({ exportProgressId
217
222
 
218
223
  // src/methods/getResponseExportFile.ts
219
224
  var getResponseExportFile = (connectionOptions) => async ({ surveyId, fileId, bearerToken }) => {
220
- const route = `/surveys/${surveyId}/export-responses/${fileId}/file`;
225
+ const route = `/API/v3/surveys/${surveyId}/export-responses/${fileId}/file`;
221
226
  try {
222
227
  const headers = getAuthHeaders(connectionOptions.apiToken, bearerToken);
223
228
  const config = {
@@ -227,8 +232,7 @@ var getResponseExportFile = (connectionOptions) => async ({ surveyId, fileId, be
227
232
  timeout: connectionOptions.timeout
228
233
  };
229
234
  const response = await execute(config);
230
- const result = safeParseFileResponse(response);
231
- return result;
235
+ return response;
232
236
  } catch (error) {
233
237
  const message = getErrorMessage(error);
234
238
  return failure(message);
@@ -244,7 +248,7 @@ var startResponseExport = (connectionOptions) => async ({
244
248
  bearerToken = void 0,
245
249
  ...rest
246
250
  }) => {
247
- const route = `/surveys/${surveyId}/export-responses`;
251
+ const route = `/API/v3/surveys/${surveyId}/export-responses`;
248
252
  try {
249
253
  const headers = getAuthHeaders(connectionOptions.apiToken, bearerToken);
250
254
  const body = JSON.stringify({
package/dist/index.mjs CHANGED
@@ -101,9 +101,6 @@ function safeParseStartFileExportResponse(response) {
101
101
  function safeParseFileProgressResponse(response) {
102
102
  return "result" in response ? "fileId" in response.result && "percentComplete" in response.result && "status" in response.result ? success(response.result) : failure("File Progress Response invalid format") : "error" in response ? failure(`${response.error.errorCode}: ${response.error.errorMessage}`) : failure(`Unable to parse File Progress Response`);
103
103
  }
104
- function safeParseFileResponse(response) {
105
- return Buffer.isBuffer(response) ? success(response) : failure("Incorrect file response format");
106
- }
107
104
 
108
105
  // src/qualtrics/index.ts
109
106
  async function execute(config) {
@@ -119,7 +116,6 @@ async function execute(config) {
119
116
  if (body) {
120
117
  if (typeof body === "string") {
121
118
  headers.append("Content-Type", "application/json");
122
- headers.append("Accept", "application/json");
123
119
  }
124
120
  options.method = "POST";
125
121
  options.headers = headers;
@@ -129,8 +125,17 @@ async function execute(config) {
129
125
  const response = await fetch(resource, options);
130
126
  clearTimeout(timer);
131
127
  if (response.ok) {
132
- const data = await response.json();
133
- return Promise.resolve(data);
128
+ const contentType = response.headers.get("content-type");
129
+ switch (contentType) {
130
+ case "application/json":
131
+ return Promise.resolve(await response.json());
132
+ case "application/csv":
133
+ case "application/tsv":
134
+ case "application/xml":
135
+ return Promise.resolve(await response.text());
136
+ default:
137
+ return Promise.resolve(response.body);
138
+ }
134
139
  } else {
135
140
  const message = await response.json();
136
141
  return Promise.reject(`${response.status}: ${message}`);
@@ -165,7 +170,7 @@ var getBearerToken = (connectionOptions) => async ({ clientId, clientSecret, sco
165
170
 
166
171
  // src/methods/getResponseExportProgress.ts
167
172
  var getResponseExportProgress = (connectionOptions) => async ({ exportProgressId, surveyId, bearerToken }) => {
168
- const route = `/surveys/${surveyId}/export-responses/${exportProgressId}`;
173
+ const route = `/API/v3/surveys/${surveyId}/export-responses/${exportProgressId}`;
169
174
  try {
170
175
  const headers = getAuthHeaders(connectionOptions.apiToken, bearerToken);
171
176
  const config = {
@@ -185,7 +190,7 @@ var getResponseExportProgress = (connectionOptions) => async ({ exportProgressId
185
190
 
186
191
  // src/methods/getResponseExportFile.ts
187
192
  var getResponseExportFile = (connectionOptions) => async ({ surveyId, fileId, bearerToken }) => {
188
- const route = `/surveys/${surveyId}/export-responses/${fileId}/file`;
193
+ const route = `/API/v3/surveys/${surveyId}/export-responses/${fileId}/file`;
189
194
  try {
190
195
  const headers = getAuthHeaders(connectionOptions.apiToken, bearerToken);
191
196
  const config = {
@@ -195,8 +200,7 @@ var getResponseExportFile = (connectionOptions) => async ({ surveyId, fileId, be
195
200
  timeout: connectionOptions.timeout
196
201
  };
197
202
  const response = await execute(config);
198
- const result = safeParseFileResponse(response);
199
- return result;
203
+ return response;
200
204
  } catch (error) {
201
205
  const message = getErrorMessage(error);
202
206
  return failure(message);
@@ -212,7 +216,7 @@ var startResponseExport = (connectionOptions) => async ({
212
216
  bearerToken = void 0,
213
217
  ...rest
214
218
  }) => {
215
- const route = `/surveys/${surveyId}/export-responses`;
219
+ const route = `/API/v3/surveys/${surveyId}/export-responses`;
216
220
  try {
217
221
  const headers = getAuthHeaders(connectionOptions.apiToken, bearerToken);
218
222
  const body = JSON.stringify({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@b-jones-rfd/qualtrics-api-tasks",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Perform common tasks using the Qualtrics API",
5
5
  "private": false,
6
6
  "main": "./dist/index.js",
@@ -5,7 +5,6 @@ import {
5
5
  safeParseTestResponse,
6
6
  safeParseStartFileExportResponse,
7
7
  safeParseFileProgressResponse,
8
- safeParseFileResponse,
9
8
  } from '../src/utils/parsers'
10
9
 
11
10
  describe('safeParseBearerToken', () => {
@@ -140,21 +139,3 @@ describe('safeParseTestResponse', () => {
140
139
  expect(parsed).toStrictEqual(expected)
141
140
  })
142
141
  })
143
-
144
- describe('safeParseFileResponse', () => {
145
- const fixture = Buffer.from('file content')
146
-
147
- it('should pass with correct data', () => {
148
- const res = fixture
149
- const expected = success(fixture)
150
- const parsed = safeParseFileResponse(res)
151
- expect(parsed).toStrictEqual(expected)
152
- })
153
-
154
- it('should fail with invalid response type', () => {
155
- const res = { fixture }
156
- const expected = failure('Incorrect file response format')
157
- const parsed = safeParseFileResponse(res)
158
- expect(parsed).toStrictEqual(expected)
159
- })
160
- })