Pavolvia providing empty .zip from "Download" link

URL of experiment: Echolocation experiment (this has a few URL params to reduce the number of presentations and skip a headphone check)

Description of the problem: My experiment uses jsPsych with a lightly modified version of the Pavlovia plugin that replaces calls to jsPsych.data.get().csv() with jsPsych.data.get().json(). This serializes the data as JSON which, as I understand it, should allow me to save the results using Pavlovia’s “Database” option instead of “CSV”. At the end of the experiment timeline is a jsPsych pavlovia trial with the following shape:

{type: 'pavlovia', command: 'finish'}

This triggers an HTTP POST request to //api/v2/experiments/{user}/{experiment}/sessions/{id}/results with the following payload:

key=supernormal-echolocation-presentations_PARTICIPANT_SESSION_2021-01-05_18h35.57.539.json&value=%5B%7B%22trial_type%22%3A%22pavlovia%22%2C%22trial_index%22%3A0%2C%22time_elapsed%22%3A3%2C%22internal_node_id%22%3A%220.0-0.0%22%7D%2C%7B%22rt%22%3A780%2C%22stimulus%22%3A%22%3Cdiv%3E%3Ch1%3EWelcome!%3C%2Fh1%3E%3Cp%3EBeep+bloop+bloop.+Press+any+key+to+continue.%3C%2Fp%3E%3C%2Fdiv%3E%22%2C%22key_press%22%3A32%2C%22trial_type%22%3A%22html-keyboard-response%22%2C%22trial_index%22%3A1%2C%22time_elapsed%22%3A784%2C%22internal_node_id%22%3A%220.0-1.0%22%7D%2C%7B%22chosenKeyset%22%3A%22Number+keys%22%2C%22trial_type%22%3A%22keyset-select%22%2C%22trial_index%22%3A2%2C%22time_elapsed%22%3A2211%2C%22internal_node_id%22%3A%220.0-2.0%22%7D%2C%7B%22failureCount%22%3A0%2C%22testIndex%22%3A-1%2C%22globalVolume%22%3A0.3%2C%22trial_type%22%3A%22headphone-check%22%2C%22trial_index%22%3A3%2C%22time_elapsed%22%3A5565%2C%22internal_node_id%22%3A%220.0-3.0%22%7D%2C%7B%22trial_type%22%3A%22training%22%2C%22trial_index%22%3A4%2C%22time_elapsed%22%3A17411%2C%22internal_node_id%22%3A%220.0-4.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A5%2C%22time_elapsed%22%3A17838%2C%22internal_node_id%22%3A%220.0-5.0%22%7D%2C%7B%22choices%22%3A%5B-70%2C-65%2C-60%2C-55%2C-50%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s7_c1_matched_a-50.wav%22%2C%22slowdown%22%3A7%2C%22compensationDenominator%22%3A1%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A-50%2C%22responseAzimuth%22%3A-65%2C%22responseDelay%22%3A1219%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A6%2C%22time_elapsed%22%3A20030%2C%22internal_node_id%22%3A%220.0-6.0%22%7D%2C%7B%22choices%22%3A%5B-70%2C-65%2C-60%2C-55%2C-50%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s7_c0_matched_a-70.wav%22%2C%22slowdown%22%3A7%2C%22compensationDenominator%22%3A0%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A-70%2C%22responseAzimuth%22%3A-60%2C%22responseDelay%22%3A469%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A7%2C%22time_elapsed%22%3A21186%2C%22internal_node_id%22%3A%220.0-7.0%22%7D%2C%7B%22choices%22%3A%5B-70%2C-65%2C-60%2C-55%2C-50%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s7_c2_matched_a-60.wav%22%2C%22slowdown%22%3A7%2C%22compensationDenominator%22%3A2%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A-60%2C%22responseAzimuth%22%3A-65%2C%22responseDelay%22%3A369%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A8%2C%22time_elapsed%22%3A22598%2C%22internal_node_id%22%3A%220.0-8.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A9%2C%22time_elapsed%22%3A22890%2C%22internal_node_id%22%3A%220.0-9.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A10%2C%22time_elapsed%22%3A23352%2C%22internal_node_id%22%3A%220.0-10.0%22%7D%2C%7B%22choices%22%3A%5B-40%2C-35%2C-30%2C-25%2C-20%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s21_c2_matched_a-40.wav%22%2C%22slowdown%22%3A21%2C%22compensationDenominator%22%3A2%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A-40%2C%22responseAzimuth%22%3A-30%2C%22responseDelay%22%3A1084%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A11%2C%22time_elapsed%22%3A25335%2C%22internal_node_id%22%3A%220.0-11.0%22%7D%2C%7B%22choices%22%3A%5B-40%2C-35%2C-30%2C-25%2C-20%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s21_c2_matched_a-20.wav%22%2C%22slowdown%22%3A21%2C%22compensationDenominator%22%3A2%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A-20%2C%22responseAzimuth%22%3A-40%2C%22responseDelay%22%3A1072%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A12%2C%22time_elapsed%22%3A26984%2C%22internal_node_id%22%3A%220.0-12.0%22%7D%2C%7B%22choices%22%3A%5B-40%2C-35%2C-30%2C-25%2C-20%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s21_c2_matched_a-35.wav%22%2C%22slowdown%22%3A21%2C%22compensationDenominator%22%3A2%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A-35%2C%22responseAzimuth%22%3A-30%2C%22responseDelay%22%3A865%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A13%2C%22time_elapsed%22%3A28483%2C%22internal_node_id%22%3A%220.0-13.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A14%2C%22time_elapsed%22%3A28815%2C%22internal_node_id%22%3A%220.0-14.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A15%2C%22time_elapsed%22%3A29324%2C%22internal_node_id%22%3A%220.0-15.0%22%7D%2C%7B%22choices%22%3A%5B50%2C55%2C60%2C65%2C70%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s7_c1_matched_a65.wav%22%2C%22slowdown%22%3A7%2C%22compensationDenominator%22%3A1%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A65%2C%22responseAzimuth%22%3A60%2C%22responseDelay%22%3A580%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A16%2C%22time_elapsed%22%3A30969%2C%22internal_node_id%22%3A%220.0-16.0%22%7D%2C%7B%22choices%22%3A%5B50%2C55%2C60%2C65%2C70%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s7_c4_matched_a65.wav%22%2C%22slowdown%22%3A7%2C%22compensationDenominator%22%3A4%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A65%2C%22responseAzimuth%22%3A60%2C%22responseDelay%22%3A472%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A17%2C%22time_elapsed%22%3A32187%2C%22internal_node_id%22%3A%220.0-17.0%22%7D%2C%7B%22choices%22%3A%5B50%2C55%2C60%2C65%2C70%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s7_c1_matched_a70.wav%22%2C%22slowdown%22%3A7%2C%22compensationDenominator%22%3A1%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A70%2C%22responseAzimuth%22%3A55%2C%22responseDelay%22%3A586%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A18%2C%22time_elapsed%22%3A33676%2C%22internal_node_id%22%3A%220.0-18.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A19%2C%22time_elapsed%22%3A33970%2C%22internal_node_id%22%3A%220.0-19.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A20%2C%22time_elapsed%22%3A34484%2C%22internal_node_id%22%3A%220.0-20.0%22%7D%2C%7B%22choices%22%3A%5B-10%2C-5%2C0%2C5%2C10%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s14_c2_matched_a0.wav%22%2C%22slowdown%22%3A14%2C%22compensationDenominator%22%3A2%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A0%2C%22responseAzimuth%22%3A-5%2C%22responseDelay%22%3A663%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A21%2C%22time_elapsed%22%3A36198%2C%22internal_node_id%22%3A%220.0-21.0%22%7D%2C%7B%22choices%22%3A%5B-10%2C-5%2C0%2C5%2C10%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s14_c0_matched_a-5.wav%22%2C%22slowdown%22%3A14%2C%22compensationDenominator%22%3A0%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A-5%2C%22responseAzimuth%22%3A-5%2C%22responseDelay%22%3A1741%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A22%2C%22time_elapsed%22%3A38612%2C%22internal_node_id%22%3A%220.0-22.0%22%7D%2C%7B%22choices%22%3A%5B-10%2C-5%2C0%2C5%2C10%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s14_c2_matched_a-5.wav%22%2C%22slowdown%22%3A14%2C%22compensationDenominator%22%3A2%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A-5%2C%22responseAzimuth%22%3A-10%2C%22responseDelay%22%3A879%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A23%2C%22time_elapsed%22%3A40383%2C%22internal_node_id%22%3A%220.0-23.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A24%2C%22time_elapsed%22%3A40632%2C%22internal_node_id%22%3A%220.0-24.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A25%2C%22time_elapsed%22%3A41133%2C%22internal_node_id%22%3A%220.0-25.0%22%7D%2C%7B%22choices%22%3A%5B20%2C25%2C30%2C35%2C40%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s21_c1_matched_a25.wav%22%2C%22slowdown%22%3A21%2C%22compensationDenominator%22%3A1%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A25%2C%22responseAzimuth%22%3A30%2C%22responseDelay%22%3A3776%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A26%2C%22time_elapsed%22%3A46077%2C%22internal_node_id%22%3A%220.0-26.0%22%7D%2C%7B%22choices%22%3A%5B20%2C25%2C30%2C35%2C40%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s21_c1_matched_a35.wav%22%2C%22slowdown%22%3A21%2C%22compensationDenominator%22%3A1%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A35%2C%22responseAzimuth%22%3A30%2C%22responseDelay%22%3A1564%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A27%2C%22time_elapsed%22%3A48492%2C%22internal_node_id%22%3A%220.0-27.0%22%7D%2C%7B%22choices%22%3A%5B20%2C25%2C30%2C35%2C40%5D%2C%22filename%22%3A%22media%2Faudio%2Fstims%2Fspherical_300cm_s21_c0_matched_a40.wav%22%2C%22slowdown%22%3A21%2C%22compensationDenominator%22%3A0%2C%22receiverOrientationType%22%3A%22matched%22%2C%22azimuth%22%3A40%2C%22responseAzimuth%22%3A30%2C%22responseDelay%22%3A1744%2C%22trial_type%22%3A%22echo-presentation%22%2C%22trial_index%22%3A28%2C%22time_elapsed%22%3A51331%2C%22internal_node_id%22%3A%220.0-28.0%22%7D%2C%7B%22trial_type%22%3A%22block-bookend%22%2C%22trial_index%22%3A29%2C%22time_elapsed%22%3A53831%2C%22internal_node_id%22%3A%220.0-29.0%22%7D%5D

The request resolves with HTTP 200, which suggests the data has been properly saved. I also see an OPTIONS and then a DELETE request to the sessions/{id} route, which I assume is deleting the session rather than the data itself

Back on the experiment dashboard, I see the following, which suggests that several of my test sessions have been completed and logged:

Then, when I click “Download results” I get an empty .zip file:

image

I understand my experiment setup is somewhat atypical and I’m happy to change the format of the data I’m sending to meet Pavlovia’s needs. But does anyone know why this might be happening? Perhaps it just takes a little while (>30 min) for the data to become available? Thanks for any help you can provide.