typedrequest-interfaces/ts/index.ts
2024-02-22 15:15:44 +01:00

97 lines
1.8 KiB
TypeScript

export interface ITypedRequest {
/**
* the method that the request response data is meant for
*/
method: string;
/**
* any needed auth data
*/
authInfo?: {
jwt: string;
};
/**
* localData tracks things within typedrequest.
* needed for VirtualStreams
*/
localData?: {
firstTypedrouter?: any;
}
/**
* server data that is added for dealing with the request server side. Will be omitted when sending the response
*/
serverData?: {
jwtData: any;
jwtValid: boolean;
};
/**
* the request data
*/
request: object;
/**
* the response data
*/
response: object;
/**
* any error information that might be encountered while dealing with a request
*/
error?: { text: string; data: any };
/**
* retry information for smartly advising the client to retry at a later point in time
*/
retry?: {
waitForMs: number;
reason: string;
};
/**
* a correlation id that
* used for matching request and response
* !important. Don't remove.
*/
correlation?: {
id: string;
phase: 'request' | 'response';
};
}
export type implementsTR<T, U extends T> = {};
export interface ITypedEvent<T> {
name: string;
uniqueEventId: string;
payload: T;
}
export interface ITag {
name: string;
payload: any;
}
export type implementsTag<T, U extends T> = {};
export interface IUnifiedStreamReqResObject {
streamId: string;
cycle: 'request' | 'response';
cycleId: string;
type: 'start' | 'binaryChunk' | 'object' | 'end' | 'keepAlive';
streamChunk?: any;
keepAlive?: boolean;
next?: boolean;
}
export interface IStreamRequest extends implementsTR<
ITypedRequest,
IStreamRequest
> {
method: '##VirtualStream##';
request: IUnifiedStreamReqResObject;
response: IUnifiedStreamReqResObject;
}