Files
speckle-server/packages/server/modules/previews/domain/operations.ts
T

135 lines
3.3 KiB
TypeScript

import type { ObjectPreview } from '@/modules/previews/domain/types'
import type {
MaybeNullOrUndefined,
Nullable,
Optional,
PartialBy
} from '@speckle/shared'
import type { Request, Response } from 'express'
import { PreviewStatus } from '@/modules/previews/domain/consts'
import type { Logger } from '@/observability/logging'
import { PreviewResultPayload } from '@speckle/shared/workers/previews'
export type GetObjectPreviewInfo = (params: {
streamId: string
objectId: string
}) => Promise<Optional<ObjectPreview>>
export type GetPaginatedObjectPreviewsInErrorState = (params: {
limit: number
cursor?: MaybeNullOrUndefined<string>
}) => Promise<{
totalCount: number
items: ObjectPreview[]
cursor: string | null
}>
export type PaginatedObjectPreviewsParams = {
limit: number
cursor?: MaybeNullOrUndefined<string>
filter?: MaybeNullOrUndefined<{
status?: (typeof PreviewStatus)[keyof typeof PreviewStatus]
maxNumberOfAttempts?: number
}>
}
export type GetPaginatedObjectPreviewsPage = (
params: PaginatedObjectPreviewsParams
) => Promise<{
items: ObjectPreview[]
cursor: string | null
}>
export type GetPaginatedObjectPreviewsTotalCount = (
params: Omit<PaginatedObjectPreviewsParams, 'limit' | 'cursor'>
) => Promise<number>
export type CreateObjectPreview = (
params: Pick<ObjectPreview, 'streamId' | 'objectId' | 'priority'>
) => Promise<boolean>
export type ObjectPreviewInput = Pick<
ObjectPreview,
'streamId' | 'objectId' | 'priority'
>
export type StoreObjectPreview = (params: ObjectPreviewInput) => Promise<void>
export type UpsertObjectPreview = (params: {
objectPreview: PartialBy<ObjectPreview, 'preview' | 'priority'>
}) => Promise<void>
export type UpdateObjectPreview = (params: {
objectPreview: PartialBy<
Omit<ObjectPreview, 'attempts' | 'lastUpdate'>,
'preview' | 'priority' | 'previewStatus'
> & {
incrementAttempts?: boolean
}
}) => Promise<ObjectPreview[]>
export type ObjectPreviewRequest = {
url: string
token: string
jobId: string
}
export type Preview = {
id: string
data: Buffer
}
export type StorePreview = (params: { preview: Preview }) => Promise<void>
export type RequestObjectPreview = (params: ObjectPreviewRequest) => Promise<void>
export type GetPreviewImage = (params: {
previewId: string
}) => Promise<Nullable<Buffer>>
export type GetObjectPreviewBufferOrFilepath = (params: {
streamId: string
objectId: string
angle?: string
}) => Promise<
| {
type: 'file'
file: string
error?: true
errorCode?: string
}
| { type: 'buffer'; buffer: Buffer; error?: true; errorCode?: string }
>
export type SendObjectPreview = (
req: Request,
res: Response,
streamId: string,
objectId: string,
angle?: string
) => Promise<void>
export type CheckStreamPermissions = (
req: Request
) => Promise<{ hasPermissions: boolean; httpErrorCode: number }>
export type ConsumePreviewResult = ({
projectId,
objectId,
previewResult
}: {
projectId: string
objectId: string
previewResult: PreviewResultPayload
}) => Promise<void>
export type BuildConsumePreviewResult = (deps: {
logger: Logger
projectId: string
}) => Promise<ConsumePreviewResult>
export type BuildUpdateObjectPreview = (params: {
projectId: string
}) => Promise<UpdateObjectPreview>
export type ObserveMetrics = (params: { payload: PreviewResultPayload }) => void