import type { Error } from '../types' ; import type { ProtocolData } from '../protocol/types' ; import type { Mount , Slot , Axis , Direction , SessionUpdate } from './types' ; export interface LegacyConnectAction { type : 'robot:LEGACY_CONNECT' ; payload : { name : string ; } ; meta : { robotCommand : true ; } ; } export interface ConnectAction { type : 'robot:CONNECT' ; payload : { name : string ; } ; meta : { robotCommand : true ; } ; } export interface ConnectResponseAction { type : 'robot:CONNECT_RESPONSE' ; payload : { error : Error | null | undefined ; sessionCapabilities : string [ ] ; } ; } export interface ReturnTipAction { type : 'robot:RETURN_TIP' ; payload : { mount : Mount ; } ; meta : { robotCommand : true ; } ; } export interface ReturnTipResponseAction { type : 'robot:RETURN_TIP_RESPONSE' ; error : boolean ; payload ? : Error ; } export interface ClearConnectResponseAction { type : 'robot:CLEAR_CONNECT_RESPONSE' ; } export interface DisconnectAction { type : 'robot:DISCONNECT' ; meta : { robotCommand : true ; } ; } export interface DisconnectResponseAction { type : 'robot:DISCONNECT_RESPONSE' ; payload : { } ; } export interface UnexpectedDisconnectAction { type : 'robot:UNEXPECTED_DISCONNECT' ; } export interface ConfirmProbedAction { type : 'robot:CONFIRM_PROBED' ; payload : Mount ; meta : { robotCommand : true ; } ; } export interface PipetteCalibrationAction { type : 'robot:JOG' ; payload : { mount : Mount ; axis ? : Axis ; direction ? : Direction ; step ? : number ; } ; meta : { robotCommand : true ; } ; } export interface SetJogDistanceAction { type : 'robot:SET_JOG_DISTANCE' ; payload : number ; } export interface LabwareCalibrationAction { type : 'robot:MOVE_TO' | 'robot:PICKUP_AND_HOME' | 'robot:DROP_TIP_AND_HOME' | 'robot:CONFIRM_TIPRACK' | 'robot:UPDATE_OFFSET' | 'robot:SET_JOG_DISTANCE' ; payload : { mount : Mount ; slot : Slot ; } ; meta : { robotCommand : true ; } ; } export interface CalibrationSuccessAction { type : 'robot:MOVE_TO_SUCCESS' | 'robot:JOG_SUCCESS' | 'robot:PICKUP_AND_HOME_SUCCESS' | 'robot:DROP_TIP_AND_HOME_SUCCESS' | 'robot:CONFIRM_TIPRACK_SUCCESS' | 'robot:UPDATE_OFFSET_SUCCESS' | 'robot:RETURN_TIP_SUCCESS' ; payload : { isTiprack ? : boolean ; tipOn ? : boolean ; } ; } export interface CalibrationFailureAction { type : 'robot:MOVE_TO_FAILURE' | 'robot:JOG_FAILURE' | 'robot:PICKUP_AND_HOME_FAILURE' | 'robot:DROP_TIP_AND_HOME_FAILURE' | 'robot:CONFIRM_TIPRACK_FAILURE' | 'robot:UPDATE_OFFSET_FAILURE' | 'robot:RETURN_TIP_FAILURE' ; error : true ; payload : Error ; } export interface SessionResponseAction { type : 'robot:SESSION_RESPONSE' ; payload : { name : string ; protocolText : string ; metadata ? : ProtocolData [ 'metadata' ] | null | undefined ; apiLevel : [ number , number ] ; [ key ] : unknown ; } ; meta : { freshUpload : boolean ; } ; } export interface SessionErrorAction { type : 'robot:SESSION_ERROR' ; payload : { error : Error ; } ; meta : { freshUpload : boolean ; } ; } export interface SessionUpdateAction { type : 'robot:SESSION_UPDATE' ; payload : SessionUpdate ; meta : { now : number ; } ; } export interface RefreshSessionAction { type : 'robot:REFRESH_SESSION' ; meta : { robotCommand : true ; } ; } export type CalibrationResponseAction = CalibrationSuccessAction | CalibrationFailureAction ; export interface SetModulesReviewedAction { type : 'robot:SET_MODULES_REVIEWED' ; payload : boolean ; } export interface ClearCalibrationRequestAction { type : 'robot:CLEAR_CALIBRATION_REQUEST' ; } export interface SetDeckPopulatedAction { type : 'robot:SET_DECK_POPULATED' ; payload : boolean ; } export interface MoveToFrontAction { type : 'robot:MOVE_TO_FRONT' ; payload : { mount : Mount ; } ; meta : { robotCommand : true ; } ; } export interface MoveToFrontResponseAction { type : 'robot:MOVE_TO_FRONT_RESPONSE' ; error : boolean ; payload ? : Error ; } export interface ProbeTipAction { type : 'robot:PROBE_TIP' ; payload : { mount : Mount ; } ; meta : { robotCommand : true ; } ; } export interface ProbeTipResponseAction { type : 'robot:PROBE_TIP_RESPONSE' ; error : boolean ; payload ? : Error ; } export interface ConfirmLabwareAction { type : 'robot:CONFIRM_LABWARE' ; payload : { labware : Slot ; } ; } export interface RunAction { type : 'robot:RUN' ; meta : { robotCommand : true ; } ; } export interface RunResponseAction { type : 'robot:RUN_RESPONSE' ; error : boolean ; payload ? : Error ; } export interface PauseAction { type : 'robot:PAUSE' ; meta : { robotCommand : true ; } ; } export interface PauseResponseAction { type : 'robot:PAUSE_RESPONSE' ; error : boolean ; payload ? : Error ; } export interface ResumeAction { type : 'robot:RESUME' ; meta : { robotCommand : true ; } ; } export interface ResumeResponseAction { type : 'robot:RESUME_RESPONSE' ; error : boolean ; payload ? : Error ; } export interface CancelAction { type : 'robot:CANCEL' ; meta : { robotCommand : true ; } ; } export interface CancelResponseAction { type : 'robot:CANCEL_RESPONSE' ; error : boolean ; payload ? : Error ; } export const actionTypes = { SET_DECK_POPULATED : 'robot:SET_DECK_POPULATED' , MOVE_TO_FRONT : 'robot:MOVE_TO_FRONT' , MOVE_TO_FRONT_RESPONSE : 'robot:MOVE_TO_FRONT_RESPONSE' , PROBE_TIP : 'robot:PROBE_TIP' , PROBE_TIP_RESPONSE : 'robot:PROBE_TIP_RESPONSE' , RETURN_TIP : 'robot:RETURN_TIP' , RETURN_TIP_RESPONSE : 'robot:RETURN_TIP_RESPONSE' , CONFIRM_LABWARE : 'robot:CONFIRM_LABWARE' , RUN : 'robot:RUN' , RUN_RESPONSE : 'robot:RUN_RESPONSE' , PAUSE : 'robot:PAUSE' , PAUSE_RESPONSE : 'robot:PAUSE_RESPONSE' , RESUME : 'robot:RESUME' , RESUME_RESPONSE : 'robot:RESUME_RESPONSE' , CANCEL : 'robot:CANCEL' , CANCEL_RESPONSE : 'robot:CANCEL_RESPONSE' , } as const ; export type Action = LegacyConnectAction | ConnectAction | ConnectResponseAction | DisconnectAction | DisconnectResponseAction | ClearConnectResponseAction | UnexpectedDisconnectAction | ConfirmProbedAction | PipetteCalibrationAction | LabwareCalibrationAction | CalibrationResponseAction | CalibrationFailureAction | ReturnTipAction | ReturnTipResponseAction | SetJogDistanceAction | SessionResponseAction | SessionErrorAction | SessionUpdateAction | RefreshSessionAction | SetModulesReviewedAction | ClearCalibrationRequestAction | SetDeckPopulatedAction | MoveToFrontAction | MoveToFrontResponseAction | ProbeTipAction | ProbeTipResponseAction | ConfirmLabwareAction | RunAction | RunResponseAction | PauseAction | PauseResponseAction | ResumeAction | ResumeResponseAction | CancelAction | CancelResponseAction ; export const actions = { legacyConnect ( name ) { return { type : 'robot:LEGACY_CONNECT' , payload : { name } , meta : { robotCommand : true } , } ; } , connect ( name ) { return { type : 'robot:CONNECT' , payload : { name } , meta : { robotCommand : true } , } ; } , connectResponse ( error , sessionCapabilities = [ ] ) { return { type : 'robot:CONNECT_RESPONSE' , payload : { error , sessionCapabilities } , } ; } , clearConnectResponse ( ) { return { type : 'robot:CLEAR_CONNECT_RESPONSE' } ; } , disconnect ( ) { return { type : 'robot:DISCONNECT' , meta : { robotCommand : true } } ; } , disconnectResponse ( ) { return { type : 'robot:DISCONNECT_RESPONSE' , payload : { } , } ; } , unexpectedDisconnect ( ) { return { type : 'robot:UNEXPECTED_DISCONNECT' } ; } , sessionResponse ( error , session , freshUpload ) { const meta = { freshUpload } ; if ( error ) { return { type : 'robot:SESSION_ERROR' , payload : { error } , meta } ; } return { type : 'robot:SESSION_RESPONSE' , payload : session , meta } ; } , sessionUpdate ( update , now ) { return { type : 'robot:SESSION_UPDATE' , payload : update , meta : { now } , } ; } , setModulesReviewed ( payload ) { return { type : 'robot:SET_MODULES_REVIEWED' , payload } ; } , setDeckPopulated ( payload ) { return { type : actionTypes . SET_DECK_POPULATED , payload } ; } , pickupAndHome ( mount , slot ) { return { type : 'robot:PICKUP_AND_HOME' , payload : { mount , slot } , meta : { robotCommand : true } , } ; } , pickupAndHomeResponse ( error = null ) { if ( error ) { return { type : 'robot:PICKUP_AND_HOME_FAILURE' , error : true , payload : error , } ; } return { type : 'robot:PICKUP_AND_HOME_SUCCESS' , payload : { } , } ; } , dropTipAndHome ( mount , slot ) { return { type : 'robot:DROP_TIP_AND_HOME' , payload : { mount , slot } , meta : { robotCommand : true } , } ; } , dropTipAndHomeResponse ( error = null ) { if ( error ) { return { type : 'robot:DROP_TIP_AND_HOME_FAILURE' , error : true , payload : error , } ; } return { type : 'robot:DROP_TIP_AND_HOME_SUCCESS' , payload : { } , } ; } , confirmTiprack ( mount , slot ) { return { type : 'robot:CONFIRM_TIPRACK' , payload : { mount , slot } , meta : { robotCommand : true } , } ; } , confirmTiprackResponse ( error = null , tipOn = false ) { if ( error ) { return { type : 'robot:CONFIRM_TIPRACK_FAILURE' , error : true , payload : error , } ; } return { type : 'robot:CONFIRM_TIPRACK_SUCCESS' , payload : { tipOn } , } ; } , moveToFront ( mount ) { return { type : actionTypes . MOVE_TO_FRONT , payload : { mount } , meta : { robotCommand : true } , } ; } , moveToFrontResponse ( error = null ) { const action = { type : actionTypes . MOVE_TO_FRONT_RESPONSE , error : error != null , } ; if ( error ) action . payload = error ; return action ; } , probeTip ( mount ) { return { type : actionTypes . PROBE_TIP , payload : { mount } , meta : { robotCommand : true } , } ; } , probeTipResponse ( error = null ) { const action = { type : actionTypes . PROBE_TIP_RESPONSE , error : error != null , } ; if ( error ) action . payload = error ; return action ; } , confirmProbed ( mount ) { return { type : 'robot:CONFIRM_PROBED' , payload : mount , meta : { robotCommand : true } , } ; } , returnTip ( mount ) { return { type : actionTypes . RETURN_TIP , payload : { mount } , meta : { robotCommand : true } , } ; } , returnTipResponse ( error = null ) { const action = { type : actionTypes . RETURN_TIP_RESPONSE , error : error != null , } ; if ( error ) action . payload = error ; return action ; } , moveTo ( mount , slot ) { return { type : 'robot:MOVE_TO' , payload : { mount , slot } , meta : { robotCommand : true } , } ; } , moveToResponse ( error = null ) { if ( error ) { return { type : 'robot:MOVE_TO_FAILURE' , error : true , payload : error , } ; } return { type : 'robot:MOVE_TO_SUCCESS' , payload : { } } ; } , setJogDistance ( step ) { return { type : 'robot:SET_JOG_DISTANCE' , payload : step } ; } , jog ( mount , axis , direction , step ) { return { type : 'robot:JOG' , payload : { mount , axis , direction , step } , meta : { robotCommand : true } , } ; } , jogResponse ( error = null ) { if ( error ) { return { type : 'robot:JOG_FAILURE' , error : true , payload : error , } ; } return { type : 'robot:JOG_SUCCESS' , payload : { } } ; } , updateOffset ( mount , slot ) { return { type : 'robot:UPDATE_OFFSET' , payload : { mount , slot } , meta : { robotCommand : true } , } ; } , updateOffsetResponse ( error = null ) { if ( error ) { return { type : 'robot:UPDATE_OFFSET_FAILURE' , error : true , payload : error , } ; } return { type : 'robot:UPDATE_OFFSET_SUCCESS' , payload : { } , } ; } , confirmLabware ( labware ) { return { type : actionTypes . CONFIRM_LABWARE , payload : { labware } } ; } , run ( ) { return { type : actionTypes . RUN , meta : { robotCommand : true } } ; } , runResponse ( error = null ) { const action = { type : actionTypes . RUN_RESPONSE , error : error != null , } ; if ( error ) action . payload = error ; return action ; } , pause ( ) { return { type : actionTypes . PAUSE , meta : { robotCommand : true } } ; } , pauseResponse ( error = null ) { const action = { type : actionTypes . PAUSE_RESPONSE , error : error != null , } ; if ( error ) action . payload = error ; return action ; } , resume ( ) { return { type : actionTypes . RESUME , meta : { robotCommand : true } } ; } , resumeResponse ( error = null ) { const action = { type : actionTypes . RESUME_RESPONSE , error : error != null , } ; if ( error ) action . payload = error ; return action ; } , cancel ( ) { return { type : actionTypes . CANCEL , meta : { robotCommand : true } } ; } , cancelResponse ( error = null ) { const action = { type : actionTypes . CANCEL_RESPONSE , error : error != null , } ; if ( error ) action . payload = error ; return action ; } , refreshSession ( ) { return { type : 'robot:REFRESH_SESSION' , meta : { robotCommand : true } } ; } , clearCalibrationRequest ( ) { return { type : 'robot:CLEAR_CALIBRATION_REQUEST' } ; } , } ;