Files
stacks-blockchain-api/src/api/routes/v2/mempool.ts
Rafael Cárdenas 2d45b2eafd feat: add order_by and order params to /extended/v1/tx/mempool (#1810)
* feat: sort mempool

* test: age sort

* fix: add enum types

* chore: move v2 to proper folder

* docs: add to openapi
2024-01-09 10:01:22 -06:00

56 lines
1.7 KiB
TypeScript

import * as express from 'express';
import { asyncHandler } from '../../async-handler';
import {
ETagType,
getETagCacheHandler,
setETagCacheHeaders,
} from '../../controllers/cache-controller';
import { PgStore } from '../../../datastore/pg-store';
import { DbMempoolFeePriority, DbTxTypeId } from '../../../datastore/common';
import { MempoolFeePriorities } from '../../../../docs/generated';
function parseMempoolFeePriority(fees: DbMempoolFeePriority[]): MempoolFeePriorities {
const out: MempoolFeePriorities = {
all: { no_priority: 0, low_priority: 0, medium_priority: 0, high_priority: 0 },
};
for (const fee of fees) {
const value = {
no_priority: fee.no_priority,
low_priority: fee.low_priority,
medium_priority: fee.medium_priority,
high_priority: fee.high_priority,
};
if (fee.type_id == null) out.all = value;
else
switch (fee.type_id) {
case DbTxTypeId.TokenTransfer:
out.token_transfer = value;
break;
case DbTxTypeId.ContractCall:
out.contract_call = value;
break;
case DbTxTypeId.SmartContract:
case DbTxTypeId.VersionedSmartContract:
out.smart_contract = value;
break;
}
}
return out;
}
export function createMempoolRouter(db: PgStore): express.Router {
const router = express.Router();
const mempoolCacheHandler = getETagCacheHandler(db, ETagType.mempool);
router.get(
'/fees',
mempoolCacheHandler,
asyncHandler(async (req, res, next) => {
setETagCacheHeaders(res);
res.status(200).json(parseMempoolFeePriority(await db.getMempoolFeePriority()));
})
);
return router;
}