From 77e8c08a25a588e81b1027d85561d1e1045a258f Mon Sep 17 00:00:00 2001 From: Michael Kolb Date: Thu, 28 Dec 2023 20:33:32 +0100 Subject: [PATCH] added doc export node --- .yarn/install-state.gz | Bin 7574 -> 7574 bytes node-red-grist/document-export.html | 67 ++++++++++++++++++++++++++++ node-red-grist/document-export.js | 39 ++++++++++++++++ package.json | 6 ++- 4 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 node-red-grist/document-export.html create mode 100644 node-red-grist/document-export.js diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz index 0fdf29c2dfb2ea00e1d35952fe5f113b85c844b5..ecb16c5c76e053b3a2ea86dc2828a853675fbcca 100644 GIT binary patch literal 7574 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 literal 7574 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 diff --git a/node-red-grist/document-export.html b/node-red-grist/document-export.html new file mode 100644 index 0000000..6aa260b --- /dev/null +++ b/node-red-grist/document-export.html @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/node-red-grist/document-export.js b/node-red-grist/document-export.js new file mode 100644 index 0000000..8bbe824 --- /dev/null +++ b/node-red-grist/document-export.js @@ -0,0 +1,39 @@ +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); +} \ No newline at end of file diff --git a/package.json b/package.json index 8365960..9065db7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@gorootde/node-red-grist", - "version": "2.0.1", + "version": "2.1.0", "description": "getgrist.com connectivity for NodeRed", "main": "index.js", "packageManager": "yarn@3.3.1", @@ -19,6 +19,7 @@ "node-red": { "version": ">=2.0.0", "nodes": { + "grist-document-export": "node-red-grist/document-export.js", "grist-add-records": "node-red-grist/add-records.js", "grist-get-records": "node-red-grist/get-records.js", "grist-update-records": "node-red-grist/update-records.js", @@ -31,6 +32,7 @@ }, "dependencies": { "grist-api": "^0.1.7", - "mustache": "^4.2.0" + "mustache": "^4.2.0", + "node-fetch": "^3.3.2" } } \ No newline at end of file