Skip to content

Commit 0e2d2f6

Browse files
authored
chore: allow querying status by query param (#889)
* chore: allow querying status by query param * feat: allow querying transaction status via query param
1 parent 5aee2a6 commit 0e2d2f6

File tree

4 files changed

+47
-214
lines changed

4 files changed

+47
-214
lines changed

src/server/index.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { withOpenApi } from "./middleware/open-api";
1818
import { withPrometheus } from "./middleware/prometheus";
1919
import { withRateLimit } from "./middleware/rate-limit";
2020
import { withSecurityHeaders } from "./middleware/security-headers";
21-
import { withWebSocket } from "./middleware/websocket";
2221
import { withRoutes } from "./routes";
2322
import { writeOpenApiToFile } from "./utils/openapi";
2423

@@ -81,7 +80,6 @@ export const initServer = async () => {
8180
withPrometheus(server);
8281

8382
// Register routes
84-
await withWebSocket(server);
8583
await withAuth(server);
8684
await withOpenApi(server);
8785
await withRoutes(server);

src/server/routes/index.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@ import { getAllTransactions } from "./transaction/get-all";
104104
import { getAllDeployedContracts } from "./transaction/get-all-deployed-contracts";
105105
import { retryTransaction } from "./transaction/retry";
106106
import { retryFailedTransactionRoute } from "./transaction/retry-failed";
107-
import { checkTxStatus } from "./transaction/status";
107+
import {
108+
getTransactionStatusQueryParamRoute,
109+
getTransactionStatusRoute,
110+
} from "./transaction/status";
108111
import { syncRetryTransactionRoute } from "./transaction/sync-retry";
109112
import { createWebhookRoute } from "./webhooks/create";
110113
import { getWebhooksEventTypes } from "./webhooks/events";
@@ -239,7 +242,8 @@ export async function withRoutes(fastify: FastifyInstance) {
239242

240243
// Transactions
241244
await fastify.register(getAllTransactions);
242-
await fastify.register(checkTxStatus);
245+
await fastify.register(getTransactionStatusRoute);
246+
await fastify.register(getTransactionStatusQueryParamRoute);
243247
await fastify.register(getAllDeployedContracts);
244248
await fastify.register(retryTransaction);
245249
await fastify.register(syncRetryTransactionRoute);

src/server/routes/transaction/status.ts

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,13 @@
1-
import type { SocketStream } from "@fastify/websocket";
21
import { type Static, Type } from "@sinclair/typebox";
32
import type { FastifyInstance } from "fastify";
43
import { StatusCodes } from "http-status-codes";
54
import { TransactionDB } from "../../../shared/db/transactions/db";
6-
import { logger } from "../../../shared/utils/logger";
75
import { createCustomError } from "../../middleware/error";
86
import { standardResponseSchema } from "../../schemas/shared-api-schemas";
97
import {
108
TransactionSchema,
119
toTransactionSchema,
1210
} from "../../schemas/transaction";
13-
import {
14-
findOrAddWSConnectionInSharedState,
15-
formatSocketMessage,
16-
getStatusMessageAndConnectionStatus,
17-
onClose,
18-
onError,
19-
onMessage,
20-
} from "../../utils/websocket";
2111

2212
// INPUT
2313
const requestSchema = Type.Object({
@@ -62,7 +52,7 @@ responseBodySchema.example = {
6252
},
6353
};
6454

65-
export async function checkTxStatus(fastify: FastifyInstance) {
55+
export async function getTransactionStatusRoute(fastify: FastifyInstance) {
6656
fastify.route<{
6757
Params: Static<typeof requestSchema>;
6858
Reply: Static<typeof responseBodySchema>;
@@ -96,41 +86,51 @@ export async function checkTxStatus(fastify: FastifyInstance) {
9686
result: toTransactionSchema(transaction),
9787
});
9888
},
99-
wsHandler: async (connection: SocketStream, request) => {
100-
const { queueId } = request.params;
89+
});
90+
}
10191

102-
findOrAddWSConnectionInSharedState(connection, queueId, request);
92+
// An alterate route that accepts the queueId as a query param.
93+
export async function getTransactionStatusQueryParamRoute(
94+
fastify: FastifyInstance,
95+
) {
96+
fastify.route<{
97+
Querystring: Static<typeof requestSchema>;
98+
Reply: Static<typeof responseBodySchema>;
99+
}>({
100+
method: "GET",
101+
url: "/transaction/status",
102+
schema: {
103+
summary: "Get transaction status",
104+
description: "Get the status for a transaction request.",
105+
tags: ["Transaction"],
106+
operationId: "status",
107+
querystring: requestSchema,
108+
response: {
109+
...standardResponseSchema,
110+
[StatusCodes.OK]: responseBodySchema,
111+
},
112+
},
113+
handler: async (request, reply) => {
114+
const { queueId } = request.query;
115+
if (!queueId) {
116+
throw createCustomError(
117+
"Queue ID is required.",
118+
StatusCodes.BAD_REQUEST,
119+
"QUEUE_ID_REQUIRED",
120+
);
121+
}
103122

104123
const transaction = await TransactionDB.get(queueId);
105-
const returnData = transaction ? toTransactionSchema(transaction) : null;
106-
107-
const { message, closeConnection } =
108-
await getStatusMessageAndConnectionStatus(returnData);
109-
110-
connection.socket.send(await formatSocketMessage(returnData, message));
111-
112-
if (closeConnection) {
113-
connection.socket.close();
114-
return;
124+
if (!transaction) {
125+
throw createCustomError(
126+
"Transaction not found.",
127+
StatusCodes.BAD_REQUEST,
128+
"TRANSACTION_NOT_FOUND",
129+
);
115130
}
116131

117-
connection.socket.on("error", (error) => {
118-
logger({
119-
service: "websocket",
120-
level: "error",
121-
message: "Websocket error",
122-
error,
123-
});
124-
125-
onError(error, connection, request);
126-
});
127-
128-
connection.socket.on("message", async (_message, _isBinary) => {
129-
onMessage(connection, request);
130-
});
131-
132-
connection.socket.on("close", () => {
133-
onClose(connection, request);
132+
reply.status(StatusCodes.OK).send({
133+
result: toTransactionSchema(transaction),
134134
});
135135
},
136136
});

src/server/utils/websocket.ts

Lines changed: 0 additions & 169 deletions
This file was deleted.

0 commit comments

Comments
 (0)