{"version":3,"file":"AWSLexV2Provider.mjs","sources":["../../../src/lex-v2/AWSLexV2Provider.ts"],"sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport { IntentState, LexRuntimeV2Client, RecognizeTextCommand, RecognizeUtteranceCommand, } from '@aws-sdk/client-lex-runtime-v2';\nimport { getAmplifyUserAgentObject } from '@aws-amplify/core/internals/utils';\nimport { ConsoleLogger, fetchAuthSession } from '@aws-amplify/core';\nimport { v4 as uuid } from 'uuid';\nimport { convert, unGzipBase64AsJson } from '../utils';\nconst logger = new ConsoleLogger('AWSLexV2Provider');\nclass AWSLexV2Provider {\n    constructor() {\n        this._botsCompleteCallback = {};\n        this.defaultSessionId = uuid();\n    }\n    /**\n     * Send a message to a bot\n     * @async\n     * @param {AWSLexV2ProviderOption} botConfig - Bot configuration for sending the message\n     * @param {string | InteractionsMessage} message - message to send to the bot\n     * @return {Promise<InteractionsResponse>} A promise resolves to the response from the bot\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 { region, aliasId, localeId, botId } = botConfig;\n        const client = new LexRuntimeV2Client({\n            region,\n            credentials: session.credentials,\n            customUserAgent: getAmplifyUserAgentObject(),\n        });\n        let response;\n        // common base params for all requests\n        const reqBaseParams = {\n            botAliasId: aliasId,\n            botId,\n            localeId,\n            sessionId: session.identityId ?? this.defaultSessionId,\n        };\n        if (typeof message === 'string') {\n            response = await this._handleRecognizeTextCommand(botConfig, message, reqBaseParams, client);\n        }\n        else {\n            response = await this._handleRecognizeUtteranceCommand(botConfig, message, reqBaseParams, client);\n        }\n        return response;\n    }\n    /**\n     * Attach a onComplete callback function to a bot.\n     * The callback is called once the bot's intent is fulfilled\n     * @param {AWSLexV2ProviderOption} botConfig - Bot configuration to attach the onComplete callback\n     * @param {InteractionsOnCompleteCallback} callback - called when Intent Fulfilled\n     */\n    onComplete({ name }, callback) {\n        this._botsCompleteCallback[name] = callback;\n    }\n    /**\n     * call onComplete callback for a bot if configured\n     */\n    _reportBotStatus(data, { name }) {\n        const sessionState = data?.sessionState;\n        // Check if state is fulfilled to resolve onFullfilment promise\n        logger.debug('postContent state', sessionState?.intent?.state);\n        const callback = this._botsCompleteCallback[name];\n        if (!callback) {\n            return;\n        }\n        switch (sessionState?.intent?.state) {\n            case IntentState.READY_FOR_FULFILLMENT:\n            case IntentState.FULFILLED:\n                callback(undefined, data);\n                break;\n            case IntentState.FAILED:\n                callback(new Error('Bot conversation failed'));\n                break;\n            default:\n                break;\n        }\n    }\n    /**\n     * Format UtteranceCommandOutput's response\n     * decompress attributes\n     * update audioStream format\n     */\n    async _formatUtteranceCommandOutput(data) {\n        return {\n            ...data,\n            messages: await unGzipBase64AsJson(data.messages),\n            sessionState: await unGzipBase64AsJson(data.sessionState),\n            interpretations: await unGzipBase64AsJson(data.interpretations),\n            requestAttributes: await unGzipBase64AsJson(data.requestAttributes),\n            inputTranscript: await unGzipBase64AsJson(data.inputTranscript),\n            audioStream: data.audioStream\n                ? await convert(data.audioStream)\n                : undefined,\n        };\n    }\n    /**\n     * handle client's `RecognizeTextCommand`\n     * used for sending simple text message\n     */\n    async _handleRecognizeTextCommand(botConfig, data, baseParams, client) {\n        logger.debug('postText to lex2', data);\n        const params = {\n            ...baseParams,\n            text: data,\n        };\n        try {\n            const recognizeTextCommand = new RecognizeTextCommand(params);\n            const resultData = await client.send(recognizeTextCommand);\n            this._reportBotStatus(resultData, botConfig);\n            return resultData;\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n    /**\n     * handle client's `RecognizeUtteranceCommand`\n     * used for obj text or obj voice message\n     */\n    async _handleRecognizeUtteranceCommand(botConfig, data, baseParams, client) {\n        const { content, options: { messageType }, } = data;\n        logger.debug('postContent to lex2', data);\n        let params;\n        // prepare params\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                ...baseParams,\n                requestContentType: 'audio/x-l16; sample-rate=16000; channel-count=1',\n                inputStream,\n            };\n        }\n        else {\n            // text input\n            if (typeof content !== 'string')\n                return Promise.reject(new Error('invalid content type'));\n            params = {\n                ...baseParams,\n                requestContentType: 'text/plain; charset=utf-8',\n                inputStream: content,\n            };\n        }\n        // make API call to lex\n        try {\n            const recognizeUtteranceCommand = new RecognizeUtteranceCommand(params);\n            const resultData = await client.send(recognizeUtteranceCommand);\n            const response = await this._formatUtteranceCommandOutput(resultData);\n            this._reportBotStatus(response, botConfig);\n            return response;\n        }\n        catch (err) {\n            return Promise.reject(err);\n        }\n    }\n}\nexport const lexProvider = new AWSLexV2Provider();\n"],"names":["uuid"],"mappings":";;;;;;;AAAA;AACA;AAMA,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,kBAAkB,CAAC;AACpD,MAAM,gBAAgB,CAAC;AACvB,IAAI,WAAW,GAAG;AAClB,QAAQ,IAAI,CAAC,qBAAqB,GAAG,EAAE;AACvC,QAAQ,IAAI,CAAC,gBAAgB,GAAGA,EAAI,EAAE;AACtC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE;AAC1C;AACA,QAAQ,IAAI,OAAO;AACnB,QAAQ,IAAI;AACZ,YAAY,OAAO,GAAG,MAAM,gBAAgB,EAAE;AAC9C,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAC9D,QAAQ;AACR,QAAQ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,SAAS;AAC9D,QAAQ,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC;AAC9C,YAAY,MAAM;AAClB,YAAY,WAAW,EAAE,OAAO,CAAC,WAAW;AAC5C,YAAY,eAAe,EAAE,yBAAyB,EAAE;AACxD,SAAS,CAAC;AACV,QAAQ,IAAI,QAAQ;AACpB;AACA,QAAQ,MAAM,aAAa,GAAG;AAC9B,YAAY,UAAU,EAAE,OAAO;AAC/B,YAAY,KAAK;AACjB,YAAY,QAAQ;AACpB,YAAY,SAAS,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,gBAAgB;AAClE,SAAS;AACT,QAAQ,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACzC,YAAY,QAAQ,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC;AACxG,QAAQ;AACR,aAAa;AACb,YAAY,QAAQ,GAAG,MAAM,IAAI,CAAC,gCAAgC,CAAC,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC;AAC7G,QAAQ;AACR,QAAQ,OAAO,QAAQ;AACvB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE;AACnC,QAAQ,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,QAAQ;AACnD,IAAI;AACJ;AACA;AACA;AACA,IAAI,gBAAgB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE;AACrC,QAAQ,MAAM,YAAY,GAAG,IAAI,EAAE,YAAY;AAC/C;AACA,QAAQ,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC;AACtE,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AACzD,QAAQ,IAAI,CAAC,QAAQ,EAAE;AACvB,YAAY;AACZ,QAAQ;AACR,QAAQ,QAAQ,YAAY,EAAE,MAAM,EAAE,KAAK;AAC3C,YAAY,KAAK,WAAW,CAAC,qBAAqB;AAClD,YAAY,KAAK,WAAW,CAAC,SAAS;AACtC,gBAAgB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;AACzC,gBAAgB;AAChB,YAAY,KAAK,WAAW,CAAC,MAAM;AACnC,gBAAgB,QAAQ,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;AAC9D,gBAAgB;AAGhB;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,6BAA6B,CAAC,IAAI,EAAE;AAC9C,QAAQ,OAAO;AACf,YAAY,GAAG,IAAI;AACnB,YAAY,QAAQ,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC7D,YAAY,YAAY,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC;AACrE,YAAY,eAAe,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3E,YAAY,iBAAiB,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC;AAC/E,YAAY,eAAe,EAAE,MAAM,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC;AAC3E,YAAY,WAAW,EAAE,IAAI,CAAC;AAC9B,kBAAkB,MAAM,OAAO,CAAC,IAAI,CAAC,WAAW;AAChD,kBAAkB,SAAS;AAC3B,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,MAAM,2BAA2B,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;AAC3E,QAAQ,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC;AAC9C,QAAQ,MAAM,MAAM,GAAG;AACvB,YAAY,GAAG,UAAU;AACzB,YAAY,IAAI,EAAE,IAAI;AACtB,SAAS;AACT,QAAQ,IAAI;AACZ,YAAY,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC;AACzE,YAAY,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC;AACtE,YAAY,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC;AACxD,YAAY,OAAO,UAAU;AAC7B,QAAQ;AACR,QAAQ,OAAO,GAAG,EAAE;AACpB,YAAY,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AACtC,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,MAAM,gCAAgC,CAAC,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE;AAChF,QAAQ,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,GAAG,IAAI;AAC3D,QAAQ,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,IAAI,CAAC;AACjD,QAAQ,IAAI,MAAM;AAClB;AACA,QAAQ,IAAI,WAAW,KAAK,OAAO,EAAE;AACrC,YAAY,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC7C,gBAAgB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACxE,YAAY;AACZ,YAAY,MAAM,WAAW,GAAG,OAAO,YAAY,UAAU,GAAG,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC;AAChG,YAAY,MAAM,GAAG;AACrB,gBAAgB,GAAG,UAAU;AAC7B,gBAAgB,kBAAkB,EAAE,iDAAiD;AACrF,gBAAgB,WAAW;AAC3B,aAAa;AACb,QAAQ;AACR,aAAa;AACb;AACA,YAAY,IAAI,OAAO,OAAO,KAAK,QAAQ;AAC3C,gBAAgB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACxE,YAAY,MAAM,GAAG;AACrB,gBAAgB,GAAG,UAAU;AAC7B,gBAAgB,kBAAkB,EAAE,2BAA2B;AAC/D,gBAAgB,WAAW,EAAE,OAAO;AACpC,aAAa;AACb,QAAQ;AACR;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,yBAAyB,GAAG,IAAI,yBAAyB,CAAC,MAAM,CAAC;AACnF,YAAY,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAC3E,YAAY,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC;AACjF,YAAY,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC;AACtD,YAAY,OAAO,QAAQ;AAC3B,QAAQ;AACR,QAAQ,OAAO,GAAG,EAAE;AACpB,YAAY,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;AACtC,QAAQ;AACR,IAAI;AACJ;AACY,MAAC,WAAW,GAAG,IAAI,gBAAgB;;;;"}