import { MethodDefinition } from '@grpc/grpc-js'; import { ActHeaders, ActionContext, ActionVersion, BaseSession, GenericObject } from '@diia-inhouse/types'; import { ValidationSchema } from '@diia-inhouse/validators'; import { DeviceMultipleConnectionPolicy, StreamKey } from './grpc.js'; export interface AppAction, BaseSession> = ActionContext, BaseSession>> { sessionType: T['session']['sessionType'] | readonly T['session']['sessionType'][]; /** @deprecated separate action with another name that explicitly contains the version should be created: getToken -> getTokenV3 */ actionVersion?: ActionVersion; name: string; validationRules?: ValidationSchema; /** @info use only for development! */ __actionResponse?: GenericObject; tryLockTimeout?: number; getLockResource?(args: T): string; getServiceCode?(args: T): string; handler(args: T): unknown; } /** * marker interface indicates that action supports communication via grpc transport */ export interface GrpcAppAction, BaseSession> = ActionContext, BaseSession>> extends AppAction { grpcMethod?: MethodDefinition; } export interface GrpcStreamAction extends GrpcAppAction { onConnectionClosed(metadata: ActHeaders, request: GenericObject): void; onConnectionOpened(metadata: ActHeaders, request: GenericObject): void; } type SubscriptionHandler = (data: GenericObject) => void; export interface Subscription { streamId: string; handler: SubscriptionHandler; } export declare abstract class GrpcServerStreamAction, BaseSession> = ActionContext, BaseSession>> implements GrpcStreamAction { protected deviceMultipleConnectionPolicy: DeviceMultipleConnectionPolicy; private deviceSubscriptions; abstract name: string; abstract sessionType: T['session']['sessionType'] | readonly T['session']['sessionType'][]; subscribeChannel(streamKey: StreamKey, handler: SubscriptionHandler): void | never; unsubscribeChannel(streamKey: StreamKey): void; protected publishToChannel(mobileUid: string, data: GenericObject): void; protected broadcast(data: GenericObject): void; abstract handler(args: T): unknown; abstract onConnectionClosed(metadata: ActHeaders, request: GenericObject): void; abstract onConnectionOpened(metadata: ActHeaders, request: GenericObject): void; } export {};