@agent-native/scheduling 0.2.1 → 0.2.2-nightly-20260927023146
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/actions/_helpers.d.ts +0 -13
- package/dist/actions/_helpers.d.ts.map +1 -1
- package/dist/actions/_helpers.js +0 -16
- package/dist/actions/_helpers.js.map +1 -1
- package/dist/actions/create-team.js +0 -1
- package/dist/actions/create-team.js.map +1 -1
- package/dist/actions/list-bookings.js +0 -4
- package/dist/actions/list-bookings.js.map +1 -1
- package/dist/actions/refresh-busy-times.js +0 -1
- package/dist/actions/refresh-busy-times.js.map +1 -1
- package/dist/actions/revoke-private-link.js +0 -2
- package/dist/actions/revoke-private-link.js.map +1 -1
- package/dist/actions/update-profile.js +0 -5
- package/dist/actions/update-profile.js.map +1 -1
- package/dist/core/buffers.d.ts +0 -18
- package/dist/core/buffers.d.ts.map +1 -1
- package/dist/core/buffers.js +0 -6
- package/dist/core/buffers.js.map +1 -1
- package/dist/core/conflicts.d.ts +0 -4
- package/dist/core/conflicts.d.ts.map +1 -1
- package/dist/core/conflicts.js +0 -1
- package/dist/core/conflicts.js.map +1 -1
- package/dist/core/limits.d.ts +0 -8
- package/dist/core/limits.d.ts.map +1 -1
- package/dist/core/limits.js.map +1 -1
- package/dist/core/round-robin.d.ts +0 -17
- package/dist/core/round-robin.d.ts.map +1 -1
- package/dist/core/round-robin.js.map +1 -1
- package/dist/core/rrule.d.ts.map +1 -1
- package/dist/core/rrule.js +0 -7
- package/dist/core/rrule.js.map +1 -1
- package/dist/core/rules.d.ts +0 -17
- package/dist/core/rules.d.ts.map +1 -1
- package/dist/core/rules.js +0 -8
- package/dist/core/rules.js.map +1 -1
- package/dist/core/slots.d.ts +0 -31
- package/dist/core/slots.d.ts.map +1 -1
- package/dist/core/slots.js +0 -9
- package/dist/core/slots.js.map +1 -1
- package/dist/core/time.d.ts +0 -24
- package/dist/core/time.d.ts.map +1 -1
- package/dist/core/time.js +0 -37
- package/dist/core/time.js.map +1 -1
- package/dist/index.d.ts +0 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -10
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +0 -9
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +0 -18
- package/dist/manifest.js.map +1 -1
- package/dist/react/components/SlotPicker.d.ts +0 -8
- package/dist/react/components/SlotPicker.d.ts.map +1 -1
- package/dist/react/components/SlotPicker.js.map +1 -1
- package/dist/react/components/TimezoneSelect.d.ts.map +1 -1
- package/dist/react/components/TimezoneSelect.js +0 -2
- package/dist/react/components/TimezoneSelect.js.map +1 -1
- package/dist/react/components/booking-links/AvailabilityEditor.d.ts +0 -4
- package/dist/react/components/booking-links/AvailabilityEditor.d.ts.map +1 -1
- package/dist/react/components/booking-links/AvailabilityEditor.js +0 -15
- package/dist/react/components/booking-links/AvailabilityEditor.js.map +1 -1
- package/dist/react/components/booking-links/BookingLinkCreateDialog.d.ts +0 -6
- package/dist/react/components/booking-links/BookingLinkCreateDialog.d.ts.map +1 -1
- package/dist/react/components/booking-links/BookingLinkCreateDialog.js +0 -16
- package/dist/react/components/booking-links/BookingLinkCreateDialog.js.map +1 -1
- package/dist/react/components/booking-links/ConferencingSelector.d.ts +0 -2
- package/dist/react/components/booking-links/ConferencingSelector.d.ts.map +1 -1
- package/dist/react/components/booking-links/ConferencingSelector.js +0 -24
- package/dist/react/components/booking-links/ConferencingSelector.js.map +1 -1
- package/dist/react/components/booking-links/CustomFieldsEditor.d.ts +0 -1
- package/dist/react/components/booking-links/CustomFieldsEditor.d.ts.map +1 -1
- package/dist/react/components/booking-links/CustomFieldsEditor.js +0 -14
- package/dist/react/components/booking-links/CustomFieldsEditor.js.map +1 -1
- package/dist/react/components/booking-links/DurationPicker.d.ts +0 -1
- package/dist/react/components/booking-links/DurationPicker.d.ts.map +1 -1
- package/dist/react/components/booking-links/DurationPicker.js +1 -11
- package/dist/react/components/booking-links/DurationPicker.js.map +1 -1
- package/dist/react/components/booking-links/SlugEditor.d.ts +0 -3
- package/dist/react/components/booking-links/SlugEditor.d.ts.map +1 -1
- package/dist/react/components/booking-links/SlugEditor.js +0 -11
- package/dist/react/components/booking-links/SlugEditor.js.map +1 -1
- package/dist/react/components/booking-links/index.d.ts +0 -9
- package/dist/react/components/booking-links/index.d.ts.map +1 -1
- package/dist/react/components/booking-links/index.js +0 -9
- package/dist/react/components/booking-links/index.js.map +1 -1
- package/dist/react/components/index.d.ts +0 -10
- package/dist/react/components/index.d.ts.map +1 -1
- package/dist/react/components/index.js +0 -10
- package/dist/react/components/index.js.map +1 -1
- package/dist/react/hooks/useBookingFlow.d.ts.map +1 -1
- package/dist/react/hooks/useBookingFlow.js +0 -10
- package/dist/react/hooks/useBookingFlow.js.map +1 -1
- package/dist/react/hooks/useEventType.d.ts.map +1 -1
- package/dist/react/hooks/useEventType.js +0 -4
- package/dist/react/hooks/useEventType.js.map +1 -1
- package/dist/react/hooks/useReschedule.d.ts.map +1 -1
- package/dist/react/hooks/useReschedule.js +0 -4
- package/dist/react/hooks/useReschedule.js.map +1 -1
- package/dist/react/hooks/useSlots.d.ts +0 -2
- package/dist/react/hooks/useSlots.d.ts.map +1 -1
- package/dist/react/hooks/useSlots.js +0 -8
- package/dist/react/hooks/useSlots.js.map +1 -1
- package/dist/react/hooks/useTimezone.d.ts.map +1 -1
- package/dist/react/hooks/useTimezone.js +0 -4
- package/dist/react/hooks/useTimezone.js.map +1 -1
- package/dist/react/index.d.ts +0 -5
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +0 -5
- package/dist/react/index.js.map +1 -1
- package/dist/schema/bookings.d.ts +0 -7
- package/dist/schema/bookings.d.ts.map +1 -1
- package/dist/schema/bookings.js +0 -29
- package/dist/schema/bookings.js.map +1 -1
- package/dist/schema/calendar-cache.d.ts.map +1 -1
- package/dist/schema/calendar-cache.js +0 -11
- package/dist/schema/calendar-cache.js.map +1 -1
- package/dist/schema/credentials.d.ts +0 -8
- package/dist/schema/credentials.d.ts.map +1 -1
- package/dist/schema/credentials.js +0 -28
- package/dist/schema/credentials.js.map +1 -1
- package/dist/schema/event-types.d.ts +0 -10
- package/dist/schema/event-types.d.ts.map +1 -1
- package/dist/schema/event-types.js +0 -42
- package/dist/schema/event-types.js.map +1 -1
- package/dist/schema/index.d.ts +0 -11
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +0 -11
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/routing-forms.d.ts.map +1 -1
- package/dist/schema/routing-forms.js +0 -17
- package/dist/schema/routing-forms.js.map +1 -1
- package/dist/schema/schedules.d.ts +0 -12
- package/dist/schema/schedules.d.ts.map +1 -1
- package/dist/schema/schedules.js +0 -25
- package/dist/schema/schedules.js.map +1 -1
- package/dist/schema/teams.d.ts.map +1 -1
- package/dist/schema/teams.js +0 -7
- package/dist/schema/teams.js.map +1 -1
- package/dist/schema/workflows.d.ts +0 -7
- package/dist/schema/workflows.d.ts.map +1 -1
- package/dist/schema/workflows.js +0 -19
- package/dist/schema/workflows.js.map +1 -1
- package/dist/server/availability-engine.d.ts +0 -12
- package/dist/server/availability-engine.d.ts.map +1 -1
- package/dist/server/availability-engine.js +0 -20
- package/dist/server/availability-engine.js.map +1 -1
- package/dist/server/booking-service.d.ts +0 -14
- package/dist/server/booking-service.d.ts.map +1 -1
- package/dist/server/booking-service.js +0 -8
- package/dist/server/booking-service.js.map +1 -1
- package/dist/server/bookings-repo.d.ts +0 -7
- package/dist/server/bookings-repo.d.ts.map +1 -1
- package/dist/server/bookings-repo.js +0 -3
- package/dist/server/bookings-repo.js.map +1 -1
- package/dist/server/context.d.ts +0 -16
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js.map +1 -1
- package/dist/server/db-types.d.ts +0 -11
- package/dist/server/db-types.d.ts.map +1 -1
- package/dist/server/event-types-repo.d.ts +0 -10
- package/dist/server/event-types-repo.d.ts.map +1 -1
- package/dist/server/event-types-repo.js +0 -21
- package/dist/server/event-types-repo.js.map +1 -1
- package/dist/server/hooks.d.ts.map +1 -1
- package/dist/server/hooks.js +0 -11
- package/dist/server/hooks.js.map +1 -1
- package/dist/server/ics.d.ts +0 -7
- package/dist/server/ics.d.ts.map +1 -1
- package/dist/server/ics.js.map +1 -1
- package/dist/server/providers/builtin-video.d.ts +0 -5
- package/dist/server/providers/builtin-video.d.ts.map +1 -1
- package/dist/server/providers/builtin-video.js.map +1 -1
- package/dist/server/providers/google-calendar.d.ts +0 -3
- package/dist/server/providers/google-calendar.d.ts.map +1 -1
- package/dist/server/providers/google-calendar.js +0 -2
- package/dist/server/providers/google-calendar.js.map +1 -1
- package/dist/server/providers/google-meet.d.ts +0 -7
- package/dist/server/providers/google-meet.d.ts.map +1 -1
- package/dist/server/providers/google-meet.js.map +1 -1
- package/dist/server/providers/office365.d.ts +0 -6
- package/dist/server/providers/office365.d.ts.map +1 -1
- package/dist/server/providers/office365.js.map +1 -1
- package/dist/server/providers/registry.d.ts +0 -4
- package/dist/server/providers/registry.d.ts.map +1 -1
- package/dist/server/providers/registry.js.map +1 -1
- package/dist/server/providers/teams.d.ts +0 -6
- package/dist/server/providers/teams.d.ts.map +1 -1
- package/dist/server/providers/teams.js +0 -2
- package/dist/server/providers/teams.js.map +1 -1
- package/dist/server/providers/types.d.ts +0 -27
- package/dist/server/providers/types.d.ts.map +1 -1
- package/dist/server/providers/zoom.d.ts +0 -19
- package/dist/server/providers/zoom.d.ts.map +1 -1
- package/dist/server/providers/zoom.js +0 -2
- package/dist/server/providers/zoom.js.map +1 -1
- package/dist/server/schedules-repo.d.ts.map +1 -1
- package/dist/server/schedules-repo.js +0 -4
- package/dist/server/schedules-repo.js.map +1 -1
- package/dist/server/video-oauth-state.d.ts +0 -5
- package/dist/server/video-oauth-state.d.ts.map +1 -1
- package/dist/server/video-oauth-state.js +1 -9
- package/dist/server/video-oauth-state.js.map +1 -1
- package/dist/server/video-oauth.d.ts +0 -4
- package/dist/server/video-oauth.d.ts.map +1 -1
- package/dist/server/video-oauth.js +0 -23
- package/dist/server/video-oauth.js.map +1 -1
- package/dist/shared/index.d.ts +0 -37
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +0 -4
- package/dist/shared/index.js.map +1 -1
- package/package.json +4 -4
- package/src/actions/_helpers.ts +0 -16
- package/src/actions/booking-authz.spec.ts +0 -6
- package/src/actions/create-team.ts +0 -1
- package/src/actions/event-type-authz.spec.ts +0 -11
- package/src/actions/list-bookings.ts +0 -4
- package/src/actions/refresh-busy-times.ts +0 -1
- package/src/actions/revoke-private-link.ts +0 -2
- package/src/actions/update-profile.ts +0 -5
- package/src/core/buffers.ts +0 -18
- package/src/core/conflicts.ts +0 -4
- package/src/core/limits.ts +0 -8
- package/src/core/round-robin.test.ts +0 -1
- package/src/core/round-robin.ts +0 -17
- package/src/core/rrule.ts +0 -7
- package/src/core/rules.ts +0 -17
- package/src/core/slots.test.ts +1 -11
- package/src/core/slots.ts +0 -40
- package/src/core/time.ts +0 -37
- package/src/index.ts +0 -11
- package/src/manifest.ts +0 -19
- package/src/react/components/SlotPicker.tsx +0 -8
- package/src/react/components/TimezoneSelect.tsx +0 -2
- package/src/react/components/_shadcn-shims.d.ts +0 -35
- package/src/react/components/booking-links/AvailabilityEditor.tsx +0 -15
- package/src/react/components/booking-links/BookingLinkCreateDialog.tsx +0 -22
- package/src/react/components/booking-links/ConferencingSelector.tsx +0 -26
- package/src/react/components/booking-links/CustomFieldsEditor.tsx +0 -15
- package/src/react/components/booking-links/DurationPicker.tsx +1 -12
- package/src/react/components/booking-links/SlugEditor.tsx +0 -14
- package/src/react/components/booking-links/index.ts +0 -9
- package/src/react/components/index.ts +0 -10
- package/src/react/hooks/useBookingFlow.ts +0 -10
- package/src/react/hooks/useEventType.ts +0 -4
- package/src/react/hooks/useReschedule.ts +0 -4
- package/src/react/hooks/useSlots.ts +0 -10
- package/src/react/hooks/useTimezone.ts +0 -4
- package/src/react/index.ts +0 -5
- package/src/schema/bookings.ts +0 -29
- package/src/schema/calendar-cache.ts +0 -11
- package/src/schema/credentials.ts +0 -28
- package/src/schema/event-types.ts +0 -42
- package/src/schema/index.ts +0 -11
- package/src/schema/routing-forms.ts +0 -17
- package/src/schema/schedules.ts +0 -25
- package/src/schema/teams.ts +0 -7
- package/src/schema/workflows.ts +0 -19
- package/src/server/availability-engine.test.ts +0 -1
- package/src/server/availability-engine.ts +0 -22
- package/src/server/booking-service.spec.ts +0 -15
- package/src/server/booking-service.ts +0 -22
- package/src/server/bookings-repo.ts +0 -10
- package/src/server/context.ts +0 -16
- package/src/server/db-types.ts +0 -11
- package/src/server/event-types-repo.ts +0 -31
- package/src/server/hooks.ts +0 -11
- package/src/server/ics.ts +0 -7
- package/src/server/providers/builtin-video.ts +0 -5
- package/src/server/providers/google-calendar.ts +0 -5
- package/src/server/providers/google-meet.ts +0 -7
- package/src/server/providers/office365.ts +0 -6
- package/src/server/providers/registry.ts +0 -4
- package/src/server/providers/teams.ts +0 -8
- package/src/server/providers/types.ts +0 -27
- package/src/server/providers/zoom.ts +0 -21
- package/src/server/schedules-repo.ts +0 -4
- package/src/server/video-oauth-state.ts +1 -10
- package/src/server/video-oauth.ts +0 -23
- package/src/shared/index.ts +0 -38
|
@@ -1,22 +1,9 @@
|
|
|
1
1
|
export declare function currentUserEmail(): string;
|
|
2
2
|
export declare function currentUserEmailOrNull(): string | null;
|
|
3
|
-
/**
|
|
4
|
-
* Verify the current user is the host of a booking. Throws "Not authorized to
|
|
5
|
-
* <action>" if not. Mirrors the `isHost` half of the `isHost || hasToken`
|
|
6
|
-
* guard used by cancel-booking/reschedule-booking, for booking actions that
|
|
7
|
-
* don't accept a public capability token (attendee/note/status mutations —
|
|
8
|
-
* host identity is the only legitimate caller for these).
|
|
9
|
-
*/
|
|
10
3
|
export declare function assertBookingHost(booking: {
|
|
11
4
|
hostEmail: string;
|
|
12
5
|
}, action: string): void;
|
|
13
6
|
export declare function currentOrgId(): string | undefined;
|
|
14
7
|
export declare function assertTeamAdmin(teamId: string): Promise<void>;
|
|
15
|
-
/**
|
|
16
|
-
* Verify the current user is a member of the team (any role). Read-only
|
|
17
|
-
* team resource listings should gate on this so that team IDs cannot be
|
|
18
|
-
* enumerated by guessing. Throws "Not authenticated" if there is no
|
|
19
|
-
* current user, and "Forbidden" if the user is not a member.
|
|
20
|
-
*/
|
|
21
8
|
export declare function assertTeamMember(teamId: string): Promise<void>;
|
|
22
9
|
//# sourceMappingURL=_helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_helpers.d.ts","sourceRoot":"","sources":["../../src/actions/_helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"_helpers.d.ts","sourceRoot":"","sources":["../../src/actions/_helpers.ts"],"names":[],"mappings":"AAIA,wBAAgB,gBAAgB,IAAI,MAAM,CAIzC;AAED,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC9B,MAAM,EAAE,MAAM,GACb,IAAI,CAMN;AAED,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBnE;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBpE"}
|
package/dist/actions/_helpers.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared helpers for actions in this package.
|
|
3
|
-
*/
|
|
4
1
|
import { and, eq } from "drizzle-orm";
|
|
5
2
|
import { getSchedulingContext } from "../server/context.js";
|
|
6
3
|
export function currentUserEmail() {
|
|
@@ -12,13 +9,6 @@ export function currentUserEmail() {
|
|
|
12
9
|
export function currentUserEmailOrNull() {
|
|
13
10
|
return getSchedulingContext().getCurrentUserEmail() ?? null;
|
|
14
11
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Verify the current user is the host of a booking. Throws "Not authorized to
|
|
17
|
-
* <action>" if not. Mirrors the `isHost` half of the `isHost || hasToken`
|
|
18
|
-
* guard used by cancel-booking/reschedule-booking, for booking actions that
|
|
19
|
-
* don't accept a public capability token (attendee/note/status mutations —
|
|
20
|
-
* host identity is the only legitimate caller for these).
|
|
21
|
-
*/
|
|
22
12
|
export function assertBookingHost(booking, action) {
|
|
23
13
|
const userEmail = currentUserEmailOrNull();
|
|
24
14
|
const isHost = !!userEmail && userEmail === booking.hostEmail;
|
|
@@ -42,12 +32,6 @@ export async function assertTeamAdmin(teamId) {
|
|
|
42
32
|
throw new Error("Forbidden: team owner or admin required");
|
|
43
33
|
}
|
|
44
34
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Verify the current user is a member of the team (any role). Read-only
|
|
47
|
-
* team resource listings should gate on this so that team IDs cannot be
|
|
48
|
-
* enumerated by guessing. Throws "Not authenticated" if there is no
|
|
49
|
-
* current user, and "Forbidden" if the user is not a member.
|
|
50
|
-
*/
|
|
51
35
|
export async function assertTeamMember(teamId) {
|
|
52
36
|
const { getDb, schema } = getSchedulingContext();
|
|
53
37
|
const email = currentUserEmail();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_helpers.js","sourceRoot":"","sources":["../../src/actions/_helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"_helpers.js","sourceRoot":"","sources":["../../src/actions/_helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,UAAU,gBAAgB;IAC9B,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC,mBAAmB,EAAE,CAAC;IAC3D,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,oBAAoB,EAAE,CAAC,mBAAmB,EAAE,IAAI,IAAI,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAA8B,EAC9B,MAAc;IAEd,MAAM,SAAS,GAAG,sBAAsB,EAAE,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC;IAC9D,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO,oBAAoB,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAc;IAClD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,KAAK,EAAE;SACvB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACzC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;SACxB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CACxC,CACF;SACA,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;IAC3B,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc;IACnD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,KAAK,EAAE;SACvB,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SACzC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;SACxB,KAAK,CACJ,GAAG,CACD,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,EACrC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CACxC,CACF;SACA,KAAK,CAAC,CAAC,CAAC,CAAC;IACZ,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-team.js","sourceRoot":"","sources":["../../src/actions/create-team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE/D,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,mBAAmB;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC3B,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;QACjD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;QACtC,MAAM,KAAK,EAAE;aACV,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;aACpB,MAAM,CAAC;YACN,EAAE;YACF,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI;YACrB,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,UAAU;YACV,KAAK,EAAE,YAAY,EAAE,IAAI,IAAI;SAC9B,CAAC,CAAC;QACL,
|
|
1
|
+
{"version":3,"file":"create-team.js","sourceRoot":"","sources":["../../src/actions/create-team.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE/D,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,mBAAmB;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC3B,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;QACjD,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;QACtC,MAAM,KAAK,EAAE;aACV,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;aACpB,MAAM,CAAC;YACN,EAAE;YACF,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI;YACrB,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,UAAU;YACV,KAAK,EAAE,YAAY,EAAE,IAAI,IAAI;SAC9B,CAAC,CAAC;QACL,MAAM,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;YAC9C,EAAE,EAAE,MAAM,EAAE;YACZ,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,UAAU;YACrB,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE,GAAG;SACd,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IAC5D,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -14,10 +14,6 @@ export default defineAction({
|
|
|
14
14
|
from: z.string().optional(),
|
|
15
15
|
to: z.string().optional(),
|
|
16
16
|
limit: z.number().optional(),
|
|
17
|
-
/**
|
|
18
|
-
* If true, narrow to bookings where you are the host. Defaults to false
|
|
19
|
-
* so org-shared bookings + bookings shared with you appear too.
|
|
20
|
-
*/
|
|
21
17
|
onlyMine: z.boolean().optional().default(false),
|
|
22
18
|
}),
|
|
23
19
|
run: async (args) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-bookings.js","sourceRoot":"","sources":["../../src/actions/list-bookings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,wIAAwI;IAC1I,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;aACnE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;aAC1B,QAAQ,EAAE;QACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B
|
|
1
|
+
{"version":3,"file":"list-bookings.js","sourceRoot":"","sources":["../../src/actions/list-bookings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,wIAAwI;IAC1I,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC;aACN,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;aACnE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;aAC1B,QAAQ,EAAE;QACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAClC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC5B,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;KAChD,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACnC,OAAO;YACL,QAAQ,EAAE,MAAM,YAAY,CAAC;gBAC3B,GAAG,IAAI;gBACP,eAAe,EAAE,IAAI;gBACrB,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aACxC,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -9,7 +9,6 @@ export default defineAction({
|
|
|
9
9
|
run: async (args) => {
|
|
10
10
|
const { getDb, schema } = getSchedulingContext();
|
|
11
11
|
const email = args.userEmail ?? currentUserEmail();
|
|
12
|
-
// Delete cache rows for all of this user's credentials
|
|
13
12
|
const creds = await getDb()
|
|
14
13
|
.select({ id: schema.schedulingCredentials.id })
|
|
15
14
|
.from(schema.schedulingCredentials)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refresh-busy-times.js","sourceRoot":"","sources":["../../src/actions/refresh-busy-times.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,mEAAmE;IACrE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IACtD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACnD,
|
|
1
|
+
{"version":3,"file":"refresh-busy-times.js","sourceRoot":"","sources":["../../src/actions/refresh-busy-times.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,mEAAmE;IACrE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IACtD,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,IAAI,gBAAgB,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,KAAK,EAAE;aACxB,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,qBAAqB,CAAC,EAAE,EAAE,CAAC;aAC/C,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;aAClC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,KAAK,EAAE;iBACV,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;iBAC5B,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;IACvD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -20,8 +20,6 @@ export default defineAction({
|
|
|
20
20
|
await assertAccess("event-type", link.eventTypeId, "editor");
|
|
21
21
|
}
|
|
22
22
|
catch {
|
|
23
|
-
// Keep private-link hashes unprobeable: callers without access receive
|
|
24
|
-
// the same idempotent result as callers presenting an unknown hash.
|
|
25
23
|
return { ok: true };
|
|
26
24
|
}
|
|
27
25
|
await db
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revoke-private-link.js","sourceRoot":"","sources":["../../src/actions/revoke-private-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,8BAA8B;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACtC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;QACjD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;aACpB,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;aACvD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;aACxB,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7C,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,
|
|
1
|
+
{"version":3,"file":"revoke-private-link.js","sourceRoot":"","sources":["../../src/actions/revoke-private-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,8BAA8B;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACtC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;QACjD,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;aACpB,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;aACvD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;aACxB,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;aAC7C,KAAK,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACtB,CAAC;QACD,MAAM,EAAE;aACL,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;aAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACjD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import { currentUserEmail } from "./_helpers.js";
|
|
4
|
-
// Profile data lives in consumer-provided settings (not the scheduling schema);
|
|
5
|
-
// this action delegates to the core `settings` subsystem via a well-known key.
|
|
6
4
|
export default defineAction({
|
|
7
5
|
description: "Update the current user's profile (name, bio, timezone, brand colors, etc.)",
|
|
8
6
|
schema: z.object({
|
|
@@ -17,9 +15,6 @@ export default defineAction({
|
|
|
17
15
|
hideBranding: z.boolean().optional(),
|
|
18
16
|
}),
|
|
19
17
|
run: async (args) => {
|
|
20
|
-
// The consumer template wires a `profile-settings` settings key; we just
|
|
21
|
-
// read/merge/write it. Accessed via dynamic import to avoid a hard dep on
|
|
22
|
-
// the core settings API here (different consumers may use alternate stores).
|
|
23
18
|
const core = await import("@agent-native/core");
|
|
24
19
|
if (core.writeSetting) {
|
|
25
20
|
const existing = (await core.readSetting?.("profile-settings")) ?? {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-profile.js","sourceRoot":"","sources":["../../src/actions/update-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,
|
|
1
|
+
{"version":3,"file":"update-profile.js","sourceRoot":"","sources":["../../src/actions/update-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,6EAA6E;IAC/E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC1B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClD,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC7C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACrC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KACrC,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAClB,MAAM,IAAI,GAAQ,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;YACtE,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE;gBAC1C,GAAI,QAAmB;gBACvB,GAAG,IAAI;aACR,CAAC,CAAC;QACL,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,EAAE,CAAC;IACrD,CAAC;CACF,CAAC,CAAC"}
|
package/dist/core/buffers.d.ts
CHANGED
|
@@ -1,23 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Buffer application.
|
|
3
|
-
*
|
|
4
|
-
* Buffers pad a slot with prep/cool-down time that the host needs but the
|
|
5
|
-
* attendee shouldn't see as part of the meeting. A before-event buffer
|
|
6
|
-
* means the slot reserves extra time before its displayed start; the slot
|
|
7
|
-
* itself is still shown at the true meeting time.
|
|
8
|
-
*
|
|
9
|
-
* The practical effect: a slot [10:00–10:30] with before=10 means the host
|
|
10
|
-
* is considered "busy" from 09:50 to 10:30, so it conflicts with a 09:00–09:50
|
|
11
|
-
* meeting only if THAT meeting also has an after-buffer.
|
|
12
|
-
*/
|
|
13
1
|
import type { BusyInterval } from "../shared/index.js";
|
|
14
|
-
/** Expand a busy interval to include before/after buffers. */
|
|
15
2
|
export declare function applyBuffers(busy: BusyInterval, beforeMinutes: number, afterMinutes: number): BusyInterval;
|
|
16
|
-
/**
|
|
17
|
-
* Expand a proposed slot window (start→end) to include the event type's
|
|
18
|
-
* before/after buffers. The expanded window is what collision detection
|
|
19
|
-
* uses; the displayed slot remains the unexpanded window.
|
|
20
|
-
*/
|
|
21
3
|
export declare function expandSlotForConflictCheck(start: Date, end: Date, beforeMinutes: number, afterMinutes: number): {
|
|
22
4
|
start: Date;
|
|
23
5
|
end: Date;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffers.d.ts","sourceRoot":"","sources":["../../src/core/buffers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"buffers.d.ts","sourceRoot":"","sources":["../../src/core/buffers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,YAAY,EAClB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,YAAY,CAQd;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,IAAI,EACX,GAAG,EAAE,IAAI,EACT,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,CAK5B"}
|
package/dist/core/buffers.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { addMinutes } from "./time.js";
|
|
2
|
-
/** Expand a busy interval to include before/after buffers. */
|
|
3
2
|
export function applyBuffers(busy, beforeMinutes, afterMinutes) {
|
|
4
3
|
return {
|
|
5
4
|
...busy,
|
|
@@ -7,11 +6,6 @@ export function applyBuffers(busy, beforeMinutes, afterMinutes) {
|
|
|
7
6
|
end: new Date(addMinutes(new Date(busy.end), afterMinutes)).toISOString(),
|
|
8
7
|
};
|
|
9
8
|
}
|
|
10
|
-
/**
|
|
11
|
-
* Expand a proposed slot window (start→end) to include the event type's
|
|
12
|
-
* before/after buffers. The expanded window is what collision detection
|
|
13
|
-
* uses; the displayed slot remains the unexpanded window.
|
|
14
|
-
*/
|
|
15
9
|
export function expandSlotForConflictCheck(start, end, beforeMinutes, afterMinutes) {
|
|
16
10
|
return {
|
|
17
11
|
start: addMinutes(start, -beforeMinutes),
|
package/dist/core/buffers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buffers.js","sourceRoot":"","sources":["../../src/core/buffers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buffers.js","sourceRoot":"","sources":["../../src/core/buffers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,UAAU,YAAY,CAC1B,IAAkB,EAClB,aAAqB,EACrB,YAAoB;IAEpB,OAAO;QACL,GAAG,IAAI;QACP,KAAK,EAAE,IAAI,IAAI,CACb,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,aAAa,CAAC,CACjD,CAAC,WAAW,EAAE;QACf,GAAG,EAAE,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE;KAC1E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAW,EACX,GAAS,EACT,aAAqB,EACrB,YAAoB;IAEpB,OAAO;QACL,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,aAAa,CAAC;QACxC,GAAG,EAAE,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
package/dist/core/conflicts.d.ts
CHANGED
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Conflict detection — does a proposed interval overlap any busy interval?
|
|
3
|
-
*/
|
|
4
1
|
import type { BusyInterval } from "../shared/index.js";
|
|
5
2
|
export declare function hasConflict(slot: {
|
|
6
3
|
start: Date;
|
|
7
4
|
end: Date;
|
|
8
5
|
}, busy: BusyInterval[]): boolean;
|
|
9
|
-
/** Merge overlapping busy intervals into a canonical, non-overlapping set. */
|
|
10
6
|
export declare function mergeBusy(busy: BusyInterval[]): BusyInterval[];
|
|
11
7
|
//# sourceMappingURL=conflicts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/core/conflicts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"conflicts.d.ts","sourceRoot":"","sources":["../../src/core/conflicts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,wBAAgB,WAAW,CACzB,IAAI,EAAE;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,EAChC,IAAI,EAAE,YAAY,EAAE,GACnB,OAAO,CAYT;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAwB9D"}
|
package/dist/core/conflicts.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conflicts.js","sourceRoot":"","sources":["../../src/core/conflicts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conflicts.js","sourceRoot":"","sources":["../../src/core/conflicts.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,UAAU,WAAW,CACzB,IAAgC,EAChC,IAAoB;IAEpB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IACE,QAAQ,CAAC,IAAI,EAAE;YACb,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YACxB,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;SACrB,CAAC,EACF,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAoB;IAC5C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,IAAI;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACxB,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QACpB,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,MAAM,GAAG,GAAkD,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YAC1B,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;gBAAE,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;QAC5B,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE;QACxB,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
package/dist/core/limits.d.ts
CHANGED
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Booking limits enforcement.
|
|
3
|
-
*
|
|
4
|
-
* Limits constrain how many bookings an event type can receive in a time
|
|
5
|
-
* window (day / week / month / year). We pass in existing booking counts
|
|
6
|
-
* per bucket and return a function that tells us whether a proposed start
|
|
7
|
-
* time would exceed any limit.
|
|
8
|
-
*/
|
|
9
1
|
import type { BookingLimits } from "../shared/index.js";
|
|
10
2
|
export interface BookingCounts {
|
|
11
3
|
perDay: Record<string, number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/core/limits.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../../src/core/limits.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC;AAED,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,IAAI,EACf,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,CAAC,GAAG,CAAK,GACtB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAO5D;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,IAAI,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,MAAM,EAAE,aAAa,EACrB,YAAY,GAAE,CAAC,GAAG,CAAK,GACtB,OAAO,CAqBT"}
|
package/dist/core/limits.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/core/limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"limits.js","sourceRoot":"","sources":["../../src/core/limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAW1E,MAAM,UAAU,iBAAiB,CAC/B,SAAe,EACf,QAAgB,EAChB,YAAY,GAAU,CAAC;IAEvB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,SAAe,EACf,QAAgB,EAChB,MAAiC,EACjC,MAAqB,EACrB,YAAY,GAAU,CAAC;IAEvB,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM;QAC1E,OAAO,IAAI,CAAC;IACd,IACE,MAAM,CAAC,OAAO,IAAI,IAAI;QACtB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO;QAElD,OAAO,IAAI,CAAC;IACd,IACE,MAAM,CAAC,QAAQ,IAAI,IAAI;QACvB,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ;QAErD,OAAO,IAAI,CAAC;IACd,IACE,MAAM,CAAC,OAAO,IAAI,IAAI;QACtB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO;QAElD,OAAO,IAAI,CAAC;IACd,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,22 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Round-robin host assignment.
|
|
3
|
-
*
|
|
4
|
-
* For a given event type, pick the host who should take the next booking.
|
|
5
|
-
*
|
|
6
|
-
* Strategies:
|
|
7
|
-
* - "lowest-recent-bookings" — host with fewest bookings in the rolling
|
|
8
|
-
* window (default 30 days) wins; tie-break by priority then weight.
|
|
9
|
-
* - "weighted" — distribute by relative weight; random weighted draw that's
|
|
10
|
-
* deterministic-per-timestamp (seeded for reproducibility in tests).
|
|
11
|
-
* - "calibrated" — weighted but scaled by no-show rate; hosts with high
|
|
12
|
-
* no-show rates receive fewer bookings until their rate recovers.
|
|
13
|
-
*
|
|
14
|
-
* Out-of-office hosts are filtered out before selection.
|
|
15
|
-
*/
|
|
16
1
|
import type { Host, RoundRobinStrategy } from "../shared/index.js";
|
|
17
2
|
export interface HostMetrics {
|
|
18
3
|
recentBookingCount: number;
|
|
19
|
-
/** 0–1; fraction of recent bookings that were no-shows */
|
|
20
4
|
noShowRate: number;
|
|
21
5
|
}
|
|
22
6
|
export interface AssignRoundRobinInput {
|
|
@@ -24,7 +8,6 @@ export interface AssignRoundRobinInput {
|
|
|
24
8
|
metrics: Map<string, HostMetrics>;
|
|
25
9
|
excludeEmails?: Set<string>;
|
|
26
10
|
strategy: RoundRobinStrategy;
|
|
27
|
-
/** Deterministic seed (e.g. booking timestamp) for reproducible weighted picks */
|
|
28
11
|
seed?: number;
|
|
29
12
|
}
|
|
30
13
|
export declare function assignRoundRobin(input: AssignRoundRobinInput): Host | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-robin.d.ts","sourceRoot":"","sources":["../../src/core/round-robin.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"round-robin.d.ts","sourceRoot":"","sources":["../../src/core/round-robin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAAG,IAAI,CA0B1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-robin.js","sourceRoot":"","sources":["../../src/core/round-robin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"round-robin.js","sourceRoot":"","sources":["../../src/core/round-robin.ts"],"names":[],"mappings":"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"}
|
package/dist/core/rrule.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rrule.d.ts","sourceRoot":"","sources":["../../src/core/rrule.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rrule.d.ts","sourceRoot":"","sources":["../../src/core/rrule.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,IAAI,EACb,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,cAAc,SAAK,GAClB,IAAI,EAAE,CAIR"}
|
package/dist/core/rrule.js
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Recurring event expansion.
|
|
3
|
-
*
|
|
4
|
-
* Given an RRULE string and a time range, return the list of occurrence
|
|
5
|
-
* start times. Uses `rrule` npm package under the hood.
|
|
6
|
-
*/
|
|
7
1
|
import { rrulestr } from "rrule";
|
|
8
2
|
export function expandRecurring(rruleString, dtstart, rangeStart, rangeEnd, maxOccurrences = 10) {
|
|
9
|
-
// rrulestr parses RRULE:... with or without the DTSTART prefix.
|
|
10
3
|
const rule = rrulestr(rruleString, { dtstart });
|
|
11
4
|
const all = rule.between(rangeStart, rangeEnd, true);
|
|
12
5
|
return all.slice(0, maxOccurrences);
|
package/dist/core/rrule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rrule.js","sourceRoot":"","sources":["../../src/core/rrule.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rrule.js","sourceRoot":"","sources":["../../src/core/rrule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExC,MAAM,UAAU,eAAe,CAC7B,WAAmB,EACnB,OAAa,EACb,UAAgB,EAChB,QAAc,EACd,cAAc,GAAG,EAAE;IAEnB,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAU,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;AACtC,CAAC"}
|
package/dist/core/rules.d.ts
CHANGED
|
@@ -1,26 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Availability rule evaluation.
|
|
3
|
-
*
|
|
4
|
-
* Given a Schedule (weekly rules + date overrides) and a local date in the
|
|
5
|
-
* schedule's timezone, produce the set of available intervals on that day.
|
|
6
|
-
*
|
|
7
|
-
* Date overrides win over weekly rules: an empty-intervals override blocks
|
|
8
|
-
* the day entirely; a non-empty override replaces the weekly rules for the day.
|
|
9
|
-
*/
|
|
10
1
|
import type { AvailabilityInterval, DateOverride, WeeklyAvailability } from "../shared/index.js";
|
|
11
2
|
export interface ScheduleInput {
|
|
12
3
|
timezone: string;
|
|
13
4
|
weeklyAvailability: WeeklyAvailability[];
|
|
14
5
|
dateOverrides: DateOverride[];
|
|
15
6
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Return the intervals available for a given local date.
|
|
18
|
-
* Intervals are in the schedule's local HH:MM, not UTC.
|
|
19
|
-
*/
|
|
20
7
|
export declare function evaluateAvailabilityForDate(schedule: ScheduleInput, localDate: string, dayOfWeek: number): AvailabilityInterval[];
|
|
21
|
-
/**
|
|
22
|
-
* Normalize an interval list: sort by start, merge overlapping/adjacent,
|
|
23
|
-
* drop zero-length.
|
|
24
|
-
*/
|
|
25
8
|
export declare function normalizeIntervals(intervals: AvailabilityInterval[]): AvailabilityInterval[];
|
|
26
9
|
//# sourceMappingURL=rules.d.ts.map
|
package/dist/core/rules.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rules.d.ts","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EACnB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,kBAAkB,EAAE,CAAC;IACzC,aAAa,EAAE,YAAY,EAAE,CAAC;CAC/B;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,aAAa,EACvB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,oBAAoB,EAAE,CAKxB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,oBAAoB,EAAE,GAChC,oBAAoB,EAAE,CAkBxB"}
|
package/dist/core/rules.js
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Return the intervals available for a given local date.
|
|
3
|
-
* Intervals are in the schedule's local HH:MM, not UTC.
|
|
4
|
-
*/
|
|
5
1
|
export function evaluateAvailabilityForDate(schedule, localDate, dayOfWeek) {
|
|
6
2
|
const override = schedule.dateOverrides.find((o) => o.date === localDate);
|
|
7
3
|
if (override)
|
|
@@ -9,10 +5,6 @@ export function evaluateAvailabilityForDate(schedule, localDate, dayOfWeek) {
|
|
|
9
5
|
const weekly = schedule.weeklyAvailability.find((w) => w.day === dayOfWeek);
|
|
10
6
|
return weekly?.intervals ?? [];
|
|
11
7
|
}
|
|
12
|
-
/**
|
|
13
|
-
* Normalize an interval list: sort by start, merge overlapping/adjacent,
|
|
14
|
-
* drop zero-length.
|
|
15
|
-
*/
|
|
16
8
|
export function normalizeIntervals(intervals) {
|
|
17
9
|
const sorted = intervals
|
|
18
10
|
.filter((i) => toMinutes(i.startTime) < toMinutes(i.endTime))
|
package/dist/core/rules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/core/rules.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,2BAA2B,CACzC,QAAuB,EACvB,SAAiB,EACjB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IAC1E,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,SAAS,CAAC;IACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC;IAC5E,OAAO,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAAiC;IAEjC,MAAM,MAAM,GAAG,SAAS;SACrB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SAC5D,KAAK,EAAE;SACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACnE,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/D,IAAI,CAAC,OAAO;gBACV,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;oBAC7C,CAAC,CAAC,EAAE,CAAC,OAAO;oBACZ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
package/dist/core/slots.d.ts
CHANGED
|
@@ -1,57 +1,26 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Slot computation — the heart of the scheduling package.
|
|
3
|
-
*
|
|
4
|
-
* Input: an event type's config (duration, buffers, limits, period),
|
|
5
|
-
* a schedule (weekly hours + date overrides),
|
|
6
|
-
* a set of busy intervals (from external calendars + existing bookings),
|
|
7
|
-
* a time range to compute over.
|
|
8
|
-
* Output: an array of Slot objects (UTC start/end) that are available
|
|
9
|
-
* and pass every constraint.
|
|
10
|
-
*
|
|
11
|
-
* Correctness priorities, in order:
|
|
12
|
-
* 1. Never return a slot in the past (respect `now + minimumBookingNotice`)
|
|
13
|
-
* 2. Never return a slot that overlaps a busy interval (with buffers)
|
|
14
|
-
* 3. Never return a slot outside the schedule's available windows
|
|
15
|
-
* 4. Never exceed booking limits (per-day/week/month/year)
|
|
16
|
-
* 5. Respect the event type's period (rolling / range / unlimited)
|
|
17
|
-
* 6. Correctness across DST transitions
|
|
18
|
-
*/
|
|
19
1
|
import type { Slot, BusyInterval, BookingLimits, PeriodType } from "../shared/index.js";
|
|
20
2
|
import { type BookingCounts } from "./limits.js";
|
|
21
3
|
import { type ScheduleInput } from "./rules.js";
|
|
22
4
|
export interface ComputeSlotsInput {
|
|
23
|
-
/** Event type duration, minutes */
|
|
24
5
|
duration: number;
|
|
25
|
-
/** Minutes before event start where the event type becomes unbookable; 0 = up to now */
|
|
26
6
|
minimumBookingNotice: number;
|
|
27
|
-
/** Buffers in minutes applied to any existing busy interval and the candidate slot */
|
|
28
7
|
beforeEventBuffer: number;
|
|
29
8
|
afterEventBuffer: number;
|
|
30
|
-
/** Null = increment by duration */
|
|
31
9
|
slotInterval: number | null;
|
|
32
10
|
periodType: PeriodType;
|
|
33
11
|
periodDays?: number;
|
|
34
12
|
periodStartDate?: string;
|
|
35
13
|
periodEndDate?: string;
|
|
36
14
|
bookingLimits?: BookingLimits;
|
|
37
|
-
/** Schedule — intervals in schedule's timezone */
|
|
38
15
|
schedule: ScheduleInput;
|
|
39
|
-
/** Busy intervals in UTC (already aggregated from all sources) */
|
|
40
16
|
busy: BusyInterval[];
|
|
41
|
-
/** Existing bookings grouped by bucket key — used for limit enforcement */
|
|
42
17
|
bookingCounts?: BookingCounts;
|
|
43
|
-
/** Week start for limit-bucketing */
|
|
44
18
|
weekStartsOn?: 0 | 1;
|
|
45
|
-
/** Range to compute over, UTC */
|
|
46
19
|
rangeStart: Date;
|
|
47
20
|
rangeEnd: Date;
|
|
48
|
-
/** Current time (UTC). Defaults to now. */
|
|
49
21
|
now?: Date;
|
|
50
|
-
/** Seats per slot — if > 1, slot stays available until seats exhausted */
|
|
51
22
|
seatsPerTimeSlot?: number;
|
|
52
|
-
/** Seat count already reserved, keyed by ISO start */
|
|
53
23
|
seatsTaken?: Map<string, number>;
|
|
54
|
-
/** Timezone in which the Booker displays the slots (for limit buckets) */
|
|
55
24
|
viewerTimezone?: string;
|
|
56
25
|
}
|
|
57
26
|
export declare function computeAvailableSlots(input: ComputeSlotsInput): Slot[];
|
package/dist/core/slots.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/core/slots.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/core/slots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,UAAU,EACX,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAQ7E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,UAAU,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,EAAE,CAuGtE"}
|
package/dist/core/slots.js
CHANGED
|
@@ -14,7 +14,6 @@ export function computeAvailableSlots(input) {
|
|
|
14
14
|
const interval = input.slotInterval ?? input.duration;
|
|
15
15
|
const viewerTz = input.viewerTimezone ?? input.schedule.timezone;
|
|
16
16
|
const slots = [];
|
|
17
|
-
// Enumerate each local day in the schedule's timezone that the range touches.
|
|
18
17
|
const dates = localDatesInRange(rangeStart, rangeEnd, input.schedule.timezone);
|
|
19
18
|
for (const localDate of dates) {
|
|
20
19
|
const dow = dayOfWeekForLocalDate(localDate, input.schedule.timezone);
|
|
@@ -27,29 +26,24 @@ export function computeAvailableSlots(input) {
|
|
|
27
26
|
let slotStart = dayStartUtc;
|
|
28
27
|
while (addMinutes(slotStart, input.duration) <= dayEndUtc) {
|
|
29
28
|
const slotEnd = addMinutes(slotStart, input.duration);
|
|
30
|
-
// Cap to range
|
|
31
29
|
if (slotStart < rangeStart || slotEnd > rangeEnd) {
|
|
32
30
|
slotStart = addMinutes(slotStart, interval);
|
|
33
31
|
continue;
|
|
34
32
|
}
|
|
35
|
-
// Respect minimum notice
|
|
36
33
|
if (slotStart < minBookableTime) {
|
|
37
34
|
slotStart = addMinutes(slotStart, interval);
|
|
38
35
|
continue;
|
|
39
36
|
}
|
|
40
|
-
// Conflict check (expanded with buffers)
|
|
41
37
|
const expanded = expandSlotForConflictCheck(slotStart, slotEnd, input.beforeEventBuffer, input.afterEventBuffer);
|
|
42
38
|
if (hasConflict(expanded, mergedBusy)) {
|
|
43
39
|
slotStart = addMinutes(slotStart, interval);
|
|
44
40
|
continue;
|
|
45
41
|
}
|
|
46
|
-
// Booking limits (in viewer's timezone for perDay buckets)
|
|
47
42
|
if (input.bookingCounts &&
|
|
48
43
|
exceedsLimits(slotStart, viewerTz, input.bookingLimits, input.bookingCounts, input.weekStartsOn ?? 0)) {
|
|
49
44
|
slotStart = addMinutes(slotStart, interval);
|
|
50
45
|
continue;
|
|
51
46
|
}
|
|
52
|
-
// Seats
|
|
53
47
|
const seatsTaken = input.seatsTaken?.get(slotStart.toISOString()) ?? 0;
|
|
54
48
|
const seatsRemaining = input.seatsPerTimeSlot != null
|
|
55
49
|
? Math.max(0, input.seatsPerTimeSlot - seatsTaken)
|
|
@@ -75,7 +69,6 @@ function capToPeriodStart(input, rangeStart, now) {
|
|
|
75
69
|
const start = new Date(input.periodStartDate);
|
|
76
70
|
return rangeStart > start ? rangeStart : start;
|
|
77
71
|
}
|
|
78
|
-
// Rolling + unlimited don't restrict start
|
|
79
72
|
return rangeStart > now ? rangeStart : now;
|
|
80
73
|
}
|
|
81
74
|
function capToPeriodEnd(input, rangeEnd, now) {
|
|
@@ -90,8 +83,6 @@ function capToPeriodEnd(input, rangeEnd, now) {
|
|
|
90
83
|
return rangeEnd;
|
|
91
84
|
}
|
|
92
85
|
function dayOfWeekForLocalDate(localDate, timezone) {
|
|
93
|
-
// Construct a UTC date that corresponds to noon on that local date in the
|
|
94
|
-
// target timezone, then ask what day-of-week it is in that timezone.
|
|
95
86
|
const noon = zonedTimeToUtc(localDate, "12:00", timezone);
|
|
96
87
|
return getDayOfWeek(noon, timezone);
|
|
97
88
|
}
|
package/dist/core/slots.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/core/slots.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slots.js","sourceRoot":"","sources":["../../src/core/slots.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAsB,MAAM,YAAY,CAAC;AAC7E,OAAO,EACL,UAAU,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,GAClB,MAAM,WAAW,CAAC;AAyBnB,MAAM,UAAU,qBAAqB,CAAC,KAAwB;IAC5D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACpC,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAEpE,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC5D,IAAI,UAAU,IAAI,QAAQ;QAAE,OAAO,EAAE,CAAC;IAEtC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,QAAQ,CAAC;IACtD,MAAM,QAAQ,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC;IACjE,MAAM,KAAK,GAAW,EAAE,CAAC;IAEzB,MAAM,KAAK,GAAG,iBAAiB,CAC7B,UAAU,EACV,QAAQ,EACR,KAAK,CAAC,QAAQ,CAAC,QAAQ,CACxB,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,YAAY,GAAG,2BAA2B,CAC9C,KAAK,CAAC,QAAQ,EACd,SAAS,EACT,GAAG,CACJ,CAAC;QACF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAExC,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC9B,MAAM,WAAW,GAAG,cAAc,CAChC,SAAS,EACT,EAAE,CAAC,SAAS,EACZ,KAAK,CAAC,QAAQ,CAAC,QAAQ,CACxB,CAAC;YACF,MAAM,SAAS,GAAG,cAAc,CAC9B,SAAS,EACT,EAAE,CAAC,OAAO,EACV,KAAK,CAAC,QAAQ,CAAC,QAAQ,CACxB,CAAC;YAEF,IAAI,SAAS,GAAG,WAAW,CAAC;YAC5B,OAAO,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1D,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAEtD,IAAI,SAAS,GAAG,UAAU,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;oBACjD,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBAED,IAAI,SAAS,GAAG,eAAe,EAAE,CAAC;oBAChC,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,0BAA0B,CACzC,SAAS,EACT,OAAO,EACP,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,gBAAgB,CACvB,CAAC;gBACF,IAAI,WAAW,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;oBACtC,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBAED,IACE,KAAK,CAAC,aAAa;oBACnB,aAAa,CACX,SAAS,EACT,QAAQ,EACR,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,YAAY,IAAI,CAAC,CACxB,EACD,CAAC;oBACD,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBAED,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;gBACvE,MAAM,cAAc,GAClB,KAAK,CAAC,gBAAgB,IAAI,IAAI;oBAC5B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,gBAAgB,GAAG,UAAU,CAAC;oBAClD,CAAC,CAAC,SAAS,CAAC;gBAEhB,IAAI,KAAK,CAAC,gBAAgB,IAAI,IAAI,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;oBAC3D,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBAED,KAAK,CAAC,IAAI,CAAC;oBACT,KAAK,EAAE,SAAS,CAAC,WAAW,EAAE;oBAC9B,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE;oBAC1B,SAAS,EAAE,IAAI;oBACf,cAAc;iBACf,CAAC,CAAC;gBAEH,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAwB,EACxB,UAAgB,EAChB,GAAS;IAET,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;QAC1D,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9C,OAAO,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IACD,OAAO,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7C,CAAC;AAED,SAAS,cAAc,CACrB,KAAwB,EACxB,QAAc,EACd,GAAS;IAET,IAAI,KAAK,CAAC,UAAU,KAAK,OAAO,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC1C,OAAO,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC;IACzC,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/D,OAAO,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IACvD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB,EAAE,QAAgB;IAChE,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC"}
|