@medalsocial/sdk 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -527,7 +527,7 @@ interface ClientConfig {
527
527
  timeout: number;
528
528
  userAgent: string;
529
529
  }
530
- /** Per-request options for write operations. */
530
+ /** Per-request options. `headers` applies to every verb; the named options only matter on writes. */
531
531
  interface RequestOptions {
532
532
  /**
533
533
  * Idempotency key sent as the `Idempotency-Key` header. Retries with the
@@ -560,6 +560,22 @@ interface RequestOptions {
560
560
  * Ignored on routes that do not require a capability confirmation.
561
561
  */
562
562
  autoConfirm?: AutoConfirmOptions | false;
563
+ /**
564
+ * Set to `false` to send the request exactly once — no automatic retry on
565
+ * 429/5xx. Use it for writes whose FIRST attempt may have succeeded even
566
+ * though the response was lost: a one-time code that is burned on use, a
567
+ * logout or erasure that revokes the very credential a retry would present.
568
+ * A retry there does not repeat the operation, it misreports it as failed.
569
+ * Defaults to `true`.
570
+ */
571
+ retry?: boolean;
572
+ /**
573
+ * Extra request headers, e.g. `x-portal-session` for the customer portal.
574
+ * Applied first: the named options (`idempotencyKey`,
575
+ * `capabilityConfirmation`) win over a same-named entry here, so a bag can
576
+ * never smuggle in a key the SDK did not resolve.
577
+ */
578
+ headers?: Record<string, string>;
563
579
  }
564
580
  /**
565
581
  * Low-level HTTP client used by all resource classes.
@@ -570,7 +586,7 @@ declare class BaseClient {
570
586
  readonly config: ClientConfig;
571
587
  constructor(config: ClientConfig);
572
588
  /** Execute an authenticated GET request and return the parsed JSON body. */
573
- get<T>(path: string, params?: Record<string, string | undefined>): Promise<T>;
589
+ get<T>(path: string, params?: Record<string, string | undefined>, options?: Pick<RequestOptions, "headers">): Promise<T>;
574
590
  /** Execute an authenticated POST request with a JSON body. */
575
591
  post<T>(path: string, body?: unknown, options?: RequestOptions): Promise<T>;
576
592
  /**
@@ -639,6 +655,12 @@ interface Booking {
639
655
  booked_for_name: string | null;
640
656
  /** Birth year (not a birthdate) of whoever the appointment is for. */
641
657
  booked_for_birth_year: number | null;
658
+ /** The {@link ContactPerson} this booking was made for, if any. */
659
+ booked_for_person_id: string | null;
660
+ /** The {@link BookingEvent} this booking is a registration for, if any. */
661
+ event_id: string | null;
662
+ /** Position of this booking within its event's registrations, if any. */
663
+ event_order: number | null;
642
664
  /** Shared by every booking created in the same party request. */
643
665
  party_sequence_id: string | null;
644
666
  status: BookingStatus;
@@ -724,6 +746,8 @@ interface CreateBookingItemInput {
724
746
  booked_for_name?: string;
725
747
  /** Birth year (not a birthdate) of whoever the appointment is for. */
726
748
  booked_for_birth_year?: number;
749
+ /** Book this line on behalf of a {@link ContactPerson} rather than the contact. */
750
+ booked_for_person_id?: string;
727
751
  }
728
752
  /** The person the booking is made under. Phone is the CRM dedupe key. */
729
753
  interface BookingContactInput {
@@ -902,6 +926,113 @@ interface BookingAvailabilityOptions {
902
926
  /** Restrict slots to one resource. Defaults to every capable resource. */
903
927
  resource_id?: string;
904
928
  }
929
+ /** How a {@link ContactPerson} or {@link ContactRelation} relates to a contact. */
930
+ type RelationType = "guardian" | "owner" | "employer" | "caregiver" | "partner" | "custom";
931
+ /** A person a contact books for — a child, a pet, an employee. No login of its own. */
932
+ interface ContactPerson {
933
+ person_id: string;
934
+ contact_id: string;
935
+ name: string;
936
+ birth_year: number | null;
937
+ relation_type: RelationType;
938
+ relation_label: string | null;
939
+ notes: string | null;
940
+ active: boolean;
941
+ promoted_to_contact_id: string | null;
942
+ /** ISO 8601. */
943
+ created_at: string;
944
+ /** ISO 8601. */
945
+ updated_at: string;
946
+ }
947
+ /** Input for `bookings.persons.create(...)`. */
948
+ interface CreateContactPersonInput {
949
+ contact_id: string;
950
+ name: string;
951
+ birth_year?: number;
952
+ relation_type: RelationType;
953
+ relation_label?: string;
954
+ notes?: string;
955
+ }
956
+ /** One directional relation between two contacts. */
957
+ interface ContactRelation {
958
+ relation_id: string;
959
+ from_contact_id: string;
960
+ to_contact_id: string;
961
+ type: RelationType;
962
+ custom_label: string | null;
963
+ since: number | null;
964
+ note: string | null;
965
+ /** Empty string when the counterpart contact no longer exists. */
966
+ counterpart_name: string;
967
+ /** ISO 8601. */
968
+ created_at: string;
969
+ }
970
+ /** Relations a contact holds, split by direction. */
971
+ interface ContactRelations {
972
+ outgoing: ContactRelation[];
973
+ incoming: ContactRelation[];
974
+ }
975
+ /** Input for `bookings.relations.create(...)`. */
976
+ interface CreateContactRelationInput {
977
+ from_contact_id: string;
978
+ to_contact_id: string;
979
+ type: RelationType;
980
+ custom_label?: string;
981
+ since?: number;
982
+ note?: string;
983
+ }
984
+ /** Result of `bookings.relations.create(...)`. */
985
+ interface CreateContactRelationResult {
986
+ relation_id: string;
987
+ }
988
+ /** Lifecycle state of an arrangement. */
989
+ type BookingEventStatus = "draft" | "open" | "closed" | "completed" | "cancelled";
990
+ /** Which prebuilt template an arrangement was created from. */
991
+ type BookingEventTemplateKey = "kindergarten_visit" | "company_day" | "class" | "open_day" | "custom";
992
+ /** An arrangement — a scheduled group session bookings register against. */
993
+ interface BookingEvent {
994
+ event_id: string;
995
+ template_id: string;
996
+ host_id: string | null;
997
+ /** yyyy-mm-dd in the workspace time zone. */
998
+ date: string;
999
+ window_start_minute: number;
1000
+ window_end_minute: number;
1001
+ place: "at_host" | "in_house";
1002
+ capacity: number;
1003
+ minimum: number;
1004
+ registered_count: number;
1005
+ service_ids: string[];
1006
+ resource_ids: string[];
1007
+ price_override_ore: number | null;
1008
+ status: BookingEventStatus;
1009
+ /** ISO 8601. */
1010
+ registration_closes_at: string;
1011
+ slug: string;
1012
+ /** ISO 8601. */
1013
+ created_at: string;
1014
+ /** ISO 8601. */
1015
+ updated_at: string;
1016
+ }
1017
+ /** Options for `bookings.events.list(...)`. The window is `yyyy-mm-dd`, inclusive. */
1018
+ interface ListBookingEventsOptions {
1019
+ from: string;
1020
+ to: string;
1021
+ status?: BookingEventStatus;
1022
+ }
1023
+ /** Input for `bookings.events.create(...)`. */
1024
+ interface CreateBookingEventInput {
1025
+ template_key: BookingEventTemplateKey;
1026
+ host_id?: string;
1027
+ date: string;
1028
+ window_start_minute: number;
1029
+ window_end_minute?: number;
1030
+ place: "at_host" | "in_house";
1031
+ capacity?: number;
1032
+ minimum?: number;
1033
+ service_ids: string[];
1034
+ resource_ids: string[];
1035
+ }
905
1036
 
906
1037
  /**
907
1038
  * Customer-side booking management, addressed by the show-once manage token
@@ -932,6 +1063,45 @@ declare class BookingsManage {
932
1063
  */
933
1064
  reschedule(token: string, input: RescheduleBookingInput, options?: RequestOptions): Promise<ApiResponse<BookingRescheduleResult>>;
934
1065
  }
1066
+ /**
1067
+ * Persons a contact books for — children, pets, employees. Each has no login
1068
+ * of its own; bookings made on their behalf still hang off the contact via
1069
+ * `booked_for_person_id`.
1070
+ */
1071
+ declare class BookingsPersons {
1072
+ private client;
1073
+ constructor(client: BaseClient);
1074
+ /** Persons a contact books for. Active-only unless `include_inactive`. */
1075
+ list(contactId: string, options?: {
1076
+ include_inactive?: boolean;
1077
+ }): Promise<ApiResponse<ContactPerson[]>>;
1078
+ /** Add a person under a contact. */
1079
+ create(input: CreateContactPersonInput, options?: RequestOptions): Promise<ApiResponse<ContactPerson>>;
1080
+ }
1081
+ /** Directional relations between contacts — guardian, partner, employer, and so on. */
1082
+ declare class BookingsRelations {
1083
+ private client;
1084
+ constructor(client: BaseClient);
1085
+ /** Relations a contact holds, split into outgoing and incoming. */
1086
+ list(contactId: string): Promise<ApiResponse<ContactRelations>>;
1087
+ /** Create a relation from one contact to another. */
1088
+ create(input: CreateContactRelationInput, options?: RequestOptions): Promise<ApiResponse<CreateContactRelationResult>>;
1089
+ }
1090
+ /**
1091
+ * Arrangementer — scheduled group sessions bookings register against.
1092
+ * Registration itself lands in a later release; this is the read/create
1093
+ * surface for the events.
1094
+ */
1095
+ declare class BookingsEvents {
1096
+ private client;
1097
+ constructor(client: BaseClient);
1098
+ /** Arrangementer in a date range (`yyyy-mm-dd`, inclusive). */
1099
+ list(options: ListBookingEventsOptions): Promise<ApiResponse<BookingEvent[]>>;
1100
+ /** Get an arrangement by ID. */
1101
+ get(id: string): Promise<ApiResponse<BookingEvent>>;
1102
+ /** Create an arrangement from a template. */
1103
+ create(input: CreateBookingEventInput, options?: RequestOptions): Promise<ApiResponse<BookingEvent>>;
1104
+ }
935
1105
  /**
936
1106
  * Appointment bookings: the service catalogue, free slots, and the bookings
937
1107
  * themselves.
@@ -961,6 +1131,12 @@ declare class Bookings {
961
1131
  private client;
962
1132
  /** Customer-side actions addressed by manage token. */
963
1133
  readonly manage: BookingsManage;
1134
+ /** Persons a contact books for — children, pets, employees. */
1135
+ readonly persons: BookingsPersons;
1136
+ /** Directional relations between contacts. */
1137
+ readonly relations: BookingsRelations;
1138
+ /** Arrangementer — scheduled group sessions bookings register against. */
1139
+ readonly events: BookingsEvents;
964
1140
  constructor(client: BaseClient);
965
1141
  /** List the bookable service catalogue. Active-only unless asked otherwise. */
966
1142
  listServices(options?: ListBookingServicesOptions): Promise<ApiResponse<BookingService[]>>;
@@ -1732,6 +1908,238 @@ declare class Helpdesk {
1732
1908
  constructor(client: BaseClient, confirmer?: CapabilityConfirmer);
1733
1909
  }
1734
1910
 
1911
+ /** Input for starting an e-mail one-time-code login. */
1912
+ interface PortalLoginStartInput {
1913
+ /** The address the code is sent to. */
1914
+ email: string;
1915
+ /** Locale for the e-mail (e.g. `nb`, `en`); the workspace default when omitted. */
1916
+ locale?: string;
1917
+ }
1918
+ /**
1919
+ * Result of a login start. Always `"sent"`, whether or not the address is a
1920
+ * known contact — the route is enumeration-safe by design.
1921
+ */
1922
+ interface PortalLoginStartResult {
1923
+ status: "sent";
1924
+ }
1925
+ /** Input for exchanging an e-mailed code for a portal session. */
1926
+ interface PortalVerifyInput {
1927
+ /** The address the code was sent to. */
1928
+ email: string;
1929
+ /** The one-time code from the e-mail. */
1930
+ code: string;
1931
+ }
1932
+ /** The contact a portal session belongs to. */
1933
+ interface PortalContactSummary {
1934
+ contact_id: string;
1935
+ first_name: string | null;
1936
+ }
1937
+ /**
1938
+ * A portal session. `session_token` is a bearer credential for ONE contact —
1939
+ * keep it in an HttpOnly cookie on the site's server and never hand it to
1940
+ * the browser.
1941
+ */
1942
+ interface PortalSession {
1943
+ session_token: string;
1944
+ /** Unix timestamp in milliseconds. */
1945
+ expires_at: number;
1946
+ contact: PortalContactSummary;
1947
+ }
1948
+ /** A family member the contact books on behalf of. */
1949
+ interface PortalFamilyMember {
1950
+ name: string;
1951
+ birth_year: number;
1952
+ }
1953
+ /** A person the contact books for — a child, a pet — with no login of its own. */
1954
+ interface PortalPerson {
1955
+ person_id: string;
1956
+ name: string;
1957
+ birth_year: number | null;
1958
+ relation_type: RelationType;
1959
+ relation_label: string | null;
1960
+ notes: string | null;
1961
+ /** `false` for a person the customer removed or that was promoted to its own contact; `me` returns active persons only, the export returns all. */
1962
+ active: boolean;
1963
+ }
1964
+ /** The workspace's own words for the person concept, e.g. `"Barn"`. */
1965
+ interface PortalLabels {
1966
+ person: string;
1967
+ persons: string;
1968
+ }
1969
+ /** The signed-in contact's own profile. */
1970
+ interface PortalProfile {
1971
+ contact_id: string;
1972
+ email: string;
1973
+ first_name: string | null;
1974
+ last_name: string | null;
1975
+ phone: string | null;
1976
+ family: PortalFamilyMember[];
1977
+ persons: PortalPerson[];
1978
+ labels: PortalLabels;
1979
+ marketing_consent: boolean;
1980
+ /** Unix timestamp in milliseconds. */
1981
+ created_at: number;
1982
+ }
1983
+ /** Fields the signed-in contact may change on their own profile. */
1984
+ interface PortalProfilePatch {
1985
+ first_name?: string;
1986
+ last_name?: string;
1987
+ /** `null` clears the number. */
1988
+ phone?: string | null;
1989
+ /** Replaces the whole list. */
1990
+ family?: PortalFamilyMember[];
1991
+ /** Records a marketing_email consent change with source 'portal'. */
1992
+ marketing_consent?: boolean;
1993
+ }
1994
+ /** Lifecycle state of a booking as seen from the portal. */
1995
+ type PortalBookingStatus = BookingStatus;
1996
+ /** One of the signed-in contact's bookings. */
1997
+ interface PortalBooking {
1998
+ booking_id: string;
1999
+ status: PortalBookingStatus;
2000
+ /** Unix timestamp in milliseconds. */
2001
+ start_ts: number;
2002
+ /** Unix timestamp in milliseconds. */
2003
+ end_ts: number;
2004
+ service_id: string | null;
2005
+ service_name: string | null;
2006
+ resource_id: string | null;
2007
+ resource_name: string | null;
2008
+ booked_for_name: string | null;
2009
+ /** Integer øre, or `null` when the service has no price. */
2010
+ amount_ore: number | null;
2011
+ notes: string | null;
2012
+ /** Present only while the booking is upcoming and manageable; opens the site's manage page. */
2013
+ manage_token: string | null;
2014
+ can_manage: boolean;
2015
+ }
2016
+ /** The signed-in contact's bookings, split around now. */
2017
+ interface PortalBookings {
2018
+ upcoming: PortalBooking[];
2019
+ past: PortalBooking[];
2020
+ }
2021
+ /** A consent decision included in a portal data export. */
2022
+ interface PortalConsentRecord {
2023
+ consent_type: string;
2024
+ granted: boolean;
2025
+ /** Unix timestamp in milliseconds, or `null`. */
2026
+ granted_at: number | null;
2027
+ /** Unix timestamp in milliseconds, or `null`. */
2028
+ revoked_at: number | null;
2029
+ source: string;
2030
+ }
2031
+ /** A relation the exporting contact is a party to; only the counterpart's display name is exposed. */
2032
+ interface PortalExportRelation {
2033
+ direction: "outgoing" | "incoming";
2034
+ type: RelationType;
2035
+ custom_label: string | null;
2036
+ since: number | null;
2037
+ note: string | null;
2038
+ counterpart_name: string;
2039
+ }
2040
+ /** Everything the workspace holds about the signed-in contact (GDPR Art. 15). */
2041
+ interface PortalExport {
2042
+ /** Unix timestamp in milliseconds. */
2043
+ exported_at: number;
2044
+ contact: PortalProfile;
2045
+ family: PortalFamilyMember[];
2046
+ consents: PortalConsentRecord[];
2047
+ bookings: PortalBooking[];
2048
+ relations: PortalExportRelation[];
2049
+ }
2050
+
2051
+ /**
2052
+ * E-mail one-time-code login.
2053
+ *
2054
+ * Both routes are plain POSTs — deliberately not idempotency-keyed. A start
2055
+ * that is retried sends at most one more code, and a verify that is retried
2056
+ * meets a code that has already been burned and answers
2057
+ * `PORTAL_CODE_INVALID` — neither can duplicate anything.
2058
+ */
2059
+ declare class PortalLogin {
2060
+ private client;
2061
+ constructor(client: BaseClient);
2062
+ /**
2063
+ * E-mail a one-time code to the address.
2064
+ *
2065
+ * Always 202 `{ status: "sent" }` — enumeration-safe: `"sent"` does not
2066
+ * confirm that the address belongs to a contact. Rate-limited per address
2067
+ * and per caller (`429 RATE_LIMITED`).
2068
+ */
2069
+ start(input: PortalLoginStartInput): Promise<ApiResponse<PortalLoginStartResult>>;
2070
+ /**
2071
+ * Exchange the e-mailed code for a session.
2072
+ *
2073
+ * `session_token` is a bearer credential for ONE contact — keep it in an
2074
+ * HttpOnly cookie on the site's server. A wrong, burned or expired code all
2075
+ * answer `401 PORTAL_CODE_INVALID`; the three are not distinguished, so the
2076
+ * response is not an oracle for which codes exist.
2077
+ */
2078
+ verify(input: PortalVerifyInput): Promise<ApiResponse<PortalSession>>;
2079
+ }
2080
+ /**
2081
+ * Customer self-service portal. The session token is a bearer credential for a
2082
+ * single contact: the calling site server must keep it in an HttpOnly cookie
2083
+ * and never hand it to the browser. Session-bound methods send it as
2084
+ * `X-Portal-Session`; none of them carries an `Idempotency-Key`.
2085
+ *
2086
+ * The API key needs `read:portal` and `write:portal` (`403 FORBIDDEN`
2087
+ * otherwise). A missing header answers `401 PORTAL_SESSION_REQUIRED`; an
2088
+ * unknown, expired or revoked token answers `401 PORTAL_SESSION_INVALID` —
2089
+ * treat both as "sign in again".
2090
+ */
2091
+ declare class Portal {
2092
+ private client;
2093
+ /** E-mail one-time-code login: `start` sends the code, `verify` exchanges it. */
2094
+ readonly login: PortalLogin;
2095
+ constructor(client: BaseClient);
2096
+ /**
2097
+ * Revoke the session. Resolves to `undefined` (the route answers 204).
2098
+ *
2099
+ * Not keyed: revoking twice reaches the same state — the second call answers
2100
+ * `401 PORTAL_SESSION_INVALID`, which is the outcome you wanted anyway.
2101
+ */
2102
+ logout(session: string): Promise<void>;
2103
+ /** The signed-in contact's own profile. */
2104
+ me(session: string): Promise<ApiResponse<PortalProfile>>;
2105
+ /**
2106
+ * Update the signed-in contact's profile. Only the supplied fields change;
2107
+ * `phone: null` clears the number and `family` replaces the whole list.
2108
+ * `marketing_consent` records a `marketing_email` consent decision with
2109
+ * source `portal`. Returns the profile as it is after the change.
2110
+ */
2111
+ /**
2112
+ * A profile patch is not idempotency-keyed on the server and a `marketing_consent`
2113
+ * change records a dated consent event, so a retry after a committed-but-lost
2114
+ * response would repeat that event: sent exactly once, like the other writes.
2115
+ */
2116
+ updateMe(session: string, patch: PortalProfilePatch): Promise<ApiResponse<PortalProfile>>;
2117
+ /**
2118
+ * The contact's bookings split into `upcoming` and `past`. An upcoming
2119
+ * booking that is still inside the workspace's policy windows carries
2120
+ * `manage_token` and `can_manage: true`; use the token to open the site's
2121
+ * manage page (`medal.bookings.manage.*`).
2122
+ */
2123
+ myBookings(session: string): Promise<ApiResponse<PortalBookings>>;
2124
+ /**
2125
+ * Everything the workspace holds about the contact — profile, family,
2126
+ * consents and bookings — as one JSON document (GDPR Art. 15). Synchronous,
2127
+ * unlike `medal.gdpr.requestExport()`, which exports the whole workspace.
2128
+ *
2129
+ * Not keyed: a read-only snapshot, so a retried call costs nothing and
2130
+ * duplicates nothing.
2131
+ */
2132
+ exportMyData(session: string): Promise<ApiResponse<PortalExport>>;
2133
+ /**
2134
+ * Erase the contact (GDPR Art. 17). Resolves to `undefined` (the route
2135
+ * answers 204); the session is revoked as part of the deletion.
2136
+ *
2137
+ * Not keyed: deletion is terminal, so a retry meets a revoked session and
2138
+ * answers `401 PORTAL_SESSION_INVALID` rather than deleting anything else.
2139
+ */
2140
+ deleteMe(session: string): Promise<void>;
2141
+ }
2142
+
1735
2143
  /** A post in the workspace (list view). */
1736
2144
  interface Post {
1737
2145
  id: string;
@@ -2382,6 +2790,12 @@ interface MedalOptions {
2382
2790
  * to_ts: Date.now() + 7 * 86_400_000,
2383
2791
  * });
2384
2792
  *
2793
+ * // Customer portal — e-mail code login, then session-bound self-service.
2794
+ * // Keep `session_token` in an HttpOnly cookie on your server.
2795
+ * await medal.portal.login.start({ email: 'ida@example.com' });
2796
+ * const { data: session } = await medal.portal.login.verify({ email: 'ida@example.com', code: '123456' });
2797
+ * const { data: mine } = await medal.portal.myBookings(session.session_token);
2798
+ *
2385
2799
  * // Contacts, Deals, GDPR, Workspaces
2386
2800
  * const contacts = await medal.contacts.list({ status: 'lead' });
2387
2801
  * const { data: deal } = await medal.deals.create({ title: 'Acme', value: 50000 });
@@ -2398,6 +2812,7 @@ declare class Medal {
2398
2812
  readonly deals: Deals;
2399
2813
  readonly gdpr: Gdpr;
2400
2814
  readonly helpdesk: Helpdesk;
2815
+ readonly portal: Portal;
2401
2816
  readonly posts: Posts;
2402
2817
  readonly scan: Scan;
2403
2818
  readonly webhooks: Webhooks;
@@ -2408,4 +2823,4 @@ declare class Medal {
2408
2823
  /** Convenience factory — equivalent to `new Medal(apiKey, options)`. */
2409
2824
  declare function createMedalClient(apiKey: string, options?: MedalOptions): Medal;
2410
2825
 
2411
- export { type Activity, type AddNoteInput, type ApiResponse, type AutoConfirmContext, type AutoConfirmOptions, BaseClient, type BatchSendInput, type BatchSendResult, type BatchSendSummary, type Booking, type BookingActionResult, type BookingAvailabilityOptions, type BookingCancelledBy, type BookingClaimableCreatedVia, type BookingContactInput, type BookingCreateResult, type BookingCreatedVia, type BookingPaymentStatus, type BookingRescheduleResult, type BookingResource, type BookingResourceType, type BookingScheduleDay, type BookingScheduleOptions, type BookingService, type BookingSlot, type BookingStatus, type BookingTimestampInput, Bookings, type BookingsPage, type BookingsPagination, CAPABILITY_IDS, CAPABILITY_ROUTES, type CancelBookingInput, type CapabilityConfirmation, CapabilityConfirmations, CapabilityConfirmer, type CapabilityId, type CapabilityPathParamValue, type CapabilityRoute, type CapabilityWriteBodies, type CapabilityWriteRequest, type Channel, type ChannelConnectedEvent, type ChannelConnection, type ChannelConnectionDisconnectResult, type ChannelConnectionState, type ChannelDisconnectReason, type ChannelDisconnectedEvent, Channels, type ConnectLink, type ConnectLinkCreateResult, type ConnectLinkRevokeResult, type ConnectLinkStatus, type ConsentRecord, type ConsentResult, type ConsentType, type Contact, type ContactConsents, type ContactCreateResult, type ContactNoteResult, type ContactRemoveResult, type ContactStatus, type ContactUpdateResult, Contacts, type Conversation, type ConversationAssignedEvent, type ConversationCreatedEvent, type ConversationMessage, type ConversationStatus, type ConversationStatusChangedEvent, type ConversationUpdateResult, type CookieCategoryConsent, type CookieConsentInput, type CreateBookingInput, type CreateBookingItemInput, type CreateConnectLinkInput, type CreateContactInput, type CreateDealInput, type CreatePostInput, type CreateReplyInput, type CreateWebhookInput, type CreatedBooking, DEFAULT_WEBHOOK_TOLERANCE_MS, type Deal, type DealCreateResult, type DealRemoveResult, type DealStatus, type DealUpdateResult, Deals, type EmailSend, type EmailSendResult, type EmailStatus, type EmailTemplate, type EmailTemplateDetail, Emails, Gdpr, type GdprExport, type GetTemplateOptions, Helpdesk, type HelpdeskMessageType, type ImportContactInput, type ImportContactsResult, type IssueCapabilityConfirmationInput, type ListBookingServicesOptions, type ListBookingsOptions, type ListConnectLinksOptions, type ListContactsOptions, type ListConversationsOptions, type ListDealsOptions, type ListDeliveriesOptions, type ListPostsOptions, type ManageSummary, Medal, MedalApiError, type MedalOptions, type MessageAuthorType, type MessageDeliveryStatus, type MessageDeliveryUpdatedEvent, type MessageReceivedEvent, type MessageSentEvent, type PaginatedResponse, type PaginationOptions, type Post, type PostDetail, type PostType, type PostVariant, Posts, type PublishResult, type RecordConsentInput, type ReplyCreateResult, type RequestOptions, type RescheduleBookingInput, Scan, type ScanCompany, type ScanCreateInput, type ScanCreateResult, type ScanJob, type ScanResultPayload, type ScanStatus, type ScanSubScores, type SchedulePostInput, type ScheduleResult, type SendEmailInput, type TestPingEvent, type UpdateBookingInput, type UpdateContactInput, type UpdateConversationInput, type UpdateDealInput, type UpdatePostInput, type UpdateWebhookInput, type VerifyWebhookSignatureInput, type WaitForScanOptions, type WebhookChannelLifecycleData, type WebhookConversationSnapshot, type WebhookDeleteResult, type WebhookDelivery, type WebhookEndpoint, type WebhookEvent, type WebhookMessageSnapshot, type WebhookTestResult, WebhookVerificationError, type WebhookVerificationErrorCode, Webhooks, type Workspace, Workspaces, createMedalClient, Medal as default, verifyWebhookSignature };
2826
+ export { type Activity, type AddNoteInput, type ApiResponse, type AutoConfirmContext, type AutoConfirmOptions, BaseClient, type BatchSendInput, type BatchSendResult, type BatchSendSummary, type Booking, type BookingActionResult, type BookingAvailabilityOptions, type BookingCancelledBy, type BookingClaimableCreatedVia, type BookingContactInput, type BookingCreateResult, type BookingCreatedVia, type BookingEvent, type BookingEventStatus, type BookingEventTemplateKey, type BookingPaymentStatus, type BookingRescheduleResult, type BookingResource, type BookingResourceType, type BookingScheduleDay, type BookingScheduleOptions, type BookingService, type BookingSlot, type BookingStatus, type BookingTimestampInput, Bookings, type BookingsPage, type BookingsPagination, CAPABILITY_IDS, CAPABILITY_ROUTES, type CancelBookingInput, type CapabilityConfirmation, CapabilityConfirmations, CapabilityConfirmer, type CapabilityId, type CapabilityPathParamValue, type CapabilityRoute, type CapabilityWriteBodies, type CapabilityWriteRequest, type Channel, type ChannelConnectedEvent, type ChannelConnection, type ChannelConnectionDisconnectResult, type ChannelConnectionState, type ChannelDisconnectReason, type ChannelDisconnectedEvent, Channels, type ConnectLink, type ConnectLinkCreateResult, type ConnectLinkRevokeResult, type ConnectLinkStatus, type ConsentRecord, type ConsentResult, type ConsentType, type Contact, type ContactConsents, type ContactCreateResult, type ContactNoteResult, type ContactPerson, type ContactRelation, type ContactRelations, type ContactRemoveResult, type ContactStatus, type ContactUpdateResult, Contacts, type Conversation, type ConversationAssignedEvent, type ConversationCreatedEvent, type ConversationMessage, type ConversationStatus, type ConversationStatusChangedEvent, type ConversationUpdateResult, type CookieCategoryConsent, type CookieConsentInput, type CreateBookingEventInput, type CreateBookingInput, type CreateBookingItemInput, type CreateConnectLinkInput, type CreateContactInput, type CreateContactPersonInput, type CreateContactRelationInput, type CreateContactRelationResult, type CreateDealInput, type CreatePostInput, type CreateReplyInput, type CreateWebhookInput, type CreatedBooking, DEFAULT_WEBHOOK_TOLERANCE_MS, type Deal, type DealCreateResult, type DealRemoveResult, type DealStatus, type DealUpdateResult, Deals, type EmailSend, type EmailSendResult, type EmailStatus, type EmailTemplate, type EmailTemplateDetail, Emails, Gdpr, type GdprExport, type GetTemplateOptions, Helpdesk, type HelpdeskMessageType, type ImportContactInput, type ImportContactsResult, type IssueCapabilityConfirmationInput, type ListBookingEventsOptions, type ListBookingServicesOptions, type ListBookingsOptions, type ListConnectLinksOptions, type ListContactsOptions, type ListConversationsOptions, type ListDealsOptions, type ListDeliveriesOptions, type ListPostsOptions, type ManageSummary, Medal, MedalApiError, type MedalOptions, type MessageAuthorType, type MessageDeliveryStatus, type MessageDeliveryUpdatedEvent, type MessageReceivedEvent, type MessageSentEvent, type PaginatedResponse, type PaginationOptions, Portal, type PortalBooking, type PortalBookingStatus, type PortalBookings, type PortalConsentRecord, type PortalContactSummary, type PortalExport, type PortalExportRelation, type PortalFamilyMember, type PortalLabels, type PortalLoginStartInput, type PortalLoginStartResult, type PortalPerson, type PortalProfile, type PortalProfilePatch, type PortalSession, type PortalVerifyInput, type Post, type PostDetail, type PostType, type PostVariant, Posts, type PublishResult, type RecordConsentInput, type RelationType, type ReplyCreateResult, type RequestOptions, type RescheduleBookingInput, Scan, type ScanCompany, type ScanCreateInput, type ScanCreateResult, type ScanJob, type ScanResultPayload, type ScanStatus, type ScanSubScores, type SchedulePostInput, type ScheduleResult, type SendEmailInput, type TestPingEvent, type UpdateBookingInput, type UpdateContactInput, type UpdateConversationInput, type UpdateDealInput, type UpdatePostInput, type UpdateWebhookInput, type VerifyWebhookSignatureInput, type WaitForScanOptions, type WebhookChannelLifecycleData, type WebhookConversationSnapshot, type WebhookDeleteResult, type WebhookDelivery, type WebhookEndpoint, type WebhookEvent, type WebhookMessageSnapshot, type WebhookTestResult, WebhookVerificationError, type WebhookVerificationErrorCode, Webhooks, type Workspace, Workspaces, createMedalClient, Medal as default, verifyWebhookSignature };