@blazeo.com/calendar-client 1.0.49 → 1.0.52

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
@@ -112,8 +112,8 @@ export type LeadCompanyResult = {
112
112
  };
113
113
 
114
114
  export const EventModel: {
115
- get(eventId: string): Promise<unknown>;
116
- getByExternalId(externalEventId: string): Promise<unknown>;
115
+ get(eventId: string, opts?: { offset?: number }): Promise<unknown>;
116
+ getByExternalId(externalEventId: string, opts?: { offset?: number }): Promise<unknown>;
117
117
  getByDateRangeWithFilters(
118
118
  companyKey: string,
119
119
  startDateFrom: string,
@@ -225,6 +225,13 @@ export type PhoneNumberPurchaseResult = {
225
225
  Success?: boolean;
226
226
  };
227
227
 
228
+ export type PhoneNumberReleaseData = {
229
+ company_key?: string;
230
+ phone_number?: string;
231
+ released_from_twilio?: boolean;
232
+ cleared_local_state?: boolean;
233
+ };
234
+
228
235
  export const CompanyModel: {
229
236
  get(companyKey: string): Promise<unknown>;
230
237
  getAll(): Promise<unknown[] | null>;
@@ -234,6 +241,11 @@ export const CompanyModel: {
234
241
  data?: PhoneNumberPurchaseResult;
235
242
  message?: string;
236
243
  }>;
244
+ releasePhoneNumber(companyKey: string, phoneNumber?: string): Promise<{
245
+ status: string;
246
+ data?: PhoneNumberReleaseData;
247
+ message?: string;
248
+ }>;
237
249
  create(snapshot: object, options?: { env?: object }): unknown;
238
250
  };
239
251
  export const AssetModel: {
@@ -338,26 +350,30 @@ export const LeadModel: {
338
350
  data?: { userId?: string; columns?: string[]; isDefault?: boolean };
339
351
  message?: string;
340
352
  }>;
341
- /** Requires companyKey and at least one of email or phone. */
353
+ /** Requires firstName/name, leadType, companyKey and at least one of email or phone. */
342
354
  createLead(payload: {
343
355
  companyKey: string;
344
356
  email?: string;
345
357
  phone?: string;
346
358
  name?: string;
359
+ firstName?: string;
360
+ first_name?: string;
347
361
  source?: string;
348
- leadType?: 'sales' | 'service' | 'others' | number | null;
362
+ leadType: 'sales' | 'service' | 'others' | number;
349
363
  referrerLink?: string;
350
364
  description?: string;
351
365
  }): Promise<{ status: string; data?: unknown; message?: string } | null>;
352
- /** Requires leadId; when email or phone is included, at least one must be non-empty. */
366
+ /** Requires leadId, firstName/name and leadType; when email or phone is included, at least one must be non-empty. */
353
367
  updateLead(payload: {
354
368
  leadId: string;
355
369
  email?: string;
356
370
  companyKey?: string;
357
371
  name?: string;
372
+ firstName?: string;
373
+ first_name?: string;
358
374
  phone?: string;
359
375
  source?: string;
360
- leadType?: 'sales' | 'service' | 'others' | number | null;
376
+ leadType: 'sales' | 'service' | 'others' | number;
361
377
  referrerLink?: string;
362
378
  description?: string;
363
379
  }): Promise<unknown>;
package/dist/index.js CHANGED
@@ -521,13 +521,14 @@ var EventModel = import_mobx_state_tree4.types.model("Event", {
521
521
  return {
522
522
  /** GET /event/get – fetch this event by eventId or externalEventId */
523
523
  async get(params) {
524
+ const offset = (params == null ? void 0 : params.offset) ?? getOffset();
524
525
  if ((params == null ? void 0 : params.eventId) ?? (params == null ? void 0 : params.event_id)) {
525
- const res = await reqGet("/event/get", { event_id: params.eventId ?? params.event_id });
526
+ const res = await reqGet("/event/get", { event_id: params.eventId ?? params.event_id }, { headers: { offset: String(offset) } });
526
527
  if (res.status === "success" && res.data) (0, import_mobx_state_tree4.applySnapshot)(self, { ...res.data, eventId: self.eventId });
527
528
  return res;
528
529
  }
529
530
  if ((params == null ? void 0 : params.externalEventId) ?? (params == null ? void 0 : params.externalevent_id)) {
530
- const res = await reqGet("/event/get", { externalevent_id: params.externalEventId ?? params.externalevent_id });
531
+ const res = await reqGet("/event/get", { externalevent_id: params.externalEventId ?? params.externalevent_id }, { headers: { offset: String(offset) } });
531
532
  if (res.status === "success" && res.data) (0, import_mobx_state_tree4.applySnapshot)(self, { ...res.data, eventId: self.eventId });
532
533
  return res;
533
534
  }
@@ -704,17 +705,19 @@ function mapEventFromApi(d) {
704
705
  modifiedOn: pick2("modifiedOn", "ModifiedOn", "modified_on")
705
706
  };
706
707
  }
707
- EventModel.get = async (eventId) => {
708
+ EventModel.get = async (eventId, opts = {}) => {
708
709
  const { reqGet } = createRequestHelpersFromEnv(getConfig());
709
- const res = await reqGet("/event/get", { event_id: eventId });
710
+ const offset = opts.offset ?? getDefaultOffset();
711
+ const res = await reqGet("/event/get", { event_id: eventId }, { headers: { offset: String(offset) } });
710
712
  if (res.status === "success" && res.data) {
711
713
  return EventModel.create(mapEventFromApi(res.data), { env: getConfig() });
712
714
  }
713
715
  return null;
714
716
  };
715
- EventModel.getByExternalId = async (externalEventId) => {
717
+ EventModel.getByExternalId = async (externalEventId, opts = {}) => {
716
718
  const { reqGet } = createRequestHelpersFromEnv(getConfig());
717
- const res = await reqGet("/event/get", { externalevent_id: externalEventId });
719
+ const offset = opts.offset ?? getDefaultOffset();
720
+ const res = await reqGet("/event/get", { externalevent_id: externalEventId }, { headers: { offset: String(offset) } });
718
721
  if (res.status === "success" && res.data) {
719
722
  return EventModel.create(mapEventFromApi(res.data), { env: getConfig() });
720
723
  }
@@ -2034,6 +2037,12 @@ CompanyModel.purchasePhoneNumber = async (companyKey, companyId) => {
2034
2037
  const { reqGet } = createRequestHelpersFromEnv(getConfig());
2035
2038
  return reqGet("/Company/PhoneNumber/Purchase", { company_key: companyKey, company_id: companyId });
2036
2039
  };
2040
+ CompanyModel.releasePhoneNumber = async (companyKey, phoneNumber) => {
2041
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
2042
+ const query = { company_key: companyKey };
2043
+ if (phoneNumber) query.phone_number = phoneNumber;
2044
+ return reqGet("/Company/PhoneNumber/Release", query);
2045
+ };
2037
2046
  var Company_default = CompanyModel;
2038
2047
 
2039
2048
  // src/models/appointment/Asset.js
@@ -2575,9 +2584,24 @@ function pickLeadCreateContact(payload) {
2575
2584
  const companyKey = String(p.companyKey ?? p.company_key ?? p.CompanyKey ?? "").trim();
2576
2585
  return { email, phone, companyKey };
2577
2586
  }
2587
+ function pickLeadRequiredFields(payload) {
2588
+ const p = payload ?? {};
2589
+ const firstName = String(
2590
+ p.firstName ?? p.first_name ?? p.name ?? p.Name ?? ""
2591
+ ).trim();
2592
+ const leadType = p.leadType ?? p.lead_type ?? p.LeadType ?? null;
2593
+ return { firstName, leadType };
2594
+ }
2595
+ function hasLeadTypeValue(leadType) {
2596
+ if (leadType == null) return false;
2597
+ return !(typeof leadType === "string" && leadType.trim() === "");
2598
+ }
2578
2599
  function validateLeadCreatePayload(payload) {
2579
2600
  const { email, phone, companyKey } = pickLeadCreateContact(payload);
2601
+ const { firstName, leadType } = pickLeadRequiredFields(payload);
2580
2602
  if (!companyKey) return { ok: false, message: "companyKey is required" };
2603
+ if (!firstName) return { ok: false, message: "First name is mandatory" };
2604
+ if (!hasLeadTypeValue(leadType)) return { ok: false, message: "Lead type is mandatory" };
2581
2605
  if (!email && !phone) return { ok: false, message: "email or phone is required" };
2582
2606
  return { ok: true };
2583
2607
  }
@@ -2585,6 +2609,9 @@ function validateLeadUpdatePayload(payload) {
2585
2609
  const p = payload ?? {};
2586
2610
  const leadId = String(p.leadId ?? p.lead_id ?? p.LeadId ?? "").trim();
2587
2611
  if (!leadId) return { ok: false, message: "leadId required" };
2612
+ const { firstName, leadType } = pickLeadRequiredFields(payload);
2613
+ if (!firstName) return { ok: false, message: "First name is mandatory" };
2614
+ if (!hasLeadTypeValue(leadType)) return { ok: false, message: "Lead type is mandatory" };
2588
2615
  const hasEmailKey = "email" in p || "Email" in p;
2589
2616
  const hasPhoneKey = "phone" in p || "Phone" in p;
2590
2617
  if (hasEmailKey || hasPhoneKey) {
@@ -2682,12 +2709,14 @@ var LeadModel = import_mobx_state_tree20.types.model("Lead", {
2682
2709
  async getColumnSelection(userId) {
2683
2710
  return LeadModel.getColumnSelection(userId);
2684
2711
  },
2685
- /** POST /lead/create – create this lead (requires companyKey and email or phone) */
2712
+ /** POST /lead/create – create this lead (requires firstName, leadType, companyKey and email/phone) */
2686
2713
  async createLead() {
2687
2714
  const validation = validateLeadCreatePayload({
2688
2715
  email: self.email,
2689
2716
  phone: self.phone,
2690
- companyKey: self.companyKey
2717
+ companyKey: self.companyKey,
2718
+ firstName: self.name,
2719
+ leadType: self.leadType
2691
2720
  });
2692
2721
  if (!validation.ok) return { status: "failure", message: validation.message };
2693
2722
  const payload = {
@@ -2706,7 +2735,7 @@ var LeadModel = import_mobx_state_tree20.types.model("Lead", {
2706
2735
  }
2707
2736
  return res;
2708
2737
  },
2709
- /** POST /lead/update – update this lead (requires email or phone) */
2738
+ /** POST /lead/update – update this lead (requires firstName and leadType) */
2710
2739
  async updateLead() {
2711
2740
  if (!self.leadId || self.leadId === "new") {
2712
2741
  return { status: "failure", message: "leadId required" };
@@ -2714,7 +2743,9 @@ var LeadModel = import_mobx_state_tree20.types.model("Lead", {
2714
2743
  const validation = validateLeadUpdatePayload({
2715
2744
  leadId: self.leadId,
2716
2745
  email: self.email,
2717
- phone: self.phone
2746
+ phone: self.phone,
2747
+ firstName: self.name,
2748
+ leadType: self.leadType
2718
2749
  });
2719
2750
  if (!validation.ok) return { status: "failure", message: validation.message };
2720
2751
  const payload = {
package/dist/index.mjs CHANGED
@@ -446,13 +446,14 @@ var EventModel = types4.model("Event", {
446
446
  return {
447
447
  /** GET /event/get – fetch this event by eventId or externalEventId */
448
448
  async get(params) {
449
+ const offset = (params == null ? void 0 : params.offset) ?? getOffset();
449
450
  if ((params == null ? void 0 : params.eventId) ?? (params == null ? void 0 : params.event_id)) {
450
- const res = await reqGet("/event/get", { event_id: params.eventId ?? params.event_id });
451
+ const res = await reqGet("/event/get", { event_id: params.eventId ?? params.event_id }, { headers: { offset: String(offset) } });
451
452
  if (res.status === "success" && res.data) applySnapshot(self, { ...res.data, eventId: self.eventId });
452
453
  return res;
453
454
  }
454
455
  if ((params == null ? void 0 : params.externalEventId) ?? (params == null ? void 0 : params.externalevent_id)) {
455
- const res = await reqGet("/event/get", { externalevent_id: params.externalEventId ?? params.externalevent_id });
456
+ const res = await reqGet("/event/get", { externalevent_id: params.externalEventId ?? params.externalevent_id }, { headers: { offset: String(offset) } });
456
457
  if (res.status === "success" && res.data) applySnapshot(self, { ...res.data, eventId: self.eventId });
457
458
  return res;
458
459
  }
@@ -629,17 +630,19 @@ function mapEventFromApi(d) {
629
630
  modifiedOn: pick2("modifiedOn", "ModifiedOn", "modified_on")
630
631
  };
631
632
  }
632
- EventModel.get = async (eventId) => {
633
+ EventModel.get = async (eventId, opts = {}) => {
633
634
  const { reqGet } = createRequestHelpersFromEnv(getConfig());
634
- const res = await reqGet("/event/get", { event_id: eventId });
635
+ const offset = opts.offset ?? getDefaultOffset();
636
+ const res = await reqGet("/event/get", { event_id: eventId }, { headers: { offset: String(offset) } });
635
637
  if (res.status === "success" && res.data) {
636
638
  return EventModel.create(mapEventFromApi(res.data), { env: getConfig() });
637
639
  }
638
640
  return null;
639
641
  };
640
- EventModel.getByExternalId = async (externalEventId) => {
642
+ EventModel.getByExternalId = async (externalEventId, opts = {}) => {
641
643
  const { reqGet } = createRequestHelpersFromEnv(getConfig());
642
- const res = await reqGet("/event/get", { externalevent_id: externalEventId });
644
+ const offset = opts.offset ?? getDefaultOffset();
645
+ const res = await reqGet("/event/get", { externalevent_id: externalEventId }, { headers: { offset: String(offset) } });
643
646
  if (res.status === "success" && res.data) {
644
647
  return EventModel.create(mapEventFromApi(res.data), { env: getConfig() });
645
648
  }
@@ -1959,6 +1962,12 @@ CompanyModel.purchasePhoneNumber = async (companyKey, companyId) => {
1959
1962
  const { reqGet } = createRequestHelpersFromEnv(getConfig());
1960
1963
  return reqGet("/Company/PhoneNumber/Purchase", { company_key: companyKey, company_id: companyId });
1961
1964
  };
1965
+ CompanyModel.releasePhoneNumber = async (companyKey, phoneNumber) => {
1966
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
1967
+ const query = { company_key: companyKey };
1968
+ if (phoneNumber) query.phone_number = phoneNumber;
1969
+ return reqGet("/Company/PhoneNumber/Release", query);
1970
+ };
1962
1971
  var Company_default = CompanyModel;
1963
1972
 
1964
1973
  // src/models/appointment/Asset.js
@@ -2500,9 +2509,24 @@ function pickLeadCreateContact(payload) {
2500
2509
  const companyKey = String(p.companyKey ?? p.company_key ?? p.CompanyKey ?? "").trim();
2501
2510
  return { email, phone, companyKey };
2502
2511
  }
2512
+ function pickLeadRequiredFields(payload) {
2513
+ const p = payload ?? {};
2514
+ const firstName = String(
2515
+ p.firstName ?? p.first_name ?? p.name ?? p.Name ?? ""
2516
+ ).trim();
2517
+ const leadType = p.leadType ?? p.lead_type ?? p.LeadType ?? null;
2518
+ return { firstName, leadType };
2519
+ }
2520
+ function hasLeadTypeValue(leadType) {
2521
+ if (leadType == null) return false;
2522
+ return !(typeof leadType === "string" && leadType.trim() === "");
2523
+ }
2503
2524
  function validateLeadCreatePayload(payload) {
2504
2525
  const { email, phone, companyKey } = pickLeadCreateContact(payload);
2526
+ const { firstName, leadType } = pickLeadRequiredFields(payload);
2505
2527
  if (!companyKey) return { ok: false, message: "companyKey is required" };
2528
+ if (!firstName) return { ok: false, message: "First name is mandatory" };
2529
+ if (!hasLeadTypeValue(leadType)) return { ok: false, message: "Lead type is mandatory" };
2506
2530
  if (!email && !phone) return { ok: false, message: "email or phone is required" };
2507
2531
  return { ok: true };
2508
2532
  }
@@ -2510,6 +2534,9 @@ function validateLeadUpdatePayload(payload) {
2510
2534
  const p = payload ?? {};
2511
2535
  const leadId = String(p.leadId ?? p.lead_id ?? p.LeadId ?? "").trim();
2512
2536
  if (!leadId) return { ok: false, message: "leadId required" };
2537
+ const { firstName, leadType } = pickLeadRequiredFields(payload);
2538
+ if (!firstName) return { ok: false, message: "First name is mandatory" };
2539
+ if (!hasLeadTypeValue(leadType)) return { ok: false, message: "Lead type is mandatory" };
2513
2540
  const hasEmailKey = "email" in p || "Email" in p;
2514
2541
  const hasPhoneKey = "phone" in p || "Phone" in p;
2515
2542
  if (hasEmailKey || hasPhoneKey) {
@@ -2607,12 +2634,14 @@ var LeadModel = types20.model("Lead", {
2607
2634
  async getColumnSelection(userId) {
2608
2635
  return LeadModel.getColumnSelection(userId);
2609
2636
  },
2610
- /** POST /lead/create – create this lead (requires companyKey and email or phone) */
2637
+ /** POST /lead/create – create this lead (requires firstName, leadType, companyKey and email/phone) */
2611
2638
  async createLead() {
2612
2639
  const validation = validateLeadCreatePayload({
2613
2640
  email: self.email,
2614
2641
  phone: self.phone,
2615
- companyKey: self.companyKey
2642
+ companyKey: self.companyKey,
2643
+ firstName: self.name,
2644
+ leadType: self.leadType
2616
2645
  });
2617
2646
  if (!validation.ok) return { status: "failure", message: validation.message };
2618
2647
  const payload = {
@@ -2631,7 +2660,7 @@ var LeadModel = types20.model("Lead", {
2631
2660
  }
2632
2661
  return res;
2633
2662
  },
2634
- /** POST /lead/update – update this lead (requires email or phone) */
2663
+ /** POST /lead/update – update this lead (requires firstName and leadType) */
2635
2664
  async updateLead() {
2636
2665
  if (!self.leadId || self.leadId === "new") {
2637
2666
  return { status: "failure", message: "leadId required" };
@@ -2639,7 +2668,9 @@ var LeadModel = types20.model("Lead", {
2639
2668
  const validation = validateLeadUpdatePayload({
2640
2669
  leadId: self.leadId,
2641
2670
  email: self.email,
2642
- phone: self.phone
2671
+ phone: self.phone,
2672
+ firstName: self.name,
2673
+ leadType: self.leadType
2643
2674
  });
2644
2675
  if (!validation.ok) return { status: "failure", message: validation.message };
2645
2676
  const payload = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blazeo.com/calendar-client",
3
- "version": "1.0.49",
3
+ "version": "1.0.52",
4
4
  "description": "Blazeo Calendar / Appointment API client with MobX State Tree models",
5
5
  "exports": {
6
6
  ".": {