@semilimes/node-red-semilimes
Advanced tools
Comparing version 0.10.2 to 1.0.0
@@ -343,2 +343,4 @@ [ | ||
"saveLocationType": "flow", | ||
"saveRequestIdLocation": "", | ||
"saveRequestIdLocationType": "msg", | ||
"logToConsole": false, | ||
@@ -352,22 +354,2 @@ "x": 910, | ||
{ | ||
"id": "bbaca621aa7988a2", | ||
"type": "filterSubmission", | ||
"z": "03f230443c464b5e", | ||
"name": "", | ||
"reference": "myLampForm", | ||
"referenceType": "str", | ||
"messageId": "#:(file)::savedMessageId", | ||
"messageIdType": "flow", | ||
"saveLocation": "savedSubmission", | ||
"saveLocationType": "msg", | ||
"extractValues": true, | ||
"x": 400, | ||
"y": 420, | ||
"wires": [ | ||
[ | ||
"8ae9ea17937ebc91" | ||
] | ||
] | ||
}, | ||
{ | ||
"id": "6b2b5babc8813314", | ||
@@ -650,6 +632,37 @@ "type": "function", | ||
[ | ||
"bbaca621aa7988a2" | ||
"f9182d6dea0f8988" | ||
] | ||
] | ||
}, | ||
{ | ||
"id": "f9182d6dea0f8988", | ||
"type": "filter", | ||
"z": "03f230443c464b5e", | ||
"connector": "", | ||
"name": "", | ||
"filter": "submission", | ||
"reference": "myLampForm", | ||
"referenceType": "str", | ||
"messageId": "#:(file)::savedMessageId", | ||
"messageIdType": "flow", | ||
"extractValues": true, | ||
"chat": "p2p", | ||
"senderId": "", | ||
"senderIdType": "str", | ||
"groupChatId": "", | ||
"groupChatIdType": "str", | ||
"channelId": "", | ||
"channelIdType": "str", | ||
"requestId": "", | ||
"requestIdType": "str", | ||
"saveLocation": "savedSubmission", | ||
"saveLocationType": "msg", | ||
"x": 420, | ||
"y": 420, | ||
"wires": [ | ||
[ | ||
"8ae9ea17937ebc91" | ||
] | ||
] | ||
} | ||
] |
{ | ||
"name": "@semilimes/node-red-semilimes", | ||
"version": "0.10.2", | ||
"version": "1.0.0", | ||
"description": "The new semilimes connector which integrates with the public API", | ||
@@ -19,44 +19,8 @@ "scripts": { | ||
"listener": "src/listener.js", | ||
"filter": "src/filter.js", | ||
"uploader": "src/uploader.js", | ||
"filterSubmission": "src/filters/filterSubmission.js", | ||
"downloader": "src/downloader.js", | ||
"tunnel": "src/tunnel.js", | ||
"sme-main-core": "src/sme-main-core.js", | ||
"sme-main-connector": "src/sme-main-connector.js", | ||
"sme-main-intent": "src/sme-main-intent.js", | ||
"sme-main-sender": "src/sme-main-sender.js", | ||
"sme-main-listener": "src/sme-main-listener.js", | ||
"sme-main-sshTunnel": "src/sme-main-sshTunnel.js", | ||
"sme-main-formSaver": "src/sme-main-formSaver.js", | ||
"sme-main-formLoader": "src/sme-main-formLoader.js", | ||
"sme-main-formUpdater": "src/sme-main-formUpdater.js", | ||
"sme-main-uploader": "src/sme-main-uploader.js", | ||
"sme-comp-text": "src/data-components/sme-comp-text.js", | ||
"sme-comp-html": "src/data-components/sme-comp-html.js", | ||
"sme-comp-file": "src/data-components/sme-comp-file.js", | ||
"sme-comp-contact": "src/data-components/sme-comp-contact.js", | ||
"sme-comp-location": "src/data-components/sme-comp-location.js", | ||
"sme-comp-webview": "src/data-components/sme-comp-webview.js", | ||
"sme-comp-channel": "src/data-components/sme-comp-channel.js", | ||
"sme-comp-tunnel": "src/data-components/sme-comp-tunnel.js", | ||
"sme-comp-form": "src/data-components/sme-comp-form.js", | ||
"sme-formComp-label": "src/form-components/sme-formComp-label.js", | ||
"sme-formComp-textBox": "src/form-components/sme-formComp-textBox.js", | ||
"sme-formComp-buttonList": "src/form-components/sme-formComp-buttonList.js", | ||
"sme-formComp-singleChoice": "src/form-components/sme-formComp-singleChoice.js", | ||
"sme-formComp-multiChoice": "src/form-components/sme-formComp-multiChoice.js", | ||
"sme-formComp-switch": "src/form-components/sme-formComp-switch.js", | ||
"sme-formComp-slider": "src/form-components/sme-formComp-slider.js", | ||
"sme-formComp-datePicker": "src/form-components/sme-formComp-datePicker.js", | ||
"sme-formComp-timePicker": "src/form-components/sme-formComp-timePicker.js", | ||
"sme-formComp-locationPicker": "src/form-components/sme-formComp-locationPicker.js", | ||
"sme-formComp-photoPicker": "src/form-components/sme-formComp-photoPicker.js", | ||
"sme-formComp-filePicker": "src/form-components/sme-formComp-filePicker.js", | ||
"sme-formComp-contactPicker": "src/form-components/sme-formComp-contactPicker.js", | ||
"sme-formComp-groupChatPicker": "src/form-components/sme-formComp-groupChatPicker.js", | ||
"sme-formComp-channelPicker": "src/form-components/sme-formComp-channelPicker.js", | ||
"sme-formComp-bucketPicker": "src/form-components/sme-formComp-bucketPicker.js", | ||
"sme-formComp-hiddenValue": "src/form-components/sme-formComp-hiddenValue.js", | ||
"sme-formComp-qrCodeScanner": "src/form-components/sme-formComp-qrCodeScanner.js", | ||
"sme-formComp-nfcReader": "src/form-components/sme-formComp-nfcReader.js", | ||
"sme-filter-formSubmission": "src/filters/sme-filter-formSubmission.js" | ||
"sme-main-connector": "src/sme-main-connector.js" | ||
} | ||
@@ -67,2 +31,3 @@ }, | ||
"form-data": "^4.0.0", | ||
"mime-types": "^2.1.35", | ||
"node-forge": "^1.3.1", | ||
@@ -69,0 +34,0 @@ "ssh2": "^1.11.0", |
@@ -6,5 +6,2 @@ # Node-RED semilimes connector | ||
> **Important Note**: the current version (0.10.*) contains a new set of nodes (semilimesAPI section), while leaving the old nodes for backwards compatibility (semilimesAPI_deprecated section), to let current users transition their existing flows to the new node set. | ||
> The next release (1.0.0) will permanently remove all the deprecated nodes, so make sure you have completed the transition before further update this package. | ||
[Github project](https://github.com/semilimes/nodered-publicapi-connector) | ||
@@ -11,0 +8,0 @@ |
@@ -127,4 +127,4 @@ "use strict"; | ||
optionsFieldValue.push({ | ||
name: button.value, | ||
value: button.id | ||
name: button.name, | ||
value: button.value | ||
}); | ||
@@ -149,4 +149,4 @@ }); | ||
optionsFieldValue.push({ | ||
name: choice.value, | ||
value: choice.id | ||
name: choice.name, | ||
value: choice.value | ||
}); | ||
@@ -153,0 +153,0 @@ }); |
@@ -44,2 +44,5 @@ "use strict"; | ||
this.saveRequestIdLocation = config.saveRequestIdLocation; | ||
this.saveRequestIdLocationType = config.saveRequestIdLocationType; | ||
this.logToConsole = config.logToConsole; | ||
@@ -67,2 +70,18 @@ | ||
switch (node.actionName) { | ||
case 'account_my': { | ||
smeHelper.clearSendingBox(msg); | ||
var request = { | ||
requestId: getNewRequestId(), | ||
endpoint: "/account/my", | ||
httpMethod: "GET", | ||
parameters: { | ||
main: true, | ||
sub: true, | ||
shared: true, | ||
details: true | ||
} | ||
}; | ||
smeHelper.addSendingMsg(msg, request); | ||
break; | ||
} | ||
case 'account_contacts': { | ||
@@ -165,3 +184,4 @@ smeHelper.clearSendingBox(msg); | ||
body: { | ||
title: smeHelper.getNodeConfigValue(node, msg, node.titleType, node.title) | ||
title: smeHelper.getNodeConfigValue(node, msg, node.titleType, node.title), | ||
recipientIds: [] | ||
} | ||
@@ -329,2 +349,33 @@ }; | ||
}); | ||
//Extract request id(s) | ||
var requestIdToSave = undefined | ||
if (smeSendingBox.length === 1) { | ||
requestIdToSave = smeSendingBox[0].requestId; | ||
} else if (smeSendingBox.length > 1) { | ||
requestIdToSave = []; | ||
smeSendingBox.forEach(smeMsg => { | ||
requestIdToSave.push(smeMsg.requestId); | ||
}); | ||
} | ||
//Save request id in saved location | ||
if (requestIdToSave !== undefined && node.saveRequestIdLocation) { | ||
switch (node.saveRequestIdLocationType) { | ||
case 'msg': | ||
msg[node.saveRequestIdLocation] = requestIdToSave; | ||
break; | ||
case 'flow': | ||
node.context().flow.set(node.saveRequestIdLocation, requestIdToSave); | ||
break; | ||
case 'global': | ||
node.context().global.set(node.saveRequestIdLocation, requestIdToSave); | ||
break; | ||
default: | ||
break; | ||
} | ||
} else { | ||
node.warn('Save requestId location value is invalid!'); | ||
} | ||
smeHelper.clearSendingBox(msg); | ||
@@ -336,2 +387,9 @@ send(msg, false); | ||
// Send message via HTTP REST | ||
var entityToSave = undefined; | ||
if (smeSendingBox.length === 1) { | ||
entityToSave = ""; | ||
} else if (smeSendingBox.length > 1) { | ||
entityToSave = []; | ||
} | ||
smeSendingBox.forEach((smeMsg, index) => { | ||
@@ -348,27 +406,39 @@ var promise = smeConnector.sendMessage(smeMsg, node.logToConsole); | ||
if (saveMode) { | ||
var tempValueToSave = undefined; | ||
switch (saveMode) { | ||
case 'messageId': | ||
tempValueToSave = value.data?.sentMessage?.messageId; | ||
break; | ||
case 'groupChatId': | ||
tempValueToSave = value.data?.createdGroupChat?.groupChatId; | ||
break; | ||
case 'channelId': | ||
tempValueToSave = value.data?.createdChannel?.channelId; | ||
break; | ||
default: | ||
break; | ||
} | ||
//Add tempValue to entityToSave | ||
if(tempValueToSave) { | ||
if (Array.isArray(entityToSave)) { | ||
entityToSave.push(tempValueToSave); | ||
} else { | ||
entityToSave = tempValueToSave; | ||
} | ||
} | ||
} | ||
if (saveMode) { | ||
if (node.saveLocation) { | ||
var valueToSave = undefined; | ||
switch (saveMode) { | ||
case 'messageId': | ||
valueToSave = value.data?.sentMessage?.messageId; | ||
break; | ||
case 'groupChatId': | ||
valueToSave = value.data?.createdGroupChat?.groupChatId; | ||
break; | ||
case 'channelId': | ||
valueToSave = value.data?.createdChannel?.channelId; | ||
break; | ||
default: | ||
break; | ||
} | ||
if (valueToSave) { | ||
//Finally save entity to location | ||
if (entityToSave) { | ||
switch (node.saveLocationType) { | ||
case 'msg': | ||
msg[node.saveLocation] = valueToSave; | ||
msg[node.saveLocation] = entityToSave; | ||
break; | ||
case 'flow': | ||
node.context().flow.set(node.saveLocation, valueToSave); | ||
node.context().flow.set(node.saveLocation, entityToSave); | ||
break; | ||
case 'global': | ||
node.context().global.set(node.saveLocation, valueToSave); | ||
node.context().global.set(node.saveLocation, entityToSave); | ||
break; | ||
@@ -375,0 +445,0 @@ default: |
@@ -122,7 +122,7 @@ "use strict"; | ||
error => { | ||
res.sendStatus(500).send(error); | ||
res.status(500).send(error); | ||
} | ||
) | ||
.catch(error => { | ||
res.sendStatus(500).send(error); | ||
res.status(500).send(error); | ||
}) | ||
@@ -145,7 +145,7 @@ }); | ||
error => { | ||
res.sendStatus(500).send(error); | ||
res.status(500).send(error); | ||
} | ||
) | ||
.catch(error => { | ||
res.sendStatus(500).send(error); | ||
res.status(500).send(error); | ||
}) | ||
@@ -172,7 +172,8 @@ }); | ||
error => { | ||
res.sendStatus(500).send(error); | ||
console.log(error); | ||
res.status(500).send(error); | ||
} | ||
) | ||
.catch(error => { | ||
res.sendStatus(500).send(error); | ||
res.status(500).send(error); | ||
}) | ||
@@ -179,0 +180,0 @@ }); |
@@ -10,2 +10,3 @@ "use strict"; | ||
const axios = require('axios'); | ||
const mime = require('mime-types'); | ||
@@ -377,2 +378,3 @@ module.exports = function (RED) { | ||
function callApi(endpoint, method, data, logEnabled = false) { | ||
//Upload file | ||
if (endpoint == "/service/file/upload") { | ||
@@ -406,4 +408,56 @@ | ||
}); | ||
//Download file | ||
} else if (endpoint == "/service/file/download") { | ||
} else { | ||
return new Promise((resolve, reject) => { | ||
if (!data || !data.filePath || !data.fileId) { | ||
reject("Data is empty!"); | ||
} | ||
//const writer = fs.createWriteStream(data.filePath); | ||
var localData = data && JSON.parse(JSON.stringify(data)); | ||
delete localData.filePath; | ||
let config = { | ||
method: method, | ||
url: `${serverApiURL}${endpoint}`, | ||
responseType: 'stream', | ||
headers: { | ||
'Authorization': `Bearer ${apiKey}`, | ||
}, | ||
data : localData | ||
}; | ||
axios.request(config) | ||
.then((response) => { | ||
const contentType = response.headers['content-type']; | ||
const mimeExtension = mime.extension(contentType); | ||
const fileExtension = mimeExtension ? "."+mimeExtension : ""; | ||
const writer = fs.createWriteStream(`${data.filePath}${fileExtension}`); | ||
response.data.pipe(writer); | ||
let error = null; | ||
writer.on('error', err => { | ||
error = err; | ||
writer.close(); | ||
console.error('Error when writing downloaded file: ', error); | ||
reject(err); | ||
}); | ||
writer.on('close', () => { | ||
if (!error) { | ||
//console.log('Successfully downloaded file in: ', data.filePath+fileExtension); | ||
resolve(data.filePath+fileExtension); | ||
} | ||
}); | ||
}) | ||
.catch((error) => { | ||
console.error('Error when calling downloader API: ', error); | ||
reject(error); | ||
}) | ||
}); | ||
} | ||
else { | ||
//Message endpoints | ||
@@ -434,3 +488,3 @@ return new Promise((resolve, reject) => { | ||
'Content-Type': 'application/json; charset=UTF-8', | ||
'Content-Length': (body && body.length) || 0, | ||
'Content-Length': (body && Buffer.byteLength(body, 'utf-8')) || 0 | ||
}, | ||
@@ -437,0 +491,0 @@ timeout: 5000 |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
1
6
2
817104
6
40
3980
95
+ Addedmime-types@^2.1.35
+ Addednan@2.19.0(transitive)
+ Addedws@8.17.0(transitive)
- Removednan@2.20.0(transitive)
- Removedws@8.17.1(transitive)