@dpkit/zenodo
Version:
Fast TypeScript data management framework built on top of the Data Package standard and Polars DataFrames
36 lines • 5.05 kB
JavaScript
export async function makeZenodoApiRequest(options) {
const { endpoint, method = "GET", payload, upload, apiKey, sandbox = false, } = options;
let body;
const headers = {};
const baseUrl = sandbox
? "https://sandbox.zenodo.org/api"
: "https://zenodo.org/api";
const url = new URL(`${baseUrl}${endpoint}`);
if (apiKey) {
url.searchParams.append("access_token", apiKey);
}
if (upload) {
body = new FormData();
body.append("file", upload.data, upload.name);
if (payload) {
for (const [key, value] of Object.entries(payload)) {
body.append(key, JSON.stringify(value));
}
}
}
else if (payload) {
body = JSON.stringify(payload);
headers["Content-Type"] = "application/json";
}
const response = await fetch(url.toString(), {
method,
headers,
body,
});
if (!response.ok) {
const errorText = await response.text();
throw new Error(`Zenodo API error: ${response.status} ${response.statusText}\n${errorText}`);
}
return (await response.json());
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3plbm9kby9yZXF1ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sQ0FBQyxLQUFLLFVBQVUsb0JBQW9CLENBQWlCLE9BTzFEO0lBQ0MsTUFBTSxFQUNKLFFBQVEsRUFDUixNQUFNLEdBQUcsS0FBSyxFQUNkLE9BQU8sRUFDUCxNQUFNLEVBQ04sTUFBTSxFQUNOLE9BQU8sR0FBRyxLQUFLLEdBQ2hCLEdBQUcsT0FBTyxDQUFBO0lBRVgsSUFBSSxJQUFtQyxDQUFBO0lBQ3ZDLE1BQU0sT0FBTyxHQUF3QixFQUFFLENBQUE7SUFFdkMsTUFBTSxPQUFPLEdBQUcsT0FBTztRQUNyQixDQUFDLENBQUMsZ0NBQWdDO1FBQ2xDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQTtJQUM1QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLE9BQU8sR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBRTVDLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDakQsQ0FBQztJQUVELElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQTtRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUU3QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO1lBQ3pDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztTQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDOUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGtCQUFrQixDQUFBO0lBQzlDLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7UUFDM0MsTUFBTTtRQUNOLE9BQU87UUFDUCxJQUFJO0tBQ0wsQ0FBQyxDQUFBO0lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNqQixNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUN2QyxNQUFNLElBQUksS0FBSyxDQUNiLHFCQUFxQixRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFLENBQzVFLENBQUE7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFNLENBQUE7QUFDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRGVzY3JpcHRvciB9IGZyb20gXCJAZHBraXQvY29yZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWtlWmVub2RvQXBpUmVxdWVzdDxUID0gRGVzY3JpcHRvcj4ob3B0aW9uczoge1xuICBlbmRwb2ludDogc3RyaW5nXG4gIG1ldGhvZD86IFwiR0VUXCIgfCBcIlBPU1RcIiB8IFwiUFVUXCIgfCBcIkRFTEVURVwiXG4gIHBheWxvYWQ/OiBEZXNjcmlwdG9yXG4gIHVwbG9hZD86IHsgbmFtZTogc3RyaW5nOyBkYXRhOiBCbG9iIH1cbiAgYXBpS2V5Pzogc3RyaW5nXG4gIHNhbmRib3g/OiBib29sZWFuXG59KSB7XG4gIGNvbnN0IHtcbiAgICBlbmRwb2ludCxcbiAgICBtZXRob2QgPSBcIkdFVFwiLFxuICAgIHBheWxvYWQsXG4gICAgdXBsb2FkLFxuICAgIGFwaUtleSxcbiAgICBzYW5kYm94ID0gZmFsc2UsXG4gIH0gPSBvcHRpb25zXG5cbiAgbGV0IGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhIHwgdW5kZWZpbmVkXG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuXG4gIGNvbnN0IGJhc2VVcmwgPSBzYW5kYm94XG4gICAgPyBcImh0dHBzOi8vc2FuZGJveC56ZW5vZG8ub3JnL2FwaVwiXG4gICAgOiBcImh0dHBzOi8vemVub2RvLm9yZy9hcGlcIlxuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke2Jhc2VVcmx9JHtlbmRwb2ludH1gKVxuXG4gIGlmIChhcGlLZXkpIHtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChcImFjY2Vzc190b2tlblwiLCBhcGlLZXkpXG4gIH1cblxuICBpZiAodXBsb2FkKSB7XG4gICAgYm9keSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgYm9keS5hcHBlbmQoXCJmaWxlXCIsIHVwbG9hZC5kYXRhLCB1cGxvYWQubmFtZSlcblxuICAgIGlmIChwYXlsb2FkKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkKSkge1xuICAgICAgICBib2R5LmFwcGVuZChrZXksIEpTT04uc3RyaW5naWZ5KHZhbHVlKSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAocGF5bG9hZCkge1xuICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShwYXlsb2FkKVxuICAgIGhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIlxuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwudG9TdHJpbmcoKSwge1xuICAgIG1ldGhvZCxcbiAgICBoZWFkZXJzLFxuICAgIGJvZHksXG4gIH0pXG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBaZW5vZG8gQVBJIGVycm9yOiAke3Jlc3BvbnNlLnN0YXR1c30gJHtyZXNwb25zZS5zdGF0dXNUZXh0fVxcbiR7ZXJyb3JUZXh0fWAsXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIFRcbn1cbiJdfQ==