{"version":3,"names":["ChatbotKnowledgeBase","chatbotCategoryName","chatbotCategoryId","categories","includeDatesCategories","constructor","findChatbotCategoryId","importTopic","topicId","options","Number","isInteger","Promise","reject","isObject","sourceTopic","getTopic","kbTopicTitle","title","includeDates","isIncludeDatesCategory","category_id","kbPostContent","buildKbPostContentFromTopic","kbTopicId","updateKbTopic","console","log","createKbTopic","error","defaultImportWebPageRemoveTags","importWebPage","url","startsWith","pageId","replace","buildKbPostContentFromWebPage","showTopic","getImportMap","types","importMap","forEachTopicInCategory","topic","extractImportMapping","updateAllImports","count","includes","topicMap","sourceId","parseInt","update","noChangeQuiet","pageMap","resolve","importCategory","categoryName","categoryId","findCategoryId","id","getCategories","#getCategories","result","fetchApi","category_list","#findCategoryId","category","find","c","name","#isIncludeDatesCategory","#findChatbotCategoryId","then","catch","#getTopic","#forEachTopicInCategory","callback","page","topic_list","topics","length","per_page","#createKbTopic","method","headers","buildApiRequestHeaders","body","JSON","stringify","raw","topic_id","#updateKbTopic","force","kbTopic","posts_count","updatedSomething","trim","post_stream","posts","edit_reason","#buildKbPostContentFromTopic","header","formatDate","created_at","tags","tagNames","map","tag","join","Array","isArray","filter","post","post_number","postHeader","buildLinkToPost","#buildKbPostContentFromWebPage","loadTurndown","turndown","TurndownService","headingStyle","remove","node","response","fetch","ok","status","statusText","html","text","markdown","firstLineEnd","indexOf","slice","#buildLinkToPost","linkUrl","window","location","origin","topic_slug","#extractImportMapping","match","#buildApiRequestHeaders","document","head","querySelector","content","#fetchApi","resource","retryAfter","get","reason","setTimeout","json","#formatDate","timestamp","#isObject","x","loadScript","#loadScript","scriptUrl","script","createElement","src","onload","appendChild","#loadTurndown"],"sources":["theme-13-inline-common-body_tag.js"],"sourcesContent":["\n    class ChatbotKnowledgeBase {\n        #chatbotCategoryName;\n        #chatbotCategoryId;\n        #categories;\n\n        includeDatesCategories = ['Product Updates'];\n\n        constructor(chatbotCategoryName = 'Chatbot') {\n            this.#chatbotCategoryName = chatbotCategoryName;\n            this.#findChatbotCategoryId(chatbotCategoryName);\n        }\n\n        async importTopic(topicId, options = {}) {\n            if (!Number.isInteger(topicId)) {\n                return Promise.reject(\"topicId must be an integer.\");\n            }\n            if (!this.#isObject(options)) {\n                return Promise.reject(\"options must be an object.\");\n            }\n\n            try {\n                let sourceTopic = await this.#getTopic(topicId);\n                let kbTopicTitle = \"KB topic \" + topicId + \": \" + sourceTopic.title;\n                let includeDates = await this.#isIncludeDatesCategory(sourceTopic.category_id);\n                let kbPostContent = this.#buildKbPostContentFromTopic(sourceTopic, options, includeDates);\n\n                if ('update' in options) {\n                    let kbTopicId = await this.#updateKbTopic(kbTopicTitle, kbPostContent, options['update'], topicId, options['force']);\n                    if (kbTopicId) {\n                        console.log(\"Imported topic \" + topicId + \" by updating KB topic \" + kbTopicId);\n                    } else if (!options['noChangeQuiet']) {\n                        console.log(\"Nothing has changed in topic \" + topicId);\n                    }\n                } else {\n                    let kbTopicId = await this.#createKbTopic(kbTopicTitle, kbPostContent);\n                    console.log(\"Imported topic \" + topicId + \" as new KB topic \" + kbTopicId);\n                }\n            } catch (error) {\n                console.error(\"Failed to import topic \" + topicId + \": \" + error);\n            }\n        }\n\n        defaultImportWebPageRemoveTags = [\n            'meta', 'style', 'link', 'script', 'noscript', 'applet', 'area', 'object', 'nav', 'base', 'embed',\n            'object', 'param', 'header', 'hgroup', 'footer'\n        ];\n\n        async importWebPage(url, options = {}) {\n            if (!(typeof url === 'string' && url.startsWith('http'))) {\n                return Promise.reject(\"url must be a string that starts with http.\");\n            }\n            if (!this.#isObject(options)) {\n                return Promise.reject(\"options must be an object.\");\n            }\n\n            try {\n                let pageId = url.replace(/(^\\w+:|^)\\/\\//, '');\n                let kbPostContent = await this.#buildKbPostContentFromWebPage(url, options);\n                let kbTopicTitle = \"KB page \" + pageId;\n\n                if ('dryRun' in options && options['dryRun']) {\n                    console.log(\"Title: \" + kbTopicTitle + \"\\n\\nContent: \" + kbPostContent);\n                } else if ('update' in options) {\n                    let kbTopicId = await this.#updateKbTopic(kbTopicTitle, kbPostContent, options['update'], pageId, options['force']);\n                    if (kbTopicId) {\n                        console.log(\"Imported \" + url + \" by updating KB topic \" + kbTopicId);\n                    } else if (!options['noChangeQuiet']) {\n                        console.log(\"Nothing has changed at \" + url);\n                    }\n                } else {\n                    let kbTopicId = await this.#createKbTopic(kbTopicTitle, kbPostContent);\n                    console.log(\"Imported \" + url + \" as new KB topic \" + kbTopicId);\n                }\n            } catch (error) {\n                console.error(\"Failed to import \" + url + \": \" + error);\n            }\n        }\n\n        async showTopic(topicId) {\n            if (!Number.isInteger(topicId)) {\n                return Promise.reject(\"topicId must be an integer.\");\n            }\n            console.log(await this.#getTopic(topicId));\n        }\n\n        async getImportMap(types = ['topic', 'page']) {\n            let importMap = {};\n            await this.#forEachTopicInCategory(this.#chatbotCategoryId, topic => {\n                this.#extractImportMapping(importMap, types, topic);\n            })\n            return importMap;\n        }\n\n        async updateAllImports(types = ['topic', 'page']) {\n            let count = 0;\n            if (types.includes('topic')) {\n                let topicMap = await this.getImportMap(['topic']);\n                for (const sourceId in topicMap) {\n                    count++;\n                    await this.importTopic(parseInt(sourceId), { update: topicMap[sourceId], noChangeQuiet: 1 });\n                }\n            }\n            if (types.includes('page')) {\n                let pageMap = await this.getImportMap(['page']);\n                for (const sourceId in pageMap) {\n                    count++;\n                    await this.importWebPage(\"https://\" + sourceId, { update: pageMap[sourceId], noChangeQuiet: 1 })\n                }\n            }\n            return Promise.resolve(\"Updated \" + count + \" imports\");\n        }\n\n        async importCategory(categoryName, options = {}) {\n            let categoryId = await this.#findCategoryId(categoryName);\n            let importMap = await this.getImportMap(['topic']);\n            let count = 0;\n            await this.#forEachTopicInCategory(categoryId, async topic => {\n                if (topic.id in importMap) {\n                    await this.importTopic(topic.id, { update: importMap[topic.id], 'noChangeQuiet': 1 });\n                } else {\n                    await this.importTopic(topic.id);\n                }\n                count++;\n                return 'limit' in options ? count < options['limit'] : true;\n            })\n            return Promise.resolve(\"Imported \" + count + \" topics from category \" + categoryName);\n        }\n\n        async #getCategories() {\n            if (!this.#categories) {\n                let result = await this.#fetchApi(\"/categories.json\");\n                this.#categories = result.category_list.categories;\n            }\n            return this.#categories;\n        }\n\n        async #findCategoryId(categoryName) {\n            let categories = await this.#getCategories();\n            let category = categories.find(c => c.name === categoryName);\n            return category ? Promise.resolve(category.id) : Promise.reject(categoryName + \" not found\");\n        }\n\n        async #isIncludeDatesCategory(categoryId) {\n            let categories = await this.#getCategories();\n            let category = categories.find(c => c.id === categoryId);\n            return category ? this.includeDatesCategories.includes(category.name) : false;\n        }\n\n        #findChatbotCategoryId(categoryName) {\n            this.#findCategoryId(categoryName).then(categoryId => {\n                this.#chatbotCategoryId = categoryId;\n                console.log(\"Using chatbot category \" + categoryName + \" with ID \" + this.#chatbotCategoryId);\n            }).catch(error => console.error(\"Failed to find Chatbot KB category: \" + error));\n        }\n\n        async #getTopic(topicId) {\n            return await this.#fetchApi(\"/t/\" + topicId + \".json?include_raw=true\");\n        }\n\n        async #forEachTopicInCategory(categoryId, callback) {\n            let count = 0;\n            for (let page = 0; true; page++) {\n                let result = await this.#fetchApi(\"/latest.json?category=\" + categoryId + \"&page=\" + page);\n                for (const topic of result.topic_list.topics) {\n                    count++;\n                    if (await callback(topic) === false) {\n                        return Promise.resolve(count);\n                    }\n                }\n                if (result.topic_list.topics.length < result.topic_list.per_page) {\n                    break;\n                }\n            }\n            return Promise.resolve(count);\n        }\n\n        async #createKbTopic(kbTopicTitle, kbPostContent) {\n            let result = await this.#fetchApi(\"/posts.json\", {\n                method: \"POST\",\n                headers: this.#buildApiRequestHeaders(),\n                body: JSON.stringify({\n                    title: kbTopicTitle,\n                    raw: kbPostContent,\n                    category: this.#chatbotCategoryId,\n                }),\n            });\n            return Promise.resolve(result.topic_id);\n        }\n\n        async #updateKbTopic(kbTopicTitle, kbPostContent, kbTopicId, sourceId, force) {\n            if (!Number.isInteger(kbTopicId)) {\n                return Promise.reject(\"KB topic ID must be an integer.\");\n            }\n\n            let kbTopic = await this.#getTopic(kbTopicId);\n            if (kbTopic.category_id !== this.#chatbotCategoryId) {\n                return Promise.reject(\"KB topic \" + kbTopicId + \" is not in the \" + this.#chatbotCategoryName + \" category. If you're sure then use force option to update.\");\n            }\n            if (!kbTopic.title.includes(sourceId) && !force) {\n                return Promise.reject(\"KB topic \" + kbTopicId + \" title does not include \" + sourceId + \". If you're sure then use force option to update.\");\n            }\n            if (kbTopic.posts_count < 1) {\n                return Promise.reject(\"KB topic \" + kbTopicId + \" has no posts. Expected at least 1.\");\n            }\n\n            let updatedSomething = false;\n\n            if (kbTopicTitle !== kbTopic.title) {\n                await this.#fetchApi(\"/t/-/\" + kbTopicId + \".json\", {\n                    method: \"PUT\",\n                    headers: this.#buildApiRequestHeaders(),\n                    body: JSON.stringify({\n                        title: kbTopicTitle,\n                    }),\n                });\n                updatedSomething = true;\n            }\n\n            if (kbPostContent.trim() !== kbTopic.post_stream.posts[0].raw.trim()) {\n                await this.#fetchApi(\"/posts/\" + kbTopic.post_stream.posts[0].id + \".json\", {\n                    method: \"PUT\",\n                    headers: this.#buildApiRequestHeaders(),\n                    body: JSON.stringify({\n                        raw: kbPostContent,\n                        edit_reason: \"Updated with KB tools.\",\n                    }),\n                });\n                updatedSomething = true;\n            }\n\n            return updatedSomething ? Promise.resolve(kbTopicId) : Promise.resolve(false);\n        }\n\n        #buildKbPostContentFromTopic(topic, options, includeDates) {\n            let header = \"**Topic title is:** \" + topic.title + \"\\n\";\n            if (includeDates) {\n                header += \"**Topic was posted on:** \" + this.#formatDate(topic.created_at) + \"\\n\";\n            }\n            if (topic.tags.length > 0) {\n                let tagNames = topic.tags.map(tag => typeof tag === 'string' ? tag : tag.name);\n                header += \"**Topic tags are:** \" + tagNames.join(\", \") + \"\\n\";\n            }\n\n            let posts = topic.post_stream.posts;\n            if ('include' in options && Array.isArray(options['include'])) {\n                posts = posts.filter(post => options['include'].includes(post.post_number));\n            } else if ('exclude' in options && Array.isArray(options['exclude'])) {\n                posts = posts.filter(post => !options['exclude'].includes(post.post_number));\n            }\n            posts = posts.map((post) => {\n                let postHeader = \"**Link to post \" + post.post_number + \" below is:** \" + this.#buildLinkToPost(post) + \"\\n\";\n                if (includeDates) {\n                    postHeader += \"**Post \" + post.post_number + \" was posted on:** \" + this.#formatDate(post.created_at) + \"\\n\";\n                }\n                return postHeader + post.raw;\n            }, this);\n\n            return header + \"\\n\" + posts.join(\"\\n\\n\");\n        }\n\n        async #buildKbPostContentFromWebPage(url, options) {\n            await this.#loadTurndown();\n            let turndown = new TurndownService({\n                headingStyle: 'atx'\n            });\n            if (!('removeTags' in options)) {\n                options['removeTags'] = this.defaultImportWebPageRemoveTags;\n            }\n            turndown.remove(options['removeTags']);\n            if ('removeIds' in options) {\n                turndown.remove(node => node.id && Array.isArray(options['removeIds']) && options['removeIds'].includes(node.id));\n            }\n\n            let response = await fetch(url);\n            if (!response.ok) {\n                return Promise.reject(\"Failed to fetch \" + url + \": \" + response.status + \" \" + response.statusText);\n            }\n            let html = await response.text();\n            let markdown = turndown.turndown(html);\n            let firstLineEnd = markdown.indexOf(\"\\n\");\n            return markdown.slice(0, firstLineEnd).trim() + \"\\n\" + \"**Link to page below is:** \" + url + \"\\n\" + markdown.slice(firstLineEnd + 1);\n        }\n\n        #buildLinkToPost(post) {\n            let linkUrl = window.location.origin + \"/t/\" + post.topic_slug + \"/\" + post.topic_id;\n            if (post.post_number > 1) {\n                linkUrl += \"/\" + post.post_number;\n            }\n            return linkUrl;\n        }\n\n        #extractImportMapping(importMap, types, topic) {\n            if (types.includes('topic') && topic.title.startsWith(\"KB topic \")) {\n                let match = topic.title.match(/^KB topic (\\d+):/);\n                if (match.length === 2) {\n                    importMap[match[1]] = topic.id;\n                }\n            } else if (types.includes('page') && topic.title.startsWith(\"KB page \")) {\n                let match = topic.title.match(/^KB page (.+)/);\n                if (match.length === 2) {\n                    importMap[match[1]] = topic.id;\n                }\n            }\n        }\n\n        #buildApiRequestHeaders() {\n            return {\n                \"Content-Type\": \"application/json\",\n                \"X-Csrf-Token\": document.head.querySelector(\"meta[name=csrf-token]\")?.content\n            };\n        }\n\n        async #fetchApi(resource, options = {}) {\n            let response = await fetch(resource, options);\n            while (response.status === 429) {\n                let retryAfter = response.headers.get('Retry-After') || 10;\n                let reason = response.headers.get('Discourse-Rate-Limit-Error-Code') || 'no reason given';\n                console.log(\"HTTP 429 Too Many Requests (\" + reason + \"), retrying after \" + retryAfter + \" seconds\");\n                await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));\n                response = await fetch(resource, options);\n            }\n            if (response.status === 422) {\n                return Promise.reject(\"HTTP 422 Unprocessable Content, does the topic title alreay exist?\");\n            }\n            if (response.ok) {\n                return response.json();\n            } else {\n                return Promise.reject(\"HTTP \" + response.status + \", \" + response.statusText);\n            }\n        }\n\n        #formatDate(timestamp) {\n            return timestamp.slice(0, 10);\n        }\n\n        #isObject(x) {\n            return typeof x === 'object' && x !== null && !Array.isArray(x);\n        }\n\n        #loadScript(scriptUrl, callback) {\n            const script = document.createElement('script');\n            script.src = scriptUrl;\n            script.onload = callback;\n            document.body.appendChild(script);\n        }\n\n        async #loadTurndown() {\n            return new Promise(resolve => {\n                if (typeof TurndownService === 'undefined') {\n                    this.#loadScript(\"https://unpkg.com/turndown/dist/turndown.js\", function () {\n                        resolve(\"Successfully loaded Turndown\");\n                    });\n                } else {\n                    resolve(\"Turndown already loaded\");\n                }\n            });\n        }\n    }\n"],"mappings":"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","ignoreList":[]}