39 lines
No EOL
1.6 KiB
JavaScript
39 lines
No EOL
1.6 KiB
JavaScript
const fetch = (...args) => import('node-fetch').then(({ default: fetch }) => fetch(...args));
|
|
|
|
module.exports = function (RED) {
|
|
function DocumentExportNode(config) {
|
|
RED.nodes.createNode(this, config);
|
|
let node = this;
|
|
this.document = RED.nodes.getNode(config.document);
|
|
this.server = RED.nodes.getNode(config.server);
|
|
this.format = config.format
|
|
|
|
node.on('input', async function (msg, send, done) {
|
|
const protocol = this.server.tlsEnabled === true ? "https" : "http";
|
|
const url = protocol + "://" + this.server.hostname + ":" + this.server.port;
|
|
|
|
var requestUrl;
|
|
switch (this.format) {
|
|
case "excel": requestUrl = `${url}/api/docs/${this.document.docid}/download`
|
|
break;
|
|
case "sqlite": requestUrl = `${url}/api/docs/${this.document.docid}/download/xlsx`
|
|
break;
|
|
default:
|
|
done("Unsupported format " + this.format);
|
|
}
|
|
|
|
fetch(requestUrl, {
|
|
headers: {
|
|
'authorization': `Bearer ${this.server.apiKey}`
|
|
}
|
|
}).then(async (response) => {
|
|
const blob = await response.blob()
|
|
const arrayBuffer = await blob.arrayBuffer();
|
|
const buffer = Buffer.from(arrayBuffer);
|
|
node.send({ ...msg, payload: buffer })
|
|
|
|
}).catch(reason => done(reason, "Failed to perform grist request to " + url));
|
|
});
|
|
}
|
|
RED.nodes.registerType("grist-document-export", DocumentExportNode);
|
|
} |