Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/api/query-helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,11 @@ export function parseEventTypeFilter(
}
} else if (typeof typeQuery === 'string') {
try {
eventTypeFilter = parseEventTypeStrings([typeQuery]);
if (typeQuery.includes(',')) {
eventTypeFilter = parseEventTypeStrings(typeQuery.split(','));
} else {
eventTypeFilter = parseEventTypeStrings([typeQuery]);
}
} catch (error) {
handleBadRequest(res, next, `invalid 'event type'`);
}
Expand Down
16 changes: 10 additions & 6 deletions src/api/routes/tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,22 @@ export function createTokenRouter(db: PgStore): express.Router {
}
let assetIdentifiers: string[] | undefined;
if (req.query.asset_identifiers !== undefined) {
for (const assetIdentifier of [req.query.asset_identifiers].flat()) {
if (typeof req.query.asset_identifiers === 'string') {
if (req.query.asset_identifiers.includes(',')) {
assetIdentifiers = req.query.asset_identifiers.split(',');
} else {
assetIdentifiers = [req.query.asset_identifiers];
}
} else {
assetIdentifiers = req.query.asset_identifiers as string[];
}
for (const assetIdentifier of assetIdentifiers) {
if (
typeof assetIdentifier !== 'string' ||
!isValidPrincipal(assetIdentifier.split('::')[0])
) {
res.status(400).json({ error: `Invalid asset identifier ${assetIdentifier}` });
return;
} else {
if (!assetIdentifiers) {
assetIdentifiers = [];
}
assetIdentifiers?.push(assetIdentifier);
}
}
}
Expand Down
15 changes: 12 additions & 3 deletions src/api/routes/tx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@ export function createTxRouter(db: PgStore): express.Router {
if (Array.isArray(typeQuery)) {
txTypeFilter = parseTxTypeStrings(typeQuery as string[]);
} else if (typeof typeQuery === 'string') {
txTypeFilter = parseTxTypeStrings([typeQuery]);
if (typeQuery.includes(',')) {
txTypeFilter = parseTxTypeStrings(typeQuery.split(','));
} else {
txTypeFilter = parseTxTypeStrings([typeQuery]);
}
} else if (typeQuery) {
throw new Error(`Unexpected tx type query value: ${JSON.stringify(typeQuery)}`);
} else {
Expand Down Expand Up @@ -82,8 +86,13 @@ export function createTxRouter(db: PgStore): express.Router {
'/multiple',
asyncHandler(async (req, res, next) => {
if (typeof req.query.tx_id === 'string') {
// in case req.query.tx_id is a single tx_id string and not an array
req.query.tx_id = [req.query.tx_id];
// check if tx_id is a comma-seperated list of tx_ids
if (req.query.tx_id.includes(',')) {
req.query.tx_id = req.query.tx_id.split(',');
} else {
// in case req.query.tx_id is a single tx_id string and not an array
req.query.tx_id = [req.query.tx_id];
}
}
const txList: string[] = req.query.tx_id as string[];

Expand Down
7 changes: 7 additions & 0 deletions src/tests/tx-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,13 @@ describe('tx tests', () => {
expect(jsonRes[dbTx3.tx_id].result.tx_id).toEqual(dbTx3.tx_id);
expect(jsonRes[dbTx3.tx_id].result.tx_type).toEqual('smart_contract');
expect(jsonRes[dbTx3.tx_id].result.smart_contract.clarity_version).toEqual(2);

// test comma-separated tx_id list
const txIds = [mempoolTx.tx_id, tx1.tx_id, notFoundTxId, dbTx2.tx_id, dbTx3.tx_id].join(',');
const txsListDetail2 = await supertest(api.server).get(
`/extended/v1/tx/multiple?tx_id=${txIds}`
);
expect(txsListDetail2.body).toEqual(txsListDetail.body);
});

test('getTxList returns object', async () => {
Expand Down