@agent-native/scheduling 0.1.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.
- package/README.md +58 -0
- package/dist/actions/_helpers.d.ts +12 -0
- package/dist/actions/_helpers.d.ts.map +1 -0
- package/dist/actions/_helpers.js +49 -0
- package/dist/actions/_helpers.js.map +1 -0
- package/dist/actions/accept-team-invite.d.ts +3 -0
- package/dist/actions/accept-team-invite.d.ts.map +1 -0
- package/dist/actions/accept-team-invite.js +27 -0
- package/dist/actions/accept-team-invite.js.map +1 -0
- package/dist/actions/add-booking-attendee.d.ts +3 -0
- package/dist/actions/add-booking-attendee.d.ts.map +1 -0
- package/dist/actions/add-booking-attendee.js +33 -0
- package/dist/actions/add-booking-attendee.js.map +1 -0
- package/dist/actions/add-booking-note.d.ts +3 -0
- package/dist/actions/add-booking-note.d.ts.map +1 -0
- package/dist/actions/add-booking-note.js +26 -0
- package/dist/actions/add-booking-note.js.map +1 -0
- package/dist/actions/add-date-override.d.ts +3 -0
- package/dist/actions/add-date-override.d.ts.map +1 -0
- package/dist/actions/add-date-override.js +16 -0
- package/dist/actions/add-date-override.js.map +1 -0
- package/dist/actions/add-private-link.d.ts +3 -0
- package/dist/actions/add-private-link.d.ts.map +1 -0
- package/dist/actions/add-private-link.js +31 -0
- package/dist/actions/add-private-link.js.map +1 -0
- package/dist/actions/assign-round-robin-host.d.ts +3 -0
- package/dist/actions/assign-round-robin-host.d.ts.map +1 -0
- package/dist/actions/assign-round-robin-host.js +48 -0
- package/dist/actions/assign-round-robin-host.js.map +1 -0
- package/dist/actions/cancel-booking.d.ts +3 -0
- package/dist/actions/cancel-booking.d.ts.map +1 -0
- package/dist/actions/cancel-booking.js +34 -0
- package/dist/actions/cancel-booking.js.map +1 -0
- package/dist/actions/check-availability.d.ts +3 -0
- package/dist/actions/check-availability.d.ts.map +1 -0
- package/dist/actions/check-availability.js +43 -0
- package/dist/actions/check-availability.js.map +1 -0
- package/dist/actions/confirm-booking.d.ts +3 -0
- package/dist/actions/confirm-booking.d.ts.map +1 -0
- package/dist/actions/confirm-booking.js +12 -0
- package/dist/actions/confirm-booking.js.map +1 -0
- package/dist/actions/connect-calendar.d.ts +3 -0
- package/dist/actions/connect-calendar.d.ts.map +1 -0
- package/dist/actions/connect-calendar.js +26 -0
- package/dist/actions/connect-calendar.js.map +1 -0
- package/dist/actions/connect-video.d.ts +3 -0
- package/dist/actions/connect-video.d.ts.map +1 -0
- package/dist/actions/connect-video.js +54 -0
- package/dist/actions/connect-video.js.map +1 -0
- package/dist/actions/create-booking.d.ts +3 -0
- package/dist/actions/create-booking.d.ts.map +1 -0
- package/dist/actions/create-booking.js +60 -0
- package/dist/actions/create-booking.js.map +1 -0
- package/dist/actions/create-event-type.d.ts +3 -0
- package/dist/actions/create-event-type.d.ts.map +1 -0
- package/dist/actions/create-event-type.js +45 -0
- package/dist/actions/create-event-type.js.map +1 -0
- package/dist/actions/create-host-group.d.ts +3 -0
- package/dist/actions/create-host-group.d.ts.map +1 -0
- package/dist/actions/create-host-group.js +25 -0
- package/dist/actions/create-host-group.js.map +1 -0
- package/dist/actions/create-routing-form.d.ts +3 -0
- package/dist/actions/create-routing-form.d.ts.map +1 -0
- package/dist/actions/create-routing-form.js +39 -0
- package/dist/actions/create-routing-form.js.map +1 -0
- package/dist/actions/create-schedule.d.ts +3 -0
- package/dist/actions/create-schedule.d.ts.map +1 -0
- package/dist/actions/create-schedule.js +32 -0
- package/dist/actions/create-schedule.js.map +1 -0
- package/dist/actions/create-team.d.ts +3 -0
- package/dist/actions/create-team.d.ts.map +1 -0
- package/dist/actions/create-team.js +44 -0
- package/dist/actions/create-team.js.map +1 -0
- package/dist/actions/create-workflow.d.ts +3 -0
- package/dist/actions/create-workflow.d.ts.map +1 -0
- package/dist/actions/create-workflow.js +81 -0
- package/dist/actions/create-workflow.js.map +1 -0
- package/dist/actions/delete-event-type.d.ts +3 -0
- package/dist/actions/delete-event-type.d.ts.map +1 -0
- package/dist/actions/delete-event-type.js +14 -0
- package/dist/actions/delete-event-type.js.map +1 -0
- package/dist/actions/delete-routing-form.d.ts +3 -0
- package/dist/actions/delete-routing-form.d.ts.map +1 -0
- package/dist/actions/delete-routing-form.js +21 -0
- package/dist/actions/delete-routing-form.js.map +1 -0
- package/dist/actions/delete-schedule.d.ts +3 -0
- package/dist/actions/delete-schedule.d.ts.map +1 -0
- package/dist/actions/delete-schedule.js +14 -0
- package/dist/actions/delete-schedule.js.map +1 -0
- package/dist/actions/delete-workflow.d.ts +3 -0
- package/dist/actions/delete-workflow.d.ts.map +1 -0
- package/dist/actions/delete-workflow.js +21 -0
- package/dist/actions/delete-workflow.js.map +1 -0
- package/dist/actions/disconnect-calendar.d.ts +3 -0
- package/dist/actions/disconnect-calendar.d.ts.map +1 -0
- package/dist/actions/disconnect-calendar.js +22 -0
- package/dist/actions/disconnect-calendar.js.map +1 -0
- package/dist/actions/duplicate-event-type.d.ts +3 -0
- package/dist/actions/duplicate-event-type.d.ts.map +1 -0
- package/dist/actions/duplicate-event-type.js +34 -0
- package/dist/actions/duplicate-event-type.js.map +1 -0
- package/dist/actions/export-bookings-csv.d.ts +3 -0
- package/dist/actions/export-bookings-csv.d.ts.map +1 -0
- package/dist/actions/export-bookings-csv.js +53 -0
- package/dist/actions/export-bookings-csv.js.map +1 -0
- package/dist/actions/find-available-slot.d.ts +3 -0
- package/dist/actions/find-available-slot.d.ts.map +1 -0
- package/dist/actions/find-available-slot.js +39 -0
- package/dist/actions/find-available-slot.js.map +1 -0
- package/dist/actions/get-availability.d.ts +3 -0
- package/dist/actions/get-availability.d.ts.map +1 -0
- package/dist/actions/get-availability.js +20 -0
- package/dist/actions/get-availability.js.map +1 -0
- package/dist/actions/get-booking.d.ts +3 -0
- package/dist/actions/get-booking.d.ts.map +1 -0
- package/dist/actions/get-booking.js +9 -0
- package/dist/actions/get-booking.js.map +1 -0
- package/dist/actions/get-event-type.d.ts +3 -0
- package/dist/actions/get-event-type.d.ts.map +1 -0
- package/dist/actions/get-event-type.js +27 -0
- package/dist/actions/get-event-type.js.map +1 -0
- package/dist/actions/install-conferencing-app.d.ts +3 -0
- package/dist/actions/install-conferencing-app.d.ts.map +1 -0
- package/dist/actions/install-conferencing-app.js +28 -0
- package/dist/actions/install-conferencing-app.js.map +1 -0
- package/dist/actions/invite-team-member.d.ts +3 -0
- package/dist/actions/invite-team-member.d.ts.map +1 -0
- package/dist/actions/invite-team-member.js +30 -0
- package/dist/actions/invite-team-member.js.map +1 -0
- package/dist/actions/list-bookings.d.ts +3 -0
- package/dist/actions/list-bookings.d.ts.map +1 -0
- package/dist/actions/list-bookings.js +35 -0
- package/dist/actions/list-bookings.js.map +1 -0
- package/dist/actions/list-calendar-integrations.d.ts +3 -0
- package/dist/actions/list-calendar-integrations.d.ts.map +1 -0
- package/dist/actions/list-calendar-integrations.js +26 -0
- package/dist/actions/list-calendar-integrations.js.map +1 -0
- package/dist/actions/list-event-types.d.ts +3 -0
- package/dist/actions/list-event-types.d.ts.map +1 -0
- package/dist/actions/list-event-types.js +31 -0
- package/dist/actions/list-event-types.js.map +1 -0
- package/dist/actions/list-routing-form-responses.d.ts +3 -0
- package/dist/actions/list-routing-form-responses.d.ts.map +1 -0
- package/dist/actions/list-routing-form-responses.js +24 -0
- package/dist/actions/list-routing-form-responses.js.map +1 -0
- package/dist/actions/list-routing-forms.d.ts +3 -0
- package/dist/actions/list-routing-forms.d.ts.map +1 -0
- package/dist/actions/list-routing-forms.js +29 -0
- package/dist/actions/list-routing-forms.js.map +1 -0
- package/dist/actions/list-schedules.d.ts +3 -0
- package/dist/actions/list-schedules.d.ts.map +1 -0
- package/dist/actions/list-schedules.js +16 -0
- package/dist/actions/list-schedules.js.map +1 -0
- package/dist/actions/list-selected-calendars.d.ts +3 -0
- package/dist/actions/list-selected-calendars.d.ts.map +1 -0
- package/dist/actions/list-selected-calendars.js +42 -0
- package/dist/actions/list-selected-calendars.js.map +1 -0
- package/dist/actions/list-workflows.d.ts +3 -0
- package/dist/actions/list-workflows.d.ts.map +1 -0
- package/dist/actions/list-workflows.js +29 -0
- package/dist/actions/list-workflows.js.map +1 -0
- package/dist/actions/mark-no-show.d.ts +3 -0
- package/dist/actions/mark-no-show.d.ts.map +1 -0
- package/dist/actions/mark-no-show.js +15 -0
- package/dist/actions/mark-no-show.js.map +1 -0
- package/dist/actions/refresh-busy-times.d.ts +3 -0
- package/dist/actions/refresh-busy-times.d.ts.map +1 -0
- package/dist/actions/refresh-busy-times.js +25 -0
- package/dist/actions/refresh-busy-times.js.map +1 -0
- package/dist/actions/remove-booking-attendee.d.ts +3 -0
- package/dist/actions/remove-booking-attendee.d.ts.map +1 -0
- package/dist/actions/remove-booking-attendee.js +20 -0
- package/dist/actions/remove-booking-attendee.js.map +1 -0
- package/dist/actions/remove-date-override.d.ts +3 -0
- package/dist/actions/remove-date-override.d.ts.map +1 -0
- package/dist/actions/remove-date-override.js +15 -0
- package/dist/actions/remove-date-override.js.map +1 -0
- package/dist/actions/remove-team-member.d.ts +3 -0
- package/dist/actions/remove-team-member.d.ts.map +1 -0
- package/dist/actions/remove-team-member.js +18 -0
- package/dist/actions/remove-team-member.js.map +1 -0
- package/dist/actions/reorder-event-types.d.ts +3 -0
- package/dist/actions/reorder-event-types.d.ts.map +1 -0
- package/dist/actions/reorder-event-types.js +18 -0
- package/dist/actions/reorder-event-types.js.map +1 -0
- package/dist/actions/reschedule-booking.d.ts +3 -0
- package/dist/actions/reschedule-booking.d.ts.map +1 -0
- package/dist/actions/reschedule-booking.js +38 -0
- package/dist/actions/reschedule-booking.js.map +1 -0
- package/dist/actions/revoke-private-link.d.ts +3 -0
- package/dist/actions/revoke-private-link.d.ts.map +1 -0
- package/dist/actions/revoke-private-link.js +16 -0
- package/dist/actions/revoke-private-link.js.map +1 -0
- package/dist/actions/send-reschedule-link.d.ts +3 -0
- package/dist/actions/send-reschedule-link.d.ts.map +1 -0
- package/dist/actions/send-reschedule-link.js +18 -0
- package/dist/actions/send-reschedule-link.js.map +1 -0
- package/dist/actions/set-appearance.d.ts +3 -0
- package/dist/actions/set-appearance.d.ts.map +1 -0
- package/dist/actions/set-appearance.js +23 -0
- package/dist/actions/set-appearance.js.map +1 -0
- package/dist/actions/set-default-conferencing-app.d.ts +3 -0
- package/dist/actions/set-default-conferencing-app.d.ts.map +1 -0
- package/dist/actions/set-default-conferencing-app.js +25 -0
- package/dist/actions/set-default-conferencing-app.js.map +1 -0
- package/dist/actions/set-default-schedule.d.ts +3 -0
- package/dist/actions/set-default-schedule.d.ts.map +1 -0
- package/dist/actions/set-default-schedule.js +15 -0
- package/dist/actions/set-default-schedule.js.map +1 -0
- package/dist/actions/set-destination-calendar.d.ts +3 -0
- package/dist/actions/set-destination-calendar.d.ts.map +1 -0
- package/dist/actions/set-destination-calendar.js +39 -0
- package/dist/actions/set-destination-calendar.js.map +1 -0
- package/dist/actions/set-event-type-hosts.d.ts +3 -0
- package/dist/actions/set-event-type-hosts.d.ts.map +1 -0
- package/dist/actions/set-event-type-hosts.js +41 -0
- package/dist/actions/set-event-type-hosts.js.map +1 -0
- package/dist/actions/set-event-type-location.d.ts +3 -0
- package/dist/actions/set-event-type-location.d.ts.map +1 -0
- package/dist/actions/set-event-type-location.js +18 -0
- package/dist/actions/set-event-type-location.js.map +1 -0
- package/dist/actions/set-host-availability-override.d.ts +3 -0
- package/dist/actions/set-host-availability-override.d.ts.map +1 -0
- package/dist/actions/set-host-availability-override.js +21 -0
- package/dist/actions/set-host-availability-override.js.map +1 -0
- package/dist/actions/set-team-branding.d.ts +3 -0
- package/dist/actions/set-team-branding.d.ts.map +1 -0
- package/dist/actions/set-team-branding.js +28 -0
- package/dist/actions/set-team-branding.js.map +1 -0
- package/dist/actions/submit-routing-form-response.d.ts +3 -0
- package/dist/actions/submit-routing-form-response.d.ts.map +1 -0
- package/dist/actions/submit-routing-form-response.js +46 -0
- package/dist/actions/submit-routing-form-response.js.map +1 -0
- package/dist/actions/toggle-event-type-hidden.d.ts +3 -0
- package/dist/actions/toggle-event-type-hidden.d.ts.map +1 -0
- package/dist/actions/toggle-event-type-hidden.js +19 -0
- package/dist/actions/toggle-event-type-hidden.js.map +1 -0
- package/dist/actions/toggle-selected-calendar.d.ts +3 -0
- package/dist/actions/toggle-selected-calendar.d.ts.map +1 -0
- package/dist/actions/toggle-selected-calendar.js +40 -0
- package/dist/actions/toggle-selected-calendar.js.map +1 -0
- package/dist/actions/toggle-workflow.d.ts +3 -0
- package/dist/actions/toggle-workflow.d.ts.map +1 -0
- package/dist/actions/toggle-workflow.js +26 -0
- package/dist/actions/toggle-workflow.js.map +1 -0
- package/dist/actions/update-event-type.d.ts +3 -0
- package/dist/actions/update-event-type.d.ts.map +1 -0
- package/dist/actions/update-event-type.js +54 -0
- package/dist/actions/update-event-type.js.map +1 -0
- package/dist/actions/update-member-role.d.ts +3 -0
- package/dist/actions/update-member-role.d.ts.map +1 -0
- package/dist/actions/update-member-role.js +23 -0
- package/dist/actions/update-member-role.js.map +1 -0
- package/dist/actions/update-profile.d.ts +3 -0
- package/dist/actions/update-profile.d.ts.map +1 -0
- package/dist/actions/update-profile.js +34 -0
- package/dist/actions/update-profile.js.map +1 -0
- package/dist/actions/update-routing-form.d.ts +3 -0
- package/dist/actions/update-routing-form.d.ts.map +1 -0
- package/dist/actions/update-routing-form.js +40 -0
- package/dist/actions/update-routing-form.js.map +1 -0
- package/dist/actions/update-schedule.d.ts +3 -0
- package/dist/actions/update-schedule.d.ts.map +1 -0
- package/dist/actions/update-schedule.js +44 -0
- package/dist/actions/update-schedule.js.map +1 -0
- package/dist/actions/update-workflow.d.ts +3 -0
- package/dist/actions/update-workflow.d.ts.map +1 -0
- package/dist/actions/update-workflow.js +89 -0
- package/dist/actions/update-workflow.js.map +1 -0
- package/dist/core/buffers.d.ts +25 -0
- package/dist/core/buffers.d.ts.map +1 -0
- package/dist/core/buffers.js +21 -0
- package/dist/core/buffers.js.map +1 -0
- package/dist/core/conflicts.d.ts +11 -0
- package/dist/core/conflicts.d.ts.map +1 -0
- package/dist/core/conflicts.js +42 -0
- package/dist/core/conflicts.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/limits.d.ts +23 -0
- package/dist/core/limits.d.ts.map +1 -0
- package/dist/core/limits.js +28 -0
- package/dist/core/limits.js.map +1 -0
- package/dist/core/round-robin.d.ts +31 -0
- package/dist/core/round-robin.d.ts.map +1 -0
- package/dist/core/round-robin.js +57 -0
- package/dist/core/round-robin.js.map +1 -0
- package/dist/core/rrule.d.ts +2 -0
- package/dist/core/rrule.d.ts.map +1 -0
- package/dist/core/rrule.js +14 -0
- package/dist/core/rrule.js.map +1 -0
- package/dist/core/rules.d.ts +26 -0
- package/dist/core/rules.d.ts.map +1 -0
- package/dist/core/rules.js +40 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/slots.d.ts +58 -0
- package/dist/core/slots.d.ts.map +1 -0
- package/dist/core/slots.js +98 -0
- package/dist/core/slots.js.map +1 -0
- package/dist/core/time.d.ts +52 -0
- package/dist/core/time.d.ts.map +1 -0
- package/dist/core/time.js +109 -0
- package/dist/core/time.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +28 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +160 -0
- package/dist/manifest.js.map +1 -0
- package/dist/react/components/SlotPicker.d.ts +21 -0
- package/dist/react/components/SlotPicker.d.ts.map +1 -0
- package/dist/react/components/SlotPicker.js +15 -0
- package/dist/react/components/SlotPicker.js.map +1 -0
- package/dist/react/components/TimezoneSelect.d.ts +7 -0
- package/dist/react/components/TimezoneSelect.d.ts.map +1 -0
- package/dist/react/components/TimezoneSelect.js +31 -0
- package/dist/react/components/TimezoneSelect.js.map +1 -0
- package/dist/react/components/booking-links/AvailabilityEditor.d.ts +21 -0
- package/dist/react/components/booking-links/AvailabilityEditor.d.ts.map +1 -0
- package/dist/react/components/booking-links/AvailabilityEditor.js +102 -0
- package/dist/react/components/booking-links/AvailabilityEditor.js.map +1 -0
- package/dist/react/components/booking-links/BookingLinkCreateDialog.d.ts +22 -0
- package/dist/react/components/booking-links/BookingLinkCreateDialog.d.ts.map +1 -0
- package/dist/react/components/booking-links/BookingLinkCreateDialog.js +75 -0
- package/dist/react/components/booking-links/BookingLinkCreateDialog.js.map +1 -0
- package/dist/react/components/booking-links/ConferencingSelector.d.ts +19 -0
- package/dist/react/components/booking-links/ConferencingSelector.d.ts.map +1 -0
- package/dist/react/components/booking-links/ConferencingSelector.js +87 -0
- package/dist/react/components/booking-links/ConferencingSelector.js.map +1 -0
- package/dist/react/components/booking-links/CustomFieldsEditor.d.ts +19 -0
- package/dist/react/components/booking-links/CustomFieldsEditor.d.ts.map +1 -0
- package/dist/react/components/booking-links/CustomFieldsEditor.js +117 -0
- package/dist/react/components/booking-links/CustomFieldsEditor.js.map +1 -0
- package/dist/react/components/booking-links/DurationPicker.d.ts +9 -0
- package/dist/react/components/booking-links/DurationPicker.d.ts.map +1 -0
- package/dist/react/components/booking-links/DurationPicker.js +56 -0
- package/dist/react/components/booking-links/DurationPicker.js.map +1 -0
- package/dist/react/components/booking-links/SlugEditor.d.ts +15 -0
- package/dist/react/components/booking-links/SlugEditor.d.ts.map +1 -0
- package/dist/react/components/booking-links/SlugEditor.js +64 -0
- package/dist/react/components/booking-links/SlugEditor.js.map +1 -0
- package/dist/react/components/booking-links/index.d.ts +16 -0
- package/dist/react/components/booking-links/index.d.ts.map +1 -0
- package/dist/react/components/booking-links/index.js +16 -0
- package/dist/react/components/booking-links/index.js.map +1 -0
- package/dist/react/components/index.d.ts +14 -0
- package/dist/react/components/index.d.ts.map +1 -0
- package/dist/react/components/index.js +14 -0
- package/dist/react/components/index.js.map +1 -0
- package/dist/react/hooks/useBookingFlow.d.ts +33 -0
- package/dist/react/hooks/useBookingFlow.d.ts.map +1 -0
- package/dist/react/hooks/useBookingFlow.js +51 -0
- package/dist/react/hooks/useBookingFlow.js.map +1 -0
- package/dist/react/hooks/useEventType.d.ts +21 -0
- package/dist/react/hooks/useEventType.d.ts.map +1 -0
- package/dist/react/hooks/useEventType.js +38 -0
- package/dist/react/hooks/useEventType.js.map +1 -0
- package/dist/react/hooks/useReschedule.d.ts +13 -0
- package/dist/react/hooks/useReschedule.d.ts.map +1 -0
- package/dist/react/hooks/useReschedule.js +33 -0
- package/dist/react/hooks/useReschedule.js.map +1 -0
- package/dist/react/hooks/useSlots.d.ts +32 -0
- package/dist/react/hooks/useSlots.d.ts.map +1 -0
- package/dist/react/hooks/useSlots.js +59 -0
- package/dist/react/hooks/useSlots.js.map +1 -0
- package/dist/react/hooks/useTimezone.d.ts +3 -0
- package/dist/react/hooks/useTimezone.d.ts.map +1 -0
- package/dist/react/hooks/useTimezone.js +30 -0
- package/dist/react/hooks/useTimezone.js.map +1 -0
- package/dist/react/index.d.ts +11 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.js +11 -0
- package/dist/react/index.js.map +1 -0
- package/dist/schema/bookings.d.ts +1201 -0
- package/dist/schema/bookings.d.ts.map +1 -0
- package/dist/schema/bookings.js +100 -0
- package/dist/schema/bookings.js.map +1 -0
- package/dist/schema/calendar-cache.d.ts +160 -0
- package/dist/schema/calendar-cache.d.ts.map +1 -0
- package/dist/schema/calendar-cache.js +23 -0
- package/dist/schema/calendar-cache.js.map +1 -0
- package/dist/schema/credentials.d.ts +743 -0
- package/dist/schema/credentials.d.ts.map +1 -0
- package/dist/schema/credentials.js +79 -0
- package/dist/schema/credentials.js.map +1 -0
- package/dist/schema/event-types.d.ts +1292 -0
- package/dist/schema/event-types.d.ts.map +1 -0
- package/dist/schema/event-types.js +131 -0
- package/dist/schema/event-types.js.map +1 -0
- package/dist/schema/index.d.ts +20 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +20 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/routing-forms.d.ts +571 -0
- package/dist/schema/routing-forms.d.ts.map +1 -0
- package/dist/schema/routing-forms.js +44 -0
- package/dist/schema/routing-forms.js.map +1 -0
- package/dist/schema/schedules.d.ts +830 -0
- package/dist/schema/schedules.d.ts.map +1 -0
- package/dist/schema/schedules.js +72 -0
- package/dist/schema/schedules.js.map +1 -0
- package/dist/schema/teams.d.ts +569 -0
- package/dist/schema/teams.d.ts.map +1 -0
- package/dist/schema/teams.js +38 -0
- package/dist/schema/teams.js.map +1 -0
- package/dist/schema/workflows.d.ts +1367 -0
- package/dist/schema/workflows.d.ts.map +1 -0
- package/dist/schema/workflows.js +116 -0
- package/dist/schema/workflows.js.map +1 -0
- package/dist/server/availability-engine.d.ts +21 -0
- package/dist/server/availability-engine.d.ts.map +1 -0
- package/dist/server/availability-engine.js +135 -0
- package/dist/server/availability-engine.js.map +1 -0
- package/dist/server/booking-service.d.ts +46 -0
- package/dist/server/booking-service.d.ts.map +1 -0
- package/dist/server/booking-service.js +198 -0
- package/dist/server/booking-service.js.map +1 -0
- package/dist/server/bookings-repo.d.ts +48 -0
- package/dist/server/bookings-repo.d.ts.map +1 -0
- package/dist/server/bookings-repo.js +244 -0
- package/dist/server/bookings-repo.js.map +1 -0
- package/dist/server/context.d.ts +33 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +11 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/db-types.d.ts +15 -0
- package/dist/server/db-types.d.ts.map +1 -0
- package/dist/server/db-types.js +2 -0
- package/dist/server/db-types.js.map +1 -0
- package/dist/server/event-types-repo.d.ts +46 -0
- package/dist/server/event-types-repo.d.ts.map +1 -0
- package/dist/server/event-types-repo.js +320 -0
- package/dist/server/event-types-repo.js.map +1 -0
- package/dist/server/hooks.d.ts +6 -0
- package/dist/server/hooks.d.ts.map +1 -0
- package/dist/server/hooks.js +173 -0
- package/dist/server/hooks.js.map +1 -0
- package/dist/server/ics.d.ts +12 -0
- package/dist/server/ics.d.ts.map +1 -0
- package/dist/server/ics.js +81 -0
- package/dist/server/ics.js.map +1 -0
- package/dist/server/index.d.ts +12 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +12 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/providers/builtin-video.d.ts +12 -0
- package/dist/server/providers/builtin-video.d.ts.map +1 -0
- package/dist/server/providers/builtin-video.js +50 -0
- package/dist/server/providers/builtin-video.js.map +1 -0
- package/dist/server/providers/cal-video.d.ts +12 -0
- package/dist/server/providers/cal-video.d.ts.map +1 -0
- package/dist/server/providers/cal-video.js +50 -0
- package/dist/server/providers/cal-video.js.map +1 -0
- package/dist/server/providers/google-calendar.d.ts +28 -0
- package/dist/server/providers/google-calendar.d.ts.map +1 -0
- package/dist/server/providers/google-calendar.js +163 -0
- package/dist/server/providers/google-calendar.js.map +1 -0
- package/dist/server/providers/google-meet.d.ts +10 -0
- package/dist/server/providers/google-meet.d.ts.map +1 -0
- package/dist/server/providers/google-meet.js +14 -0
- package/dist/server/providers/google-meet.js.map +1 -0
- package/dist/server/providers/index.d.ts +8 -0
- package/dist/server/providers/index.d.ts.map +1 -0
- package/dist/server/providers/index.js +8 -0
- package/dist/server/providers/index.js.map +1 -0
- package/dist/server/providers/office365.d.ts +21 -0
- package/dist/server/providers/office365.d.ts.map +1 -0
- package/dist/server/providers/office365.js +146 -0
- package/dist/server/providers/office365.js.map +1 -0
- package/dist/server/providers/registry.d.ts +14 -0
- package/dist/server/providers/registry.d.ts.map +1 -0
- package/dist/server/providers/registry.js +28 -0
- package/dist/server/providers/registry.js.map +1 -0
- package/dist/server/providers/types.d.ts +133 -0
- package/dist/server/providers/types.d.ts.map +1 -0
- package/dist/server/providers/types.js +2 -0
- package/dist/server/providers/types.js.map +1 -0
- package/dist/server/providers/zoom.d.ts +34 -0
- package/dist/server/providers/zoom.d.ts.map +1 -0
- package/dist/server/providers/zoom.js +111 -0
- package/dist/server/providers/zoom.js.map +1 -0
- package/dist/server/schedules-repo.d.ts +26 -0
- package/dist/server/schedules-repo.d.ts.map +1 -0
- package/dist/server/schedules-repo.js +223 -0
- package/dist/server/schedules-repo.js.map +1 -0
- package/dist/server/video-oauth-state.d.ts +28 -0
- package/dist/server/video-oauth-state.d.ts.map +1 -0
- package/dist/server/video-oauth-state.js +101 -0
- package/dist/server/video-oauth-state.js.map +1 -0
- package/dist/server/video-oauth.d.ts +18 -0
- package/dist/server/video-oauth.d.ts.map +1 -0
- package/dist/server/video-oauth.js +82 -0
- package/dist/server/video-oauth.js.map +1 -0
- package/dist/shared/index.d.ts +298 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +6 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/docs/UI_UNIFICATION.md +78 -0
- package/docs/actions.md +64 -0
- package/docs/eject.md +18 -0
- package/docs/llms-full.txt +1022 -0
- package/docs/llms.txt +89 -0
- package/docs/providers.md +68 -0
- package/docs/schema.md +86 -0
- package/docs/skills/availability/SKILL.md +44 -0
- package/docs/skills/booker/SKILL.md +51 -0
- package/docs/skills/bookings/SKILL.md +43 -0
- package/docs/skills/embeds/SKILL.md +49 -0
- package/docs/skills/event-types/SKILL.md +40 -0
- package/docs/skills/integrations/SKILL.md +52 -0
- package/docs/skills/routing-forms/SKILL.md +39 -0
- package/docs/skills/scheduling-basics/SKILL.md +51 -0
- package/docs/skills/slot-engine/SKILL.md +52 -0
- package/docs/skills/team-scheduling/SKILL.md +54 -0
- package/docs/skills/workflows/SKILL.md +55 -0
- package/package.json +87 -0
- package/src/actions/_helpers.ts +62 -0
- package/src/actions/accept-team-invite.ts +26 -0
- package/src/actions/add-booking-attendee.ts +32 -0
- package/src/actions/add-booking-note.ts +25 -0
- package/src/actions/add-date-override.ts +23 -0
- package/src/actions/add-private-link.ts +31 -0
- package/src/actions/assign-round-robin-host.ts +54 -0
- package/src/actions/cancel-booking.ts +39 -0
- package/src/actions/check-availability.ts +46 -0
- package/src/actions/confirm-booking.ts +15 -0
- package/src/actions/connect-calendar.ts +27 -0
- package/src/actions/connect-video.ts +57 -0
- package/src/actions/create-booking.ts +62 -0
- package/src/actions/create-event-type.ts +45 -0
- package/src/actions/create-host-group.ts +25 -0
- package/src/actions/create-routing-form.ts +39 -0
- package/src/actions/create-schedule.ts +36 -0
- package/src/actions/create-team.ts +44 -0
- package/src/actions/create-workflow.ts +83 -0
- package/src/actions/delete-event-type.ts +14 -0
- package/src/actions/delete-routing-form.ts +21 -0
- package/src/actions/delete-schedule.ts +14 -0
- package/src/actions/delete-workflow.ts +21 -0
- package/src/actions/disconnect-calendar.ts +22 -0
- package/src/actions/duplicate-event-type.ts +36 -0
- package/src/actions/export-bookings-csv.ts +54 -0
- package/src/actions/find-available-slot.ts +40 -0
- package/src/actions/get-availability.ts +20 -0
- package/src/actions/get-booking.ts +9 -0
- package/src/actions/get-event-type.ts +29 -0
- package/src/actions/install-conferencing-app.ts +29 -0
- package/src/actions/invite-team-member.ts +30 -0
- package/src/actions/list-bookings.ts +36 -0
- package/src/actions/list-calendar-integrations.ts +26 -0
- package/src/actions/list-event-types.ts +31 -0
- package/src/actions/list-routing-form-responses.ts +24 -0
- package/src/actions/list-routing-forms.ts +34 -0
- package/src/actions/list-schedules.ts +16 -0
- package/src/actions/list-selected-calendars.ts +41 -0
- package/src/actions/list-workflows.ts +34 -0
- package/src/actions/mark-no-show.ts +15 -0
- package/src/actions/refresh-busy-times.ts +26 -0
- package/src/actions/remove-booking-attendee.ts +24 -0
- package/src/actions/remove-date-override.ts +15 -0
- package/src/actions/remove-team-member.ts +23 -0
- package/src/actions/reorder-event-types.ts +18 -0
- package/src/actions/reschedule-booking.ts +45 -0
- package/src/actions/revoke-private-link.ts +16 -0
- package/src/actions/send-reschedule-link.ts +18 -0
- package/src/actions/set-appearance.ts +24 -0
- package/src/actions/set-default-conferencing-app.ts +25 -0
- package/src/actions/set-default-schedule.ts +15 -0
- package/src/actions/set-destination-calendar.ts +39 -0
- package/src/actions/set-event-type-hosts.ts +43 -0
- package/src/actions/set-event-type-location.ts +18 -0
- package/src/actions/set-host-availability-override.ts +27 -0
- package/src/actions/set-team-branding.ts +28 -0
- package/src/actions/submit-routing-form-response.ts +47 -0
- package/src/actions/toggle-event-type-hidden.ts +21 -0
- package/src/actions/toggle-selected-calendar.ts +43 -0
- package/src/actions/toggle-workflow.ts +25 -0
- package/src/actions/update-event-type.ts +54 -0
- package/src/actions/update-member-role.ts +28 -0
- package/src/actions/update-profile.ts +36 -0
- package/src/actions/update-routing-form.ts +36 -0
- package/src/actions/update-schedule.ts +53 -0
- package/src/actions/update-workflow.ts +89 -0
- package/src/core/buffers.ts +46 -0
- package/src/core/conflicts.ts +49 -0
- package/src/core/index.ts +8 -0
- package/src/core/limits.ts +60 -0
- package/src/core/round-robin.test.ts +95 -0
- package/src/core/round-robin.ts +103 -0
- package/src/core/rrule.ts +20 -0
- package/src/core/rules.ts +66 -0
- package/src/core/slots.test.ts +246 -0
- package/src/core/slots.ts +223 -0
- package/src/core/time.ts +136 -0
- package/src/index.ts +14 -0
- package/src/manifest.ts +174 -0
- package/src/react/components/SlotPicker.tsx +72 -0
- package/src/react/components/TimezoneSelect.tsx +55 -0
- package/src/react/components/_shadcn-shims.d.ts +251 -0
- package/src/react/components/booking-links/AvailabilityEditor.tsx +177 -0
- package/src/react/components/booking-links/BookingLinkCreateDialog.tsx +189 -0
- package/src/react/components/booking-links/ConferencingSelector.tsx +255 -0
- package/src/react/components/booking-links/CustomFieldsEditor.tsx +420 -0
- package/src/react/components/booking-links/DurationPicker.tsx +115 -0
- package/src/react/components/booking-links/SlugEditor.tsx +149 -0
- package/src/react/components/booking-links/index.ts +15 -0
- package/src/react/components/index.ts +13 -0
- package/src/react/hooks/useBookingFlow.ts +113 -0
- package/src/react/hooks/useEventType.ts +52 -0
- package/src/react/hooks/useReschedule.ts +39 -0
- package/src/react/hooks/useSlots.ts +88 -0
- package/src/react/hooks/useTimezone.ts +29 -0
- package/src/react/index.ts +10 -0
- package/src/schema/bookings.ts +124 -0
- package/src/schema/calendar-cache.ts +23 -0
- package/src/schema/credentials.ts +83 -0
- package/src/schema/event-types.ts +154 -0
- package/src/schema/index.ts +19 -0
- package/src/schema/routing-forms.ts +52 -0
- package/src/schema/schedules.ts +83 -0
- package/src/schema/teams.ts +46 -0
- package/src/schema/workflows.ts +128 -0
- package/src/server/availability-engine.ts +193 -0
- package/src/server/booking-service.ts +264 -0
- package/src/server/bookings-repo.ts +330 -0
- package/src/server/context.ts +49 -0
- package/src/server/db-types.ts +16 -0
- package/src/server/event-types-repo.ts +385 -0
- package/src/server/hooks.ts +213 -0
- package/src/server/ics.ts +99 -0
- package/src/server/index.ts +11 -0
- package/src/server/providers/builtin-video.ts +62 -0
- package/src/server/providers/google-calendar.ts +237 -0
- package/src/server/providers/google-meet.ts +22 -0
- package/src/server/providers/index.ts +7 -0
- package/src/server/providers/office365.ts +208 -0
- package/src/server/providers/registry.ts +43 -0
- package/src/server/providers/types.ts +126 -0
- package/src/server/providers/zoom.ts +173 -0
- package/src/server/schedules-repo.ts +279 -0
- package/src/server/video-oauth-state.test.ts +120 -0
- package/src/server/video-oauth-state.ts +116 -0
- package/src/server/video-oauth.ts +99 -0
- package/src/shared/index.ts +366 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: team-scheduling
|
|
3
|
+
description: Team event types, round-robin assignment, collective bookings, host weights, and no-show calibration.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Team scheduling
|
|
7
|
+
|
|
8
|
+
## Scheduling types
|
|
9
|
+
|
|
10
|
+
- **Collective** — all selected team members must be free; booking lists
|
|
11
|
+
all as organizers.
|
|
12
|
+
- **Round-robin** — one team member is chosen per booking by a rotation
|
|
13
|
+
strategy.
|
|
14
|
+
- **Managed** — parent event type pushed to member-level children (advanced;
|
|
15
|
+
stub in v1).
|
|
16
|
+
|
|
17
|
+
## Round-robin strategies
|
|
18
|
+
|
|
19
|
+
| Strategy | How |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `lowest-recent-bookings` | (Default) host with fewest bookings in past 30d wins; tiebreak by priority, then weight, then email |
|
|
22
|
+
| `weighted` | Weighted random pick; deterministic given the same seed |
|
|
23
|
+
| `calibrated` | Weighted with no-show penalty (hosts with high no-show rates get fewer) |
|
|
24
|
+
|
|
25
|
+
## Hosts
|
|
26
|
+
|
|
27
|
+
Rows in `event_type_hosts`: `{userEmail, isFixed, weight, priority,
|
|
28
|
+
scheduleId?}`. Fixed hosts always attend (like collective within a
|
|
29
|
+
round-robin set). Weight scales the relative share. Priority (lower =
|
|
30
|
+
higher) breaks ties.
|
|
31
|
+
|
|
32
|
+
## Host schedule override
|
|
33
|
+
|
|
34
|
+
Normally each host's default schedule is used for their slots. A
|
|
35
|
+
per-event-type-per-host override is possible via
|
|
36
|
+
`set-host-availability-override`.
|
|
37
|
+
|
|
38
|
+
## Out-of-office
|
|
39
|
+
|
|
40
|
+
OOO hosts are auto-excluded from round-robin for the duration of the OOO
|
|
41
|
+
window. Bookings can redirect to the OOO's `redirectUserEmail`.
|
|
42
|
+
|
|
43
|
+
## Host groups
|
|
44
|
+
|
|
45
|
+
`event_type_host_groups` lets you split hosts into groups — useful for
|
|
46
|
+
"collective within each group, round-robin across groups".
|
|
47
|
+
|
|
48
|
+
## Common tasks
|
|
49
|
+
|
|
50
|
+
| User | Action |
|
|
51
|
+
|---|---|
|
|
52
|
+
| "Make a sales demo that rotates Alice / Bob / Carol" | `create-event-type --schedulingType round-robin --teamId ...`, then `set-event-type-hosts` |
|
|
53
|
+
| "Add Dave as a fixed host" | `set-event-type-hosts` with Dave as `isFixed: true` |
|
|
54
|
+
| "Stop routing to Alice while she's on PTO" | Insert an `out_of_office_entries` row for Alice's range |
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: workflows
|
|
3
|
+
description: Trigger-based automations — reminders, follow-ups, webhooks — across the booking lifecycle.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Workflows
|
|
7
|
+
|
|
8
|
+
## Triggers
|
|
9
|
+
|
|
10
|
+
- `new-booking` — fires when a booking is created
|
|
11
|
+
- `before-event` — offset minutes BEFORE `startTime`
|
|
12
|
+
- `after-event` — offset minutes AFTER `endTime`
|
|
13
|
+
- `reschedule` — booking rescheduled
|
|
14
|
+
- `cancellation` — booking cancelled
|
|
15
|
+
- `no-show` — a host marked an attendee as no-show
|
|
16
|
+
|
|
17
|
+
## Steps
|
|
18
|
+
|
|
19
|
+
| Action | Sends |
|
|
20
|
+
|---|---|
|
|
21
|
+
| `email-host` | Email to the organizer |
|
|
22
|
+
| `email-attendee` | Email to the attendee |
|
|
23
|
+
| `email-address` | Email to a fixed address (e.g. ops@example.com) |
|
|
24
|
+
| `sms-attendee` | SMS to the attendee's phone (requires attendee `phone` custom field) |
|
|
25
|
+
| `sms-host` | SMS to the host |
|
|
26
|
+
| `sms-number` | SMS to a fixed number |
|
|
27
|
+
| `webhook` | HTTP POST to a URL |
|
|
28
|
+
|
|
29
|
+
Step `offsetMinutes` is relative to the trigger time. For `before-event`
|
|
30
|
+
use positive values (we apply them with a minus sign internally).
|
|
31
|
+
|
|
32
|
+
## Template variables
|
|
33
|
+
|
|
34
|
+
In email subjects / bodies and SMS bodies:
|
|
35
|
+
- `{eventName}` — event type title
|
|
36
|
+
- `{attendeeName}`, `{attendeeEmail}` — first attendee
|
|
37
|
+
- `{hostName}`, `{hostEmail}` — organizer
|
|
38
|
+
- `{startTime}`, `{endTime}` — formatted in host's timezone
|
|
39
|
+
- `{location}` — meeting URL or address
|
|
40
|
+
- `{cancelUrl}`, `{rescheduleUrl}` — public magic links
|
|
41
|
+
|
|
42
|
+
## Firing
|
|
43
|
+
|
|
44
|
+
When a booking fires a trigger, the hook dispatcher materializes rows in
|
|
45
|
+
`scheduled_reminders`. A recurring job processes due rows and fires the
|
|
46
|
+
actual emails/SMS/webhooks. Framework-side recurring jobs handle the
|
|
47
|
+
polling.
|
|
48
|
+
|
|
49
|
+
## Common tasks
|
|
50
|
+
|
|
51
|
+
| User | Action |
|
|
52
|
+
|---|---|
|
|
53
|
+
| "Email attendees 24h before the meeting" | `create-workflow --trigger before-event --steps '[{action: email-attendee, offsetMinutes: 1440}]'` |
|
|
54
|
+
| "Text me when someone books" | `create-workflow --trigger new-booking --steps '[{action: sms-host, ...}]'` |
|
|
55
|
+
| "Stop all reminders on an event type" | `toggle-workflow` to disable |
|
package/package.json
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@agent-native/scheduling",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Scheduling primitives for agent-native apps — event types, availability, bookings, team scheduling, workflows, routing forms. Powers the scheduling and calendar templates.",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/BuilderIO/agent-native",
|
|
10
|
+
"directory": "packages/scheduling"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/BuilderIO/agent-native/issues"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/BuilderIO/agent-native#readme",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": "./dist/index.js",
|
|
18
|
+
"./schema": "./dist/schema/index.js",
|
|
19
|
+
"./schema/event-types": "./dist/schema/event-types.js",
|
|
20
|
+
"./schema/schedules": "./dist/schema/schedules.js",
|
|
21
|
+
"./schema/bookings": "./dist/schema/bookings.js",
|
|
22
|
+
"./schema/teams": "./dist/schema/teams.js",
|
|
23
|
+
"./schema/credentials": "./dist/schema/credentials.js",
|
|
24
|
+
"./schema/calendar-cache": "./dist/schema/calendar-cache.js",
|
|
25
|
+
"./schema/workflows": "./dist/schema/workflows.js",
|
|
26
|
+
"./schema/routing-forms": "./dist/schema/routing-forms.js",
|
|
27
|
+
"./core": "./dist/core/index.js",
|
|
28
|
+
"./server": "./dist/server/index.js",
|
|
29
|
+
"./server/providers": "./dist/server/providers/index.js",
|
|
30
|
+
"./actions/*": "./dist/actions/*.js",
|
|
31
|
+
"./react": "./dist/react/index.js",
|
|
32
|
+
"./react/components": "./dist/react/components/index.js",
|
|
33
|
+
"./shared": "./dist/shared/index.js",
|
|
34
|
+
"./manifest": "./dist/manifest.js",
|
|
35
|
+
"./docs/llms.txt": "./docs/llms.txt",
|
|
36
|
+
"./docs/llms-full.txt": "./docs/llms-full.txt",
|
|
37
|
+
"./docs/*": "./docs/*",
|
|
38
|
+
"./skills/*": "./docs/skills/*"
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist",
|
|
42
|
+
"docs",
|
|
43
|
+
"src"
|
|
44
|
+
],
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@date-fns/tz": "^1.2.0",
|
|
47
|
+
"date-fns": "^4.1.0",
|
|
48
|
+
"nanoid": "^5.1.9",
|
|
49
|
+
"rrule": "^2.8.1",
|
|
50
|
+
"zod": "^4.3.6"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"@agent-native/core": ">=0.7",
|
|
54
|
+
"@tabler/icons-react": ">=3",
|
|
55
|
+
"drizzle-orm": ">=0.45",
|
|
56
|
+
"react": ">=18",
|
|
57
|
+
"react-dom": ">=18"
|
|
58
|
+
},
|
|
59
|
+
"peerDependenciesMeta": {
|
|
60
|
+
"@tabler/icons-react": {
|
|
61
|
+
"optional": true
|
|
62
|
+
},
|
|
63
|
+
"react": {
|
|
64
|
+
"optional": true
|
|
65
|
+
},
|
|
66
|
+
"react-dom": {
|
|
67
|
+
"optional": true
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
"devDependencies": {
|
|
71
|
+
"@tabler/icons-react": "^3.0.0",
|
|
72
|
+
"@types/node": "^24.2.1",
|
|
73
|
+
"@types/react": "^19.2.14",
|
|
74
|
+
"drizzle-orm": "^0.45.2",
|
|
75
|
+
"react": "^19.2.5",
|
|
76
|
+
"typescript": "^6.0.3",
|
|
77
|
+
"vitest": "^4.1.5",
|
|
78
|
+
"@agent-native/core": "0.7.15"
|
|
79
|
+
},
|
|
80
|
+
"scripts": {
|
|
81
|
+
"build": "tsc && node scripts/build-llms-full.mjs",
|
|
82
|
+
"dev": "tsc --watch",
|
|
83
|
+
"typecheck": "tsc --noEmit",
|
|
84
|
+
"test": "vitest --run",
|
|
85
|
+
"release": "npm version patch && npm publish --access public"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared helpers for actions in this package.
|
|
3
|
+
*/
|
|
4
|
+
import { and, eq } from "drizzle-orm";
|
|
5
|
+
import { getSchedulingContext } from "../server/context.js";
|
|
6
|
+
|
|
7
|
+
export function currentUserEmail(): string {
|
|
8
|
+
const email = getSchedulingContext().getCurrentUserEmail();
|
|
9
|
+
if (!email) throw new Error("Not authenticated");
|
|
10
|
+
return email;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export function currentUserEmailOrNull(): string | null {
|
|
14
|
+
return getSchedulingContext().getCurrentUserEmail() ?? null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function currentOrgId(): string | undefined {
|
|
18
|
+
return getSchedulingContext().getCurrentOrgId?.();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export async function assertTeamAdmin(teamId: string): Promise<void> {
|
|
22
|
+
const { getDb, schema } = getSchedulingContext();
|
|
23
|
+
const email = currentUserEmail();
|
|
24
|
+
const rows = await getDb()
|
|
25
|
+
.select({ role: schema.teamMembers.role })
|
|
26
|
+
.from(schema.teamMembers)
|
|
27
|
+
.where(
|
|
28
|
+
and(
|
|
29
|
+
eq(schema.teamMembers.teamId, teamId),
|
|
30
|
+
eq(schema.teamMembers.userEmail, email),
|
|
31
|
+
),
|
|
32
|
+
)
|
|
33
|
+
.limit(1);
|
|
34
|
+
const role = rows[0]?.role;
|
|
35
|
+
if (role !== "owner" && role !== "admin") {
|
|
36
|
+
throw new Error("Forbidden: team owner or admin required");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Verify the current user is a member of the team (any role). Read-only
|
|
42
|
+
* team resource listings should gate on this so that team IDs cannot be
|
|
43
|
+
* enumerated by guessing. Throws "Not authenticated" if there is no
|
|
44
|
+
* current user, and "Forbidden" if the user is not a member.
|
|
45
|
+
*/
|
|
46
|
+
export async function assertTeamMember(teamId: string): Promise<void> {
|
|
47
|
+
const { getDb, schema } = getSchedulingContext();
|
|
48
|
+
const email = currentUserEmail();
|
|
49
|
+
const rows = await getDb()
|
|
50
|
+
.select({ role: schema.teamMembers.role })
|
|
51
|
+
.from(schema.teamMembers)
|
|
52
|
+
.where(
|
|
53
|
+
and(
|
|
54
|
+
eq(schema.teamMembers.teamId, teamId),
|
|
55
|
+
eq(schema.teamMembers.userEmail, email),
|
|
56
|
+
),
|
|
57
|
+
)
|
|
58
|
+
.limit(1);
|
|
59
|
+
if (!rows[0]) {
|
|
60
|
+
throw new Error("Forbidden: team member required");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { eq } from "drizzle-orm";
|
|
4
|
+
import { getSchedulingContext } from "../server/context.js";
|
|
5
|
+
|
|
6
|
+
export default defineAction({
|
|
7
|
+
description: "Accept a pending team invite by token",
|
|
8
|
+
schema: z.object({ token: z.string() }),
|
|
9
|
+
run: async (args) => {
|
|
10
|
+
const { getDb, schema } = getSchedulingContext();
|
|
11
|
+
const rows = await getDb()
|
|
12
|
+
.select()
|
|
13
|
+
.from(schema.teamMembers)
|
|
14
|
+
.where(eq(schema.teamMembers.inviteToken, args.token));
|
|
15
|
+
if (!rows[0]) throw new Error("Invite not found or already used");
|
|
16
|
+
await getDb()
|
|
17
|
+
.update(schema.teamMembers)
|
|
18
|
+
.set({
|
|
19
|
+
accepted: true,
|
|
20
|
+
joinedAt: new Date().toISOString(),
|
|
21
|
+
inviteToken: null,
|
|
22
|
+
})
|
|
23
|
+
.where(eq(schema.teamMembers.id, rows[0].id));
|
|
24
|
+
return { teamId: rows[0].teamId };
|
|
25
|
+
},
|
|
26
|
+
});
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { nanoid } from "nanoid";
|
|
4
|
+
import { getBookingByUid } from "../server/bookings-repo.js";
|
|
5
|
+
import { getSchedulingContext } from "../server/context.js";
|
|
6
|
+
|
|
7
|
+
export default defineAction({
|
|
8
|
+
description: "Add an attendee (or seat reservation) to a booking",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
uid: z.string(),
|
|
11
|
+
name: z.string(),
|
|
12
|
+
email: z.string(),
|
|
13
|
+
timezone: z.string().optional(),
|
|
14
|
+
}),
|
|
15
|
+
run: async (args) => {
|
|
16
|
+
const booking = await getBookingByUid(args.uid);
|
|
17
|
+
if (!booking) throw new Error(`Booking ${args.uid} not found`);
|
|
18
|
+
const { getDb, schema } = getSchedulingContext();
|
|
19
|
+
await getDb()
|
|
20
|
+
.insert(schema.bookingAttendees)
|
|
21
|
+
.values({
|
|
22
|
+
id: nanoid(),
|
|
23
|
+
bookingId: booking.id,
|
|
24
|
+
email: args.email,
|
|
25
|
+
name: args.name,
|
|
26
|
+
timezone: args.timezone ?? null,
|
|
27
|
+
noShow: false,
|
|
28
|
+
createdAt: new Date().toISOString(),
|
|
29
|
+
});
|
|
30
|
+
return { booking: await getBookingByUid(args.uid) };
|
|
31
|
+
},
|
|
32
|
+
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { nanoid } from "nanoid";
|
|
4
|
+
import { getBookingByUid } from "../server/bookings-repo.js";
|
|
5
|
+
import { getSchedulingContext } from "../server/context.js";
|
|
6
|
+
import { currentUserEmail } from "./_helpers.js";
|
|
7
|
+
|
|
8
|
+
export default defineAction({
|
|
9
|
+
description: "Add an internal (host-only) note to a booking",
|
|
10
|
+
schema: z.object({ uid: z.string(), content: z.string() }),
|
|
11
|
+
run: async (args) => {
|
|
12
|
+
const booking = await getBookingByUid(args.uid);
|
|
13
|
+
if (!booking) throw new Error(`Booking ${args.uid} not found`);
|
|
14
|
+
const { getDb, schema } = getSchedulingContext();
|
|
15
|
+
const id = nanoid();
|
|
16
|
+
await getDb().insert(schema.bookingNotes).values({
|
|
17
|
+
id,
|
|
18
|
+
bookingId: booking.id,
|
|
19
|
+
authorEmail: currentUserEmail(),
|
|
20
|
+
content: args.content,
|
|
21
|
+
createdAt: new Date().toISOString(),
|
|
22
|
+
});
|
|
23
|
+
return { id };
|
|
24
|
+
},
|
|
25
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { upsertDateOverride } from "../server/schedules-repo.js";
|
|
4
|
+
|
|
5
|
+
export default defineAction({
|
|
6
|
+
description:
|
|
7
|
+
"Add or replace a date-specific override on a schedule (empty intervals = fully blocked)",
|
|
8
|
+
schema: z.object({
|
|
9
|
+
scheduleId: z.string(),
|
|
10
|
+
date: z.string().describe("YYYY-MM-DD"),
|
|
11
|
+
intervals: z.array(
|
|
12
|
+
z.object({ startTime: z.string(), endTime: z.string() }),
|
|
13
|
+
),
|
|
14
|
+
}),
|
|
15
|
+
run: async (args) => {
|
|
16
|
+
await upsertDateOverride(
|
|
17
|
+
args.scheduleId,
|
|
18
|
+
args.date,
|
|
19
|
+
args.intervals as { startTime: string; endTime: string }[],
|
|
20
|
+
);
|
|
21
|
+
return { ok: true };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { nanoid } from "nanoid";
|
|
4
|
+
import { assertAccess } from "@agent-native/core/sharing";
|
|
5
|
+
import { getSchedulingContext } from "../server/context.js";
|
|
6
|
+
|
|
7
|
+
export default defineAction({
|
|
8
|
+
description: "Create a private hashed link for an event type",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
eventTypeId: z.string(),
|
|
11
|
+
expiresAt: z.string().optional(),
|
|
12
|
+
isSingleUse: z.boolean().optional().default(false),
|
|
13
|
+
}),
|
|
14
|
+
run: async (args) => {
|
|
15
|
+
await assertAccess("event-type", args.eventTypeId, "editor");
|
|
16
|
+
const { getDb, schema } = getSchedulingContext();
|
|
17
|
+
const id = nanoid();
|
|
18
|
+
const hash = nanoid(24);
|
|
19
|
+
await getDb()
|
|
20
|
+
.insert(schema.hashedLinks)
|
|
21
|
+
.values({
|
|
22
|
+
id,
|
|
23
|
+
hash,
|
|
24
|
+
eventTypeId: args.eventTypeId,
|
|
25
|
+
expiresAt: args.expiresAt ?? null,
|
|
26
|
+
isSingleUse: args.isSingleUse ?? false,
|
|
27
|
+
createdAt: new Date().toISOString(),
|
|
28
|
+
});
|
|
29
|
+
return { id, hash };
|
|
30
|
+
},
|
|
31
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { eq } from "drizzle-orm";
|
|
4
|
+
import { getSchedulingContext } from "../server/context.js";
|
|
5
|
+
import { countBookingsByHostInRange } from "../server/bookings-repo.js";
|
|
6
|
+
import { assignRoundRobin, type HostMetrics } from "../core/round-robin.js";
|
|
7
|
+
import type { Host } from "../shared/index.js";
|
|
8
|
+
|
|
9
|
+
export default defineAction({
|
|
10
|
+
description:
|
|
11
|
+
"Select the next host for a round-robin event type based on recent booking load",
|
|
12
|
+
schema: z.object({
|
|
13
|
+
eventTypeId: z.string(),
|
|
14
|
+
strategy: z
|
|
15
|
+
.enum(["lowest-recent-bookings", "weighted", "calibrated"])
|
|
16
|
+
.default("lowest-recent-bookings"),
|
|
17
|
+
}),
|
|
18
|
+
run: async (args) => {
|
|
19
|
+
const { getDb, schema } = getSchedulingContext();
|
|
20
|
+
const hostRows = await getDb()
|
|
21
|
+
.select()
|
|
22
|
+
.from(schema.eventTypeHosts)
|
|
23
|
+
.where(eq(schema.eventTypeHosts.eventTypeId, args.eventTypeId));
|
|
24
|
+
const hosts: Host[] = hostRows.map((r: any) => ({
|
|
25
|
+
userEmail: r.userEmail,
|
|
26
|
+
eventTypeId: r.eventTypeId,
|
|
27
|
+
isFixed: Boolean(r.isFixed),
|
|
28
|
+
weight: r.weight,
|
|
29
|
+
priority: r.priority,
|
|
30
|
+
scheduleId: r.scheduleId ?? undefined,
|
|
31
|
+
}));
|
|
32
|
+
const windowDays = 30;
|
|
33
|
+
const now = new Date();
|
|
34
|
+
const from = new Date(now.getTime() - windowDays * 86400_000).toISOString();
|
|
35
|
+
const to = now.toISOString();
|
|
36
|
+
const metrics = new Map<string, HostMetrics>();
|
|
37
|
+
for (const h of hosts) {
|
|
38
|
+
metrics.set(h.userEmail, {
|
|
39
|
+
recentBookingCount: await countBookingsByHostInRange(
|
|
40
|
+
h.userEmail,
|
|
41
|
+
from,
|
|
42
|
+
to,
|
|
43
|
+
),
|
|
44
|
+
noShowRate: 0,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
const chosen = assignRoundRobin({
|
|
48
|
+
hosts,
|
|
49
|
+
metrics,
|
|
50
|
+
strategy: args.strategy,
|
|
51
|
+
});
|
|
52
|
+
return { hostEmail: chosen?.userEmail ?? null };
|
|
53
|
+
},
|
|
54
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { cancelBooking } from "../server/booking-service.js";
|
|
4
|
+
import { getBookingByUid } from "../server/bookings-repo.js";
|
|
5
|
+
import { currentUserEmailOrNull } from "./_helpers.js";
|
|
6
|
+
|
|
7
|
+
export default defineAction({
|
|
8
|
+
description: "Cancel a booking",
|
|
9
|
+
schema: z.object({
|
|
10
|
+
uid: z.string(),
|
|
11
|
+
reason: z.string().optional(),
|
|
12
|
+
cancelledBy: z.enum(["attendee", "host"]).optional(),
|
|
13
|
+
token: z.string().optional(),
|
|
14
|
+
}),
|
|
15
|
+
run: async (args) => ({
|
|
16
|
+
booking: await cancelBookingAfterAccessCheck(args),
|
|
17
|
+
}),
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
async function cancelBookingAfterAccessCheck(args: {
|
|
21
|
+
uid: string;
|
|
22
|
+
reason?: string;
|
|
23
|
+
cancelledBy?: "attendee" | "host";
|
|
24
|
+
token?: string;
|
|
25
|
+
}) {
|
|
26
|
+
const booking = await getBookingByUid(args.uid);
|
|
27
|
+
if (!booking) throw new Error(`Booking ${args.uid} not found`);
|
|
28
|
+
const userEmail = currentUserEmailOrNull();
|
|
29
|
+
const isHost = !!userEmail && userEmail === booking.hostEmail;
|
|
30
|
+
const hasToken = !!args.token && args.token === booking.cancelToken;
|
|
31
|
+
if (!isHost && !hasToken) {
|
|
32
|
+
throw new Error("Not authorized to cancel this booking");
|
|
33
|
+
}
|
|
34
|
+
return cancelBooking({
|
|
35
|
+
uid: args.uid,
|
|
36
|
+
reason: args.reason,
|
|
37
|
+
cancelledBy: args.cancelledBy,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import {
|
|
4
|
+
getEventTypeById,
|
|
5
|
+
getEventTypeBySlug,
|
|
6
|
+
} from "../server/event-types-repo.js";
|
|
7
|
+
import { getAvailableSlots } from "../server/availability-engine.js";
|
|
8
|
+
import { currentUserEmail } from "./_helpers.js";
|
|
9
|
+
|
|
10
|
+
export default defineAction({
|
|
11
|
+
description:
|
|
12
|
+
"List available time slots for a given event type over a date range",
|
|
13
|
+
schema: z.object({
|
|
14
|
+
eventTypeId: z.string().optional().describe("Event type id"),
|
|
15
|
+
slug: z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Event type slug (requires ownerEmail or teamId)"),
|
|
19
|
+
ownerEmail: z.string().optional(),
|
|
20
|
+
teamId: z.string().optional(),
|
|
21
|
+
from: z.string().describe("ISO 8601 start of range"),
|
|
22
|
+
to: z.string().describe("ISO 8601 end of range"),
|
|
23
|
+
timezone: z.string().optional().describe("Viewer's timezone"),
|
|
24
|
+
}),
|
|
25
|
+
run: async (args) => {
|
|
26
|
+
const event = args.eventTypeId
|
|
27
|
+
? await getEventTypeById(args.eventTypeId)
|
|
28
|
+
: args.slug
|
|
29
|
+
? await getEventTypeBySlug({
|
|
30
|
+
ownerEmail: args.ownerEmail,
|
|
31
|
+
teamId: args.teamId,
|
|
32
|
+
slug: args.slug,
|
|
33
|
+
})
|
|
34
|
+
: null;
|
|
35
|
+
if (!event) throw new Error("Event type not found");
|
|
36
|
+
const forUser = event.ownerEmail ?? currentUserEmail();
|
|
37
|
+
const slots = await getAvailableSlots({
|
|
38
|
+
eventType: event,
|
|
39
|
+
forUserEmail: forUser,
|
|
40
|
+
rangeStart: new Date(args.from),
|
|
41
|
+
rangeEnd: new Date(args.to),
|
|
42
|
+
viewerTimezone: args.timezone,
|
|
43
|
+
});
|
|
44
|
+
return { eventTypeId: event.id, slots };
|
|
45
|
+
},
|
|
46
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import {
|
|
4
|
+
updateBookingStatus,
|
|
5
|
+
getBookingByUid,
|
|
6
|
+
} from "../server/bookings-repo.js";
|
|
7
|
+
|
|
8
|
+
export default defineAction({
|
|
9
|
+
description: "Confirm a pending booking (requires-confirmation flow)",
|
|
10
|
+
schema: z.object({ uid: z.string() }),
|
|
11
|
+
run: async (args) => {
|
|
12
|
+
await updateBookingStatus(args.uid, "confirmed");
|
|
13
|
+
return { booking: await getBookingByUid(args.uid) };
|
|
14
|
+
},
|
|
15
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineAction } from "@agent-native/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { nanoid } from "nanoid";
|
|
4
|
+
import { getCalendarProvider } from "../server/providers/registry.js";
|
|
5
|
+
|
|
6
|
+
function badRequest(message: string): Error & { statusCode: number } {
|
|
7
|
+
return Object.assign(new Error(message), { statusCode: 400 });
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default defineAction({
|
|
11
|
+
description: "Start the OAuth flow for a calendar provider",
|
|
12
|
+
schema: z.object({
|
|
13
|
+
kind: z.string(),
|
|
14
|
+
redirectUri: z.string(),
|
|
15
|
+
}),
|
|
16
|
+
run: async (args) => {
|
|
17
|
+
const provider = getCalendarProvider(args.kind);
|
|
18
|
+
if (!provider)
|
|
19
|
+
throw badRequest(`No calendar provider registered for ${args.kind}`);
|
|
20
|
+
const state = nanoid(16);
|
|
21
|
+
const { authUrl } = await provider.startOAuth({
|
|
22
|
+
redirectUri: args.redirectUri,
|
|
23
|
+
state,
|
|
24
|
+
});
|
|
25
|
+
return { authUrl, state };
|
|
26
|
+
},
|
|
27
|
+
});
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start the OAuth flow for a video conferencing provider (e.g. Zoom).
|
|
3
|
+
*
|
|
4
|
+
* Returns an `authUrl` the UI should redirect to, plus the `state` value so
|
|
5
|
+
* the caller's OAuth callback route can validate it. Consumers handle the
|
|
6
|
+
* callback at `/_agent-native/oauth/<kind>/callback` (see
|
|
7
|
+
* `handleVideoOAuthCallback` in the server entry point).
|
|
8
|
+
*
|
|
9
|
+
* The `state` value is HMAC-signed against the request user's email and a
|
|
10
|
+
* server secret so the callback can verify the OAuth round-trip belongs to
|
|
11
|
+
* the same authenticated user that started it. See `verifyVideoOAuthState`
|
|
12
|
+
* in `../server/video-oauth-state.ts`.
|
|
13
|
+
*
|
|
14
|
+
* Zero-OAuth providers (the built-in video provider, or Google Meet via the
|
|
15
|
+
* Google Calendar credential) do not expose `startOAuth` and should be
|
|
16
|
+
* installed via `install-conferencing-app` instead.
|
|
17
|
+
*/
|
|
18
|
+
import { defineAction } from "@agent-native/core";
|
|
19
|
+
import { getRequestUserEmail } from "@agent-native/core/server/request-context";
|
|
20
|
+
import { z } from "zod";
|
|
21
|
+
import { getVideoProvider } from "../server/providers/registry.js";
|
|
22
|
+
import { signVideoOAuthState } from "../server/video-oauth-state.js";
|
|
23
|
+
|
|
24
|
+
function badRequest(message: string): Error & { statusCode: number } {
|
|
25
|
+
return Object.assign(new Error(message), { statusCode: 400 });
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default defineAction({
|
|
29
|
+
description: "Start the OAuth flow for a video conferencing provider",
|
|
30
|
+
schema: z.object({
|
|
31
|
+
kind: z.string(),
|
|
32
|
+
redirectUri: z.string(),
|
|
33
|
+
}),
|
|
34
|
+
run: async (args) => {
|
|
35
|
+
const provider = getVideoProvider(args.kind);
|
|
36
|
+
if (!provider) {
|
|
37
|
+
throw badRequest(`No video provider registered for ${args.kind}`);
|
|
38
|
+
}
|
|
39
|
+
if (!provider.startOAuth) {
|
|
40
|
+
throw badRequest(
|
|
41
|
+
`Video provider ${args.kind} does not support OAuth — install it with 'install-conferencing-app' instead`,
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
const userEmail = getRequestUserEmail();
|
|
45
|
+
if (!userEmail) {
|
|
46
|
+
throw Object.assign(new Error("Authentication required"), {
|
|
47
|
+
statusCode: 401,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
const state = signVideoOAuthState({ kind: args.kind, userEmail });
|
|
51
|
+
const { authUrl } = await provider.startOAuth({
|
|
52
|
+
redirectUri: args.redirectUri,
|
|
53
|
+
state,
|
|
54
|
+
});
|
|
55
|
+
return { authUrl, state };
|
|
56
|
+
},
|
|
57
|
+
});
|