Many fixes

This commit is contained in:
2026-09-14 08:00:08 +00:00
parent 93b012592b
commit 2d970d3123
15 changed files with 338 additions and 176 deletions
+68
View File
@@ -0,0 +1,68 @@
import { ApplicationRouter } from "../../source/services/router";
import { BaseStream } from "../../source/services/stream/base-stream";
export type ControlledRequestDeps = {
router: ApplicationRouter;
connection: BaseStream;
}
export type ControlledRequestOptions = {
path: string;
requestId: string;
body?: unknown;
headers?: Record<string, string>;
includeAuthHeaders?: boolean;
timeout?: number;
}
export type ControlledRequestParams = ControlledRequestOptions & ControlledRequestDeps;
export type ControlledRequest = {
request: Promise<void>;
started: Promise<void>;
release: () => void;
}
export const createControlledRequest = ({ router, connection, ...requestOptions }: ControlledRequestParams): ControlledRequest => {
// Create promises with resolvers to signal the request has started and released
const { promise: started, resolve: signalStarted } = Promise.withResolvers<void>();
const { promise: released, resolve: release } = Promise.withResolvers<void>();
// The request options (sets the includeAuthHeaders to true by default)
const options = {
includeAuthHeaders: true,
...requestOptions
}
// The test auth headers
const authHeaders = {
'x-public-key': 'public-key',
'x-signature': 'signature',
'x-timestamp': '1000',
}
// If the request should include the test auth headers (default is true)
if (options.includeAuthHeaders) {
options.headers = {
...options.headers,
...authHeaders,
};
}
// Add the signalStarted and released promises to the request body
options.body = {
...(options.body ?? {}),
signalStarted,
released,
}
// Dispatch the request
const request = router.dispatch(options, connection);
// Return the request, started, and release promises
return {
request,
started,
release,
};
};
+29
View File
@@ -0,0 +1,29 @@
import { vi } from "vitest";
import type { AuthSecp256k1 } from "../../source/auth/auth";
import type { RouteDefinition, RouteModule } from "../../source/routes/types";
/**
* Convert an array of route definitions to a route module by returning an object with a getRoutes method that returns the routes.
* @param routes - The route definitions to convert.
* @returns A route module.
*/
export const toRoutes = (routes: RouteDefinition[]): RouteModule => {
return {
getRoutes: async () => routes,
};
};
export const mockAuth = {
verifySignature: vi.fn().mockResolvedValue(true),
verifyUniqueRequest: vi.fn().mockResolvedValue(true),
assertTimestampFreshness: vi.fn().mockResolvedValue(true),
} as unknown as AuthSecp256k1;
/**
* Create a mock of the AuthSecp256k1 service
* @returns A mock of the AuthSecp256k1 service
*/
export const createMockAuth = (): AuthSecp256k1 => {
return mockAuth;
};