UNPKG

@documedis-components/prescription-sign

Version:

React component for signing electronic prescriptions with HIN authentication

893 lines (892 loc) 330 kB
import { Environment } from '../../../../../core/src/infrastructure/shared'; import { DomainError } from '../../../../../core/src/errors/index.ts'; /** * Props for the usePrescriptionSigning hook */ export type UsePrescriptionSigningProps = { /** * Environment configuration for the prescription service * - 'local': Development environment (localhost:52247) * - 'dev': Development Azure Container Apps * - 'int': Integration Azure Container Apps * - 'prod': Production Azure Container Apps */ environment: Environment; /** Access token for authenticating with the backend service */ accessToken: string; /** * Optional existing session token to reuse authentication state. * If provided, the hook will attempt to use existing authentication. */ sessionToken?: string; /** * Optional callback invoked when the session token is updated. * Use this to persist the session token for reuse across hook instances. */ onSessionTokenUpdate?: (token: string) => void; /** * Optional callback invoked when prescription signing succeeds. * Receives the signed CHMED data as a base64-encoded string. * Optionally receives the generatedPdf if the option * shouldGeneratePdf is set to true. * * @see shouldGeneratePdf */ onSuccess?: (signedCHMED: string, generatedPdf?: string) => void; /** * Optional callback invoked when prescription signing fails. * Receives a specific error type indicating what went wrong. */ onError?: (error: DomainError) => void; /** * Flag to generate PDF after signing. */ shouldGeneratePdf: boolean; }; /** * Hook to manage the ePrescription signature process * * This is a standalone hook that can be shipped in a library. * It handles the complete HIN authentication and signing flow. * * Required peer dependencies: * - next-auth/react (for session management) * - xstate and @xstate/react * * @returns Object containing: * - start: Function to initiate the signing process with CHMED data * - interrupt: Function to terminate the signing process at any time * - state: Raw XState machine state (for advanced usage) * - isIdle: true when ready to start signing (initial state) * - isActive: true when actively processing (excludes error/success states) * - isError: true when in error state (persists until retry) * - isSuccess: true when signing completed successfully * - isSigning: true during the actual signature operation * - signedCHMED: The signed prescription data (available after success) */ export declare function usePrescriptionSign(props: UsePrescriptionSigningProps): { start: (encodedCHMED: string, shouldGeneratePdf: boolean) => void; interrupt: () => void; state: import('xstate').MachineSnapshot<import('../../core').PrescriptionSignContext, { type: "OPEN_POPUP"; popupRef: Window | null; } | { type: "CLOSE_POPUP"; } | { type: "START"; encodedCHMED: string; shouldGeneratePdf: boolean; } | { type: "TERMINATE"; } | { type: "VERIFY_SESSION"; } | { type: "REFRESH_TOKEN"; } | { type: "GET_TOKEN"; } | { type: "GET_SAML_AUTH_CODE"; recoverable?: boolean; sessionToken: string; } | { type: "GET_SAML_AUTH_HANDLE"; authCode: string; } | { type: "VALIDATE_CHMED"; sessionToken: string; } | { type: "xstate.done.actor.getSAMLAuthHandle"; sessionToken: string; recoverable?: boolean; } | { type: "SIGN_PRESCRIPTION"; sessionToken: string; recoverable?: boolean; } | { type: "AUTHENTICATION_SUCCESS"; } | { type: "ERROR"; error: DomainError; } | { type: "UNAUTHORIZED_TOKEN"; } | { type: "UNAUTHORIZED_HANDLE"; }, { [x: string]: import('xstate').ActorRefFromLogic<import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { sessionToken?: string; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { popupRef: Window | null; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; accessToken: string; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').PromiseActorLogic<void, { encodedCHMED?: string; parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; popupRef: Window | null; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').PromiseActorLogic<{ sessionToken: string; }, { hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; popupRef: Window | null; hinClient: import('../../core/integration/hin').HINClient; recover: boolean; sessionToken?: string; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').PromiseActorLogic<{ sessionToken: string; }, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; authCode: string; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').PromiseActorLogic<{ signedPrescription: string; generatedPdf?: string; }, { encodedCHMED?: string; shouldGeneratePdf: boolean; parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; recover: boolean; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { error: DomainError; }, import('xstate').EventObject>> | import('xstate').ActorRefFromLogic<import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { signedCHMED?: string; generatedPdf?: string; }, import('xstate').EventObject>> | undefined; }, "Idle" | { Started: { Popup: "Opening" | "Open" | "Closed"; Signing: "Authentication" | "SAMLAuth" | "Error" | "End" | "ValidatingCHMED" | "VerifySessionGuard" | "SigningCHMED" | "SAMLAuthCode" | "TokenRefreshing" | "OAuth" | "SAMLAuthHandle" | "Success"; }; }, string, import('xstate').NonReducibleUnknown, import('xstate').MetaObject, { readonly context: ({ input }: { spawn: { <TSrc extends "openPopup" | "trackPopup" | "listenAuthenticationMessage" | "listenSamlAuthMessage" | "validateCHMED" | "verifySession" | "initOAuth" | "listenOAuthMessage" | "refreshToken" | "initSAMLAuthCode" | "listenSAMLAuthCodeMessage" | "getSAMLAuthHandle" | "signCHMEDRx" | "errorHandler" | "successHandler">(logic: TSrc, ...[options]: ({ src: "openPopup"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { sessionToken?: string; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; } extends infer T ? T extends { src: "openPopup"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { sessionToken?: string; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; } ? T extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T["logic"]> | undefined; syncSnapshot?: boolean; } & { [K in import('xstate').RequiredActorOptions<T>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T>>> : never : never : never) | ({ src: "trackPopup"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { popupRef: Window | null; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_1 ? T_1 extends { src: "trackPopup"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { popupRef: Window | null; }, import('xstate').EventObject>; id: string | undefined; } ? T_1 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_1["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_1["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_1 in import('xstate').RequiredActorOptions<T_1>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_1>>> : never : never : never) | ({ src: "listenAuthenticationMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; accessToken: string; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_2 ? T_2 extends { src: "listenAuthenticationMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; accessToken: string; }, import('xstate').EventObject>; id: string | undefined; } ? T_2 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_2["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_2["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_2 in import('xstate').RequiredActorOptions<T_2>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_2>>> : never : never : never) | ({ src: "listenSamlAuthMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_3 ? T_3 extends { src: "listenSamlAuthMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; } ? T_3 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_3["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_3["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_3 in import('xstate').RequiredActorOptions<T_3>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_3>>> : never : never : never) | ({ src: "validateCHMED"; logic: import('xstate').PromiseActorLogic<void, { encodedCHMED?: string; parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_4 ? T_4 extends { src: "validateCHMED"; logic: import('xstate').PromiseActorLogic<void, { encodedCHMED?: string; parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } ? T_4 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_4["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_4["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_4 in import('xstate').RequiredActorOptions<T_4>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_4>>> : never : never : never) | ({ src: "verifySession"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_5 ? T_5 extends { src: "verifySession"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } ? T_5 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_5["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_5["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_5 in import('xstate').RequiredActorOptions<T_5>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_5>>> : never : never : never) | ({ src: "initOAuth"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; popupRef: Window | null; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_6 ? T_6 extends { src: "initOAuth"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; popupRef: Window | null; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; } ? T_6 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_6["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_6["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_6 in import('xstate').RequiredActorOptions<T_6>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_6>>> : never : never : never) | ({ src: "listenOAuthMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_7 ? T_7 extends { src: "listenOAuthMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } ? T_7 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_7["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_7["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_7 in import('xstate').RequiredActorOptions<T_7>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_7>>> : never : never : never) | ({ src: "refreshToken"; logic: import('xstate').PromiseActorLogic<{ sessionToken: string; }, { hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_8 ? T_8 extends { src: "refreshToken"; logic: import('xstate').PromiseActorLogic<{ sessionToken: string; }, { hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } ? T_8 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_8["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_8["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_8 in import('xstate').RequiredActorOptions<T_8>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_8>>> : never : never : never) | ({ src: "initSAMLAuthCode"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; popupRef: Window | null; hinClient: import('../../core/integration/hin').HINClient; recover: boolean; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_9 ? T_9 extends { src: "initSAMLAuthCode"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; popupRef: Window | null; hinClient: import('../../core/integration/hin').HINClient; recover: boolean; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } ? T_9 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_9["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_9["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_9 in import('xstate').RequiredActorOptions<T_9>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_9>>> : never : never : never) | ({ src: "listenSAMLAuthCodeMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_10 ? T_10 extends { src: "listenSAMLAuthCodeMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; } ? T_10 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_10["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_10["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_10 in import('xstate').RequiredActorOptions<T_10>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_10>>> : never : never : never) | ({ src: "getSAMLAuthHandle"; logic: import('xstate').PromiseActorLogic<{ sessionToken: string; }, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; authCode: string; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_11 ? T_11 extends { src: "getSAMLAuthHandle"; logic: import('xstate').PromiseActorLogic<{ sessionToken: string; }, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; authCode: string; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; } ? T_11 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_11["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_11["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_11 in import('xstate').RequiredActorOptions<T_11>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_11>>> : never : never : never) | ({ src: "signCHMEDRx"; logic: import('xstate').PromiseActorLogic<{ signedPrescription: string; generatedPdf?: string; }, { encodedCHMED?: string; shouldGeneratePdf: boolean; parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; recover: boolean; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_12 ? T_12 extends { src: "signCHMEDRx"; logic: import('xstate').PromiseActorLogic<{ signedPrescription: string; generatedPdf?: string; }, { encodedCHMED?: string; shouldGeneratePdf: boolean; parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; recover: boolean; }, import('xstate').EventObject>; id: string | undefined; } ? T_12 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_12["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_12["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_12 in import('xstate').RequiredActorOptions<T_12>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_12>>> : never : never : never) | ({ src: "errorHandler"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { error: DomainError; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_13 ? T_13 extends { src: "errorHandler"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { error: DomainError; }, import('xstate').EventObject>; id: string | undefined; } ? T_13 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_13["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_13["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_13 in import('xstate').RequiredActorOptions<T_13>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_13>>> : never : never : never) | ({ src: "successHandler"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { signedCHMED?: string; generatedPdf?: string; }, import('xstate').EventObject>; id: string | undefined; } extends infer T_14 ? T_14 extends { src: "successHandler"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { signedCHMED?: string; generatedPdf?: string; }, import('xstate').EventObject>; id: string | undefined; } ? T_14 extends { src: TSrc; } ? import('xstate').ConditionalRequired<[options?: ({ id?: T_14["id"] | undefined; systemId?: string; input?: import('xstate').InputFrom<T_14["logic"]> | undefined; syncSnapshot?: boolean; } & { [K_14 in import('xstate').RequiredActorOptions<T_14>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredActorOptions<T_14>>> : never : never : never)): import('xstate').ActorRefFromLogic<import('xstate').GetConcreteByKey<import('xstate').Values<{ openPopup: { src: "openPopup"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { sessionToken?: string; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; }; trackPopup: { src: "trackPopup"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { popupRef: Window | null; }, import('xstate').EventObject>; id: string | undefined; }; listenAuthenticationMessage: { src: "listenAuthenticationMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; accessToken: string; }, import('xstate').EventObject>; id: string | undefined; }; listenSamlAuthMessage: { src: "listenSamlAuthMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; }; validateCHMED: { src: "validateCHMED"; logic: import('xstate').PromiseActorLogic<void, { encodedCHMED?: string; parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; }; verifySession: { src: "verifySession"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; }; initOAuth: { src: "initOAuth"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; popupRef: Window | null; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; }; listenOAuthMessage: { src: "listenOAuthMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; }; refreshToken: { src: "refreshToken"; logic: import('xstate').PromiseActorLogic<{ sessionToken: string; }, { hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; }; initSAMLAuthCode: { src: "initSAMLAuthCode"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; popupRef: Window | null; hinClient: import('../../core/integration/hin').HINClient; recover: boolean; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; }; listenSAMLAuthCodeMessage: { src: "listenSAMLAuthCodeMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; }; getSAMLAuthHandle: { src: "getSAMLAuthHandle"; logic: import('xstate').PromiseActorLogic<{ sessionToken: string; }, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; authCode: string; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; }; signCHMEDRx: { src: "signCHMEDRx"; logic: import('xstate').PromiseActorLogic<{ signedPrescription: string; generatedPdf?: string; }, { encodedCHMED?: string; shouldGeneratePdf: boolean; parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; recover: boolean; }, import('xstate').EventObject>; id: string | undefined; }; errorHandler: { src: "errorHandler"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { error: DomainError; }, import('xstate').EventObject>; id: string | undefined; }; successHandler: { src: "successHandler"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { signedCHMED?: string; generatedPdf?: string; }, import('xstate').EventObject>; id: string | undefined; }; }>, "src", TSrc>["logic"]>; <TLogic extends import('xstate').AnyActorLogic>(src: TLogic, ...[options]: import('xstate').ConditionalRequired<[options?: ({ id?: never; systemId?: string; input?: import('xstate').InputFrom<TLogic> | undefined; syncSnapshot?: boolean; } & { [K in import('xstate').RequiredLogicInput<TLogic>]: unknown; }) | undefined], import('xstate').IsNotNever<import('xstate').RequiredLogicInput<TLogic>>>): import('xstate').ActorRefFromLogic<TLogic>; }; input: import('../../core').PrescriptionSignContextInputs; self: import('xstate').ActorRef<import('xstate').MachineSnapshot<import('../../core').PrescriptionSignContext, { type: "OPEN_POPUP"; popupRef: Window | null; } | { type: "CLOSE_POPUP"; } | { type: "START"; encodedCHMED: string; shouldGeneratePdf: boolean; } | { type: "TERMINATE"; } | { type: "VERIFY_SESSION"; } | { type: "REFRESH_TOKEN"; } | { type: "GET_TOKEN"; } | { type: "GET_SAML_AUTH_CODE"; recoverable?: boolean; sessionToken: string; } | { type: "GET_SAML_AUTH_HANDLE"; authCode: string; } | { type: "VALIDATE_CHMED"; sessionToken: string; } | { type: "xstate.done.actor.getSAMLAuthHandle"; sessionToken: string; recoverable?: boolean; } | { type: "SIGN_PRESCRIPTION"; sessionToken: string; recoverable?: boolean; } | { type: "AUTHENTICATION_SUCCESS"; } | { type: "ERROR"; error: DomainError; } | { type: "UNAUTHORIZED_TOKEN"; } | { type: "UNAUTHORIZED_HANDLE"; }, Record<string, import('xstate').AnyActorRef | undefined>, import('xstate').StateValue, string, unknown, any, any>, { type: "OPEN_POPUP"; popupRef: Window | null; } | { type: "CLOSE_POPUP"; } | { type: "START"; encodedCHMED: string; shouldGeneratePdf: boolean; } | { type: "TERMINATE"; } | { type: "VERIFY_SESSION"; } | { type: "REFRESH_TOKEN"; } | { type: "GET_TOKEN"; } | { type: "GET_SAML_AUTH_CODE"; recoverable?: boolean; sessionToken: string; } | { type: "GET_SAML_AUTH_HANDLE"; authCode: string; } | { type: "VALIDATE_CHMED"; sessionToken: string; } | { type: "xstate.done.actor.getSAMLAuthHandle"; sessionToken: string; recoverable?: boolean; } | { type: "SIGN_PRESCRIPTION"; sessionToken: string; recoverable?: boolean; } | { type: "AUTHENTICATION_SUCCESS"; } | { type: "ERROR"; error: DomainError; } | { type: "UNAUTHORIZED_TOKEN"; } | { type: "UNAUTHORIZED_HANDLE"; }, import('xstate').AnyEventObject>; }) => { popupRef: null; encodedCHMED: undefined; signedCHMED: undefined; generatedPdf: undefined; shouldGeneratePdf: false; sessionToken: string | undefined; accessToken: string; hinClient: import('../../core/integration/hin').HINClient; }; readonly id: "HINPrescriptionSigning"; readonly initial: "Idle"; readonly states: { readonly Idle: { readonly on: { readonly START: { readonly target: "Started"; readonly actions: import('xstate').ActionFunction<import('../../core').PrescriptionSignContext, { type: "START"; encodedCHMED: string; shouldGeneratePdf: boolean; }, { type: "OPEN_POPUP"; popupRef: Window | null; } | { type: "CLOSE_POPUP"; } | { type: "START"; encodedCHMED: string; shouldGeneratePdf: boolean; } | { type: "TERMINATE"; } | { type: "VERIFY_SESSION"; } | { type: "REFRESH_TOKEN"; } | { type: "GET_TOKEN"; } | { type: "GET_SAML_AUTH_CODE"; recoverable?: boolean; sessionToken: string; } | { type: "GET_SAML_AUTH_HANDLE"; authCode: string; } | { type: "VALIDATE_CHMED"; sessionToken: string; } | { type: "xstate.done.actor.getSAMLAuthHandle"; sessionToken: string; recoverable?: boolean; } | { type: "SIGN_PRESCRIPTION"; sessionToken: string; recoverable?: boolean; } | { type: "AUTHENTICATION_SUCCESS"; } | { type: "ERROR"; error: DomainError; } | { type: "UNAUTHORIZED_TOKEN"; } | { type: "UNAUTHORIZED_HANDLE"; }, undefined, import('xstate').Values<{ openPopup: { src: "openPopup"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { sessionToken?: string; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; }; trackPopup: { src: "trackPopup"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { popupRef: Window | null; }, import('xstate').EventObject>; id: string | undefined; }; listenAuthenticationMessage: { src: "listenAuthenticationMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; accessToken: string; }, import('xstate').EventObject>; id: string | undefined; }; listenSamlAuthMessage: { src: "listenSamlAuthMessage"; logic: import('xstate').CallbackActorLogic<import('xstate').AnyEventObject, { hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; }; validateCHMED: { src: "validateCHMED"; logic: import('xstate').PromiseActorLogic<void, { encodedCHMED?: string; parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; }; verifySession: { src: "verifySession"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; hinClient: import('../../core/integration/hin').HINClient; sessionToken?: string; }, import('xstate').EventObject>; id: string | undefined; }; initOAuth: { src: "initOAuth"; logic: import('xstate').PromiseActorLogic<void, { parent: import('xstate').ActorRef<import('xstate').AnyMachineSnapshot, import('../../core').PrescriptionSignEvents>; popupRef: Window | null; hinClient: import('../../core/integration/hin').HINClient; }, import('xstate').EventObject>; id: string | undefined; }; listenOAuthMessage: { src: "listenOAuthMessage";