ring: move promise utils

This commit is contained in:
Koushik Dutta
2022-02-23 21:49:58 -08:00
parent b690cd71cc
commit 3239b6021d
4 changed files with 19 additions and 32 deletions

View File

@@ -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": {

View File

@@ -33,6 +33,7 @@
"got": "11.8.2"
},
"devDependencies": {
"@scrypted/common": "file:../../common",
"@scrypted/sdk": "file:../../sdk"
},
"version": "0.0.59"

View File

@@ -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';

View File

@@ -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);
})
}