@medalsocial/sdk 1.8.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.
@@ -414,6 +414,85 @@ interface paths {
414
414
  patch?: never;
415
415
  trace?: never;
416
416
  };
417
+ "/api/v1/bookings/persons": {
418
+ parameters: {
419
+ query?: never;
420
+ header?: never;
421
+ path?: never;
422
+ cookie?: never;
423
+ };
424
+ /**
425
+ * List a contact's persons
426
+ * @description Persons a contact books for — a child, a pet, an employee. No login of their own. Active-only unless `include_inactive` is set.
427
+ */
428
+ get: operations["listContactPersons"];
429
+ put?: never;
430
+ /** Add a person under a contact */
431
+ post: operations["createContactPerson"];
432
+ delete?: never;
433
+ options?: never;
434
+ head?: never;
435
+ patch?: never;
436
+ trace?: never;
437
+ };
438
+ "/api/v1/bookings/relations": {
439
+ parameters: {
440
+ query?: never;
441
+ header?: never;
442
+ path?: never;
443
+ cookie?: never;
444
+ };
445
+ /**
446
+ * List a contact's relations
447
+ * @description Directional relations a contact holds, split into outgoing and incoming.
448
+ */
449
+ get: operations["listContactRelations"];
450
+ put?: never;
451
+ /** Create a relation from one contact to another */
452
+ post: operations["createContactRelation"];
453
+ delete?: never;
454
+ options?: never;
455
+ head?: never;
456
+ patch?: never;
457
+ trace?: never;
458
+ };
459
+ "/api/v1/bookings/events": {
460
+ parameters: {
461
+ query?: never;
462
+ header?: never;
463
+ path?: never;
464
+ cookie?: never;
465
+ };
466
+ /** List arrangementer in a date range */
467
+ get: operations["listBookingEvents"];
468
+ put?: never;
469
+ /** Create an arrangement from a template */
470
+ post: operations["createBookingEvent"];
471
+ delete?: never;
472
+ options?: never;
473
+ head?: never;
474
+ patch?: never;
475
+ trace?: never;
476
+ };
477
+ "/api/v1/bookings/events/{id}": {
478
+ parameters: {
479
+ query?: never;
480
+ header?: never;
481
+ path: {
482
+ id: components["parameters"]["Id"];
483
+ };
484
+ cookie?: never;
485
+ };
486
+ /** Get an arrangement */
487
+ get: operations["getBookingEvent"];
488
+ put?: never;
489
+ post?: never;
490
+ delete?: never;
491
+ options?: never;
492
+ head?: never;
493
+ patch?: never;
494
+ trace?: never;
495
+ };
417
496
  "/api/v1/bookings/{id}": {
418
497
  parameters: {
419
498
  query?: never;
@@ -690,7 +769,7 @@ interface paths {
690
769
  put?: never;
691
770
  /**
692
771
  * Export everything held about the signed-in contact
693
- * @description A synchronous GDPR Art. 15 export of the contact's profile, family, consents and bookings, as one JSON document. Read-only, so not idempotency-keyed. Errors: `401 PORTAL_SESSION_REQUIRED`, `401 PORTAL_SESSION_INVALID`, `403 FORBIDDEN`, `429 RATE_LIMITED`.
772
+ * @description A synchronous GDPR Art. 15 export of the contact's profile, family, consents and bookings, as one JSON document. Unlike `GET /api/v1/portal/me`, `contact.persons` here includes inactive persons so the export is a complete dump. `relations` lists every relation the contact is a party to, exposing only the counterpart's display name. Read-only, so not idempotency-keyed. Errors: `401 PORTAL_SESSION_REQUIRED`, `401 PORTAL_SESSION_INVALID`, `403 FORBIDDEN`, `429 RATE_LIMITED`.
694
773
  */
695
774
  post: operations["exportPortalData"];
696
775
  delete?: never;
@@ -1603,6 +1682,12 @@ interface components {
1603
1682
  booked_for_name: string | null;
1604
1683
  /** @description A birth year, not a birthdate — the age bracket is all that is stored. */
1605
1684
  booked_for_birth_year: number | null;
1685
+ /** @description The ContactPerson this booking was made for, if any. */
1686
+ booked_for_person_id: string | null;
1687
+ /** @description The BookingEvent this booking is a registration for, if any. */
1688
+ event_id: string | null;
1689
+ /** @description Position of this booking within its event's registrations, if any. */
1690
+ event_order: number | null;
1606
1691
  /** @description Shared by every booking created in the same party request. */
1607
1692
  party_sequence_id: string | null;
1608
1693
  status: components["schemas"]["BookingStatus"];
@@ -1698,6 +1783,8 @@ interface components {
1698
1783
  start_ts: components["schemas"]["BookingTimestampInput"];
1699
1784
  booked_for_name?: string;
1700
1785
  booked_for_birth_year?: number;
1786
+ /** @description Book this line on behalf of a ContactPerson rather than the contact. */
1787
+ booked_for_person_id?: string;
1701
1788
  };
1702
1789
  CreateBookingInput: {
1703
1790
  /** @description A PARTY — one request books a whole family in one all-or-nothing transaction. */
@@ -2312,6 +2399,22 @@ interface components {
2312
2399
  name: string;
2313
2400
  birth_year: number;
2314
2401
  };
2402
+ /** @description A person the contact books for — a child, a pet — with no login of its own. */
2403
+ PortalPerson: {
2404
+ person_id: string;
2405
+ name: string;
2406
+ birth_year: number | null;
2407
+ relation_type: components["schemas"]["RelationType"];
2408
+ relation_label: string | null;
2409
+ notes: string | null;
2410
+ /** @description False for a person the customer removed or that was promoted to its own contact; `me` returns active persons only, the export returns all. */
2411
+ active: boolean;
2412
+ };
2413
+ /** @description The workspace's own words for the person concept, e.g. `"Barn"`. */
2414
+ PortalLabels: {
2415
+ person: string;
2416
+ persons: string;
2417
+ };
2315
2418
  PortalProfile: {
2316
2419
  contact_id: string;
2317
2420
  email: string;
@@ -2319,6 +2422,8 @@ interface components {
2319
2422
  last_name: string | null;
2320
2423
  phone: string | null;
2321
2424
  family: components["schemas"]["PortalFamilyMember"][];
2425
+ persons: components["schemas"]["PortalPerson"][];
2426
+ labels: components["schemas"]["PortalLabels"];
2322
2427
  marketing_consent: boolean;
2323
2428
  /** @description Unix timestamp in milliseconds. */
2324
2429
  created_at: number;
@@ -2366,6 +2471,17 @@ interface components {
2366
2471
  revoked_at: number | null;
2367
2472
  source: string;
2368
2473
  };
2474
+ /** @description A relation the exporting contact is a party to; only the counterpart's display name is exposed. */
2475
+ PortalExportRelation: {
2476
+ /** @enum {string} */
2477
+ direction: "outgoing" | "incoming";
2478
+ type: components["schemas"]["RelationType"];
2479
+ custom_label: string | null;
2480
+ /** @description Unix timestamp in milliseconds. */
2481
+ since: number | null;
2482
+ note: string | null;
2483
+ counterpart_name: string;
2484
+ };
2369
2485
  /** @description Everything the workspace holds about the signed-in contact (GDPR Art. 15). */
2370
2486
  PortalExport: {
2371
2487
  /** @description Unix timestamp in milliseconds. */
@@ -2374,6 +2490,7 @@ interface components {
2374
2490
  family: components["schemas"]["PortalFamilyMember"][];
2375
2491
  consents: components["schemas"]["PortalConsentRecord"][];
2376
2492
  bookings: components["schemas"]["PortalBooking"][];
2493
+ relations: components["schemas"]["PortalExportRelation"][];
2377
2494
  };
2378
2495
  Envelope_PortalLoginStartResult: {
2379
2496
  data: components["schemas"]["PortalLoginStartResult"];
@@ -2554,6 +2671,138 @@ interface components {
2554
2671
  Envelope_ChannelConnectionDisconnectResult: {
2555
2672
  data: components["schemas"]["ChannelConnectionDisconnectResult"];
2556
2673
  };
2674
+ /**
2675
+ * @description How a person or a relation relates to a contact.
2676
+ * @enum {string}
2677
+ */
2678
+ RelationType: "guardian" | "owner" | "employer" | "caregiver" | "partner" | "custom";
2679
+ /** @description A person a contact books for — a child, a pet, an employee. No login of their own. */
2680
+ ContactPerson: {
2681
+ person_id: string;
2682
+ contact_id: string;
2683
+ name: string;
2684
+ birth_year: number | null;
2685
+ relation_type: components["schemas"]["RelationType"];
2686
+ relation_label: string | null;
2687
+ notes: string | null;
2688
+ active: boolean;
2689
+ promoted_to_contact_id: string | null;
2690
+ /** Format: date-time */
2691
+ created_at: string;
2692
+ /** Format: date-time */
2693
+ updated_at: string;
2694
+ };
2695
+ CreateContactPersonInput: {
2696
+ contact_id: string;
2697
+ name: string;
2698
+ birth_year?: number;
2699
+ relation_type: components["schemas"]["RelationType"];
2700
+ relation_label?: string;
2701
+ notes?: string;
2702
+ };
2703
+ /** @description One directional relation between two contacts. */
2704
+ ContactRelation: {
2705
+ relation_id: string;
2706
+ from_contact_id: string;
2707
+ to_contact_id: string;
2708
+ type: components["schemas"]["RelationType"];
2709
+ custom_label: string | null;
2710
+ /** @description Unix timestamp in milliseconds. */
2711
+ since: number | null;
2712
+ note: string | null;
2713
+ /** @description Empty string when the counterpart contact no longer exists. */
2714
+ counterpart_name: string;
2715
+ /** Format: date-time */
2716
+ created_at: string;
2717
+ };
2718
+ /** @description Relations a contact holds, split by direction. */
2719
+ ContactRelations: {
2720
+ outgoing: components["schemas"]["ContactRelation"][];
2721
+ incoming: components["schemas"]["ContactRelation"][];
2722
+ };
2723
+ CreateContactRelationInput: {
2724
+ from_contact_id: string;
2725
+ to_contact_id: string;
2726
+ type: components["schemas"]["RelationType"];
2727
+ custom_label?: string;
2728
+ /** @description Unix timestamp in milliseconds. */
2729
+ since?: number;
2730
+ note?: string;
2731
+ };
2732
+ CreateContactRelationResult: {
2733
+ relation_id: string;
2734
+ };
2735
+ /** @enum {string} */
2736
+ BookingEventStatus: "draft" | "open" | "closed" | "completed" | "cancelled";
2737
+ /** @enum {string} */
2738
+ BookingEventTemplateKey: "kindergarten_visit" | "company_day" | "class" | "open_day" | "custom";
2739
+ /** @description An arrangement — a scheduled group session bookings register against. */
2740
+ BookingEvent: {
2741
+ event_id: string;
2742
+ template_id: string;
2743
+ host_id: string | null;
2744
+ /**
2745
+ * Format: date
2746
+ * @description yyyy-mm-dd in the workspace time zone.
2747
+ */
2748
+ date: string;
2749
+ window_start_minute: number;
2750
+ window_end_minute: number;
2751
+ /** @enum {string} */
2752
+ place: "at_host" | "in_house";
2753
+ capacity: number;
2754
+ minimum: number;
2755
+ registered_count: number;
2756
+ service_ids: string[];
2757
+ resource_ids: string[];
2758
+ price_override_ore: number | null;
2759
+ status: components["schemas"]["BookingEventStatus"];
2760
+ /** Format: date-time */
2761
+ registration_closes_at: string;
2762
+ slug: string;
2763
+ /** Format: date-time */
2764
+ created_at: string;
2765
+ /** Format: date-time */
2766
+ updated_at: string;
2767
+ };
2768
+ CreateBookingEventInput: {
2769
+ template_key: components["schemas"]["BookingEventTemplateKey"];
2770
+ host_id?: string;
2771
+ /** Format: date */
2772
+ date: string;
2773
+ window_start_minute: number;
2774
+ window_end_minute?: number;
2775
+ /** @enum {string} */
2776
+ place: "at_host" | "in_house";
2777
+ capacity?: number;
2778
+ minimum?: number;
2779
+ service_ids: string[];
2780
+ resource_ids: string[];
2781
+ };
2782
+ ApiResponse_ContactPersonArray: components["schemas"]["Envelope_ContactPersonArray"];
2783
+ ApiResponse_ContactPerson: components["schemas"]["Envelope_ContactPerson"];
2784
+ ApiResponse_ContactRelations: components["schemas"]["Envelope_ContactRelations"];
2785
+ ApiResponse_CreateContactRelationResult: components["schemas"]["Envelope_CreateContactRelationResult"];
2786
+ ApiResponse_BookingEventArray: components["schemas"]["Envelope_BookingEventArray"];
2787
+ ApiResponse_BookingEvent: components["schemas"]["Envelope_BookingEvent"];
2788
+ Envelope_ContactPersonArray: {
2789
+ data: components["schemas"]["ContactPerson"][];
2790
+ };
2791
+ Envelope_ContactPerson: {
2792
+ data: components["schemas"]["ContactPerson"];
2793
+ };
2794
+ Envelope_ContactRelations: {
2795
+ data: components["schemas"]["ContactRelations"];
2796
+ };
2797
+ Envelope_CreateContactRelationResult: {
2798
+ data: components["schemas"]["CreateContactRelationResult"];
2799
+ };
2800
+ Envelope_BookingEventArray: {
2801
+ data: components["schemas"]["BookingEvent"][];
2802
+ };
2803
+ Envelope_BookingEvent: {
2804
+ data: components["schemas"]["BookingEvent"];
2805
+ };
2557
2806
  };
2558
2807
  responses: {
2559
2808
  /** @description API error. */
@@ -3386,6 +3635,178 @@ interface operations {
3386
3635
  default: components["responses"]["ApiError"];
3387
3636
  };
3388
3637
  };
3638
+ listContactPersons: {
3639
+ parameters: {
3640
+ query: {
3641
+ contact_id: string;
3642
+ include_inactive?: boolean;
3643
+ };
3644
+ header?: never;
3645
+ path?: never;
3646
+ cookie?: never;
3647
+ };
3648
+ requestBody?: never;
3649
+ responses: {
3650
+ /** @description Contact persons. */
3651
+ 200: {
3652
+ headers: {
3653
+ [name: string]: unknown;
3654
+ };
3655
+ content: {
3656
+ "application/json": components["schemas"]["ApiResponse_ContactPersonArray"];
3657
+ };
3658
+ };
3659
+ default: components["responses"]["ApiError"];
3660
+ };
3661
+ };
3662
+ createContactPerson: {
3663
+ parameters: {
3664
+ query?: never;
3665
+ header?: never;
3666
+ path?: never;
3667
+ cookie?: never;
3668
+ };
3669
+ requestBody: {
3670
+ content: {
3671
+ "application/json": components["schemas"]["CreateContactPersonInput"];
3672
+ };
3673
+ };
3674
+ responses: {
3675
+ /** @description Created person. */
3676
+ 201: {
3677
+ headers: {
3678
+ [name: string]: unknown;
3679
+ };
3680
+ content: {
3681
+ "application/json": components["schemas"]["ApiResponse_ContactPerson"];
3682
+ };
3683
+ };
3684
+ default: components["responses"]["ApiError"];
3685
+ };
3686
+ };
3687
+ listContactRelations: {
3688
+ parameters: {
3689
+ query: {
3690
+ contact_id: string;
3691
+ };
3692
+ header?: never;
3693
+ path?: never;
3694
+ cookie?: never;
3695
+ };
3696
+ requestBody?: never;
3697
+ responses: {
3698
+ /** @description Outgoing and incoming relations. */
3699
+ 200: {
3700
+ headers: {
3701
+ [name: string]: unknown;
3702
+ };
3703
+ content: {
3704
+ "application/json": components["schemas"]["ApiResponse_ContactRelations"];
3705
+ };
3706
+ };
3707
+ default: components["responses"]["ApiError"];
3708
+ };
3709
+ };
3710
+ createContactRelation: {
3711
+ parameters: {
3712
+ query?: never;
3713
+ header?: never;
3714
+ path?: never;
3715
+ cookie?: never;
3716
+ };
3717
+ requestBody: {
3718
+ content: {
3719
+ "application/json": components["schemas"]["CreateContactRelationInput"];
3720
+ };
3721
+ };
3722
+ responses: {
3723
+ /** @description Created relation id. */
3724
+ 201: {
3725
+ headers: {
3726
+ [name: string]: unknown;
3727
+ };
3728
+ content: {
3729
+ "application/json": components["schemas"]["ApiResponse_CreateContactRelationResult"];
3730
+ };
3731
+ };
3732
+ default: components["responses"]["ApiError"];
3733
+ };
3734
+ };
3735
+ listBookingEvents: {
3736
+ parameters: {
3737
+ query: {
3738
+ /** @description Start of the window, `yyyy-mm-dd`, inclusive. */
3739
+ from: string;
3740
+ /** @description End of the window, `yyyy-mm-dd`, inclusive. */
3741
+ to: string;
3742
+ status?: components["schemas"]["BookingEventStatus"];
3743
+ };
3744
+ header?: never;
3745
+ path?: never;
3746
+ cookie?: never;
3747
+ };
3748
+ requestBody?: never;
3749
+ responses: {
3750
+ /** @description Arrangementer in the window. */
3751
+ 200: {
3752
+ headers: {
3753
+ [name: string]: unknown;
3754
+ };
3755
+ content: {
3756
+ "application/json": components["schemas"]["ApiResponse_BookingEventArray"];
3757
+ };
3758
+ };
3759
+ default: components["responses"]["ApiError"];
3760
+ };
3761
+ };
3762
+ createBookingEvent: {
3763
+ parameters: {
3764
+ query?: never;
3765
+ header?: never;
3766
+ path?: never;
3767
+ cookie?: never;
3768
+ };
3769
+ requestBody: {
3770
+ content: {
3771
+ "application/json": components["schemas"]["CreateBookingEventInput"];
3772
+ };
3773
+ };
3774
+ responses: {
3775
+ /** @description Created arrangement. */
3776
+ 201: {
3777
+ headers: {
3778
+ [name: string]: unknown;
3779
+ };
3780
+ content: {
3781
+ "application/json": components["schemas"]["ApiResponse_BookingEvent"];
3782
+ };
3783
+ };
3784
+ default: components["responses"]["ApiError"];
3785
+ };
3786
+ };
3787
+ getBookingEvent: {
3788
+ parameters: {
3789
+ query?: never;
3790
+ header?: never;
3791
+ path: {
3792
+ id: components["parameters"]["Id"];
3793
+ };
3794
+ cookie?: never;
3795
+ };
3796
+ requestBody?: never;
3797
+ responses: {
3798
+ /** @description Arrangement. */
3799
+ 200: {
3800
+ headers: {
3801
+ [name: string]: unknown;
3802
+ };
3803
+ content: {
3804
+ "application/json": components["schemas"]["ApiResponse_BookingEvent"];
3805
+ };
3806
+ };
3807
+ default: components["responses"]["ApiError"];
3808
+ };
3809
+ };
3389
3810
  getBooking: {
3390
3811
  parameters: {
3391
3812
  query?: never;