// Create a calendar and a user
const calendar = new SD_Calendar({ name: "Booking", color_theme: "blue" });
const johnDoe = new SD_User({ name: "John Doe", email: "jd@example.com" });
calendar.addUser({ user: johnDoe, role: "owner" });
// Create an event
const event = calendar.createEvent({
name: "Planning Meeting",
description: "Scrum Standup",
status: "scheduled",
visibility: "private",
color_theme: "purple",
location: "Copenhagen HQ",
start_time: "2025-09-10T08:00:00Z",
end_time: "2025-09-10T08:20:00Z",
recurrence_rule: "FREQ=WEEKLY;INTERVAL=2", // bi-weekly
all_day: false,
send_invitations: true,
});
// List events in a date range
calendar.events({
from: "2025-09-01T00:00:00Z",
to: "2025-09-30T23:59:59Z",
});
// Invite users to the event
const users = [
{ email: "alice@example.com", role: "guest" },
{ email: "bob@example.com", role: "guest" },
{ email: "jane@example.com", role: "guest" },
];
event.inviteUsers(users);
// Handle responses
event.acceptInvitation(["alice@example.com", "bob@example.com"]);
event.declineInvitation(["jane@example.com"]);
// Postpone and cancel
event.postpone({ duration: "PT2H", notify: true }); // ISO8601 duration for 2 hours
event.cancel({ notify: true });
// Multiple calendars for the same user
johnDoe.addCalendar({ name: "Work", status: "public" });
johnDoe.addCalendar({ name: "Family", status: "private" });
// Fetch calendars
const workCalendars = johnDoe.calendars({ status: "private" });
// => [{ calendar: calendar, name: "Family" }]
const workCalendar = johnDoe.getCalendar({ name: "Work", status: "public" });
// Find free time slots
const timeSlots = johnDoe.timeSlots({
start: new Date().toISOString(),
end: new Date(Date.now() + 7 * 24 * 60 * 60 * 1000).toISOString(), // 1 week from now
calendars: ["Work", "Family"],
});
// => [{ start: "2025-09-12T13:00:00Z", end: "2025-09-12T14:00:00Z" }]
// Book a meeting directly
johnDoe.bookMeeting({
start: "2025-09-15T10:00:00Z",
end: "2025-09-15T11:00:00Z",
});
// Add a reminder to an event
event.addReminder({
minutes_before: 30,
method: "email",
});
// Same features for Tenants
const hotelRoyal = new Tenant({ name: "Hotel Royal" });
const room101 = hotelRoyal.addCalendar({ name: "Room 101" });
const room102 = hotelRoyal.addCalendar({ name: "Room 102" });
const room103 = hotelRoyal.addCalendar({ name: "Room 103" });
const booking = room101.createEvent({
name: "Guest Reservation",
status: "scheduled",
start_time: "2025-10-05T14:00:00Z",
end_time: "2025-10-07T10:00:00Z",
send_invitations: true,
});
room101.getEvent(booking.id);
room101.deleteEvent(booking.id);
// Optional: guest invitations
booking.inviteUsers([{ email: "guest@example.com", role: "guest" }]);
booking.acceptInvitation(["guest@example.com"]);
// Reminders before check-in
booking.addReminder({ minutes_before: 1440, method: "email" }); // 24h before
booking.addReminder({ minutes_before: 60, method: "sms" }); // 1h before