Files
threshold-ui/addons/api/addon/adapters/session-recording.js
T
Zhihe Li 1e7268ff54 feat: 🎸 Add mirage data for ascii casts and use fetch (#129)
* feat: 🎸 Add mirage data for ascii casts and use fetch

✅ Closes: ICU-8189
2023-03-21 15:52:58 -04:00

56 lines
1.6 KiB
JavaScript

import ApplicationAdapter from './application';
export default class SessionRecordingAdapter extends ApplicationAdapter {
/**
* Overrides the default `buildURL` such that for custom download methods,
* URLs will get the query parameters. All other request types behave as normal.
*
* @param modelName {string}
* @param id {string}
* @param snapshot {object}
* @param requestType {string}
* @param query {object}
* @returns {string}
*/
buildURL(modelName, id, snapshot, requestType, query) {
let url = super.buildURL(...arguments);
const method = snapshot?.adapterOptions?.method;
if (method === 'download') {
const queryParams = new URLSearchParams(query).toString();
if (queryParams) url = `${url}?${queryParams}`;
}
return url;
}
/**
* Handles the download recording for recordings. Takes in a mime type for the
* type or recording to return.
* The ID can be the session ID, session recording ID,
* connection recording ID, or the channel recording ID.
* @param id {string}
* @param mimeType {string}
* @returns {Promise<string>}
*/
async getRecordingDownload({ id, mimeType }) {
const options = { adapterOptions: { method: 'download' } };
const url = this.buildURL('session-recording', id, options, 'findRecord', {
mime_type: mimeType,
});
const response = await fetch(url);
return response.text();
}
/**
* Returns an ascii cast recording.
* @param id
* @returns {Promise<string>}
*/
getAsciicast(id) {
return this.getRecordingDownload({
id,
mimeType: 'application/x-asciicast',
});
}
}