@curvenote/cli
Version:
CLI Client library for Curvenote
62 lines (61 loc) • 2.66 kB
JavaScript
import { workKeyFromConfig } from '../works/utils.js';
import { checkVenueExists, ensureVenue, getAllSubmissionsUsingKey, getSubmissionToUpdate, } from './submit.utils.js';
import { exitOnInvalidKeyOption, patchUpdateSubmissionStatus } from './utils.js';
import { keyFromTransferFile } from './utils.transfer.js';
export function hyphenatedFromDate(date) {
const year = date.getFullYear().toString();
const month = (date.getMonth() + 1).toString().padStart(2, '0');
const day = date.getDate().toString().padStart(2, '0');
return `${year}-${month}-${day}`;
}
async function updateStatus(action, session, venue, opts = {}) {
var _a;
if (session.isAnon) {
throw new Error('⛔️ You must be authenticated for this command. Use `curvenote token set [token]`');
}
venue = await ensureVenue(session, venue, { action });
await checkVenueExists(session, venue);
// TODO check user scope on this venue! await checkVenueAccess(session, venue);
let key = workKeyFromConfig(session);
// Deprecation step to handle old transfer.yml files
key = (_a = (await keyFromTransferFile(session, venue, key))) !== null && _a !== void 0 ? _a : key;
if (!key) {
session.log.error(`⛔️ No id in project config`);
process.exit(1);
}
exitOnInvalidKeyOption(session, key);
session.log.info(`📍 Updating submission status using a key: ${key}`);
const allExisting = await getAllSubmissionsUsingKey(session, venue, key);
const existing = allExisting ? await getSubmissionToUpdate(session, allExisting) : undefined;
if (!existing) {
session.log.error(`⛔️ No existing submission found to ${action} with key: ${key}`);
process.exit(1);
}
session.log.debug(`Found existing submission with key/id: ${key}/${existing.id}`);
let date;
if (action === 'publish' && opts.date) {
if (typeof opts.date === 'string') {
date = opts.date;
}
else if (existing.date) {
date = hyphenatedFromDate(new Date(existing.date));
}
else {
session.log.warn('No alternative publish date provided; using today');
}
}
try {
await patchUpdateSubmissionStatus(session, venue, existing.links.self, action, date);
}
catch (e) {
if (!opts.force)
throw e;
session.log.warn(`⚠️ ${e.message}`);
}
}
export async function publish(session, venue, opts = {}) {
await updateStatus('publish', session, venue, opts);
}
export async function unpublish(session, venue, opts = {}) {
await updateStatus('unpublish', session, venue, opts);
}