@blazeo.com/appointment-client 1.0.0 → 1.0.1

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.
Files changed (102) hide show
  1. package/dist/calendar/blazeoCalendarRelationMethods.d.ts +40 -0
  2. package/dist/calendar/blazeoCalendarRelationMethods.d.ts.map +1 -0
  3. package/dist/calendar/blazeoCalendarRelationMethods.js +17 -0
  4. package/dist/calendar/blazeoCalendarRelationMethods.js.map +1 -0
  5. package/dist/calendar/calendarCreationFacade.d.ts +37 -0
  6. package/dist/calendar/calendarCreationFacade.d.ts.map +1 -0
  7. package/dist/calendar/calendarCreationFacade.js +174 -0
  8. package/dist/calendar/calendarCreationFacade.js.map +1 -0
  9. package/dist/calendar/createCalendar.d.ts +51 -0
  10. package/dist/calendar/createCalendar.d.ts.map +1 -0
  11. package/dist/calendar/createCalendar.js +208 -0
  12. package/dist/calendar/createCalendar.js.map +1 -0
  13. package/dist/calendar/mapCalendarBoToBlazeoSnapshot.d.ts +10 -0
  14. package/dist/calendar/mapCalendarBoToBlazeoSnapshot.d.ts.map +1 -0
  15. package/dist/calendar/mapCalendarBoToBlazeoSnapshot.js +44 -0
  16. package/dist/calendar/mapCalendarBoToBlazeoSnapshot.js.map +1 -0
  17. package/dist/calendar/mapCalendarToBlazeoSnapshot.d.ts +10 -0
  18. package/dist/calendar/mapCalendarToBlazeoSnapshot.d.ts.map +1 -0
  19. package/dist/calendar/mapCalendarToBlazeoSnapshot.js +44 -0
  20. package/dist/calendar/mapCalendarToBlazeoSnapshot.js.map +1 -0
  21. package/dist/config/applyBlazeoClientConfig.d.ts +3 -0
  22. package/dist/config/applyBlazeoClientConfig.d.ts.map +1 -0
  23. package/dist/config/applyBlazeoClientConfig.js +14 -0
  24. package/dist/config/applyBlazeoClientConfig.js.map +1 -0
  25. package/dist/config/applyBlazeoDefaults.d.ts +3 -0
  26. package/dist/config/applyBlazeoDefaults.d.ts.map +1 -0
  27. package/dist/config/applyBlazeoDefaults.js +14 -0
  28. package/dist/config/applyBlazeoDefaults.js.map +1 -0
  29. package/dist/config/blazeo.config.d.ts +11 -0
  30. package/dist/config/blazeo.config.d.ts.map +1 -0
  31. package/dist/config/blazeo.config.js +11 -0
  32. package/dist/config/blazeo.config.js.map +1 -0
  33. package/dist/config/blazeoClientDefaults.d.ts +12 -0
  34. package/dist/config/blazeoClientDefaults.d.ts.map +1 -0
  35. package/dist/config/blazeoClientDefaults.js +12 -0
  36. package/dist/config/blazeoClientDefaults.js.map +1 -0
  37. package/dist/config/initializeAppointmentClient.d.ts +28 -0
  38. package/dist/config/initializeAppointmentClient.d.ts.map +1 -0
  39. package/dist/config/initializeAppointmentClient.js +23 -0
  40. package/dist/config/initializeAppointmentClient.js.map +1 -0
  41. package/dist/events/appointmentEventFacade.d.ts +44 -0
  42. package/dist/events/appointmentEventFacade.d.ts.map +1 -0
  43. package/dist/events/appointmentEventFacade.js +130 -0
  44. package/dist/events/appointmentEventFacade.js.map +1 -0
  45. package/dist/events/mapAppointmentToEventSnapshot.d.ts +8 -0
  46. package/dist/events/mapAppointmentToEventSnapshot.d.ts.map +1 -0
  47. package/dist/events/mapAppointmentToEventSnapshot.js +56 -0
  48. package/dist/events/mapAppointmentToEventSnapshot.js.map +1 -0
  49. package/dist/exampleData.d.ts +15 -0
  50. package/dist/exampleData.d.ts.map +1 -0
  51. package/dist/exampleData.js +72 -0
  52. package/dist/exampleData.js.map +1 -0
  53. package/dist/facade/calendarCreationFacade.d.ts +40 -0
  54. package/dist/facade/calendarCreationFacade.d.ts.map +1 -0
  55. package/dist/facade/calendarCreationFacade.js +96 -0
  56. package/dist/facade/calendarCreationFacade.js.map +1 -0
  57. package/dist/facade/mapCalendarBOToSnapshot.d.ts +10 -0
  58. package/dist/facade/mapCalendarBOToSnapshot.d.ts.map +1 -0
  59. package/dist/facade/mapCalendarBOToSnapshot.js +44 -0
  60. package/dist/facade/mapCalendarBOToSnapshot.js.map +1 -0
  61. package/dist/facades/index.d.ts +12 -0
  62. package/dist/facades/index.d.ts.map +1 -0
  63. package/dist/facades/index.js +12 -0
  64. package/dist/facades/index.js.map +1 -0
  65. package/dist/index.d.ts +92 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +37 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/models/CalendarRootModel.d.ts +31 -0
  70. package/dist/models/CalendarRootModel.d.ts.map +1 -0
  71. package/dist/models/CalendarRootModel.js +37 -0
  72. package/dist/models/CalendarRootModel.js.map +1 -0
  73. package/dist/models/CalendarSlotModel.d.ts +9 -0
  74. package/dist/models/CalendarSlotModel.d.ts.map +1 -0
  75. package/dist/models/CalendarSlotModel.js +8 -0
  76. package/dist/models/CalendarSlotModel.js.map +1 -0
  77. package/dist/models/EventModel.d.ts +11 -0
  78. package/dist/models/EventModel.d.ts.map +1 -0
  79. package/dist/models/EventModel.js +10 -0
  80. package/dist/models/EventModel.js.map +1 -0
  81. package/dist/models/ParticipantModel.d.ts +9 -0
  82. package/dist/models/ParticipantModel.d.ts.map +1 -0
  83. package/dist/models/ParticipantModel.js +8 -0
  84. package/dist/models/ParticipantModel.js.map +1 -0
  85. package/dist/models/index.d.ts +5 -0
  86. package/dist/models/index.d.ts.map +1 -0
  87. package/dist/models/index.js +5 -0
  88. package/dist/models/index.js.map +1 -0
  89. package/dist/types/appointment.d.ts +27 -0
  90. package/dist/types/appointment.d.ts.map +1 -0
  91. package/dist/types/appointment.js +6 -0
  92. package/dist/types/appointment.js.map +1 -0
  93. package/dist/types/calendar.d.ts +62 -0
  94. package/dist/types/calendar.d.ts.map +1 -0
  95. package/dist/types/calendar.js +6 -0
  96. package/dist/types/calendar.js.map +1 -0
  97. package/dist/types/calendarBo.d.ts +62 -0
  98. package/dist/types/calendarBo.d.ts.map +1 -0
  99. package/dist/types/calendarBo.js +6 -0
  100. package/dist/types/calendarBo.js.map +1 -0
  101. package/package.json +34 -7
  102. package/blazeo.com-appointment-client-1.0.0.tgz +0 -0
@@ -0,0 +1,40 @@
1
+ import type { IStateTreeNode } from "mobx-state-tree";
2
+ /**
3
+ * Participant & opening-hour **save** APIs on a Blazeo `Calendar` MST node
4
+ * (`CalendarModel.create` from `@blazeo.com/calendar-client`).
5
+ *
6
+ * Source: `node_modules/@blazeo.com/calendar-client/dist/index.mjs` (Calendar model actions).
7
+ *
8
+ * | Instance method | Route | Notes |
9
+ * |-----------------|-------|--------|
10
+ * | `addParticipant(participantId)` | `GET /Calendar/Participant/Add` | Query: `calendar_id`, `participant_id` |
11
+ * | `removeParticipant(participantId)` | `GET /Calendar/Participant/Remove` | Remove participant from calendar |
12
+ * | `saveOpeningHour(payload)` | `POST /Calendar/Participant/Availability/OpeningHour/Save` | Single opening-hour row |
13
+ * | `saveOpeningHours(payload)` | `POST /Calendar/Participant/Availability/OpeningHours/Save` | Batch variant (same family) |
14
+ * | `getParticipantOpeningHours(params?)` | `GET /Calendar/Participant/OpeningHours/Get` | Read |
15
+ * | `removeParticipantOpeningHours(participantId)` | `GET /Calendar/Participant/OpeningHour/Remove` | Clear hours for participant |
16
+ *
17
+ * Alternative **static** helpers on `CalendarModel` (different flow): `createWithParticipants`,
18
+ * `editWithParticipants` — not used by `appointment-client` relation facade (we use create + `addParticipant`).
19
+ */
20
+ export type BlazeoCalendarRelationResponse = {
21
+ status: string;
22
+ message?: string;
23
+ data?: unknown;
24
+ };
25
+ export type BlazeoCalendarForRelations = IStateTreeNode & {
26
+ readonly calendarId?: string;
27
+ addParticipant(participantId: string): Promise<BlazeoCalendarRelationResponse>;
28
+ removeParticipant(participantId: string): Promise<BlazeoCalendarRelationResponse>;
29
+ saveOpeningHour(payload: Record<string, unknown>): Promise<BlazeoCalendarRelationResponse>;
30
+ saveOpeningHours(payload: Record<string, unknown> | unknown[]): Promise<BlazeoCalendarRelationResponse>;
31
+ };
32
+ /** `GET /Calendar/Participant/Add` — attach `participantId` to this calendar. */
33
+ export declare function addParticipantToCalendar(calendar: BlazeoCalendarForRelations, participantId: string): Promise<BlazeoCalendarRelationResponse>;
34
+ /** `GET /Calendar/Participant/Remove` */
35
+ export declare function removeParticipantFromCalendar(calendar: BlazeoCalendarForRelations, participantId: string): Promise<BlazeoCalendarRelationResponse>;
36
+ /** `POST /Calendar/Participant/Availability/OpeningHour/Save` — one day/slot. */
37
+ export declare function saveCalendarOpeningHour(calendar: BlazeoCalendarForRelations, payload: Record<string, unknown>): Promise<BlazeoCalendarRelationResponse>;
38
+ /** `POST /Calendar/Participant/Availability/OpeningHours/Save` — batch body (API-specific shape). */
39
+ export declare function saveCalendarOpeningHoursBatch(calendar: BlazeoCalendarForRelations, payload: Record<string, unknown> | unknown[]): Promise<BlazeoCalendarRelationResponse>;
40
+ //# sourceMappingURL=blazeoCalendarRelationMethods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blazeoCalendarRelationMethods.d.ts","sourceRoot":"","sources":["../../src/calendar/blazeoCalendarRelationMethods.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,8BAA8B,GAAG;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,cAAc,GAAG;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC/E,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAClF,eAAe,CACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC3C,gBAAgB,CACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAC3C,OAAO,CAAC,8BAA8B,CAAC,CAAC;CAC5C,CAAC;AAEF,iFAAiF;AACjF,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,0BAA0B,EACpC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,8BAA8B,CAAC,CAEzC;AAED,yCAAyC;AACzC,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,0BAA0B,EACpC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,8BAA8B,CAAC,CAEzC;AAED,iFAAiF;AACjF,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,0BAA0B,EACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,8BAA8B,CAAC,CAEzC;AAED,qGAAqG;AACrG,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,0BAA0B,EACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAC3C,OAAO,CAAC,8BAA8B,CAAC,CAEzC"}
@@ -0,0 +1,17 @@
1
+ /** `GET /Calendar/Participant/Add` — attach `participantId` to this calendar. */
2
+ export function addParticipantToCalendar(calendar, participantId) {
3
+ return calendar.addParticipant(participantId);
4
+ }
5
+ /** `GET /Calendar/Participant/Remove` */
6
+ export function removeParticipantFromCalendar(calendar, participantId) {
7
+ return calendar.removeParticipant(participantId);
8
+ }
9
+ /** `POST /Calendar/Participant/Availability/OpeningHour/Save` — one day/slot. */
10
+ export function saveCalendarOpeningHour(calendar, payload) {
11
+ return calendar.saveOpeningHour(payload);
12
+ }
13
+ /** `POST /Calendar/Participant/Availability/OpeningHours/Save` — batch body (API-specific shape). */
14
+ export function saveCalendarOpeningHoursBatch(calendar, payload) {
15
+ return calendar.saveOpeningHours(payload);
16
+ }
17
+ //# sourceMappingURL=blazeoCalendarRelationMethods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blazeoCalendarRelationMethods.js","sourceRoot":"","sources":["../../src/calendar/blazeoCalendarRelationMethods.ts"],"names":[],"mappings":"AAsCA,iFAAiF;AACjF,MAAM,UAAU,wBAAwB,CACtC,QAAoC,EACpC,aAAqB;IAErB,OAAO,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAChD,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,6BAA6B,CAC3C,QAAoC,EACpC,aAAqB;IAErB,OAAO,QAAQ,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;AACnD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,uBAAuB,CACrC,QAAoC,EACpC,OAAgC;IAEhC,OAAO,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,qGAAqG;AACrG,MAAM,UAAU,6BAA6B,CAC3C,QAAoC,EACpC,OAA4C;IAE5C,OAAO,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { CalendarInput, MemberBOInput, OpeningHourBOInput } from "../types/calendar.js";
2
+ import { deleteCalendarAsync, type CreateCalendarOptions, type CreateCalendarResult, type CreateCalendarSuccess } from "./createCalendar.js";
3
+ /**
4
+ * Resolves Blazeo `participantId` for an opening-hour row: explicit `participantId`,
5
+ * or lookup by `member` id in `members` (Apex `ThirdPartyMemberId`), matching
6
+ * `CalendarCreationAPIFacade.SaveOpeningHours`.
7
+ */
8
+ export declare function resolveParticipantIdForOpeningHour(openingHour: OpeningHourBOInput, members: MemberBOInput[] | undefined): string | undefined;
9
+ export type CalendarWithRelationsSuccess = CreateCalendarSuccess & {
10
+ membersAdded: number;
11
+ openingHoursSaved: number;
12
+ };
13
+ export type CalendarWithRelationsResult = CalendarWithRelationsSuccess | Extract<CreateCalendarResult, {
14
+ ok: false;
15
+ }>;
16
+ /**
17
+ * Orchestrates the same steps as Apex `CalendarCreationAPIFacade.CreateCalendarAsync`:
18
+ * save calendar (`POST /Calendar/Create`), then add participants, then save opening hours
19
+ * per day (`POST /Calendar/Participant/Availability/OpeningHour/Save`).
20
+ */
21
+ export declare function createCalendarWithRelationsAsync(calendar: CalendarInput, options?: CreateCalendarOptions): Promise<CalendarWithRelationsResult>;
22
+ /**
23
+ * Calendar body update, then same member + opening-hour saves as create (Apex-style follow-up).
24
+ * For member add/remove *diffs* against existing DB membership, use server-side Apex; this client
25
+ * only performs additive Blazeo calls matching the payload.
26
+ */
27
+ export declare function updateCalendarWithRelationsAsync(calendar: CalendarInput, options?: CreateCalendarOptions): Promise<CalendarWithRelationsResult>;
28
+ /**
29
+ * Facade aligned with `CalendarCreationAPIFacade`: create/update with members & opening hours,
30
+ * or delete calendar only.
31
+ */
32
+ export declare class CalendarCreationFacade {
33
+ static createWithRelationsAsync: typeof createCalendarWithRelationsAsync;
34
+ static updateWithRelationsAsync: typeof updateCalendarWithRelationsAsync;
35
+ static deleteCalendarAsync: typeof deleteCalendarAsync;
36
+ }
37
+ //# sourceMappingURL=calendarCreationFacade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendarCreationFacade.d.ts","sourceRoot":"","sources":["../../src/calendar/calendarCreationFacade.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EACb,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAGL,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAiB7B;;;;GAIG;AACH,wBAAgB,kCAAkC,CAChD,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,aAAa,EAAE,GAAG,SAAS,GACnC,MAAM,GAAG,SAAS,CAMpB;AAgBD,MAAM,MAAM,4BAA4B,GAAG,qBAAqB,GAAG;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GACnC,4BAA4B,GAC5B,OAAO,CAAC,oBAAoB,EAAE;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAEjD;;;;GAIG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAwBtC;AA0FD;;;;GAIG;AACH,wBAAsB,gCAAgC,CACpD,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,2BAA2B,CAAC,CAwBtC;AAED;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,MAAM,CAAC,wBAAwB,0CAAoC;IACnE,MAAM,CAAC,wBAAwB,0CAAoC;IACnE,MAAM,CAAC,mBAAmB,6BAAuB;CAClD"}
@@ -0,0 +1,174 @@
1
+ import { getSnapshot } from "mobx-state-tree";
2
+ import { addParticipantToCalendar, saveCalendarOpeningHour, } from "./blazeoCalendarRelationMethods.js";
3
+ import { createCalendarAsync, updateCalendarAsync, deleteCalendarAsync, } from "./createCalendar.js";
4
+ function isFailureStatus(res) {
5
+ return res.status !== "success" && res.status !== "Success";
6
+ }
7
+ function normalizeParticipantGuid(id) {
8
+ if (id == null || !String(id).trim())
9
+ return undefined;
10
+ return String(id).trim().replace(/^\{|\}$/g, "");
11
+ }
12
+ function newOpeningHourId() {
13
+ const c = globalThis.crypto;
14
+ if (c?.randomUUID)
15
+ return c.randomUUID();
16
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
17
+ }
18
+ /**
19
+ * Resolves Blazeo `participantId` for an opening-hour row: explicit `participantId`,
20
+ * or lookup by `member` id in `members` (Apex `ThirdPartyMemberId`), matching
21
+ * `CalendarCreationAPIFacade.SaveOpeningHours`.
22
+ */
23
+ export function resolveParticipantIdForOpeningHour(openingHour, members) {
24
+ const direct = normalizeParticipantGuid(openingHour.participantId);
25
+ if (direct)
26
+ return direct;
27
+ if (!members?.length || openingHour.member == null)
28
+ return undefined;
29
+ const row = members.find((m) => m.id === openingHour.member);
30
+ return normalizeParticipantGuid(row?.thirdPartyMemberId);
31
+ }
32
+ function effectiveCalendarId(calendarNode, input) {
33
+ const snap = getSnapshot(calendarNode);
34
+ const fromNode = snap.calendarId?.trim();
35
+ if (fromNode && fromNode !== "new")
36
+ return fromNode;
37
+ return (input.thirdPartyCalendarId?.trim() ||
38
+ input.calendarId?.trim() ||
39
+ undefined);
40
+ }
41
+ /**
42
+ * Orchestrates the same steps as Apex `CalendarCreationAPIFacade.CreateCalendarAsync`:
43
+ * save calendar (`POST /Calendar/Create`), then add participants, then save opening hours
44
+ * per day (`POST /Calendar/Participant/Availability/OpeningHour/Save`).
45
+ */
46
+ export async function createCalendarWithRelationsAsync(calendar, options = {}) {
47
+ const hasMembers = (calendar.members?.length ?? 0) > 0;
48
+ const hasHours = (calendar.openingHours?.length ?? 0) > 0;
49
+ if (!hasMembers && !hasHours) {
50
+ const r = await createCalendarAsync(calendar, options);
51
+ if (!r.ok)
52
+ return r;
53
+ return { ...r, membersAdded: 0, openingHoursSaved: 0 };
54
+ }
55
+ if (options.localOnly) {
56
+ const r = await createCalendarAsync(calendar, options);
57
+ if (!r.ok)
58
+ return r;
59
+ return { ...r, membersAdded: 0, openingHoursSaved: 0 };
60
+ }
61
+ const created = await createCalendarAsync(calendar, options);
62
+ if (!created.ok)
63
+ return created;
64
+ return runMembersAndOpeningHoursAfterCalendarSave(calendar, created.calendar, created);
65
+ }
66
+ /**
67
+ * After calendar `create` or `update`, add members and opening hours (same order as Apex facade).
68
+ */
69
+ async function runMembersAndOpeningHoursAfterCalendarSave(calendar, calendarNode, baseSuccess) {
70
+ const calendarIdStr = effectiveCalendarId(calendarNode, calendar);
71
+ if (!calendarIdStr) {
72
+ return {
73
+ ok: false,
74
+ error: "Could not resolve calendar id after save. Ensure the API returned a calendar id.",
75
+ };
76
+ }
77
+ let membersAdded = 0;
78
+ for (const m of calendar.members ?? []) {
79
+ const pid = normalizeParticipantGuid(m.thirdPartyMemberId);
80
+ if (!pid) {
81
+ return {
82
+ ok: false,
83
+ error: `Member id ${m.id}: thirdPartyMemberId is required to add a participant.`,
84
+ };
85
+ }
86
+ const res = await addParticipantToCalendar(calendarNode, pid);
87
+ if (isFailureStatus(res)) {
88
+ const msg = res.message ??
89
+ (typeof res.data === "string" ? res.data : undefined) ??
90
+ JSON.stringify(res);
91
+ return {
92
+ ok: false,
93
+ error: `addParticipant failed for member ${m.id}: ${msg}`,
94
+ apiResponse: res,
95
+ };
96
+ }
97
+ membersAdded += 1;
98
+ }
99
+ let openingHoursSaved = 0;
100
+ for (const oh of calendar.openingHours ?? []) {
101
+ const participantId = resolveParticipantIdForOpeningHour(oh, calendar.members);
102
+ if (!participantId) {
103
+ return {
104
+ ok: false,
105
+ error: `Opening hour id ${oh.id}: set participantId or a matching member with thirdPartyMemberId.`,
106
+ };
107
+ }
108
+ for (const day of oh.days ?? []) {
109
+ const payload = {
110
+ calendarId: calendarIdStr,
111
+ participantId,
112
+ day,
113
+ startHour: oh.startHour,
114
+ startMinute: oh.startMinute,
115
+ endHour: oh.endHour,
116
+ endMinute: oh.endMinute,
117
+ off: oh.off,
118
+ openingHourId: oh.openingHourId?.trim() || newOpeningHourId(),
119
+ };
120
+ const res = await saveCalendarOpeningHour(calendarNode, payload);
121
+ if (isFailureStatus(res)) {
122
+ const msg = res.message ??
123
+ (typeof res.data === "string" ? res.data : undefined) ??
124
+ JSON.stringify(res);
125
+ return {
126
+ ok: false,
127
+ error: `saveOpeningHour failed (opening hour ${oh.id}, day ${day}): ${msg}`,
128
+ apiResponse: res,
129
+ };
130
+ }
131
+ openingHoursSaved += 1;
132
+ }
133
+ }
134
+ return {
135
+ ...baseSuccess,
136
+ membersAdded,
137
+ openingHoursSaved,
138
+ };
139
+ }
140
+ /**
141
+ * Calendar body update, then same member + opening-hour saves as create (Apex-style follow-up).
142
+ * For member add/remove *diffs* against existing DB membership, use server-side Apex; this client
143
+ * only performs additive Blazeo calls matching the payload.
144
+ */
145
+ export async function updateCalendarWithRelationsAsync(calendar, options = {}) {
146
+ const hasMembers = (calendar.members?.length ?? 0) > 0;
147
+ const hasHours = (calendar.openingHours?.length ?? 0) > 0;
148
+ if (!hasMembers && !hasHours) {
149
+ const r = await updateCalendarAsync(calendar, options);
150
+ if (!r.ok)
151
+ return r;
152
+ return { ...r, membersAdded: 0, openingHoursSaved: 0 };
153
+ }
154
+ if (options.localOnly) {
155
+ const r = await updateCalendarAsync(calendar, options);
156
+ if (!r.ok)
157
+ return r;
158
+ return { ...r, membersAdded: 0, openingHoursSaved: 0 };
159
+ }
160
+ const updated = await updateCalendarAsync(calendar, options);
161
+ if (!updated.ok)
162
+ return updated;
163
+ return runMembersAndOpeningHoursAfterCalendarSave(calendar, updated.calendar, updated);
164
+ }
165
+ /**
166
+ * Facade aligned with `CalendarCreationAPIFacade`: create/update with members & opening hours,
167
+ * or delete calendar only.
168
+ */
169
+ export class CalendarCreationFacade {
170
+ static createWithRelationsAsync = createCalendarWithRelationsAsync;
171
+ static updateWithRelationsAsync = updateCalendarWithRelationsAsync;
172
+ static deleteCalendarAsync = deleteCalendarAsync;
173
+ }
174
+ //# sourceMappingURL=calendarCreationFacade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendarCreationFacade.js","sourceRoot":"","sources":["../../src/calendar/calendarCreationFacade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { IStateTreeNode } from "mobx-state-tree";
2
+ import type { CalendarInput } from "../types/calendar.js";
3
+ export type CreateCalendarOptions = {
4
+ /** Overrides packaged defaults / global `configure` when set. */
5
+ baseUrl?: string;
6
+ consumer?: string;
7
+ /**
8
+ * When true, only builds the MST `Calendar` node (no HTTP).
9
+ * Default false: calls `calendar.create()` → POST `/Calendar/Create`.
10
+ */
11
+ localOnly?: boolean;
12
+ };
13
+ /** Typical Blazeo `reqPost` / `calendar.create()` result shape. */
14
+ export type BlazeoCalendarCreateResponse = {
15
+ status: string;
16
+ message?: string;
17
+ data?: unknown;
18
+ };
19
+ export type CreateCalendarSuccess = {
20
+ ok: true;
21
+ calendar: IStateTreeNode;
22
+ apiResponse?: BlazeoCalendarCreateResponse;
23
+ };
24
+ export type CreateCalendarFailure = {
25
+ ok: false;
26
+ error: string;
27
+ apiResponse?: BlazeoCalendarCreateResponse;
28
+ };
29
+ export type CreateCalendarResult = CreateCalendarSuccess | CreateCalendarFailure;
30
+ /** Merge per-call options with global Blazeo config (defaults file + `configure`). */
31
+ export declare function resolveBlazeoConnection(options?: CreateCalendarOptions): {
32
+ baseUrl?: string;
33
+ consumer?: string;
34
+ };
35
+ /** Shared MST `env` for Blazeo models (`Calendar`, `Event`, …). */
36
+ export declare function buildModelEnv(baseUrl: string | undefined, consumer: string | undefined, forLocalOnly: boolean): Record<string, unknown>;
37
+ /**
38
+ * Uses {@link resolveBlazeoConnection} (defaults + `configure` + optional overrides),
39
+ * then `CalendarModel.create` and `calendar.create()` unless `localOnly`.
40
+ */
41
+ export declare function createCalendarAsync(calendar: CalendarInput, options?: CreateCalendarOptions): Promise<CreateCalendarResult>;
42
+ /**
43
+ * Uses {@link resolveBlazeoConnection}, builds a `Calendar` node from {@link mapCalendarBOToSnapshot},
44
+ * then `calendar.update()` → POST `/Calendar/Event/Update` unless `localOnly`.
45
+ */
46
+ export declare function updateCalendarAsync(calendar: CalendarInput, options?: CreateCalendarOptions): Promise<CreateCalendarResult>;
47
+ /**
48
+ * Removes a calendar via `calendar.remove()` → GET `/Calendar/Remove?calendar_id=…`.
49
+ */
50
+ export declare function deleteCalendarAsync(calendarId: string, options?: CreateCalendarOptions): Promise<CreateCalendarResult>;
51
+ //# sourceMappingURL=createCalendar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCalendar.d.ts","sourceRoot":"","sources":["../../src/calendar/createCalendar.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAY1D,MAAM,MAAM,qBAAqB,GAAG;IAClC,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,4BAA4B,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,4BAA4B,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,qBAAqB,GAAG,qBAAqB,CAAC;AAMjF,sFAAsF;AACtF,wBAAgB,uBAAuB,CAAC,OAAO,GAAE,qBAA0B,GAAG;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAgBA;AAED,mEAAmE;AACnE,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,YAAY,EAAE,OAAO,GACpB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0BzB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CA8D/B;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAuE/B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAkE/B"}
@@ -0,0 +1,208 @@
1
+ import { CalendarModel, configure, getConfig } from "@blazeo.com/calendar-client";
2
+ import { blazeoClientConfig } from "../config/blazeoClientDefaults.js";
3
+ import { mapCalendarBOToSnapshot } from "./mapCalendarToBlazeoSnapshot.js";
4
+ function isFailureStatus(res) {
5
+ return res.status !== "success" && res.status !== "Success";
6
+ }
7
+ /** Merge per-call options with global Blazeo config (defaults file + `configure`). */
8
+ export function resolveBlazeoConnection(options = {}) {
9
+ const cfg = getConfig();
10
+ const fromFileBase = blazeoClientConfig.baseUrl?.trim().replace(/\/+$/, "");
11
+ const fromFileConsumer = blazeoClientConfig.consumer?.trim();
12
+ const baseUrl = options.baseUrl?.trim().replace(/\/+$/, "") ||
13
+ cfg?.baseUrl?.replace(/\/+$/, "") ||
14
+ (fromFileBase || undefined);
15
+ const consumer = options.consumer?.trim() ||
16
+ cfg?.consumer ||
17
+ (fromFileConsumer || undefined);
18
+ return { baseUrl, consumer };
19
+ }
20
+ /** Shared MST `env` for Blazeo models (`Calendar`, `Event`, …). */
21
+ export function buildModelEnv(baseUrl, consumer, forLocalOnly) {
22
+ if (forLocalOnly && !baseUrl) {
23
+ return {};
24
+ }
25
+ const cfg = getConfig();
26
+ const env = {};
27
+ if (baseUrl) {
28
+ env.baseUrl = baseUrl;
29
+ }
30
+ else if (cfg?.baseUrl) {
31
+ env.baseUrl = cfg.baseUrl;
32
+ }
33
+ if (consumer) {
34
+ env.consumer = consumer;
35
+ }
36
+ else if (cfg?.consumer) {
37
+ env.consumer = cfg.consumer;
38
+ }
39
+ if (cfg?.fetch != null)
40
+ env.fetch = cfg.fetch;
41
+ if (cfg?.getDefaultOffset != null) {
42
+ env.getDefaultOffset = cfg.getDefaultOffset;
43
+ }
44
+ return env;
45
+ }
46
+ /**
47
+ * Uses {@link resolveBlazeoConnection} (defaults + `configure` + optional overrides),
48
+ * then `CalendarModel.create` and `calendar.create()` unless `localOnly`.
49
+ */
50
+ export async function createCalendarAsync(calendar, options = {}) {
51
+ try {
52
+ const { baseUrl: resolvedBase, consumer: resolvedConsumer } = resolveBlazeoConnection(options);
53
+ if (resolvedBase) {
54
+ configure({
55
+ baseUrl: resolvedBase,
56
+ ...(resolvedConsumer ? { consumer: resolvedConsumer } : {}),
57
+ });
58
+ }
59
+ const baseUrl = resolvedBase;
60
+ const consumer = resolvedConsumer;
61
+ if (!options.localOnly && !baseUrl) {
62
+ return {
63
+ ok: false,
64
+ error: "baseUrl is missing. Set `blazeoClientConfig.baseUrl` in `appointment-client/src/config/blazeoClientDefaults.ts` or call `configure({ baseUrl })`.",
65
+ };
66
+ }
67
+ const snapshot = mapCalendarBOToSnapshot(calendar);
68
+ const env = buildModelEnv(baseUrl, consumer, Boolean(options.localOnly));
69
+ if (!options.localOnly && env.baseUrl == null) {
70
+ return {
71
+ ok: false,
72
+ error: "Model env requires baseUrl. Set `blazeoClientConfig` or pass `baseUrl` in options.",
73
+ };
74
+ }
75
+ const calendarNode = CalendarModel.create(snapshot, env);
76
+ if (options.localOnly) {
77
+ return { ok: true, calendar: calendarNode };
78
+ }
79
+ const apiRes = await calendarNode.create();
80
+ if (isFailureStatus(apiRes)) {
81
+ const msg = apiRes.message ??
82
+ (typeof apiRes.data === "string" ? apiRes.data : undefined) ??
83
+ JSON.stringify(apiRes);
84
+ return {
85
+ ok: false,
86
+ error: msg || "Calendar create failed",
87
+ apiResponse: apiRes,
88
+ };
89
+ }
90
+ return { ok: true, calendar: calendarNode, apiResponse: apiRes };
91
+ }
92
+ catch (err) {
93
+ const message = err instanceof Error ? err.message : String(err);
94
+ return { ok: false, error: message };
95
+ }
96
+ }
97
+ /**
98
+ * Uses {@link resolveBlazeoConnection}, builds a `Calendar` node from {@link mapCalendarBOToSnapshot},
99
+ * then `calendar.update()` → POST `/Calendar/Event/Update` unless `localOnly`.
100
+ */
101
+ export async function updateCalendarAsync(calendar, options = {}) {
102
+ try {
103
+ const { baseUrl: resolvedBase, consumer: resolvedConsumer } = resolveBlazeoConnection(options);
104
+ if (resolvedBase) {
105
+ configure({
106
+ baseUrl: resolvedBase,
107
+ ...(resolvedConsumer ? { consumer: resolvedConsumer } : {}),
108
+ });
109
+ }
110
+ const baseUrl = resolvedBase;
111
+ const consumer = resolvedConsumer;
112
+ const snapshot = mapCalendarBOToSnapshot(calendar);
113
+ const calendarIdVal = snapshot.calendarId;
114
+ if (!options.localOnly && (!calendarIdVal || calendarIdVal === "new")) {
115
+ return {
116
+ ok: false,
117
+ error: "calendarId is required for update. Pass an existing id (not 'new').",
118
+ };
119
+ }
120
+ if (!options.localOnly && !baseUrl) {
121
+ return {
122
+ ok: false,
123
+ error: "baseUrl is missing. Set `blazeoClientConfig.baseUrl` in `appointment-client/src/config/blazeoClientDefaults.ts` or call `configure({ baseUrl })`.",
124
+ };
125
+ }
126
+ const env = buildModelEnv(baseUrl, consumer, Boolean(options.localOnly));
127
+ if (!options.localOnly && env.baseUrl == null) {
128
+ return {
129
+ ok: false,
130
+ error: "Model env requires baseUrl. Set `blazeoClientConfig` or pass `baseUrl` in options.",
131
+ };
132
+ }
133
+ const calendarNode = CalendarModel.create(snapshot, env);
134
+ if (options.localOnly) {
135
+ return { ok: true, calendar: calendarNode };
136
+ }
137
+ const apiRes = await calendarNode.update();
138
+ if (isFailureStatus(apiRes)) {
139
+ const msg = apiRes.message ??
140
+ (typeof apiRes.data === "string" ? apiRes.data : undefined) ??
141
+ JSON.stringify(apiRes);
142
+ return {
143
+ ok: false,
144
+ error: msg || "Calendar update failed",
145
+ apiResponse: apiRes,
146
+ };
147
+ }
148
+ return { ok: true, calendar: calendarNode, apiResponse: apiRes };
149
+ }
150
+ catch (err) {
151
+ const message = err instanceof Error ? err.message : String(err);
152
+ return { ok: false, error: message };
153
+ }
154
+ }
155
+ /**
156
+ * Removes a calendar via `calendar.remove()` → GET `/Calendar/Remove?calendar_id=…`.
157
+ */
158
+ export async function deleteCalendarAsync(calendarId, options = {}) {
159
+ try {
160
+ const id = calendarId.trim();
161
+ if (!id) {
162
+ return { ok: false, error: "calendarId is required for delete." };
163
+ }
164
+ const { baseUrl: resolvedBase, consumer: resolvedConsumer } = resolveBlazeoConnection(options);
165
+ if (resolvedBase) {
166
+ configure({
167
+ baseUrl: resolvedBase,
168
+ ...(resolvedConsumer ? { consumer: resolvedConsumer } : {}),
169
+ });
170
+ }
171
+ const baseUrl = resolvedBase;
172
+ const consumer = resolvedConsumer;
173
+ if (!options.localOnly && !baseUrl) {
174
+ return {
175
+ ok: false,
176
+ error: "baseUrl is missing. Set `blazeoClientConfig.baseUrl` in `appointment-client/src/config/blazeoClientDefaults.ts` or call `configure({ baseUrl })`.",
177
+ };
178
+ }
179
+ const env = buildModelEnv(baseUrl, consumer, Boolean(options.localOnly));
180
+ if (!options.localOnly && env.baseUrl == null) {
181
+ return {
182
+ ok: false,
183
+ error: "Model env requires baseUrl. Set `blazeoClientConfig` or pass `baseUrl` in options.",
184
+ };
185
+ }
186
+ const calendarNode = CalendarModel.create({ calendarId: id }, env);
187
+ if (options.localOnly) {
188
+ return { ok: true, calendar: calendarNode };
189
+ }
190
+ const apiRes = await calendarNode.remove();
191
+ if (isFailureStatus(apiRes)) {
192
+ const msg = apiRes.message ??
193
+ (typeof apiRes.data === "string" ? apiRes.data : undefined) ??
194
+ JSON.stringify(apiRes);
195
+ return {
196
+ ok: false,
197
+ error: msg || "Calendar delete failed",
198
+ apiResponse: apiRes,
199
+ };
200
+ }
201
+ return { ok: true, calendar: calendarNode, apiResponse: apiRes };
202
+ }
203
+ catch (err) {
204
+ const message = err instanceof Error ? err.message : String(err);
205
+ return { ok: false, error: message };
206
+ }
207
+ }
208
+ //# sourceMappingURL=createCalendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createCalendar.js","sourceRoot":"","sources":["../../src/calendar/createCalendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { CalendarBOInput } from "../types/calendar.js";
2
+ /**
3
+ * Maps Apex `CalendarBO`-shaped input to a snapshot for
4
+ * {@link CalendarModel.create} from `@blazeo.com/calendar-client`.
5
+ *
6
+ * Only fields that exist on Blazeo's `Calendar` model are included so MST does not receive
7
+ * unknown keys or invalid `null`s on optional numbers.
8
+ */
9
+ export declare function mapCalendarBOToSnapshot(bo: CalendarBOInput): Record<string, unknown>;
10
+ //# sourceMappingURL=mapCalendarBoToBlazeoSnapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapCalendarBoToBlazeoSnapshot.d.ts","sourceRoot":"","sources":["../../src/calendar/mapCalendarBoToBlazeoSnapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAc9D;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,eAAe,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BzB"}
@@ -0,0 +1,44 @@
1
+ /** Default enum values aligned with ApexFlows / Blazeo (`AssignmentMethod`, `Unit`). */
2
+ const DEFAULT_ASSIGNMENT_METHOD = 1;
3
+ const DEFAULT_UNIT_MINUTES = 1;
4
+ /**
5
+ * For Blazeo `Calendar` MST: `types.optional(types.number)` accepts `undefined` (uses default)
6
+ * but not `null`. Coerce null/absent to `undefined`.
7
+ */
8
+ function optionalNumber(v) {
9
+ return v == null ? undefined : v;
10
+ }
11
+ /**
12
+ * Maps Apex `CalendarBO`-shaped input to a snapshot for
13
+ * {@link CalendarModel.create} from `@blazeo.com/calendar-client`.
14
+ *
15
+ * Only fields that exist on Blazeo's `Calendar` model are included so MST does not receive
16
+ * unknown keys or invalid `null`s on optional numbers.
17
+ */
18
+ export function mapCalendarBOToSnapshot(bo) {
19
+ const calendarId = bo.calendarId ?? bo.thirdPartyCalendarId ?? "new";
20
+ return {
21
+ id: bo.serverId == null ? undefined : bo.serverId,
22
+ companyKey: bo.companyKey ?? null,
23
+ calendarId,
24
+ name: bo.name ?? null,
25
+ timeZoneId: bo.timeZoneId ?? null,
26
+ purpose: bo.purpose ?? bo.bookingPageTitle ?? "",
27
+ description: bo.description ?? null,
28
+ assignmentMethod: bo.assignmentMethod ?? bo.assignmentType ?? DEFAULT_ASSIGNMENT_METHOD,
29
+ duration: optionalNumber(bo.duration) ?? 30,
30
+ durationUnit: optionalNumber(bo.durationUnit) ?? DEFAULT_UNIT_MINUTES,
31
+ minimumBookingNotice: optionalNumber(bo.minimumBookingNotice) ?? 0,
32
+ minimumBookingNoticeUnit: optionalNumber(bo.minimumBookingNoticeUnit) ?? DEFAULT_UNIT_MINUTES,
33
+ minimumCancelationNotice: optionalNumber(bo.minimumCancelationNotice) ?? 0,
34
+ minimumCancelationNoticeUnit: optionalNumber(bo.minimumCancelationNoticeUnit) ?? DEFAULT_UNIT_MINUTES,
35
+ futureLimit: optionalNumber(bo.futureLimit) ?? 0,
36
+ futureLimitUnit: optionalNumber(bo.futureLimitUnit) ?? 3,
37
+ bufferTime: optionalNumber(bo.bufferTime),
38
+ bufferTimeUnit: optionalNumber(bo.bufferTimeUnit) ?? DEFAULT_UNIT_MINUTES,
39
+ bookingLimit: optionalNumber(bo.bookingLimit),
40
+ createdOn: bo.createdOn ?? null,
41
+ modifiedOn: bo.modifiedOn ?? null,
42
+ };
43
+ }
44
+ //# sourceMappingURL=mapCalendarBoToBlazeoSnapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapCalendarBoToBlazeoSnapshot.js","sourceRoot":"","sources":["../../src/calendar/mapCalendarBoToBlazeoSnapshot.ts"],"names":[],"mappings":"AAEA,wFAAwF;AACxF,MAAM,yBAAyB,GAAG,CAAC,CAAC;AACpC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAE/B;;;GAGG;AACH,SAAS,cAAc,CAAC,CAA4B;IAClD,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,EAAmB;IAEnB,MAAM,UAAU,GACd,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,oBAAoB,IAAI,KAAK,CAAC;IAEpD,OAAO;QACL,EAAE,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ;QACjD,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI;QACjC,UAAU;QACV,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,IAAI;QACrB,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI;QACjC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,gBAAgB,IAAI,EAAE;QAChD,WAAW,EAAE,EAAE,CAAC,WAAW,IAAI,IAAI;QACnC,gBAAgB,EACd,EAAE,CAAC,gBAAgB,IAAI,EAAE,CAAC,cAAc,IAAI,yBAAyB;QACvE,QAAQ,EAAE,cAAc,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE;QAC3C,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,oBAAoB;QACrE,oBAAoB,EAAE,cAAc,CAAC,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC;QAClE,wBAAwB,EACtB,cAAc,CAAC,EAAE,CAAC,wBAAwB,CAAC,IAAI,oBAAoB;QACrE,wBAAwB,EAAE,cAAc,CAAC,EAAE,CAAC,wBAAwB,CAAC,IAAI,CAAC;QAC1E,4BAA4B,EAC1B,cAAc,CAAC,EAAE,CAAC,4BAA4B,CAAC,IAAI,oBAAoB;QACzE,WAAW,EAAE,cAAc,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC;QAChD,eAAe,EAAE,cAAc,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC;QACxD,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC,UAAU,CAAC;QACzC,cAAc,EAAE,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,oBAAoB;QACzE,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC,YAAY,CAAC;QAC7C,SAAS,EAAE,EAAE,CAAC,SAAS,IAAI,IAAI;QAC/B,UAAU,EAAE,EAAE,CAAC,UAAU,IAAI,IAAI;KAClC,CAAC;AACJ,CAAC"}