@blazeo.com/calendar-client 1.0.18 → 1.0.20

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.mjs CHANGED
@@ -97,8 +97,8 @@ function mergeConsumerHeader(env, opts) {
97
97
  if (!headers["Consumer"] && (env == null ? void 0 : env.consumer)) headers["Consumer"] = env.consumer;
98
98
  return { ...opts, headers };
99
99
  }
100
- function createRequestHelpers(self, getEnv9) {
101
- const env = () => getEnv9(self);
100
+ function createRequestHelpers(self, getEnv11) {
101
+ const env = () => getEnv11(self);
102
102
  const baseUrl = () => env().baseUrl;
103
103
  const fetchFn = () => env().fetch ?? (typeof fetch !== "undefined" ? fetch : () => {
104
104
  throw new Error("fetch not available");
@@ -322,6 +322,7 @@ var EventModel = types4.model("Event", {
322
322
  startMinute: self.startMinute,
323
323
  endHour: self.endHour,
324
324
  endMinute: self.endMinute,
325
+ timeZone: self.timeZone,
325
326
  visitorName: self.visitorName ?? void 0,
326
327
  visitorEmail: self.visitorEmail ?? void 0,
327
328
  visitorPhone: self.visitorPhone ?? void 0
@@ -1594,8 +1595,88 @@ CompanyModel.save = async (payload) => {
1594
1595
  };
1595
1596
  var Company_default = CompanyModel;
1596
1597
 
1598
+ // src/models/appointment/Asset.js
1599
+ import { types as types15, getEnv as getEnv6 } from "mobx-state-tree";
1600
+ var AssetModel = types15.model("Asset", {
1601
+ url: types15.optional(types15.maybeNull(types15.string), null),
1602
+ blobPath: types15.optional(types15.maybeNull(types15.string), null),
1603
+ category: types15.optional(types15.maybeNull(types15.string), null),
1604
+ contentType: types15.optional(types15.maybeNull(types15.string), null),
1605
+ size: types15.optional(types15.maybeNull(types15.number), null)
1606
+ }).actions((self) => ({
1607
+ /** POST /asset/upload – upload file using model category. */
1608
+ async upload(file, opts = {}) {
1609
+ const category = opts.category ?? self.category;
1610
+ return AssetModel.upload(file, { ...opts, category });
1611
+ }
1612
+ }));
1613
+ function pickValue(d, ...keys) {
1614
+ for (const k of keys) {
1615
+ if ((d == null ? void 0 : d[k]) !== void 0 && (d == null ? void 0 : d[k]) !== null) return d[k];
1616
+ }
1617
+ return null;
1618
+ }
1619
+ function mapFromApi5(d) {
1620
+ if (!d) return d;
1621
+ return {
1622
+ url: pickValue(d, "url", "Url"),
1623
+ blobPath: pickValue(d, "blobPath", "blob_path", "BlobPath"),
1624
+ category: pickValue(d, "category", "Category"),
1625
+ contentType: pickValue(d, "contentType", "content_type", "ContentType"),
1626
+ size: pickValue(d, "size", "Size")
1627
+ };
1628
+ }
1629
+ AssetModel.upload = async (file, opts = {}) => {
1630
+ const cfg = getConfig();
1631
+ if (!(cfg == null ? void 0 : cfg.baseUrl)) throw new Error("Configure baseUrl before AssetModel.upload");
1632
+ if (!file) return { status: "failure", message: "file is required" };
1633
+ const category = opts.category != null ? String(opts.category).trim() : "";
1634
+ if (!category) return { status: "failure", message: "category is required" };
1635
+ const fetchFn = cfg.fetch ?? (typeof fetch !== "undefined" ? fetch : () => {
1636
+ throw new Error("fetch not available");
1637
+ });
1638
+ const baseUrl = String(cfg.baseUrl).replace(/\/+$/, "");
1639
+ const url = `${baseUrl}/asset/upload`;
1640
+ const formData = new FormData();
1641
+ formData.append("file", file);
1642
+ formData.append("category", category);
1643
+ if (opts.companyKey != null && String(opts.companyKey).trim() !== "") {
1644
+ formData.append("company_key", String(opts.companyKey).trim());
1645
+ }
1646
+ if (opts.calendarId != null && String(opts.calendarId).trim() !== "") {
1647
+ formData.append("calendar_id", String(opts.calendarId).trim());
1648
+ }
1649
+ const headers = {};
1650
+ if (cfg.consumer) headers.Consumer = cfg.consumer;
1651
+ if (opts.consumer != null && String(opts.consumer).trim() !== "") {
1652
+ headers.Consumer = String(opts.consumer).trim();
1653
+ }
1654
+ const res = await fetchFn(url, {
1655
+ method: "POST",
1656
+ headers,
1657
+ body: formData
1658
+ });
1659
+ const text = await res.text();
1660
+ let data;
1661
+ try {
1662
+ data = JSON.parse(text);
1663
+ } catch {
1664
+ data = { status: "failure", message: text || res.statusText };
1665
+ }
1666
+ if (!res.ok && data.status !== "failure") {
1667
+ data.status = "failure";
1668
+ data.message = data.message ?? `HTTP ${res.status}`;
1669
+ }
1670
+ if ((data == null ? void 0 : data.status) === "success" && (data == null ? void 0 : data.data)) {
1671
+ const mapped = mapFromApi5(data.data);
1672
+ data.data = AssetModel.create(mapped, { env: cfg });
1673
+ }
1674
+ return data;
1675
+ };
1676
+ var Asset_default = AssetModel;
1677
+
1597
1678
  // src/models/appointment/Preference.js
1598
- import { types as types15 } from "mobx-state-tree";
1679
+ import { types as types16 } from "mobx-state-tree";
1599
1680
  var PreferenceScope = {
1600
1681
  Global: 0,
1601
1682
  Consumer: 1,
@@ -1604,13 +1685,13 @@ var PreferenceScope = {
1604
1685
  Event: 4
1605
1686
  };
1606
1687
  var SCOPE_NAMES = ["Global", "Consumer", "Company", "Calendar", "Event"];
1607
- var PreferenceModel = types15.model("Preference", {
1608
- id: types15.optional(types15.maybeNull(types15.number), null),
1609
- preferenceId: types15.optional(types15.maybeNull(types15.string), null),
1610
- level: types15.optional(types15.number, 0),
1611
- primaryKey: types15.optional(types15.string, ""),
1612
- preferenceOption: types15.optional(types15.string, ""),
1613
- optionsJson: types15.optional(types15.maybeNull(types15.string), null)
1688
+ var PreferenceModel = types16.model("Preference", {
1689
+ id: types16.optional(types16.maybeNull(types16.number), null),
1690
+ preferenceId: types16.optional(types16.maybeNull(types16.string), null),
1691
+ level: types16.optional(types16.number, 0),
1692
+ primaryKey: types16.optional(types16.string, ""),
1693
+ preferenceOption: types16.optional(types16.string, ""),
1694
+ optionsJson: types16.optional(types16.maybeNull(types16.string), null)
1614
1695
  }).actions((self) => ({
1615
1696
  /** POST /preference/{scope}/{key}/{option} – save this preference to the API. */
1616
1697
  async save() {
@@ -1658,7 +1739,7 @@ PreferenceModel.delete = async (preferenceId) => {
1658
1739
  var Preference_default = PreferenceModel;
1659
1740
 
1660
1741
  // src/models/appointment/Flow.js
1661
- import { types as types16, getEnv as getEnv6, applySnapshot as applySnapshot6 } from "mobx-state-tree";
1742
+ import { types as types17, getEnv as getEnv7, applySnapshot as applySnapshot6 } from "mobx-state-tree";
1662
1743
  function mapFlowFromApi(d) {
1663
1744
  if (!d) return d;
1664
1745
  const pick = (...keys) => keys.reduce((v, k) => v ?? d[k], void 0);
@@ -1676,19 +1757,19 @@ function mapFlowFromApi(d) {
1676
1757
  modifiedOn: pick("modifiedOn", "ModifiedOn", "modified_on") ?? null
1677
1758
  };
1678
1759
  }
1679
- var FlowModel = types16.model("Flow", {
1680
- id: types16.optional(types16.maybeNull(types16.number), null),
1681
- flowId: types16.optional(types16.identifier, "new"),
1682
- companyKey: types16.optional(types16.maybeNull(types16.string), null),
1683
- name: types16.optional(types16.maybeNull(types16.string), null),
1684
- description: types16.optional(types16.maybeNull(types16.string), null),
1685
- flowJson: types16.optional(types16.string, ""),
1686
- isActive: types16.optional(types16.boolean, true),
1687
- isDeleted: types16.optional(types16.boolean, false),
1688
- createdOn: types16.optional(types16.maybeNull(types16.string), null),
1689
- modifiedOn: types16.optional(types16.maybeNull(types16.string), null)
1760
+ var FlowModel = types17.model("Flow", {
1761
+ id: types17.optional(types17.maybeNull(types17.number), null),
1762
+ flowId: types17.optional(types17.identifier, "new"),
1763
+ companyKey: types17.optional(types17.maybeNull(types17.string), null),
1764
+ name: types17.optional(types17.maybeNull(types17.string), null),
1765
+ description: types17.optional(types17.maybeNull(types17.string), null),
1766
+ flowJson: types17.optional(types17.string, ""),
1767
+ isActive: types17.optional(types17.boolean, true),
1768
+ isDeleted: types17.optional(types17.boolean, false),
1769
+ createdOn: types17.optional(types17.maybeNull(types17.string), null),
1770
+ modifiedOn: types17.optional(types17.maybeNull(types17.string), null)
1690
1771
  }).actions((self) => {
1691
- const { reqGet, reqPost } = createRequestHelpers(self, getEnv6);
1772
+ const { reqGet, reqPost } = createRequestHelpers(self, getEnv7);
1692
1773
  return {
1693
1774
  /** GET flow/get – fetch this flow by flowId */
1694
1775
  async get() {
@@ -1917,7 +1998,7 @@ FlowModel.getPreview = async (flowId) => {
1917
1998
  var Flow_default = FlowModel;
1918
1999
 
1919
2000
  // src/models/appointment/Lead.js
1920
- import { types as types17, getEnv as getEnv7, applySnapshot as applySnapshot7, getSnapshot } from "mobx-state-tree";
2001
+ import { types as types18, getEnv as getEnv8, applySnapshot as applySnapshot7, getSnapshot } from "mobx-state-tree";
1921
2002
  function mapLeadFromApi(d) {
1922
2003
  if (!d) return d;
1923
2004
  const pick = (...keys) => keys.reduce((v, k) => v ?? d[k], void 0);
@@ -1946,20 +2027,20 @@ function mapLeadFromApi(d) {
1946
2027
  modifiedOn: pick("modifiedOn", "ModifiedOn", "modified_on") ?? null
1947
2028
  };
1948
2029
  }
1949
- var LeadModel = types17.model("Lead", {
1950
- id: types17.optional(types17.maybeNull(types17.number), null),
1951
- leadId: types17.optional(types17.identifier, "new"),
1952
- email: types17.optional(types17.string, ""),
1953
- name: types17.optional(types17.string, ""),
1954
- phone: types17.optional(types17.string, ""),
1955
- companyKey: types17.optional(types17.string, ""),
1956
- source: types17.optional(types17.string, ""),
1957
- leadType: types17.optional(types17.number, 2),
1958
- referrerLink: types17.optional(types17.string, ""),
1959
- createdOn: types17.optional(types17.maybeNull(types17.string), null),
1960
- modifiedOn: types17.optional(types17.maybeNull(types17.string), null)
2030
+ var LeadModel = types18.model("Lead", {
2031
+ id: types18.optional(types18.maybeNull(types18.number), null),
2032
+ leadId: types18.optional(types18.identifier, "new"),
2033
+ email: types18.optional(types18.string, ""),
2034
+ name: types18.optional(types18.string, ""),
2035
+ phone: types18.optional(types18.string, ""),
2036
+ companyKey: types18.optional(types18.string, ""),
2037
+ source: types18.optional(types18.string, ""),
2038
+ leadType: types18.optional(types18.number, 2),
2039
+ referrerLink: types18.optional(types18.string, ""),
2040
+ createdOn: types18.optional(types18.maybeNull(types18.string), null),
2041
+ modifiedOn: types18.optional(types18.maybeNull(types18.string), null)
1961
2042
  }).actions((self) => {
1962
- const { reqGet, reqPost } = createRequestHelpers(self, getEnv7);
2043
+ const { reqGet, reqPost } = createRequestHelpers(self, getEnv8);
1963
2044
  return {
1964
2045
  /** GET /lead/get – fetch this lead by leadId */
1965
2046
  async get() {
@@ -2145,11 +2226,180 @@ LeadModel.getSources = async (companyKey) => {
2145
2226
  };
2146
2227
  var Lead_default = LeadModel;
2147
2228
 
2229
+ // src/models/appointment/CustomField.js
2230
+ import { types as types19, getEnv as getEnv9, applySnapshot as applySnapshot8 } from "mobx-state-tree";
2231
+ var CustomFieldModel = types19.model("CustomField", {
2232
+ id: types19.optional(types19.maybeNull(types19.number), null),
2233
+ customFieldId: types19.optional(types19.maybeNull(types19.string), null),
2234
+ calendarId: types19.optional(types19.maybeNull(types19.string), null),
2235
+ label: types19.optional(types19.maybeNull(types19.string), null),
2236
+ type: types19.optional(types19.string, ""),
2237
+ isRequired: types19.optional(types19.boolean, false),
2238
+ createdOn: types19.optional(types19.maybeNull(types19.string), null),
2239
+ modifiedOn: types19.optional(types19.maybeNull(types19.string), null),
2240
+ isDeleted: types19.optional(types19.boolean, false)
2241
+ }).actions((self) => {
2242
+ const { reqGet, reqPost } = createRequestHelpers(self, getEnv9);
2243
+ return {
2244
+ /** GET /CustomField/GetAll?calendar_id= */
2245
+ async getAll(calendarId) {
2246
+ const resolvedCalendarId = calendarId || self.calendarId;
2247
+ if (!resolvedCalendarId) return { status: "failure", message: "calendarId required" };
2248
+ return reqGet("/CustomField/GetAll", { calendar_id: resolvedCalendarId });
2249
+ },
2250
+ /** GET /CustomField/FieldType/Get?FieldType= */
2251
+ async getFieldType(fieldType) {
2252
+ return reqGet("/CustomField/FieldType/Get", { FieldType: fieldType });
2253
+ },
2254
+ /** GET /CustomField/FieldTypes/Get */
2255
+ async getFieldTypes() {
2256
+ return reqGet("/CustomField/FieldTypes/Get");
2257
+ },
2258
+ /** POST /CustomField/Add */
2259
+ async add(payload) {
2260
+ const body = payload ?? toPayload4(self);
2261
+ const res = await reqPost("/CustomField/Add", body);
2262
+ if (res.status === "success" && res.data) {
2263
+ applySnapshot8(self, mapCustomFieldFromApi(res.data));
2264
+ }
2265
+ return res;
2266
+ },
2267
+ /** GET /CustomField/RemoveField?customfield_id= */
2268
+ async removeField(customFieldId) {
2269
+ const resolvedCustomFieldId = customFieldId || self.customFieldId;
2270
+ if (!resolvedCustomFieldId) return { status: "failure", message: "customFieldId required" };
2271
+ return reqGet("/CustomField/RemoveField", { customfield_id: resolvedCustomFieldId });
2272
+ },
2273
+ /** GET /CustomField/RemoveAllFields?calendar_id= */
2274
+ async removeAllFields(calendarId) {
2275
+ const resolvedCalendarId = calendarId || self.calendarId;
2276
+ if (!resolvedCalendarId) return { status: "failure", message: "calendarId required" };
2277
+ return reqGet("/CustomField/RemoveAllFields", { calendar_id: resolvedCalendarId });
2278
+ },
2279
+ /** GET /CustomField/Form/Get?calendar_id=&data_id= */
2280
+ async getForm(calendarId, dataId) {
2281
+ const resolvedCalendarId = calendarId || self.calendarId;
2282
+ if (!resolvedCalendarId) return { status: "failure", message: "calendarId required" };
2283
+ const query = { calendar_id: resolvedCalendarId };
2284
+ if (dataId != null && dataId !== "") query.data_id = dataId;
2285
+ return reqGet("/CustomField/Form/Get", query);
2286
+ },
2287
+ /** POST /CustomField/Form/Save?calendar_id= */
2288
+ async saveForm(fields, calendarId) {
2289
+ const resolvedCalendarId = calendarId || self.calendarId;
2290
+ if (!resolvedCalendarId) return { status: "failure", message: "calendarId required" };
2291
+ return reqPost("/CustomField/Form/Save", fields ?? [], { calendar_id: resolvedCalendarId });
2292
+ },
2293
+ /** GET /CustomField/Form/Data/Get?calendar_id=&data_id= */
2294
+ async getFormData(calendarId, dataId) {
2295
+ const resolvedCalendarId = calendarId || self.calendarId;
2296
+ if (!resolvedCalendarId) return { status: "failure", message: "calendarId required" };
2297
+ const query = { calendar_id: resolvedCalendarId };
2298
+ if (dataId != null && dataId !== "") query.data_id = dataId;
2299
+ return reqGet("/CustomField/Form/Data/Get", query);
2300
+ },
2301
+ /** POST /CustomField/Form/Data/Save?data_id= */
2302
+ async saveFormData(fields, dataId) {
2303
+ if (!dataId) return { status: "failure", message: "dataId required" };
2304
+ return reqPost("/CustomField/Form/Data/Save", fields ?? [], { data_id: dataId });
2305
+ },
2306
+ /** POST /CustomField/Form/Field/Data/Save */
2307
+ async saveFormFieldData(fieldPayload) {
2308
+ return reqPost("/CustomField/Form/Field/Data/Save", fieldPayload ?? {});
2309
+ }
2310
+ };
2311
+ });
2312
+ function mapCustomFieldFromApi(d) {
2313
+ if (!d) return d;
2314
+ const pick = (...keys) => keys.reduce((v, k) => v ?? d[k], void 0);
2315
+ return {
2316
+ id: pick("id", "Id") ?? null,
2317
+ customFieldId: pick("customFieldId", "CustomFieldId", "custom_field_id") ?? null,
2318
+ calendarId: pick("calendarId", "CalendarId", "calendar_id") ?? null,
2319
+ label: pick("label", "Label") ?? null,
2320
+ type: pick("type", "Type") ?? "",
2321
+ isRequired: Boolean(pick("isRequired", "IsRequired", "is_required")),
2322
+ createdOn: pick("createdOn", "CreatedOn", "created_on") ?? null,
2323
+ modifiedOn: pick("modifiedOn", "ModifiedOn", "modified_on") ?? null,
2324
+ isDeleted: Boolean(pick("isDeleted", "IsDeleted", "is_deleted"))
2325
+ };
2326
+ }
2327
+ function toPayload4(self) {
2328
+ return {
2329
+ customFieldId: self.customFieldId || void 0,
2330
+ calendarId: self.calendarId || void 0,
2331
+ label: self.label ?? void 0,
2332
+ type: self.type || void 0,
2333
+ isRequired: Boolean(self.isRequired)
2334
+ };
2335
+ }
2336
+ CustomFieldModel.getAll = async (calendarId) => {
2337
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
2338
+ const res = await reqGet("/CustomField/GetAll", { calendar_id: calendarId });
2339
+ if (res.status === "success" && Array.isArray(res.data)) {
2340
+ return res.data.map((f) => CustomFieldModel.create(mapCustomFieldFromApi(f), { env: getConfig() }));
2341
+ }
2342
+ return null;
2343
+ };
2344
+ CustomFieldModel.getFieldType = async (fieldType) => {
2345
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
2346
+ const res = await reqGet("/CustomField/FieldType/Get", { FieldType: fieldType });
2347
+ return res.status === "success" ? res.data : null;
2348
+ };
2349
+ CustomFieldModel.getFieldTypes = async () => {
2350
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
2351
+ const res = await reqGet("/CustomField/FieldTypes/Get");
2352
+ return res.status === "success" ? res.data : null;
2353
+ };
2354
+ CustomFieldModel.add = async (payload) => {
2355
+ const { reqPost } = createRequestHelpersFromEnv(getConfig());
2356
+ const res = await reqPost("/CustomField/Add", payload);
2357
+ if (res.status === "success" && res.data) {
2358
+ return CustomFieldModel.create(mapCustomFieldFromApi(res.data), { env: getConfig() });
2359
+ }
2360
+ return null;
2361
+ };
2362
+ CustomFieldModel.removeField = async (customFieldId) => {
2363
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
2364
+ return reqGet("/CustomField/RemoveField", { customfield_id: customFieldId });
2365
+ };
2366
+ CustomFieldModel.removeAllFields = async (calendarId) => {
2367
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
2368
+ return reqGet("/CustomField/RemoveAllFields", { calendar_id: calendarId });
2369
+ };
2370
+ CustomFieldModel.getForm = async (calendarId, dataId) => {
2371
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
2372
+ const query = { calendar_id: calendarId };
2373
+ if (dataId != null && dataId !== "") query.data_id = dataId;
2374
+ const res = await reqGet("/CustomField/Form/Get", query);
2375
+ return res.status === "success" ? res.data : null;
2376
+ };
2377
+ CustomFieldModel.saveForm = async (calendarId, fields) => {
2378
+ const { reqPost } = createRequestHelpersFromEnv(getConfig());
2379
+ return reqPost("/CustomField/Form/Save", fields ?? [], { calendar_id: calendarId });
2380
+ };
2381
+ CustomFieldModel.getFormData = async (calendarId, dataId) => {
2382
+ const { reqGet } = createRequestHelpersFromEnv(getConfig());
2383
+ const query = { calendar_id: calendarId };
2384
+ if (dataId != null && dataId !== "") query.data_id = dataId;
2385
+ const res = await reqGet("/CustomField/Form/Data/Get", query);
2386
+ return res.status === "success" ? res.data : null;
2387
+ };
2388
+ CustomFieldModel.saveFormData = async (dataId, fields) => {
2389
+ const { reqPost } = createRequestHelpersFromEnv(getConfig());
2390
+ return reqPost("/CustomField/Form/Data/Save", fields ?? [], { data_id: dataId });
2391
+ };
2392
+ CustomFieldModel.saveFormFieldData = async (fieldPayload) => {
2393
+ const { reqPost } = createRequestHelpersFromEnv(getConfig());
2394
+ return reqPost("/CustomField/Form/Field/Data/Save", fieldPayload ?? {});
2395
+ };
2396
+ var CustomField_default = CustomFieldModel;
2397
+
2148
2398
  // src/models/appointment/index.js
2149
- import { types as types18, getEnv as getEnv8 } from "mobx-state-tree";
2150
- var RootStore = types18.model("RootStore", {
2151
- calendars: types18.optional(types18.map(Calendar_default), {}),
2152
- events: types18.optional(types18.map(Event_default), {})
2399
+ import { types as types20, getEnv as getEnv10 } from "mobx-state-tree";
2400
+ var RootStore = types20.model("RootStore", {
2401
+ calendars: types20.optional(types20.map(Calendar_default), {}),
2402
+ events: types20.optional(types20.map(Event_default), {})
2153
2403
  }).actions((self) => ({
2154
2404
  addCalendar(snapshot) {
2155
2405
  const cal = Calendar_default.create(snapshot);
@@ -2168,6 +2418,7 @@ function createRootStore(initialState = {}) {
2168
2418
  return RootStore.create(initialState, { env });
2169
2419
  }
2170
2420
  export {
2421
+ Asset_default as AssetModel,
2171
2422
  AssignmentMethod,
2172
2423
  AttendeeStatus,
2173
2424
  AvailabilityDetail_default as AvailabilityDetailModel,
@@ -2177,6 +2428,7 @@ export {
2177
2428
  CalendarParticipant_default as CalendarParticipantModel,
2178
2429
  Company_default as CompanyModel,
2179
2430
  ConfigModel_default as ConfigModel,
2431
+ CustomField_default as CustomFieldModel,
2180
2432
  DayOfWeek,
2181
2433
  Event_default as EventModel,
2182
2434
  Flow_default as FlowModel,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blazeo.com/calendar-client",
3
- "version": "1.0.18",
3
+ "version": "1.0.20",
4
4
  "description": "Blazeo Calendar / Appointment API client with MobX State Tree models",
5
5
  "exports": {
6
6
  ".": {