feat(assist): full autocomplete
feat(assist): solved endpoints conflicts feat(api): live sessions full autocomplete
This commit is contained in:
parent
c6b719b9fa
commit
c254aab413
8 changed files with 122 additions and 75 deletions
|
|
@ -130,7 +130,7 @@ def autocomplete(project_id, q: str, key: str = None):
|
|||
except:
|
||||
print("couldn't get response")
|
||||
return {"errors": ["Something went wrong wile calling assist"]}
|
||||
return results
|
||||
return {"data": results}
|
||||
|
||||
|
||||
def get_ice_servers():
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@ class ORRoute(APIRoute):
|
|||
if isinstance(response, JSONResponse):
|
||||
response: JSONResponse = response
|
||||
body = json.loads(response.body.decode('utf8'))
|
||||
if response.status_code == 200 and body is not None and body.get("errors") is not None:
|
||||
if response.status_code == 200 \
|
||||
and body is not None and isinstance(body, dict) \
|
||||
and body.get("errors") is not None:
|
||||
if "not found" in body["errors"][0]:
|
||||
response.status_code = status.HTTP_404_NOT_FOUND
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -75,16 +75,17 @@ if (process.env.uws !== "true") {
|
|||
}
|
||||
uapp.get(`${PREFIX}/${process.env.S3_KEY}/sockets-list`, uWrapper(socket.handlers.socketsList));
|
||||
uapp.post(`${PREFIX}/${process.env.S3_KEY}/sockets-list`, uWrapper(socket.handlers.socketsList));
|
||||
uapp.get(`${PREFIX}/${process.env.S3_KEY}/sockets-list/:projectKey/autocomplete`, uWrapper(socket.handlers.autocomplete));
|
||||
uapp.get(`${PREFIX}/${process.env.S3_KEY}/sockets-list/:projectKey`, uWrapper(socket.handlers.socketsListByProject));
|
||||
uapp.post(`${PREFIX}/${process.env.S3_KEY}/sockets-list/:projectKey`, uWrapper(socket.handlers.socketsListByProject));
|
||||
uapp.get(`${PREFIX}/${process.env.S3_KEY}/sockets-list/:projectKey/:sessionId`, uWrapper(socket.handlers.socketsListByProject));
|
||||
|
||||
uapp.get(`${PREFIX}/${process.env.S3_KEY}/sockets-live`, uWrapper(socket.handlers.socketsLive));
|
||||
uapp.post(`${PREFIX}/${process.env.S3_KEY}/sockets-live`, uWrapper(socket.handlers.socketsLive));
|
||||
uapp.get(`${PREFIX}/${process.env.S3_KEY}/sockets-live/:projectKey/autocomplete`, uWrapper(socket.handlers.autocomplete));
|
||||
uapp.get(`${PREFIX}/${process.env.S3_KEY}/sockets-live/:projectKey`, uWrapper(socket.handlers.socketsLiveByProject));
|
||||
uapp.post(`${PREFIX}/${process.env.S3_KEY}/sockets-live/:projectKey`, uWrapper(socket.handlers.socketsLiveByProject));
|
||||
uapp.get(`${PREFIX}/${process.env.S3_KEY}/sockets-live/:projectKey/:sessionId`, uWrapper(socket.handlers.socketsLiveByProject));
|
||||
uapp.get(`${PREFIX}/${process.env.S3_KEY}/sockets-live/:projectKey/autocomplete`, uWrapper(socket.handlers.autocomplete));
|
||||
|
||||
|
||||
socket.start(uapp);
|
||||
|
|
|
|||
|
|
@ -1,7 +1,14 @@
|
|||
const _io = require('socket.io');
|
||||
const express = require('express');
|
||||
const uaParser = require('ua-parser-js');
|
||||
const {extractPeerId, hasFilters, isValidSession, sortPaginate} = require('../utils/helper');
|
||||
const {
|
||||
extractPeerId,
|
||||
hasFilters,
|
||||
isValidSession,
|
||||
sortPaginate,
|
||||
getValidAttributes,
|
||||
uniqueAutocomplete
|
||||
} = require('../utils/helper');
|
||||
const {
|
||||
extractProjectKeyFromRequest,
|
||||
extractSessionIdFromRequest,
|
||||
|
|
@ -104,8 +111,6 @@ const socketsList = async function (req, res) {
|
|||
}
|
||||
respond(res, liveSessions);
|
||||
}
|
||||
wsRouter.get(`/sockets-list`, socketsList);
|
||||
wsRouter.post(`/sockets-list`, socketsList);
|
||||
|
||||
const socketsListByProject = async function (req, res) {
|
||||
debug && console.log("[WS]looking for available sessions");
|
||||
|
|
@ -133,9 +138,6 @@ const socketsListByProject = async function (req, res) {
|
|||
}
|
||||
respond(res, liveSessions[_projectKey] || []);
|
||||
}
|
||||
wsRouter.get(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.post(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.get(`/sockets-list/:projectKey/:sessionId`, socketsListByProject);
|
||||
|
||||
const socketsLive = async function (req, res) {
|
||||
debug && console.log("[WS]looking for all available LIVE sessions");
|
||||
|
|
@ -163,8 +165,6 @@ const socketsLive = async function (req, res) {
|
|||
}
|
||||
respond(res, sortPaginate(liveSessions, filters));
|
||||
}
|
||||
wsRouter.get(`/sockets-live`, socketsLive);
|
||||
wsRouter.post(`/sockets-live`, socketsLive);
|
||||
|
||||
const socketsLiveByProject = async function (req, res) {
|
||||
debug && console.log("[WS]looking for available LIVE sessions");
|
||||
|
|
@ -194,14 +194,11 @@ const socketsLiveByProject = async function (req, res) {
|
|||
}
|
||||
respond(res, sortPaginate(liveSessions[_projectKey] || [], filters));
|
||||
}
|
||||
wsRouter.get(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.post(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveByProject);
|
||||
|
||||
const autocomplete = async function (req, res) {
|
||||
debug && console.log("[WS]looking for available LIVE sessions");
|
||||
debug && console.log("[WS]autocomplete");
|
||||
let _projectKey = extractProjectKeyFromRequest(req);
|
||||
let filters = extractPayloadFromRequest(req);
|
||||
let filters = await extractPayloadFromRequest(req);
|
||||
let results = [];
|
||||
if (filters.query && Object.keys(filters.query).length > 0) {
|
||||
let rooms = await getAvailableRooms();
|
||||
|
|
@ -217,9 +214,8 @@ const autocomplete = async function (req, res) {
|
|||
}
|
||||
}
|
||||
}
|
||||
respond(res, results);
|
||||
respond(res, uniqueAutocomplete(results));
|
||||
}
|
||||
wsRouter.get(`/sockets-live/:projectKey/autocomplete`, autocomplete);
|
||||
|
||||
const findSessionSocketId = async (io, peerId) => {
|
||||
const connected_sockets = await io.in(peerId).fetchSockets();
|
||||
|
|
@ -292,6 +288,21 @@ function extractSessionInfo(socket) {
|
|||
}
|
||||
}
|
||||
|
||||
wsRouter.get(`/sockets-list`, socketsList);
|
||||
wsRouter.post(`/sockets-list`, socketsList);
|
||||
wsRouter.get(`/sockets-list/:projectKey/autocomplete`, autocomplete);
|
||||
wsRouter.get(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.post(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.get(`/sockets-list/:projectKey/:sessionId`, socketsListByProject);
|
||||
|
||||
wsRouter.get(`/sockets-live`, socketsLive);
|
||||
wsRouter.post(`/sockets-live`, socketsLive);
|
||||
wsRouter.get(`/sockets-live/:projectKey/autocomplete`, autocomplete);
|
||||
wsRouter.get(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.post(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveByProject);
|
||||
|
||||
|
||||
module.exports = {
|
||||
wsRouter,
|
||||
start: (server, prefix) => {
|
||||
|
|
@ -420,6 +431,7 @@ module.exports = {
|
|||
socketsList,
|
||||
socketsListByProject,
|
||||
socketsLive,
|
||||
socketsLiveByProject
|
||||
socketsLiveByProject,
|
||||
autocomplete
|
||||
}
|
||||
};
|
||||
|
|
@ -1,11 +1,18 @@
|
|||
const _io = require('socket.io');
|
||||
const express = require('express');
|
||||
const uaParser = require('ua-parser-js');
|
||||
const {extractPeerId, hasFilters, isValidSession, sortPaginate} = require('../utils/helper');
|
||||
const {
|
||||
extractPeerId,
|
||||
hasFilters,
|
||||
isValidSession,
|
||||
sortPaginate,
|
||||
getValidAttributes,
|
||||
uniqueAutocomplete
|
||||
} = require('../utils/helper');
|
||||
const {
|
||||
extractProjectKeyFromRequest,
|
||||
extractSessionIdFromRequest,
|
||||
extractPayloadFromRequest
|
||||
extractPayloadFromRequest,
|
||||
} = require('../utils/helper-ee');
|
||||
const {geoip} = require('../utils/geoIP');
|
||||
const wsRouter = express.Router();
|
||||
|
|
@ -86,8 +93,6 @@ const socketsList = async function (req, res) {
|
|||
}
|
||||
respond(res, liveSessions);
|
||||
}
|
||||
wsRouter.get(`/sockets-list`, socketsList);
|
||||
wsRouter.post(`/sockets-list`, socketsList);
|
||||
|
||||
const socketsListByProject = async function (req, res) {
|
||||
debug && console.log("[WS]looking for available sessions");
|
||||
|
|
@ -115,9 +120,6 @@ const socketsListByProject = async function (req, res) {
|
|||
}
|
||||
respond(res, sortPaginate(liveSessions[_projectKey] || [], filters));
|
||||
}
|
||||
wsRouter.get(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.post(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.get(`/sockets-list/:projectKey/:sessionId`, socketsListByProject);
|
||||
|
||||
const socketsLive = async function (req, res) {
|
||||
debug && console.log("[WS]looking for all available LIVE sessions");
|
||||
|
|
@ -144,8 +146,6 @@ const socketsLive = async function (req, res) {
|
|||
}
|
||||
respond(res, sortPaginate(liveSessions, filters));
|
||||
}
|
||||
wsRouter.get(`/sockets-live`, socketsLive);
|
||||
wsRouter.post(`/sockets-live`, socketsLive);
|
||||
|
||||
const socketsLiveByProject = async function (req, res) {
|
||||
debug && console.log("[WS]looking for available LIVE sessions");
|
||||
|
|
@ -174,14 +174,11 @@ const socketsLiveByProject = async function (req, res) {
|
|||
}
|
||||
respond(res, sortPaginate(liveSessions[_projectKey] || [], filters));
|
||||
}
|
||||
wsRouter.get(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.post(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveByProject);
|
||||
|
||||
const autocomplete = async function (req, res) {
|
||||
debug && console.log("[WS]looking for available LIVE sessions");
|
||||
debug && console.log("[WS]autocomplete");
|
||||
let _projectKey = extractProjectKeyFromRequest(req);
|
||||
let filters = extractPayloadFromRequest(req);
|
||||
let filters = await extractPayloadFromRequest(req);
|
||||
let results = [];
|
||||
if (filters.query && Object.keys(filters.query).length > 0) {
|
||||
let rooms = await getAvailableRooms();
|
||||
|
|
@ -197,9 +194,8 @@ const autocomplete = async function (req, res) {
|
|||
}
|
||||
}
|
||||
}
|
||||
respond(res, results);
|
||||
respond(res, uniqueAutocomplete(results));
|
||||
}
|
||||
wsRouter.get(`/sockets-live/:projectKey/autocomplete`, autocomplete);
|
||||
|
||||
const findSessionSocketId = async (io, peerId) => {
|
||||
const connected_sockets = await io.in(peerId).fetchSockets();
|
||||
|
|
@ -270,6 +266,21 @@ function extractSessionInfo(socket) {
|
|||
}
|
||||
}
|
||||
|
||||
wsRouter.get(`/sockets-list`, socketsList);
|
||||
wsRouter.post(`/sockets-list`, socketsList);
|
||||
wsRouter.get(`/sockets-list/:projectKey/autocomplete`, autocomplete);
|
||||
wsRouter.get(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.post(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.get(`/sockets-list/:projectKey/:sessionId`, socketsListByProject);
|
||||
|
||||
wsRouter.get(`/sockets-live`, socketsLive);
|
||||
wsRouter.post(`/sockets-live`, socketsLive);
|
||||
wsRouter.get(`/sockets-live/:projectKey/autocomplete`, autocomplete);
|
||||
wsRouter.get(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.post(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveByProject);
|
||||
|
||||
|
||||
module.exports = {
|
||||
wsRouter,
|
||||
start: (server, prefix) => {
|
||||
|
|
|
|||
|
|
@ -17,11 +17,11 @@ const getBodyFromUWSResponse = async function (res) {
|
|||
} catch (e) {
|
||||
console.error(e);
|
||||
/* res.close calls onAborted */
|
||||
try {
|
||||
res.close();
|
||||
} catch (e2) {
|
||||
console.error(e2);
|
||||
}
|
||||
// try {
|
||||
// res.close();
|
||||
// } catch (e2) {
|
||||
// console.error(e2);
|
||||
// }
|
||||
json = {};
|
||||
}
|
||||
resolve(json);
|
||||
|
|
@ -59,30 +59,31 @@ const extractPayloadFromRequest = async function (req, res) {
|
|||
if (process.env.uws === "true") {
|
||||
if (req.getQuery("q")) {
|
||||
debug && console.log(`[WS]where q=${req.getQuery("q")}`);
|
||||
filters.query.value = [req.getQuery("q")];
|
||||
filters.query.value = req.getQuery("q");
|
||||
}
|
||||
if (req.getQuery("key")) {
|
||||
debug && console.log(`[WS]where key=${req.getQuery("key")}`);
|
||||
filters.query.key = [req.getQuery("key")];
|
||||
filters.query.key = req.getQuery("key");
|
||||
}
|
||||
if (req.getQuery("userId")) {
|
||||
debug && console.log(`[WS]where userId=${req.getQuery("userId")}`);
|
||||
filters.userID = [req.getQuery("userId")];
|
||||
filters.filter.userID = [req.getQuery("userId")];
|
||||
}
|
||||
|
||||
let body = await getBodyFromUWSResponse(res);
|
||||
filters = {
|
||||
...filters,
|
||||
"sort": {
|
||||
"key": body.sort && body.sort.key ? body.sort.key : undefined,
|
||||
"order": body.sort && body.sort.order === "DESC"
|
||||
},
|
||||
"pagination": {
|
||||
"limit": body.pagination && body.pagination.limit ? body.pagination.limit : undefined,
|
||||
"page": body.pagination && body.pagination.page ? body.pagination.page : undefined
|
||||
if (!filters.query.value) {
|
||||
let body = await getBodyFromUWSResponse(res);
|
||||
filters = {
|
||||
...filters,
|
||||
"sort": {
|
||||
"key": body.sort && body.sort.key ? body.sort.key : undefined,
|
||||
"order": body.sort && body.sort.order === "DESC"
|
||||
},
|
||||
"pagination": {
|
||||
"limit": body.pagination && body.pagination.limit ? body.pagination.limit : undefined,
|
||||
"page": body.pagination && body.pagination.page ? body.pagination.page : undefined
|
||||
}
|
||||
}
|
||||
filters.filter = {...filters.filter, ...(body.filter || {})};
|
||||
}
|
||||
filters.filter = {...filters.filter, ...(body.filter || {})};
|
||||
} else {
|
||||
return helper.extractPayloadFromRequest(req);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,9 @@ const {
|
|||
hasFilters,
|
||||
isValidSession,
|
||||
extractPayloadFromRequest,
|
||||
sortPaginate
|
||||
sortPaginate,
|
||||
getValidAttributes,
|
||||
uniqueAutocomplete
|
||||
} = require('../utils/helper');
|
||||
const {geoip} = require('../utils/geoIP');
|
||||
const wsRouter = express.Router();
|
||||
|
|
@ -71,8 +73,6 @@ const socketsList = async function (req, res) {
|
|||
}
|
||||
respond(res, liveSessions);
|
||||
}
|
||||
wsRouter.get(`/sockets-list`, socketsList);
|
||||
wsRouter.post(`/sockets-list`, socketsList);
|
||||
|
||||
const socketsListByProject = async function (req, res) {
|
||||
debug && console.log("[WS]looking for available sessions");
|
||||
|
|
@ -100,9 +100,6 @@ const socketsListByProject = async function (req, res) {
|
|||
}
|
||||
respond(res, liveSessions[_projectKey] || []);
|
||||
}
|
||||
wsRouter.get(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.get(`/sockets-list/:projectKey/:sessionId`, socketsListByProject);
|
||||
wsRouter.post(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
|
||||
const socketsLive = async function (req, res) {
|
||||
debug && console.log("[WS]looking for all available LIVE sessions");
|
||||
|
|
@ -129,18 +126,17 @@ const socketsLive = async function (req, res) {
|
|||
}
|
||||
respond(res, sortPaginate(liveSessions, filters));
|
||||
}
|
||||
wsRouter.get(`/sockets-live`, socketsLive);
|
||||
wsRouter.post(`/sockets-live`, socketsLive);
|
||||
|
||||
const socketsLiveByProject = async function (req, res) {
|
||||
debug && console.log("[WS]looking for available LIVE sessions");
|
||||
let _projectKey = extractProjectKeyFromRequest(req);
|
||||
let _sessionId = extractSessionIdFromRequest(req);
|
||||
let filters = extractPayloadFromRequest(req);
|
||||
let liveSessions = {};
|
||||
let rooms = await getAvailableRooms();
|
||||
for (let peerId of rooms) {
|
||||
let {projectKey} = extractPeerId(peerId);
|
||||
if (projectKey === _projectKey) {
|
||||
let {projectKey, sessionId} = extractPeerId(peerId);
|
||||
if (projectKey === _projectKey && (_sessionId === undefined || _sessionId === sessionId)) {
|
||||
let connected_sockets = await io.in(peerId).fetchSockets();
|
||||
for (let item of connected_sockets) {
|
||||
if (item.handshake.query.identity === IDENTITIES.session) {
|
||||
|
|
@ -158,11 +154,9 @@ const socketsLiveByProject = async function (req, res) {
|
|||
}
|
||||
respond(res, sortPaginate(liveSessions[_projectKey] || [], filters));
|
||||
}
|
||||
wsRouter.get(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.post(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
|
||||
const autocomplete = async function (req, res) {
|
||||
debug && console.log("[WS]looking for available LIVE sessions");
|
||||
debug && console.log("[WS]autocomplete");
|
||||
let _projectKey = extractProjectKeyFromRequest(req);
|
||||
let filters = extractPayloadFromRequest(req);
|
||||
let results = [];
|
||||
|
|
@ -180,9 +174,9 @@ const autocomplete = async function (req, res) {
|
|||
}
|
||||
}
|
||||
}
|
||||
respond(res, results);
|
||||
respond(res, uniqueAutocomplete(results));
|
||||
}
|
||||
wsRouter.get(`/sockets-live/:projectKey/autocomplete`, autocomplete);
|
||||
|
||||
|
||||
const findSessionSocketId = async (io, peerId) => {
|
||||
const connected_sockets = await io.in(peerId).fetchSockets();
|
||||
|
|
@ -253,6 +247,20 @@ function extractSessionInfo(socket) {
|
|||
}
|
||||
}
|
||||
|
||||
wsRouter.get(`/sockets-list`, socketsList);
|
||||
wsRouter.post(`/sockets-list`, socketsList);
|
||||
wsRouter.get(`/sockets-list/:projectKey/autocomplete`, autocomplete);
|
||||
wsRouter.get(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
wsRouter.get(`/sockets-list/:projectKey/:sessionId`, socketsListByProject);
|
||||
wsRouter.post(`/sockets-list/:projectKey`, socketsListByProject);
|
||||
|
||||
wsRouter.get(`/sockets-live`, socketsLive);
|
||||
wsRouter.post(`/sockets-live`, socketsLive);
|
||||
wsRouter.get(`/sockets-live/:projectKey/autocomplete`, autocomplete);
|
||||
wsRouter.get(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.post(`/sockets-live/:projectKey`, socketsLiveByProject);
|
||||
wsRouter.get(`/sockets-live/:projectKey/:sessionId`, socketsLiveByProject);
|
||||
|
||||
module.exports = {
|
||||
wsRouter,
|
||||
start: (server, prefix) => {
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ const isValidSession = function (sessionInfo, filters) {
|
|||
}
|
||||
} else if (skey.toLowerCase() === key.toLowerCase()) {
|
||||
for (let v of values) {
|
||||
if (svalue.toLowerCase().indexOf(v.toLowerCase()) >= 0) {
|
||||
if (String(svalue).toLowerCase().indexOf(v.toLowerCase()) >= 0) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
|
@ -77,7 +77,7 @@ const getValidAttributes = function (sessionInfo, query) {
|
|||
if (typeof (svalue) === "object") {
|
||||
matches = [...matches, ...getValidAttributes(svalue, query)]
|
||||
} else if ((query.key === undefined || skey.toLowerCase() === query.key.toLowerCase())
|
||||
&& svalue.toLowerCase().indexOf(query.value.toLowerCase()) >= 0
|
||||
&& String(svalue).toLowerCase().indexOf(query.value.toLowerCase()) >= 0
|
||||
&& deduplicate.indexOf(skey + '_' + svalue) < 0) {
|
||||
matches.push({"type": skey, "value": svalue});
|
||||
deduplicate.push(skey + '_' + svalue);
|
||||
|
|
@ -121,11 +121,11 @@ const extractPayloadFromRequest = function (req) {
|
|||
};
|
||||
if (req.query.q) {
|
||||
debug && console.log(`[WS]where q=${req.query.q}`);
|
||||
filters.query.value = [req.query.q];
|
||||
filters.query.value = req.query.q;
|
||||
}
|
||||
if (req.query.key) {
|
||||
debug && console.log(`[WS]where key=${req.query.key}`);
|
||||
filters.query.key = [req.query.key];
|
||||
filters.query.key = req.query.key;
|
||||
}
|
||||
if (req.query.userId) {
|
||||
debug && console.log(`[WS]where userId=${req.query.userId}`);
|
||||
|
|
@ -160,6 +160,17 @@ const sortPaginate = function (list, filters) {
|
|||
}
|
||||
return list;
|
||||
}
|
||||
const uniqueAutocomplete = function (list) {
|
||||
let _list = [];
|
||||
let deduplicate = [];
|
||||
for (let e of list) {
|
||||
if (deduplicate.indexOf(e.type + "_" + e.value) < 0) {
|
||||
_list.push(e);
|
||||
deduplicate.push(e.type + "_" + e.value)
|
||||
}
|
||||
}
|
||||
return _list;
|
||||
}
|
||||
module.exports = {
|
||||
extractPeerId,
|
||||
request_logger,
|
||||
|
|
@ -170,5 +181,6 @@ module.exports = {
|
|||
hasFilters,
|
||||
objectToObjectOfArrays,
|
||||
extractPayloadFromRequest,
|
||||
sortPaginate
|
||||
sortPaginate,
|
||||
uniqueAutocomplete
|
||||
};
|
||||
Loading…
Add table
Reference in a new issue