SDK Types

Shared public models and input/output contracts used across the Scrims SDK.

SDK Types

Table of Contents

JsonObject

type JsonObject = Record<string, unknown>;

ScrimsIdInput

type ScrimsIdInput = string;

PluginAuthConfig

type PluginAuthConfig = {
  pluginId: string;
  privateKeyPem: string;
};

ScrimsApiClientOptions

type ScrimsApiClientOptions = {
  pluginId?: string;
  privateKeyPem?: string;
};

ScrimsCalendar

type ScrimsCalendar = JsonObject
  & {
        _id?: string;
        owner_id?: string;
        title?: string;
        description?: string;
        icon_url?: string;
        cover_url?: string;
        host_roles?: string[];
        public?: boolean;
        default_event?: DefaultEvent;
        type?: string;
        extensions?: string[];
        meta?: JsonObject;
        parent_calendar?: string;
        sub_calendars_label?: string;
        main_calendar_label?: string;
        created_at?: string | Date;
        updated_at?: string | Date;
        active_for_me?: boolean;
        has_v2_access?: boolean;
        archived?: boolean;
      };

ScrimsEvent

type ScrimsEvent = JsonObject
  & {
        _id?: string;
        calendar?: string;
        owner_id?: string;
        start_time?: string | Date;
        end_time?: string | Date;
        start_timezone?: string;
        end_timezone?: string;
        is_all_day?: boolean;
        recurrence?: string[];
        recurrence_id?: string;
        title?: string;
        subheading?: string;
        remove_assigned_roles?: boolean;
        descriptions?: EventDescription;
        color?: string;
        image_url?: string;
        location_meta?: LocationMeta;
        allowed_roles?: string[];
        banned_roles?: string[];
        assign_roles?: string[];
        primarily_hosting?: boolean;
        archived?: boolean;
        no_further_occurrence?: boolean;
        discarded?: boolean;
        guest_can_edit?: boolean;
        is_private?: boolean;
        logs?: JsonObject[];
        etag?: string;
        notifications?: EventNotification[];
        send_notifications?: boolean;
        template?: string | null;
        tickets?: EventTicket[];
        emailTemplates?: EmailTemplates;
        general?: General;
        register?: Register;
        waitlist?: Waitlist;
        estimate_guest_count?: number;
        migration_overrides?: JsonObject;
        created_at?: string | Date;
        updated_at?: string | Date;
      };

ScrimsCalendarMember

type ScrimsCalendarMember = JsonObject
  & {
        _id?: string;
        calendar?: string | ScrimsCalendar;
        member?: string | ScrimsMember;
        permissions?: number;
        permissions_override?: number;
        roles?: string[] | ScrimsRole[];
        created_at?: string | Date;
        updated_at?: string | Date;
      };

ScrimsMember

type ScrimsMember = JsonObject
  & {
        _id?: string;
        email?: string;
        is_paid?: boolean;
        image?: string;
        preferred_timezone?: string;
        username?: string;
        name?: string;
        super_admin?: boolean;
        moderator_status?: string;
      };

ScrimsRole

type ScrimsRole = JsonObject
  & {
        _id?: string;
        name?: string;
        description?: string;
        permissions?: number | string;
        calendar?: string;
        color?: number;
        hoist?: boolean;
        icon?: string;
        managed?: boolean;
        mentionable?: boolean;
        rawPosition?: number;
        tags?: JsonObject;
        unicodeEmoji?: string;
        created_at?: string | Date;
        updated_at?: string | Date;
      };

DefaultEvent

type DefaultEvent = JsonObject
  & {
        allowed_roles?: string[];
        banned_roles?: string[];
        assign_roles?: string[];
        remove_assigned_roles?: boolean;
        descriptions?: EventDescription;
        duration?: boolean;
        primarily_hosting?: boolean;
        notifications?: EventNotification[];
        send_notifications?: boolean;
        created_at?: string | Date;
        updated_at?: string | Date;
      };

EventDescription

type EventDescription = JsonObject
  & {
        description?: string;
        objectives?: string[];
        specialNotes?: string[];
      };

EventNotification

type EventNotification = JsonObject
  & {
        message?: string;
        status?: number;
        before_in_minutes?: number;
        recipient?: string;
        ticket_type?: string;
      };

CustomQuestionValidation

type CustomQuestionValidation = JsonObject
  & {
        min_length?: number;
        max_length?: number;
        min_value?: number;
        max_value?: number;
        pattern?: string;
        custom_message?: string;
      };

CustomQuestion

type CustomQuestion = JsonObject
  & {
        _id?: string;
        question?: string;
        type?: string;
        required?: boolean;
        placeholder?: string;
        options?: string[];
        validation?: CustomQuestionValidation;
        help_text?: string;
        icon?: string;
        order?: number;
      };

RegistrationDeadline

type RegistrationDeadline = JsonObject
  & {
        days?: number;
        hours?: number;
        minutes?: number;
      };

General

type General = JsonObject
  & {
        allow_multiple_hosts?: boolean;
        allow_multiple_specs?: boolean;
        add_creator_as_host?: boolean;
        enable_tickets?: boolean;
        enable_registration_deadline?: boolean;
        total_capacity?: number;
        specs_label?: string;
        ticket_label?: string;
        host_label?: string;
        invited_label?: string;
        confirmed_label?: string;
        late_label?: string;
        tentative_label?: string;
        absence_label?: string;
        kicked_label?: string;
        ticket_icon?: string;
        invited_icon?: string;
        confirmed_icon?: string;
        late_icon?: string;
        tentative_icon?: string;
        absence_icon?: string;
        kicked_icon?: string;
        host_icon?: string;
        empty_icon?: string;
        signups_icon?: string;
        countdown_icon?: string;
        static_icon?: string;
        reset_specs_icon?: string;
        enable_bundles?: boolean;
        members_only?: boolean;
        allow_multiple_ticket?: boolean;
        registration_deadline?: RegistrationDeadline;
      };

LocationMeta

type LocationMeta = JsonObject
  & {
        address?: string;
        link?: string;
        type?: string;
      };

Register

type Register = JsonObject
  & {
        show_form?: boolean;
        custom_questions?: CustomQuestion[];
      };

Waitlist

type Waitlist = JsonObject
  & {
        waitlist_enabled?: boolean;
        waitlist_label?: string;
        waitlist_icon?: string;
        waitlist_message?: string;
        waitlist_time?: string;
        waitlist_threshold?: number;
        waitlist_max_capacity?: number;
        open_waitlist_if?: string[];
      };

EmailTemplates

type EmailTemplates = JsonObject
  & {
        accept_join_request?: string;
        decline_join_request?: string;
        invite_guests?: string;
        reminder?: string;
        cancellation?: string;
      };

TicketTag

type TicketTag = JsonObject
  & {
        name?: string;
        icon?: string;
      };

Fee

type Fee = JsonObject
  & {
        high?: number;
        low?: number;
        discount?: number;
        offer?: string;
        currency?: string;
        tax?: number;
      };

SalesPeriod

type SalesPeriod = JsonObject
  & {
        sales_start?: string | Date;
        sales_end?: string | Date;
        timezone?: string;
        utc?: string | Date;
      };

Capacity

type Capacity = JsonObject
  & {
        max_quantity_per_order?: number;
        min_quantity_per_order?: number;
        quantity_required?: number;
        max_quantity?: number;
        quantity_remaining?: number;
      };

Refunds

type Refunds = JsonObject
  & {
        allowed?: boolean;
        processed_by?: string;
      };

BoosterOverrides

type BoosterOverrides = JsonObject
  & {
        sales_period?: JsonObject;
        fee?: JsonObject;
        requires_approval?: boolean;
      };

EventTicket

type EventTicket = JsonObject
  & {
        _id?: string;
        name?: string;
        description?: string;
        color?: string;
        icon?: string;
        image?: string;
        ticket_specs?: TicketSpec[];
        ticket_tags?: TicketTag[];
        fee?: Fee;
        sales_period?: SalesPeriod;
        capacity?: Capacity;
        requires_approval?: boolean;
        refunds?: Refunds;
        booster_overrides?: BoosterOverrides;
      };

TicketSpec

type TicketSpec = JsonObject
  & {
        name?: string;
        icon?: string;
        color?: string;
        description?: string;
        max_capacity?: number;
      };

ModalConfig

type ModalConfig = JsonObject
  & {
        isWaitlist?: boolean;
        icon?: string;
        title?: string;
        thankYouMessage?: string;
        emailMessage?: string;
        buttonText?: string;
        price?: (
        {
                amount: number;
                currency: string;
              }
              | null
        );
      };

CalendarCreateInput

type CalendarCreateInput = JsonObject
  & {
        title: string;
        icon_url: string;
      };

CalendarMemberCreateInput

type CalendarMemberCreateInput = JsonObject
  & {
        member: string;
        calendar: string;
        roles: string[];
        permissions_override?: number;
        permissions?: number;
      };

EventCreateInput

type EventCreateInput = JsonObject
  & {
        calendar?: (
        ScrimsIdInput
              | {
                        _id?: ScrimsIdInput;
                      }
        );
        owner_id?: ScrimsIdInput;
        title?: string;
        subheading?: string;
        start_time?: string;
        end_time?: string;
        start_timezone?: string;
        end_timezone?: string;
        is_all_day?: boolean;
        recurrence?: string[];
        recurrence_id?: string;
        remove_assigned_roles?: boolean;
        descriptions?: EventDescription;
        color?: string;
        image_url?: string;
        location_meta?: LocationMeta;
        allowed_roles?: string[];
        banned_roles?: string[];
        assign_roles?: string[];
        primarily_hosting?: boolean;
        guest_can_edit?: boolean;
        is_private?: boolean;
        notifications?: EventNotification[];
        send_notifications?: boolean;
        template?: ScrimsIdInput | null;
        tickets?: EventTicket[];
        emailTemplates?: EmailTemplates;
        general?: General;
        register?: Register;
        waitlist?: Waitlist;
        estimate_guest_count?: number;
        migration_overrides?: JsonObject;
        etag?: string;
      };

EventUpdateInput

type EventUpdateInput = JsonObject
  & {
        _id?: ScrimsIdInput;
        calendar?: (
        ScrimsIdInput
              | {
                        _id?: ScrimsIdInput;
                      }
        );
        owner_id?: ScrimsIdInput;
        title?: string;
        subheading?: string;
        start_time?: string;
        end_time?: string;
        start_timezone?: string;
        end_timezone?: string;
        is_all_day?: boolean;
        recurrence?: string[];
        recurrence_id?: string;
        remove_assigned_roles?: boolean;
        descriptions?: EventDescription;
        color?: string;
        image_url?: string;
        location_meta?: LocationMeta;
        allowed_roles?: string[];
        banned_roles?: string[];
        assign_roles?: string[];
        primarily_hosting?: boolean;
        archived?: boolean;
        no_further_occurrence?: boolean;
        discarded?: boolean;
        guest_can_edit?: boolean;
        is_private?: boolean;
        notifications?: EventNotification[];
        send_notifications?: boolean;
        template?: ScrimsIdInput | null;
        tickets?: EventTicket[];
        emailTemplates?: EmailTemplates;
        general?: General;
        register?: Register;
        waitlist?: Waitlist;
        estimate_guest_count?: number;
        migration_overrides?: JsonObject;
        etag?: string;
      };

EventBulkCreateInput

type EventBulkCreateInput = EventCreateInput;

EventBulkUpdateInput

type EventBulkUpdateInput = EventUpdateInput
  & {
        _id: ScrimsIdInput;
        etag: string;
      };

EventMutationInput

type EventMutationInput = EventCreateInput | EventUpdateInput;

EventUpsertResponse

type EventUpsertResponse = {
  events: ScrimsEvent[];
  event: ScrimsEvent;
  saved: ScrimsEvent;
};

EventBulkCreateResponse

type EventBulkCreateResponse = {
    events: string[];
  }
  & JsonObject;

EventBulkUpdateResponse

type EventBulkUpdateResponse = {
    events: string[];
    saved?: string[];
    ids?: string[];
  }
  & JsonObject;

EventGuest

type EventGuest = JsonObject
  & {
        _id?: string;
        member?: string | ScrimsMember;
        event?: string | ScrimsEvent;
        is_host?: boolean;
        status?: number;
        notes?: string;
        custom_fields?: Record<string, string | boolean>;
        created_at?: string | Date;
        updated_at?: string | Date;
      };

GuestTicket

type GuestTicket = JsonObject
  & {
        _id?: string;
        guest?: string | EventGuest;
        ticket?: string | EventTicket;
        event?: string | ScrimsEvent;
        ticket_specs?: TicketSpec[];
        status?: number;
        refunded_at?: string | Date | null;
        transaction_id?: string;
        checkout_url?: string;
        refund_initiated_by?: string;
        created_at?: string | Date;
        updated_at?: string | Date;
      };

GuestWithRelations

type GuestWithRelations = EventGuest
  & {
        member?: ScrimsMember;
        tickets?: GuestTicket[];
      };

GuestListResponse

type GuestListResponse = {
  guests: GuestWithRelations[];
};

HostListResponse

type HostListResponse = {
  hosts: GuestWithRelations[];
};

GuestMutationResponse

type GuestMutationResponse = {
    guest: GuestWithRelations;
    message?: string;
    modalConfig?: ModalConfig;
  }
  & JsonObject;

GuestTicketCreateResponse

type GuestTicketCreateResponse = {
    message: string;
    guest: GuestWithRelations;
    guestTicket: GuestTicket;
    modalConfig?: ModalConfig;
  }
  & JsonObject;

GuestTicketUpdateResponse

type GuestTicketUpdateResponse = {
    message: string;
    guestTicket: GuestTicket | null;
  }
  & JsonObject;

TicketCountResponse

type TicketCountResponse = {
  ticketCount: number;
};

GuestMutationInput

type GuestMutationInput = GuestCreateInput | GuestUpdateInput;

GuestCreateInput

type GuestCreateInput = JsonObject
  & {
        status?: number;
        notes?: string;
        customFields?: Record<string, string | boolean>;
        custom_fields?: Record<string, string | boolean>;
      };

GuestUpdateInput

type GuestUpdateInput = JsonObject
  & {
        status?: number;
        notes?: string;
        custom_fields?: Record<string, string | boolean>;
        customFields?: Record<string, string | boolean>;
      };

GuestTicketUpdateInput

type GuestTicketUpdateInput = {
    ticketSpecs?: TicketSpec[];
  }
  & JsonObject;

CalendarEventsResponse

type CalendarEventsResponse = {
    events: ScrimsEvent[];
  }
  & JsonObject;

MemberCreateInput

type MemberCreateInput = JsonObject
  & {
        name?: string;
        email?: string;
      };

PublicCalendarWithRoles

type PublicCalendarWithRoles = ScrimsCalendar
  & {
        roles?: ScrimsRole[];
      };

RoleCreateInput

type RoleCreateInput = JsonObject
  & {
        name: string;
        calendar: string;
        permissions: number | string;
      };

RoleUpdateInput

type RoleUpdateInput = JsonObject
  & {
        name?: string;
        calendar?: string;
        permissions?: number | string;
      };

ScrimsIcon

type ScrimsIcon = JsonObject
  & {
        id?: string;
        name?: string;
        aliases?: string[];
      };

ScrimsTemplate

type ScrimsTemplate = JsonObject
  & {
        _id?: string;
        calendar?: string;
        name?: string;
        icon?: string;
        template?: string;
        tickets?: EventTicket[];
        allowed_roles?: string[];
        banned_roles?: string[];
        assign_roles?: string[];
        remove_assigned_roles?: boolean;
        general?: General;
        register?: Register;
        waitlist?: Waitlist;
        created_at?: string | Date;
        updated_at?: string | Date;
      };