@monterosa/sdk-interact-kit 0.17.1-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/index.cjs.js +2709 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.esm2017.js +1894 -0
- package/dist/index.esm2017.js.map +1 -0
- package/dist/index.esm5.js +2673 -0
- package/dist/index.esm5.js.map +1 -0
- package/dist/jest/helpers/language.d.ts +12 -0
- package/dist/src/api.d.ts +38 -0
- package/dist/src/core/connect/api.d.ts +16 -0
- package/dist/src/core/connect/connect_impl.d.ts +34 -0
- package/dist/src/core/connect/index.d.ts +12 -0
- package/dist/src/core/connect/public-types.d.ts +64 -0
- package/dist/src/core/connection_health/connection_health_impl.d.ts +21 -0
- package/dist/src/core/connection_health/index.d.ts +24 -0
- package/dist/src/core/connection_health/public-types.d.ts +34 -0
- package/dist/src/core/element/answer.d.ts +66 -0
- package/dist/src/core/element/api.d.ts +235 -0
- package/dist/src/core/element/context.d.ts +18 -0
- package/dist/src/core/element/element_impl.d.ts +62 -0
- package/dist/src/core/element/factory.d.ts +21 -0
- package/dist/src/core/element/index.d.ts +15 -0
- package/dist/src/core/element/public-types.d.ts +228 -0
- package/dist/src/core/element/types.d.ts +93 -0
- package/dist/src/core/event/api.d.ts +84 -0
- package/dist/src/core/event/context.d.ts +16 -0
- package/dist/src/core/event/event_impl.d.ts +53 -0
- package/dist/src/core/event/factory.d.ts +22 -0
- package/dist/src/core/event/index.d.ts +13 -0
- package/dist/src/core/event/internal.d.ts +12 -0
- package/dist/src/core/event/public-types.d.ts +119 -0
- package/dist/src/core/event/types.d.ts +32 -0
- package/dist/src/core/index.d.ts +15 -0
- package/dist/src/core/project/api.d.ts +36 -0
- package/dist/src/core/project/constants.d.ts +11 -0
- package/dist/src/core/project/context.d.ts +14 -0
- package/dist/src/core/project/factory.d.ts +16 -0
- package/dist/src/core/project/index.d.ts +13 -0
- package/dist/src/core/project/internal.d.ts +12 -0
- package/dist/src/core/project/project_impl.d.ts +51 -0
- package/dist/src/core/project/public-types.d.ts +158 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/services/http_request.d.ts +47 -0
- package/dist/src/types.d.ts +18 -0
- package/dist/src/utils/calculate_percentage.d.ts +11 -0
- package/dist/src/utils/locale.d.ts +20 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm2017.js","sources":["../src/api.ts","../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/internal.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/utils/calculate_percentage.ts","../src/core/element/factory.ts","../src/core/element/api.ts"],"sourcesContent":["/**\n * @license\n * api.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2023-05-24\n * Copyright © 2023 Monterosa. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { MonterosaSdk } from '@monterosa/sdk-core';\nimport { getConnect, login as connectLogin } from '@monterosa/sdk-connect-kit';\n\n/**\n * Sign in the user to submit data that requires a verified user.\n *\n * @example\n * ```javascript\n * try {\n * const sdk = getSdk();\n * const userId = \"b236e331-ee62-4238-90d0-47588c7facdc\";\n * const timestamp = 1684934960;\n * const signature = \"9ABC4892838DC13986A63B736E95A7D99DF95C72\";\n *\n * await login(sdk, userId, timestamp, signature);\n *\n * console.log('logged in successfully!');\n * } catch (err) {\n * console.log(err)\n * }\n * ```\n *\n * @param sdk - Monterosa SDK instance\n * @param userId - The unique user UUID\n * @param timestamp - The timecode when the signature was generated\n * @param signature - A unique identifier that serves as proof of the user's authenticity.\n * The signature must only contain the following characters: 0-9, a-z, A-Z, and must be uppercased\n * @returns A Promise that resolves with `void` when the login is successful, otherwise it rejects.\n */\nexport async function login(\n sdk: MonterosaSdk,\n userId: string,\n timestamp: number,\n signature: string,\n) {\n const connect = await getConnect(sdk.options.host);\n\n return connectLogin(connect, userId, timestamp, signature);\n}\n","/**\n * @license\n * public-types.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-11-24\n * Copyright © 2022 Monterosa. 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}\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 * connect_impl.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-11-24\n * Copyright © 2022 Monterosa. 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 * api.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-11-24\n * Copyright © 2022 Monterosa. 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 * public-types.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-03-24\n * Copyright © 2022 Monterosa. 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 explicetily {@link @monterosa/sdk-connect-kit#disconnect() | disconnected}\n */\n Error = 'error',\n}\n","/**\n * @license\n * connection_health_impl.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-02-15\n * Copyright © 2022 Monterosa. 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 * index.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-02-15\n * Copyright © 2022 Monterosa. 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 */\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.state | connection health state} changed\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 * internal.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-02-15\n * Copyright © 2022 Monterosa. 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\nexport async function fetchSettings(\n host: string,\n id: string,\n): Promise<Localised<Record<string, unknown>>> {\n const response = await fetch(\n `https://${host}/projects/${id.substring(0, 2)}/${id}/settings.json`,\n );\n\n const data = await response.json();\n\n return data;\n}\n","/**\n * @license\n * constants.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-06-02\n * Copyright © 2022 Monterosa. 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 * locale.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-10-18\n * Copyright © 2022 Monterosa. 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 * project_impl.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-02-15\n * Copyright © 2022 Monterosa. 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 { 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 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(value: Listings) {\n let createdEvents: EventOptions[] = [];\n let deletedEvents: EventOptions[] = [];\n\n if (this._listings) {\n createdEvents = value.events.filter(\n ({ id }) => !this._listings.events.some((event) => id === event.id),\n );\n }\n\n if (this._listings) {\n deletedEvents = this.listings.events.filter(\n ({ id }) => !value.events.some((event) => id === event.id),\n );\n }\n\n this._listings = { ...value };\n\n this._locales = this._listings.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 if (createdEvents.length > 0) {\n this.emit('listings_events_created', createdEvents);\n }\n\n if (deletedEvents.length > 0) {\n this.emit('listings_events_deleted', deletedEvents);\n }\n\n this.emit('listings');\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 * factory.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-02-15\n * Copyright © 2022 Monterosa. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport { ProjectContext } from './context';\nimport { InteractProject, ProjectOptions, Listings } from './public-types';\n\nimport { fetchSettings } from './internal';\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 * api.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-02-15\n * Copyright © 2022 Monterosa. 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, Listings } 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 {@link @monterosa/sdk-core#MonterosaSdk | configured sdk}\n */\nfunction getProject(sdk: MonterosaSdk = getSdk()): Promise<InteractProject> {\n return getProjectMemoized(sdk);\n}\n\n/**\n * @internal\n */\nexport async function fetchListings(\n host: string,\n projectId: string,\n): Promise<Listings> {\n const response = await fetch(\n `https://${host}/projects/${projectId.substring(\n 0,\n 2,\n )}/${projectId}/listings.json`,\n );\n\n const data = (await response.json()) as Listings;\n\n return data;\n}\n\n/**\n * Adds an observer for when {@link InteractProject.fields | project fields}\n * are updated\n */\nfunction onProjectFieldsUpdated(\n project: InteractProject,\n callback: () => void,\n): Unsubscribe {\n return subscribe(project, 'updated', callback);\n}\n\n/**\n * @internal\n */\nfunction onProjectListingsUpdated(\n project: InteractProject,\n callback: () => void,\n): Unsubscribe {\n return subscribe(project, 'listings', callback);\n}\n\nexport {\n getProject,\n getProjectMemoized,\n onProjectFieldsUpdated,\n onProjectListingsUpdated,\n};\n","/**\n * @license\n * internal.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-03-24\n * Copyright © 2022 Monterosa. 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 * public-types.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-03-24\n * Copyright © 2022 Monterosa. 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 | start time}\n * less than the {@link now | current time}.\n */\n Upcoming = 'upcoming',\n /**\n * The event is in the `active` state when its {@link InteractEvent.startAt | start time}\n * equal or more than the {@link now | current time} and less than the\n * {@link InteractEvent.endAt | end time}.\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 | end time}\n * equal or more than the {@link 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 * An instance of\n * {@link https://products.monterosa.co/mic/core-concepts/schedule-and-events | Monterosa / Interaction Cloud Event}\n * that holds all of its information.\n *\n * Event represent either a sports game, TV show or simply a period of time in\n * which you want to push out interactivity to users. When you create an event\n * you can specify: duration, start time, start mode and\n * {@link https://products.monterosa.co/mic/developer-guides/app-spec/event-settings-spec | custom fields}\n * that can be confgured by a developers\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 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 * event_impl.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-02-15\n * Copyright © 2022 Monterosa. 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 { 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\nimport { onProjectListingsUpdated } from '../project/api';\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 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.unsubscribeStateHandler = onTick(() => this.handleState());\n this.unsubscribeInternalStateHandler = onTick(() => {\n this.handleInternalState();\n });\n this.unsubscribeListingsHandler = onProjectListingsUpdated(\n context.project,\n () => this.handleListings(),\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 handleListings() {\n const { project } = this.context;\n\n const data = project.events.find(({ id }) => id === this.id);\n\n if (data && this._data.digest !== data.digest) {\n (this as Mutable<EventImpl>)._data = data;\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 * factory.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-02-22\n * Copyright © 2022 Monterosa. 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 * api.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-02-15\n * Copyright © 2022 Monterosa. 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';\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 most recent event is first, and the oldest is last\n .sort((a, b) => a.startAt - b.startAt)\n );\n },\n (project?: InteractProject) => {\n if (project === undefined) {\n const sdk = getSdk();\n\n return sdk.options.projectId;\n }\n\n return project.id;\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 */\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 (project === undefined) {\n project = await getProject();\n }\n\n if (events.has(id)) {\n return events.get(id) as InteractEvent;\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 A an event associated with the provided id and project or null if no such\n * 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 {@link InteractEvent.state | event state} changed\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 */\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 */\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 * {@link onEventAdded} alias.\n *\n * @deprecated Use the new {@link onEventAdded} function instead.\n */\nfunction onEventPublished(\n project: InteractProject,\n callback: (event: InteractEvent) => void,\n): Unsubscribe {\n console.warn(\n 'onEventPublished() is deprecated. Please use onEventAdded() instead',\n );\n\n return onEventAdded(project, callback);\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 confuguration 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 */\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 onEventPublished,\n onEventRemoved,\n};\n","/**\n * @license\n * public-types.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-03-24\n * Copyright © 2022 Monterosa. 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 OptionIndexOutOfRange = 'out_of_range',\n BelowMinVoteOptions = 'below_min_vote_options',\n AboveMaxVoteOptions = 'above_max_vote_options',\n AboveMaxVotesPerUser = 'above_max_per_user',\n AboveMaxVotesPerOption = 'above_max_per_option',\n VotedOnNonInteractiveElement = 'non_interactive_element',\n VotedOnClosedElement = 'closed_element',\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 * 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 * An instance of\n * {@link https://products.monterosa.co/mic/core-concepts/elements | Monterosa / Interaction Cloud Element}\n * that holds all of its information.\n *\n * Elements are interactive components such as Polls, Predictions or Trivia\n * questions which have a range of configuration fields such as duration,\n * publish time, question, answers, etc. Also developer can add a custom set of\n * fields of various types. Elements are triggered to appear at a certain\n * time and process both the appearance of the content, the way it behaves,\n * and the data which is sent back from the audience.\n *\n * Elements configured through the\n * {@link https://products.monterosa.co/mic/developer-guides/app-spec/elements-spec | app's element spec}\n * where developer can configure the list of elements and its custom fields.\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 elements 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 * answer.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-04-13\n * Copyright © 2022 Monterosa. 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 * types.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-03-24\n * Copyright © 2022 Monterosa. 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\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 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 * element_impl.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-03-24\n * Copyright © 2022 Monterosa. 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\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 * calculate_percentage.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-04-07\n * Copyright © 2022 Monterosa. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nexport const calculatePercentage = (values: number[]): number[] => {\n // Calculate sum of all votes\n const sum = values.reduce((memo, value) => memo + value, 0);\n\n // create array of hashes\n const results = values.map((value, idx) => ({\n idx,\n votes: value,\n percentage: Math.round((100 * value) / sum) || 0,\n }));\n\n // Sum them all up - this can be less, equal or greater than a 100%\n let total = results.reduce((memo, { percentage }) => memo + percentage, 0);\n\n total = total || 100;\n\n // Calculate number of percent that we are missing or that we need to lose\n let delta = 100 - total;\n const sign = delta >= 0 ? 1 : -1;\n\n // Order all options by number of votes\n results.sort((a, b) => {\n const result = sign * (b.votes - a.votes);\n\n if (result !== 0) {\n return result;\n }\n\n return sign * (a.idx - b.idx);\n });\n\n // If we have percents to lose then take one percent off lowest options\n // If we are missing percents then add one percent to highest options\n let i = 0;\n while (delta !== 0) {\n if (results[i].votes > 0) {\n results[i].percentage += sign;\n delta -= sign;\n }\n\n i++;\n }\n\n // Restore options order\n results.sort((a, b) => a.idx - b.idx);\n\n return results.map((item) => item.percentage);\n};\n","/**\n * @license\n * factory.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-03-24\n * Copyright © 2022 Monterosa. All rights reserved.\n *\n * More details on the license can be found at https://www.monterosa.co/sdk/license\n */\n\nimport {\n checkAvailability as checkStorageAvailability,\n getItem as getStorageItem,\n setItem as setStorageItem,\n memoizePromise,\n} from '@monterosa/sdk-util';\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\nimport { calculatePercentage } from '../../utils/calculate_percentage';\n\nexport const elements: Map<string, InteractElement> = new Map();\n\nconst storageAvailable = checkStorageAvailability();\n\nexport function buildElement(\n options: ElementOptions,\n context: ElementContext,\n): 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 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 (options.updated_at > element.updatedAt) {\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 = 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 element.correctOption = correctOption;\n\n element.context.event.emit('update', element);\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 (const snapshot of history.timeline) {\n if (!elements.has(snapshot.id)) {\n 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 function storeAnswer(\n element: InteractElement,\n userAnswer: Answer,\n): void {\n try {\n element.userAnswer = userAnswer;\n\n if (storageAvailable) {\n // Can throw a \"QuotaExceededError\" DOMException exception\n // if the quota has been exceeded.\n setStorageItem(`element_${element.id}_vote`, JSON.stringify(userAnswer));\n }\n } catch (err) {\n if (err instanceof Error) {\n console.warn(`Can't store user answer: ${err.message}`);\n }\n }\n}\n\nexport function restoreAnswer(element: InteractElement): void {\n if (storageAvailable) {\n const userAnswer = getStorageItem(`element_${element.id}_vote`);\n\n if (userAnswer !== null) {\n element.userAnswer = Answer.fromJSON(userAnswer);\n }\n }\n}\n","/**\n * @license\n * api.ts\n * interact-kit\n *\n * Created by Rygor Kharytanovich <rygor@monterosa.co.uk> on 2022-03-24\n * Copyright © 2022 Monterosa. 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 */\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 most recent event is first, and the oldest 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 */\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 * elements 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 * elements 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 * elements 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 * elements 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 * elements 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 {@link InteractElement.results | element results}\n * 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 {@link InteractElement.state | element state}\n * changed\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 {@link InteractElement.fields | element's data}\n * is updated\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 */\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 */\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"],"names":["getConnect","connectLogin","getEnmasse","subscribe","unsubscribe","EnmasseState","ConnectState","handleConnectMessage","checkStorageAvailability","initEvent","setStorageItem","getStorageItem"],"mappings":"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"}
|