mirror of
https://github.com/koush/scrypted.git
synced 2026-02-03 14:13:28 +00:00
sdk: update
This commit is contained in:
4
sdk/package-lock.json
generated
4
sdk/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@scrypted/sdk",
|
"name": "@scrypted/sdk",
|
||||||
"version": "0.5.57",
|
"version": "0.5.58",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@scrypted/sdk",
|
"name": "@scrypted/sdk",
|
||||||
"version": "0.5.57",
|
"version": "0.5.58",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/preset-typescript": "^7.27.1",
|
"@babel/preset-typescript": "^7.27.1",
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@scrypted/sdk",
|
"name": "@scrypted/sdk",
|
||||||
"version": "0.5.57",
|
"version": "0.5.58",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "dist/src/index.js",
|
"main": "dist/src/index.js",
|
||||||
"exports": {
|
"exports": {
|
||||||
".": "./dist/src/index.js",
|
".": "./dist/src/index.js",
|
||||||
"./acl": "./dist/src/acl.js",
|
"./acl": "./dist/src/acl.js",
|
||||||
|
"./promise-debounce": "./dist/src/promise-debounce.js",
|
||||||
"./storage-settings": "./dist/src/storage-settings.js",
|
"./storage-settings": "./dist/src/storage-settings.js",
|
||||||
"./settings-mixin": "./dist/src/settings-mixin.js"
|
"./settings-mixin": "./dist/src/settings-mixin.js"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { EventDetails, ScryptedDeviceAccessControl, ScryptedInterface, ScryptedInterfaceDescriptors, ScryptedUserAccessControl } from ".";
|
import sdk, { EventDetails, ScryptedDeviceAccessControl, ScryptedInterface, ScryptedInterfaceDescriptors, ScryptedUser, ScryptedUserAccessControl } from ".";
|
||||||
|
import { createCachingMapPromiseDebouncer } from './promise-debounce';
|
||||||
|
|
||||||
export function addAccessControlsForInterface(id: string, ...scryptedInterfaces: ScryptedInterface[]): ScryptedDeviceAccessControl {
|
export function addAccessControlsForInterface(id: string, ...scryptedInterfaces: ScryptedInterface[]): ScryptedDeviceAccessControl {
|
||||||
const methods = scryptedInterfaces.map(scryptedInterface => ScryptedInterfaceDescriptors[scryptedInterface]?.methods || []).flat();
|
const methods = scryptedInterfaces.map(scryptedInterface => ScryptedInterfaceDescriptors[scryptedInterface]?.methods || []).flat();
|
||||||
@@ -118,3 +119,34 @@ export class AccessControls {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const accessControls = createCachingMapPromiseDebouncer<AccessControls|undefined>(60 * 1000);
|
||||||
|
|
||||||
|
export async function checkUserId(id: string, userId: string) {
|
||||||
|
const user = sdk.systemManager.getDeviceById<ScryptedUser>(userId);
|
||||||
|
if (!user || !user.interfaces?.includes(ScryptedInterface.ScryptedUser)) {
|
||||||
|
// console.error('Error delivering notification, invalid user id:', userId);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sdk.systemManager.getDeviceById(id))
|
||||||
|
return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const acl = await accessControls(userId, async () => {
|
||||||
|
const acls = await user.getScryptedUserAccessControl();
|
||||||
|
const acl = acls ? new AccessControls(acls) : undefined;
|
||||||
|
return acl;
|
||||||
|
});
|
||||||
|
if (acl?.shouldRejectDevice(id)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
// console.error('Error delivering notification, ACL check failed.', e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return user;
|
||||||
|
}
|
||||||
|
|||||||
14
sdk/src/promise-debounce.ts
Normal file
14
sdk/src/promise-debounce.ts
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export function createCachingMapPromiseDebouncer<T>(duration: number) {
|
||||||
|
const map = new Map<string, Promise<T>>();
|
||||||
|
|
||||||
|
return (key: any, func: () => Promise<T>): Promise<T> => {
|
||||||
|
const keyStr = JSON.stringify(key);
|
||||||
|
let value = map.get(keyStr);
|
||||||
|
if (!value) {
|
||||||
|
value = func();
|
||||||
|
map.set(keyStr, value);
|
||||||
|
setTimeout(() => map.delete(keyStr), duration);
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
4
sdk/types/package-lock.json
generated
4
sdk/types/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@scrypted/types",
|
"name": "@scrypted/types",
|
||||||
"version": "0.5.53",
|
"version": "0.5.54",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@scrypted/types",
|
"name": "@scrypted/types",
|
||||||
"version": "0.5.53",
|
"version": "0.5.54",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"openai": "^6.1.0"
|
"openai": "^6.1.0"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@scrypted/types",
|
"name": "@scrypted/types",
|
||||||
"version": "0.5.53",
|
"version": "0.5.54",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"author": "",
|
"author": "",
|
||||||
|
|||||||
@@ -1131,7 +1131,7 @@ class TamperState(TypedDict):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
TYPES_VERSION = "0.5.53"
|
TYPES_VERSION = "0.5.54"
|
||||||
|
|
||||||
|
|
||||||
class AirPurifier:
|
class AirPurifier:
|
||||||
|
|||||||
Reference in New Issue
Block a user