diff --git a/src/types/api.ts b/src/types/api.ts index 19ab9aa..a7175d2 100644 --- a/src/types/api.ts +++ b/src/types/api.ts @@ -1,6 +1,6 @@ // Public API types for SDK consumers -import type { ConfigureAppPayload } from "./config.js"; +import type { ConfigureAppPayload, ConfigurePayload } from "./config.js"; import type { AuthChangedEventPayload, DocumentEventPayload, @@ -16,18 +16,20 @@ import type { Fact, KeycloakTokenResponse, NavigatePayload, + SetInteractionOptionsPayload, SetCredentialsPayload, } from "./payloads.js"; import type { DefaultMode } from "./protocol.js"; import type { AuthResponse, ConfigureAppResponse, + ConfigureResponse, CreateInteractionResponse, GetStatusResponse, GetTemplatesResponse, } from "./responses.js"; -export type { ConfigureAppPayload } from "./config.js"; +export type { ConfigureAppPayload, ConfigurePayload } from "./config.js"; // Re-export common types for public API export type { UserInfo } from "./responses.js"; @@ -77,12 +79,12 @@ export interface EmbeddedEventData { // Window API Types export interface CortiEmbeddedV1API { auth(payload: KeycloakTokenResponse): Promise; - createInteraction( - payload: CreateInteractionPayload, - ): Promise; + createInteraction(payload: CreateInteractionPayload): Promise; addFacts(payload: AddFactsPayload): Promise; + configureApp(payload: ConfigureAppPayload): Promise; configureSession(payload: ConfigureSessionPayload): Promise; - configure(payload: ConfigureAppPayload): Promise; + setInteractionOptions(payload: SetInteractionOptionsPayload): Promise; + configure(payload: ConfigurePayload): Promise; navigate(payload: NavigatePayload): Promise; startRecording(): Promise; stopRecording(): Promise; @@ -94,6 +96,13 @@ export interface CortiEmbeddedWindowAPI { v1: CortiEmbeddedV1API; } +// Extend Window interface +declare global { + interface Window { + CortiEmbedded?: CortiEmbeddedWindowAPI; + } +} + /** * Event listener function type */ @@ -115,9 +124,7 @@ export interface CortiEmbeddedAPI { * @param encounter Encounter request data * @returns Promise resolving to interaction details */ - createInteraction( - encounter: CreateInteractionPayload, - ): Promise; + createInteraction(encounter: CreateInteractionPayload): Promise; /** * Configure the current session @@ -164,19 +171,37 @@ export interface CortiEmbeddedAPI { */ getTemplates(): Promise; + /** + * Configure the embedded application + * @param config Application-level configuration + * @returns Promise that resolves when configuration is applied + */ + configureApp(config: ConfigureAppPayload): Promise; + /** * Configure the application * @param config Application configuration * @returns Promise that resolves when configuration is applied */ - configure(config: ConfigureAppPayload): Promise; + configure(config: ConfigurePayload): Promise; + + /** + * Set one-shot interaction options for the embedded instance. + * + * Each call patches the provided interaction-options branches onto the current + * snapshot for the embedded instance. Omitted branches preserve their existing + * values from previous calls. + * @param config Interaction/session-level options + * @returns Promise that resolves when options are applied + */ + setInteractionOptions(config: SetInteractionOptionsPayload): Promise; /** * Set authentication credentials without triggering auth flow * @param credentials Authentication credentials to store * @returns Promise that resolves when credentials are set */ - setCredentials(credentials: SetCredentialsPayload): Promise; + setCredentials(credentials: { password: string }): Promise; /** * Show the embedded UI diff --git a/src/types/config.ts b/src/types/config.ts index bcd62f3..68ec05c 100644 --- a/src/types/config.ts +++ b/src/types/config.ts @@ -4,7 +4,14 @@ export interface AppearanceConfig { primaryColor: string | null; } -export interface FeaturesConfig { +export interface UIConfig { + interactionTitle: boolean; + aiChat: boolean; + documentFeedback: boolean; + navigation: boolean; +} + +export interface ConfigureFeaturesConfig { interactionTitle: boolean; aiChat: boolean; documentFeedback: boolean; @@ -24,9 +31,18 @@ export interface NetworkConfig { websocketBaseUrl?: string | null; } +export interface ConfigurePayload { + debug?: boolean; + appearance?: Partial; + features?: Partial; + locale?: Partial; + network?: Partial; +} + export interface ConfigureAppPayload { + debug?: boolean; + ui?: Partial; appearance?: Partial; - features?: Partial; locale?: Partial; network?: Partial; } diff --git a/src/types/index.ts b/src/types/index.ts index 60e9b9d..cda89dd 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,4 +1,4 @@ -// Main exports for @corti/embedded-types +// Main exports for @assistant/embedded-types // Public API types export * from "./api.js"; diff --git a/src/types/payloads.ts b/src/types/payloads.ts index 9f05fdb..9e4ac42 100644 --- a/src/types/payloads.ts +++ b/src/types/payloads.ts @@ -63,6 +63,49 @@ export interface ConfigureSessionPayload { defaultMode?: DefaultMode; } +export interface InteractionModeOptions { + fallback: DefaultMode; + options: DefaultMode[]; +} + +export interface SpokenLanguageOptions { + fallback: string; +} + +export interface InteractionTemplateReference { + source: "standard"; + id: string; +} + +export interface DefaultInteractionTemplateOptions { + behaviour: "fallback"; + template: InteractionTemplateReference; +} + +export interface InteractionTemplateSources { + personal?: { + enabled: boolean; + }; +} + +export interface InteractionTemplateOptions { + sources?: InteractionTemplateSources; + defaultTemplate?: DefaultInteractionTemplateOptions; +} + +export interface InteractionDocumentOptions { + actions?: { + sync?: boolean; + }; +} + +export interface SetInteractionOptionsPayload { + mode?: InteractionModeOptions; + spokenLanguage?: SpokenLanguageOptions; + templates?: InteractionTemplateOptions; + documents?: InteractionDocumentOptions; +} + // Navigate payload export interface NavigatePayload { path: string; diff --git a/src/types/protocol.ts b/src/types/protocol.ts index b5dc625..8f9574e 100644 --- a/src/types/protocol.ts +++ b/src/types/protocol.ts @@ -2,10 +2,7 @@ export type APIVersion = "v1"; -export type MessageType = - | "CORTI_EMBEDDED" - | "CORTI_EMBEDDED_RESPONSE" - | "CORTI_EMBEDDED_EVENT"; +export type MessageType = "CORTI_EMBEDDED" | "CORTI_EMBEDDED_RESPONSE" | "CORTI_EMBEDDED_EVENT"; export type DefaultMode = "virtual" | "in-person"; @@ -13,7 +10,9 @@ export type EmbeddedAction = | "auth" | "createInteraction" | "addFacts" + | "configureApp" | "configureSession" + | "setInteractionOptions" | "navigate" | "startRecording" | "stopRecording" @@ -92,6 +91,14 @@ export interface ConfigureSessionRequest extends EmbeddedRequest { action: "configureSession"; } +export interface ConfigureAppRequest extends EmbeddedRequest { + action: "configureApp"; +} + +export interface SetInteractionOptionsRequest extends EmbeddedRequest { + action: "setInteractionOptions"; +} + export interface NavigateRequest extends EmbeddedRequest { action: "navigate"; } @@ -170,9 +177,11 @@ export type AnyEmbeddedRequest = | AuthRequest | CreateInteractionRequest | AddFactsRequest + | ConfigureAppRequest | ConfigureSessionRequest | GetTemplatesRequest | NavigateRequest + | SetInteractionOptionsRequest | StartRecordingRequest | StopRecordingRequest | GetStatusRequest @@ -196,7 +205,4 @@ export type AnyDeprecatedEmbeddedEvent = export type AnyEvent = EmbeddedEventMessage | AnyDeprecatedEmbeddedEvent; -export type AnyEmbeddedMessage = - | AnyEmbeddedRequest - | AnyEmbeddedResponse - | AnyDeprecatedEmbeddedEvent; +export type AnyEmbeddedMessage = AnyEmbeddedRequest | AnyEmbeddedResponse | AnyEvent; diff --git a/src/types/responses.ts b/src/types/responses.ts index f9aea91..ff5f6c7 100644 --- a/src/types/responses.ts +++ b/src/types/responses.ts @@ -1,6 +1,12 @@ // Response types for embedded API -import type { AppearanceConfig, FeaturesConfig, LocaleConfig, NetworkConfig } from "./config.js"; +import type { + AppearanceConfig, + ConfigureFeaturesConfig, + LocaleConfig, + NetworkConfig, + UIConfig, +} from "./config.js"; import type { EmbeddedInterviewDetails } from "./generated/interview-details.js"; export interface UserInfo { @@ -49,9 +55,18 @@ export interface GetTemplatesResponse { templates: EmbeddedTemplate[]; } +export interface ConfigureResponse { + debug?: boolean; + appearance: AppearanceConfig; + features: ConfigureFeaturesConfig; + locale: LocaleConfig; + network: NetworkConfig; +} + export interface ConfigureAppResponse { + debug?: boolean; appearance: AppearanceConfig; - features: FeaturesConfig; + ui: UIConfig; locale: LocaleConfig; network: NetworkConfig; }