mirror of
https://github.com/koush/scrypted.git
synced 2026-03-20 16:40:24 +00:00
webhook: mediaobject support
This commit is contained in:
4
plugins/webhook/package-lock.json
generated
4
plugins/webhook/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@scrypted/webhook",
|
||||
"version": "0.0.2",
|
||||
"version": "0.0.3",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@scrypted/webhook",
|
||||
"version": "0.0.2",
|
||||
"version": "0.0.3",
|
||||
"dependencies": {
|
||||
"@types/node": "^16.6.1"
|
||||
},
|
||||
|
||||
@@ -34,5 +34,5 @@
|
||||
"devDependencies": {
|
||||
"@scrypted/sdk": "file:../../sdk"
|
||||
},
|
||||
"version": "0.0.2"
|
||||
"version": "0.0.3"
|
||||
}
|
||||
|
||||
@@ -8,7 +8,12 @@ import { randomBytes } from 'crypto';
|
||||
const allInterfaceMethods: string[] = [].concat(...Object.values(ScryptedInterfaceDescriptors).map((type: any) => type.methods));
|
||||
const allInterfaceProperties: string[] = [].concat(...Object.values(ScryptedInterfaceDescriptors).map((type: any) => type.properties));
|
||||
|
||||
const { systemManager, endpointManager } = sdk;
|
||||
const { systemManager, endpointManager, mediaManager } = sdk;
|
||||
|
||||
const mediaObjectMethods = [
|
||||
'takePicture',
|
||||
'getVideoStream',
|
||||
]
|
||||
|
||||
class WebhookMixin extends SettingsMixinDeviceBase<Settings> {
|
||||
async getMixinSettings(): Promise<Setting[]> {
|
||||
@@ -75,6 +80,20 @@ class WebhookMixin extends SettingsMixinDeviceBase<Settings> {
|
||||
this.console.log("##################################################")
|
||||
}
|
||||
|
||||
async maybeSendMediaObject(response: HttpResponse, value: any, method: string) {
|
||||
if (!mediaObjectMethods.includes(method)) {
|
||||
response?.send(value.toString());
|
||||
return;
|
||||
}
|
||||
|
||||
const buffer = await mediaManager.convertMediaObjectToBuffer(value, 'image/jpeg');
|
||||
response?.send(buffer, {
|
||||
headers: {
|
||||
'Content-Type': 'image/jpeg',
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
async handle(request: HttpRequest, response: HttpResponse, device: ScryptedDevice, pathSegments: string[]) {
|
||||
const token = pathSegments[2];
|
||||
if (token !== this.storage.getItem('token')) {
|
||||
@@ -92,13 +111,15 @@ class WebhookMixin extends SettingsMixinDeviceBase<Settings> {
|
||||
parameters = JSON.parse(p);
|
||||
}
|
||||
|
||||
response?.send('ok');
|
||||
|
||||
try {
|
||||
await device[methodOrProperty](...parameters);
|
||||
const result = await device[methodOrProperty](...parameters);
|
||||
this.maybeSendMediaObject(response, result, methodOrProperty);
|
||||
}
|
||||
catch (e) {
|
||||
this.console.error('webhook action error', e);
|
||||
response.send('Internal Error', {
|
||||
code: 500,
|
||||
})
|
||||
}
|
||||
}
|
||||
else if (allInterfaceProperties.includes(methodOrProperty)) {
|
||||
@@ -111,7 +132,7 @@ class WebhookMixin extends SettingsMixinDeviceBase<Settings> {
|
||||
});
|
||||
}
|
||||
else {
|
||||
response?.send(value);
|
||||
response?.send(value.toString());
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
Reference in New Issue
Block a user