mirror of
https://github.com/koush/scrypted.git
synced 2026-02-12 01:54:27 +00:00
ring: move promise utils
This commit is contained in:
18
plugins/ring/package-lock.json
generated
18
plugins/ring/package-lock.json
generated
@@ -13,6 +13,7 @@
|
||||
"axios": "^0.24.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@scrypted/common": "file:../../common",
|
||||
"@scrypted/sdk": "file:../../sdk"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
@@ -22,11 +23,12 @@
|
||||
"../../common": {
|
||||
"name": "@scrypted/common",
|
||||
"version": "1.0.1",
|
||||
"extraneous": true,
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"@koush/werift": "file:../external/werift/packages/webrtc",
|
||||
"@scrypted/sdk": "file:../sdk",
|
||||
"node-fetch-commonjs": "^3.1.1",
|
||||
"typescript": "^4.4.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -475,6 +477,10 @@
|
||||
"tsyringe": "^4.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@scrypted/common": {
|
||||
"resolved": "../../common",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/@scrypted/sdk": {
|
||||
"resolved": "../../sdk",
|
||||
"link": true
|
||||
@@ -2684,6 +2690,16 @@
|
||||
"tsyringe": "^4.6.0"
|
||||
}
|
||||
},
|
||||
"@scrypted/common": {
|
||||
"version": "file:../../common",
|
||||
"requires": {
|
||||
"@koush/werift": "file:../external/werift/packages/webrtc",
|
||||
"@scrypted/sdk": "file:../sdk",
|
||||
"@types/node": "^16.9.0",
|
||||
"node-fetch-commonjs": "^3.1.1",
|
||||
"typescript": "^4.4.3"
|
||||
}
|
||||
},
|
||||
"@scrypted/sdk": {
|
||||
"version": "file:../../sdk",
|
||||
"requires": {
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
"got": "11.8.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@scrypted/common": "file:../../common",
|
||||
"@scrypted/sdk": "file:../../sdk"
|
||||
},
|
||||
"version": "0.0.59"
|
||||
|
||||
@@ -8,7 +8,7 @@ import { startRTCSignalingSession } from '../../../common/src/rtc-signaling';
|
||||
import { generateUuid } from './ring-client-api';
|
||||
import fs from 'fs';
|
||||
import { clientApi } from './ring-client-api';
|
||||
import { RefreshPromise, singletonPromise, timeoutPromise } from './util';
|
||||
import { RefreshPromise, singletonPromise, timeoutPromise } from '@scrypted/common/src/promise-utils';
|
||||
import { LiveCallNegotiation } from './ring-client-api';
|
||||
import dgram from 'dgram';
|
||||
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
export interface RefreshPromise<T> {
|
||||
promise: Promise<T>;
|
||||
cacheDuration: number;
|
||||
}
|
||||
|
||||
export function singletonPromise<T>(rp: RefreshPromise<T>, method: () => Promise<T>) {
|
||||
if (rp?.promise)
|
||||
return rp;
|
||||
|
||||
const promise = method();
|
||||
if (!rp) {
|
||||
rp = {
|
||||
promise,
|
||||
cacheDuration: 0,
|
||||
}
|
||||
}
|
||||
else {
|
||||
rp.promise = promise;
|
||||
}
|
||||
promise.finally(() => setTimeout(() => rp.promise = undefined, rp.cacheDuration));
|
||||
return rp;
|
||||
}
|
||||
|
||||
export function timeoutPromise<T>(timeout: number, promise: Promise<T>): Promise<T> {
|
||||
return new Promise<T>((resolve, reject) => {
|
||||
setTimeout(() => reject(new Error('timed out')), timeout);
|
||||
promise.then(resolve);
|
||||
promise.catch(reject);
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user