@monterosa/sdk-interact-kit 2.0.0-rc.2 → 2.0.0-rc.3

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/core/connect/public-types.ts","../src/core/connect/connect_impl.ts","../src/core/connect/api.ts","../src/core/connection_health/public-types.ts","../src/core/connection_health/connection_health_impl.ts","../src/core/connection_health/index.ts","../src/core/project/constants.ts","../src/utils/locale.ts","../src/core/project/project_impl.ts","../src/core/project/factory.ts","../src/core/project/api.ts","../src/core/event/internal.ts","../src/core/event/public-types.ts","../src/core/event/event_impl.ts","../src/core/event/factory.ts","../src/core/event/api.ts","../src/core/element/public-types.ts","../src/core/element/answer.ts","../src/core/element/types.ts","../src/core/element/element_impl.ts","../src/core/element/factory.ts","../src/core/element/api.ts","../src/core/presence_counter/types.ts","../src/utils/logger.ts","../src/core/presence_counter/presence_counter_impl.ts","../src/core/presence_counter/api.ts"],"sourcesContent":["/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Emitter } from '@monterosa/sdk-util';\nimport { Connect as Enmasse } from '@monterosa/sdk-connect-kit';\n\n/**\n * @internal\n */\nexport enum State {\n Ok = 'ok',\n Error = 'error',\n}\n\n/**\n * @internal\n */\nexport enum Klass {\n Listings = 'listings',\n History = 'history',\n Create = 'create',\n Revoke = 'revoke',\n Stop = 'stop',\n Reveal = 'reveal',\n Poll = 'p',\n Feedback = 'fb',\n Eoc = 'eoc',\n Vote = 'v',\n SubsCounter = 'subscounter',\n}\n\n/**\n * @internal\n */\nexport enum Channel {\n Poll = 'p',\n Live = 'l',\n}\n\n/**\n * @internal\n */\nexport interface Message {\n id: string;\n klass: Klass;\n data: string[];\n}\n\n/**\n * @internal\n */\nexport interface Connect extends Emitter {\n state: State;\n // @internal\n enmasse: Enmasse | null;\n init(): Promise<void>;\n connect(): Promise<void>;\n disconnect(): void;\n subscribeProject(id: string): Promise<void>;\n subscribeEvent(id: string): Promise<void>;\n unsubscribeProject(id: string): void;\n unsubscribeEvent(id: string): void;\n sendVote(eventId: string, pollId: number, answer: string): void;\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Emitter } from '@monterosa/sdk-util';\nimport {\n Connect as Enmasse,\n Message as EnmasseMessage,\n ConnState as EnmasseState,\n getConnect as getEnmasse,\n connect,\n disconnect,\n subscribe,\n unsubscribe,\n send,\n} from '@monterosa/sdk-connect-kit';\n\nimport { Connect, State, Channel, Klass } from './public-types';\n\nclass ConnectImpl extends Emitter implements Connect {\n private _state = State.Ok;\n private _enmasse: Enmasse | null = null;\n\n constructor(private readonly host: string) {\n super();\n }\n\n get state(): State {\n return this._state;\n }\n\n set state(state: State) {\n if (state === this._state) {\n return;\n }\n\n this._state = state;\n\n this.emit('state', this._state);\n }\n\n get enmasse(): Enmasse {\n if (this._enmasse === null) {\n throw new Error(\n 'Connect is not initialised, init() method should be called first.',\n );\n }\n\n return this._enmasse;\n }\n\n set enmasse(enmasse: Enmasse) {\n this._enmasse = enmasse;\n }\n\n async init() {\n this.enmasse = await getEnmasse(this.host);\n\n this.enmasse.on('message', this.handleMessage.bind(this));\n this.enmasse.on('state', this.handleState.bind(this));\n }\n\n async connect() {\n await connect(this.enmasse);\n }\n\n disconnect() {\n disconnect(this.enmasse);\n }\n\n async subscribeProject(id: string): Promise<void> {\n await subscribe(this.enmasse, `${Channel.Live}-${id}`);\n }\n\n unsubscribeProject(id: string): void {\n unsubscribe(this.enmasse, `${Channel.Live}-${id}`);\n }\n\n async subscribeEvent(id: string): Promise<void> {\n await Promise.all([\n subscribe(this.enmasse, `${Channel.Live}-${id}`),\n subscribe(this.enmasse, `${Channel.Poll}-${id}`),\n ]);\n }\n\n unsubscribeEvent(id: string): void {\n unsubscribe(this.enmasse, `${Channel.Live}-${id}`);\n unsubscribe(this.enmasse, `${Channel.Poll}-${id}`);\n }\n\n sendVote(eventId: string, pollId: number, answer: string) {\n send(this.enmasse, `${Channel.Poll}-${eventId}`, Klass.Vote, [\n pollId,\n answer,\n '',\n ]);\n }\n\n handleMessage(message: EnmasseMessage) {\n const { klass, body: data, channel } = message;\n\n const id = channel.substring(channel.indexOf('-') + 1);\n\n this.emit('message', {\n id,\n klass,\n data,\n });\n }\n\n handleState(state: EnmasseState, ...args: unknown[]) {\n switch (state) {\n case EnmasseState.Disconnected:\n this.state = State.Error;\n break;\n case EnmasseState.Connecting: {\n const [attempt] = args as [number];\n\n if (attempt > 1) {\n this.state = State.Error;\n }\n\n break;\n }\n case EnmasseState.Connected:\n this.state = State.Ok;\n break;\n }\n }\n}\n\nexport default ConnectImpl;\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { memoizePromise } from '@monterosa/sdk-util';\n\nimport { Connect } from './public-types';\nimport ConnectImpl from './connect_impl';\n\nconst getConnectMemoized = memoizePromise(\n async (host: string): Promise<Connect> => {\n const connect = new ConnectImpl(host);\n\n await connect.init();\n await connect.connect();\n\n return connect;\n },\n (host) => host,\n);\n\n/**\n * @internal\n */\nfunction getConnect(host: string): Promise<Connect> {\n return getConnectMemoized(host);\n}\n\nexport { getConnect };\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\n/**\n * `ConnectionHealth` monitors connection state\n */\nexport interface ConnectionHealth extends Emitter {\n /**\n * State of the connection\n */\n state: ConnectionHealthState;\n}\n\n/**\n * Provides states of the connection health\n */\nexport enum ConnectionHealthState {\n /**\n * The client is connected and the connection is healthy\n */\n Ok = 'ok',\n /**\n * The client is either trying to establish a connection but failing, or\n * the client has been explicitly {@link @monterosa/sdk-connect-kit#disconnect() | disconnected}\n */\n Error = 'error',\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\n/* eslint @typescript-eslint/brace-style: \"off\" */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nimport { ConnectionHealthState, ConnectionHealth } from './public-types';\n\nimport { State as ConnectState, Connect } from '../connect';\n\nexport class ConnectionHealthImpl extends Emitter implements ConnectionHealth {\n private _state: ConnectionHealthState = ConnectionHealthState.Ok;\n\n constructor(private connect: Connect) {\n super();\n\n this.connect.on('state', this.handleState.bind(this));\n }\n\n get state(): ConnectionHealthState {\n return this._state;\n }\n\n set state(state: ConnectionHealthState) {\n this._state = state;\n\n this.emit('state', state);\n }\n\n handleState() {\n switch (this.connect.state) {\n default:\n case ConnectState.Ok:\n this.state = ConnectionHealthState.Ok;\n break;\n case ConnectState.Error:\n this.state = ConnectionHealthState.Error;\n break;\n }\n }\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022-2024 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { MonterosaSdk, getSdk } from '@monterosa/sdk-core';\nimport { subscribe, Unsubscribe, memoizePromise } from '@monterosa/sdk-util';\n\nimport { ConnectionHealth, ConnectionHealthState } from './public-types';\n\nimport { getConnect } from '../connect';\n\nimport { ConnectionHealthImpl } from './connection_health_impl';\n\nconst getConnectionHealthMemoized = memoizePromise(\n async (sdk: MonterosaSdk): Promise<ConnectionHealth> => {\n const connect = await getConnect(sdk.options.host);\n\n const connectionHealth = new ConnectionHealthImpl(connect);\n\n return connectionHealth;\n },\n (sdk: MonterosaSdk): string => sdk.options.host,\n);\n\n/**\n * Returns {@link ConnectionHealth | connection health} instance\n *\n * @param sdk - The SDK instance to monitor\n * @returns The connection health instance.\n */\nfunction getConnectionHealth(\n sdk: MonterosaSdk = getSdk(),\n): Promise<ConnectionHealth> {\n return getConnectionHealthMemoized(sdk);\n}\n\n/**\n * Adds an observer for when\n * {@link ConnectionHealth | connection health state} changed\n *\n * @param connectionHealth - The instance to observe\n * @param callback - Called with the new state\n */\nfunction onConnectionHealthState(\n connectionHealth: ConnectionHealth,\n callback: (state: ConnectionHealthState) => void,\n): Unsubscribe {\n return subscribe(connectionHealth, 'state', callback);\n}\n\nexport { ConnectionHealthState, ConnectionHealth } from './public-types';\nexport { getConnectionHealth, onConnectionHealthState };\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nexport const DEFAULT_IGNORE_TIME = 30;\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Localised } from '../types';\n\n/**\n * Converts tag for identifying languages (rfc5646) into ISO language code\n */\nfunction tagToLanguage(tag: string): string {\n // The tag is split not only by `-` as its stated in the rfc\n // but also by `_` as it is returned by Studio for some locales\n const chunks = tag.split(/[-_]/);\n\n return chunks[0];\n}\n\n/**\n * Returns either:\n * * a locale from the list of provided locales that correspond OS locale preferences\n * * or default locale if OS locale doesn't correspond to any from the provided list\n *\n * * @internal\n */\nexport function getLocale(locales: string[]): string {\n // The list of user's preferred language tags,\n const languageTags = [\n // where the first item is the user's default language\n navigator.language,\n\n // and others are the user's preferred languages\n ...navigator.languages,\n ];\n\n // firstly, trying to check if one of languages tag\n // has a full match with passed locales\n for (const tag of languageTags) {\n if (locales.includes(tag)) {\n // if language tag has a match return it right away\n return tag;\n }\n }\n\n // secondly, checking if user's language (ISO string)\n // has occurrences in the list of locales\n for (const tag of languageTags) {\n const userLang = tagToLanguage(tag);\n\n for (const locale of locales) {\n const studioLang = tagToLanguage(locale);\n\n if (studioLang === userLang) {\n // return the first locale that has the same\n // language ISO string as the user language tag\n return locale;\n }\n }\n }\n\n // if none locales matches users preferred languages tags\n // return default locale\n return locales[0];\n}\n\nexport function localise<T>(value: Localised<T>, locale: string): T {\n if (Object.prototype.hasOwnProperty.call(value, locale)) {\n return value[locale];\n }\n\n return value.all;\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Emitter, checksum } from '@monterosa/sdk-util';\n\nimport { DEFAULT_IGNORE_TIME } from './constants';\nimport { ProjectContext } from './context';\nimport {\n InteractProject,\n Listings,\n ProjectLocale,\n ProjectOptions,\n} from './public-types';\nimport { Localised } from '../../types';\nimport { EventOptions } from '../event/types';\nimport { getLocale, localise } from '../../utils/locale';\n\n/**\n * @internal\n */\nexport class ProjectImpl extends Emitter implements InteractProject {\n public host: string;\n public id: string;\n public eventsChecksum: string | null = null;\n private _context: ProjectContext;\n private _listings!: Listings;\n private _fields!: Localised<Record<string, unknown>>;\n private _locales!: string[];\n private _locale!: string;\n\n constructor(options: ProjectOptions, context: ProjectContext) {\n super();\n\n this.id = options.id;\n this.host = options.host;\n this._context = context;\n }\n\n get context(): ProjectContext {\n return this._context;\n }\n\n get embedUrl() {\n return this._listings?.project.embed;\n }\n\n get uuid() {\n return this._listings?.project.uuid;\n }\n\n get events() {\n return this._listings?.events || [];\n }\n\n get listings() {\n return this._listings;\n }\n\n set listings(newListings: Listings) {\n const createdEvents = this._calculateCreatedEvents(newListings);\n const updatedEvents = this._calculateUpdatedEvents(newListings);\n const deletedEvents = this._calculateDeletedEvents(newListings);\n\n this._listings = { ...newListings };\n\n this._updateLocales(newListings);\n this._updateEventsChecksum(newListings);\n this._emitListingsEvents(createdEvents, updatedEvents, deletedEvents);\n }\n\n /**\n * Calculates events that were created (present in new listings but not in old)\n */\n private _calculateCreatedEvents(newListings: Listings): EventOptions[] {\n if (!this._listings) {\n return [];\n }\n\n return newListings.events.filter(\n ({ id }) => !this._listings.events.some((event) => id === event.id),\n );\n }\n\n /**\n * Calculates events that were updated (present in old listings and new,\n * but with different digest)\n */\n private _calculateUpdatedEvents(newListings: Listings): EventOptions[] {\n if (!this._listings) {\n return [];\n }\n\n return newListings.events.filter((event) => {\n // find event data in new listings\n const existingEvent = this._listings.events.find(\n ({ id }) => event.id === id,\n );\n\n // return true if event data is found and digest is different\n return existingEvent && event.digest !== existingEvent.digest;\n });\n }\n\n /**\n * Calculates events that were deleted (present in old listings but not in new)\n */\n private _calculateDeletedEvents(newListings: Listings): EventOptions[] {\n if (!this._listings) {\n return [];\n }\n\n return this._listings.events.filter(\n ({ id }) => !newListings.events.some((event) => id === event.id),\n );\n }\n\n /**\n * Processes and updates locales from project listings\n */\n private _updateLocales(newListings: Listings): void {\n this._locales = newListings.project.locales\n // clone the array first\n .map((locale) => ({ ...locale } as ProjectLocale))\n\n // sort an array so that the default locale is the first\n .sort((locale) => (locale.default ? -1 : 0))\n\n // return only keys of the locales\n .map((locale) => locale.key);\n\n this._locale = getLocale(this._locales);\n }\n\n /**\n * Updates the events checksum based on new listings\n */\n private _updateEventsChecksum(newListings: Listings): void {\n this.eventsChecksum = checksum(\n newListings.events.map((event) => event.digest).join(''),\n );\n }\n\n /**\n * Emits events based on created and deleted events\n */\n private _emitListingsEvents(\n createdEvents: EventOptions[],\n updatedEvents: EventOptions[],\n deletedEvents: EventOptions[],\n ): void {\n const hasCreatedEvents = createdEvents.length > 0;\n const hasDeletedEvents = deletedEvents.length > 0;\n const hasUpdatedEvents = updatedEvents.length > 0;\n const hasChanges = hasCreatedEvents || hasDeletedEvents || hasUpdatedEvents;\n\n if (hasCreatedEvents) {\n this.emit('listings_events_created', createdEvents);\n }\n\n if (hasDeletedEvents) {\n this.emit('listings_events_deleted', deletedEvents);\n }\n\n if (hasUpdatedEvents) {\n this.emit('listings_events_updated', updatedEvents);\n }\n\n if (hasChanges) {\n this.emit('listings');\n }\n }\n\n get isLocalisationSupported() {\n return this._listings?.project.is_localisation_supported;\n }\n\n get locale() {\n return this._locale;\n }\n\n set locale(locale) {\n if (!this.locales.includes(locale)) {\n throw new Error(`Unknown locale name \"${locale}\"`);\n }\n\n this._locale = locale;\n }\n\n get locales() {\n return this._locales;\n }\n\n get fields(): Record<string, unknown> {\n if (this._fields !== undefined) {\n return localise(this._fields, this.locale);\n }\n\n return {};\n }\n\n /**\n * Sets custom fields\n *\n * It accepts both Localised<Record<string, unknown>> and Record<string, unknown> to\n * avoid mistyping between setter and getter\n *\n * @internal\n */\n set fields(\n value: Localised<Record<string, unknown>> | Record<string, unknown>,\n ) {\n const isUpdate = typeof this._fields !== 'undefined';\n\n this._fields = { ...value } as Localised<Record<string, unknown>>;\n\n if (isUpdate) {\n this.emit('updated');\n }\n }\n\n get extensions() {\n return this._listings?.assets;\n }\n\n get historyIgnore() {\n const value = this._listings?.project.history_ignore;\n\n if (value && value > 0) {\n return value;\n }\n\n return DEFAULT_IGNORE_TIME;\n }\n\n // TODO: must be implemented\n // eslint-disable-next-line\n delete() {}\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { fetchSettings } from '@monterosa/sdk-interact-interop';\n\nimport { ProjectContext } from './context';\nimport { InteractProject, ProjectOptions, Listings } from './public-types';\n\nimport { getConnect, Connect, Klass, Message } from '../connect';\nimport { ProjectImpl } from './project_impl';\n\nexport const projects: Map<string, InteractProject> = new Map();\nconst connects: Map<string, Connect> = new Map();\n\nexport async function buildProject(\n options: ProjectOptions,\n context: ProjectContext,\n): Promise<InteractProject> {\n const { id, host } = options;\n\n if (projects.has(id)) {\n return projects.get(id) as InteractProject;\n }\n\n /**\n * Create \"bare\" instance of the project. Until listings and settings are\n * loaded it can't be used\n */\n const project = new ProjectImpl(options, context);\n\n /**\n * Add it to the cache of projects, so that we could find it to populate it\n * with the data when /listings/ message is coming from the EnMasse.\n */\n projects.set(id, project);\n\n /**\n * Waiting when the listings and the project settings come and we would be\n * able to populate the project instance\n */\n try {\n const setup = await setupConnect(host);\n\n await setup.subscribeProject(id);\n\n /**\n * By the time goLive successfully resolved listings must be present\n * in project. If they are not, then there is no /listings/ in the channel's cache.\n * This might be due to either studio is malfunctioning or project id is incorrect.\n */\n if (!project.listings) {\n throw new Error(\n `Unable to fetch project ${id} listings. Possibly wrong project id.`,\n );\n }\n\n project.fields = await fetchSettings(project.host, project.id);\n\n return project;\n } catch (err) {\n /**\n * If anything goes wrong we need to unsubscribe from the EnMasse project's\n * channel by switching it to the offline mode.\n */\n if (connects.has(id)) {\n const connect = connects.get(id) as Connect;\n\n connect.unsubscribeProject(id);\n }\n\n /**\n * And project should be removed from the list of cached projects so that\n * it won't be automatically returned upon consequent buildProject call\n */\n projects.delete(id);\n\n throw err;\n }\n}\n\nasync function setupConnect(host: string): Promise<Connect> {\n if (connects.has(host)) {\n return connects.get(host) as Connect;\n }\n\n const connect = await getConnect(host);\n connect.on('message', handleConnectMessage);\n\n return connect;\n}\n\nexport async function handleConnectMessage(message: Message) {\n const { id, klass, data } = message;\n\n const project = projects.get(id);\n\n if (!project) {\n return;\n }\n\n switch (klass) {\n case Klass.Listings:\n await handleListings(project, data[0]);\n break;\n }\n}\n\nasync function handleListings(project: InteractProject, data: string) {\n const listings = JSON.parse(data) as Listings;\n const newDigest = listings.project.app_settings_digest;\n const oldDigest = project.listings?.project.app_settings_digest;\n\n project.listings = listings;\n\n try {\n if (oldDigest !== undefined && newDigest !== oldDigest) {\n project.fields = await fetchSettings(project.host, project.id);\n }\n } catch {\n console.warn(`Unable to fetch project ${project.id} settings`);\n }\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022-2024 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { MonterosaSdk, getSdk } from '@monterosa/sdk-core';\nimport { subscribe, Unsubscribe, memoizePromise } from '@monterosa/sdk-util';\n\nimport { InteractProject } from './public-types';\n\nimport { buildProject } from './factory';\n\n/**\n * @internal\n */\nconst getProjectMemoized = memoizePromise(\n async (sdk: MonterosaSdk): Promise<InteractProject> => {\n const project = await buildProject(\n {\n id: sdk.options.projectId,\n host: sdk.options.host,\n },\n {\n sdk,\n },\n );\n\n return project;\n },\n (sdk: MonterosaSdk): string => sdk.options.projectId,\n);\n\n/**\n * Returns {@link InteractProject | Project instance} associated\n * with the\n * {@link @monterosa/sdk-core#MonterosaSdk | configured SDK}\n *\n * @param sdk - The SDK instance. Defaults to the default SDK.\n * @returns The Project instance.\n */\nfunction getProject(sdk: MonterosaSdk = getSdk()): Promise<InteractProject> {\n return getProjectMemoized(sdk);\n}\n\n/**\n * Adds an observer for when\n * {@link InteractProject | Project fields} are updated\n *\n * @param project - The Project to observe\n * @param callback - Called when Project fields change\n */\nfunction onProjectFieldsUpdated(\n project: InteractProject,\n callback: () => void,\n): Unsubscribe {\n return subscribe(project, 'updated', callback);\n}\n\nexport { getProject, getProjectMemoized, onProjectFieldsUpdated };\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { EventHistory } from './types';\n\nexport async function fetchHistory(\n host: string,\n id: string,\n): Promise<EventHistory> {\n const response = await fetch(\n `https://${host}/events/${id.substring(0, 2)}/${id}/history.json`,\n );\n\n if (!response.ok) {\n throw new Error(`Failed to fetch event ${id} history`);\n }\n\n const data = await response.json();\n\n return data;\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nimport { EventHistory } from './types';\nimport { EventContext } from './context';\n\n/**\n * Describes the Event state.\n */\nexport enum EventState {\n /**\n * The Event is in the `upcoming` state when its {@link InteractEvent | startAt}\n * less than the {@link @monterosa/sdk-util#now | current time}.\n */\n Upcoming = 'upcoming',\n /**\n * The Event is in the `active` state when its {@link InteractEvent | startAt}\n * equal or more than the {@link @monterosa/sdk-util#now | current time} and less than the\n * {@link InteractEvent | endAt}.\n */\n Active = 'active',\n /**\n * @internal\n */\n Prolonged = 'prolonged',\n /**\n * The Event is in the `finished` state when its {@link InteractEvent | endAt}\n * equal or more than the {@link @monterosa/sdk-util#now | current time}.\n */\n Finished = 'finished',\n}\n\nexport enum InitState {\n Uninitialised = 'uninitialised',\n Initialising = 'initialising',\n Initialised = 'initialised',\n}\n\n/**\n * Represents an Event, a time-bound period of\n * interactivity. Obtain via {@link getEvent} or\n * {@link getEvents}.\n *\n * @remarks\n * Events represent a sports game, TV show, or any period of time in which you\n * want to push interactivity to users. Each Event has a duration, start time,\n * start mode, and\n * {@link https://products.monterosa.co/mic/developer-guides/app-spec/event-settings-spec | custom fields}\n * that can be configured by developers.\n *\n * See {@link https://products.monterosa.co/mic/core-concepts/schedule-and-events | Events} in\n * the platform documentation for more details.\n */\nexport interface InteractEvent extends Emitter {\n /**\n * Event uuid.\n */\n id: string;\n /**\n * Event name.\n */\n name: string;\n /**\n * Returns the Event start time as UNIX time in seconds.\n */\n startAt: number;\n /**\n * Returns the Event start time as ISO string.\n */\n startAtIso: string;\n /**\n * Returns the Event end time as UNIX time in seconds.\n */\n endAt: number;\n /**\n * Returns the Event end time as ISO string.\n */\n endAtIso: string;\n /**\n * Studio supports custom fields within an Event. This returns an object\n * populated with the custom fields. Object property names will match keys\n * as provided as part of custom fields definition in the feed and values\n * will be as collected by Studio.\n *\n * @example\n * ```javascript\n * // {\n * // \"name\": \"Canis lupus\",\n * // \"family\": \"Canidae\",\n * // ...\n * // \"species\": \"C. lupus\"\n * // }\n * ```\n */\n fields: Record<string, unknown>;\n /**\n * Event state\n */\n state: EventState;\n /**\n * Returns the total duration in seconds of the Event.\n */\n duration: number;\n /** @internal */\n canSubscribe: boolean;\n /** @internal */\n canLoadHistory: boolean;\n /** @internal */\n internalState: EventState;\n /** @internal */\n initState: InitState;\n /** @internal */\n context: EventContext;\n /** @internal */\n history: EventHistory | null;\n /** @internal */\n destroy(): void;\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport {\n now,\n onTick,\n subscribe,\n Emitter,\n Unsubscribe,\n} from '@monterosa/sdk-util';\n\nimport { Mutable } from '../../types';\n\nimport { localise } from '../../utils/locale';\n\nimport { EventContext } from './context';\nimport { EventOptions, EventHistory } from './types';\nimport { InteractEvent, EventState, InitState } from './public-types';\n\n/**\n * @internal\n */\nexport class EventImpl extends Emitter implements InteractEvent {\n readonly _data: EventOptions;\n private _context: EventContext;\n private _state: EventState;\n private _internalState: EventState;\n private _initState: InitState = InitState.Uninitialised;\n private _history: EventHistory | null = null;\n private boundHandleState: () => void;\n private boundHandleInternalState: () => void;\n private boundHandleEventsUpdated: (events: EventOptions[]) => void;\n private unsubscribeStateHandler: Unsubscribe;\n private unsubscribeInternalStateHandler: Unsubscribe;\n private unsubscribeListingsHandler: Unsubscribe;\n\n constructor(data: EventOptions, context: EventContext) {\n super();\n\n this._data = data;\n this._context = context;\n this._state = this.calculateState();\n this._internalState = this.calculateInternalState();\n\n this.boundHandleState = this.handleState.bind(this);\n this.boundHandleInternalState = this.handleInternalState.bind(this);\n this.boundHandleEventsUpdated = this.handleEventsUpdated.bind(this);\n\n this.unsubscribeStateHandler = onTick(this.boundHandleState);\n this.unsubscribeInternalStateHandler = onTick(\n this.boundHandleInternalState,\n );\n this.unsubscribeListingsHandler = subscribe(\n this.context.project,\n 'listings_events_updated',\n this.boundHandleEventsUpdated,\n );\n }\n\n private calculateState() {\n if (!this._data.started || now() < this.startAt) {\n return EventState.Upcoming;\n }\n\n if (now() < this.endAt) {\n return EventState.Active;\n }\n\n return EventState.Finished;\n }\n\n private calculateInternalState() {\n if (!this._data.started || now() < this.startAt) {\n return EventState.Upcoming;\n }\n\n if (now() < this.endAt) {\n return EventState.Active;\n }\n\n if (now() < this.endAt + this._data.extra_time) {\n return EventState.Prolonged;\n }\n\n return EventState.Finished;\n }\n\n private handleState() {\n const state = this.calculateState();\n\n if (state === EventState.Finished) {\n this.unsubscribeStateHandler();\n }\n\n if (state !== this._state) {\n this._state = state;\n\n this.emit('state', state);\n }\n }\n\n private handleInternalState() {\n const internalState = this.calculateInternalState();\n\n if (internalState === EventState.Finished) {\n this.unsubscribeInternalStateHandler();\n }\n\n if (internalState !== this._internalState) {\n this._internalState = internalState;\n\n this.emit('internal_state', internalState);\n }\n }\n\n private handleEventsUpdated(events: EventOptions[]) {\n const data = events.find(({ id }) => id === this.id);\n\n if (data && this._data.digest !== data.digest) {\n (this as Mutable<EventImpl>)._data = data;\n\n // Forcing state recalculation to ensure the event is in the correct state\n this.handleState();\n this.handleInternalState();\n\n this.emit('updated');\n }\n }\n\n /** @internal */\n destroy() {\n this.unsubscribeStateHandler();\n this.unsubscribeInternalStateHandler();\n this.unsubscribeListingsHandler();\n }\n\n get context() {\n return this._context;\n }\n\n get id() {\n return this._data.id;\n }\n\n get name() {\n return this._data.name;\n }\n\n get startAt() {\n return this._data.start_at;\n }\n\n get startAtIso() {\n return this._data.start_at_iso;\n }\n\n get endAt() {\n return this._data.end_at;\n }\n\n get endAtIso() {\n return this._data.end_at_iso;\n }\n\n get duration() {\n return this._data.duration;\n }\n\n get fields() {\n const { locale } = this.context.project;\n\n return localise(this._data.custom_fields, locale);\n }\n\n get state() {\n return this._state;\n }\n\n get internalState() {\n return this._internalState;\n }\n\n get initState() {\n return this._initState;\n }\n\n set initState(state: InitState) {\n this._initState = state;\n }\n\n get history() {\n return this._history;\n }\n\n set history(value: EventHistory | null) {\n this._history = value;\n\n this.emit('history', value);\n }\n\n get canSubscribe() {\n return (\n this._internalState === EventState.Active ||\n this._internalState === EventState.Prolonged\n );\n }\n\n get canLoadHistory() {\n return now() >= this.startAt + this.context.project.historyIgnore;\n }\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Unsubscribe } from '@monterosa/sdk-util';\nimport { onConnected } from '@monterosa/sdk-connect-kit';\n\nimport { EventContext } from './context';\nimport { EventOptions } from './types';\nimport { InteractEvent, EventState, InitState } from './public-types';\n\nimport { EventImpl } from './event_impl';\nimport { fetchHistory } from './internal';\n\nimport { getConnect } from '../connect';\n\nexport const events: Map<string, InteractEvent> = new Map();\nexport const healthListeners: Map<string, Unsubscribe> = new Map();\n\nexport function buildEvent(\n options: EventOptions,\n context: EventContext,\n): InteractEvent {\n if (events.has(options.id)) {\n return events.get(options.id) as InteractEvent;\n }\n\n const event = new EventImpl(options, context);\n\n event.on('internal_state', handleEventInternalState.bind(event));\n\n events.set(options.id, event);\n\n return event;\n}\n\nexport async function init(event: InteractEvent): Promise<void> {\n if (event.initState === InitState.Initialising) {\n return Promise.reject(\n new Error(\"can't initialise event, event is already being initialised\"),\n );\n }\n\n if (event.initState === InitState.Initialised) {\n return Promise.reject(\n new Error(\"can't initialise event, event is already initialised\"),\n );\n }\n\n event.initState = InitState.Initialising;\n\n if (event.canLoadHistory && event.history === null) {\n const history = await fetchHistory(event.context.project.host, event.id);\n\n event.history = history;\n }\n\n if (event.canSubscribe) {\n await subscribe(event);\n }\n\n await listenConnHealth(event);\n\n event.initState = InitState.Initialised;\n\n return Promise.resolve();\n}\n\n/** @internal */\nexport async function terminate(event: InteractEvent) {\n await unsubscribe(event);\n stopListeningConnHealth(event);\n\n event.initState = InitState.Uninitialised;\n}\n\nexport async function subscribe(event: InteractEvent): Promise<void> {\n if (!event.canSubscribe) {\n return Promise.reject(new Error(\"Event can't be subscribed\"));\n }\n\n const connect = await getConnect(event.context.project.host);\n\n await connect.subscribeEvent(event.id);\n\n return Promise.resolve();\n}\n\nexport async function unsubscribe(event: InteractEvent): Promise<void> {\n const connect = await getConnect(event.context.project.host);\n\n await connect.unsubscribeEvent(event.id);\n\n return Promise.resolve();\n}\n\nasync function listenConnHealth(event: InteractEvent): Promise<void> {\n const { project } = event.context;\n\n if (healthListeners.has(project.id)) {\n return;\n }\n\n const connect = await getConnect(project.host);\n\n if (connect.enmasse !== null) {\n const unsub = onConnected(connect.enmasse, handleEnmasseConnected);\n\n healthListeners.set(project.id, unsub);\n }\n}\n\nfunction stopListeningConnHealth(event: InteractEvent): void {\n const { project } = event.context;\n\n if (!healthListeners.has(project.id)) {\n return;\n }\n\n // check if there are other events associated with this project\n // if so we should not unsubscribe\n const canUnsubscribe = Array.from(events.values()).every(\n (ev) => ev.context.project.id !== project.id,\n );\n\n if (!canUnsubscribe) {\n return;\n }\n\n const unsub = healthListeners.get(project.id) as Unsubscribe;\n\n unsub();\n\n healthListeners.delete(project.id);\n}\n\nasync function handleEventInternalState(\n this: InteractEvent,\n state: EventState,\n): Promise<void> {\n if (state === EventState.Finished) {\n await unsubscribe(this);\n }\n}\n\nasync function handleEnmasseConnected() {\n for await (const event of Array.from(events.values())) {\n if (event.initState === InitState.Initialised) {\n const history = await fetchHistory(event.context.project.host, event.id);\n\n event.history = history;\n }\n }\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022-2024 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\nimport { getSdk } from '@monterosa/sdk-core';\nimport { subscribe, Unsubscribe, memoizePromise } from '@monterosa/sdk-util';\n\nimport { EventOptions } from './types';\nimport { InteractEvent, EventState } from './public-types';\nimport { InteractProject } from '../project/public-types';\n\nimport { fetchHistory } from './internal';\nimport { buildEvent, events } from './factory';\nimport { getProject } from '../project';\nimport { projects } from '../project/factory';\n\n/**\n * @internal\n */\nconst getEventsMemoized = memoizePromise(\n async (project: InteractProject): Promise<InteractEvent[]> => {\n if (project === undefined) {\n project = await getProject();\n }\n\n const context = {\n ...project.context,\n project,\n };\n\n return (\n project.events\n\n // Calling builder function that creates an Event instance.\n // Existing Event will be returned if it already exists in the cache\n .map((data) => buildEvent(data, context))\n\n // Sort Events so the oldest Event is first, and the most recent is last\n .sort((a, b) => a.startAt - b.startAt)\n );\n },\n /**\n * Resolver function that determines the cache key for memoization.\n *\n * The cache key is used to determine whether a cached result can be reused.\n * It prioritizes `eventsChecksum` over `id` to ensure cache invalidation when\n * the events list changes, even if the project ID remains the same.\n *\n * @param project - Optional project instance. If not provided, attempts to\n * resolve using the default project from the SDK.\n * @returns A cache key string derived from the project's checksum/id or SDK projectId\n */\n (project?: InteractProject) => {\n // If project is provided, use its checksum (if available) or id as cache key\n if (project !== undefined) {\n return project.eventsChecksum ?? project.id;\n }\n\n // If no project provided, try to get default project from SDK\n const sdk = getSdk();\n const defaultProject = projects.get(sdk.options.projectId);\n\n // Use default project's checksum/id if available\n if (defaultProject) {\n return defaultProject.eventsChecksum ?? defaultProject.id;\n }\n\n // Fallback to SDK's projectId option\n return sdk.options.projectId;\n },\n);\n\n/**\n * Returns all Events in a Project, including all active Events and\n * past/upcoming Events, according to Listings settings in Project Setup\n * in Studio.\n *\n * @param project - A Project instance. If not provided,\n * the one from the default SDK will be fetched.\n * @returns A promise that resolves to an array of Events.\n */\nfunction getEvents(project?: InteractProject): Promise<InteractEvent[]> {\n return getEventsMemoized(project);\n}\n\n/**\n * @internal\n */\nconst getEventMemoized = memoizePromise(\n async (\n id: string,\n project?: InteractProject,\n ): Promise<InteractEvent | null> => {\n if (events.has(id)) {\n return events.get(id) as InteractEvent;\n }\n\n if (project === undefined) {\n project = await getProject();\n }\n\n const context = {\n ...project.context,\n project,\n };\n\n const data = project.events.find((eventData) => eventData.id === id);\n\n if (data !== undefined) {\n const event = buildEvent(data, context);\n\n if (event.canLoadHistory) {\n const history = await fetchHistory(project.host, id);\n\n event.history = history;\n }\n\n return event;\n }\n\n try {\n const history = await fetchHistory(project.host, id);\n\n const event = buildEvent(history.config, context);\n\n event.history = history;\n\n return event;\n } catch (err) {\n return null;\n }\n },\n (id: string): string => id,\n);\n\n/**\n * Returns an Event by its id\n *\n * @param id - Id of the Event\n * @param project - A Project instance. If not provided,\n * the one from the default SDK will be fetched.\n *\n * @returns The Event associated with the provided id,\n * or null if no such Event exists in the Project.\n */\nfunction getEvent(\n id: string,\n project?: InteractProject,\n): Promise<InteractEvent | null> {\n return getEventMemoized(id, project);\n}\n\n/**\n * Adds an observer for when\n * {@link InteractEvent | Event state} changed\n *\n * @param event - The Event to observe\n * @param callback - Called with the new state\n */\nfunction onEventState(\n event: InteractEvent,\n callback: (state: EventState) => void,\n): Unsubscribe {\n return subscribe(event, 'state', callback);\n}\n\n/**\n * Adds an observer for when Event's data changed\n *\n * @param event - The Event to observe\n * @param callback - Called when the Event data changes\n */\nfunction onEventUpdated(\n event: InteractEvent,\n callback: () => void,\n): Unsubscribe {\n return subscribe(event, 'updated', callback);\n}\n\n/**\n * Adds an observer that is called when an Event is added to listings.\n *\n * @remarks\n * The following actions will result in adding an Event to listings:\n *\n * - The start of the Event in Studio\n *\n * - The scheduling of a future Event in Studio, when listings are configured\n * to include future Events in Project Settings.\n *\n * - When a future Event starts, a new future Event may be added to the list,\n * depending on the Project configuration, to ensure a minimum number of\n * upcoming Events are always available.\n *\n * @param project - The Project to observe\n * @param callback - Called with the added Event\n */\nfunction onEventAdded(\n project: InteractProject,\n callback: (event: InteractEvent) => void,\n): Unsubscribe {\n return subscribe(\n project,\n 'listings_events_created',\n async (data: EventOptions[]) => {\n for await (const options of data) {\n const event = await getEvent(options.id, project);\n\n if (event !== null) {\n callback(event);\n }\n }\n },\n );\n}\n\n/**\n * Adds an observer that is called when an Event is removed from listings.\n *\n * @remarks\n * The following actions will result in removing an Event from listings:\n *\n * - The deletion of the Event from Studio\n *\n * - The change of listings configuration in Project Settings to exclude future\n * or past Events.\n *\n * - The Event is removed after a period of time since its completion. This period\n * is calculated as 45 seconds plus the Maximum allowed delay (configured in\n * Project Settings in Studio).\n *\n * @param project - The Project to observe\n * @param callback - Called with the removed Event\n */\nfunction onEventRemoved(\n project: InteractProject,\n callback: (event: InteractEvent) => void,\n): Unsubscribe {\n return subscribe(\n project,\n 'listings_events_deleted',\n async (data: EventOptions[]) => {\n for await (const options of data) {\n const event = await getEvent(options.id, project);\n\n if (event !== null) {\n callback(event);\n }\n }\n },\n );\n}\n\n/**\n * Returns the list of upcoming Events\n */\n// export declare function getUpcomingEvents(): Promise<InteractEvent[]>;\n\n/**\n * Returns the list of active Events\n */\n// export declare function getActiveEvents(): Promise<InteractEvent[]>;\n\nexport {\n getEvents,\n getEventsMemoized,\n getEvent,\n getEventMemoized,\n onEventState,\n onEventUpdated,\n onEventAdded,\n onEventRemoved,\n};\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nimport {\n ElementType,\n ElementOptions,\n ElementResult,\n ShowResultsMode,\n} from './types';\n\nimport { ElementContext } from './context';\n\nimport { Answer } from './answer';\n\n/**\n * A map of potential error codes to compare with errors thrown by\n * vote() or validateAnswer() functions.\n */\nexport enum AnswerError {\n /** Selected option index is out of range. */\n OptionIndexOutOfRange = 'out_of_range',\n /** Fewer options selected than the minimum required. */\n BelowMinVoteOptions = 'below_min_vote_options',\n /** More options selected than the maximum allowed. */\n AboveMaxVoteOptions = 'above_max_vote_options',\n /** User has exceeded the maximum votes allowed. */\n AboveMaxVotesPerUser = 'above_max_per_user',\n /** A single option received more votes than allowed. */\n AboveMaxVotesPerOption = 'above_max_per_option',\n /** Attempted to vote on a non-interactive element. */\n VotedOnNonInteractiveElement = 'non_interactive_element',\n /** Attempted to vote on a closed element. */\n VotedOnClosedElement = 'closed_element',\n /** No vote value was provided. */\n EmptyVote = 'empty_vote',\n}\n\nexport const AnswerErrorMessages = {\n [AnswerError.OptionIndexOutOfRange]: (max: number, idx: number) =>\n `Options index ${idx} is out of range [0..${max}]`,\n [AnswerError.BelowMinVoteOptions]: (min: number, total: number) =>\n `Below min (${min}) vote options: ${total}`,\n [AnswerError.AboveMaxVoteOptions]: (max: number, total: number) =>\n `Above max (${max}) vote options: ${total}`,\n [AnswerError.AboveMaxVotesPerUser]: (max: number, total: number) =>\n `Above max (${max}) votes per user: ${total}`,\n [AnswerError.AboveMaxVotesPerOption]: (max: number, total: number) =>\n `Above max (${max}) votes per option: ${total}`,\n [AnswerError.VotedOnNonInteractiveElement]: (id: string) =>\n `Non interact element ${id}`,\n [AnswerError.VotedOnClosedElement]: (id: string) => `Element ${id} is closed`,\n [AnswerError.EmptyVote]: (indices: string) =>\n `Empty value for options indices: ${indices}`,\n};\n\n/**\n * The ElementState represents the potential states an Element is in.\n */\nexport enum ElementState {\n /**\n * Element is opened and active. The user can vote if\n * the Element is `interactive`\n */\n Opened = 'opened',\n /**\n * Element is closed and the user can no longer vote for\n * `interactive` Elements\n */\n Closed = 'closed',\n}\n\n/**\n * Represents an interactive Element such as a poll,\n * prediction, or trivia question. Obtain via\n * {@link getElements} or {@link getElement}.\n *\n * @remarks\n * Elements are interactive components with configuration\n * fields such as duration, publish time, question, answers,\n * etc. Developers can add custom fields of various\n * types via the\n * {@link https://products.monterosa.co/mic/developer-guides/app-spec/elements-spec | app's Element spec}.\n *\n * Elements are triggered to appear at a certain time and\n * process both the appearance of the content, the way it\n * behaves, and the data sent back from the audience.\n *\n * See {@link https://products.monterosa.co/mic/core-concepts/elements | Elements} in\n * the platform documentation for more details.\n */\nexport interface InteractElement extends Emitter {\n //\n // Common properties\n //\n\n /**\n * Element uuid.\n */\n id: string;\n\n /**\n * Element state\n */\n state: ElementState;\n\n /**\n * Basic type of the Element\n */\n type: ElementType;\n\n /**\n * Returns `content type` of a custom Element if any is set in\n * the Element spec. Otherwise returns the basic `type`.\n */\n contentType: ElementType | string;\n\n /**\n * Returns the Element publish time as UNIX time in seconds.\n */\n publishedAt: number;\n\n /**\n * Returns the Element publish time as ISO string.\n */\n publishedAtIso: string;\n\n /**\n * Returns the Element update as UNIX time in seconds.\n */\n updatedAt: number;\n\n /**\n * Returns the Element update time as ISO string.\n */\n updatedAtIso: string;\n\n /**\n * Returns the total duration in seconds of the Element.\n */\n duration: number;\n\n /**\n * Studio supports custom fields within Elements. This returns an object\n * populated with the custom fields. Object property names will match keys\n * as provided as part of custom fields definition in the feed and values\n * will be as collected by Studio.\n *\n * @example\n * ```javascript\n * // {\n * // \"name\": \"Canis lupus\",\n * // \"family\": \"Canidae\",\n * // ...\n * // \"species\": \"C. lupus\"\n * // }\n * ```\n */\n fields: Record<string, unknown>;\n\n /**\n * Returns `true` if the user can vote for the Element\n */\n interactive: boolean;\n\n //\n // Interactive element properties\n //\n\n /**\n * Returns the question object\n *\n * @example\n * ```javascript\n * {\n * text: \"Mumford and Sons is an internationally-famous what?\",\n * imageUrl: '//path/to/my/question-image'\n * }\n * ```\n */\n question: Record<string, unknown> | null;\n\n /**\n * Returns a set of options\n *\n * @example\n * ```javascript\n * [{\n * text: \"Option 1\",\n * imageUrl: '//path/to/my/image1'\n * },\n * {\n * text: \"Option 2\",\n * imageUrl: '//path/to/my/image2'\n * }]\n * ```\n */\n answerOptions: Record<string, unknown>[] | null;\n\n /**\n * Returns the minimum number of options user can vote for.\n */\n minOptionsPerVote: number | null;\n\n /**\n * Returns the maximum number of options user can vote for.\n */\n maxOptionsPerVote: number | null;\n\n /**\n * Returns maximum number of votes a user can cast per option.\n */\n maxVotesPerOption: number | null;\n\n /**\n * Returns maximum number of votes a user can cast.\n */\n maxVotesPerUser: number | null;\n\n /**\n * Returns Element results if they exist. Otherwise, returns `null`.\n *\n * @example\n * ```javascript\n * [\n * {\n * votes: 15,\n * percentage: 75\n * },\n * {\n * votes: 5,\n * percentage: 25\n * }\n * ]\n * ```\n */\n results: ElementResult[] | null;\n\n /**\n * Returns user answer object\n */\n userAnswer: Answer | null;\n\n /**\n * Returns correct option index (starting with 0) if the correct answer has\n * already been revealed. Otherwise, returns `null`.\n *\n * Note that the correct answer reveal is different from the results reveal.\n */\n correctOption: number | null;\n\n /** @internal */\n pollId: number | null;\n\n /** @internal */\n showResultsMode: ShowResultsMode | null;\n\n //\n // Poll calculated properties\n //\n\n /**\n * Returns `true` if results present and the state of the Element satisfies\n * reveal mode. Otherwise, returns `false`.\n */\n canShowResults: boolean;\n\n /**\n * Returns `true` if the user voted and `false` if not. The user answer\n * could be retrieved by calling {@link InteractElement | userAnswer} getter.\n */\n hasBeenAnswered: boolean;\n\n /**\n * Returns `true` if the correct option has already been revealed.\n */\n isCorrectOptionRevealed: boolean;\n\n /** @internal */\n context: ElementContext;\n /** @internal */\n eventId: string;\n\n /** @internal */\n update(options: ElementOptions): void;\n /** @internal */\n destroy(): void;\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\n/**\n * Declares a user answer object interface. Answer value is a single item of\n * {@link Answer | answer instance}\n */\nexport interface AnswerValue {\n /**\n * The option index (starting with 0)\n */\n option: number;\n /**\n * The number of votes that will be placed against the option\n */\n value: number;\n}\n\n/**\n * An `Answer` contains data of the user answer. Can be used to manage number of\n * votes that the user placed for a specific option.\n */\nexport class Answer {\n private _answers: Map<number, number> = new Map();\n\n constructor(answers: AnswerValue[] = []) {\n for (const { option, value } of answers) {\n this._answers.set(option, value);\n }\n }\n\n /**\n * The array of user answers\n */\n get answers(): AnswerValue[] {\n return Array.from(this._answers.entries()).map(([option, value]) => ({\n option,\n value,\n }));\n }\n\n /**\n * Instantiate Answer class with the provided options indices. Number\n * of votes will be set to 1 for all options\n *\n * @example\n * ```javascript\n * // user votes for the first and fourth options\n * const answer = Answer.fromIndices([0, 3]);\n * ```\n *\n * @param indices - The array of option indices\n */\n public static fromIndices(indices: number[]): Answer {\n return new Answer(\n indices.map((option) => ({\n option,\n value: 1,\n })),\n );\n }\n\n /**\n * Adds a vote for the provided option index\n *\n * @param option - The index of the option, starting with 0\n * @param value - The number of votes that will be placed against the option\n */\n set(option: number, value: number): Answer {\n this._answers.set(option, value);\n\n return this;\n }\n\n /**\n * Removes the vote for the provided option index\n *\n * @param option - The index of the option, starting with 0\n */\n remove(option: number): Answer {\n this._answers.delete(option);\n\n return this;\n }\n\n /** @internal */\n toJSON() {\n return this.answers;\n }\n\n /** @internal */\n public static fromJSON(value: string) {\n return new Answer(JSON.parse(value));\n }\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Localised } from '../../types';\n\n/**\n * Describes Element types\n */\nexport enum ElementType {\n /**\n * Data Element\n */\n Data = 'data',\n /**\n * Poll Element\n */\n Poll = 'poll',\n /**\n * Regular poll Element\n */\n RegularPoll = 'rpoll',\n /**\n * Diametric poll Element\n */\n DiametricPoll = 'dpoll',\n /**\n * Emoting poll Element\n */\n EmotingPoll = 'emo',\n /**\n * Powerbar Element\n */\n Powerbar = 'powerbar',\n /**\n * Prediction Element\n */\n Prediction = 'prediction',\n /**\n * Trivia Element\n */\n Trivia = 'trivia',\n}\n\nexport enum ShowResultsMode {\n OnVote = 'vote',\n OnClose = 'close',\n OnEventEnd = 'event_end',\n Manual = 'manual',\n Never = 'never',\n Always = 'always',\n}\n\n/**\n * A dataset that describes the result for a single option\n */\nexport interface ElementResult {\n /**\n * Total number of votes placed against the Element's option\n */\n votes: number;\n /**\n * Percentage of all votes\n */\n percentage: number;\n}\n\nexport interface ElementOptions {\n id: string;\n type: ElementType;\n content_type: string;\n fixed: boolean;\n published_at: number;\n published_at_iso: string;\n updated_at: number;\n updated_at_iso: string;\n duration: number;\n custom_fields: Localised<Record<string, unknown>>;\n data: {\n // poll fields\n id?: number;\n question?: Localised<Record<string, unknown>>;\n options?: Localised<Record<string, unknown>[]>;\n min_options_per_vote?: number;\n max_options_per_vote?: number;\n max_votes_per_option?: number;\n max_votes_per_user?: number;\n reveal_results_mode?: ShowResultsMode;\n results?: ElementResult[];\n correct_option?: number;\n };\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { now, onTick, Emitter, Unsubscribe } from '@monterosa/sdk-util';\n\nimport { localise } from '../../utils/locale';\n\nimport { ElementContext } from './context';\nimport {\n ElementOptions,\n ElementType,\n ElementResult,\n ShowResultsMode,\n} from './types';\nimport { InteractElement, ElementState } from './public-types';\nimport { EventState } from '../event/public-types';\nimport { Answer } from './answer';\n\n/**\n * @internal\n */\nexport class ElementImpl extends Emitter implements InteractElement {\n private _data: ElementOptions;\n private _context: ElementContext;\n private _state: ElementState;\n private _results: ElementResult[] | null = null;\n private _userAnswer: Answer | null = null;\n private _correctOption: number | null = null;\n private unsubscribeStateHandler: Unsubscribe;\n\n constructor(data: ElementOptions, context: ElementContext) {\n super();\n\n this._data = data;\n this._context = context;\n this._results = data.data?.results || null;\n this._correctOption = data.data?.correct_option\n ? data.data.correct_option - 1\n : null;\n this._state = this.calculateState();\n this.unsubscribeStateHandler = onTick(() => this.handleState());\n }\n\n private calculateState() {\n if (now() < this.publishedAt + this.duration) {\n return ElementState.Opened;\n }\n\n return ElementState.Closed;\n }\n\n private handleState() {\n const state = this.calculateState();\n\n if (state === ElementState.Closed) {\n this.unsubscribeStateHandler();\n }\n\n if (state !== this._state) {\n this._state = state;\n\n this.emit('state', state);\n }\n }\n\n update(data: ElementOptions) {\n this._data = data;\n\n this.handleState();\n }\n\n destroy() {\n this.unsubscribeStateHandler();\n }\n\n get context() {\n return this._context;\n }\n\n get id() {\n return this._data.id;\n }\n\n get eventId() {\n return this.context.event.id;\n }\n\n get state() {\n return this._state;\n }\n\n get type() {\n return this._data.type;\n }\n\n get contentType() {\n return this._data.content_type;\n }\n\n get publishedAt() {\n return this._data.published_at;\n }\n\n get publishedAtIso() {\n return this._data.published_at_iso;\n }\n\n get updatedAt() {\n return this._data.updated_at;\n }\n\n get updatedAtIso() {\n return this._data.updated_at_iso;\n }\n\n get duration() {\n return this._data.duration;\n }\n\n get fields() {\n const { locale } = this.context.project;\n\n return localise(this._data.custom_fields, locale);\n }\n\n get interactive() {\n return this.type !== ElementType.Data;\n }\n\n get pollId() {\n return this._data.data.id || null;\n }\n\n get question() {\n const { locale } = this.context.project;\n\n if (this._data.data.question === undefined) {\n return null;\n }\n\n return localise(this._data.data.question, locale);\n }\n\n get answerOptions() {\n const { locale } = this.context.project;\n\n if (this._data.data.options === undefined) {\n return null;\n }\n\n return localise(this._data.data.options, locale);\n }\n\n get minOptionsPerVote() {\n return this._data.data.min_options_per_vote || 1;\n }\n\n get maxOptionsPerVote() {\n return this._data.data.max_options_per_vote || 1;\n }\n\n get maxVotesPerOption() {\n return this._data.data.max_votes_per_option || 1;\n }\n\n get maxVotesPerUser() {\n return this._data.data.max_votes_per_user || null;\n }\n\n get userAnswer() {\n return this._userAnswer;\n }\n\n set userAnswer(value) {\n this._userAnswer = value;\n }\n\n get hasBeenAnswered() {\n return this._userAnswer !== null;\n }\n\n get showResultsMode() {\n return this._data.data.reveal_results_mode || null;\n }\n\n get canShowResults() {\n switch (this.showResultsMode) {\n case ShowResultsMode.OnVote:\n return this.hasBeenAnswered || this.state === ElementState.Closed;\n\n case ShowResultsMode.OnClose:\n return this.state === ElementState.Closed;\n\n case ShowResultsMode.Manual:\n return this._results !== null;\n\n case ShowResultsMode.OnEventEnd:\n return this.context.event.state === EventState.Finished;\n\n case ShowResultsMode.Never:\n return false;\n\n case ShowResultsMode.Always:\n default:\n return true;\n }\n }\n\n get results() {\n if (!this.canShowResults) {\n return null;\n }\n\n return this._results;\n }\n\n set results(results) {\n // skip setting results if they weren't changed\n if (JSON.stringify(results) === JSON.stringify(this.results)) {\n return;\n }\n\n this._results = results;\n\n if (this.canShowResults) {\n this.emit('results');\n }\n }\n\n get correctOption() {\n return this._correctOption;\n }\n\n set correctOption(value) {\n this._correctOption = value;\n }\n\n get isCorrectOptionRevealed() {\n return this._correctOption !== null;\n }\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022-2024 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport {\n memoizePromise,\n calculatePercentage,\n getErrorMessage,\n} from '@monterosa/sdk-util';\nimport { storageRead, storageWrite } from '@monterosa/sdk-storage-kit';\n\nimport { ElementOptions } from './types';\nimport { InteractElement } from './public-types';\nimport { ElementContext } from './context';\n\nimport { InteractEvent } from '../event/public-types';\nimport { EventHistory } from '../event/types';\nimport { getEvent } from '../event/api';\nimport { init as initEvent } from '../event/factory';\n\nimport { getConnect, Message, Klass } from '../connect';\n\nimport { ElementImpl } from './element_impl';\nimport { Answer } from './answer';\n\nexport const elements: Map<string, InteractElement> = new Map();\n\nexport async function buildElement(\n options: ElementOptions,\n context: ElementContext,\n): Promise<InteractElement> {\n if (elements.has(options.id)) {\n return elements.get(options.id) as InteractElement;\n }\n\n const element = new ElementImpl(options, context);\n\n await restoreAnswer(element);\n\n elements.set(element.id, element);\n\n return element;\n}\n\nfunction getElementByPolld(pollId: number): InteractElement | undefined {\n return Array.from(elements.values()).find(\n (element) => element.pollId === pollId,\n );\n}\n\nconst configureEventMemoized = memoizePromise(\n async (event: InteractEvent): Promise<void> => {\n event.on('history', handleEventHistory);\n\n if (event.history !== null) {\n handleEventHistory(event.history);\n }\n\n await configureConnect(event.context.sdk.options.host);\n await initEvent(event);\n },\n (event) => event.id,\n);\n\nexport async function configureEvent(event: InteractEvent): Promise<void> {\n return configureEventMemoized(event);\n}\n\nconst configureConnectMemoized = memoizePromise(\n async (host: string): Promise<void> => {\n const connect = await getConnect(host);\n\n connect.on('message', handleConnectMessage);\n },\n (host) => host,\n);\n\nasync function configureConnect(host: string): Promise<void> {\n return configureConnectMemoized(host);\n}\n\nasync function handleConnectMessage(message: Message): Promise<void> {\n const { klass } = message;\n\n switch (klass) {\n case Klass.Create:\n await handleCreateMessage(message);\n break;\n\n case Klass.Revoke:\n await handleRevokeMessage(message);\n break;\n\n case Klass.Feedback:\n await handleFeedbackMessage(message);\n break;\n\n case Klass.Reveal:\n await handleRevealMessage(message);\n break;\n }\n}\n\nasync function handleCreateMessage(message: Message) {\n const { id, data } = message;\n\n const options = JSON.parse(data[0]) as ElementOptions;\n\n const event = await getEvent(id);\n\n if (event === null) {\n return;\n }\n\n if (elements.has(options.id)) {\n const element = elements.get(options.id) as InteractElement;\n\n if (\n options.updated_at > element.updatedAt ||\n // This is a workaround to handle a Studio issue when two /create/ messages\n // are sent upon correct option reveal. The first /create/ message contains\n // the same duration but a different updated_at timestamp. The second /create/\n // message contains the same updated_at timestamp but a different duration.\n // Therefore, we need to check if the duration is different to ensure that\n // the element is updated correctly.\n options.duration !== element.duration\n ) {\n element.update(options);\n\n event.emit('update', element);\n }\n } else {\n const context = {\n ...event.context,\n event,\n };\n\n const element = await buildElement(options, context);\n\n event.emit('publish', element);\n }\n}\n\nfunction handleRevokeMessage(message: Message) {\n const { data } = message;\n\n const { id } = JSON.parse(data[0]) as ElementOptions;\n\n if (!elements.has(id)) {\n return;\n }\n\n const element = elements.get(id) as InteractElement;\n\n elements.delete(id);\n element.destroy();\n\n element.context.event.emit('revoke', element);\n}\n\nasync function handleFeedbackMessage(message: Message) {\n const { data } = message;\n\n // Feedback message format:\n //\n // [pollId, isFinal, sources, counters, timestamp]\n\n const pollId = +data[0];\n const counters = data[3];\n\n const element = getElementByPolld(pollId);\n\n if (!element) {\n return;\n }\n\n const votes = counters.split(':').map((value) => +value);\n const percentages = calculatePercentage(votes);\n\n const results = votes.map((item, idx) => ({\n percentage: percentages[idx],\n votes: item,\n }));\n\n element.results = results;\n}\n\nfunction handleRevealMessage(message: Message) {\n const { data } = message;\n\n // Reveal message format:\n //\n // [pollId, index (1-based), timestamp]\n\n const pollId = +data[0];\n const correctOption = +data[1] - 1;\n\n const element = getElementByPolld(pollId);\n\n if (!element) {\n return;\n }\n\n if (element.correctOption !== correctOption) {\n element.correctOption = correctOption;\n\n element.context.event.emit('update', element);\n }\n}\n\nasync function handleEventHistory(history: EventHistory) {\n if (history.timeline.length === 0) {\n return;\n }\n\n const event = await getEvent(history.config.id);\n\n if (event === null) {\n return;\n }\n\n const context = {\n ...event.context,\n event,\n };\n\n for await (const snapshot of history.timeline) {\n if (!elements.has(snapshot.id)) {\n await buildElement(snapshot, context);\n }\n }\n}\n\nexport async function sendAnswer(element: InteractElement, userAnswer: Answer) {\n const { project, event } = element.context;\n const connect = await getConnect(project.host);\n\n const answer = userAnswer.answers\n .map(({ option, value }) => [option + 1, value])\n .flat()\n .join(':');\n\n connect.sendVote(event.id, element.pollId!, answer);\n}\n\nexport async function storeAnswer(\n element: InteractElement,\n userAnswer: Answer,\n): Promise<void> {\n try {\n element.userAnswer = userAnswer;\n\n await storageWrite(\n `element_${element.id}_vote`,\n JSON.stringify(userAnswer),\n );\n } catch (err) {\n console.warn(`Failed to store user answer: ${getErrorMessage(err)}`);\n }\n}\n\nexport async function restoreAnswer(element: InteractElement): Promise<void> {\n const userAnswer = await storageRead(`element_${element.id}_vote`);\n\n if (userAnswer !== null) {\n element.userAnswer = Answer.fromJSON(userAnswer);\n }\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2022 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport {\n subscribe,\n memoizePromise,\n createError,\n Unsubscribe,\n} from '@monterosa/sdk-util';\n\nimport { InteractEvent, InitState } from '../event/public-types';\nimport {\n InteractElement,\n ElementState,\n AnswerError,\n AnswerErrorMessages,\n} from './public-types';\n\nimport { Answer, AnswerValue } from './answer';\nimport { elements, configureEvent, sendAnswer, storeAnswer } from './factory';\n\n/**\n * @internal\n */\nconst getElementMemoized = memoizePromise(\n async (event: InteractEvent, id: string): Promise<InteractElement | null> => {\n await configureEvent(event);\n\n const element = Array.from(elements.values()).find((el) => el.id === id);\n\n return element || null;\n },\n (event: InteractEvent, id: string): string => id,\n);\n\n/**\n * Returns an Element of a specific Event by its id.\n *\n * @param event - The Event that owns the Element\n * @param id - The Element identifier\n */\nfunction getElement(\n event: InteractEvent,\n id: string,\n): Promise<InteractElement | null> {\n return getElementMemoized(event, id);\n}\n\n/**\n * @internal\n */\nconst getElementsMemoized = memoizePromise(\n async (event: InteractEvent): Promise<InteractElement[]> => {\n await configureEvent(event);\n\n return (\n Array.from(elements.values())\n\n // Get Elements which belong only to the provided Event\n .filter((element) => element.eventId === event.id)\n\n // Sort Elements so the oldest Element is first, and the most recent is last\n .sort((a, b) => a.publishedAt - b.publishedAt)\n );\n },\n (event: InteractEvent) => event.id,\n {\n clearOnResolve: true,\n },\n);\n\n/**\n * Returns the list of Elements published in a specific Event\n *\n * @param event - The Event to fetch Elements for\n * @returns The published Elements, sorted oldest first.\n */\nfunction getElements(event: InteractEvent): Promise<InteractElement[]> {\n return getElementsMemoized(event);\n}\n\n/**\n * Submits an Element answer as a spread of options indices\n *\n * @example\n * ```javascript\n * // vote for the first and third options\n * answer(element, 0, 2);\n * ```\n *\n * @param element - An Element instance\n * @param indices - Spread of options indices (starting with 0) to vote for\n */\nfunction answer(element: InteractElement, ...indices: number[]): void;\n\n/**\n * Submits an Element answer as an array of options indices\n *\n * @example\n * ```javascript\n * // vote for the first and third options\n * answer(element, [0, 2]);\n * ```\n *\n * @param element - An Element instance\n * @param arrayOfIndices - Array of options indices (starting with 0) to vote for\n */\nfunction answer(element: InteractElement, arrayOfIndices: number[]): void;\n\n/**\n * Submits an Element answer as a spread of answer values\n *\n * @example\n * ```javascript\n * // vote for the first and third options\n * answer(element,\n * {option: 0, value: 1},\n * {option: 2, value: 1},\n * );\n * ```\n *\n * @param element - An Element instance\n * @param answerValues - Spread of answer values to vote for\n */\nfunction answer(element: InteractElement, ...answerValues: AnswerValue[]): void;\n\n/**\n * Submits an Element answer as an array of answer values\n *\n * @example\n * ```javascript\n * // vote for the first and third options\n * answer(element, [\n * {option: 0, value: 1},\n * {option: 2, value: 1},\n * ]);\n * ```\n *\n * @param element - An Element instance\n * @param arrayOfAnswerValues - Array of answer values to vote for\n */\nfunction answer(\n element: InteractElement,\n arrayOfAnswerValues: AnswerValue[],\n): void;\n\n/**\n * Submits an Element answer as an Answer instance\n *\n * @example\n * ```javascript\n * // vote for the first and third options\n * const value = new Answer();\n * value.set(0, 1);\n * value.set(2, 1);\n *\n * answer(element, value);\n * ```\n *\n * @param element - An Element instance\n * @param answerObject - Array of answer values to vote for\n */\nfunction answer(element: InteractElement, answerObject: Answer): void;\n\nfunction answer(element: InteractElement, ...value: any) {\n const answerObj = answerParametersToAnswer(...value);\n\n validateAnswer(element, ...value);\n sendAnswer(element, answerObj);\n storeAnswer(element, answerObj);\n}\n\n/**\n * Validates user's answer as a spread of options indices and\n * throws {@link @monterosa/sdk-util#MonterosaError%20class | error} with one of the\n * {@link AnswerError | error code} if the answer doesn't match\n * Element's constraints\n *\n *\n * @example\n * ```javascript\n * try {\n * validateAnswer(element, 0, 2);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n *\n * @param element - An Element instance\n * @param indices - Spread of options indices (starting with 0) to vote for\n */\nfunction validateAnswer(element: InteractElement, ...indices: number[]): void;\n\n/**\n * Validates user's answer as an array of options indices and\n * throws {@link @monterosa/sdk-util#MonterosaError%20class | error} with one of the\n * {@link AnswerError | error code} if the answer doesn't match\n * Element's constraints\n *\n * @example\n * ```javascript\n * try {\n * validateAnswer(element, [0, 2]);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n *\n * @param element - An Element instance\n * @param arrayOfIndices - Array of options indices (starting with 0) to vote for\n */\nfunction validateAnswer(\n element: InteractElement,\n arrayOfIndices: number[],\n): void;\n\n/**\n * Validates user's answer as a spread of answer values and\n * throws {@link @monterosa/sdk-util#MonterosaError%20class | error} with one of the\n * {@link AnswerError | error code} if the answer doesn't match\n * Element's constraints\n *\n * @example\n * ```javascript\n * try {\n * validateAnswer(element,\n * {option: 0, value: 1},\n * {option: 2, value: 1},\n * );\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n *\n * @param element - An Element instance\n * @param answerValues - Spread of answer values to vote for\n */\nfunction validateAnswer(\n element: InteractElement,\n ...answerValues: AnswerValue[]\n): void;\n\n/**\n * Validates user's answer as an array of answer values and\n * throws {@link @monterosa/sdk-util#MonterosaError%20class | error} with one of the\n * {@link AnswerError | error code} if the answer doesn't match\n * Element's constraints\n *\n * @example\n * ```javascript\n * try {\n * validateAnswer(element, [\n * {option: 0, value: 1},\n * {option: 2, value: 1},\n * ]);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n *\n * @param element - An Element instance\n * @param arrayOfAnswerValues - Array of answer values to vote for\n */\nfunction validateAnswer(\n element: InteractElement,\n arrayOfAnswerValues: AnswerValue[],\n): void;\n\n/**\n * Validates user's answer as an Answer instance and\n * throws {@link @monterosa/sdk-util#MonterosaError%20class | error} with one of the\n * {@link AnswerError | error code} if the answer doesn't match\n * Element's constraints\n *\n * @example\n * ```javascript\n * try {\n * const value = new Answer();\n * value.set(0, 1);\n * value.set(2, 1);\n *\n * validateAnswer(element, value);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n *\n * @param element - An Element instance\n * @param answerObject - Array of answer values to vote for\n */\nfunction validateAnswer(element: InteractElement, answerObject: Answer): void;\n\nfunction validateAnswer(\n element: InteractElement,\n ...value: (number | number[] | AnswerValue | AnswerValue[] | Answer)[]\n) {\n const answerObj = answerParametersToAnswer(...value);\n\n const { answers } = answerObj;\n\n const indices = answers.map(({ option }) => option);\n const values = answers.map(({ value: v }) => v);\n\n const maxIndex = Math.max(...indices);\n const maxValue = Math.max(...values);\n const sumValues = values.reduce((memo, val) => memo + val, 0);\n const emptyIndices = values.reduce((memo: number[], val, idx) => {\n if (val === 0) {\n memo.push(indices[idx]);\n }\n\n return memo;\n }, []);\n\n if (!element.interactive) {\n throw createError(\n AnswerError.VotedOnNonInteractiveElement,\n AnswerErrorMessages,\n element.id,\n );\n }\n\n if (element.state === ElementState.Closed) {\n throw createError(\n AnswerError.VotedOnClosedElement,\n AnswerErrorMessages,\n element.id,\n );\n }\n\n if (maxIndex > element.answerOptions!.length - 1) {\n throw createError(\n AnswerError.OptionIndexOutOfRange,\n AnswerErrorMessages,\n element.answerOptions!.length - 1,\n maxIndex,\n );\n }\n\n if (\n element.minOptionsPerVote !== null &&\n indices.length < element.minOptionsPerVote\n ) {\n throw createError(\n AnswerError.BelowMinVoteOptions,\n AnswerErrorMessages,\n element.minOptionsPerVote,\n indices.length,\n );\n }\n\n if (\n element.maxOptionsPerVote !== null &&\n indices.length > element.maxOptionsPerVote\n ) {\n throw createError(\n AnswerError.AboveMaxVoteOptions,\n AnswerErrorMessages,\n element.maxOptionsPerVote,\n indices.length,\n );\n }\n\n if (sumValues > element.maxVotesPerUser!) {\n throw createError(\n AnswerError.AboveMaxVotesPerUser,\n AnswerErrorMessages,\n element.maxVotesPerUser,\n sumValues,\n );\n }\n\n if (maxValue > element.maxVotesPerOption!) {\n throw createError(\n AnswerError.AboveMaxVotesPerOption,\n AnswerErrorMessages,\n element.maxVotesPerOption,\n maxValue,\n );\n }\n\n if (emptyIndices.length > 0) {\n throw createError(\n AnswerError.EmptyVote,\n AnswerErrorMessages,\n emptyIndices.join(', '),\n );\n }\n}\n\nfunction answerParametersToAnswer(\n ...value: (number | number[] | AnswerValue | AnswerValue[] | Answer)[]\n): Answer {\n const answerValues = value.flat();\n\n if (isAnswer(answerValues[0])) {\n return <Answer>answerValues[0];\n }\n\n if (isNumbers(answerValues)) {\n return Answer.fromIndices(answerValues);\n }\n\n if (isAnswerValues(answerValues)) {\n return new Answer(answerValues);\n }\n\n return new Answer();\n}\n\nfunction isAnswer(value: any): value is Answer {\n return value instanceof Answer;\n}\n\nfunction isAnswerValues(value: any[]): value is AnswerValue[] {\n return value.every(\n (v) =>\n Object.prototype.hasOwnProperty.call(v, 'option') &&\n Object.prototype.hasOwnProperty.call(v, 'value'),\n );\n}\n\nfunction isNumbers(value: any[]): value is number[] {\n return value.every((v) => typeof v === 'number');\n}\n\n/**\n * Adds an observer for when\n * {@link InteractElement | Element results} are updated\n *\n * @param element - The Element to observe\n * @param callback - Called when results are updated\n */\nfunction onElementResults(\n element: InteractElement,\n callback: () => void,\n): Unsubscribe {\n return subscribe(element, 'results', callback);\n}\n\n/**\n * Adds an observer for when\n * {@link InteractElement | Element state} changed\n *\n * @param element - The Element to observe\n * @param callback - Called when the state changes\n */\nfunction onElementStateChanged(\n element: InteractElement,\n callback: () => void,\n): Unsubscribe {\n return subscribe(element, 'state', callback);\n}\n\n/**\n * Adds an observer for when\n * {@link InteractElement | Element fields} are updated\n *\n * @param event - The Event containing the Elements\n * @param callback - Called with the updated Element\n */\nfunction onElementUpdated(\n event: InteractEvent,\n callback: (element: InteractElement) => void,\n): Unsubscribe {\n configureEvent(event);\n\n return subscribe(event, 'update', callback);\n}\n\n/**\n * Adds an observer for when a new Element is published\n *\n * @param event - The Event to observe\n * @param callback - Called with the published Element\n */\nfunction onElementPublished(\n event: InteractEvent,\n callback: (element: InteractElement) => void,\n): Unsubscribe {\n configureEvent(event);\n\n return subscribe(event, 'publish', (element: InteractElement) => {\n if (event.initState === InitState.Initialised) {\n callback(element);\n }\n });\n}\n\n/**\n * Adds an observer for when an Element is revoked\n *\n * @param event - The Event to observe\n * @param callback - Called with the revoked Element\n */\nfunction onElementRevoked(\n event: InteractEvent,\n callback: (element: InteractElement) => void,\n): Unsubscribe {\n configureEvent(event);\n\n return subscribe(event, 'revoke', callback);\n}\n\nexport {\n getElement,\n getElementMemoized,\n getElements,\n getElementsMemoized,\n answer,\n validateAnswer,\n onElementResults,\n onElementStateChanged,\n onElementUpdated,\n onElementPublished,\n onElementRevoked,\n};\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2025 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Emitter } from '@monterosa/sdk-util';\n\nexport interface PresenceCounter extends Emitter {\n readonly isOpened: boolean;\n readonly lastCount: number;\n}\n\nexport enum PresenceCounterState {\n Opened = 'opened',\n Closed = 'closed',\n}\n\nexport type PresenceCounterData = {\n counter: number;\n next_update_at: number;\n};\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2023 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Logger } from '@monterosa/sdk-core';\n\nexport const logger = new Logger('@monterosa/sdk-interact-kit');\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2025 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { Emitter, now } from '@monterosa/sdk-util';\n\nimport { logger } from '../../utils/logger';\n\nimport { Connect, Message, Klass, getConnect } from '../connect';\n\nimport { PresenceCounterState, PresenceCounter } from './types';\n\nexport class PresenceCounterImpl extends Emitter implements PresenceCounter {\n private state: PresenceCounterState = PresenceCounterState.Closed;\n public lastCount: number = 0;\n private connect: Connect | null = null;\n private closeTimeout?: ReturnType<typeof setTimeout>;\n private boundHandleMessage: (message: Message) => void;\n private boundHandleTimeout: () => void;\n\n constructor(private host: string, private id: string) {\n super();\n\n this.boundHandleMessage = this.handleMessage.bind(this);\n this.boundHandleTimeout = this.handleTimeout.bind(this);\n }\n\n async init() {\n this.connect = await getConnect(this.host);\n\n this.connect.on('message', this.boundHandleMessage);\n }\n\n get isOpened() {\n return this.state === PresenceCounterState.Opened;\n }\n\n private async handleMessage(message: Message) {\n const { id, klass, data } = message;\n\n if (id !== this.id || klass !== Klass.SubsCounter) {\n return;\n }\n\n try {\n const subsData = JSON.parse(data[0]);\n\n this.handleCounterUpdate(subsData.counter);\n this.resetTimeout(subsData.next_update_at);\n } catch (e) {\n logger.warn(\"Couldn't parse subscounter message.\");\n }\n }\n\n private handleCounterUpdate(count: number) {\n if (count < 0) {\n return;\n }\n\n let shouldEmitUpdated = false;\n let shouldEmitState = false;\n\n if (this.lastCount !== count) {\n shouldEmitUpdated = true;\n this.lastCount = count;\n }\n\n if (this.state === PresenceCounterState.Closed) {\n shouldEmitState = true;\n this.state = PresenceCounterState.Opened;\n }\n\n if (shouldEmitUpdated) {\n this.emit('updated', this.lastCount);\n }\n\n if (shouldEmitState) {\n this.emit('state', PresenceCounterState.Opened);\n }\n }\n\n private handleTimeout() {\n this.state = PresenceCounterState.Closed;\n this.emit('state', PresenceCounterState.Closed);\n }\n\n private resetTimeout(nextUpdateAt: number) {\n clearTimeout(this.closeTimeout);\n\n this.closeTimeout = setTimeout(\n this.boundHandleTimeout,\n // because of the time difference between the server and the client,\n // we need to add 3 seconds to the timeout\n (nextUpdateAt - now() + 3) * 1000,\n );\n }\n\n destroy() {\n if (this.connect !== null) {\n this.connect.off('message', this.boundHandleMessage);\n }\n }\n}\n","/**\n * @license\n * @monterosa/sdk-interact-kit\n *\n * Copyright © 2025 Monterosa Productions Limited. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { memoizePromise, Unsubscribe } from '@monterosa/sdk-util';\n\nimport { PresenceCounter, PresenceCounterState } from './types';\n\nimport { PresenceCounterImpl } from './presence_counter_impl';\n\nimport { InteractProject, getProject } from '../project';\n\nexport const presenceCounters = new Map<string, PresenceCounter>();\n\nconst getPresenceCounterMemoized = memoizePromise(\n async (host: string, id: string): Promise<PresenceCounter> => {\n if (presenceCounters.has(id)) {\n return presenceCounters.get(id) as PresenceCounter;\n }\n\n const presenceCounter = new PresenceCounterImpl(host, id);\n\n await presenceCounter.init();\n\n presenceCounters.set(id, presenceCounter);\n\n return presenceCounter;\n },\n (_, id: string): string => id,\n);\n\nexport async function getPresenceCounter(\n project?: InteractProject,\n): Promise<PresenceCounter> {\n if (project === undefined) {\n project = await getProject();\n }\n\n return getPresenceCounterMemoized(\n project.context.sdk.options.host,\n project.id,\n );\n}\n\nexport function onPresenceCounterUpdate(\n presenceCounter: PresenceCounter,\n callback: (count: number) => void,\n): Unsubscribe {\n presenceCounter.on('updated', callback);\n\n return () => presenceCounter.off('updated', callback);\n}\n\nexport function onPresenceCounterOpen(\n presenceCounter: PresenceCounter,\n callback: () => void,\n): Unsubscribe {\n const handler = (state: PresenceCounterState) => {\n if (state === PresenceCounterState.Opened) {\n callback();\n }\n };\n\n presenceCounter.on('state', handler);\n\n return () => presenceCounter.off('state', handler);\n}\n\nexport function onPresenceCounterClose(\n presenceCounter: PresenceCounter,\n callback: () => void,\n): Unsubscribe {\n const handler = (state: PresenceCounterState) => {\n if (state === PresenceCounterState.Closed) {\n callback();\n }\n };\n\n presenceCounter.on('state', handler);\n\n return () => presenceCounter.off('state', handler);\n}\n"],"names":["State","Klass","Channel","Emitter","getEnmasse","connect","disconnect","subscribe","unsubscribe","send","EnmasseState","memoizePromise","ConnectionHealthState","ConnectState","getSdk","checksum","fetchSettings","handleConnectMessage","EventState","onTick","now","onConnected","AnswerError","ElementState","ElementType","initEvent","calculatePercentage","storageWrite","getErrorMessage","storageRead","createError","PresenceCounterState","Logger"],"mappings":"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"}
package/package.json CHANGED
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "name": "@monterosa/sdk-interact-kit",
3
- "version": "2.0.0-rc.2",
3
+ "version": "2.0.0-rc.3",
4
4
  "description": "Monterosa JS SDK / Interact Kit",
5
5
  "author": "Monterosa Productions Limited <hello@monterosa.co.uk> (https://www.monterosa.co/)",
6
- "main": "./dist/index.js",
6
+ "main": "./dist/index.cjs",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
10
  "types": "./dist/index.d.ts",
11
11
  "import": "./dist/index.js",
12
- "default": "./dist/index.js"
12
+ "require": "./dist/index.cjs",
13
+ "default": "./dist/index.cjs"
13
14
  }
14
15
  },
15
16
  "files": [
@@ -31,11 +32,11 @@
31
32
  ],
32
33
  "license": "MIT",
33
34
  "dependencies": {
34
- "@monterosa/sdk-connect-kit": "2.0.0-rc.2",
35
- "@monterosa/sdk-core": "2.0.0-rc.2",
36
- "@monterosa/sdk-interact-interop": "2.0.0-rc.2",
37
- "@monterosa/sdk-storage-kit": "2.0.0-rc.2",
38
- "@monterosa/sdk-util": "2.0.0-rc.2"
35
+ "@monterosa/sdk-connect-kit": "2.0.0-rc.3",
36
+ "@monterosa/sdk-core": "2.0.0-rc.3",
37
+ "@monterosa/sdk-interact-interop": "2.0.0-rc.3",
38
+ "@monterosa/sdk-storage-kit": "2.0.0-rc.3",
39
+ "@monterosa/sdk-util": "2.0.0-rc.3"
39
40
  },
40
41
  "devDependencies": {
41
42
  "@faker-js/faker": "^6.3.1",
@@ -57,5 +58,5 @@
57
58
  "publishConfig": {
58
59
  "access": "public"
59
60
  },
60
- "gitHead": "0e2d4cd71055bf0ab38ec5a73d6040c55151da1c"
61
+ "gitHead": "d692ad26af0b5ea7cd7b664168bffa069f9ab911"
61
62
  }