Global Models

Global models are object definitions used across Sportstalk services. For instance, our User definition is shared across Commenting, Chat, and Match Commentary Features.

Lists

List Response

Many API methods return lists of objects. For instance, lists of rooms or users. All of these API responses have the same general structure, the ListResponse. Many models inherit from ListResponse, e.g. UserListResponse.

export interface ListResponse {
    cursor?: string,
    more?: boolean
    itemcount?: number
}

List Request

List APIs use cursoring. A List request provides the cursor and the limit to control the result set.

interface ListRequest {
    cursor?: string, // should be a cursor value supplied by API.
    limit?: number // must be an integer
}

User Models

A User is someone able to chat in chatrooms and make comments in conversations. Users must be created before they can make comments or chat, and they must choice a chat room before they can participate.

User

interface User {
    userid: string, // Unique ID, defined by client application to use native IDs.
    handle: string, // Allowed Characters:  "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_"
    handlelowercase?: string, // an all lowercase version of the handle
    displayname?: string, // A friendly display name.  E.g. a user has a handle "jjsmithyperson" and their display name "John J. Smith"
    pictureurl?: string, // a full URL to a profile photo.
    profileurl?: string, // a full URL to a profile url or personal webpage.
    banned?: boolean // Only set by the server.  If true the user is currently banned.
}

User Search Data

/**
 * Used only for searching users by API.
 */
export enum UserSearchType {
    handle = 'handle',
    name = 'name',
    userid = 'userid'
}

User Lists

Any API which produces a list of users will take the form of a UserListResponse

interface UserListResponse extends ListResponse {
    kind: Kind.userlist
    users: UserResult[]
}

User Deletion

API responses to User Deletion will wrap a UserDeletionResponse

interface UserDeletionResponse {
    user: UserResult,
    kind: Kind.deleteduser
}

Configuration Models

Client Configuration

All Sportstalk Client and Services objects accept a ClientConfig or subclass to connect with Sportstalk247

It’s also possible to set a default User as part of a ClientConfig for most services. Services which do not need a user will ignore this data.

interface SportsTalkConfig extends ClientConfig {
    user?: User,
}

API Objects

Message Result

General structure describing responses from the API server

interface MessageResult<T> {
    message: string, // "Success"
    errors: object,
    data: T
}

Rest Api Result

RestApiResults extend MessageResult and are the form of all API responses from the Rest server. In the future Sportstalk may use other connection methods than REST.

interface RestApiResult<T> extends MessageResult<T> {
    kind: Kind.api,
    code: number,  //e.g. 200, 400
}

Kind

Many objects have a kind property. This can be used to identify the model to be used in JSON adaptations in different langauges. Below is the enumeration of possible values of the kind property across sportstalk services

export enum Kind {
    chat = "chat.event",
    room = "chat.room",
    bounce = "chat.bounceuser",
    user = "app.user",
    api = "api.result",
    webhook = "webhook.webhook",
    webhooklogs = "list.webhook.logentries",
    webhookcommentpayload = "webhook.payload.comment",
    chatcommand = "chat.executecommand",
    conversation = "comment.conversation",
    deletedconversation = "delete.conversation",
    comment = "comment.comment",
    deletedcomment ="delete.comment",
    deletedroom = "deleted.room",
    deleteduser = "deleted.appuser",
    conversationlist = "list.commentconversations",
    chatlist = "list.chatevents",
    eventlist = "list.events",
    roomlist = "list.chatrooms",
    userlist = "list.users",
    repliesbyparentidlist = "list.repliesbyparentid",
    commentreplygrouplist = "list.commentreplygroup"
}

Moderation

export enum ReportType {
    abuse = 'abuse'
}

Webhook Models

Webhook

interface Webhook {
    id?: string,
    kind?: Kind.webhook,
    label: string,
    url: string,
    enabled: boolean,
    type: WebhookType,
    events: WebhookEvent[]
}

Webhook Type

enum WebhookType {
    prepublish = "prepublish",
    postpublish = "postpublish"
}

Webhook Event

enum WebhookEvent {
    chatspeech = "chatspeech",
    chatcustom = "chatcustom",
    chatreply = "chatreply",
    chatreaction = "chatreaction",
    chataction = "chataction",
    chatenter = "chatenter",
    chatexit = "chatexit",
    chatquote = "chatquote",
    chatroomopened = "chatroomopened",
    chatroomclosed = "chatroomclosed",
    chatpurge = "chatpurge",
    commentspeech = "commentspeech",
    commentreply = 'commentreply'
}

Webhook List

Webhook Payload

Different types of webhooks send different payloads. This is the general structure all payloads inherit from.

export interface WebhookPayload {
    "kind": Kind.webhookcommentpayload,
    "appid": string,
}

Webhook Comment Payload

Webhook Logs

All webhook actions produce WebhookLog items.

interface WebhookLog {
    id: string,
    appid: string,
    added: string,
    ellapsedtimems: number,
    type: WebhookType,
    eventtype: WebhookEvent, // Move to common models
    webhook: Webhook,
    completedrequest: boolean,
    statuscode: WebStatusCode,
    status: WebStatusString,
    payload: Comment
}

An API response will return a list of these logs:

interface WebhookLogResponse extends ListResponse {
    logentries: Array<WebhookLog>
}

Other Models

export interface ISO8601DATE {

}
export enum Reaction {
    like = 'like'
}
export enum WebStatusCode {
    OK = 200,
    NOT_FOUND = 404,
    SERVER_ERROR= 500
}
export enum WebStatusString {
    OK = "OK",
}
export enum ModerationType {
    pre = "pre",
    post = "post"
}
export interface ApiHeaders {
    'Content-Type'?: string,
    'x-api-token'?: string
}