botframework-webchat-core 4.17.0 → 4.17.1-main.20240508.bf8dbd9
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/dist/botframework-webchat-core.mjs +1 -1
- package/dist/botframework-webchat-core.mjs.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/lib/createReducer.d.ts +2 -2
- package/lib/index.js +2 -2
- package/lib/selectors/activities.d.ts.map +1 -1
- package/lib/types/external/OrgSchema/Action.d.ts +1 -1
- package/lib/types/external/OrgSchema/Action.d.ts.map +1 -1
- package/lib/types/external/OrgSchema/Claim.d.ts +1 -1
- package/lib/types/external/OrgSchema/Claim.d.ts.map +1 -1
- package/lib/types/external/OrgSchema/CreativeWork.d.ts +1 -1
- package/lib/types/external/OrgSchema/CreativeWork.d.ts.map +1 -1
- package/lib/types/external/OrgSchema/DefinedTerm.d.ts +1 -1
- package/lib/types/external/OrgSchema/DefinedTerm.d.ts.map +1 -1
- package/lib/types/external/OrgSchema/Project.d.ts +1 -1
- package/lib/types/external/OrgSchema/Project.d.ts.map +1 -1
- package/lib/types/external/OrgSchema/Thing.d.ts +1 -1
- package/lib/types/external/OrgSchema/Thing.d.ts.map +1 -1
- package/lib/types/external/OrgSchema/VoteAction.d.ts +1 -1
- package/lib/types/external/OrgSchema/VoteAction.d.ts.map +1 -1
- package/lib/types/external/OrgSchema/private/orgSchemaProperties.d.ts +1 -1
- package/lib/types/external/OrgSchema/private/orgSchemaProperties.d.ts.map +1 -1
- package/lib/types/external/OrgSchema/private/orgSchemaProperty.d.ts +1 -1
- package/lib/types/external/OrgSchema/private/orgSchemaProperty.d.ts.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/actions/clearSuggestedActions.js","../src/actions/connect.js","../src/actions/disconnect.js","../src/actions/dismissNotification.ts","../src/actions/emitTypingIndicator.js","../src/actions/markActivity.ts","../src/actions/postActivity.ts","../src/actions/sendEvent.js","../src/actions/sendFiles.ts","../src/actions/sendMessage.ts","../src/actions/sendMessageBack.js","../src/actions/sendPostBack.js","../src/actions/setDictateInterims.js","../src/actions/setDictateState.js","../src/actions/setLanguage.js","../src/utils/uniqueID.ts","../src/actions/setNotification.ts","../src/actions/setSendBox.js","../src/actions/setSendBoxAttachments.ts","../src/actions/setSendTimeout.js","../src/actions/setSendTypingIndicator.ts","../src/actions/startDictate.js","../src/actions/startSpeakingActivity.js","../src/actions/stopDictate.js","../src/actions/stopSpeakingActivity.js","../src/actions/submitSendBox.js","../src/constants/ActivityClientState.js","../src/constants/DictateState.js","../src/createStore.ts","../src/createReducer.ts","../src/actions/reconnect.js","../src/actions/sagaError.ts","../src/reducers/connectivityStatus.js","../src/reducers/createActivitiesReducer.ts","../src/actions/deleteActivity.ts","../src/actions/incomingActivity.ts","../src/types/internal/SendStatus.ts","../src/reducers/createInternalReducer.ts","../src/reducers/createNotificationsReducer.ts","../src/utils/isForbiddenPropertyName.ts","../src/reducers/createTypingReducer.ts","../src/reducers/dictateInterims.js","../src/reducers/dictateState.js","../src/reducers/language.js","../src/actions/connectionStatusUpdate.js","../src/reducers/readyState.js","../src/actions/setReferenceGrammarID.js","../src/reducers/referenceGrammarID.js","../src/reducers/sendBoxAttachments.ts","../src/reducers/sendBoxValue.js","../src/reducers/sendTimeout.js","../src/reducers/sendTypingIndicator.js","../src/reducers/shouldSpeakIncomingActivity.js","../src/actions/setSuggestedActions.js","../src/reducers/suggestedActions.js","../src/createSagas.ts","../src/sagas/clearSuggestedActionsOnPostActivitySaga.js","../src/sagas/effects/whileConnected.ts","../src/sagas/connectionStatusToNotificationSaga.js","../src/createPromiseQueue.js","../src/sagas/connectionStatusUpdateSaga.js","../src/sagas/effects/observeEach.js","../src/sagas/connectSaga.js","../src/sagas/effects/forkPut.js","../src/actions/updateConnectionStatus.js","../src/sagas/detectSlowConnectionSaga.ts","../src/utils/sleep.ts","../src/sagas/emitTypingIndicatorToPostActivitySaga.js","../src/sagas/markAllAsSpokenOnStopSpeakActivitySaga.js","../src/selectors/activities.ts","../src/definitions/speakingActivity.js","../src/sagas/observeActivitySaga.ts","../src/actions/queueIncomingActivity.js","../src/sagas/postActivitySaga.ts","../src/utils/dateToLocaleISOString.ts","../src/utils/deleteKey.ts","../src/selectors/language.ts","../src/sagas/effects/observeOnce.ts","../src/selectors/sendTimeout.ts","../src/sagas/queueIncomingActivitySaga.ts","../src/definitions/activityFromBot.js","../src/sagas/sendEventToPostActivitySaga.js","../src/sagas/sendFilesToPostActivitySaga.js","../src/sagas/sendMessageBackToPostActivitySaga.js","../src/sagas/sendMessageToPostActivitySaga.ts","../src/sagas/sendPostBackToPostActivitySaga.js","../src/sagas/sendTypingIndicatorOnSetSendBoxSaga.ts","../src/selectors/sendTypingIndicator.ts","../src/sagas/speakActivityAndStartDictateOnIncomingActivityFromOthersSaga.js","../src/selectors/shouldSpeakIncomingActivity.ts","../src/definitions/speakableActivity.js","../src/sagas/startDictateOnSpeakCompleteSaga.js","../src/selectors/dictateState.ts","../src/sagas/startSpeakActivityOnPostActivitySaga.js","../src/sagas/stopDictateOnCardActionSaga.js","../src/sagas/stopSpeakingActivityOnInputSaga.js","../src/sagas/submitSendBoxSaga.js","../src/selectors/sendBoxAttachments.ts","../src/selectors/sendBoxValue.ts","../src/types/external/OrgSchema/Action.ts","../src/types/external/OrgSchema/private/orgSchemaProperty.ts","../src/types/external/OrgSchema/Project.ts","../src/types/external/OrgSchema/Thing.ts","../src/types/external/OrgSchema/private/orgSchemaProperties.ts","../src/types/external/OrgSchema/Claim.ts","../src/types/external/OrgSchema/CreativeWork.ts","../src/types/external/OrgSchema/DefinedTerm.ts","../src/types/external/OrgSchema/VoteAction.ts","../src/utils/getOrgSchemaMessage.ts","../src/utils/onErrorResumeNext.ts","../src/utils/singleToArray.ts","../src/utils/once.ts","../src/utils/warnOnce.ts","../src/index.ts"],"sourcesContent":["const CLEAR_SUGGESTED_ACTIONS = 'WEB_CHAT/CLEAR_SUGGESTED_ACTIONS';\n\nexport default function clearSuggestedActions() {\n return {\n type: CLEAR_SUGGESTED_ACTIONS\n };\n}\n\nexport { CLEAR_SUGGESTED_ACTIONS };\n","const CONNECT = 'DIRECT_LINE/CONNECT';\nconst CONNECT_FULFILLED = `${CONNECT}_FULFILLED`;\nconst CONNECT_FULFILLING = `${CONNECT}_FULFILLING`;\nconst CONNECT_PENDING = `${CONNECT}_PENDING`;\nconst CONNECT_REJECTED = `${CONNECT}_REJECTED`;\nconst CONNECT_STILL_PENDING = `${CONNECT}_STILL_PENDING`;\n\nexport default function connect({ directLine, userID, username }) {\n return {\n type: CONNECT,\n payload: {\n directLine,\n userID,\n username\n }\n };\n}\n\nexport { CONNECT, CONNECT_FULFILLED, CONNECT_FULFILLING, CONNECT_PENDING, CONNECT_REJECTED, CONNECT_STILL_PENDING };\n","const DISCONNECT = 'DIRECT_LINE/DISCONNECT';\nconst DISCONNECT_PENDING = `${DISCONNECT}_PENDING`;\nconst DISCONNECT_REJECTED = `${DISCONNECT}_REJECTED`;\nconst DISCONNECT_FULFILLED = `${DISCONNECT}_FULFILLED`;\n\nexport default function disconnect() {\n return {\n type: DISCONNECT\n };\n}\n\nexport { DISCONNECT, DISCONNECT_PENDING, DISCONNECT_REJECTED, DISCONNECT_FULFILLED };\n","const DISMISS_NOTIFICATION = 'WEB_CHAT/DISMISS_NOTIFICATION';\n\ntype DismissNotificationAction = {\n payload: { id: string };\n type: typeof DISMISS_NOTIFICATION;\n};\n\nfunction dismissNotification(id: string): DismissNotificationAction {\n return {\n payload: { id },\n type: DISMISS_NOTIFICATION\n };\n}\n\nexport default dismissNotification;\n\nexport { DISMISS_NOTIFICATION };\n\nexport type { DismissNotificationAction };\n","const EMIT_TYPING_INDICATOR = 'WEB_CHAT/EMIT_TYPING_INDICATOR';\n\nexport default function emitTypingIndicator() {\n return {\n type: EMIT_TYPING_INDICATOR\n };\n}\n\nexport { EMIT_TYPING_INDICATOR };\n","type MarkActivityActionType = 'WEB_CHAT/MARK_ACTIVITY';\n\ntype MarkActivityAction = {\n payload: { activityID: string; name: string; value: any };\n type: MarkActivityActionType;\n};\n\nconst MARK_ACTIVITY: MarkActivityActionType = 'WEB_CHAT/MARK_ACTIVITY';\n\nfunction markActivity({ id: activityID }: { id: string }, name: string, value: any): MarkActivityAction {\n return {\n type: MARK_ACTIVITY,\n payload: {\n activityID,\n name,\n value\n }\n };\n}\n\nexport default markActivity;\nexport { MARK_ACTIVITY };\nexport type { MarkActivityAction };\n","import type { WebChatActivity } from '../types/WebChatActivity';\n\ntype PostActivityActionType = 'DIRECT_LINE/POST_ACTIVITY';\ntype PostActivityFulfilledActionType = 'DIRECT_LINE/POST_ACTIVITY_FULFILLED';\ntype PostActivityImpededActionType = 'DIRECT_LINE/POST_ACTIVITY_IMPEDED';\ntype PostActivityPendingActionType = 'DIRECT_LINE/POST_ACTIVITY_PENDING';\ntype PostActivityRejectedActionType = 'DIRECT_LINE/POST_ACTIVITY_REJECTED';\n\ntype PostActivityAction = {\n meta: { method: string };\n payload: { activity: WebChatActivity };\n type: PostActivityActionType;\n};\n\ntype PostActivityFulfilledAction = {\n meta: { clientActivityID: string; method: string };\n payload: { activity: WebChatActivity };\n type: PostActivityFulfilledActionType;\n};\n\ntype PostActivityImpededAction = {\n meta: { clientActivityID: string; method: string };\n payload: { activity: WebChatActivity };\n type: PostActivityImpededActionType;\n};\n\ntype PostActivityPendingAction = {\n meta: { clientActivityID: string; method: string };\n payload: { activity: WebChatActivity };\n type: PostActivityPendingActionType;\n};\n\ntype PostActivityRejectedAction = {\n error: true;\n meta: { clientActivityID: string; method: string };\n payload: Error;\n type: PostActivityRejectedActionType;\n};\n\nconst POST_ACTIVITY: PostActivityActionType = 'DIRECT_LINE/POST_ACTIVITY';\nconst POST_ACTIVITY_FULFILLED: PostActivityFulfilledActionType = `${POST_ACTIVITY}_FULFILLED`;\nconst POST_ACTIVITY_IMPEDED: PostActivityImpededActionType = `${POST_ACTIVITY}_IMPEDED`;\nconst POST_ACTIVITY_PENDING: PostActivityPendingActionType = `${POST_ACTIVITY}_PENDING`;\nconst POST_ACTIVITY_REJECTED: PostActivityRejectedActionType = `${POST_ACTIVITY}_REJECTED`;\n\nfunction postActivity(activity: WebChatActivity, method = 'keyboard'): PostActivityAction {\n return {\n type: POST_ACTIVITY,\n meta: { method },\n payload: { activity }\n };\n}\n\nexport default postActivity;\nexport { POST_ACTIVITY, POST_ACTIVITY_FULFILLED, POST_ACTIVITY_IMPEDED, POST_ACTIVITY_PENDING, POST_ACTIVITY_REJECTED };\nexport type {\n PostActivityAction,\n PostActivityFulfilledAction,\n PostActivityImpededAction,\n PostActivityPendingAction,\n PostActivityRejectedAction\n};\n","const SEND_EVENT = 'WEB_CHAT/SEND_EVENT';\n\nexport default function sendEvent(name, value) {\n return {\n type: SEND_EVENT,\n payload: { name, value }\n };\n}\n\nexport { SEND_EVENT };\n","const SEND_FILES = 'WEB_CHAT/SEND_FILES';\n\n// TODO: [P1] We could obsolete this or dispatch { type: SEND_MESSAGE } insetad.\nexport default function sendFiles(\n files: readonly Readonly<{\n name: string;\n size: number;\n url: string;\n thumbnail?: string;\n }>[]\n) {\n return {\n type: SEND_FILES,\n payload: { files }\n };\n}\n\nexport { SEND_FILES };\n","import { type SendBoxAttachment } from '../types/SendBoxAttachment';\n\nconst SEND_MESSAGE = 'WEB_CHAT/SEND_MESSAGE';\n\nexport default function sendMessage(\n text: string | undefined,\n method: string | undefined,\n { attachments, channelData }: { attachments?: readonly SendBoxAttachment[]; channelData?: any } = {}\n) {\n return {\n type: SEND_MESSAGE,\n payload: { attachments, channelData, method, text }\n };\n}\n\nexport { SEND_MESSAGE };\n","const SEND_MESSAGE_BACK = 'WEB_CHAT/SEND_MESSAGE_BACK';\n\nexport default function sendMessageback(value, text, displayText) {\n return {\n type: SEND_MESSAGE_BACK,\n payload: { displayText, text, value }\n };\n}\n\nexport { SEND_MESSAGE_BACK };\n","const SEND_POST_BACK = 'WEB_CHAT/SEND_POST_BACK';\n\nexport default function sendPostback(value) {\n return {\n type: SEND_POST_BACK,\n payload: { value }\n };\n}\n\nexport { SEND_POST_BACK };\n","const SET_DICTATE_INTERIMS = 'WEB_CHAT/SET_DICTATE_INTERIMS';\n\nexport default function setDictateInterims(dictateInterims) {\n return {\n type: SET_DICTATE_INTERIMS,\n payload: { dictateInterims }\n };\n}\n\nexport { SET_DICTATE_INTERIMS };\n","const SET_DICTATE_STATE = 'WEB_CHAT/SET_DICTATE_STATE';\n\nexport default function setDictateState(dictateState) {\n return {\n type: SET_DICTATE_STATE,\n payload: { dictateState }\n };\n}\n\nexport { SET_DICTATE_STATE };\n","const SET_LANGUAGE = 'WEB_CHAT/SET_LANGUAGE';\n\nexport default function setLanguage(language) {\n return {\n type: SET_LANGUAGE,\n payload: { language }\n };\n}\n\nexport { SET_LANGUAGE };\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2, 36] }] */\n\nimport random from 'math-random';\n\nexport default function uniqueID(): string {\n return random().toString(36).substring(2);\n}\n","import uniqueID from '../utils/uniqueID';\n\nimport type { Notification } from '../types/internal/Notification';\n\nconst SET_NOTIFICATION = 'WEB_CHAT/SET_NOTIFICATION';\n\ntype SetNotificationAction = {\n payload: Omit<Notification, 'timestamp'>;\n type: typeof SET_NOTIFICATION;\n};\n\nexport default function setNotification({\n alt,\n data,\n id,\n level,\n message\n}: Omit<Notification, 'timestamp'>): SetNotificationAction {\n if (!id || typeof id !== 'string') {\n console.warn(\n 'botframework-webchat: The \"id\" argument passed to \"setNotification\" must be a string; defaulting to a random value.'\n );\n\n id = uniqueID();\n }\n\n if (!level || typeof level !== 'string') {\n console.warn(\n 'botframework-webchat: The \"level\" argument passed to \"setNotification\" must be a string; defaulting to \"info\".'\n );\n\n level = 'info';\n }\n\n return {\n type: SET_NOTIFICATION,\n payload: { alt, data, id, level, message }\n };\n}\n\nexport { SET_NOTIFICATION };\n\nexport type { SetNotificationAction };\n","const SET_SEND_BOX = 'WEB_CHAT/SET_SEND_BOX';\n\nexport default function setSendBox(text) {\n return {\n type: SET_SEND_BOX,\n payload: { text }\n };\n}\n\nexport { SET_SEND_BOX };\n","import type { SendBoxAttachment } from '../types/SendBoxAttachment';\n\nconst SET_SEND_BOX_ATTACHMENTS = 'WEB_CHAT/SET_SEND_BOX_ATTACHMENTS';\n\nexport default function setSendBoxAttachments(attachments: readonly SendBoxAttachment[]) {\n return {\n type: SET_SEND_BOX_ATTACHMENTS,\n payload: { attachments }\n };\n}\n\nexport { SET_SEND_BOX_ATTACHMENTS };\n","const SET_SEND_TIMEOUT = 'WEB_CHAT/SET_SEND_TIMEOUT';\n\nexport default function setSendTimeout(sendTimeout) {\n return {\n type: SET_SEND_TIMEOUT,\n payload: { sendTimeout }\n };\n}\n\nexport { SET_SEND_TIMEOUT };\n","const SET_SEND_TYPING_INDICATOR = 'WEB_CHAT/SET_SEND_TYPING_INDICATOR';\n\ntype SetSendTypingIndicatorAction = {\n payload: { sendTypingIndicator: boolean };\n type: typeof SET_SEND_TYPING_INDICATOR;\n};\n\nexport default function setSendTypingIndicator(value): SetSendTypingIndicatorAction {\n return {\n payload: { sendTypingIndicator: !!value },\n type: SET_SEND_TYPING_INDICATOR\n };\n}\n\nexport { SET_SEND_TYPING_INDICATOR };\n\nexport type { SetSendTypingIndicatorAction };\n","const START_DICTATE = 'WEB_CHAT/START_DICTATE';\n\nexport default function startDictate() {\n return { type: START_DICTATE };\n}\n\nexport { START_DICTATE };\n","const START_SPEAKING_ACTIVITY = 'WEB_CHAT/START_SPEAKING';\n\nexport default function startSpeakingActivity() {\n return {\n type: START_SPEAKING_ACTIVITY\n };\n}\n\nexport { START_SPEAKING_ACTIVITY };\n","const STOP_DICTATE = 'WEB_CHAT/STOP_DICTATE';\n\nexport default function stopDictate() {\n return { type: STOP_DICTATE };\n}\n\nexport { STOP_DICTATE };\n","const STOP_SPEAKING_ACTIVITY = 'WEB_CHAT/STOP_SPEAKING';\n\nexport default function stopSpeakingActivity() {\n return {\n type: STOP_SPEAKING_ACTIVITY\n };\n}\n\nexport { STOP_SPEAKING_ACTIVITY };\n","const SUBMIT_SEND_BOX = 'WEB_CHAT/SUBMIT_SEND_BOX';\n\nexport default function submitSendBox(method = 'keyboard', { channelData } = {}) {\n return {\n type: SUBMIT_SEND_BOX,\n payload: { channelData, method }\n };\n}\n\nexport { SUBMIT_SEND_BOX };\n","/** @deprecated This constant is being deprecated, please use string literal instead. Will be remove on or after 2024-07-31. */\nconst SEND_FAILED = 'send failed';\n/** @deprecated This constant is being deprecated, please use string literal instead. Will be remove on or after 2024-07-31. */\nconst SENDING = 'sending';\n/** @deprecated This constant is being deprecated, please use string literal instead. Will be remove on or after 2024-07-31. */\nconst SENT = 'sent';\n\nexport { SEND_FAILED, SENDING, SENT };\n","const IDLE = 0;\nconst WILL_START = 1;\nconst STARTING = 2;\nconst DICTATING = 3;\nconst STOPPING = 4;\n\nexport { DICTATING, IDLE, STARTING, STOPPING, WILL_START };\n","import { applyMiddleware, createStore as createReduxStore, type Store } from 'redux';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport createSagaMiddleware from 'redux-saga';\n\nimport createReducer from './createReducer';\nimport createSagas from './createSagas';\nimport sagaError from './actions/sagaError';\n\nimport type { GlobalScopePonyfill } from './types/GlobalScopePonyfill';\n\ntype CreateStoreOptions = {\n /**\n * True, to enable Redux development tools, otherwise, false.\n *\n * Because Web Chat use sagas for business logics, some store state are keep at JavaScript heaps.\n * Time-travelling and saving/restoring store state are not supported.\n */\n devTools?: boolean;\n\n /**\n * Ponyfill to overrides specific global scope members.\n *\n * This option is for development use only. Not all features in Web Chat are ponyfilled.\n *\n * To fake timers, `setTimeout` and related functions can be passed to overrides the original global scope members.\n *\n * Please see [#4662](https://github.com/microsoft/BotFramework-WebChat/pull/4662) for details.\n */\n ponyfill?: Partial<GlobalScopePonyfill>;\n};\n\nfunction createEnhancerAndSagaMiddleware(getStore, ...middlewares) {\n const sagaMiddleware = createSagaMiddleware({\n onError: (...args) => {\n const [err] = args;\n\n console.error(err);\n\n const store = getStore();\n\n store && store.dispatch(sagaError());\n }\n });\n\n return {\n enhancer: applyMiddleware(...middlewares, sagaMiddleware),\n sagaMiddleware\n };\n}\n\n/**\n * Creates a Redux store internally used by Web Chat.\n *\n * This store is critical for Web Chat business logics to operate, please use with cautions.\n */\n\n// The complexity is introduced by the check of ponyfill.\n// eslint-disable-next-line complexity\nexport function withOptions(options: CreateStoreOptions, initialState?, ...middlewares): Store {\n // IE Mode does not have `globalThis`.\n const globalThisOrWindow = typeof globalThis === 'undefined' ? window : globalThis;\n const ponyfillFromOptions: Partial<GlobalScopePonyfill> = options.ponyfill || {};\n\n // TODO: [P2] Dedupe: when we have an utility package, move this code there and mark it as internal use.\n const ponyfill: GlobalScopePonyfill = {\n cancelAnimationFrame:\n ponyfillFromOptions.cancelAnimationFrame ||\n // Using clock functions from global if not provided.\n // eslint-disable-next-line no-restricted-globals\n (typeof cancelAnimationFrame === 'function' ? cancelAnimationFrame.bind(globalThisOrWindow) : undefined),\n cancelIdleCallback:\n ponyfillFromOptions.cancelIdleCallback ||\n // eslint-disable-next-line no-restricted-globals\n (typeof cancelIdleCallback === 'function' ? cancelIdleCallback.bind(globalThisOrWindow) : undefined),\n clearImmediate:\n ponyfillFromOptions.clearImmediate ||\n // eslint-disable-next-line no-restricted-globals\n (typeof clearImmediate === 'function' ? clearImmediate.bind(globalThisOrWindow) : undefined),\n clearInterval:\n ponyfillFromOptions.clearInterval ||\n // eslint-disable-next-line no-restricted-globals\n (typeof clearInterval === 'function' ? clearInterval.bind(globalThisOrWindow) : undefined),\n clearTimeout:\n ponyfillFromOptions.clearTimeout ||\n // eslint-disable-next-line no-restricted-globals\n (typeof clearTimeout === 'function' ? clearTimeout.bind(globalThisOrWindow) : undefined),\n // eslint-disable-next-line no-restricted-globals\n Date: ponyfillFromOptions.Date || Date,\n requestAnimationFrame:\n ponyfillFromOptions.requestAnimationFrame ||\n // eslint-disable-next-line no-restricted-globals\n (typeof requestAnimationFrame === 'function' ? requestAnimationFrame.bind(globalThisOrWindow) : undefined),\n requestIdleCallback:\n ponyfillFromOptions.requestIdleCallback ||\n // eslint-disable-next-line no-restricted-globals\n (typeof requestIdleCallback === 'function' ? requestIdleCallback.bind(globalThisOrWindow) : undefined),\n setImmediate:\n ponyfillFromOptions.setImmediate ||\n // eslint-disable-next-line no-restricted-globals\n (typeof setImmediate === 'function' ? setImmediate.bind(globalThisOrWindow) : undefined),\n setInterval:\n ponyfillFromOptions.setInterval ||\n // eslint-disable-next-line no-restricted-globals\n (typeof setInterval === 'function' ? setInterval.bind(globalThisOrWindow) : undefined),\n setTimeout:\n ponyfillFromOptions.setTimeout ||\n // eslint-disable-next-line no-restricted-globals\n (typeof setTimeout === 'function' ? setTimeout.bind(globalThisOrWindow) : undefined)\n };\n\n // We are sure the \"getStore\" (first argument) is not called on \"createEnhancerAndSagaMiddleware()\".\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const { enhancer, sagaMiddleware } = createEnhancerAndSagaMiddleware(() => store, ...middlewares);\n const store = createReduxStore(\n createReducer(ponyfill),\n initialState || {},\n options.devTools ? composeWithDevTools(enhancer) : enhancer\n );\n\n sagaMiddleware.run(createSagas({ ponyfill }));\n\n return store;\n}\n\n/**\n * Creates a Redux store internally used by Web Chat.\n *\n * This store is critical for Web Chat business logics to operate, please use with cautions.\n */\nexport default function createStore(initialState?, ...middlewares): Store {\n return withOptions({}, initialState, ...middlewares);\n}\n\n/**\n * Creates a Redux store internally used by Web Chat, with Redux development tools.\n *\n * This store is critical for Web Chat business logics to operate, please use with cautions.\n *\n * @deprecated Use `withOptions` instead and pass `{ devTools: true }`\n */\nexport function withDevTools(initialState?, ...middlewares): Store {\n return withOptions({ devTools: true }, initialState, ...middlewares);\n}\n","import { combineReducers } from 'redux';\n\nimport connectivityStatus from './reducers/connectivityStatus';\nimport createActivitiesReducer from './reducers/createActivitiesReducer';\nimport createInternalReducer from './reducers/createInternalReducer';\nimport createNotificationsReducer from './reducers/createNotificationsReducer';\nimport createTypingReducer from './reducers/createTypingReducer';\nimport dictateInterims from './reducers/dictateInterims';\nimport dictateState from './reducers/dictateState';\nimport language from './reducers/language';\nimport readyState from './reducers/readyState';\nimport referenceGrammarID from './reducers/referenceGrammarID';\nimport sendBoxAttachments from './reducers/sendBoxAttachments';\nimport sendBoxValue from './reducers/sendBoxValue';\nimport sendTimeout from './reducers/sendTimeout';\nimport sendTypingIndicator from './reducers/sendTypingIndicator';\nimport shouldSpeakIncomingActivity from './reducers/shouldSpeakIncomingActivity';\nimport suggestedActions from './reducers/suggestedActions';\n\nimport type { GlobalScopePonyfill } from './types/GlobalScopePonyfill';\n\nexport default function createReducer(ponyfill: GlobalScopePonyfill) {\n return combineReducers({\n activities: createActivitiesReducer(ponyfill),\n connectivityStatus,\n dictateInterims,\n dictateState,\n internal: createInternalReducer(ponyfill),\n language,\n notifications: createNotificationsReducer(ponyfill),\n readyState,\n referenceGrammarID,\n sendBoxAttachments,\n sendBoxValue,\n sendTimeout,\n sendTypingIndicator,\n shouldSpeakIncomingActivity,\n suggestedActions,\n typing: createTypingReducer(ponyfill)\n });\n}\n","const RECONNECT = 'DIRECT_LINE/RECONNECT';\nconst RECONNECT_FULFILLED = `${RECONNECT}_FULFILLED`;\nconst RECONNECT_FULFILLING = `${RECONNECT}_FULFILLING`;\nconst RECONNECT_PENDING = `${RECONNECT}_PENDING`;\nconst RECONNECT_REJECTED = `${RECONNECT}_REJECTED`;\n\nexport { RECONNECT, RECONNECT_FULFILLED, RECONNECT_FULFILLING, RECONNECT_PENDING, RECONNECT_REJECTED };\n","const SAGA_ERROR = 'WEB_CHAT/SAGA_ERROR';\n\ntype SagaErrorAction = {\n type: typeof SAGA_ERROR;\n};\n\nexport default function sagaError(): SagaErrorAction {\n return { type: SAGA_ERROR };\n}\n\nexport { SAGA_ERROR };\n\nexport type { SagaErrorAction };\n","import { CONNECT_FULFILLED, CONNECT_PENDING, CONNECT_REJECTED, CONNECT_STILL_PENDING } from '../actions/connect';\n\nimport { RECONNECT_PENDING, RECONNECT_FULFILLED } from '../actions/reconnect';\n\nimport { DISCONNECT_FULFILLED } from '../actions/disconnect';\nimport { SAGA_ERROR } from '../actions/sagaError';\n\nconst DEFAULT_STATE = 'uninitialized';\n\nexport default function connectivityStatus(state = DEFAULT_STATE, { type, meta }) {\n if (state !== 'sagaerror') {\n switch (type) {\n case CONNECT_PENDING:\n case RECONNECT_PENDING:\n if (state !== 'uninitialized') {\n state = 'reconnecting';\n }\n\n break;\n\n case CONNECT_FULFILLED:\n state = 'connected';\n break;\n\n case RECONNECT_FULFILLED:\n state = 'reconnected';\n break;\n\n case CONNECT_REJECTED:\n state = 'error';\n break;\n\n case CONNECT_STILL_PENDING:\n state = 'connectingslow';\n break;\n\n case DISCONNECT_FULFILLED:\n state = meta && meta.error ? 'error' : 'notconnected';\n break;\n\n case SAGA_ERROR:\n state = 'sagaerror';\n break;\n\n default:\n break;\n }\n }\n\n return state;\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, -1] }] */\n\nimport updateIn from 'simple-update-in';\n\nimport { DELETE_ACTIVITY } from '../actions/deleteActivity';\nimport { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport { MARK_ACTIVITY } from '../actions/markActivity';\nimport {\n POST_ACTIVITY_FULFILLED,\n POST_ACTIVITY_IMPEDED,\n POST_ACTIVITY_PENDING,\n POST_ACTIVITY_REJECTED\n} from '../actions/postActivity';\nimport { SEND_FAILED, SENDING, SENT } from '../types/internal/SendStatus';\n\nimport type { DeleteActivityAction } from '../actions/deleteActivity';\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type { IncomingActivityAction } from '../actions/incomingActivity';\nimport type { MarkActivityAction } from '../actions/markActivity';\nimport type {\n PostActivityFulfilledAction,\n PostActivityImpededAction,\n PostActivityPendingAction,\n PostActivityRejectedAction\n} from '../actions/postActivity';\nimport type { Reducer } from 'redux';\nimport type { WebChatActivity } from '../types/WebChatActivity';\n\ntype ActivitiesAction =\n | DeleteActivityAction\n | IncomingActivityAction\n | MarkActivityAction\n | PostActivityFulfilledAction\n | PostActivityImpededAction\n | PostActivityPendingAction\n | PostActivityRejectedAction;\n\ntype ActivitiesState = WebChatActivity[];\n\nconst DEFAULT_STATE: ActivitiesState = [];\nconst DIRECT_LINE_PLACEHOLDER_URL =\n 'https://docs.botframework.com/static/devportal/client/images/bot-framework-default-placeholder.png';\n\nfunction getClientActivityID(activity: WebChatActivity): string | undefined {\n return activity.channelData?.clientActivityID;\n}\n\nfunction findByClientActivityID(clientActivityID: string): (activity: WebChatActivity) => boolean {\n return (activity: WebChatActivity) => getClientActivityID(activity) === clientActivityID;\n}\n\nfunction patchActivity(\n activity: WebChatActivity,\n lastActivity: WebChatActivity,\n { Date }: GlobalScopePonyfill\n): WebChatActivity {\n // Direct Line channel will return a placeholder image for the user-uploaded image.\n // As observed, the URL for the placeholder image is https://docs.botframework.com/static/devportal/client/images/bot-framework-default-placeholder.png.\n // To make our code simpler, we are removing the value if \"contentUrl\" is pointing to a placeholder image.\n\n // TODO: [P2] #2869 This \"contentURL\" removal code should be moved to DirectLineJS adapter.\n\n // Also, if the \"contentURL\" starts with \"blob:\", this means the user is uploading a file (the URL is constructed by URL.createObjectURL)\n // Although the copy/reference of the file is temporary in-memory, to make the UX consistent across page refresh, we do not allow the user to re-download the file either.\n\n activity = updateIn(activity, ['attachments', () => true, 'contentUrl'], (contentUrl: string) => {\n if (contentUrl !== DIRECT_LINE_PLACEHOLDER_URL && !/^blob:/iu.test(contentUrl)) {\n return contentUrl;\n }\n });\n\n // If the message does not have sequence ID, use these fallback values:\n // 1. \"timestamp\" field\n // - outgoing activity will not have \"timestamp\" field\n // 2. last activity sequence ID (or 0) + 0.001\n // - best effort to put this message the last one in the chat history\n activity = updateIn(activity, ['channelData', 'webchat:sequence-id'], (sequenceId?: number) =>\n typeof sequenceId === 'number'\n ? sequenceId\n : typeof activity.timestamp !== 'undefined'\n ? +new Date(activity.timestamp)\n : // We assume there will be no more than 1,000 messages sent before receiving server response.\n // If there are more than 1,000 messages, some messages will get reordered and appear jumpy after receiving server response.\n // eslint-disable-next-line no-magic-numbers\n (lastActivity?.channelData?.['webchat:sequence-id'] || 0) + 0.001\n );\n\n // TODO: [P1] #3953 We should move this patching logic to a DLJS wrapper for simplicity.\n activity = updateIn(activity, ['channelData', 'webchat:sequence-id'], (sequenceId: number) =>\n typeof sequenceId === 'number' ? sequenceId : +new Date(activity.timestamp || 0) || 0\n );\n\n return activity;\n}\n\nfunction upsertActivityWithSort(\n activities: WebChatActivity[],\n nextActivity: WebChatActivity,\n ponyfill: GlobalScopePonyfill\n): WebChatActivity[] {\n nextActivity = patchActivity(nextActivity, activities[activities.length - 1], ponyfill);\n\n const { channelData: { clientActivityID: nextClientActivityID, 'webchat:sequence-id': nextSequenceId } = {} } =\n nextActivity;\n\n const nextActivities = activities.filter(\n ({ channelData: { clientActivityID } = {}, id }) =>\n // We will remove all \"sending messages\" activities and activities with same ID\n // \"clientActivityID\" is unique and used to track if the message has been sent and echoed back from the server\n !(nextClientActivityID && clientActivityID === nextClientActivityID) && !(id && id === nextActivity.id)\n );\n\n // Then, find the right (sorted) place to insert the new activity at, based on sequence ID.\n const indexToInsert = nextActivities.findIndex(\n ({ channelData: { 'webchat:sequence-id': sequenceId } = {} }) => (sequenceId || 0) > (nextSequenceId || 0)\n );\n\n // If no right place are found, append it\n nextActivities.splice(~indexToInsert ? indexToInsert : nextActivities.length, 0, nextActivity);\n\n return nextActivities;\n}\n\nexport default function createActivitiesReducer(\n ponyfill: GlobalScopePonyfill\n): Reducer<ActivitiesState, ActivitiesAction> {\n return function activities(state: ActivitiesState = DEFAULT_STATE, action: ActivitiesAction): ActivitiesState {\n switch (action.type) {\n case DELETE_ACTIVITY:\n state = updateIn(state, [({ id }: WebChatActivity) => id === action.payload.activityID]);\n break;\n\n case MARK_ACTIVITY:\n {\n const { payload } = action;\n\n state = updateIn(\n state,\n [({ id }: WebChatActivity) => id === payload.activityID, 'channelData', payload.name],\n () => payload.value\n );\n }\n\n break;\n\n case POST_ACTIVITY_PENDING:\n {\n let {\n payload: { activity }\n } = action;\n\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n activity = updateIn(activity, ['channelData', 'state'], () => SENDING);\n activity = updateIn(activity, ['channelData', 'webchat:send-status'], () => SENDING);\n\n state = upsertActivityWithSort(state, activity, ponyfill);\n }\n\n break;\n\n case POST_ACTIVITY_IMPEDED:\n state = updateIn(\n state,\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n [findByClientActivityID(action.meta.clientActivityID), 'channelData', 'state'],\n () => SEND_FAILED\n );\n\n break;\n\n case POST_ACTIVITY_REJECTED:\n state = updateIn(state, [findByClientActivityID(action.meta.clientActivityID)], activity => {\n activity = updateIn(activity, ['channelData', 'state'], () => SEND_FAILED);\n\n return updateIn(activity, ['channelData', 'webchat:send-status'], () => SEND_FAILED);\n });\n\n break;\n\n case POST_ACTIVITY_FULFILLED:\n state = updateIn(state, [findByClientActivityID(action.meta.clientActivityID)], () => {\n // We will replace the activity with the version from the server\n const activity = updateIn(\n patchActivity(action.payload.activity, state[state.length - 1], ponyfill),\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n ['channelData', 'state'],\n () => SENT\n );\n\n return updateIn(activity, ['channelData', 'webchat:send-status'], () => SENT);\n });\n\n break;\n\n case INCOMING_ACTIVITY:\n {\n let {\n payload: { activity }\n } = action;\n\n // If the incoming activity is an echo back, we should keep the existing `channelData['webchat:send-status']` field.\n //\n // Otherwise, it will fail following scenario:\n //\n // 1. Send an activity to the service\n // 2. Service echoed back the activity\n // 3. Service did NOT return `postActivity` call\n // - EXPECT: `channelData['webchat:send-status']` should be \"sending\".\n // - ACTUAL: `channelData['webchat:send-status']` is `undefined` because the activity get overwritten by the echo back activity.\n // The echo back activity contains no `channelData['webchat:send-status']`.\n //\n // While we are looking out for the scenario above, we should also look at the following scenarios:\n //\n // 1. Service restore chat history, including activities sent from the user. These activities has the following characteristics:\n // - They do not have `channelData['webchat:send-status']`;\n // - They do not have an ongoing `postActivitySaga`;\n // - They should not previously appear in the chat history.\n // 2. We need to mark these activities as \"sent\".\n //\n // In the future, when we revamp our object model, we could use a different signal so we don't need the code below, for example:\n //\n // - If `activity.id` is set, it is \"sent\", because the chat service assigned an ID to the activity;\n // - If `activity.id` is not set, it is either \"sending\" or \"send failed\";\n // - If `activity.channelData['webchat:send-failed-reason']` is set, it is \"send failed\" with the reason, otherwise;\n // - It is sending.\n if (activity.from.role === 'user') {\n const { id } = activity;\n const clientActivityID = getClientActivityID(activity);\n\n const existingActivity = state.find(\n activity =>\n (clientActivityID && getClientActivityID(activity) === clientActivityID) || (id && activity.id === id)\n );\n\n if (existingActivity) {\n const {\n channelData: { 'webchat:send-status': sendStatus }\n } = existingActivity;\n\n if (sendStatus === SENDING || sendStatus === SEND_FAILED || sendStatus === SENT) {\n activity = updateIn(activity, ['channelData', 'webchat:send-status'], () => sendStatus);\n }\n } else {\n // If there are no existing activity, probably this activity is restored from chat history.\n // All outgoing activities restored from service means they arrived at the service successfully.\n // Thus, we are marking them as \"sent\".\n activity = updateIn(activity, ['channelData', 'webchat:send-status'], () => SENT);\n }\n }\n\n state = upsertActivityWithSort(state, activity, ponyfill);\n }\n\n break;\n\n default:\n break;\n }\n\n return state;\n };\n}\n","type DeleteActivityActionType = 'DIRECT_LINE/DELETE_ACTIVITY';\n\ntype DeleteActivityAction = {\n payload: { activityID: string };\n type: DeleteActivityActionType;\n};\n\nconst DELETE_ACTIVITY: DeleteActivityActionType = 'DIRECT_LINE/DELETE_ACTIVITY';\n\nfunction deleteActivity(activityID: string): DeleteActivityAction {\n return {\n type: DELETE_ACTIVITY,\n payload: { activityID }\n };\n}\n\nexport default deleteActivity;\nexport { DELETE_ACTIVITY };\nexport type { DeleteActivityAction };\n","import type { WebChatActivity } from '../types/WebChatActivity';\n\ntype IncomingActivityActionType = 'DIRECT_LINE/INCOMING_ACTIVITY';\n\ntype IncomingActivityAction = {\n payload: { activity: WebChatActivity };\n type: IncomingActivityActionType;\n};\n\nconst INCOMING_ACTIVITY: IncomingActivityActionType = 'DIRECT_LINE/INCOMING_ACTIVITY';\n\nfunction incomingActivity(activity: WebChatActivity): IncomingActivityAction {\n return {\n type: INCOMING_ACTIVITY,\n payload: { activity }\n };\n}\n\nexport default incomingActivity;\nexport { INCOMING_ACTIVITY };\nexport type { IncomingActivityAction };\n","// This type is only for this package only and help reducing size of the bundle.\n// Externals should use the string literal directly instead.\n\n// TODO: [P3] #4040 When improve treeshaking with named exports, we could export internals from `core` package.\n// import { SENDING, SEND_FAILED, SENT } from 'botframework-webchat-core/internal/SendStatus';\n\nconst SENDING = 'sending';\nconst SEND_FAILED = 'send failed';\nconst SENT = 'sent';\n\ntype SendStatus = typeof SENDING | typeof SEND_FAILED | typeof SENT;\n\nexport { SENDING, SEND_FAILED, SENT };\nexport type { SendStatus };\n","import type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\n\n/**\n * Creates a Redux reducer to store the ponyfill.\n *\n * The ponyfill is used to check if React and Redux does not use a matching ponyfill.\n */\nexport default function createInternalReducer(ponyfill: GlobalScopePonyfill): () => { ponyfill: GlobalScopePonyfill } {\n return () => ({ ponyfill });\n}\n","import updateIn from 'simple-update-in';\n\nimport { DISMISS_NOTIFICATION } from '../actions/dismissNotification';\nimport { SAGA_ERROR } from '../actions/sagaError';\nimport { SET_NOTIFICATION } from '../actions/setNotification';\nimport isForbiddenPropertyName from '../utils/isForbiddenPropertyName';\n\nimport type { DismissNotificationAction } from '../actions/dismissNotification';\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type { Notification } from '../types/internal/Notification';\nimport type { Reducer } from 'redux';\nimport type { SagaErrorAction } from '../actions/sagaError';\nimport type { SetNotificationAction } from '../actions/setNotification';\n\ntype NotificationsAction = DismissNotificationAction | SagaErrorAction | SetNotificationAction;\ntype NotificationsState = Record<string, Notification>;\n\nconst DEFAULT_STATE: NotificationsState = {};\n\nexport default function createNotificationsReducer({\n Date\n}: GlobalScopePonyfill): Reducer<NotificationsState, NotificationsAction> {\n return function notifications(\n state: NotificationsState = DEFAULT_STATE,\n action: NotificationsAction\n ): NotificationsState {\n const { type } = action;\n const now = Date.now();\n\n if (type === DISMISS_NOTIFICATION) {\n state = updateIn(state, [action.payload.id]);\n } else if (type === SAGA_ERROR) {\n state = updateIn(state, ['connectivitystatus', 'message'], () => 'javascripterror');\n } else if (type === SET_NOTIFICATION) {\n const { alt, data, id, level, message } = action.payload;\n\n if (!isForbiddenPropertyName(id)) {\n // Mitigated through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n const notification = state[id];\n\n if (\n !notification ||\n alt !== notification.alt ||\n !Object.is(data, notification.data) ||\n level !== notification.level ||\n message !== notification.message\n ) {\n state = updateIn(state, [id], () => ({\n alt,\n data,\n id,\n level,\n message,\n timestamp: now\n }));\n }\n }\n }\n\n return state;\n };\n}\n","let FORBIDDEN_PROPERTY_NAMES;\n\nfunction getForbiddenPropertyNames(): string[] {\n return (\n FORBIDDEN_PROPERTY_NAMES ||\n (FORBIDDEN_PROPERTY_NAMES = Object.freeze(\n Array.from(\n new Set([\n // As-of writing, `Object.prototype` includes:\n // __defineGetter__\n // __defineSetter__\n // __lookupGetter__\n // __lookupSetter\n // __proto__\n // constructor\n // hasOwnProperty\n // isPrototypeOf\n // propertyIsEnumerable\n // toLocaleString\n // toString\n // valueOf\n ...Object.getOwnPropertyNames(Object.prototype),\n\n 'prototype'\n ])\n )\n ))\n );\n}\n\nexport default function isForbiddenPropertyName(propertyName: string): boolean {\n return getForbiddenPropertyNames().includes(propertyName);\n}\n","/* eslint no-case-declarations: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n\nimport updateIn from 'simple-update-in';\n\nimport { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\n\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type { IncomingActivityAction } from '../actions/incomingActivity';\nimport type { PostActivityPendingAction } from '../actions/postActivity';\nimport type { Reducer } from 'redux';\n\ntype TypingState = Record<\n string,\n {\n at: number;\n last: number;\n name: string;\n role: 'bot' | 'channel' | 'user';\n }\n>;\ntype TypingAction = IncomingActivityAction | PostActivityPendingAction;\n\nconst DEFAULT_STATE: TypingState = {};\n\nexport default function createLastTypingReducer({ Date }: GlobalScopePonyfill): Reducer<TypingState, TypingAction> {\n return function lastTyping(state: TypingState = DEFAULT_STATE, { payload, type }: TypingAction): TypingState {\n if (type === INCOMING_ACTIVITY || type === POST_ACTIVITY_PENDING) {\n const {\n activity: {\n from: { id, name, role },\n type: activityType\n }\n } = payload;\n\n if (activityType === 'typing') {\n const now = Date.now();\n\n state = updateIn(state, [id, 'at'], at => at || now);\n state = updateIn(state, [id, 'last'], () => now);\n state = updateIn(state, [id, 'name'], () => name);\n state = updateIn(state, [id, 'role'], () => role);\n } else if (activityType === 'message') {\n state = updateIn(state, [id]);\n }\n }\n\n return state;\n };\n}\n","import { SET_DICTATE_INTERIMS } from '../actions/setDictateInterims';\n\nconst DEFAULT_STATE = [];\n\nexport default function dictateInterims(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_DICTATE_INTERIMS:\n state = payload.dictateInterims;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { DICTATING, IDLE, STARTING, STOPPING, WILL_START } from '../constants/DictateState';\n\nimport { SET_DICTATE_STATE } from '../actions/setDictateState';\nimport { START_DICTATE } from '../actions/startDictate';\nimport { STOP_DICTATE } from '../actions/stopDictate';\n\nconst DEFAULT_STATE = IDLE;\n\nexport default function dictateState(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_DICTATE_STATE:\n state = payload.dictateState;\n break;\n\n case START_DICTATE:\n if (state === IDLE || state === STOPPING || state === WILL_START) {\n state = STARTING;\n }\n\n break;\n\n case STOP_DICTATE:\n if (state === STARTING || state === DICTATING) {\n state = STOPPING;\n } else if (state === WILL_START) {\n state = IDLE;\n }\n\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_LANGUAGE } from '../actions/setLanguage';\n\nconst DEFAULT_STATE = 'en-US';\n\nexport default function language(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_LANGUAGE:\n state = payload.language;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","// TODO: [P3] We should obsolete this action in favor of DIRECT_LINE/UPDATE_CONNECTION_STATUS.\n// But today, both actions behave differently, this one only dispatch after connected and not dispatched when disconnected.\nconst CONNECTION_STATUS_UPDATE = 'DIRECT_LINE/CONNECTION_STATUS_UPDATE';\n\nexport default function connectionStatusUpdate(connectionStatus) {\n return {\n type: CONNECTION_STATUS_UPDATE,\n payload: { connectionStatus }\n };\n}\n\nexport { CONNECTION_STATUS_UPDATE };\n","import { CONNECTION_STATUS_UPDATE } from '../actions/connectionStatusUpdate';\n\nconst DEFAULT_STATE = 0;\n\nexport default function readyState(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case CONNECTION_STATUS_UPDATE:\n state = payload.connectionStatus;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","const SET_REFERENCE_GRAMMAR_ID = 'WEB_CHAT/SET_REFERENCE_GRAMMAR_ID';\n\nexport default function setReferenceGrammarID(referenceGrammarID) {\n return {\n type: SET_REFERENCE_GRAMMAR_ID,\n payload: { referenceGrammarID }\n };\n}\n\nexport { SET_REFERENCE_GRAMMAR_ID };\n","import { SET_REFERENCE_GRAMMAR_ID } from '../actions/setReferenceGrammarID';\n\nconst DEFAULT_STATE = null;\n\nexport default function referenceGrammarID(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_REFERENCE_GRAMMAR_ID:\n state = payload.referenceGrammarID || null;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_SEND_BOX_ATTACHMENTS } from '../actions/setSendBoxAttachments';\nimport type { SendBoxAttachment } from '../types/SendBoxAttachment';\n\nconst DEFAULT_STATE: readonly SendBoxAttachment[] = Object.freeze([]);\n\nexport default function sendBoxAttachments(state = DEFAULT_STATE, { payload, type }): readonly SendBoxAttachment[] {\n switch (type) {\n case SET_SEND_BOX_ATTACHMENTS:\n state = payload.attachments;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_SEND_BOX } from '../actions/setSendBox';\n\nconst DEFAULT_STATE = '';\n\nexport default function sendBoxValue(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_SEND_BOX:\n state = payload.text;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_SEND_TIMEOUT } from '../actions/setSendTimeout';\n\nconst DEFAULT_STATE = 20000;\n\nexport default function sendTimeout(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_SEND_TIMEOUT:\n state = payload.sendTimeout;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_SEND_TYPING_INDICATOR } from '../actions/setSendTypingIndicator';\n\nconst DEFAULT_STATE = false;\n\nexport default function sendTypingIndicator(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_SEND_TYPING_INDICATOR:\n state = payload.sendTypingIndicator;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { START_SPEAKING_ACTIVITY } from '../actions/startSpeakingActivity';\nimport { STOP_SPEAKING_ACTIVITY } from '../actions/stopSpeakingActivity';\n\nexport default function shouldSpeakIncomingActivity(state = false, { type }) {\n switch (type) {\n case START_SPEAKING_ACTIVITY:\n state = true;\n break;\n\n case STOP_SPEAKING_ACTIVITY:\n state = false;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","const EMPTY_ARRAY = [];\n\nconst SET_SUGGESTED_ACTIONS = 'WEB_CHAT/SET_SUGGESTED_ACTIONS';\n\nexport default function setSuggestedActions(suggestedActions = EMPTY_ARRAY) {\n return {\n type: SET_SUGGESTED_ACTIONS,\n payload: { suggestedActions }\n };\n}\n\nexport { SET_SUGGESTED_ACTIONS };\n","import { CLEAR_SUGGESTED_ACTIONS } from '../actions/clearSuggestedActions';\nimport { SET_SUGGESTED_ACTIONS } from '../actions/setSuggestedActions';\n\nconst DEFAULT_STATE = [];\n\nexport default function suggestedActions(state = DEFAULT_STATE, { payload = {}, type }) {\n switch (type) {\n case SET_SUGGESTED_ACTIONS:\n if ((payload.suggestedActions || []).length) {\n state = [].slice.call(payload.suggestedActions);\n } else {\n state = DEFAULT_STATE;\n }\n break;\n case CLEAR_SUGGESTED_ACTIONS:\n state = DEFAULT_STATE;\n break;\n default:\n break;\n }\n\n return state;\n}\n","import { fork } from 'redux-saga/effects';\n\nimport clearSuggestedActionsOnPostActivitySaga from './sagas/clearSuggestedActionsOnPostActivitySaga';\nimport connectionStatusToNotificationSaga from './sagas/connectionStatusToNotificationSaga';\nimport connectionStatusUpdateSaga from './sagas/connectionStatusUpdateSaga';\nimport connectSaga from './sagas/connectSaga';\nimport detectSlowConnectionSaga from './sagas/detectSlowConnectionSaga';\nimport emitTypingIndicatorToPostActivitySaga from './sagas/emitTypingIndicatorToPostActivitySaga';\nimport markAllAsSpokenOnStopSpeakActivitySaga from './sagas/markAllAsSpokenOnStopSpeakActivitySaga';\nimport observeActivitySaga from './sagas/observeActivitySaga';\nimport postActivitySaga from './sagas/postActivitySaga';\nimport queueIncomingActivitySaga from './sagas/queueIncomingActivitySaga';\nimport sendEventToPostActivitySaga from './sagas/sendEventToPostActivitySaga';\nimport sendFilesToPostActivitySaga from './sagas/sendFilesToPostActivitySaga';\nimport sendMessageBackToPostActivitySaga from './sagas/sendMessageBackToPostActivitySaga';\nimport sendMessageToPostActivitySaga from './sagas/sendMessageToPostActivitySaga';\nimport sendPostBackToPostActivitySaga from './sagas/sendPostBackToPostActivitySaga';\nimport sendTypingIndicatorOnSetSendBoxSaga from './sagas/sendTypingIndicatorOnSetSendBoxSaga';\nimport speakActivityAndStartDictateOnIncomingActivityFromOthersSaga from './sagas/speakActivityAndStartDictateOnIncomingActivityFromOthersSaga';\nimport startDictateOnSpeakCompleteSaga from './sagas/startDictateOnSpeakCompleteSaga';\nimport startSpeakActivityOnPostActivitySaga from './sagas/startSpeakActivityOnPostActivitySaga';\nimport stopDictateOnCardActionSaga from './sagas/stopDictateOnCardActionSaga';\nimport stopSpeakingActivityOnInputSaga from './sagas/stopSpeakingActivityOnInputSaga';\nimport submitSendBoxSaga from './sagas/submitSendBoxSaga';\n\nimport type { GlobalScopePonyfill } from './types/GlobalScopePonyfill';\nimport type { Saga } from 'redux-saga';\n\ntype CreateSagasOptions = {\n ponyfill: GlobalScopePonyfill;\n};\n\nexport default function createSagas({ ponyfill }: CreateSagasOptions): Saga {\n return function* () {\n // TODO: [P2] Since fork() silently catches all exceptions, we need to find a way to console.error them out.\n\n yield fork(clearSuggestedActionsOnPostActivitySaga);\n yield fork(connectionStatusToNotificationSaga);\n yield fork(connectionStatusUpdateSaga);\n yield fork(connectSaga);\n yield fork(detectSlowConnectionSaga, ponyfill);\n yield fork(emitTypingIndicatorToPostActivitySaga);\n yield fork(markAllAsSpokenOnStopSpeakActivitySaga);\n yield fork(observeActivitySaga);\n yield fork(postActivitySaga, ponyfill);\n yield fork(queueIncomingActivitySaga, ponyfill);\n yield fork(sendEventToPostActivitySaga);\n yield fork(sendFilesToPostActivitySaga);\n yield fork(sendMessageBackToPostActivitySaga);\n yield fork(sendMessageToPostActivitySaga);\n yield fork(sendPostBackToPostActivitySaga);\n yield fork(sendTypingIndicatorOnSetSendBoxSaga, ponyfill);\n yield fork(speakActivityAndStartDictateOnIncomingActivityFromOthersSaga);\n yield fork(startDictateOnSpeakCompleteSaga);\n yield fork(startSpeakActivityOnPostActivitySaga);\n yield fork(stopDictateOnCardActionSaga);\n yield fork(stopSpeakingActivityOnInputSaga);\n yield fork(submitSendBoxSaga);\n };\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\nimport setSuggestedActions from '../actions/setSuggestedActions';\nimport whileConnected from './effects/whileConnected';\n\nfunction* clearSuggestedActions() {\n yield put(setSuggestedActions());\n}\n\nfunction* clearSuggestedActionsOnPostActivity() {\n yield takeEvery(\n ({ payload, type }) => type === POST_ACTIVITY_PENDING && payload.activity.type === 'message',\n clearSuggestedActions\n );\n}\n\nexport default function* clearSuggestedActionsOnPostActivitySaga() {\n yield whileConnected(clearSuggestedActionsOnPostActivity);\n}\n","import { call, cancel, fork, take } from 'redux-saga/effects';\n\nimport { CONNECT_FULFILLING } from '../../actions/connect';\nimport { DISCONNECT_PENDING } from '../../actions/disconnect';\nimport { RECONNECT_PENDING, RECONNECT_FULFILLING } from '../../actions/reconnect';\n\nimport type { DirectLineJSBotConnection } from '../../types/external/DirectLineJSBotConnection';\n\nexport default function whileConnectedEffect<P extends any[]>(\n fn: (\n {\n directLine,\n userID,\n username\n }: {\n directLine: DirectLineJSBotConnection;\n userID: string;\n username: string;\n },\n ...args: P\n ) => void,\n ...args: P\n) {\n return call(function* whileConnected() {\n for (;;) {\n const {\n meta: { userID, username },\n payload: { directLine }\n }: {\n meta: {\n userID: string;\n username: string;\n };\n payload: { directLine: DirectLineJSBotConnection };\n } = yield take([CONNECT_FULFILLING, RECONNECT_FULFILLING]);\n\n const task = yield fork(fn, { directLine, userID, username }, ...args);\n\n // When we receive DISCONNECT_PENDING or RECONNECT_PENDING, the Direct Line connection is currently busy and should not be used.\n\n yield take([DISCONNECT_PENDING, RECONNECT_PENDING]);\n yield cancel(task);\n }\n });\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, 2, 3, 4] }] */\n\nimport { call, put, takeLatest } from 'redux-saga/effects';\n\nimport { CONNECT } from '../actions/connect';\nimport createPromiseQueue from '../createPromiseQueue';\nimport setNotification from '../actions/setNotification';\n\nconst CONNECTIVITY_STATUS_NOTIFICATION_ID = 'connectivitystatus';\n\nfunction subscribeToPromiseQueue(observable) {\n const { push, shift } = createPromiseQueue();\n const subscription = observable.subscribe({ next: push });\n\n return {\n shift,\n unsubscribe() {\n subscription.unsubscribe();\n }\n };\n}\n\nfunction* connectionStatusToNotification({ payload: { directLine } }) {\n const { shift, unsubscribe } = subscribeToPromiseQueue(directLine.connectionStatus$);\n\n try {\n let reconnecting;\n\n for (;;) {\n const value = yield call(shift);\n\n switch (value) {\n case 0:\n case 1:\n yield put(\n setNotification({\n id: CONNECTIVITY_STATUS_NOTIFICATION_ID,\n level: 'info',\n message: reconnecting ? 'reconnecting' : 'connecting'\n })\n );\n\n break;\n\n case 2:\n reconnecting = 1;\n\n yield put(\n setNotification({\n id: CONNECTIVITY_STATUS_NOTIFICATION_ID,\n level: 'success',\n message: 'connected'\n })\n );\n\n break;\n\n case 3:\n case 4:\n reconnecting = 1;\n\n yield put(\n setNotification({\n id: CONNECTIVITY_STATUS_NOTIFICATION_ID,\n level: 'error',\n message: 'failedtoconnect'\n })\n );\n\n break;\n\n default:\n break;\n }\n }\n } finally {\n unsubscribe();\n }\n}\n\nexport default function* () {\n yield takeLatest(CONNECT, connectionStatusToNotification);\n}\n","import createDeferred from 'p-defer-es5';\n\nexport default function createPromiseQueue() {\n let deferred;\n const queue = [];\n\n const push = value => {\n if (deferred) {\n const { resolve } = deferred;\n\n deferred = null;\n resolve(value);\n } else {\n queue.push(value);\n }\n };\n\n const shift = () =>\n queue.length ? Promise.resolve(queue.shift()) : (deferred || (deferred = createDeferred())).promise;\n\n return {\n push,\n shift\n };\n}\n","import { put } from 'redux-saga/effects';\n\nimport connectionStatusUpdate from '../actions/connectionStatusUpdate';\nimport observeEach from './effects/observeEach';\nimport setReferenceGrammarID from '../actions/setReferenceGrammarID';\nimport whileConnected from './effects/whileConnected';\n\nfunction* observeConnectionStatus({ directLine }) {\n yield observeEach(directLine.connectionStatus$, function* updateConnectionStatus(connectionStatus) {\n yield put(connectionStatusUpdate(connectionStatus));\n yield put(setReferenceGrammarID(directLine.referenceGrammarId));\n });\n}\n\nexport default function* connectionStatusUpdateSaga() {\n yield whileConnected(observeConnectionStatus);\n}\n","import { call } from 'redux-saga/effects';\n\nimport createPromiseQueue from '../../createPromiseQueue';\n\nexport default function observeEachEffect(observable, saga) {\n return call(function* observeEach() {\n const queue = createPromiseQueue();\n const subscription = observable.subscribe({ next: queue.push });\n\n try {\n for (;;) {\n const result = yield call(queue.shift);\n\n yield call(saga, result);\n }\n } finally {\n subscription.unsubscribe();\n }\n });\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 10] }] */\n\nimport { call, cancel, cancelled, fork, put, race, take } from 'redux-saga/effects';\n\nimport { jwtDecode } from 'jwt-decode';\n\nimport { CONNECT } from '../actions/connect';\nimport createPromiseQueue from '../createPromiseQueue';\nimport forkPut from './effects/forkPut';\nimport uniqueID from '../utils/uniqueID';\nimport updateConnectionStatus, { UPDATE_CONNECTION_STATUS } from '../actions/updateConnectionStatus';\n\nimport { DISCONNECT, DISCONNECT_PENDING, DISCONNECT_FULFILLED } from '../actions/disconnect';\n\nimport { RECONNECT } from '../actions/reconnect';\n\nconst CONNECTING = 1;\nconst ONLINE = 2;\nconst UNINITIALIZED = 0;\n\nfunction randomUserID() {\n return `r_${uniqueID().substring(0, 10)}`;\n}\n\nfunction* observeAndPutConnectionStatusUpdate(directLine) {\n const connectionStatusQueue = createPromiseQueue();\n const connectionStatusSubscription = directLine.connectionStatus$.subscribe({ next: connectionStatusQueue.push });\n\n try {\n for (;;) {\n const connectionStatus = yield call(connectionStatusQueue.shift);\n\n yield put(updateConnectionStatus(connectionStatus));\n }\n } finally {\n connectionStatusSubscription.unsubscribe();\n }\n}\n\n// TODO: [P2] We should move this check and rectification to DirectLineJS.\nfunction rectifyUserID(directLine, userIDFromAction) {\n const { token } = directLine;\n\n let userIDFromToken;\n\n // TODO: Add test to make sure \"jwt-decode\" work as expected.\n try {\n userIDFromToken = (jwtDecode(token) || {}).user;\n // eslint-disable-next-line no-empty\n } catch (err) {}\n\n const result = {\n fromAction: userIDFromAction,\n fromToken: userIDFromToken\n };\n\n if (userIDFromToken) {\n if (userIDFromAction && userIDFromAction !== userIDFromToken) {\n console.warn(\n 'Web Chat: user ID is both specified in the Direct Line token and passed in, will use the user ID from the token.'\n );\n }\n\n result.final = userIDFromToken;\n } else if (userIDFromAction) {\n if (typeof userIDFromAction !== 'string') {\n console.warn('Web Chat: user ID must be a string.');\n\n result.final = randomUserID();\n } else if (/^dl_/u.test(userIDFromAction)) {\n console.warn(\n 'Web Chat: user ID prefixed with \"dl_\" is reserved and must be embedded into the Direct Line token to prevent forgery.'\n );\n\n result.final = randomUserID();\n } else {\n result.final = userIDFromAction;\n }\n } else {\n result.final = randomUserID();\n }\n\n return result;\n}\n\n// We could make this a Promise instead of saga (function generator) to make the code cleaner, if:\n// 1. We found a way to cancel Promise\n// 2. subscribe() are shared amongst all subscriptions, e.g. turn Observable into events\nfunction* connectSaga(directLine) {\n // DirectLineJS starts the connection only after the first subscriber for activity$, not connectionStatus$\n const activitySubscription = directLine.activity$.subscribe({ next: () => 0 });\n const unsubscribeActivity = activitySubscription.unsubscribe.bind(activitySubscription);\n\n try {\n for (;;) {\n const {\n payload: { connectionStatus }\n } = yield take(UPDATE_CONNECTION_STATUS);\n\n if (connectionStatus === ONLINE) {\n // TODO: [P2] DirectLineJS should kill the connection when we unsubscribe\n // But currently in v3, DirectLineJS does not have this functionality\n // Thus, we need to call \"end()\" explicitly\n\n return () => {\n unsubscribeActivity();\n directLine.end();\n };\n } else if (connectionStatus !== UNINITIALIZED && connectionStatus !== CONNECTING) {\n throw new Error(`Failed to connect, DirectLineJS returned ${connectionStatus}.`);\n }\n }\n } catch (err) {\n // We will unsubscribe if we failed to connect or got cancelled only.\n // We should not unsubscribe in happy case, because DirectLineJS should relying on the subscription to connect/disconnect.\n unsubscribeActivity();\n\n throw err;\n } finally {\n if (yield cancelled()) {\n unsubscribeActivity();\n }\n }\n}\n\nfunction* reconnectSaga() {\n for (;;) {\n const {\n payload: { connectionStatus }\n } = yield take(UPDATE_CONNECTION_STATUS);\n\n if (connectionStatus === ONLINE) {\n break;\n } else if (connectionStatus !== CONNECTING) {\n throw new Error(`Failed to reconnect. DirectLineJS returned ${connectionStatus}.`);\n }\n }\n}\n\n// This is similar to behavior of redux-promise-middleware, but using saga instead of Promise.\n// We guarantee PENDING -> FULFILLING -> FULFILLED, or PENDING -> REJECTED. This will help us simplify logic in other part of code.\n// Note that after the saga is cancelled, subsequent call to put() will be ignored silently.\nfunction* runAsyncEffect({ type, meta, payload }, callEffectFactory) {\n try {\n yield forkPut({ type: `${type}_PENDING`, meta, payload });\n\n const result = yield callEffectFactory();\n\n yield forkPut({ type: `${type}_FULFILLING`, meta, payload }, { type: `${type}_FULFILLED`, meta, payload });\n\n return result;\n } catch (payload) {\n yield forkPut({ type: `${type}_REJECTED`, error: true, meta, payload });\n\n throw payload;\n }\n}\n\nfunction* takeDisconnectAsError() {\n yield take(DISCONNECT);\n\n throw new Error('disconnected');\n}\n\nfunction runAsyncEffectUntilDisconnect(baseAction, callEffectFactory) {\n // We cannot use saga cancel() here, because cancelling saga will prohibit us from sending *_REJECTED.\n // Without REJECTED, it impacts our assumptions around PENDING/FULFILLED/REJECTED.\n return runAsyncEffect(baseAction, function* runUntilDisconnect() {\n const { result } = yield race({\n _: takeDisconnectAsError(),\n result: callEffectFactory()\n });\n\n return result;\n });\n}\n\nexport default function* () {\n for (;;) {\n const {\n payload: { directLine, userID: userIDFromAction, username }\n } = yield take(CONNECT);\n\n const updateConnectionStatusTask = yield fork(observeAndPutConnectionStatusUpdate, directLine);\n const rectifiedUserID = rectifyUserID(directLine, userIDFromAction);\n\n // TODO: [P2] Checks if this attached subtask will get killed if the parent task is complete (peacefully), errored out, or cancelled.\n const meta = {\n userID: rectifiedUserID.final,\n username\n };\n\n // Send user ID to DirectLineJS if it was specified from props of <API.Composer>.\n // However, DirectLineJS may still prefer the user ID from token if it is burnt into the token.\n // To prevent DirectLineJS giving false warnings, we will only call setUserId() if it is different than the token.\n directLine.setUserId && rectifiedUserID.fromToken !== meta.userID && directLine.setUserId(meta.userID);\n\n let disconnectMeta;\n\n // We will dispatch CONNECT_PENDING, wait for connect completed, errored, or cancelled (thru disconnect).\n // Then dispatch CONNECT_FULFILLED/CONNECT_REJECTED as needed.\n try {\n const endDirectLine = yield runAsyncEffectUntilDisconnect(\n {\n type: CONNECT,\n meta,\n payload: { directLine }\n },\n () => call(connectSaga, directLine)\n );\n\n try {\n for (;;) {\n // We are waiting for connection status change or disconnect action.\n const { updateConnectionStatusAction: { payload: { connectionStatus } = {} } = {} } = yield race({\n _: take(DISCONNECT),\n updateConnectionStatusAction: take(UPDATE_CONNECTION_STATUS)\n });\n\n // If it is not disconnect action, connectionStatus will not be undefined.\n if (connectionStatus === CONNECTING) {\n // If DirectLineJS changed connectionStatus to CONNECTING, we will treat it as reconnect status.\n yield runAsyncEffectUntilDisconnect(\n {\n type: RECONNECT,\n meta,\n payload: { directLine }\n },\n () => call(reconnectSaga)\n );\n } else if (connectionStatus !== ONLINE) {\n if (typeof connectionStatus !== 'undefined') {\n // We need to kill the connection because DirectLineJS want to close it.\n throw new Error(`Connection status changed to ${connectionStatus}`);\n } else {\n // Someone dispatched disconnect action.\n break;\n }\n }\n }\n } finally {\n endDirectLine();\n }\n } catch (error) {\n disconnectMeta = { error };\n } finally {\n yield cancel(updateConnectionStatusTask);\n\n // Even if the connection is interrupted, we will still emit DISCONNECT_PENDING.\n // This will makes handling logic easier. If CONNECT_FULFILLED, we guarantee DISCONNECT_PENDING.\n yield forkPut(\n { type: DISCONNECT_PENDING, meta: disconnectMeta, payload: { directLine } },\n { type: DISCONNECT_FULFILLED, meta: disconnectMeta, payload: { directLine } }\n );\n }\n }\n}\n","import { fork, put } from 'redux-saga/effects';\n\n// In redux-saga, if we call the following effects in order, we might miss the take('C').\n// 1. take('A')\n// 2. put({ type: 'B' })\n// 3. take('C')\n\n// We need to modify step 2 to:\n// 2. fork(function* () { yield put({ type: 'B' }) })\n\n// This is a helper function for this purpose.\n\nexport default function forkPutEffect(...actions) {\n return fork(function* forkPut() {\n for (const action of actions) {\n yield put(action);\n }\n });\n}\n","const UPDATE_CONNECTION_STATUS = 'DIRECT_LINE/UPDATE_CONNECTION_STATUS';\n\nexport default function updateConnectionStatus(connectionStatus) {\n return {\n type: UPDATE_CONNECTION_STATUS,\n payload: { connectionStatus }\n };\n}\n\nexport { UPDATE_CONNECTION_STATUS };\n","import { call, put, race, take } from 'redux-saga/effects';\n\nimport { CONNECT_FULFILLED, CONNECT_PENDING, CONNECT_REJECTED, CONNECT_STILL_PENDING } from '../actions/connect';\nimport { RECONNECT_FULFILLED, RECONNECT_PENDING, RECONNECT_REJECTED } from '../actions/reconnect';\nimport sleep from '../utils/sleep';\n\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\n\nconst SLOW_CONNECTION_AFTER = 15000;\n\nexport default function* detectSlowConnectionSaga(ponyfill: GlobalScopePonyfill) {\n for (;;) {\n yield take([CONNECT_PENDING, RECONNECT_PENDING]);\n\n const connectivityRace = yield race({\n fulfilled: take([CONNECT_FULFILLED, RECONNECT_FULFILLED]),\n rejected: take([CONNECT_REJECTED, RECONNECT_REJECTED]),\n slow: call(sleep, SLOW_CONNECTION_AFTER, ponyfill)\n });\n\n if ('slow' in connectivityRace) {\n yield put({ type: CONNECT_STILL_PENDING });\n }\n }\n}\n","import type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\n\nexport default function sleep(interval: number, ponyfill: GlobalScopePonyfill): Promise<void> {\n return new Promise(resolve => ponyfill.setTimeout(resolve, Math.max(interval, 0)));\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { EMIT_TYPING_INDICATOR } from '../actions/emitTypingIndicator';\nimport postActivity from '../actions/postActivity';\nimport whileConnected from './effects/whileConnected';\n\nfunction* postTypingActivity() {\n yield put(\n postActivity({\n type: 'typing'\n })\n );\n}\n\nfunction* emitTypingActivityToPostActivity() {\n yield takeEvery(({ type }) => type === EMIT_TYPING_INDICATOR, postTypingActivity);\n}\n\nexport default function* emitTypingActivityToPostActivitySaga() {\n yield whileConnected(emitTypingActivityToPostActivity);\n}\n","import { put, select, takeEvery } from 'redux-saga/effects';\n\nimport { of as activitiesOf } from '../selectors/activities';\nimport { STOP_SPEAKING_ACTIVITY } from '../actions/stopSpeakingActivity';\nimport markActivity from '../actions/markActivity';\nimport speakingActivity from '../definitions/speakingActivity';\n\nfunction* markAllAsSpoken() {\n const speakingActivities = yield select(activitiesOf(speakingActivity));\n\n for (const activity of speakingActivities) {\n yield put(markActivity(activity, 'speak', false));\n }\n}\n\n// TODO: [P4] We should turn this into a reducer instead\nexport default function* markAllAsSpokenOnStopSpeakActivitySaga() {\n yield takeEvery(STOP_SPEAKING_ACTIVITY, markAllAsSpoken);\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\nimport type { WebChatActivity } from '../types/WebChatActivity';\n\nconst activities = ({ activities }: ReduxState) => activities;\n\nconst of = (predicate: (activity: WebChatActivity) => boolean) => (state: ReduxState) =>\n activities(state).filter(predicate);\nconst ofID = (targetID: string) => of(({ id }) => id === targetID);\nconst ofType = (targetType: string) => of(({ type }) => type === targetType);\n\nexport default activities;\nexport { of, ofID, ofType };\n","// If true, the activity is in the queue and needs to be spoken.\n\nexport default function speakingActivity(activity) {\n return activity.channelData?.speak;\n}\n","import { put } from 'redux-saga/effects';\nimport updateIn from 'simple-update-in';\n\nimport observeEach from './effects/observeEach';\nimport queueIncomingActivity from '../actions/queueIncomingActivity';\nimport whileConnected from './effects/whileConnected';\nimport type { DirectLineActivity } from '../types/external/DirectLineActivity';\nimport type { DirectLineJSBotConnection } from '../types/external/DirectLineJSBotConnection';\nimport type { WebChatActivity } from '../types/WebChatActivity';\n\nconst PASSTHRU_FN = (value: unknown) => value;\n\nfunction patchActivityWithFromRole(activity: DirectLineActivity, userID?: string): DirectLineActivity {\n // Some activities, such as \"ConversationUpdate\", does not have \"from\" defined.\n // And although \"role\" is defined in Direct Line spec, it was not sent over the wire.\n // We normalize the activity here to simplify null-check and logic later.\n\n // Patch activity.from.role to make sure its either \"bot\", \"user\", or \"channel\"\n if (!activity.from) {\n activity = updateIn(activity, ['from', 'role'], () => 'channel');\n } else if (!activity.from.role) {\n if (activity.from.id === userID) {\n activity = updateIn(activity, ['from', 'role'], () => 'user');\n } else if (activity.from.id) {\n activity = updateIn(activity, ['from', 'role'], () => 'bot');\n } else {\n activity = updateIn(activity, ['from', 'role'], () => 'channel');\n }\n }\n\n return activity;\n}\n\nfunction patchNullAsUndefined(activity: DirectLineActivity): DirectLineActivity {\n // These fields are known used in Web Chat and in any cases, they should not be null, but undefined.\n // The only field omitted is \"value\", as it could be null purposefully.\n\n return [\n 'attachmentLayout',\n 'attachments',\n 'channelData',\n 'conversation',\n 'entities',\n 'from',\n 'inputHint',\n 'locale',\n 'name',\n 'recipient',\n 'speak',\n 'suggestedActions',\n 'text',\n 'textFormat',\n 'timestamp',\n 'type'\n ].reduce((activity, name) => {\n const { [name]: value } = activity;\n\n return updateIn(activity, [name], typeof value === 'undefined' || value === null ? undefined : PASSTHRU_FN);\n }, activity);\n}\n\n// Patching the `from.name` to be a human readable name.\n// We use the `from.name` for typing indicator, such that it read \"John is typing...\".\nfunction patchFromName(activity: DirectLineActivity) {\n return updateIn(activity, ['from', 'name'], (name: string | undefined): string => {\n const { channelId, from = {} } = activity;\n\n if ((channelId === 'directline' || channelId === 'webchat') && from.id === from.name && from.role === 'bot') {\n return 'Bot';\n }\n\n return name;\n });\n}\n\nfunction* observeActivity({ directLine, userID }: { directLine: DirectLineJSBotConnection; userID?: string }) {\n yield observeEach(directLine.activity$, function* observeActivity(activity: DirectLineActivity) {\n // TODO: [P2] #3953 Move the patching logic to a DirectLineJS wrapper, instead of too close to inners of Web Chat.\n activity = patchNullAsUndefined(activity);\n activity = patchActivityWithFromRole(activity, userID);\n activity = patchFromName(activity);\n\n yield put(queueIncomingActivity(activity as WebChatActivity));\n });\n}\n\nexport default function* observeActivitySaga() {\n yield whileConnected(observeActivity);\n}\n","const QUEUE_INCOMING_ACTIVITY = 'DIRECT_LINE/QUEUE_INCOMING_ACTIVITY';\n\nexport default function queueIncomingActivity(activity) {\n return {\n type: QUEUE_INCOMING_ACTIVITY,\n payload: { activity }\n };\n}\n\nexport { QUEUE_INCOMING_ACTIVITY };\n","import { all, call, cancelled, put, race, select, take, takeEvery } from 'redux-saga/effects';\n\nimport { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport {\n POST_ACTIVITY,\n POST_ACTIVITY_FULFILLED,\n POST_ACTIVITY_IMPEDED,\n POST_ACTIVITY_PENDING,\n POST_ACTIVITY_REJECTED\n} from '../actions/postActivity';\nimport dateToLocaleISOString from '../utils/dateToLocaleISOString';\nimport deleteKey from '../utils/deleteKey';\nimport languageSelector from '../selectors/language';\nimport observeOnce from './effects/observeOnce';\nimport sendTimeoutSelector from '../selectors/sendTimeout';\nimport sleep from '../utils/sleep';\nimport uniqueID from '../utils/uniqueID';\nimport whileConnected from './effects/whileConnected';\n\nimport type { DirectLineActivity } from '../types/external/DirectLineActivity';\nimport type { DirectLineJSBotConnection } from '../types/external/DirectLineJSBotConnection';\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type { IncomingActivityAction } from '../actions/incomingActivity';\nimport type {\n PostActivityAction,\n PostActivityFulfilledAction,\n PostActivityImpededAction,\n PostActivityPendingAction,\n PostActivityRejectedAction\n} from '../actions/postActivity';\nimport type { WebChatActivity } from '../types/WebChatActivity';\nimport type { WebChatOutgoingActivity } from '../types/internal/WebChatOutgoingActivity';\n\n// After 5 minutes, the saga will stop from listening for echo backs and consider the outgoing message as permanently undeliverable.\n// This value must be equals to or larger than the user-defined `styleOptions.sendTimeout`.\nconst HARD_SEND_TIMEOUT = 300000;\n\nfunction* postActivity(\n directLine: DirectLineJSBotConnection,\n userID: string,\n username: string,\n numActivitiesPosted: number,\n { meta: { method }, payload: { activity } }: PostActivityAction,\n ponyfill: GlobalScopePonyfill\n) {\n const attachments = (activity.type === 'message' && activity.attachments) || [];\n const clientActivityID = uniqueID();\n const locale = yield select(languageSelector);\n const localTimeZone =\n typeof window.Intl === 'undefined' ? undefined : new Intl.DateTimeFormat().resolvedOptions().timeZone;\n const now = new ponyfill.Date();\n\n // Currently, we allow untyped outgoing activity as long as the chat adapter can deliver.\n // In the future, we should warn if the outgoing activity is not matching the type.\n const outgoingActivity: WebChatOutgoingActivity = {\n ...deleteKey(activity, 'id'),\n channelData: {\n // Remove local fields that should not be send to the service.\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n ...deleteKey(activity.channelData, 'state', 'webchat:send-status'),\n clientActivityID\n },\n channelId: 'webchat',\n from: {\n id: userID,\n name: username,\n role: 'user'\n },\n locale,\n localTimestamp: dateToLocaleISOString(now),\n localTimezone: localTimeZone,\n ...(activity.type === 'message'\n ? {\n attachments:\n attachments &&\n attachments.map(({ contentType, contentUrl, name, thumbnailUrl }) => ({\n contentType,\n contentUrl,\n name,\n thumbnailUrl\n })),\n text: activity.text\n }\n : activity.type === 'event'\n ? {\n name: activity.name,\n value: activity.value\n }\n : {})\n };\n\n if (!numActivitiesPosted) {\n outgoingActivity.entities = [\n ...(outgoingActivity.entities || []),\n {\n // TODO: [P4] Currently in v3, we send the capabilities although the client might not actually have them\n // We need to understand why we need to send these, and only send capabilities the client have\n requiresBotState: true,\n supportsListening: true,\n supportsTts: true,\n type: 'ClientCapabilities'\n }\n ];\n }\n\n const meta: { clientActivityID: string; method: string } = { clientActivityID, method };\n\n yield put({\n type: POST_ACTIVITY_PENDING,\n meta,\n payload: { activity: outgoingActivity }\n } as PostActivityPendingAction);\n\n let echoed: boolean | undefined;\n\n try {\n // Quirks: We might receive INCOMING_ACTIVITY before the postActivity call completed\n // So, we setup expectation first, then postActivity afterward\n\n const echoBackCall = call(function* () {\n for (;;) {\n const {\n payload: { activity }\n }: IncomingActivityAction = yield take(INCOMING_ACTIVITY);\n if (activity.channelData?.clientActivityID === clientActivityID && activity.id) {\n echoed = true;\n\n return activity;\n }\n }\n });\n\n // Timeout could be due to either:\n // - Post activity call may take too long time to complete\n // - Direct Line service only respond on HTTP after bot respond to Direct Line\n // - Activity may take too long time to echo back\n\n const sendTimeout: number = yield select(sendTimeoutSelector);\n\n const {\n send: { echoBack }\n }: { send: { echoBack: WebChatActivity } } = yield race({\n send: all({\n echoBack: echoBackCall,\n postActivity: observeOnce(directLine.postActivity(outgoingActivity as DirectLineActivity))\n }),\n timeout: call(function* () {\n yield call(sleep, sendTimeout, ponyfill);\n\n // The IMPEDED action is for backward compatibility by changing `channelData.state` to \"send failed\".\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n yield put({\n type: POST_ACTIVITY_IMPEDED,\n meta,\n payload: { activity: outgoingActivity }\n } as PostActivityImpededAction);\n\n yield call(sleep, HARD_SEND_TIMEOUT - sendTimeout, ponyfill);\n\n throw !echoed\n ? new Error('timed out while waiting for outgoing message to echo back')\n : new Error('timed out while waiting for postActivity to return any values');\n })\n });\n\n yield put({ type: POST_ACTIVITY_FULFILLED, meta, payload: { activity: echoBack } } as PostActivityFulfilledAction);\n } catch (err) {\n console.error('botframework-webchat: Failed to post activity to chat adapter.', err);\n\n yield put({\n type: POST_ACTIVITY_REJECTED,\n error: true,\n meta,\n payload: err\n } as PostActivityRejectedAction);\n } finally {\n if (yield cancelled()) {\n yield put({\n type: POST_ACTIVITY_REJECTED,\n error: true,\n meta,\n payload: new Error('cancelled')\n } as PostActivityRejectedAction);\n }\n }\n}\n\nexport default function* postActivitySaga(ponyfill: GlobalScopePonyfill) {\n yield whileConnected(function* postActivityWhileConnected({\n directLine,\n userID,\n username\n }: {\n directLine: DirectLineJSBotConnection;\n userID: string;\n username: string;\n }) {\n let numActivitiesPosted = 0;\n\n yield takeEvery(POST_ACTIVITY, function* postActivityWrapper(action: PostActivityAction) {\n yield* postActivity(directLine, userID, username, numActivitiesPosted++, action, ponyfill);\n });\n });\n}\n","/* eslint no-magic-numbers: [\"off\", { \"ignore\": [1, 2, 3, 60] }] */\n\nfunction pad(value: number, count = 2): string {\n if (typeof value !== 'number') {\n throw new Error('First argument must be a number');\n }\n\n let stringValue = value + '';\n\n while (stringValue.length < count) {\n stringValue = '0' + stringValue;\n }\n\n return stringValue;\n}\n\n// Adopted from https://stackoverflow.com/questions/17415579/how-to-iso-8601-format-a-date-with-timezone-offset-in-javascript.\n// Use typing of `Date` from globalThis.\n// eslint-disable-next-line no-restricted-globals\nexport default function dateToLocaleISOString(date: Date): string {\n const isDateLike =\n // @ts-ignore TypeScript think this is always true.\n date.getTimezoneOffset &&\n // @ts-ignore TypeScript think this is always true.\n date.getFullYear &&\n // @ts-ignore TypeScript think this is always true.\n date.getMonth &&\n // @ts-ignore TypeScript think this is always true.\n date.getDate &&\n // @ts-ignore TypeScript think this is always true.\n date.getHours &&\n // @ts-ignore TypeScript think this is always true.\n date.getMinutes &&\n // @ts-ignore TypeScript think this is always true.\n date.getSeconds &&\n date.getMilliseconds;\n\n if (!isDateLike) {\n throw new Error('First argument must be a Date-like object.');\n }\n\n const timezoneOffset = -date.getTimezoneOffset();\n const timezoneSign = timezoneOffset < 0 ? '-' : '+';\n\n // \"yyyy-MM-DDTHH:mm:ss.fff+08:00\" for GMT+08\n // \"yyyy-MM-DDTHH:mm:ss.fffZ\" for UTC\n\n const absoluteTimezoneOffset = ~~Math.abs(timezoneOffset);\n\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(\n date.getMinutes()\n )}:${pad(date.getSeconds())}.${pad(date.getMilliseconds(), 3)}${\n timezoneOffset ? `${timezoneSign}${pad(~~(absoluteTimezoneOffset / 60))}:${pad(absoluteTimezoneOffset % 60)}` : 'Z'\n }`;\n}\n","import isForbiddenPropertyName from './isForbiddenPropertyName';\n\nexport default function deleteKey<TMap, TKey extends keyof TMap>(map: TMap, ...keys: TKey[]): Omit<TMap, TKey> {\n if (!map) {\n return map;\n }\n\n const nextMap = { ...map };\n\n for (const key of keys) {\n if (typeof key !== 'string' || !isForbiddenPropertyName(key)) {\n // Mitigation through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n delete nextMap[key];\n }\n }\n\n return nextMap;\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ language }: ReduxState): string => language;\n","import { call } from 'redux-saga/effects';\n\nimport { Observable, Observer, Subscription } from '../../types/external/Observable';\n\nexport default function observeOnceEffect<T>(observable: Observable<T>) {\n return call(function* observeOnce() {\n let subscription: Subscription;\n\n try {\n return yield call(\n () =>\n new Promise<T>((resolve, reject) => {\n subscription = observable.subscribe({\n complete: resolve,\n error: reject,\n next: resolve\n } as Observer<T>);\n })\n );\n } finally {\n subscription && subscription.unsubscribe();\n }\n });\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ sendTimeout }: ReduxState): number => sendTimeout;\n","import { call, cancelled, fork, put, race, select, take } from 'redux-saga/effects';\n\nimport { QUEUE_INCOMING_ACTIVITY } from '../actions/queueIncomingActivity';\nimport activitiesSelector, { ofType as activitiesOfType } from '../selectors/activities';\nimport activityFromBot from '../definitions/activityFromBot';\nimport incomingActivity, { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport setSuggestedActions from '../actions/setSuggestedActions';\nimport sleep from '../utils/sleep';\nimport whileConnected from './effects/whileConnected';\n\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\n\n// We will hold up the replying activity if the originating activity did not arrive, up to 5 seconds.\nconst REPLY_TIMEOUT = 5000;\n\nfunction* takeEveryAndSelect(actionType, selector, fn) {\n // select() will free up the code execution.\n // If we pair up with takeEvery(), it will allow actions to slip through.\n // Thus, we are writing one that don't use takeEvery().\n while (!(yield cancelled())) {\n const action = yield take(actionType);\n const state = yield select(selector);\n\n yield fork(fn, action, state);\n }\n}\n\n// Wait for specific activity to arrive in the transcript.\n// We will use the initial set of activities to close time gaps between select() and take().\n// If another activity with the same \"replyToId\" is already rendered (in the \"activities\" array),\n// we will skip the wait as we already waited long enough for the missing activity to show up.\nfunction* waitForActivityId(replyToId, initialActivities) {\n let activities = initialActivities;\n\n for (;;) {\n const replied = activities.find(activity => activity.id === replyToId || activity.replyToId === replyToId);\n\n if (replied) {\n break;\n }\n\n const {\n payload: { activity }\n } = yield take(INCOMING_ACTIVITY);\n\n if (activity.id === replyToId) {\n break;\n }\n\n activities = yield select(activitiesSelector);\n }\n}\n\nfunction* queueIncomingActivity({ userID }: { userID: string }, ponyfill: GlobalScopePonyfill) {\n yield takeEveryAndSelect(\n QUEUE_INCOMING_ACTIVITY,\n activitiesSelector,\n function* queueIncomingActivity({ payload: { activity } }, initialActivities) {\n // This is for resolving an accessibility issue.\n // If the incoming activity has \"replyToId\" field, hold on it until the activity replied to is in the transcript, then release this one.\n const { replyToId } = activity;\n const initialBotActivities = initialActivities.filter(({ from: { role } }) => role === 'bot');\n\n // To speed up the first activity render time, we do not delay the first activity from the bot.\n // Even if it is the first activity from the bot, the bot might be \"replying\" to the \"conversationUpdate\" event.\n // Thus, the \"replyToId\" will always be there even it is the first activity in the conversation.\n if (replyToId && initialBotActivities.length) {\n // Either the activity replied to is in the transcript or after timeout.\n const result = yield race({\n _: waitForActivityId(replyToId, initialActivities),\n timeout: call(sleep, REPLY_TIMEOUT, ponyfill)\n });\n\n if ('timeout' in result) {\n console.warn(\n `botframework-webchat: Timed out while waiting for activity \"${replyToId}\" which activity \"${activity.id}\" is replying to.`,\n {\n activity,\n replyToId\n }\n );\n }\n }\n\n yield put(incomingActivity(activity));\n\n // Update suggested actions\n // TODO: [P3] We could put this logic inside reducer to minimize number of actions dispatched.\n const messageActivities = yield select(activitiesOfType('message'));\n const lastMessageActivity = messageActivities[messageActivities.length - 1];\n\n if (activityFromBot(lastMessageActivity)) {\n const { suggestedActions: { actions, to } = { actions: undefined, to: undefined } } = lastMessageActivity;\n\n // If suggested actions is not destined to anyone, or is destined to the user, show it.\n // In other words, if suggested actions is destined to someone else, don't show it.\n yield put(setSuggestedActions(to?.length && !to.includes(userID) ? null : actions));\n }\n }\n );\n}\n\nexport default function* queueIncomingActivitySaga(ponyfill: GlobalScopePonyfill) {\n yield whileConnected(queueIncomingActivity, ponyfill);\n}\n","export default activity => activity && activity.from.role === 'bot';\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { SEND_EVENT } from '../actions/sendEvent';\nimport postActivity from '../actions/postActivity';\nimport whileConnected from './effects/whileConnected';\n\nfunction* postActivityWithEvent({ payload: { name, value } }) {\n yield put(\n postActivity({\n name,\n type: 'event',\n value\n })\n );\n}\n\nfunction* sendEventToPostActivity() {\n yield takeEvery(({ payload, type }) => type === SEND_EVENT && payload.name, postActivityWithEvent);\n}\n\nexport default function* sendEventToPostActivitySaga() {\n yield whileConnected(sendEventToPostActivity);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\nimport mime from 'mime';\n\nimport { SEND_FILES } from '../actions/sendFiles';\nimport postActivity from '../actions/postActivity';\nimport whileConnected from './effects/whileConnected';\n\nconst getType = mime.getType.bind(mime);\n\nfunction* postActivityWithFiles({ payload: { files } }) {\n yield put(\n postActivity({\n attachments: [].map.call(files, ({ name, thumbnail, url }) => ({\n contentType: getType(name) || 'application/octet-stream',\n contentUrl: url,\n name,\n thumbnailUrl: thumbnail\n })),\n channelData: {\n attachmentSizes: [].map.call(files, ({ size }) => size)\n },\n type: 'message'\n })\n );\n}\n\nfunction* sendFilesToPostActivity() {\n yield takeEvery(({ payload, type }) => type === SEND_FILES && payload.files.length, postActivityWithFiles);\n}\n\nexport default function* sendFilesToPostActivitySaga() {\n yield whileConnected(sendFilesToPostActivity);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\nimport postActivity from '../actions/postActivity';\nimport { SEND_MESSAGE_BACK } from '../actions/sendMessageBack';\nimport whileConnected from './effects/whileConnected';\n\n// https://github.com/microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#message-back\nfunction* postActivityWithMessageBack({ payload: { displayText, text, value } }) {\n yield put(\n postActivity({\n channelData: {\n messageBack: {\n displayText\n }\n },\n text,\n type: 'message',\n value\n })\n );\n}\n\nfunction* sendMessageBackToPostActivity() {\n yield takeEvery(SEND_MESSAGE_BACK, postActivityWithMessageBack);\n}\n\nexport default function* sendMessageBackToPostActivitySaga() {\n yield whileConnected(sendMessageBackToPostActivity);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport postActivity from '../actions/postActivity';\nimport sendMessage, { SEND_MESSAGE } from '../actions/sendMessage';\nimport whileConnected from './effects/whileConnected';\n\nfunction* postActivityWithMessage({\n payload: { attachments = [], channelData, method, text }\n}: ReturnType<typeof sendMessage>) {\n yield put(\n postActivity(\n {\n attachments: attachments.map(({ blob, thumbnailURL }) => ({\n contentType: (blob instanceof File && blob.type) || 'application/octet-stream',\n contentUrl: URL.createObjectURL(blob),\n name: blob instanceof File ? blob.name : undefined,\n thumbnailUrl: thumbnailURL?.toString()\n })),\n channelData: {\n ...channelData,\n attachmentSizes: attachments.map(({ blob: { size } }) => size)\n },\n text: text || undefined,\n textFormat: 'plain',\n type: 'message'\n } as any, // TODO: Fix WebChatActivity. Currently, it only works with incoming activity, not outgoing.\n method\n )\n );\n}\n\nfunction* sendMessageToPostActivity() {\n yield takeEvery(\n ({ payload, type }) => type === SEND_MESSAGE && (payload.text || payload.attachments?.length),\n postActivityWithMessage\n );\n}\n\nexport default function* sendMessageToPostActivitySaga() {\n yield whileConnected(sendMessageToPostActivity);\n}\n","// This is for the ternary operator of text and value.\n/* eslint no-undefined: \"off\" */\n\nimport { put, takeEvery } from 'redux-saga/effects';\nimport postActivity from '../actions/postActivity';\nimport { SEND_POST_BACK } from '../actions/sendPostBack';\nimport whileConnected from './effects/whileConnected';\n\n// https://github.com/microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#post-back\nfunction* postActivityWithPostBack({ payload: { value } }) {\n yield put(\n postActivity({\n channelData: {\n postBack: true\n },\n text: typeof value === 'string' ? value : undefined,\n type: 'message',\n value: typeof value !== 'string' ? value : undefined\n })\n );\n}\n\nfunction* sendPostBackToPostActivity() {\n yield takeEvery(SEND_POST_BACK, postActivityWithPostBack);\n}\n\nexport default function* sendPostBackToPostActivitySaga() {\n yield whileConnected(sendPostBackToPostActivity);\n}\n","// We will revisit this logic in #2157 and should remove the following eslint ignore\n/* eslint require-atomic-updates: \"off\" */\n\nimport { call, cancel, put, select, take, takeLatest } from 'redux-saga/effects';\n\nimport { SET_SEND_BOX } from '../actions/setSendBox';\nimport { SET_SEND_TYPING_INDICATOR } from '../actions/setSendTypingIndicator';\nimport { POST_ACTIVITY } from '../actions/postActivity';\nimport emitTypingIndicator from '../actions/emitTypingIndicator';\nimport sendTypingIndicatorSelector from '../selectors/sendTypingIndicator';\nimport sleep from '../utils/sleep';\nimport whileConnected from './effects/whileConnected';\n\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type setSendTypingIndicator from '../actions/setSendTypingIndicator';\n\ntype SetSendTypingIndicatorAction = ReturnType<typeof setSendTypingIndicator>;\n\nconst SEND_INTERVAL = 3000;\n\nfunction takeSendTypingIndicator(value: boolean) {\n return take<SetSendTypingIndicatorAction>(\n // TODO: \"any\" should be replaced all known types in the system.\n ({ payload, type }: any) => type === SET_SEND_TYPING_INDICATOR && !payload.sendTypingIndicator === !value\n );\n}\n\nfunction* sendTypingIndicatorOnSetSendBox(_, ponyfill: GlobalScopePonyfill) {\n const { Date } = ponyfill;\n const sendTypingIndicator = yield select(sendTypingIndicatorSelector);\n\n if (!sendTypingIndicator) {\n yield takeSendTypingIndicator(true);\n }\n\n for (;;) {\n let lastSend = -Infinity;\n const task = yield takeLatest(\n ({ payload, type }) =>\n (type === SET_SEND_BOX && payload.text) ||\n // Stop sending pending typing indicator if the user has posted anything.\n // We send typing indicator in a debounce way (t = 0, t = 3000, t = 6000).\n // When the user type, and then post the activity at t = 1500, we still have a pending typing indicator at t = 3000.\n // This code is to cancel the typing indicator at t = 3000.\n (type === POST_ACTIVITY && payload.activity.type !== 'typing'),\n function* ({ payload, type }) {\n if (type === SET_SEND_BOX) {\n const interval = SEND_INTERVAL - Date.now() + lastSend;\n\n if (interval > 0) {\n yield call(sleep, interval, ponyfill);\n }\n\n yield put(emitTypingIndicator());\n\n lastSend = Date.now();\n } else if (payload.activity.type === 'message') {\n lastSend = -Infinity;\n }\n }\n );\n\n yield takeSendTypingIndicator(false);\n yield cancel(task);\n yield takeSendTypingIndicator(true);\n }\n}\n\nexport default function* sendTypingIndicatorOnSetSendBoxSaga(ponyfill: GlobalScopePonyfill) {\n yield whileConnected(sendTypingIndicatorOnSetSendBox, ponyfill);\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ sendTypingIndicator }: ReduxState): boolean => sendTypingIndicator;\n","import { put, select, takeEvery } from 'redux-saga/effects';\n\nimport { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport { WILL_START } from '../constants/DictateState';\nimport markActivity from '../actions/markActivity';\nimport setDictateState from '../actions/setDictateState';\nimport shouldSpeakIncomingActivitySelector from '../selectors/shouldSpeakIncomingActivity';\nimport speakableActivity from '../definitions/speakableActivity';\nimport stopDictate from '../actions/stopDictate';\nimport whileConnected from './effects/whileConnected';\n\nfunction* speakActivityAndStartDictateOnIncomingActivityFromOthers({ userID }) {\n yield takeEvery(\n ({ payload, type }) =>\n // In Direct Line, the \"role\" is not filled (yet), but we do know the user ID.\n // In Direct Line Speech, we do not know the user ID, but \"role\" is filled with \"bot\" or \"user\".\n // Here, we do two checks: the speakable activity must not have user ID, and must not have role === 'user'\n type === INCOMING_ACTIVITY && payload.activity.from.id !== userID && payload.activity.from.role !== 'user',\n function* ({ payload: { activity } }) {\n const shouldSpeakIncomingActivity = yield select(shouldSpeakIncomingActivitySelector);\n const shouldSpeak = speakableActivity(activity) && shouldSpeakIncomingActivity;\n\n if (\n shouldSpeak &&\n (activity.speak ||\n activity.text ||\n ~(activity.attachments || []).findIndex(({ content: { speak } = {} }) => speak))\n ) {\n yield put(markActivity(activity, 'speak', true));\n }\n\n if (shouldSpeak && activity.inputHint === 'expectingInput') {\n yield put(setDictateState(WILL_START));\n } else if (activity.inputHint === 'ignoringInput') {\n yield put(stopDictate());\n }\n }\n );\n}\n\nexport default function* speakActivityAndStartDictateOnIncomingActivityFromOthersSaga() {\n yield whileConnected(speakActivityAndStartDictateOnIncomingActivityFromOthers);\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ shouldSpeakIncomingActivity }: ReduxState): boolean => shouldSpeakIncomingActivity;\n","export default function speakableActivity(activity) {\n return activity && activity.from && activity.type === 'message';\n}\n","import { put, select, takeEvery } from 'redux-saga/effects';\n\nimport { MARK_ACTIVITY } from '../actions/markActivity';\nimport { of as activitiesOf } from '../selectors/activities';\nimport { SET_DICTATE_STATE } from '../actions/setDictateState';\nimport { WILL_START } from '../constants/DictateState';\nimport dictateStateSelector from '../selectors/dictateState';\nimport speakingActivity from '../definitions/speakingActivity';\nimport startDictate from '../actions/startDictate';\n\nfunction* startDictateOnSpeakComplete() {\n const speakingActivities = yield select(activitiesOf(speakingActivity));\n const dictateState = yield select(dictateStateSelector);\n\n if (dictateState === WILL_START && !speakingActivities.length) {\n yield put(startDictate());\n }\n}\n\n// TODO: [P4] We should turn this into a reducer instead\nexport default function* startDictateOnSpeakCompleteSaga() {\n yield takeEvery(({ type }) => type === MARK_ACTIVITY || type === SET_DICTATE_STATE, startDictateOnSpeakComplete);\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ dictateState }: ReduxState) => dictateState;\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\nimport startSpeakingActivity from '../actions/startSpeakingActivity';\nimport whileConnected from './effects/whileConnected';\n\nfunction* startSpeakActivityOnPostActivity() {\n yield takeEvery(\n ({ meta, payload, type }) =>\n type === POST_ACTIVITY_PENDING && meta.method === 'speech' && payload.activity.type === 'message',\n function* () {\n yield put(startSpeakingActivity());\n }\n );\n}\n\nexport default function* startSpeakActivityOnPostActivitySaga() {\n yield whileConnected(startSpeakActivityOnPostActivity);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\nimport stopDictate from '../actions/stopDictate';\nimport whileConnected from './effects/whileConnected';\n\nfunction* stopDictateOnCardAction() {\n // TODO: [P2] We should stop speech input when the user click on anything on a card, including open URL which doesn't generate postActivity\n // This functionality was not implemented in v3\n\n yield takeEvery(\n // Currently, there are no actions that are related to card input\n // For now, we are using POST_ACTIVITY of a \"message\" activity\n // In the future, if we have an action for card input, we should use that instead\n ({ payload, type }) => type === POST_ACTIVITY_PENDING && payload.activity.type === 'message',\n function* putStopDictate() {\n yield put(stopDictate());\n }\n );\n}\n\nexport default function* stopDictateOnCardActionSaga() {\n yield whileConnected(stopDictateOnCardAction);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\nimport { SET_SEND_BOX } from '../actions/setSendBox';\nimport stopSpeakingActivity from '../actions/stopSpeakingActivity';\nimport whileConnected from './effects/whileConnected';\n\nfunction* stopSpeakingActivityOnInput() {\n yield takeEvery(\n ({ meta, payload, type }) =>\n (type === SET_SEND_BOX && payload.text) ||\n // We want to stop speaking activity when the user click on a card action\n // But currently there are no actions generated out of a card action\n // So, right now, we are using best-effort by listening to POST_ACTIVITY_PENDING with a \"message\" event\n // We filter out speech because we will call startSpeakingActivity() for POST_ACTIVITY_PENDING dispatched by speech\n (type === POST_ACTIVITY_PENDING && meta.method !== 'speech' && payload.activity.type === 'message'),\n function* () {\n yield put(stopSpeakingActivity());\n }\n );\n}\n\nexport default function* stopSpeakingActivityOnInputSaga() {\n yield whileConnected(stopSpeakingActivityOnInput);\n}\n","import { put, select, takeEvery } from 'redux-saga/effects';\n\nimport sendMessage from '../actions/sendMessage';\nimport setSendBox from '../actions/setSendBox';\nimport setSendBoxAttachments from '../actions/setSendBoxAttachments';\nimport { SUBMIT_SEND_BOX } from '../actions/submitSendBox';\nimport sendBoxAttachmentsSelector from '../selectors/sendBoxAttachments';\nimport sendBoxValueSelector from '../selectors/sendBoxValue';\nimport whileConnected from './effects/whileConnected';\n\nfunction* submitSendBox() {\n yield takeEvery(SUBMIT_SEND_BOX, function* ({ payload: { channelData, method } }) {\n const attachments = yield select(sendBoxAttachmentsSelector);\n const sendBoxValue = yield select(sendBoxValueSelector);\n\n // TODO: [P2] If the trimmed value is empty, we should not send.\n // TODO: [P2] We should expose this logic (\"cannot send empty message\") to other components such as UI.\n if (attachments.length || sendBoxValue) {\n yield put(sendMessage(sendBoxValue.trim(), method, { attachments, channelData }));\n\n yield put(setSendBox(''));\n yield put(setSendBoxAttachments(Object.freeze([])));\n }\n });\n}\n\nexport default function* submitSendBoxSaga() {\n // TODO: [P2] We should expose this logic (\"send only when connected\") to other components such as UI.\n yield whileConnected(submitSendBox);\n}\n","import type { SendBoxAttachment } from '../types/SendBoxAttachment';\nimport type { ReduxState } from '../types/internal/ReduxState';\n\nexport default function sendBoxAttachments({ sendBoxAttachments }: ReduxState): readonly SendBoxAttachment[] {\n return sendBoxAttachments;\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ sendBoxValue }: ReduxState): string => sendBoxValue;\n","import { lazy, parse, string, union, value, type ObjectEntries, type StringSchema } from 'valibot';\n\nimport orgSchemaProperty from './private/orgSchemaProperty';\nimport { project, type Project } from './Project';\nimport { thing, type Thing } from './Thing';\n\n/**\n * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role.\n *\n * See also [blog post](http://blog.schema.org/2014/04/announcing-schemaorg-actions.html) and [Actions overview document](https://schema.org/docs/actions.html).\n *\n * This is partial implementation of https://schema.org/Action.\n *\n * @see https://schema.org/Action\n */\nexport type Action = Thing & {\n /**\n * Indicates the current disposition of the Action.\n *\n * @see https://schema.org/actionStatus\n */\n actionStatus?:\n | 'ActiveActionStatus'\n | 'CompletedActionStatu'\n | 'FailedActionStatus'\n | 'PotentialActionStatus'\n | undefined;\n\n /**\n * The service provider, service operator, or service performer; the goods producer. Another party (a seller) may offer those services or goods on behalf of the provider. A provider may also serve as the seller. Supersedes [carrier](https://schema.org/carrier).\n *\n * @see https://schema.org/provider\n */\n provider?: Project | undefined;\n};\n\nexport const action = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n thing({\n actionStatus: orgSchemaProperty(\n union([\n string([value('ActiveActionStatus')]) as StringSchema<'ActiveActionStatus'>,\n string([value('CompletedActionStatus')]) as StringSchema<'CompletedActionStatus'>,\n string([value('FailedActionStatus')]) as StringSchema<'FailedActionStatus'>,\n string([value('PotentialActionStatus')]) as StringSchema<'PotentialActionStatus'>\n ])\n ),\n provider: orgSchemaProperty(lazy(() => project())),\n\n ...entries\n });\n\nexport const parseAction = (data: unknown): Action => parse(action(), data);\n","import { array, fallback, optional, transform, union, type BaseSchema } from 'valibot';\n\nconst orgSchemaProperty = <T extends BaseSchema>(schema: T) =>\n fallback(optional(union([transform(array(schema), array => array[0]), schema])), undefined);\n\nexport default orgSchemaProperty;\n","import { parse, string, type ObjectEntries } from 'valibot';\n\nimport { thing, type Thing } from './Thing';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\nexport const project = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n thing({\n slogan: orgSchemaProperty(string()),\n\n ...entries\n });\n\n/**\n * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures.\n *\n * This is partial implementation of https://schema.org/Project.\n *\n * @see https://schema.org/Project\n */\nexport type Project = Thing & {\n /**\n * A slogan or motto associated with the item.\n *\n * @see https://schema.org/slogan\n */\n slogan?: string | undefined;\n};\n\nexport const parseProject = (data: unknown): Project => parse(project(), data);\n","import { type EmptyObject } from 'type-fest';\nimport { lazy, object, optional, parse, string, unknown, value, type ObjectEntries, type StringSchema } from 'valibot';\n\nimport { action, type Action } from './Action';\nimport orgSchemaProperties from './private/orgSchemaProperties';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\n/**\n * The most generic type of item.\n *\n * This is partial implementation of https://schema.org/Thing.\n *\n * @see https://schema.org/Thing\n */\nexport type Thing = {\n '@context'?: 'https://schema.org' | undefined;\n '@id'?: string | undefined;\n '@type': string;\n\n /**\n * An additional type for the item, typically used for adding more specific types from external vocabularies in microdata syntax. This is a relationship between something and a class that the thing is in. Typically the value is a URI-identified RDF class, and in this case corresponds to the use of rdf:type in RDF. Text values can be used sparingly, for cases where useful information can be added without their being an appropriate schema to reference. In the case of text values, the class label should follow the schema.org [style guide](https://schema.org/docs/styleguide.html).\n *\n * @see https://schema.org/additionalType\n */\n additionalType?: string | undefined;\n\n /**\n * An alias for the item.\n *\n * @see https://schema.org/alternateName\n */\n alternateName?: string | undefined;\n\n /**\n * A description of the item.\n *\n * @see https://schema.org/description\n */\n description?: string | undefined;\n\n /**\n * The name of the item.\n *\n * @see https://schema.org/name\n */\n name?: string | undefined;\n\n /**\n * Indicates a potential Action, which describes an idealized action in which this thing would play an 'object' role.\n *\n * @see https://schema.org/potentialAction\n */\n potentialAction?: readonly Action[] | undefined;\n\n /**\n * URL of the item.\n *\n * @see https://schema.org/url\n */\n url?: string | undefined;\n};\n\nconst thingEntries = {\n '@context': optional(string([value('https://schema.org')]) as StringSchema<'https://schema.org'>),\n '@id': optional(string()),\n '@type': string(),\n\n additionalType: orgSchemaProperty(string()),\n alternateName: orgSchemaProperty(string()),\n description: orgSchemaProperty(string()),\n name: orgSchemaProperty(string()),\n potentialAction: orgSchemaProperties(lazy(() => action())),\n url: orgSchemaProperty(string())\n};\n\nexport const thing = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n object(\n {\n ...thingEntries,\n ...entries\n },\n // Forward compatibility is the reason why we use unknown() here and not adhere to JSON-LD which drop unknown fields.\n //\n // Example:\n // - CreativeWork.editor must be type of Person (or any of its subtypes, Patient)\n // - Without unknown(), when we parse the CreativeWork, we will drop Patient.diagnosis\n // - That means, CreativeWork.editor.diagnosis will be unset despite CreativeWork.editor is of type Patient\n //\n // We can drop unknown() if there is a way to keep CreativeWork.editor.diagnosis.\n // It is okay to drop future/unsupported properties. But not today/supported properties.\n unknown()\n );\n\nexport const parseThing = (data: unknown): Thing => parse(thing<EmptyObject>(), data);\n","import {\n array,\n fallback,\n parse,\n transform,\n type ArraySchema,\n type BaseSchema,\n type FallbackInfo,\n type Output,\n type UndefinedSchema\n} from 'valibot';\n\nimport orgSchemaProperty from './orgSchemaProperty';\n\nconst singularToArray = <T extends BaseSchema>(schema: T): ArraySchema<T> | UndefinedSchema =>\n fallback<ArraySchema<T> | UndefinedSchema, (info?: FallbackInfo) => Output<T>>(\n transform(array(schema), value => value.filter(value => typeof value !== 'undefined')),\n value => (value?.input ? [parse(schema, value?.input)] : undefined)\n );\n\nexport default function orgSchemaProperties<T extends BaseSchema>(schema: T) {\n return singularToArray(orgSchemaProperty(schema));\n}\n","import { lazy, number, parse, string, union, type ObjectEntries } from 'valibot';\n\nimport { creativeWork, type CreativeWork } from './CreativeWork';\nimport { project, type Project } from './Project';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\n/**\n * A [Claim](https://schema.org/Claim) in Schema.org represents a specific, factually-oriented claim that could be the [itemReviewed](https://schema.org/itemReviewed) in a [ClaimReview](https://schema.org/ClaimReview). The content of a claim can be summarized with the [text](https://schema.org/text) property. Variations on well known claims can have their common identity indicated via [sameAs](https://schema.org/sameAs) links, and summarized with a name. Ideally, a [Claim](https://schema.org/Claim) description includes enough contextual information to minimize the risk of ambiguity or inclarity. In practice, many claims are better understood in the context in which they appear or the interpretations provided by claim reviews.\n *\n * Beyond [ClaimReview](https://schema.org/ClaimReview), the Claim type can be associated with related creative works - for example a [ScholarlyArticle](https://schema.org/ScholarlyArticle) or [Question](https://schema.org/Question) might be about some [Claim](https://schema.org/Claim).\n *\n * This is partial implementation of https://schema.org/Claim.\n *\n * @see https://schema.org/Claim.\n */\nexport type Claim = CreativeWork & {\n /**\n * Indicates an occurrence of a [Claim](https://schema.org/Claim) in some [CreativeWork](https://schema.org/CreativeWork).\n *\n * @see https://schema.org/appearance.\n */\n appearance?: CreativeWork | undefined;\n\n /**\n * For a [Claim](https://schema.org/Claim) interpreted from [MediaObject](https://schema.org/MediaObject) content sed to indicate a claim contained, implied or refined from the content of a [MediaObject](https://schema.org/MediaObject).\n *\n * @see https://schema.org/claimInterpreter.\n */\n claimInterpreter?: Project | undefined;\n\n /**\n * The position of an item in a series or sequence of items.\n *\n * @see https://schema.org/position.\n */\n position?: number | string;\n};\n\nexport const claim = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n creativeWork({\n appearance: orgSchemaProperty(lazy(() => creativeWork())),\n claimInterpreter: orgSchemaProperty(lazy(() => project())),\n position: orgSchemaProperty(union([number(), string()])),\n\n ...entries\n });\n\nexport const parseClaim = (data: unknown): Claim => parse(claim(), data);\n","import { lazy, parse, string, union, type ObjectEntries } from 'valibot';\n\nimport { definedTerm, type DefinedTerm } from './DefinedTerm';\nimport orgSchemaProperties from './private/orgSchemaProperties';\nimport orgSchemaProperty from './private/orgSchemaProperty';\nimport { thing, type Thing } from './Thing';\n\n/**\n * The most generic kind of creative work, including books, movies, photographs, software programs, etc.\n *\n * This is partial implementation of https://schema.org/CreativeWork.\n *\n * @see https://schema.org/CreativeWork\n */\n// Due to limitations of TypeScript, when using valibot.lazy(), the output type must be explicitly set.\nexport type CreativeWork = Thing & {\n /**\n * An abstract is a short description that summarizes a [CreativeWork](https://schema.org/CreativeWork).\n *\n * @see https://schema.org/abstract\n */\n abstract?: string | undefined;\n\n /**\n * The author of this content or rating. Please note that author is special in that HTML 5 provides a special mechanism for indicating authorship via the rel tag. That is equivalent to this and may be used interchangeably.\n *\n * @see https://schema.org/author\n */\n author?: string | undefined;\n\n /**\n * A citation or reference to another creative work, such as another publication, web page, scholarly article, etc.\n *\n * @see https://schema.org/citation\n */\n citation?: readonly CreativeWork[] | undefined;\n\n /**\n * Keywords or tags used to describe some item. Multiple textual entries in a keywords list are typically delimited by commas, or by repeating the property.\n *\n * @see https://schema.org/keywords\n */\n keywords?: readonly (DefinedTerm | string)[] | undefined;\n\n /**\n * A pattern that something has, for example 'polka dot', 'striped', 'Canadian flag'. Values are typically expressed as text, although links to controlled value schemes are also supported.\n *\n * @see https://schema.org/pattern\n */\n pattern?: DefinedTerm | undefined;\n\n /**\n * The textual content of this CreativeWork.\n *\n * @see https://schema.org/text\n */\n text?: string | undefined;\n\n /**\n * The schema.org [usageInfo](https://schema.org/usageInfo) property indicates further information about a [CreativeWork](https://schema.org/CreativeWork). This property is applicable both to works that are freely available and to those that require payment or other transactions. It can reference additional information, e.g. community expectations on preferred linking and citation conventions, as well as purchasing details. For something that can be commercially licensed, usageInfo can provide detailed, resource-specific information about licensing options.\n *\n * This property can be used alongside the license property which indicates license(s) applicable to some piece of content. The usageInfo property can provide information about other licensing options, e.g. acquiring commercial usage rights for an image that is also available under non-commercial creative commons licenses.\n */\n usageInfo?: CreativeWork | undefined;\n};\n\nexport const creativeWork = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n thing({\n // For forward compatibility, we did not enforce @type must be \"CreativeWork\" or any other subtypes.\n // In future, if Schema.org introduced a new subtype of CreativeWork, we should still able to parse that one as a CreativeWork.\n\n abstract: orgSchemaProperty(string()),\n author: orgSchemaProperties(string()),\n citation: orgSchemaProperties(lazy(() => creativeWork())),\n keywords: orgSchemaProperties(union([lazy(() => definedTerm()), string()])),\n pattern: orgSchemaProperty(lazy(() => definedTerm())),\n text: orgSchemaProperty(string()),\n usageInfo: orgSchemaProperty(lazy(() => creativeWork())),\n\n ...entries\n });\n\nexport const parseCreativeWork = (data: unknown): CreativeWork => parse(creativeWork(), data);\n","import { parse, string, type ObjectEntries } from 'valibot';\n\nimport { thing, type Thing } from './Thing';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\nexport const definedTerm = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n thing({\n inDefinedTermSet: orgSchemaProperty(string()),\n termCode: orgSchemaProperty(string()),\n\n ...entries\n });\n\n/**\n * A word, name, acronym, phrase, etc. with a formal definition. Often used in the context of category or subject classification, glossaries or dictionaries, product or creative work types, etc. Use the name property for the term being defined, use termCode if the term has an alpha-numeric code allocated, use description to provide the definition of the term.\n *\n * This is partial implementation of https://schema.org/DefinedTerm.\n *\n * @see https://schema.org/DefinedTerm\n */\nexport type DefinedTerm = Thing & {\n /**\n * A [DefinedTermSet](https://schema.org/DefinedTermSet) that contains this term.\n *\n * @see https://schema.org/inDefinedTermSet\n */\n inDefinedTermSet?: string | undefined;\n\n /**\n * A code that identifies this [DefinedTerm](https://schema.org/DefinedTerm) within a [DefinedTermSet](https://schema.org/DefinedTermSet).\n *\n * @see https://schema.org/termCode\n */\n termCode?: string | undefined;\n};\n\nexport const parseDefinedTerm = (data: unknown): DefinedTerm => parse(definedTerm(), data);\n","import { parse, string, type ObjectEntries } from 'valibot';\n\nimport { action, type Action } from './Action';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\n/**\n * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role.\n *\n * See also [blog post](http://blog.schema.org/2014/04/announcing-schemaorg-actions.html) and [Actions overview document](https://schema.org/docs/actions.html).\n *\n * This is partial implementation of https://schema.org/Action.\n *\n * @see https://schema.org/Action\n */\nexport type VoteAction = Action & {\n /**\n * A sub property of object. The options subject to this action. Supersedes [option](https://schema.org/option).\n *\n * @see https://schema.org/VoteAction\n */\n actionOption?: string | undefined;\n};\n\nexport const voteAction = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n action({\n actionOption: orgSchemaProperty(string()),\n\n ...entries\n });\n\nexport const parseVoteAction = (data: unknown): VoteAction => parse(voteAction(), data);\n","import { type WebChatActivity } from '../types/WebChatActivity';\nimport { parseCreativeWork, type CreativeWork } from '../types/external/OrgSchema/CreativeWork';\nimport { parseThing } from '../types/external/OrgSchema/Thing';\n\nexport default function getOrgSchemaMessage(\n graph: readonly WebChatActivity['entities'][0][]\n): CreativeWork | undefined {\n const messageEntity = (graph || []).find(entity => {\n const isThing = entity.type?.startsWith('https://schema.org/');\n\n if (isThing) {\n const thing = parseThing(entity);\n\n return thing['@id'] === '';\n }\n });\n\n const message = messageEntity && parseCreativeWork(messageEntity);\n\n return message && parseCreativeWork(message);\n}\n","export default function onErrorResumeNext<T>(fn: () => T): T | undefined;\nexport default function onErrorResumeNext<T, U = T>(fn: () => T, defaultValue: U): T | U;\n\n/**\n * Calls the function and returns its return value.\n *\n * If the function failed, return default value if specified, otherwise, `undefined`.\n */\nexport default function onErrorResumeNext<T>(fn: () => T, defaultValue?: T): T | undefined {\n try {\n return fn();\n } catch (error) {\n return defaultValue;\n }\n}\n","export default function singleToArray<T>(singleOrArray: T | T[]): T[] {\n return singleOrArray ? (Array.isArray(singleOrArray) ? singleOrArray : [singleOrArray]) : [];\n}\n","export default function once(fn: () => void): () => void {\n let done;\n\n return () => {\n if (!done) {\n fn();\n done = 1;\n }\n };\n}\n","import once from './once';\n\nexport default function warnOnce(message: string): () => void {\n return once(() => console.warn(`botframework-webchat: ${message}.`));\n}\n","import clearSuggestedActions from './actions/clearSuggestedActions';\nimport connect from './actions/connect';\nimport disconnect from './actions/disconnect';\nimport dismissNotification from './actions/dismissNotification';\nimport emitTypingIndicator from './actions/emitTypingIndicator';\nimport markActivity from './actions/markActivity';\nimport postActivity from './actions/postActivity';\nimport sendEvent from './actions/sendEvent';\nimport sendFiles from './actions/sendFiles';\nimport sendMessage from './actions/sendMessage';\nimport sendMessageBack from './actions/sendMessageBack';\nimport sendPostBack from './actions/sendPostBack';\nimport setDictateInterims from './actions/setDictateInterims';\nimport setDictateState from './actions/setDictateState';\nimport setLanguage from './actions/setLanguage';\nimport setNotification from './actions/setNotification';\nimport setSendBox from './actions/setSendBox';\nimport setSendBoxAttachments from './actions/setSendBoxAttachments';\nimport setSendTimeout from './actions/setSendTimeout';\nimport setSendTypingIndicator from './actions/setSendTypingIndicator';\nimport startDictate from './actions/startDictate';\nimport startSpeakingActivity from './actions/startSpeakingActivity';\nimport stopDictate from './actions/stopDictate';\nimport stopSpeakingActivity from './actions/stopSpeakingActivity';\nimport submitSendBox from './actions/submitSendBox';\nimport * as ActivityClientState from './constants/ActivityClientState';\nimport * as DictateState from './constants/DictateState';\nimport createStore, {\n withDevTools as createStoreWithDevTools,\n withOptions as createStoreWithOptions\n} from './createStore';\nimport OneOrMany from './types/OneOrMany';\nimport { parseAction } from './types/external/OrgSchema/Action';\nimport { parseClaim } from './types/external/OrgSchema/Claim';\nimport { parseCreativeWork } from './types/external/OrgSchema/CreativeWork';\nimport { parseDefinedTerm } from './types/external/OrgSchema/DefinedTerm';\nimport { parseProject } from './types/external/OrgSchema/Project';\nimport { parseThing } from './types/external/OrgSchema/Thing';\nimport { parseVoteAction } from './types/external/OrgSchema/VoteAction';\nimport getOrgSchemaMessage from './utils/getOrgSchemaMessage';\nimport isForbiddenPropertyName from './utils/isForbiddenPropertyName';\nimport onErrorResumeNext from './utils/onErrorResumeNext';\nimport singleToArray from './utils/singleToArray';\nimport warnOnce from './utils/warnOnce';\n\nimport type { GlobalScopePonyfill } from './types/GlobalScopePonyfill';\nimport type { SendBoxAttachment } from './types/SendBoxAttachment';\nimport type { WebChatActivity } from './types/WebChatActivity';\nimport type { DirectLineActivity } from './types/external/DirectLineActivity';\nimport type { DirectLineAnimationCard } from './types/external/DirectLineAnimationCard';\nimport type { DirectLineAttachment } from './types/external/DirectLineAttachment';\nimport type { DirectLineAudioCard } from './types/external/DirectLineAudioCard';\nimport type { DirectLineCardAction } from './types/external/DirectLineCardAction';\nimport type { DirectLineHeroCard } from './types/external/DirectLineHeroCard';\nimport type { DirectLineJSBotConnection } from './types/external/DirectLineJSBotConnection';\nimport type { DirectLineOAuthCard } from './types/external/DirectLineOAuthCard';\nimport type { DirectLineReceiptCard } from './types/external/DirectLineReceiptCard';\nimport type { DirectLineSignInCard } from './types/external/DirectLineSignInCard';\nimport type { DirectLineSuggestedAction } from './types/external/DirectLineSuggestedAction';\nimport type { DirectLineThumbnailCard } from './types/external/DirectLineThumbnailCard';\nimport type { DirectLineVideoCard } from './types/external/DirectLineVideoCard';\nimport type { Observable } from './types/external/Observable';\nimport type { Action as OrgSchemaAction } from './types/external/OrgSchema/Action';\nimport type { Claim as OrgSchemaClaim } from './types/external/OrgSchema/Claim';\nimport type { CreativeWork as OrgSchemaCreativeWork } from './types/external/OrgSchema/CreativeWork';\nimport type { DefinedTerm as OrgSchemaDefinedTerm } from './types/external/OrgSchema/DefinedTerm';\nimport type { Project as OrgSchemaProject } from './types/external/OrgSchema/Project';\nimport type { Thing as OrgSchemaThing } from './types/external/OrgSchema/Thing';\n\nconst Constants = { ActivityClientState, DictateState };\nconst buildTool = process.env.build_tool;\nconst moduleFormat = process.env.module_format;\nconst version = process.env.npm_package_version;\n\nconst buildInfo = { buildTool, moduleFormat, version };\n\nexport {\n Constants,\n buildInfo,\n clearSuggestedActions,\n connect,\n createStore,\n createStoreWithDevTools,\n createStoreWithOptions,\n disconnect,\n dismissNotification,\n emitTypingIndicator,\n getOrgSchemaMessage,\n isForbiddenPropertyName,\n markActivity,\n moduleFormat,\n onErrorResumeNext,\n parseAction,\n parseClaim,\n parseCreativeWork,\n parseDefinedTerm,\n parseProject,\n parseThing,\n parseVoteAction,\n postActivity,\n sendEvent,\n sendFiles,\n sendMessage,\n sendMessageBack,\n sendPostBack,\n setDictateInterims,\n setDictateState,\n setLanguage,\n setNotification,\n setSendBox,\n setSendBoxAttachments,\n setSendTimeout,\n setSendTypingIndicator,\n singleToArray,\n startDictate,\n startSpeakingActivity,\n stopDictate,\n stopSpeakingActivity,\n submitSendBox,\n version,\n warnOnce\n};\n\nexport type {\n DirectLineActivity,\n DirectLineAnimationCard,\n DirectLineAttachment,\n DirectLineAudioCard,\n DirectLineCardAction,\n DirectLineHeroCard,\n DirectLineJSBotConnection,\n DirectLineOAuthCard,\n DirectLineReceiptCard,\n DirectLineSignInCard,\n DirectLineSuggestedAction,\n DirectLineThumbnailCard,\n DirectLineVideoCard,\n GlobalScopePonyfill,\n Observable,\n OneOrMany,\n OrgSchemaAction,\n OrgSchemaClaim,\n OrgSchemaCreativeWork,\n OrgSchemaDefinedTerm,\n OrgSchemaProject,\n OrgSchemaThing,\n SendBoxAttachment,\n WebChatActivity\n};\n"],"mappings":"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","names":["CLEAR_SUGGESTED_ACTIONS","clearSuggestedActions","CONNECT","CONNECT_FULFILLED","CONNECT_FULFILLING","CONNECT_PENDING","CONNECT_REJECTED","CONNECT_STILL_PENDING","connect","directLine","userID","username","DISCONNECT","DISCONNECT_PENDING","DISCONNECT_REJECTED","DISCONNECT_FULFILLED","disconnect","DISMISS_NOTIFICATION","dismissNotification","id","dismissNotification_default","EMIT_TYPING_INDICATOR","emitTypingIndicator","MARK_ACTIVITY","markActivity","activityID","name","value","markActivity_default","POST_ACTIVITY","POST_ACTIVITY_FULFILLED","POST_ACTIVITY_IMPEDED","POST_ACTIVITY_PENDING","POST_ACTIVITY_REJECTED","postActivity","activity","method","postActivity_default","SEND_EVENT","sendEvent","name","value","SEND_FILES","sendFiles","files","SEND_MESSAGE","sendMessage","text","method","attachments","channelData","SEND_MESSAGE_BACK","sendMessageback","value","text","displayText","SEND_POST_BACK","sendPostback","value","SET_DICTATE_INTERIMS","setDictateInterims","dictateInterims","SET_DICTATE_STATE","setDictateState","dictateState","SET_LANGUAGE","setLanguage","language","random","uniqueID","SET_NOTIFICATION","setNotification","alt","data","id","level","message","uniqueID","SET_SEND_BOX","setSendBox","text","SET_SEND_BOX_ATTACHMENTS","setSendBoxAttachments","attachments","SET_SEND_TIMEOUT","setSendTimeout","sendTimeout","SET_SEND_TYPING_INDICATOR","setSendTypingIndicator","value","START_DICTATE","startDictate","START_SPEAKING_ACTIVITY","startSpeakingActivity","STOP_DICTATE","stopDictate","STOP_SPEAKING_ACTIVITY","stopSpeakingActivity","SUBMIT_SEND_BOX","submitSendBox","method","channelData","ActivityClientState_exports","__export","SENDING","SEND_FAILED","SENT","DictateState_exports","__export","DICTATING","IDLE","STARTING","STOPPING","WILL_START","applyMiddleware","createReduxStore","composeWithDevTools","createSagaMiddleware","combineReducers","RECONNECT","RECONNECT_FULFILLED","RECONNECT_FULFILLING","RECONNECT_PENDING","RECONNECT_REJECTED","SAGA_ERROR","sagaError","DEFAULT_STATE","connectivityStatus","state","type","meta","CONNECT_PENDING","RECONNECT_PENDING","CONNECT_FULFILLED","RECONNECT_FULFILLED","CONNECT_REJECTED","CONNECT_STILL_PENDING","DISCONNECT_FULFILLED","SAGA_ERROR","updateIn","DELETE_ACTIVITY","INCOMING_ACTIVITY","incomingActivity","activity","incomingActivity_default","SENDING","SEND_FAILED","SENT","DEFAULT_STATE","DIRECT_LINE_PLACEHOLDER_URL","getClientActivityID","activity","findByClientActivityID","clientActivityID","patchActivity","lastActivity","Date","updateIn","contentUrl","sequenceId","upsertActivityWithSort","activities","nextActivity","ponyfill","nextClientActivityID","nextSequenceId","nextActivities","id","indexToInsert","createActivitiesReducer","state","action","DELETE_ACTIVITY","MARK_ACTIVITY","payload","POST_ACTIVITY_PENDING","SENDING","POST_ACTIVITY_IMPEDED","SEND_FAILED","POST_ACTIVITY_REJECTED","POST_ACTIVITY_FULFILLED","SENT","INCOMING_ACTIVITY","existingActivity","sendStatus","createInternalReducer","ponyfill","updateIn","FORBIDDEN_PROPERTY_NAMES","getForbiddenPropertyNames","isForbiddenPropertyName","propertyName","DEFAULT_STATE","createNotificationsReducer","Date","state","action","type","now","DISMISS_NOTIFICATION","updateIn","SAGA_ERROR","SET_NOTIFICATION","alt","data","id","level","message","isForbiddenPropertyName","notification","updateIn","DEFAULT_STATE","createLastTypingReducer","Date","state","payload","type","INCOMING_ACTIVITY","POST_ACTIVITY_PENDING","id","name","role","activityType","now","updateIn","at","DEFAULT_STATE","dictateInterims","state","payload","type","SET_DICTATE_INTERIMS","DEFAULT_STATE","dictateState","state","payload","type","SET_DICTATE_STATE","START_DICTATE","STOP_DICTATE","DEFAULT_STATE","language","state","payload","type","SET_LANGUAGE","CONNECTION_STATUS_UPDATE","connectionStatusUpdate","connectionStatus","DEFAULT_STATE","readyState","state","payload","type","CONNECTION_STATUS_UPDATE","SET_REFERENCE_GRAMMAR_ID","setReferenceGrammarID","referenceGrammarID","DEFAULT_STATE","referenceGrammarID","state","payload","type","SET_REFERENCE_GRAMMAR_ID","DEFAULT_STATE","sendBoxAttachments","state","payload","type","SET_SEND_BOX_ATTACHMENTS","DEFAULT_STATE","sendBoxValue","state","payload","type","SET_SEND_BOX","DEFAULT_STATE","sendTimeout","state","payload","type","SET_SEND_TIMEOUT","DEFAULT_STATE","sendTypingIndicator","state","payload","type","SET_SEND_TYPING_INDICATOR","shouldSpeakIncomingActivity","state","type","START_SPEAKING_ACTIVITY","STOP_SPEAKING_ACTIVITY","EMPTY_ARRAY","SET_SUGGESTED_ACTIONS","setSuggestedActions","suggestedActions","DEFAULT_STATE","suggestedActions","state","payload","type","SET_SUGGESTED_ACTIONS","CLEAR_SUGGESTED_ACTIONS","createReducer","ponyfill","combineReducers","createActivitiesReducer","connectivityStatus","dictateInterims","dictateState","createInternalReducer","language","createNotificationsReducer","readyState","referenceGrammarID","sendBoxAttachments","sendBoxValue","sendTimeout","sendTypingIndicator","shouldSpeakIncomingActivity","suggestedActions","createLastTypingReducer","fork","put","takeEvery","call","cancel","fork","take","whileConnectedEffect","fn","args","call","userID","username","directLine","take","CONNECT_FULFILLING","RECONNECT_FULFILLING","task","fork","DISCONNECT_PENDING","RECONNECT_PENDING","cancel","clearSuggestedActions","put","setSuggestedActions","clearSuggestedActionsOnPostActivity","takeEvery","payload","type","POST_ACTIVITY_PENDING","clearSuggestedActionsOnPostActivitySaga","whileConnectedEffect","call","put","takeLatest","createDeferred","createPromiseQueue","deferred","queue","value","resolve","CONNECTIVITY_STATUS_NOTIFICATION_ID","subscribeToPromiseQueue","observable","push","shift","createPromiseQueue","subscription","connectionStatusToNotification","directLine","unsubscribe","reconnecting","call","put","setNotification","connectionStatusToNotificationSaga_default","takeLatest","CONNECT","put","call","observeEachEffect","observable","saga","call","queue","createPromiseQueue","subscription","result","observeConnectionStatus","directLine","observeEachEffect","connectionStatus","put","connectionStatusUpdate","setReferenceGrammarID","connectionStatusUpdateSaga","whileConnectedEffect","call","cancel","cancelled","fork","put","race","take","jwtDecode","fork","put","forkPutEffect","actions","action","UPDATE_CONNECTION_STATUS","updateConnectionStatus","connectionStatus","CONNECTING","ONLINE","UNINITIALIZED","randomUserID","uniqueID","observeAndPutConnectionStatusUpdate","directLine","connectionStatusQueue","createPromiseQueue","connectionStatusSubscription","connectionStatus","call","put","updateConnectionStatus","rectifyUserID","userIDFromAction","token","userIDFromToken","jwtDecode","result","connectSaga","activitySubscription","unsubscribeActivity","take","UPDATE_CONNECTION_STATUS","err","cancelled","reconnectSaga","runAsyncEffect","type","meta","payload","callEffectFactory","forkPutEffect","takeDisconnectAsError","DISCONNECT","runAsyncEffectUntilDisconnect","baseAction","race","connectSaga_default","username","CONNECT","updateConnectionStatusTask","fork","rectifiedUserID","disconnectMeta","endDirectLine","RECONNECT","error","cancel","DISCONNECT_PENDING","DISCONNECT_FULFILLED","call","put","race","take","sleep","interval","ponyfill","resolve","SLOW_CONNECTION_AFTER","detectSlowConnectionSaga","ponyfill","take","CONNECT_PENDING","RECONNECT_PENDING","race","CONNECT_FULFILLED","RECONNECT_FULFILLED","CONNECT_REJECTED","RECONNECT_REJECTED","call","sleep","put","CONNECT_STILL_PENDING","put","takeEvery","postTypingActivity","put","postActivity_default","emitTypingActivityToPostActivity","takeEvery","type","EMIT_TYPING_INDICATOR","emitTypingActivityToPostActivitySaga","whileConnectedEffect","put","select","takeEvery","activities","of","predicate","state","ofType","targetType","of","type","activities_default","activities","speakingActivity","activity","markAllAsSpoken","speakingActivities","select","of","speakingActivity","activity","put","markActivity_default","markAllAsSpokenOnStopSpeakActivitySaga","takeEvery","STOP_SPEAKING_ACTIVITY","put","updateIn","QUEUE_INCOMING_ACTIVITY","queueIncomingActivity","activity","PASSTHRU_FN","value","patchActivityWithFromRole","activity","userID","updateIn","patchNullAsUndefined","name","patchFromName","channelId","from","observeActivity","directLine","observeEachEffect","put","queueIncomingActivity","observeActivitySaga","whileConnectedEffect","all","call","cancelled","put","race","select","take","takeEvery","pad","value","count","stringValue","dateToLocaleISOString","date","timezoneOffset","timezoneSign","absoluteTimezoneOffset","deleteKey","map","keys","nextMap","key","isForbiddenPropertyName","language_default","language","call","observeOnceEffect","observable","subscription","resolve","reject","sendTimeout_default","sendTimeout","HARD_SEND_TIMEOUT","postActivity","directLine","userID","username","numActivitiesPosted","method","activity","ponyfill","attachments","clientActivityID","uniqueID","locale","select","language_default","localTimeZone","now","outgoingActivity","deleteKey","dateToLocaleISOString","contentType","contentUrl","name","thumbnailUrl","meta","put","POST_ACTIVITY_PENDING","echoed","echoBackCall","call","take","INCOMING_ACTIVITY","sendTimeout","sendTimeout_default","echoBack","race","all","observeOnceEffect","sleep","POST_ACTIVITY_IMPEDED","POST_ACTIVITY_FULFILLED","err","POST_ACTIVITY_REJECTED","cancelled","postActivitySaga","whileConnectedEffect","takeEvery","POST_ACTIVITY","action","call","cancelled","fork","put","race","select","take","activityFromBot_default","activity","REPLY_TIMEOUT","takeEveryAndSelect","actionType","selector","fn","cancelled","action","take","state","select","fork","waitForActivityId","replyToId","initialActivities","activities","activity","INCOMING_ACTIVITY","activities_default","queueIncomingActivity","userID","ponyfill","QUEUE_INCOMING_ACTIVITY","initialBotActivities","role","race","call","sleep","put","incomingActivity_default","messageActivities","ofType","lastMessageActivity","activityFromBot_default","actions","to","setSuggestedActions","queueIncomingActivitySaga","whileConnectedEffect","put","takeEvery","postActivityWithEvent","name","value","put","postActivity_default","sendEventToPostActivity","takeEvery","payload","type","SEND_EVENT","sendEventToPostActivitySaga","whileConnectedEffect","put","takeEvery","mime","getType","mime","postActivityWithFiles","files","put","postActivity_default","name","thumbnail","url","size","sendFilesToPostActivity","takeEvery","payload","type","SEND_FILES","sendFilesToPostActivitySaga","whileConnectedEffect","put","takeEvery","postActivityWithMessageBack","displayText","text","value","put","postActivity_default","sendMessageBackToPostActivity","takeEvery","SEND_MESSAGE_BACK","sendMessageBackToPostActivitySaga","whileConnectedEffect","put","takeEvery","postActivityWithMessage","attachments","channelData","method","text","put","postActivity_default","blob","thumbnailURL","size","sendMessageToPostActivity","takeEvery","payload","type","SEND_MESSAGE","sendMessageToPostActivitySaga","whileConnectedEffect","put","takeEvery","postActivityWithPostBack","value","put","postActivity_default","sendPostBackToPostActivity","takeEvery","SEND_POST_BACK","sendPostBackToPostActivitySaga","whileConnectedEffect","call","cancel","put","select","take","takeLatest","sendTypingIndicator_default","sendTypingIndicator","SEND_INTERVAL","takeSendTypingIndicator","value","take","payload","type","SET_SEND_TYPING_INDICATOR","sendTypingIndicatorOnSetSendBox","_","ponyfill","Date","select","sendTypingIndicator_default","lastSend","task","takeLatest","SET_SEND_BOX","POST_ACTIVITY","interval","call","sleep","put","emitTypingIndicator","cancel","sendTypingIndicatorOnSetSendBoxSaga","whileConnectedEffect","put","select","takeEvery","shouldSpeakIncomingActivity_default","shouldSpeakIncomingActivity","speakableActivity","activity","speakActivityAndStartDictateOnIncomingActivityFromOthers","userID","takeEvery","payload","type","INCOMING_ACTIVITY","activity","shouldSpeakIncomingActivity","select","shouldSpeakIncomingActivity_default","shouldSpeak","speakableActivity","speak","put","markActivity_default","setDictateState","stopDictate","speakActivityAndStartDictateOnIncomingActivityFromOthersSaga","whileConnectedEffect","put","select","takeEvery","dictateState_default","dictateState","startDictateOnSpeakComplete","speakingActivities","select","of","speakingActivity","dictateState_default","put","startDictate","startDictateOnSpeakCompleteSaga","takeEvery","type","MARK_ACTIVITY","SET_DICTATE_STATE","put","takeEvery","startSpeakActivityOnPostActivity","takeEvery","meta","payload","type","POST_ACTIVITY_PENDING","put","startSpeakingActivity","startSpeakActivityOnPostActivitySaga","whileConnectedEffect","put","takeEvery","stopDictateOnCardAction","takeEvery","payload","type","POST_ACTIVITY_PENDING","put","stopDictate","stopDictateOnCardActionSaga","whileConnectedEffect","put","takeEvery","stopSpeakingActivityOnInput","takeEvery","meta","payload","type","SET_SEND_BOX","POST_ACTIVITY_PENDING","put","stopSpeakingActivity","stopSpeakingActivityOnInputSaga","whileConnectedEffect","put","select","takeEvery","sendBoxAttachments","sendBoxValue_default","sendBoxValue","submitSendBox","takeEvery","SUBMIT_SEND_BOX","channelData","method","attachments","select","sendBoxAttachments","sendBoxValue","sendBoxValue_default","put","sendMessage","setSendBox","setSendBoxAttachments","submitSendBoxSaga","whileConnectedEffect","createSagas","ponyfill","fork","clearSuggestedActionsOnPostActivitySaga","connectionStatusToNotificationSaga_default","connectionStatusUpdateSaga","connectSaga_default","detectSlowConnectionSaga","emitTypingActivityToPostActivitySaga","markAllAsSpokenOnStopSpeakActivitySaga","observeActivitySaga","postActivitySaga","queueIncomingActivitySaga","sendEventToPostActivitySaga","sendFilesToPostActivitySaga","sendMessageBackToPostActivitySaga","sendMessageToPostActivitySaga","sendPostBackToPostActivitySaga","sendTypingIndicatorOnSetSendBoxSaga","speakActivityAndStartDictateOnIncomingActivityFromOthersSaga","startDictateOnSpeakCompleteSaga","startSpeakActivityOnPostActivitySaga","stopDictateOnCardActionSaga","stopSpeakingActivityOnInputSaga","submitSendBoxSaga","createEnhancerAndSagaMiddleware","getStore","middlewares","sagaMiddleware","createSagaMiddleware","args","err","store","sagaError","applyMiddleware","withOptions","options","initialState","globalThisOrWindow","ponyfillFromOptions","ponyfill","enhancer","createReduxStore","createReducer","composeWithDevTools","createSagas","createStore","withDevTools","lazy","parse","string","union","value","array","fallback","optional","transform","union","orgSchemaProperty","schema","orgSchemaProperty_default","parse","string","lazy","object","optional","parse","string","unknown","value","array","fallback","parse","transform","singularToArray","schema","fallback","transform","array","value","parse","orgSchemaProperties","orgSchemaProperty_default","thingEntries","optional","string","value","orgSchemaProperty_default","orgSchemaProperties","lazy","action","thing","entries","object","unknown","parseThing","data","parse","project","entries","thing","orgSchemaProperty_default","string","parseProject","data","parse","action","entries","thing","orgSchemaProperty_default","union","string","value","lazy","project","parseAction","data","parse","lazy","number","parse","string","union","lazy","parse","string","union","parse","string","definedTerm","entries","thing","orgSchemaProperty_default","string","parseDefinedTerm","data","parse","creativeWork","entries","thing","orgSchemaProperty_default","string","orgSchemaProperties","lazy","union","definedTerm","parseCreativeWork","data","parse","claim","entries","creativeWork","orgSchemaProperty_default","lazy","project","union","number","string","parseClaim","data","parse","parse","string","voteAction","entries","action","orgSchemaProperty_default","string","parseVoteAction","data","parse","getOrgSchemaMessage","graph","messageEntity","entity","parseThing","message","parseCreativeWork","onErrorResumeNext","fn","defaultValue","singleToArray","singleOrArray","once","fn","done","warnOnce","message","once","Constants","ActivityClientState_exports","DictateState_exports","buildTool","moduleFormat","version","buildInfo"]}
|
|
1
|
+
{"version":3,"sources":["../src/actions/clearSuggestedActions.js","../src/actions/connect.js","../src/actions/disconnect.js","../src/actions/dismissNotification.ts","../src/actions/emitTypingIndicator.js","../src/actions/markActivity.ts","../src/actions/postActivity.ts","../src/actions/sendEvent.js","../src/actions/sendFiles.ts","../src/actions/sendMessage.ts","../src/actions/sendMessageBack.js","../src/actions/sendPostBack.js","../src/actions/setDictateInterims.js","../src/actions/setDictateState.js","../src/actions/setLanguage.js","../src/utils/uniqueID.ts","../src/actions/setNotification.ts","../src/actions/setSendBox.js","../src/actions/setSendBoxAttachments.ts","../src/actions/setSendTimeout.js","../src/actions/setSendTypingIndicator.ts","../src/actions/startDictate.js","../src/actions/startSpeakingActivity.js","../src/actions/stopDictate.js","../src/actions/stopSpeakingActivity.js","../src/actions/submitSendBox.js","../src/constants/ActivityClientState.js","../src/constants/DictateState.js","../src/createStore.ts","../src/createReducer.ts","../src/actions/reconnect.js","../src/actions/sagaError.ts","../src/reducers/connectivityStatus.js","../src/reducers/createActivitiesReducer.ts","../src/actions/deleteActivity.ts","../src/actions/incomingActivity.ts","../src/types/internal/SendStatus.ts","../src/reducers/createInternalReducer.ts","../src/reducers/createNotificationsReducer.ts","../src/utils/isForbiddenPropertyName.ts","../src/reducers/createTypingReducer.ts","../src/reducers/dictateInterims.js","../src/reducers/dictateState.js","../src/reducers/language.js","../src/actions/connectionStatusUpdate.js","../src/reducers/readyState.js","../src/actions/setReferenceGrammarID.js","../src/reducers/referenceGrammarID.js","../src/reducers/sendBoxAttachments.ts","../src/reducers/sendBoxValue.js","../src/reducers/sendTimeout.js","../src/reducers/sendTypingIndicator.js","../src/reducers/shouldSpeakIncomingActivity.js","../src/actions/setSuggestedActions.js","../src/reducers/suggestedActions.js","../src/createSagas.ts","../src/sagas/clearSuggestedActionsOnPostActivitySaga.js","../src/sagas/effects/whileConnected.ts","../src/sagas/connectionStatusToNotificationSaga.js","../src/createPromiseQueue.js","../src/sagas/connectionStatusUpdateSaga.js","../src/sagas/effects/observeEach.js","../src/sagas/connectSaga.js","../src/sagas/effects/forkPut.js","../src/actions/updateConnectionStatus.js","../src/sagas/detectSlowConnectionSaga.ts","../src/utils/sleep.ts","../src/sagas/emitTypingIndicatorToPostActivitySaga.js","../src/sagas/markAllAsSpokenOnStopSpeakActivitySaga.js","../src/selectors/activities.ts","../src/definitions/speakingActivity.js","../src/sagas/observeActivitySaga.ts","../src/actions/queueIncomingActivity.js","../src/sagas/postActivitySaga.ts","../src/utils/dateToLocaleISOString.ts","../src/utils/deleteKey.ts","../src/selectors/language.ts","../src/sagas/effects/observeOnce.ts","../src/selectors/sendTimeout.ts","../src/sagas/queueIncomingActivitySaga.ts","../src/definitions/activityFromBot.js","../src/sagas/sendEventToPostActivitySaga.js","../src/sagas/sendFilesToPostActivitySaga.js","../src/sagas/sendMessageBackToPostActivitySaga.js","../src/sagas/sendMessageToPostActivitySaga.ts","../src/sagas/sendPostBackToPostActivitySaga.js","../src/sagas/sendTypingIndicatorOnSetSendBoxSaga.ts","../src/selectors/sendTypingIndicator.ts","../src/sagas/speakActivityAndStartDictateOnIncomingActivityFromOthersSaga.js","../src/selectors/shouldSpeakIncomingActivity.ts","../src/definitions/speakableActivity.js","../src/sagas/startDictateOnSpeakCompleteSaga.js","../src/selectors/dictateState.ts","../src/sagas/startSpeakActivityOnPostActivitySaga.js","../src/sagas/stopDictateOnCardActionSaga.js","../src/sagas/stopSpeakingActivityOnInputSaga.js","../src/sagas/submitSendBoxSaga.js","../src/selectors/sendBoxAttachments.ts","../src/selectors/sendBoxValue.ts","../src/types/external/OrgSchema/Action.ts","../src/types/external/OrgSchema/private/orgSchemaProperty.ts","../src/types/external/OrgSchema/Project.ts","../src/types/external/OrgSchema/Thing.ts","../src/types/external/OrgSchema/private/orgSchemaProperties.ts","../src/types/external/OrgSchema/Claim.ts","../src/types/external/OrgSchema/CreativeWork.ts","../src/types/external/OrgSchema/DefinedTerm.ts","../src/types/external/OrgSchema/VoteAction.ts","../src/utils/getOrgSchemaMessage.ts","../src/utils/onErrorResumeNext.ts","../src/utils/singleToArray.ts","../src/utils/once.ts","../src/utils/warnOnce.ts","../src/index.ts"],"sourcesContent":["const CLEAR_SUGGESTED_ACTIONS = 'WEB_CHAT/CLEAR_SUGGESTED_ACTIONS';\n\nexport default function clearSuggestedActions() {\n return {\n type: CLEAR_SUGGESTED_ACTIONS\n };\n}\n\nexport { CLEAR_SUGGESTED_ACTIONS };\n","const CONNECT = 'DIRECT_LINE/CONNECT';\nconst CONNECT_FULFILLED = `${CONNECT}_FULFILLED`;\nconst CONNECT_FULFILLING = `${CONNECT}_FULFILLING`;\nconst CONNECT_PENDING = `${CONNECT}_PENDING`;\nconst CONNECT_REJECTED = `${CONNECT}_REJECTED`;\nconst CONNECT_STILL_PENDING = `${CONNECT}_STILL_PENDING`;\n\nexport default function connect({ directLine, userID, username }) {\n return {\n type: CONNECT,\n payload: {\n directLine,\n userID,\n username\n }\n };\n}\n\nexport { CONNECT, CONNECT_FULFILLED, CONNECT_FULFILLING, CONNECT_PENDING, CONNECT_REJECTED, CONNECT_STILL_PENDING };\n","const DISCONNECT = 'DIRECT_LINE/DISCONNECT';\nconst DISCONNECT_PENDING = `${DISCONNECT}_PENDING`;\nconst DISCONNECT_REJECTED = `${DISCONNECT}_REJECTED`;\nconst DISCONNECT_FULFILLED = `${DISCONNECT}_FULFILLED`;\n\nexport default function disconnect() {\n return {\n type: DISCONNECT\n };\n}\n\nexport { DISCONNECT, DISCONNECT_PENDING, DISCONNECT_REJECTED, DISCONNECT_FULFILLED };\n","const DISMISS_NOTIFICATION = 'WEB_CHAT/DISMISS_NOTIFICATION';\n\ntype DismissNotificationAction = {\n payload: { id: string };\n type: typeof DISMISS_NOTIFICATION;\n};\n\nfunction dismissNotification(id: string): DismissNotificationAction {\n return {\n payload: { id },\n type: DISMISS_NOTIFICATION\n };\n}\n\nexport default dismissNotification;\n\nexport { DISMISS_NOTIFICATION };\n\nexport type { DismissNotificationAction };\n","const EMIT_TYPING_INDICATOR = 'WEB_CHAT/EMIT_TYPING_INDICATOR';\n\nexport default function emitTypingIndicator() {\n return {\n type: EMIT_TYPING_INDICATOR\n };\n}\n\nexport { EMIT_TYPING_INDICATOR };\n","type MarkActivityActionType = 'WEB_CHAT/MARK_ACTIVITY';\n\ntype MarkActivityAction = {\n payload: { activityID: string; name: string; value: any };\n type: MarkActivityActionType;\n};\n\nconst MARK_ACTIVITY: MarkActivityActionType = 'WEB_CHAT/MARK_ACTIVITY';\n\nfunction markActivity({ id: activityID }: { id: string }, name: string, value: any): MarkActivityAction {\n return {\n type: MARK_ACTIVITY,\n payload: {\n activityID,\n name,\n value\n }\n };\n}\n\nexport default markActivity;\nexport { MARK_ACTIVITY };\nexport type { MarkActivityAction };\n","import type { WebChatActivity } from '../types/WebChatActivity';\n\ntype PostActivityActionType = 'DIRECT_LINE/POST_ACTIVITY';\ntype PostActivityFulfilledActionType = 'DIRECT_LINE/POST_ACTIVITY_FULFILLED';\ntype PostActivityImpededActionType = 'DIRECT_LINE/POST_ACTIVITY_IMPEDED';\ntype PostActivityPendingActionType = 'DIRECT_LINE/POST_ACTIVITY_PENDING';\ntype PostActivityRejectedActionType = 'DIRECT_LINE/POST_ACTIVITY_REJECTED';\n\ntype PostActivityAction = {\n meta: { method: string };\n payload: { activity: WebChatActivity };\n type: PostActivityActionType;\n};\n\ntype PostActivityFulfilledAction = {\n meta: { clientActivityID: string; method: string };\n payload: { activity: WebChatActivity };\n type: PostActivityFulfilledActionType;\n};\n\ntype PostActivityImpededAction = {\n meta: { clientActivityID: string; method: string };\n payload: { activity: WebChatActivity };\n type: PostActivityImpededActionType;\n};\n\ntype PostActivityPendingAction = {\n meta: { clientActivityID: string; method: string };\n payload: { activity: WebChatActivity };\n type: PostActivityPendingActionType;\n};\n\ntype PostActivityRejectedAction = {\n error: true;\n meta: { clientActivityID: string; method: string };\n payload: Error;\n type: PostActivityRejectedActionType;\n};\n\nconst POST_ACTIVITY: PostActivityActionType = 'DIRECT_LINE/POST_ACTIVITY';\nconst POST_ACTIVITY_FULFILLED: PostActivityFulfilledActionType = `${POST_ACTIVITY}_FULFILLED`;\nconst POST_ACTIVITY_IMPEDED: PostActivityImpededActionType = `${POST_ACTIVITY}_IMPEDED`;\nconst POST_ACTIVITY_PENDING: PostActivityPendingActionType = `${POST_ACTIVITY}_PENDING`;\nconst POST_ACTIVITY_REJECTED: PostActivityRejectedActionType = `${POST_ACTIVITY}_REJECTED`;\n\nfunction postActivity(activity: WebChatActivity, method = 'keyboard'): PostActivityAction {\n return {\n type: POST_ACTIVITY,\n meta: { method },\n payload: { activity }\n };\n}\n\nexport default postActivity;\nexport { POST_ACTIVITY, POST_ACTIVITY_FULFILLED, POST_ACTIVITY_IMPEDED, POST_ACTIVITY_PENDING, POST_ACTIVITY_REJECTED };\nexport type {\n PostActivityAction,\n PostActivityFulfilledAction,\n PostActivityImpededAction,\n PostActivityPendingAction,\n PostActivityRejectedAction\n};\n","const SEND_EVENT = 'WEB_CHAT/SEND_EVENT';\n\nexport default function sendEvent(name, value) {\n return {\n type: SEND_EVENT,\n payload: { name, value }\n };\n}\n\nexport { SEND_EVENT };\n","const SEND_FILES = 'WEB_CHAT/SEND_FILES';\n\n// TODO: [P1] We could obsolete this or dispatch { type: SEND_MESSAGE } insetad.\nexport default function sendFiles(\n files: readonly Readonly<{\n name: string;\n size: number;\n url: string;\n thumbnail?: string;\n }>[]\n) {\n return {\n type: SEND_FILES,\n payload: { files }\n };\n}\n\nexport { SEND_FILES };\n","import { type SendBoxAttachment } from '../types/SendBoxAttachment';\n\nconst SEND_MESSAGE = 'WEB_CHAT/SEND_MESSAGE';\n\nexport default function sendMessage(\n text: string | undefined,\n method: string | undefined,\n { attachments, channelData }: { attachments?: readonly SendBoxAttachment[]; channelData?: any } = {}\n) {\n return {\n type: SEND_MESSAGE,\n payload: { attachments, channelData, method, text }\n };\n}\n\nexport { SEND_MESSAGE };\n","const SEND_MESSAGE_BACK = 'WEB_CHAT/SEND_MESSAGE_BACK';\n\nexport default function sendMessageback(value, text, displayText) {\n return {\n type: SEND_MESSAGE_BACK,\n payload: { displayText, text, value }\n };\n}\n\nexport { SEND_MESSAGE_BACK };\n","const SEND_POST_BACK = 'WEB_CHAT/SEND_POST_BACK';\n\nexport default function sendPostback(value) {\n return {\n type: SEND_POST_BACK,\n payload: { value }\n };\n}\n\nexport { SEND_POST_BACK };\n","const SET_DICTATE_INTERIMS = 'WEB_CHAT/SET_DICTATE_INTERIMS';\n\nexport default function setDictateInterims(dictateInterims) {\n return {\n type: SET_DICTATE_INTERIMS,\n payload: { dictateInterims }\n };\n}\n\nexport { SET_DICTATE_INTERIMS };\n","const SET_DICTATE_STATE = 'WEB_CHAT/SET_DICTATE_STATE';\n\nexport default function setDictateState(dictateState) {\n return {\n type: SET_DICTATE_STATE,\n payload: { dictateState }\n };\n}\n\nexport { SET_DICTATE_STATE };\n","const SET_LANGUAGE = 'WEB_CHAT/SET_LANGUAGE';\n\nexport default function setLanguage(language) {\n return {\n type: SET_LANGUAGE,\n payload: { language }\n };\n}\n\nexport { SET_LANGUAGE };\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [2, 36] }] */\n\nimport random from 'math-random';\n\nexport default function uniqueID(): string {\n return random().toString(36).substring(2);\n}\n","import uniqueID from '../utils/uniqueID';\n\nimport type { Notification } from '../types/internal/Notification';\n\nconst SET_NOTIFICATION = 'WEB_CHAT/SET_NOTIFICATION';\n\ntype SetNotificationAction = {\n payload: Omit<Notification, 'timestamp'>;\n type: typeof SET_NOTIFICATION;\n};\n\nexport default function setNotification({\n alt,\n data,\n id,\n level,\n message\n}: Omit<Notification, 'timestamp'>): SetNotificationAction {\n if (!id || typeof id !== 'string') {\n console.warn(\n 'botframework-webchat: The \"id\" argument passed to \"setNotification\" must be a string; defaulting to a random value.'\n );\n\n id = uniqueID();\n }\n\n if (!level || typeof level !== 'string') {\n console.warn(\n 'botframework-webchat: The \"level\" argument passed to \"setNotification\" must be a string; defaulting to \"info\".'\n );\n\n level = 'info';\n }\n\n return {\n type: SET_NOTIFICATION,\n payload: { alt, data, id, level, message }\n };\n}\n\nexport { SET_NOTIFICATION };\n\nexport type { SetNotificationAction };\n","const SET_SEND_BOX = 'WEB_CHAT/SET_SEND_BOX';\n\nexport default function setSendBox(text) {\n return {\n type: SET_SEND_BOX,\n payload: { text }\n };\n}\n\nexport { SET_SEND_BOX };\n","import type { SendBoxAttachment } from '../types/SendBoxAttachment';\n\nconst SET_SEND_BOX_ATTACHMENTS = 'WEB_CHAT/SET_SEND_BOX_ATTACHMENTS';\n\nexport default function setSendBoxAttachments(attachments: readonly SendBoxAttachment[]) {\n return {\n type: SET_SEND_BOX_ATTACHMENTS,\n payload: { attachments }\n };\n}\n\nexport { SET_SEND_BOX_ATTACHMENTS };\n","const SET_SEND_TIMEOUT = 'WEB_CHAT/SET_SEND_TIMEOUT';\n\nexport default function setSendTimeout(sendTimeout) {\n return {\n type: SET_SEND_TIMEOUT,\n payload: { sendTimeout }\n };\n}\n\nexport { SET_SEND_TIMEOUT };\n","const SET_SEND_TYPING_INDICATOR = 'WEB_CHAT/SET_SEND_TYPING_INDICATOR';\n\ntype SetSendTypingIndicatorAction = {\n payload: { sendTypingIndicator: boolean };\n type: typeof SET_SEND_TYPING_INDICATOR;\n};\n\nexport default function setSendTypingIndicator(value): SetSendTypingIndicatorAction {\n return {\n payload: { sendTypingIndicator: !!value },\n type: SET_SEND_TYPING_INDICATOR\n };\n}\n\nexport { SET_SEND_TYPING_INDICATOR };\n\nexport type { SetSendTypingIndicatorAction };\n","const START_DICTATE = 'WEB_CHAT/START_DICTATE';\n\nexport default function startDictate() {\n return { type: START_DICTATE };\n}\n\nexport { START_DICTATE };\n","const START_SPEAKING_ACTIVITY = 'WEB_CHAT/START_SPEAKING';\n\nexport default function startSpeakingActivity() {\n return {\n type: START_SPEAKING_ACTIVITY\n };\n}\n\nexport { START_SPEAKING_ACTIVITY };\n","const STOP_DICTATE = 'WEB_CHAT/STOP_DICTATE';\n\nexport default function stopDictate() {\n return { type: STOP_DICTATE };\n}\n\nexport { STOP_DICTATE };\n","const STOP_SPEAKING_ACTIVITY = 'WEB_CHAT/STOP_SPEAKING';\n\nexport default function stopSpeakingActivity() {\n return {\n type: STOP_SPEAKING_ACTIVITY\n };\n}\n\nexport { STOP_SPEAKING_ACTIVITY };\n","const SUBMIT_SEND_BOX = 'WEB_CHAT/SUBMIT_SEND_BOX';\n\nexport default function submitSendBox(method = 'keyboard', { channelData } = {}) {\n return {\n type: SUBMIT_SEND_BOX,\n payload: { channelData, method }\n };\n}\n\nexport { SUBMIT_SEND_BOX };\n","/** @deprecated This constant is being deprecated, please use string literal instead. Will be remove on or after 2024-07-31. */\nconst SEND_FAILED = 'send failed';\n/** @deprecated This constant is being deprecated, please use string literal instead. Will be remove on or after 2024-07-31. */\nconst SENDING = 'sending';\n/** @deprecated This constant is being deprecated, please use string literal instead. Will be remove on or after 2024-07-31. */\nconst SENT = 'sent';\n\nexport { SEND_FAILED, SENDING, SENT };\n","const IDLE = 0;\nconst WILL_START = 1;\nconst STARTING = 2;\nconst DICTATING = 3;\nconst STOPPING = 4;\n\nexport { DICTATING, IDLE, STARTING, STOPPING, WILL_START };\n","import { applyMiddleware, createStore as createReduxStore, type Store } from 'redux';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport createSagaMiddleware from 'redux-saga';\n\nimport createReducer from './createReducer';\nimport createSagas from './createSagas';\nimport sagaError from './actions/sagaError';\n\nimport type { GlobalScopePonyfill } from './types/GlobalScopePonyfill';\n\ntype CreateStoreOptions = {\n /**\n * True, to enable Redux development tools, otherwise, false.\n *\n * Because Web Chat use sagas for business logics, some store state are keep at JavaScript heaps.\n * Time-travelling and saving/restoring store state are not supported.\n */\n devTools?: boolean;\n\n /**\n * Ponyfill to overrides specific global scope members.\n *\n * This option is for development use only. Not all features in Web Chat are ponyfilled.\n *\n * To fake timers, `setTimeout` and related functions can be passed to overrides the original global scope members.\n *\n * Please see [#4662](https://github.com/microsoft/BotFramework-WebChat/pull/4662) for details.\n */\n ponyfill?: Partial<GlobalScopePonyfill>;\n};\n\nfunction createEnhancerAndSagaMiddleware(getStore, ...middlewares) {\n const sagaMiddleware = createSagaMiddleware({\n onError: (...args) => {\n const [err] = args;\n\n console.error(err);\n\n const store = getStore();\n\n store && store.dispatch(sagaError());\n }\n });\n\n return {\n enhancer: applyMiddleware(...middlewares, sagaMiddleware),\n sagaMiddleware\n };\n}\n\n/**\n * Creates a Redux store internally used by Web Chat.\n *\n * This store is critical for Web Chat business logics to operate, please use with cautions.\n */\n\n// The complexity is introduced by the check of ponyfill.\n// eslint-disable-next-line complexity\nexport function withOptions(options: CreateStoreOptions, initialState?, ...middlewares): Store {\n // IE Mode does not have `globalThis`.\n const globalThisOrWindow = typeof globalThis === 'undefined' ? window : globalThis;\n const ponyfillFromOptions: Partial<GlobalScopePonyfill> = options.ponyfill || {};\n\n // TODO: [P2] Dedupe: when we have an utility package, move this code there and mark it as internal use.\n const ponyfill: GlobalScopePonyfill = {\n cancelAnimationFrame:\n ponyfillFromOptions.cancelAnimationFrame ||\n // Using clock functions from global if not provided.\n // eslint-disable-next-line no-restricted-globals\n (typeof cancelAnimationFrame === 'function' ? cancelAnimationFrame.bind(globalThisOrWindow) : undefined),\n cancelIdleCallback:\n ponyfillFromOptions.cancelIdleCallback ||\n // eslint-disable-next-line no-restricted-globals\n (typeof cancelIdleCallback === 'function' ? cancelIdleCallback.bind(globalThisOrWindow) : undefined),\n clearImmediate:\n ponyfillFromOptions.clearImmediate ||\n // eslint-disable-next-line no-restricted-globals\n (typeof clearImmediate === 'function' ? clearImmediate.bind(globalThisOrWindow) : undefined),\n clearInterval:\n ponyfillFromOptions.clearInterval ||\n // eslint-disable-next-line no-restricted-globals\n (typeof clearInterval === 'function' ? clearInterval.bind(globalThisOrWindow) : undefined),\n clearTimeout:\n ponyfillFromOptions.clearTimeout ||\n // eslint-disable-next-line no-restricted-globals\n (typeof clearTimeout === 'function' ? clearTimeout.bind(globalThisOrWindow) : undefined),\n // eslint-disable-next-line no-restricted-globals\n Date: ponyfillFromOptions.Date || Date,\n requestAnimationFrame:\n ponyfillFromOptions.requestAnimationFrame ||\n // eslint-disable-next-line no-restricted-globals\n (typeof requestAnimationFrame === 'function' ? requestAnimationFrame.bind(globalThisOrWindow) : undefined),\n requestIdleCallback:\n ponyfillFromOptions.requestIdleCallback ||\n // eslint-disable-next-line no-restricted-globals\n (typeof requestIdleCallback === 'function' ? requestIdleCallback.bind(globalThisOrWindow) : undefined),\n setImmediate:\n ponyfillFromOptions.setImmediate ||\n // eslint-disable-next-line no-restricted-globals\n (typeof setImmediate === 'function' ? setImmediate.bind(globalThisOrWindow) : undefined),\n setInterval:\n ponyfillFromOptions.setInterval ||\n // eslint-disable-next-line no-restricted-globals\n (typeof setInterval === 'function' ? setInterval.bind(globalThisOrWindow) : undefined),\n setTimeout:\n ponyfillFromOptions.setTimeout ||\n // eslint-disable-next-line no-restricted-globals\n (typeof setTimeout === 'function' ? setTimeout.bind(globalThisOrWindow) : undefined)\n };\n\n // We are sure the \"getStore\" (first argument) is not called on \"createEnhancerAndSagaMiddleware()\".\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const { enhancer, sagaMiddleware } = createEnhancerAndSagaMiddleware(() => store, ...middlewares);\n const store = createReduxStore(\n createReducer(ponyfill),\n initialState || {},\n options.devTools ? composeWithDevTools(enhancer) : enhancer\n );\n\n sagaMiddleware.run(createSagas({ ponyfill }));\n\n return store;\n}\n\n/**\n * Creates a Redux store internally used by Web Chat.\n *\n * This store is critical for Web Chat business logics to operate, please use with cautions.\n */\nexport default function createStore(initialState?, ...middlewares): Store {\n return withOptions({}, initialState, ...middlewares);\n}\n\n/**\n * Creates a Redux store internally used by Web Chat, with Redux development tools.\n *\n * This store is critical for Web Chat business logics to operate, please use with cautions.\n *\n * @deprecated Use `withOptions` instead and pass `{ devTools: true }`\n */\nexport function withDevTools(initialState?, ...middlewares): Store {\n return withOptions({ devTools: true }, initialState, ...middlewares);\n}\n","import { combineReducers } from 'redux';\n\nimport connectivityStatus from './reducers/connectivityStatus';\nimport createActivitiesReducer from './reducers/createActivitiesReducer';\nimport createInternalReducer from './reducers/createInternalReducer';\nimport createNotificationsReducer from './reducers/createNotificationsReducer';\nimport createTypingReducer from './reducers/createTypingReducer';\nimport dictateInterims from './reducers/dictateInterims';\nimport dictateState from './reducers/dictateState';\nimport language from './reducers/language';\nimport readyState from './reducers/readyState';\nimport referenceGrammarID from './reducers/referenceGrammarID';\nimport sendBoxAttachments from './reducers/sendBoxAttachments';\nimport sendBoxValue from './reducers/sendBoxValue';\nimport sendTimeout from './reducers/sendTimeout';\nimport sendTypingIndicator from './reducers/sendTypingIndicator';\nimport shouldSpeakIncomingActivity from './reducers/shouldSpeakIncomingActivity';\nimport suggestedActions from './reducers/suggestedActions';\n\nimport type { GlobalScopePonyfill } from './types/GlobalScopePonyfill';\n\nexport default function createReducer(ponyfill: GlobalScopePonyfill) {\n return combineReducers({\n activities: createActivitiesReducer(ponyfill),\n connectivityStatus,\n dictateInterims,\n dictateState,\n internal: createInternalReducer(ponyfill),\n language,\n notifications: createNotificationsReducer(ponyfill),\n readyState,\n referenceGrammarID,\n sendBoxAttachments,\n sendBoxValue,\n sendTimeout,\n sendTypingIndicator,\n shouldSpeakIncomingActivity,\n suggestedActions,\n typing: createTypingReducer(ponyfill)\n });\n}\n","const RECONNECT = 'DIRECT_LINE/RECONNECT';\nconst RECONNECT_FULFILLED = `${RECONNECT}_FULFILLED`;\nconst RECONNECT_FULFILLING = `${RECONNECT}_FULFILLING`;\nconst RECONNECT_PENDING = `${RECONNECT}_PENDING`;\nconst RECONNECT_REJECTED = `${RECONNECT}_REJECTED`;\n\nexport { RECONNECT, RECONNECT_FULFILLED, RECONNECT_FULFILLING, RECONNECT_PENDING, RECONNECT_REJECTED };\n","const SAGA_ERROR = 'WEB_CHAT/SAGA_ERROR';\n\ntype SagaErrorAction = {\n type: typeof SAGA_ERROR;\n};\n\nexport default function sagaError(): SagaErrorAction {\n return { type: SAGA_ERROR };\n}\n\nexport { SAGA_ERROR };\n\nexport type { SagaErrorAction };\n","import { CONNECT_FULFILLED, CONNECT_PENDING, CONNECT_REJECTED, CONNECT_STILL_PENDING } from '../actions/connect';\n\nimport { RECONNECT_PENDING, RECONNECT_FULFILLED } from '../actions/reconnect';\n\nimport { DISCONNECT_FULFILLED } from '../actions/disconnect';\nimport { SAGA_ERROR } from '../actions/sagaError';\n\nconst DEFAULT_STATE = 'uninitialized';\n\nexport default function connectivityStatus(state = DEFAULT_STATE, { type, meta }) {\n if (state !== 'sagaerror') {\n switch (type) {\n case CONNECT_PENDING:\n case RECONNECT_PENDING:\n if (state !== 'uninitialized') {\n state = 'reconnecting';\n }\n\n break;\n\n case CONNECT_FULFILLED:\n state = 'connected';\n break;\n\n case RECONNECT_FULFILLED:\n state = 'reconnected';\n break;\n\n case CONNECT_REJECTED:\n state = 'error';\n break;\n\n case CONNECT_STILL_PENDING:\n state = 'connectingslow';\n break;\n\n case DISCONNECT_FULFILLED:\n state = meta && meta.error ? 'error' : 'notconnected';\n break;\n\n case SAGA_ERROR:\n state = 'sagaerror';\n break;\n\n default:\n break;\n }\n }\n\n return state;\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, -1] }] */\n\nimport updateIn from 'simple-update-in';\n\nimport { DELETE_ACTIVITY } from '../actions/deleteActivity';\nimport { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport { MARK_ACTIVITY } from '../actions/markActivity';\nimport {\n POST_ACTIVITY_FULFILLED,\n POST_ACTIVITY_IMPEDED,\n POST_ACTIVITY_PENDING,\n POST_ACTIVITY_REJECTED\n} from '../actions/postActivity';\nimport { SEND_FAILED, SENDING, SENT } from '../types/internal/SendStatus';\n\nimport type { DeleteActivityAction } from '../actions/deleteActivity';\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type { IncomingActivityAction } from '../actions/incomingActivity';\nimport type { MarkActivityAction } from '../actions/markActivity';\nimport type {\n PostActivityFulfilledAction,\n PostActivityImpededAction,\n PostActivityPendingAction,\n PostActivityRejectedAction\n} from '../actions/postActivity';\nimport type { Reducer } from 'redux';\nimport type { WebChatActivity } from '../types/WebChatActivity';\n\ntype ActivitiesAction =\n | DeleteActivityAction\n | IncomingActivityAction\n | MarkActivityAction\n | PostActivityFulfilledAction\n | PostActivityImpededAction\n | PostActivityPendingAction\n | PostActivityRejectedAction;\n\ntype ActivitiesState = WebChatActivity[];\n\nconst DEFAULT_STATE: ActivitiesState = [];\nconst DIRECT_LINE_PLACEHOLDER_URL =\n 'https://docs.botframework.com/static/devportal/client/images/bot-framework-default-placeholder.png';\n\nfunction getClientActivityID(activity: WebChatActivity): string | undefined {\n return activity.channelData?.clientActivityID;\n}\n\nfunction findByClientActivityID(clientActivityID: string): (activity: WebChatActivity) => boolean {\n return (activity: WebChatActivity) => getClientActivityID(activity) === clientActivityID;\n}\n\nfunction patchActivity(\n activity: WebChatActivity,\n lastActivity: WebChatActivity,\n { Date }: GlobalScopePonyfill\n): WebChatActivity {\n // Direct Line channel will return a placeholder image for the user-uploaded image.\n // As observed, the URL for the placeholder image is https://docs.botframework.com/static/devportal/client/images/bot-framework-default-placeholder.png.\n // To make our code simpler, we are removing the value if \"contentUrl\" is pointing to a placeholder image.\n\n // TODO: [P2] #2869 This \"contentURL\" removal code should be moved to DirectLineJS adapter.\n\n // Also, if the \"contentURL\" starts with \"blob:\", this means the user is uploading a file (the URL is constructed by URL.createObjectURL)\n // Although the copy/reference of the file is temporary in-memory, to make the UX consistent across page refresh, we do not allow the user to re-download the file either.\n\n activity = updateIn(activity, ['attachments', () => true, 'contentUrl'], (contentUrl: string) => {\n if (contentUrl !== DIRECT_LINE_PLACEHOLDER_URL && !/^blob:/iu.test(contentUrl)) {\n return contentUrl;\n }\n });\n\n // If the message does not have sequence ID, use these fallback values:\n // 1. \"timestamp\" field\n // - outgoing activity will not have \"timestamp\" field\n // 2. last activity sequence ID (or 0) + 0.001\n // - best effort to put this message the last one in the chat history\n activity = updateIn(activity, ['channelData', 'webchat:sequence-id'], (sequenceId?: number) =>\n typeof sequenceId === 'number'\n ? sequenceId\n : typeof activity.timestamp !== 'undefined'\n ? +new Date(activity.timestamp)\n : // We assume there will be no more than 1,000 messages sent before receiving server response.\n // If there are more than 1,000 messages, some messages will get reordered and appear jumpy after receiving server response.\n // eslint-disable-next-line no-magic-numbers\n (lastActivity?.channelData?.['webchat:sequence-id'] || 0) + 0.001\n );\n\n // TODO: [P1] #3953 We should move this patching logic to a DLJS wrapper for simplicity.\n activity = updateIn(activity, ['channelData', 'webchat:sequence-id'], (sequenceId: number) =>\n typeof sequenceId === 'number' ? sequenceId : +new Date(activity.timestamp || 0) || 0\n );\n\n return activity;\n}\n\nfunction upsertActivityWithSort(\n activities: WebChatActivity[],\n nextActivity: WebChatActivity,\n ponyfill: GlobalScopePonyfill\n): WebChatActivity[] {\n nextActivity = patchActivity(nextActivity, activities[activities.length - 1], ponyfill);\n\n const { channelData: { clientActivityID: nextClientActivityID, 'webchat:sequence-id': nextSequenceId } = {} } =\n nextActivity;\n\n const nextActivities = activities.filter(\n ({ channelData: { clientActivityID } = {}, id }) =>\n // We will remove all \"sending messages\" activities and activities with same ID\n // \"clientActivityID\" is unique and used to track if the message has been sent and echoed back from the server\n !(nextClientActivityID && clientActivityID === nextClientActivityID) && !(id && id === nextActivity.id)\n );\n\n // Then, find the right (sorted) place to insert the new activity at, based on sequence ID.\n const indexToInsert = nextActivities.findIndex(\n ({ channelData: { 'webchat:sequence-id': sequenceId } = {} }) => (sequenceId || 0) > (nextSequenceId || 0)\n );\n\n // If no right place are found, append it\n nextActivities.splice(~indexToInsert ? indexToInsert : nextActivities.length, 0, nextActivity);\n\n return nextActivities;\n}\n\nexport default function createActivitiesReducer(\n ponyfill: GlobalScopePonyfill\n): Reducer<ActivitiesState, ActivitiesAction> {\n return function activities(state: ActivitiesState = DEFAULT_STATE, action: ActivitiesAction): ActivitiesState {\n switch (action.type) {\n case DELETE_ACTIVITY:\n state = updateIn(state, [({ id }: WebChatActivity) => id === action.payload.activityID]);\n break;\n\n case MARK_ACTIVITY:\n {\n const { payload } = action;\n\n state = updateIn(\n state,\n [({ id }: WebChatActivity) => id === payload.activityID, 'channelData', payload.name],\n () => payload.value\n );\n }\n\n break;\n\n case POST_ACTIVITY_PENDING:\n {\n let {\n payload: { activity }\n } = action;\n\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n activity = updateIn(activity, ['channelData', 'state'], () => SENDING);\n activity = updateIn(activity, ['channelData', 'webchat:send-status'], () => SENDING);\n\n state = upsertActivityWithSort(state, activity, ponyfill);\n }\n\n break;\n\n case POST_ACTIVITY_IMPEDED:\n state = updateIn(\n state,\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n [findByClientActivityID(action.meta.clientActivityID), 'channelData', 'state'],\n () => SEND_FAILED\n );\n\n break;\n\n case POST_ACTIVITY_REJECTED:\n state = updateIn(state, [findByClientActivityID(action.meta.clientActivityID)], activity => {\n activity = updateIn(activity, ['channelData', 'state'], () => SEND_FAILED);\n\n return updateIn(activity, ['channelData', 'webchat:send-status'], () => SEND_FAILED);\n });\n\n break;\n\n case POST_ACTIVITY_FULFILLED:\n state = updateIn(state, [findByClientActivityID(action.meta.clientActivityID)], () => {\n // We will replace the activity with the version from the server\n const activity = updateIn(\n patchActivity(action.payload.activity, state[state.length - 1], ponyfill),\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n ['channelData', 'state'],\n () => SENT\n );\n\n return updateIn(activity, ['channelData', 'webchat:send-status'], () => SENT);\n });\n\n break;\n\n case INCOMING_ACTIVITY:\n {\n let {\n payload: { activity }\n } = action;\n\n // If the incoming activity is an echo back, we should keep the existing `channelData['webchat:send-status']` field.\n //\n // Otherwise, it will fail following scenario:\n //\n // 1. Send an activity to the service\n // 2. Service echoed back the activity\n // 3. Service did NOT return `postActivity` call\n // - EXPECT: `channelData['webchat:send-status']` should be \"sending\".\n // - ACTUAL: `channelData['webchat:send-status']` is `undefined` because the activity get overwritten by the echo back activity.\n // The echo back activity contains no `channelData['webchat:send-status']`.\n //\n // While we are looking out for the scenario above, we should also look at the following scenarios:\n //\n // 1. Service restore chat history, including activities sent from the user. These activities has the following characteristics:\n // - They do not have `channelData['webchat:send-status']`;\n // - They do not have an ongoing `postActivitySaga`;\n // - They should not previously appear in the chat history.\n // 2. We need to mark these activities as \"sent\".\n //\n // In the future, when we revamp our object model, we could use a different signal so we don't need the code below, for example:\n //\n // - If `activity.id` is set, it is \"sent\", because the chat service assigned an ID to the activity;\n // - If `activity.id` is not set, it is either \"sending\" or \"send failed\";\n // - If `activity.channelData['webchat:send-failed-reason']` is set, it is \"send failed\" with the reason, otherwise;\n // - It is sending.\n if (activity.from.role === 'user') {\n const { id } = activity;\n const clientActivityID = getClientActivityID(activity);\n\n const existingActivity = state.find(\n activity =>\n (clientActivityID && getClientActivityID(activity) === clientActivityID) || (id && activity.id === id)\n );\n\n if (existingActivity) {\n const {\n channelData: { 'webchat:send-status': sendStatus }\n } = existingActivity;\n\n if (sendStatus === SENDING || sendStatus === SEND_FAILED || sendStatus === SENT) {\n activity = updateIn(activity, ['channelData', 'webchat:send-status'], () => sendStatus);\n }\n } else {\n // If there are no existing activity, probably this activity is restored from chat history.\n // All outgoing activities restored from service means they arrived at the service successfully.\n // Thus, we are marking them as \"sent\".\n activity = updateIn(activity, ['channelData', 'webchat:send-status'], () => SENT);\n }\n }\n\n state = upsertActivityWithSort(state, activity, ponyfill);\n }\n\n break;\n\n default:\n break;\n }\n\n return state;\n };\n}\n","type DeleteActivityActionType = 'DIRECT_LINE/DELETE_ACTIVITY';\n\ntype DeleteActivityAction = {\n payload: { activityID: string };\n type: DeleteActivityActionType;\n};\n\nconst DELETE_ACTIVITY: DeleteActivityActionType = 'DIRECT_LINE/DELETE_ACTIVITY';\n\nfunction deleteActivity(activityID: string): DeleteActivityAction {\n return {\n type: DELETE_ACTIVITY,\n payload: { activityID }\n };\n}\n\nexport default deleteActivity;\nexport { DELETE_ACTIVITY };\nexport type { DeleteActivityAction };\n","import type { WebChatActivity } from '../types/WebChatActivity';\n\ntype IncomingActivityActionType = 'DIRECT_LINE/INCOMING_ACTIVITY';\n\ntype IncomingActivityAction = {\n payload: { activity: WebChatActivity };\n type: IncomingActivityActionType;\n};\n\nconst INCOMING_ACTIVITY: IncomingActivityActionType = 'DIRECT_LINE/INCOMING_ACTIVITY';\n\nfunction incomingActivity(activity: WebChatActivity): IncomingActivityAction {\n return {\n type: INCOMING_ACTIVITY,\n payload: { activity }\n };\n}\n\nexport default incomingActivity;\nexport { INCOMING_ACTIVITY };\nexport type { IncomingActivityAction };\n","// This type is only for this package only and help reducing size of the bundle.\n// Externals should use the string literal directly instead.\n\n// TODO: [P3] #4040 When improve treeshaking with named exports, we could export internals from `core` package.\n// import { SENDING, SEND_FAILED, SENT } from 'botframework-webchat-core/internal/SendStatus';\n\nconst SENDING = 'sending';\nconst SEND_FAILED = 'send failed';\nconst SENT = 'sent';\n\ntype SendStatus = typeof SENDING | typeof SEND_FAILED | typeof SENT;\n\nexport { SENDING, SEND_FAILED, SENT };\nexport type { SendStatus };\n","import type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\n\n/**\n * Creates a Redux reducer to store the ponyfill.\n *\n * The ponyfill is used to check if React and Redux does not use a matching ponyfill.\n */\nexport default function createInternalReducer(ponyfill: GlobalScopePonyfill): () => { ponyfill: GlobalScopePonyfill } {\n return () => ({ ponyfill });\n}\n","import updateIn from 'simple-update-in';\n\nimport { DISMISS_NOTIFICATION } from '../actions/dismissNotification';\nimport { SAGA_ERROR } from '../actions/sagaError';\nimport { SET_NOTIFICATION } from '../actions/setNotification';\nimport isForbiddenPropertyName from '../utils/isForbiddenPropertyName';\n\nimport type { DismissNotificationAction } from '../actions/dismissNotification';\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type { Notification } from '../types/internal/Notification';\nimport type { Reducer } from 'redux';\nimport type { SagaErrorAction } from '../actions/sagaError';\nimport type { SetNotificationAction } from '../actions/setNotification';\n\ntype NotificationsAction = DismissNotificationAction | SagaErrorAction | SetNotificationAction;\ntype NotificationsState = Record<string, Notification>;\n\nconst DEFAULT_STATE: NotificationsState = {};\n\nexport default function createNotificationsReducer({\n Date\n}: GlobalScopePonyfill): Reducer<NotificationsState, NotificationsAction> {\n return function notifications(\n state: NotificationsState = DEFAULT_STATE,\n action: NotificationsAction\n ): NotificationsState {\n const { type } = action;\n const now = Date.now();\n\n if (type === DISMISS_NOTIFICATION) {\n state = updateIn(state, [action.payload.id]);\n } else if (type === SAGA_ERROR) {\n state = updateIn(state, ['connectivitystatus', 'message'], () => 'javascripterror');\n } else if (type === SET_NOTIFICATION) {\n const { alt, data, id, level, message } = action.payload;\n\n if (!isForbiddenPropertyName(id)) {\n // Mitigated through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n const notification = state[id];\n\n if (\n !notification ||\n alt !== notification.alt ||\n !Object.is(data, notification.data) ||\n level !== notification.level ||\n message !== notification.message\n ) {\n state = updateIn(state, [id], () => ({\n alt,\n data,\n id,\n level,\n message,\n timestamp: now\n }));\n }\n }\n }\n\n return state;\n };\n}\n","let FORBIDDEN_PROPERTY_NAMES;\n\nfunction getForbiddenPropertyNames(): string[] {\n return (\n FORBIDDEN_PROPERTY_NAMES ||\n (FORBIDDEN_PROPERTY_NAMES = Object.freeze(\n Array.from(\n new Set([\n // As-of writing, `Object.prototype` includes:\n // __defineGetter__\n // __defineSetter__\n // __lookupGetter__\n // __lookupSetter\n // __proto__\n // constructor\n // hasOwnProperty\n // isPrototypeOf\n // propertyIsEnumerable\n // toLocaleString\n // toString\n // valueOf\n ...Object.getOwnPropertyNames(Object.prototype),\n\n 'prototype'\n ])\n )\n ))\n );\n}\n\nexport default function isForbiddenPropertyName(propertyName: string): boolean {\n return getForbiddenPropertyNames().includes(propertyName);\n}\n","/* eslint no-case-declarations: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n\nimport updateIn from 'simple-update-in';\n\nimport { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\n\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type { IncomingActivityAction } from '../actions/incomingActivity';\nimport type { PostActivityPendingAction } from '../actions/postActivity';\nimport type { Reducer } from 'redux';\n\ntype TypingState = Record<\n string,\n {\n at: number;\n last: number;\n name: string;\n role: 'bot' | 'channel' | 'user';\n }\n>;\ntype TypingAction = IncomingActivityAction | PostActivityPendingAction;\n\nconst DEFAULT_STATE: TypingState = {};\n\nexport default function createLastTypingReducer({ Date }: GlobalScopePonyfill): Reducer<TypingState, TypingAction> {\n return function lastTyping(state: TypingState = DEFAULT_STATE, { payload, type }: TypingAction): TypingState {\n if (type === INCOMING_ACTIVITY || type === POST_ACTIVITY_PENDING) {\n const {\n activity: {\n from: { id, name, role },\n type: activityType\n }\n } = payload;\n\n if (activityType === 'typing') {\n const now = Date.now();\n\n state = updateIn(state, [id, 'at'], at => at || now);\n state = updateIn(state, [id, 'last'], () => now);\n state = updateIn(state, [id, 'name'], () => name);\n state = updateIn(state, [id, 'role'], () => role);\n } else if (activityType === 'message') {\n state = updateIn(state, [id]);\n }\n }\n\n return state;\n };\n}\n","import { SET_DICTATE_INTERIMS } from '../actions/setDictateInterims';\n\nconst DEFAULT_STATE = [];\n\nexport default function dictateInterims(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_DICTATE_INTERIMS:\n state = payload.dictateInterims;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { DICTATING, IDLE, STARTING, STOPPING, WILL_START } from '../constants/DictateState';\n\nimport { SET_DICTATE_STATE } from '../actions/setDictateState';\nimport { START_DICTATE } from '../actions/startDictate';\nimport { STOP_DICTATE } from '../actions/stopDictate';\n\nconst DEFAULT_STATE = IDLE;\n\nexport default function dictateState(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_DICTATE_STATE:\n state = payload.dictateState;\n break;\n\n case START_DICTATE:\n if (state === IDLE || state === STOPPING || state === WILL_START) {\n state = STARTING;\n }\n\n break;\n\n case STOP_DICTATE:\n if (state === STARTING || state === DICTATING) {\n state = STOPPING;\n } else if (state === WILL_START) {\n state = IDLE;\n }\n\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_LANGUAGE } from '../actions/setLanguage';\n\nconst DEFAULT_STATE = 'en-US';\n\nexport default function language(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_LANGUAGE:\n state = payload.language;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","// TODO: [P3] We should obsolete this action in favor of DIRECT_LINE/UPDATE_CONNECTION_STATUS.\n// But today, both actions behave differently, this one only dispatch after connected and not dispatched when disconnected.\nconst CONNECTION_STATUS_UPDATE = 'DIRECT_LINE/CONNECTION_STATUS_UPDATE';\n\nexport default function connectionStatusUpdate(connectionStatus) {\n return {\n type: CONNECTION_STATUS_UPDATE,\n payload: { connectionStatus }\n };\n}\n\nexport { CONNECTION_STATUS_UPDATE };\n","import { CONNECTION_STATUS_UPDATE } from '../actions/connectionStatusUpdate';\n\nconst DEFAULT_STATE = 0;\n\nexport default function readyState(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case CONNECTION_STATUS_UPDATE:\n state = payload.connectionStatus;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","const SET_REFERENCE_GRAMMAR_ID = 'WEB_CHAT/SET_REFERENCE_GRAMMAR_ID';\n\nexport default function setReferenceGrammarID(referenceGrammarID) {\n return {\n type: SET_REFERENCE_GRAMMAR_ID,\n payload: { referenceGrammarID }\n };\n}\n\nexport { SET_REFERENCE_GRAMMAR_ID };\n","import { SET_REFERENCE_GRAMMAR_ID } from '../actions/setReferenceGrammarID';\n\nconst DEFAULT_STATE = null;\n\nexport default function referenceGrammarID(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_REFERENCE_GRAMMAR_ID:\n state = payload.referenceGrammarID || null;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_SEND_BOX_ATTACHMENTS } from '../actions/setSendBoxAttachments';\nimport type { SendBoxAttachment } from '../types/SendBoxAttachment';\n\nconst DEFAULT_STATE: readonly SendBoxAttachment[] = Object.freeze([]);\n\nexport default function sendBoxAttachments(state = DEFAULT_STATE, { payload, type }): readonly SendBoxAttachment[] {\n switch (type) {\n case SET_SEND_BOX_ATTACHMENTS:\n state = payload.attachments;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_SEND_BOX } from '../actions/setSendBox';\n\nconst DEFAULT_STATE = '';\n\nexport default function sendBoxValue(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_SEND_BOX:\n state = payload.text;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_SEND_TIMEOUT } from '../actions/setSendTimeout';\n\nconst DEFAULT_STATE = 20000;\n\nexport default function sendTimeout(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_SEND_TIMEOUT:\n state = payload.sendTimeout;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { SET_SEND_TYPING_INDICATOR } from '../actions/setSendTypingIndicator';\n\nconst DEFAULT_STATE = false;\n\nexport default function sendTypingIndicator(state = DEFAULT_STATE, { payload, type }) {\n switch (type) {\n case SET_SEND_TYPING_INDICATOR:\n state = payload.sendTypingIndicator;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","import { START_SPEAKING_ACTIVITY } from '../actions/startSpeakingActivity';\nimport { STOP_SPEAKING_ACTIVITY } from '../actions/stopSpeakingActivity';\n\nexport default function shouldSpeakIncomingActivity(state = false, { type }) {\n switch (type) {\n case START_SPEAKING_ACTIVITY:\n state = true;\n break;\n\n case STOP_SPEAKING_ACTIVITY:\n state = false;\n break;\n\n default:\n break;\n }\n\n return state;\n}\n","const EMPTY_ARRAY = [];\n\nconst SET_SUGGESTED_ACTIONS = 'WEB_CHAT/SET_SUGGESTED_ACTIONS';\n\nexport default function setSuggestedActions(suggestedActions = EMPTY_ARRAY) {\n return {\n type: SET_SUGGESTED_ACTIONS,\n payload: { suggestedActions }\n };\n}\n\nexport { SET_SUGGESTED_ACTIONS };\n","import { CLEAR_SUGGESTED_ACTIONS } from '../actions/clearSuggestedActions';\nimport { SET_SUGGESTED_ACTIONS } from '../actions/setSuggestedActions';\n\nconst DEFAULT_STATE = [];\n\nexport default function suggestedActions(state = DEFAULT_STATE, { payload = {}, type }) {\n switch (type) {\n case SET_SUGGESTED_ACTIONS:\n if ((payload.suggestedActions || []).length) {\n state = [].slice.call(payload.suggestedActions);\n } else {\n state = DEFAULT_STATE;\n }\n break;\n case CLEAR_SUGGESTED_ACTIONS:\n state = DEFAULT_STATE;\n break;\n default:\n break;\n }\n\n return state;\n}\n","import { fork } from 'redux-saga/effects';\n\nimport clearSuggestedActionsOnPostActivitySaga from './sagas/clearSuggestedActionsOnPostActivitySaga';\nimport connectionStatusToNotificationSaga from './sagas/connectionStatusToNotificationSaga';\nimport connectionStatusUpdateSaga from './sagas/connectionStatusUpdateSaga';\nimport connectSaga from './sagas/connectSaga';\nimport detectSlowConnectionSaga from './sagas/detectSlowConnectionSaga';\nimport emitTypingIndicatorToPostActivitySaga from './sagas/emitTypingIndicatorToPostActivitySaga';\nimport markAllAsSpokenOnStopSpeakActivitySaga from './sagas/markAllAsSpokenOnStopSpeakActivitySaga';\nimport observeActivitySaga from './sagas/observeActivitySaga';\nimport postActivitySaga from './sagas/postActivitySaga';\nimport queueIncomingActivitySaga from './sagas/queueIncomingActivitySaga';\nimport sendEventToPostActivitySaga from './sagas/sendEventToPostActivitySaga';\nimport sendFilesToPostActivitySaga from './sagas/sendFilesToPostActivitySaga';\nimport sendMessageBackToPostActivitySaga from './sagas/sendMessageBackToPostActivitySaga';\nimport sendMessageToPostActivitySaga from './sagas/sendMessageToPostActivitySaga';\nimport sendPostBackToPostActivitySaga from './sagas/sendPostBackToPostActivitySaga';\nimport sendTypingIndicatorOnSetSendBoxSaga from './sagas/sendTypingIndicatorOnSetSendBoxSaga';\nimport speakActivityAndStartDictateOnIncomingActivityFromOthersSaga from './sagas/speakActivityAndStartDictateOnIncomingActivityFromOthersSaga';\nimport startDictateOnSpeakCompleteSaga from './sagas/startDictateOnSpeakCompleteSaga';\nimport startSpeakActivityOnPostActivitySaga from './sagas/startSpeakActivityOnPostActivitySaga';\nimport stopDictateOnCardActionSaga from './sagas/stopDictateOnCardActionSaga';\nimport stopSpeakingActivityOnInputSaga from './sagas/stopSpeakingActivityOnInputSaga';\nimport submitSendBoxSaga from './sagas/submitSendBoxSaga';\n\nimport type { GlobalScopePonyfill } from './types/GlobalScopePonyfill';\nimport type { Saga } from 'redux-saga';\n\ntype CreateSagasOptions = {\n ponyfill: GlobalScopePonyfill;\n};\n\nexport default function createSagas({ ponyfill }: CreateSagasOptions): Saga {\n return function* () {\n // TODO: [P2] Since fork() silently catches all exceptions, we need to find a way to console.error them out.\n\n yield fork(clearSuggestedActionsOnPostActivitySaga);\n yield fork(connectionStatusToNotificationSaga);\n yield fork(connectionStatusUpdateSaga);\n yield fork(connectSaga);\n yield fork(detectSlowConnectionSaga, ponyfill);\n yield fork(emitTypingIndicatorToPostActivitySaga);\n yield fork(markAllAsSpokenOnStopSpeakActivitySaga);\n yield fork(observeActivitySaga);\n yield fork(postActivitySaga, ponyfill);\n yield fork(queueIncomingActivitySaga, ponyfill);\n yield fork(sendEventToPostActivitySaga);\n yield fork(sendFilesToPostActivitySaga);\n yield fork(sendMessageBackToPostActivitySaga);\n yield fork(sendMessageToPostActivitySaga);\n yield fork(sendPostBackToPostActivitySaga);\n yield fork(sendTypingIndicatorOnSetSendBoxSaga, ponyfill);\n yield fork(speakActivityAndStartDictateOnIncomingActivityFromOthersSaga);\n yield fork(startDictateOnSpeakCompleteSaga);\n yield fork(startSpeakActivityOnPostActivitySaga);\n yield fork(stopDictateOnCardActionSaga);\n yield fork(stopSpeakingActivityOnInputSaga);\n yield fork(submitSendBoxSaga);\n };\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\nimport setSuggestedActions from '../actions/setSuggestedActions';\nimport whileConnected from './effects/whileConnected';\n\nfunction* clearSuggestedActions() {\n yield put(setSuggestedActions());\n}\n\nfunction* clearSuggestedActionsOnPostActivity() {\n yield takeEvery(\n ({ payload, type }) => type === POST_ACTIVITY_PENDING && payload.activity.type === 'message',\n clearSuggestedActions\n );\n}\n\nexport default function* clearSuggestedActionsOnPostActivitySaga() {\n yield whileConnected(clearSuggestedActionsOnPostActivity);\n}\n","import { call, cancel, fork, take } from 'redux-saga/effects';\n\nimport { CONNECT_FULFILLING } from '../../actions/connect';\nimport { DISCONNECT_PENDING } from '../../actions/disconnect';\nimport { RECONNECT_PENDING, RECONNECT_FULFILLING } from '../../actions/reconnect';\n\nimport type { DirectLineJSBotConnection } from '../../types/external/DirectLineJSBotConnection';\n\nexport default function whileConnectedEffect<P extends any[]>(\n fn: (\n {\n directLine,\n userID,\n username\n }: {\n directLine: DirectLineJSBotConnection;\n userID: string;\n username: string;\n },\n ...args: P\n ) => void,\n ...args: P\n) {\n return call(function* whileConnected() {\n for (;;) {\n const {\n meta: { userID, username },\n payload: { directLine }\n }: {\n meta: {\n userID: string;\n username: string;\n };\n payload: { directLine: DirectLineJSBotConnection };\n } = yield take([CONNECT_FULFILLING, RECONNECT_FULFILLING]);\n\n const task = yield fork(fn, { directLine, userID, username }, ...args);\n\n // When we receive DISCONNECT_PENDING or RECONNECT_PENDING, the Direct Line connection is currently busy and should not be used.\n\n yield take([DISCONNECT_PENDING, RECONNECT_PENDING]);\n yield cancel(task);\n }\n });\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 1, 2, 3, 4] }] */\n\nimport { call, put, takeLatest } from 'redux-saga/effects';\n\nimport { CONNECT } from '../actions/connect';\nimport createPromiseQueue from '../createPromiseQueue';\nimport setNotification from '../actions/setNotification';\n\nconst CONNECTIVITY_STATUS_NOTIFICATION_ID = 'connectivitystatus';\n\nfunction subscribeToPromiseQueue(observable) {\n const { push, shift } = createPromiseQueue();\n const subscription = observable.subscribe({ next: push });\n\n return {\n shift,\n unsubscribe() {\n subscription.unsubscribe();\n }\n };\n}\n\nfunction* connectionStatusToNotification({ payload: { directLine } }) {\n const { shift, unsubscribe } = subscribeToPromiseQueue(directLine.connectionStatus$);\n\n try {\n let reconnecting;\n\n for (;;) {\n const value = yield call(shift);\n\n switch (value) {\n case 0:\n case 1:\n yield put(\n setNotification({\n id: CONNECTIVITY_STATUS_NOTIFICATION_ID,\n level: 'info',\n message: reconnecting ? 'reconnecting' : 'connecting'\n })\n );\n\n break;\n\n case 2:\n reconnecting = 1;\n\n yield put(\n setNotification({\n id: CONNECTIVITY_STATUS_NOTIFICATION_ID,\n level: 'success',\n message: 'connected'\n })\n );\n\n break;\n\n case 3:\n case 4:\n reconnecting = 1;\n\n yield put(\n setNotification({\n id: CONNECTIVITY_STATUS_NOTIFICATION_ID,\n level: 'error',\n message: 'failedtoconnect'\n })\n );\n\n break;\n\n default:\n break;\n }\n }\n } finally {\n unsubscribe();\n }\n}\n\nexport default function* () {\n yield takeLatest(CONNECT, connectionStatusToNotification);\n}\n","import createDeferred from 'p-defer-es5';\n\nexport default function createPromiseQueue() {\n let deferred;\n const queue = [];\n\n const push = value => {\n if (deferred) {\n const { resolve } = deferred;\n\n deferred = null;\n resolve(value);\n } else {\n queue.push(value);\n }\n };\n\n const shift = () =>\n queue.length ? Promise.resolve(queue.shift()) : (deferred || (deferred = createDeferred())).promise;\n\n return {\n push,\n shift\n };\n}\n","import { put } from 'redux-saga/effects';\n\nimport connectionStatusUpdate from '../actions/connectionStatusUpdate';\nimport observeEach from './effects/observeEach';\nimport setReferenceGrammarID from '../actions/setReferenceGrammarID';\nimport whileConnected from './effects/whileConnected';\n\nfunction* observeConnectionStatus({ directLine }) {\n yield observeEach(directLine.connectionStatus$, function* updateConnectionStatus(connectionStatus) {\n yield put(connectionStatusUpdate(connectionStatus));\n yield put(setReferenceGrammarID(directLine.referenceGrammarId));\n });\n}\n\nexport default function* connectionStatusUpdateSaga() {\n yield whileConnected(observeConnectionStatus);\n}\n","import { call } from 'redux-saga/effects';\n\nimport createPromiseQueue from '../../createPromiseQueue';\n\nexport default function observeEachEffect(observable, saga) {\n return call(function* observeEach() {\n const queue = createPromiseQueue();\n const subscription = observable.subscribe({ next: queue.push });\n\n try {\n for (;;) {\n const result = yield call(queue.shift);\n\n yield call(saga, result);\n }\n } finally {\n subscription.unsubscribe();\n }\n });\n}\n","/* eslint no-magic-numbers: [\"error\", { \"ignore\": [0, 10] }] */\n\nimport { call, cancel, cancelled, fork, put, race, take } from 'redux-saga/effects';\n\nimport { jwtDecode } from 'jwt-decode';\n\nimport { CONNECT } from '../actions/connect';\nimport createPromiseQueue from '../createPromiseQueue';\nimport forkPut from './effects/forkPut';\nimport uniqueID from '../utils/uniqueID';\nimport updateConnectionStatus, { UPDATE_CONNECTION_STATUS } from '../actions/updateConnectionStatus';\n\nimport { DISCONNECT, DISCONNECT_PENDING, DISCONNECT_FULFILLED } from '../actions/disconnect';\n\nimport { RECONNECT } from '../actions/reconnect';\n\nconst CONNECTING = 1;\nconst ONLINE = 2;\nconst UNINITIALIZED = 0;\n\nfunction randomUserID() {\n return `r_${uniqueID().substring(0, 10)}`;\n}\n\nfunction* observeAndPutConnectionStatusUpdate(directLine) {\n const connectionStatusQueue = createPromiseQueue();\n const connectionStatusSubscription = directLine.connectionStatus$.subscribe({ next: connectionStatusQueue.push });\n\n try {\n for (;;) {\n const connectionStatus = yield call(connectionStatusQueue.shift);\n\n yield put(updateConnectionStatus(connectionStatus));\n }\n } finally {\n connectionStatusSubscription.unsubscribe();\n }\n}\n\n// TODO: [P2] We should move this check and rectification to DirectLineJS.\nfunction rectifyUserID(directLine, userIDFromAction) {\n const { token } = directLine;\n\n let userIDFromToken;\n\n // TODO: Add test to make sure \"jwt-decode\" work as expected.\n try {\n userIDFromToken = (jwtDecode(token) || {}).user;\n // eslint-disable-next-line no-empty\n } catch (err) {}\n\n const result = {\n fromAction: userIDFromAction,\n fromToken: userIDFromToken\n };\n\n if (userIDFromToken) {\n if (userIDFromAction && userIDFromAction !== userIDFromToken) {\n console.warn(\n 'Web Chat: user ID is both specified in the Direct Line token and passed in, will use the user ID from the token.'\n );\n }\n\n result.final = userIDFromToken;\n } else if (userIDFromAction) {\n if (typeof userIDFromAction !== 'string') {\n console.warn('Web Chat: user ID must be a string.');\n\n result.final = randomUserID();\n } else if (/^dl_/u.test(userIDFromAction)) {\n console.warn(\n 'Web Chat: user ID prefixed with \"dl_\" is reserved and must be embedded into the Direct Line token to prevent forgery.'\n );\n\n result.final = randomUserID();\n } else {\n result.final = userIDFromAction;\n }\n } else {\n result.final = randomUserID();\n }\n\n return result;\n}\n\n// We could make this a Promise instead of saga (function generator) to make the code cleaner, if:\n// 1. We found a way to cancel Promise\n// 2. subscribe() are shared amongst all subscriptions, e.g. turn Observable into events\nfunction* connectSaga(directLine) {\n // DirectLineJS starts the connection only after the first subscriber for activity$, not connectionStatus$\n const activitySubscription = directLine.activity$.subscribe({ next: () => 0 });\n const unsubscribeActivity = activitySubscription.unsubscribe.bind(activitySubscription);\n\n try {\n for (;;) {\n const {\n payload: { connectionStatus }\n } = yield take(UPDATE_CONNECTION_STATUS);\n\n if (connectionStatus === ONLINE) {\n // TODO: [P2] DirectLineJS should kill the connection when we unsubscribe\n // But currently in v3, DirectLineJS does not have this functionality\n // Thus, we need to call \"end()\" explicitly\n\n return () => {\n unsubscribeActivity();\n directLine.end();\n };\n } else if (connectionStatus !== UNINITIALIZED && connectionStatus !== CONNECTING) {\n throw new Error(`Failed to connect, DirectLineJS returned ${connectionStatus}.`);\n }\n }\n } catch (err) {\n // We will unsubscribe if we failed to connect or got cancelled only.\n // We should not unsubscribe in happy case, because DirectLineJS should relying on the subscription to connect/disconnect.\n unsubscribeActivity();\n\n throw err;\n } finally {\n if (yield cancelled()) {\n unsubscribeActivity();\n }\n }\n}\n\nfunction* reconnectSaga() {\n for (;;) {\n const {\n payload: { connectionStatus }\n } = yield take(UPDATE_CONNECTION_STATUS);\n\n if (connectionStatus === ONLINE) {\n break;\n } else if (connectionStatus !== CONNECTING) {\n throw new Error(`Failed to reconnect. DirectLineJS returned ${connectionStatus}.`);\n }\n }\n}\n\n// This is similar to behavior of redux-promise-middleware, but using saga instead of Promise.\n// We guarantee PENDING -> FULFILLING -> FULFILLED, or PENDING -> REJECTED. This will help us simplify logic in other part of code.\n// Note that after the saga is cancelled, subsequent call to put() will be ignored silently.\nfunction* runAsyncEffect({ type, meta, payload }, callEffectFactory) {\n try {\n yield forkPut({ type: `${type}_PENDING`, meta, payload });\n\n const result = yield callEffectFactory();\n\n yield forkPut({ type: `${type}_FULFILLING`, meta, payload }, { type: `${type}_FULFILLED`, meta, payload });\n\n return result;\n } catch (payload) {\n yield forkPut({ type: `${type}_REJECTED`, error: true, meta, payload });\n\n throw payload;\n }\n}\n\nfunction* takeDisconnectAsError() {\n yield take(DISCONNECT);\n\n throw new Error('disconnected');\n}\n\nfunction runAsyncEffectUntilDisconnect(baseAction, callEffectFactory) {\n // We cannot use saga cancel() here, because cancelling saga will prohibit us from sending *_REJECTED.\n // Without REJECTED, it impacts our assumptions around PENDING/FULFILLED/REJECTED.\n return runAsyncEffect(baseAction, function* runUntilDisconnect() {\n const { result } = yield race({\n _: takeDisconnectAsError(),\n result: callEffectFactory()\n });\n\n return result;\n });\n}\n\nexport default function* () {\n for (;;) {\n const {\n payload: { directLine, userID: userIDFromAction, username }\n } = yield take(CONNECT);\n\n const updateConnectionStatusTask = yield fork(observeAndPutConnectionStatusUpdate, directLine);\n const rectifiedUserID = rectifyUserID(directLine, userIDFromAction);\n\n // TODO: [P2] Checks if this attached subtask will get killed if the parent task is complete (peacefully), errored out, or cancelled.\n const meta = {\n userID: rectifiedUserID.final,\n username\n };\n\n // Send user ID to DirectLineJS if it was specified from props of <API.Composer>.\n // However, DirectLineJS may still prefer the user ID from token if it is burnt into the token.\n // To prevent DirectLineJS giving false warnings, we will only call setUserId() if it is different than the token.\n directLine.setUserId && rectifiedUserID.fromToken !== meta.userID && directLine.setUserId(meta.userID);\n\n let disconnectMeta;\n\n // We will dispatch CONNECT_PENDING, wait for connect completed, errored, or cancelled (thru disconnect).\n // Then dispatch CONNECT_FULFILLED/CONNECT_REJECTED as needed.\n try {\n const endDirectLine = yield runAsyncEffectUntilDisconnect(\n {\n type: CONNECT,\n meta,\n payload: { directLine }\n },\n () => call(connectSaga, directLine)\n );\n\n try {\n for (;;) {\n // We are waiting for connection status change or disconnect action.\n const { updateConnectionStatusAction: { payload: { connectionStatus } = {} } = {} } = yield race({\n _: take(DISCONNECT),\n updateConnectionStatusAction: take(UPDATE_CONNECTION_STATUS)\n });\n\n // If it is not disconnect action, connectionStatus will not be undefined.\n if (connectionStatus === CONNECTING) {\n // If DirectLineJS changed connectionStatus to CONNECTING, we will treat it as reconnect status.\n yield runAsyncEffectUntilDisconnect(\n {\n type: RECONNECT,\n meta,\n payload: { directLine }\n },\n () => call(reconnectSaga)\n );\n } else if (connectionStatus !== ONLINE) {\n if (typeof connectionStatus !== 'undefined') {\n // We need to kill the connection because DirectLineJS want to close it.\n throw new Error(`Connection status changed to ${connectionStatus}`);\n } else {\n // Someone dispatched disconnect action.\n break;\n }\n }\n }\n } finally {\n endDirectLine();\n }\n } catch (error) {\n disconnectMeta = { error };\n } finally {\n yield cancel(updateConnectionStatusTask);\n\n // Even if the connection is interrupted, we will still emit DISCONNECT_PENDING.\n // This will makes handling logic easier. If CONNECT_FULFILLED, we guarantee DISCONNECT_PENDING.\n yield forkPut(\n { type: DISCONNECT_PENDING, meta: disconnectMeta, payload: { directLine } },\n { type: DISCONNECT_FULFILLED, meta: disconnectMeta, payload: { directLine } }\n );\n }\n }\n}\n","import { fork, put } from 'redux-saga/effects';\n\n// In redux-saga, if we call the following effects in order, we might miss the take('C').\n// 1. take('A')\n// 2. put({ type: 'B' })\n// 3. take('C')\n\n// We need to modify step 2 to:\n// 2. fork(function* () { yield put({ type: 'B' }) })\n\n// This is a helper function for this purpose.\n\nexport default function forkPutEffect(...actions) {\n return fork(function* forkPut() {\n for (const action of actions) {\n yield put(action);\n }\n });\n}\n","const UPDATE_CONNECTION_STATUS = 'DIRECT_LINE/UPDATE_CONNECTION_STATUS';\n\nexport default function updateConnectionStatus(connectionStatus) {\n return {\n type: UPDATE_CONNECTION_STATUS,\n payload: { connectionStatus }\n };\n}\n\nexport { UPDATE_CONNECTION_STATUS };\n","import { call, put, race, take } from 'redux-saga/effects';\n\nimport { CONNECT_FULFILLED, CONNECT_PENDING, CONNECT_REJECTED, CONNECT_STILL_PENDING } from '../actions/connect';\nimport { RECONNECT_FULFILLED, RECONNECT_PENDING, RECONNECT_REJECTED } from '../actions/reconnect';\nimport sleep from '../utils/sleep';\n\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\n\nconst SLOW_CONNECTION_AFTER = 15000;\n\nexport default function* detectSlowConnectionSaga(ponyfill: GlobalScopePonyfill) {\n for (;;) {\n yield take([CONNECT_PENDING, RECONNECT_PENDING]);\n\n const connectivityRace = yield race({\n fulfilled: take([CONNECT_FULFILLED, RECONNECT_FULFILLED]),\n rejected: take([CONNECT_REJECTED, RECONNECT_REJECTED]),\n slow: call(sleep, SLOW_CONNECTION_AFTER, ponyfill)\n });\n\n if ('slow' in connectivityRace) {\n yield put({ type: CONNECT_STILL_PENDING });\n }\n }\n}\n","import type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\n\nexport default function sleep(interval: number, ponyfill: GlobalScopePonyfill): Promise<void> {\n return new Promise(resolve => ponyfill.setTimeout(resolve, Math.max(interval, 0)));\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { EMIT_TYPING_INDICATOR } from '../actions/emitTypingIndicator';\nimport postActivity from '../actions/postActivity';\nimport whileConnected from './effects/whileConnected';\n\nfunction* postTypingActivity() {\n yield put(\n postActivity({\n type: 'typing'\n })\n );\n}\n\nfunction* emitTypingActivityToPostActivity() {\n yield takeEvery(({ type }) => type === EMIT_TYPING_INDICATOR, postTypingActivity);\n}\n\nexport default function* emitTypingActivityToPostActivitySaga() {\n yield whileConnected(emitTypingActivityToPostActivity);\n}\n","import { put, select, takeEvery } from 'redux-saga/effects';\n\nimport { of as activitiesOf } from '../selectors/activities';\nimport { STOP_SPEAKING_ACTIVITY } from '../actions/stopSpeakingActivity';\nimport markActivity from '../actions/markActivity';\nimport speakingActivity from '../definitions/speakingActivity';\n\nfunction* markAllAsSpoken() {\n const speakingActivities = yield select(activitiesOf(speakingActivity));\n\n for (const activity of speakingActivities) {\n yield put(markActivity(activity, 'speak', false));\n }\n}\n\n// TODO: [P4] We should turn this into a reducer instead\nexport default function* markAllAsSpokenOnStopSpeakActivitySaga() {\n yield takeEvery(STOP_SPEAKING_ACTIVITY, markAllAsSpoken);\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\nimport type { WebChatActivity } from '../types/WebChatActivity';\n\nconst activities = ({ activities }: ReduxState) => activities;\n\nconst of = (predicate: (activity: WebChatActivity) => boolean) => (state: ReduxState) =>\n activities(state).filter(predicate);\nconst ofID = (targetID: string) => of(({ id }) => id === targetID);\nconst ofType = (targetType: string) => of(({ type }) => type === targetType);\n\nexport default activities;\nexport { of, ofID, ofType };\n","// If true, the activity is in the queue and needs to be spoken.\n\nexport default function speakingActivity(activity) {\n return activity.channelData?.speak;\n}\n","import { put } from 'redux-saga/effects';\nimport updateIn from 'simple-update-in';\n\nimport observeEach from './effects/observeEach';\nimport queueIncomingActivity from '../actions/queueIncomingActivity';\nimport whileConnected from './effects/whileConnected';\nimport type { DirectLineActivity } from '../types/external/DirectLineActivity';\nimport type { DirectLineJSBotConnection } from '../types/external/DirectLineJSBotConnection';\nimport type { WebChatActivity } from '../types/WebChatActivity';\n\nconst PASSTHRU_FN = (value: unknown) => value;\n\nfunction patchActivityWithFromRole(activity: DirectLineActivity, userID?: string): DirectLineActivity {\n // Some activities, such as \"ConversationUpdate\", does not have \"from\" defined.\n // And although \"role\" is defined in Direct Line spec, it was not sent over the wire.\n // We normalize the activity here to simplify null-check and logic later.\n\n // Patch activity.from.role to make sure its either \"bot\", \"user\", or \"channel\"\n if (!activity.from) {\n activity = updateIn(activity, ['from', 'role'], () => 'channel');\n } else if (!activity.from.role) {\n if (activity.from.id === userID) {\n activity = updateIn(activity, ['from', 'role'], () => 'user');\n } else if (activity.from.id) {\n activity = updateIn(activity, ['from', 'role'], () => 'bot');\n } else {\n activity = updateIn(activity, ['from', 'role'], () => 'channel');\n }\n }\n\n return activity;\n}\n\nfunction patchNullAsUndefined(activity: DirectLineActivity): DirectLineActivity {\n // These fields are known used in Web Chat and in any cases, they should not be null, but undefined.\n // The only field omitted is \"value\", as it could be null purposefully.\n\n return [\n 'attachmentLayout',\n 'attachments',\n 'channelData',\n 'conversation',\n 'entities',\n 'from',\n 'inputHint',\n 'locale',\n 'name',\n 'recipient',\n 'speak',\n 'suggestedActions',\n 'text',\n 'textFormat',\n 'timestamp',\n 'type'\n ].reduce((activity, name) => {\n const { [name]: value } = activity;\n\n return updateIn(activity, [name], typeof value === 'undefined' || value === null ? undefined : PASSTHRU_FN);\n }, activity);\n}\n\n// Patching the `from.name` to be a human readable name.\n// We use the `from.name` for typing indicator, such that it read \"John is typing...\".\nfunction patchFromName(activity: DirectLineActivity) {\n return updateIn(activity, ['from', 'name'], (name: string | undefined): string => {\n const { channelId, from = {} } = activity;\n\n if ((channelId === 'directline' || channelId === 'webchat') && from.id === from.name && from.role === 'bot') {\n return 'Bot';\n }\n\n return name;\n });\n}\n\nfunction* observeActivity({ directLine, userID }: { directLine: DirectLineJSBotConnection; userID?: string }) {\n yield observeEach(directLine.activity$, function* observeActivity(activity: DirectLineActivity) {\n // TODO: [P2] #3953 Move the patching logic to a DirectLineJS wrapper, instead of too close to inners of Web Chat.\n activity = patchNullAsUndefined(activity);\n activity = patchActivityWithFromRole(activity, userID);\n activity = patchFromName(activity);\n\n yield put(queueIncomingActivity(activity as WebChatActivity));\n });\n}\n\nexport default function* observeActivitySaga() {\n yield whileConnected(observeActivity);\n}\n","const QUEUE_INCOMING_ACTIVITY = 'DIRECT_LINE/QUEUE_INCOMING_ACTIVITY';\n\nexport default function queueIncomingActivity(activity) {\n return {\n type: QUEUE_INCOMING_ACTIVITY,\n payload: { activity }\n };\n}\n\nexport { QUEUE_INCOMING_ACTIVITY };\n","import { all, call, cancelled, put, race, select, take, takeEvery } from 'redux-saga/effects';\n\nimport { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport {\n POST_ACTIVITY,\n POST_ACTIVITY_FULFILLED,\n POST_ACTIVITY_IMPEDED,\n POST_ACTIVITY_PENDING,\n POST_ACTIVITY_REJECTED\n} from '../actions/postActivity';\nimport dateToLocaleISOString from '../utils/dateToLocaleISOString';\nimport deleteKey from '../utils/deleteKey';\nimport languageSelector from '../selectors/language';\nimport observeOnce from './effects/observeOnce';\nimport sendTimeoutSelector from '../selectors/sendTimeout';\nimport sleep from '../utils/sleep';\nimport uniqueID from '../utils/uniqueID';\nimport whileConnected from './effects/whileConnected';\n\nimport type { DirectLineActivity } from '../types/external/DirectLineActivity';\nimport type { DirectLineJSBotConnection } from '../types/external/DirectLineJSBotConnection';\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type { IncomingActivityAction } from '../actions/incomingActivity';\nimport type {\n PostActivityAction,\n PostActivityFulfilledAction,\n PostActivityImpededAction,\n PostActivityPendingAction,\n PostActivityRejectedAction\n} from '../actions/postActivity';\nimport type { WebChatActivity } from '../types/WebChatActivity';\nimport type { WebChatOutgoingActivity } from '../types/internal/WebChatOutgoingActivity';\n\n// After 5 minutes, the saga will stop from listening for echo backs and consider the outgoing message as permanently undeliverable.\n// This value must be equals to or larger than the user-defined `styleOptions.sendTimeout`.\nconst HARD_SEND_TIMEOUT = 300000;\n\nfunction* postActivity(\n directLine: DirectLineJSBotConnection,\n userID: string,\n username: string,\n numActivitiesPosted: number,\n { meta: { method }, payload: { activity } }: PostActivityAction,\n ponyfill: GlobalScopePonyfill\n) {\n const attachments = (activity.type === 'message' && activity.attachments) || [];\n const clientActivityID = uniqueID();\n const locale = yield select(languageSelector);\n const localTimeZone =\n typeof window.Intl === 'undefined' ? undefined : new Intl.DateTimeFormat().resolvedOptions().timeZone;\n const now = new ponyfill.Date();\n\n // Currently, we allow untyped outgoing activity as long as the chat adapter can deliver.\n // In the future, we should warn if the outgoing activity is not matching the type.\n const outgoingActivity: WebChatOutgoingActivity = {\n ...deleteKey(activity, 'id'),\n channelData: {\n // Remove local fields that should not be send to the service.\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n ...deleteKey(activity.channelData, 'state', 'webchat:send-status'),\n clientActivityID\n },\n channelId: 'webchat',\n from: {\n id: userID,\n name: username,\n role: 'user'\n },\n locale,\n localTimestamp: dateToLocaleISOString(now),\n localTimezone: localTimeZone,\n ...(activity.type === 'message'\n ? {\n attachments:\n attachments &&\n attachments.map(({ contentType, contentUrl, name, thumbnailUrl }) => ({\n contentType,\n contentUrl,\n name,\n thumbnailUrl\n })),\n text: activity.text\n }\n : activity.type === 'event'\n ? {\n name: activity.name,\n value: activity.value\n }\n : {})\n };\n\n if (!numActivitiesPosted) {\n outgoingActivity.entities = [\n ...(outgoingActivity.entities || []),\n {\n // TODO: [P4] Currently in v3, we send the capabilities although the client might not actually have them\n // We need to understand why we need to send these, and only send capabilities the client have\n requiresBotState: true,\n supportsListening: true,\n supportsTts: true,\n type: 'ClientCapabilities'\n }\n ];\n }\n\n const meta: { clientActivityID: string; method: string } = { clientActivityID, method };\n\n yield put({\n type: POST_ACTIVITY_PENDING,\n meta,\n payload: { activity: outgoingActivity }\n } as PostActivityPendingAction);\n\n let echoed: boolean | undefined;\n\n try {\n // Quirks: We might receive INCOMING_ACTIVITY before the postActivity call completed\n // So, we setup expectation first, then postActivity afterward\n\n const echoBackCall = call(function* () {\n for (;;) {\n const {\n payload: { activity }\n }: IncomingActivityAction = yield take(INCOMING_ACTIVITY);\n if (activity.channelData?.clientActivityID === clientActivityID && activity.id) {\n echoed = true;\n\n return activity;\n }\n }\n });\n\n // Timeout could be due to either:\n // - Post activity call may take too long time to complete\n // - Direct Line service only respond on HTTP after bot respond to Direct Line\n // - Activity may take too long time to echo back\n\n const sendTimeout: number = yield select(sendTimeoutSelector);\n\n const {\n send: { echoBack }\n }: { send: { echoBack: WebChatActivity } } = yield race({\n send: all({\n echoBack: echoBackCall,\n postActivity: observeOnce(directLine.postActivity(outgoingActivity as DirectLineActivity))\n }),\n timeout: call(function* () {\n yield call(sleep, sendTimeout, ponyfill);\n\n // The IMPEDED action is for backward compatibility by changing `channelData.state` to \"send failed\".\n // `channelData.state` is being deprecated in favor of `channelData['webchat:send-status']`.\n // Please refer to #4362 for details. Remove on or after 2024-07-31.\n yield put({\n type: POST_ACTIVITY_IMPEDED,\n meta,\n payload: { activity: outgoingActivity }\n } as PostActivityImpededAction);\n\n yield call(sleep, HARD_SEND_TIMEOUT - sendTimeout, ponyfill);\n\n throw !echoed\n ? new Error('timed out while waiting for outgoing message to echo back')\n : new Error('timed out while waiting for postActivity to return any values');\n })\n });\n\n yield put({ type: POST_ACTIVITY_FULFILLED, meta, payload: { activity: echoBack } } as PostActivityFulfilledAction);\n } catch (err) {\n console.error('botframework-webchat: Failed to post activity to chat adapter.', err);\n\n yield put({\n type: POST_ACTIVITY_REJECTED,\n error: true,\n meta,\n payload: err\n } as PostActivityRejectedAction);\n } finally {\n if (yield cancelled()) {\n yield put({\n type: POST_ACTIVITY_REJECTED,\n error: true,\n meta,\n payload: new Error('cancelled')\n } as PostActivityRejectedAction);\n }\n }\n}\n\nexport default function* postActivitySaga(ponyfill: GlobalScopePonyfill) {\n yield whileConnected(function* postActivityWhileConnected({\n directLine,\n userID,\n username\n }: {\n directLine: DirectLineJSBotConnection;\n userID: string;\n username: string;\n }) {\n let numActivitiesPosted = 0;\n\n yield takeEvery(POST_ACTIVITY, function* postActivityWrapper(action: PostActivityAction) {\n yield* postActivity(directLine, userID, username, numActivitiesPosted++, action, ponyfill);\n });\n });\n}\n","/* eslint no-magic-numbers: [\"off\", { \"ignore\": [1, 2, 3, 60] }] */\n\nfunction pad(value: number, count = 2): string {\n if (typeof value !== 'number') {\n throw new Error('First argument must be a number');\n }\n\n let stringValue = value + '';\n\n while (stringValue.length < count) {\n stringValue = '0' + stringValue;\n }\n\n return stringValue;\n}\n\n// Adopted from https://stackoverflow.com/questions/17415579/how-to-iso-8601-format-a-date-with-timezone-offset-in-javascript.\n// Use typing of `Date` from globalThis.\n// eslint-disable-next-line no-restricted-globals\nexport default function dateToLocaleISOString(date: Date): string {\n const isDateLike =\n // @ts-ignore TypeScript think this is always true.\n date.getTimezoneOffset &&\n // @ts-ignore TypeScript think this is always true.\n date.getFullYear &&\n // @ts-ignore TypeScript think this is always true.\n date.getMonth &&\n // @ts-ignore TypeScript think this is always true.\n date.getDate &&\n // @ts-ignore TypeScript think this is always true.\n date.getHours &&\n // @ts-ignore TypeScript think this is always true.\n date.getMinutes &&\n // @ts-ignore TypeScript think this is always true.\n date.getSeconds &&\n date.getMilliseconds;\n\n if (!isDateLike) {\n throw new Error('First argument must be a Date-like object.');\n }\n\n const timezoneOffset = -date.getTimezoneOffset();\n const timezoneSign = timezoneOffset < 0 ? '-' : '+';\n\n // \"yyyy-MM-DDTHH:mm:ss.fff+08:00\" for GMT+08\n // \"yyyy-MM-DDTHH:mm:ss.fffZ\" for UTC\n\n const absoluteTimezoneOffset = ~~Math.abs(timezoneOffset);\n\n return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}T${pad(date.getHours())}:${pad(\n date.getMinutes()\n )}:${pad(date.getSeconds())}.${pad(date.getMilliseconds(), 3)}${\n timezoneOffset ? `${timezoneSign}${pad(~~(absoluteTimezoneOffset / 60))}:${pad(absoluteTimezoneOffset % 60)}` : 'Z'\n }`;\n}\n","import isForbiddenPropertyName from './isForbiddenPropertyName';\n\nexport default function deleteKey<TMap, TKey extends keyof TMap>(map: TMap, ...keys: TKey[]): Omit<TMap, TKey> {\n if (!map) {\n return map;\n }\n\n const nextMap = { ...map };\n\n for (const key of keys) {\n if (typeof key !== 'string' || !isForbiddenPropertyName(key)) {\n // Mitigation through denylisting.\n // eslint-disable-next-line security/detect-object-injection\n delete nextMap[key];\n }\n }\n\n return nextMap;\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ language }: ReduxState): string => language;\n","import { call } from 'redux-saga/effects';\n\nimport { Observable, Observer, Subscription } from '../../types/external/Observable';\n\nexport default function observeOnceEffect<T>(observable: Observable<T>) {\n return call(function* observeOnce() {\n let subscription: Subscription;\n\n try {\n return yield call(\n () =>\n new Promise<T>((resolve, reject) => {\n subscription = observable.subscribe({\n complete: resolve,\n error: reject,\n next: resolve\n } as Observer<T>);\n })\n );\n } finally {\n subscription && subscription.unsubscribe();\n }\n });\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ sendTimeout }: ReduxState): number => sendTimeout;\n","import { call, cancelled, fork, put, race, select, take } from 'redux-saga/effects';\n\nimport { QUEUE_INCOMING_ACTIVITY } from '../actions/queueIncomingActivity';\nimport activitiesSelector, { ofType as activitiesOfType } from '../selectors/activities';\nimport activityFromBot from '../definitions/activityFromBot';\nimport incomingActivity, { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport setSuggestedActions from '../actions/setSuggestedActions';\nimport sleep from '../utils/sleep';\nimport whileConnected from './effects/whileConnected';\n\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\n\n// We will hold up the replying activity if the originating activity did not arrive, up to 5 seconds.\nconst REPLY_TIMEOUT = 5000;\n\nfunction* takeEveryAndSelect(actionType, selector, fn) {\n // select() will free up the code execution.\n // If we pair up with takeEvery(), it will allow actions to slip through.\n // Thus, we are writing one that don't use takeEvery().\n while (!(yield cancelled())) {\n const action = yield take(actionType);\n const state = yield select(selector);\n\n yield fork(fn, action, state);\n }\n}\n\n// Wait for specific activity to arrive in the transcript.\n// We will use the initial set of activities to close time gaps between select() and take().\n// If another activity with the same \"replyToId\" is already rendered (in the \"activities\" array),\n// we will skip the wait as we already waited long enough for the missing activity to show up.\nfunction* waitForActivityId(replyToId, initialActivities) {\n let activities = initialActivities;\n\n for (;;) {\n const replied = activities.find(activity => activity.id === replyToId || activity.replyToId === replyToId);\n\n if (replied) {\n break;\n }\n\n const {\n payload: { activity }\n } = yield take(INCOMING_ACTIVITY);\n\n if (activity.id === replyToId) {\n break;\n }\n\n activities = yield select(activitiesSelector);\n }\n}\n\nfunction* queueIncomingActivity({ userID }: { userID: string }, ponyfill: GlobalScopePonyfill) {\n yield takeEveryAndSelect(\n QUEUE_INCOMING_ACTIVITY,\n activitiesSelector,\n function* queueIncomingActivity({ payload: { activity } }, initialActivities) {\n // This is for resolving an accessibility issue.\n // If the incoming activity has \"replyToId\" field, hold on it until the activity replied to is in the transcript, then release this one.\n const { replyToId } = activity;\n const initialBotActivities = initialActivities.filter(({ from: { role } }) => role === 'bot');\n\n // To speed up the first activity render time, we do not delay the first activity from the bot.\n // Even if it is the first activity from the bot, the bot might be \"replying\" to the \"conversationUpdate\" event.\n // Thus, the \"replyToId\" will always be there even it is the first activity in the conversation.\n if (replyToId && initialBotActivities.length) {\n // Either the activity replied to is in the transcript or after timeout.\n const result = yield race({\n _: waitForActivityId(replyToId, initialActivities),\n timeout: call(sleep, REPLY_TIMEOUT, ponyfill)\n });\n\n if ('timeout' in result) {\n console.warn(\n `botframework-webchat: Timed out while waiting for activity \"${replyToId}\" which activity \"${activity.id}\" is replying to.`,\n {\n activity,\n replyToId\n }\n );\n }\n }\n\n yield put(incomingActivity(activity));\n\n // Update suggested actions\n // TODO: [P3] We could put this logic inside reducer to minimize number of actions dispatched.\n const messageActivities = yield select(activitiesOfType('message'));\n const lastMessageActivity = messageActivities[messageActivities.length - 1];\n\n if (activityFromBot(lastMessageActivity)) {\n const { suggestedActions: { actions, to } = { actions: undefined, to: undefined } } = lastMessageActivity;\n\n // If suggested actions is not destined to anyone, or is destined to the user, show it.\n // In other words, if suggested actions is destined to someone else, don't show it.\n yield put(setSuggestedActions(to?.length && !to.includes(userID) ? null : actions));\n }\n }\n );\n}\n\nexport default function* queueIncomingActivitySaga(ponyfill: GlobalScopePonyfill) {\n yield whileConnected(queueIncomingActivity, ponyfill);\n}\n","export default activity => activity && activity.from.role === 'bot';\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { SEND_EVENT } from '../actions/sendEvent';\nimport postActivity from '../actions/postActivity';\nimport whileConnected from './effects/whileConnected';\n\nfunction* postActivityWithEvent({ payload: { name, value } }) {\n yield put(\n postActivity({\n name,\n type: 'event',\n value\n })\n );\n}\n\nfunction* sendEventToPostActivity() {\n yield takeEvery(({ payload, type }) => type === SEND_EVENT && payload.name, postActivityWithEvent);\n}\n\nexport default function* sendEventToPostActivitySaga() {\n yield whileConnected(sendEventToPostActivity);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\nimport mime from 'mime';\n\nimport { SEND_FILES } from '../actions/sendFiles';\nimport postActivity from '../actions/postActivity';\nimport whileConnected from './effects/whileConnected';\n\nconst getType = mime.getType.bind(mime);\n\nfunction* postActivityWithFiles({ payload: { files } }) {\n yield put(\n postActivity({\n attachments: [].map.call(files, ({ name, thumbnail, url }) => ({\n contentType: getType(name) || 'application/octet-stream',\n contentUrl: url,\n name,\n thumbnailUrl: thumbnail\n })),\n channelData: {\n attachmentSizes: [].map.call(files, ({ size }) => size)\n },\n type: 'message'\n })\n );\n}\n\nfunction* sendFilesToPostActivity() {\n yield takeEvery(({ payload, type }) => type === SEND_FILES && payload.files.length, postActivityWithFiles);\n}\n\nexport default function* sendFilesToPostActivitySaga() {\n yield whileConnected(sendFilesToPostActivity);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\nimport postActivity from '../actions/postActivity';\nimport { SEND_MESSAGE_BACK } from '../actions/sendMessageBack';\nimport whileConnected from './effects/whileConnected';\n\n// https://github.com/microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#message-back\nfunction* postActivityWithMessageBack({ payload: { displayText, text, value } }) {\n yield put(\n postActivity({\n channelData: {\n messageBack: {\n displayText\n }\n },\n text,\n type: 'message',\n value\n })\n );\n}\n\nfunction* sendMessageBackToPostActivity() {\n yield takeEvery(SEND_MESSAGE_BACK, postActivityWithMessageBack);\n}\n\nexport default function* sendMessageBackToPostActivitySaga() {\n yield whileConnected(sendMessageBackToPostActivity);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport postActivity from '../actions/postActivity';\nimport sendMessage, { SEND_MESSAGE } from '../actions/sendMessage';\nimport whileConnected from './effects/whileConnected';\n\nfunction* postActivityWithMessage({\n payload: { attachments = [], channelData, method, text }\n}: ReturnType<typeof sendMessage>) {\n yield put(\n postActivity(\n {\n attachments: attachments.map(({ blob, thumbnailURL }) => ({\n contentType: (blob instanceof File && blob.type) || 'application/octet-stream',\n contentUrl: URL.createObjectURL(blob),\n name: blob instanceof File ? blob.name : undefined,\n thumbnailUrl: thumbnailURL?.toString()\n })),\n channelData: {\n ...channelData,\n attachmentSizes: attachments.map(({ blob: { size } }) => size)\n },\n text: text || undefined,\n textFormat: 'plain',\n type: 'message'\n } as any, // TODO: Fix WebChatActivity. Currently, it only works with incoming activity, not outgoing.\n method\n )\n );\n}\n\nfunction* sendMessageToPostActivity() {\n yield takeEvery(\n ({ payload, type }) => type === SEND_MESSAGE && (payload.text || payload.attachments?.length),\n postActivityWithMessage\n );\n}\n\nexport default function* sendMessageToPostActivitySaga() {\n yield whileConnected(sendMessageToPostActivity);\n}\n","// This is for the ternary operator of text and value.\n/* eslint no-undefined: \"off\" */\n\nimport { put, takeEvery } from 'redux-saga/effects';\nimport postActivity from '../actions/postActivity';\nimport { SEND_POST_BACK } from '../actions/sendPostBack';\nimport whileConnected from './effects/whileConnected';\n\n// https://github.com/microsoft/botframework-sdk/blob/main/specs/botframework-activity/botframework-activity.md#post-back\nfunction* postActivityWithPostBack({ payload: { value } }) {\n yield put(\n postActivity({\n channelData: {\n postBack: true\n },\n text: typeof value === 'string' ? value : undefined,\n type: 'message',\n value: typeof value !== 'string' ? value : undefined\n })\n );\n}\n\nfunction* sendPostBackToPostActivity() {\n yield takeEvery(SEND_POST_BACK, postActivityWithPostBack);\n}\n\nexport default function* sendPostBackToPostActivitySaga() {\n yield whileConnected(sendPostBackToPostActivity);\n}\n","// We will revisit this logic in #2157 and should remove the following eslint ignore\n/* eslint require-atomic-updates: \"off\" */\n\nimport { call, cancel, put, select, take, takeLatest } from 'redux-saga/effects';\n\nimport { SET_SEND_BOX } from '../actions/setSendBox';\nimport { SET_SEND_TYPING_INDICATOR } from '../actions/setSendTypingIndicator';\nimport { POST_ACTIVITY } from '../actions/postActivity';\nimport emitTypingIndicator from '../actions/emitTypingIndicator';\nimport sendTypingIndicatorSelector from '../selectors/sendTypingIndicator';\nimport sleep from '../utils/sleep';\nimport whileConnected from './effects/whileConnected';\n\nimport type { GlobalScopePonyfill } from '../types/GlobalScopePonyfill';\nimport type setSendTypingIndicator from '../actions/setSendTypingIndicator';\n\ntype SetSendTypingIndicatorAction = ReturnType<typeof setSendTypingIndicator>;\n\nconst SEND_INTERVAL = 3000;\n\nfunction takeSendTypingIndicator(value: boolean) {\n return take<SetSendTypingIndicatorAction>(\n // TODO: \"any\" should be replaced all known types in the system.\n ({ payload, type }: any) => type === SET_SEND_TYPING_INDICATOR && !payload.sendTypingIndicator === !value\n );\n}\n\nfunction* sendTypingIndicatorOnSetSendBox(_, ponyfill: GlobalScopePonyfill) {\n const { Date } = ponyfill;\n const sendTypingIndicator = yield select(sendTypingIndicatorSelector);\n\n if (!sendTypingIndicator) {\n yield takeSendTypingIndicator(true);\n }\n\n for (;;) {\n let lastSend = -Infinity;\n const task = yield takeLatest(\n ({ payload, type }) =>\n (type === SET_SEND_BOX && payload.text) ||\n // Stop sending pending typing indicator if the user has posted anything.\n // We send typing indicator in a debounce way (t = 0, t = 3000, t = 6000).\n // When the user type, and then post the activity at t = 1500, we still have a pending typing indicator at t = 3000.\n // This code is to cancel the typing indicator at t = 3000.\n (type === POST_ACTIVITY && payload.activity.type !== 'typing'),\n function* ({ payload, type }) {\n if (type === SET_SEND_BOX) {\n const interval = SEND_INTERVAL - Date.now() + lastSend;\n\n if (interval > 0) {\n yield call(sleep, interval, ponyfill);\n }\n\n yield put(emitTypingIndicator());\n\n lastSend = Date.now();\n } else if (payload.activity.type === 'message') {\n lastSend = -Infinity;\n }\n }\n );\n\n yield takeSendTypingIndicator(false);\n yield cancel(task);\n yield takeSendTypingIndicator(true);\n }\n}\n\nexport default function* sendTypingIndicatorOnSetSendBoxSaga(ponyfill: GlobalScopePonyfill) {\n yield whileConnected(sendTypingIndicatorOnSetSendBox, ponyfill);\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ sendTypingIndicator }: ReduxState): boolean => sendTypingIndicator;\n","import { put, select, takeEvery } from 'redux-saga/effects';\n\nimport { INCOMING_ACTIVITY } from '../actions/incomingActivity';\nimport { WILL_START } from '../constants/DictateState';\nimport markActivity from '../actions/markActivity';\nimport setDictateState from '../actions/setDictateState';\nimport shouldSpeakIncomingActivitySelector from '../selectors/shouldSpeakIncomingActivity';\nimport speakableActivity from '../definitions/speakableActivity';\nimport stopDictate from '../actions/stopDictate';\nimport whileConnected from './effects/whileConnected';\n\nfunction* speakActivityAndStartDictateOnIncomingActivityFromOthers({ userID }) {\n yield takeEvery(\n ({ payload, type }) =>\n // In Direct Line, the \"role\" is not filled (yet), but we do know the user ID.\n // In Direct Line Speech, we do not know the user ID, but \"role\" is filled with \"bot\" or \"user\".\n // Here, we do two checks: the speakable activity must not have user ID, and must not have role === 'user'\n type === INCOMING_ACTIVITY && payload.activity.from.id !== userID && payload.activity.from.role !== 'user',\n function* ({ payload: { activity } }) {\n const shouldSpeakIncomingActivity = yield select(shouldSpeakIncomingActivitySelector);\n const shouldSpeak = speakableActivity(activity) && shouldSpeakIncomingActivity;\n\n if (\n shouldSpeak &&\n (activity.speak ||\n activity.text ||\n ~(activity.attachments || []).findIndex(({ content: { speak } = {} }) => speak))\n ) {\n yield put(markActivity(activity, 'speak', true));\n }\n\n if (shouldSpeak && activity.inputHint === 'expectingInput') {\n yield put(setDictateState(WILL_START));\n } else if (activity.inputHint === 'ignoringInput') {\n yield put(stopDictate());\n }\n }\n );\n}\n\nexport default function* speakActivityAndStartDictateOnIncomingActivityFromOthersSaga() {\n yield whileConnected(speakActivityAndStartDictateOnIncomingActivityFromOthers);\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ shouldSpeakIncomingActivity }: ReduxState): boolean => shouldSpeakIncomingActivity;\n","export default function speakableActivity(activity) {\n return activity && activity.from && activity.type === 'message';\n}\n","import { put, select, takeEvery } from 'redux-saga/effects';\n\nimport { MARK_ACTIVITY } from '../actions/markActivity';\nimport { of as activitiesOf } from '../selectors/activities';\nimport { SET_DICTATE_STATE } from '../actions/setDictateState';\nimport { WILL_START } from '../constants/DictateState';\nimport dictateStateSelector from '../selectors/dictateState';\nimport speakingActivity from '../definitions/speakingActivity';\nimport startDictate from '../actions/startDictate';\n\nfunction* startDictateOnSpeakComplete() {\n const speakingActivities = yield select(activitiesOf(speakingActivity));\n const dictateState = yield select(dictateStateSelector);\n\n if (dictateState === WILL_START && !speakingActivities.length) {\n yield put(startDictate());\n }\n}\n\n// TODO: [P4] We should turn this into a reducer instead\nexport default function* startDictateOnSpeakCompleteSaga() {\n yield takeEvery(({ type }) => type === MARK_ACTIVITY || type === SET_DICTATE_STATE, startDictateOnSpeakComplete);\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ dictateState }: ReduxState) => dictateState;\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\nimport startSpeakingActivity from '../actions/startSpeakingActivity';\nimport whileConnected from './effects/whileConnected';\n\nfunction* startSpeakActivityOnPostActivity() {\n yield takeEvery(\n ({ meta, payload, type }) =>\n type === POST_ACTIVITY_PENDING && meta.method === 'speech' && payload.activity.type === 'message',\n function* () {\n yield put(startSpeakingActivity());\n }\n );\n}\n\nexport default function* startSpeakActivityOnPostActivitySaga() {\n yield whileConnected(startSpeakActivityOnPostActivity);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\nimport stopDictate from '../actions/stopDictate';\nimport whileConnected from './effects/whileConnected';\n\nfunction* stopDictateOnCardAction() {\n // TODO: [P2] We should stop speech input when the user click on anything on a card, including open URL which doesn't generate postActivity\n // This functionality was not implemented in v3\n\n yield takeEvery(\n // Currently, there are no actions that are related to card input\n // For now, we are using POST_ACTIVITY of a \"message\" activity\n // In the future, if we have an action for card input, we should use that instead\n ({ payload, type }) => type === POST_ACTIVITY_PENDING && payload.activity.type === 'message',\n function* putStopDictate() {\n yield put(stopDictate());\n }\n );\n}\n\nexport default function* stopDictateOnCardActionSaga() {\n yield whileConnected(stopDictateOnCardAction);\n}\n","import { put, takeEvery } from 'redux-saga/effects';\n\nimport { POST_ACTIVITY_PENDING } from '../actions/postActivity';\nimport { SET_SEND_BOX } from '../actions/setSendBox';\nimport stopSpeakingActivity from '../actions/stopSpeakingActivity';\nimport whileConnected from './effects/whileConnected';\n\nfunction* stopSpeakingActivityOnInput() {\n yield takeEvery(\n ({ meta, payload, type }) =>\n (type === SET_SEND_BOX && payload.text) ||\n // We want to stop speaking activity when the user click on a card action\n // But currently there are no actions generated out of a card action\n // So, right now, we are using best-effort by listening to POST_ACTIVITY_PENDING with a \"message\" event\n // We filter out speech because we will call startSpeakingActivity() for POST_ACTIVITY_PENDING dispatched by speech\n (type === POST_ACTIVITY_PENDING && meta.method !== 'speech' && payload.activity.type === 'message'),\n function* () {\n yield put(stopSpeakingActivity());\n }\n );\n}\n\nexport default function* stopSpeakingActivityOnInputSaga() {\n yield whileConnected(stopSpeakingActivityOnInput);\n}\n","import { put, select, takeEvery } from 'redux-saga/effects';\n\nimport sendMessage from '../actions/sendMessage';\nimport setSendBox from '../actions/setSendBox';\nimport setSendBoxAttachments from '../actions/setSendBoxAttachments';\nimport { SUBMIT_SEND_BOX } from '../actions/submitSendBox';\nimport sendBoxAttachmentsSelector from '../selectors/sendBoxAttachments';\nimport sendBoxValueSelector from '../selectors/sendBoxValue';\nimport whileConnected from './effects/whileConnected';\n\nfunction* submitSendBox() {\n yield takeEvery(SUBMIT_SEND_BOX, function* ({ payload: { channelData, method } }) {\n const attachments = yield select(sendBoxAttachmentsSelector);\n const sendBoxValue = yield select(sendBoxValueSelector);\n\n // TODO: [P2] If the trimmed value is empty, we should not send.\n // TODO: [P2] We should expose this logic (\"cannot send empty message\") to other components such as UI.\n if (attachments.length || sendBoxValue) {\n yield put(sendMessage(sendBoxValue.trim(), method, { attachments, channelData }));\n\n yield put(setSendBox(''));\n yield put(setSendBoxAttachments(Object.freeze([])));\n }\n });\n}\n\nexport default function* submitSendBoxSaga() {\n // TODO: [P2] We should expose this logic (\"send only when connected\") to other components such as UI.\n yield whileConnected(submitSendBox);\n}\n","import type { SendBoxAttachment } from '../types/SendBoxAttachment';\nimport type { ReduxState } from '../types/internal/ReduxState';\n\nexport default function sendBoxAttachments({ sendBoxAttachments }: ReduxState): readonly SendBoxAttachment[] {\n return sendBoxAttachments;\n}\n","import type { ReduxState } from '../types/internal/ReduxState';\n\nexport default ({ sendBoxValue }: ReduxState): string => sendBoxValue;\n","import { lazy, parse, string, union, value, type ObjectEntries, type StringSchema } from 'valibot';\n\nimport orgSchemaProperty from './private/orgSchemaProperty';\nimport { project, type Project } from './Project';\nimport { thing, type Thing } from './Thing';\n\n/**\n * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role.\n *\n * See also [blog post](http://blog.schema.org/2014/04/announcing-schemaorg-actions.html) and [Actions overview document](https://schema.org/docs/actions.html).\n *\n * This is partial implementation of https://schema.org/Action.\n *\n * @see https://schema.org/Action\n */\nexport type Action = Thing & {\n /**\n * Indicates the current disposition of the Action.\n *\n * @see https://schema.org/actionStatus\n */\n actionStatus?:\n | 'ActiveActionStatus'\n | 'CompletedActionStatu'\n | 'FailedActionStatus'\n | 'PotentialActionStatus'\n | undefined;\n\n /**\n * The service provider, service operator, or service performer; the goods producer. Another party (a seller) may offer those services or goods on behalf of the provider. A provider may also serve as the seller. Supersedes [carrier](https://schema.org/carrier).\n *\n * @see https://schema.org/provider\n */\n provider?: Project | undefined;\n};\n\nexport const action = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n thing({\n actionStatus: orgSchemaProperty(\n union([\n string([value('ActiveActionStatus')]) as StringSchema<'ActiveActionStatus'>,\n string([value('CompletedActionStatus')]) as StringSchema<'CompletedActionStatus'>,\n string([value('FailedActionStatus')]) as StringSchema<'FailedActionStatus'>,\n string([value('PotentialActionStatus')]) as StringSchema<'PotentialActionStatus'>\n ])\n ),\n provider: orgSchemaProperty(lazy(() => project())),\n\n ...entries\n });\n\nexport const parseAction = (data: unknown): Action => parse(action(), data);\n","import { array, fallback, optional, transform, union, type BaseSchema } from 'valibot';\n\nconst orgSchemaProperty = <T extends BaseSchema>(schema: T) =>\n fallback(optional(union([transform(array(schema), array => array[0]), schema])), undefined);\n\nexport default orgSchemaProperty;\n","import { parse, string, type ObjectEntries } from 'valibot';\n\nimport { thing, type Thing } from './Thing';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\nexport const project = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n thing({\n slogan: orgSchemaProperty(string()),\n\n ...entries\n });\n\n/**\n * An enterprise (potentially individual but typically collaborative), planned to achieve a particular aim. Use properties from [Organization](https://schema.org/Organization), [subOrganization](https://schema.org/subOrganization)/[parentOrganization](https://schema.org/parentOrganization) to indicate project sub-structures.\n *\n * This is partial implementation of https://schema.org/Project.\n *\n * @see https://schema.org/Project\n */\nexport type Project = Thing & {\n /**\n * A slogan or motto associated with the item.\n *\n * @see https://schema.org/slogan\n */\n slogan?: string | undefined;\n};\n\nexport const parseProject = (data: unknown): Project => parse(project(), data);\n","import { type EmptyObject } from 'type-fest';\nimport { lazy, object, optional, parse, string, unknown, value, type ObjectEntries, type StringSchema } from 'valibot';\n\nimport { action, type Action } from './Action';\nimport orgSchemaProperties from './private/orgSchemaProperties';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\n/**\n * The most generic type of item.\n *\n * This is partial implementation of https://schema.org/Thing.\n *\n * @see https://schema.org/Thing\n */\nexport type Thing = {\n '@context'?: 'https://schema.org' | undefined;\n '@id'?: string | undefined;\n '@type': string;\n\n /**\n * An additional type for the item, typically used for adding more specific types from external vocabularies in microdata syntax. This is a relationship between something and a class that the thing is in. Typically the value is a URI-identified RDF class, and in this case corresponds to the use of rdf:type in RDF. Text values can be used sparingly, for cases where useful information can be added without their being an appropriate schema to reference. In the case of text values, the class label should follow the schema.org [style guide](https://schema.org/docs/styleguide.html).\n *\n * @see https://schema.org/additionalType\n */\n additionalType?: string | undefined;\n\n /**\n * An alias for the item.\n *\n * @see https://schema.org/alternateName\n */\n alternateName?: string | undefined;\n\n /**\n * A description of the item.\n *\n * @see https://schema.org/description\n */\n description?: string | undefined;\n\n /**\n * The name of the item.\n *\n * @see https://schema.org/name\n */\n name?: string | undefined;\n\n /**\n * Indicates a potential Action, which describes an idealized action in which this thing would play an 'object' role.\n *\n * @see https://schema.org/potentialAction\n */\n potentialAction?: readonly Action[] | undefined;\n\n /**\n * URL of the item.\n *\n * @see https://schema.org/url\n */\n url?: string | undefined;\n};\n\nconst thingEntries = {\n '@context': optional(string([value('https://schema.org')]) as StringSchema<'https://schema.org'>),\n '@id': optional(string()),\n '@type': string(),\n\n additionalType: orgSchemaProperty(string()),\n alternateName: orgSchemaProperty(string()),\n description: orgSchemaProperty(string()),\n name: orgSchemaProperty(string()),\n potentialAction: orgSchemaProperties(lazy(() => action())),\n url: orgSchemaProperty(string())\n};\n\nexport const thing = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n object(\n {\n ...thingEntries,\n ...entries\n },\n // Forward compatibility is the reason why we use unknown() here and not adhere to JSON-LD which drop unknown fields.\n //\n // Example:\n // - CreativeWork.editor must be type of Person (or any of its subtypes, Patient)\n // - Without unknown(), when we parse the CreativeWork, we will drop Patient.diagnosis\n // - That means, CreativeWork.editor.diagnosis will be unset despite CreativeWork.editor is of type Patient\n //\n // We can drop unknown() if there is a way to keep CreativeWork.editor.diagnosis.\n // It is okay to drop future/unsupported properties. But not today/supported properties.\n unknown()\n );\n\nexport const parseThing = (data: unknown): Thing => parse(thing<EmptyObject>(), data);\n","import {\n array,\n fallback,\n parse,\n transform,\n type ArraySchema,\n type BaseSchema,\n type FallbackInfo,\n type Output,\n type UndefinedSchema\n} from 'valibot';\n\nimport orgSchemaProperty from './orgSchemaProperty';\n\nconst singularToArray = <T extends BaseSchema>(schema: T): ArraySchema<T> | UndefinedSchema =>\n fallback<ArraySchema<T> | UndefinedSchema, (info?: FallbackInfo) => Output<T>>(\n transform(array(schema), value => value.filter(value => typeof value !== 'undefined')),\n value => (value?.input ? [parse(schema, value?.input)] : undefined)\n );\n\nexport default function orgSchemaProperties<T extends BaseSchema>(schema: T) {\n return singularToArray(orgSchemaProperty(schema));\n}\n","import { lazy, number, parse, string, union, type ObjectEntries } from 'valibot';\n\nimport { creativeWork, type CreativeWork } from './CreativeWork';\nimport { project, type Project } from './Project';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\n/**\n * A [Claim](https://schema.org/Claim) in Schema.org represents a specific, factually-oriented claim that could be the [itemReviewed](https://schema.org/itemReviewed) in a [ClaimReview](https://schema.org/ClaimReview). The content of a claim can be summarized with the [text](https://schema.org/text) property. Variations on well known claims can have their common identity indicated via [sameAs](https://schema.org/sameAs) links, and summarized with a name. Ideally, a [Claim](https://schema.org/Claim) description includes enough contextual information to minimize the risk of ambiguity or inclarity. In practice, many claims are better understood in the context in which they appear or the interpretations provided by claim reviews.\n *\n * Beyond [ClaimReview](https://schema.org/ClaimReview), the Claim type can be associated with related creative works - for example a [ScholarlyArticle](https://schema.org/ScholarlyArticle) or [Question](https://schema.org/Question) might be about some [Claim](https://schema.org/Claim).\n *\n * This is partial implementation of https://schema.org/Claim.\n *\n * @see https://schema.org/Claim.\n */\nexport type Claim = CreativeWork & {\n /**\n * Indicates an occurrence of a [Claim](https://schema.org/Claim) in some [CreativeWork](https://schema.org/CreativeWork).\n *\n * @see https://schema.org/appearance.\n */\n appearance?: CreativeWork | undefined;\n\n /**\n * For a [Claim](https://schema.org/Claim) interpreted from [MediaObject](https://schema.org/MediaObject) content sed to indicate a claim contained, implied or refined from the content of a [MediaObject](https://schema.org/MediaObject).\n *\n * @see https://schema.org/claimInterpreter.\n */\n claimInterpreter?: Project | undefined;\n\n /**\n * The position of an item in a series or sequence of items.\n *\n * @see https://schema.org/position.\n */\n position?: number | string;\n};\n\nexport const claim = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n creativeWork({\n appearance: orgSchemaProperty(lazy(() => creativeWork())),\n claimInterpreter: orgSchemaProperty(lazy(() => project())),\n position: orgSchemaProperty(union([number(), string()])),\n\n ...entries\n });\n\nexport const parseClaim = (data: unknown): Claim => parse(claim(), data);\n","import { lazy, parse, string, union, type ObjectEntries } from 'valibot';\n\nimport { definedTerm, type DefinedTerm } from './DefinedTerm';\nimport orgSchemaProperties from './private/orgSchemaProperties';\nimport orgSchemaProperty from './private/orgSchemaProperty';\nimport { thing, type Thing } from './Thing';\n\n/**\n * The most generic kind of creative work, including books, movies, photographs, software programs, etc.\n *\n * This is partial implementation of https://schema.org/CreativeWork.\n *\n * @see https://schema.org/CreativeWork\n */\n// Due to limitations of TypeScript, when using valibot.lazy(), the output type must be explicitly set.\nexport type CreativeWork = Thing & {\n /**\n * An abstract is a short description that summarizes a [CreativeWork](https://schema.org/CreativeWork).\n *\n * @see https://schema.org/abstract\n */\n abstract?: string | undefined;\n\n /**\n * The author of this content or rating. Please note that author is special in that HTML 5 provides a special mechanism for indicating authorship via the rel tag. That is equivalent to this and may be used interchangeably.\n *\n * @see https://schema.org/author\n */\n author?: string | undefined;\n\n /**\n * A citation or reference to another creative work, such as another publication, web page, scholarly article, etc.\n *\n * @see https://schema.org/citation\n */\n citation?: readonly CreativeWork[] | undefined;\n\n /**\n * Keywords or tags used to describe some item. Multiple textual entries in a keywords list are typically delimited by commas, or by repeating the property.\n *\n * @see https://schema.org/keywords\n */\n keywords?: readonly (DefinedTerm | string)[] | undefined;\n\n /**\n * A pattern that something has, for example 'polka dot', 'striped', 'Canadian flag'. Values are typically expressed as text, although links to controlled value schemes are also supported.\n *\n * @see https://schema.org/pattern\n */\n pattern?: DefinedTerm | undefined;\n\n /**\n * The textual content of this CreativeWork.\n *\n * @see https://schema.org/text\n */\n text?: string | undefined;\n\n /**\n * The schema.org [usageInfo](https://schema.org/usageInfo) property indicates further information about a [CreativeWork](https://schema.org/CreativeWork). This property is applicable both to works that are freely available and to those that require payment or other transactions. It can reference additional information, e.g. community expectations on preferred linking and citation conventions, as well as purchasing details. For something that can be commercially licensed, usageInfo can provide detailed, resource-specific information about licensing options.\n *\n * This property can be used alongside the license property which indicates license(s) applicable to some piece of content. The usageInfo property can provide information about other licensing options, e.g. acquiring commercial usage rights for an image that is also available under non-commercial creative commons licenses.\n */\n usageInfo?: CreativeWork | undefined;\n};\n\nexport const creativeWork = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n thing({\n // For forward compatibility, we did not enforce @type must be \"CreativeWork\" or any other subtypes.\n // In future, if Schema.org introduced a new subtype of CreativeWork, we should still able to parse that one as a CreativeWork.\n\n abstract: orgSchemaProperty(string()),\n author: orgSchemaProperties(string()),\n citation: orgSchemaProperties(lazy(() => creativeWork())),\n keywords: orgSchemaProperties(union([lazy(() => definedTerm()), string()])),\n pattern: orgSchemaProperty(lazy(() => definedTerm())),\n text: orgSchemaProperty(string()),\n usageInfo: orgSchemaProperty(lazy(() => creativeWork())),\n\n ...entries\n });\n\nexport const parseCreativeWork = (data: unknown): CreativeWork => parse(creativeWork(), data);\n","import { parse, string, type ObjectEntries } from 'valibot';\n\nimport { thing, type Thing } from './Thing';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\nexport const definedTerm = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n thing({\n inDefinedTermSet: orgSchemaProperty(string()),\n termCode: orgSchemaProperty(string()),\n\n ...entries\n });\n\n/**\n * A word, name, acronym, phrase, etc. with a formal definition. Often used in the context of category or subject classification, glossaries or dictionaries, product or creative work types, etc. Use the name property for the term being defined, use termCode if the term has an alpha-numeric code allocated, use description to provide the definition of the term.\n *\n * This is partial implementation of https://schema.org/DefinedTerm.\n *\n * @see https://schema.org/DefinedTerm\n */\nexport type DefinedTerm = Thing & {\n /**\n * A [DefinedTermSet](https://schema.org/DefinedTermSet) that contains this term.\n *\n * @see https://schema.org/inDefinedTermSet\n */\n inDefinedTermSet?: string | undefined;\n\n /**\n * A code that identifies this [DefinedTerm](https://schema.org/DefinedTerm) within a [DefinedTermSet](https://schema.org/DefinedTermSet).\n *\n * @see https://schema.org/termCode\n */\n termCode?: string | undefined;\n};\n\nexport const parseDefinedTerm = (data: unknown): DefinedTerm => parse(definedTerm(), data);\n","import { parse, string, type ObjectEntries } from 'valibot';\n\nimport { action, type Action } from './Action';\nimport orgSchemaProperty from './private/orgSchemaProperty';\n\n/**\n * An action performed by a direct agent and indirect participants upon a direct object. Optionally happens at a location with the help of an inanimate instrument. The execution of the action may produce a result. Specific action sub-type documentation specifies the exact expectation of each argument/role.\n *\n * See also [blog post](http://blog.schema.org/2014/04/announcing-schemaorg-actions.html) and [Actions overview document](https://schema.org/docs/actions.html).\n *\n * This is partial implementation of https://schema.org/Action.\n *\n * @see https://schema.org/Action\n */\nexport type VoteAction = Action & {\n /**\n * A sub property of object. The options subject to this action. Supersedes [option](https://schema.org/option).\n *\n * @see https://schema.org/VoteAction\n */\n actionOption?: string | undefined;\n};\n\nexport const voteAction = <TEntries extends ObjectEntries>(entries?: TEntries | undefined) =>\n action({\n actionOption: orgSchemaProperty(string()),\n\n ...entries\n });\n\nexport const parseVoteAction = (data: unknown): VoteAction => parse(voteAction(), data);\n","import { type WebChatActivity } from '../types/WebChatActivity';\nimport { parseCreativeWork, type CreativeWork } from '../types/external/OrgSchema/CreativeWork';\nimport { parseThing } from '../types/external/OrgSchema/Thing';\n\nexport default function getOrgSchemaMessage(\n graph: readonly WebChatActivity['entities'][0][]\n): CreativeWork | undefined {\n const messageEntity = (graph || []).find(entity => {\n const isThing = entity.type?.startsWith('https://schema.org/');\n\n if (isThing) {\n const thing = parseThing(entity);\n\n return thing['@id'] === '';\n }\n });\n\n const message = messageEntity && parseCreativeWork(messageEntity);\n\n return message && parseCreativeWork(message);\n}\n","export default function onErrorResumeNext<T>(fn: () => T): T | undefined;\nexport default function onErrorResumeNext<T, U = T>(fn: () => T, defaultValue: U): T | U;\n\n/**\n * Calls the function and returns its return value.\n *\n * If the function failed, return default value if specified, otherwise, `undefined`.\n */\nexport default function onErrorResumeNext<T>(fn: () => T, defaultValue?: T): T | undefined {\n try {\n return fn();\n } catch (error) {\n return defaultValue;\n }\n}\n","export default function singleToArray<T>(singleOrArray: T | T[]): T[] {\n return singleOrArray ? (Array.isArray(singleOrArray) ? singleOrArray : [singleOrArray]) : [];\n}\n","export default function once(fn: () => void): () => void {\n let done;\n\n return () => {\n if (!done) {\n fn();\n done = 1;\n }\n };\n}\n","import once from './once';\n\nexport default function warnOnce(message: string): () => void {\n return once(() => console.warn(`botframework-webchat: ${message}.`));\n}\n","import clearSuggestedActions from './actions/clearSuggestedActions';\nimport connect from './actions/connect';\nimport disconnect from './actions/disconnect';\nimport dismissNotification from './actions/dismissNotification';\nimport emitTypingIndicator from './actions/emitTypingIndicator';\nimport markActivity from './actions/markActivity';\nimport postActivity from './actions/postActivity';\nimport sendEvent from './actions/sendEvent';\nimport sendFiles from './actions/sendFiles';\nimport sendMessage from './actions/sendMessage';\nimport sendMessageBack from './actions/sendMessageBack';\nimport sendPostBack from './actions/sendPostBack';\nimport setDictateInterims from './actions/setDictateInterims';\nimport setDictateState from './actions/setDictateState';\nimport setLanguage from './actions/setLanguage';\nimport setNotification from './actions/setNotification';\nimport setSendBox from './actions/setSendBox';\nimport setSendBoxAttachments from './actions/setSendBoxAttachments';\nimport setSendTimeout from './actions/setSendTimeout';\nimport setSendTypingIndicator from './actions/setSendTypingIndicator';\nimport startDictate from './actions/startDictate';\nimport startSpeakingActivity from './actions/startSpeakingActivity';\nimport stopDictate from './actions/stopDictate';\nimport stopSpeakingActivity from './actions/stopSpeakingActivity';\nimport submitSendBox from './actions/submitSendBox';\nimport * as ActivityClientState from './constants/ActivityClientState';\nimport * as DictateState from './constants/DictateState';\nimport createStore, {\n withDevTools as createStoreWithDevTools,\n withOptions as createStoreWithOptions\n} from './createStore';\nimport OneOrMany from './types/OneOrMany';\nimport { parseAction } from './types/external/OrgSchema/Action';\nimport { parseClaim } from './types/external/OrgSchema/Claim';\nimport { parseCreativeWork } from './types/external/OrgSchema/CreativeWork';\nimport { parseDefinedTerm } from './types/external/OrgSchema/DefinedTerm';\nimport { parseProject } from './types/external/OrgSchema/Project';\nimport { parseThing } from './types/external/OrgSchema/Thing';\nimport { parseVoteAction } from './types/external/OrgSchema/VoteAction';\nimport getOrgSchemaMessage from './utils/getOrgSchemaMessage';\nimport isForbiddenPropertyName from './utils/isForbiddenPropertyName';\nimport onErrorResumeNext from './utils/onErrorResumeNext';\nimport singleToArray from './utils/singleToArray';\nimport warnOnce from './utils/warnOnce';\n\nimport type { GlobalScopePonyfill } from './types/GlobalScopePonyfill';\nimport type { SendBoxAttachment } from './types/SendBoxAttachment';\nimport type { WebChatActivity } from './types/WebChatActivity';\nimport type { DirectLineActivity } from './types/external/DirectLineActivity';\nimport type { DirectLineAnimationCard } from './types/external/DirectLineAnimationCard';\nimport type { DirectLineAttachment } from './types/external/DirectLineAttachment';\nimport type { DirectLineAudioCard } from './types/external/DirectLineAudioCard';\nimport type { DirectLineCardAction } from './types/external/DirectLineCardAction';\nimport type { DirectLineHeroCard } from './types/external/DirectLineHeroCard';\nimport type { DirectLineJSBotConnection } from './types/external/DirectLineJSBotConnection';\nimport type { DirectLineOAuthCard } from './types/external/DirectLineOAuthCard';\nimport type { DirectLineReceiptCard } from './types/external/DirectLineReceiptCard';\nimport type { DirectLineSignInCard } from './types/external/DirectLineSignInCard';\nimport type { DirectLineSuggestedAction } from './types/external/DirectLineSuggestedAction';\nimport type { DirectLineThumbnailCard } from './types/external/DirectLineThumbnailCard';\nimport type { DirectLineVideoCard } from './types/external/DirectLineVideoCard';\nimport type { Observable } from './types/external/Observable';\nimport type { Action as OrgSchemaAction } from './types/external/OrgSchema/Action';\nimport type { Claim as OrgSchemaClaim } from './types/external/OrgSchema/Claim';\nimport type { CreativeWork as OrgSchemaCreativeWork } from './types/external/OrgSchema/CreativeWork';\nimport type { DefinedTerm as OrgSchemaDefinedTerm } from './types/external/OrgSchema/DefinedTerm';\nimport type { Project as OrgSchemaProject } from './types/external/OrgSchema/Project';\nimport type { Thing as OrgSchemaThing } from './types/external/OrgSchema/Thing';\n\nconst Constants = { ActivityClientState, DictateState };\nconst buildTool = process.env.build_tool;\nconst moduleFormat = process.env.module_format;\nconst version = process.env.npm_package_version;\n\nconst buildInfo = { buildTool, moduleFormat, version };\n\nexport {\n Constants,\n buildInfo,\n clearSuggestedActions,\n connect,\n createStore,\n createStoreWithDevTools,\n createStoreWithOptions,\n disconnect,\n dismissNotification,\n emitTypingIndicator,\n getOrgSchemaMessage,\n isForbiddenPropertyName,\n markActivity,\n moduleFormat,\n onErrorResumeNext,\n parseAction,\n parseClaim,\n parseCreativeWork,\n parseDefinedTerm,\n parseProject,\n parseThing,\n parseVoteAction,\n postActivity,\n sendEvent,\n sendFiles,\n sendMessage,\n sendMessageBack,\n sendPostBack,\n setDictateInterims,\n setDictateState,\n setLanguage,\n setNotification,\n setSendBox,\n setSendBoxAttachments,\n setSendTimeout,\n setSendTypingIndicator,\n singleToArray,\n startDictate,\n startSpeakingActivity,\n stopDictate,\n stopSpeakingActivity,\n submitSendBox,\n version,\n warnOnce\n};\n\nexport type {\n DirectLineActivity,\n DirectLineAnimationCard,\n DirectLineAttachment,\n DirectLineAudioCard,\n DirectLineCardAction,\n DirectLineHeroCard,\n DirectLineJSBotConnection,\n DirectLineOAuthCard,\n DirectLineReceiptCard,\n DirectLineSignInCard,\n DirectLineSuggestedAction,\n DirectLineThumbnailCard,\n DirectLineVideoCard,\n GlobalScopePonyfill,\n Observable,\n OneOrMany,\n OrgSchemaAction,\n OrgSchemaClaim,\n OrgSchemaCreativeWork,\n OrgSchemaDefinedTerm,\n OrgSchemaProject,\n OrgSchemaThing,\n SendBoxAttachment,\n WebChatActivity\n};\n"],"mappings":"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","names":["CLEAR_SUGGESTED_ACTIONS","clearSuggestedActions","CONNECT","CONNECT_FULFILLED","CONNECT_FULFILLING","CONNECT_PENDING","CONNECT_REJECTED","CONNECT_STILL_PENDING","connect","directLine","userID","username","DISCONNECT","DISCONNECT_PENDING","DISCONNECT_REJECTED","DISCONNECT_FULFILLED","disconnect","DISMISS_NOTIFICATION","dismissNotification","id","dismissNotification_default","EMIT_TYPING_INDICATOR","emitTypingIndicator","MARK_ACTIVITY","markActivity","activityID","name","value","markActivity_default","POST_ACTIVITY","POST_ACTIVITY_FULFILLED","POST_ACTIVITY_IMPEDED","POST_ACTIVITY_PENDING","POST_ACTIVITY_REJECTED","postActivity","activity","method","postActivity_default","SEND_EVENT","sendEvent","name","value","SEND_FILES","sendFiles","files","SEND_MESSAGE","sendMessage","text","method","attachments","channelData","SEND_MESSAGE_BACK","sendMessageback","value","text","displayText","SEND_POST_BACK","sendPostback","value","SET_DICTATE_INTERIMS","setDictateInterims","dictateInterims","SET_DICTATE_STATE","setDictateState","dictateState","SET_LANGUAGE","setLanguage","language","random","uniqueID","SET_NOTIFICATION","setNotification","alt","data","id","level","message","uniqueID","SET_SEND_BOX","setSendBox","text","SET_SEND_BOX_ATTACHMENTS","setSendBoxAttachments","attachments","SET_SEND_TIMEOUT","setSendTimeout","sendTimeout","SET_SEND_TYPING_INDICATOR","setSendTypingIndicator","value","START_DICTATE","startDictate","START_SPEAKING_ACTIVITY","startSpeakingActivity","STOP_DICTATE","stopDictate","STOP_SPEAKING_ACTIVITY","stopSpeakingActivity","SUBMIT_SEND_BOX","submitSendBox","method","channelData","ActivityClientState_exports","__export","SENDING","SEND_FAILED","SENT","DictateState_exports","__export","DICTATING","IDLE","STARTING","STOPPING","WILL_START","applyMiddleware","createReduxStore","composeWithDevTools","createSagaMiddleware","combineReducers","RECONNECT","RECONNECT_FULFILLED","RECONNECT_FULFILLING","RECONNECT_PENDING","RECONNECT_REJECTED","SAGA_ERROR","sagaError","DEFAULT_STATE","connectivityStatus","state","type","meta","CONNECT_PENDING","RECONNECT_PENDING","CONNECT_FULFILLED","RECONNECT_FULFILLED","CONNECT_REJECTED","CONNECT_STILL_PENDING","DISCONNECT_FULFILLED","SAGA_ERROR","updateIn","DELETE_ACTIVITY","INCOMING_ACTIVITY","incomingActivity","activity","incomingActivity_default","SENDING","SEND_FAILED","SENT","DEFAULT_STATE","DIRECT_LINE_PLACEHOLDER_URL","getClientActivityID","activity","findByClientActivityID","clientActivityID","patchActivity","lastActivity","Date","updateIn","contentUrl","sequenceId","upsertActivityWithSort","activities","nextActivity","ponyfill","nextClientActivityID","nextSequenceId","nextActivities","id","indexToInsert","createActivitiesReducer","state","action","DELETE_ACTIVITY","MARK_ACTIVITY","payload","POST_ACTIVITY_PENDING","SENDING","POST_ACTIVITY_IMPEDED","SEND_FAILED","POST_ACTIVITY_REJECTED","POST_ACTIVITY_FULFILLED","SENT","INCOMING_ACTIVITY","existingActivity","sendStatus","createInternalReducer","ponyfill","updateIn","FORBIDDEN_PROPERTY_NAMES","getForbiddenPropertyNames","isForbiddenPropertyName","propertyName","DEFAULT_STATE","createNotificationsReducer","Date","state","action","type","now","DISMISS_NOTIFICATION","updateIn","SAGA_ERROR","SET_NOTIFICATION","alt","data","id","level","message","isForbiddenPropertyName","notification","updateIn","DEFAULT_STATE","createLastTypingReducer","Date","state","payload","type","INCOMING_ACTIVITY","POST_ACTIVITY_PENDING","id","name","role","activityType","now","updateIn","at","DEFAULT_STATE","dictateInterims","state","payload","type","SET_DICTATE_INTERIMS","DEFAULT_STATE","dictateState","state","payload","type","SET_DICTATE_STATE","START_DICTATE","STOP_DICTATE","DEFAULT_STATE","language","state","payload","type","SET_LANGUAGE","CONNECTION_STATUS_UPDATE","connectionStatusUpdate","connectionStatus","DEFAULT_STATE","readyState","state","payload","type","CONNECTION_STATUS_UPDATE","SET_REFERENCE_GRAMMAR_ID","setReferenceGrammarID","referenceGrammarID","DEFAULT_STATE","referenceGrammarID","state","payload","type","SET_REFERENCE_GRAMMAR_ID","DEFAULT_STATE","sendBoxAttachments","state","payload","type","SET_SEND_BOX_ATTACHMENTS","DEFAULT_STATE","sendBoxValue","state","payload","type","SET_SEND_BOX","DEFAULT_STATE","sendTimeout","state","payload","type","SET_SEND_TIMEOUT","DEFAULT_STATE","sendTypingIndicator","state","payload","type","SET_SEND_TYPING_INDICATOR","shouldSpeakIncomingActivity","state","type","START_SPEAKING_ACTIVITY","STOP_SPEAKING_ACTIVITY","EMPTY_ARRAY","SET_SUGGESTED_ACTIONS","setSuggestedActions","suggestedActions","DEFAULT_STATE","suggestedActions","state","payload","type","SET_SUGGESTED_ACTIONS","CLEAR_SUGGESTED_ACTIONS","createReducer","ponyfill","combineReducers","createActivitiesReducer","connectivityStatus","dictateInterims","dictateState","createInternalReducer","language","createNotificationsReducer","readyState","referenceGrammarID","sendBoxAttachments","sendBoxValue","sendTimeout","sendTypingIndicator","shouldSpeakIncomingActivity","suggestedActions","createLastTypingReducer","fork","put","takeEvery","call","cancel","fork","take","whileConnectedEffect","fn","args","call","userID","username","directLine","take","CONNECT_FULFILLING","RECONNECT_FULFILLING","task","fork","DISCONNECT_PENDING","RECONNECT_PENDING","cancel","clearSuggestedActions","put","setSuggestedActions","clearSuggestedActionsOnPostActivity","takeEvery","payload","type","POST_ACTIVITY_PENDING","clearSuggestedActionsOnPostActivitySaga","whileConnectedEffect","call","put","takeLatest","createDeferred","createPromiseQueue","deferred","queue","value","resolve","CONNECTIVITY_STATUS_NOTIFICATION_ID","subscribeToPromiseQueue","observable","push","shift","createPromiseQueue","subscription","connectionStatusToNotification","directLine","unsubscribe","reconnecting","call","put","setNotification","connectionStatusToNotificationSaga_default","takeLatest","CONNECT","put","call","observeEachEffect","observable","saga","call","queue","createPromiseQueue","subscription","result","observeConnectionStatus","directLine","observeEachEffect","connectionStatus","put","connectionStatusUpdate","setReferenceGrammarID","connectionStatusUpdateSaga","whileConnectedEffect","call","cancel","cancelled","fork","put","race","take","jwtDecode","fork","put","forkPutEffect","actions","action","UPDATE_CONNECTION_STATUS","updateConnectionStatus","connectionStatus","CONNECTING","ONLINE","UNINITIALIZED","randomUserID","uniqueID","observeAndPutConnectionStatusUpdate","directLine","connectionStatusQueue","createPromiseQueue","connectionStatusSubscription","connectionStatus","call","put","updateConnectionStatus","rectifyUserID","userIDFromAction","token","userIDFromToken","jwtDecode","result","connectSaga","activitySubscription","unsubscribeActivity","take","UPDATE_CONNECTION_STATUS","err","cancelled","reconnectSaga","runAsyncEffect","type","meta","payload","callEffectFactory","forkPutEffect","takeDisconnectAsError","DISCONNECT","runAsyncEffectUntilDisconnect","baseAction","race","connectSaga_default","username","CONNECT","updateConnectionStatusTask","fork","rectifiedUserID","disconnectMeta","endDirectLine","RECONNECT","error","cancel","DISCONNECT_PENDING","DISCONNECT_FULFILLED","call","put","race","take","sleep","interval","ponyfill","resolve","SLOW_CONNECTION_AFTER","detectSlowConnectionSaga","ponyfill","take","CONNECT_PENDING","RECONNECT_PENDING","race","CONNECT_FULFILLED","RECONNECT_FULFILLED","CONNECT_REJECTED","RECONNECT_REJECTED","call","sleep","put","CONNECT_STILL_PENDING","put","takeEvery","postTypingActivity","put","postActivity_default","emitTypingActivityToPostActivity","takeEvery","type","EMIT_TYPING_INDICATOR","emitTypingActivityToPostActivitySaga","whileConnectedEffect","put","select","takeEvery","activities","of","predicate","state","ofType","targetType","of","type","activities_default","activities","speakingActivity","activity","markAllAsSpoken","speakingActivities","select","of","speakingActivity","activity","put","markActivity_default","markAllAsSpokenOnStopSpeakActivitySaga","takeEvery","STOP_SPEAKING_ACTIVITY","put","updateIn","QUEUE_INCOMING_ACTIVITY","queueIncomingActivity","activity","PASSTHRU_FN","value","patchActivityWithFromRole","activity","userID","updateIn","patchNullAsUndefined","name","patchFromName","channelId","from","observeActivity","directLine","observeEachEffect","put","queueIncomingActivity","observeActivitySaga","whileConnectedEffect","all","call","cancelled","put","race","select","take","takeEvery","pad","value","count","stringValue","dateToLocaleISOString","date","timezoneOffset","timezoneSign","absoluteTimezoneOffset","deleteKey","map","keys","nextMap","key","isForbiddenPropertyName","language_default","language","call","observeOnceEffect","observable","subscription","resolve","reject","sendTimeout_default","sendTimeout","HARD_SEND_TIMEOUT","postActivity","directLine","userID","username","numActivitiesPosted","method","activity","ponyfill","attachments","clientActivityID","uniqueID","locale","select","language_default","localTimeZone","now","outgoingActivity","deleteKey","dateToLocaleISOString","contentType","contentUrl","name","thumbnailUrl","meta","put","POST_ACTIVITY_PENDING","echoed","echoBackCall","call","take","INCOMING_ACTIVITY","sendTimeout","sendTimeout_default","echoBack","race","all","observeOnceEffect","sleep","POST_ACTIVITY_IMPEDED","POST_ACTIVITY_FULFILLED","err","POST_ACTIVITY_REJECTED","cancelled","postActivitySaga","whileConnectedEffect","takeEvery","POST_ACTIVITY","action","call","cancelled","fork","put","race","select","take","activityFromBot_default","activity","REPLY_TIMEOUT","takeEveryAndSelect","actionType","selector","fn","cancelled","action","take","state","select","fork","waitForActivityId","replyToId","initialActivities","activities","activity","INCOMING_ACTIVITY","activities_default","queueIncomingActivity","userID","ponyfill","QUEUE_INCOMING_ACTIVITY","initialBotActivities","role","race","call","sleep","put","incomingActivity_default","messageActivities","ofType","lastMessageActivity","activityFromBot_default","actions","to","setSuggestedActions","queueIncomingActivitySaga","whileConnectedEffect","put","takeEvery","postActivityWithEvent","name","value","put","postActivity_default","sendEventToPostActivity","takeEvery","payload","type","SEND_EVENT","sendEventToPostActivitySaga","whileConnectedEffect","put","takeEvery","mime","getType","mime","postActivityWithFiles","files","put","postActivity_default","name","thumbnail","url","size","sendFilesToPostActivity","takeEvery","payload","type","SEND_FILES","sendFilesToPostActivitySaga","whileConnectedEffect","put","takeEvery","postActivityWithMessageBack","displayText","text","value","put","postActivity_default","sendMessageBackToPostActivity","takeEvery","SEND_MESSAGE_BACK","sendMessageBackToPostActivitySaga","whileConnectedEffect","put","takeEvery","postActivityWithMessage","attachments","channelData","method","text","put","postActivity_default","blob","thumbnailURL","size","sendMessageToPostActivity","takeEvery","payload","type","SEND_MESSAGE","sendMessageToPostActivitySaga","whileConnectedEffect","put","takeEvery","postActivityWithPostBack","value","put","postActivity_default","sendPostBackToPostActivity","takeEvery","SEND_POST_BACK","sendPostBackToPostActivitySaga","whileConnectedEffect","call","cancel","put","select","take","takeLatest","sendTypingIndicator_default","sendTypingIndicator","SEND_INTERVAL","takeSendTypingIndicator","value","take","payload","type","SET_SEND_TYPING_INDICATOR","sendTypingIndicatorOnSetSendBox","_","ponyfill","Date","select","sendTypingIndicator_default","lastSend","task","takeLatest","SET_SEND_BOX","POST_ACTIVITY","interval","call","sleep","put","emitTypingIndicator","cancel","sendTypingIndicatorOnSetSendBoxSaga","whileConnectedEffect","put","select","takeEvery","shouldSpeakIncomingActivity_default","shouldSpeakIncomingActivity","speakableActivity","activity","speakActivityAndStartDictateOnIncomingActivityFromOthers","userID","takeEvery","payload","type","INCOMING_ACTIVITY","activity","shouldSpeakIncomingActivity","select","shouldSpeakIncomingActivity_default","shouldSpeak","speakableActivity","speak","put","markActivity_default","setDictateState","stopDictate","speakActivityAndStartDictateOnIncomingActivityFromOthersSaga","whileConnectedEffect","put","select","takeEvery","dictateState_default","dictateState","startDictateOnSpeakComplete","speakingActivities","select","of","speakingActivity","dictateState_default","put","startDictate","startDictateOnSpeakCompleteSaga","takeEvery","type","MARK_ACTIVITY","SET_DICTATE_STATE","put","takeEvery","startSpeakActivityOnPostActivity","takeEvery","meta","payload","type","POST_ACTIVITY_PENDING","put","startSpeakingActivity","startSpeakActivityOnPostActivitySaga","whileConnectedEffect","put","takeEvery","stopDictateOnCardAction","takeEvery","payload","type","POST_ACTIVITY_PENDING","put","stopDictate","stopDictateOnCardActionSaga","whileConnectedEffect","put","takeEvery","stopSpeakingActivityOnInput","takeEvery","meta","payload","type","SET_SEND_BOX","POST_ACTIVITY_PENDING","put","stopSpeakingActivity","stopSpeakingActivityOnInputSaga","whileConnectedEffect","put","select","takeEvery","sendBoxAttachments","sendBoxValue_default","sendBoxValue","submitSendBox","takeEvery","SUBMIT_SEND_BOX","channelData","method","attachments","select","sendBoxAttachments","sendBoxValue","sendBoxValue_default","put","sendMessage","setSendBox","setSendBoxAttachments","submitSendBoxSaga","whileConnectedEffect","createSagas","ponyfill","fork","clearSuggestedActionsOnPostActivitySaga","connectionStatusToNotificationSaga_default","connectionStatusUpdateSaga","connectSaga_default","detectSlowConnectionSaga","emitTypingActivityToPostActivitySaga","markAllAsSpokenOnStopSpeakActivitySaga","observeActivitySaga","postActivitySaga","queueIncomingActivitySaga","sendEventToPostActivitySaga","sendFilesToPostActivitySaga","sendMessageBackToPostActivitySaga","sendMessageToPostActivitySaga","sendPostBackToPostActivitySaga","sendTypingIndicatorOnSetSendBoxSaga","speakActivityAndStartDictateOnIncomingActivityFromOthersSaga","startDictateOnSpeakCompleteSaga","startSpeakActivityOnPostActivitySaga","stopDictateOnCardActionSaga","stopSpeakingActivityOnInputSaga","submitSendBoxSaga","createEnhancerAndSagaMiddleware","getStore","middlewares","sagaMiddleware","createSagaMiddleware","args","err","store","sagaError","applyMiddleware","withOptions","options","initialState","globalThisOrWindow","ponyfillFromOptions","ponyfill","enhancer","createReduxStore","createReducer","composeWithDevTools","createSagas","createStore","withDevTools","lazy","parse","string","union","value","array","fallback","optional","transform","union","orgSchemaProperty","schema","orgSchemaProperty_default","parse","string","lazy","object","optional","parse","string","unknown","value","array","fallback","parse","transform","singularToArray","schema","fallback","transform","array","value","parse","orgSchemaProperties","orgSchemaProperty_default","thingEntries","optional","string","value","orgSchemaProperty_default","orgSchemaProperties","lazy","action","thing","entries","object","unknown","parseThing","data","parse","project","entries","thing","orgSchemaProperty_default","string","parseProject","data","parse","action","entries","thing","orgSchemaProperty_default","union","string","value","lazy","project","parseAction","data","parse","lazy","number","parse","string","union","lazy","parse","string","union","parse","string","definedTerm","entries","thing","orgSchemaProperty_default","string","parseDefinedTerm","data","parse","creativeWork","entries","thing","orgSchemaProperty_default","string","orgSchemaProperties","lazy","union","definedTerm","parseCreativeWork","data","parse","claim","entries","creativeWork","orgSchemaProperty_default","lazy","project","union","number","string","parseClaim","data","parse","parse","string","voteAction","entries","action","orgSchemaProperty_default","string","parseVoteAction","data","parse","getOrgSchemaMessage","graph","messageEntity","entity","parseThing","message","parseCreativeWork","onErrorResumeNext","fn","defaultValue","singleToArray","singleOrArray","once","fn","done","warnOnce","message","once","Constants","ActivityClientState_exports","DictateState_exports","buildTool","moduleFormat","version","buildInfo"]}
|