@curvenote/cli
Version:
CLI Client library for Curvenote
111 lines (110 loc) • 4.39 kB
JavaScript
import { tic } from 'myst-cli-utils';
import { format } from 'date-fns';
import { getFromUrl, postToJournals, postToUrl } from '../utils/api.js';
export function formatDate(date) {
return format(new Date(date), 'dd MMM, yyyy HH:mm:ss');
}
export async function postNewCliCheckJob(session, payload, results) {
const toc = tic();
const body = {
job_type: 'CLI_CHECK',
payload,
results,
};
session.log.debug(`POST to ${session.config?.apiUrl}/jobs...`);
const resp = await postToJournals(session, `/jobs`, body);
session.log.debug(`${resp.status} ${resp.statusText}`);
if (resp.ok) {
const json = (await resp.json());
session.log.info(toc(`🎉 Posted a new job in %s.`));
session.log.debug(`Job id: ${json.id}`);
session.log.debug(`Job status: ${json.status}`);
return json;
}
else {
throw new Error('Job creation failed');
}
}
export async function patchUpdateCliCheckJob(session, jobId, status, message, results) {
const toc = tic();
const body = {
status,
message,
results,
};
session.log.debug(`PATCH to ${session.config?.apiUrl}/jobs...`);
const resp = await postToJournals(session, `/jobs/${jobId}`, body, { method: 'PATCH' });
session.log.debug(`${resp.status} ${resp.statusText}`);
if (resp.ok) {
const json = (await resp.json());
session.log.info(toc(`🎉 Updated a job in %s.`));
session.log.debug(`Job id: ${json.id}`);
session.log.debug(`Job status: ${json.status}`);
return json;
}
else {
throw new Error('Job update failed');
}
}
export async function postNewSubmission(session, venue, collection_id, kind_id, work_version_id, draft, job_id, metadata, tags) {
const toc = tic();
const submissionRequest = {
work_version_id,
collection_id,
kind_id,
draft,
job_id,
metadata,
tags,
};
session.log.debug(`POST to ${session.config?.apiUrl}/sites/${venue}/submissions...`);
const resp = await postToJournals(session, `/sites/${venue}/submissions`, submissionRequest);
session.log.debug(`${resp.status} ${resp.statusText}`);
if (resp.ok) {
const json = (await resp.json());
session.log.info(toc(`🚀 Submitted to venue "${venue}" in %s.`));
session.log.debug(`Submission id: ${json.id}`);
session.log.debug(`Submitted by: ${json.submitted_by.name ?? json.submitted_by.id}`);
return json;
}
else {
throw new Error('Creating new submission failed');
}
}
export async function postUpdateSubmissionWorkVersion(session, venue, versionsUrl, work_version_id, job_id, metadata, tags) {
const toc = tic();
const submissionRequest = { work_version_id, job_id, metadata, tags };
session.log.debug(`POST to ${versionsUrl}...`);
const resp = await postToUrl(session, versionsUrl, submissionRequest);
session.log.debug(`${resp.status} ${resp.statusText}`);
if (resp.ok) {
const json = (await resp.json());
session.log.info(toc(`🚀 Updated submission accepted by "${venue}" in %s.`));
session.log.debug(`Submission id: ${json.submission_id}`);
session.log.debug(`Submitted by: ${json.submitted_by.name ?? json.submitted_by.id}`);
return json;
}
else {
throw new Error('Updating submission failed');
}
}
export async function patchUpdateSubmissionStatus(session, venue, submissionUrl, action, date) {
const toc = tic();
session.log.debug(`GET to ${submissionUrl}...`);
const submissionJson = await getFromUrl(session, submissionUrl);
const updateUrl = submissionJson?.links?.[action];
if (!updateUrl) {
throw new Error(`Action "${action}" not available for submission`);
}
session.log.debug(`PUT to ${updateUrl}...`);
const resp = await postToUrl(session, updateUrl, { date }, { method: 'PUT' });
session.log.debug(`${resp.status} ${resp.statusText}`);
if (resp.ok) {
const json = (await resp.json());
session.log.info(toc(`🚀 Submission successfully ${action === 'publish' ? 'publishing to' : 'unpublishing from'} "${venue}" in %s.`));
session.log.debug(`Submission id: ${json.id}`);
}
else {
throw new Error(`Submission failed to ${action}`);
}
}