sdk: update

This commit is contained in:
Koushik Dutta
2026-01-19 21:34:46 -08:00
parent 35df17334c
commit 3c8b513c31
7 changed files with 56 additions and 9 deletions

4
sdk/package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "@scrypted/sdk",
"version": "0.5.57",
"version": "0.5.58",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@scrypted/sdk",
"version": "0.5.57",
"version": "0.5.58",
"license": "ISC",
"dependencies": {
"@babel/preset-typescript": "^7.27.1",

View File

@@ -1,11 +1,12 @@
{
"name": "@scrypted/sdk",
"version": "0.5.57",
"version": "0.5.58",
"description": "",
"main": "dist/src/index.js",
"exports": {
".": "./dist/src/index.js",
"./acl": "./dist/src/acl.js",
"./promise-debounce": "./dist/src/promise-debounce.js",
"./storage-settings": "./dist/src/storage-settings.js",
"./settings-mixin": "./dist/src/settings-mixin.js"
},

View File

@@ -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 {
const methods = scryptedInterfaces.map(scryptedInterface => ScryptedInterfaceDescriptors[scryptedInterface]?.methods || []).flat();
@@ -118,3 +119,34 @@ export class AccessControls {
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;
}

View 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;
}
}

View File

@@ -1,12 +1,12 @@
{
"name": "@scrypted/types",
"version": "0.5.53",
"version": "0.5.54",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@scrypted/types",
"version": "0.5.53",
"version": "0.5.54",
"license": "ISC",
"dependencies": {
"openai": "^6.1.0"

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/types",
"version": "0.5.53",
"version": "0.5.54",
"description": "",
"main": "dist/index.js",
"author": "",

View File

@@ -1131,7 +1131,7 @@ class TamperState(TypedDict):
pass
TYPES_VERSION = "0.5.53"
TYPES_VERSION = "0.5.54"
class AirPurifier: