Skip to content

Commit 2d2aee3

Browse files
authored
feat: disable rosetta via an ENV var (#1804)
1 parent d7354ff commit 2d2aee3

File tree

3 files changed

+57
-14
lines changed

3 files changed

+57
-14
lines changed

.env

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ STACKS_NODE_TYPE=L1
122122
# Override the default file path for the proxy cache control file
123123
# STACKS_API_PROXY_CACHE_CONTROL_FILE=/path/to/.proxy-cache-control.json
124124

125+
# Enable Rosetta endpoints.
126+
# STACKS_API_ENABLE_ROSETTA=1
127+
125128
# Enable FT metadata processing for Rosetta operations display. Disabled by default.
126129
# STACKS_API_ENABLE_FT_METADATA=1
127130

src/api/init.ts

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,13 @@ import { PgWriteStore } from '../datastore/pg-write-store';
4242
import { WebSocketTransmitter } from './routes/ws/web-socket-transmitter';
4343
import { createPoxEventsRouter } from './routes/pox';
4444
import { logger, loggerMiddleware } from '../logger';
45-
import { SERVER_VERSION, isPgConnectionError, isProdEnv, waiter } from '@hirosystems/api-toolkit';
45+
import {
46+
SERVER_VERSION,
47+
isPgConnectionError,
48+
isProdEnv,
49+
parseBoolean,
50+
waiter,
51+
} from '@hirosystems/api-toolkit';
4652
import { createV2BlocksRouter } from './routes/v2/blocks';
4753
import { getReqQuery } from './query-helpers';
4854
import { createV2BurnBlocksRouter } from './routes/v2/burn-blocks';
@@ -263,19 +269,20 @@ export async function startApiServer(opts: {
263269
);
264270

265271
// Rosetta API -- https://www.rosetta-api.org
266-
app.use(
267-
'/rosetta/v1',
268-
(() => {
269-
const router = express.Router();
270-
router.use(cors());
271-
router.use('/network', createRosettaNetworkRouter(datastore, chainId));
272-
router.use('/mempool', createRosettaMempoolRouter(datastore, chainId));
273-
router.use('/block', createRosettaBlockRouter(datastore, chainId));
274-
router.use('/account', createRosettaAccountRouter(datastore, chainId));
275-
router.use('/construction', createRosettaConstructionRouter(datastore, chainId));
276-
return router;
277-
})()
278-
);
272+
if (parseBoolean(process.env['STACKS_API_ENABLE_ROSETTA'] ?? '1'))
273+
app.use(
274+
'/rosetta/v1',
275+
(() => {
276+
const router = express.Router();
277+
router.use(cors());
278+
router.use('/network', createRosettaNetworkRouter(datastore, chainId));
279+
router.use('/mempool', createRosettaMempoolRouter(datastore, chainId));
280+
router.use('/block', createRosettaBlockRouter(datastore, chainId));
281+
router.use('/account', createRosettaAccountRouter(datastore, chainId));
282+
router.use('/construction', createRosettaConstructionRouter(datastore, chainId));
283+
return router;
284+
})()
285+
);
279286

280287
// Setup legacy API v1 and v2 routes
281288
app.use(

src/tests-rosetta/disable-api.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import * as supertest from 'supertest';
2+
import { PgSqlClient } from "@hirosystems/api-toolkit";
3+
import { ChainID } from "@stacks/common";
4+
import { ApiServer, startApiServer } from "../api/init";
5+
import { PgWriteStore } from "../datastore/pg-write-store";
6+
import { migrate } from "../test-utils/test-helpers";
7+
8+
describe('Rosetta API toggle', () => {
9+
let db: PgWriteStore;
10+
let client: PgSqlClient;
11+
let api: ApiServer;
12+
13+
beforeEach(async () => {
14+
process.env.STACKS_CHAIN_ID = '0x80000000';
15+
await migrate('up');
16+
db = await PgWriteStore.connect({ usageName: 'tests' });
17+
client = db.sql;
18+
process.env.STACKS_API_ENABLE_ROSETTA = '0';
19+
api = await startApiServer({ datastore: db, chainId: ChainID.Testnet });
20+
});
21+
22+
test('rosetta is disabled', async () => {
23+
const query1 = await supertest(api.server).post(`/rosetta/v1/network/list`);
24+
expect(query1.status).toBe(404);
25+
});
26+
27+
afterEach(async () => {
28+
await api.terminate();
29+
process.env.STACKS_API_ENABLE_ROSETTA = '1';
30+
await db?.close();
31+
await migrate('down');
32+
});
33+
});

0 commit comments

Comments
 (0)