diff --git a/.yarn/install-state.gz b/.yarn/install-state.gz
index 0fdf29c..ecb16c5 100644
Binary files a/.yarn/install-state.gz and b/.yarn/install-state.gz differ
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