{"version":3,"file":"AWSLexProvider.mjs","sources":["../../../src/lex-v1/AWSLexProvider.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { DialogState, LexRuntimeServiceClient, PostContentCommand, PostTextCommand, } from '@aws-sdk/client-lex-runtime-service';\nimport { getAmplifyUserAgentObject } from '@aws-amplify/core/internals/utils';\nimport { ConsoleLogger, fetchAuthSession } from '@aws-amplify/core';\nimport { convert } from '../utils';\nconst logger = new ConsoleLogger('AWSLexProvider');\nclass AWSLexProvider {\n    constructor() {\n        this._botsCompleteCallback = {};\n    }\n    /**\n     * @deprecated\n     * This is used internally by 'sendMessage' to call onComplete callback\n     * for a bot if configured\n     */\n    reportBotStatus(data, { name }) {\n        const callback = this._botsCompleteCallback[name];\n        if (!callback) {\n            return;\n        }\n        // Check if state is fulfilled to resolve onFullfilment promise\n        logger.debug('postContent state', data.dialogState);\n        switch (data.dialogState) {\n            case DialogState.READY_FOR_FULFILLMENT:\n            case DialogState.FULFILLED:\n                callback(undefined, data);\n                break;\n            case DialogState.FAILED:\n                callback(new Error('Bot conversation failed'));\n                break;\n            default:\n                break;\n        }\n    }\n    async sendMessage(botConfig, message) {\n        // check if credentials are present\n        let session;\n        try {\n            session = await fetchAuthSession();\n        }\n        catch (error) {\n            return Promise.reject(new Error('No credentials'));\n        }\n        const { name, region, alias } = botConfig;\n        const client = new LexRuntimeServiceClient({\n            region,\n            credentials: session.credentials,\n            customUserAgent: getAmplifyUserAgentObject(),\n        });\n        let params;\n        if (typeof message === 'string') {\n            params = {\n                botAlias: alias,\n                botName: name,\n                inputText: message,\n                userId: session.identityId,\n            };\n            logger.debug('postText to lex', message);\n            try {\n                const postTextCommand = new PostTextCommand(params);\n                const data = await client.send(postTextCommand);\n                this.reportBotStatus(data, botConfig);\n                return data;\n            }\n            catch (err) {\n                return Promise.reject(err);\n            }\n        }\n        else {\n            const { content, options: { messageType }, } = message;\n            if (messageType === 'voice') {\n                if (typeof content !== 'object') {\n                    return Promise.reject(new Error('invalid content type'));\n                }\n                const inputStream = content instanceof Uint8Array ? content : await convert(content);\n                params = {\n                    botAlias: alias,\n                    botName: name,\n                    contentType: 'audio/x-l16; sample-rate=16000; channel-count=1',\n                    userId: session.identityId,\n                    accept: 'audio/mpeg',\n                    inputStream,\n                };\n            }\n            else {\n                if (typeof content !== 'string')\n                    return Promise.reject(new Error('invalid content type'));\n                params = {\n                    botAlias: alias,\n                    botName: name,\n                    contentType: 'text/plain; charset=utf-8',\n                    inputStream: content,\n                    userId: session.identityId,\n                    accept: 'audio/mpeg',\n                };\n            }\n            logger.debug('postContent to lex', message);\n            try {\n                const postContentCommand = new PostContentCommand(params);\n                const data = await client.send(postContentCommand);\n                const audioArray = data.audioStream\n                    ? await convert(data.audioStream)\n                    : undefined;\n                const response = { ...data, ...{ audioStream: audioArray } };\n                this.reportBotStatus(response, botConfig);\n                return response;\n            }\n            catch (err) {\n                return Promise.reject(err);\n            }\n        }\n    }\n    onComplete({ name }, callback) {\n        this._botsCompleteCallback[name] = callback;\n    }\n}\nexport const lexProvider = new AWSLexProvider();\n"],"names":[],"mappings":"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"}