Skip to content
This repository was archived by the owner on Aug 12, 2023. It is now read-only.

Commit ce88cfd

Browse files
authored
Make a few improvements to lookup endpoints (#405)
* Escape user input passed to regex searches * Dedupe trader searches
1 parent 07d04d7 commit ce88cfd

3 files changed

Lines changed: 27 additions & 6 deletions

File tree

src/relayers/search-relayers.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,20 @@ const getSuggestedRelayers = async limit => {
6565
return relayersWithStats;
6666
};
6767

68+
function escapeRegex(text) {
69+
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
70+
}
71+
6872
const searchRelayers = async (query, options) => {
6973
if (query === '' || query === null) {
7074
const relayers = await getSuggestedRelayers(options.limit);
7175

7276
return relayers;
7377
}
7478

75-
const relayers = await Relayer.find({ name: new RegExp(query, 'ig') })
79+
const relayers = await Relayer.find({
80+
name: new RegExp(escapeRegex(query), 'ig'),
81+
})
7682
.sort({ name: 1 })
7783
.limit(options.limit)
7884
.lean();

src/tokens/search-tokens.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ const getSuggestedTokens = async limit => {
6767
});
6868
};
6969

70+
function escapeRegex(text) {
71+
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
72+
}
73+
7074
const searchTokens = async (query, options) => {
7175
if (query === '' || query === null) {
7276
const tokens = await getSuggestedTokens(options.limit);
@@ -77,8 +81,8 @@ const searchTokens = async (query, options) => {
7781
const tokens = await Token.find({
7882
$or: [
7983
{ address: query },
80-
{ name: new RegExp(query, 'ig') },
81-
{ symbol: new RegExp(query, 'ig') },
84+
{ name: new RegExp(escapeRegex(query), 'ig') },
85+
{ symbol: new RegExp(escapeRegex(query), 'ig') },
8286
],
8387
})
8488
.sort({ name: 1 })

src/traders/search-traders.js

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
const _ = require('lodash');
22
const moment = require('moment');
33

4-
const elasticsearch = require('../util/elasticsearch');
54
const AddressMetadata = require('../model/address-metadata');
5+
const elasticsearch = require('../util/elasticsearch');
6+
const getTrader = require('./get-trader');
67

78
const getSuggestedTraders = async limit => {
89
const response = await elasticsearch.getClient().search({
@@ -105,20 +106,30 @@ const getValidTraderAddresses = async (addresses, limit) => {
105106
response.body.aggregations.matching_takers.takers.buckets,
106107
);
107108

108-
const validAddresses = buckets.map(bucket => bucket.key);
109+
const validAddresses = _.uniq(buckets.map(bucket => bucket.key));
109110

110111
return validAddresses;
111112
};
112113

114+
function escapeRegex(text) {
115+
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
116+
}
117+
113118
const searchTraders = async (query, options) => {
114119
if (query === '' || query === null) {
115120
const traders = await getSuggestedTraders(options.limit);
116121

117122
return traders;
118123
}
119124

125+
const trader = await getTrader(query);
126+
127+
if (trader !== null) {
128+
return [trader];
129+
}
130+
120131
const metadatas = await AddressMetadata.find({
121-
name: new RegExp(query, 'ig'),
132+
name: new RegExp(escapeRegex(query), 'ig'),
122133
})
123134
.sort({ name: 1 })
124135
.limit(options.limit)

0 commit comments

Comments
 (0)