feat: disable rosetta via an ENV var (#1804)

This commit is contained in:
Rafael Cárdenas
2024-01-08 12:12:55 -06:00
committed by GitHub
parent d7354ffe7b
commit 2d2aee3826
3 changed files with 57 additions and 14 deletions

3
.env
View File

@@ -122,6 +122,9 @@ STACKS_NODE_TYPE=L1
# Override the default file path for the proxy cache control file
# STACKS_API_PROXY_CACHE_CONTROL_FILE=/path/to/.proxy-cache-control.json
# Enable Rosetta endpoints.
# STACKS_API_ENABLE_ROSETTA=1
# Enable FT metadata processing for Rosetta operations display. Disabled by default.
# STACKS_API_ENABLE_FT_METADATA=1

View File

@@ -42,7 +42,13 @@ import { PgWriteStore } from '../datastore/pg-write-store';
import { WebSocketTransmitter } from './routes/ws/web-socket-transmitter';
import { createPoxEventsRouter } from './routes/pox';
import { logger, loggerMiddleware } from '../logger';
import { SERVER_VERSION, isPgConnectionError, isProdEnv, waiter } from '@hirosystems/api-toolkit';
import {
SERVER_VERSION,
isPgConnectionError,
isProdEnv,
parseBoolean,
waiter,
} from '@hirosystems/api-toolkit';
import { createV2BlocksRouter } from './routes/v2/blocks';
import { getReqQuery } from './query-helpers';
import { createV2BurnBlocksRouter } from './routes/v2/burn-blocks';
@@ -263,19 +269,20 @@ export async function startApiServer(opts: {
);
// Rosetta API -- https://www.rosetta-api.org
app.use(
'/rosetta/v1',
(() => {
const router = express.Router();
router.use(cors());
router.use('/network', createRosettaNetworkRouter(datastore, chainId));
router.use('/mempool', createRosettaMempoolRouter(datastore, chainId));
router.use('/block', createRosettaBlockRouter(datastore, chainId));
router.use('/account', createRosettaAccountRouter(datastore, chainId));
router.use('/construction', createRosettaConstructionRouter(datastore, chainId));
return router;
})()
);
if (parseBoolean(process.env['STACKS_API_ENABLE_ROSETTA'] ?? '1'))
app.use(
'/rosetta/v1',
(() => {
const router = express.Router();
router.use(cors());
router.use('/network', createRosettaNetworkRouter(datastore, chainId));
router.use('/mempool', createRosettaMempoolRouter(datastore, chainId));
router.use('/block', createRosettaBlockRouter(datastore, chainId));
router.use('/account', createRosettaAccountRouter(datastore, chainId));
router.use('/construction', createRosettaConstructionRouter(datastore, chainId));
return router;
})()
);
// Setup legacy API v1 and v2 routes
app.use(

View File

@@ -0,0 +1,33 @@
import * as supertest from 'supertest';
import { PgSqlClient } from "@hirosystems/api-toolkit";
import { ChainID } from "@stacks/common";
import { ApiServer, startApiServer } from "../api/init";
import { PgWriteStore } from "../datastore/pg-write-store";
import { migrate } from "../test-utils/test-helpers";
describe('Rosetta API toggle', () => {
let db: PgWriteStore;
let client: PgSqlClient;
let api: ApiServer;
beforeEach(async () => {
process.env.STACKS_CHAIN_ID = '0x80000000';
await migrate('up');
db = await PgWriteStore.connect({ usageName: 'tests' });
client = db.sql;
process.env.STACKS_API_ENABLE_ROSETTA = '0';
api = await startApiServer({ datastore: db, chainId: ChainID.Testnet });
});
test('rosetta is disabled', async () => {
const query1 = await supertest(api.server).post(`/rosetta/v1/network/list`);
expect(query1.status).toBe(404);
});
afterEach(async () => {
await api.terminate();
process.env.STACKS_API_ENABLE_ROSETTA = '1';
await db?.close();
await migrate('down');
});
});