@blazeo.com/calendar-client 1.0.35 → 1.0.37

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.
package/dist/index.d.ts CHANGED
@@ -131,9 +131,25 @@ export const EventModel: {
131
131
  getCustomData(calendarId: string, eventId?: string): Promise<unknown>;
132
132
  setReminder(eventId: string): Promise<unknown>;
133
133
  setAttendeeStatus(eventId: string, attendeeStatus: number | string): Promise<unknown>;
134
+ setEventStatus(eventId: string, status: number | string): Promise<unknown>;
134
135
  create(snapshot: EventSnapshot | object, options?: { env?: object }): unknown;
135
136
  };
136
137
 
138
+ export type ExternalEventSnapshot = {
139
+ title?: string | null;
140
+ startDate?: string;
141
+ endDate?: string;
142
+ startHour?: number;
143
+ startMinute?: number;
144
+ endHour?: number;
145
+ endMinute?: number;
146
+ };
147
+
148
+ export const ExternalEventModel: {
149
+ getByParticipant(participantId: string, opts?: { offset?: number }): Promise<unknown[]>;
150
+ create(snapshot: ExternalEventSnapshot | object, options?: { env?: object }): unknown;
151
+ };
152
+
137
153
  export const AvailabilityModel: { create(snapshot: object, options?: { env?: object }): unknown };
138
154
  export const AvailabilityDetailModel: { create(snapshot: object, options?: { env?: object }): unknown };
139
155
  export const CalendarParticipantModel: {
@@ -272,15 +288,17 @@ export const LeadModel: {
272
288
  data?: { userId?: string; columns?: string[]; isDefault?: boolean };
273
289
  message?: string;
274
290
  }>;
291
+ /** Requires companyKey and at least one of email or phone. */
275
292
  createLead(payload: {
276
- email: string;
277
293
  companyKey: string;
278
- name?: string;
294
+ email?: string;
279
295
  phone?: string;
296
+ name?: string;
280
297
  source?: string;
281
298
  leadType?: 'sales' | 'service' | 'others' | number;
282
299
  referrerLink?: string;
283
- }): Promise<unknown>;
300
+ description?: string;
301
+ }): Promise<{ status: string; data?: unknown; message?: string } | null>;
284
302
  updateLead(payload: {
285
303
  leadId: string;
286
304
  email?: string;
@@ -290,6 +308,7 @@ export const LeadModel: {
290
308
  source?: string;
291
309
  leadType?: 'sales' | 'service' | 'others' | number;
292
310
  referrerLink?: string;
311
+ description?: string;
293
312
  }): Promise<unknown>;
294
313
  deleteLead(leadId: string): Promise<{ status: string; data?: unknown; message?: string }>;
295
314
  requestExport(
@@ -450,6 +469,7 @@ export function createRootStore(initialState?: object): unknown;
450
469
  export const Unit: Record<string, number>;
451
470
  export const AssignmentMethod: Record<string, number>;
452
471
  export const AttendeeStatus: Record<string, number>;
472
+ export const EventStatus: Record<string, number>;
453
473
  export const RecurringFrequency: Record<string, number>;
454
474
  export const DayOfWeek: Record<string, number>;
455
475
  export const LocationType: Record<string, number>;
package/dist/index.js CHANGED
@@ -39,6 +39,8 @@ __export(index_exports, {
39
39
  EmailProvider: () => EmailProvider,
40
40
  EventModel: () => Event_default,
41
41
  EventSource: () => EventSource,
42
+ EventStatus: () => EventStatus,
43
+ ExternalEventModel: () => ExternalEvent_default,
42
44
  FlowModel: () => Flow_default,
43
45
  LeadModel: () => Lead_default,
44
46
  LocationType: () => LocationType,
@@ -338,6 +340,12 @@ var AttendeeStatus = {
338
340
  NeedsAction: 4,
339
341
  Canceled: 5
340
342
  };
343
+ var EventStatus = {
344
+ Scheduled: 1,
345
+ ReScheduled: 2,
346
+ Completed: 3,
347
+ Canceled: 4
348
+ };
341
349
  var RecurringFrequency = {
342
350
  None: 0,
343
351
  Daily: 1,
@@ -488,6 +496,7 @@ var EventModel = import_mobx_state_tree4.types.model("Event", {
488
496
  flowId: import_mobx_state_tree4.types.optional(import_mobx_state_tree4.types.maybeNull(import_mobx_state_tree4.types.string), null),
489
497
  flowPath: import_mobx_state_tree4.types.optional(import_mobx_state_tree4.types.maybeNull(import_mobx_state_tree4.types.string), null),
490
498
  attendeeStatus: import_mobx_state_tree4.types.optional(import_mobx_state_tree4.types.number, AttendeeStatus.Tentative),
499
+ status: import_mobx_state_tree4.types.optional(import_mobx_state_tree4.types.maybeNull(import_mobx_state_tree4.types.number), null),
491
500
  rescheduleLink: import_mobx_state_tree4.types.optional(import_mobx_state_tree4.types.maybeNull(import_mobx_state_tree4.types.string), null),
492
501
  cancelLink: import_mobx_state_tree4.types.optional(import_mobx_state_tree4.types.maybeNull(import_mobx_state_tree4.types.string), null),
493
502
  timeZone: import_mobx_state_tree4.types.optional(import_mobx_state_tree4.types.maybeNull(import_mobx_state_tree4.types.string), null),
@@ -626,6 +635,18 @@ var EventModel = import_mobx_state_tree4.types.model("Event", {
626
635
  async setAttendeeStatus(status) {
627
636
  const statusName = typeof status === "number" ? Object.keys(AttendeeStatus).find((k) => AttendeeStatus[k] === status) ?? "None" : status;
628
637
  return reqGet(`/event/${encodeURIComponent(self.eventId)}/${encodeURIComponent(statusName)}`);
638
+ },
639
+ /** GET /event/status/update – update event lifecycle status */
640
+ async setEventStatus(status) {
641
+ const statusValue = typeof status === "number" ? status : EventStatus[status] ?? status;
642
+ const res = await reqGet("/event/status/update", {
643
+ event_id: self.eventId,
644
+ status: statusValue
645
+ });
646
+ if (res.status === "success" && res.data) {
647
+ (0, import_mobx_state_tree4.applySnapshot)(self, { ...mapEventFromApi(res.data), eventId: self.eventId });
648
+ }
649
+ return res;
629
650
  }
630
651
  };
631
652
  });
@@ -658,6 +679,7 @@ function mapEventFromApi(d) {
658
679
  flowId: pick2("flowId", "FlowId", "flow_id"),
659
680
  flowPath: pick2("flowPath", "FlowPath", "flow_path"),
660
681
  attendeeStatus: n(pick2("attendeeStatus", "AttendeeStatus", "attendee_status")),
682
+ status: n(pick2("status", "Status")),
661
683
  eventSource: n(pick2("eventSource", "EventSource", "event_source")),
662
684
  rescheduleLink: pick2("rescheduleLink", "RescheduleLink", "reschedule_link"),
663
685
  cancelLink: pick2("cancelLink", "CancelLink", "cancel_link"),
@@ -757,6 +779,7 @@ async function getByFiltersInternal(path, companyKey, opts = {}, dateRange = nul
757
779
  if (opts.title != null && opts.title !== "") query.title = opts.title;
758
780
  if (opts.search != null && opts.search !== "") query.search = opts.search;
759
781
  if (opts.attendeeStatus != null && opts.attendeeStatus !== "") query.attendee_status = opts.attendeeStatus;
782
+ if (opts.status != null && opts.status !== "") query.status = opts.status;
760
783
  if (opts.eventSource != null && opts.eventSource !== "") query.event_source = opts.eventSource;
761
784
  const sortBy = opts.sortBy ?? opts.sort ?? opts.sort_column;
762
785
  if (sortBy != null && sortBy !== "") query.sort = sortBy;
@@ -765,12 +788,17 @@ async function getByFiltersInternal(path, companyKey, opts = {}, dateRange = nul
765
788
  const u = String(sortOrderRaw).trim().toUpperCase();
766
789
  query.sort_dir = u.startsWith("DESC") ? "desc" : "asc";
767
790
  }
768
- if (opts.page != null) {
769
- query.page = opts.page;
770
- if (opts.page_size != null) query.page_size = opts.page_size;
791
+ const pageSize = opts.page_size ?? opts.pageSize;
792
+ const pageNum = opts.page != null ? Number(opts.page) : null;
793
+ const hasSkipTake = opts.skip != null || opts.take != null;
794
+ const usePageMode = pageNum != null && pageNum >= 1 && !hasSkipTake;
795
+ if (usePageMode) {
796
+ query.page = pageNum;
797
+ if (pageSize != null) query.page_size = pageSize;
771
798
  } else {
772
799
  if (opts.skip != null) query.skip = opts.skip;
773
- if (opts.take != null) query.take = opts.take;
800
+ const take = opts.take ?? (pageSize != null && !hasSkipTake ? pageSize : null);
801
+ if (take != null) query.take = take;
774
802
  }
775
803
  const res = await reqGet(path, query, { headers: { offset: String(offset) } });
776
804
  if (res.status !== "success") {
@@ -889,6 +917,11 @@ EventModel.setAttendeeStatus = async (eventId, attendeeStatus) => {
889
917
  const statusName = typeof attendeeStatus === "number" ? Object.keys(AttendeeStatus).find((k) => AttendeeStatus[k] === attendeeStatus) ?? "None" : attendeeStatus;
890
918
  return reqGet(`/event/${encodeURIComponent(eventId)}/${encodeURIComponent(statusName)}`);
891
919
  };
920
+ EventModel.setEventStatus = async (eventId, status) => {
921
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
922
+ const statusValue = typeof status === "number" ? status : EventStatus[status] ?? status;
923
+ return reqGet("/event/status/update", { event_id: eventId, status: statusValue });
924
+ };
892
925
  var Event_default = EventModel;
893
926
 
894
927
  // src/models/appointment/CalendarParticipant.js
@@ -1686,30 +1719,96 @@ var OpeningHourModel = import_mobx_state_tree12.types.model("OpeningHour", {
1686
1719
  });
1687
1720
  var OpeningHour_default = OpeningHourModel;
1688
1721
 
1689
- // src/models/appointment/Setting.js
1722
+ // src/models/appointment/ExternalEvent.js
1690
1723
  var import_mobx_state_tree13 = require("mobx-state-tree");
1691
- var SettingModel = import_mobx_state_tree13.types.model("Setting", {
1692
- id: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.maybeNull(import_mobx_state_tree13.types.number), null),
1693
- settingsId: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.string, ""),
1694
- calendarId: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.string, ""),
1695
- logo: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.maybeNull(import_mobx_state_tree13.types.string), null),
1696
- theme: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.maybeNull(import_mobx_state_tree13.types.string), null),
1697
- schedulingButtonText: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.maybeNull(import_mobx_state_tree13.types.string), null),
1698
- scheduledMessage: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.maybeNull(import_mobx_state_tree13.types.string), null)
1724
+ function getDefaultOffset2() {
1725
+ var _a;
1726
+ const cfg = getConfig();
1727
+ return ((_a = cfg == null ? void 0 : cfg.getDefaultOffset) == null ? void 0 : _a.call(cfg)) ?? -(/* @__PURE__ */ new Date()).getTimezoneOffset();
1728
+ }
1729
+ function pickStr(obj, ...keys) {
1730
+ for (const k of keys) {
1731
+ const v = obj[k];
1732
+ if (v != null && typeof v === "string") return v;
1733
+ }
1734
+ return void 0;
1735
+ }
1736
+ function pickNum(obj, ...keys) {
1737
+ for (const k of keys) {
1738
+ const v = obj[k];
1739
+ if (v != null) {
1740
+ const n = typeof v === "number" ? v : Number(v);
1741
+ if (!Number.isNaN(n)) return n;
1742
+ }
1743
+ }
1744
+ return void 0;
1745
+ }
1746
+ function toIsoDate(value) {
1747
+ if (value == null || value === "") return "";
1748
+ if (typeof value === "string") return value;
1749
+ if (value instanceof Date) return value.toISOString();
1750
+ return String(value);
1751
+ }
1752
+ var ExternalEventModel = import_mobx_state_tree13.types.model("ExternalEvent", {
1753
+ title: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.maybeNull(import_mobx_state_tree13.types.string), null),
1754
+ startDate: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.string, ""),
1755
+ endDate: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.string, ""),
1756
+ startHour: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.number, 0),
1757
+ startMinute: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.number, 0),
1758
+ endHour: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.number, 0),
1759
+ endMinute: import_mobx_state_tree13.types.optional(import_mobx_state_tree13.types.number, 0)
1760
+ });
1761
+ function mapApiRow(row) {
1762
+ return ExternalEventModel.create({
1763
+ title: pickStr(row, "title", "Title") ?? null,
1764
+ startDate: toIsoDate(row.startDate ?? row.StartDate),
1765
+ endDate: toIsoDate(row.endDate ?? row.EndDate),
1766
+ startHour: pickNum(row, "startHour", "StartHour") ?? 0,
1767
+ startMinute: pickNum(row, "startMinute", "StartMinute") ?? 0,
1768
+ endHour: pickNum(row, "endHour", "EndHour") ?? 0,
1769
+ endMinute: pickNum(row, "endMinute", "EndMinute") ?? 0
1770
+ });
1771
+ }
1772
+ ExternalEventModel.getByParticipant = async (participantId, opts = {}) => {
1773
+ if (!participantId) throw new Error("participantId required");
1774
+ const { req } = createRequestHelpersFromEnv(getConfig());
1775
+ const offset = opts.offset ?? getDefaultOffset2();
1776
+ const res = await req("/externalcalendar/events/get", {
1777
+ method: "GET",
1778
+ query: { participant_id: participantId },
1779
+ headers: { offset: String(offset) }
1780
+ });
1781
+ if (res.status === "success" && Array.isArray(res.data)) {
1782
+ return res.data.map(mapApiRow);
1783
+ }
1784
+ return [];
1785
+ };
1786
+ var ExternalEvent_default = ExternalEventModel;
1787
+
1788
+ // src/models/appointment/Setting.js
1789
+ var import_mobx_state_tree14 = require("mobx-state-tree");
1790
+ var SettingModel = import_mobx_state_tree14.types.model("Setting", {
1791
+ id: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.maybeNull(import_mobx_state_tree14.types.number), null),
1792
+ settingsId: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.string, ""),
1793
+ calendarId: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.string, ""),
1794
+ logo: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.maybeNull(import_mobx_state_tree14.types.string), null),
1795
+ theme: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.maybeNull(import_mobx_state_tree14.types.string), null),
1796
+ schedulingButtonText: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.maybeNull(import_mobx_state_tree14.types.string), null),
1797
+ scheduledMessage: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.maybeNull(import_mobx_state_tree14.types.string), null)
1699
1798
  }).actions((self) => {
1700
- const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree13.getEnv);
1799
+ const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree14.getEnv);
1701
1800
  return {
1702
1801
  /** GET setting/get – fetch setting for this calendar */
1703
1802
  async get() {
1704
1803
  const res = await reqGet("/setting/get", { calendar_id: self.calendarId });
1705
- if (res.status === "success" && res.data) (0, import_mobx_state_tree13.applySnapshot)(self, mapFromApi3(res.data));
1804
+ if (res.status === "success" && res.data) (0, import_mobx_state_tree14.applySnapshot)(self, mapFromApi3(res.data));
1706
1805
  return res;
1707
1806
  },
1708
1807
  /** POST setting/save – save this setting */
1709
1808
  async save() {
1710
1809
  const payload = toPayload2(self);
1711
1810
  const res = await reqPost("/setting/save", payload);
1712
- if (res.status === "success" && res.data) (0, import_mobx_state_tree13.applySnapshot)(self, mapFromApi3(res.data));
1811
+ if (res.status === "success" && res.data) (0, import_mobx_state_tree14.applySnapshot)(self, mapFromApi3(res.data));
1713
1812
  return res;
1714
1813
  },
1715
1814
  /** POST setting/logo/upload – upload logo file for this calendar */
@@ -1784,27 +1883,27 @@ SettingModel.uploadLogo = async (calendarId, file) => {
1784
1883
  var Setting_default = SettingModel;
1785
1884
 
1786
1885
  // src/models/appointment/Company.js
1787
- var import_mobx_state_tree14 = require("mobx-state-tree");
1788
- var CompanyModel = import_mobx_state_tree14.types.model("Company", {
1789
- id: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.maybeNull(import_mobx_state_tree14.types.number), null),
1790
- companyKey: import_mobx_state_tree14.types.identifier,
1791
- companyName: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.string, ""),
1792
- createdOn: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.maybeNull(import_mobx_state_tree14.types.string), null),
1793
- modifiedOn: import_mobx_state_tree14.types.optional(import_mobx_state_tree14.types.maybeNull(import_mobx_state_tree14.types.string), null)
1886
+ var import_mobx_state_tree15 = require("mobx-state-tree");
1887
+ var CompanyModel = import_mobx_state_tree15.types.model("Company", {
1888
+ id: import_mobx_state_tree15.types.optional(import_mobx_state_tree15.types.maybeNull(import_mobx_state_tree15.types.number), null),
1889
+ companyKey: import_mobx_state_tree15.types.identifier,
1890
+ companyName: import_mobx_state_tree15.types.optional(import_mobx_state_tree15.types.string, ""),
1891
+ createdOn: import_mobx_state_tree15.types.optional(import_mobx_state_tree15.types.maybeNull(import_mobx_state_tree15.types.string), null),
1892
+ modifiedOn: import_mobx_state_tree15.types.optional(import_mobx_state_tree15.types.maybeNull(import_mobx_state_tree15.types.string), null)
1794
1893
  }).actions((self) => {
1795
- const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree14.getEnv);
1894
+ const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree15.getEnv);
1796
1895
  return {
1797
1896
  /** GET Company/Get – fetch this company */
1798
1897
  async get() {
1799
1898
  const res = await reqGet("/Company/Get", { company_key: self.companyKey });
1800
- if (res.status === "success" && res.data) (0, import_mobx_state_tree14.applySnapshot)(self, mapFromApi4(res.data));
1899
+ if (res.status === "success" && res.data) (0, import_mobx_state_tree15.applySnapshot)(self, mapFromApi4(res.data));
1801
1900
  return res;
1802
1901
  },
1803
1902
  /** POST Company/Save – save this company */
1804
1903
  async save() {
1805
1904
  const payload = toPayload3(self);
1806
1905
  const res = await reqPost("/Company/Save", payload);
1807
- if (res.status === "success" && res.data) (0, import_mobx_state_tree14.applySnapshot)(self, mapFromApi4(res.data));
1906
+ if (res.status === "success" && res.data) (0, import_mobx_state_tree15.applySnapshot)(self, mapFromApi4(res.data));
1808
1907
  return res;
1809
1908
  }
1810
1909
  };
@@ -1852,13 +1951,13 @@ CompanyModel.save = async (payload) => {
1852
1951
  var Company_default = CompanyModel;
1853
1952
 
1854
1953
  // src/models/appointment/Asset.js
1855
- var import_mobx_state_tree15 = require("mobx-state-tree");
1856
- var AssetModel = import_mobx_state_tree15.types.model("Asset", {
1857
- url: import_mobx_state_tree15.types.optional(import_mobx_state_tree15.types.maybeNull(import_mobx_state_tree15.types.string), null),
1858
- blobPath: import_mobx_state_tree15.types.optional(import_mobx_state_tree15.types.maybeNull(import_mobx_state_tree15.types.string), null),
1859
- category: import_mobx_state_tree15.types.optional(import_mobx_state_tree15.types.maybeNull(import_mobx_state_tree15.types.string), null),
1860
- contentType: import_mobx_state_tree15.types.optional(import_mobx_state_tree15.types.maybeNull(import_mobx_state_tree15.types.string), null),
1861
- size: import_mobx_state_tree15.types.optional(import_mobx_state_tree15.types.maybeNull(import_mobx_state_tree15.types.number), null)
1954
+ var import_mobx_state_tree16 = require("mobx-state-tree");
1955
+ var AssetModel = import_mobx_state_tree16.types.model("Asset", {
1956
+ url: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.string), null),
1957
+ blobPath: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.string), null),
1958
+ category: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.string), null),
1959
+ contentType: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.string), null),
1960
+ size: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.number), null)
1862
1961
  }).actions((self) => ({
1863
1962
  /** POST /asset/upload – upload file using model category. */
1864
1963
  async upload(file, opts = {}) {
@@ -1932,7 +2031,7 @@ AssetModel.upload = async (file, opts = {}) => {
1932
2031
  var Asset_default = AssetModel;
1933
2032
 
1934
2033
  // src/models/appointment/CalendarLocation.js
1935
- var import_mobx_state_tree16 = require("mobx-state-tree");
2034
+ var import_mobx_state_tree17 = require("mobx-state-tree");
1936
2035
  function mapCalendarLocationFromApi(d) {
1937
2036
  if (!d) return d;
1938
2037
  const pick2 = (...keys) => keys.reduce((v, k) => v ?? d[k], void 0);
@@ -1962,19 +2061,19 @@ function toPayload4(self) {
1962
2061
  sortOrder: self.sortOrder
1963
2062
  };
1964
2063
  }
1965
- var CalendarLocationModel = import_mobx_state_tree16.types.model("CalendarLocation", {
1966
- id: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.number), null),
1967
- calendarLocationId: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.string), null),
1968
- calendarId: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.string), null),
1969
- locationType: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.number, LocationType.Physical),
1970
- name: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.string, ""),
1971
- value: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.string, ""),
1972
- isDefault: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.boolean, false),
1973
- sortOrder: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.number, 0),
1974
- createdOn: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.string), null),
1975
- modifiedOn: import_mobx_state_tree16.types.optional(import_mobx_state_tree16.types.maybeNull(import_mobx_state_tree16.types.string), null)
2064
+ var CalendarLocationModel = import_mobx_state_tree17.types.model("CalendarLocation", {
2065
+ id: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.maybeNull(import_mobx_state_tree17.types.number), null),
2066
+ calendarLocationId: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.maybeNull(import_mobx_state_tree17.types.string), null),
2067
+ calendarId: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.maybeNull(import_mobx_state_tree17.types.string), null),
2068
+ locationType: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.number, LocationType.Physical),
2069
+ name: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.string, ""),
2070
+ value: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.string, ""),
2071
+ isDefault: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.boolean, false),
2072
+ sortOrder: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.number, 0),
2073
+ createdOn: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.maybeNull(import_mobx_state_tree17.types.string), null),
2074
+ modifiedOn: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.maybeNull(import_mobx_state_tree17.types.string), null)
1976
2075
  }).actions((self) => {
1977
- const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree16.getEnv);
2076
+ const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree17.getEnv);
1978
2077
  return {
1979
2078
  /** GET Calendar/Location/Get – list locations by calendar id */
1980
2079
  async getByCalendar(calendarId) {
@@ -1992,7 +2091,7 @@ var CalendarLocationModel = import_mobx_state_tree16.types.model("CalendarLocati
1992
2091
  async save() {
1993
2092
  const res = await reqPost("/Calendar/Location/Save", toPayload4(self));
1994
2093
  if (res.status === "success" && res.data) {
1995
- (0, import_mobx_state_tree16.applySnapshot)(self, mapCalendarLocationFromApi(res.data));
2094
+ (0, import_mobx_state_tree17.applySnapshot)(self, mapCalendarLocationFromApi(res.data));
1996
2095
  }
1997
2096
  return res;
1998
2097
  },
@@ -2054,7 +2153,7 @@ CalendarLocationModel.setDefault = async (calendarId, calendarLocationId) => {
2054
2153
  var CalendarLocation_default = CalendarLocationModel;
2055
2154
 
2056
2155
  // src/models/appointment/Preference.js
2057
- var import_mobx_state_tree17 = require("mobx-state-tree");
2156
+ var import_mobx_state_tree18 = require("mobx-state-tree");
2058
2157
  var PreferenceScope = {
2059
2158
  Global: 0,
2060
2159
  Consumer: 1,
@@ -2065,13 +2164,13 @@ var PreferenceScope = {
2065
2164
  User: 6
2066
2165
  };
2067
2166
  var SCOPE_NAMES = ["Global", "Consumer", "Company", "Calendar", "Event", "Participant", "User"];
2068
- var PreferenceModel = import_mobx_state_tree17.types.model("Preference", {
2069
- id: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.maybeNull(import_mobx_state_tree17.types.number), null),
2070
- preferenceId: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.maybeNull(import_mobx_state_tree17.types.string), null),
2071
- level: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.number, 0),
2072
- primaryKey: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.string, ""),
2073
- preferenceOption: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.string, ""),
2074
- optionsJson: import_mobx_state_tree17.types.optional(import_mobx_state_tree17.types.maybeNull(import_mobx_state_tree17.types.string), null)
2167
+ var PreferenceModel = import_mobx_state_tree18.types.model("Preference", {
2168
+ id: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.number), null),
2169
+ preferenceId: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.string), null),
2170
+ level: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.number, 0),
2171
+ primaryKey: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.string, ""),
2172
+ preferenceOption: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.string, ""),
2173
+ optionsJson: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.string), null)
2075
2174
  }).actions((self) => ({
2076
2175
  /** POST /preference/{scope}/{key}/{option} – save this preference to the API. */
2077
2176
  async save() {
@@ -2119,7 +2218,7 @@ PreferenceModel.delete = async (preferenceId) => {
2119
2218
  var Preference_default = PreferenceModel;
2120
2219
 
2121
2220
  // src/models/appointment/Flow.js
2122
- var import_mobx_state_tree18 = require("mobx-state-tree");
2221
+ var import_mobx_state_tree19 = require("mobx-state-tree");
2123
2222
  function mapFlowFromApi(d) {
2124
2223
  if (!d) return d;
2125
2224
  const pick2 = (...keys) => keys.reduce((v, k) => v ?? d[k], void 0);
@@ -2138,27 +2237,27 @@ function mapFlowFromApi(d) {
2138
2237
  modifiedOn: pick2("modifiedOn", "ModifiedOn", "modified_on") ?? null
2139
2238
  };
2140
2239
  }
2141
- var FlowModel = import_mobx_state_tree18.types.model("Flow", {
2142
- id: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.number), null),
2143
- flowId: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.identifier, "new"),
2144
- companyKey: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.string), null),
2145
- calendarId: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.string), null),
2146
- name: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.string), null),
2147
- description: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.string), null),
2148
- flowJson: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.string, ""),
2149
- isActive: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.boolean, true),
2150
- isDeleted: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.boolean, false),
2151
- createdOn: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.string), null),
2152
- modifiedOn: import_mobx_state_tree18.types.optional(import_mobx_state_tree18.types.maybeNull(import_mobx_state_tree18.types.string), null)
2240
+ var FlowModel = import_mobx_state_tree19.types.model("Flow", {
2241
+ id: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.number), null),
2242
+ flowId: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.identifier, "new"),
2243
+ companyKey: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.string), null),
2244
+ calendarId: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.string), null),
2245
+ name: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.string), null),
2246
+ description: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.string), null),
2247
+ flowJson: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.string, ""),
2248
+ isActive: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.boolean, true),
2249
+ isDeleted: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.boolean, false),
2250
+ createdOn: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.string), null),
2251
+ modifiedOn: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.string), null)
2153
2252
  }).actions((self) => {
2154
- const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree18.getEnv);
2253
+ const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree19.getEnv);
2155
2254
  return {
2156
2255
  /** GET flow/get – fetch this flow by flowId */
2157
2256
  async get() {
2158
2257
  if (!self.flowId || self.flowId === "new") return { status: "failure", message: "flowId required" };
2159
2258
  const res = await reqGet("/flow/get", { flow_id: self.flowId });
2160
2259
  if (res.status === "success" && res.data) {
2161
- (0, import_mobx_state_tree18.applySnapshot)(self, mapFlowFromApi(res.data));
2260
+ (0, import_mobx_state_tree19.applySnapshot)(self, mapFlowFromApi(res.data));
2162
2261
  }
2163
2262
  return res;
2164
2263
  },
@@ -2174,7 +2273,7 @@ var FlowModel = import_mobx_state_tree18.types.model("Flow", {
2174
2273
  };
2175
2274
  const res = await reqPost("/flow/create", payload);
2176
2275
  if (res.status === "success" && res.data) {
2177
- (0, import_mobx_state_tree18.applySnapshot)(self, mapFlowFromApi(res.data));
2276
+ (0, import_mobx_state_tree19.applySnapshot)(self, mapFlowFromApi(res.data));
2178
2277
  }
2179
2278
  return res;
2180
2279
  },
@@ -2191,7 +2290,7 @@ var FlowModel = import_mobx_state_tree18.types.model("Flow", {
2191
2290
  };
2192
2291
  const res = await reqPost("/flow/update", payload);
2193
2292
  if (res.status === "success" && res.data) {
2194
- (0, import_mobx_state_tree18.applySnapshot)(self, mapFlowFromApi(res.data));
2293
+ (0, import_mobx_state_tree19.applySnapshot)(self, mapFlowFromApi(res.data));
2195
2294
  }
2196
2295
  return res;
2197
2296
  },
@@ -2205,7 +2304,7 @@ var FlowModel = import_mobx_state_tree18.types.model("Flow", {
2205
2304
  if (!self.flowId || self.flowId === "new") return { status: "failure", message: "flowId required" };
2206
2305
  const res = await reqPost("/flow/duplicate", { flow_id: self.flowId, new_name: newName ?? void 0 });
2207
2306
  if (res.status === "success" && res.data) {
2208
- (0, import_mobx_state_tree18.applySnapshot)(self, mapFlowFromApi(res.data));
2307
+ (0, import_mobx_state_tree19.applySnapshot)(self, mapFlowFromApi(res.data));
2209
2308
  }
2210
2309
  return res;
2211
2310
  },
@@ -2382,7 +2481,20 @@ FlowModel.getPreview = async (flowId) => {
2382
2481
  var Flow_default = FlowModel;
2383
2482
 
2384
2483
  // src/models/appointment/Lead.js
2385
- var import_mobx_state_tree19 = require("mobx-state-tree");
2484
+ var import_mobx_state_tree20 = require("mobx-state-tree");
2485
+ function pickLeadCreateContact(payload) {
2486
+ const p = payload ?? {};
2487
+ const email = String(p.email ?? p.Email ?? "").trim();
2488
+ const phone = String(p.phone ?? p.Phone ?? "").trim();
2489
+ const companyKey = String(p.companyKey ?? p.company_key ?? p.CompanyKey ?? "").trim();
2490
+ return { email, phone, companyKey };
2491
+ }
2492
+ function validateLeadCreatePayload(payload) {
2493
+ const { email, phone, companyKey } = pickLeadCreateContact(payload);
2494
+ if (!companyKey) return { ok: false, message: "companyKey is required" };
2495
+ if (!email && !phone) return { ok: false, message: "email or phone is required" };
2496
+ return { ok: true };
2497
+ }
2386
2498
  function mapLeadFromApi(d) {
2387
2499
  if (!d) return d;
2388
2500
  const pick2 = (...keys) => keys.reduce((v, k) => v ?? d[k], void 0);
@@ -2407,31 +2519,33 @@ function mapLeadFromApi(d) {
2407
2519
  source: pick2("source", "Source") ?? "",
2408
2520
  leadType,
2409
2521
  referrerLink: pick2("referrerLink", "ReferrerLink", "referrer_link") ?? "",
2522
+ description: pick2("description", "Description") ?? "",
2410
2523
  createdOn: pick2("createdOn", "CreatedOn", "created_on") ?? null,
2411
2524
  modifiedOn: pick2("modifiedOn", "ModifiedOn", "modified_on") ?? null
2412
2525
  };
2413
2526
  }
2414
- var LeadModel = import_mobx_state_tree19.types.model("Lead", {
2415
- id: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.number), null),
2416
- leadId: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.identifier, "new"),
2417
- email: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.string, ""),
2418
- name: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.string, ""),
2419
- phone: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.string, ""),
2420
- companyKey: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.string, ""),
2421
- source: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.string, ""),
2422
- leadType: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.number, 2),
2423
- referrerLink: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.string, ""),
2424
- createdOn: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.string), null),
2425
- modifiedOn: import_mobx_state_tree19.types.optional(import_mobx_state_tree19.types.maybeNull(import_mobx_state_tree19.types.string), null)
2527
+ var LeadModel = import_mobx_state_tree20.types.model("Lead", {
2528
+ id: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.maybeNull(import_mobx_state_tree20.types.number), null),
2529
+ leadId: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.identifier, "new"),
2530
+ email: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.string, ""),
2531
+ name: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.string, ""),
2532
+ phone: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.string, ""),
2533
+ companyKey: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.string, ""),
2534
+ source: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.string, ""),
2535
+ leadType: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.number, 2),
2536
+ referrerLink: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.string, ""),
2537
+ description: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.string, ""),
2538
+ createdOn: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.maybeNull(import_mobx_state_tree20.types.string), null),
2539
+ modifiedOn: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.maybeNull(import_mobx_state_tree20.types.string), null)
2426
2540
  }).actions((self) => {
2427
- const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree19.getEnv);
2541
+ const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree20.getEnv);
2428
2542
  return {
2429
2543
  /** GET /lead/get – fetch this lead by leadId */
2430
2544
  async get() {
2431
2545
  if (!self.leadId || self.leadId === "new") return { status: "failure", message: "leadId required" };
2432
2546
  const res = await reqGet("/lead/get", { lead_id: self.leadId });
2433
2547
  if (res.status === "success" && res.data) {
2434
- (0, import_mobx_state_tree19.applySnapshot)(self, mapLeadFromApi(res.data));
2548
+ (0, import_mobx_state_tree20.applySnapshot)(self, mapLeadFromApi(res.data));
2435
2549
  }
2436
2550
  return res;
2437
2551
  },
@@ -2442,7 +2556,7 @@ var LeadModel = import_mobx_state_tree19.types.model("Lead", {
2442
2556
  }
2443
2557
  const lead = await LeadModel.getByEmail(self.email, self.companyKey);
2444
2558
  if (lead) {
2445
- (0, import_mobx_state_tree19.applySnapshot)(self, (0, import_mobx_state_tree19.getSnapshot)(lead));
2559
+ (0, import_mobx_state_tree20.applySnapshot)(self, (0, import_mobx_state_tree20.getSnapshot)(lead));
2446
2560
  }
2447
2561
  return { status: lead ? "success" : "failure", data: lead ?? void 0 };
2448
2562
  },
@@ -2453,7 +2567,7 @@ var LeadModel = import_mobx_state_tree19.types.model("Lead", {
2453
2567
  }
2454
2568
  const lead = await LeadModel.getByPhone(self.phone, self.companyKey);
2455
2569
  if (lead) {
2456
- (0, import_mobx_state_tree19.applySnapshot)(self, (0, import_mobx_state_tree19.getSnapshot)(lead));
2570
+ (0, import_mobx_state_tree20.applySnapshot)(self, (0, import_mobx_state_tree20.getSnapshot)(lead));
2457
2571
  }
2458
2572
  return { status: lead ? "success" : "failure", data: lead ?? void 0 };
2459
2573
  },
@@ -2470,8 +2584,14 @@ var LeadModel = import_mobx_state_tree19.types.model("Lead", {
2470
2584
  async getColumnSelection(userId) {
2471
2585
  return LeadModel.getColumnSelection(userId);
2472
2586
  },
2473
- /** POST /lead/create – create this lead */
2587
+ /** POST /lead/create – create this lead (requires companyKey and email or phone) */
2474
2588
  async createLead() {
2589
+ const validation = validateLeadCreatePayload({
2590
+ email: self.email,
2591
+ phone: self.phone,
2592
+ companyKey: self.companyKey
2593
+ });
2594
+ if (!validation.ok) return { status: "failure", message: validation.message };
2475
2595
  const payload = {
2476
2596
  email: self.email,
2477
2597
  name: self.name,
@@ -2479,11 +2599,12 @@ var LeadModel = import_mobx_state_tree19.types.model("Lead", {
2479
2599
  companyKey: self.companyKey,
2480
2600
  source: self.source,
2481
2601
  leadType: self.leadType,
2482
- referrerLink: self.referrerLink
2602
+ referrerLink: self.referrerLink,
2603
+ description: self.description
2483
2604
  };
2484
2605
  const res = await reqPost("/lead/create", payload);
2485
2606
  if (res.status === "success" && res.data) {
2486
- (0, import_mobx_state_tree19.applySnapshot)(self, mapLeadFromApi(res.data));
2607
+ (0, import_mobx_state_tree20.applySnapshot)(self, mapLeadFromApi(res.data));
2487
2608
  }
2488
2609
  return res;
2489
2610
  },
@@ -2500,11 +2621,12 @@ var LeadModel = import_mobx_state_tree19.types.model("Lead", {
2500
2621
  companyKey: self.companyKey,
2501
2622
  source: self.source,
2502
2623
  leadType: self.leadType,
2503
- referrerLink: self.referrerLink
2624
+ referrerLink: self.referrerLink,
2625
+ description: self.description
2504
2626
  };
2505
2627
  const res = await reqPost("/lead/update", payload);
2506
2628
  if (res.status === "success" && res.data) {
2507
- (0, import_mobx_state_tree19.applySnapshot)(self, mapLeadFromApi(res.data));
2629
+ (0, import_mobx_state_tree20.applySnapshot)(self, mapLeadFromApi(res.data));
2508
2630
  }
2509
2631
  return res;
2510
2632
  },
@@ -2568,6 +2690,7 @@ LeadModel.allowedColumns = [
2568
2690
  "source",
2569
2691
  "lead_type",
2570
2692
  "referrer_link",
2693
+ "description",
2571
2694
  "created_on",
2572
2695
  "modified_on"
2573
2696
  ];
@@ -2621,6 +2744,8 @@ LeadModel.getByCompany = async (companyKey, opts = {}) => {
2621
2744
  return null;
2622
2745
  };
2623
2746
  LeadModel.createLead = async (payload) => {
2747
+ const validation = validateLeadCreatePayload(payload);
2748
+ if (!validation.ok) return { status: "failure", message: validation.message };
2624
2749
  const { reqPost } = createRequestHelpersFromEnv(getConfig());
2625
2750
  const res = await reqPost("/lead/create", payload);
2626
2751
  if (res.status === "success" && res.data) {
@@ -2676,19 +2801,19 @@ LeadModel.getSources = async (companyKey) => {
2676
2801
  var Lead_default = LeadModel;
2677
2802
 
2678
2803
  // src/models/appointment/CustomField.js
2679
- var import_mobx_state_tree20 = require("mobx-state-tree");
2680
- var CustomFieldModel = import_mobx_state_tree20.types.model("CustomField", {
2681
- id: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.maybeNull(import_mobx_state_tree20.types.number), null),
2682
- customFieldId: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.maybeNull(import_mobx_state_tree20.types.string), null),
2683
- calendarId: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.maybeNull(import_mobx_state_tree20.types.string), null),
2684
- label: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.maybeNull(import_mobx_state_tree20.types.string), null),
2685
- type: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.string, ""),
2686
- isRequired: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.boolean, false),
2687
- createdOn: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.maybeNull(import_mobx_state_tree20.types.string), null),
2688
- modifiedOn: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.maybeNull(import_mobx_state_tree20.types.string), null),
2689
- isDeleted: import_mobx_state_tree20.types.optional(import_mobx_state_tree20.types.boolean, false)
2804
+ var import_mobx_state_tree21 = require("mobx-state-tree");
2805
+ var CustomFieldModel = import_mobx_state_tree21.types.model("CustomField", {
2806
+ id: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.maybeNull(import_mobx_state_tree21.types.number), null),
2807
+ customFieldId: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.maybeNull(import_mobx_state_tree21.types.string), null),
2808
+ calendarId: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.maybeNull(import_mobx_state_tree21.types.string), null),
2809
+ label: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.maybeNull(import_mobx_state_tree21.types.string), null),
2810
+ type: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.string, ""),
2811
+ isRequired: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.boolean, false),
2812
+ createdOn: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.maybeNull(import_mobx_state_tree21.types.string), null),
2813
+ modifiedOn: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.maybeNull(import_mobx_state_tree21.types.string), null),
2814
+ isDeleted: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.boolean, false)
2690
2815
  }).actions((self) => {
2691
- const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree20.getEnv);
2816
+ const { reqGet, reqPost } = createRequestHelpers(self, import_mobx_state_tree21.getEnv);
2692
2817
  return {
2693
2818
  /** GET /CustomField/GetAll?calendar_id= */
2694
2819
  async getAll(calendarId) {
@@ -2709,7 +2834,7 @@ var CustomFieldModel = import_mobx_state_tree20.types.model("CustomField", {
2709
2834
  const body = payload ?? toPayload5(self);
2710
2835
  const res = await reqPost("/CustomField/Add", body);
2711
2836
  if (res.status === "success" && res.data) {
2712
- (0, import_mobx_state_tree20.applySnapshot)(self, mapCustomFieldFromApi(res.data));
2837
+ (0, import_mobx_state_tree21.applySnapshot)(self, mapCustomFieldFromApi(res.data));
2713
2838
  }
2714
2839
  return res;
2715
2840
  },
@@ -3016,10 +3141,10 @@ var AuthModel = {
3016
3141
  var Auth_default = AuthModel;
3017
3142
 
3018
3143
  // src/models/appointment/index.js
3019
- var import_mobx_state_tree21 = require("mobx-state-tree");
3020
- var RootStore = import_mobx_state_tree21.types.model("RootStore", {
3021
- calendars: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.map(Calendar_default), {}),
3022
- events: import_mobx_state_tree21.types.optional(import_mobx_state_tree21.types.map(Event_default), {})
3144
+ var import_mobx_state_tree22 = require("mobx-state-tree");
3145
+ var RootStore = import_mobx_state_tree22.types.model("RootStore", {
3146
+ calendars: import_mobx_state_tree22.types.optional(import_mobx_state_tree22.types.map(Calendar_default), {}),
3147
+ events: import_mobx_state_tree22.types.optional(import_mobx_state_tree22.types.map(Event_default), {})
3023
3148
  }).actions((self) => ({
3024
3149
  addCalendar(snapshot) {
3025
3150
  const cal = Calendar_default.create(snapshot);
@@ -3059,6 +3184,8 @@ function createRootStore(initialState = {}) {
3059
3184
  EmailProvider,
3060
3185
  EventModel,
3061
3186
  EventSource,
3187
+ EventStatus,
3188
+ ExternalEventModel,
3062
3189
  FlowModel,
3063
3190
  LeadModel,
3064
3191
  LocationType,
package/dist/index.mjs CHANGED
@@ -266,6 +266,12 @@ var AttendeeStatus = {
266
266
  NeedsAction: 4,
267
267
  Canceled: 5
268
268
  };
269
+ var EventStatus = {
270
+ Scheduled: 1,
271
+ ReScheduled: 2,
272
+ Completed: 3,
273
+ Canceled: 4
274
+ };
269
275
  var RecurringFrequency = {
270
276
  None: 0,
271
277
  Daily: 1,
@@ -416,6 +422,7 @@ var EventModel = types4.model("Event", {
416
422
  flowId: types4.optional(types4.maybeNull(types4.string), null),
417
423
  flowPath: types4.optional(types4.maybeNull(types4.string), null),
418
424
  attendeeStatus: types4.optional(types4.number, AttendeeStatus.Tentative),
425
+ status: types4.optional(types4.maybeNull(types4.number), null),
419
426
  rescheduleLink: types4.optional(types4.maybeNull(types4.string), null),
420
427
  cancelLink: types4.optional(types4.maybeNull(types4.string), null),
421
428
  timeZone: types4.optional(types4.maybeNull(types4.string), null),
@@ -554,6 +561,18 @@ var EventModel = types4.model("Event", {
554
561
  async setAttendeeStatus(status) {
555
562
  const statusName = typeof status === "number" ? Object.keys(AttendeeStatus).find((k) => AttendeeStatus[k] === status) ?? "None" : status;
556
563
  return reqGet(`/event/${encodeURIComponent(self.eventId)}/${encodeURIComponent(statusName)}`);
564
+ },
565
+ /** GET /event/status/update – update event lifecycle status */
566
+ async setEventStatus(status) {
567
+ const statusValue = typeof status === "number" ? status : EventStatus[status] ?? status;
568
+ const res = await reqGet("/event/status/update", {
569
+ event_id: self.eventId,
570
+ status: statusValue
571
+ });
572
+ if (res.status === "success" && res.data) {
573
+ applySnapshot(self, { ...mapEventFromApi(res.data), eventId: self.eventId });
574
+ }
575
+ return res;
557
576
  }
558
577
  };
559
578
  });
@@ -586,6 +605,7 @@ function mapEventFromApi(d) {
586
605
  flowId: pick2("flowId", "FlowId", "flow_id"),
587
606
  flowPath: pick2("flowPath", "FlowPath", "flow_path"),
588
607
  attendeeStatus: n(pick2("attendeeStatus", "AttendeeStatus", "attendee_status")),
608
+ status: n(pick2("status", "Status")),
589
609
  eventSource: n(pick2("eventSource", "EventSource", "event_source")),
590
610
  rescheduleLink: pick2("rescheduleLink", "RescheduleLink", "reschedule_link"),
591
611
  cancelLink: pick2("cancelLink", "CancelLink", "cancel_link"),
@@ -685,6 +705,7 @@ async function getByFiltersInternal(path, companyKey, opts = {}, dateRange = nul
685
705
  if (opts.title != null && opts.title !== "") query.title = opts.title;
686
706
  if (opts.search != null && opts.search !== "") query.search = opts.search;
687
707
  if (opts.attendeeStatus != null && opts.attendeeStatus !== "") query.attendee_status = opts.attendeeStatus;
708
+ if (opts.status != null && opts.status !== "") query.status = opts.status;
688
709
  if (opts.eventSource != null && opts.eventSource !== "") query.event_source = opts.eventSource;
689
710
  const sortBy = opts.sortBy ?? opts.sort ?? opts.sort_column;
690
711
  if (sortBy != null && sortBy !== "") query.sort = sortBy;
@@ -693,12 +714,17 @@ async function getByFiltersInternal(path, companyKey, opts = {}, dateRange = nul
693
714
  const u = String(sortOrderRaw).trim().toUpperCase();
694
715
  query.sort_dir = u.startsWith("DESC") ? "desc" : "asc";
695
716
  }
696
- if (opts.page != null) {
697
- query.page = opts.page;
698
- if (opts.page_size != null) query.page_size = opts.page_size;
717
+ const pageSize = opts.page_size ?? opts.pageSize;
718
+ const pageNum = opts.page != null ? Number(opts.page) : null;
719
+ const hasSkipTake = opts.skip != null || opts.take != null;
720
+ const usePageMode = pageNum != null && pageNum >= 1 && !hasSkipTake;
721
+ if (usePageMode) {
722
+ query.page = pageNum;
723
+ if (pageSize != null) query.page_size = pageSize;
699
724
  } else {
700
725
  if (opts.skip != null) query.skip = opts.skip;
701
- if (opts.take != null) query.take = opts.take;
726
+ const take = opts.take ?? (pageSize != null && !hasSkipTake ? pageSize : null);
727
+ if (take != null) query.take = take;
702
728
  }
703
729
  const res = await reqGet(path, query, { headers: { offset: String(offset) } });
704
730
  if (res.status !== "success") {
@@ -817,6 +843,11 @@ EventModel.setAttendeeStatus = async (eventId, attendeeStatus) => {
817
843
  const statusName = typeof attendeeStatus === "number" ? Object.keys(AttendeeStatus).find((k) => AttendeeStatus[k] === attendeeStatus) ?? "None" : attendeeStatus;
818
844
  return reqGet(`/event/${encodeURIComponent(eventId)}/${encodeURIComponent(statusName)}`);
819
845
  };
846
+ EventModel.setEventStatus = async (eventId, status) => {
847
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
848
+ const statusValue = typeof status === "number" ? status : EventStatus[status] ?? status;
849
+ return reqGet("/event/status/update", { event_id: eventId, status: statusValue });
850
+ };
820
851
  var Event_default = EventModel;
821
852
 
822
853
  // src/models/appointment/CalendarParticipant.js
@@ -1614,16 +1645,82 @@ var OpeningHourModel = types12.model("OpeningHour", {
1614
1645
  });
1615
1646
  var OpeningHour_default = OpeningHourModel;
1616
1647
 
1648
+ // src/models/appointment/ExternalEvent.js
1649
+ import { types as types13 } from "mobx-state-tree";
1650
+ function getDefaultOffset2() {
1651
+ var _a;
1652
+ const cfg = getConfig();
1653
+ return ((_a = cfg == null ? void 0 : cfg.getDefaultOffset) == null ? void 0 : _a.call(cfg)) ?? -(/* @__PURE__ */ new Date()).getTimezoneOffset();
1654
+ }
1655
+ function pickStr(obj, ...keys) {
1656
+ for (const k of keys) {
1657
+ const v = obj[k];
1658
+ if (v != null && typeof v === "string") return v;
1659
+ }
1660
+ return void 0;
1661
+ }
1662
+ function pickNum(obj, ...keys) {
1663
+ for (const k of keys) {
1664
+ const v = obj[k];
1665
+ if (v != null) {
1666
+ const n = typeof v === "number" ? v : Number(v);
1667
+ if (!Number.isNaN(n)) return n;
1668
+ }
1669
+ }
1670
+ return void 0;
1671
+ }
1672
+ function toIsoDate(value) {
1673
+ if (value == null || value === "") return "";
1674
+ if (typeof value === "string") return value;
1675
+ if (value instanceof Date) return value.toISOString();
1676
+ return String(value);
1677
+ }
1678
+ var ExternalEventModel = types13.model("ExternalEvent", {
1679
+ title: types13.optional(types13.maybeNull(types13.string), null),
1680
+ startDate: types13.optional(types13.string, ""),
1681
+ endDate: types13.optional(types13.string, ""),
1682
+ startHour: types13.optional(types13.number, 0),
1683
+ startMinute: types13.optional(types13.number, 0),
1684
+ endHour: types13.optional(types13.number, 0),
1685
+ endMinute: types13.optional(types13.number, 0)
1686
+ });
1687
+ function mapApiRow(row) {
1688
+ return ExternalEventModel.create({
1689
+ title: pickStr(row, "title", "Title") ?? null,
1690
+ startDate: toIsoDate(row.startDate ?? row.StartDate),
1691
+ endDate: toIsoDate(row.endDate ?? row.EndDate),
1692
+ startHour: pickNum(row, "startHour", "StartHour") ?? 0,
1693
+ startMinute: pickNum(row, "startMinute", "StartMinute") ?? 0,
1694
+ endHour: pickNum(row, "endHour", "EndHour") ?? 0,
1695
+ endMinute: pickNum(row, "endMinute", "EndMinute") ?? 0
1696
+ });
1697
+ }
1698
+ ExternalEventModel.getByParticipant = async (participantId, opts = {}) => {
1699
+ if (!participantId) throw new Error("participantId required");
1700
+ const { req } = createRequestHelpersFromEnv(getConfig());
1701
+ const offset = opts.offset ?? getDefaultOffset2();
1702
+ const res = await req("/externalcalendar/events/get", {
1703
+ method: "GET",
1704
+ query: { participant_id: participantId },
1705
+ headers: { offset: String(offset) }
1706
+ });
1707
+ if (res.status === "success" && Array.isArray(res.data)) {
1708
+ return res.data.map(mapApiRow);
1709
+ }
1710
+ return [];
1711
+ };
1712
+ var ExternalEvent_default = ExternalEventModel;
1713
+
1617
1714
  // src/models/appointment/Setting.js
1618
- import { types as types13, getEnv as getEnv4, applySnapshot as applySnapshot4 } from "mobx-state-tree";
1619
- var SettingModel = types13.model("Setting", {
1620
- id: types13.optional(types13.maybeNull(types13.number), null),
1621
- settingsId: types13.optional(types13.string, ""),
1622
- calendarId: types13.optional(types13.string, ""),
1623
- logo: types13.optional(types13.maybeNull(types13.string), null),
1624
- theme: types13.optional(types13.maybeNull(types13.string), null),
1625
- schedulingButtonText: types13.optional(types13.maybeNull(types13.string), null),
1626
- scheduledMessage: types13.optional(types13.maybeNull(types13.string), null)
1715
+ import { types as types14, getEnv as getEnv4, applySnapshot as applySnapshot4 } from "mobx-state-tree";
1716
+ var SettingModel = types14.model("Setting", {
1717
+ id: types14.optional(types14.maybeNull(types14.number), null),
1718
+ settingsId: types14.optional(types14.string, ""),
1719
+ calendarId: types14.optional(types14.string, ""),
1720
+ logo: types14.optional(types14.maybeNull(types14.string), null),
1721
+ theme: types14.optional(types14.maybeNull(types14.string), null),
1722
+ schedulingButtonText: types14.optional(types14.maybeNull(types14.string), null),
1723
+ scheduledMessage: types14.optional(types14.maybeNull(types14.string), null)
1627
1724
  }).actions((self) => {
1628
1725
  const { reqGet, reqPost } = createRequestHelpers(self, getEnv4);
1629
1726
  return {
@@ -1712,13 +1809,13 @@ SettingModel.uploadLogo = async (calendarId, file) => {
1712
1809
  var Setting_default = SettingModel;
1713
1810
 
1714
1811
  // src/models/appointment/Company.js
1715
- import { types as types14, getEnv as getEnv5, applySnapshot as applySnapshot5 } from "mobx-state-tree";
1716
- var CompanyModel = types14.model("Company", {
1717
- id: types14.optional(types14.maybeNull(types14.number), null),
1718
- companyKey: types14.identifier,
1719
- companyName: types14.optional(types14.string, ""),
1720
- createdOn: types14.optional(types14.maybeNull(types14.string), null),
1721
- modifiedOn: types14.optional(types14.maybeNull(types14.string), null)
1812
+ import { types as types15, getEnv as getEnv5, applySnapshot as applySnapshot5 } from "mobx-state-tree";
1813
+ var CompanyModel = types15.model("Company", {
1814
+ id: types15.optional(types15.maybeNull(types15.number), null),
1815
+ companyKey: types15.identifier,
1816
+ companyName: types15.optional(types15.string, ""),
1817
+ createdOn: types15.optional(types15.maybeNull(types15.string), null),
1818
+ modifiedOn: types15.optional(types15.maybeNull(types15.string), null)
1722
1819
  }).actions((self) => {
1723
1820
  const { reqGet, reqPost } = createRequestHelpers(self, getEnv5);
1724
1821
  return {
@@ -1780,13 +1877,13 @@ CompanyModel.save = async (payload) => {
1780
1877
  var Company_default = CompanyModel;
1781
1878
 
1782
1879
  // src/models/appointment/Asset.js
1783
- import { types as types15, getEnv as getEnv6 } from "mobx-state-tree";
1784
- var AssetModel = types15.model("Asset", {
1785
- url: types15.optional(types15.maybeNull(types15.string), null),
1786
- blobPath: types15.optional(types15.maybeNull(types15.string), null),
1787
- category: types15.optional(types15.maybeNull(types15.string), null),
1788
- contentType: types15.optional(types15.maybeNull(types15.string), null),
1789
- size: types15.optional(types15.maybeNull(types15.number), null)
1880
+ import { types as types16, getEnv as getEnv6 } from "mobx-state-tree";
1881
+ var AssetModel = types16.model("Asset", {
1882
+ url: types16.optional(types16.maybeNull(types16.string), null),
1883
+ blobPath: types16.optional(types16.maybeNull(types16.string), null),
1884
+ category: types16.optional(types16.maybeNull(types16.string), null),
1885
+ contentType: types16.optional(types16.maybeNull(types16.string), null),
1886
+ size: types16.optional(types16.maybeNull(types16.number), null)
1790
1887
  }).actions((self) => ({
1791
1888
  /** POST /asset/upload – upload file using model category. */
1792
1889
  async upload(file, opts = {}) {
@@ -1860,7 +1957,7 @@ AssetModel.upload = async (file, opts = {}) => {
1860
1957
  var Asset_default = AssetModel;
1861
1958
 
1862
1959
  // src/models/appointment/CalendarLocation.js
1863
- import { types as types16, getEnv as getEnv7, applySnapshot as applySnapshot6 } from "mobx-state-tree";
1960
+ import { types as types17, getEnv as getEnv7, applySnapshot as applySnapshot6 } from "mobx-state-tree";
1864
1961
  function mapCalendarLocationFromApi(d) {
1865
1962
  if (!d) return d;
1866
1963
  const pick2 = (...keys) => keys.reduce((v, k) => v ?? d[k], void 0);
@@ -1890,17 +1987,17 @@ function toPayload4(self) {
1890
1987
  sortOrder: self.sortOrder
1891
1988
  };
1892
1989
  }
1893
- var CalendarLocationModel = types16.model("CalendarLocation", {
1894
- id: types16.optional(types16.maybeNull(types16.number), null),
1895
- calendarLocationId: types16.optional(types16.maybeNull(types16.string), null),
1896
- calendarId: types16.optional(types16.maybeNull(types16.string), null),
1897
- locationType: types16.optional(types16.number, LocationType.Physical),
1898
- name: types16.optional(types16.string, ""),
1899
- value: types16.optional(types16.string, ""),
1900
- isDefault: types16.optional(types16.boolean, false),
1901
- sortOrder: types16.optional(types16.number, 0),
1902
- createdOn: types16.optional(types16.maybeNull(types16.string), null),
1903
- modifiedOn: types16.optional(types16.maybeNull(types16.string), null)
1990
+ var CalendarLocationModel = types17.model("CalendarLocation", {
1991
+ id: types17.optional(types17.maybeNull(types17.number), null),
1992
+ calendarLocationId: types17.optional(types17.maybeNull(types17.string), null),
1993
+ calendarId: types17.optional(types17.maybeNull(types17.string), null),
1994
+ locationType: types17.optional(types17.number, LocationType.Physical),
1995
+ name: types17.optional(types17.string, ""),
1996
+ value: types17.optional(types17.string, ""),
1997
+ isDefault: types17.optional(types17.boolean, false),
1998
+ sortOrder: types17.optional(types17.number, 0),
1999
+ createdOn: types17.optional(types17.maybeNull(types17.string), null),
2000
+ modifiedOn: types17.optional(types17.maybeNull(types17.string), null)
1904
2001
  }).actions((self) => {
1905
2002
  const { reqGet, reqPost } = createRequestHelpers(self, getEnv7);
1906
2003
  return {
@@ -1982,7 +2079,7 @@ CalendarLocationModel.setDefault = async (calendarId, calendarLocationId) => {
1982
2079
  var CalendarLocation_default = CalendarLocationModel;
1983
2080
 
1984
2081
  // src/models/appointment/Preference.js
1985
- import { types as types17 } from "mobx-state-tree";
2082
+ import { types as types18 } from "mobx-state-tree";
1986
2083
  var PreferenceScope = {
1987
2084
  Global: 0,
1988
2085
  Consumer: 1,
@@ -1993,13 +2090,13 @@ var PreferenceScope = {
1993
2090
  User: 6
1994
2091
  };
1995
2092
  var SCOPE_NAMES = ["Global", "Consumer", "Company", "Calendar", "Event", "Participant", "User"];
1996
- var PreferenceModel = types17.model("Preference", {
1997
- id: types17.optional(types17.maybeNull(types17.number), null),
1998
- preferenceId: types17.optional(types17.maybeNull(types17.string), null),
1999
- level: types17.optional(types17.number, 0),
2000
- primaryKey: types17.optional(types17.string, ""),
2001
- preferenceOption: types17.optional(types17.string, ""),
2002
- optionsJson: types17.optional(types17.maybeNull(types17.string), null)
2093
+ var PreferenceModel = types18.model("Preference", {
2094
+ id: types18.optional(types18.maybeNull(types18.number), null),
2095
+ preferenceId: types18.optional(types18.maybeNull(types18.string), null),
2096
+ level: types18.optional(types18.number, 0),
2097
+ primaryKey: types18.optional(types18.string, ""),
2098
+ preferenceOption: types18.optional(types18.string, ""),
2099
+ optionsJson: types18.optional(types18.maybeNull(types18.string), null)
2003
2100
  }).actions((self) => ({
2004
2101
  /** POST /preference/{scope}/{key}/{option} – save this preference to the API. */
2005
2102
  async save() {
@@ -2047,7 +2144,7 @@ PreferenceModel.delete = async (preferenceId) => {
2047
2144
  var Preference_default = PreferenceModel;
2048
2145
 
2049
2146
  // src/models/appointment/Flow.js
2050
- import { types as types18, getEnv as getEnv8, applySnapshot as applySnapshot7 } from "mobx-state-tree";
2147
+ import { types as types19, getEnv as getEnv8, applySnapshot as applySnapshot7 } from "mobx-state-tree";
2051
2148
  function mapFlowFromApi(d) {
2052
2149
  if (!d) return d;
2053
2150
  const pick2 = (...keys) => keys.reduce((v, k) => v ?? d[k], void 0);
@@ -2066,18 +2163,18 @@ function mapFlowFromApi(d) {
2066
2163
  modifiedOn: pick2("modifiedOn", "ModifiedOn", "modified_on") ?? null
2067
2164
  };
2068
2165
  }
2069
- var FlowModel = types18.model("Flow", {
2070
- id: types18.optional(types18.maybeNull(types18.number), null),
2071
- flowId: types18.optional(types18.identifier, "new"),
2072
- companyKey: types18.optional(types18.maybeNull(types18.string), null),
2073
- calendarId: types18.optional(types18.maybeNull(types18.string), null),
2074
- name: types18.optional(types18.maybeNull(types18.string), null),
2075
- description: types18.optional(types18.maybeNull(types18.string), null),
2076
- flowJson: types18.optional(types18.string, ""),
2077
- isActive: types18.optional(types18.boolean, true),
2078
- isDeleted: types18.optional(types18.boolean, false),
2079
- createdOn: types18.optional(types18.maybeNull(types18.string), null),
2080
- modifiedOn: types18.optional(types18.maybeNull(types18.string), null)
2166
+ var FlowModel = types19.model("Flow", {
2167
+ id: types19.optional(types19.maybeNull(types19.number), null),
2168
+ flowId: types19.optional(types19.identifier, "new"),
2169
+ companyKey: types19.optional(types19.maybeNull(types19.string), null),
2170
+ calendarId: types19.optional(types19.maybeNull(types19.string), null),
2171
+ name: types19.optional(types19.maybeNull(types19.string), null),
2172
+ description: types19.optional(types19.maybeNull(types19.string), null),
2173
+ flowJson: types19.optional(types19.string, ""),
2174
+ isActive: types19.optional(types19.boolean, true),
2175
+ isDeleted: types19.optional(types19.boolean, false),
2176
+ createdOn: types19.optional(types19.maybeNull(types19.string), null),
2177
+ modifiedOn: types19.optional(types19.maybeNull(types19.string), null)
2081
2178
  }).actions((self) => {
2082
2179
  const { reqGet, reqPost } = createRequestHelpers(self, getEnv8);
2083
2180
  return {
@@ -2310,7 +2407,20 @@ FlowModel.getPreview = async (flowId) => {
2310
2407
  var Flow_default = FlowModel;
2311
2408
 
2312
2409
  // src/models/appointment/Lead.js
2313
- import { types as types19, getEnv as getEnv9, applySnapshot as applySnapshot8, getSnapshot } from "mobx-state-tree";
2410
+ import { types as types20, getEnv as getEnv9, applySnapshot as applySnapshot8, getSnapshot } from "mobx-state-tree";
2411
+ function pickLeadCreateContact(payload) {
2412
+ const p = payload ?? {};
2413
+ const email = String(p.email ?? p.Email ?? "").trim();
2414
+ const phone = String(p.phone ?? p.Phone ?? "").trim();
2415
+ const companyKey = String(p.companyKey ?? p.company_key ?? p.CompanyKey ?? "").trim();
2416
+ return { email, phone, companyKey };
2417
+ }
2418
+ function validateLeadCreatePayload(payload) {
2419
+ const { email, phone, companyKey } = pickLeadCreateContact(payload);
2420
+ if (!companyKey) return { ok: false, message: "companyKey is required" };
2421
+ if (!email && !phone) return { ok: false, message: "email or phone is required" };
2422
+ return { ok: true };
2423
+ }
2314
2424
  function mapLeadFromApi(d) {
2315
2425
  if (!d) return d;
2316
2426
  const pick2 = (...keys) => keys.reduce((v, k) => v ?? d[k], void 0);
@@ -2335,22 +2445,24 @@ function mapLeadFromApi(d) {
2335
2445
  source: pick2("source", "Source") ?? "",
2336
2446
  leadType,
2337
2447
  referrerLink: pick2("referrerLink", "ReferrerLink", "referrer_link") ?? "",
2448
+ description: pick2("description", "Description") ?? "",
2338
2449
  createdOn: pick2("createdOn", "CreatedOn", "created_on") ?? null,
2339
2450
  modifiedOn: pick2("modifiedOn", "ModifiedOn", "modified_on") ?? null
2340
2451
  };
2341
2452
  }
2342
- var LeadModel = types19.model("Lead", {
2343
- id: types19.optional(types19.maybeNull(types19.number), null),
2344
- leadId: types19.optional(types19.identifier, "new"),
2345
- email: types19.optional(types19.string, ""),
2346
- name: types19.optional(types19.string, ""),
2347
- phone: types19.optional(types19.string, ""),
2348
- companyKey: types19.optional(types19.string, ""),
2349
- source: types19.optional(types19.string, ""),
2350
- leadType: types19.optional(types19.number, 2),
2351
- referrerLink: types19.optional(types19.string, ""),
2352
- createdOn: types19.optional(types19.maybeNull(types19.string), null),
2353
- modifiedOn: types19.optional(types19.maybeNull(types19.string), null)
2453
+ var LeadModel = types20.model("Lead", {
2454
+ id: types20.optional(types20.maybeNull(types20.number), null),
2455
+ leadId: types20.optional(types20.identifier, "new"),
2456
+ email: types20.optional(types20.string, ""),
2457
+ name: types20.optional(types20.string, ""),
2458
+ phone: types20.optional(types20.string, ""),
2459
+ companyKey: types20.optional(types20.string, ""),
2460
+ source: types20.optional(types20.string, ""),
2461
+ leadType: types20.optional(types20.number, 2),
2462
+ referrerLink: types20.optional(types20.string, ""),
2463
+ description: types20.optional(types20.string, ""),
2464
+ createdOn: types20.optional(types20.maybeNull(types20.string), null),
2465
+ modifiedOn: types20.optional(types20.maybeNull(types20.string), null)
2354
2466
  }).actions((self) => {
2355
2467
  const { reqGet, reqPost } = createRequestHelpers(self, getEnv9);
2356
2468
  return {
@@ -2398,8 +2510,14 @@ var LeadModel = types19.model("Lead", {
2398
2510
  async getColumnSelection(userId) {
2399
2511
  return LeadModel.getColumnSelection(userId);
2400
2512
  },
2401
- /** POST /lead/create – create this lead */
2513
+ /** POST /lead/create – create this lead (requires companyKey and email or phone) */
2402
2514
  async createLead() {
2515
+ const validation = validateLeadCreatePayload({
2516
+ email: self.email,
2517
+ phone: self.phone,
2518
+ companyKey: self.companyKey
2519
+ });
2520
+ if (!validation.ok) return { status: "failure", message: validation.message };
2403
2521
  const payload = {
2404
2522
  email: self.email,
2405
2523
  name: self.name,
@@ -2407,7 +2525,8 @@ var LeadModel = types19.model("Lead", {
2407
2525
  companyKey: self.companyKey,
2408
2526
  source: self.source,
2409
2527
  leadType: self.leadType,
2410
- referrerLink: self.referrerLink
2528
+ referrerLink: self.referrerLink,
2529
+ description: self.description
2411
2530
  };
2412
2531
  const res = await reqPost("/lead/create", payload);
2413
2532
  if (res.status === "success" && res.data) {
@@ -2428,7 +2547,8 @@ var LeadModel = types19.model("Lead", {
2428
2547
  companyKey: self.companyKey,
2429
2548
  source: self.source,
2430
2549
  leadType: self.leadType,
2431
- referrerLink: self.referrerLink
2550
+ referrerLink: self.referrerLink,
2551
+ description: self.description
2432
2552
  };
2433
2553
  const res = await reqPost("/lead/update", payload);
2434
2554
  if (res.status === "success" && res.data) {
@@ -2496,6 +2616,7 @@ LeadModel.allowedColumns = [
2496
2616
  "source",
2497
2617
  "lead_type",
2498
2618
  "referrer_link",
2619
+ "description",
2499
2620
  "created_on",
2500
2621
  "modified_on"
2501
2622
  ];
@@ -2549,6 +2670,8 @@ LeadModel.getByCompany = async (companyKey, opts = {}) => {
2549
2670
  return null;
2550
2671
  };
2551
2672
  LeadModel.createLead = async (payload) => {
2673
+ const validation = validateLeadCreatePayload(payload);
2674
+ if (!validation.ok) return { status: "failure", message: validation.message };
2552
2675
  const { reqPost } = createRequestHelpersFromEnv(getConfig());
2553
2676
  const res = await reqPost("/lead/create", payload);
2554
2677
  if (res.status === "success" && res.data) {
@@ -2604,17 +2727,17 @@ LeadModel.getSources = async (companyKey) => {
2604
2727
  var Lead_default = LeadModel;
2605
2728
 
2606
2729
  // src/models/appointment/CustomField.js
2607
- import { types as types20, getEnv as getEnv10, applySnapshot as applySnapshot9 } from "mobx-state-tree";
2608
- var CustomFieldModel = types20.model("CustomField", {
2609
- id: types20.optional(types20.maybeNull(types20.number), null),
2610
- customFieldId: types20.optional(types20.maybeNull(types20.string), null),
2611
- calendarId: types20.optional(types20.maybeNull(types20.string), null),
2612
- label: types20.optional(types20.maybeNull(types20.string), null),
2613
- type: types20.optional(types20.string, ""),
2614
- isRequired: types20.optional(types20.boolean, false),
2615
- createdOn: types20.optional(types20.maybeNull(types20.string), null),
2616
- modifiedOn: types20.optional(types20.maybeNull(types20.string), null),
2617
- isDeleted: types20.optional(types20.boolean, false)
2730
+ import { types as types21, getEnv as getEnv10, applySnapshot as applySnapshot9 } from "mobx-state-tree";
2731
+ var CustomFieldModel = types21.model("CustomField", {
2732
+ id: types21.optional(types21.maybeNull(types21.number), null),
2733
+ customFieldId: types21.optional(types21.maybeNull(types21.string), null),
2734
+ calendarId: types21.optional(types21.maybeNull(types21.string), null),
2735
+ label: types21.optional(types21.maybeNull(types21.string), null),
2736
+ type: types21.optional(types21.string, ""),
2737
+ isRequired: types21.optional(types21.boolean, false),
2738
+ createdOn: types21.optional(types21.maybeNull(types21.string), null),
2739
+ modifiedOn: types21.optional(types21.maybeNull(types21.string), null),
2740
+ isDeleted: types21.optional(types21.boolean, false)
2618
2741
  }).actions((self) => {
2619
2742
  const { reqGet, reqPost } = createRequestHelpers(self, getEnv10);
2620
2743
  return {
@@ -2944,10 +3067,10 @@ var AuthModel = {
2944
3067
  var Auth_default = AuthModel;
2945
3068
 
2946
3069
  // src/models/appointment/index.js
2947
- import { types as types21, getEnv as getEnv11 } from "mobx-state-tree";
2948
- var RootStore = types21.model("RootStore", {
2949
- calendars: types21.optional(types21.map(Calendar_default), {}),
2950
- events: types21.optional(types21.map(Event_default), {})
3070
+ import { types as types22, getEnv as getEnv11 } from "mobx-state-tree";
3071
+ var RootStore = types22.model("RootStore", {
3072
+ calendars: types22.optional(types22.map(Calendar_default), {}),
3073
+ events: types22.optional(types22.map(Event_default), {})
2951
3074
  }).actions((self) => ({
2952
3075
  addCalendar(snapshot) {
2953
3076
  const cal = Calendar_default.create(snapshot);
@@ -2986,6 +3109,8 @@ export {
2986
3109
  EmailProvider,
2987
3110
  Event_default as EventModel,
2988
3111
  EventSource,
3112
+ EventStatus,
3113
+ ExternalEvent_default as ExternalEventModel,
2989
3114
  Flow_default as FlowModel,
2990
3115
  Lead_default as LeadModel,
2991
3116
  LocationType,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blazeo.com/calendar-client",
3
- "version": "1.0.35",
3
+ "version": "1.0.37",
4
4
  "description": "Blazeo Calendar / Appointment API client with MobX State Tree models",
5
5
  "exports": {
6
6
  ".": {