@iflyrpa/actions 1.2.7 → 1.2.9

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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["webpack://@iflyrpa/actions/./src/utils/http.ts","webpack://@iflyrpa/actions/./src/utils/index.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/getBaijiahaoActivity/index.ts","webpack://@iflyrpa/actions/./src/actions/getToutiaoConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/searchToutiaoTopicList/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXiaohongshuLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/utils.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/index.ts","webpack://@iflyrpa/actions/./src/utils/xhsXsEncrypt.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/index.ts","webpack://@iflyrpa/actions/./src/index.ts"],"sourcesContent":["import type { ResponseData } from \"@iflyrpa/share\";\nimport axios, {\n\ttype AxiosError,\n\ttype AxiosInstance,\n\ttype AxiosResponse,\n\ttype CreateAxiosDefaults,\n\ttype AxiosRequestConfig,\n} from \"axios\";\n\nexport class Http {\n\tprivate apiClient: AxiosInstance;\n\n\tstatic handleApiError(error: unknown): ResponseData {\n\t\t// 如果错误已经是 ResponseData 格式,直接抛出\n\t\tif (error && typeof error === \"object\" && \"code\" in error && \"message\" in error) {\n\t\t\treturn error as ResponseData;\n\t\t}\n\n\t\t// 处理其他类型的错误\n\t\treturn {\n\t\t\tcode: 500,\n\t\t\tmessage: \"\",\n\t\t\tdata: error,\n\t\t};\n\t}\n\n\tconstructor(config?: CreateAxiosDefaults) {\n\t\tthis.apiClient = axios.create(config);\n\t}\n\n\t// 添加响应拦截器\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tpublic addResponseInterceptor<T = any>(findError: (response: AxiosResponse<T>) => ResponseData | undefined) {\n\t\tthis.apiClient.interceptors.response.use(\n\t\t\t(response) => {\n\t\t\t\t// 检查响应中的 errno 字段\n\t\t\t\tconst error = findError(response);\n\n\t\t\t\tif (error) {\n\t\t\t\t\treturn Promise.reject(\n\t\t\t\t\t\tObject.assign(error, {\n\t\t\t\t\t\t\textra: {\n\t\t\t\t\t\t\t\tmethod: response.config.method,\n\t\t\t\t\t\t\t\turl: response.config.url,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn response;\n\t\t\t},\n\t\t\t(error: AxiosError) => {\n\t\t\t\t// 创建标准错误响应格式\n\t\t\t\tconst errorResponse: ResponseData = {\n\t\t\t\t\tcode: error.response?.status || 500,\n\t\t\t\t\tmessage: error.message || \"\",\n\t\t\t\t\tdata: error.response?.data,\n\t\t\t\t\textra: {\n\t\t\t\t\t\tmethod: error.config?.method,\n\t\t\t\t\t\turl: error.config?.url,\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\t// 如果服务端返回了详细错误信息,可以使用服务端的错误信息\n\t\t\t\tif (error.response?.data) {\n\t\t\t\t\tif (typeof error.response.data === \"object\") {\n\t\t\t\t\t\t// 如果服务端返回的是对象,可以尝试提取错误信息\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\t\t\t\t\tconst serverError = error.response.data as any;\n\t\t\t\t\t\tif (serverError.message) {\n\t\t\t\t\t\t\terrorResponse.message = serverError.message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 可以保留原始错误数据\n\t\t\t\t\t\terrorResponse.data = serverError;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 返回标准化的错误响应\n\t\t\t\treturn Promise.reject(errorResponse);\n\t\t\t},\n\t\t);\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tpublic async api<T = any>(config: AxiosRequestConfig): Promise<T> {\n\t\ttry {\n\t\t\tconst response = await this.apiClient<T>(config);\n\t\t\treturn response.data;\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(Http.handleApiError(error));\n\t\t}\n\t}\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { CommonAction, Page, ResponseData } from \"@iflyrpa/share\";\nimport domSerializer from \"dom-serializer\";\nimport { type ChildNode, DomHandler, type Element } from \"domhandler\";\nimport { DomUtils, Parser } from \"htmlparser2\";\nimport mime from \"mime-types\";\n\nimport { Http } from \"./http\";\n\n/**\n * 生成两数之间的随机整数\n * @param min\n * @param max\n * @returns\n */\nexport function getRandomInRange(min: number, max: number) {\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nexport const getFileState = (filePath: string) => {\n\t// 获取文件名\n\tconst filename = path.basename(filePath);\n\t// 获取文件类型\n\tconst fileType = mime.lookup(filePath);\n\tconst stats = fs.statSync(filePath);\n\t// 获取文件大小\n\tconst fileSize = stats.size;\n\t// 获取最后修改时间\n\tconst lastModifiedDate = stats.mtime;\n\n\treturn {\n\t\tname: filename,\n\t\ttype: fileType,\n\t\tsize: fileSize,\n\t\tlastModifiedDate: lastModifiedDate.toString(),\n\t};\n};\n\nexport type AspectRatio = [number, number];\nexport type CropCoordinates = {\n\tx1: number;\n\ty1: number;\n\tx2: number;\n\ty2: number;\n};\n\n/**\n * 获取特定的比例切割图片,获取切割的坐标\n * @param width 图片长度\n * @param height 图片高度\n * @param aspectRatio 切割比例:[宽度,高度]\n * @returns\n */\nexport const calculateCropCoordinates = (width: number, height: number, aspectRatio: AspectRatio): CropCoordinates => {\n\tconst targetRatio = aspectRatio[0] / aspectRatio[1];\n\tlet cropWidth: number;\n\tlet cropHeight: number;\n\n\tif (width / height > targetRatio) {\n\t\t// 图片过宽,需要裁切宽度\n\t\tcropHeight = height;\n\t\tcropWidth = height * targetRatio;\n\t} else {\n\t\t// 图片过高,需要裁切高度\n\t\tcropWidth = width;\n\t\tcropHeight = width / targetRatio;\n\t}\n\n\tconst x1 = (width - cropWidth) / 2;\n\tconst y1 = (height - cropHeight) / 2;\n\tconst x2 = x1 + cropWidth;\n\tconst y2 = y1 + cropHeight;\n\n\t// 返回百分比坐标\n\treturn {\n\t\tx1: x1 / width,\n\t\ty1: y1 / height,\n\t\tx2: x2 / width,\n\t\ty2: y2 / height,\n\t};\n};\n\n// 提取 html 中的 img 标签\nexport const extractImgTag = (html: string) => {\n\tconst srcList: string[] = [];\n\n\tconst parser = new Parser({\n\t\tonopentag(name, attributes) {\n\t\t\tif (name === \"img\" && (attributes.src.trim() || attributes.currentSrc.trim())) {\n\t\t\t\tsrcList.push(attributes.src.trim() || attributes.currentSrc.trim());\n\t\t\t}\n\t\t},\n\t});\n\n\tparser.write(html);\n\tparser.end();\n\n\treturn srcList;\n};\n\nexport const replaceImgSrc = (html: string, callback: (dom: Element) => Element) => {\n\tlet lastedHtml = html;\n\n\tconst isImageTag = (node: ChildNode): node is Element => node.type === \"tag\" && node.name === \"img\";\n\n\tconst traverseDom = (node: ChildNode) => {\n\t\tif (DomUtils.hasChildren(node)) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tif (isImageTag(child)) {\n\t\t\t\t\tcallback(child);\n\t\t\t\t}\n\t\t\t\ttraverseDom(child);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handler = new DomHandler((error, dom) => {\n\t\tif (error) {\n\t\t\tconsole.log(error);\n\t\t} else {\n\t\t\t// 处理 DOM 节点的函数\n\t\t\tdom.forEach(traverseDom);\n\t\t}\n\n\t\tlastedHtml = domSerializer(dom, { decodeEntities: false });\n\t});\n\n\tconst parser = new Parser(handler, { decodeEntities: false });\n\tparser.write(html);\n\tparser.end();\n\n\treturn lastedHtml;\n};\n\nexport const stringifyError = (error: unknown) => {\n\tif (error instanceof Error) {\n\t\treturn error.toString();\n\t}\n\n\tif (typeof error === \"object\") {\n\t\treturn JSON.stringify(error);\n\t}\n\n\treturn error;\n};\n\n/**\n * 创建一个函数,该函数会依次执行传入的函数列表,直到有一个函数成功或所有函数都失败。\n *\n * @template P - 函数的参数类型,为一个任意长度的数组。\n * @template T - 函数的返回类型,为一个 Promise 的解析值类型。\n * @param {CommonAction<P, T>[]} actions - 一个函数列表,每个函数的类型为 `(...p: P) => Promise<T>`。\n * @returns {CommonAction<P, T>} - 返回一个新的函数,其类型与传入的函数列表中的函数类型相同。\n * 当调用该函数时,会依次执行 `actions` 中的函数,直到有一个函数成功(即返回一个解析的 Promise),\n * 或者所有函数都失败(即抛出异常)。如果所有函数都失败,则抛出最后一个错误。\n *\n * @example\n * const action1 = async (num) => {\n * if (num > 0) return \"Action 1 succeeded\";\n * throw new Error(\"Action 1 failed\");\n * };\n *\n * const action2 = async (num) => {\n * if (num > 1) return \"Action 2 succeeded\";\n * throw new Error(\"Action 2 failed\");\n * };\n *\n * const combinedAction = executeAction(action1, action2);\n *\n * (async () => {\n * try {\n * const result = await combinedAction(1);\n * console.log(result); // 输出: \"Action 2 succeeded\"\n * } catch (error) {\n * console.error(error.message);\n * }\n * })();\n */\nexport const executeAction = <P, T>(...actions: CommonAction<P, T>[]): CommonAction<P, T> => {\n\treturn async (task, params) => {\n\t\tlet result: ResponseData<T> = {\n\t\t\tcode: 500,\n\t\t\tmessage: \"\",\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\t\tdata: null as any,\n\t\t};\n\n\t\tfor (let index = 0; index < actions.length; index++) {\n\t\t\tconst action = actions[index];\n\n\t\t\ttry {\n\t\t\t\tresult = await action(task, params);\n\t\t\t} catch (error) {\n\t\t\t\tresult = Http.handleApiError(error);\n\t\t\t}\n\n\t\t\t// code === 0 表示成功, code === 200 虽然表示失败,但是不需要继续执行后续的 action\n\t\t\tif (result.code === 0 || result.code === 200) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t// 不是最后一个 action,上报错误信息\n\t\t\tif (index !== actions.length - 1) {\n\t\t\t\ttask.logger.error(result.message, stringifyError(result.data), result.extra);\n\t\t\t}\n\t\t}\n\n\t\t// 所有 action 都执行完毕但都失败了,返回最后一个失败结果\n\t\treturn result;\n\t};\n};\n\n/**\n * 将 HTML 内容复制到剪贴板\n * @param page - 页面对象\n * @param html - HTML 内容\n * @param options - 选项,包括格式和回退\n * @returns 无返回值\n */\nexport async function copyHtmlToClipboard(page: Page, html: string, options = { format: \"text/html\", fallback: true }) {\n\ttry {\n\t\t// 尝试使用原生 API\n\t\tawait page.evaluate(\n\t\t\tasync ({ htmlContent, format }) => {\n\t\t\t\tconst blob = new Blob([htmlContent], { type: format });\n\t\t\t\tawait navigator.clipboard.write([new ClipboardItem({ [format]: blob })]);\n\t\t\t},\n\t\t\t{ htmlContent: html, format: options.format },\n\t\t);\n\t} catch (error) {\n\t\tif (options.fallback) {\n\t\t\t// 回退到 DOM 操作\n\t\t\tawait page.evaluate((htmlContent) => {\n\t\t\t\tconst div = document.createElement(\"div\");\n\t\t\t\tdiv.contentEditable = \"true\";\n\t\t\t\tdiv.style.cssText = `\n position: fixed;\n left: -9999px;\n opacity: 0;\n pointer-events: none;\n `;\n\n\t\t\t\tdiv.innerHTML = htmlContent;\n\t\t\t\tdocument.body.appendChild(div);\n\n\t\t\t\tconst range = document.createRange();\n\t\t\t\trange.selectNodeContents(div);\n\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: <忽略错误>\n\t\t\t\tconst selection = window.getSelection()!;\n\t\t\t\tselection.removeAllRanges();\n\t\t\t\tselection.addRange(range);\n\n\t\t\t\tdocument.execCommand(\"copy\");\n\t\t\t\tdocument.body.removeChild(div);\n\t\t\t\tselection.removeAllRanges();\n\t\t\t}, html);\n\t\t}\n\t}\n}\n\n/**\n * 通用弹窗监听处理器\n * @param page - Playwright 页面对象\n * @param popupSelector - 弹窗的选择器(字符串或 Locator)\n * @param popKey - 弹窗中的唯一键(字符串)\n * @param buttonSelector - 弹窗中需要点击的按钮选择器\n * @param options - 可选配置项\n */\nexport function PopupListener(\n\tpage: Page, \n\tpopupSelector: string, \n\tpopKey: string, \n\tbuttonSelector: string, \n\toptions:{\n\t\tcheckInterval?: number;\n\t\tstopAfterClick?: boolean;\n\t} = {}) {\n\tconst {\n\t\tcheckInterval = 1000,\n\t\tstopAfterClick = false\n\t} = options;\n\n\tconst popup = page.locator(popupSelector);\n\tconst button = page.locator(buttonSelector);\n\n\tconst intervalId = setInterval(async () => {\n\t\ttry {\n\t\t\tif (await popup.count() > 0 && await popup.isVisible() && (await popup.textContent()||\"\").includes(popKey)) {\n\t\t\t\tawait button.click({ force: true });\n\n\t\t\t\tif (stopAfterClick) {\n\t\t\t\t\tclearInterval(intervalId);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) { }\n\t}, checkInterval);\n\n\treturn () => {\n\t\tclearInterval(intervalId);\n\t};\n}\n\n// 将 url 的 queryString 解析成对象\nexport const parseUrlQueryString = (url: string) => {\n\tconst queryStringObject: Record<string, string> = {};\n\n\t// 检查 URL 是否包含查询参数\n\tif (!url || !url.includes(\"?\")) {\n\t\treturn queryStringObject;\n\t}\n\n\t// 提取查询字符串部分\n\tconst queryString = url.split(\"?\")[1];\n\n\t// 检查查询字符串是否为空\n\tif (!queryString) {\n\t\treturn queryStringObject;\n\t}\n\n\t// 处理 hash 部分\n\tconst queryWithoutHash = queryString.split(\"#\")[0];\n\n\t// 分割查询参数\n\tconst queryStringArray = queryWithoutHash.split(\"&\");\n\n\tfor (const item of queryStringArray) {\n\t\t// 跳过空参数\n\t\tif (!item) continue;\n\n\t\tconst equalIndex = item.indexOf(\"=\");\n\n\t\t// 处理没有值的参数 (如 ?param)\n\t\tif (equalIndex === -1) {\n\t\t\tqueryStringObject[item] = \"\";\n\t\t} else {\n\t\t\tconst key = item.slice(0, equalIndex);\n\t\t\tconst value = item.slice(equalIndex + 1);\n\n\t\t\t// 尝试解码,如果解码失败则使用原始值\n\t\t\ttry {\n\t\t\t\tqueryStringObject[key] = decodeURIComponent(value);\n\t\t\t} catch (e) {\n\t\t\t\tqueryStringObject[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn queryStringObject;\n};\n\n/**\n * 合并默认参数\n * @param params\n * @param defaults\n * @returns\n */\nexport const defaultParams = <P = Record<string, unknown>>(params: P, defaults: Partial<P>): P => {\n\treturn Object.assign({}, defaults, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\n\nimport type { PublishAction } from \".\";\nimport { extractImgTag, replaceImgSrc } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\n\ninterface CommonResponse<T = unknown> {\n\tdata: T;\n\terrmsg: string;\n\terrno: number;\n}\n\ninterface ImageRetResponse {\n\tbos_url: string;\n\thttps_url: string;\n\tno_waterlog_bos_url: string;\n\torg_url: string;\n}\n\nconst errnoMap: Record<number, string> = {\n\t20040706: \"正文图片和封面图片推荐jpg、png格式。\",\n\t20040084: \"正文图片和封面图片推荐jpg、png格式。\",\n\t20050004: \"今日百家号发布次数已达上限,请明天再试。\",\n\t10000015: \"账号存在异常,需前往百家号平台完成发文验证后可激活使用。\",\n\t20050000: \"操作太频繁,请稍后再试\",\n\t20040027: \"你的账号状态异常,请到百家号平台检查账号状态。\",\n\t10000017: \"账号存在异常,需前往百家号平台完成发文验证后可激活使用。\",\n\t20040033: \"封面图片推荐 jpg、png格式,宽高在372×284-5000×5000 范围内。\",\n\t2004005714: \"网络环境异常,请检查网络后重试发布。\",\n\t401100032: \"异常,请检查图片(如:格式、版权、合规性等)。\",\n\t20040034: \"封面图片推荐jpg、png格式,不支持gif格式。\",\n\t20040124: \"服务器异常,请稍后重试!\"\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst { baijiahaoSingleCover, baijiahaoMultCover, baijiahaoCoverType } = params.settingInfo;\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\ttoken: params.token,\n\t\t},\n\t});\n\n\t// 添加响应拦截器\n\thttp.addResponseInterceptor<CommonResponse>((response) => {\n\t\tconst msgType = params.saveType === \"draft\" ? \"同步\" : \"发布\";\n\n\t\t// 检查响应中的 errno 字段\n\t\tif (response.data.errno !== 0) {\n\t\t\tlet errmsg = response.config.defaultErrorMsg || `文章${msgType}异常,请稍后重试。`;\n\n\t\t\tif (response.data.errno === 20050000) {\n\t\t\t\terrmsg = msgType + errnoMap[response.data.errno];\n\t\t\t}\n\t\t\tif (response.data.errno === 401100032) {\n\t\t\t\terrmsg = `图片${msgType}${errnoMap[response.data.errno]}`;\n\t\t\t} else if (errnoMap[response.data.errno]) {\n\t\t\t\terrmsg = errnoMap[response.data.errno];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcode: errnoMap[response.data.errno] ? 200 : 500,\n\t\t\t\tmessage: errmsg,\n\t\t\t\tdata: response.data,\n\t\t\t};\n\t\t}\n\t});\n\n\t// 0. 校验登录\n\tawait http.api({\n\t\tmethod: \"get\",\n\t\turl: \"https://baijiahao.baidu.com/pcui/home/index\",\n\t\tdefaultErrorMsg: `百家号登录状态失效,请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n\t});\n\n\t// 1. 获取用户 appId\n\tconst appIdInfo = await http.api<CommonResponse<{ user: { app_id: number } }>>({\n\t\tmethod: \"post\",\n\t\turl: \"https://baijiahao.baidu.com/builder/app/appinfo\",\n\t\tdefaultErrorMsg: \"创建草稿失败,请稍后重试。\",\n\t});\n\n\tconst appId = appIdInfo.data.user.app_id;\n\n\tconst uploadImages = async (_images: string[]) => {\n\t\t// 过滤掉空字符串\n\t\tconst images = _images.filter((url) => !!url && url.trim() !== \"\");\n\n\t\t// 下载图片到本地\n\t\treturn await Promise.all(\n\t\t\timages.map(async (url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\tconst image = await downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append(\"org_file_name\", fileName);\n\t\t\t\tformData.append(\"type\", \"image\");\n\t\t\t\tformData.append(\"app_id\", appId);\n\t\t\t\tformData.append(\"is_waterlog\", \"1\");\n\t\t\t\tformData.append(\"save_material\", \"1\");\n\t\t\t\tformData.append(\"no_compress\", \"0\");\n\t\t\t\tformData.append(\"article_type\", \"news\");\n\t\t\t\tformData.append(\"media\", fs.createReadStream(image));\n\n\t\t\t\tconst res = await http.api<{ ret: ImageRetResponse }>({\n\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\turl: \"https://baijiahao.baidu.com/materialui/picture/uploadProxy\",\n\t\t\t\t\tdata: formData,\n\t\t\t\t\tdefaultErrorMsg:\n\t\t\t\t\t\tparams.saveType === \"draft\" ? \"图片上传异常,请稍后重试同步。\" : \"图片上传异常,请稍后重试发布。\",\n\t\t\t\t});\n\n\t\t\t\treturn res.ret;\n\t\t\t}),\n\t\t);\n\t};\n\n\t// 2. 提取并上传正文中的图片\n\tconst originContentImages = extractImgTag(params.content);\n\tconst targetContentImages = await uploadImages(originContentImages);\n\t// 替换正文中的图片\n\tconst content = replaceImgSrc(params.content, (dom) => {\n\t\tif (dom.attribs.src) {\n\t\t\tconst idx = originContentImages.findIndex((it) => it === dom.attribs.src);\n\t\t\tdom.attribs.src = targetContentImages[idx].bos_url;\n\t\t\tdom.attribs[\"data-bjh-origin-src\"] = targetContentImages[idx].org_url;\n\t\t\tdom.attribs[\"data-bjh-params\"] = targetContentImages[idx].org_url;\n\t\t\tdom.attribs[\"data-bjh-type\"] = \"IMG\";\n\t\t}\n\n\t\treturn dom;\n\t});\n\n\t// 3. 上传竖版封面\n\tlet vertical_cover = params.settingInfo.baijiahaoVerticalCover;\n\tif (vertical_cover) {\n\t\tvertical_cover = (await uploadImages([vertical_cover]))[0].bos_url;\n\t}\n\n\t// 4. 上传横版封面\n\tconst horizontalCoverUrl = baijiahaoCoverType === \"single\" ? [baijiahaoSingleCover] : baijiahaoMultCover;\n\tconst horizontalCoverRes = await uploadImages(horizontalCoverUrl);\n\tconst cover_images = horizontalCoverRes.map((item) => ({\n\t\tsrc: item.bos_url,\n\t\tmachine_chooseimg: 0,\n\t\tisLegal: 0,\n\t}));\n\tconst _cover_images_map = horizontalCoverRes.map((item) => ({\n\t\tsrc: item?.bos_url,\n\t\torigin_src: item?.org_url,\n\t}));\n\n\t// 5. 构造发布数据\n\tconst isAi = params.settingInfo.baijiahaoIsAi.includes(\"isAi\");\n\tconst activityList = params.settingInfo.baijiahaoSelectActivityCache;\n\tconst cover_layout = baijiahaoCoverType === \"single\" ? \"one\" : \"three\";\n\n\tconst activity_list = [\n\t\t...(activityList.length > 0 ? [{ id: `task_${activityList[0]}`, is_checked: 1 }] : []),\n\t\t...(isAi ? [{ id: \"aigc_bjh_status\", is_checked: 1 }] : []),\n\t];\n\n\tconst publishData = {\n\t\ttitle: params.settingInfo.baijiahaoTitle,\n\t\tcontent,\n\t\tvertical_cover,\n\t\tabstract: params.settingInfo.baijiahaoAbstract,\n\t\tcover_layout,\n\t\tcover_images: JSON.stringify(cover_images),\n\t\t_cover_images_map: JSON.stringify(_cover_images_map),\n\t\ttype: \"news\",\n\t\tsource_reprinted_allow: 0,\n\t\tabstract_from: 1,\n\t\tisBeautify: \"false\",\n\t\tusingImgFilter: \"false\",\n\t\tsource: \"upload\",\n\t\tcover_source: \"upload\",\n\t\tactivity_list,\n\t};\n\n\tconst isDraft = params.saveType === \"draft\";\n\n\tconst saveUrl = isDraft\n\t\t? \"https://baijiahao.baidu.com/pcui/article/save?callback=bjhdraft\"\n\t\t: \"https://baijiahao.baidu.com/pcui/article/publish?callback=bjhpublish\";\n\n\tconst res = await http.api<{ ret: { article_id: string } }>({\n\t\tmethod: \"post\",\n\t\turl: saveUrl,\n\t\tdata: publishData,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/x-www-form-urlencoded\",\n\t\t\torigin: \"https://baijiahao.baidu.com\",\n\t\t\treferer: \"https://baijiahao.baidu.com/builder/rc/edit?type=news\",\n\t\t},\n\t\tdefaultErrorMsg: isDraft ? \"文章同步出现异常,请稍后重试。\" : \"文章发布出现异常,请稍后重试。\",\n\t});\n\n\treturn success(res.ret.article_id, \"百家号发布完成。\");\n};\n","import path from \"node:path\";\nimport type { CookieMap, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport { copyHtmlToClipboard } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \"baijiahao.baidu.com\",\n\t\turl: \"https://baijiahao.baidu.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl: params.url || \"https://baijiahao.baidu.com/builder/rc/edit?type=news&is_from_cms=1\",\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\t// 0. 校验登录\n\ttry {\n\t\tawait page.waitForSelector(\".bjh-edit-header\", { state: \"visible\" });\n\t} catch (error) {\n\t\treturn { code: 400, message: \"登录失效\", data: page.url() };\n\t}\n\n\t// 1. 等待编辑器加载出来\n\tawait page.waitForSelector(\".edui-editor-toolbarbox\", { state: \"visible\" });\n\n\t// 2. 关闭纯文本粘贴\n\t// 有个默认开启纯文本粘贴的提示,先关闭\n\tif (await page.locator(\"#_onceTip-news_pasteplain_tip\").isVisible()) {\n\t\tawait page.locator(\"#_onceTip-news_pasteplain_tip .confirm\").click();\n\t}\n\t// 判断是否开启纯文本粘贴,如果开启,点击关闭\n\tif (await page.locator(\".edui-editor-toolbarbox .edui-button.edui-for-pasteplain .edui-state-checked\").isVisible()) {\n\t\tawait page.locator(\".edui-editor-toolbarbox .edui-button.edui-for-pasteplain .edui-state-checked\").click();\n\t}\n\n\t// 3. 填写标题\n\tconst titleInstance = page.locator(\"#ueditor #bjhNewsTitle .input-box textarea\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 4. 填写正文\n\tawait copyHtmlToClipboard(page, params.content);\n\t// 定位目标元素并聚焦\n\tawait page.click(\"#ueditor .edui-editor-iframeholder iframe\");\n\t// 模拟Ctrl+A全选\n\tawait page.keyboard.press(\"Control+A\");\n\t// 模拟Ctrl+V粘贴\n\tawait page.keyboard.press(\"Control+V\");\n\n\t// 等待 1 秒钟(让正文中的图片上传上去)\n\tawait page.waitForTimeout(1000);\n\n\t// 5. 设置封面\n\tconst coverFormItem = page.locator(\".bjh-edit-wrap-set .cheetah-form-item\").nth(0);\n\tconst isSingleCover = params.settingInfo.baijiahaoCoverType === \"single\";\n\tif (isSingleCover) {\n\t\t// 单图\n\t\tawait coverFormItem\n\t\t\t.locator(\".cheetah-form-item-control label.cheetah-radio-wrapper\")\n\t\t\t.filter({ hasText: \"单图\" })\n\t\t\t.click();\n\t} else {\n\t\t// 多图\n\t\tawait coverFormItem\n\t\t\t.locator(\".cheetah-form-item-control label.cheetah-radio-wrapper\")\n\t\t\t.filter({ hasText: \"三图\" })\n\t\t\t.click();\n\t}\n\t// 获取待上传图片的本地路径\n\tconst images = await Promise.all(\n\t\t(isSingleCover ? [params.settingInfo.baijiahaoSingleCover] : params.settingInfo.baijiahaoMultCover).map((url) => {\n\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t}),\n\t);\n\tconst coverSelector = page.locator(\n\t\t\".cheetah-form-item-control .edit-cover-container .cover-list .DraggableTags-tag-drag .coverUploaderView\",\n\t);\n\tconst coverCount = await coverSelector.count();\n\n\tfor (let i = 0; i < coverCount; i++) {\n\t\tconst item = coverSelector.nth(i);\n\t\tconst image = images[i];\n\n\t\t// 滚动到可视区域\n\t\tawait item.evaluate((node) => node.scrollIntoView());\n\n\t\t// 如果已经存在图片,选择更换\n\t\tif (await item.locator(\".actions-wrap\").isVisible()) {\n\t\t\tawait item.locator(\".actions-wrap .action\").filter({ hasText: \"更换\" }).click();\n\t\t} else {\n\t\t\tawait item.click();\n\t\t}\n\n\t\t// 等待弹窗出现\n\t\tawait page.waitForSelector(\".cheetah-modal-root .cheetah-ui-pro-image-modal\", { state: \"visible\" });\n\t\t// 选择本地图片 tab\n\t\tawait page\n\t\t\t.locator(\".cheetah-modal-root .cheetah-ui-pro-image-modal .cheetah-tabs-nav-list .cheetah-tabs-tab\")\n\t\t\t.filter({ hasText: \"本地图片\" })\n\t\t\t.click();\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait page\n\t\t\t.locator(\".cheetah-modal-root .cheetah-ui-pro-image-modal .cheetah-tabs-tabpane-active .cheetah-upload-wrapper\")\n\t\t\t.click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles([image]);\n\t\t// 等待上传完成(可以用去编辑是否可点击来判断)\n\t\t// 等待 button 元素上面的 disabled 属性消失\n\t\tawait page.waitForSelector(\n\t\t\t\".cheetah-modal-root .cheetah-ui-pro-image-modal .cheetah-modal-footer button#imageModalEditBtn[disabled]\",\n\t\t\t{ state: \"detached\" },\n\t\t);\n\t\t// 点击确认关闭弹窗\n\t\tawait page\n\t\t\t.locator(\".cheetah-modal-root .cheetah-ui-pro-image-modal .cheetah-modal-footer button\")\n\t\t\t.filter({ hasText: \"确认\" })\n\t\t\t.click();\n\t\t// 等待 2 秒\n\t\tawait page.waitForTimeout(1000);\n\t}\n\n\t// 6. 摘要\n\tconst abstractFormItem = page\n\t\t.locator(\".bjh-edit-wrap-set .cheetah-form-item\")\n\t\t.nth(1)\n\t\t.locator(\"textarea.cheetah-input\");\n\tawait abstractFormItem.click();\n\tawait abstractFormItem.fill(params.settingInfo.baijiahaoAbstract);\n\n\t// 7. 设置\n\tconst isAi = params.settingInfo.baijiahaoIsAi.includes(\"isAi\");\n\tif (isAi) {\n\t\tconst settingFormItem = page.locator(\".bjh-edit-wrap-set .cheetah-form-item\").nth(5);\n\t\tawait settingFormItem.locator(\"label.cheetah-checkbox-wrapper\").filter({ hasText: \"AI创作声明\" }).click();\n\t}\n\n\t// 8. 活动投稿\n\tif (params.settingInfo.baijiahaoActivity.length > 0 && params.settingInfo.baijiahaoSelectActivityCache.length > 0) {\n\t\tconst activity = params.settingInfo.baijiahaoActivity.filter((it) =>\n\t\t\tparams.settingInfo.baijiahaoSelectActivityCache.includes(it.id),\n\t\t);\n\t\tif (activity.length > 0) {\n\t\t\tconst activityFormItem = page.locator(\".bjh-edit-wrap-set .cheetah-form-item\").nth(3);\n\t\t\tconst name = activity[0].task_name;\n\t\t\tconst findActivity = activityFormItem.locator(\".cheetah-form-item-control\").getByText(name, { exact: true });\n\t\t\tif ((await findActivity.count()) > 0) {\n\t\t\t\tfindActivity.first().locator(\"..\").click();\n\t\t\t}\n\t\t}\n\t}\n\n\t// 9. 保存草稿 / 发布\n\tconst articleId = await new Promise<string>((resolve) => {\n\t\t// 定义响应处理函数\n\t\tconst handleResponse = async (response: Response) => {\n\t\t\tconst url = response.url();\n\t\t\tif (url.includes(\"/pcui/article/save\") || url.includes(\"/pcui/article/publish\")) {\n\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\tresolve(jsonResponse?.ret?.article_id);\n\t\t\t}\n\t\t};\n\n\t\t// 开始监听响应事件\n\t\tpage.on(\"response\", handleResponse);\n\n\t\tconst operatorContainer = page.locator(\".editor-component-operator\");\n\t\tif (params.saveType === \"draft\") {\n\t\t\toperatorContainer.locator(\".op-btn-outter-content\").filter({ hasText: \"存草稿\" }).locator(\"button\").click();\n\t\t} else {\n\t\t\toperatorContainer.locator(\".op-btn-outter-content\").filter({ hasText: \"发布\" }).locator(\"button\").click();\n\t\t}\n\t});\n\n\t// 关闭页面\n\tawait page.close();\n\n\treturn success(articleId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ninterface ActivityData {\n\tid: string;\n\ttask_name: string;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t[key: string]: any;\n}\n\nexport interface BaijiahaoPublishParams extends ActiomCommonParams {\n\tsaveType: \"draft\" | \"publish\"; // 保存成草稿 / 发布\n\ttoken: string;\n\ttitle: string;\n\tcontent: string;\n\tsettingInfo: {\n\t\tbaijiahaoTitle: string; // 标题\n\t\tbaijiahaoCoverType: \"single\" | \"multiple\"; // 封面设置:单图 | 三图\n\t\tbaijiahaoAbstract: string; // 摘要\n\t\tbaijiahaoIsAi: string[]; // 设置\n\t\tbaijiahaoSingleCover: string; // 单图封面\n\t\tbaijiahaoMultCover: string[]; // 三图封面\n\t\tbaijiahaoVerticalCover: string; // 竖版封面\n\t\tbaijiahaoActivity: ActivityData[]; // 活动投稿\n\t\tbaijiahaoSelectActivityCache: string[]; // 选中的活动标签\n\t};\n}\n\nexport type PublishAction = CommonAction<BaijiahaoPublishParams, string>;\n\nexport const baijiahaoPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetBaijiahaoActivityParams extends ActiomCommonParams {\n\ttoken: string;\n}\n\nexport interface ActivityData {\n\tid: string;\n\ttask_name: string;\n}\n\nexport type PublishAction = CommonAction<GetBaijiahaoActivityParams, ActivityData[]>;\n\nexport const getBaijiahaoActivity: PublishAction = async (_task, params) => {\n\tconst cookies = params.cookies ?? [];\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\ttoken: params.token,\n\t\t},\n\t});\n\n\tconst res = await http.api<{ data: { list: ActivityData[] } }>({\n\t\tmethod: \"get\",\n\t\turl: \"https://baijiahao.baidu.com/author/eco/tasksystem/getSquareMissionList\",\n\t\tparams: {\n\t\t\tpage_no: 1,\n\t\t\tpage_size: 18,\n\t\t\tarticle_type: 1,\n\t\t\ttask_attend: 1,\n\t\t\ttask_origin: \"market\",\n\t\t\ttask_type: -1,\n\t\t},\n\t});\n\n\treturn success(res?.data?.list ?? []);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetToutiaoConfigParams extends ActiomCommonParams {}\n\nexport interface GetToutiaoConfigResult {\n\tsuggestWords: Toutiao.Topic[];\n\tcityDistrict: Toutiao.CityDistrict | null;\n\tuserRights: Toutiao.UserRight[];\n}\n\nexport type PublishAction = CommonAction<GetToutiaoConfigParams, GetToutiaoConfigResult>;\n\nexport const getToutiaoConfig: PublishAction = async (_task, params) => {\n\tconst cookies = params.cookies ?? [];\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\treferer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\t},\n\t});\n\n\tconst getSuggestWords = async () => {\n\t\ttry {\n\t\t\tconst res = await http.api<{ code: number; hots: Toutiao.Topic[] }>({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: \"https://mp.toutiao.com/mp/agw/creator_helper/suggest_words\",\n\t\t\t\tparams: { type: 2, words: \"\" },\n\t\t\t});\n\n\t\t\treturn res.code === 0 ? res.hots : [];\n\t\t} catch (error) {\n\t\t\treturn [];\n\t\t}\n\t};\n\n\tconst getCityDistrict = async () => {\n\t\ttry {\n\t\t\tconst res = await http.api<{ status: number; data: Toutiao.CityDistrict }>({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: \"https://mp.toutiao.com/toutiao/normandy/mp/city_district/\",\n\t\t\t});\n\t\t\treturn res.status === 0 ? res.data : null;\n\t\t} catch (error) {\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tconst getUserRights = async () => {\n\t\ttry {\n\t\t\tconst res = await http.api<{ code: number; data: { benefit_level_info_list: Toutiao.UserRight[] } }>({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: \"https://mp.toutiao.com/mp/agw/creator_project/get_benefit_page_info\",\n\t\t\t});\n\t\t\treturn res.code === 0 ? res.data.benefit_level_info_list : [];\n\t\t} catch (error) {\n\t\t\treturn [];\n\t\t}\n\t};\n\n\tconst [suggestWords, cityDistrict, userRights] = await Promise.all([\n\t\tgetSuggestWords(),\n\t\tgetCityDistrict(),\n\t\tgetUserRights(),\n\t]);\n\n\treturn success({ suggestWords, cityDistrict, userRights });\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchToutiaoTopicListParams extends ActiomCommonParams {\n\tsearchValue: string;\n}\n\nexport type PublishAction = CommonAction<SearchToutiaoTopicListParams, Toutiao.Topic[]>;\n\nexport const searchToutiaoTopicList: PublishAction = async (_task, params) => {\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\treferer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\t},\n\t});\n\n\ttry {\n\t\tconst res = await http.api<{ code: number; recents: Toutiao.Topic[]; hots: Toutiao.Topic[] }>({\n\t\t\tmethod: \"get\",\n\t\t\turl: \"https://mp.toutiao.com/mp/agw/creator_helper/suggest_words\",\n\t\t\tparams: { type: 2, words: params.searchValue },\n\t\t});\n\n\t\tif (res.code === 0) {\n\t\t\treturn success(params.searchValue ? res.recents : res.hots);\n\t\t}\n\n\t\treturn success([]);\n\t} catch (error) {\n\t\treturn success([]);\n\t}\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Xiaohongshu } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchXiaohongshuLocationParams extends ActiomCommonParams {\n\tsearchValue: string;\n\tlatitude?: number;\n\tlongitude?: number;\n\tsize?: number;\n\tpage?: number;\n}\n\nexport type PublishAction = CommonAction<searchXiaohongshuLocationParams, Xiaohongshu.Location[]>;\n\nexport const searchXiaohongshuLocation: PublishAction = async (_task, params) => {\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\treferer: \"https://creator.xiaohongshu.com\",\n\t\t\torigin: \"https://creator.xiaohongshu.com\",\n\t\t},\n\t});\n\n\ttry {\n\t\tconst result = await http.api<{ code: number; data: { poi_list: Xiaohongshu.Location[] } }>({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://edith.xiaohongshu.com/web_api/sns/v1/local/poi/creator/search\",\n\t\t\tdata: {\n\t\t\t\tkeyword: params.searchValue,\n\t\t\t\tlatitude: params.latitude ?? 0,\n\t\t\t\tlongitude: params.longitude ?? 0,\n\t\t\t\tpage: params.page ?? 1,\n\t\t\t\tsize: params.size ?? 10,\n\t\t\t\tsource: \"WEB\",\n\t\t\t\ttype: 3,\n\t\t\t},\n\t\t});\n\n\t\treturn success(result.code === 0 ? result.data.poi_list : []);\n\t} catch (error) {\n\t\treturn success([]);\n\t}\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\n\nimport type { Toutiao } from \"../../types\";\nimport { extractImgTag, replaceImgSrc } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { COVER_TYPE, type PublishAction, getAddTypeValue } from \"./index\";\n\ninterface CommonResponse<T = unknown> {\n\tdata: T;\n\tcode: number;\n\tmessage: string;\n}\n\nconst errnoMap: Record<number, string | string[]> = {\n\t20004020: \"图片上传异常,请重新绑定账号后同步。\",\n\t7115: \"正文图片和封面图片推荐jpg、png格式。\",\n\t100006: \"文章同步异常,请重新绑定账号后重试。\",\n\t3101: [\n\t\t\"今日头条号发布次数已达上限,请明天再试。\",\n\t\t\"头条账号状态异常,需前往头条号完成实名认证。\",\n\t\t\"头条账号状态异常,资料审核未通过,请前往头条号查看。\",\n\t],\n\t2007: \"文章发布失败,声明原创要求正文字数不少于 300 字,请修改后重试。\",\n\t2010: \"无头条广告权限,请修改后重试。\",\n\t3103: \"今日头条号发布次数已达上限,请明天再试。\",\n\t1053: \"正文图片和封面图片推荐jpg、png格式。\",\n\t2005: \"账号无【申明原创】权限,请关闭申明后重试。\",\n\t100004: \"用户未登录或登陆已过期,请重新登陆后重试。\"\n};\n\nconst get3101DetailError = (errorList: string[], message: string, saveType: string) => {\n\tlet error = \"\";\n\tif (message?.includes(\"当日发文\")) {\n\t\terror = errorList[0];\n\t} else if (message?.includes(\"实名认证\")) {\n\t\terror = errorList[1];\n\t} else if (message?.includes(\"资料审核\")) {\n\t\terror = errorList[2];\n\t}\n\treturn error || (saveType === \"draft\" ? \"文章同步异常,请稍后重试。\" : \"文章发布异常,请稍后重试。\");\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst { toutiaoSingleCover, toutiaoMultCover, toutiaoCoverType, toutiaoOriginal } = params.settingInfo;\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://mp.toutiao.com\",\n\t\t\treferer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\t},\n\t});\n\n\t// 添加响应拦截器\n\thttp.addResponseInterceptor<CommonResponse>((response) => {\n\t\t// 检查响应中的 errno 字段\n\t\tif (response.data?.code !== 0) {\n\t\t\tlet errmsg = \"\";\n\n\t\t\tif (Array.isArray(errnoMap[response.data.code])) {\n\t\t\t\terrmsg = get3101DetailError(errnoMap[response.data.code] as string[], response.data.message, params.saveType);\n\t\t\t} else {\n\t\t\t\terrmsg =\n\t\t\t\t\t(errnoMap[response.data.code] as string) ||\n\t\t\t\t\tresponse.config.defaultErrorMsg ||\n\t\t\t\t\t(params.saveType === \"draft\" ? \"文章同步异常,请稍后重试。\" : \"文章发布异常,请稍后重试。\");\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcode: errnoMap[response.data.code] ? 200 : 500,\n\t\t\t\tmessage: errmsg,\n\t\t\t\tdata: response.data,\n\t\t\t};\n\t\t}\n\t});\n\n\t// 0. 校验登录\n\tawait http.api({\n\t\tmethod: \"get\",\n\t\turl: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n\t\tdefaultErrorMsg: `头条号登录状态失效,请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n\t});\n\n\tconst uploadImages = async (images: string[]) => {\n\t\t// 下载图片到本地\n\t\treturn await Promise.all(\n\t\t\timages.map(async (url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\tconst image = await downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append(\"image\", fs.createReadStream(image));\n\n\t\t\t\tconst response = await http.api<CommonResponse<Toutiao.ImageData>>({\n\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\turl: \"https://mp.toutiao.com/spice/image?upload_source=20020002&aid=1231&device_platform=web\",\n\t\t\t\t\tdata: formData,\n\t\t\t\t\tdefaultErrorMsg:\n\t\t\t\t\t\tparams.saveType === \"draft\" ? \"图片上传异常,请稍后重试同步。\" : \"图片上传异常,请稍后重试发布。\",\n\t\t\t\t});\n\n\t\t\t\treturn response.data;\n\t\t\t}),\n\t\t);\n\t};\n\n\t// 1. 提取并上传正文中的图片\n\tconst originContentImages = extractImgTag(params.content);\n\tconst targetContentImages = await uploadImages(originContentImages);\n\t// 2. 替换正文中的图片\n\tconst content = replaceImgSrc(params.content, (dom) => {\n\t\tif (dom.attribs.src) {\n\t\t\tconst idx = originContentImages.findIndex((it) => it === dom.attribs.src);\n\t\t\tdom.attribs.src = targetContentImages[idx].image_url;\n\t\t\tdom.attribs.web_uri = targetContentImages[idx].image_uri;\n\t\t\tdom.attribs.img_width = targetContentImages[idx].image_width.toString();\n\t\t\tdom.attribs.image_height = targetContentImages[idx].image_height.toString();\n\t\t\tdom.attribs.image_type = targetContentImages[idx].image_type.toString();\n\t\t\tdom.attribs.mime_type = targetContentImages[idx].image_mime_type;\n\t\t}\n\t\treturn dom;\n\t});\n\n\t// 3. 上传横版封面\n\tconst coverUrl =\n\t\ttoutiaoCoverType === \"single\" ? [toutiaoSingleCover] : toutiaoCoverType === \"multiple\" ? toutiaoMultCover : [];\n\tconst coverRes = await uploadImages(coverUrl);\n\n\t// 4. 构造发布数据\n\tconst isSingleTitle = params.settingInfo.toutiaoTitleType === \"single\";\n\tconst location = params.settingInfo.toutiaoLocation;\n\tconst topics = params.settingInfo.toutiaoTopic || [];\n\n\tconst multiTitleData = params.settingInfo.subTitles.map((title) => ({\n\t\tid: \"0\",\n\t\tvisibility_level: 0,\n\t\tsource: \"author\",\n\t\told_source: \"author\",\n\t\ttext: title,\n\t\tversion: \"author\",\n\t\tai_title: \"\",\n\t}));\n\n\tconst topicContent = topics\n\t\t.map(\n\t\t\t(topic) =>\n\t\t\t\t`<p><a class=\"tteditor-forum\" data-name=\"${topic.word}\" data-id=\"${topic.id}\" data-concern-id=\"${topic.id}\">#${topic.word}#</a ></p >`,\n\t\t)\n\t\t.join(\"\");\n\n\tconst extraData = {\n\t\tcontent_word_cnt: params.settingInfo.cntWord,\n\t\tis_multi_title: isSingleTitle ? 0 : 1,\n\t\tsub_titles: isSingleTitle ? [] : multiTitleData,\n\t\tgd_ext: {\n\t\t\tentrance: \"\",\n\t\t\tfrom_page: \"publisher_mp\",\n\t\t\tenter_from: \"PC\",\n\t\t\tdevice_platform: \"mp\",\n\t\t\tis_message: 0,\n\t\t},\n\t\ttuwen_wtt_trans_flag: \"0\",\n\t\tinfo_source: {\n\t\t\tsource_type: 5,\n\t\t\tsource_link: \"\",\n\t\t\ttime_format: \"\",\n\t\t\tposition: {},\n\t\t},\n\t\t...(location ? { city: location.label, city_code: location.value } : null),\n\t};\n\n\tconst publishData = {\n\t\tarticle_type: 0,\n\t\tsource: 0,\n\t\tsearch_creation_info: '{\"searchTopOne\": 0, \"abstract\": \"\", \"clue_id\": \"\"}',\n\t\ttitle_id: \"\",\n\t\teducluecard: \"\",\n\t\torigin_debut_check_pgc_normal: 1,\n\t\tis_fans_article: 0,\n\t\tgovern_forward: 0,\n\t\tpraise: 0,\n\t\tdisable_praise: 0,\n\t\ttree_plan_article: 0,\n\t\tstar_order_id: \"\",\n\t\tstar_order_name: \"\",\n\t\tcustomer_nick_name: \"\",\n\t\tactivity_tag: 0,\n\t\ttrends_writing_tag: 0,\n\t\tis_refute_rumor: 0,\n\t\tsave: params.saveType === \"publish\" ? 1 : 0,\n\t\ttimer_status: 0,\n\t\ttimer_time: \"\",\n\t\ttitle: params.title,\n\t\tcontent: content + topicContent,\n\t\textra: JSON.stringify(extraData),\n\t\tmp_editor_stat: toutiaoCoverType === \"no\" ? \"{}\" : '{\"image\": %d}',\n\t\tdraft_form_data: JSON.stringify({\n\t\t\tcoverType: COVER_TYPE[toutiaoCoverType],\n\t\t}),\n\t\tpgc_feed_covers: JSON.stringify(\n\t\t\tcoverRes.map((item) => ({\n\t\t\t\tid: \"\",\n\t\t\t\turl: item.image_url,\n\t\t\t\turi: item.image_uri,\n\t\t\t\tic_uri: \"\",\n\t\t\t\tthumb_widt: item.image_width,\n\t\t\t\tthumb_heigh: item.image_height,\n\t\t\t\textra: {\n\t\t\t\t\tfrom_content_uri: \"\",\n\t\t\t\t\tfrom_content: \"0\",\n\t\t\t\t},\n\t\t\t})),\n\t\t),\n\t\tarticle_ad_type: getAddTypeValue(params.settingInfo.toutiaoAd),\n\t\tclaim_origin: toutiaoOriginal.includes(\"original\") ? 1 : 0,\n\t\tclaim_exclusive: toutiaoOriginal.includes(\"exclusive\") ? 1 : 0,\n\t};\n\n\tconst publishResult = await http.api<CommonResponse<{ pgc_id: string }>>({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.toutiao.com/mp/agw/article/publish?source=mp&type=article&aid=1\",\n\t\tdata: publishData,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/x-www-form-urlencoded\",\n\t\t},\n\t\tdefaultErrorMsg: params.saveType === \"draft\" ? \"文章同步异常,请稍后重试。\" : \"文章发布异常,请稍后重试。\",\n\t});\n\n\treturn success(publishResult.data.pgc_id);\n};\n","import path from \"node:path\";\nimport type { CookieMap, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport { copyHtmlToClipboard, getRandomInRange } from \"../../utils\";\nimport { COVER_TYPE, type PublishAction, getAddTypeValue } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \".toutiao.com\",\n\t\turl: \"https://mp.toutiao.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl: params.url || \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\t// 0. 校验登录\n\ttry {\n\t\tawait page.waitForSelector(\".publish-editor\", { state: \"visible\" });\n\t} catch (error) {\n\t\treturn {\n\t\t\tcode: 400,\n\t\t\tmessage: `头条号登录状态失效,请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n\t\t\tdata: page.url(),\n\t\t};\n\t}\n\n\tconst interceptUrls = [\n\t\t'/mp/agw/article/publish'\n\t];\n\t \n\tawait page.route('**', async (route, request) => {\n\t\tconst url = new URL(request.url()); \n\t\tif (interceptUrls.some(pattern => url.pathname.includes(pattern))) {\n\t\t\turl.searchParams.set('aid', '1'); \n\t\n\t\t\tawait route.continue({ url: url.toString() });\n\t\t} else {\n\t\t\tawait route.continue();\n\t\t}\n\t});\n\n\t// 1. 填写标题\n\tconst titleInstance = page.locator(\".publish-editor-title-wrapper .publish-editor-title textarea\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 2. 填写正文\n\tawait copyHtmlToClipboard(page, params.content);\n\t// 定位目标元素并聚焦\n\tawait page.click(\".publish-editor .syl-editor-wrap .ProseMirror\");\n\t// 模拟Ctrl+V粘贴\n\tawait page.keyboard.press(\"Control+V\");\n\n\t// 3. 封面\n\tconst coverTypeValue = COVER_TYPE[params.settingInfo.toutiaoCoverType];\n\tconst coverContainer = page.locator(\".form-container .edit-cell\").filter({ hasText: \"展示封面\" });\n\t// 滚动到可视区域\n\tawait coverContainer.evaluate((node) => node.scrollIntoView());\n\tawait coverContainer.locator(`.article-cover label.byte-radio:has(input[value=\"${coverTypeValue}\"])`).click();\n\n\tlet coverUrls: string[] = [];\n\tif (params.settingInfo.toutiaoCoverType === \"single\") {\n\t\tcoverUrls = [params.settingInfo.toutiaoSingleCover];\n\t} else if (params.settingInfo.toutiaoCoverType === \"multiple\") {\n\t\tcoverUrls = params.settingInfo.toutiaoMultCover;\n\t}\n\t// 获取待上传图片的本地路径\n\tconst images = await Promise.all(\n\t\tcoverUrls.map((url) => {\n\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t}),\n\t);\n\n\tconst coverUploadEle = coverContainer\n\t\t.locator(\".article-cover .article-cover-images\")\n\t\t.locator(\".article-cover-img-wrap, .article-cover-add\");\n\tconst coverUploadCount = await coverUploadEle.count();\n\n\tfor (let i = 0; i < coverUploadCount; i++) {\n\t\tif (!images[i]) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst ele = coverUploadEle.nth(i);\n\t\t// 如果存在图片则替换\n\t\tif ((await ele.locator(\"img\").count()) > 0) {\n\t\t\tawait ele.locator(\".article-cover-img-menu a\").filter({ hasText: \"替换\" }).click();\n\t\t} else {\n\t\t\t// 如果不存在图片则点击上传\n\t\t\tawait ele.click();\n\t\t}\n\n\t\t// 上传图片\n\t\tconst drawerContainer = page.locator(\".byte-drawer-wrapper:not(.byte-drawer-wrapper-hide)\");\n\t\tawait drawerContainer.locator(\".byte-tabs-header .byte-tabs-header-title\").filter({ hasText: \"上传图片\" }).click();\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait page.waitForTimeout(200);\n\t\tawait drawerContainer.locator(\".upload-image-panel button.byte-btn\").filter({ hasText: \"本地上传\" }).click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles([images[i]]);\n\n\t\t// 等待上传完成\n\t\tconst confirmBtn = drawerContainer\n\t\t\t.locator(\".footer .confirm-btns button:not(.byte-btn-disabled)\")\n\t\t\t.filter({ hasText: \"确定\" });\n\t\tawait confirmBtn.waitFor({ state: \"visible\" });\n\t\tawait confirmBtn.click();\n\n\t\tawait page.waitForTimeout(getRandomInRange(500, 1000));\n\t}\n\n\t// 4. 添加位置\n\tif (params.settingInfo.toutiaoLocation) {\n\t\tconst locationContainer = page.locator(\".form-container .edit-cell\").filter({ hasText: \"添加位置\" });\n\t\tawait locationContainer.locator(\".position-select\").click();\n\t\tawait locationContainer\n\t\t\t.locator(\".position-select .byte-select-view-search input\")\n\t\t\t.fill(params.settingInfo.toutiaoLocation.label);\n\t\tconst poperInstance = page.locator(\".byte-trigger .byte-select-popup .byte-select-option\");\n\t\tawait poperInstance.first().waitFor();\n\t\tawait poperInstance.first().click();\n\t}\n\n\t// 5. 投放广告\n\tconst adContainer = page\n\t\t.locator(\".form-container .edit-cell .edit-label\")\n\t\t.filter({ hasText: \"投放广告\" })\n\t\t.locator(\"xpath=..\");\n\n\t// 判断是否存在投放广告的选项\n\tconst isAdOptionVisible = await adContainer.isVisible();\n\n\tif (isAdOptionVisible) {\n\t\t// 获取元素的父元素句柄并点击\n\t\tawait adContainer\n\t\t\t.locator(`label.byte-radio:has(input[value=\"${getAddTypeValue(params.settingInfo.toutiaoAd)}\"])`)\n\t\t\t.click();\n\t}\n\n\t// 6. 声明首发\n\tif (params.settingInfo.toutiaoOriginal.includes(\"exclusive\")) {\n\t\tconst exclusiveContainer = page\n\t\t\t.locator(\".form-container .edit-cell .edit-label\")\n\t\t\t.filter({ hasText: \"声明首发\" })\n\t\t\t.locator(\"xpath=..\");\n\t\texclusiveContainer.locator(\".exclusive .exclusive-checkbox-wraper .byte-checkbox\").click();\n\t}\n\n\t// 7. 保存草稿 / 发布\n\tconst articleId = await new Promise<string>((resolve) => {\n\t\t// 定义响应处理函数\n\t\tconst handleResponse = async (response: Response) => {\n\t\t\tconst url = response.url();\n\t\t\tif (url.includes(\"/mp/agw/article/publish\")) {\n\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\tresolve(jsonResponse.data.pgc_id);\n\n\t\t\t}\n\t\t};\n\n\t\t// 开始监听响应事件\n\t\tpage.on(\"response\", handleResponse);\n\t\t// 保存草稿\n\t\tpage.locator(\".publish-footer button\").filter({ hasText: \"预览并发布\" }).click();\n\t});\n\n\tif(params.settingInfo.toutiaoAd == 'no'){\n\t\tawait page.waitForTimeout(200);\n\t\tconst confirmBtn = page.locator('div.byte-modal-footer button.byte-btn-primary:has-text(\"确定\")');\n\t\tif (await confirmBtn.isVisible()) {\n\t\t await confirmBtn.click();\n\t\t}\n\t}\n\t\n\tif (params.saveType === \"publish\") {\n\t\tawait page.locator(\".publish-footer button\").filter({ hasText: \"确认发布\" }).waitFor({ state: \"visible\" });\n\t\tawait page.waitForTimeout(200);\n\t\tawait page.locator(\".publish-footer button\").filter({ hasText: \"确认发布\" }).click();\n\t}\n\n\t// 关闭页面\n\tawait page.close();\n\n\treturn success(articleId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ntype CoverType = \"single\" | \"multiple\" | \"no\";\n\nexport interface ToutiaoPublishParams extends ActiomCommonParams {\n\tsaveType: \"draft\" | \"publish\"; // 保存成草稿 / 发布\n\ttitle: string;\n\tcontent: string;\n\tsettingInfo: {\n\t\ttoutiaoCoverType: CoverType;\n\t\ttoutiaoTitleType: \"single\" | \"multiple\";\n\t\ttoutiaoSingleCover: string;\n\t\ttoutiaoMultCover: string[];\n\t\ttoutiaoAd: string; // 广告配置 - 投放广告/不投放广告\n\t\ttoutiaoOriginal: string; // 作品声明\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\ttoutiaoLocation?: { label: string; value: string; [key: string]: any }; // 位置\n\t\ttoutiaoTopic: { id: string; word: string }[]; // 话题\n\t\tcntWord: number;\n\t\tsubTitles: string[]; // 多标题\n\t};\n}\n\nexport const COVER_TYPE: Record<CoverType, number> = {\n\tno: 1,\n\tsingle: 2,\n\tmultiple: 3,\n};\n\nexport const getAddTypeValue = (toutiaoAd: ToutiaoPublishParams[\"settingInfo\"][\"toutiaoAd\"]) =>\n\ttoutiaoAd === \"yes\" ? 3 : 2;\n\nexport type PublishAction = CommonAction<ToutiaoPublishParams, string>;\n\nexport const toutiaoPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport { Http } from \"../../utils/http\"\n\nimport type { PublishAction } from \".\";\nimport type { Toutiao } from \"../../types\";\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://mp.toutiao.com\",\n\t\t\treferer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\t},\n\t});\n\n\t// 0. 校验登录\n\tconst userInfoRes = await http.api<{ code: number }>({\n method: \"get\",\n url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n });\n\n\tif (userInfoRes.code !== 0) {\n return { code: 0, message: \"登录失效\", data: userInfoRes };\n\t}\n\n\t// 1. 上传图片\n\tconst imageList: string[] = [];\n\tif (params.banners && params.banners.length > 0) {\n\t\tconst images = await Promise.all(\n\t\t\tparams.banners.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\tconst res = await Promise.all(\n\t\t\timages.map(async (it) => {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append(\"image\", fs.createReadStream(it));\n\n\t\t\t\tconst response = await http.api<{ data: Toutiao.ImageData }>({\n\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\turl: \"https://mp.toutiao.com/spice/image?upload_source=20020003&aid=1231&device_platform=web\",\n\t\t\t\t\tdata: formData,\n\t\t\t\t});\n\n\t\t\t\treturn response.data;\n\t\t\t}),\n\t\t);\n\n\t\timageList.push(...res.map((it) => it.image_uri));\n\t}\n\n\t// 2. 构造发布数据\n\tconst extra = {\n\t\tadd_music_to_article_flag: \"0\", // 开启配乐\n\t\tclaim_exclusive: \"0\", // 原创&首发声明\n\t\ttuwen_wtt_trans_flag: \"0\",\n\t\tinfo_source: JSON.stringify({\n\t\t\tsource_type: 5,\n\t\t\tsource_author_uid: \"\",\n\t\t\ttime_format: \"\",\n\t\t\tposition: {},\n\t\t}),\n\t\tugc_position: JSON.stringify({\n\t\t\taddress: \"\",\n\t\t\tposition: \"合肥市\",\n\t\t\tcity: \"合肥市\",\n\t\t\tlongitude: 117.227289,\n\t\t\tlatitude: 31.82057,\n\t\t\tpoi_type_code: \"190104\",\n\t\t\tpoi_id: \"22535659123306003\",\n\t\t}),\n\t};\n\n\tconst syncData = {\n\t\tcontent: params.content, // 正文,\n\t\timage_list: imageList, // 图片列表\n\t\tis_fans_article: 2,\n\t\tpre_upload: 1,\n\t\twelfare_card: \"\",\n\t\textra: JSON.stringify(extra),\n\t};\n\n const res = await http.api<any>({\n method: \"post\",\n url: \"https://mp.toutiao.com/mp/agw/article/wtt\",\n data: syncData,\n });\n\n return success(res.data)\n};\n","import path from \"node:path\";\nimport type { CookieMap } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \"mp.toutiao.com\",\n\t\turl: \"https://mp.toutiao.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl: params.url || \"https://mp.toutiao.com/profile_v4/weitoutiao/publish\",\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\tconst tmpCachePath = task.getTmpPath();\n\n\t// 0. 判断是否登录\n\ttry {\n\t\tawait page.waitForSelector(\".publish-box\");\n\t} catch (error) {\n\t\treturn { code: 0, message: \"登录失效\", data: page.url() };\n\t}\n\n\t// 1. 添加正文\n\tconst descInstance = page.locator(\".syl-editor .ProseMirror\");\n\tawait descInstance.click();\n\tawait descInstance.fill(params.content);\n\n\t// 2. 添加图片\n\tif (params.banners && params.banners?.length > 0) {\n\t\tconst images = await Promise.all(\n\t\t\tparams.banners.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait page.locator(\".toolbar .syl-toolbar-tool.weitoutiao-image-plugin\").click();\n\t\tawait page.locator(\".byte-drawer.mp-ic-img-drawer button.byte-btn\").filter({ hasText: \"本地上传\" }).click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles(images);\n\n\t\tawait page.locator(\".byte-drawer.mp-ic-img-drawer .footer button.byte-btn\").filter({ hasText: \"确定\" }).click();\n\t}\n\n\t// 滚动到底部\n\tawait page.mouse.wheel(0, 500); // 向下滚动 500 像素\n\n\t// 3. 添加位置\n\tif (params.address) {\n\t\tconst addressFormItem = page.locator(\".img-form-wrap .form-item-wrap .form-item\").filter({ hasText: \"添加位置\" });\n\t\tawait addressFormItem.locator(\".byte-select\").click();\n\t\tawait addressFormItem.locator(\".byte-select-view-search input\").fill(params.address);\n\t\tconst poperInstance = page.locator(\".byte-trigger .byte-select-popup .byte-select-option\");\n\t\tawait poperInstance.first().waitFor();\n\t\tawait poperInstance.first().click();\n\t}\n\n\t// 4. 作品声明\n\tif (params.declaration) {\n\t\tconst declarationFormItem = page\n\t\t\t.locator(\".img-form-wrap .form-item-wrap .form-item\")\n\t\t\t.filter({ hasText: \"作品声明\" })\n\t\t\t.locator(\".source-info-wrap\");\n\t\tawait declarationFormItem.locator(`.byte-checkbox:has(input[value=\"${params.declaration}\"])`).click();\n\t}\n\n\t// 5. 发布\n\tawait page.locator(\".footer-wrap button.publish-content\").click();\n\n\treturn success(\"\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\n/**\n * 作品声明\n * 1:引用站内\n * 3:引用AI\n * 4:取材网络\n * 5:个人观点,仅供参考\n * 6:虚构演绎,故事经历\n * 7:投资观点,仅供参考\n * 8:健康医疗分享,仅供参考\n */\ntype DeclarationType = 1 | 3 | 4 | 5 | 6 | 7 | 8;\n\nexport interface WeitoutiaoPublishParams extends ActiomCommonParams {\n\tcontent: string;\n\tbanners?: string[];\n\taddress?: string;\n\tdeclaration?: DeclarationType;\n}\n\nexport type PublishAction = CommonAction<WeitoutiaoPublishParams>;\n\nexport const weitoutiaoPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","export const scanRetryMaxCount = 30;\n\nexport const QuotaType = {\n\tNormal: \"kQuotaTypeMassSendNormal\",\n\tProductActivity: \"kQuotaTypeMassSendProductActivity\",\n};\n\nexport interface QuotaItem {\n\toriginal_quota: number;\n\tquota: number;\n\tstr_date: string;\n}\n\nexport interface QuotaDetail {\n\tquota_item_list: QuotaItem[];\n\tquota_type: string;\n}\n","import fs, { write } from \"node:fs\";\n// import https from \"node:https\";\nimport path from \"node:path\";\nimport { type ResponseData, downloadImage, getFilenameFromUrl, randomString, sleep, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport { extractImgTag, getFileState, replaceImgSrc } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport type { PublishAction, WeixinPublishParams , WxWhitelistUserInfo, WxInteraction} from \"./index\";\nimport { type QuotaDetail, QuotaType, scanRetryMaxCount } from \"./utils\";\nimport { match } from \"node:assert\";\n\ntype CommonResponse<T = unknown> = T & {\n\tbase_resp?: { err_msg: string; ret: number };\n};\n\nconst GET_QRCODE_DEFAULT_ERROR = \"二维码获取异常,请稍后重试。\";\n\nconst errnoMap: Record<number|string, string> = {\n\t200003: \"微信公众号号登录状态失效,请重新绑定账号后重试。\",\n\t420001: \"封面图不支持GIF,请更换后重试。\",\n\t200002: \"上传图片参数错误,请检查后重试。\",\n\t200039: \"上传图片高度(像素)与宽度(像素)的乘积不能超过600万,请更换后重试。\",\n\t153201: \"不支持发布审核中或转码中的视频\",\n\t200007: \"登陆失败,请重新登陆账户后重试。\",\n\t64703: \"摘要超出120字长度限制,请修改摘要后重试。\",\n\t\"-4\": \"不支持发布审核中或转码中的视频\",\n\t\"-2\": \"不支持发布审核中或转码中的视频\",\n\t770001: \"不支持发布审核中或转码中的视频\",\n\t200074: \"系统繁忙,请稍后重试!\"\n};\n\n// 不需要直接抛出的异常码,如 154019\nconst ignoreErrno = [154019];\n\n// 用户互动类型表\nconst userTypeMap: Record<string, 1 | 2 | 3> = {\n\t\"所有用户\": 1,\n\t\"已关注的用户\": 2,\n\t\"已关注7天及以上的用户\": 3,\n };\n\nconst generatorFormData = (data: Record<string, unknown>) => {\n\tconst formData = new URLSearchParams();\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tformData.append(key, String(value));\n\t}\n\n\treturn formData.toString();\n};\n\nexport const checkCopyrightStat = async <T>(http: Http, params: WeixinPublishParams, data: Record<string, unknown>) => {\n\tlet resData: T;\n\n\ttry {\n\t\tresData = await http.api({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\t\tparams: {\n\t\t\t\taction: \"get_appmsg_copyright_stat\",\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t},\n\t\t\tdata: generatorFormData(data),\n\t\t});\n\t} catch (error) {\n\t\tresData = (error as ResponseData)?.data;\n\t}\n\n\treturn resData;\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\tconst client_time_diff = Number(\"1743488763\") * 1 - Math.floor(new Date().getTime() / 1000);\n\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst http = new Http({\n\t\t// 接口代理,特意保留,作为测试使用\n\t\t// httpsAgent: new https.Agent({\n\t\t// \trejectUnauthorized: false,\n\t\t// \thost: \"127.0.0.1\",\n\t\t// \tport: 9000,\n\t\t// }),\n\t\theaders: {\n\t\t\t\"User-Agent\":\n\t\t\t\t\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0\",\n\t\t\tCookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://mp.weixin.qq.com\",\n\t\t\treferer: `https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&isNew=1&type=77&createType=0&token=${params.token}&lang=zh_CN&timestamp=${Date.now()}`,\n\t\t},\n\t});\n\n\t// 添加响应拦截器\n\thttp.addResponseInterceptor<CommonResponse>((response) => {\n\t\tconst responseData = response.data;\n\t\tconst msgType = params.saveType === \"draft\" ? \"同步\" : \"发布\";\n\n\t\t// 检查响应中的 errno 字段\n\t\tif (\n\t\t\tresponseData?.base_resp &&\n\t\t\tresponseData.base_resp.ret !== 0 &&\n\t\t\t!ignoreErrno.includes(responseData.base_resp.ret)\n\t\t) {\n\t\t\tconst errmsg =\n\t\t\t\terrnoMap[responseData.base_resp.ret] ||\n\t\t\t\tresponse.config.defaultErrorMsg ||\n\t\t\t\tresponseData.base_resp.err_msg ||\n\t\t\t\t`文章${msgType}异常,请稍后重试。`;\n\n\t\t\treturn {\n\t\t\t\tcode: errnoMap[responseData.base_resp.ret] ? 200 : 500,\n\t\t\t\tmessage: errmsg,\n\t\t\t\tdata: responseData,\n\t\t\t};\n\t\t}\n\t});\n\n\t// 0. 校验登录\n\tawait http.api({\n\t\tmethod: \"get\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n\t\tparams: {\n\t\t\tfingerprint,\n\t\t\tsub: \"list\",\n\t\t\tbegin: 0,\n\t\t\tcount: 10,\n\t\t\tquery: \"\",\n\t\t\ttype: 101_1_102_103,\n\t\t\tshow_type: \"\",\n\t\t\tfree_publish_type: 1_102_103,\n\t\t\tsub_action: \"list_ex\",\n\t\t\tsearch_card: 0,\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t},\n\t});\n\n\t// 1. 提取并上传正文中的图片\n\tconst uploadImages = async (images: string[]) => {\n\t\tconst cloudImages: Array<{ cdn_url: string; content: string }> = [];\n\n\t\t// 下载图片到本地\n\t\tconst localImages = await Promise.all(\n\t\t\timages.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\tfor (let index = 0; index < images.length; index++) {\n\t\t\tconst image = localImages[index];\n\t\t\tconst fileState = getFileState(image);\n\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append(\"id\", `WU_FILE_${index + 1}`);\n\t\t\tformData.append(\"name\", fileState.name);\n\t\t\tformData.append(\"type\", fileState.type);\n\t\t\tformData.append(\"lastModifiedDate\", fileState.lastModifiedDate);\n\t\t\tformData.append(\"size\", fileState.size);\n\t\t\tformData.append(\"file\", fs.createReadStream(image));\n\n\t\t\tconst response = await http.api<(typeof cloudImages)[0]>({\n\t\t\t\tmethod: \"post\",\n\t\t\t\turl: `https://mp.weixin.qq.com/cgi-bin/filetransfer?action=upload_material&f=json&writetype=doublewrite&token=${params.token}&lang=zh_CN`,\n\t\t\t\tdata: formData,\n\t\t\t\tdefaultErrorMsg: \"图片上传异常,请稍后重试发布。\",\n\t\t\t});\n\n\t\t\tcloudImages.push(response);\n\t\t}\n\n\t\treturn cloudImages;\n\t};\n\n\tconst originContentImages = extractImgTag(params.content);\n\tconst targetContentImages = await uploadImages(originContentImages);\n\t// 2. 替换正文中的图片\n\tconst content = replaceImgSrc(params.content, (dom) => {\n\t\tif (dom.attribs.src) {\n\t\t\tconst idx = originContentImages.findIndex((it) => it === dom.attribs.src);\n\t\t\tdom.attribs.src = targetContentImages[idx].cdn_url;\n\t\t\tdom.attribs.class = \"rich_pass wxw-img js_insertlocalimg\";\n\t\t\tdom.attribs.style = \"\";\n\t\t}\n\t\treturn dom;\n\t});\n\n\t// 3. 上传封面图片\n\tconst coverRes = await uploadImages([params.settingInfo.wxCover]);\n\n\t// 4. 原创声明白名单有效性判断与生成转载白名单\n\tlet oriWhitelist = null;\n\t\n\tif (params.settingInfo?.wxCopyright && params.settingInfo?.wxWhitelist) {\n\t\tconst _oriWhitelist = params.settingInfo.wxWhitelist;\n\t\n\t\tif (_oriWhitelist && _oriWhitelist.length > 0) {\n\t\t\tconst white_list = [];\n\n\t\t\tconst white_list_user = {\n\t\t\t\tnickname: \"\",\n\t\t\t\ttitle: \"可修改文章\",\n\t\t\t\topenid: \"\",\n\t\t\t\twx_name: \"\",\n\t\t\t\tusername: \"\",\n\t\t\t\tavatar: \"\",\n\t\t\t\tcan_modify: \"1\",\n\t\t\t\tcan_hide_source: \"0\",\n\t\t\t\tcan_reward: \"0\",\n\t\t\t};\n\t\n\t\t\tfor (const _user of _oriWhitelist) {\n\t\t\t\tconst userInfo_res = await http.api<{ search_list: WxWhitelistUserInfo[] }>({\n\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/appmsgcopyright?action=searchacct\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\taction: \"searchacct\",\n\t\t\t\t\t},\n\t\t\t\t\tdata: generatorFormData({\n\t\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\t\tf: \"json\",\n\t\t\t\t\t\tajax: 1,\n\t\t\t\t\t\ttoken: params.token,\n\t\t\t\t\t\trandom: Math.random().toString(),\n\t\t\t\t\t\tusername: _user,\n\t\t\t\t\t}),\n\t\t\t\t\tdefaultErrorMsg: \"搜索用户信息失败\",\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(userInfo_res.search_list.length>0){\n\t\t\t\t\tlet userInfo_resJson = userInfo_res.search_list[0];\n\t\t\t\t\twhite_list_user.nickname = userInfo_resJson.nickname;\n\t\t\t\t\twhite_list_user.openid = userInfo_resJson.openid;\n\t\t\t\t\twhite_list_user.avatar = userInfo_resJson.pic_url;\n\t\t\t\t\twhite_list_user.username = userInfo_resJson.username;\n\t\t\t\t\twhite_list_user.wx_name = userInfo_resJson.wx_name;\n\t\t\t\t\twhite_list.push({ ...white_list_user });\n\t\t\t\t}else{\n\t\t\t\t\treturn { code: 200, message: `白名单用户:${_user} 未搜索到,请确定输入是否正确!`, data: '' }\n\t\t\t\t}\n\t\t\t}\n\t\t\toriWhitelist = white_list.length > 0 ? JSON.stringify({ \"white_list\" : white_list }) : \"\"; \n\t\t}\n\t}\n\n\t// 5. 赞赏设置\n\tlet writerid = null;\n\tlet reply_id = null\n\tif (params.settingInfo.wxCopyright && params.settingInfo.wxRewardTarget){\n\t\tasync function getWriterList() {\n\t\t\tconst res = await http.api({\n\t\t\t method: \"get\",\n\t\t\t url: 'https://mp.weixin.qq.com/acct/writermgr',\n\t\t\t params: {\n\t\t\t\taction: 'get_writer_list',\n\t\t\t\tfingerprint,\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t }\n\t\t\t});\n\t\t \n\t\t\treturn res.pageinfo.writerlist || [];\n\t\t }\n\n\t\t async function getRewardText(): Promise<{ text: string , reply_id: string}[]> {\n\t\t\tconst res = await http.api({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: 'https://mp.weixin.qq.com/merchant/reward',\n\t\t\t\tparams: {\n\t\t\t\taction: 'getautoreply',\n\t\t\t\tfingerprint,\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\t},\n\t\t\t});\n\t\t\t\n\t\t\treturn res.reply_infos;\n\t\t}\n\n\t\t//遍历绑定信息\n\t\tfor (var _type in params.settingInfo.wxRewardTarget){\n\t\t\tif (_type === \"author\"){\n\n\t\t\t\tif( (await getWriterList()).length == 0){\n\t\t\t\t\t// 获取二维码等待用户绑定\n\t\t\t\t\tconst rewardbind = await http.api({\n\t\t\t\t\t\tmethod: \"get\",\n\t\t\t\t\t\turl: \"https://mp.weixin.qq.com/acct/writermgr\",\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\taction: \"get_rewardbind_qrcode\",\n\t\t\t\t\t\t\trandom: Math.random().toString(),\n\t\t\t\t\t\t\tfingerprint,\n\t\t\t\t\t\t\ttoken: params.token,\n\t\t\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\t\t\tf: \"json\",\n\t\t\t\t\t\t\tajax: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n\t\t\t\t\t});\n\t\t\n\t\t\t\t\tconst rewardBuffer = Buffer.from(rewardbind.qrcode_base64, 'base64');\n\t\t\t\t\tconst rewardFilePath = path.join(tmpCachePath, \"weixin_reward.jpg\");\n\t\t\t\t\tfs.writeFileSync(rewardFilePath, new Uint8Array(rewardBuffer));\n\t\t\t\t\n\t\t\t\t\tparams.safeQrcodeCallback?.(rewardFilePath);\n\t\t\n\t\t\t\t\tconst task_id = rewardbind.task_id\n\t\t\n\t\t\t\t\tlet code = null\n\t\t\n\t\t\t\t\tfor (let i = 0; i < scanRetryMaxCount; i++) {\n\t\t\t\t\t\tawait sleep(2000);\n\t\t\t\t\n\t\t\t\t\t\tconst checkScanResult = await http.api<{ qrcode_status: number; }>({\n\t\t\t\t\t\t\tmethod: \"get\",\n\t\t\t\t\t\t\turl: \"https://mp.weixin.qq.com/acct/writermgr\",\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\taction: \"query_rewardbind_qrcode_status\",\n\t\t\t\t\t\t\t\ttask_id: task_id,\n\t\t\t\t\t\t\t\tfingerprint,\n\t\t\t\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\t\t\t\tf: \"json\",\n\t\t\t\t\t\t\t\tajax: 1,\n\t\t\t\t\t\t\t\ttoken: params.token,\n\t\t\t\t\t\t\t\ttimespam: Date.now(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\tcode = checkScanResult.qrcode_status\n\t\t\t\t\n\t\t\t\t\t\tif ( code == 2 && (await getWriterList()).length > 0 ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\t\tif (i === scanRetryMaxCount - 1) {\n\t\t\t\t\t\t\treturn { code: 200, message: \"二维码已过期,请重试绑定。\", data: \"\" };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\n\t\t\t\t}\n\n\t\t\t\t// 判断为赞赏作者\n\t\t\t\tlet _writer = await getWriterList()\n\t\t\t\tfor (var _writer_item of _writer){\n\t\t\t\t\tif (_writer_item.nickname === params.settingInfo.wxRewardTarget[_type]){\n\t\t\t\t\t\twriterid = _writer_item.writerid\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!writerid){\n\t\t\t\t\t// 没找到作者id\n\t\t\t\t\treturn { code: 200, message: \"未匹配到赞赏绑定用户,请确认用户名与绑定是否正常!\", data: \"\" };\n\t\t\t\t}\n\n\t\t\t\tif (params.settingInfo?.wxRewardText){\n\t\t\t\t\t// 判断文案是否已添加\n\t\t\t\t\tlet rewardList = await getRewardText()\n\t\t\t\t\t\n\t\t\t\t\tlet matchdID = rewardList.find(\n\t\t\t\t\t\treward => reward.text === params.settingInfo.wxRewardText\n\t\t\t\t\t)?.reply_id ?? null;\n\t\n\t\t\t\t\tif (rewardList.length == 0 || !matchdID ){\n\t\t\t\t\t\tawait http.api({\n\t\t\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\t\t\turl: 'https://mp.weixin.qq.com/merchant/reward',\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t \taction: 'addautoreply',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdata: generatorFormData({\n\t\t\t\t\t\t\t\ttype: 1,\n\t\t\t\t\t\t\t\tfingerprint,\n\t\t\t\t\t\t\t\ttoken: params.token,\n\t\t\t\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\t\t\t\tf: \"json\",\n\t\t\t\t\t\t\t\tajax: 1,\n\t\t\t\t\t\t\t\ttext: params.settingInfo.wxRewardText\n\t\t\t\t\t\t })\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\treply_id = matchdID\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!matchdID) {\n\t\t\t\t\t\tfor (var _reply_item of (await getRewardText())){\n\t\t\t\t\t\t\treply_id = (await getRewardText()).find(\n\t\t\t\t\t\t\t\treward => reward.text === params.settingInfo.wxRewardText\n\t\t\t\t\t\t\t)?.reply_id ;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!reply_id) {\n\t\t\t\t\t\t\treturn {code:200, message:\"赞赏文案添加失败,请重新检查\", data:\"\"}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else if(_type === \"project\"){\n\t\t\t\t// 判断为公益捐赠\n\t\t\t}\n\t\t}\n\n\t}\n\t// 留言设置\n\tconst wxInteractionInfo = (() => {\n\t\tconst _wxInteraction = {\n\t\t\tneed_open_comment0: 0,\n\t\t\tonly_fans_can_comment0: 0,\n\t\t\tonly_fans_days_can_comment0: 0,\n\t\t\treply_flag0: 2,\n\t\t\tauto_elect_comment0: 0,\n\t\t\tauto_elect_reply0: 1,\n\t\t\topen_fansmsg0: 0\n\t\t};\n\t\n\t\tconst type = params?.settingInfo?.wxInteraction?.Type ?? \"\";\n\t\tif (type === \"public\") {\n\t\t\tconst _opt = params?.settingInfo?.wxInteraction?.Option;\n\t\t\tif (!_opt || !_opt.Comment || !_opt.reply || _opt.elect_comment == null || _opt.elect_reply == null) return null;\n\t\n\t\t\tconst commentType = userTypeMap[_opt.Comment];\n\t\t\tconst replyType = userTypeMap[_opt.reply] + 1;\n\n\t\t\t// 设置评论权限\n\t\t\t_wxInteraction.need_open_comment0 = 1;\n\t\t\tswitch (commentType) {\n\t\t\t\tcase 1:\n\t\t\t\t\t_wxInteraction.only_fans_can_comment0 = 0;\n\t\t\t\t\t_wxInteraction.only_fans_days_can_comment0 = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t_wxInteraction.only_fans_can_comment0 = 1;\n\t\t\t\t\t_wxInteraction.only_fans_days_can_comment0 = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\t_wxInteraction.only_fans_can_comment0 = 0;\n\t\t\t\t\t_wxInteraction.only_fans_days_can_comment0 = 1;\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\n\t\t\t// 设置回复权限等级\n\t\t\t_wxInteraction.reply_flag0 = replyType;\n\t\n\t\t\t// 精选功能\n\t\t\t_wxInteraction.auto_elect_comment0 = _opt.elect_comment ? userTypeMap[_opt.Comment] : 0;\n\t\t\t_wxInteraction.auto_elect_reply0 = _opt.elect_reply ? userTypeMap[_opt.reply] : 1;\n\t\n\t\t\treturn _wxInteraction;\n\t\t}\n\t\n\t\tif (type === \"private\") {\n\t\t\t_wxInteraction.open_fansmsg0 = 1;\n\t\t\treturn _wxInteraction;\n\t\t}\n\t\n\t\t// 其他未启用评论功能的情形\n\t\treturn _wxInteraction;\n\t})();\n\n\tif (!wxInteractionInfo) return { code: 200, message: \"互动参数设置错误,请检查参数设置!\", data: \"\" }\n\t\n\t\n\t// 4. 保存为草稿\n\tconst draftData = {\n\t\tlang: \"zh_CN\",\n\t\tf: \"json\",\n\t\tajax: 1,\n\t\tcount: 1,\n\t\toperate_from: \"Chrome\",\n\t\tisnew: 0,\n\t\tarticlenum: 1,\n\t\tpre_timesend_set: 0,\n\t\tis_finder_video0: 0,\n\t\tfinder_draft_id0: 0,\n\t\tapplyori0: 0,\n\t\tcan_reward0: writerid ? 1 : 0,\n\t\tpay_gifts_count0: 0,\n\t\tis_video_recommend0: -1,\n\t\twriterid0: writerid ? writerid : 0,\n\t\tauto_gen_digest0: 0,\n\t\tlast_choose_cover_from0: 0,\n\t\tneed_open_comment0: wxInteractionInfo.need_open_comment0 ,\n\t\tonly_fans_can_comment0: wxInteractionInfo.only_fans_can_comment0,\n\t\tonly_fans_days_can_comment0: wxInteractionInfo.only_fans_days_can_comment0,\n\t\treply_flag0: wxInteractionInfo.reply_flag0,\n\t\tauto_elect_comment0: wxInteractionInfo.auto_elect_comment0,\n\t\tauto_elect_reply0: wxInteractionInfo.auto_elect_reply0,\n\t\treward_reply_id0:params.settingInfo?.wxRewardText? reply_id ? reply_id : 0 : 0,\n\t\tnot_pay_can_comment0: 0,\n\t\tdata_seq: 0,\n\t\tmsg_index_id0: \"\",\n\n\t\ttoken: params.token,\n\t\tAppMsgId: params.appMsgId || \"\",\n\t\ttitle0: params.title,\n\t\tauthor0: params?.settingInfo?.wxAuthor || \"\" ,\n\t\tdigest0: params?.settingInfo?.wxAbstract || \"\",\n\t\tcontent0: content || \"\",\n\t\tsourceurl0: params?.settingInfo?.wxOriginalText || \"\",\n\t\tcdn_url0: coverRes[0].cdn_url || \"\",\n\t\tcopyright_type0: params?.settingInfo?.wxCopyright? 1 : 0,\n\t\tallow_reprint0: params?.settingInfo?.wxCopyright? 0 : '',\n\t\tallow_reprint_modify0: params?.settingInfo?.wxCopyright? 0 : '',\n\t\tori_white_list0: params?.settingInfo?.wxCopyright? oriWhitelist: '',\n\t\topen_fansmsg0: wxInteractionInfo.open_fansmsg0,\n\t\tallow_fast_reprint0: params?.settingInfo?.wxQuickReprint ? 1 : 0,\n\t\tdisable_recommend0: params?.settingInfo?.wxNotAllowRecommend ? 1 : 0,\n\t\tclaim_source_type0: params?.settingInfo?.wxCreationSource?.[0] || \"\",\n\n\t\tmasssend_check: 1,\n\t\tis_masssend: 1,\n\t};\n\n\tconst { appMsgId } = await http.api<{ appMsgId: string }>({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/operate_appmsg\",\n\t\tparams: {\n\t\t\ttoken: params.token,\n\t\t\tt: \"ajax-response\",\n\t\t\tsub: \"create\",\n\t\t\ttype: 77,\n\t\t\tlang: \"zh_CN\",\n\t\t},\n\t\tdata: generatorFormData(draftData),\n\t\tdefaultErrorMsg: \"创建草稿失败,请稍后重试发布。\",\n\t});\n\n\t// 如果只需要保存为草稿,直接返回 appMsgId\n\tif (params.saveType === \"draft\") {\n\t\treturn { code: 0, data: appMsgId, message: \"微信公众号保存草稿成功。\" };\n\t}\n\n\tconst masssendpage = () => {\n\t\treturn http.api<CommonResponse<{ operation_seq: string; quota_detail_list: QuotaDetail[] }>>({\n\t\t\tmethod: \"get\",\n\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssendpage\",\n\t\t\tparams: {\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\tpreview_appmsgid: appMsgId,\n\t\t\t\tfingerprint,\n\t\t\t\trandom: Math.random().toString(),\n\t\t\t},\n\t\t\tdefaultErrorMsg: \"创建草稿失败,请稍后重试发布。\",\n\t\t});\n\t};\n\n\t// 4. 预览\n\tlet massSendRes = await masssendpage();\n\t// 判断是否需要同意群发声明\n\tif (massSendRes.base_resp?.ret === 154019) {\n\t\ttask.logger.info(\"需要同意群发声明\");\n\t\tawait http.api({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/setprotocolsign\",\n\t\t\tparams: {\n\t\t\t\tcgi: \"setprotocolsign\",\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\ttoken: params.token,\n\t\t\t},\n\t\t\tdata: generatorFormData({\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\tfingerprint,\n\t\t\t\trandom: Math.random().toString(),\n\t\t\t\tissigned: 1,\n\t\t\t}),\n\t\t});\n\t\tmassSendRes = await masssendpage();\n\t}\n\n\t// 判断是否还有群发次数\n\tconst { operation_seq, quota_detail_list = [] } = massSendRes;\n\n\t// 群发时需要判断是否还有群发次数\n\tif (params.masssend) {\n\t\tconst quotaDetail = quota_detail_list.find((it) => it.quota_type === QuotaType.Normal);\n\t\tif (!quotaDetail?.quota_item_list[0]?.quota) {\n\t\t\treturn { code: 200, message: \"今日群发次数用尽,请明天再试。\", data: \"\" };\n\t\t}\n\t}\n\n\t// 非群发时会多一个接口\n\tif (!params.masssend) {\n\t\tawait http.api({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\t\tparams: {\n\t\t\t\tt: \"ajax-response\",\n\t\t\t\tfor_check: 1,\n\t\t\t\tis_release_publish_page: 1,\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t},\n\t\t\tdata: generatorFormData({\n\t\t\t\tappmsgid: appMsgId,\n\t\t\t\tfingerprint,\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t}),\n\t\t});\n\t}\n\n\t// check\n\tawait http.api({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend?action=check_same_material\",\n\t\tdata: generatorFormData({\n\t\t\tmsgid: appMsgId,\n\t\t\tfingerprint,\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t});\n\n\tconst copyrightStatData = {\n\t\ttoken: params.token,\n\t\tlang: \"zh_CN\",\n\t\tf: \"json\",\n\t\tajax: 1,\n\t\trandom: Math.random().toString(),\n\t\tfingerprint,\n\t\tfirst_check: 1,\n\t\ttype: 10,\n\t\tappmsgid: appMsgId,\n\t};\n\tfor (let i = 0; i < 10; i++) {\n\t\tawait sleep(1000);\n\t\tconst lastData = { ...copyrightStatData, first_check: i === 0 ? 1 : 0 };\n\t\tconst checkCopyrightStatRes = await checkCopyrightStat<{ open_ad_reprint_status?: string }>(http, params, lastData);\n\t\tif (checkCopyrightStatRes.open_ad_reprint_status) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tawait sleep(300);\n\n\tawait http.api({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\tparams: {\n\t\t\taction: \"check_ad\",\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\tappmsg_id: appMsgId,\n\t\t\tfingerprint,\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\tis_release_publish_page: params.masssend ? 0 : 1, // 群发时为 0,否则为 1\n\t\t\tsend_time: 0,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t});\n\n\tawait sleep(300);\n\n\tawait http.api({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\tparams: {\n\t\t\taction: \"check_music\",\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\tappmsgid: appMsgId,\n\t\t\tmasssend_check: 1,\n\t\t\tfingerprint,\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t});\n\n\tawait sleep(300);\n\n\t// 5. 获取群发文章ticket接口\n\tconst getTicketResult = await http.api<{ ticket: string; operation_seq: string }>({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/misc/safeassistant\",\n\t\tparams: {\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\t1: 1,\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\taction: \"get_ticket\",\n\t\t\tfingerprint,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t\tdefaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n\t});\n\n\tawait sleep(300);\n\n\t// 6. 获取群发文章 uuid\n\tconst getUuidResult = await http.api<{ uuid: string; genuuid_res: number }>({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/safe/safeqrconnect\",\n\t\tparams: {\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\t1: 1,\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\tstate: 0,\n\t\t\tlogin_type: \"safe_center\",\n\t\t\ttype: \"json\",\n\t\t\tticket: getTicketResult.ticket,\n\t\t\tfingerprint,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t\tdefaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n\t});\n\tawait sleep(1000);\n\n\tif (getUuidResult.genuuid_res !== 0) {\n\t\treturn { code: 200, message: GET_QRCODE_DEFAULT_ERROR, data: \"\" };\n\t}\n\tconst uuid = getUuidResult.uuid;\n\tawait sleep(1000);\n\n\t// 7. 获取验证二维码\n\tconst qrcodeResult = await http.api({\n\t\tmethod: \"get\",\n\t\turl: \"https://mp.weixin.qq.com/safe/safeqrcode\",\n\t\tparams: {\n\t\t\taction: \"check\",\n\t\t\ttype: \"msgs\",\n\t\t\tservice_type: 1,\n\t\t\tticket: getTicketResult.ticket,\n\t\t\tuuid,\n\t\t\tmsgid: operation_seq,\n\t\t\t...(params.masssend ? {} : { publish_type: 1 }),\n\t\t},\n\t\tdefaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n\t\tresponseType: \"arraybuffer\",\n\t});\n\n\tconst qrcodeBuffer = Buffer.from(qrcodeResult);\n\tconst qrcodeFilePath = path.join(tmpCachePath, \"weixin_qrcode.jpg\");\n\tfs.writeFileSync(qrcodeFilePath, new Uint8Array(qrcodeBuffer));\n\n\tparams.safeQrcodeCallback?.(qrcodeFilePath);\n\n\t// 8. 验证二维码结果\n\tlet code = \"\";\n\tfor (let i = 0; i < scanRetryMaxCount; i++) {\n\t\tawait sleep(2000);\n\n\t\tconst checkScanResult = await http.api<{ code: string; errcode: number }>({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/safe/safeuuid\",\n\t\t\tparams: {\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\ttimespam: Date.now(),\n\t\t\t},\n\t\t\tdata: generatorFormData({\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\tuuid,\n\t\t\t\taction: \"json\",\n\t\t\t\ttype: \"json\",\n\t\t\t\tfingerprint,\n\t\t\t\trandom: Math.random().toString(),\n\t\t\t}),\n\t\t});\n\n\t\tif (checkScanResult.errcode === 405 && checkScanResult.code) {\n\t\t\tcode = checkScanResult.code;\n\t\t\tbreak;\n\t\t}\n\n\t\tif (i === scanRetryMaxCount - 1) {\n\t\t\treturn { code: 200, message: \"二维码已过期,请重试发布。\", data: \"\" };\n\t\t}\n\t}\n\n\t// 非群发时会多一个接口\n\tif (!params.masssend) {\n\t\tawait http.api({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/misc/safeassistant\",\n\t\t\tparams: {\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t1: 1,\n\t\t\t},\n\t\t\tdata: generatorFormData({\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\tfingerprint,\n\t\t\t\trandom: Math.random().toString(),\n\t\t\t\taction: \"get_uuid\",\n\t\t\t\tuuid,\n\t\t\t}),\n\t\t});\n\t}\n\n\t// 9. 发送群发通知\n\tawait http.api<{ code: string; errcode: number }>({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\tparams: {\n\t\t\tt: \"ajax-response\",\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\t...(params.masssend ? {} : { is_release_publish_page: 1 }),\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: \"1\",\n\t\t\tfingerprint,\n\t\t\trandom: Math.random().toString(),\n\t\t\tack: \"\",\n\t\t\tcode,\n\t\t\treprint_info: \"\",\n\t\t\treprint_confirm: \"0\",\n\t\t\tlist: \"\",\n\t\t\tgroupid: \"\",\n\t\t\tsex: \"0\",\n\t\t\tcountry: \"\",\n\t\t\tprovince: \"\",\n\t\t\tcity: \"\",\n\t\t\tsend_time: \"0\",\n\t\t\ttype: \"10\",\n\t\t\tshare_page: \"1\",\n\t\t\tsynctxweibo: \"0\",\n\t\t\toperation_seq,\n\t\t\treq_id: randomString(32),\n\t\t\treq_time: new Date().getTime() + client_time_diff * 1e3,\n\t\t\tsync_version: \"1\",\n\t\t\tisFreePublish: params.masssend ? \"false\" : \"true\",\n\t\t\tappmsgid: appMsgId,\n\t\t\tisMulti: \"0\",\n\t\t\tdirect_send: \"1\",\n\t\t\tisNeedCode: \"true\",\n\t\t\tuserType: \"1\",\n\t\t}),\n\t\tdefaultErrorMsg: params.masssend ? \"文章群发异常,请尝试关闭群发或稍后重试。\" : \"文章发布异常,请稍后重试。\",\n\t});\n\n\treturn success(appMsgId, \"微信公众号发布完成。\");\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { CookieMap, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport axios from \"axios\";\n\nimport { copyHtmlToClipboard, parseUrlQueryString, PopupListener } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\nimport { scanRetryMaxCount } from \"./utils\";\n\n// 等待二维码验证结果最长时间\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000;\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \"mp.weixin.qq.com\",\n\t\turl: \"https://mp.weixin.qq.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst urlParams = {\n\t\taction: \"edit\",\n\t\ttype: 77,\n\t\ttoken: params.token,\n\t\tlang: \"zh_CN\",\n\t\ttimestamp: Date.now(),\n\t\tappmsgid: params.appMsgId,\n\t};\n\n\tif (params.settingInfo?.wxRewardTarget){\n\t\tconst urlRewardParams = {\n\t\t\taction: \"inviteauthor\",\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t};\n\t\tconst wxRewardPage = await task.createPage({\n\t\t\tshow: task.debug,\n\t\t\turl:\n\t\t\t\tparams.url ||\n\t\t\t\t`https://mp.weixin.qq.com/cgi-bin/safecenterstatus?${Object.entries(urlRewardParams)\n\t\t\t\t\t.map((it) => it.join(\"=\"))\n\t\t\t\t\t.join(\"&\")}`,\n\t\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t\t});\n\n\t\tconst reward_page = wxRewardPage.locator(\"#app\")\n\t\tconst isAddRewarder = reward_page.locator('.author_card_bd.weui-desktop-vm_primary').filter({hasText: params.settingInfo.wxRewardTarget.author}).count()\n\t\tif(await isAddRewarder == 0){\n\t\t\tawait reward_page.locator('.weui-desktop-panel__hd-right').click()\n\t\t\ttry {\n\t\t\t\ttry {\n\t\t\t\t\tawait wxRewardPage.waitForSelector('.invite-qrcode', { state: 'visible', timeout: 20000 });\n\t\t\t\t\tconst qrcodeSrc = await reward_page.locator(\".invite-qrcode\").getAttribute('src')\n\t\t\t\t\t\n\t\t\t\t\tif (qrcodeSrc) {\n\t\t\t\t\t\tconst rewardBuffer = Buffer.from(qrcodeSrc.replace(/^data:image\\/\\w+;base64,/, ''), 'base64');\n\t\t\t\t\t\tconst rewardFilePath = path.join(tmpCachePath, \"weixin_reward.jpg\");\n\t\t\t\t\t\tfs.writeFileSync(rewardFilePath, new Uint8Array(rewardBuffer));\n\t\t\t\t\t\n\t\t\t\t\t\tparams.safeQrcodeCallback?.(rewardFilePath);\n\t\t\t\t\t}\n\n\t\t\t\t\t// await wxRewardPage.waitForSelector('[data-transfer=\"true\"]:not([weui=\"true\"])', { state: 'detached', timeout: 30000 });\n\t\t\t\t\t\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new Error(\"二维码已过期,请重试绑定。\");\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 0; i < scanRetryMaxCount; i++) {\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\twxRewardPage.reload(),\n\t\t\t\t\t\twxRewardPage.waitForLoadState('domcontentloaded')\n\t\t\t\t\t]);\n\t\t\t\t\t\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait wxRewardPage.waitForSelector(`.author_card_bd.weui-desktop-vm_primary:has-text(\"${params.settingInfo.wxRewardTarget?.author}\")`, { timeout: 1000 });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} catch (error) {}\n\n\t\t\t\t\tif (i === scanRetryMaxCount - 1) throw new Error(\"未确认绑定账户,请在手机端确认绑定并重试\");\n\t\t\t\t}\n\n\t\t\t} catch (error) {\n\t\t\t\tlet errorMessage = \"发生未知错误\";\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\terrorMessage = error.message;\n\t\t\t\t} else if (typeof error === \"string\") {\n\t\t\t\t\terrorMessage = error;\n\t\t\t\t}\n\t\t\t\tawait wxRewardPage.close();\n\t\t\t\treturn { code: 200, message: errorMessage , data: \"\" };\n\t\t\t}\n\t\t}\n\n\t\tif(params.settingInfo.wxRewardText){\n\t\t\tawait wxRewardPage.locator('[href=\"/merchant/reward?action=getautoreply\"]').click()\n\t\t\tawait wxRewardPage.waitForLoadState('networkidle');\n\t\t\t\n\t\t\tconst isAddWord = reward_page.locator(\".auto-reply__list.edit .auto-reply__hd .auto-reply__text\").filter({hasText: new RegExp(`^${params.settingInfo.wxRewardText}$`) }).count()\n\t\t\t\n\t\t\tif(await isAddWord == 0){\n\t\t\t\tawait reward_page.locator(\".emotion_editor .edit_area\").fill(params.settingInfo.wxRewardText)\n\t\t\t\tawait reward_page.locator(\".emotion_editor .edit_area\").click()\n\t\t\t\tawait reward_page.locator(\".editor_toolbar .weui-desktop-btn.weui-desktop-btn_primary\").click()\n\t\t\t}\n\t\t}\n\t\tawait wxRewardPage.close();\n\n\t}\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl:\n\t\t\tparams.url ||\n\t\t\t`https://mp.weixin.qq.com/cgi-bin/appmsg?${Object.entries(urlParams)\n\t\t\t\t.map((it) => it.join(\"=\"))\n\t\t\t\t.join(\"&\")}`,\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\t// 0. 校验登录\n\ttry {\n\t\tawait page.waitForSelector(\".weui-desktop-head\", { state: \"visible\" });\n\t} catch (error) {\n\t\treturn { code: 400, message: \"登录失效\", data: page.url() };\n\t}\n\n\t// 1. 等待编辑器加载出来\n\tawait page.waitForSelector(\"#editor_pannel\", { state: \"visible\" });\n\n\tPopupListener(page,'[v-transfer-dom=\"#vue_app\"] .weui-desktop-dialog',\"更新\", '[v-transfer-dom=\"#vue_app\"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn', \n\t{\n\t\tcheckInterval: 1000,\n\t\tstopAfterClick: false\n\t})\n\n\t// 2. 填写标题\n\tconst titleInstance = page.locator(\"#js_title_main textarea#title\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 3. 填写作者\n\tif (params.settingInfo.wxAuthor) {\n\t\tconst titleInstance = page.locator(\"#js_author_area input#author\");\n\t\tawait titleInstance.click();\n\t\tawait titleInstance.fill(params.settingInfo.wxAuthor);\n\t}\n\n\t// 4. 填写正文\n\tawait copyHtmlToClipboard(page, params.content);\n\t// 定位目标元素并聚焦\n\tawait page.click(\".js_editor_area .ProseMirror\");\n\t// 模拟Ctrl+V粘贴\n\tawait page.keyboard.press(\"Control+V\");\n\n\t// 将设置区域滚动到可见区域\n\tawait page.locator(\"#article_setting_area\").evaluate((node) => node.scrollIntoView());\n\n\t// 5. 填写摘要\n\tif (params.settingInfo.wxAbstract) {\n\t\tconst titleInstance = page.locator(\"#article_setting_area #js_description_area textarea\");\n\t\tawait titleInstance.click();\n\t\tawait titleInstance.fill(params.settingInfo.wxAbstract);\n\t}\n\n\t// 6. 设置封面\n\tif (params.settingInfo.wxCover) {\n\t\tconst fileName = getFilenameFromUrl(params.settingInfo.wxCover);\n\t\tconst cover = await downloadImage(params.settingInfo.wxCover, path.join(tmpCachePath, fileName));\n\n\t\t// 从图片库选择\n\t\tawait page.locator(\"#article_setting_area #js_cover_area .select-cover__btn\").hover();\n\t\tawait page\n\t\t\t.locator(\"#article_setting_area #js_cover_area .pop-opr__group-select-cover .pop-opr__list .pop-opr__item\")\n\t\t\t.filter({ hasText: \"从图片库选择\" })\n\t\t\t.click();\n\n\t\t// 在弹窗内选择「我的图片」- 「上传文件」\n\t\t// 等待弹窗出现\n\t\tawait page.waitForSelector(\"#vue_app .weui-desktop-dialog\", { state: \"visible\" });\n\t\tconst dialog = page.locator(\"#vue_app .weui-desktop-dialog\");\n\t\t// 点击「我的图片」\n\t\tawait dialog.locator(\".weui-desktop-menu .weui-desktop-menu__item\").filter({ hasText: \"我的图片\" }).click();\n\t\tawait page.waitForTimeout(300);\n\t\t// 点击「上传文件」\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait dialog.locator(\".weui-desktop-img-picker__list__area .js_upload_btn_container\").click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles([cover]);\n\n\t\t// 等待图片上传完成\n\t\tawait page.waitForSelector(\".weui-desktop-img-picker__list .weui-desktop-img-picker__item.selected\", {\n\t\t\tstate: \"visible\",\n\t\t});\n\t\tawait page.waitForSelector('.weui-desktop-upload__file__progress', { state: 'detached' });\n\n\t\tconst pic_msg = page.locator('.weui-desktop-img-picker__list .weui-desktop-img-picker__item.selected .weui-desktop-upload__file__msg')\n\t\tif(await pic_msg.count() > 0) return {code: 200, message: \"图片上传错误:\"+(await pic_msg.textContent()||\"未知错误,请重试!\"), data: \"\"}\n\n\t\t// 选择下一步\n\t\tawait dialog\n\t\t\t.locator(\".weui-desktop-dialog__ft .weui-desktop-btn:not(.weui-desktop-btn_disabled)\")\n\t\t\t.filter({ hasText: \"下一步\" })\n\t\t\t.click();\n\t\t// 等待第二步的确认按钮出来\n\t\tawait dialog\n\t\t\t.locator(\".weui-desktop-dialog__ft .weui-desktop-btn\")\n\t\t\t.filter({ hasText: \"确认\" })\n\t\t\t.waitFor({ state: \"visible\" });\n\t\tawait dialog.locator(\".weui-desktop-dialog__ft .weui-desktop-btn\").filter({ hasText: \"确认\" }).click();\n\t}\n\n\t// 7. 原创与赞赏设置\n\tif(params.settingInfo.wxCopyright){\n\t\tawait page.locator('#js_original').click()\n\n\t\tconst ori_dialog = page.locator('.claim__original-dialog.original_dialog')\n\t\tconst ori_dialog_bd = ori_dialog.locator('.weui-desktop-dialog__bd')\n\t\tconst ori_dialog_ft = ori_dialog.locator('.weui-desktop-dialog__ft')\n\n\t\tawait ori_dialog_bd.locator('.weui-desktop-form__check-content').filter({hasText: \"文字原创\"}).click()\n\n\t\tif(params.settingInfo?.wxWhitelist){\n\t\t\t\n\t\t\tfor (var _target of params.settingInfo.wxWhitelist){\n\t\t\t\t\n\t\t\t\tawait ori_dialog_bd.locator('#js_article_whitelist_search').fill(_target)\n\t\t\t\tawait ori_dialog_bd.locator('.js_search').click()\n\t\t\t\tconst search_res = ori_dialog_bd.locator('#js_article_whitelist_search_result > div')\n\n\t\t\t\tawait page.waitForTimeout(1000);\n\n\t\t\t\tif( await search_res.getAttribute('class') !== 'search-result-title search-result-empty'){\n\n\t\t\t\t\tconst search_res_name = await search_res.locator('.search-result-name-left').textContent() || undefined\n\t\t\t\t\tawait search_res.click()\n\t\t\t\t\tconst whrite_list = ori_dialog_bd.locator('#js_article_whitelist_added tbody')\n\t\t\t\t\tconst white_td_isadd = await whrite_list.locator('.table-td-name').filter({hasText: search_res_name}).count()\n\n\t\t\t\t\tif (!white_td_isadd) {\n\t\t\t\t\t\treturn {code: 200 , message:'白名单添加失败,请重试!', data: ''}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\treturn { code: 200, message: `白名单用户:${_target} 未搜索到,请确定输入是否正确!`, data: '' }\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\n\t\tif(params.settingInfo?.wxQuickReprint){\n\t\t\tconst btn_isChecked = await ori_dialog_bd.locator('//span[@class=\"frm_tips\"]').filter({ hasText: '已开启' }).count() == 1 ? true : false; \n\t\t\tif(!btn_isChecked) await ori_dialog_bd.locator('.weui-desktop-switch_loading .weui-desktop-switch__box').click()\n\t\t}\n\n\t\tconst checkbox = ori_dialog_ft.locator('.weui-desktop-icon-checkbox')\n\t\tif( !await checkbox.isChecked()) await checkbox.check() \n\t\tawait ori_dialog_ft.locator('.weui-desktop-btn.weui-desktop-btn_primary').click()\n\n\t\tif (params.settingInfo?.wxRewardTarget){\n\n\t\t\tawait page.locator('#js_reward_setting_area').click()\n\n\t\t\tconst reward_setting = page.locator('.reward-setting-dialog')\n\t\t\tconst reward_setting_bd = reward_setting.locator('.weui-desktop-dialog__bd')\n\t\t\tconst reward_setting_ft = reward_setting.locator('.weui-desktop-dialog__ft')\n\n\t\t\t//遍历绑定信息\n\t\t\tfor (var _type in params.settingInfo.wxRewardTarget){\n\t\t\t\tif (_type === \"author\"){\n\t\t\t\t\tlet userName = params.settingInfo.wxRewardTarget[_type]\n\n\t\t\t\t\tawait reward_setting_bd.locator('.weui-desktop-form__check-label', { hasText: '赞赏作者' }).click()\n\t\t\t\t\tawait reward_setting_bd.locator('.weui-desktop-form__input').fill(userName)\n\n\n\t\t\t\t\tif(params.settingInfo.wxRewardText) {\n\t\t\t\t\t\tconst reward_setting_replay = page.locator('.reward-reply-setting')\n\t\t\t\t\t\tconst switchAuto = reward_setting_replay.locator('.weui-desktop-switch__box')\n\n\t\t\t\t\t\tconst maxAttempts = 5;\n\t\t\t\t\t\tconst delayMs = 500;\n\t\t\t\t\t\tlet nowCheckTime = 0 \n\n\t\t\t\t\t\tfor (let attempt = 0; attempt < maxAttempts; attempt++) {\n\t\t\t\t\t\t\tconst isDisabled = await switchAuto.isDisabled();\n\t\t\t\t\t\t\tif (!isDisabled){\n\t\t\t\t\t\t\t\tawait switchAuto.isChecked() ? nowCheckTime++ : null\n\t\t\t\t\t\t\t\tif (nowCheckTime == 2) break\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (attempt === maxAttempts - 1) throw new Error('Checkbox did not become enabled within the timeout.');\n\t\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, delayMs)); \n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\n\t\t\t\t\t\tconst isOneReplay = await reward_setting_replay.locator('.reward-reply-select__wrp >.reward-reply-select__tips').textContent() == \"添加新的回复\"\n\t\t\t\t\t\tconst isCurrentReplay = await reward_setting_replay.locator('.reward-reply-select__wrp >.reward-reply-select__display .wording').filter({hasText: new RegExp(`^${[params.settingInfo.wxRewardText]}$`)}).count() == 1\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!isOneReplay && !isCurrentReplay) {\n\t\t\t\t\t\t\tawait reward_setting_replay.locator('.reward-reply-select__wrp >.reward-reply-select__tips').click()\n\t\t\t\t\t\t\tawait reward_setting_replay.locator('.reward-reply-select__display.can-select .wording').filter({hasText: new RegExp(`^${[params.settingInfo.wxRewardText]}$`)}).click()\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tawait reward_setting_bd.locator('.reward-reply-setting .weui-desktop-switch__input').isChecked() ? reward_setting_bd.locator('.reward-reply-setting .weui-desktop-switch__box').uncheck(): 0\n\t\t\t\t\t}\n\t\n\t\t\t\t}\n\t\t\t\telse if (_type === \"project\"){}\n\t\t\t}\n\n\t\t\tconst checkbox = reward_setting_ft.locator('.weui-desktop-icon-checkbox')\n\t\t\tif( !await checkbox.isChecked()) await checkbox.check() \n\t\t\tawait reward_setting_ft.locator('.weui-desktop-btn.weui-desktop-btn_primary').click()\n\n\t\t}\n\n\t}\n\n\t// 8. 互动设置\n\tif(params.settingInfo?.wxInteraction){\n\t\tawait page.locator('.appmsg-editor__setting-group.js_interaction_cell').click()\n\t\tconst wxInteraction_setting = page.locator('.interaction-dialog')\n\t\tconst wxInteraction_bd = wxInteraction_setting.locator('.weui-desktop-dialog__bd')\n\t\tconst wxInteraction_ft = wxInteraction_setting.locator('.weui-desktop-dialog__ft')\n\n\t\tif(params.settingInfo.wxInteraction.Type == \"public\"){\n\t\t\tawait wxInteraction_bd.locator('.weui-desktop-form__check-label', { hasText: '留言' }).click();\n\t\t\t\n\t\t\tconst comment_area = wxInteraction_bd.locator('.comment-options-block.pt0')\n\t\t\tconst reply_area = wxInteraction_bd.locator('.comment-options-block.bb0.pb0')\n\t\t\tconst commont_rply_opt = page.locator('.weui-desktop-popper.options-popover[x-placement=\"bottom\"]')\n\n\t\t\tawait comment_area.locator('.comment-options__selector-btn').click();\n\t\t\tawait commont_rply_opt.locator('.weui-desktop-form__check-label', { hasText: params.settingInfo.wxInteraction.Option?.Comment }).click();\n\n\t\t\tif(params.settingInfo.wxInteraction.Option?.elect_comment) {\n\t\t\t\tawait comment_area.locator('.weui-desktop-switch__box').check()\n\t\t\t}else{\n\t\t\t\tawait comment_area.locator('.weui-desktop-switch__input').isChecked() ? comment_area.locator('.weui-desktop-switch__box').uncheck(): 0\n\t\t\t}\n\n\t\t\tawait page.waitForTimeout(1000);\n\n\t\t\tawait reply_area.locator('.comment-options__selector-btn').click();\n\t\t\tawait commont_rply_opt.locator('.weui-desktop-form__check-label', { hasText: params.settingInfo.wxInteraction.Option?.reply }).click();\n\t\t\t\n\t\t\tif(params.settingInfo.wxInteraction.Option?.elect_reply) {\n\t\t\t\tawait reply_area.locator('.weui-desktop-switch__box').check()\n\t\t\t}else{\n\t\t\t\tawait reply_area.locator('.weui-desktop-switch__input').isChecked() ? reply_area.locator('.weui-desktop-switch__box').uncheck(): 0\n\t\t\t}\n\t\t}else if(params.settingInfo.wxInteraction.Type == \"private\"){\n\t\t\tawait wxInteraction_bd.locator('.weui-desktop-form__check-label', { hasText: '快捷私信' }).click();\n\t\t}\n\n\t\tawait wxInteraction_ft.locator('.weui-desktop-btn.weui-desktop-btn_primary').click()\n\t}\n\n\t// 9. 原文链接\n\tif (params.settingInfo.wxOriginalText) {\n\t\tawait page.locator(\"#js_article_url_area .allow_click_opr\").click();\n\t\tawait page.waitForTimeout(200);\n\t\tconst poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n\t\tconst poperInput = poperInstance.locator(\"input.weui-desktop-form__input.js_url\");\n\t\tawait poperInput.fill(params.settingInfo.wxOriginalText);\n\t\tawait poperInstance.locator(\".popover_bar .btn_primary\").click();\n\t}\n\n\t// 10. 创作来源\n\tif (params.settingInfo.wxCreationSource && params.settingInfo.wxCreationSource.length > 0) {\n\t\tconst source = params.settingInfo.wxCreationSource[0];\n\t\tawait page.locator(\"#js_claim_source_area .allow_click_opr\").click();\n\t\tawait page.waitForTimeout(200);\n\t\tconst poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n\t\tawait poperInstance.locator(`.frm_radio_item label[for=\"${source}\"]`).click();\n\t}\n\n\t// 11. 关闭平台推荐\n\tif (params.settingInfo.wxNotAllowRecommend === true) {\n\t\tawait page.locator(\"#js_not_recommend_area .allow_click_opr\").click();\n\t\tawait page.waitForTimeout(200);\n\t\tconst poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n\t\tawait poperInstance.locator('.frm_radio_item label[for=\"not_recomment_0\"]').click();\n\t}\n\n\tawait page.waitForTimeout(1000);\n\n\t// 12. 发布\n\tconst articleId = await new Promise<string>((resolve) => {\n\t\t// 定义响应处理函数\n\t\tconst handleResponse = async (response: Response) => {\n\t\t\tconst url = response.url();\n\t\t\tconst query = parseUrlQueryString(url);\n\t\t\tif (url.includes(\"/cgi-bin/operate_appmsg\") && query?.t === \"ajax-response\") {\n\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\tresolve(jsonResponse?.appMsgId);\n\t\t\t}\n\t\t};\n\n\t\t// 开始监听响应事件\n\t\tpage.on(\"response\", handleResponse);\n\n\t\t// 点击发表\n\t\tpage.locator(\"#editor_pannel #bottom_main #js_button_area #js_send button\").click();\n\t});\n\n\t// 再次点击发表\n\tawait page.waitForSelector('.new_mass_send_dialog .weui-desktop-dialog__wrp:not([style*=\"display: none\"])', {\n\t\tstate: \"visible\",\n\t});\n\tawait page\n\t\t.locator(\".new_mass_send_dialog .weui-desktop-dialog .weui-desktop-dialog__ft button.weui-desktop-btn_primary\")\n\t\t.click();\n\n\t// 点击继续发表\n\tawait page.waitForSelector('.double_check_dialog .weui-desktop-dialog__wrp:not([style*=\"display: none\"])', {\n\t\tstate: \"visible\",\n\t});\n\tawait page\n\t\t.locator(\".double_check_dialog .weui-desktop-dialog .weui-desktop-dialog__ft button.weui-desktop-btn_primary\")\n\t\t.click();\n\n\ttry {\n\t\tconst startTime = Date.now();\n\n\t\t// biome-ignore lint/suspicious/noAsyncPromiseExecutor: <explanation>\n\t\tawait new Promise<void>(async (resolve, reject) => {\n\t\t\t// 定义响应处理函数\n\t\t\tconst handleResponse = async (response: Response) => {\n\t\t\t\tif (response.url().includes(\"/safe/safeuuid\")) {\n\t\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\t\tif (jsonResponse.errcode === 405) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\t\t} else if (Date.now() - startTime > waitQrcodeResultMaxTime) {\n\t\t\t\t\t\treject();\n\t\t\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// 开始监听响应事件\n\t\t\tpage.on(\"response\", handleResponse);\n\n\t\t\t// 获取微信验证二维码\n\t\t\tawait page.waitForSelector(\".dialog .js_wxchecks.safe_check img.qrcode.js_qrcode\", {\n\t\t\t\tstate: \"visible\",\n\t\t\t});\n\t\t\tconst qrcodeSrc = await page\n\t\t\t\t.locator(\".dialog .js_wxchecks.safe_check img.qrcode.js_qrcode\")\n\t\t\t\t.first()\n\t\t\t\t.getAttribute(\"src\");\n\t\t\tif (qrcodeSrc) {\n\t\t\t\tconst imgUrl = new URL(qrcodeSrc, page.url()).href; // 处理相对路径\n\t\t\t\tconst response = await axios({\n\t\t\t\t\tmethod: \"get\",\n\t\t\t\t\turl: imgUrl,\n\t\t\t\t\tresponseType: \"arraybuffer\", // 确保接收二进制数据\n\t\t\t\t});\n\t\t\t\t// 保存文件\n\t\t\t\tconst qrcodeFilePath = path.join(tmpCachePath, \"weixin_qrcode.jpg\");\n\t\t\t\tfs.writeFileSync(qrcodeFilePath, response.data);\n\t\t\t\tparams.safeQrcodeCallback?.(qrcodeFilePath);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"qrcodeSrc is empty\");\n\t\t\t}\n\t\t});\n\t} catch (error) {\n\t\tawait page.close();\n\t\treturn { code: 500, message: \"群发二维码已过期,请重试发布。\", data: \"\" };\n\t}\n\n\tawait page.waitForTimeout(3000);\n\tawait page.close();\n\n\treturn success(articleId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams } from \"../../types\";\nimport { defaultParams, executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\nexport interface WxInteraction {\n\tType: \"public\" | \"private\" | \"off\"; // public:评论留言, priviate: 快捷私信, off: 不开启\n\tOption?: { // public下相关设置\n\t Comment: \"已关注7天及以上的用户\" | \"已关注的用户\" | \"所有用户\"; // 评论设置\n\t reply: \"已关注7天及以上的用户\" | \"已关注的用户\" | \"所有用户\"; // 回复设置\n\t elect_comment: boolean; // 是否开启精选评论\n\t elect_reply: boolean; // 是否开启精选回复\n\t};\n }\n\nexport interface WeixinPublishParams extends ActiomCommonParams {\n\tsaveType: \"draft\" | \"publish\"; // 保存成草稿 / 发布\n\tmasssend?: boolean; // 是否群发(默认开启群发)\n\ttoken: string | number;\n\ttitle: string; // 标题\n\tcontent: string; // 正文内容\n\tuuid?: string;\n\tappMsgId?: string;\n\toperation_seq?: string;\n\tsettingInfo: {\n\t\twxCover: string; // 封面\n\t\twxAuthor?: string; // 作者\n\t\twxAbstract?: string; // 摘要\n\t\twxOriginalText?: string; // 原文链接\n\t\twxCopyright?: boolean, // 版权声明\n\t\twxWhitelist?: string[]; // 转载白马名单\n\t\twxRewardTarget?: Record<string, string>; // 赞赏目标与ID\n\t\twxRewardText?: string; // 赞赏文案\n\t\twxQuickReprint?: boolean; // 快捷转载\n\t\twxNotAllowRecommend?: boolean; // 不允许被平台推荐\n\t\twxCreationSource?: string[]; // 创作来源\n\t\twxInteraction?: WxInteraction // 互动设置\n\t};\n\tsafeQrcodeCallback?: (qrcodePath: string) => void; // 二维码验证回调\n}\n\nexport interface WxWhitelistUserInfo {\n\tnickname: string;\n\topenid: string; // 微信常用字段命名可能是 open_id\n\tusername: string;\n\twx_name: string;\n\tpic_url: string;\n}\n\nexport type PublishAction = CommonAction<WeixinPublishParams, string>;\n\nexport const weixinPublish: PublishAction = async (task, _params) => {\n\tconst params = defaultParams(_params, { masssend: true });\n\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\n\nimport type { PublishAction, WeixinmpPublishParams } from \".\";\nimport type { WeiXinCropResult } from \"../../types\";\nimport type { AspectRatio } from \"../../utils\";\nimport { calculateCropCoordinates, getFileState } from \"../../utils\";\nimport { Http } from \"../../utils/http\"\n\ntype ColorResponse = {\n\twidth: number;\n\theight: number;\n\ttheme_color: { r: number; g: number; b: number };\n};\ntype ShareInamgeInfo = {\n\tcdn_url: string;\n\tdisable_live: 0;\n\tdisable_theme: 1;\n\tfile_id: number;\n\twidth: number;\n\theight: number;\n\ttheme_color: string;\n\turl: string;\n};\n\nconst saveDraft = (\n\thttp: Http,\n\tparams: WeixinmpPublishParams,\n\tdata: Record<string, unknown>,\n) => {\n\tconst formData = new FormData();\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tformData.append(key, value);\n\t}\n\n\treturn http.api({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/operate_appmsg\",\n\t\tparams: {\n\t\t\ttoken: params.token,\n\t\t\tt: \"ajax-response\",\n\t\t\tsub: \"update\",\n\t\t\ttype: 77,\n\t\t\tlang: \"zh_CN\",\n\t\t},\n\t\tdata: formData,\n\t});\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://mp.weixin.qq.com\",\n\t\t\treferer: `https://mp.weixin.qq.com/cgi-bin/appmsg?token=${params.token}&lang=zh_CN`,\n\t\t},\n\t});\n\n\t// 1. 上传图片\n\tconst shareImageInfos: ShareInamgeInfo[] = [];\n\tconst cropResult: Record<string, string> = {};\n\n\tif (params.banners && params.banners.length > 0) {\n\t\t// 下载图片到本地\n\t\tconst images = await Promise.all(\n\t\t\tparams.banners.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\tfor (let index = 0; index < images.length; index++) {\n\t\t\tconst image = images[index];\n\t\t\tconst fileState = getFileState(image);\n\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append(\"id\", `WU_FILE_${index + 1}`);\n\t\t\tformData.append(\"name\", fileState.name);\n\t\t\tformData.append(\"type\", fileState.type);\n\t\t\tformData.append(\"lastModifiedDate\", fileState.lastModifiedDate);\n\t\t\tformData.append(\"size\", fileState.size);\n\t\t\tformData.append(\"file\", fs.createReadStream(image));\n\n\t\t\tconst response = await http.api<{ cdn_url: string; content: string }>({\n\t\t\t\tmethod: \"post\",\n\t\t\t\turl: `https://mp.weixin.qq.com/cgi-bin/filetransfer?action=upload_material&f=json&writetype=doublewrite&token=${params.token}&lang=zh_CN`,\n\t\t\t\tdata: formData,\n\t\t\t});\n\n\t\t\t// 获取图片的主题色\n\t\t\tconst colorResponseData = await http.api<ColorResponse>({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/filepage\",\n\t\t\t\tparams: {\n\t\t\t\t\taction: \"getimgext\",\n\t\t\t\t\tfileid: response.content,\n\t\t\t\t\ttoken: params.token,\n\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\tf: \"json\",\n\t\t\t\t\tajax: 1,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst themeColor = colorResponseData.theme_color;\n\n\t\t\tshareImageInfos.push({\n\t\t\t\tcdn_url: response.cdn_url,\n\t\t\t\tdisable_live: 0,\n\t\t\t\tdisable_theme: 1,\n\t\t\t\tfile_id: Number(response.content),\n\t\t\t\twidth: colorResponseData.width,\n\t\t\t\theight: colorResponseData.height,\n\t\t\t\ttheme_color: `rgb(${themeColor.r},${themeColor.g},${themeColor.b})`,\n\t\t\t\turl: response.cdn_url,\n\t\t\t});\n\n\t\t\t// 第一张图片还需要添加头图裁切\n\t\t\tif (index === 0) {\n\t\t\t\tconst cropFormData = new FormData();\n\t\t\t\tcropFormData.append(\"imgurl\", response.cdn_url);\n\n\t\t\t\t// 需要裁切 16:9,3:4,1:1 三种尺寸的图片\n\t\t\t\tconst cropRatios: AspectRatio[] = [\n\t\t\t\t\t[16, 9],\n\t\t\t\t\t[1, 1],\n\t\t\t\t\t[3, 4],\n\t\t\t\t];\n\t\t\t\tcropFormData.append(\"size_count\", cropRatios.length);\n\t\t\t\tconst cropCoordinates = cropRatios.map((r, idx) => {\n\t\t\t\t\tconst cropCoordinate = calculateCropCoordinates(\n\t\t\t\t\t\tcolorResponseData.width,\n\t\t\t\t\t\tcolorResponseData.height,\n\t\t\t\t\t\tr,\n\t\t\t\t\t);\n\t\t\t\t\tcropFormData.append(`size${idx}_x1`, cropCoordinate.x1);\n\t\t\t\t\tcropFormData.append(`size${idx}_y1`, cropCoordinate.y1);\n\t\t\t\t\tcropFormData.append(`size${idx}_x2`, cropCoordinate.x2);\n\t\t\t\t\tcropFormData.append(`size${idx}_y2`, cropCoordinate.y2);\n\n\t\t\t\t\treturn { ratio: `${r[0]}_${r[1]}`, ...cropCoordinate };\n\t\t\t\t});\n\n\t\t\t\tcropFormData.append(\"token\", params.token);\n\t\t\t\tcropFormData.append(\"lang\", \"zh_CN\");\n\t\t\t\tcropFormData.append(\"f\", \"json\");\n\t\t\t\tcropFormData.append(\"ajax\", 1);\n\n\t\t\t\tconst cropResponse = await http.api<{ result: WeiXinCropResult[] }>({\n method: \"post\",\n url: \"https://mp.weixin.qq.com/cgi-bin/cropimage?action=crop_multi\",\n data: cropFormData\n });\n\n\t\t\t\tcropResult.cdn_url_back0 = response.cdn_url; // 原图\n\t\t\t\tcropResult.cdn_url0 = cropResponse.result[0].cdnurl; // 16:9\n\t\t\t\tcropResult.cdn_235_1_url0 = cropResponse.result[0].cdnurl; // 16:9\n\t\t\t\tcropResult.cdn_16_9_url0 = cropResponse.result[0].cdnurl; // 16:9\n\t\t\t\tcropResult.cdn_1_1_url0 = cropResponse.result[1].cdnurl; // 1:1\n\t\t\t\tcropResult.cdn_3_4_url0 = cropResponse.result[2].cdnurl; // 3:4\n\t\t\t\tcropResult.crop_list0 = JSON.stringify({\n\t\t\t\t\tcrop_list: cropCoordinates.map((it, idx) => ({\n\t\t\t\t\t\tfile_id: cropResponse.result[idx].file_id,\n\t\t\t\t\t\tratio: it.ratio,\n\t\t\t\t\t\tx1: 0,\n\t\t\t\t\t\tx2: 0,\n\t\t\t\t\t\ty1: 0,\n\t\t\t\t\t\ty2: 0,\n\t\t\t\t\t})),\n\t\t\t\t\tcrop_list_percent: cropCoordinates.map((it, idx) => ({\n\t\t\t\t\t\t...it,\n\t\t\t\t\t\tfile_id: cropResponse.result[idx].file_id,\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// 保存\n\tconst res = await saveDraft(http, params, {\n\t\t...cropResult,\n\t\ttoken: params.token,\n\t\tlang: \"zh_CN\",\n\t\tf: \"json\",\n\t\tajax: 1,\n\t\toperate_from: \"Chrome\",\n\t\ttitle0: params.title,\n\t\tcontent0: params.content,\n\t\tshare_imageinfo0: JSON.stringify(shareImageInfos),\n\t});\n\n return success(res)\n};\n","import path from \"node:path\";\nimport type { CookieMap } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport type { PublishAction, Source } from \"./index\";\n\nconst sourceText: Record<Source, string> = {\n\tai: \"内容由AI生成\",\n\tofficial: \"素材来源官方媒体/网络新闻\",\n\tfictional: \"内容剧情演绎,仅供娱乐\",\n\tpersonal: \"个人观点,仅供参考\",\n};\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \"mp.weixin.qq.com\",\n\t\turl: \"https://mp.weixin.qq.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl:\n\t\t\tparams.url ||\n\t\t\t`https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=77&createType=8&token=${params.token}&lang=zh_CN`,\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\tconst tmpCachePath = task.getTmpPath();\n\n\t// 0. 判断是否登录\n\ttry {\n\t\tawait page.waitForSelector(\"#editor_pannel\");\n\t} catch (error) {\n\t\treturn { code: 500, message: \"登录失效\", data: page.url() };\n\t}\n\n\tconst container = page.locator(\"#editor_pannel\");\n\n\t// 1. 添加图片\n\tif (params.banners && params.banners.length > 0) {\n\t\tconst images = await Promise.all(\n\t\t\tparams.banners.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\t// 选择文件\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait container.locator(\".image-selector__add\").hover();\n\t\tawait container\n\t\t\t.locator(\".image-selector__add .pop-opr__list .pop-opr__item\")\n\t\t\t.filter({ hasText: \"本地上传\" })\n\t\t\t.click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles(images);\n\t}\n\n\t// 2. 标题\n\tconst titleInstance = page.locator(\"#js_title_main textarea#title\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 3. 正文\n\tconst descInstance = page.locator(\"#guide_words_main .ProseMirror\");\n\tawait descInstance.click();\n\tawait descInstance.fill(params.content);\n\n\t// 4. 来源\n\tif (params.source) {\n\t\tawait container.locator(\"#js_claim_source_area .js_claim_source_desc\").click();\n\t\tawait page\n\t\t\t.locator(\".popover_article_claim_source .frm_radio_item label\")\n\t\t\t.filter({ hasText: sourceText[params.source] })\n\t\t\t.click();\n\t}\n\n\t// 5. 等待所有图片上传完成\n\tif (params.banners && params.banners.length > 0) {\n\t\tawait page.waitForSelector(\"#editor_pannel .image-selector .image-selector__preview\");\n\t}\n\n\t// 6. 保存\n\tif (params.draft) {\n\t\tawait container.locator(\"#bottom_main #js_submit button\").click();\n\t} else {\n\t\tawait container.locator(\"#bottom_main #js_send button\").click();\n\t}\n\n\treturn success(\"\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\nexport type Source = \"ai\" | \"official\" | \"fictional\" | \"personal\";\n\nexport interface WeixinmpPublishParams extends ActiomCommonParams {\n\ttoken: string | number;\n\tbanners?: string[];\n\ttitle: string; // 标题\n\tcontent: string; // 正文\n\t/**\n\t * 内容由AI生成 - ai\n\t * 素材来源官方媒体/网络新闻 - official\n\t * 内容剧情演绎,仅供娱乐 - fictional\n\t * 个人观点,仅供参考 - personal\n\t */\n\tsource?: Source; // 来源\n\tdraft?: boolean; // 是否为草稿\n}\n\nexport type PublishAction = CommonAction<WeixinmpPublishParams>;\n\nexport const weixinmpPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import { Buffer } from \"node:buffer\";\nimport crypto from \"node:crypto\";\n\n/**\n * 小红书加密参数逆向,代码来自:https://github.com/Cloxl/xhshow\n */\nexport class XsEncrypt {\n\tprivate words = [929260340, 1633971297, 895580464, 925905270];\n\tprivate keyBytes = Buffer.concat(\n\t\tthis.words.map(\n\t\t\t(word) =>\n\t\t\t\tnew Uint8Array(Buffer.from([(word >> 24) & 0xff, (word >> 16) & 0xff, (word >> 8) & 0xff, word & 0xff])),\n\t\t),\n\t);\n\tprivate iv = Buffer.from(\"4uzjr7mbsibcaldp\", \"utf8\");\n\n\t/**\n\t * 根据传入的url生成MD5摘要\n\t *\n\t * @param {string} url - API的url\n\t * @returns {string} MD5摘要\n\t */\n\tasync encryptMD5(url: string): Promise<string> {\n\t\treturn crypto.createHash(\"md5\").update(url, \"utf8\").digest(\"hex\");\n\t}\n\n\t/**\n\t * 根据传入的text生成AES加密后的内容,并将其转为base64编码\n\t *\n\t * @param {string} text - 需要加密的字符串\n\t * @returns {string} 加密后的base64编码字符串\n\t */\n\tasync encryptText(text: string): Promise<string> {\n\t\t// 将文本编码为 Base64\n\t\tconst textEncoded = Buffer.from(text).toString(\"base64\");\n\t\t// 创建 AES 加密器\n\t\tconst cipher = crypto.createCipheriv(\"aes-128-cbc\", new Uint8Array(this.keyBytes), new Uint8Array(this.iv));\n\t\t// 对数据进行填充\n\t\tconst ciphertext = cipher.update(textEncoded, \"utf8\", \"base64\");\n\t\treturn ciphertext + cipher.final(\"base64\");\n\t}\n\n\t/**\n\t * 把加密后的payload转为16进制\n\t *\n\t * @param {string} encodedData - 加密后的payload(Base64编码)\n\t * @returns {string} 十六进制字符串\n\t */\n\tasync base64ToHex(encodedData: string): Promise<string> {\n\t\t// 将 Base64 字符串解码为二进制数据\n\t\tconst decodedData = Buffer.from(encodedData, \"base64\");\n\t\t// 将二进制数据转换为十六进制字符串\n\t\treturn decodedData.toString(\"hex\");\n\t}\n\n\t/**\n\t * 把小红书加密参数payload转16进制 再使用base64编码\n\t *\n\t * @param {string} payload - 要加密处理的payload内容\n\t * @param {string} platform - 登录平台\n\t * @returns {string} 加密后并进行base64编码的字符串\n\t */\n\tasync encryptPayload(payload: string, platform: string): Promise<string> {\n\t\t// 将 payload 转换为十六进制\n\t\tconst hexPayload = await this.base64ToHex(payload);\n\n\t\t// 构造对象\n\t\tconst obj = {\n\t\t\tsignSvn: \"56\",\n\t\t\tsignType: \"x2\",\n\t\t\tappID: platform,\n\t\t\tsignVersion: \"1\",\n\t\t\tpayload: hexPayload,\n\t\t};\n\n\t\t// 将对象转换为 JSON 字符串(紧凑格式)\n\t\tconst jsonString = JSON.stringify(obj, null, 0);\n\n\t\t// 对 JSON 字符串进行 Base64 编码\n\t\treturn Buffer.from(jsonString).toString(\"base64\");\n\t}\n\n\t/**\n\t * 将传入的参数加密为小红书的xs\n\t * Args: url: API请求的URL\n\t * a1: 签名参数a1\n\t * ts: 时间戳\n\t * platform: 登录平台 默认为xhs-pc-web\n\t * Returns:\n\t * 最终的加密签名字符串,前缀为“XYW_”\n\t */\n\tasync encryptXs(url: string, a1: string, ts: string, platform = \"xhs-pc-web\"): Promise<string> {\n\t\tconst text = `x1=${await this.encryptMD5(`url=${url}`)};x2=0|0|0|1|0|0|1|0|0|0|1|0|0|0|0|1|0|0|0;x3=${a1};x4=${ts};`;\n\t\treturn `XYW_${await this.encryptPayload(await this.encryptText(text), platform)}`;\n\t}\n\n\tdumps(...rest: Parameters<typeof JSON.stringify>): string {\n\t\tconst [data, replacer = null, space = 0] = rest;\n\t\treturn JSON.stringify(data, replacer, space)\n\t\t\t.replace(/\\n/g, \"\")\n\t\t\t.replace(/\":\\s+\"/g, '\":\"');\n\t}\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport type { PublishAction } from \".\";\nimport { Http } from \"../../utils/http\";\nimport { XsEncrypt } from \"../../utils/xhsXsEncrypt\";\n\ninterface CommonResponse<T = unknown> {\n\tdata: T;\n\tcode: number;\n\tsuccess: boolean;\n}\n\ninterface UploadTempPermit {\n\tbucket: string;\n\tfileIds: string[];\n\ttoken: string;\n}\n\nconst errnoMap: Record<number, string> = {\n\t903: \"账户已登出,需重新登陆重试!\"\n};\n\n// 小红书参数加密器\nconst xsEncrypt = new XsEncrypt();\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n\tif (!a1Cookie) {\n\t\treturn { code: 200, message: \"账号数据异常,请重新绑定账号后重试。\", data: \"\" };\n\t}\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://creator.xiaohongshu.com\",\n\t\t\treferer: \"https://creator.xiaohongshu.com/\",\n\t\t\t\"user-agent\":\n\t\t\t\t\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\",\n\t\t},\n\t});\n\n\t// 添加响应拦截器\n\thttp.addResponseInterceptor<CommonResponse>((response) => {\n\t\tconst responseData = response.data;\n\n\t\t// 检查响应中的 errno 字段\n\t\tif (responseData?.code && responseData.code !== 0) {\n\t\t\tconst errmsg = errnoMap[responseData.code] || response.config.defaultErrorMsg || \"文章发布异常,请稍后重试。\";\n\n\t\t\treturn {\n\t\t\t\tcode: errnoMap[responseData.code] ? 200 : 500,\n\t\t\t\tmessage: errmsg,\n\t\t\t\tdata: responseData\n\t\t\t};\n\t\t}\n\t});\n\n\t// 0. 获取上传 token\n\tconst fetchCoverUrl = `/api/media/v1/upload/creator/permit?biz_name=spectrum&scene=image&file_count=${params.banners.length}&version=1&source=web`;\n\tconst xt = Date.now().toString();\n\tconst xs = await xsEncrypt.encryptXs(fetchCoverUrl, a1Cookie, xt);\n\tconst coverIdInfo = await http.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>({\n\t\tmethod: \"get\",\n\t\tbaseURL: \"https://creator.xiaohongshu.com\",\n\t\turl: fetchCoverUrl,\n\t\tdefaultErrorMsg: \"获取小红书用户信息失败,请稍后重试发布。\",\n\t\theaders: { \"x-s\": xs, \"x-t\": xt },\n\t});\n\n\tconst coverIds = coverIdInfo.data.uploadTempPermits[0].fileIds;\n\tconst ossToken = coverIdInfo.data.uploadTempPermits[0].token;\n\tif(!coverIds || !ossToken) return { code: 200, message: \"图片上传失败,请稍后重试!\", data: \"\" };\n\n\t// 1. 上传附件\n\tconst uploadFile = async (url: string, index: number) => {\n\t\tconst fileName = getFilenameFromUrl(url);\n\t\tconst localUrl = await downloadImage(url, path.join(tmpCachePath, fileName));\n\n\t\tconst ossFileId = coverIds[index];\n\t\t// 读取本地文件,转成 Buffer\n\t\tconst fileBuffer = fs.readFileSync(localUrl);\n\n\t\tawait http.api({\n\t\t\tmethod: \"put\",\n\t\t\turl: `https://ros-upload.xiaohongshu.com/${ossFileId}`,\n\t\t\tdata: fileBuffer,\n\t\t\theaders: {\n\t\t\t\t\"x-cos-security-token\": ossToken,\n\t\t\t},\n\t\t\tdefaultErrorMsg: \"图片上传异常,请稍后重试发布。\",\n\t\t});\n\n\t\treturn { ossFileId, ossToken };\n\t};\n\n\tconst coverInfos = await Promise.all(params.banners.map((it, idx) => uploadFile(it, idx)));\n\n\tconst publishData = {\n\t\tcommon: {\n\t\t\tats: [],\n\t\t\tbiz_relations: [],\n\t\t\tdesc: params?.content,\n\t\t\tgoods_info: {},\n\t\t\thash_tag: [],\n\t\t\tnote_id: \"\",\n\t\t\tsource: JSON.stringify({\n\t\t\t\ttype: \"web\",\n\t\t\t\tids: \"\",\n\t\t\t\textraInfo: '{\"systemId\":\"web\"}',\n\t\t\t}),\n\t\t\ttitle: params?.title,\n\t\t\ttype: \"normal\",\n\t\t\tprivacy_info: {\n\t\t\t\top_type: 1,\n\t\t\t\ttype: params.visibleRange === \"public\" ? 0 : 1,\n\t\t\t},\n\t\t\tpost_loc: params.address\n\t\t\t\t? {\n\t\t\t\t\t\tname: params.address?.name,\n\t\t\t\t\t\tpoi_id: params.address?.poi_id,\n\t\t\t\t\t\tpoi_type: params.address?.poi_type,\n\t\t\t\t\t\tsubname: params.address?.full_address,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tbusiness_binds: \"\",\n\t\t},\n\t\timage_info: {\n\t\t\timages: coverInfos.map((it) => ({\n\t\t\t\textra_info_json: '{\"mimeType\":\"image/png\"}',\n\t\t\t\tfile_id: it.ossFileId,\n\t\t\t\tmetadata: { source: -1 },\n\t\t\t\tstickers: { floating: [], version: 2 },\n\t\t\t})),\n\t\t},\n\t\tvideo_info: null,\n\t};\n\n\t// 自主声明\n\tconst userDeclarationBind = {\n\t\torigin: 2,\n\t\tphotoInfo: {},\n\t\trepostInfo: {},\n\t};\n\n\tif (params.selfDeclaration?.type === \"fictional-rendition\") {\n\t\t// 虚拟演绎,仅供娱乐\n\t\tuserDeclarationBind.origin = 1;\n\t} else if (params.selfDeclaration?.type === \"ai-generated\") {\n\t\t// 笔记含AI合成内容\n\t\tuserDeclarationBind.origin = 2;\n\t} else if (params.selfDeclaration?.type === \"source-statement\") {\n\t\t// 内容来源声明\n\t\tif (params.selfDeclaration.childType === \"self-labeling\") {\n\t\t\t// 已自主标注\n\t\t\tuserDeclarationBind.origin = 3;\n\t\t} else if (params.selfDeclaration.childType === \"self-shooting\") {\n\t\t\t// 自主拍摄\n\t\t\tuserDeclarationBind.origin = 4;\n\t\t\tconst photoInfo: { photoPlace?: unknown; photoTime?: string } = {};\n\n\t\t\tif (params.selfDeclaration.shootingLocation) {\n\t\t\t\t// 拍摄地点\n\t\t\t\tphotoInfo.photoPlace = {\n\t\t\t\t\tname: params.selfDeclaration.shootingLocation.name,\n\t\t\t\t\tpoiId: params.selfDeclaration.shootingLocation.poi_id,\n\t\t\t\t\tpoiType: params.selfDeclaration.shootingLocation.poi_type,\n\t\t\t\t\tsubname: params.selfDeclaration.shootingLocation.full_address,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.selfDeclaration.shootingDate) {\n\t\t\t\t// 拍摄日期\n\t\t\t\tphotoInfo.photoTime = params.selfDeclaration.shootingDate;\n\t\t\t}\n\n\t\t\tuserDeclarationBind.photoInfo = photoInfo;\n\t\t} else if (params.selfDeclaration.childType === \"transshipment\") {\n\t\t\t// 来源转载\n\t\t\tuserDeclarationBind.origin = 5;\n\n\t\t\tif (params.selfDeclaration.sourceMedia) {\n\t\t\t\t// 来源媒体\n\t\t\t\tuserDeclarationBind.repostInfo = {\n\t\t\t\t\tsource: params.selfDeclaration.sourceMedia,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tconst business_binds = {\n\t\tversion: 1,\n\t\tbizType: \"\",\n\t\tnoteId: \"\",\n\t\tnoteOrderBind: {},\n\t\t// 发布时间 - 立即发布/定时发布\n\t\tnotePostTiming: params.isImmediatelyPublish ? {} : { postTime: params.scheduledPublish },\n\t\tnoteCollectionBind: { id: \"\" },\n\t\t...(params.selfDeclaration ? { userDeclarationBind } : {}),\n\t};\n\n\tpublishData.common.business_binds = JSON.stringify(business_binds);\n\n\tconst publishDataStr = xsEncrypt.dumps(publishData);\n\tconst publishXt = Date.now().toString();\n\tconst publishXs = await xsEncrypt.encryptXs(`/web_api/sns/v2/note${publishDataStr}`, a1Cookie, publishXt);\n\n\t// 发布\n\tconst publishResult = await http.api<CommonResponse<{ id: string }>>({\n\t\tmethod: \"post\",\n\t\turl: \"https://edith.xiaohongshu.com/web_api/sns/v2/note\",\n\t\tdata: publishData,\n\t\theaders: {\n\t\t\t\"x-s\": publishXs,\n\t\t\t\"x-t\": publishXt,\n\t\t},\n\t\tdefaultErrorMsg: \"文章发布异常,请稍后重试。\",\n\t});\n\n\treturn success(publishResult.data?.id);\n};\n","import path from \"node:path\";\nimport type { CookieMap, Locator, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport { XsEncrypt } from \"../../utils/xhsXsEncrypt\";\nimport type { PublishAction } from \"./index\";\n\n// 小红书参数加密器\nconst xsEncrypt = new XsEncrypt();\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsameSite: \"lax\",\n\t\tsecure: false,\n\t\tdomain: \"xiaohongshu.com\",\n\t\turl: \"https://creator.xiaohongshu.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl: params.url || \"https://creator.xiaohongshu.com/publish/publish\",\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst interceptUrls = [\n\t\t'/api/media/v1/upload/creator/permit',\n\t\t'/api/galaxy/v2/creator/activity_center/list',\n\t\t'/web_api/sns/v5/creator/topic/template/list',\n\t\t'/web_api/sns/v5/creator/file/encryption',\n\t\t'/web_api/sns/v2/note'\n\t];\n\t \n\tawait page.route('**', async (route, request) => {\n\t\tconst url = request.url();\n\t\tif (interceptUrls.some(pattern => url.includes(pattern))) {\n\t\t\tconst urlObj = new URL(url);\n\t\t\tconst fetchCoverUrl = urlObj.pathname + urlObj.search;\n\t\t\tconst xt = Date.now().toString();\n\n\t\t\tconst a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n\t\t\tif (!a1Cookie) {\n\t\t\t\tawait route.fulfill({\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\tcontentType: 'application/json',\n\t\t\t\t\tbody: JSON.stringify({ code: 200, message: \"账号数据异常,请重新绑定账号后重试。\", data: \"\" })\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isNoteRequest = urlObj.pathname.includes(interceptUrls[4]);\n\n\t\t\tconst xs = await (isNoteRequest \n\t\t\t\t? (async () => {\n\t\t\t\t\tconst publishData = JSON.parse(request.postData() || \"\")\n\t\t\t\t\tconst publishDataStr = xsEncrypt.dumps(publishData);\n\t\t\t\t\t\n\t\t\t\t\treturn xsEncrypt.encryptXs(interceptUrls[4]+publishDataStr, a1Cookie, xt);\n\t\t\t\t })(): xsEncrypt.encryptXs(fetchCoverUrl, a1Cookie, xt))\n\n\t\t\n\t\t\tconst newHeaders = {\n\t\t\t\t...request.headers(),\n\t\t\t\t'x-s': xs\n\t\t\t};\n\t\t\n\t\t\tawait route.continue({ headers: newHeaders });\n\t\t}else {\n\t\t\tawait route.continue();\n\t\t}\n\t});\n\n\n\t// 通用的选择地点\n\tconst selectAddress = async (selector: Locator, address: string) => {\n\t\tconst instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n\t\tawait instance.click();\n\t\tawait instance.locator(\"input\").fill(address);\n\t\tconst poperInstance = page.locator('.d-popover:not([style*=\"display: none\"]) .d-options .d-grid-item');\n\t\tawait poperInstance.first().waitFor();\n\t\tawait poperInstance.first().click();\n\t};\n\n\t// 通用的选择日期\n\tconst selectDate = async (selector: string | Locator, date: string) => {\n\t\tconst instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n\t\tawait instance.click();\n\t\tawait instance.fill(date);\n\t\tawait instance.blur();\n\t};\n\n\t// 查找显示的 popover 弹窗\n\tconst getPoperInstance = async (): Promise<Locator> => {\n\t\tawait page.waitForTimeout(500);\n\t\tconst elements = page.locator(\".d-popover\");\n\t\tconst count = await elements.count();\n\t\tconst visibleElements: (typeof elements)[] = [];\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst element = elements.nth(i);\n\t\t\tconst style = await element.getAttribute(\"style\");\n\t\t\tif (style && !style.includes(\"display: none\")) {\n\t\t\t\tvisibleElements.push(element);\n\t\t\t}\n\t\t}\n\n\t\tif (visibleElements.length > 0) {\n\t\t\treturn visibleElements[visibleElements.length - 1];\n\t\t}\n\n\t\tthrow new Error(\"未找到 popover 弹窗\");\n\t};\n\n\t// 查找显示的 dialog 弹窗\n\tconst getDialogInstance = async (): Promise<Locator> => {\n\t\tawait page.waitForTimeout(1000);\n\t\tconst elements = page.locator(\".el-dialog\");\n\t\treturn elements.last();\n\t};\n\n\t// 自动化脚本\n\t// ----------------------------------------------------------------------------------\n\n\t// 等待登录成功\n\ttry {\n\t\tawait page.waitForSelector(\"#CreatorPlatform\", { state: \"visible\" });\n\t} catch (error) {\n\t\treturn { code: 400, message: \"登录失效\", data: page.url() };\n\t}\n\n\t// 跳转到发布页面\n\tawait page.locator(\"#content-area .menu-container .publish-video a\").click();\n\n\t// 点击上传图文\n\tawait page\n\t\t.locator('.creator-container .header .creator-tab:not([style*=\"-9999px\"]) .title')\n\t\t.filter({ hasText: /^上传图文$/ })\n\t\t.click();\n\n\t// 获取待上传图片的本地路径\n\tconst images = await Promise.all(\n\t\tparams.banners.map((url) => {\n\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t}),\n\t);\n\n\t// 选择文件\n\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\tawait page.getByRole(\"textbox\").click();\n\tconst fileChooser = await fileChooserPromise;\n\tawait fileChooser.setFiles(images);\n\n\t// 填写标题\n\tconst titleInstance = page.locator(\".input.titleInput input\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 填写正文\n\tconst descInstance = page.locator(\".editor-container #quillEditor .ql-editor\");\n\tawait descInstance.click();\n\tawait descInstance.fill(params.content);\n\n\t// 滚动到底部\n\tconst container = page.locator(\".creator-container .content .scroll-content\");\n\tawait container.focus();\n\tawait page.mouse.wheel(0, 500); // 向下滚动 500 像素\n\n\tif (params.address) {\n\t\t// 填写地点\n\t\tawait selectAddress(\n\t\t\tpage.locator(\".media-extension .address-input\").filter({ hasText: \"添加地点\" }),\n\t\t\tparams.address.name,\n\t\t);\n\t}\n\n\tif (params.selfDeclaration) {\n\t\t// 自主声明\n\t\tawait page.locator(\".media-settings .flexbox\").filter({ hasText: \"自主声明\" }).locator(\".d-select-wrapper\").click();\n\t\tconst poperInstance = await getPoperInstance();\n\t\tconst selfDeclarationInstance = poperInstance.locator(\".d-options .d-option\");\n\t\tif (params.selfDeclaration.type === \"fictional-rendition\") {\n\t\t\tawait selfDeclarationInstance.filter({ hasText: \"虚构演绎,仅供娱乐\" }).click();\n\t\t} else if (params.selfDeclaration.type === \"ai-generated\") {\n\t\t\tawait selfDeclarationInstance.filter({ hasText: \"笔记含AI合成内容\" }).click();\n\t\t} else if (params.selfDeclaration.type === \"source-statement\") {\n\t\t\tawait selfDeclarationInstance.filter({ hasText: /内容来源声明/ }).click();\n\t\t\t// 内容来源声明二级菜单\n\t\t\tconst selfDeclarationSecondaryMenuInstance = (await getPoperInstance()).locator(\".d-options .d-option\");\n\t\t\t// 等待元素出现\n\t\t\tawait selfDeclarationSecondaryMenuInstance.first().waitFor();\n\t\t\tif (params.selfDeclaration.childType === \"self-labeling\") {\n\t\t\t\tawait selfDeclarationSecondaryMenuInstance.filter({ hasText: \"已在正文中自主标注\" }).click();\n\t\t\t} else if (params.selfDeclaration.childType === \"self-shooting\") {\n\t\t\t\tconst { shootingDate, shootingLocation } = params.selfDeclaration;\n\t\t\t\tawait selfDeclarationSecondaryMenuInstance.filter({ hasText: \"自主拍摄\" }).click();\n\t\t\t\t// 自主拍摄弹窗\n\t\t\t\tconst selfShootingPopup = await getDialogInstance();\n\t\t\t\tconst hasCustomContent = shootingDate || shootingLocation;\n\n\t\t\t\t// 选择拍摄地点\n\t\t\t\tif (shootingLocation) {\n\t\t\t\t\tawait selectAddress(selfShootingPopup.locator(\".address-input\"), shootingLocation.name);\n\t\t\t\t}\n\t\t\t\t// 选择拍摄日期\n\t\t\t\tif (shootingDate) {\n\t\t\t\t\tawait selectDate(selfShootingPopup.locator(\".date-picker input\"), shootingDate);\n\t\t\t\t}\n\n\t\t\t\tawait selfShootingPopup\n\t\t\t\t\t.locator(\"footer button\")\n\t\t\t\t\t.filter({ hasText: hasCustomContent ? \"确认\" : \"取消\" })\n\t\t\t\t\t.click();\n\t\t\t} else if (params.selfDeclaration.childType === \"transshipment\") {\n\t\t\t\tawait selfDeclarationSecondaryMenuInstance.filter({ hasText: \"来源转载\" }).click();\n\t\t\t\t// 来源媒体弹窗\n\t\t\t\tconst selfShootingPopup = await getDialogInstance();\n\n\t\t\t\tconst sourceMedia = params.selfDeclaration.sourceMedia;\n\t\t\t\tif (sourceMedia) {\n\t\t\t\t\tawait selfShootingPopup.locator(\".el-input input\").fill(sourceMedia);\n\t\t\t\t}\n\n\t\t\t\tawait selfShootingPopup\n\t\t\t\t\t.locator(\"footer button\")\n\t\t\t\t\t.filter({ hasText: sourceMedia ? \"确认\" : \"取消\" })\n\t\t\t\t\t.click();\n\t\t\t}\n\t\t}\n\t}\n\n\t// 可见范围 - 仅自己可见\n\tif (params.visibleRange === \"private\") {\n\t\tawait page.locator(\".media-settings .flexbox\").filter({ hasText: \"可见范围\" }).locator(\".d-select-wrapper\").click();\n\t\tconst poperInstance = await getPoperInstance();\n\t\tawait poperInstance.locator(\".d-options .custom-option\").filter({ hasText: \"仅自己可见\" }).click();\n\t}\n\n\tconst releaseTimeInstance = page\n\t\t.locator(\"label\")\n\t\t.filter({ hasText: params.isImmediatelyPublish ? \"立即发布\" : \"定时发布\" });\n\tawait releaseTimeInstance.click();\n\n\tif (params.scheduledPublish) {\n\t\t// 自定义发布时间\n\t\tawait selectDate(\".date-picker input\", params.scheduledPublish);\n\t}\n\n\tconst response = await new Promise<string>((resolve) => {\n\t\t// 定义响应处理函数\n\t\tconst handleResponse = async (response: Response) => {\n\t\t\tif (response.url().includes(\"/web_api/sns/v2/note\")) {\n\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\tresolve(jsonResponse?.data?.id);\n\t\t\t}\n\t\t};\n\n\t\t// 开始监听响应事件\n\t\tpage.on(\"response\", handleResponse);\n\n\t\tpage.locator(\".submit .publishBtn\").click();\n\t});\n\n\t// 关闭页面\n\tawait page.close();\n\n\treturn success(response);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams, Xiaohongshu } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ninterface FictionalRendition {\n\ttype: \"fictional-rendition\"; // 虚拟演绎,仅供娱乐\n}\n\ninterface AIGenerated {\n\ttype: \"ai-generated\"; // 笔记含AI合成内容\n}\n\ninterface SourceStatement {\n\ttype: \"source-statement\"; // 内容来源声明\n\tchildType: \"self-labeling\" | \"self-shooting\" | \"transshipment\"; // 已自主标注 / 自助拍摄 / 转载\n\tshootingLocation?: Xiaohongshu.Location; // 拍摄地点\n\tshootingDate?: string; // 拍摄日期\n\tsourceMedia?: string; // 来源媒体\n}\n\ntype SelfDeclaration = FictionalRendition | AIGenerated | SourceStatement;\n\nexport interface XiaohongshuPublishParams extends ActiomCommonParams {\n\tbanners: string[]; // 图片\n\ttitle: string; // 标题\n\tcontent: string; // 正文\n\taddress?: Xiaohongshu.Location; // 地点\n\tselfDeclaration?: SelfDeclaration; // 自主声明\n\tvisibleRange: \"public\" | \"private\"; // 可见范围\n\tisImmediatelyPublish?: boolean; // 是否立即发布\n\tscheduledPublish?: string; // 定时发布时间\n}\n\nexport type PublishAction = CommonAction<XiaohongshuPublishParams, string>;\n\nexport const xiaohongshuPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import type { AutomateTask, CommonAction, ResponseData } from \"@iflyrpa/share\";\nimport { type BaijiahaoPublishParams, baijiahaoPublish } from \"./actions/baijiahaoPublish\";\nimport { type GetBaijiahaoActivityParams, getBaijiahaoActivity } from \"./actions/getBaijiahaoActivity\";\nimport { type GetToutiaoConfigParams, getToutiaoConfig } from \"./actions/getToutiaoConfig\";\nimport { type SearchToutiaoTopicListParams, searchToutiaoTopicList } from \"./actions/searchToutiaoTopicList\";\nimport { searchXiaohongshuLocation, type searchXiaohongshuLocationParams } from \"./actions/searchXiaohongshuLocation\";\nimport { type ToutiaoPublishParams, toutiaoPublish } from \"./actions/toutiaoPublish\";\nimport { type WeitoutiaoPublishParams, weitoutiaoPublish } from \"./actions/weitoutiaoPublish\";\nimport { type WeixinPublishParams, weixinPublish } from \"./actions/weixinPublish\";\nimport { type WeixinmpPublishParams, weixinmpPublish } from \"./actions/weixinmpPublish\";\nimport { type XiaohongshuPublishParams, xiaohongshuPublish } from \"./actions/xiaohongshuPublish\";\n\nimport type { ActiomCommonParams } from \"./types\";\nimport { stringifyError } from \"./utils\";\nimport { Http } from \"./utils/http\";\n\nexport class Action {\n\tconstructor(private task: AutomateTask) {}\n\n\t// 绑定 task, 并处理异常\n\tprivate async bindTask<T extends ActiomCommonParams, R>(func: CommonAction<T, R>, params: T) {\n\t\tlet responseData: ResponseData<R>;\n\n\t\tif (this.task.setArticleId) {\n\t\t\t// 给所有的日志添加 articleId 标签\n\t\t\tthis.task.setArticleId(params.articleId ?? \"\");\n\t\t}\n\n\t\tif (typeof params === \"object\" && params !== null) {\n\t\t\t// 默认设置 cookies\n\t\t\tparams.cookies = params?.cookies ?? [];\n\t\t}\n\n\t\ttry {\n\t\t\tresponseData = await func(this.task, params);\n\t\t} catch (error) {\n\t\t\tresponseData = Http.handleApiError(error);\n\t\t}\n\n\t\tif (responseData.code === 200) {\n\t\t\t// 表示是由于脚本输入信息错误导致的失败,不是脚本问题\n\t\t\tthis.task.logger.info(`${func.name} action params error`, responseData);\n\t\t} else if (responseData.code !== 0) {\n\t\t\tthis.task.logger.error(\n\t\t\t\tresponseData.message || `${func.name} 执行失败`,\n\t\t\t\tstringifyError(responseData.data),\n\t\t\t\tresponseData.extra,\n\t\t\t);\n\t\t\tthis.task.logger.info(`${func.name} action failed`);\n\t\t} else {\n\t\t\tthis.task.logger.info(`${func.name} action success`);\n\t\t}\n\n\t\treturn responseData;\n\t}\n\n\t// 搜索头条话题列表\n\tsearchToutiaoTopicList(params: SearchToutiaoTopicListParams) {\n\t\treturn this.bindTask(searchToutiaoTopicList, params);\n\t}\n\n\t// 获取头条配置\n\tgetToutiaoConfig(params: GetToutiaoConfigParams) {\n\t\treturn this.bindTask(getToutiaoConfig, params);\n\t}\n\n\t// 百家号发布\n\tbaijiahaoPublish(params: BaijiahaoPublishParams) {\n\t\treturn this.bindTask(baijiahaoPublish, params);\n\t}\n\n\t// 查询百家号活动投稿\n\tgetBaijiahaoActivity(params: GetBaijiahaoActivityParams) {\n\t\treturn this.bindTask(getBaijiahaoActivity, params);\n\t}\n\n\t// 小红书发布\n\txiaohongshuPublish(params: XiaohongshuPublishParams) {\n\t\treturn this.bindTask(xiaohongshuPublish, params);\n\t}\n\n\t// 搜索小红书地址\n\tsearchXiaohongshuLocation(params: searchXiaohongshuLocationParams) {\n\t\treturn this.bindTask(searchXiaohongshuLocation, params);\n\t}\n\n\t// 小绿书发布\n\tweixinmpPublish(params: WeixinmpPublishParams) {\n\t\treturn this.bindTask(weixinmpPublish, params);\n\t}\n\n\t// 微头条发布\n\tweitoutiaoPublish(params: WeitoutiaoPublishParams) {\n\t\treturn this.bindTask(weitoutiaoPublish, params);\n\t}\n\n\t// 头条发布\n\ttoutiaoPublish(params: ToutiaoPublishParams) {\n\t\treturn this.bindTask(toutiaoPublish, params);\n\t}\n\n\t// 微信发布\n\tweixinPublish(params: WeixinPublishParams) {\n\t\treturn this.bindTask(weixinPublish, params);\n\t}\n}\n\ntype ActionInstance = InstanceType<typeof Action>;\n\n// 提取方法的参数类型\ntype MethodParams<T> = {\n\t// biome-ignore lint/suspicious/noExplicitAny: 有使用 any\n\t[K in keyof T]: T[K] extends (...args: any[]) => unknown ? Parameters<T[K]>[0] : never;\n};\n\n// 应用于 Action 类的实例\nexport type ActionMethodParams = MethodParams<ActionInstance>;\n\nexport { version } from \"../package.json\";\n"],"names":["Http","error","config","axios","findError","response","Promise","Object","errorResponse","serverError","getRandomInRange","min","max","Math","getFileState","filePath","filename","path","fileType","mime","stats","fs","fileSize","lastModifiedDate","calculateCropCoordinates","width","height","aspectRatio","targetRatio","cropWidth","cropHeight","x1","y1","x2","y2","extractImgTag","html","srcList","parser","Parser","name","attributes","replaceImgSrc","callback","lastedHtml","isImageTag","node","traverseDom","DomUtils","child","handler","DomHandler","dom","console","domSerializer","stringifyError","Error","JSON","executeAction","actions","task","params","result","index","action","copyHtmlToClipboard","page","options","htmlContent","format","blob","Blob","navigator","ClipboardItem","div","document","range","selection","window","PopupListener","popupSelector","popKey","buttonSelector","checkInterval","stopAfterClick","popup","button","intervalId","setInterval","clearInterval","err","parseUrlQueryString","url","queryStringObject","queryString","queryWithoutHash","queryStringArray","item","equalIndex","key","value","decodeURIComponent","e","defaultParams","defaults","errnoMap","mockAction","baijiahaoSingleCover","baijiahaoMultCover","baijiahaoCoverType","tmpCachePath","http","it","msgType","errmsg","appIdInfo","appId","uploadImages","_images","images","fileName","getFilenameFromUrl","image","downloadImage","formData","FormData","res","originContentImages","targetContentImages","content","idx","vertical_cover","horizontalCoverUrl","horizontalCoverRes","cover_images","_cover_images_map","isAi","activityList","cover_layout","activity_list","publishData","isDraft","saveUrl","success","rpaAction","commonCookies","titleInstance","coverFormItem","isSingleCover","coverSelector","coverCount","i","fileChooserPromise","fileChooser","abstractFormItem","settingFormItem","activity","activityFormItem","findActivity","articleId","resolve","handleResponse","jsonResponse","operatorContainer","baijiahaoPublish","getBaijiahaoActivity","_task","cookies","getToutiaoConfig","getSuggestWords","getCityDistrict","getUserRights","suggestWords","cityDistrict","userRights","searchToutiaoTopicList","searchXiaohongshuLocation","get3101DetailError","errorList","message","saveType","toutiaoSingleCover","toutiaoMultCover","toutiaoCoverType","toutiaoOriginal","Array","coverUrl","coverRes","isSingleTitle","location","topics","multiTitleData","title","topicContent","topic","extraData","COVER_TYPE","getAddTypeValue","publishResult","interceptUrls","route","request","URL","pattern","coverTypeValue","coverContainer","coverUrls","coverUploadEle","coverUploadCount","ele","drawerContainer","confirmBtn","locationContainer","poperInstance","adContainer","isAdOptionVisible","exclusiveContainer","toutiaoAd","toutiaoPublish","userInfoRes","imageList","extra","syncData","descInstance","addressFormItem","declarationFormItem","weitoutiaoPublish","scanRetryMaxCount","QuotaType","GET_QRCODE_DEFAULT_ERROR","ignoreErrno","userTypeMap","generatorFormData","data","URLSearchParams","String","checkCopyrightStat","resData","fingerprint","client_time_diff","Number","Date","responseData","cloudImages","localImages","fileState","oriWhitelist","_oriWhitelist","white_list","white_list_user","_user","userInfo_res","userInfo_resJson","writerid","reply_id","getWriterList","getRewardText","_type","rewardbind","rewardBuffer","Buffer","rewardFilePath","Uint8Array","task_id","code","sleep","checkScanResult","_writer","_writer_item","rewardList","matchdID","reward","_reply_item","wxInteractionInfo","_wxInteraction","type","_opt","commentType","replyType","draftData","appMsgId","masssendpage","massSendRes","operation_seq","quota_detail_list","quotaDetail","copyrightStatData","lastData","checkCopyrightStatRes","getTicketResult","getUuidResult","uuid","qrcodeResult","qrcodeBuffer","qrcodeFilePath","randomString","waitQrcodeResultMaxTime","urlParams","urlRewardParams","wxRewardPage","reward_page","isAddRewarder","qrcodeSrc","errorMessage","isAddWord","RegExp","cover","dialog","pic_msg","ori_dialog","ori_dialog_bd","ori_dialog_ft","_target","search_res","search_res_name","undefined","whrite_list","white_td_isadd","btn_isChecked","checkbox","reward_setting","reward_setting_bd","reward_setting_ft","userName","reward_setting_replay","switchAuto","maxAttempts","delayMs","nowCheckTime","attempt","isDisabled","setTimeout","isOneReplay","isCurrentReplay","wxInteraction_setting","wxInteraction_bd","wxInteraction_ft","comment_area","reply_area","commont_rply_opt","poperInput","source","query","startTime","reject","imgUrl","weixinPublish","_params","saveDraft","shareImageInfos","cropResult","colorResponseData","themeColor","cropFormData","cropRatios","cropCoordinates","r","cropCoordinate","cropResponse","sourceText","container","weixinmpPublish","XsEncrypt","crypto","text","textEncoded","cipher","ciphertext","encodedData","decodedData","payload","platform","hexPayload","obj","jsonString","a1","ts","rest","replacer","space","word","xsEncrypt","a1Cookie","fetchCoverUrl","xt","xs","coverIdInfo","coverIds","ossToken","uploadFile","localUrl","ossFileId","fileBuffer","coverInfos","userDeclarationBind","photoInfo","business_binds","publishDataStr","publishXt","publishXs","urlObj","isNoteRequest","newHeaders","selectAddress","selector","address","instance","selectDate","date","getPoperInstance","elements","count","visibleElements","element","style","getDialogInstance","selfDeclarationInstance","selfDeclarationSecondaryMenuInstance","shootingDate","shootingLocation","selfShootingPopup","hasCustomContent","sourceMedia","releaseTimeInstance","xiaohongshuPublish","Action","func"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["webpack://@iflyrpa/actions/./src/utils/ttABEncrypt.js","webpack://@iflyrpa/actions/./src/utils/http.ts","webpack://@iflyrpa/actions/./src/utils/index.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/baijiahaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/getBaijiahaoActivity/index.ts","webpack://@iflyrpa/actions/./src/actions/getToutiaoConfig/index.ts","webpack://@iflyrpa/actions/./src/actions/searchToutiaoTopicList/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXiaohongshuLocation/index.ts","webpack://@iflyrpa/actions/./src/actions/searchXiaohongshuTopicList/index.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/toutiaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weitoutiaoPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/utils.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinPublish/index.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/weixinmpPublish/index.ts","webpack://@iflyrpa/actions/./src/utils/xhsXsEncrypt.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/mock.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/rpa.ts","webpack://@iflyrpa/actions/./src/actions/xiaohongshuPublish/index.ts","webpack://@iflyrpa/actions/./src/index.ts"],"sourcesContent":["let Random = Math.random()\n// let Ts = Date.now();\n// const Random = 0.7897897897897898\nconst Ts = 1749811200000;\n\nclass SM3Hasher {\n constructor() {\n this.reg = new Array(8);\n this.chunk = [];\n this.size = 0;\n this.reset();\n }\n \n reset() {\n this.reg[0] = 1937774191,\n this.reg[1] = 1226093241,\n this.reg[2] = 388252375,\n this.reg[3] = 3666478592,\n this.reg[4] = 2842636476,\n this.reg[5] = 372324522,\n this.reg[6] = 3817729613,\n this.reg[7] = 2969243214,\n this.chunk = [],\n this.size = 0\n }\n \n write(t) {\n var r = \"string\" == typeof t ? function(t) {\n var r = encodeURIComponent(t).replace(/%([0-9A-F]{2})/g, (function(t, r) {\n return String.fromCharCode(\"0x\" + r)\n }\n ))\n , e = new Array(r.length);\n return Array.prototype.forEach.call(r, (function(t, r) {\n e[r] = t.charCodeAt(0)\n }\n )),\n e\n }(t) : t;\n this.size += r.length;\n var e = 64 - this.chunk.length;\n if (r.length < e)\n this.chunk = this.chunk.concat(r);\n else\n for (this.chunk = this.chunk.concat(r.slice(0, e)); this.chunk.length >= 64; )\n this._compress(this.chunk),\n e < r.length ? this.chunk = r.slice(e, Math.min(e + 64, r.length)) : this.chunk = [],\n e += 64\n }\n \n sum(t, r) {\n t && (this.reset(),\n this.write(t)),\n this._fill();\n for (var e = 0; e < this.chunk.length; e += 64)\n this._compress(this.chunk.slice(e, e + 64));\n var n, o, i, u = null;\n if (\"hex\" == r) {\n u = \"\";\n for (e = 0; e < 8; e++)\n u += (n = this.reg[e].toString(16),\n o = 8,\n i = \"0\",\n n.length >= o ? n : i.repeat(o - n.length) + n)\n } else\n for (u = new Array(32),\n e = 0; e < 8; e++) {\n var a = this.reg[e];\n u[4 * e + 3] = (255 & a) >>> 0,\n a >>>= 8,\n u[4 * e + 2] = (255 & a) >>> 0,\n a >>>= 8,\n u[4 * e + 1] = (255 & a) >>> 0,\n a >>>= 8,\n u[4 * e] = (255 & a) >>> 0\n }\n return this.reset(),\n u\n }\n \n _fill() {\n var t = 8 * this.size\n , r = this.chunk.push(128) % 64;\n for (64 - r < 8 && (r -= 64); r < 56; r++)\n this.chunk.push(0);\n for (var e = 0; e < 4; e++) {\n var n = Math.floor(t / 4294967296);\n this.chunk.push(n >>> 8 * (3 - e) & 255)\n }\n for (e = 0; e < 4; e++)\n this.chunk.push(t >>> 8 * (3 - e) & 255)\n }\n \n _compress(t) {\n function br(t, r) {\n return (t << (r %= 32) | t >>> 32 - r) >>> 0\n }\n function wr(t) {\n return 0 <= t && t < 16 ? 2043430169 : 16 <= t && t < 64 ? 2055708042 : void console.error(\"invalid j for constant Tj\")\n }\n function xr(t, r, e, n) {\n return 0 <= t && t < 16 ? (r ^ e ^ n) >>> 0 : 16 <= t && t < 64 ? (r & e | r & n | e & n) >>> 0 : (console.error(\"invalid j for bool function FF\"),\n 0)\n }\n function Or(t, r, e, n) {\n return 0 <= t && t < 16 ? (r ^ e ^ n) >>> 0 : 16 <= t && t < 64 ? (r & e | ~r & n) >>> 0 : (console.error(\"invalid j for bool function GG\"),\n 0)\n }\n if (t.length < 64) {\n console.error(\"compress error: not enough data\");\n return;\n }else{\n for (var r = function(t) {\n for (var r = new Array(132), e = 0; e < 16; e++)\n r[e] = t[4 * e] << 24,\n r[e] |= t[4 * e + 1] << 16,\n r[e] |= t[4 * e + 2] << 8,\n r[e] |= t[4 * e + 3],\n r[e] >>>= 0;\n for (var n = 16; n < 68; n++) {\n var o = r[n - 16] ^ r[n - 9] ^ br(r[n - 3], 15);\n o = o ^ br(o, 15) ^ br(o, 23),\n r[n] = (o ^ br(r[n - 13], 7) ^ r[n - 6]) >>> 0\n }\n for (n = 0; n < 64; n++)\n r[n + 68] = (r[n] ^ r[n + 4]) >>> 0;\n return r\n }(t), e = this.reg.slice(0), n = 0; n < 64; n++) {\n var o = br(e[0], 12) + e[4] + br(wr(n), n)\n , i = ((o = br(o = (4294967295 & o) >>> 0, 7)) ^ br(e[0], 12)) >>> 0\n , u = xr(n, e[0], e[1], e[2]);\n u = (4294967295 & (u = u + e[3] + i + r[n + 68])) >>> 0;\n var a = Or(n, e[4], e[5], e[6]);\n a = (4294967295 & (a = a + e[7] + o + r[n])) >>> 0,\n e[3] = e[2],\n e[2] = br(e[1], 9),\n e[1] = e[0],\n e[0] = u,\n e[7] = e[6],\n e[6] = br(e[5], 19),\n e[5] = e[4],\n e[4] = (a ^ br(a, 9) ^ br(a, 17)) >>> 0\n }\n for (var c = 0; c < 8; c++)\n this.reg[c] = (this.reg[c] ^ e[c]) >>> 0\n }\n }\n }\n\nfunction EnvData2CharCode(postHeader, postData, envData){\n let _tmpa7 = Random * 240 >>0 > 109 ? ((Random * 240 >>0) +2) : Random * 240 >> 0\n let _tmpa8 = Random *255 >>0 &77 |2 |16 |32 |128;\n let Env0 = [\n (Random * 65535 & 255 & 170) | ([1,0,1,15].slice(0,2)[0] & 85),\n (Random * 65535 & 255 & 85) | ([1,0,1,15].slice(0,2)[0] & 170),\n (Random * 65535 >> 8 & 170) | ([1,0,1,15].slice(0,2)[1] & 85),\n (Random * 65535 >> 8 & 85) | ([1,0,1,15].slice(0,2)[1] & 170),\n (_tmpa7 & 170) | ([1,0,1,15].slice(2,4)[0] & 85),\n (_tmpa7 & 85) | ([1,0,1,15].slice(2,4)[0] & 170),\n (_tmpa8 &170) | ([1,0,1,15].slice(2,4)[1] &85),\n (_tmpa8 &85) | ([1,0,1,15].slice(2,4)[1] &170),\n ]\n\n let InitEnv1 = '662|856|1920|977|1920|977|1920|1080|Linux x86_64'.split(\"\").map( char => char.charCodeAt(0))\n let InitEnv2 = ((String(Ts + 3)&255) + ',').split(\"\").map( char => char.charCodeAt(0))\n\n // 创建 SM3Hasher 实例\n const hasher = new SM3Hasher();\n\n const hasherBytes = hasher.sum(hasher.sum(postHeader + 'dhzx'));\n const dataBytes = hasher.sum(hasher.sum(postData + 'dhzx')); \n const envBytes = hasher.sum(envData)\n\n let $Env = [\n 41,\n (Ts - 1721836800000) / 1000 / 60 / 60 / 24 / 14 >> 0, // 1721836800000为固定时间戳\n 6,\n (Ts - Ts +3) & 255, // 此处两个ts理应为差值正数\n Ts&255,\n Ts>>8 &255,\n Ts>>16 &255,\n Ts>>24 &255,\n Ts/256/256/256/256 & 255,\n Ts/256/256/256/256/256 &255,\n Ts/256/256/256/256/256 &255 %256 &255,\n Ts/256/256/256/256/256 &255 %256 &255 /256 &255,\n [1,1,1,0,1][4] &255,\n [1,1,1,0,1][4] >>8 &255,\n [1,1,1,0,1][0],\n [1,1,1,0,1][1],\n [1,1,1,0,1][2],\n [1,1,1,0,1][3],\n 8&255,\n 8 >>8 &255,\n 8 >>16 &255,\n 8 >>24 &255,\n hasherBytes[9],\n hasherBytes[18],\n 3,\n hasherBytes[3],\n dataBytes[10],\n dataBytes[19],\n 4,\n dataBytes[4],\n envBytes[11],\n envBytes[21],\n 5,\n envBytes[5],\n (Ts-1) &255,\n (Ts-1) >>8 &255,\n (Ts-1) >>16 &255,\n (Ts-1) >>24 &255,\n (Ts-1) /256/ 256 / 256 /256 & 255,\n (Ts-1) /256/ 256 / 256 /256 /256 & 255,\n 3, //ddrt 长度\n 25897 &255, //PageId = 25897\n 25897 >>8 &255,\n 25897 >>16 &255,\n 25897 >>24 &255,\n 1231 &255, //aid\n 1231 >>8 &255,\n 1231 >>16 &255,\n 1231 >>24 &255,\n InitEnv1.length,\n InitEnv1.length,\n 0,\n InitEnv2.length,\n InitEnv2.length,\n 0\n ]\n \n let InitEnv0 = [\n $Env[9], $Env[18], $Env[30], $Env[35], $Env[47], $Env[4], $Env[44], $Env[19], $Env[10], $Env[23], $Env[12], $Env[40], $Env[25], $Env[42], $Env[3], $Env[22], $Env[38], $Env[21], $Env[5], $Env[45], $Env[1], $Env[29], $Env[6], $Env[43], $Env[33], $Env[14], $Env[36], $Env[37], $Env[2], $Env[46], $Env[15], $Env[48], $Env[31], $Env[26], $Env[16], $Env[13], $Env[8], $Env[41], $Env[27], $Env[17], $Env[39], $Env[20], $Env[11], $Env[0], $Env[34], $Env[7], $Env[50], $Env[51], $Env[53], $Env[54]\n ]\n\n function delIndex(arr, indexesToDelete) {\n indexesToDelete.sort((a, b) => b - a).forEach(index => {\n if (index >= 0 && index < arr.length) {\n arr.splice(index, 1);\n }\n });\n return arr;\n }\n\n let _env = Env0.concat(delIndex($Env, [24,28,32,49,52]))\n let InitEnv3 = _env.reduce((acc, cur) => acc ^ cur);\n\n\n let InitEnv = InitEnv0.concat(InitEnv1, InitEnv2,InitEnv3)\n\n\n\n let Env1 = []\n for (let i = 0; i<98; ){\n Env1.push((Random * 1000 & 255 & 145) | (InitEnv[i++] & 110))\n Env1.push((Random * 1000 & 255 & 66) | (InitEnv[i++] & 189))\n Env1.push((Random * 1000 & 255 & 44) | (InitEnv[i++] & 211))\n Env1.push((InitEnv[i-3] &145) | (InitEnv[i-2] &66 ) | (InitEnv[i-1] & 44))\n }\n\n let Env = Env0.concat(Env1,InitEnv[InitEnv.length - InitEnv.length%3],InitEnv3);\n return Env.map(code => String.fromCharCode(code)).join('');\n\n}\n\n/**\n * \n * @param {*} CharCode => EnvData2CharCode \n * @returns \n */\nfunction Base2Data(CharCode){\n\n let _Data = [\n ( Random *65535 &255 &170 ) | ([3,82][0] &85),\n ( Random *65535 &255 &85 ) | ([3,82][0] &170),\n ( Random *40 >>0 &170 ) | ([3,82][1] &85),\n ( Random *40 >>0 &85 ) | ([3,82][1] &170),\n \n ].map( (_num) =>{\n return String.fromCharCode(_num)\n }).join('')\n\n let Base = [255,254,253,252,251,250,249,248,247,246,245,244,243,242,241,240,239,238,237,236,235,234,233,232,231,230,229,228,227,226,225,224,223,222,221,220,219,218,217,216,215,214,213,212,211,210,209,208,207,206,205,204,203,202,201,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,168,167,166,165,164,163,162,161,160,159,158,157,156,155,154,153,152,151,150,149,148,147,146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,82,81,80,79,78,77,76,75,74,73,72,71,70,69,68,67,66,65,64,63,62,61,60,59,58,57,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41,40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0]\n const fixedValue = \"Ó\".charCodeAt(0) \n let lastIndex = 0\n for(let i = 0;i < Base.length ;i++){\n let val = Base[i];\n lastIndex = (lastIndex*val + lastIndex + fixedValue)%256 ;\n // 交换Base[i]和Base[k]\n [Base[i], Base[lastIndex]] = [Base[lastIndex], Base[i]];\n }\n\n let _LastIndx = 0;\n let Data = \"\"\n for(let i = 0;i < CharCode.length ;i++){\n let _CodeA = CharCode.charCodeAt(i);\n\n let NowIndex = i+1;\n let NowBase = Base[NowIndex];\n [ Base[NowIndex] , Base[(_LastIndx + NowBase)%256]] = [ Base[(_LastIndx + NowBase)%256], Base[NowIndex] ];\n let _CodeB = Base[(Base[NowIndex] + NowBase)%256];\n _LastIndx = (_LastIndx + NowBase)%256;\n\n Data += String.fromCharCode(_CodeA^_CodeB);\n\n }\n return _Data+Data\n\n}\n\nfunction Data2A_B(CAHR) {\n let Data = 'Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe'\n let result = '';\n let o = [62,298,16,0,4,9,16,0,5,54,0,5,62,299,26,300,54,0,5,62,301,26,302,54,0,5,62,303,26,304,54,0,5,62,305,26,268,54,0,5,62,306,26,296,54,0,5,54,0,3,76,16,0,6,62,36,16,0,7,23,0,16,0,9,54,0,2,4,25,54,0,9,23,3,49,67,14,159,54,0,2,22,4,247,34,0,9,60,12,1,23,255,50,23,16,31,54,0,2,22,4,247,34,0,9,60,12,1,23,255,50,23,8,31,32,54,0,2,22,4,247,34,0,9,60,12,1,23,255,50,32,16,0,8,54,0,7,54,0,6,22,4,103,54,0,8,23,16515072,50,23,18,51,12,1,49,34,0,7,72,43,54,0,7,54,0,6,22,4,103,54,0,8,23,258048,50,23,12,51,12,1,49,34,0,7,72,43,54,0,7,54,0,6,22,4,103,54,0,8,23,4032,50,23,6,51,12,1,49,34,0,7,72,43,54,0,7,54,0,6,22,4,103,54,0,8,23,63,50,12,1,49,34,0,7,72,43,18,-173,54,0,2,4,25,54,0,9,0,23,0,19,14,160,54,0,2,22,4,247,34,0,9,60,12,1,23,255,50,23,16,31,54,0,2,4,25,54,0,9,19,14,19,54,0,2,22,4,247,54,0,9,12,1,23,255,50,23,8,31,18,2,23,0,32,16,0,8,54,0,7,54,0,6,22,4,103,54,0,8,23,16515072,50,23,18,51,12,1,49,34,0,7,72,43,54,0,7,54,0,6,22,4,103,54,0,8,23,258048,50,23,12,51,12,1,49,34,0,7,72,43,54,0,7,54,0,2,4,25,54,0,9,19,14,19,54,0,6,22,4,103,54,0,8,23,4032,50,23,6,51,12,1,18,3,54,0,4,49,34,0,7,72,43,54,0,7,54,0,4,49,34,0,7,72,43,54,0,7,65]\n\n for (let i = 0; i + 2 <= CAHR.length; i += 3) {\n const c = CAHR.charCodeAt(i);\n const b = CAHR.charCodeAt(i + 1);\n const a = CAHR.charCodeAt(i + 2);\n\n const temp = (c << o[94]) | (b << o[112]) | a;\n\n const p1 = (temp & o[147]) >> o[150];\n result+= Data.charAt(p1);\n const p2 = (temp & o[173]) >> o[176];\n result+= Data.charAt(p2);\n const p3 = (temp & o[199]) >> o[202];\n result+= b ? Data.charAt(p3) : \"=\";\n const p4 = temp & o[225];\n result+= a ? Data.charAt(p4) : \"=\";\n }\n\n return result;\n}\n\nfunction GenAB(postHeader, postData) {\n\tconst envData = \"fmUmtNjj1OfTrR716RULEyQaLPrOG1jpZz0/4Tyzr7/IbcOXs8PxVxHmrAIsIMm6IfTserj+JgCbPHUssUmedGKwCrIziubgSU0FT1MmqPOZXcPDGB3xUyq+vaM7HZyYgJtKyMR=\" // ua固定参数\n return Data2A_B(Base2Data(EnvData2CharCode(postHeader, postData, envData)));\n}\n\nmodule.exports = GenAB\n\n","import type { ResponseData } from \"@iflyrpa/share\";\nimport axios, {\n\ttype AxiosError,\n\ttype AxiosInstance,\n\ttype AxiosResponse,\n\ttype CreateAxiosDefaults,\n\ttype AxiosRequestConfig,\n} from \"axios\";\n\nexport class Http {\n\tprivate apiClient: AxiosInstance;\n\n\tstatic handleApiError(error: unknown): ResponseData {\n\t\t// 如果错误已经是 ResponseData 格式,直接抛出\n\t\tif (error && typeof error === \"object\" && \"code\" in error && \"message\" in error) {\n\t\t\treturn error as ResponseData;\n\t\t}\n\n\t\t// 处理其他类型的错误\n\t\treturn {\n\t\t\tcode: 500,\n\t\t\tmessage: \"\",\n\t\t\tdata: error,\n\t\t};\n\t}\n\n\tconstructor(config?: CreateAxiosDefaults) {\n\t\tthis.apiClient = axios.create(config);\n\t}\n\n\t// 添加响应拦截器\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tpublic addResponseInterceptor<T = any>(findError: (response: AxiosResponse<T>) => ResponseData | undefined) {\n\t\tthis.apiClient.interceptors.response.use(\n\t\t\t(response) => {\n\t\t\t\t// 检查响应中的 errno 字段\n\t\t\t\tconst error = findError(response);\n\n\t\t\t\tif (error) {\n\t\t\t\t\treturn Promise.reject(\n\t\t\t\t\t\tObject.assign(error, {\n\t\t\t\t\t\t\textra: {\n\t\t\t\t\t\t\t\tmethod: response.config.method,\n\t\t\t\t\t\t\t\turl: response.config.url,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn response;\n\t\t\t},\n\t\t\t(error: AxiosError) => {\n\t\t\t\t// 创建标准错误响应格式\n\t\t\t\tconst errorResponse: ResponseData = {\n\t\t\t\t\tcode: error.response?.status || 500,\n\t\t\t\t\tmessage: error.message || \"\",\n\t\t\t\t\tdata: error.response?.data,\n\t\t\t\t\textra: {\n\t\t\t\t\t\tmethod: error.config?.method,\n\t\t\t\t\t\turl: error.config?.url,\n\t\t\t\t\t},\n\t\t\t\t};\n\n\t\t\t\t// 如果服务端返回了详细错误信息,可以使用服务端的错误信息\n\t\t\t\tif (error.response?.data) {\n\t\t\t\t\tif (typeof error.response.data === \"object\") {\n\t\t\t\t\t\t// 如果服务端返回的是对象,可以尝试提取错误信息\n\t\t\t\t\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\t\t\t\t\tconst serverError = error.response.data as any;\n\t\t\t\t\t\tif (serverError.message) {\n\t\t\t\t\t\t\terrorResponse.message = serverError.message;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// 可以保留原始错误数据\n\t\t\t\t\t\terrorResponse.data = serverError;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 返回标准化的错误响应\n\t\t\t\treturn Promise.reject(errorResponse);\n\t\t\t},\n\t\t);\n\t}\n\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\tpublic async api<T = any>(config: AxiosRequestConfig): Promise<T> {\n\t\ttry {\n\t\t\tconst response = await this.apiClient<T>(config);\n\t\t\treturn response.data;\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(Http.handleApiError(error));\n\t\t}\n\t}\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { CommonAction, Page, ResponseData } from \"@iflyrpa/share\";\nimport domSerializer from \"dom-serializer\";\nimport { type ChildNode, DomHandler, type Element } from \"domhandler\";\nimport { DomUtils, Parser } from \"htmlparser2\";\nimport mime from \"mime-types\";\n\nimport { Http } from \"./http\";\n\n/**\n * 生成两数之间的随机整数\n * @param min\n * @param max\n * @returns\n */\nexport function getRandomInRange(min: number, max: number) {\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nexport const getFileState = (filePath: string) => {\n\t// 获取文件名\n\tconst filename = path.basename(filePath);\n\t// 获取文件类型\n\tconst fileType = mime.lookup(filePath);\n\tconst stats = fs.statSync(filePath);\n\t// 获取文件大小\n\tconst fileSize = stats.size;\n\t// 获取最后修改时间\n\tconst lastModifiedDate = stats.mtime;\n\n\treturn {\n\t\tname: filename,\n\t\ttype: fileType,\n\t\tsize: fileSize,\n\t\tlastModifiedDate: lastModifiedDate.toString(),\n\t};\n};\n\nexport type AspectRatio = [number, number];\nexport type CropCoordinates = {\n\tx1: number;\n\ty1: number;\n\tx2: number;\n\ty2: number;\n};\n\n/**\n * 获取特定的比例切割图片,获取切割的坐标\n * @param width 图片长度\n * @param height 图片高度\n * @param aspectRatio 切割比例:[宽度,高度]\n * @returns\n */\nexport const calculateCropCoordinates = (width: number, height: number, aspectRatio: AspectRatio): CropCoordinates => {\n\tconst targetRatio = aspectRatio[0] / aspectRatio[1];\n\tlet cropWidth: number;\n\tlet cropHeight: number;\n\n\tif (width / height > targetRatio) {\n\t\t// 图片过宽,需要裁切宽度\n\t\tcropHeight = height;\n\t\tcropWidth = height * targetRatio;\n\t} else {\n\t\t// 图片过高,需要裁切高度\n\t\tcropWidth = width;\n\t\tcropHeight = width / targetRatio;\n\t}\n\n\tconst x1 = (width - cropWidth) / 2;\n\tconst y1 = (height - cropHeight) / 2;\n\tconst x2 = x1 + cropWidth;\n\tconst y2 = y1 + cropHeight;\n\n\t// 返回百分比坐标\n\treturn {\n\t\tx1: x1 / width,\n\t\ty1: y1 / height,\n\t\tx2: x2 / width,\n\t\ty2: y2 / height,\n\t};\n};\n\n// 提取 html 中的 img 标签\nexport const extractImgTag = (html: string) => {\n\tconst srcList: string[] = [];\n\n\tconst parser = new Parser({\n\t\tonopentag(name, attributes) {\n\t\t\tif (name === \"img\" && (attributes.src.trim() || attributes.currentSrc.trim())) {\n\t\t\t\tsrcList.push(attributes.src.trim() || attributes.currentSrc.trim());\n\t\t\t}\n\t\t},\n\t});\n\n\tparser.write(html);\n\tparser.end();\n\n\treturn srcList;\n};\n\nexport const replaceImgSrc = (html: string, callback: (dom: Element) => Element) => {\n\tlet lastedHtml = html;\n\n\tconst isImageTag = (node: ChildNode): node is Element => node.type === \"tag\" && node.name === \"img\";\n\n\tconst traverseDom = (node: ChildNode) => {\n\t\tif (DomUtils.hasChildren(node)) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tif (isImageTag(child)) {\n\t\t\t\t\tcallback(child);\n\t\t\t\t}\n\t\t\t\ttraverseDom(child);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handler = new DomHandler((error, dom) => {\n\t\tif (error) {\n\t\t\tconsole.log(error);\n\t\t} else {\n\t\t\t// 处理 DOM 节点的函数\n\t\t\tdom.forEach(traverseDom);\n\t\t}\n\n\t\tlastedHtml = domSerializer(dom, { decodeEntities: false });\n\t});\n\n\tconst parser = new Parser(handler, { decodeEntities: false });\n\tparser.write(html);\n\tparser.end();\n\n\treturn lastedHtml;\n};\n\nexport const stringifyError = (error: unknown) => {\n\tif (error instanceof Error) {\n\t\treturn error.toString();\n\t}\n\n\tif (typeof error === \"object\") {\n\t\treturn JSON.stringify(error);\n\t}\n\n\treturn error;\n};\n\n/**\n * 创建一个函数,该函数会依次执行传入的函数列表,直到有一个函数成功或所有函数都失败。\n *\n * @template P - 函数的参数类型,为一个任意长度的数组。\n * @template T - 函数的返回类型,为一个 Promise 的解析值类型。\n * @param {CommonAction<P, T>[]} actions - 一个函数列表,每个函数的类型为 `(...p: P) => Promise<T>`。\n * @returns {CommonAction<P, T>} - 返回一个新的函数,其类型与传入的函数列表中的函数类型相同。\n * 当调用该函数时,会依次执行 `actions` 中的函数,直到有一个函数成功(即返回一个解析的 Promise),\n * 或者所有函数都失败(即抛出异常)。如果所有函数都失败,则抛出最后一个错误。\n *\n * @example\n * const action1 = async (num) => {\n * if (num > 0) return \"Action 1 succeeded\";\n * throw new Error(\"Action 1 failed\");\n * };\n *\n * const action2 = async (num) => {\n * if (num > 1) return \"Action 2 succeeded\";\n * throw new Error(\"Action 2 failed\");\n * };\n *\n * const combinedAction = executeAction(action1, action2);\n *\n * (async () => {\n * try {\n * const result = await combinedAction(1);\n * console.log(result); // 输出: \"Action 2 succeeded\"\n * } catch (error) {\n * console.error(error.message);\n * }\n * })();\n */\nexport const executeAction = <P, T>(...actions: CommonAction<P, T>[]): CommonAction<P, T> => {\n\treturn async (task, params) => {\n\t\tlet result: ResponseData<T> = {\n\t\t\tcode: 500,\n\t\t\tmessage: \"\",\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\t\tdata: null as any,\n\t\t};\n\n\t\tfor (let index = 0; index < actions.length; index++) {\n\t\t\tconst action = actions[index];\n\n\t\t\ttry {\n\t\t\t\tresult = await action(task, params);\n\t\t\t} catch (error) {\n\t\t\t\tresult = Http.handleApiError(error);\n\t\t\t}\n\n\t\t\t// code === 0 表示成功, code === 200 虽然表示失败,但是不需要继续执行后续的 action\n\t\t\tif (result.code === 0 || result.code === 200) {\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\t// 不是最后一个 action,上报错误信息\n\t\t\tif (index !== actions.length - 1) {\n\t\t\t\ttask.logger.error(result.message, stringifyError(result.data), result.extra);\n\t\t\t}\n\t\t}\n\n\t\t// 所有 action 都执行完毕但都失败了,返回最后一个失败结果\n\t\treturn result;\n\t};\n};\n\n/**\n * 将 HTML 内容复制到剪贴板\n * @param page - 页面对象\n * @param html - HTML 内容\n * @param options - 选项,包括格式和回退\n * @returns 无返回值\n */\nexport async function copyHtmlToClipboard(page: Page, html: string, options = { format: \"text/html\", fallback: true }) {\n\ttry {\n\t\t// 尝试使用原生 API\n\t\tawait page.evaluate(\n\t\t\tasync ({ htmlContent, format }) => {\n\t\t\t\tconst blob = new Blob([htmlContent], { type: format });\n\t\t\t\tawait navigator.clipboard.write([new ClipboardItem({ [format]: blob })]);\n\t\t\t},\n\t\t\t{ htmlContent: html, format: options.format },\n\t\t);\n\t} catch (error) {\n\t\tif (options.fallback) {\n\t\t\t// 回退到 DOM 操作\n\t\t\tawait page.evaluate((htmlContent) => {\n\t\t\t\tconst div = document.createElement(\"div\");\n\t\t\t\tdiv.contentEditable = \"true\";\n\t\t\t\tdiv.style.cssText = `\n position: fixed;\n left: -9999px;\n opacity: 0;\n pointer-events: none;\n `;\n\n\t\t\t\tdiv.innerHTML = htmlContent;\n\t\t\t\tdocument.body.appendChild(div);\n\n\t\t\t\tconst range = document.createRange();\n\t\t\t\trange.selectNodeContents(div);\n\n\t\t\t\t// biome-ignore lint/style/noNonNullAssertion: <忽略错误>\n\t\t\t\tconst selection = window.getSelection()!;\n\t\t\t\tselection.removeAllRanges();\n\t\t\t\tselection.addRange(range);\n\n\t\t\t\tdocument.execCommand(\"copy\");\n\t\t\t\tdocument.body.removeChild(div);\n\t\t\t\tselection.removeAllRanges();\n\t\t\t}, html);\n\t\t}\n\t}\n}\n\n/**\n * 通用弹窗监听处理器\n * @param page - Playwright 页面对象\n * @param popupSelector - 弹窗的选择器(字符串或 Locator)\n * @param popKey - 弹窗中的唯一键(字符串)\n * @param buttonSelector - 弹窗中需要点击的按钮选择器\n * @param options - 可选配置项\n */\nexport function PopupListener(\n\tpage: Page, \n\tpopupSelector: string, \n\tpopKey: string, \n\tbuttonSelector: string, \n\toptions:{\n\t\tcheckInterval?: number;\n\t\tstopAfterClick?: boolean;\n\t} = {}) {\n\tconst {\n\t\tcheckInterval = 1000,\n\t\tstopAfterClick = false\n\t} = options;\n\n\tconst popup = page.locator(popupSelector);\n\tconst button = page.locator(buttonSelector);\n\n\tconst intervalId = setInterval(async () => {\n\t\ttry {\n\t\t\tif (await popup.count() > 0 && await popup.isVisible() && (await popup.textContent()||\"\").includes(popKey)) {\n\t\t\t\tawait button.click({ force: true });\n\n\t\t\t\tif (stopAfterClick) {\n\t\t\t\t\tclearInterval(intervalId);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) { }\n\t}, checkInterval);\n\n\treturn () => {\n\t\tclearInterval(intervalId);\n\t};\n}\n\n// 将 url 的 queryString 解析成对象\nexport const parseUrlQueryString = (url: string) => {\n\tconst queryStringObject: Record<string, string> = {};\n\n\t// 检查 URL 是否包含查询参数\n\tif (!url || !url.includes(\"?\")) {\n\t\treturn queryStringObject;\n\t}\n\n\t// 提取查询字符串部分\n\tconst queryString = url.split(\"?\")[1];\n\n\t// 检查查询字符串是否为空\n\tif (!queryString) {\n\t\treturn queryStringObject;\n\t}\n\n\t// 处理 hash 部分\n\tconst queryWithoutHash = queryString.split(\"#\")[0];\n\n\t// 分割查询参数\n\tconst queryStringArray = queryWithoutHash.split(\"&\");\n\n\tfor (const item of queryStringArray) {\n\t\t// 跳过空参数\n\t\tif (!item) continue;\n\n\t\tconst equalIndex = item.indexOf(\"=\");\n\n\t\t// 处理没有值的参数 (如 ?param)\n\t\tif (equalIndex === -1) {\n\t\t\tqueryStringObject[item] = \"\";\n\t\t} else {\n\t\t\tconst key = item.slice(0, equalIndex);\n\t\t\tconst value = item.slice(equalIndex + 1);\n\n\t\t\t// 尝试解码,如果解码失败则使用原始值\n\t\t\ttry {\n\t\t\t\tqueryStringObject[key] = decodeURIComponent(value);\n\t\t\t} catch (e) {\n\t\t\t\tqueryStringObject[key] = value;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn queryStringObject;\n};\n\n/**\n * 合并默认参数\n * @param params\n * @param defaults\n * @returns\n */\nexport const defaultParams = <P = Record<string, unknown>>(params: P, defaults: Partial<P>): P => {\n\treturn Object.assign({}, defaults, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\n\nimport type { PublishAction } from \".\";\nimport { extractImgTag, replaceImgSrc } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\n\ninterface CommonResponse<T = unknown> {\n\tdata: T;\n\terrmsg: string;\n\terrno: number;\n}\n\ninterface ImageRetResponse {\n\tbos_url: string;\n\thttps_url: string;\n\tno_waterlog_bos_url: string;\n\torg_url: string;\n}\n\nconst errnoMap: Record<number, string> = {\n\t20040706: \"正文图片和封面图片推荐jpg、png格式。\",\n\t20040084: \"正文图片和封面图片推荐jpg、png格式。\",\n\t20050004: \"今日百家号发布次数已达上限,请明天再试。\",\n\t10000015: \"账号存在异常,需前往百家号平台完成发文验证后可激活使用。\",\n\t20050000: \"操作太频繁,请稍后再试\",\n\t20040027: \"你的账号状态异常,请到百家号平台检查账号状态。\",\n\t10000017: \"账号存在异常,需前往百家号平台完成发文验证后可激活使用。\",\n\t20040033: \"封面图片推荐 jpg、png格式,宽高在372×284-5000×5000 范围内。\",\n\t2004005714: \"网络环境异常,请检查网络后重试发布。\",\n\t401100032: \"异常,请检查图片(如:格式、版权、合规性等)。\",\n\t20040034: \"封面图片推荐jpg、png格式,不支持gif格式。\",\n\t20040124: \"服务器异常,请稍后重试!\"\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst { baijiahaoSingleCover, baijiahaoMultCover, baijiahaoCoverType } = params.settingInfo;\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\ttoken: params.token,\n\t\t},\n\t});\n\n\t// 添加响应拦截器\n\thttp.addResponseInterceptor<CommonResponse>((response) => {\n\t\tconst msgType = params.saveType === \"draft\" ? \"同步\" : \"发布\";\n\n\t\t// 检查响应中的 errno 字段\n\t\tif (response.data.errno !== 0) {\n\t\t\tlet errmsg = response.config.defaultErrorMsg || `文章${msgType}异常,请稍后重试。`;\n\n\t\t\tif (response.data.errno === 20050000) {\n\t\t\t\terrmsg = msgType + errnoMap[response.data.errno];\n\t\t\t}\n\t\t\tif (response.data.errno === 401100032) {\n\t\t\t\terrmsg = `图片${msgType}${errnoMap[response.data.errno]}`;\n\t\t\t} else if (errnoMap[response.data.errno]) {\n\t\t\t\terrmsg = errnoMap[response.data.errno];\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcode: errnoMap[response.data.errno] ? 200 : 500,\n\t\t\t\tmessage: errmsg,\n\t\t\t\tdata: response.data,\n\t\t\t};\n\t\t}\n\t});\n\n\t// 0. 校验登录\n\tawait http.api({\n\t\tmethod: \"get\",\n\t\turl: \"https://baijiahao.baidu.com/pcui/home/index\",\n\t\tdefaultErrorMsg: `百家号登录状态失效,请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n\t});\n\n\t// 1. 获取用户 appId\n\tconst appIdInfo = await http.api<CommonResponse<{ user: { app_id: number } }>>({\n\t\tmethod: \"post\",\n\t\turl: \"https://baijiahao.baidu.com/builder/app/appinfo\",\n\t\tdefaultErrorMsg: \"创建草稿失败,请稍后重试。\",\n\t});\n\n\tconst appId = appIdInfo.data.user.app_id;\n\n\tconst uploadImages = async (_images: string[]) => {\n\t\t// 过滤掉空字符串\n\t\tconst images = _images.filter((url) => !!url && url.trim() !== \"\");\n\n\t\t// 下载图片到本地\n\t\treturn await Promise.all(\n\t\t\timages.map(async (url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\tconst image = await downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append(\"org_file_name\", fileName);\n\t\t\t\tformData.append(\"type\", \"image\");\n\t\t\t\tformData.append(\"app_id\", appId);\n\t\t\t\tformData.append(\"is_waterlog\", \"1\");\n\t\t\t\tformData.append(\"save_material\", \"1\");\n\t\t\t\tformData.append(\"no_compress\", \"0\");\n\t\t\t\tformData.append(\"article_type\", \"news\");\n\t\t\t\tformData.append(\"media\", fs.createReadStream(image));\n\n\t\t\t\tconst res = await http.api<{ ret: ImageRetResponse }>({\n\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\turl: \"https://baijiahao.baidu.com/materialui/picture/uploadProxy\",\n\t\t\t\t\tdata: formData,\n\t\t\t\t\tdefaultErrorMsg:\n\t\t\t\t\t\tparams.saveType === \"draft\" ? \"图片上传异常,请稍后重试同步。\" : \"图片上传异常,请稍后重试发布。\",\n\t\t\t\t});\n\n\t\t\t\treturn res.ret;\n\t\t\t}),\n\t\t);\n\t};\n\n\t// 2. 提取并上传正文中的图片\n\tconst originContentImages = extractImgTag(params.content);\n\tconst targetContentImages = await uploadImages(originContentImages);\n\t// 替换正文中的图片\n\tconst content = replaceImgSrc(params.content, (dom) => {\n\t\tif (dom.attribs.src) {\n\t\t\tconst idx = originContentImages.findIndex((it) => it === dom.attribs.src);\n\t\t\tdom.attribs.src = targetContentImages[idx].bos_url;\n\t\t\tdom.attribs[\"data-bjh-origin-src\"] = targetContentImages[idx].org_url;\n\t\t\tdom.attribs[\"data-bjh-params\"] = targetContentImages[idx].org_url;\n\t\t\tdom.attribs[\"data-bjh-type\"] = \"IMG\";\n\t\t}\n\n\t\treturn dom;\n\t});\n\n\t// 3. 上传竖版封面\n\tlet vertical_cover = params.settingInfo.baijiahaoVerticalCover;\n\tif (vertical_cover) {\n\t\tvertical_cover = (await uploadImages([vertical_cover]))[0].bos_url;\n\t}\n\n\t// 4. 上传横版封面\n\tconst horizontalCoverUrl = baijiahaoCoverType === \"single\" ? [baijiahaoSingleCover] : baijiahaoMultCover;\n\tconst horizontalCoverRes = await uploadImages(horizontalCoverUrl);\n\tconst cover_images = horizontalCoverRes.map((item) => ({\n\t\tsrc: item.bos_url,\n\t\tmachine_chooseimg: 0,\n\t\tisLegal: 0,\n\t}));\n\tconst _cover_images_map = horizontalCoverRes.map((item) => ({\n\t\tsrc: item?.bos_url,\n\t\torigin_src: item?.org_url,\n\t}));\n\n\t// 5. 构造发布数据\n\tconst isAi = params.settingInfo.baijiahaoIsAi.includes(\"isAi\");\n\tconst activityList = params.settingInfo.baijiahaoSelectActivityCache;\n\tconst cover_layout = baijiahaoCoverType === \"single\" ? \"one\" : \"three\";\n\n\tconst activity_list = [\n\t\t...(activityList.length > 0 ? [{ id: `task_${activityList[0]}`, is_checked: 1 }] : []),\n\t\t...(isAi ? [{ id: \"aigc_bjh_status\", is_checked: 1 }] : []),\n\t];\n\n\tconst publishData = {\n\t\ttitle: params.settingInfo.baijiahaoTitle,\n\t\tcontent,\n\t\tvertical_cover,\n\t\tabstract: params.settingInfo.baijiahaoAbstract,\n\t\tcover_layout,\n\t\tcover_images: JSON.stringify(cover_images),\n\t\t_cover_images_map: JSON.stringify(_cover_images_map),\n\t\ttype: \"news\",\n\t\tsource_reprinted_allow: 0,\n\t\tabstract_from: 1,\n\t\tisBeautify: \"false\",\n\t\tusingImgFilter: \"false\",\n\t\tsource: \"upload\",\n\t\tcover_source: \"upload\",\n\t\tactivity_list,\n\t};\n\n\tconst isDraft = params.saveType === \"draft\";\n\n\tconst saveUrl = isDraft\n\t\t? \"https://baijiahao.baidu.com/pcui/article/save?callback=bjhdraft\"\n\t\t: \"https://baijiahao.baidu.com/pcui/article/publish?callback=bjhpublish\";\n\n\tconst res = await http.api<{ ret: { article_id: string } }>({\n\t\tmethod: \"post\",\n\t\turl: saveUrl,\n\t\tdata: publishData,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/x-www-form-urlencoded\",\n\t\t\torigin: \"https://baijiahao.baidu.com\",\n\t\t\treferer: \"https://baijiahao.baidu.com/builder/rc/edit?type=news\",\n\t\t},\n\t\tdefaultErrorMsg: isDraft ? \"文章同步出现异常,请稍后重试。\" : \"文章发布出现异常,请稍后重试。\",\n\t});\n\n\treturn success(res.ret.article_id, \"百家号发布完成。\");\n};\n","import path from \"node:path\";\nimport type { CookieMap, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport { copyHtmlToClipboard } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \"baijiahao.baidu.com\",\n\t\turl: \"https://baijiahao.baidu.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl: params.url || \"https://baijiahao.baidu.com/builder/rc/edit?type=news&is_from_cms=1\",\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\t// 0. 校验登录\n\ttry {\n\t\tawait page.waitForSelector(\".bjh-edit-header\", { state: \"visible\" });\n\t} catch (error) {\n\t\treturn { code: 400, message: \"登录失效\", data: page.url() };\n\t}\n\n\t// 1. 等待编辑器加载出来\n\tawait page.waitForSelector(\".edui-editor-toolbarbox\", { state: \"visible\" });\n\n\t// 2. 关闭纯文本粘贴\n\t// 有个默认开启纯文本粘贴的提示,先关闭\n\tif (await page.locator(\"#_onceTip-news_pasteplain_tip\").isVisible()) {\n\t\tawait page.locator(\"#_onceTip-news_pasteplain_tip .confirm\").click();\n\t}\n\t// 判断是否开启纯文本粘贴,如果开启,点击关闭\n\tif (await page.locator(\".edui-editor-toolbarbox .edui-button.edui-for-pasteplain .edui-state-checked\").isVisible()) {\n\t\tawait page.locator(\".edui-editor-toolbarbox .edui-button.edui-for-pasteplain .edui-state-checked\").click();\n\t}\n\n\t// 3. 填写标题\n\tconst titleInstance = page.locator(\"#ueditor #bjhNewsTitle .input-box textarea\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 4. 填写正文\n\tawait copyHtmlToClipboard(page, params.content);\n\t// 定位目标元素并聚焦\n\tawait page.click(\"#ueditor .edui-editor-iframeholder iframe\");\n\t// 模拟Ctrl+A全选\n\tawait page.keyboard.press(\"Control+A\");\n\t// 模拟Ctrl+V粘贴\n\tawait page.keyboard.press(\"Control+V\");\n\n\t// 等待 1 秒钟(让正文中的图片上传上去)\n\tawait page.waitForTimeout(1000);\n\n\t// 5. 设置封面\n\tconst coverFormItem = page.locator(\".bjh-edit-wrap-set .cheetah-form-item\").nth(0);\n\tconst isSingleCover = params.settingInfo.baijiahaoCoverType === \"single\";\n\tif (isSingleCover) {\n\t\t// 单图\n\t\tawait coverFormItem\n\t\t\t.locator(\".cheetah-form-item-control label.cheetah-radio-wrapper\")\n\t\t\t.filter({ hasText: \"单图\" })\n\t\t\t.click();\n\t} else {\n\t\t// 多图\n\t\tawait coverFormItem\n\t\t\t.locator(\".cheetah-form-item-control label.cheetah-radio-wrapper\")\n\t\t\t.filter({ hasText: \"三图\" })\n\t\t\t.click();\n\t}\n\t// 获取待上传图片的本地路径\n\tconst images = await Promise.all(\n\t\t(isSingleCover ? [params.settingInfo.baijiahaoSingleCover] : params.settingInfo.baijiahaoMultCover).map((url) => {\n\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t}),\n\t);\n\tconst coverSelector = page.locator(\n\t\t\".cheetah-form-item-control .edit-cover-container .cover-list .DraggableTags-tag-drag .coverUploaderView\",\n\t);\n\tconst coverCount = await coverSelector.count();\n\n\tfor (let i = 0; i < coverCount; i++) {\n\t\tconst item = coverSelector.nth(i);\n\t\tconst image = images[i];\n\n\t\t// 滚动到可视区域\n\t\tawait item.evaluate((node) => node.scrollIntoView());\n\n\t\t// 如果已经存在图片,选择更换\n\t\tif (await item.locator(\".actions-wrap\").isVisible()) {\n\t\t\tawait item.locator(\".actions-wrap .action\").filter({ hasText: \"更换\" }).click();\n\t\t} else {\n\t\t\tawait item.click();\n\t\t}\n\n\t\t// 等待弹窗出现\n\t\tawait page.waitForSelector(\".cheetah-modal-root .cheetah-ui-pro-image-modal\", { state: \"visible\" });\n\t\t// 选择本地图片 tab\n\t\tawait page\n\t\t\t.locator(\".cheetah-modal-root .cheetah-ui-pro-image-modal .cheetah-tabs-nav-list .cheetah-tabs-tab\")\n\t\t\t.filter({ hasText: \"本地图片\" })\n\t\t\t.click();\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait page\n\t\t\t.locator(\".cheetah-modal-root .cheetah-ui-pro-image-modal .cheetah-tabs-tabpane-active .cheetah-upload-wrapper\")\n\t\t\t.click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles([image]);\n\t\t// 等待上传完成(可以用去编辑是否可点击来判断)\n\t\t// 等待 button 元素上面的 disabled 属性消失\n\t\tawait page.waitForSelector(\n\t\t\t\".cheetah-modal-root .cheetah-ui-pro-image-modal .cheetah-modal-footer button#imageModalEditBtn[disabled]\",\n\t\t\t{ state: \"detached\" },\n\t\t);\n\t\t// 点击确认关闭弹窗\n\t\tawait page\n\t\t\t.locator(\".cheetah-modal-root .cheetah-ui-pro-image-modal .cheetah-modal-footer button\")\n\t\t\t.filter({ hasText: \"确认\" })\n\t\t\t.click();\n\t\t// 等待 2 秒\n\t\tawait page.waitForTimeout(1000);\n\t}\n\n\t// 6. 摘要\n\tconst abstractFormItem = page\n\t\t.locator(\".bjh-edit-wrap-set .cheetah-form-item\")\n\t\t.nth(1)\n\t\t.locator(\"textarea.cheetah-input\");\n\tawait abstractFormItem.click();\n\tawait abstractFormItem.fill(params.settingInfo.baijiahaoAbstract);\n\n\t// 7. 设置\n\tconst isAi = params.settingInfo.baijiahaoIsAi.includes(\"isAi\");\n\tif (isAi) {\n\t\tconst settingFormItem = page.locator(\".bjh-edit-wrap-set .cheetah-form-item\").nth(5);\n\t\tawait settingFormItem.locator(\"label.cheetah-checkbox-wrapper\").filter({ hasText: \"AI创作声明\" }).click();\n\t}\n\n\t// 8. 活动投稿\n\tif (params.settingInfo.baijiahaoActivity.length > 0 && params.settingInfo.baijiahaoSelectActivityCache.length > 0) {\n\t\tconst activity = params.settingInfo.baijiahaoActivity.filter((it) =>\n\t\t\tparams.settingInfo.baijiahaoSelectActivityCache.includes(it.id),\n\t\t);\n\t\tif (activity.length > 0) {\n\t\t\tconst activityFormItem = page.locator(\".bjh-edit-wrap-set .cheetah-form-item\").nth(3);\n\t\t\tconst name = activity[0].task_name;\n\t\t\tconst findActivity = activityFormItem.locator(\".cheetah-form-item-control\").getByText(name, { exact: true });\n\t\t\tif ((await findActivity.count()) > 0) {\n\t\t\t\tfindActivity.first().locator(\"..\").click();\n\t\t\t}\n\t\t}\n\t}\n\n\t// 9. 保存草稿 / 发布\n\tconst articleId = await new Promise<string>((resolve) => {\n\t\t// 定义响应处理函数\n\t\tconst handleResponse = async (response: Response) => {\n\t\t\tconst url = response.url();\n\t\t\tif (url.includes(\"/pcui/article/save\") || url.includes(\"/pcui/article/publish\")) {\n\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\tresolve(jsonResponse?.ret?.article_id);\n\t\t\t}\n\t\t};\n\n\t\t// 开始监听响应事件\n\t\tpage.on(\"response\", handleResponse);\n\n\t\tconst operatorContainer = page.locator(\".editor-component-operator\");\n\t\tif (params.saveType === \"draft\") {\n\t\t\toperatorContainer.locator(\".op-btn-outter-content\").filter({ hasText: \"存草稿\" }).locator(\"button\").click();\n\t\t} else {\n\t\t\toperatorContainer.locator(\".op-btn-outter-content\").filter({ hasText: \"发布\" }).locator(\"button\").click();\n\t\t}\n\t});\n\n\t// 关闭页面\n\tawait page.close();\n\n\treturn success(articleId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ninterface ActivityData {\n\tid: string;\n\ttask_name: string;\n\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t[key: string]: any;\n}\n\nexport interface BaijiahaoPublishParams extends ActiomCommonParams {\n\tsaveType: \"draft\" | \"publish\"; // 保存成草稿 / 发布\n\ttoken: string;\n\ttitle: string;\n\tcontent: string;\n\tsettingInfo: {\n\t\tbaijiahaoTitle: string; // 标题\n\t\tbaijiahaoCoverType: \"single\" | \"multiple\"; // 封面设置:单图 | 三图\n\t\tbaijiahaoAbstract: string; // 摘要\n\t\tbaijiahaoIsAi: string[]; // 设置\n\t\tbaijiahaoSingleCover: string; // 单图封面\n\t\tbaijiahaoMultCover: string[]; // 三图封面\n\t\tbaijiahaoVerticalCover: string; // 竖版封面\n\t\tbaijiahaoActivity: ActivityData[]; // 活动投稿\n\t\tbaijiahaoSelectActivityCache: string[]; // 选中的活动标签\n\t};\n}\n\nexport type PublishAction = CommonAction<BaijiahaoPublishParams, string>;\n\nexport const baijiahaoPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetBaijiahaoActivityParams extends ActiomCommonParams {\n\ttoken: string;\n}\n\nexport interface ActivityData {\n\tid: string;\n\ttask_name: string;\n}\n\nexport type PublishAction = CommonAction<GetBaijiahaoActivityParams, ActivityData[]>;\n\nexport const getBaijiahaoActivity: PublishAction = async (_task, params) => {\n\tconst cookies = params.cookies ?? [];\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\ttoken: params.token,\n\t\t},\n\t});\n\n\tconst res = await http.api<{ data: { list: ActivityData[] } }>({\n\t\tmethod: \"get\",\n\t\turl: \"https://baijiahao.baidu.com/author/eco/tasksystem/getSquareMissionList\",\n\t\tparams: {\n\t\t\tpage_no: 1,\n\t\t\tpage_size: 18,\n\t\t\tarticle_type: 1,\n\t\t\ttask_attend: 1,\n\t\t\ttask_origin: \"market\",\n\t\t\ttask_type: -1,\n\t\t},\n\t});\n\n\treturn success(res?.data?.list ?? []);\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface GetToutiaoConfigParams extends ActiomCommonParams {}\n\nexport interface GetToutiaoConfigResult {\n\tsuggestWords: Toutiao.Topic[];\n\tcityDistrict: Toutiao.CityDistrict | null;\n\tuserRights: Toutiao.UserRight[];\n}\n\nexport type PublishAction = CommonAction<GetToutiaoConfigParams, GetToutiaoConfigResult>;\n\nexport const getToutiaoConfig: PublishAction = async (_task, params) => {\n\tconst cookies = params.cookies ?? [];\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\treferer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\t},\n\t});\n\n\tconst getSuggestWords = async () => {\n\t\ttry {\n\t\t\tconst res = await http.api<{ code: number; hots: Toutiao.Topic[] }>({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: \"https://mp.toutiao.com/mp/agw/creator_helper/suggest_words\",\n\t\t\t\tparams: { type: 2, words: \"\" },\n\t\t\t});\n\n\t\t\treturn res.code === 0 ? res.hots : [];\n\t\t} catch (error) {\n\t\t\treturn [];\n\t\t}\n\t};\n\n\tconst getCityDistrict = async () => {\n\t\ttry {\n\t\t\tconst res = await http.api<{ status: number; data: Toutiao.CityDistrict }>({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: \"https://mp.toutiao.com/toutiao/normandy/mp/city_district/\",\n\t\t\t});\n\t\t\treturn res.status === 0 ? res.data : null;\n\t\t} catch (error) {\n\t\t\treturn null;\n\t\t}\n\t};\n\n\tconst getUserRights = async () => {\n\t\ttry {\n\t\t\tconst res = await http.api<{ code: number; data: { benefit_level_info_list: Toutiao.UserRight[] } }>({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: \"https://mp.toutiao.com/mp/agw/creator_project/get_benefit_page_info\",\n\t\t\t});\n\t\t\treturn res.code === 0 ? res.data.benefit_level_info_list : [];\n\t\t} catch (error) {\n\t\t\treturn [];\n\t\t}\n\t};\n\n\tconst [suggestWords, cityDistrict, userRights] = await Promise.all([\n\t\tgetSuggestWords(),\n\t\tgetCityDistrict(),\n\t\tgetUserRights(),\n\t]);\n\n\treturn success({ suggestWords, cityDistrict, userRights });\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Toutiao } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchToutiaoTopicListParams extends ActiomCommonParams {\n\tsearchValue: string;\n}\n\nexport type PublishAction = CommonAction<SearchToutiaoTopicListParams, Toutiao.Topic[]>;\n\nexport const searchToutiaoTopicList: PublishAction = async (_task, params) => {\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\treferer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\t},\n\t});\n\n\ttry {\n\t\tconst res = await http.api<{ code: number; recents: Toutiao.Topic[]; hots: Toutiao.Topic[] }>({\n\t\t\tmethod: \"get\",\n\t\t\turl: \"https://mp.toutiao.com/mp/agw/creator_helper/suggest_words\",\n\t\t\tparams: { type: 2, words: params.searchValue },\n\t\t});\n\n\t\tif (res.code === 0) {\n\t\t\treturn success(params.searchValue ? res.recents : res.hots);\n\t\t}\n\n\t\treturn success([]);\n\t} catch (error) {\n\t\treturn success([]);\n\t}\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Xiaohongshu } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface searchXiaohongshuLocationParams extends ActiomCommonParams {\n\tsearchValue: string;\n\tlatitude?: number;\n\tlongitude?: number;\n\tsize?: number;\n\tpage?: number;\n}\n\nexport type PublishAction = CommonAction<searchXiaohongshuLocationParams, Xiaohongshu.Location[]>;\n\nexport const searchXiaohongshuLocation: PublishAction = async (_task, params) => {\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\treferer: \"https://creator.xiaohongshu.com\",\n\t\t\torigin: \"https://creator.xiaohongshu.com\",\n\t\t},\n\t});\n\n\ttry {\n\t\tconst result = await http.api<{ code: number; data: { poi_list: Xiaohongshu.Location[] } }>({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://edith.xiaohongshu.com/web_api/sns/v1/local/poi/creator/search\",\n\t\t\tdata: {\n\t\t\t\tkeyword: params.searchValue,\n\t\t\t\tlatitude: params.latitude ?? 0,\n\t\t\t\tlongitude: params.longitude ?? 0,\n\t\t\t\tpage: params.page ?? 1,\n\t\t\t\tsize: params.size ?? 10,\n\t\t\t\tsource: \"WEB\",\n\t\t\t\ttype: 3,\n\t\t\t},\n\t\t});\n\n\t\treturn success(result.code === 0 ? result.data.poi_list : []);\n\t} catch (error) {\n\t\treturn success([]);\n\t}\n};\n","import { type CommonAction, success } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams, Xiaohongshu } from \"../../types\";\nimport { Http } from \"../../utils/http\";\n\nexport interface SearchXiaohongshuTopicListParams extends ActiomCommonParams {\n\tsearchValue: string;\n}\n\nexport type PublishAction = CommonAction<SearchXiaohongshuTopicListParams, Xiaohongshu.Topic[]>;\n\nexport const searchXiaohongshuTopicList: PublishAction = async (_task, params) => {\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\treferer: \"https://creator.xiaohongshu.com\",\n\t\t\torigin: \"https://creator.xiaohongshu.com\",\n\t\t},\n\t});\n\n try {\n\t\tconst result = await http.api<{ code: number; data: { topic_info_dtos: Xiaohongshu.Topic[] } }>({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://edith.xiaohongshu.com/web_api/sns/v1/search/topic\",\n\t\t\tdata: {\n\t\t\t\tkeyword: params.searchValue,\n\t\t\t\tsuggest_topic_request: {\n\t\t\t\t title: \"\",\n\t\t\t\t desc: `#${params.searchValue}`\n\t\t\t\t},\n\t\t\t\tpage: {\n\t\t\t\t page_size: 20,\n\t\t\t\t page: 1\n\t\t\t\t}\n\t\t\t },\n\t\t\tdefaultErrorMsg: \"话题搜索异常,请稍后重试。\",\n\t\t});\n\n\t\treturn success(result.code === 0 ? result.data.topic_info_dtos : [],'获取话题成功');\n\t} catch (error) {\n\t\treturn success([]);\n\t}\n\n}","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\n\nimport type { Toutiao } from \"../../types\";\nimport { extractImgTag, replaceImgSrc } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport { COVER_TYPE, type PublishAction, getAddTypeValue } from \"./index\";\nconst GenAB = require(\"../../utils/ttABEncrypt\") as (headers: string, data: string) => string;\n\ninterface CommonResponse<T = unknown> {\n\tdata: T;\n\tcode: number;\n\tmessage: string;\n}\n\nconst errnoMap: Record<number, string | string[]> = {\n\t20004020: \"图片上传异常,请重新绑定账号后同步。\",\n\t7115: \"正文图片和封面图片推荐jpg、png格式。\",\n\t100006: \"文章同步异常,请重新绑定账号后重试。\",\n\t3101: [\n\t\t\"今日头条号发布次数已达上限,请明天再试。\",\n\t\t\"头条账号状态异常,需前往头条号完成实名认证。\",\n\t\t\"头条账号状态异常,资料审核未通过,请前往头条号查看。\",\n\t],\n\t2007: \"文章发布失败,声明原创要求正文字数不少于 300 字,请修改后重试。\",\n\t2010: \"无头条广告权限,请修改后重试。\",\n\t3103: \"今日头条号发布次数已达上限,请明天再试。\",\n\t1053: \"正文图片和封面图片推荐jpg、png格式。\",\n\t2005: \"账号无【申明原创】权限,请关闭申明后重试。\",\n\t100004: \"用户未登录或登陆已过期,请重新登陆后重试。\"\n};\nconst generatorFormData = (data: Record<string, unknown>) => {\n\treturn Object.entries(data)\n\t\t.map(([key, value]) => {\n\t\t\tconst encodedKey = encodeURIComponent(key);\n\t\t\tconst encodedValue = encodeURIComponent(String(value));\n\t\t\treturn `${encodedKey}=${encodedValue}`;\n\t\t})\n\t\t.join('&');\n};\nconst get3101DetailError = (errorList: string[], message: string, saveType: string) => {\n\tlet error = \"\";\n\tif (message?.includes(\"当日发文\")) {\n\t\terror = errorList[0];\n\t} else if (message?.includes(\"实名认证\")) {\n\t\terror = errorList[1];\n\t} else if (message?.includes(\"资料审核\")) {\n\t\terror = errorList[2];\n\t}\n\treturn error || (saveType === \"draft\" ? \"文章同步异常,请稍后重试。\" : \"文章发布异常,请稍后重试。\");\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst { toutiaoSingleCover, toutiaoMultCover, toutiaoCoverType, toutiaoOriginal } = params.settingInfo;\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://mp.toutiao.com\",\n\t\t\treferer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\t},\n\t});\n\n\t// 添加响应拦截器\n\thttp.addResponseInterceptor<CommonResponse>((response) => {\n\t\t// 检查响应中的 errno 字段\n\t\tif (response.data?.code !== 0) {\n\t\t\tlet errmsg = \"\";\n\n\t\t\tif (Array.isArray(errnoMap[response.data.code])) {\n\t\t\t\terrmsg = get3101DetailError(errnoMap[response.data.code] as string[], response.data.message, params.saveType);\n\t\t\t} else {\n\t\t\t\terrmsg =\n\t\t\t\t\t(errnoMap[response.data.code] as string) ||\n\t\t\t\t\tresponse.config.defaultErrorMsg ||\n\t\t\t\t\t(params.saveType === \"draft\" ? \"文章同步异常,请稍后重试。\" : \"文章发布异常,请稍后重试。\");\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tcode: errnoMap[response.data.code] ? 200 : 500,\n\t\t\t\tmessage: errmsg,\n\t\t\t\tdata: response.data,\n\t\t\t};\n\t\t}\n\t});\n\n\t// 0. 校验登录\n\tawait http.api({\n\t\tmethod: \"get\",\n\t\turl: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n\t\tdefaultErrorMsg: `头条号登录状态失效,请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n\t});\n\n\tconst uploadImages = async (images: string[]) => {\n\t\t// 下载图片到本地\n\t\treturn await Promise.all(\n\t\t\timages.map(async (url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\tconst image = await downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append(\"image\", fs.createReadStream(image));\n\n\t\t\t\tconst response = await http.api<CommonResponse<Toutiao.ImageData>>({\n\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\turl: \"https://mp.toutiao.com/spice/image?upload_source=20020002&aid=1231&device_platform=web\",\n\t\t\t\t\tdata: formData,\n\t\t\t\t\tdefaultErrorMsg:\n\t\t\t\t\t\tparams.saveType === \"draft\" ? \"图片上传异常,请稍后重试同步。\" : \"图片上传异常,请稍后重试发布。\",\n\t\t\t\t});\n\n\t\t\t\treturn response.data;\n\t\t\t}),\n\t\t);\n\t};\n\n\t// 1. 提取并上传正文中的图片\n\tconst originContentImages = extractImgTag(params.content);\n\tconst targetContentImages = await uploadImages(originContentImages);\n\t// 2. 替换正文中的图片\n\tconst content = replaceImgSrc(params.content, (dom) => {\n\t\tif (dom.attribs.src) {\n\t\t\tconst idx = originContentImages.findIndex((it) => it === dom.attribs.src);\n\t\t\tdom.attribs.src = targetContentImages[idx].image_url;\n\t\t\tdom.attribs.web_uri = targetContentImages[idx].image_uri;\n\t\t\tdom.attribs.img_width = targetContentImages[idx].image_width.toString();\n\t\t\tdom.attribs.image_height = targetContentImages[idx].image_height.toString();\n\t\t\tdom.attribs.image_type = targetContentImages[idx].image_type.toString();\n\t\t\tdom.attribs.mime_type = targetContentImages[idx].image_mime_type;\n\t\t}\n\t\treturn dom;\n\t});\n\n\t// 3. 上传横版封面\n\tconst coverUrl =\n\t\ttoutiaoCoverType === \"single\" ? [toutiaoSingleCover] : toutiaoCoverType === \"multiple\" ? toutiaoMultCover : [];\n\tconst coverRes = await uploadImages(coverUrl);\n\n\t// 4. 构造发布数据\n\tconst isSingleTitle = params.settingInfo.toutiaoTitleType === \"single\";\n\tconst location = params.settingInfo.toutiaoLocation;\n\tconst topics = params.settingInfo.toutiaoTopic || [];\n\n\tconst multiTitleData = params.settingInfo.subTitles.map((title) => ({\n\t\tid: \"0\",\n\t\tvisibility_level: 0,\n\t\tsource: \"author\",\n\t\told_source: \"author\",\n\t\ttext: title,\n\t\tversion: \"author\",\n\t\tai_title: \"\",\n\t}));\n\n\tconst topicContent = topics\n\t\t.map(\n\t\t\t(topic) =>\n\t\t\t\t`<p><a class=\"tteditor-forum\" data-name=\"${topic.word}\" data-id=\"${topic.id}\" data-concern-id=\"${topic.id}\">#${topic.word}#</a ></p >`,\n\t\t)\n\t\t.join(\"\");\n\n\tconst extraData = {\n\t\tcontent_word_cnt: params.settingInfo.cntWord,\n\t\tis_multi_title: isSingleTitle ? 0 : 1,\n\t\tsub_titles: isSingleTitle ? [] : multiTitleData,\n\t\tgd_ext: {\n\t\t\tentrance: \"\",\n\t\t\tfrom_page: \"publisher_mp\",\n\t\t\tenter_from: \"PC\",\n\t\t\tdevice_platform: \"mp\",\n\t\t\tis_message: 0,\n\t\t},\n\t\ttuwen_wtt_trans_flag: \"0\",\n\t\tinfo_source: {\n\t\t\tsource_type: 5,\n\t\t\tsource_link: \"\",\n\t\t\ttime_format: \"\",\n\t\t\tposition: {},\n\t\t},\n\t\t...(location ? { city: location.label, city_code: location.value } : null),\n\t};\n\n\tconst publishData = {\n\t\tarticle_type: 0,\n\t\tsource: 0,\n\t\tsearch_creation_info: '{\"searchTopOne\": 0, \"abstract\": \"\", \"clue_id\": \"\"}',\n\t\ttitle_id: \"\",\n\t\teducluecard: \"\",\n\t\torigin_debut_check_pgc_normal: 1,\n\t\tis_fans_article: 0,\n\t\tgovern_forward: 0,\n\t\tpraise: 0,\n\t\tdisable_praise: 0,\n\t\ttree_plan_article: 0,\n\t\tstar_order_id: \"\",\n\t\tstar_order_name: \"\",\n\t\tcustomer_nick_name: \"\",\n\t\tactivity_tag: 0,\n\t\ttrends_writing_tag: 0,\n\t\tis_refute_rumor: 0,\n\t\tsave: params.saveType === \"publish\" ? 1 : 0,\n\t\ttimer_status: 0,\n\t\ttimer_time: \"\",\n\t\ttitle: params.title,\n\t\tcontent: content + topicContent,\n\t\textra: JSON.stringify(extraData),\n\t\tmp_editor_stat: toutiaoCoverType === \"no\" ? \"{}\" : '{\"image\": %d}',\n\t\tdraft_form_data: JSON.stringify({\n\t\t\tcoverType: COVER_TYPE[toutiaoCoverType],\n\t\t}),\n\t\tpgc_feed_covers: JSON.stringify(\n\t\t\tcoverRes.map((item) => ({\n\t\t\t\tid: \"\",\n\t\t\t\turl: item.image_url,\n\t\t\t\turi: item.image_uri,\n\t\t\t\tic_uri: \"\",\n\t\t\t\tthumb_widt: item.image_width,\n\t\t\t\tthumb_heigh: item.image_height,\n\t\t\t\textra: {\n\t\t\t\t\tfrom_content_uri: \"\",\n\t\t\t\t\tfrom_content: \"0\",\n\t\t\t\t},\n\t\t\t})),\n\t\t),\n\t\tarticle_ad_type: getAddTypeValue(params.settingInfo.toutiaoAd),\n\t\tclaim_origin: toutiaoOriginal.includes(\"original\") ? 1 : 0,\n\t\tclaim_exclusive: toutiaoOriginal.includes(\"exclusive\") ? 1 : 0,\n\t};\n\n\tconst msToken = params.cookies.find((it) => it.name === \"msToken\")?.value;\n\tif (!msToken) {\n\t\treturn { code: 200, message: \"账号数据异常,请重新绑定账号后重试。\", data: \"\" };\n\t}\n\tconst postHeaders = generatorFormData({\n\t\tsource: \"mp\",\n\t\ttype: \"article\",\n\t\taid: 1231,\n\t\tmp_publish_ab_val: 0,\n\t\tmsToken: msToken\n\t})\n\tconst postData = generatorFormData(publishData)\n\tlet a_bogus = GenAB(postHeaders,postData)\n\n\tconst publishResult = await http.api<CommonResponse<{ pgc_id: string }>>({\n\t\tmethod: \"post\",\n\t\turl: `https://mp.toutiao.com/mp/agw/article/publish?${postHeaders}&a_bogus=${a_bogus}`,\n\t\tdata: postData,\n\t\theaders: {\n\t\t\t\"content-type\": \"application/x-www-form-urlencoded\",\n\t\t\t\"user-agent\": \"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\"\n\t\t},\n\t\tdefaultErrorMsg: params.saveType === \"draft\" ? \"文章同步异常,请稍后重试。\" : \"文章发布异常,请稍后重试。\",\n\t});\n\n\treturn success(publishResult.data.pgc_id);\n};\n","import path from \"node:path\";\nimport type { CookieMap, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport { copyHtmlToClipboard, getRandomInRange, PopupListener } from \"../../utils\";\nimport { COVER_TYPE, type PublishAction, getAddTypeValue } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \".toutiao.com\",\n\t\turl: \"https://mp.toutiao.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl: params.url || \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\t// 0. 校验登录\n\ttry {\n\t\tawait page.waitForSelector(\".publish-editor\", { state: \"visible\" });\n\t} catch (error) {\n\t\treturn {\n\t\t\tcode: 400,\n\t\t\tmessage: `头条号登录状态失效,请重新绑定账号后${params.saveType === \"draft\" ? \"同步\" : \"发布\"}。`,\n\t\t\tdata: page.url(),\n\t\t};\n\t}\n\n\tconst interceptUrls = [\n\t\t'/mp/agw/article/publish'\n\t];\n\t \n\tawait page.route('**', async (route, request) => {\n\t\tconst url = new URL(request.url()); \n\t\tif (interceptUrls.some(pattern => url.pathname.includes(pattern))) {\n\t\t\turl.searchParams.set('aid', '1'); \n\t\n\t\t\tawait route.continue({ url: url.toString() });\n\t\t} else {\n\t\t\tawait route.continue();\n\t\t}\n\t});\n\n\t//弹窗监听检测\n\tPopupListener(page,'.byte-modal.publish-exclusive-modal .title',\"激励\", '.byte-modal-close-icon', \n\t{\n\t\tcheckInterval: 1000,\n\t\tstopAfterClick: false\n\t})\n\t\n\t// 1. 填写标题\n\tconst titleInstance = page.locator(\".publish-editor-title-wrapper .publish-editor-title textarea\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 2. 填写正文\n\tawait copyHtmlToClipboard(page, params.content);\n\t// 定位目标元素并聚焦\n\tawait page.click(\".publish-editor .syl-editor-wrap .ProseMirror\");\n\t// 模拟Ctrl+V粘贴\n\tawait page.keyboard.press(\"Control+V\");\n\n\t// 3. 封面\n\tconst coverTypeValue = COVER_TYPE[params.settingInfo.toutiaoCoverType];\n\tconst coverContainer = page.locator(\".form-container .edit-cell\").filter({ hasText: \"展示封面\" });\n\t// 滚动到可视区域\n\tawait coverContainer.evaluate((node) => node.scrollIntoView());\n\tawait coverContainer.locator(`.article-cover label.byte-radio:has(input[value=\"${coverTypeValue}\"])`).click();\n\n\tlet coverUrls: string[] = [];\n\tif (params.settingInfo.toutiaoCoverType === \"single\") {\n\t\tcoverUrls = [params.settingInfo.toutiaoSingleCover];\n\t} else if (params.settingInfo.toutiaoCoverType === \"multiple\") {\n\t\tcoverUrls = params.settingInfo.toutiaoMultCover;\n\t}\n\t// 获取待上传图片的本地路径\n\tconst images = await Promise.all(\n\t\tcoverUrls.map((url) => {\n\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t}),\n\t);\n\n\tconst coverUploadEle = coverContainer\n\t\t.locator(\".article-cover .article-cover-images\")\n\t\t.locator(\".article-cover-img-wrap, .article-cover-add\");\n\tconst coverUploadCount = await coverUploadEle.count();\n\n\tfor (let i = 0; i < coverUploadCount; i++) {\n\t\tif (!images[i]) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst ele = coverUploadEle.nth(i);\n\t\t// 如果存在图片则替换\n\t\tif ((await ele.locator(\"img\").count()) > 0) {\n\t\t\tawait ele.locator(\".article-cover-img-menu a\").filter({ hasText: \"替换\" }).click();\n\t\t} else {\n\t\t\t// 如果不存在图片则点击上传\n\t\t\tawait ele.click();\n\t\t}\n\n\t\t// 上传图片\n\t\tconst drawerContainer = page.locator(\".byte-drawer-wrapper:not(.byte-drawer-wrapper-hide)\");\n\t\tawait drawerContainer.locator(\".byte-tabs-header .byte-tabs-header-title\").filter({ hasText: \"上传图片\" }).click();\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait page.waitForTimeout(200);\n\t\tawait drawerContainer.locator(\".upload-image-panel button.byte-btn\").filter({ hasText: \"本地上传\" }).click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles([images[i]]);\n\n\t\t// 等待上传完成\n\t\tconst confirmBtn = drawerContainer\n\t\t\t.locator(\".footer .confirm-btns button:not(.byte-btn-disabled)\")\n\t\t\t.filter({ hasText: \"确定\" });\n\t\tawait confirmBtn.waitFor({ state: \"visible\" });\n\t\tawait confirmBtn.click();\n\n\t\tawait page.waitForTimeout(getRandomInRange(500, 1000));\n\t}\n\n\t// 4. 添加位置\n\tif (params.settingInfo.toutiaoLocation) {\n\t\tconst locationContainer = page.locator(\".form-container .edit-cell\").filter({ hasText: \"添加位置\" });\n\t\tawait locationContainer.locator(\".position-select\").click();\n\t\tawait locationContainer\n\t\t\t.locator(\".position-select .byte-select-view-search input\")\n\t\t\t.fill(params.settingInfo.toutiaoLocation.label);\n\t\tconst poperInstance = page.locator(\".byte-trigger .byte-select-popup .byte-select-option\");\n\t\tawait poperInstance.first().waitFor();\n\t\tawait poperInstance.first().click();\n\t}\n\n\t// 5. 投放广告\n\tconst adContainer = page\n\t\t.locator(\".form-container .edit-cell .edit-label\")\n\t\t.filter({ hasText: \"投放广告\" })\n\t\t.locator(\"xpath=..\");\n\n\t// 判断是否存在投放广告的选项\n\tconst isAdOptionVisible = await adContainer.isVisible();\n\n\tif (isAdOptionVisible) {\n\t\t// 获取元素的父元素句柄并点击\n\t\tawait adContainer\n\t\t\t.locator(`label.byte-radio:has(input[value=\"${getAddTypeValue(params.settingInfo.toutiaoAd)}\"])`)\n\t\t\t.click();\n\t}\n\n\t// 6. 声明首发\n\tif (params.settingInfo.toutiaoOriginal.includes(\"exclusive\")) {\n\t\tconst exclusiveContainer = page\n\t\t\t.locator(\".form-container .edit-cell .edit-label\")\n\t\t\t.filter({ hasText: \"声明首发\" })\n\t\t\t.locator(\"xpath=..\");\n\t\texclusiveContainer.locator(\".exclusive .exclusive-checkbox-wraper .byte-checkbox\").click();\n\t}\n\n\t// 7. 保存草稿 / 发布\n\tconst articleId = await new Promise<string>((resolve) => {\n\t\t// 定义响应处理函数\n\t\tconst handleResponse = async (response: Response) => {\n\t\t\tconst url = response.url();\n\t\t\tif (url.includes(\"/mp/agw/article/publish\")) {\n\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\tresolve(jsonResponse.data.pgc_id);\n\n\t\t\t}\n\t\t};\n\n\t\t// 开始监听响应事件\n\t\tpage.on(\"response\", handleResponse);\n\t\t// 保存草稿\n\t\tpage.locator(\".publish-footer button\").filter({ hasText: \"预览并发布\" }).click();\n\t});\n\n\tif(params.settingInfo.toutiaoAd == 'no'){\n\t\tawait page.waitForTimeout(200);\n\t\tconst confirmBtn = page.locator('div.byte-modal-footer button.byte-btn-primary:has-text(\"确定\")');\n\t\tif (await confirmBtn.isVisible()) {\n\t\t await confirmBtn.click();\n\t\t}\n\t}\n\t\n\tif (params.saveType === \"publish\") {\n\t\tawait page.locator(\".publish-footer button\").filter({ hasText: \"确认发布\" }).waitFor({ state: \"visible\" });\n\t\tawait page.waitForTimeout(200);\n\t\tawait page.locator(\".publish-footer button\").filter({ hasText: \"确认发布\" }).click();\n\t}\n\n\t// 关闭页面\n\tawait page.close();\n\n\treturn success(articleId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ntype CoverType = \"single\" | \"multiple\" | \"no\";\n\nexport interface ToutiaoPublishParams extends ActiomCommonParams {\n\tsaveType: \"draft\" | \"publish\"; // 保存成草稿 / 发布\n\ttitle: string;\n\tcontent: string;\n\tsettingInfo: {\n\t\ttoutiaoCoverType: CoverType;\n\t\ttoutiaoTitleType: \"single\" | \"multiple\";\n\t\ttoutiaoSingleCover: string;\n\t\ttoutiaoMultCover: string[];\n\t\ttoutiaoAd: string; // 广告配置 - 投放广告/不投放广告\n\t\ttoutiaoOriginal: string; // 作品声明\n\t\t// biome-ignore lint/suspicious/noExplicitAny: <explanation>\n\t\ttoutiaoLocation?: { label: string; value: string; [key: string]: any }; // 位置\n\t\ttoutiaoTopic: { id: string; word: string }[]; // 话题\n\t\tcntWord: number;\n\t\tsubTitles: string[]; // 多标题\n\t};\n}\n\nexport const COVER_TYPE: Record<CoverType, number> = {\n\tno: 1,\n\tsingle: 2,\n\tmultiple: 3,\n};\n\nexport const getAddTypeValue = (toutiaoAd: ToutiaoPublishParams[\"settingInfo\"][\"toutiaoAd\"]) =>\n\ttoutiaoAd === \"yes\" ? 3 : 2;\n\nexport type PublishAction = CommonAction<ToutiaoPublishParams, string>;\n\nexport const toutiaoPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport { Http } from \"../../utils/http\"\n\nimport type { PublishAction } from \".\";\nimport type { Toutiao } from \"../../types\";\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://mp.toutiao.com\",\n\t\t\treferer: \"https://mp.toutiao.com/profile_v4/graphic/publish\",\n\t\t},\n\t});\n\n\t// 0. 校验登录\n\tconst userInfoRes = await http.api<{ code: number }>({\n method: \"get\",\n url: \"https://mp.toutiao.com/mp/agw/creator_center/user_info\",\n });\n\n\tif (userInfoRes.code !== 0) {\n return { code: 0, message: \"登录失效\", data: userInfoRes };\n\t}\n\n\t// 1. 上传图片\n\tconst imageList: string[] = [];\n\tif (params.banners && params.banners.length > 0) {\n\t\tconst images = await Promise.all(\n\t\t\tparams.banners.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\tconst res = await Promise.all(\n\t\t\timages.map(async (it) => {\n\t\t\t\tconst formData = new FormData();\n\t\t\t\tformData.append(\"image\", fs.createReadStream(it));\n\n\t\t\t\tconst response = await http.api<{ data: Toutiao.ImageData }>({\n\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\turl: \"https://mp.toutiao.com/spice/image?upload_source=20020003&aid=1231&device_platform=web\",\n\t\t\t\t\tdata: formData,\n\t\t\t\t});\n\n\t\t\t\treturn response.data;\n\t\t\t}),\n\t\t);\n\n\t\timageList.push(...res.map((it) => it.image_uri));\n\t}\n\n\t// 2. 构造发布数据\n\tconst extra = {\n\t\tadd_music_to_article_flag: \"0\", // 开启配乐\n\t\tclaim_exclusive: \"0\", // 原创&首发声明\n\t\ttuwen_wtt_trans_flag: \"0\",\n\t\tinfo_source: JSON.stringify({\n\t\t\tsource_type: 5,\n\t\t\tsource_author_uid: \"\",\n\t\t\ttime_format: \"\",\n\t\t\tposition: {},\n\t\t}),\n\t\tugc_position: JSON.stringify({\n\t\t\taddress: \"\",\n\t\t\tposition: \"合肥市\",\n\t\t\tcity: \"合肥市\",\n\t\t\tlongitude: 117.227289,\n\t\t\tlatitude: 31.82057,\n\t\t\tpoi_type_code: \"190104\",\n\t\t\tpoi_id: \"22535659123306003\",\n\t\t}),\n\t};\n\n\tconst syncData = {\n\t\tcontent: params.content, // 正文,\n\t\timage_list: imageList, // 图片列表\n\t\tis_fans_article: 2,\n\t\tpre_upload: 1,\n\t\twelfare_card: \"\",\n\t\textra: JSON.stringify(extra),\n\t};\n\n const res = await http.api<any>({\n method: \"post\",\n url: \"https://mp.toutiao.com/mp/agw/article/wtt\",\n data: syncData,\n });\n\n return success(res.data)\n};\n","import path from \"node:path\";\nimport type { CookieMap } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport type { PublishAction } from \"./index\";\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \"mp.toutiao.com\",\n\t\turl: \"https://mp.toutiao.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl: params.url || \"https://mp.toutiao.com/profile_v4/weitoutiao/publish\",\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\tconst tmpCachePath = task.getTmpPath();\n\n\t// 0. 判断是否登录\n\ttry {\n\t\tawait page.waitForSelector(\".publish-box\");\n\t} catch (error) {\n\t\treturn { code: 0, message: \"登录失效\", data: page.url() };\n\t}\n\n\t// 1. 添加正文\n\tconst descInstance = page.locator(\".syl-editor .ProseMirror\");\n\tawait descInstance.click();\n\tawait descInstance.fill(params.content);\n\n\t// 2. 添加图片\n\tif (params.banners && params.banners?.length > 0) {\n\t\tconst images = await Promise.all(\n\t\t\tparams.banners.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait page.locator(\".toolbar .syl-toolbar-tool.weitoutiao-image-plugin\").click();\n\t\tawait page.locator(\".byte-drawer.mp-ic-img-drawer button.byte-btn\").filter({ hasText: \"本地上传\" }).click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles(images);\n\n\t\tawait page.locator(\".byte-drawer.mp-ic-img-drawer .footer button.byte-btn\").filter({ hasText: \"确定\" }).click();\n\t}\n\n\t// 滚动到底部\n\tawait page.mouse.wheel(0, 500); // 向下滚动 500 像素\n\n\t// 3. 添加位置\n\tif (params.address) {\n\t\tconst addressFormItem = page.locator(\".img-form-wrap .form-item-wrap .form-item\").filter({ hasText: \"添加位置\" });\n\t\tawait addressFormItem.locator(\".byte-select\").click();\n\t\tawait addressFormItem.locator(\".byte-select-view-search input\").fill(params.address);\n\t\tconst poperInstance = page.locator(\".byte-trigger .byte-select-popup .byte-select-option\");\n\t\tawait poperInstance.first().waitFor();\n\t\tawait poperInstance.first().click();\n\t}\n\n\t// 4. 作品声明\n\tif (params.declaration) {\n\t\tconst declarationFormItem = page\n\t\t\t.locator(\".img-form-wrap .form-item-wrap .form-item\")\n\t\t\t.filter({ hasText: \"作品声明\" })\n\t\t\t.locator(\".source-info-wrap\");\n\t\tawait declarationFormItem.locator(`.byte-checkbox:has(input[value=\"${params.declaration}\"])`).click();\n\t}\n\n\t// 5. 发布\n\tawait page.locator(\".footer-wrap button.publish-content\").click();\n\n\treturn success(\"\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\n/**\n * 作品声明\n * 1:引用站内\n * 3:引用AI\n * 4:取材网络\n * 5:个人观点,仅供参考\n * 6:虚构演绎,故事经历\n * 7:投资观点,仅供参考\n * 8:健康医疗分享,仅供参考\n */\ntype DeclarationType = 1 | 3 | 4 | 5 | 6 | 7 | 8;\n\nexport interface WeitoutiaoPublishParams extends ActiomCommonParams {\n\tcontent: string;\n\tbanners?: string[];\n\taddress?: string;\n\tdeclaration?: DeclarationType;\n}\n\nexport type PublishAction = CommonAction<WeitoutiaoPublishParams>;\n\nexport const weitoutiaoPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","export const scanRetryMaxCount = 30;\n\nexport const QuotaType = {\n\tNormal: \"kQuotaTypeMassSendNormal\",\n\tProductActivity: \"kQuotaTypeMassSendProductActivity\",\n};\n\nexport interface QuotaItem {\n\toriginal_quota: number;\n\tquota: number;\n\tstr_date: string;\n}\n\nexport interface QuotaDetail {\n\tquota_item_list: QuotaItem[];\n\tquota_type: string;\n}\n","import fs, { write } from \"node:fs\";\n// import https from \"node:https\";\nimport path from \"node:path\";\nimport { type ResponseData, downloadImage, getFilenameFromUrl, randomString, sleep, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\nimport { extractImgTag, getFileState, replaceImgSrc } from \"../../utils\";\nimport { Http } from \"../../utils/http\";\nimport type { PublishAction, WeixinPublishParams , WxWhitelistUserInfo, WxInteraction} from \"./index\";\nimport { type QuotaDetail, QuotaType, scanRetryMaxCount } from \"./utils\";\nimport { match } from \"node:assert\";\n\ntype CommonResponse<T = unknown> = T & {\n\tbase_resp?: { err_msg: string; ret: number };\n};\n\nconst GET_QRCODE_DEFAULT_ERROR = \"二维码获取异常,请稍后重试。\";\n\nconst errnoMap: Record<number|string, string> = {\n\t200003: \"微信公众号号登录状态失效,请重新绑定账号后重试。\",\n\t420001: \"封面图不支持GIF,请更换后重试。\",\n\t200002: \"上传图片参数错误,请检查后重试。\",\n\t200039: \"上传图片高度(像素)与宽度(像素)的乘积不能超过600万,请更换后重试。\",\n\t153201: \"不支持发布审核中或转码中的视频\",\n\t200007: \"登陆失败,请重新登陆账户后重试。\",\n\t64703: \"摘要超出120字长度限制,请修改摘要后重试。\",\n\t\"-4\": \"不支持发布审核中或转码中的视频\",\n\t\"-2\": \"不支持发布审核中或转码中的视频\",\n\t770001: \"不支持发布审核中或转码中的视频\",\n\t200074: \"系统繁忙,请稍后重试!\"\n};\n\n// 不需要直接抛出的异常码,如 154019\nconst ignoreErrno = [154019];\n\n// 用户互动类型表\nconst userTypeMap: Record<string, 1 | 2 | 3> = {\n\t\"所有用户\": 1,\n\t\"已关注的用户\": 2,\n\t\"已关注7天及以上的用户\": 3,\n };\n\nconst generatorFormData = (data: Record<string, unknown>) => {\n\tconst formData = new URLSearchParams();\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tformData.append(key, String(value));\n\t}\n\n\treturn formData.toString();\n};\n\nexport const checkCopyrightStat = async <T>(http: Http, params: WeixinPublishParams, data: Record<string, unknown>) => {\n\tlet resData: T;\n\n\ttry {\n\t\tresData = await http.api({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\t\tparams: {\n\t\t\t\taction: \"get_appmsg_copyright_stat\",\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t},\n\t\t\tdata: generatorFormData(data),\n\t\t});\n\t} catch (error) {\n\t\tresData = (error as ResponseData)?.data;\n\t}\n\n\treturn resData;\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst fingerprint = \"4695500bc93ab4ce8fb2692da6564e04\";\n\tconst client_time_diff = Number(\"1743488763\") * 1 - Math.floor(new Date().getTime() / 1000);\n\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst http = new Http({\n\t\t// 接口代理,特意保留,作为测试使用\n\t\t// httpsAgent: new https.Agent({\n\t\t// \trejectUnauthorized: false,\n\t\t// \thost: \"127.0.0.1\",\n\t\t// \tport: 9000,\n\t\t// }),\n\t\theaders: {\n\t\t\t\"User-Agent\":\n\t\t\t\t\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0\",\n\t\t\tCookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://mp.weixin.qq.com\",\n\t\t\treferer: `https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit&action=edit&isNew=1&type=77&createType=0&token=${params.token}&lang=zh_CN&timestamp=${Date.now()}`,\n\t\t},\n\t});\n\n\t// 添加响应拦截器\n\thttp.addResponseInterceptor<CommonResponse>((response) => {\n\t\tconst responseData = response.data;\n\t\tconst msgType = params.saveType === \"draft\" ? \"同步\" : \"发布\";\n\n\t\t// 检查响应中的 errno 字段\n\t\tif (\n\t\t\tresponseData?.base_resp &&\n\t\t\tresponseData.base_resp.ret !== 0 &&\n\t\t\t!ignoreErrno.includes(responseData.base_resp.ret)\n\t\t) {\n\t\t\tconst errmsg =\n\t\t\t\terrnoMap[responseData.base_resp.ret] ||\n\t\t\t\tresponse.config.defaultErrorMsg ||\n\t\t\t\tresponseData.base_resp.err_msg ||\n\t\t\t\t`文章${msgType}异常,请稍后重试。`;\n\n\t\t\treturn {\n\t\t\t\tcode: errnoMap[responseData.base_resp.ret] ? 200 : 500,\n\t\t\t\tmessage: errmsg,\n\t\t\t\tdata: responseData,\n\t\t\t};\n\t\t}\n\t});\n\n\t// 0. 校验登录\n\tawait http.api({\n\t\tmethod: \"get\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/appmsgpublish\",\n\t\tparams: {\n\t\t\tfingerprint,\n\t\t\tsub: \"list\",\n\t\t\tbegin: 0,\n\t\t\tcount: 10,\n\t\t\tquery: \"\",\n\t\t\ttype: 101_1_102_103,\n\t\t\tshow_type: \"\",\n\t\t\tfree_publish_type: 1_102_103,\n\t\t\tsub_action: \"list_ex\",\n\t\t\tsearch_card: 0,\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t},\n\t});\n\n\t// 1. 提取并上传正文中的图片\n\tconst uploadImages = async (images: string[]) => {\n\t\tconst cloudImages: Array<{ cdn_url: string; content: string }> = [];\n\n\t\t// 下载图片到本地\n\t\tconst localImages = await Promise.all(\n\t\t\timages.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\tfor (let index = 0; index < images.length; index++) {\n\t\t\tconst image = localImages[index];\n\t\t\tconst fileState = getFileState(image);\n\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append(\"id\", `WU_FILE_${index + 1}`);\n\t\t\tformData.append(\"name\", fileState.name);\n\t\t\tformData.append(\"type\", fileState.type);\n\t\t\tformData.append(\"lastModifiedDate\", fileState.lastModifiedDate);\n\t\t\tformData.append(\"size\", fileState.size);\n\t\t\tformData.append(\"file\", fs.createReadStream(image));\n\n\t\t\tconst response = await http.api<(typeof cloudImages)[0]>({\n\t\t\t\tmethod: \"post\",\n\t\t\t\turl: `https://mp.weixin.qq.com/cgi-bin/filetransfer?action=upload_material&f=json&writetype=doublewrite&token=${params.token}&lang=zh_CN`,\n\t\t\t\tdata: formData,\n\t\t\t\tdefaultErrorMsg: \"图片上传异常,请稍后重试发布。\",\n\t\t\t});\n\n\t\t\tcloudImages.push(response);\n\t\t}\n\n\t\treturn cloudImages;\n\t};\n\n\tconst originContentImages = extractImgTag(params.content);\n\tconst targetContentImages = await uploadImages(originContentImages);\n\t// 2. 替换正文中的图片\n\tconst content = replaceImgSrc(params.content, (dom) => {\n\t\tif (dom.attribs.src) {\n\t\t\tconst idx = originContentImages.findIndex((it) => it === dom.attribs.src);\n\t\t\tdom.attribs.src = targetContentImages[idx].cdn_url;\n\t\t\tdom.attribs.class = \"rich_pass wxw-img js_insertlocalimg\";\n\t\t\tdom.attribs.style = \"\";\n\t\t}\n\t\treturn dom;\n\t});\n\n\t// 3. 上传封面图片\n\tconst coverRes = await uploadImages([params.settingInfo.wxCover]);\n\n\t// 4. 原创声明白名单有效性判断与生成转载白名单\n\tlet oriWhitelist = null;\n\t\n\tif (params.settingInfo?.wxCopyright && params.settingInfo?.wxWhitelist) {\n\t\tconst _oriWhitelist = params.settingInfo.wxWhitelist;\n\t\n\t\tif (_oriWhitelist && _oriWhitelist.length > 0) {\n\t\t\tconst white_list = [];\n\n\t\t\tconst white_list_user = {\n\t\t\t\tnickname: \"\",\n\t\t\t\ttitle: \"可修改文章\",\n\t\t\t\topenid: \"\",\n\t\t\t\twx_name: \"\",\n\t\t\t\tusername: \"\",\n\t\t\t\tavatar: \"\",\n\t\t\t\tcan_modify: \"1\",\n\t\t\t\tcan_hide_source: \"0\",\n\t\t\t\tcan_reward: \"0\",\n\t\t\t};\n\t\n\t\t\tfor (const _user of _oriWhitelist) {\n\t\t\t\tconst userInfo_res = await http.api<{ search_list: WxWhitelistUserInfo[] }>({\n\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/appmsgcopyright?action=searchacct\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\taction: \"searchacct\",\n\t\t\t\t\t},\n\t\t\t\t\tdata: generatorFormData({\n\t\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\t\tf: \"json\",\n\t\t\t\t\t\tajax: 1,\n\t\t\t\t\t\ttoken: params.token,\n\t\t\t\t\t\trandom: Math.random().toString(),\n\t\t\t\t\t\tusername: _user,\n\t\t\t\t\t}),\n\t\t\t\t\tdefaultErrorMsg: \"搜索用户信息失败\",\n\t\t\t\t});\n\t\t\t\t\n\t\t\t\tif(userInfo_res.search_list.length>0){\n\t\t\t\t\tlet userInfo_resJson = userInfo_res.search_list[0];\n\t\t\t\t\twhite_list_user.nickname = userInfo_resJson.nickname;\n\t\t\t\t\twhite_list_user.openid = userInfo_resJson.openid;\n\t\t\t\t\twhite_list_user.avatar = userInfo_resJson.pic_url;\n\t\t\t\t\twhite_list_user.username = userInfo_resJson.username;\n\t\t\t\t\twhite_list_user.wx_name = userInfo_resJson.wx_name;\n\t\t\t\t\twhite_list.push({ ...white_list_user });\n\t\t\t\t}else{\n\t\t\t\t\treturn { code: 200, message: `白名单用户:${_user} 未搜索到,请确定输入是否正确!`, data: '' }\n\t\t\t\t}\n\t\t\t}\n\t\t\toriWhitelist = white_list.length > 0 ? JSON.stringify({ \"white_list\" : white_list }) : \"\"; \n\t\t}\n\t}\n\n\t// 5. 赞赏设置\n\tlet writerid = null;\n\tlet reply_id = null\n\tif (params.settingInfo.wxCopyright && params.settingInfo.wxRewardTarget){\n\t\tasync function getWriterList() {\n\t\t\tconst res = await http.api({\n\t\t\t method: \"get\",\n\t\t\t url: 'https://mp.weixin.qq.com/acct/writermgr',\n\t\t\t params: {\n\t\t\t\taction: 'get_writer_list',\n\t\t\t\tfingerprint,\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t }\n\t\t\t});\n\t\t \n\t\t\treturn res.pageinfo.writerlist || [];\n\t\t }\n\n\t\t async function getRewardText(): Promise<{ text: string , reply_id: string}[]> {\n\t\t\tconst res = await http.api({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: 'https://mp.weixin.qq.com/merchant/reward',\n\t\t\t\tparams: {\n\t\t\t\taction: 'getautoreply',\n\t\t\t\tfingerprint,\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\t},\n\t\t\t});\n\t\t\t\n\t\t\treturn res.reply_infos;\n\t\t}\n\n\t\t//遍历绑定信息\n\t\tfor (var _type in params.settingInfo.wxRewardTarget){\n\t\t\tif (_type === \"author\"){\n\n\t\t\t\tif( (await getWriterList()).length == 0){\n\t\t\t\t\t// 获取二维码等待用户绑定\n\t\t\t\t\tconst rewardbind = await http.api({\n\t\t\t\t\t\tmethod: \"get\",\n\t\t\t\t\t\turl: \"https://mp.weixin.qq.com/acct/writermgr\",\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\taction: \"get_rewardbind_qrcode\",\n\t\t\t\t\t\t\trandom: Math.random().toString(),\n\t\t\t\t\t\t\tfingerprint,\n\t\t\t\t\t\t\ttoken: params.token,\n\t\t\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\t\t\tf: \"json\",\n\t\t\t\t\t\t\tajax: 1,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n\t\t\t\t\t});\n\t\t\n\t\t\t\t\tconst rewardBuffer = Buffer.from(rewardbind.qrcode_base64, 'base64');\n\t\t\t\t\tconst rewardFilePath = path.join(tmpCachePath, \"weixin_reward.jpg\");\n\t\t\t\t\tfs.writeFileSync(rewardFilePath, new Uint8Array(rewardBuffer));\n\t\t\t\t\n\t\t\t\t\tparams.safeQrcodeCallback?.(rewardFilePath);\n\t\t\n\t\t\t\t\tconst task_id = rewardbind.task_id\n\t\t\n\t\t\t\t\tlet code = null\n\t\t\n\t\t\t\t\tfor (let i = 0; i < scanRetryMaxCount; i++) {\n\t\t\t\t\t\tawait sleep(2000);\n\t\t\t\t\n\t\t\t\t\t\tconst checkScanResult = await http.api<{ qrcode_status: number; }>({\n\t\t\t\t\t\t\tmethod: \"get\",\n\t\t\t\t\t\t\turl: \"https://mp.weixin.qq.com/acct/writermgr\",\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t\taction: \"query_rewardbind_qrcode_status\",\n\t\t\t\t\t\t\t\ttask_id: task_id,\n\t\t\t\t\t\t\t\tfingerprint,\n\t\t\t\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\t\t\t\tf: \"json\",\n\t\t\t\t\t\t\t\tajax: 1,\n\t\t\t\t\t\t\t\ttoken: params.token,\n\t\t\t\t\t\t\t\ttimespam: Date.now(),\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\n\t\t\t\t\t\tcode = checkScanResult.qrcode_status\n\t\t\t\t\n\t\t\t\t\t\tif ( code == 2 && (await getWriterList()).length > 0 ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\n\t\t\t\t\t\tif (i === scanRetryMaxCount - 1) {\n\t\t\t\t\t\t\treturn { code: 200, message: \"二维码已过期,请重试绑定。\", data: \"\" };\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\n\t\t\t\t}\n\n\t\t\t\t// 判断为赞赏作者\n\t\t\t\tlet _writer = await getWriterList()\n\t\t\t\tfor (var _writer_item of _writer){\n\t\t\t\t\tif (_writer_item.nickname === params.settingInfo.wxRewardTarget[_type]){\n\t\t\t\t\t\twriterid = _writer_item.writerid\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!writerid){\n\t\t\t\t\t// 没找到作者id\n\t\t\t\t\treturn { code: 200, message: \"未匹配到赞赏绑定用户,请确认用户名与绑定是否正常!\", data: \"\" };\n\t\t\t\t}\n\n\t\t\t\tif (params.settingInfo?.wxRewardText){\n\t\t\t\t\t// 判断文案是否已添加\n\t\t\t\t\tlet rewardList = await getRewardText()\n\t\t\t\t\t\n\t\t\t\t\tlet matchdID = rewardList.find(\n\t\t\t\t\t\treward => reward.text === params.settingInfo.wxRewardText\n\t\t\t\t\t)?.reply_id ?? null;\n\t\n\t\t\t\t\tif (rewardList.length == 0 || !matchdID ){\n\t\t\t\t\t\tawait http.api({\n\t\t\t\t\t\t\tmethod: \"post\",\n\t\t\t\t\t\t\turl: 'https://mp.weixin.qq.com/merchant/reward',\n\t\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\t \taction: 'addautoreply',\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tdata: generatorFormData({\n\t\t\t\t\t\t\t\ttype: 1,\n\t\t\t\t\t\t\t\tfingerprint,\n\t\t\t\t\t\t\t\ttoken: params.token,\n\t\t\t\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\t\t\t\tf: \"json\",\n\t\t\t\t\t\t\t\tajax: 1,\n\t\t\t\t\t\t\t\ttext: params.settingInfo.wxRewardText\n\t\t\t\t\t\t })\n\t\t\t\t\t\t});\n\t\t\t\t\t}else{\n\t\t\t\t\t\treply_id = matchdID\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!matchdID) {\n\t\t\t\t\t\tfor (var _reply_item of (await getRewardText())){\n\t\t\t\t\t\t\treply_id = (await getRewardText()).find(\n\t\t\t\t\t\t\t\treward => reward.text === params.settingInfo.wxRewardText\n\t\t\t\t\t\t\t)?.reply_id ;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!reply_id) {\n\t\t\t\t\t\t\treturn {code:200, message:\"赞赏文案添加失败,请重新检查\", data:\"\"}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t\n\t\t\t}else if(_type === \"project\"){\n\t\t\t\t// 判断为公益捐赠\n\t\t\t}\n\t\t}\n\n\t}\n\t// 留言设置\n\tconst wxInteractionInfo = (() => {\n\t\tconst _wxInteraction = {\n\t\t\tneed_open_comment0: 0,\n\t\t\tonly_fans_can_comment0: 0,\n\t\t\tonly_fans_days_can_comment0: 0,\n\t\t\treply_flag0: 2,\n\t\t\tauto_elect_comment0: 0,\n\t\t\tauto_elect_reply0: 1,\n\t\t\topen_fansmsg0: 0\n\t\t};\n\t\n\t\tconst type = params?.settingInfo?.wxInteraction?.Type ?? \"\";\n\t\tif (type === \"public\") {\n\t\t\tconst _opt = params?.settingInfo?.wxInteraction?.Option;\n\t\t\tif (!_opt || !_opt.Comment || !_opt.reply || _opt.elect_comment == null || _opt.elect_reply == null) return null;\n\t\n\t\t\tconst commentType = userTypeMap[_opt.Comment];\n\t\t\tconst replyType = userTypeMap[_opt.reply] + 1;\n\n\t\t\t// 设置评论权限\n\t\t\t_wxInteraction.need_open_comment0 = 1;\n\t\t\tswitch (commentType) {\n\t\t\t\tcase 1:\n\t\t\t\t\t_wxInteraction.only_fans_can_comment0 = 0;\n\t\t\t\t\t_wxInteraction.only_fans_days_can_comment0 = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\t_wxInteraction.only_fans_can_comment0 = 1;\n\t\t\t\t\t_wxInteraction.only_fans_days_can_comment0 = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\t_wxInteraction.only_fans_can_comment0 = 0;\n\t\t\t\t\t_wxInteraction.only_fans_days_can_comment0 = 1;\t\t\t\t\t\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\n\t\t\t// 设置回复权限等级\n\t\t\t_wxInteraction.reply_flag0 = replyType;\n\t\n\t\t\t// 精选功能\n\t\t\t_wxInteraction.auto_elect_comment0 = _opt.elect_comment ? userTypeMap[_opt.Comment] : 0;\n\t\t\t_wxInteraction.auto_elect_reply0 = _opt.elect_reply ? userTypeMap[_opt.reply] : 1;\n\t\n\t\t\treturn _wxInteraction;\n\t\t}\n\t\n\t\tif (type === \"private\") {\n\t\t\t_wxInteraction.open_fansmsg0 = 1;\n\t\t\treturn _wxInteraction;\n\t\t}\n\t\n\t\t// 其他未启用评论功能的情形\n\t\treturn _wxInteraction;\n\t})();\n\n\tif (!wxInteractionInfo) return { code: 200, message: \"互动参数设置错误,请检查参数设置!\", data: \"\" }\n\t\n\t\n\t// 4. 保存为草稿\n\tconst draftData = {\n\t\tlang: \"zh_CN\",\n\t\tf: \"json\",\n\t\tajax: 1,\n\t\tcount: 1,\n\t\toperate_from: \"Chrome\",\n\t\tisnew: 0,\n\t\tarticlenum: 1,\n\t\tpre_timesend_set: 0,\n\t\tis_finder_video0: 0,\n\t\tfinder_draft_id0: 0,\n\t\tapplyori0: 0,\n\t\tcan_reward0: writerid ? 1 : 0,\n\t\tpay_gifts_count0: 0,\n\t\tis_video_recommend0: -1,\n\t\twriterid0: writerid ? writerid : 0,\n\t\tauto_gen_digest0: 0,\n\t\tlast_choose_cover_from0: 0,\n\t\tneed_open_comment0: wxInteractionInfo.need_open_comment0 ,\n\t\tonly_fans_can_comment0: wxInteractionInfo.only_fans_can_comment0,\n\t\tonly_fans_days_can_comment0: wxInteractionInfo.only_fans_days_can_comment0,\n\t\treply_flag0: wxInteractionInfo.reply_flag0,\n\t\tauto_elect_comment0: wxInteractionInfo.auto_elect_comment0,\n\t\tauto_elect_reply0: wxInteractionInfo.auto_elect_reply0,\n\t\treward_reply_id0:params.settingInfo?.wxRewardText? reply_id ? reply_id : 0 : 0,\n\t\tnot_pay_can_comment0: 0,\n\t\tdata_seq: 0,\n\t\tmsg_index_id0: \"\",\n\n\t\ttoken: params.token,\n\t\tAppMsgId: params.appMsgId || \"\",\n\t\ttitle0: params.title,\n\t\tauthor0: params?.settingInfo?.wxAuthor || \"\" ,\n\t\tdigest0: params?.settingInfo?.wxAbstract || \"\",\n\t\tcontent0: content || \"\",\n\t\tsourceurl0: params?.settingInfo?.wxOriginalText || \"\",\n\t\tcdn_url0: coverRes[0].cdn_url || \"\",\n\t\tcopyright_type0: params?.settingInfo?.wxCopyright? 1 : 0,\n\t\tallow_reprint0: params?.settingInfo?.wxCopyright? 0 : '',\n\t\tallow_reprint_modify0: params?.settingInfo?.wxCopyright? 0 : '',\n\t\tori_white_list0: params?.settingInfo?.wxCopyright? oriWhitelist: '',\n\t\topen_fansmsg0: wxInteractionInfo.open_fansmsg0,\n\t\tallow_fast_reprint0: params?.settingInfo?.wxQuickReprint ? 1 : 0,\n\t\tdisable_recommend0: params?.settingInfo?.wxNotAllowRecommend ? 1 : 0,\n\t\tclaim_source_type0: params?.settingInfo?.wxCreationSource?.[0] || \"\",\n\n\t\tmasssend_check: 1,\n\t\tis_masssend: 1,\n\t};\n\n\tconst { appMsgId } = await http.api<{ appMsgId: string }>({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/operate_appmsg\",\n\t\tparams: {\n\t\t\ttoken: params.token,\n\t\t\tt: \"ajax-response\",\n\t\t\tsub: \"create\",\n\t\t\ttype: 77,\n\t\t\tlang: \"zh_CN\",\n\t\t},\n\t\tdata: generatorFormData(draftData),\n\t\tdefaultErrorMsg: \"创建草稿失败,请稍后重试发布。\",\n\t});\n\n\t// 如果只需要保存为草稿,直接返回 appMsgId\n\tif (params.saveType === \"draft\") {\n\t\treturn { code: 0, data: appMsgId, message: \"微信公众号保存草稿成功。\" };\n\t}\n\n\tconst masssendpage = () => {\n\t\treturn http.api<CommonResponse<{ operation_seq: string; quota_detail_list: QuotaDetail[] }>>({\n\t\t\tmethod: \"get\",\n\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssendpage\",\n\t\t\tparams: {\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\tpreview_appmsgid: appMsgId,\n\t\t\t\tfingerprint,\n\t\t\t\trandom: Math.random().toString(),\n\t\t\t},\n\t\t\tdefaultErrorMsg: \"创建草稿失败,请稍后重试发布。\",\n\t\t});\n\t};\n\n\t// 4. 预览\n\tlet massSendRes = await masssendpage();\n\t// 判断是否需要同意群发声明\n\tif (massSendRes.base_resp?.ret === 154019) {\n\t\ttask.logger.info(\"需要同意群发声明\");\n\t\tawait http.api({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/setprotocolsign\",\n\t\t\tparams: {\n\t\t\t\tcgi: \"setprotocolsign\",\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\ttoken: params.token,\n\t\t\t},\n\t\t\tdata: generatorFormData({\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\tfingerprint,\n\t\t\t\trandom: Math.random().toString(),\n\t\t\t\tissigned: 1,\n\t\t\t}),\n\t\t});\n\t\tmassSendRes = await masssendpage();\n\t}\n\n\t// 判断是否还有群发次数\n\tconst { operation_seq, quota_detail_list = [] } = massSendRes;\n\n\t// 群发时需要判断是否还有群发次数\n\tif (params.masssend) {\n\t\tconst quotaDetail = quota_detail_list.find((it) => it.quota_type === QuotaType.Normal);\n\t\tif (!quotaDetail?.quota_item_list[0]?.quota) {\n\t\t\treturn { code: 200, message: \"今日群发次数用尽,请明天再试。\", data: \"\" };\n\t\t}\n\t}\n\n\t// 非群发时会多一个接口\n\tif (!params.masssend) {\n\t\tawait http.api({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\t\tparams: {\n\t\t\t\tt: \"ajax-response\",\n\t\t\t\tfor_check: 1,\n\t\t\t\tis_release_publish_page: 1,\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t},\n\t\t\tdata: generatorFormData({\n\t\t\t\tappmsgid: appMsgId,\n\t\t\t\tfingerprint,\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t}),\n\t\t});\n\t}\n\n\t// check\n\tawait http.api({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend?action=check_same_material\",\n\t\tdata: generatorFormData({\n\t\t\tmsgid: appMsgId,\n\t\t\tfingerprint,\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t});\n\n\tconst copyrightStatData = {\n\t\ttoken: params.token,\n\t\tlang: \"zh_CN\",\n\t\tf: \"json\",\n\t\tajax: 1,\n\t\trandom: Math.random().toString(),\n\t\tfingerprint,\n\t\tfirst_check: 1,\n\t\ttype: 10,\n\t\tappmsgid: appMsgId,\n\t};\n\tfor (let i = 0; i < 10; i++) {\n\t\tawait sleep(1000);\n\t\tconst lastData = { ...copyrightStatData, first_check: i === 0 ? 1 : 0 };\n\t\tconst checkCopyrightStatRes = await checkCopyrightStat<{ open_ad_reprint_status?: string }>(http, params, lastData);\n\t\tif (checkCopyrightStatRes.open_ad_reprint_status) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tawait sleep(300);\n\n\tawait http.api({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\tparams: {\n\t\t\taction: \"check_ad\",\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\tappmsg_id: appMsgId,\n\t\t\tfingerprint,\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\tis_release_publish_page: params.masssend ? 0 : 1, // 群发时为 0,否则为 1\n\t\t\tsend_time: 0,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t});\n\n\tawait sleep(300);\n\n\tawait http.api({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\tparams: {\n\t\t\taction: \"check_music\",\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\tappmsgid: appMsgId,\n\t\t\tmasssend_check: 1,\n\t\t\tfingerprint,\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t});\n\n\tawait sleep(300);\n\n\t// 5. 获取群发文章ticket接口\n\tconst getTicketResult = await http.api<{ ticket: string; operation_seq: string }>({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/misc/safeassistant\",\n\t\tparams: {\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\t1: 1,\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\taction: \"get_ticket\",\n\t\t\tfingerprint,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t\tdefaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n\t});\n\n\tawait sleep(300);\n\n\t// 6. 获取群发文章 uuid\n\tconst getUuidResult = await http.api<{ uuid: string; genuuid_res: number }>({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/safe/safeqrconnect\",\n\t\tparams: {\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\t1: 1,\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: 1,\n\t\t\tstate: 0,\n\t\t\tlogin_type: \"safe_center\",\n\t\t\ttype: \"json\",\n\t\t\tticket: getTicketResult.ticket,\n\t\t\tfingerprint,\n\t\t\trandom: Math.random().toString(),\n\t\t}),\n\t\tdefaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n\t});\n\tawait sleep(1000);\n\n\tif (getUuidResult.genuuid_res !== 0) {\n\t\treturn { code: 200, message: GET_QRCODE_DEFAULT_ERROR, data: \"\" };\n\t}\n\tconst uuid = getUuidResult.uuid;\n\tawait sleep(1000);\n\n\t// 7. 获取验证二维码\n\tconst qrcodeResult = await http.api({\n\t\tmethod: \"get\",\n\t\turl: \"https://mp.weixin.qq.com/safe/safeqrcode\",\n\t\tparams: {\n\t\t\taction: \"check\",\n\t\t\ttype: \"msgs\",\n\t\t\tservice_type: 1,\n\t\t\tticket: getTicketResult.ticket,\n\t\t\tuuid,\n\t\t\tmsgid: operation_seq,\n\t\t\t...(params.masssend ? {} : { publish_type: 1 }),\n\t\t},\n\t\tdefaultErrorMsg: GET_QRCODE_DEFAULT_ERROR,\n\t\tresponseType: \"arraybuffer\",\n\t});\n\n\tconst qrcodeBuffer = Buffer.from(qrcodeResult);\n\tconst qrcodeFilePath = path.join(tmpCachePath, \"weixin_qrcode.jpg\");\n\tfs.writeFileSync(qrcodeFilePath, new Uint8Array(qrcodeBuffer));\n\n\tparams.safeQrcodeCallback?.(qrcodeFilePath);\n\n\t// 8. 验证二维码结果\n\tlet code = \"\";\n\tfor (let i = 0; i < scanRetryMaxCount; i++) {\n\t\tawait sleep(2000);\n\n\t\tconst checkScanResult = await http.api<{ code: string; errcode: number }>({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/safe/safeuuid\",\n\t\t\tparams: {\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\ttimespam: Date.now(),\n\t\t\t},\n\t\t\tdata: generatorFormData({\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\tuuid,\n\t\t\t\taction: \"json\",\n\t\t\t\ttype: \"json\",\n\t\t\t\tfingerprint,\n\t\t\t\trandom: Math.random().toString(),\n\t\t\t}),\n\t\t});\n\n\t\tif (checkScanResult.errcode === 405 && checkScanResult.code) {\n\t\t\tcode = checkScanResult.code;\n\t\t\tbreak;\n\t\t}\n\n\t\tif (i === scanRetryMaxCount - 1) {\n\t\t\treturn { code: 200, message: \"二维码已过期,请重试发布。\", data: \"\" };\n\t\t}\n\t}\n\n\t// 非群发时会多一个接口\n\tif (!params.masssend) {\n\t\tawait http.api({\n\t\t\tmethod: \"post\",\n\t\t\turl: \"https://mp.weixin.qq.com/misc/safeassistant\",\n\t\t\tparams: {\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t1: 1,\n\t\t\t},\n\t\t\tdata: generatorFormData({\n\t\t\t\ttoken: params.token,\n\t\t\t\tlang: \"zh_CN\",\n\t\t\t\tf: \"json\",\n\t\t\t\tajax: 1,\n\t\t\t\tfingerprint,\n\t\t\t\trandom: Math.random().toString(),\n\t\t\t\taction: \"get_uuid\",\n\t\t\t\tuuid,\n\t\t\t}),\n\t\t});\n\t}\n\n\t// 9. 发送群发通知\n\tawait http.api<{ code: string; errcode: number }>({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/masssend\",\n\t\tparams: {\n\t\t\tt: \"ajax-response\",\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\t...(params.masssend ? {} : { is_release_publish_page: 1 }),\n\t\t},\n\t\tdata: generatorFormData({\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t\tf: \"json\",\n\t\t\tajax: \"1\",\n\t\t\tfingerprint,\n\t\t\trandom: Math.random().toString(),\n\t\t\tack: \"\",\n\t\t\tcode,\n\t\t\treprint_info: \"\",\n\t\t\treprint_confirm: \"0\",\n\t\t\tlist: \"\",\n\t\t\tgroupid: \"\",\n\t\t\tsex: \"0\",\n\t\t\tcountry: \"\",\n\t\t\tprovince: \"\",\n\t\t\tcity: \"\",\n\t\t\tsend_time: \"0\",\n\t\t\ttype: \"10\",\n\t\t\tshare_page: \"1\",\n\t\t\tsynctxweibo: \"0\",\n\t\t\toperation_seq,\n\t\t\treq_id: randomString(32),\n\t\t\treq_time: new Date().getTime() + client_time_diff * 1e3,\n\t\t\tsync_version: \"1\",\n\t\t\tisFreePublish: params.masssend ? \"false\" : \"true\",\n\t\t\tappmsgid: appMsgId,\n\t\t\tisMulti: \"0\",\n\t\t\tdirect_send: \"1\",\n\t\t\tisNeedCode: \"true\",\n\t\t\tuserType: \"1\",\n\t\t}),\n\t\tdefaultErrorMsg: params.masssend ? \"文章群发异常,请尝试关闭群发或稍后重试。\" : \"文章发布异常,请稍后重试。\",\n\t});\n\n\treturn success(appMsgId, \"微信公众号发布完成。\");\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { CookieMap, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport axios from \"axios\";\n\nimport { copyHtmlToClipboard, parseUrlQueryString, PopupListener } from \"../../utils\";\nimport type { PublishAction } from \"./index\";\nimport { scanRetryMaxCount } from \"./utils\";\n\n// 等待二维码验证结果最长时间\nconst waitQrcodeResultMaxTime = scanRetryMaxCount * 2 * 1000;\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \"mp.weixin.qq.com\",\n\t\turl: \"https://mp.weixin.qq.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst urlParams = {\n\t\taction: \"edit\",\n\t\ttype: 77,\n\t\ttoken: params.token,\n\t\tlang: \"zh_CN\",\n\t\ttimestamp: Date.now(),\n\t\tappmsgid: params.appMsgId,\n\t};\n\n\tif (params.settingInfo?.wxRewardTarget){\n\t\tconst urlRewardParams = {\n\t\t\taction: \"inviteauthor\",\n\t\t\ttoken: params.token,\n\t\t\tlang: \"zh_CN\",\n\t\t};\n\t\tconst wxRewardPage = await task.createPage({\n\t\t\tshow: task.debug,\n\t\t\turl:\n\t\t\t\tparams.url ||\n\t\t\t\t`https://mp.weixin.qq.com/cgi-bin/safecenterstatus?${Object.entries(urlRewardParams)\n\t\t\t\t\t.map((it) => it.join(\"=\"))\n\t\t\t\t\t.join(\"&\")}`,\n\t\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t\t});\n\n\t\tconst reward_page = wxRewardPage.locator(\"#app\")\n\t\tconst isAddRewarder = reward_page.locator('.author_card_bd.weui-desktop-vm_primary').filter({hasText: params.settingInfo.wxRewardTarget.author}).count()\n\t\tif(await isAddRewarder == 0){\n\t\t\tawait reward_page.locator('.weui-desktop-panel__hd-right').click()\n\t\t\ttry {\n\t\t\t\ttry {\n\t\t\t\t\tawait wxRewardPage.waitForSelector('.invite-qrcode', { state: 'visible', timeout: 20000 });\n\t\t\t\t\tconst qrcodeSrc = await reward_page.locator(\".invite-qrcode\").getAttribute('src')\n\t\t\t\t\t\n\t\t\t\t\tif (qrcodeSrc) {\n\t\t\t\t\t\tconst rewardBuffer = Buffer.from(qrcodeSrc.replace(/^data:image\\/\\w+;base64,/, ''), 'base64');\n\t\t\t\t\t\tconst rewardFilePath = path.join(tmpCachePath, \"weixin_reward.jpg\");\n\t\t\t\t\t\tfs.writeFileSync(rewardFilePath, new Uint8Array(rewardBuffer));\n\t\t\t\t\t\n\t\t\t\t\t\tparams.safeQrcodeCallback?.(rewardFilePath);\n\t\t\t\t\t}\n\n\t\t\t\t\t// await wxRewardPage.waitForSelector('[data-transfer=\"true\"]:not([weui=\"true\"])', { state: 'detached', timeout: 30000 });\n\t\t\t\t\t\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new Error(\"二维码已过期,请重试绑定。\");\n\t\t\t\t}\n\n\t\t\t\tfor (let i = 0; i < scanRetryMaxCount; i++) {\n\t\t\t\t\tawait Promise.all([\n\t\t\t\t\t\twxRewardPage.reload(),\n\t\t\t\t\t\twxRewardPage.waitForLoadState('domcontentloaded')\n\t\t\t\t\t]);\n\t\t\t\t\t\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait wxRewardPage.waitForSelector(`.author_card_bd.weui-desktop-vm_primary:has-text(\"${params.settingInfo.wxRewardTarget?.author}\")`, { timeout: 1000 });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t} catch (error) {}\n\n\t\t\t\t\tif (i === scanRetryMaxCount - 1) throw new Error(\"未确认绑定账户,请在手机端确认绑定并重试\");\n\t\t\t\t}\n\n\t\t\t} catch (error) {\n\t\t\t\tlet errorMessage = \"发生未知错误\";\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\terrorMessage = error.message;\n\t\t\t\t} else if (typeof error === \"string\") {\n\t\t\t\t\terrorMessage = error;\n\t\t\t\t}\n\t\t\t\tawait wxRewardPage.close();\n\t\t\t\treturn { code: 200, message: errorMessage , data: \"\" };\n\t\t\t}\n\t\t}\n\n\t\tif(params.settingInfo.wxRewardText){\n\t\t\tawait wxRewardPage.locator('[href=\"/merchant/reward?action=getautoreply\"]').click()\n\t\t\tawait wxRewardPage.waitForLoadState('networkidle');\n\t\t\t\n\t\t\tconst isAddWord = reward_page.locator(\".auto-reply__list.edit .auto-reply__hd .auto-reply__text\").filter({hasText: new RegExp(`^${params.settingInfo.wxRewardText}$`) }).count()\n\t\t\t\n\t\t\tif(await isAddWord == 0){\n\t\t\t\tawait reward_page.locator(\".emotion_editor .edit_area\").fill(params.settingInfo.wxRewardText)\n\t\t\t\tawait reward_page.locator(\".emotion_editor .edit_area\").click()\n\t\t\t\tawait reward_page.locator(\".editor_toolbar .weui-desktop-btn.weui-desktop-btn_primary\").click()\n\t\t\t}\n\t\t}\n\t\tawait wxRewardPage.close();\n\n\t}\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl:\n\t\t\tparams.url ||\n\t\t\t`https://mp.weixin.qq.com/cgi-bin/appmsg?${Object.entries(urlParams)\n\t\t\t\t.map((it) => it.join(\"=\"))\n\t\t\t\t.join(\"&\")}`,\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\t// 0. 校验登录\n\ttry {\n\t\tawait page.waitForSelector(\".weui-desktop-head\", { state: \"visible\" });\n\t} catch (error) {\n\t\treturn { code: 400, message: \"登录失效\", data: page.url() };\n\t}\n\n\t// 1. 等待编辑器加载出来\n\tawait page.waitForSelector(\"#editor_pannel\", { state: \"visible\" });\n\n\tPopupListener(page,'[v-transfer-dom=\"#vue_app\"] .weui-desktop-dialog',\"更新\", '[v-transfer-dom=\"#vue_app\"] .weui-desktop-icon-btn.weui-desktop-dialog__close-btn', \n\t{\n\t\tcheckInterval: 1000,\n\t\tstopAfterClick: false\n\t})\n\n\t// 2. 填写标题\n\tconst titleInstance = page.locator(\"#js_title_main textarea#title\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 3. 填写作者\n\tif (params.settingInfo.wxAuthor) {\n\t\tconst titleInstance = page.locator(\"#js_author_area input#author\");\n\t\tawait titleInstance.click();\n\t\tawait titleInstance.fill(params.settingInfo.wxAuthor);\n\t}\n\n\t// 4. 填写正文\n\tawait copyHtmlToClipboard(page, params.content);\n\t// 定位目标元素并聚焦\n\tawait page.click(\".js_editor_area .ProseMirror\");\n\t// 模拟Ctrl+V粘贴\n\tawait page.keyboard.press(\"Control+V\");\n\n\t// 将设置区域滚动到可见区域\n\tawait page.locator(\"#article_setting_area\").evaluate((node) => node.scrollIntoView());\n\n\t// 5. 填写摘要\n\tif (params.settingInfo.wxAbstract) {\n\t\tconst titleInstance = page.locator(\"#article_setting_area #js_description_area textarea\");\n\t\tawait titleInstance.click();\n\t\tawait titleInstance.fill(params.settingInfo.wxAbstract);\n\t}\n\n\t// 6. 设置封面\n\tif (params.settingInfo.wxCover) {\n\t\tconst fileName = getFilenameFromUrl(params.settingInfo.wxCover);\n\t\tconst cover = await downloadImage(params.settingInfo.wxCover, path.join(tmpCachePath, fileName));\n\n\t\t// 从图片库选择\n\t\tawait page.locator(\"#article_setting_area #js_cover_area .select-cover__btn\").hover();\n\t\tawait page\n\t\t\t.locator(\"#article_setting_area #js_cover_area .pop-opr__group-select-cover .pop-opr__list .pop-opr__item\")\n\t\t\t.filter({ hasText: \"从图片库选择\" })\n\t\t\t.click();\n\n\t\t// 在弹窗内选择「我的图片」- 「上传文件」\n\t\t// 等待弹窗出现\n\t\tawait page.waitForSelector(\"#vue_app .weui-desktop-dialog\", { state: \"visible\" });\n\t\tconst dialog = page.locator(\"#vue_app .weui-desktop-dialog\");\n\t\t// 点击「我的图片」\n\t\tawait dialog.locator(\".weui-desktop-menu .weui-desktop-menu__item\").filter({ hasText: \"我的图片\" }).click();\n\t\tawait page.waitForTimeout(300);\n\t\t// 点击「上传文件」\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait dialog.locator(\".weui-desktop-img-picker__list__area .js_upload_btn_container\").click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles([cover]);\n\n\t\t// 等待图片上传完成\n\t\tawait page.waitForSelector(\".weui-desktop-img-picker__list .weui-desktop-img-picker__item.selected\", {\n\t\t\tstate: \"visible\",\n\t\t});\n\t\tawait page.waitForSelector('.weui-desktop-upload__file__progress', { state: 'detached' });\n\n\t\tconst pic_msg = page.locator('.weui-desktop-img-picker__list .weui-desktop-img-picker__item.selected .weui-desktop-upload__file__msg')\n\t\tif(await pic_msg.count() > 0) return {code: 200, message: \"图片上传错误:\"+(await pic_msg.textContent()||\"未知错误,请重试!\"), data: \"\"}\n\n\t\t// 选择下一步\n\t\tawait dialog\n\t\t\t.locator(\".weui-desktop-dialog__ft .weui-desktop-btn:not(.weui-desktop-btn_disabled)\")\n\t\t\t.filter({ hasText: \"下一步\" })\n\t\t\t.click();\n\t\t// 等待第二步的确认按钮出来\n\t\tawait dialog\n\t\t\t.locator(\".weui-desktop-dialog__ft .weui-desktop-btn\")\n\t\t\t.filter({ hasText: \"确认\" })\n\t\t\t.waitFor({ state: \"visible\" });\n\t\tawait dialog.locator(\".weui-desktop-dialog__ft .weui-desktop-btn\").filter({ hasText: \"确认\" }).click();\n\t}\n\n\t// 7. 原创与赞赏设置\n\tif(params.settingInfo.wxCopyright){\n\t\tawait page.locator('#js_original').click()\n\n\t\tconst ori_dialog = page.locator('.claim__original-dialog.original_dialog')\n\t\tconst ori_dialog_bd = ori_dialog.locator('.weui-desktop-dialog__bd')\n\t\tconst ori_dialog_ft = ori_dialog.locator('.weui-desktop-dialog__ft')\n\n\t\tawait ori_dialog_bd.locator('.weui-desktop-form__check-content').filter({hasText: \"文字原创\"}).click()\n\n\t\tif(params.settingInfo?.wxWhitelist){\n\t\t\t\n\t\t\tfor (var _target of params.settingInfo.wxWhitelist){\n\t\t\t\t\n\t\t\t\tawait ori_dialog_bd.locator('#js_article_whitelist_search').fill(_target)\n\t\t\t\tawait ori_dialog_bd.locator('.js_search').click()\n\t\t\t\tconst search_res = ori_dialog_bd.locator('#js_article_whitelist_search_result > div')\n\n\t\t\t\tawait page.waitForTimeout(1000);\n\n\t\t\t\tif( await search_res.getAttribute('class') !== 'search-result-title search-result-empty'){\n\n\t\t\t\t\tconst search_res_name = await search_res.locator('.search-result-name-left').textContent() || undefined\n\t\t\t\t\tawait search_res.click()\n\t\t\t\t\tconst whrite_list = ori_dialog_bd.locator('#js_article_whitelist_added tbody')\n\t\t\t\t\tconst white_td_isadd = await whrite_list.locator('.table-td-name').filter({hasText: search_res_name}).count()\n\n\t\t\t\t\tif (!white_td_isadd) {\n\t\t\t\t\t\treturn {code: 200 , message:'白名单添加失败,请重试!', data: ''}\n\t\t\t\t\t}\n\t\t\t\t}else{\n\t\t\t\t\treturn { code: 200, message: `白名单用户:${_target} 未搜索到,请确定输入是否正确!`, data: '' }\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\n\t\tif(params.settingInfo?.wxQuickReprint){\n\t\t\tconst btn_isChecked = await ori_dialog_bd.locator('//span[@class=\"frm_tips\"]').filter({ hasText: '已开启' }).count() == 1 ? true : false; \n\t\t\tif(!btn_isChecked) await ori_dialog_bd.locator('.weui-desktop-switch_loading .weui-desktop-switch__box').click()\n\t\t}\n\n\t\tconst checkbox = ori_dialog_ft.locator('.weui-desktop-icon-checkbox')\n\t\tif( !await checkbox.isChecked()) await checkbox.check() \n\t\tawait ori_dialog_ft.locator('.weui-desktop-btn.weui-desktop-btn_primary').click()\n\n\t\tif (params.settingInfo?.wxRewardTarget){\n\n\t\t\tawait page.locator('#js_reward_setting_area').click()\n\n\t\t\tconst reward_setting = page.locator('.reward-setting-dialog')\n\t\t\tconst reward_setting_bd = reward_setting.locator('.weui-desktop-dialog__bd')\n\t\t\tconst reward_setting_ft = reward_setting.locator('.weui-desktop-dialog__ft')\n\n\t\t\t//遍历绑定信息\n\t\t\tfor (var _type in params.settingInfo.wxRewardTarget){\n\t\t\t\tif (_type === \"author\"){\n\t\t\t\t\tlet userName = params.settingInfo.wxRewardTarget[_type]\n\n\t\t\t\t\tawait reward_setting_bd.locator('.weui-desktop-form__check-label', { hasText: '赞赏作者' }).click()\n\t\t\t\t\tawait reward_setting_bd.locator('.weui-desktop-form__input').fill(userName)\n\n\n\t\t\t\t\tif(params.settingInfo.wxRewardText) {\n\t\t\t\t\t\tconst reward_setting_replay = page.locator('.reward-reply-setting')\n\t\t\t\t\t\tconst switchAuto = reward_setting_replay.locator('.weui-desktop-switch__box')\n\n\t\t\t\t\t\tconst maxAttempts = 5;\n\t\t\t\t\t\tconst delayMs = 500;\n\t\t\t\t\t\tlet nowCheckTime = 0 \n\n\t\t\t\t\t\tfor (let attempt = 0; attempt < maxAttempts; attempt++) {\n\t\t\t\t\t\t\tconst isDisabled = await switchAuto.isDisabled();\n\t\t\t\t\t\t\tif (!isDisabled){\n\t\t\t\t\t\t\t\tawait switchAuto.isChecked() ? nowCheckTime++ : null\n\t\t\t\t\t\t\t\tif (nowCheckTime == 2) break\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tif (attempt === maxAttempts - 1) throw new Error('Checkbox did not become enabled within the timeout.');\n\t\t\t\t\t\t\tawait new Promise(resolve => setTimeout(resolve, delayMs)); \n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\n\t\t\t\t\t\tconst isOneReplay = await reward_setting_replay.locator('.reward-reply-select__wrp >.reward-reply-select__tips').textContent() == \"添加新的回复\"\n\t\t\t\t\t\tconst isCurrentReplay = await reward_setting_replay.locator('.reward-reply-select__wrp >.reward-reply-select__display .wording').filter({hasText: new RegExp(`^${[params.settingInfo.wxRewardText]}$`)}).count() == 1\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!isOneReplay && !isCurrentReplay) {\n\t\t\t\t\t\t\tawait reward_setting_replay.locator('.reward-reply-select__wrp >.reward-reply-select__tips').click()\n\t\t\t\t\t\t\tawait reward_setting_replay.locator('.reward-reply-select__display.can-select .wording').filter({hasText: new RegExp(`^${[params.settingInfo.wxRewardText]}$`)}).click()\n\t\t\t\t\t\t}\n\t\t\t\t\t}else{\n\t\t\t\t\t\tawait reward_setting_bd.locator('.reward-reply-setting .weui-desktop-switch__input').isChecked() ? reward_setting_bd.locator('.reward-reply-setting .weui-desktop-switch__box').uncheck(): 0\n\t\t\t\t\t}\n\t\n\t\t\t\t}\n\t\t\t\telse if (_type === \"project\"){}\n\t\t\t}\n\n\t\t\tconst checkbox = reward_setting_ft.locator('.weui-desktop-icon-checkbox')\n\t\t\tif( !await checkbox.isChecked()) await checkbox.check() \n\t\t\tawait reward_setting_ft.locator('.weui-desktop-btn.weui-desktop-btn_primary').click()\n\n\t\t}\n\n\t}\n\n\t// 8. 互动设置\n\tif(params.settingInfo?.wxInteraction){\n\t\tawait page.locator('.appmsg-editor__setting-group.js_interaction_cell').click()\n\t\tconst wxInteraction_setting = page.locator('.interaction-dialog')\n\t\tconst wxInteraction_bd = wxInteraction_setting.locator('.weui-desktop-dialog__bd')\n\t\tconst wxInteraction_ft = wxInteraction_setting.locator('.weui-desktop-dialog__ft')\n\n\t\tif(params.settingInfo.wxInteraction.Type == \"public\"){\n\t\t\tawait wxInteraction_bd.locator('.weui-desktop-form__check-label', { hasText: '留言' }).click();\n\t\t\t\n\t\t\tconst comment_area = wxInteraction_bd.locator('.comment-options-block.pt0')\n\t\t\tconst reply_area = wxInteraction_bd.locator('.comment-options-block.bb0.pb0')\n\t\t\tconst commont_rply_opt = page.locator('.weui-desktop-popper.options-popover[x-placement=\"bottom\"]')\n\n\t\t\tawait comment_area.locator('.comment-options__selector-btn').click();\n\t\t\tawait commont_rply_opt.locator('.weui-desktop-form__check-label', { hasText: params.settingInfo.wxInteraction.Option?.Comment }).click();\n\n\t\t\tif(params.settingInfo.wxInteraction.Option?.elect_comment) {\n\t\t\t\tawait comment_area.locator('.weui-desktop-switch__box').check()\n\t\t\t}else{\n\t\t\t\tawait comment_area.locator('.weui-desktop-switch__input').isChecked() ? comment_area.locator('.weui-desktop-switch__box').uncheck(): 0\n\t\t\t}\n\n\t\t\tawait page.waitForTimeout(1000);\n\n\t\t\tawait reply_area.locator('.comment-options__selector-btn').click();\n\t\t\tawait commont_rply_opt.locator('.weui-desktop-form__check-label', { hasText: params.settingInfo.wxInteraction.Option?.reply }).click();\n\t\t\t\n\t\t\tif(params.settingInfo.wxInteraction.Option?.elect_reply) {\n\t\t\t\tawait reply_area.locator('.weui-desktop-switch__box').check()\n\t\t\t}else{\n\t\t\t\tawait reply_area.locator('.weui-desktop-switch__input').isChecked() ? reply_area.locator('.weui-desktop-switch__box').uncheck(): 0\n\t\t\t}\n\t\t}else if(params.settingInfo.wxInteraction.Type == \"private\"){\n\t\t\tawait wxInteraction_bd.locator('.weui-desktop-form__check-label', { hasText: '快捷私信' }).click();\n\t\t}\n\n\t\tawait wxInteraction_ft.locator('.weui-desktop-btn.weui-desktop-btn_primary').click()\n\t}\n\n\t// 9. 原文链接\n\tif (params.settingInfo.wxOriginalText) {\n\t\tawait page.locator(\"#js_article_url_area .allow_click_opr\").click();\n\t\tawait page.waitForTimeout(200);\n\t\tconst poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n\t\tconst poperInput = poperInstance.locator(\"input.weui-desktop-form__input.js_url\");\n\t\tawait poperInput.fill(params.settingInfo.wxOriginalText);\n\t\tawait poperInstance.locator(\".popover_bar .btn_primary\").click();\n\t}\n\n\t// 10. 创作来源\n\tif (params.settingInfo.wxCreationSource && params.settingInfo.wxCreationSource.length > 0) {\n\t\tconst source = params.settingInfo.wxCreationSource[0];\n\t\tawait page.locator(\"#js_claim_source_area .allow_click_opr\").click();\n\t\tawait page.waitForTimeout(200);\n\t\tconst poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n\t\tawait poperInstance.locator(`.frm_radio_item label[for=\"${source}\"]`).click();\n\t}\n\n\t// 11. 关闭平台推荐\n\tif (params.settingInfo.wxNotAllowRecommend === true) {\n\t\tawait page.locator(\"#js_not_recommend_area .allow_click_opr\").click();\n\t\tawait page.waitForTimeout(200);\n\t\tconst poperInstance = page.locator('.popover:not([style*=\"display: none\"])');\n\t\tawait poperInstance.locator('.frm_radio_item label[for=\"not_recomment_0\"]').click();\n\t}\n\n\tawait page.waitForTimeout(1000);\n\n\t// 12. 发布\n\tconst articleId = await new Promise<string>((resolve) => {\n\t\t// 定义响应处理函数\n\t\tconst handleResponse = async (response: Response) => {\n\t\t\tconst url = response.url();\n\t\t\tconst query = parseUrlQueryString(url);\n\t\t\tif (url.includes(\"/cgi-bin/operate_appmsg\") && query?.t === \"ajax-response\") {\n\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\tresolve(jsonResponse?.appMsgId);\n\t\t\t}\n\t\t};\n\n\t\t// 开始监听响应事件\n\t\tpage.on(\"response\", handleResponse);\n\n\t\t// 点击发表\n\t\tpage.locator(\"#editor_pannel #bottom_main #js_button_area #js_send button\").click();\n\t});\n\n\t// 再次点击发表\n\tawait page.waitForSelector('.new_mass_send_dialog .weui-desktop-dialog__wrp:not([style*=\"display: none\"])', {\n\t\tstate: \"visible\",\n\t});\n\tawait page\n\t\t.locator(\".new_mass_send_dialog .weui-desktop-dialog .weui-desktop-dialog__ft button.weui-desktop-btn_primary\")\n\t\t.click();\n\n\t// 点击继续发表\n\tawait page.waitForSelector('.double_check_dialog .weui-desktop-dialog__wrp:not([style*=\"display: none\"])', {\n\t\tstate: \"visible\",\n\t});\n\tawait page\n\t\t.locator(\".double_check_dialog .weui-desktop-dialog .weui-desktop-dialog__ft button.weui-desktop-btn_primary\")\n\t\t.click();\n\n\ttry {\n\t\tconst startTime = Date.now();\n\n\t\t// biome-ignore lint/suspicious/noAsyncPromiseExecutor: <explanation>\n\t\tawait new Promise<void>(async (resolve, reject) => {\n\t\t\t// 定义响应处理函数\n\t\t\tconst handleResponse = async (response: Response) => {\n\t\t\t\tif (response.url().includes(\"/safe/safeuuid\")) {\n\t\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\t\tif (jsonResponse.errcode === 405) {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\t\t} else if (Date.now() - startTime > waitQrcodeResultMaxTime) {\n\t\t\t\t\t\treject();\n\t\t\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// 开始监听响应事件\n\t\t\tpage.on(\"response\", handleResponse);\n\n\t\t\t// 获取微信验证二维码\n\t\t\tawait page.waitForSelector(\".dialog .js_wxchecks.safe_check img.qrcode.js_qrcode\", {\n\t\t\t\tstate: \"visible\",\n\t\t\t});\n\t\t\tconst qrcodeSrc = await page\n\t\t\t\t.locator(\".dialog .js_wxchecks.safe_check img.qrcode.js_qrcode\")\n\t\t\t\t.first()\n\t\t\t\t.getAttribute(\"src\");\n\t\t\tif (qrcodeSrc) {\n\t\t\t\tconst imgUrl = new URL(qrcodeSrc, page.url()).href; // 处理相对路径\n\t\t\t\tconst response = await axios({\n\t\t\t\t\tmethod: \"get\",\n\t\t\t\t\turl: imgUrl,\n\t\t\t\t\tresponseType: \"arraybuffer\", // 确保接收二进制数据\n\t\t\t\t});\n\t\t\t\t// 保存文件\n\t\t\t\tconst qrcodeFilePath = path.join(tmpCachePath, \"weixin_qrcode.jpg\");\n\t\t\t\tfs.writeFileSync(qrcodeFilePath, response.data);\n\t\t\t\tparams.safeQrcodeCallback?.(qrcodeFilePath);\n\t\t\t} else {\n\t\t\t\tthrow new Error(\"qrcodeSrc is empty\");\n\t\t\t}\n\t\t});\n\t} catch (error) {\n\t\tawait page.close();\n\t\treturn { code: 500, message: \"群发二维码已过期,请重试发布。\", data: \"\" };\n\t}\n\n\tawait page.waitForTimeout(3000);\n\tawait page.close();\n\n\treturn success(articleId);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams } from \"../../types\";\nimport { defaultParams, executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\nexport interface WxInteraction {\n\tType: \"public\" | \"private\" | \"off\"; // public:评论留言, priviate: 快捷私信, off: 不开启\n\tOption?: { // public下相关设置\n\t Comment: \"已关注7天及以上的用户\" | \"已关注的用户\" | \"所有用户\"; // 评论设置\n\t reply: \"已关注7天及以上的用户\" | \"已关注的用户\" | \"所有用户\"; // 回复设置\n\t elect_comment: boolean; // 是否开启精选评论\n\t elect_reply: boolean; // 是否开启精选回复\n\t};\n }\n\nexport interface WeixinPublishParams extends ActiomCommonParams {\n\tsaveType: \"draft\" | \"publish\"; // 保存成草稿 / 发布\n\tmasssend?: boolean; // 是否群发(默认开启群发)\n\ttoken: string | number;\n\ttitle: string; // 标题\n\tcontent: string; // 正文内容\n\tuuid?: string;\n\tappMsgId?: string;\n\toperation_seq?: string;\n\tsettingInfo: {\n\t\twxCover: string; // 封面\n\t\twxAuthor?: string; // 作者\n\t\twxAbstract?: string; // 摘要\n\t\twxOriginalText?: string; // 原文链接\n\t\twxCopyright?: boolean, // 版权声明\n\t\twxWhitelist?: string[]; // 转载白马名单\n\t\twxRewardTarget?: Record<string, string>; // 赞赏目标与ID\n\t\twxRewardText?: string; // 赞赏文案\n\t\twxQuickReprint?: boolean; // 快捷转载\n\t\twxNotAllowRecommend?: boolean; // 不允许被平台推荐\n\t\twxCreationSource?: string[]; // 创作来源\n\t\twxInteraction?: WxInteraction // 互动设置\n\t};\n\tsafeQrcodeCallback?: (qrcodePath: string) => void; // 二维码验证回调\n}\n\nexport interface WxWhitelistUserInfo {\n\tnickname: string;\n\topenid: string; // 微信常用字段命名可能是 open_id\n\tusername: string;\n\twx_name: string;\n\tpic_url: string;\n}\n\nexport type PublishAction = CommonAction<WeixinPublishParams, string>;\n\nexport const weixinPublish: PublishAction = async (task, _params) => {\n\tconst params = defaultParams(_params, { masssend: true });\n\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport FormData from \"form-data\";\n\nimport type { PublishAction, WeixinmpPublishParams } from \".\";\nimport type { WeiXinCropResult } from \"../../types\";\nimport type { AspectRatio } from \"../../utils\";\nimport { calculateCropCoordinates, getFileState } from \"../../utils\";\nimport { Http } from \"../../utils/http\"\n\ntype ColorResponse = {\n\twidth: number;\n\theight: number;\n\ttheme_color: { r: number; g: number; b: number };\n};\ntype ShareInamgeInfo = {\n\tcdn_url: string;\n\tdisable_live: 0;\n\tdisable_theme: 1;\n\tfile_id: number;\n\twidth: number;\n\theight: number;\n\ttheme_color: string;\n\turl: string;\n};\n\nconst saveDraft = (\n\thttp: Http,\n\tparams: WeixinmpPublishParams,\n\tdata: Record<string, unknown>,\n) => {\n\tconst formData = new FormData();\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tformData.append(key, value);\n\t}\n\n\treturn http.api({\n\t\tmethod: \"post\",\n\t\turl: \"https://mp.weixin.qq.com/cgi-bin/operate_appmsg\",\n\t\tparams: {\n\t\t\ttoken: params.token,\n\t\t\tt: \"ajax-response\",\n\t\t\tsub: \"update\",\n\t\t\ttype: 77,\n\t\t\tlang: \"zh_CN\",\n\t\t},\n\t\tdata: formData,\n\t});\n};\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://mp.weixin.qq.com\",\n\t\t\treferer: `https://mp.weixin.qq.com/cgi-bin/appmsg?token=${params.token}&lang=zh_CN`,\n\t\t},\n\t});\n\n\t// 1. 上传图片\n\tconst shareImageInfos: ShareInamgeInfo[] = [];\n\tconst cropResult: Record<string, string> = {};\n\n\tif (params.banners && params.banners.length > 0) {\n\t\t// 下载图片到本地\n\t\tconst images = await Promise.all(\n\t\t\tparams.banners.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\tfor (let index = 0; index < images.length; index++) {\n\t\t\tconst image = images[index];\n\t\t\tconst fileState = getFileState(image);\n\n\t\t\tconst formData = new FormData();\n\t\t\tformData.append(\"id\", `WU_FILE_${index + 1}`);\n\t\t\tformData.append(\"name\", fileState.name);\n\t\t\tformData.append(\"type\", fileState.type);\n\t\t\tformData.append(\"lastModifiedDate\", fileState.lastModifiedDate);\n\t\t\tformData.append(\"size\", fileState.size);\n\t\t\tformData.append(\"file\", fs.createReadStream(image));\n\n\t\t\tconst response = await http.api<{ cdn_url: string; content: string }>({\n\t\t\t\tmethod: \"post\",\n\t\t\t\turl: `https://mp.weixin.qq.com/cgi-bin/filetransfer?action=upload_material&f=json&writetype=doublewrite&token=${params.token}&lang=zh_CN`,\n\t\t\t\tdata: formData,\n\t\t\t});\n\n\t\t\t// 获取图片的主题色\n\t\t\tconst colorResponseData = await http.api<ColorResponse>({\n\t\t\t\tmethod: \"get\",\n\t\t\t\turl: \"https://mp.weixin.qq.com/cgi-bin/filepage\",\n\t\t\t\tparams: {\n\t\t\t\t\taction: \"getimgext\",\n\t\t\t\t\tfileid: response.content,\n\t\t\t\t\ttoken: params.token,\n\t\t\t\t\tlang: \"zh_CN\",\n\t\t\t\t\tf: \"json\",\n\t\t\t\t\tajax: 1,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst themeColor = colorResponseData.theme_color;\n\n\t\t\tshareImageInfos.push({\n\t\t\t\tcdn_url: response.cdn_url,\n\t\t\t\tdisable_live: 0,\n\t\t\t\tdisable_theme: 1,\n\t\t\t\tfile_id: Number(response.content),\n\t\t\t\twidth: colorResponseData.width,\n\t\t\t\theight: colorResponseData.height,\n\t\t\t\ttheme_color: `rgb(${themeColor.r},${themeColor.g},${themeColor.b})`,\n\t\t\t\turl: response.cdn_url,\n\t\t\t});\n\n\t\t\t// 第一张图片还需要添加头图裁切\n\t\t\tif (index === 0) {\n\t\t\t\tconst cropFormData = new FormData();\n\t\t\t\tcropFormData.append(\"imgurl\", response.cdn_url);\n\n\t\t\t\t// 需要裁切 16:9,3:4,1:1 三种尺寸的图片\n\t\t\t\tconst cropRatios: AspectRatio[] = [\n\t\t\t\t\t[16, 9],\n\t\t\t\t\t[1, 1],\n\t\t\t\t\t[3, 4],\n\t\t\t\t];\n\t\t\t\tcropFormData.append(\"size_count\", cropRatios.length);\n\t\t\t\tconst cropCoordinates = cropRatios.map((r, idx) => {\n\t\t\t\t\tconst cropCoordinate = calculateCropCoordinates(\n\t\t\t\t\t\tcolorResponseData.width,\n\t\t\t\t\t\tcolorResponseData.height,\n\t\t\t\t\t\tr,\n\t\t\t\t\t);\n\t\t\t\t\tcropFormData.append(`size${idx}_x1`, cropCoordinate.x1);\n\t\t\t\t\tcropFormData.append(`size${idx}_y1`, cropCoordinate.y1);\n\t\t\t\t\tcropFormData.append(`size${idx}_x2`, cropCoordinate.x2);\n\t\t\t\t\tcropFormData.append(`size${idx}_y2`, cropCoordinate.y2);\n\n\t\t\t\t\treturn { ratio: `${r[0]}_${r[1]}`, ...cropCoordinate };\n\t\t\t\t});\n\n\t\t\t\tcropFormData.append(\"token\", params.token);\n\t\t\t\tcropFormData.append(\"lang\", \"zh_CN\");\n\t\t\t\tcropFormData.append(\"f\", \"json\");\n\t\t\t\tcropFormData.append(\"ajax\", 1);\n\n\t\t\t\tconst cropResponse = await http.api<{ result: WeiXinCropResult[] }>({\n method: \"post\",\n url: \"https://mp.weixin.qq.com/cgi-bin/cropimage?action=crop_multi\",\n data: cropFormData\n });\n\n\t\t\t\tcropResult.cdn_url_back0 = response.cdn_url; // 原图\n\t\t\t\tcropResult.cdn_url0 = cropResponse.result[0].cdnurl; // 16:9\n\t\t\t\tcropResult.cdn_235_1_url0 = cropResponse.result[0].cdnurl; // 16:9\n\t\t\t\tcropResult.cdn_16_9_url0 = cropResponse.result[0].cdnurl; // 16:9\n\t\t\t\tcropResult.cdn_1_1_url0 = cropResponse.result[1].cdnurl; // 1:1\n\t\t\t\tcropResult.cdn_3_4_url0 = cropResponse.result[2].cdnurl; // 3:4\n\t\t\t\tcropResult.crop_list0 = JSON.stringify({\n\t\t\t\t\tcrop_list: cropCoordinates.map((it, idx) => ({\n\t\t\t\t\t\tfile_id: cropResponse.result[idx].file_id,\n\t\t\t\t\t\tratio: it.ratio,\n\t\t\t\t\t\tx1: 0,\n\t\t\t\t\t\tx2: 0,\n\t\t\t\t\t\ty1: 0,\n\t\t\t\t\t\ty2: 0,\n\t\t\t\t\t})),\n\t\t\t\t\tcrop_list_percent: cropCoordinates.map((it, idx) => ({\n\t\t\t\t\t\t...it,\n\t\t\t\t\t\tfile_id: cropResponse.result[idx].file_id,\n\t\t\t\t\t})),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// 保存\n\tconst res = await saveDraft(http, params, {\n\t\t...cropResult,\n\t\ttoken: params.token,\n\t\tlang: \"zh_CN\",\n\t\tf: \"json\",\n\t\tajax: 1,\n\t\toperate_from: \"Chrome\",\n\t\ttitle0: params.title,\n\t\tcontent0: params.content,\n\t\tshare_imageinfo0: JSON.stringify(shareImageInfos),\n\t});\n\n return success(res)\n};\n","import path from \"node:path\";\nimport type { CookieMap } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\n\nimport type { PublishAction, Source } from \"./index\";\n\nconst sourceText: Record<Source, string> = {\n\tai: \"内容由AI生成\",\n\tofficial: \"素材来源官方媒体/网络新闻\",\n\tfictional: \"内容剧情演绎,仅供娱乐\",\n\tpersonal: \"个人观点,仅供参考\",\n};\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsecure: true,\n\t\tdomain: \"mp.weixin.qq.com\",\n\t\turl: \"https://mp.weixin.qq.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl:\n\t\t\tparams.url ||\n\t\t\t`https://mp.weixin.qq.com/cgi-bin/appmsg?t=media/appmsg_edit_v2&action=edit&isNew=1&type=77&createType=8&token=${params.token}&lang=zh_CN`,\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\tconst tmpCachePath = task.getTmpPath();\n\n\t// 0. 判断是否登录\n\ttry {\n\t\tawait page.waitForSelector(\"#editor_pannel\");\n\t} catch (error) {\n\t\treturn { code: 500, message: \"登录失效\", data: page.url() };\n\t}\n\n\tconst container = page.locator(\"#editor_pannel\");\n\n\t// 1. 添加图片\n\tif (params.banners && params.banners.length > 0) {\n\t\tconst images = await Promise.all(\n\t\t\tparams.banners.map((url) => {\n\t\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t\t}),\n\t\t);\n\n\t\t// 选择文件\n\t\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\t\tawait container.locator(\".image-selector__add\").hover();\n\t\tawait container\n\t\t\t.locator(\".image-selector__add .pop-opr__list .pop-opr__item\")\n\t\t\t.filter({ hasText: \"本地上传\" })\n\t\t\t.click();\n\t\tconst fileChooser = await fileChooserPromise;\n\t\tawait fileChooser.setFiles(images);\n\t}\n\n\t// 2. 标题\n\tconst titleInstance = page.locator(\"#js_title_main textarea#title\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 3. 正文\n\tconst descInstance = page.locator(\"#guide_words_main .ProseMirror\");\n\tawait descInstance.click();\n\tawait descInstance.fill(params.content);\n\n\t// 4. 来源\n\tif (params.source) {\n\t\tawait container.locator(\"#js_claim_source_area .js_claim_source_desc\").click();\n\t\tawait page\n\t\t\t.locator(\".popover_article_claim_source .frm_radio_item label\")\n\t\t\t.filter({ hasText: sourceText[params.source] })\n\t\t\t.click();\n\t}\n\n\t// 5. 等待所有图片上传完成\n\tif (params.banners && params.banners.length > 0) {\n\t\tawait page.waitForSelector(\"#editor_pannel .image-selector .image-selector__preview\");\n\t}\n\n\t// 6. 保存\n\tif (params.draft) {\n\t\tawait container.locator(\"#bottom_main #js_submit button\").click();\n\t} else {\n\t\tawait container.locator(\"#bottom_main #js_send button\").click();\n\t}\n\n\treturn success(\"\");\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\nexport type Source = \"ai\" | \"official\" | \"fictional\" | \"personal\";\n\nexport interface WeixinmpPublishParams extends ActiomCommonParams {\n\ttoken: string | number;\n\tbanners?: string[];\n\ttitle: string; // 标题\n\tcontent: string; // 正文\n\t/**\n\t * 内容由AI生成 - ai\n\t * 素材来源官方媒体/网络新闻 - official\n\t * 内容剧情演绎,仅供娱乐 - fictional\n\t * 个人观点,仅供参考 - personal\n\t */\n\tsource?: Source; // 来源\n\tdraft?: boolean; // 是否为草稿\n}\n\nexport type PublishAction = CommonAction<WeixinmpPublishParams>;\n\nexport const weixinmpPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import { Buffer } from \"node:buffer\";\nimport crypto from \"node:crypto\";\n\n/**\n * 小红书加密参数逆向,代码来自:https://github.com/Cloxl/xhshow\n */\nexport class XsEncrypt {\n\tprivate words = [929260340, 1633971297, 895580464, 925905270];\n\tprivate keyBytes = Buffer.concat(\n\t\tthis.words.map(\n\t\t\t(word) =>\n\t\t\t\tnew Uint8Array(Buffer.from([(word >> 24) & 0xff, (word >> 16) & 0xff, (word >> 8) & 0xff, word & 0xff])),\n\t\t),\n\t);\n\tprivate iv = Buffer.from(\"4uzjr7mbsibcaldp\", \"utf8\");\n\n\t/**\n\t * 根据传入的url生成MD5摘要\n\t *\n\t * @param {string} url - API的url\n\t * @returns {string} MD5摘要\n\t */\n\tasync encryptMD5(url: string): Promise<string> {\n\t\treturn crypto.createHash(\"md5\").update(url, \"utf8\").digest(\"hex\");\n\t}\n\n\t/**\n\t * 根据传入的text生成AES加密后的内容,并将其转为base64编码\n\t *\n\t * @param {string} text - 需要加密的字符串\n\t * @returns {string} 加密后的base64编码字符串\n\t */\n\tasync encryptText(text: string): Promise<string> {\n\t\t// 将文本编码为 Base64\n\t\tconst textEncoded = Buffer.from(text).toString(\"base64\");\n\t\t// 创建 AES 加密器\n\t\tconst cipher = crypto.createCipheriv(\"aes-128-cbc\", new Uint8Array(this.keyBytes), new Uint8Array(this.iv));\n\t\t// 对数据进行填充\n\t\tconst ciphertext = cipher.update(textEncoded, \"utf8\", \"base64\");\n\t\treturn ciphertext + cipher.final(\"base64\");\n\t}\n\n\t/**\n\t * 把加密后的payload转为16进制\n\t *\n\t * @param {string} encodedData - 加密后的payload(Base64编码)\n\t * @returns {string} 十六进制字符串\n\t */\n\tasync base64ToHex(encodedData: string): Promise<string> {\n\t\t// 将 Base64 字符串解码为二进制数据\n\t\tconst decodedData = Buffer.from(encodedData, \"base64\");\n\t\t// 将二进制数据转换为十六进制字符串\n\t\treturn decodedData.toString(\"hex\");\n\t}\n\n\t/**\n\t * 把小红书加密参数payload转16进制 再使用base64编码\n\t *\n\t * @param {string} payload - 要加密处理的payload内容\n\t * @param {string} platform - 登录平台\n\t * @returns {string} 加密后并进行base64编码的字符串\n\t */\n\tasync encryptPayload(payload: string, platform: string): Promise<string> {\n\t\t// 将 payload 转换为十六进制\n\t\tconst hexPayload = await this.base64ToHex(payload);\n\n\t\t// 构造对象\n\t\tconst obj = {\n\t\t\tsignSvn: \"56\",\n\t\t\tsignType: \"x2\",\n\t\t\tappID: platform,\n\t\t\tsignVersion: \"1\",\n\t\t\tpayload: hexPayload,\n\t\t};\n\n\t\t// 将对象转换为 JSON 字符串(紧凑格式)\n\t\tconst jsonString = JSON.stringify(obj, null, 0);\n\n\t\t// 对 JSON 字符串进行 Base64 编码\n\t\treturn Buffer.from(jsonString).toString(\"base64\");\n\t}\n\n\t/**\n\t * 将传入的参数加密为小红书的xs\n\t * Args: url: API请求的URL\n\t * a1: 签名参数a1\n\t * ts: 时间戳\n\t * platform: 登录平台 默认为xhs-pc-web\n\t * Returns:\n\t * 最终的加密签名字符串,前缀为“XYW_”\n\t */\n\tasync encryptXs(url: string, a1: string, ts: string, platform = \"xhs-pc-web\"): Promise<string> {\n\t\tconst text = `x1=${await this.encryptMD5(`url=${url}`)};x2=0|0|0|1|0|0|1|0|0|0|1|0|0|0|0|1|0|0|0;x3=${a1};x4=${ts};`;\n\t\treturn `XYW_${await this.encryptPayload(await this.encryptText(text), platform)}`;\n\t}\n\n\tdumps(...rest: Parameters<typeof JSON.stringify>): string {\n\t\tconst [data, replacer = null, space = 0] = rest;\n\t\treturn JSON.stringify(data, replacer, space)\n\t\t\t.replace(/\\n/g, \"\")\n\t\t\t.replace(/\":\\s+\"/g, '\":\"');\n\t}\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport type { PublishAction } from \".\";\nimport { Http } from \"../../utils/http\";\nimport { XsEncrypt } from \"../../utils/xhsXsEncrypt\";\n\ninterface CommonResponse<T = unknown> {\n\tdata: T;\n\tcode: number;\n\tsuccess: boolean;\n}\n\ninterface UploadTempPermit {\n\tbucket: string;\n\tfileIds: string[];\n\ttoken: string;\n}\n\nconst errnoMap: Record<number, string> = {\n\t915: \"所属C端账号手机号被修改,请重新登录\",\n\t903: \"账户已登出,需重新登陆重试!\",\n\t902: \"登录已过期,请重新登录!\"\n};\n\n// 小红书参数加密器\nconst xsEncrypt = new XsEncrypt();\n\nexport const mockAction: PublishAction = async (task, params) => {\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n\tif (!a1Cookie) {\n\t\treturn { code: 200, message: \"账号数据异常,请重新绑定账号后重试。\", data: \"\" };\n\t}\n\n\tconst http = new Http({\n\t\theaders: {\n\t\t\tcookie: params.cookies.map((it) => `${it.name}=${it.value}`).join(\";\"),\n\t\t\torigin: \"https://creator.xiaohongshu.com\",\n\t\t\treferer: \"https://creator.xiaohongshu.com/\",\n\t\t\t\"user-agent\":\n\t\t\t\t\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36\",\n\t\t},\n\t});\n\n\t// 添加响应拦截器\n\thttp.addResponseInterceptor<CommonResponse>((response) => {\n\t\tconst responseData = response.data;\n\n\t\t// 检查响应中的 errno 字段\n\t\tif (responseData?.code && responseData.code !== 0) {\n\t\t\tconst errmsg = errnoMap[responseData.code] || response.config.defaultErrorMsg || \"文章发布异常,请稍后重试。\";\n\n\t\t\treturn {\n\t\t\t\tcode: errnoMap[responseData.code] ? 200 : 500,\n\t\t\t\tmessage: errmsg,\n\t\t\t\tdata: responseData\n\t\t\t};\n\t\t}\n\t});\n\n\t// 0. 获取上传 token\n\tconst fetchCoverUrl = `/api/media/v1/upload/creator/permit?biz_name=spectrum&scene=image&file_count=${params.banners.length}&version=1&source=web`;\n\tconst xt = Date.now().toString();\n\tconst xs = await xsEncrypt.encryptXs(fetchCoverUrl, a1Cookie, xt);\n\tconst coverIdInfo = await http.api<CommonResponse<{ uploadTempPermits: UploadTempPermit[] }>>({\n\t\tmethod: \"get\",\n\t\tbaseURL: \"https://creator.xiaohongshu.com\",\n\t\turl: fetchCoverUrl,\n\t\tdefaultErrorMsg: \"获取小红书用户信息失败,请稍后重试发布。\",\n\t\theaders: { \"x-s\": xs, \"x-t\": xt },\n\t});\n\n\tconst coverIds = coverIdInfo.data.uploadTempPermits[0].fileIds;\n\tconst ossToken = coverIdInfo.data.uploadTempPermits[0].token;\n\tif(!coverIds || !ossToken) return { code: 200, message: \"图片上传失败,请稍后重试!\", data: \"\" };\n\n\t// 1. 上传附件\n\tconst uploadFile = async (url: string, index: number) => {\n\t\tconst fileName = getFilenameFromUrl(url);\n\t\tconst localUrl = await downloadImage(url, path.join(tmpCachePath, fileName));\n\n\t\tconst ossFileId = coverIds[index];\n\t\t// 读取本地文件,转成 Buffer\n\t\tconst fileBuffer = fs.readFileSync(localUrl);\n\n\t\tawait http.api({\n\t\t\tmethod: \"put\",\n\t\t\turl: `https://ros-upload.xiaohongshu.com/${ossFileId}`,\n\t\t\tdata: fileBuffer,\n\t\t\theaders: {\n\t\t\t\t\"x-cos-security-token\": ossToken,\n\t\t\t},\n\t\t\tdefaultErrorMsg: \"图片上传异常,请稍后重试发布。\",\n\t\t});\n\n\t\treturn { ossFileId, ossToken };\n\t};\n\n\tconst coverInfos = await Promise.all(params.banners.map((it, idx) => uploadFile(it, idx)));\n\n\tif(params.topic && params.topic.length >0){\n\t\tawait Promise.all(params.topic.map(async (topic) => {\n\t\t\tif(!topic[\"id\"]){\n\t\t\t\tconst topicData = {topic_names: topic[\"name\"]}\n\t\t\t\tconst topicDataStr = xsEncrypt.dumps(topicData);\n\t\t\t\tconst publishXt = Date.now().toString();\n\t\t\t\tconst publishXs = await xsEncrypt.encryptXs(`/web_api/sns/capa/postgw/topic/batch_customized${topicDataStr}`, a1Cookie, publishXt);\n\t\n\t\t\t\tlet createTopic = await http.api({\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\turl: \"https://edith.xiaohongshu.com/web_api/sns/capa/postgw/topic/batch_customized\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t\"x-s\": publishXs,\n\t\t\t\t\t\t\"x-t\": publishXt,\n\t\t\t\t\t},\n\t\t\t\t\tdata: topicData,\n\t\t\t\t\tdefaultErrorMsg: \"话题创建异常,请稍后重试。\",\n\t\t\t\t})\n\t\t\t\tObject.assign(topic , createTopic.data.topic_infos[0])\n\t\t\t}\n\t\t}))\n\t};\n\n\tconst publishData = {\n\t\tcommon: {\n\t\t\tats: [],\n\t\t\tbiz_relations: [],\n\t\t\tdesc: params?.content,\n\t\t\tgoods_info: {},\n\t\t\thash_tag: params.topic || [],\n\t\t\tnote_id: \"\",\n\t\t\tsource: JSON.stringify({\n\t\t\t\ttype: \"web\",\n\t\t\t\tids: \"\",\n\t\t\t\textraInfo: '{\"systemId\":\"web\"}',\n\t\t\t}),\n\t\t\ttitle: params?.title,\n\t\t\ttype: \"normal\",\n\t\t\tprivacy_info: {\n\t\t\t\top_type: 1,\n\t\t\t\ttype: params.visibleRange === \"public\" ? 0 : 1,\n\t\t\t},\n\t\t\tpost_loc: params.address\n\t\t\t\t? {\n\t\t\t\t\t\tname: params.address?.name,\n\t\t\t\t\t\tpoi_id: params.address?.poi_id,\n\t\t\t\t\t\tpoi_type: params.address?.poi_type,\n\t\t\t\t\t\tsubname: params.address?.full_address,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tbusiness_binds: \"\",\n\t\t},\n\t\timage_info: {\n\t\t\timages: coverInfos.map((it) => ({\n\t\t\t\textra_info_json: '{\"mimeType\":\"image/png\"}',\n\t\t\t\tfile_id: it.ossFileId,\n\t\t\t\tmetadata: { source: -1 },\n\t\t\t\tstickers: { floating: [], version: 2 },\n\t\t\t})),\n\t\t},\n\t\tvideo_info: null,\n\t};\n\n\t// 自主声明\n\tconst userDeclarationBind = {\n\t\torigin: 2,\n\t\tphotoInfo: {},\n\t\trepostInfo: {},\n\t};\n\n\tif (params.selfDeclaration?.type === \"fictional-rendition\") {\n\t\t// 虚拟演绎,仅供娱乐\n\t\tuserDeclarationBind.origin = 1;\n\t} else if (params.selfDeclaration?.type === \"ai-generated\") {\n\t\t// 笔记含AI合成内容\n\t\tuserDeclarationBind.origin = 2;\n\t} else if (params.selfDeclaration?.type === \"source-statement\") {\n\t\t// 内容来源声明\n\t\tif (params.selfDeclaration.childType === \"self-labeling\") {\n\t\t\t// 已自主标注\n\t\t\tuserDeclarationBind.origin = 3;\n\t\t} else if (params.selfDeclaration.childType === \"self-shooting\") {\n\t\t\t// 自主拍摄\n\t\t\tuserDeclarationBind.origin = 4;\n\t\t\tconst photoInfo: { photoPlace?: unknown; photoTime?: string } = {};\n\n\t\t\tif (params.selfDeclaration.shootingLocation) {\n\t\t\t\t// 拍摄地点\n\t\t\t\tphotoInfo.photoPlace = {\n\t\t\t\t\tname: params.selfDeclaration.shootingLocation.name,\n\t\t\t\t\tpoiId: params.selfDeclaration.shootingLocation.poi_id,\n\t\t\t\t\tpoiType: params.selfDeclaration.shootingLocation.poi_type,\n\t\t\t\t\tsubname: params.selfDeclaration.shootingLocation.full_address,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (params.selfDeclaration.shootingDate) {\n\t\t\t\t// 拍摄日期\n\t\t\t\tphotoInfo.photoTime = params.selfDeclaration.shootingDate;\n\t\t\t}\n\n\t\t\tuserDeclarationBind.photoInfo = photoInfo;\n\t\t} else if (params.selfDeclaration.childType === \"transshipment\") {\n\t\t\t// 来源转载\n\t\t\tuserDeclarationBind.origin = 5;\n\n\t\t\tif (params.selfDeclaration.sourceMedia) {\n\t\t\t\t// 来源媒体\n\t\t\t\tuserDeclarationBind.repostInfo = {\n\t\t\t\t\tsource: params.selfDeclaration.sourceMedia,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\tconst business_binds = {\n\t\tversion: 1,\n\t\tbizType: \"\",\n\t\tnoteId: \"\",\n\t\tnoteOrderBind: {},\n\t\t// 发布时间 - 立即发布/定时发布\n\t\tnotePostTiming: params.isImmediatelyPublish ? {} : { postTime: params.scheduledPublish },\n\t\tnoteCollectionBind: { id: \"\" },\n\t\t...(params.selfDeclaration ? { userDeclarationBind } : {}),\n\t};\n\n\tpublishData.common.business_binds = JSON.stringify(business_binds);\n\n\tconst publishDataStr = xsEncrypt.dumps(publishData);\n\tconst publishXt = Date.now().toString();\n\tconst publishXs = await xsEncrypt.encryptXs(`/web_api/sns/v2/note${publishDataStr}`, a1Cookie, publishXt);\n\n\t// 发布\n\tconst publishResult = await http.api<CommonResponse<{ id: string }>>({\n\t\tmethod: \"post\",\n\t\turl: \"https://edith.xiaohongshu.com/web_api/sns/v2/note\",\n\t\tdata: publishData,\n\t\theaders: {\n\t\t\t\"x-s\": publishXs,\n\t\t\t\"x-t\": publishXt,\n\t\t},\n\t\tdefaultErrorMsg: \"文章发布异常,请稍后重试。\",\n\t});\n\n\treturn success(publishResult.data?.id);\n};\n","import path from \"node:path\";\nimport type { CookieMap, Locator, Response } from \"@iflyrpa/share\";\nimport { downloadImage, getFilenameFromUrl, success } from \"@iflyrpa/share\";\nimport { XsEncrypt } from \"../../utils/xhsXsEncrypt\";\nimport type { PublishAction } from \"./index\";\n\n// 小红书参数加密器\nconst xsEncrypt = new XsEncrypt();\n\nexport const rpaAction: PublishAction = async (task, params) => {\n\tconst commonCookies: CookieMap[number] = {\n\t\tpath: \"/\",\n\t\tsameSite: \"lax\",\n\t\tsecure: false,\n\t\tdomain: \"xiaohongshu.com\",\n\t\turl: \"https://creator.xiaohongshu.com\",\n\t\thttpOnly: true,\n\t};\n\n\tconst page = await task.createPage({\n\t\tshow: task.debug,\n\t\turl: params.url || \"https://creator.xiaohongshu.com/publish/publish\",\n\t\tcookies: params.cookies?.map((it) => ({ ...commonCookies, ...it })) || [],\n\t});\n\n\tconst tmpCachePath = task.getTmpPath();\n\n\tconst interceptUrls = [\n\t\t'/api/media/v1/upload/creator/permit',\n\t\t'/api/galaxy/v2/creator/activity_center/list',\n\t\t'/web_api/sns/v5/creator/topic/template/list',\n\t\t'/web_api/sns/v5/creator/file/encryption',\n\t\t'/web_api/sns/capa/postgw/topic/batch_customized',\n\t\t'/web_api/sns/v2/note'\n\t];\n\t \n\tawait page.route('**', async (route, request) => {\n\t\tconst url = request.url();\n\t\tif (interceptUrls.some(pattern => url.includes(pattern))) {\n\t\t\tconst urlObj = new URL(url);\n\t\t\tconst fetchCoverUrl = urlObj.pathname + urlObj.search;\n\t\t\tconst xt = Date.now().toString();\n\n\t\t\tconst a1Cookie = params.cookies.find((it) => it.name === \"a1\")?.value;\n\t\t\tif (!a1Cookie) {\n\t\t\t\tawait route.fulfill({\n\t\t\t\t\tstatus: 200,\n\t\t\t\t\tcontentType: 'application/json',\n\t\t\t\t\tbody: JSON.stringify({ code: 200, message: \"账号数据异常,请重新绑定账号后重试。\", data: \"\" })\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst isNoteRequest = urlObj.pathname.includes(interceptUrls[5]);\n\n\t\t\tconst xs = await (isNoteRequest \n\t\t\t\t? (async () => {\n\t\t\t\t\tconst publishData = JSON.parse(request.postData() || \"\")\n\t\t\t\t\tconst publishDataStr = xsEncrypt.dumps(publishData);\n\t\t\t\t\t\n\t\t\t\t\treturn xsEncrypt.encryptXs(interceptUrls[5]+publishDataStr, a1Cookie, xt);\n\t\t\t\t })(): xsEncrypt.encryptXs(fetchCoverUrl, a1Cookie, xt))\n\n\t\t\n\t\t\tconst newHeaders = {\n\t\t\t\t...request.headers(),\n\t\t\t\t'x-s': xs\n\t\t\t};\n\t\t\n\t\t\tawait route.continue({ headers: newHeaders });\n\t\t}else {\n\t\t\tawait route.continue();\n\t\t}\n\t});\n\n\n\t// 通用的选择地点\n\tconst selectAddress = async (selector: Locator, address: string) => {\n\t\tconst instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n\t\tawait instance.click();\n\t\tawait instance.locator(\"input\").fill(address);\n\t\tconst poperInstance = page.locator('.d-popover:not([style*=\"display: none\"]) .d-options .d-grid-item');\n\t\tawait poperInstance.first().waitFor();\n\t\tawait poperInstance.first().click();\n\t};\n\n\t// 通用的选择日期\n\tconst selectDate = async (selector: string | Locator, date: string) => {\n\t\tconst instance = typeof selector === \"string\" ? page.locator(selector) : selector;\n\t\tawait instance.click();\n\t\tawait instance.fill(date);\n\t\tawait instance.blur();\n\t};\n\n\t// 查找显示的 popover 弹窗\n\tconst getPoperInstance = async (): Promise<Locator> => {\n\t\tawait page.waitForTimeout(500);\n\t\tconst elements = page.locator(\".d-popover\");\n\t\tconst count = await elements.count();\n\t\tconst visibleElements: (typeof elements)[] = [];\n\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst element = elements.nth(i);\n\t\t\tconst style = await element.getAttribute(\"style\");\n\t\t\tif (style && !style.includes(\"display: none\")) {\n\t\t\t\tvisibleElements.push(element);\n\t\t\t}\n\t\t}\n\n\t\tif (visibleElements.length > 0) {\n\t\t\treturn visibleElements[visibleElements.length - 1];\n\t\t}\n\n\t\tthrow new Error(\"未找到 popover 弹窗\");\n\t};\n\n\t// 查找显示的 dialog 弹窗\n\tconst getDialogInstance = async (): Promise<Locator> => {\n\t\tawait page.waitForTimeout(1000);\n\t\tconst elements = page.locator(\".el-dialog\");\n\t\treturn elements.last();\n\t};\n\n\t// 自动化脚本\n\t// ----------------------------------------------------------------------------------\n\n\t// 等待登录成功\n\ttry {\n\t\tawait page.waitForSelector(\"#CreatorPlatform\", { state: \"visible\" });\n\t} catch (error) {\n\t\treturn { code: 400, message: \"登录失效\", data: page.url() };\n\t}\n\n\t// 跳转到发布页面\n\tawait page.locator(\"#content-area .menu-container .publish-video .btn\").click();\n\n\t// 点击上传图文\n\tawait page\n\t\t.locator('.creator-container .header .creator-tab:not([style*=\"-9999px\"]) .title')\n\t\t.filter({ hasText: /^上传图文$/ })\n\t\t.click();\n\n\t// 获取待上传图片的本地路径\n\tconst images = await Promise.all(\n\t\tparams.banners.map((url) => {\n\t\t\tconst fileName = getFilenameFromUrl(url);\n\t\t\treturn downloadImage(url, path.join(tmpCachePath, fileName));\n\t\t}),\n\t);\n\n\t// 选择文件\n\tconst fileChooserPromise = page.waitForEvent(\"filechooser\");\n\tawait page.getByRole(\"textbox\").click();\n\tconst fileChooser = await fileChooserPromise;\n\tawait fileChooser.setFiles(images);\n\n\t// 填写标题\n\tconst titleInstance = page.locator(\".input.titleInput input\");\n\tawait titleInstance.click();\n\tawait titleInstance.fill(params.title);\n\n\t// 填写正文\n\tconst descInstance = page.locator(\".editor-container #quillEditor .ql-editor\");\n\tawait descInstance.click();\n\tawait descInstance.pressSequentially(params.content.replace(/#.*?\\[.*?]\\#/g,\"\"));\n\n\t// 填写话题\n\tif(params.topic && params.topic.length > 0){\n\t\tfor (const it of params.topic) {\n\t\t\tawait descInstance.pressSequentially(`#${it[\"name\"]}`);\n\t\t\tawait page.locator('.ql-mention-loading').waitFor({ state: 'detached' });\n\t\t\tawait page.waitForTimeout(1000);\n\t\t\tawait page.locator('#quill-mention-item-0 .item-view-num').click();\n\t\t};\n\t}\n\n\t// 滚动到底部\n\tconst container = page.locator(\".creator-container .content .scroll-content\");\n\tawait container.focus();\n\tawait page.mouse.wheel(0, 500); // 向下滚动 500 像素\n\n\tif (params.address) {\n\t\t// 填写地点\n\t\tawait selectAddress(\n\t\t\tpage.locator(\".media-extension .address-input\").filter({ hasText: \"添加地点\" }),\n\t\t\tparams.address.name,\n\t\t);\n\t}\n\n\tif (params.selfDeclaration) {\n\t\t// 自主声明\n\t\tawait page.locator(\".media-settings .flexbox\").filter({ hasText: \"内容类型声明\" }).locator(\".d-select-placeholder\").click();\n\t\tconst poperInstance = await getPoperInstance();\n\t\tconst selfDeclarationInstance = poperInstance.locator(\".d-options .d-option\");\n\t\tif (params.selfDeclaration.type === \"fictional-rendition\") {\n\t\t\tawait selfDeclarationInstance.filter({ hasText: \"虚构演绎,仅供娱乐\" }).click();\n\t\t} else if (params.selfDeclaration.type === \"ai-generated\") {\n\t\t\tawait selfDeclarationInstance.filter({ hasText: \"笔记含AI合成内容\" }).click();\n\t\t} else if (params.selfDeclaration.type === \"source-statement\") {\n\t\t\tawait selfDeclarationInstance.filter({ hasText: /内容来源声明/ }).click();\n\t\t\t// 内容来源声明二级菜单\n\t\t\tconst selfDeclarationSecondaryMenuInstance = (await getPoperInstance()).locator(\".d-options .d-option\");\n\t\t\t// 等待元素出现\n\t\t\tawait selfDeclarationSecondaryMenuInstance.first().waitFor();\n\t\t\tif (params.selfDeclaration.childType === \"self-labeling\") {\n\t\t\t\tawait selfDeclarationSecondaryMenuInstance.filter({ hasText: \"已在正文中自主标注\" }).click();\n\t\t\t} else if (params.selfDeclaration.childType === \"self-shooting\") {\n\t\t\t\tconst { shootingDate, shootingLocation } = params.selfDeclaration;\n\t\t\t\tawait selfDeclarationSecondaryMenuInstance.filter({ hasText: \"自主拍摄\" }).click();\n\t\t\t\t// 自主拍摄弹窗\n\t\t\t\tconst selfShootingPopup = await getDialogInstance();\n\t\t\t\tconst hasCustomContent = shootingDate || shootingLocation;\n\n\t\t\t\t// 选择拍摄地点\n\t\t\t\tif (shootingLocation) {\n\t\t\t\t\tawait selectAddress(selfShootingPopup.locator(\".address-input\"), shootingLocation.name);\n\t\t\t\t}\n\t\t\t\t// 选择拍摄日期\n\t\t\t\tif (shootingDate) {\n\t\t\t\t\tawait selectDate(selfShootingPopup.locator(\".date-picker input\"), shootingDate);\n\t\t\t\t}\n\n\t\t\t\tawait selfShootingPopup\n\t\t\t\t\t.locator(\"footer button\")\n\t\t\t\t\t.filter({ hasText: hasCustomContent ? \"确认\" : \"取消\" })\n\t\t\t\t\t.click();\n\t\t\t} else if (params.selfDeclaration.childType === \"transshipment\") {\n\t\t\t\tawait selfDeclarationSecondaryMenuInstance.filter({ hasText: \"来源转载\" }).click();\n\t\t\t\t// 来源媒体弹窗\n\t\t\t\tconst selfShootingPopup = await getDialogInstance();\n\n\t\t\t\tconst sourceMedia = params.selfDeclaration.sourceMedia;\n\t\t\t\tif (sourceMedia) {\n\t\t\t\t\tawait selfShootingPopup.locator(\".el-input input\").fill(sourceMedia);\n\t\t\t\t}\n\n\t\t\t\tawait selfShootingPopup\n\t\t\t\t\t.locator(\"footer button\")\n\t\t\t\t\t.filter({ hasText: sourceMedia ? \"确认\" : \"取消\" })\n\t\t\t\t\t.click();\n\t\t\t}\n\t\t}\n\t}\n\n\t// 可见范围 - 仅自己可见\n\tif (params.visibleRange === \"private\") {\n\t\tawait page.locator(\".media-settings .flexbox\").filter({ hasText: \"可见范围\" }).locator(\".d-select-wrapper\").click();\n\t\tconst poperInstance = await getPoperInstance();\n\t\tawait poperInstance.locator(\".d-options .custom-option\").filter({ hasText: \"仅自己可见\" }).click();\n\t}\n\n\tconst releaseTimeInstance = page\n\t\t.locator(\"label\")\n\t\t.filter({ hasText: params.isImmediatelyPublish ? \"立即发布\" : \"定时发布\" });\n\tawait releaseTimeInstance.click();\n\n\tif (params.scheduledPublish) {\n\t\t// 自定义发布时间\n\t\tawait selectDate(\".date-picker input\", params.scheduledPublish);\n\t}\n\n\tconst response = await new Promise<string>((resolve) => {\n\t\t// 定义响应处理函数\n\t\tconst handleResponse = async (response: Response) => {\n\t\t\tif (response.url().includes(\"/web_api/sns/v2/note\")) {\n\t\t\t\tconst jsonResponse = await response.json();\n\t\t\t\tpage.off(\"response\", handleResponse);\n\t\t\t\tresolve(jsonResponse?.data?.id);\n\t\t\t}\n\t\t};\n\n\t\t// 开始监听响应事件\n\t\tpage.on(\"response\", handleResponse);\n\n\t\tpage.locator(\".submit .publishBtn\").click();\n\t});\n\n\t// 关闭页面\n\tawait page.close();\n\n\treturn success(response);\n};\n","import type { CommonAction } from \"@iflyrpa/share\";\n\nimport type { ActiomCommonParams, Xiaohongshu } from \"../../types\";\nimport { executeAction } from \"../../utils\";\nimport { mockAction } from \"./mock\";\nimport { rpaAction } from \"./rpa\";\n\ninterface FictionalRendition {\n\ttype: \"fictional-rendition\"; // 虚拟演绎,仅供娱乐\n}\n\ninterface AIGenerated {\n\ttype: \"ai-generated\"; // 笔记含AI合成内容\n}\n\ninterface SourceStatement {\n\ttype: \"source-statement\"; // 内容来源声明\n\tchildType: \"self-labeling\" | \"self-shooting\" | \"transshipment\"; // 已自主标注 / 自助拍摄 / 转载\n\tshootingLocation?: Xiaohongshu.Location; // 拍摄地点\n\tshootingDate?: string; // 拍摄日期\n\tsourceMedia?: string; // 来源媒体\n}\n\ntype SelfDeclaration = FictionalRendition | AIGenerated | SourceStatement;\n\nexport interface XiaohongshuPublishParams extends ActiomCommonParams {\n\tbanners: string[]; // 图片\n\ttitle: string; // 标题\n\tcontent: string; // 正文\n\taddress?: Xiaohongshu.Location; // 地点\n\tselfDeclaration?: SelfDeclaration; // 自主声明\n\ttopic?: Xiaohongshu.Topic[]; //话题\n\tvisibleRange: \"public\" | \"private\"; // 可见范围\n\tisImmediatelyPublish?: boolean; // 是否立即发布\n\tscheduledPublish?: string; // 定时发布时间\n}\n\nexport type PublishAction = CommonAction<XiaohongshuPublishParams, string>;\n\nexport const xiaohongshuPublish: PublishAction = async (task, params) => {\n\tif (params.actionType === \"rpa\") {\n\t\treturn rpaAction(task, params);\n\t}\n\n\tif (params.actionType === \"mockApi\") {\n\t\treturn mockAction(task, params);\n\t}\n\n\treturn executeAction(mockAction, rpaAction)(task, params);\n};\n","import type { AutomateTask, CommonAction, ResponseData } from \"@iflyrpa/share\";\nimport { type BaijiahaoPublishParams, baijiahaoPublish } from \"./actions/baijiahaoPublish\";\nimport { type GetBaijiahaoActivityParams, getBaijiahaoActivity } from \"./actions/getBaijiahaoActivity\";\nimport { type GetToutiaoConfigParams, getToutiaoConfig } from \"./actions/getToutiaoConfig\";\nimport { type SearchToutiaoTopicListParams, searchToutiaoTopicList } from \"./actions/searchToutiaoTopicList\";\nimport { searchXiaohongshuLocation, type searchXiaohongshuLocationParams } from \"./actions/searchXiaohongshuLocation\";\nimport { searchXiaohongshuTopicList, SearchXiaohongshuTopicListParams } from \"./actions/searchXiaohongshuTopicList\";\nimport { type ToutiaoPublishParams, toutiaoPublish } from \"./actions/toutiaoPublish\";\nimport { type WeitoutiaoPublishParams, weitoutiaoPublish } from \"./actions/weitoutiaoPublish\";\nimport { type WeixinPublishParams, weixinPublish } from \"./actions/weixinPublish\";\nimport { type WeixinmpPublishParams, weixinmpPublish } from \"./actions/weixinmpPublish\";\nimport { type XiaohongshuPublishParams, xiaohongshuPublish } from \"./actions/xiaohongshuPublish\";\n\nimport type { ActiomCommonParams } from \"./types\";\nimport { stringifyError } from \"./utils\";\nimport { Http } from \"./utils/http\";\n\nexport class Action {\n\tconstructor(private task: AutomateTask) {}\n\n\t// 绑定 task, 并处理异常\n\tprivate async bindTask<T extends ActiomCommonParams, R>(func: CommonAction<T, R>, params: T) {\n\t\tlet responseData: ResponseData<R>;\n\n\t\tif (this.task.setArticleId) {\n\t\t\t// 给所有的日志添加 articleId 标签\n\t\t\tthis.task.setArticleId(params.articleId ?? \"\");\n\t\t}\n\n\t\tif (typeof params === \"object\" && params !== null) {\n\t\t\t// 默认设置 cookies\n\t\t\tparams.cookies = params?.cookies ?? [];\n\t\t}\n\n\t\ttry {\n\t\t\tresponseData = await func(this.task, params);\n\t\t} catch (error) {\n\t\t\tresponseData = Http.handleApiError(error);\n\t\t}\n\n\t\tif (responseData.code === 200) {\n\t\t\t// 表示是由于脚本输入信息错误导致的失败,不是脚本问题\n\t\t\tthis.task.logger.info(`${func.name} action params error`, responseData);\n\t\t} else if (responseData.code !== 0) {\n\t\t\tthis.task.logger.error(\n\t\t\t\tresponseData.message || `${func.name} 执行失败`,\n\t\t\t\tstringifyError(responseData.data),\n\t\t\t\tresponseData.extra,\n\t\t\t);\n\t\t\tthis.task.logger.info(`${func.name} action failed`);\n\t\t} else {\n\t\t\tthis.task.logger.info(`${func.name} action success`);\n\t\t}\n\n\t\treturn responseData;\n\t}\n\n\t// 搜索头条话题列表\n\tsearchToutiaoTopicList(params: SearchToutiaoTopicListParams) {\n\t\treturn this.bindTask(searchToutiaoTopicList, params);\n\t}\n\n\t// 获取头条配置\n\tgetToutiaoConfig(params: GetToutiaoConfigParams) {\n\t\treturn this.bindTask(getToutiaoConfig, params);\n\t}\n\n\t// 百家号发布\n\tbaijiahaoPublish(params: BaijiahaoPublishParams) {\n\t\treturn this.bindTask(baijiahaoPublish, params);\n\t}\n\n\t// 查询百家号活动投稿\n\tgetBaijiahaoActivity(params: GetBaijiahaoActivityParams) {\n\t\treturn this.bindTask(getBaijiahaoActivity, params);\n\t}\n\n\t// 小红书发布\n\txiaohongshuPublish(params: XiaohongshuPublishParams) {\n\t\treturn this.bindTask(xiaohongshuPublish, params);\n\t}\n\n\t// 搜索小红书话题\n\tsearchXiaohongshuTopicList(params: SearchXiaohongshuTopicListParams) {\n\t\treturn this.bindTask(searchXiaohongshuTopicList, params);\n\t}\n\t// 搜索小红书地址\n\tsearchXiaohongshuLocation(params: searchXiaohongshuLocationParams) {\n\t\treturn this.bindTask(searchXiaohongshuLocation, params);\n\t}\n\n\t// 小绿书发布\n\tweixinmpPublish(params: WeixinmpPublishParams) {\n\t\treturn this.bindTask(weixinmpPublish, params);\n\t}\n\n\t// 微头条发布\n\tweitoutiaoPublish(params: WeitoutiaoPublishParams) {\n\t\treturn this.bindTask(weitoutiaoPublish, params);\n\t}\n\n\t// 头条发布\n\ttoutiaoPublish(params: ToutiaoPublishParams) {\n\t\treturn this.bindTask(toutiaoPublish, params);\n\t}\n\n\t// 微信发布\n\tweixinPublish(params: WeixinPublishParams) {\n\t\treturn this.bindTask(weixinPublish, params);\n\t}\n}\n\ntype ActionInstance = InstanceType<typeof Action>;\n\n// 提取方法的参数类型\ntype MethodParams<T> = {\n\t// biome-ignore lint/suspicious/noExplicitAny: 有使用 any\n\t[K in keyof T]: T[K] extends (...args: any[]) => unknown ? Parameters<T[K]>[0] : never;\n};\n\n// 应用于 Action 类的实例\nexport type ActionMethodParams = MethodParams<ActionInstance>;\n\nexport { version } from \"../package.json\";\n"],"names":["Random","Math","Ts","SM3Hasher","Array","t","r","encodeURIComponent","String","e","n","o","i","u","a","br","wr","console","xr","Or","c","EnvData2CharCode","postHeader","postData","envData","_tmpa7","_tmpa8","Env0","InitEnv1","char","InitEnv2","hasher","hasherBytes","dataBytes","envBytes","$Env","InitEnv0","delIndex","arr","indexesToDelete","b","index","_env","InitEnv3","acc","cur","InitEnv","Env1","Env","code","Base2Data","CharCode","_Data","_num","Base","fixedValue","lastIndex","val","_LastIndx","Data","_CodeA","NowIndex","NowBase","_CodeB","Data2A_B","CAHR","result","temp","p1","p2","p3","p4","GenAB","module","Http","error","config","axios","findError","response","Promise","Object","errorResponse","serverError","getRandomInRange","min","max","getFileState","filePath","filename","path","fileType","mime","stats","fs","fileSize","lastModifiedDate","calculateCropCoordinates","width","height","aspectRatio","targetRatio","cropWidth","cropHeight","x1","y1","x2","y2","extractImgTag","html","srcList","parser","Parser","name","attributes","replaceImgSrc","callback","lastedHtml","isImageTag","node","traverseDom","DomUtils","child","handler","DomHandler","dom","domSerializer","stringifyError","Error","JSON","executeAction","actions","task","params","action","copyHtmlToClipboard","page","options","htmlContent","format","blob","Blob","navigator","ClipboardItem","div","document","range","selection","window","PopupListener","popupSelector","popKey","buttonSelector","checkInterval","stopAfterClick","popup","button","intervalId","setInterval","clearInterval","err","parseUrlQueryString","url","queryStringObject","queryString","queryWithoutHash","queryStringArray","item","equalIndex","key","value","decodeURIComponent","defaultParams","defaults","errnoMap","mockAction","baijiahaoSingleCover","baijiahaoMultCover","baijiahaoCoverType","tmpCachePath","http","it","msgType","errmsg","appIdInfo","appId","uploadImages","_images","images","fileName","getFilenameFromUrl","image","downloadImage","formData","FormData","res","originContentImages","targetContentImages","content","idx","vertical_cover","horizontalCoverUrl","horizontalCoverRes","cover_images","_cover_images_map","isAi","activityList","cover_layout","activity_list","publishData","isDraft","saveUrl","success","rpaAction","commonCookies","titleInstance","coverFormItem","isSingleCover","coverSelector","coverCount","fileChooserPromise","fileChooser","abstractFormItem","settingFormItem","activity","activityFormItem","findActivity","articleId","resolve","handleResponse","jsonResponse","operatorContainer","baijiahaoPublish","getBaijiahaoActivity","_task","cookies","getToutiaoConfig","getSuggestWords","getCityDistrict","getUserRights","suggestWords","cityDistrict","userRights","searchToutiaoTopicList","searchXiaohongshuLocation","searchXiaohongshuTopicList","require","generatorFormData","data","encodedKey","encodedValue","get3101DetailError","errorList","message","saveType","toutiaoSingleCover","toutiaoMultCover","toutiaoCoverType","toutiaoOriginal","coverUrl","coverRes","isSingleTitle","location","topics","multiTitleData","title","topicContent","topic","extraData","COVER_TYPE","getAddTypeValue","msToken","postHeaders","a_bogus","publishResult","interceptUrls","route","request","URL","pattern","coverTypeValue","coverContainer","coverUrls","coverUploadEle","coverUploadCount","ele","drawerContainer","confirmBtn","locationContainer","poperInstance","adContainer","isAdOptionVisible","exclusiveContainer","toutiaoAd","toutiaoPublish","userInfoRes","imageList","extra","syncData","descInstance","addressFormItem","declarationFormItem","weitoutiaoPublish","scanRetryMaxCount","QuotaType","GET_QRCODE_DEFAULT_ERROR","ignoreErrno","userTypeMap","URLSearchParams","checkCopyrightStat","resData","fingerprint","client_time_diff","Number","Date","responseData","cloudImages","localImages","fileState","oriWhitelist","_oriWhitelist","white_list","white_list_user","_user","userInfo_res","userInfo_resJson","writerid","reply_id","getWriterList","getRewardText","_type","rewardbind","rewardBuffer","Buffer","rewardFilePath","Uint8Array","task_id","sleep","checkScanResult","_writer","_writer_item","rewardList","matchdID","reward","_reply_item","wxInteractionInfo","_wxInteraction","type","_opt","commentType","replyType","draftData","appMsgId","masssendpage","massSendRes","operation_seq","quota_detail_list","quotaDetail","copyrightStatData","lastData","checkCopyrightStatRes","getTicketResult","getUuidResult","uuid","qrcodeResult","qrcodeBuffer","qrcodeFilePath","randomString","waitQrcodeResultMaxTime","urlParams","urlRewardParams","wxRewardPage","reward_page","isAddRewarder","qrcodeSrc","errorMessage","isAddWord","RegExp","cover","dialog","pic_msg","ori_dialog","ori_dialog_bd","ori_dialog_ft","_target","search_res","search_res_name","undefined","whrite_list","white_td_isadd","btn_isChecked","checkbox","reward_setting","reward_setting_bd","reward_setting_ft","userName","reward_setting_replay","switchAuto","maxAttempts","delayMs","nowCheckTime","attempt","isDisabled","setTimeout","isOneReplay","isCurrentReplay","wxInteraction_setting","wxInteraction_bd","wxInteraction_ft","comment_area","reply_area","commont_rply_opt","poperInput","source","query","startTime","reject","imgUrl","weixinPublish","_params","saveDraft","shareImageInfos","cropResult","colorResponseData","themeColor","cropFormData","cropRatios","cropCoordinates","cropCoordinate","cropResponse","sourceText","container","weixinmpPublish","XsEncrypt","crypto","text","textEncoded","cipher","ciphertext","encodedData","decodedData","payload","platform","hexPayload","obj","jsonString","a1","ts","rest","replacer","space","word","xsEncrypt","a1Cookie","fetchCoverUrl","xt","xs","coverIdInfo","coverIds","ossToken","uploadFile","localUrl","ossFileId","fileBuffer","coverInfos","topicData","topicDataStr","publishXt","publishXs","createTopic","userDeclarationBind","photoInfo","business_binds","publishDataStr","urlObj","isNoteRequest","newHeaders","selectAddress","selector","address","instance","selectDate","date","getPoperInstance","elements","count","visibleElements","element","style","getDialogInstance","selfDeclarationInstance","selfDeclarationSecondaryMenuInstance","shootingDate","shootingLocation","selfShootingPopup","hasCustomContent","sourceMedia","releaseTimeInstance","xiaohongshuPublish","Action","func"],"mappings":"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G;gBAAE;gBAAE;gBAAG;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAG;gBAAG;gBAAG;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAG;gBAAI;gBAAG;gBAAG;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAG;gBAAI;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAG;gBAAI;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAS;gBAAG;gBAAG;gBAAG;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAO;gBAAG;gBAAG;gBAAG;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAK;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAK;gBAAG;gBAAE;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAE;gBAAG;gBAAE;gBAAG;gBAAG;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAG;gBAAI;gBAAG;gBAAG;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAG;gBAAI;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAS;gBAAG;gBAAG;gBAAG;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAO;gBAAG;gBAAG;gBAAG;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAI;gBAAG;gBAAE;gBAAE;gBAAG;gBAAK;gBAAG;gBAAG;gBAAE;gBAAG;gBAAG;gBAAE;gBAAG;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAE;gBAAE;gBAAG;gBAAG;gBAAG;gBAAE;gBAAE;aAAG;YAEpnC,IAAK,IAAIC,IAAI,GAAGA,IAAI,KAAKqD,KAAK,MAAM,EAAErD,KAAK,EAAG;gBAC1C,MAAMQ,IAAI6C,KAAK,UAAU,CAACrD;gBAC1B,MAAM4B,IAAIyB,KAAK,UAAU,CAACrD,IAAI;gBAC9B,MAAME,IAAImD,KAAK,UAAU,CAACrD,IAAI;gBAE9B,MAAMuD,OAAQ/C,KAAKT,CAAC,CAAC,GAAG,GAAK6B,KAAK7B,CAAC,CAAC,IAAI,GAAIG;gBAE5C,MAAMsD,KAAMD,AAAAA,CAAAA,OAAOxD,CAAC,CAAC,IAAG,KAAMA,CAAC,CAAC,IAAI;gBACpCuD,UAASP,KAAK,MAAM,CAACS;gBACrB,MAAMC,KAAMF,AAAAA,CAAAA,OAAOxD,CAAC,CAAC,IAAG,KAAMA,CAAC,CAAC,IAAI;gBACpCuD,UAASP,KAAK,MAAM,CAACU;gBACrB,MAAMC,KAAMH,AAAAA,CAAAA,OAAOxD,CAAC,CAAC,IAAG,KAAMA,CAAC,CAAC,IAAI;gBACpCuD,UAAS1B,IAAImB,KAAK,MAAM,CAACW,MAAM;gBAC/B,MAAMC,KAAKJ,OAAOxD,CAAC,CAAC,IAAI;gBACxBuD,UAASpD,IAAI6C,KAAK,MAAM,CAACY,MAAM;YACnC;YAEA,OAAOL;QACX;QAEA,SAASM,MAAMlD,UAAU,EAAEC,QAAQ;YAClC,MAAMC,UAAU;YACb,OAAOwC,SAASd,UAAU7B,iBAAiBC,YAAYC,UAAUC;QACrE;QAEAiD,OAAO,OAAO,GAAGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IC3UV,MAAME;QAGZ,OAAO,eAAeC,KAAc,EAAgB;YAEnD,IAAIA,SAAS,AAAiB,YAAjB,OAAOA,SAAsB,UAAUA,SAAS,aAAaA,OACzE,OAAOA;YAIR,OAAO;gBACN,MAAM;gBACN,SAAS;gBACT,MAAMA;YACP;QACD;QAEA,YAAYC,MAA4B,CAAE;YACzC,IAAI,CAAC,SAAS,GAAGC,yBAAAA,MAAY,CAACD;QAC/B;QAIO,uBAAgCE,SAAmE,EAAE;YAC3G,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACvC,CAACC;gBAEA,MAAMJ,QAAQG,UAAUC;gBAExB,IAAIJ,OACH,OAAOK,QAAQ,MAAM,CACpBC,OAAO,MAAM,CAACN,OAAO;oBACpB,OAAO;wBACN,QAAQI,SAAS,MAAM,CAAC,MAAM;wBAC9B,KAAKA,SAAS,MAAM,CAAC,GAAG;oBACzB;gBACD;gBAIF,OAAOA;YACR,GACA,CAACJ;gBAEA,MAAMO,gBAA8B;oBACnC,MAAMP,MAAM,QAAQ,EAAE,UAAU;oBAChC,SAASA,MAAM,OAAO,IAAI;oBAC1B,MAAMA,MAAM,QAAQ,EAAE;oBACtB,OAAO;wBACN,QAAQA,MAAM,MAAM,EAAE;wBACtB,KAAKA,MAAM,MAAM,EAAE;oBACpB;gBACD;gBAGA,IAAIA,MAAM,QAAQ,EAAE,MACnB;oBAAA,IAAI,AAA+B,YAA/B,OAAOA,MAAM,QAAQ,CAAC,IAAI,EAAe;wBAG5C,MAAMQ,cAAcR,MAAM,QAAQ,CAAC,IAAI;wBACvC,IAAIQ,YAAY,OAAO,EACtBD,cAAc,OAAO,GAAGC,YAAY,OAAO;wBAG5CD,cAAc,IAAI,GAAGC;oBACtB;gBAAA;gBAID,OAAOH,QAAQ,MAAM,CAACE;YACvB;QAEF;QAGA,MAAa,IAAaN,MAA0B,EAAc;YACjE,IAAI;gBACH,MAAMG,WAAW,MAAM,IAAI,CAAC,SAAS,CAAIH;gBACzC,OAAOG,SAAS,IAAI;YACrB,EAAE,OAAOJ,OAAO;gBACf,OAAOK,QAAQ,MAAM,CAACN,KAAK,cAAc,CAACC;YAC3C;QACD;IACD;IC5EO,SAASS,iBAAiBC,GAAW,EAAEC,GAAW;QACxD,OAAOrF,KAAK,KAAK,CAACA,KAAK,MAAM,KAAMqF,CAAAA,MAAMD,MAAM,MAAMA;IACtD;IAEO,MAAME,eAAe,CAACC;QAE5B,MAAMC,WAAWC,6BAAAA,QAAa,CAACF;QAE/B,MAAMG,WAAWC,8BAAAA,MAAW,CAACJ;QAC7B,MAAMK,QAAQC,2BAAAA,QAAW,CAACN;QAE1B,MAAMO,WAAWF,MAAM,IAAI;QAE3B,MAAMG,mBAAmBH,MAAM,KAAK;QAEpC,OAAO;YACN,MAAMJ;YACN,MAAME;YACN,MAAMI;YACN,kBAAkBC,iBAAiB,QAAQ;QAC5C;IACD;IAiBO,MAAMC,2BAA2B,CAACC,OAAeC,QAAgBC;QACvE,MAAMC,cAAcD,WAAW,CAAC,EAAE,GAAGA,WAAW,CAAC,EAAE;QACnD,IAAIE;QACJ,IAAIC;QAEJ,IAAIL,QAAQC,SAASE,aAAa;YAEjCE,aAAaJ;YACbG,YAAYH,SAASE;QACtB,OAAO;YAENC,YAAYJ;YACZK,aAAaL,QAAQG;QACtB;QAEA,MAAMG,KAAMN,AAAAA,CAAAA,QAAQI,SAAQ,IAAK;QACjC,MAAMG,KAAMN,AAAAA,CAAAA,SAASI,UAAS,IAAK;QACnC,MAAMG,KAAKF,KAAKF;QAChB,MAAMK,KAAKF,KAAKF;QAGhB,OAAO;YACN,IAAIC,KAAKN;YACT,IAAIO,KAAKN;YACT,IAAIO,KAAKR;YACT,IAAIS,KAAKR;QACV;IACD;IAGO,MAAMS,gBAAgB,CAACC;QAC7B,MAAMC,UAAoB,EAAE;QAE5B,MAAMC,SAAS,IAAIC,qCAAAA,MAAMA,CAAC;YACzB,WAAUC,IAAI,EAAEC,UAAU;gBACzB,IAAID,AAAS,UAATA,QAAmBC,CAAAA,WAAW,GAAG,CAAC,IAAI,MAAMA,WAAW,UAAU,CAAC,IAAI,EAAC,GAC1EJ,QAAQ,IAAI,CAACI,WAAW,GAAG,CAAC,IAAI,MAAMA,WAAW,UAAU,CAAC,IAAI;YAElE;QACD;QAEAH,OAAO,KAAK,CAACF;QACbE,OAAO,GAAG;QAEV,OAAOD;IACR;IAEO,MAAMK,gBAAgB,CAACN,MAAcO;QAC3C,IAAIC,aAAaR;QAEjB,MAAMS,aAAa,CAACC,OAAqCA,AAAc,UAAdA,KAAK,IAAI,IAAcA,AAAc,UAAdA,KAAK,IAAI;QAEzF,MAAMC,cAAc,CAACD;YACpB,IAAIE,qCAAAA,QAAAA,CAAAA,WAAoB,CAACF,OACxB,KAAK,MAAMG,SAASH,KAAK,QAAQ,CAAE;gBAClC,IAAID,WAAWI,QACdN,SAASM;gBAEVF,YAAYE;YACb;QAEF;QAEA,MAAMC,UAAU,IAAIC,oCAAAA,UAAUA,CAAC,CAACjD,OAAOkD;YACtC,IAAIlD,OACH1D,QAAQ,GAAG,CAAC0D;iBAGZkD,IAAI,OAAO,CAACL;YAGbH,aAAaS,kCAAcD,KAAK;gBAAE,gBAAgB;YAAM;QACzD;QAEA,MAAMd,SAAS,IAAIC,qCAAAA,MAAMA,CAACW,SAAS;YAAE,gBAAgB;QAAM;QAC3DZ,OAAO,KAAK,CAACF;QACbE,OAAO,GAAG;QAEV,OAAOM;IACR;IAEO,MAAMU,iBAAiB,CAACpD;QAC9B,IAAIA,iBAAiBqD,OACpB,OAAOrD,MAAM,QAAQ;QAGtB,IAAI,AAAiB,YAAjB,OAAOA,OACV,OAAOsD,KAAK,SAAS,CAACtD;QAGvB,OAAOA;IACR;IAkCO,MAAMuD,gBAAgB,CAAO,GAAGC,UAC/B,OAAOC,MAAMC;YACnB,IAAInE,SAA0B;gBAC7B,MAAM;gBACN,SAAS;gBAET,MAAM;YACP;YAEA,IAAK,IAAIzB,QAAQ,GAAGA,QAAQ0F,QAAQ,MAAM,EAAE1F,QAAS;gBACpD,MAAM6F,SAASH,OAAO,CAAC1F,MAAM;gBAE7B,IAAI;oBACHyB,SAAS,MAAMoE,OAAOF,MAAMC;gBAC7B,EAAE,OAAO1D,OAAO;oBACfT,SAASQ,KAAK,cAAc,CAACC;gBAC9B;gBAGA,IAAIT,AAAgB,MAAhBA,OAAO,IAAI,IAAUA,AAAgB,QAAhBA,OAAO,IAAI,EACnC;gBAID,IAAIzB,UAAU0F,QAAQ,MAAM,GAAG,GAC9BC,KAAK,MAAM,CAAC,KAAK,CAAClE,OAAO,OAAO,EAAE6D,eAAe7D,OAAO,IAAI,GAAGA,OAAO,KAAK;YAE7E;YAGA,OAAOA;QACR;IAUM,eAAeqE,oBAAoBC,IAAU,EAAE3B,IAAY,EAAE4B,UAAU;QAAE,QAAQ;QAAa,UAAU;IAAK,CAAC;QACpH,IAAI;YAEH,MAAMD,KAAK,QAAQ,CAClB,OAAO,EAAEE,WAAW,EAAEC,MAAM,EAAE;gBAC7B,MAAMC,OAAO,IAAIC,KAAK;oBAACH;iBAAY,EAAE;oBAAE,MAAMC;gBAAO;gBACpD,MAAMG,UAAU,SAAS,CAAC,KAAK,CAAC;oBAAC,IAAIC,cAAc;wBAAE,CAACJ,OAAO,EAAEC;oBAAK;iBAAG;YACxE,GACA;gBAAE,aAAa/B;gBAAM,QAAQ4B,QAAQ,MAAM;YAAC;QAE9C,EAAE,OAAO9D,OAAO;YACf,IAAI8D,QAAQ,QAAQ,EAEnB,MAAMD,KAAK,QAAQ,CAAC,CAACE;gBACpB,MAAMM,MAAMC,SAAS,aAAa,CAAC;gBACnCD,IAAI,eAAe,GAAG;gBACtBA,IAAI,KAAK,CAAC,OAAO,GAAG,CAAC;;;;;QAKjB,CAAC;gBAELA,IAAI,SAAS,GAAGN;gBAChBO,SAAS,IAAI,CAAC,WAAW,CAACD;gBAE1B,MAAME,QAAQD,SAAS,WAAW;gBAClCC,MAAM,kBAAkB,CAACF;gBAGzB,MAAMG,YAAYC,OAAO,YAAY;gBACrCD,UAAU,eAAe;gBACzBA,UAAU,QAAQ,CAACD;gBAEnBD,SAAS,WAAW,CAAC;gBACrBA,SAAS,IAAI,CAAC,WAAW,CAACD;gBAC1BG,UAAU,eAAe;YAC1B,GAAGtC;QAEL;IACD;IAUO,SAASwC,cACfb,IAAU,EACVc,aAAqB,EACrBC,MAAc,EACdC,cAAsB,EACtBf,UAGI,CAAC,CAAC;QACN,MAAM,EACLgB,gBAAgB,IAAI,EACpBC,iBAAiB,KAAK,EACtB,GAAGjB;QAEJ,MAAMkB,QAAQnB,KAAK,OAAO,CAACc;QAC3B,MAAMM,SAASpB,KAAK,OAAO,CAACgB;QAE5B,MAAMK,aAAaC,YAAY;YAC9B,IAAI;gBACH,IAAI,MAAMH,MAAM,KAAK,KAAK,KAAK,MAAMA,MAAM,SAAS,MAAO,OAAMA,MAAM,WAAW,MAAI,EAAC,EAAG,QAAQ,CAACJ,SAAS;oBAC3G,MAAMK,OAAO,KAAK,CAAC;wBAAE,OAAO;oBAAK;oBAEjC,IAAIF,gBACHK,cAAcF;gBAEhB;YACD,EAAE,OAAOG,KAAK,CAAE;QACjB,GAAGP;QAEH,OAAO;YACNM,cAAcF;QACf;IACD;IAGO,MAAMI,sBAAsB,CAACC;QACnC,MAAMC,oBAA4C,CAAC;QAGnD,IAAI,CAACD,OAAO,CAACA,IAAI,QAAQ,CAAC,MACzB,OAAOC;QAIR,MAAMC,cAAcF,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE;QAGrC,IAAI,CAACE,aACJ,OAAOD;QAIR,MAAME,mBAAmBD,YAAY,KAAK,CAAC,IAAI,CAAC,EAAE;QAGlD,MAAME,mBAAmBD,iBAAiB,KAAK,CAAC;QAEhD,KAAK,MAAME,QAAQD,iBAAkB;YAEpC,IAAI,CAACC,MAAM;YAEX,MAAMC,aAAaD,KAAK,OAAO,CAAC;YAGhC,IAAIC,AAAe,OAAfA,YACHL,iBAAiB,CAACI,KAAK,GAAG;iBACpB;gBACN,MAAME,MAAMF,KAAK,KAAK,CAAC,GAAGC;gBAC1B,MAAME,QAAQH,KAAK,KAAK,CAACC,aAAa;gBAGtC,IAAI;oBACHL,iBAAiB,CAACM,IAAI,GAAGE,mBAAmBD;gBAC7C,EAAE,OAAOjK,GAAG;oBACX0J,iBAAiB,CAACM,IAAI,GAAGC;gBAC1B;YACD;QACD;QAEA,OAAOP;IACR;IAQO,MAAMS,gBAAgB,CAA8BvC,QAAWwC,WAC9D5F,OAAO,MAAM,CAAC,CAAC,GAAG4F,UAAUxC;;;;ICjVpC,MAAMyC,WAAmC;QACxC,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,YAAY;QACZ,WAAW;QACX,UAAU;QACV,UAAU;IACX;IAEO,MAAMC,aAA4B,OAAO3C,MAAMC;QACrD,MAAM,EAAE2C,oBAAoB,EAAEC,kBAAkB,EAAEC,kBAAkB,EAAE,GAAG7C,OAAO,WAAW;QAC3F,MAAM8C,eAAe/C,KAAK,UAAU;QAEpC,MAAMgD,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQ2D,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAClE,OAAOhD,OAAO,KAAK;YACpB;QACD;QAGA+C,KAAK,sBAAsB,CAAiB,CAACrG;YAC5C,MAAMuG,UAAUjD,AAAoB,YAApBA,OAAO,QAAQ,GAAe,OAAO;YAGrD,IAAItD,AAAwB,MAAxBA,SAAS,IAAI,CAAC,KAAK,EAAQ;gBAC9B,IAAIwG,SAASxG,SAAS,MAAM,CAAC,eAAe,IAAI,CAAC,EAAE,EAAEuG,QAAQ,SAAS,CAAC;gBAEvE,IAAIvG,AAAwB,aAAxBA,SAAS,IAAI,CAAC,KAAK,EACtBwG,SAASD,UAAUR,QAAQ,CAAC/F,SAAS,IAAI,CAAC,KAAK,CAAC;gBAEjD,IAAIA,AAAwB,cAAxBA,SAAS,IAAI,CAAC,KAAK,EACtBwG,SAAS,CAAC,EAAE,EAAED,UAAUR,QAAQ,CAAC/F,SAAS,IAAI,CAAC,KAAK,CAAC,EAAE;qBACjD,IAAI+F,QAAQ,CAAC/F,SAAS,IAAI,CAAC,KAAK,CAAC,EACvCwG,SAAST,QAAQ,CAAC/F,SAAS,IAAI,CAAC,KAAK,CAAC;gBAGvC,OAAO;oBACN,MAAM+F,QAAQ,CAAC/F,SAAS,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM;oBAC5C,SAASwG;oBACT,MAAMxG,SAAS,IAAI;gBACpB;YACD;QACD;QAGA,MAAMqG,KAAK,GAAG,CAAC;YACd,QAAQ;YACR,KAAK;YACL,iBAAiB,CAAC,kBAAkB,EAAE/C,AAAoB,YAApBA,OAAO,QAAQ,GAAe,OAAO,KAAK,CAAC,CAAC;QACnF;QAGA,MAAMmD,YAAY,MAAMJ,KAAK,GAAG,CAA+C;YAC9E,QAAQ;YACR,KAAK;YACL,iBAAiB;QAClB;QAEA,MAAMK,QAAQD,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM;QAExC,MAAME,eAAe,OAAOC;YAE3B,MAAMC,SAASD,QAAQ,MAAM,CAAC,CAACzB,MAAQ,CAAC,CAACA,OAAOA,AAAe,OAAfA,IAAI,IAAI;YAGxD,OAAO,MAAMlF,QAAQ,GAAG,CACvB4G,OAAO,GAAG,CAAC,OAAO1B;gBACjB,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;gBACpC,MAAM6B,QAAQ,MAAMC,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;gBAC/D,MAAMI,WAAW,IAAIC,CAAAA,4BAAAA;gBACrBD,SAAS,MAAM,CAAC,iBAAiBJ;gBACjCI,SAAS,MAAM,CAAC,QAAQ;gBACxBA,SAAS,MAAM,CAAC,UAAUR;gBAC1BQ,SAAS,MAAM,CAAC,eAAe;gBAC/BA,SAAS,MAAM,CAAC,iBAAiB;gBACjCA,SAAS,MAAM,CAAC,eAAe;gBAC/BA,SAAS,MAAM,CAAC,gBAAgB;gBAChCA,SAAS,MAAM,CAAC,SAASnG,2BAAAA,gBAAmB,CAACiG;gBAE7C,MAAMI,MAAM,MAAMf,KAAK,GAAG,CAA4B;oBACrD,QAAQ;oBACR,KAAK;oBACL,MAAMa;oBACN,iBACC5D,AAAoB,YAApBA,OAAO,QAAQ,GAAe,oBAAoB;gBACpD;gBAEA,OAAO8D,IAAI,GAAG;YACf;QAEF;QAGA,MAAMC,sBAAsBxF,cAAcyB,OAAO,OAAO;QACxD,MAAMgE,sBAAsB,MAAMX,aAAaU;QAE/C,MAAME,UAAUnF,cAAckB,OAAO,OAAO,EAAE,CAACR;YAC9C,IAAIA,IAAI,OAAO,CAAC,GAAG,EAAE;gBACpB,MAAM0E,MAAMH,oBAAoB,SAAS,CAAC,CAACf,KAAOA,OAAOxD,IAAI,OAAO,CAAC,GAAG;gBACxEA,IAAI,OAAO,CAAC,GAAG,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,OAAO;gBAClD1E,IAAI,OAAO,CAAC,sBAAsB,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,OAAO;gBACrE1E,IAAI,OAAO,CAAC,kBAAkB,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,OAAO;gBACjE1E,IAAI,OAAO,CAAC,gBAAgB,GAAG;YAChC;YAEA,OAAOA;QACR;QAGA,IAAI2E,iBAAiBnE,OAAO,WAAW,CAAC,sBAAsB;QAC9D,IAAImE,gBACHA,iBAAkB,OAAMd,aAAa;YAACc;SAAe,EAAE,CAAC,EAAE,CAAC,OAAO;QAInE,MAAMC,qBAAqBvB,AAAuB,aAAvBA,qBAAkC;YAACF;SAAqB,GAAGC;QACtF,MAAMyB,qBAAqB,MAAMhB,aAAae;QAC9C,MAAME,eAAeD,mBAAmB,GAAG,CAAC,CAACnC,OAAU;gBACtD,KAAKA,KAAK,OAAO;gBACjB,mBAAmB;gBACnB,SAAS;YACV;QACA,MAAMqC,oBAAoBF,mBAAmB,GAAG,CAAC,CAACnC,OAAU;gBAC3D,KAAKA,MAAM;gBACX,YAAYA,MAAM;YACnB;QAGA,MAAMsC,OAAOxE,OAAO,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC;QACvD,MAAMyE,eAAezE,OAAO,WAAW,CAAC,4BAA4B;QACpE,MAAM0E,eAAe7B,AAAuB,aAAvBA,qBAAkC,QAAQ;QAE/D,MAAM8B,gBAAgB;eACjBF,aAAa,MAAM,GAAG,IAAI;gBAAC;oBAAE,IAAI,CAAC,KAAK,EAAEA,YAAY,CAAC,EAAE,EAAE;oBAAE,YAAY;gBAAE;aAAE,GAAG,EAAE;eACjFD,OAAO;gBAAC;oBAAE,IAAI;oBAAmB,YAAY;gBAAE;aAAE,GAAG,EAAE;SAC1D;QAED,MAAMI,cAAc;YACnB,OAAO5E,OAAO,WAAW,CAAC,cAAc;YACxCiE;YACAE;YACA,UAAUnE,OAAO,WAAW,CAAC,iBAAiB;YAC9C0E;YACA,cAAc9E,KAAK,SAAS,CAAC0E;YAC7B,mBAAmB1E,KAAK,SAAS,CAAC2E;YAClC,MAAM;YACN,wBAAwB;YACxB,eAAe;YACf,YAAY;YACZ,gBAAgB;YAChB,QAAQ;YACR,cAAc;YACdI;QACD;QAEA,MAAME,UAAU7E,AAAoB,YAApBA,OAAO,QAAQ;QAE/B,MAAM8E,UAAUD,UACb,oEACA;QAEH,MAAMf,MAAM,MAAMf,KAAK,GAAG,CAAkC;YAC3D,QAAQ;YACR,KAAK+B;YACL,MAAMF;YACN,SAAS;gBACR,gBAAgB;gBAChB,QAAQ;gBACR,SAAS;YACV;YACA,iBAAiBC,UAAU,oBAAoB;QAChD;QAEA,OAAOE,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQjB,IAAI,GAAG,CAAC,UAAU,EAAE;IACpC;ICpMO,MAAMkB,YAA2B,OAAOjF,MAAMC;QACpD,MAAM8C,eAAe/C,KAAK,UAAU;QAEpC,MAAMkF,gBAAmC;YACxC,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,KAAK;YACL,UAAU;QACX;QAEA,MAAM9E,OAAO,MAAMJ,KAAK,UAAU,CAAC;YAClC,MAAMA,KAAK,KAAK;YAChB,KAAKC,OAAO,GAAG,IAAI;YACnB,SAASA,OAAO,OAAO,EAAE,IAAI,CAACgD,KAAQ;oBAAE,GAAGiC,aAAa;oBAAE,GAAGjC,EAAE;gBAAC,OAAO,EAAE;QAC1E;QAGA,IAAI;YACH,MAAM7C,KAAK,eAAe,CAAC,oBAAoB;gBAAE,OAAO;YAAU;QACnE,EAAE,OAAO7D,OAAO;YACf,OAAO;gBAAE,MAAM;gBAAK,SAAS;gBAAQ,MAAM6D,KAAK,GAAG;YAAG;QACvD;QAGA,MAAMA,KAAK,eAAe,CAAC,2BAA2B;YAAE,OAAO;QAAU;QAIzE,IAAI,MAAMA,KAAK,OAAO,CAAC,iCAAiC,SAAS,IAChE,MAAMA,KAAK,OAAO,CAAC,0CAA0C,KAAK;QAGnE,IAAI,MAAMA,KAAK,OAAO,CAAC,gFAAgF,SAAS,IAC/G,MAAMA,KAAK,OAAO,CAAC,gFAAgF,KAAK;QAIzG,MAAM+E,gBAAgB/E,KAAK,OAAO,CAAC;QACnC,MAAM+E,cAAc,KAAK;QACzB,MAAMA,cAAc,IAAI,CAAClF,OAAO,KAAK;QAGrC,MAAME,oBAAoBC,MAAMH,OAAO,OAAO;QAE9C,MAAMG,KAAK,KAAK,CAAC;QAEjB,MAAMA,KAAK,QAAQ,CAAC,KAAK,CAAC;QAE1B,MAAMA,KAAK,QAAQ,CAAC,KAAK,CAAC;QAG1B,MAAMA,KAAK,cAAc,CAAC;QAG1B,MAAMgF,gBAAgBhF,KAAK,OAAO,CAAC,yCAAyC,GAAG,CAAC;QAChF,MAAMiF,gBAAgBpF,AAA0C,aAA1CA,OAAO,WAAW,CAAC,kBAAkB;QAC3D,IAAIoF,eAEH,MAAMD,cACJ,OAAO,CAAC,0DACR,MAAM,CAAC;YAAE,SAAS;QAAK,GACvB,KAAK;aAGP,MAAMA,cACJ,OAAO,CAAC,0DACR,MAAM,CAAC;YAAE,SAAS;QAAK,GACvB,KAAK;QAGR,MAAM5B,SAAS,MAAM5G,QAAQ,GAAG,CAC9ByI,AAAAA,CAAAA,gBAAgB;YAACpF,OAAO,WAAW,CAAC,oBAAoB;SAAC,GAAGA,OAAO,WAAW,CAAC,kBAAiB,EAAG,GAAG,CAAC,CAAC6B;YACxG,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;YACpC,OAAO8B,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;QACnD;QAED,MAAM6B,gBAAgBlF,KAAK,OAAO,CACjC;QAED,MAAMmF,aAAa,MAAMD,cAAc,KAAK;QAE5C,IAAK,IAAI9M,IAAI,GAAGA,IAAI+M,YAAY/M,IAAK;YACpC,MAAM2J,OAAOmD,cAAc,GAAG,CAAC9M;YAC/B,MAAMmL,QAAQH,MAAM,CAAChL,EAAE;YAGvB,MAAM2J,KAAK,QAAQ,CAAC,CAAChD,OAASA,KAAK,cAAc;YAGjD,IAAI,MAAMgD,KAAK,OAAO,CAAC,iBAAiB,SAAS,IAChD,MAAMA,KAAK,OAAO,CAAC,yBAAyB,MAAM,CAAC;gBAAE,SAAS;YAAK,GAAG,KAAK;iBAE3E,MAAMA,KAAK,KAAK;YAIjB,MAAM/B,KAAK,eAAe,CAAC,mDAAmD;gBAAE,OAAO;YAAU;YAEjG,MAAMA,KACJ,OAAO,CAAC,4FACR,MAAM,CAAC;gBAAE,SAAS;YAAO,GACzB,KAAK;YACP,MAAMoF,qBAAqBpF,KAAK,YAAY,CAAC;YAC7C,MAAMA,KACJ,OAAO,CAAC,wGACR,KAAK;YACP,MAAMqF,cAAc,MAAMD;YAC1B,MAAMC,YAAY,QAAQ,CAAC;gBAAC9B;aAAM;YAGlC,MAAMvD,KAAK,eAAe,CACzB,4GACA;gBAAE,OAAO;YAAW;YAGrB,MAAMA,KACJ,OAAO,CAAC,gFACR,MAAM,CAAC;gBAAE,SAAS;YAAK,GACvB,KAAK;YAEP,MAAMA,KAAK,cAAc,CAAC;QAC3B;QAGA,MAAMsF,mBAAmBtF,KACvB,OAAO,CAAC,yCACR,GAAG,CAAC,GACJ,OAAO,CAAC;QACV,MAAMsF,iBAAiB,KAAK;QAC5B,MAAMA,iBAAiB,IAAI,CAACzF,OAAO,WAAW,CAAC,iBAAiB;QAGhE,MAAMwE,OAAOxE,OAAO,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC;QACvD,IAAIwE,MAAM;YACT,MAAMkB,kBAAkBvF,KAAK,OAAO,CAAC,yCAAyC,GAAG,CAAC;YAClF,MAAMuF,gBAAgB,OAAO,CAAC,kCAAkC,MAAM,CAAC;gBAAE,SAAS;YAAS,GAAG,KAAK;QACpG;QAGA,IAAI1F,OAAO,WAAW,CAAC,iBAAiB,CAAC,MAAM,GAAG,KAAKA,OAAO,WAAW,CAAC,4BAA4B,CAAC,MAAM,GAAG,GAAG;YAClH,MAAM2F,WAAW3F,OAAO,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAACgD,KAC7DhD,OAAO,WAAW,CAAC,4BAA4B,CAAC,QAAQ,CAACgD,GAAG,EAAE;YAE/D,IAAI2C,SAAS,MAAM,GAAG,GAAG;gBACxB,MAAMC,mBAAmBzF,KAAK,OAAO,CAAC,yCAAyC,GAAG,CAAC;gBACnF,MAAMvB,OAAO+G,QAAQ,CAAC,EAAE,CAAC,SAAS;gBAClC,MAAME,eAAeD,iBAAiB,OAAO,CAAC,8BAA8B,SAAS,CAAChH,MAAM;oBAAE,OAAO;gBAAK;gBAC1G,IAAK,MAAMiH,aAAa,KAAK,KAAM,GAClCA,aAAa,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK;YAE1C;QACD;QAGA,MAAMC,YAAY,MAAM,IAAInJ,QAAgB,CAACoJ;YAE5C,MAAMC,iBAAiB,OAAOtJ;gBAC7B,MAAMmF,MAAMnF,SAAS,GAAG;gBACxB,IAAImF,IAAI,QAAQ,CAAC,yBAAyBA,IAAI,QAAQ,CAAC,0BAA0B;oBAChF,MAAMoE,eAAe,MAAMvJ,SAAS,IAAI;oBACxCyD,KAAK,GAAG,CAAC,YAAY6F;oBACrBD,QAAQE,cAAc,KAAK;gBAC5B;YACD;YAGA9F,KAAK,EAAE,CAAC,YAAY6F;YAEpB,MAAME,oBAAoB/F,KAAK,OAAO,CAAC;YACvC,IAAIH,AAAoB,YAApBA,OAAO,QAAQ,EAClBkG,kBAAkB,OAAO,CAAC,0BAA0B,MAAM,CAAC;gBAAE,SAAS;YAAM,GAAG,OAAO,CAAC,UAAU,KAAK;iBAEtGA,kBAAkB,OAAO,CAAC,0BAA0B,MAAM,CAAC;gBAAE,SAAS;YAAK,GAAG,OAAO,CAAC,UAAU,KAAK;QAEvG;QAGA,MAAM/F,KAAK,KAAK;QAEhB,OAAO4E,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQe;IAChB;IC3JO,MAAMK,mBAAkC,OAAOpG,MAAMC;QAC3D,IAAIA,AAAsB,UAAtBA,OAAO,UAAU,EACpB,OAAOgF,UAAUjF,MAAMC;QAGxB,IAAIA,AAAsB,cAAtBA,OAAO,UAAU,EACpB,OAAO0C,WAAW3C,MAAMC;QAGzB,OAAOH,cAAc6C,YAAYsC,WAAWjF,MAAMC;IACnD;IC5BO,MAAMoG,uBAAsC,OAAOC,OAAOrG;QAChE,MAAMsG,UAAUtG,OAAO,OAAO,IAAI,EAAE;QAEpC,MAAM+C,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQiK,QAAQ,GAAG,CAAC,CAACtD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAC3D,OAAOhD,OAAO,KAAK;YACpB;QACD;QAEA,MAAM8D,MAAM,MAAMf,KAAK,GAAG,CAAqC;YAC9D,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,SAAS;gBACT,WAAW;gBACX,cAAc;gBACd,aAAa;gBACb,aAAa;gBACb,WAAW;YACZ;QACD;QAEA,OAAOgC,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQjB,KAAK,MAAM,QAAQ,EAAE;IACrC;ICzBO,MAAMyC,mBAAkC,OAAOF,OAAOrG;QAC5D,MAAMsG,UAAUtG,OAAO,OAAO,IAAI,EAAE;QAEpC,MAAM+C,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQiK,QAAQ,GAAG,CAAC,CAACtD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAC3D,SAAS;YACV;QACD;QAEA,MAAMwD,kBAAkB;YACvB,IAAI;gBACH,MAAM1C,MAAM,MAAMf,KAAK,GAAG,CAA0C;oBACnE,QAAQ;oBACR,KAAK;oBACL,QAAQ;wBAAE,MAAM;wBAAG,OAAO;oBAAG;gBAC9B;gBAEA,OAAOe,AAAa,MAAbA,IAAI,IAAI,GAASA,IAAI,IAAI,GAAG,EAAE;YACtC,EAAE,OAAOxH,OAAO;gBACf,OAAO,EAAE;YACV;QACD;QAEA,MAAMmK,kBAAkB;YACvB,IAAI;gBACH,MAAM3C,MAAM,MAAMf,KAAK,GAAG,CAAiD;oBAC1E,QAAQ;oBACR,KAAK;gBACN;gBACA,OAAOe,AAAe,MAAfA,IAAI,MAAM,GAASA,IAAI,IAAI,GAAG;YACtC,EAAE,OAAOxH,OAAO;gBACf,OAAO;YACR;QACD;QAEA,MAAMoK,gBAAgB;YACrB,IAAI;gBACH,MAAM5C,MAAM,MAAMf,KAAK,GAAG,CAA2E;oBACpG,QAAQ;oBACR,KAAK;gBACN;gBACA,OAAOe,AAAa,MAAbA,IAAI,IAAI,GAASA,IAAI,IAAI,CAAC,uBAAuB,GAAG,EAAE;YAC9D,EAAE,OAAOxH,OAAO;gBACf,OAAO,EAAE;YACV;QACD;QAEA,MAAM,CAACqK,cAAcC,cAAcC,WAAW,GAAG,MAAMlK,QAAQ,GAAG,CAAC;YAClE6J;YACAC;YACAC;SACA;QAED,OAAO3B,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ;YAAE4B;YAAcC;YAAcC;QAAW;IACzD;IC3DO,MAAMC,yBAAwC,OAAOT,OAAOrG;QAClE,MAAM+C,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQ2D,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAClE,SAAS;YACV;QACD;QAEA,IAAI;YACH,MAAMc,MAAM,MAAMf,KAAK,GAAG,CAAoE;gBAC7F,QAAQ;gBACR,KAAK;gBACL,QAAQ;oBAAE,MAAM;oBAAG,OAAO/C,OAAO,WAAW;gBAAC;YAC9C;YAEA,IAAI8D,AAAa,MAAbA,IAAI,IAAI,EACX,OAAOiB,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ/E,OAAO,WAAW,GAAG8D,IAAI,OAAO,GAAGA,IAAI,IAAI;YAG3D,OAAOiB,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ,EAAE;QAClB,EAAE,OAAOzI,OAAO;YACf,OAAOyI,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ,EAAE;QAClB;IACD;ICnBO,MAAMgC,4BAA2C,OAAOV,OAAOrG;QACrE,MAAM+C,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQ2D,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAClE,SAAS;gBACT,QAAQ;YACT;QACD;QAEA,IAAI;YACH,MAAMnH,SAAS,MAAMkH,KAAK,GAAG,CAA+D;gBAC3F,QAAQ;gBACR,KAAK;gBACL,MAAM;oBACL,SAAS/C,OAAO,WAAW;oBAC3B,UAAUA,OAAO,QAAQ,IAAI;oBAC7B,WAAWA,OAAO,SAAS,IAAI;oBAC/B,MAAMA,OAAO,IAAI,IAAI;oBACrB,MAAMA,OAAO,IAAI,IAAI;oBACrB,QAAQ;oBACR,MAAM;gBACP;YACD;YAEA,OAAO+E,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQlJ,AAAgB,MAAhBA,OAAO,IAAI,GAASA,OAAO,IAAI,CAAC,QAAQ,GAAG,EAAE;QAC7D,EAAE,OAAOS,OAAO;YACf,OAAOyI,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ,EAAE;QAClB;IACD;IChCO,MAAMiC,6BAA4C,OAAOX,OAAOrG;QACtE,MAAM+C,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQ2D,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAClE,SAAS;gBACT,QAAQ;YACT;QACD;QAEG,IAAI;YACN,MAAMnH,SAAS,MAAMkH,KAAK,GAAG,CAAmE;gBAC/F,QAAQ;gBACR,KAAK;gBACL,MAAM;oBACL,SAAS/C,OAAO,WAAW;oBAC3B,uBAAuB;wBACrB,OAAO;wBACP,MAAM,CAAC,CAAC,EAAEA,OAAO,WAAW,EAAE;oBAChC;oBACA,MAAM;wBACJ,WAAW;wBACX,MAAM;oBACR;gBACC;gBACF,iBAAiB;YAClB;YAEA,OAAO+E,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQlJ,AAAgB,MAAhBA,OAAO,IAAI,GAASA,OAAO,IAAI,CAAC,eAAe,GAAG,EAAE,EAAC;QACrE,EAAE,OAAOS,OAAO;YACf,OAAOyI,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ,EAAE;QAClB;IAED;ICjCA,MAAM5I,QAAQ8K,oBAAQ;IAQtB,MAAMxE,gBAA8C;QACnD,UAAU;QACV,MAAM;QACN,QAAQ;QACR,MAAM;YACL;YACA;YACA;SACA;QACD,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,MAAM;QACN,QAAQ;IACT;IACA,MAAMyE,oBAAoB,CAACC,OACnBvK,OAAO,OAAO,CAACuK,MACpB,GAAG,CAAC,CAAC,CAAC/E,KAAKC,MAAM;YACjB,MAAM+E,aAAalP,mBAAmBkK;YACtC,MAAMiF,eAAenP,mBAAmBC,OAAOkK;YAC/C,OAAO,GAAG+E,WAAW,CAAC,EAAEC,cAAc;QACvC,GACC,IAAI,CAAC;IAER,MAAMC,qBAAqB,CAACC,WAAqBC,SAAiBC;QACjE,IAAInL,QAAQ;QACZ,IAAIkL,SAAS,SAAS,SACrBlL,QAAQiL,SAAS,CAAC,EAAE;aACd,IAAIC,SAAS,SAAS,SAC5BlL,QAAQiL,SAAS,CAAC,EAAE;aACd,IAAIC,SAAS,SAAS,SAC5BlL,QAAQiL,SAAS,CAAC,EAAE;QAErB,OAAOjL,SAAUmL,CAAAA,AAAa,YAAbA,WAAuB,kBAAkB,eAAc;IACzE;IAEO,MAAM/E,kBAA4B,OAAO3C,MAAMC;QACrD,MAAM,EAAE0H,kBAAkB,EAAEC,gBAAgB,EAAEC,gBAAgB,EAAEC,eAAe,EAAE,GAAG7H,OAAO,WAAW;QACtG,MAAM8C,eAAe/C,KAAK,UAAU;QAEpC,MAAMgD,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQ2D,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAClE,QAAQ;gBACR,SAAS;YACV;QACD;QAGAD,KAAK,sBAAsB,CAAiB,CAACrG;YAE5C,IAAIA,SAAS,IAAI,EAAE,SAAS,GAAG;gBAC9B,IAAIwG,SAAS;gBAGZA,SADGnL,MAAM,OAAO,CAAC0K,aAAQ,CAAC/F,SAAS,IAAI,CAAC,IAAI,CAAC,IACpC4K,mBAAmB7E,aAAQ,CAAC/F,SAAS,IAAI,CAAC,IAAI,CAAC,EAAcA,SAAS,IAAI,CAAC,OAAO,EAAEsD,OAAO,QAAQ,IAG1GyC,aAAQ,CAAC/F,SAAS,IAAI,CAAC,IAAI,CAAC,IAC7BA,SAAS,MAAM,CAAC,eAAe,IAC9BsD,CAAAA,AAAoB,YAApBA,OAAO,QAAQ,GAAe,kBAAkB,eAAc;gBAGjE,OAAO;oBACN,MAAMyC,aAAQ,CAAC/F,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM;oBAC3C,SAASwG;oBACT,MAAMxG,SAAS,IAAI;gBACpB;YACD;QACD;QAGA,MAAMqG,KAAK,GAAG,CAAC;YACd,QAAQ;YACR,KAAK;YACL,iBAAiB,CAAC,kBAAkB,EAAE/C,AAAoB,YAApBA,OAAO,QAAQ,GAAe,OAAO,KAAK,CAAC,CAAC;QACnF;QAEA,MAAMqD,eAAe,OAAOE,SAEpB,MAAM5G,QAAQ,GAAG,CACvB4G,OAAO,GAAG,CAAC,OAAO1B;gBACjB,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;gBACpC,MAAM6B,QAAQ,MAAMC,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;gBAC/D,MAAMI,WAAW,IAAIC,CAAAA,4BAAAA;gBACrBD,SAAS,MAAM,CAAC,SAASnG,2BAAAA,gBAAmB,CAACiG;gBAE7C,MAAMhH,WAAW,MAAMqG,KAAK,GAAG,CAAoC;oBAClE,QAAQ;oBACR,KAAK;oBACL,MAAMa;oBACN,iBACC5D,AAAoB,YAApBA,OAAO,QAAQ,GAAe,oBAAoB;gBACpD;gBAEA,OAAOtD,SAAS,IAAI;YACrB;QAKF,MAAMqH,sBAAsBxF,cAAcyB,OAAO,OAAO;QACxD,MAAMgE,sBAAsB,MAAMX,aAAaU;QAE/C,MAAME,UAAUnF,cAAckB,OAAO,OAAO,EAAE,CAACR;YAC9C,IAAIA,IAAI,OAAO,CAAC,GAAG,EAAE;gBACpB,MAAM0E,MAAMH,oBAAoB,SAAS,CAAC,CAACf,KAAOA,OAAOxD,IAAI,OAAO,CAAC,GAAG;gBACxEA,IAAI,OAAO,CAAC,GAAG,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,SAAS;gBACpD1E,IAAI,OAAO,CAAC,OAAO,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,SAAS;gBACxD1E,IAAI,OAAO,CAAC,SAAS,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,WAAW,CAAC,QAAQ;gBACrE1E,IAAI,OAAO,CAAC,YAAY,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,YAAY,CAAC,QAAQ;gBACzE1E,IAAI,OAAO,CAAC,UAAU,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,UAAU,CAAC,QAAQ;gBACrE1E,IAAI,OAAO,CAAC,SAAS,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,eAAe;YACjE;YACA,OAAO1E;QACR;QAGA,MAAMsI,WACLF,AAAqB,aAArBA,mBAAgC;YAACF;SAAmB,GAAGE,AAAqB,eAArBA,mBAAkCD,mBAAmB,EAAE;QAC/G,MAAMI,WAAW,MAAM1E,aAAayE;QAGpC,MAAME,gBAAgBhI,AAAwC,aAAxCA,OAAO,WAAW,CAAC,gBAAgB;QACzD,MAAMiI,WAAWjI,OAAO,WAAW,CAAC,eAAe;QACnD,MAAMkI,SAASlI,OAAO,WAAW,CAAC,YAAY,IAAI,EAAE;QAEpD,MAAMmI,iBAAiBnI,OAAO,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAACoI,QAAW;gBACnE,IAAI;gBACJ,kBAAkB;gBAClB,QAAQ;gBACR,YAAY;gBACZ,MAAMA;gBACN,SAAS;gBACT,UAAU;YACX;QAEA,MAAMC,eAAeH,OACnB,GAAG,CACH,CAACI,QACA,CAAC,wCAAwC,EAAEA,MAAM,IAAI,CAAC,WAAW,EAAEA,MAAM,EAAE,CAAC,mBAAmB,EAAEA,MAAM,EAAE,CAAC,GAAG,EAAEA,MAAM,IAAI,CAAC,WAAW,CAAC,EAEvI,IAAI,CAAC;QAEP,MAAMC,YAAY;YACjB,kBAAkBvI,OAAO,WAAW,CAAC,OAAO;YAC5C,gBAAgBgI,gBAAgB,IAAI;YACpC,YAAYA,gBAAgB,EAAE,GAAGG;YACjC,QAAQ;gBACP,UAAU;gBACV,WAAW;gBACX,YAAY;gBACZ,iBAAiB;gBACjB,YAAY;YACb;YACA,sBAAsB;YACtB,aAAa;gBACZ,aAAa;gBACb,aAAa;gBACb,aAAa;gBACb,UAAU,CAAC;YACZ;YACA,GAAIF,WAAW;gBAAE,MAAMA,SAAS,KAAK;gBAAE,WAAWA,SAAS,KAAK;YAAC,IAAI,IAAI;QAC1E;QAEA,MAAMrD,cAAc;YACnB,cAAc;YACd,QAAQ;YACR,sBAAsB;YACtB,UAAU;YACV,aAAa;YACb,+BAA+B;YAC/B,iBAAiB;YACjB,gBAAgB;YAChB,QAAQ;YACR,gBAAgB;YAChB,mBAAmB;YACnB,eAAe;YACf,iBAAiB;YACjB,oBAAoB;YACpB,cAAc;YACd,oBAAoB;YACpB,iBAAiB;YACjB,MAAM5E,AAAoB,cAApBA,OAAO,QAAQ,GAAiB,IAAI;YAC1C,cAAc;YACd,YAAY;YACZ,OAAOA,OAAO,KAAK;YACnB,SAASiE,UAAUoE;YACnB,OAAOzI,KAAK,SAAS,CAAC2I;YACtB,gBAAgBX,AAAqB,SAArBA,mBAA4B,OAAO;YACnD,iBAAiBhI,KAAK,SAAS,CAAC;gBAC/B,WAAW4I,UAAU,CAACZ,iBAAiB;YACxC;YACA,iBAAiBhI,KAAK,SAAS,CAC9BmI,SAAS,GAAG,CAAC,CAAC7F,OAAU;oBACvB,IAAI;oBACJ,KAAKA,KAAK,SAAS;oBACnB,KAAKA,KAAK,SAAS;oBACnB,QAAQ;oBACR,YAAYA,KAAK,WAAW;oBAC5B,aAAaA,KAAK,YAAY;oBAC9B,OAAO;wBACN,kBAAkB;wBAClB,cAAc;oBACf;gBACD;YAED,iBAAiBuG,gBAAgBzI,OAAO,WAAW,CAAC,SAAS;YAC7D,cAAc6H,gBAAgB,QAAQ,CAAC,cAAc,IAAI;YACzD,iBAAiBA,gBAAgB,QAAQ,CAAC,eAAe,IAAI;QAC9D;QAEA,MAAMa,UAAU1I,OAAO,OAAO,CAAC,IAAI,CAAC,CAACgD,KAAOA,AAAY,cAAZA,GAAG,IAAI,GAAiB;QACpE,IAAI,CAAC0F,SACJ,OAAO;YAAE,MAAM;YAAK,SAAS;YAAsB,MAAM;QAAG;QAE7D,MAAMC,cAAczB,kBAAkB;YACrC,QAAQ;YACR,MAAM;YACN,KAAK;YACL,mBAAmB;YACnB,SAASwB;QACV;QACA,MAAMxP,WAAWgO,kBAAkBtC;QACnC,IAAIgE,UAAUzM,MAAMwM,aAAYzP;QAEhC,MAAM2P,gBAAgB,MAAM9F,KAAK,GAAG,CAAqC;YACxE,QAAQ;YACR,KAAK,CAAC,8CAA8C,EAAE4F,YAAY,SAAS,EAAEC,SAAS;YACtF,MAAM1P;YACN,SAAS;gBACR,gBAAgB;gBAChB,cAAc;YACf;YACA,iBAAiB8G,AAAoB,YAApBA,OAAO,QAAQ,GAAe,kBAAkB;QAClE;QAEA,OAAO+E,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ8D,cAAc,IAAI,CAAC,MAAM;IACzC;ICzPO,MAAM7D,gBAA2B,OAAOjF,MAAMC;QACpD,MAAM8C,eAAe/C,KAAK,UAAU;QAEpC,MAAMkF,gBAAmC;YACxC,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,KAAK;YACL,UAAU;QACX;QAEA,MAAM9E,OAAO,MAAMJ,KAAK,UAAU,CAAC;YAClC,MAAMA,KAAK,KAAK;YAChB,KAAKC,OAAO,GAAG,IAAI;YACnB,SAASA,OAAO,OAAO,EAAE,IAAI,CAACgD,KAAQ;oBAAE,GAAGiC,aAAa;oBAAE,GAAGjC,EAAE;gBAAC,OAAO,EAAE;QAC1E;QAGA,IAAI;YACH,MAAM7C,KAAK,eAAe,CAAC,mBAAmB;gBAAE,OAAO;YAAU;QAClE,EAAE,OAAO7D,OAAO;YACf,OAAO;gBACN,MAAM;gBACN,SAAS,CAAC,kBAAkB,EAAE0D,AAAoB,YAApBA,OAAO,QAAQ,GAAe,OAAO,KAAK,CAAC,CAAC;gBAC1E,MAAMG,KAAK,GAAG;YACf;QACD;QAEA,MAAM2I,gBAAgB;YACrB;SACA;QAED,MAAM3I,KAAK,KAAK,CAAC,MAAM,OAAO4I,OAAOC;YACpC,MAAMnH,MAAM,IAAIoH,IAAID,QAAQ,GAAG;YAC/B,IAAIF,cAAc,IAAI,CAACI,CAAAA,UAAWrH,IAAI,QAAQ,CAAC,QAAQ,CAACqH,WAAW;gBAClErH,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO;gBAE5B,MAAMkH,MAAM,QAAQ,CAAC;oBAAE,KAAKlH,IAAI,QAAQ;gBAAG;YAC5C,OACC,MAAMkH,MAAM,QAAQ;QAEtB;QAGA/H,cAAcb,MAAK,8CAA6C,MAAM,0BACtE;YACC,eAAe;YACf,gBAAgB;QACjB;QAGA,MAAM+E,gBAAgB/E,KAAK,OAAO,CAAC;QACnC,MAAM+E,cAAc,KAAK;QACzB,MAAMA,cAAc,IAAI,CAAClF,OAAO,KAAK;QAGrC,MAAME,oBAAoBC,MAAMH,OAAO,OAAO;QAE9C,MAAMG,KAAK,KAAK,CAAC;QAEjB,MAAMA,KAAK,QAAQ,CAAC,KAAK,CAAC;QAG1B,MAAMgJ,iBAAiBX,UAAU,CAACxI,OAAO,WAAW,CAAC,gBAAgB,CAAC;QACtE,MAAMoJ,iBAAiBjJ,KAAK,OAAO,CAAC,8BAA8B,MAAM,CAAC;YAAE,SAAS;QAAO;QAE3F,MAAMiJ,eAAe,QAAQ,CAAC,CAAClK,OAASA,KAAK,cAAc;QAC3D,MAAMkK,eAAe,OAAO,CAAC,CAAC,iDAAiD,EAAED,eAAe,GAAG,CAAC,EAAE,KAAK;QAE3G,IAAIE,YAAsB,EAAE;QAC5B,IAAIrJ,AAAwC,aAAxCA,OAAO,WAAW,CAAC,gBAAgB,EACtCqJ,YAAY;YAACrJ,OAAO,WAAW,CAAC,kBAAkB;SAAC;aAC7C,IAAIA,AAAwC,eAAxCA,OAAO,WAAW,CAAC,gBAAgB,EAC7CqJ,YAAYrJ,OAAO,WAAW,CAAC,gBAAgB;QAGhD,MAAMuD,SAAS,MAAM5G,QAAQ,GAAG,CAC/B0M,UAAU,GAAG,CAAC,CAACxH;YACd,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;YACpC,OAAO8B,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;QACnD;QAGD,MAAM8F,iBAAiBF,eACrB,OAAO,CAAC,wCACR,OAAO,CAAC;QACV,MAAMG,mBAAmB,MAAMD,eAAe,KAAK;QAEnD,IAAK,IAAI/Q,IAAI,GAAGA,IAAIgR,kBAAkBhR,IAAK;YAC1C,IAAI,CAACgL,MAAM,CAAChL,EAAE,EACb;YAGD,MAAMiR,MAAMF,eAAe,GAAG,CAAC/Q;YAE/B,IAAK,MAAMiR,IAAI,OAAO,CAAC,OAAO,KAAK,KAAM,GACxC,MAAMA,IAAI,OAAO,CAAC,6BAA6B,MAAM,CAAC;gBAAE,SAAS;YAAK,GAAG,KAAK;iBAG9E,MAAMA,IAAI,KAAK;YAIhB,MAAMC,kBAAkBtJ,KAAK,OAAO,CAAC;YACrC,MAAMsJ,gBAAgB,OAAO,CAAC,6CAA6C,MAAM,CAAC;gBAAE,SAAS;YAAO,GAAG,KAAK;YAC5G,MAAMlE,qBAAqBpF,KAAK,YAAY,CAAC;YAC7C,MAAMA,KAAK,cAAc,CAAC;YAC1B,MAAMsJ,gBAAgB,OAAO,CAAC,uCAAuC,MAAM,CAAC;gBAAE,SAAS;YAAO,GAAG,KAAK;YACtG,MAAMjE,cAAc,MAAMD;YAC1B,MAAMC,YAAY,QAAQ,CAAC;gBAACjC,MAAM,CAAChL,EAAE;aAAC;YAGtC,MAAMmR,aAAaD,gBACjB,OAAO,CAAC,wDACR,MAAM,CAAC;gBAAE,SAAS;YAAK;YACzB,MAAMC,WAAW,OAAO,CAAC;gBAAE,OAAO;YAAU;YAC5C,MAAMA,WAAW,KAAK;YAEtB,MAAMvJ,KAAK,cAAc,CAACpD,iBAAiB,KAAK;QACjD;QAGA,IAAIiD,OAAO,WAAW,CAAC,eAAe,EAAE;YACvC,MAAM2J,oBAAoBxJ,KAAK,OAAO,CAAC,8BAA8B,MAAM,CAAC;gBAAE,SAAS;YAAO;YAC9F,MAAMwJ,kBAAkB,OAAO,CAAC,oBAAoB,KAAK;YACzD,MAAMA,kBACJ,OAAO,CAAC,mDACR,IAAI,CAAC3J,OAAO,WAAW,CAAC,eAAe,CAAC,KAAK;YAC/C,MAAM4J,gBAAgBzJ,KAAK,OAAO,CAAC;YACnC,MAAMyJ,cAAc,KAAK,GAAG,OAAO;YACnC,MAAMA,cAAc,KAAK,GAAG,KAAK;QAClC;QAGA,MAAMC,cAAc1J,KAClB,OAAO,CAAC,0CACR,MAAM,CAAC;YAAE,SAAS;QAAO,GACzB,OAAO,CAAC;QAGV,MAAM2J,oBAAoB,MAAMD,YAAY,SAAS;QAErD,IAAIC,mBAEH,MAAMD,YACJ,OAAO,CAAC,CAAC,kCAAkC,EAAEpB,gBAAgBzI,OAAO,WAAW,CAAC,SAAS,EAAE,GAAG,CAAC,EAC/F,KAAK;QAIR,IAAIA,OAAO,WAAW,CAAC,eAAe,CAAC,QAAQ,CAAC,cAAc;YAC7D,MAAM+J,qBAAqB5J,KACzB,OAAO,CAAC,0CACR,MAAM,CAAC;gBAAE,SAAS;YAAO,GACzB,OAAO,CAAC;YACV4J,mBAAmB,OAAO,CAAC,wDAAwD,KAAK;QACzF;QAGA,MAAMjE,YAAY,MAAM,IAAInJ,QAAgB,CAACoJ;YAE5C,MAAMC,iBAAiB,OAAOtJ;gBAC7B,MAAMmF,MAAMnF,SAAS,GAAG;gBACxB,IAAImF,IAAI,QAAQ,CAAC,4BAA4B;oBAC5C,MAAMoE,eAAe,MAAMvJ,SAAS,IAAI;oBACxCyD,KAAK,GAAG,CAAC,YAAY6F;oBACrBD,QAAQE,aAAa,IAAI,CAAC,MAAM;gBAEjC;YACD;YAGA9F,KAAK,EAAE,CAAC,YAAY6F;YAEpB7F,KAAK,OAAO,CAAC,0BAA0B,MAAM,CAAC;gBAAE,SAAS;YAAQ,GAAG,KAAK;QAC1E;QAEA,IAAGH,AAAgC,QAAhCA,OAAO,WAAW,CAAC,SAAS,EAAS;YACvC,MAAMG,KAAK,cAAc,CAAC;YAC1B,MAAMuJ,aAAavJ,KAAK,OAAO,CAAC;YAChC,IAAI,MAAMuJ,WAAW,SAAS,IAC5B,MAAMA,WAAW,KAAK;QAEzB;QAEA,IAAI1J,AAAoB,cAApBA,OAAO,QAAQ,EAAgB;YAClC,MAAMG,KAAK,OAAO,CAAC,0BAA0B,MAAM,CAAC;gBAAE,SAAS;YAAO,GAAG,OAAO,CAAC;gBAAE,OAAO;YAAU;YACpG,MAAMA,KAAK,cAAc,CAAC;YAC1B,MAAMA,KAAK,OAAO,CAAC,0BAA0B,MAAM,CAAC;gBAAE,SAAS;YAAO,GAAG,KAAK;QAC/E;QAGA,MAAMA,KAAK,KAAK;QAEhB,OAAO4E,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQe;IAChB;IC/KO,MAAM0C,aAAwC;QACpD,IAAI;QACJ,QAAQ;QACR,UAAU;IACX;IAEO,MAAMC,kBAAkB,CAACuB,YAC/BA,AAAc,UAAdA,YAAsB,IAAI;IAIpB,MAAMC,iBAAgC,OAAOlK,MAAMC;QACzD,IAAIA,AAAsB,UAAtBA,OAAO,UAAU,EACpB,OAAOgF,cAAUjF,MAAMC;QAGxB,IAAIA,AAAsB,cAAtBA,OAAO,UAAU,EACpB,OAAO0C,gBAAW3C,MAAMC;QAGzB,OAAOH,cAAc6C,iBAAYsC,eAAWjF,MAAMC;IACnD;ICvCO,MAAM0C,oCAA4B,OAAO3C,MAAMC;QACrD,MAAM8C,eAAe/C,KAAK,UAAU;QAEpC,MAAMgD,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQ2D,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAClE,QAAQ;gBACR,SAAS;YACV;QACD;QAGA,MAAMkH,cAAc,MAAMnH,KAAK,GAAG,CAAmB;YAClD,QAAQ;YACR,KAAK;QACP;QAED,IAAImH,AAAqB,MAArBA,YAAY,IAAI,EACjB,OAAO;YAAE,MAAM;YAAG,SAAS;YAAQ,MAAMA;QAAY;QAIxD,MAAMC,YAAsB,EAAE;QAC9B,IAAInK,OAAO,OAAO,IAAIA,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG;YAChD,MAAMuD,SAAS,MAAM5G,QAAQ,GAAG,CAC/BqD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC6B;gBACnB,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;gBACpC,OAAO8B,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;YACnD;YAGD,MAAMM,MAAM,MAAMnH,QAAQ,GAAG,CAC5B4G,OAAO,GAAG,CAAC,OAAOP;gBACjB,MAAMY,WAAW,IAAIC,CAAAA,4BAAAA;gBACrBD,SAAS,MAAM,CAAC,SAASnG,2BAAAA,gBAAmB,CAACuF;gBAE7C,MAAMtG,WAAW,MAAMqG,KAAK,GAAG,CAA8B;oBAC5D,QAAQ;oBACR,KAAK;oBACL,MAAMa;gBACP;gBAEA,OAAOlH,SAAS,IAAI;YACrB;YAGDyN,UAAU,IAAI,IAAIrG,IAAI,GAAG,CAAC,CAACd,KAAOA,GAAG,SAAS;QAC/C;QAGA,MAAMoH,QAAQ;YACb,2BAA2B;YAC3B,iBAAiB;YACjB,sBAAsB;YACtB,aAAaxK,KAAK,SAAS,CAAC;gBAC3B,aAAa;gBACb,mBAAmB;gBACnB,aAAa;gBACb,UAAU,CAAC;YACZ;YACA,cAAcA,KAAK,SAAS,CAAC;gBAC5B,SAAS;gBACT,UAAU;gBACV,MAAM;gBACN,WAAW;gBACX,UAAU;gBACV,eAAe;gBACf,QAAQ;YACT;QACD;QAEA,MAAMyK,WAAW;YAChB,SAASrK,OAAO,OAAO;YACvB,YAAYmK;YACZ,iBAAiB;YACjB,YAAY;YACZ,cAAc;YACd,OAAOvK,KAAK,SAAS,CAACwK;QACvB;QAEC,MAAMtG,MAAM,MAAMf,KAAK,GAAG,CAAM;YAC9B,QAAQ;YACR,KAAK;YACL,MAAMsH;QACR;QAEA,OAAOtF,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQjB,IAAI,IAAI;IACzB;IC1FO,MAAMkB,kCAA2B,OAAOjF,MAAMC;QACpD,MAAMiF,gBAAmC;YACxC,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,KAAK;YACL,UAAU;QACX;QAEA,MAAM9E,OAAO,MAAMJ,KAAK,UAAU,CAAC;YAClC,MAAMA,KAAK,KAAK;YAChB,KAAKC,OAAO,GAAG,IAAI;YACnB,SAASA,OAAO,OAAO,EAAE,IAAI,CAACgD,KAAQ;oBAAE,GAAGiC,aAAa;oBAAE,GAAGjC,EAAE;gBAAC,OAAO,EAAE;QAC1E;QAEA,MAAMF,eAAe/C,KAAK,UAAU;QAGpC,IAAI;YACH,MAAMI,KAAK,eAAe,CAAC;QAC5B,EAAE,OAAO7D,OAAO;YACf,OAAO;gBAAE,MAAM;gBAAG,SAAS;gBAAQ,MAAM6D,KAAK,GAAG;YAAG;QACrD;QAGA,MAAMmK,eAAenK,KAAK,OAAO,CAAC;QAClC,MAAMmK,aAAa,KAAK;QACxB,MAAMA,aAAa,IAAI,CAACtK,OAAO,OAAO;QAGtC,IAAIA,OAAO,OAAO,IAAIA,OAAO,OAAO,EAAE,SAAS,GAAG;YACjD,MAAMuD,SAAS,MAAM5G,QAAQ,GAAG,CAC/BqD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC6B;gBACnB,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;gBACpC,OAAO8B,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;YACnD;YAGD,MAAM+B,qBAAqBpF,KAAK,YAAY,CAAC;YAC7C,MAAMA,KAAK,OAAO,CAAC,sDAAsD,KAAK;YAC9E,MAAMA,KAAK,OAAO,CAAC,iDAAiD,MAAM,CAAC;gBAAE,SAAS;YAAO,GAAG,KAAK;YACrG,MAAMqF,cAAc,MAAMD;YAC1B,MAAMC,YAAY,QAAQ,CAACjC;YAE3B,MAAMpD,KAAK,OAAO,CAAC,yDAAyD,MAAM,CAAC;gBAAE,SAAS;YAAK,GAAG,KAAK;QAC5G;QAGA,MAAMA,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG;QAG1B,IAAIH,OAAO,OAAO,EAAE;YACnB,MAAMuK,kBAAkBpK,KAAK,OAAO,CAAC,6CAA6C,MAAM,CAAC;gBAAE,SAAS;YAAO;YAC3G,MAAMoK,gBAAgB,OAAO,CAAC,gBAAgB,KAAK;YACnD,MAAMA,gBAAgB,OAAO,CAAC,kCAAkC,IAAI,CAACvK,OAAO,OAAO;YACnF,MAAM4J,gBAAgBzJ,KAAK,OAAO,CAAC;YACnC,MAAMyJ,cAAc,KAAK,GAAG,OAAO;YACnC,MAAMA,cAAc,KAAK,GAAG,KAAK;QAClC;QAGA,IAAI5J,OAAO,WAAW,EAAE;YACvB,MAAMwK,sBAAsBrK,KAC1B,OAAO,CAAC,6CACR,MAAM,CAAC;gBAAE,SAAS;YAAO,GACzB,OAAO,CAAC;YACV,MAAMqK,oBAAoB,OAAO,CAAC,CAAC,gCAAgC,EAAExK,OAAO,WAAW,CAAC,GAAG,CAAC,EAAE,KAAK;QACpG;QAGA,MAAMG,KAAK,OAAO,CAAC,uCAAuC,KAAK;QAE/D,OAAO4E,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ;IAChB;ICnDO,MAAM0F,oBAAmC,OAAO1K,MAAMC;QAC5D,IAAIA,AAAsB,UAAtBA,OAAO,UAAU,EACpB,OAAOgF,gCAAUjF,MAAMC;QAGxB,IAAIA,AAAsB,cAAtBA,OAAO,UAAU,EACpB,OAAO0C,kCAAW3C,MAAMC;QAGzB,OAAOH,cAAc6C,mCAAYsC,iCAAWjF,MAAMC;IACnD;ICtCO,MAAM0K,oBAAoB;IAE1B,MAAMC,YAAY;QACxB,QAAQ;QACR,iBAAiB;IAClB;ICUA,MAAMC,2BAA2B;IAEjC,MAAMnI,8BAA0C;QAC/C,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,OAAO;QACP,MAAM;QACN,MAAM;QACN,QAAQ;QACR,QAAQ;IACT;IAGA,MAAMoI,cAAc;QAAC;KAAO;IAG5B,MAAMC,cAAyC;QAC9C,MAAQ;QACR,QAAU;QACV,aAAe;IACd;IAEF,MAAM5D,yBAAoB,CAACC;QAC1B,MAAMvD,WAAW,IAAImH;QAErB,KAAK,MAAM,CAAC3I,KAAKC,MAAM,IAAIzF,OAAO,OAAO,CAACuK,MACzCvD,SAAS,MAAM,CAACxB,KAAKjK,OAAOkK;QAG7B,OAAOuB,SAAS,QAAQ;IACzB;IAEO,MAAMoH,qBAAqB,OAAUjI,MAAY/C,QAA6BmH;QACpF,IAAI8D;QAEJ,IAAI;YACHA,UAAU,MAAMlI,KAAK,GAAG,CAAC;gBACxB,QAAQ;gBACR,KAAK;gBACL,QAAQ;oBACP,QAAQ;oBACR,OAAO/C,OAAO,KAAK;oBACnB,MAAM;gBACP;gBACA,MAAMkH,uBAAkBC;YACzB;QACD,EAAE,OAAO7K,OAAO;YACf2O,UAAW3O,OAAwB;QACpC;QAEA,OAAO2O;IACR;IAEO,MAAMvI,gCAA4B,OAAO3C,MAAMC;QACrD,MAAMkL,cAAc;QACpB,MAAMC,mBAAmBC,CAAAA,OAAO,gBAAoBxT,KAAK,KAAK,CAAC,IAAIyT,OAAO,OAAO,KAAK;QAEtF,MAAMvI,eAAe/C,KAAK,UAAU;QAEpC,MAAMgD,OAAO,IAAI1G,KAAK;YAOrB,SAAS;gBACR,cACC;gBACD,QAAQ2D,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAClE,QAAQ;gBACR,SAAS,CAAC,2GAA2G,EAAEhD,OAAO,KAAK,CAAC,sBAAsB,EAAEqL,KAAK,GAAG,IAAI;YACzK;QACD;QAGAtI,KAAK,sBAAsB,CAAiB,CAACrG;YAC5C,MAAM4O,eAAe5O,SAAS,IAAI;YAClC,MAAMuG,UAAUjD,AAAoB,YAApBA,OAAO,QAAQ,GAAe,OAAO;YAGrD,IACCsL,cAAc,aACdA,AAA+B,MAA/BA,aAAa,SAAS,CAAC,GAAG,IAC1B,CAACT,YAAY,QAAQ,CAACS,aAAa,SAAS,CAAC,GAAG,GAC/C;gBACD,MAAMpI,SACLT,2BAAQ,CAAC6I,aAAa,SAAS,CAAC,GAAG,CAAC,IACpC5O,SAAS,MAAM,CAAC,eAAe,IAC/B4O,aAAa,SAAS,CAAC,OAAO,IAC9B,CAAC,EAAE,EAAErI,QAAQ,SAAS,CAAC;gBAExB,OAAO;oBACN,MAAMR,2BAAQ,CAAC6I,aAAa,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM;oBACnD,SAASpI;oBACT,MAAMoI;gBACP;YACD;QACD;QAGA,MAAMvI,KAAK,GAAG,CAAC;YACd,QAAQ;YACR,KAAK;YACL,QAAQ;gBACPmI;gBACA,KAAK;gBACL,OAAO;gBACP,OAAO;gBACP,OAAO;gBACP,MAAM;gBACN,WAAW;gBACX,mBAAmB;gBACnB,YAAY;gBACZ,aAAa;gBACb,OAAOlL,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;gBACH,MAAM;YACP;QACD;QAGA,MAAMqD,eAAe,OAAOE;YAC3B,MAAMgI,cAA2D,EAAE;YAGnE,MAAMC,cAAc,MAAM7O,QAAQ,GAAG,CACpC4G,OAAO,GAAG,CAAC,CAAC1B;gBACX,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;gBACpC,OAAO8B,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;YACnD;YAGD,IAAK,IAAIpJ,QAAQ,GAAGA,QAAQmJ,OAAO,MAAM,EAAEnJ,QAAS;gBACnD,MAAMsJ,QAAQ8H,WAAW,CAACpR,MAAM;gBAChC,MAAMqR,YAAYvO,aAAawG;gBAE/B,MAAME,WAAW,IAAIC,CAAAA,4BAAAA;gBACrBD,SAAS,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAExJ,QAAQ,GAAG;gBAC5CwJ,SAAS,MAAM,CAAC,QAAQ6H,UAAU,IAAI;gBACtC7H,SAAS,MAAM,CAAC,QAAQ6H,UAAU,IAAI;gBACtC7H,SAAS,MAAM,CAAC,oBAAoB6H,UAAU,gBAAgB;gBAC9D7H,SAAS,MAAM,CAAC,QAAQ6H,UAAU,IAAI;gBACtC7H,SAAS,MAAM,CAAC,QAAQnG,2BAAAA,gBAAmB,CAACiG;gBAE5C,MAAMhH,WAAW,MAAMqG,KAAK,GAAG,CAA0B;oBACxD,QAAQ;oBACR,KAAK,CAAC,wGAAwG,EAAE/C,OAAO,KAAK,CAAC,WAAW,CAAC;oBACzI,MAAM4D;oBACN,iBAAiB;gBAClB;gBAEA2H,YAAY,IAAI,CAAC7O;YAClB;YAEA,OAAO6O;QACR;QAEA,MAAMxH,sBAAsBxF,cAAcyB,OAAO,OAAO;QACxD,MAAMgE,sBAAsB,MAAMX,aAAaU;QAE/C,MAAME,UAAUnF,cAAckB,OAAO,OAAO,EAAE,CAACR;YAC9C,IAAIA,IAAI,OAAO,CAAC,GAAG,EAAE;gBACpB,MAAM0E,MAAMH,oBAAoB,SAAS,CAAC,CAACf,KAAOA,OAAOxD,IAAI,OAAO,CAAC,GAAG;gBACxEA,IAAI,OAAO,CAAC,GAAG,GAAGwE,mBAAmB,CAACE,IAAI,CAAC,OAAO;gBAClD1E,IAAI,OAAO,CAAC,KAAK,GAAG;gBACpBA,IAAI,OAAO,CAAC,KAAK,GAAG;YACrB;YACA,OAAOA;QACR;QAGA,MAAMuI,WAAW,MAAM1E,aAAa;YAACrD,OAAO,WAAW,CAAC,OAAO;SAAC;QAGhE,IAAI0L,eAAe;QAEnB,IAAI1L,OAAO,WAAW,EAAE,eAAeA,OAAO,WAAW,EAAE,aAAa;YACvE,MAAM2L,gBAAgB3L,OAAO,WAAW,CAAC,WAAW;YAEpD,IAAI2L,iBAAiBA,cAAc,MAAM,GAAG,GAAG;gBAC9C,MAAMC,aAAa,EAAE;gBAErB,MAAMC,kBAAkB;oBACvB,UAAU;oBACV,OAAO;oBACP,QAAQ;oBACR,SAAS;oBACT,UAAU;oBACV,QAAQ;oBACR,YAAY;oBACZ,iBAAiB;oBACjB,YAAY;gBACb;gBAEA,KAAK,MAAMC,SAASH,cAAe;oBAClC,MAAMI,eAAe,MAAMhJ,KAAK,GAAG,CAAyC;wBAC3E,QAAQ;wBACR,KAAK;wBACL,QAAQ;4BACP,QAAQ;wBACT;wBACA,MAAMmE,uBAAkB;4BACvB,MAAM;4BACN,GAAG;4BACH,MAAM;4BACN,OAAOlH,OAAO,KAAK;4BACnB,QAAQpI,KAAK,MAAM,GAAG,QAAQ;4BAC9B,UAAUkU;wBACX;wBACA,iBAAiB;oBAClB;oBAEA,KAAGC,CAAAA,aAAa,WAAW,CAAC,MAAM,GAAC,IASlC,OAAO;wBAAE,MAAM;wBAAK,SAAS,CAAC,MAAM,EAAED,MAAM,gBAAgB,CAAC;wBAAE,MAAM;oBAAG;oBATpC;wBACpC,IAAIE,mBAAmBD,aAAa,WAAW,CAAC,EAAE;wBAClDF,gBAAgB,QAAQ,GAAGG,iBAAiB,QAAQ;wBACpDH,gBAAgB,MAAM,GAAGG,iBAAiB,MAAM;wBAChDH,gBAAgB,MAAM,GAAGG,iBAAiB,OAAO;wBACjDH,gBAAgB,QAAQ,GAAGG,iBAAiB,QAAQ;wBACpDH,gBAAgB,OAAO,GAAGG,iBAAiB,OAAO;wBAClDJ,WAAW,IAAI,CAAC;4BAAE,GAAGC,eAAe;wBAAC;oBACtC;gBAGD;gBACAH,eAAeE,WAAW,MAAM,GAAG,IAAIhM,KAAK,SAAS,CAAC;oBAAE,YAAegM;gBAAW,KAAK;YACxF;QACD;QAGA,IAAIK,WAAW;QACf,IAAIC,WAAW;QACf,IAAIlM,OAAO,WAAW,CAAC,WAAW,IAAIA,OAAO,WAAW,CAAC,cAAc,EAAC;YACvE,eAAemM;gBACd,MAAMrI,MAAM,MAAMf,KAAK,GAAG,CAAC;oBACzB,QAAQ;oBACR,KAAK;oBACL,QAAQ;wBACT,QAAQ;wBACRmI;wBACA,OAAOlL,OAAO,KAAK;wBACnB,MAAM;wBACN,GAAG;wBACH,MAAM;oBACL;gBACF;gBAEA,OAAO8D,IAAI,QAAQ,CAAC,UAAU,IAAI,EAAE;YACnC;YAEA,eAAesI;gBAChB,MAAMtI,MAAM,MAAMf,KAAK,GAAG,CAAC;oBAC1B,QAAQ;oBACR,KAAK;oBACL,QAAQ;wBACR,QAAQ;wBACRmI;wBACA,OAAOlL,OAAO,KAAK;wBACnB,MAAM;wBACN,GAAG;wBACH,MAAM;oBACN;gBACD;gBAEA,OAAO8D,IAAI,WAAW;YACvB;YAGA,IAAK,IAAIuI,SAASrM,OAAO,WAAW,CAAC,cAAc,CAClD,IAAIqM,AAAU,aAAVA,OAAmB;gBAEtB,IAAK,AAAiC,KAAjC,OAAMF,eAAc,EAAG,MAAM,EAAM;oBAEvC,MAAMG,aAAa,MAAMvJ,KAAK,GAAG,CAAC;wBACjC,QAAQ;wBACR,KAAK;wBACL,QAAQ;4BACP,QAAQ;4BACR,QAAQnL,KAAK,MAAM,GAAG,QAAQ;4BAC9BsT;4BACA,OAAOlL,OAAO,KAAK;4BACnB,MAAM;4BACN,GAAG;4BACH,MAAM;wBACP;wBACA,iBAAiB4K;oBAClB;oBAEA,MAAM2B,eAAeC,OAAO,IAAI,CAACF,WAAW,aAAa,EAAE;oBAC3D,MAAMG,iBAAiBpP,6BAAAA,IAAS,CAACyF,cAAc;oBAC/CrF,2BAAAA,aAAgB,CAACgP,gBAAgB,IAAIC,WAAWH;oBAEhDvM,OAAO,kBAAkB,GAAGyM;oBAE5B,MAAME,UAAUL,WAAW,OAAO;oBAElC,IAAI1R,OAAO;oBAEX,IAAK,IAAIrC,IAAI,GAAGA,IAAImS,mBAAmBnS,IAAK;wBAC3C,MAAMqU,AAAAA,IAAAA,sBAAAA,KAAAA,AAAAA,EAAM;wBAEZ,MAAMC,kBAAkB,MAAM9J,KAAK,GAAG,CAA6B;4BAClE,QAAQ;4BACR,KAAK;4BACL,QAAQ;gCACP,QAAQ;gCACR,SAAS4J;gCACTzB;gCACA,MAAM;gCACN,GAAG;gCACH,MAAM;gCACN,OAAOlL,OAAO,KAAK;gCACnB,UAAUqL,KAAK,GAAG;4BACnB;wBACD;wBAEAzQ,OAAOiS,gBAAgB,aAAa;wBAEpC,IAAKjS,AAAQ,KAARA,QAAc,OAAMuR,eAAc,EAAG,MAAM,GAAG,GAClD;wBAGD,IAAI5T,MAAMmS,oBAAoB,GAC7B,OAAO;4BAAE,MAAM;4BAAK,SAAS;4BAAiB,MAAM;wBAAG;oBAEzD;gBAED;gBAGA,IAAIoC,UAAU,MAAMX;gBACpB,KAAK,IAAIY,gBAAgBD,QACxB,IAAIC,aAAa,QAAQ,KAAK/M,OAAO,WAAW,CAAC,cAAc,CAACqM,MAAM,EACrEJ,WAAWc,aAAa,QAAQ;gBAGlC,IAAI,CAACd,UAEJ,OAAO;oBAAE,MAAM;oBAAK,SAAS;oBAA6B,MAAM;gBAAG;gBAGpE,IAAIjM,OAAO,WAAW,EAAE,cAAa;oBAEpC,IAAIgN,aAAa,MAAMZ;oBAEvB,IAAIa,WAAWD,WAAW,IAAI,CAC7BE,CAAAA,SAAUA,OAAO,IAAI,KAAKlN,OAAO,WAAW,CAAC,YAAY,GACvD,YAAY;oBAEf,IAAIgN,AAAqB,KAArBA,WAAW,MAAM,IAAUC,UAkB9Bf,WAAWe;yBAjBX,MAAMlK,KAAK,GAAG,CAAC;wBACd,QAAQ;wBACR,KAAK;wBACL,QAAQ;4BACL,QAAQ;wBACX;wBACA,MAAMmE,uBAAkB;4BACvB,MAAM;4BACNgE;4BACA,OAAOlL,OAAO,KAAK;4BACnB,MAAM;4BACN,GAAG;4BACH,MAAM;4BACN,MAAMA,OAAO,WAAW,CAAC,YAAY;wBACrC;oBACF;oBAKD,IAAI,CAACiN,UAAU;wBACd,KAAK,IAAIE,eAAgB,OAAMf,eAAc,EAC5CF,WAAa,OAAME,eAAc,EAAG,IAAI,CACvCc,CAAAA,SAAUA,OAAO,IAAI,KAAKlN,OAAO,WAAW,CAAC,YAAY,GACvD;wBAEJ,IAAI,CAACkM,UACJ,OAAO;4BAAC,MAAK;4BAAK,SAAQ;4BAAkB,MAAK;wBAAE;oBAErD;gBAED;YAED;QAKF;QAEA,MAAMkB,oBAAqB,AAAC;YAC3B,MAAMC,iBAAiB;gBACtB,oBAAoB;gBACpB,wBAAwB;gBACxB,6BAA6B;gBAC7B,aAAa;gBACb,qBAAqB;gBACrB,mBAAmB;gBACnB,eAAe;YAChB;YAEA,MAAMC,OAAOtN,QAAQ,aAAa,eAAe,QAAQ;YACzD,IAAIsN,AAAS,aAATA,MAAmB;gBACtB,MAAMC,OAAOvN,QAAQ,aAAa,eAAe;gBACjD,IAAI,CAACuN,QAAQ,CAACA,KAAK,OAAO,IAAI,CAACA,KAAK,KAAK,IAAIA,AAAsB,QAAtBA,KAAK,aAAa,IAAYA,AAAoB,QAApBA,KAAK,WAAW,EAAU,OAAO;gBAE5G,MAAMC,cAAc1C,WAAW,CAACyC,KAAK,OAAO,CAAC;gBAC7C,MAAME,YAAY3C,WAAW,CAACyC,KAAK,KAAK,CAAC,GAAG;gBAG5CF,eAAe,kBAAkB,GAAG;gBACpC,OAAQG;oBACP,KAAK;wBACJH,eAAe,sBAAsB,GAAG;wBACxCA,eAAe,2BAA2B,GAAG;wBAC7C;oBACD,KAAK;wBACJA,eAAe,sBAAsB,GAAG;wBACxCA,eAAe,2BAA2B,GAAG;wBAC7C;oBACD,KAAK;wBACJA,eAAe,sBAAsB,GAAG;wBACxCA,eAAe,2BAA2B,GAAG;wBAC7C;gBACF;gBAGAA,eAAe,WAAW,GAAGI;gBAG7BJ,eAAe,mBAAmB,GAAGE,KAAK,aAAa,GAAGzC,WAAW,CAACyC,KAAK,OAAO,CAAC,GAAG;gBACtFF,eAAe,iBAAiB,GAAGE,KAAK,WAAW,GAAIzC,WAAW,CAACyC,KAAK,KAAK,CAAC,GAAG;gBAEjF,OAAOF;YACR;YAEA,IAAIC,AAAS,cAATA,MACHD,eAAe,aAAa,GAAG;YAKhC,OAAOA;QACR;QAEA,IAAI,CAACD,mBAAmB,OAAO;YAAE,MAAM;YAAK,SAAS;YAAqB,MAAM;QAAG;QAInF,MAAMM,YAAY;YACjB,MAAM;YACN,GAAG;YACH,MAAM;YACN,OAAO;YACP,cAAc;YACd,OAAO;YACP,YAAY;YACZ,kBAAkB;YAClB,kBAAkB;YAClB,kBAAkB;YAClB,WAAW;YACX,aAAazB,WAAW,IAAI;YAC5B,kBAAkB;YAClB,qBAAqB;YACrB,WAAWA,WAAWA,WAAW;YACjC,kBAAkB;YAClB,yBAAyB;YACzB,oBAAoBmB,kBAAkB,kBAAkB;YACxD,wBAAwBA,kBAAkB,sBAAsB;YAChE,6BAA6BA,kBAAkB,2BAA2B;YAC1E,aAAaA,kBAAkB,WAAW;YAC1C,qBAAqBA,kBAAkB,mBAAmB;YAC1D,mBAAmBA,kBAAkB,iBAAiB;YACtD,kBAAiBpN,OAAO,WAAW,EAAE,eAAckM,WAAWA,WAAW,IAAI;YAC7E,sBAAsB;YACtB,UAAU;YACV,eAAe;YAEf,OAAOlM,OAAO,KAAK;YACnB,UAAUA,OAAO,QAAQ,IAAI;YAC7B,QAAQA,OAAO,KAAK;YACpB,SAASA,QAAQ,aAAa,YAAY;YAC1C,SAASA,QAAQ,aAAa,cAAc;YAC5C,UAAUiE,WAAW;YACrB,YAAYjE,QAAQ,aAAa,kBAAkB;YACnD,UAAU+H,QAAQ,CAAC,EAAE,CAAC,OAAO,IAAI;YACjC,iBAAiB/H,QAAQ,aAAa,cAAa,IAAI;YACvD,gBAAgBA,QAAQ,aAAa,cAAa,IAAI;YACtD,uBAAuBA,QAAQ,aAAa,cAAa,IAAI;YAC7D,iBAAiBA,QAAQ,aAAa,cAAa0L,eAAc;YACjE,eAAe0B,kBAAkB,aAAa;YAC9C,qBAAqBpN,QAAQ,aAAa,iBAAiB,IAAI;YAC/D,oBAAoBA,QAAQ,aAAa,sBAAsB,IAAI;YACnE,oBAAoBA,QAAQ,aAAa,kBAAkB,CAAC,EAAE,IAAI;YAElE,gBAAgB;YAChB,aAAa;QACd;QAEA,MAAM,EAAE2N,QAAQ,EAAE,GAAG,MAAM5K,KAAK,GAAG,CAAuB;YACzD,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,OAAO/C,OAAO,KAAK;gBACnB,GAAG;gBACH,KAAK;gBACL,MAAM;gBACN,MAAM;YACP;YACA,MAAMkH,uBAAkBwG;YACxB,iBAAiB;QAClB;QAGA,IAAI1N,AAAoB,YAApBA,OAAO,QAAQ,EAClB,OAAO;YAAE,MAAM;YAAG,MAAM2N;YAAU,SAAS;QAAe;QAG3D,MAAMC,eAAe,IACb7K,KAAK,GAAG,CAA8E;gBAC5F,QAAQ;gBACR,KAAK;gBACL,QAAQ;oBACP,OAAO/C,OAAO,KAAK;oBACnB,MAAM;oBACN,GAAG;oBACH,MAAM;oBACN,kBAAkB2N;oBAClBzC;oBACA,QAAQtT,KAAK,MAAM,GAAG,QAAQ;gBAC/B;gBACA,iBAAiB;YAClB;QAID,IAAIiW,cAAc,MAAMD;QAExB,IAAIC,YAAY,SAAS,EAAE,QAAQ,QAAQ;YAC1C9N,KAAK,MAAM,CAAC,IAAI,CAAC;YACjB,MAAMgD,KAAK,GAAG,CAAC;gBACd,QAAQ;gBACR,KAAK;gBACL,QAAQ;oBACP,KAAK;oBACL,MAAM;oBACN,OAAO/C,OAAO,KAAK;gBACpB;gBACA,MAAMkH,uBAAkB;oBACvB,OAAOlH,OAAO,KAAK;oBACnB,MAAM;oBACN,GAAG;oBACH,MAAM;oBACNkL;oBACA,QAAQtT,KAAK,MAAM,GAAG,QAAQ;oBAC9B,UAAU;gBACX;YACD;YACAiW,cAAc,MAAMD;QACrB;QAGA,MAAM,EAAEE,aAAa,EAAEC,oBAAoB,EAAE,EAAE,GAAGF;QAGlD,IAAI7N,OAAO,QAAQ,EAAE;YACpB,MAAMgO,cAAcD,kBAAkB,IAAI,CAAC,CAAC/K,KAAOA,GAAG,UAAU,KAAK2H,UAAU,MAAM;YACrF,IAAI,CAACqD,aAAa,eAAe,CAAC,EAAE,EAAE,OACrC,OAAO;gBAAE,MAAM;gBAAK,SAAS;gBAAmB,MAAM;YAAG;QAE3D;QAGA,IAAI,CAAChO,OAAO,QAAQ,EACnB,MAAM+C,KAAK,GAAG,CAAC;YACd,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,GAAG;gBACH,WAAW;gBACX,yBAAyB;gBACzB,OAAO/C,OAAO,KAAK;gBACnB,MAAM;YACP;YACA,MAAMkH,uBAAkB;gBACvB,UAAUyG;gBACVzC;gBACA,OAAOlL,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;gBACH,MAAM;YACP;QACD;QAID,MAAM+C,KAAK,GAAG,CAAC;YACd,QAAQ;YACR,KAAK;YACL,MAAMmE,uBAAkB;gBACvB,OAAOyG;gBACPzC;gBACA,OAAOlL,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;gBACH,MAAM;gBACN,QAAQpI,KAAK,MAAM,GAAG,QAAQ;YAC/B;QACD;QAEA,MAAMqW,oBAAoB;YACzB,OAAOjO,OAAO,KAAK;YACnB,MAAM;YACN,GAAG;YACH,MAAM;YACN,QAAQpI,KAAK,MAAM,GAAG,QAAQ;YAC9BsT;YACA,aAAa;YACb,MAAM;YACN,UAAUyC;QACX;QACA,IAAK,IAAIpV,IAAI,GAAGA,IAAI,IAAIA,IAAK;YAC5B,MAAMqU,AAAAA,IAAAA,sBAAAA,KAAAA,AAAAA,EAAM;YACZ,MAAMsB,WAAW;gBAAE,GAAGD,iBAAiB;gBAAE,aAAa1V,AAAM,MAANA,IAAU,IAAI;YAAE;YACtE,MAAM4V,wBAAwB,MAAMnD,mBAAwDjI,MAAM/C,QAAQkO;YAC1G,IAAIC,sBAAsB,sBAAsB,EAC/C;QAEF;QAEA,MAAMvB,AAAAA,IAAAA,sBAAAA,KAAAA,AAAAA,EAAM;QAEZ,MAAM7J,KAAK,GAAG,CAAC;YACd,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,QAAQ;gBACR,OAAO/C,OAAO,KAAK;gBACnB,MAAM;YACP;YACA,MAAMkH,uBAAkB;gBACvB,WAAWyG;gBACXzC;gBACA,OAAOlL,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;gBACH,MAAM;gBACN,yBAAyBA,OAAO,QAAQ,GAAG,IAAI;gBAC/C,WAAW;gBACX,QAAQpI,KAAK,MAAM,GAAG,QAAQ;YAC/B;QACD;QAEA,MAAMgV,AAAAA,IAAAA,sBAAAA,KAAAA,AAAAA,EAAM;QAEZ,MAAM7J,KAAK,GAAG,CAAC;YACd,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,QAAQ;YACT;YACA,MAAMmE,uBAAkB;gBACvB,UAAUyG;gBACV,gBAAgB;gBAChBzC;gBACA,OAAOlL,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;gBACH,MAAM;gBACN,QAAQpI,KAAK,MAAM,GAAG,QAAQ;YAC/B;QACD;QAEA,MAAMgV,AAAAA,IAAAA,sBAAAA,KAAAA,AAAAA,EAAM;QAGZ,MAAMwB,kBAAkB,MAAMrL,KAAK,GAAG,CAA4C;YACjF,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,OAAO/C,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;YACJ;YACA,MAAMkH,uBAAkB;gBACvB,OAAOlH,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;gBACH,MAAM;gBACN,QAAQ;gBACRkL;gBACA,QAAQtT,KAAK,MAAM,GAAG,QAAQ;YAC/B;YACA,iBAAiBgT;QAClB;QAEA,MAAMgC,AAAAA,IAAAA,sBAAAA,KAAAA,AAAAA,EAAM;QAGZ,MAAMyB,gBAAgB,MAAMtL,KAAK,GAAG,CAAwC;YAC3E,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,OAAO/C,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;YACJ;YACA,MAAMkH,uBAAkB;gBACvB,OAAOlH,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;gBACH,MAAM;gBACN,OAAO;gBACP,YAAY;gBACZ,MAAM;gBACN,QAAQoO,gBAAgB,MAAM;gBAC9BlD;gBACA,QAAQtT,KAAK,MAAM,GAAG,QAAQ;YAC/B;YACA,iBAAiBgT;QAClB;QACA,MAAMgC,AAAAA,IAAAA,sBAAAA,KAAAA,AAAAA,EAAM;QAEZ,IAAIyB,AAA8B,MAA9BA,cAAc,WAAW,EAC5B,OAAO;YAAE,MAAM;YAAK,SAASzD;YAA0B,MAAM;QAAG;QAEjE,MAAM0D,OAAOD,cAAc,IAAI;QAC/B,MAAMzB,AAAAA,IAAAA,sBAAAA,KAAAA,AAAAA,EAAM;QAGZ,MAAM2B,eAAe,MAAMxL,KAAK,GAAG,CAAC;YACnC,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,QAAQ;gBACR,MAAM;gBACN,cAAc;gBACd,QAAQqL,gBAAgB,MAAM;gBAC9BE;gBACA,OAAOR;gBACP,GAAI9N,OAAO,QAAQ,GAAG,CAAC,IAAI;oBAAE,cAAc;gBAAE,CAAC;YAC/C;YACA,iBAAiB4K;YACjB,cAAc;QACf;QAEA,MAAM4D,eAAehC,OAAO,IAAI,CAAC+B;QACjC,MAAME,iBAAiBpR,6BAAAA,IAAS,CAACyF,cAAc;QAC/CrF,2BAAAA,aAAgB,CAACgR,gBAAgB,IAAI/B,WAAW8B;QAEhDxO,OAAO,kBAAkB,GAAGyO;QAG5B,IAAI7T,OAAO;QACX,IAAK,IAAIrC,IAAI,GAAGA,IAAImS,mBAAmBnS,IAAK;YAC3C,MAAMqU,AAAAA,IAAAA,sBAAAA,KAAAA,AAAAA,EAAM;YAEZ,MAAMC,kBAAkB,MAAM9J,KAAK,GAAG,CAAoC;gBACzE,QAAQ;gBACR,KAAK;gBACL,QAAQ;oBACP,OAAO/C,OAAO,KAAK;oBACnB,MAAM;oBACN,UAAUqL,KAAK,GAAG;gBACnB;gBACA,MAAMnE,uBAAkB;oBACvB,OAAOlH,OAAO,KAAK;oBACnB,MAAM;oBACN,GAAG;oBACH,MAAM;oBACNsO;oBACA,QAAQ;oBACR,MAAM;oBACNpD;oBACA,QAAQtT,KAAK,MAAM,GAAG,QAAQ;gBAC/B;YACD;YAEA,IAAIiV,AAA4B,QAA5BA,gBAAgB,OAAO,IAAYA,gBAAgB,IAAI,EAAE;gBAC5DjS,OAAOiS,gBAAgB,IAAI;gBAC3B;YACD;YAEA,IAAItU,MAAMmS,oBAAoB,GAC7B,OAAO;gBAAE,MAAM;gBAAK,SAAS;gBAAiB,MAAM;YAAG;QAEzD;QAGA,IAAI,CAAC1K,OAAO,QAAQ,EACnB,MAAM+C,KAAK,GAAG,CAAC;YACd,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,OAAO/C,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;YACJ;YACA,MAAMkH,uBAAkB;gBACvB,OAAOlH,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;gBACH,MAAM;gBACNkL;gBACA,QAAQtT,KAAK,MAAM,GAAG,QAAQ;gBAC9B,QAAQ;gBACR0W;YACD;QACD;QAID,MAAMvL,KAAK,GAAG,CAAoC;YACjD,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,GAAG;gBACH,OAAO/C,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAIA,OAAO,QAAQ,GAAG,CAAC,IAAI;oBAAE,yBAAyB;gBAAE,CAAC;YAC1D;YACA,MAAMkH,uBAAkB;gBACvB,OAAOlH,OAAO,KAAK;gBACnB,MAAM;gBACN,GAAG;gBACH,MAAM;gBACNkL;gBACA,QAAQtT,KAAK,MAAM,GAAG,QAAQ;gBAC9B,KAAK;gBACLgD;gBACA,cAAc;gBACd,iBAAiB;gBACjB,MAAM;gBACN,SAAS;gBACT,KAAK;gBACL,SAAS;gBACT,UAAU;gBACV,MAAM;gBACN,WAAW;gBACX,MAAM;gBACN,YAAY;gBACZ,aAAa;gBACbkT;gBACA,QAAQY,AAAAA,IAAAA,sBAAAA,YAAAA,AAAAA,EAAa;gBACrB,UAAU,IAAIrD,OAAO,OAAO,KAAKF,AAAmB,MAAnBA;gBACjC,cAAc;gBACd,eAAenL,OAAO,QAAQ,GAAG,UAAU;gBAC3C,UAAU2N;gBACV,SAAS;gBACT,aAAa;gBACb,YAAY;gBACZ,UAAU;YACX;YACA,iBAAiB3N,OAAO,QAAQ,GAAG,yBAAyB;QAC7D;QAEA,OAAO+E,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ4I,UAAU;IAC1B;ICl2BA,MAAMgB,0BAA0BjE,OAAAA;IAEzB,MAAM1F,8BAA2B,OAAOjF,MAAMC;QACpD,MAAM8C,eAAe/C,KAAK,UAAU;QAEpC,MAAMkF,gBAAmC;YACxC,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,KAAK;YACL,UAAU;QACX;QAEA,MAAM2J,YAAY;YACjB,QAAQ;YACR,MAAM;YACN,OAAO5O,OAAO,KAAK;YACnB,MAAM;YACN,WAAWqL,KAAK,GAAG;YACnB,UAAUrL,OAAO,QAAQ;QAC1B;QAEA,IAAIA,OAAO,WAAW,EAAE,gBAAe;YACtC,MAAM6O,kBAAkB;gBACvB,QAAQ;gBACR,OAAO7O,OAAO,KAAK;gBACnB,MAAM;YACP;YACA,MAAM8O,eAAe,MAAM/O,KAAK,UAAU,CAAC;gBAC1C,MAAMA,KAAK,KAAK;gBAChB,KACCC,OAAO,GAAG,IACV,CAAC,kDAAkD,EAAEpD,OAAO,OAAO,CAACiS,iBAClE,GAAG,CAAC,CAAC7L,KAAOA,GAAG,IAAI,CAAC,MACpB,IAAI,CAAC,MAAM;gBACd,SAAShD,OAAO,OAAO,EAAE,IAAI,CAACgD,KAAQ;wBAAE,GAAGiC,aAAa;wBAAE,GAAGjC,EAAE;oBAAC,OAAO,EAAE;YAC1E;YAEA,MAAM+L,cAAcD,aAAa,OAAO,CAAC;YACzC,MAAME,gBAAgBD,YAAY,OAAO,CAAC,2CAA2C,MAAM,CAAC;gBAAC,SAAS/O,OAAO,WAAW,CAAC,cAAc,CAAC,MAAM;YAAA,GAAG,KAAK;YACtJ,IAAG,MAAMgP,iBAAiB,GAAE;gBAC3B,MAAMD,YAAY,OAAO,CAAC,iCAAiC,KAAK;gBAChE,IAAI;oBACH,IAAI;wBACH,MAAMD,aAAa,eAAe,CAAC,kBAAkB;4BAAE,OAAO;4BAAW,SAAS;wBAAM;wBACxF,MAAMG,YAAY,MAAMF,YAAY,OAAO,CAAC,kBAAkB,YAAY,CAAC;wBAE3E,IAAIE,WAAW;4BACd,MAAM1C,eAAeC,OAAO,IAAI,CAACyC,UAAU,OAAO,CAAC,4BAA4B,KAAK;4BACpF,MAAMxC,iBAAiBpP,6BAAAA,IAAS,CAACyF,cAAc;4BAC/CrF,2BAAAA,aAAgB,CAACgP,gBAAgB,IAAIC,WAAWH;4BAEhDvM,OAAO,kBAAkB,GAAGyM;wBAC7B;oBAID,EAAE,OAAOnQ,OAAO;wBACf,MAAM,IAAIqD,MAAM;oBACjB;oBAEA,IAAK,IAAIpH,IAAI,GAAGA,IAAImS,mBAAmBnS,IAAK;wBAC3C,MAAMoE,QAAQ,GAAG,CAAC;4BACjBmS,aAAa,MAAM;4BACnBA,aAAa,gBAAgB,CAAC;yBAC9B;wBAGD,IAAI;4BACH,MAAMA,aAAa,eAAe,CAAC,CAAC,kDAAkD,EAAE9O,OAAO,WAAW,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,EAAE;gCAAE,SAAS;4BAAK;4BACvJ;wBACD,EAAE,OAAO1D,OAAO,CAAC;wBAEjB,IAAI/D,MAAMmS,oBAAoB,GAAG,MAAM,IAAI/K,MAAM;oBAClD;gBAED,EAAE,OAAOrD,OAAO;oBACf,IAAI4S,eAAe;oBACnB,IAAI5S,iBAAiBqD,OACpBuP,eAAe5S,MAAM,OAAO;yBACtB,IAAI,AAAiB,YAAjB,OAAOA,OACjB4S,eAAe5S;oBAEhB,MAAMwS,aAAa,KAAK;oBACxB,OAAO;wBAAE,MAAM;wBAAK,SAASI;wBAAe,MAAM;oBAAG;gBACtD;YACD;YAEA,IAAGlP,OAAO,WAAW,CAAC,YAAY,EAAC;gBAClC,MAAM8O,aAAa,OAAO,CAAC,iDAAiD,KAAK;gBACjF,MAAMA,aAAa,gBAAgB,CAAC;gBAEpC,MAAMK,YAAYJ,YAAY,OAAO,CAAC,4DAA4D,MAAM,CAAC;oBAAC,SAAS,IAAIK,OAAO,CAAC,CAAC,EAAEpP,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;gBAAE,GAAG,KAAK;gBAE9K,IAAG,MAAMmP,aAAa,GAAE;oBACvB,MAAMJ,YAAY,OAAO,CAAC,8BAA8B,IAAI,CAAC/O,OAAO,WAAW,CAAC,YAAY;oBAC5F,MAAM+O,YAAY,OAAO,CAAC,8BAA8B,KAAK;oBAC7D,MAAMA,YAAY,OAAO,CAAC,8DAA8D,KAAK;gBAC9F;YACD;YACA,MAAMD,aAAa,KAAK;QAEzB;QAEA,MAAM3O,OAAO,MAAMJ,KAAK,UAAU,CAAC;YAClC,MAAMA,KAAK,KAAK;YAChB,KACCC,OAAO,GAAG,IACV,CAAC,wCAAwC,EAAEpD,OAAO,OAAO,CAACgS,WACxD,GAAG,CAAC,CAAC5L,KAAOA,GAAG,IAAI,CAAC,MACpB,IAAI,CAAC,MAAM;YACd,SAAShD,OAAO,OAAO,EAAE,IAAI,CAACgD,KAAQ;oBAAE,GAAGiC,aAAa;oBAAE,GAAGjC,EAAE;gBAAC,OAAO,EAAE;QAC1E;QAGA,IAAI;YACH,MAAM7C,KAAK,eAAe,CAAC,sBAAsB;gBAAE,OAAO;YAAU;QACrE,EAAE,OAAO7D,OAAO;YACf,OAAO;gBAAE,MAAM;gBAAK,SAAS;gBAAQ,MAAM6D,KAAK,GAAG;YAAG;QACvD;QAGA,MAAMA,KAAK,eAAe,CAAC,kBAAkB;YAAE,OAAO;QAAU;QAEhEa,cAAcb,MAAK,oDAAmD,MAAM,qFAC5E;YACC,eAAe;YACf,gBAAgB;QACjB;QAGA,MAAM+E,gBAAgB/E,KAAK,OAAO,CAAC;QACnC,MAAM+E,cAAc,KAAK;QACzB,MAAMA,cAAc,IAAI,CAAClF,OAAO,KAAK;QAGrC,IAAIA,OAAO,WAAW,CAAC,QAAQ,EAAE;YAChC,MAAMkF,gBAAgB/E,KAAK,OAAO,CAAC;YACnC,MAAM+E,cAAc,KAAK;YACzB,MAAMA,cAAc,IAAI,CAAClF,OAAO,WAAW,CAAC,QAAQ;QACrD;QAGA,MAAME,oBAAoBC,MAAMH,OAAO,OAAO;QAE9C,MAAMG,KAAK,KAAK,CAAC;QAEjB,MAAMA,KAAK,QAAQ,CAAC,KAAK,CAAC;QAG1B,MAAMA,KAAK,OAAO,CAAC,yBAAyB,QAAQ,CAAC,CAACjB,OAASA,KAAK,cAAc;QAGlF,IAAIc,OAAO,WAAW,CAAC,UAAU,EAAE;YAClC,MAAMkF,gBAAgB/E,KAAK,OAAO,CAAC;YACnC,MAAM+E,cAAc,KAAK;YACzB,MAAMA,cAAc,IAAI,CAAClF,OAAO,WAAW,CAAC,UAAU;QACvD;QAGA,IAAIA,OAAO,WAAW,CAAC,OAAO,EAAE;YAC/B,MAAMwD,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmBzD,OAAO,WAAW,CAAC,OAAO;YAC9D,MAAMqP,QAAQ,MAAM1L,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc3D,OAAO,WAAW,CAAC,OAAO,EAAE3C,6BAAAA,IAAS,CAACyF,cAAcU;YAGtF,MAAMrD,KAAK,OAAO,CAAC,2DAA2D,KAAK;YACnF,MAAMA,KACJ,OAAO,CAAC,mGACR,MAAM,CAAC;gBAAE,SAAS;YAAS,GAC3B,KAAK;YAIP,MAAMA,KAAK,eAAe,CAAC,iCAAiC;gBAAE,OAAO;YAAU;YAC/E,MAAMmP,SAASnP,KAAK,OAAO,CAAC;YAE5B,MAAMmP,OAAO,OAAO,CAAC,+CAA+C,MAAM,CAAC;gBAAE,SAAS;YAAO,GAAG,KAAK;YACrG,MAAMnP,KAAK,cAAc,CAAC;YAE1B,MAAMoF,qBAAqBpF,KAAK,YAAY,CAAC;YAC7C,MAAMmP,OAAO,OAAO,CAAC,iEAAiE,KAAK;YAC3F,MAAM9J,cAAc,MAAMD;YAC1B,MAAMC,YAAY,QAAQ,CAAC;gBAAC6J;aAAM;YAGlC,MAAMlP,KAAK,eAAe,CAAC,0EAA0E;gBACpG,OAAO;YACR;YACA,MAAMA,KAAK,eAAe,CAAC,wCAAwC;gBAAE,OAAO;YAAW;YAEvF,MAAMoP,UAAUpP,KAAK,OAAO,CAAC;YAC7B,IAAG,MAAMoP,QAAQ,KAAK,KAAK,GAAG,OAAO;gBAAC,MAAM;gBAAK,SAAS,YAAW,OAAMA,QAAQ,WAAW,MAAI,WAAU;gBAAI,MAAM;YAAE;YAGxH,MAAMD,OACJ,OAAO,CAAC,8EACR,MAAM,CAAC;gBAAE,SAAS;YAAM,GACxB,KAAK;YAEP,MAAMA,OACJ,OAAO,CAAC,8CACR,MAAM,CAAC;gBAAE,SAAS;YAAK,GACvB,OAAO,CAAC;gBAAE,OAAO;YAAU;YAC7B,MAAMA,OAAO,OAAO,CAAC,8CAA8C,MAAM,CAAC;gBAAE,SAAS;YAAK,GAAG,KAAK;QACnG;QAGA,IAAGtP,OAAO,WAAW,CAAC,WAAW,EAAC;YACjC,MAAMG,KAAK,OAAO,CAAC,gBAAgB,KAAK;YAExC,MAAMqP,aAAarP,KAAK,OAAO,CAAC;YAChC,MAAMsP,gBAAgBD,WAAW,OAAO,CAAC;YACzC,MAAME,gBAAgBF,WAAW,OAAO,CAAC;YAEzC,MAAMC,cAAc,OAAO,CAAC,qCAAqC,MAAM,CAAC;gBAAC,SAAS;YAAM,GAAG,KAAK;YAEhG,IAAGzP,OAAO,WAAW,EAAE,aAEtB,KAAK,IAAI2P,WAAW3P,OAAO,WAAW,CAAC,WAAW,CAAC;gBAElD,MAAMyP,cAAc,OAAO,CAAC,gCAAgC,IAAI,CAACE;gBACjE,MAAMF,cAAc,OAAO,CAAC,cAAc,KAAK;gBAC/C,MAAMG,aAAaH,cAAc,OAAO,CAAC;gBAEzC,MAAMtP,KAAK,cAAc,CAAC;gBAE1B,IAAI,MAAMyP,WAAW,YAAY,CAAC,aAAa,2CAW9C,OAAO;oBAAE,MAAM;oBAAK,SAAS,CAAC,MAAM,EAAED,QAAQ,gBAAgB,CAAC;oBAAE,MAAM;gBAAG;gBAXc;oBAExF,MAAME,kBAAkB,MAAMD,WAAW,OAAO,CAAC,4BAA4B,WAAW,MAAME,KAAAA;oBAC9F,MAAMF,WAAW,KAAK;oBACtB,MAAMG,cAAcN,cAAc,OAAO,CAAC;oBAC1C,MAAMO,iBAAiB,MAAMD,YAAY,OAAO,CAAC,kBAAkB,MAAM,CAAC;wBAAC,SAASF;oBAAe,GAAG,KAAK;oBAE3G,IAAI,CAACG,gBACJ,OAAO;wBAAC,MAAM;wBAAM,SAAQ;wBAAgB,MAAM;oBAAE;gBAEtD;YAGD;YAKD,IAAGhQ,OAAO,WAAW,EAAE,gBAAe;gBACrC,MAAMiQ,gBAAgB,MAAMR,cAAc,OAAO,CAAC,6BAA6B,MAAM,CAAC;oBAAE,SAAS;gBAAM,GAAG,KAAK,MAAM;gBACrH,IAAG,CAACQ,eAAe,MAAMR,cAAc,OAAO,CAAC,0DAA0D,KAAK;YAC/G;YAEA,MAAMS,WAAWR,cAAc,OAAO,CAAC;YACvC,IAAI,CAAC,MAAMQ,SAAS,SAAS,IAAI,MAAMA,SAAS,KAAK;YACrD,MAAMR,cAAc,OAAO,CAAC,8CAA8C,KAAK;YAE/E,IAAI1P,OAAO,WAAW,EAAE,gBAAe;gBAEtC,MAAMG,KAAK,OAAO,CAAC,2BAA2B,KAAK;gBAEnD,MAAMgQ,iBAAiBhQ,KAAK,OAAO,CAAC;gBACpC,MAAMiQ,oBAAoBD,eAAe,OAAO,CAAC;gBACjD,MAAME,oBAAoBF,eAAe,OAAO,CAAC;gBAGjD,IAAK,IAAI9D,SAASrM,OAAO,WAAW,CAAC,cAAc,CAClD,IAAIqM,AAAU,aAAVA,OAAmB;oBACtB,IAAIiE,WAAWtQ,OAAO,WAAW,CAAC,cAAc,CAACqM,MAAM;oBAEvD,MAAM+D,kBAAkB,OAAO,CAAC,mCAAmC;wBAAE,SAAS;oBAAO,GAAG,KAAK;oBAC7F,MAAMA,kBAAkB,OAAO,CAAC,6BAA6B,IAAI,CAACE;oBAGlE,IAAGtQ,OAAO,WAAW,CAAC,YAAY,EAAE;wBACnC,MAAMuQ,wBAAwBpQ,KAAK,OAAO,CAAC;wBAC3C,MAAMqQ,aAAaD,sBAAsB,OAAO,CAAC;wBAEjD,MAAME,cAAc;wBACpB,MAAMC,UAAU;wBAChB,IAAIC,eAAe;wBAEnB,IAAK,IAAIC,UAAU,GAAGA,UAAUH,aAAaG,UAAW;4BACvD,MAAMC,aAAa,MAAML,WAAW,UAAU;4BAC9C,IAAI,CAACK,YAAW;gCACf,MAAML,WAAW,SAAS,MAAKG;gCAC/B,IAAIA,AAAgB,KAAhBA,cAAmB;4BACxB;4BAEA,IAAIC,YAAYH,cAAc,GAAG,MAAM,IAAI9Q,MAAM;4BACjD,MAAM,IAAIhD,QAAQoJ,CAAAA,UAAW+K,WAAW/K,SAAS2K;wBAClD;wBAGA,MAAMK,cAAc,MAAMR,sBAAsB,OAAO,CAAC,yDAAyD,WAAW,MAAM;wBAClI,MAAMS,kBAAkB,MAAMT,sBAAsB,OAAO,CAAC,qEAAqE,MAAM,CAAC;4BAAC,SAAS,IAAInB,OAAO,CAAC,CAAC,EAAE;gCAACpP,OAAO,WAAW,CAAC,YAAY;6BAAC,CAAC,CAAC,CAAC;wBAAC,GAAG,KAAK,MAAM;wBAEpN,IAAI,CAAC+Q,eAAe,CAACC,iBAAiB;4BACrC,MAAMT,sBAAsB,OAAO,CAAC,yDAAyD,KAAK;4BAClG,MAAMA,sBAAsB,OAAO,CAAC,qDAAqD,MAAM,CAAC;gCAAC,SAAS,IAAInB,OAAO,CAAC,CAAC,EAAE;oCAACpP,OAAO,WAAW,CAAC,YAAY;iCAAC,CAAC,CAAC,CAAC;4BAAC,GAAG,KAAK;wBACvK;oBACD,OACC,MAAMoQ,kBAAkB,OAAO,CAAC,qDAAqD,SAAS,MAAKA,kBAAkB,OAAO,CAAC,mDAAmD,OAAO;gBAGzL;gBAID,MAAMF,WAAWG,kBAAkB,OAAO,CAAC;gBAC3C,IAAI,CAAC,MAAMH,SAAS,SAAS,IAAI,MAAMA,SAAS,KAAK;gBACrD,MAAMG,kBAAkB,OAAO,CAAC,8CAA8C,KAAK;YAEpF;QAED;QAGA,IAAGrQ,OAAO,WAAW,EAAE,eAAc;YACpC,MAAMG,KAAK,OAAO,CAAC,qDAAqD,KAAK;YAC7E,MAAM8Q,wBAAwB9Q,KAAK,OAAO,CAAC;YAC3C,MAAM+Q,mBAAmBD,sBAAsB,OAAO,CAAC;YACvD,MAAME,mBAAmBF,sBAAsB,OAAO,CAAC;YAEvD,IAAGjR,AAAyC,YAAzCA,OAAO,WAAW,CAAC,aAAa,CAAC,IAAI,EAAa;gBACpD,MAAMkR,iBAAiB,OAAO,CAAC,mCAAmC;oBAAE,SAAS;gBAAK,GAAG,KAAK;gBAE1F,MAAME,eAAeF,iBAAiB,OAAO,CAAC;gBAC9C,MAAMG,aAAaH,iBAAiB,OAAO,CAAC;gBAC5C,MAAMI,mBAAmBnR,KAAK,OAAO,CAAC;gBAEtC,MAAMiR,aAAa,OAAO,CAAC,kCAAkC,KAAK;gBAClE,MAAME,iBAAiB,OAAO,CAAC,mCAAmC;oBAAE,SAAStR,OAAO,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE;gBAAQ,GAAG,KAAK;gBAEtI,IAAGA,OAAO,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,eAC3C,MAAMoR,aAAa,OAAO,CAAC,6BAA6B,KAAK;qBAE7D,MAAMA,aAAa,OAAO,CAAC,+BAA+B,SAAS,MAAKA,aAAa,OAAO,CAAC,6BAA6B,OAAO;gBAGlI,MAAMjR,KAAK,cAAc,CAAC;gBAE1B,MAAMkR,WAAW,OAAO,CAAC,kCAAkC,KAAK;gBAChE,MAAMC,iBAAiB,OAAO,CAAC,mCAAmC;oBAAE,SAAStR,OAAO,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE;gBAAM,GAAG,KAAK;gBAEpI,IAAGA,OAAO,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,aAC3C,MAAMqR,WAAW,OAAO,CAAC,6BAA6B,KAAK;qBAE3D,MAAMA,WAAW,OAAO,CAAC,+BAA+B,SAAS,MAAKA,WAAW,OAAO,CAAC,6BAA6B,OAAO;YAE/H,OAAM,IAAGrR,AAAyC,aAAzCA,OAAO,WAAW,CAAC,aAAa,CAAC,IAAI,EAC7C,MAAMkR,iBAAiB,OAAO,CAAC,mCAAmC;gBAAE,SAAS;YAAO,GAAG,KAAK;YAG7F,MAAMC,iBAAiB,OAAO,CAAC,8CAA8C,KAAK;QACnF;QAGA,IAAInR,OAAO,WAAW,CAAC,cAAc,EAAE;YACtC,MAAMG,KAAK,OAAO,CAAC,yCAAyC,KAAK;YACjE,MAAMA,KAAK,cAAc,CAAC;YAC1B,MAAMyJ,gBAAgBzJ,KAAK,OAAO,CAAC;YACnC,MAAMoR,aAAa3H,cAAc,OAAO,CAAC;YACzC,MAAM2H,WAAW,IAAI,CAACvR,OAAO,WAAW,CAAC,cAAc;YACvD,MAAM4J,cAAc,OAAO,CAAC,6BAA6B,KAAK;QAC/D;QAGA,IAAI5J,OAAO,WAAW,CAAC,gBAAgB,IAAIA,OAAO,WAAW,CAAC,gBAAgB,CAAC,MAAM,GAAG,GAAG;YAC1F,MAAMwR,SAASxR,OAAO,WAAW,CAAC,gBAAgB,CAAC,EAAE;YACrD,MAAMG,KAAK,OAAO,CAAC,0CAA0C,KAAK;YAClE,MAAMA,KAAK,cAAc,CAAC;YAC1B,MAAMyJ,gBAAgBzJ,KAAK,OAAO,CAAC;YACnC,MAAMyJ,cAAc,OAAO,CAAC,CAAC,2BAA2B,EAAE4H,OAAO,EAAE,CAAC,EAAE,KAAK;QAC5E;QAGA,IAAIxR,AAA2C,SAA3CA,OAAO,WAAW,CAAC,mBAAmB,EAAW;YACpD,MAAMG,KAAK,OAAO,CAAC,2CAA2C,KAAK;YACnE,MAAMA,KAAK,cAAc,CAAC;YAC1B,MAAMyJ,gBAAgBzJ,KAAK,OAAO,CAAC;YACnC,MAAMyJ,cAAc,OAAO,CAAC,gDAAgD,KAAK;QAClF;QAEA,MAAMzJ,KAAK,cAAc,CAAC;QAG1B,MAAM2F,YAAY,MAAM,IAAInJ,QAAgB,CAACoJ;YAE5C,MAAMC,iBAAiB,OAAOtJ;gBAC7B,MAAMmF,MAAMnF,SAAS,GAAG;gBACxB,MAAM+U,QAAQ7P,oBAAoBC;gBAClC,IAAIA,IAAI,QAAQ,CAAC,8BAA8B4P,OAAO,MAAM,iBAAiB;oBAC5E,MAAMxL,eAAe,MAAMvJ,SAAS,IAAI;oBACxCyD,KAAK,GAAG,CAAC,YAAY6F;oBACrBD,QAAQE,cAAc;gBACvB;YACD;YAGA9F,KAAK,EAAE,CAAC,YAAY6F;YAGpB7F,KAAK,OAAO,CAAC,gEAAgE,KAAK;QACnF;QAGA,MAAMA,KAAK,eAAe,CAAC,iFAAiF;YAC3G,OAAO;QACR;QACA,MAAMA,KACJ,OAAO,CAAC,uGACR,KAAK;QAGP,MAAMA,KAAK,eAAe,CAAC,gFAAgF;YAC1G,OAAO;QACR;QACA,MAAMA,KACJ,OAAO,CAAC,sGACR,KAAK;QAEP,IAAI;YACH,MAAMuR,YAAYrG,KAAK,GAAG;YAG1B,MAAM,IAAI1O,QAAc,OAAOoJ,SAAS4L;gBAEvC,MAAM3L,iBAAiB,OAAOtJ;oBAC7B,IAAIA,SAAS,GAAG,GAAG,QAAQ,CAAC,mBAAmB;wBAC9C,MAAMuJ,eAAe,MAAMvJ,SAAS,IAAI;wBACxC,IAAIuJ,AAAyB,QAAzBA,aAAa,OAAO,EAAU;4BACjCF;4BACA5F,KAAK,GAAG,CAAC,YAAY6F;wBACtB,OAAO,IAAIqF,KAAK,GAAG,KAAKqG,YAAY/C,yBAAyB;4BAC5DgD;4BACAxR,KAAK,GAAG,CAAC,YAAY6F;wBACtB;oBACD;gBACD;gBAGA7F,KAAK,EAAE,CAAC,YAAY6F;gBAGpB,MAAM7F,KAAK,eAAe,CAAC,wDAAwD;oBAClF,OAAO;gBACR;gBACA,MAAM8O,YAAY,MAAM9O,KACtB,OAAO,CAAC,wDACR,KAAK,GACL,YAAY,CAAC;gBACf,IAAI8O,WAAW;oBACd,MAAM2C,SAAS,IAAI3I,IAAIgG,WAAW9O,KAAK,GAAG,IAAI,IAAI;oBAClD,MAAMzD,WAAW,MAAMF,yBAAM;wBAC5B,QAAQ;wBACR,KAAKoV;wBACL,cAAc;oBACf;oBAEA,MAAMnD,iBAAiBpR,6BAAAA,IAAS,CAACyF,cAAc;oBAC/CrF,2BAAAA,aAAgB,CAACgR,gBAAgB/R,SAAS,IAAI;oBAC9CsD,OAAO,kBAAkB,GAAGyO;gBAC7B,OACC,MAAM,IAAI9O,MAAM;YAElB;QACD,EAAE,OAAOrD,OAAO;YACf,MAAM6D,KAAK,KAAK;YAChB,OAAO;gBAAE,MAAM;gBAAK,SAAS;gBAAmB,MAAM;YAAG;QAC1D;QAEA,MAAMA,KAAK,cAAc,CAAC;QAC1B,MAAMA,KAAK,KAAK;QAEhB,OAAO4E,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQe;IAChB;IC9aO,MAAM+L,gBAA+B,OAAO9R,MAAM+R;QACxD,MAAM9R,SAASuC,cAAcuP,SAAS;YAAE,UAAU;QAAK;QAEvD,IAAI9R,AAAsB,UAAtBA,OAAO,UAAU,EACpB,OAAOgF,4BAAUjF,MAAMC;QAGxB,IAAIA,AAAsB,cAAtBA,OAAO,UAAU,EACpB,OAAO0C,8BAAW3C,MAAMC;QAGzB,OAAOH,cAAc6C,+BAAYsC,6BAAWjF,MAAMC;IACnD;ICtCA,MAAM+R,YAAY,CACjBhP,MACA/C,QACAmH;QAEA,MAAMvD,WAAW,IAAIC,CAAAA,4BAAAA;QAErB,KAAK,MAAM,CAACzB,KAAKC,MAAM,IAAIzF,OAAO,OAAO,CAACuK,MACzCvD,SAAS,MAAM,CAACxB,KAAKC;QAGtB,OAAOU,KAAK,GAAG,CAAC;YACf,QAAQ;YACR,KAAK;YACL,QAAQ;gBACP,OAAO/C,OAAO,KAAK;gBACnB,GAAG;gBACH,KAAK;gBACL,MAAM;gBACN,MAAM;YACP;YACA,MAAM4D;QACP;IACD;IAEO,MAAMlB,kCAA4B,OAAO3C,MAAMC;QACrD,MAAM8C,eAAe/C,KAAK,UAAU;QACpC,MAAMgD,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQ2D,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAClE,QAAQ;gBACR,SAAS,CAAC,8CAA8C,EAAEhD,OAAO,KAAK,CAAC,WAAW,CAAC;YACpF;QACD;QAGA,MAAMgS,kBAAqC,EAAE;QAC7C,MAAMC,aAAqC,CAAC;QAE5C,IAAIjS,OAAO,OAAO,IAAIA,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG;YAEhD,MAAMuD,SAAS,MAAM5G,QAAQ,GAAG,CAC/BqD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC6B;gBACnB,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;gBACpC,OAAO8B,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;YACnD;YAGD,IAAK,IAAIpJ,QAAQ,GAAGA,QAAQmJ,OAAO,MAAM,EAAEnJ,QAAS;gBACnD,MAAMsJ,QAAQH,MAAM,CAACnJ,MAAM;gBAC3B,MAAMqR,YAAYvO,aAAawG;gBAE/B,MAAME,WAAW,IAAIC,CAAAA,4BAAAA;gBACrBD,SAAS,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAExJ,QAAQ,GAAG;gBAC5CwJ,SAAS,MAAM,CAAC,QAAQ6H,UAAU,IAAI;gBACtC7H,SAAS,MAAM,CAAC,QAAQ6H,UAAU,IAAI;gBACtC7H,SAAS,MAAM,CAAC,oBAAoB6H,UAAU,gBAAgB;gBAC9D7H,SAAS,MAAM,CAAC,QAAQ6H,UAAU,IAAI;gBACtC7H,SAAS,MAAM,CAAC,QAAQnG,2BAAAA,gBAAmB,CAACiG;gBAE5C,MAAMhH,WAAW,MAAMqG,KAAK,GAAG,CAAuC;oBACrE,QAAQ;oBACR,KAAK,CAAC,wGAAwG,EAAE/C,OAAO,KAAK,CAAC,WAAW,CAAC;oBACzI,MAAM4D;gBACP;gBAGA,MAAMsO,oBAAoB,MAAMnP,KAAK,GAAG,CAAgB;oBACvD,QAAQ;oBACR,KAAK;oBACL,QAAQ;wBACP,QAAQ;wBACR,QAAQrG,SAAS,OAAO;wBACxB,OAAOsD,OAAO,KAAK;wBACnB,MAAM;wBACN,GAAG;wBACH,MAAM;oBACP;gBACD;gBAEA,MAAMmS,aAAaD,kBAAkB,WAAW;gBAEhDF,gBAAgB,IAAI,CAAC;oBACpB,SAAStV,SAAS,OAAO;oBACzB,cAAc;oBACd,eAAe;oBACf,SAAS0O,OAAO1O,SAAS,OAAO;oBAChC,OAAOwV,kBAAkB,KAAK;oBAC9B,QAAQA,kBAAkB,MAAM;oBAChC,aAAa,CAAC,IAAI,EAAEC,WAAW,CAAC,CAAC,CAAC,EAAEA,WAAW,CAAC,CAAC,CAAC,EAAEA,WAAW,CAAC,CAAC,CAAC,CAAC;oBACnE,KAAKzV,SAAS,OAAO;gBACtB;gBAGA,IAAItC,AAAU,MAAVA,OAAa;oBAChB,MAAMgY,eAAe,IAAIvO,CAAAA,4BAAAA;oBACzBuO,aAAa,MAAM,CAAC,UAAU1V,SAAS,OAAO;oBAG9C,MAAM2V,aAA4B;wBACjC;4BAAC;4BAAI;yBAAE;wBACP;4BAAC;4BAAG;yBAAE;wBACN;4BAAC;4BAAG;yBAAE;qBACN;oBACDD,aAAa,MAAM,CAAC,cAAcC,WAAW,MAAM;oBACnD,MAAMC,kBAAkBD,WAAW,GAAG,CAAC,CAACpa,GAAGiM;wBAC1C,MAAMqO,iBAAiB3U,yBACtBsU,kBAAkB,KAAK,EACvBA,kBAAkB,MAAM,EACxBja;wBAEDma,aAAa,MAAM,CAAC,CAAC,IAAI,EAAElO,IAAI,GAAG,CAAC,EAAEqO,eAAe,EAAE;wBACtDH,aAAa,MAAM,CAAC,CAAC,IAAI,EAAElO,IAAI,GAAG,CAAC,EAAEqO,eAAe,EAAE;wBACtDH,aAAa,MAAM,CAAC,CAAC,IAAI,EAAElO,IAAI,GAAG,CAAC,EAAEqO,eAAe,EAAE;wBACtDH,aAAa,MAAM,CAAC,CAAC,IAAI,EAAElO,IAAI,GAAG,CAAC,EAAEqO,eAAe,EAAE;wBAEtD,OAAO;4BAAE,OAAO,GAAGta,CAAC,CAAC,EAAE,CAAC,CAAC,EAAEA,CAAC,CAAC,EAAE,EAAE;4BAAE,GAAGsa,cAAc;wBAAC;oBACtD;oBAEAH,aAAa,MAAM,CAAC,SAASpS,OAAO,KAAK;oBACzCoS,aAAa,MAAM,CAAC,QAAQ;oBAC5BA,aAAa,MAAM,CAAC,KAAK;oBACzBA,aAAa,MAAM,CAAC,QAAQ;oBAE5B,MAAMI,eAAe,MAAMzP,KAAK,GAAG,CAAiC;wBAC9D,QAAQ;wBACR,KAAK;wBACL,MAAMqP;oBACR;oBAEJH,WAAW,aAAa,GAAGvV,SAAS,OAAO;oBAC3CuV,WAAW,QAAQ,GAAGO,aAAa,MAAM,CAAC,EAAE,CAAC,MAAM;oBACnDP,WAAW,cAAc,GAAGO,aAAa,MAAM,CAAC,EAAE,CAAC,MAAM;oBACzDP,WAAW,aAAa,GAAGO,aAAa,MAAM,CAAC,EAAE,CAAC,MAAM;oBACxDP,WAAW,YAAY,GAAGO,aAAa,MAAM,CAAC,EAAE,CAAC,MAAM;oBACvDP,WAAW,YAAY,GAAGO,aAAa,MAAM,CAAC,EAAE,CAAC,MAAM;oBACvDP,WAAW,UAAU,GAAGrS,KAAK,SAAS,CAAC;wBACtC,WAAW0S,gBAAgB,GAAG,CAAC,CAACtP,IAAIkB,MAAS;gCAC5C,SAASsO,aAAa,MAAM,CAACtO,IAAI,CAAC,OAAO;gCACzC,OAAOlB,GAAG,KAAK;gCACf,IAAI;gCACJ,IAAI;gCACJ,IAAI;gCACJ,IAAI;4BACL;wBACA,mBAAmBsP,gBAAgB,GAAG,CAAC,CAACtP,IAAIkB,MAAS;gCACpD,GAAGlB,EAAE;gCACL,SAASwP,aAAa,MAAM,CAACtO,IAAI,CAAC,OAAO;4BAC1C;oBACD;gBACD;YACD;QACD;QAGA,MAAMJ,MAAM,MAAMiO,UAAUhP,MAAM/C,QAAQ;YACzC,GAAGiS,UAAU;YACb,OAAOjS,OAAO,KAAK;YACnB,MAAM;YACN,GAAG;YACH,MAAM;YACN,cAAc;YACd,QAAQA,OAAO,KAAK;YACpB,UAAUA,OAAO,OAAO;YACxB,kBAAkBJ,KAAK,SAAS,CAACoS;QAClC;QAEC,OAAOjN,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQjB;IACjB;IC7LA,MAAM2O,aAAqC;QAC1C,IAAI;QACJ,UAAU;QACV,WAAW;QACX,UAAU;IACX;IAEO,MAAMzN,gCAA2B,OAAOjF,MAAMC;QACpD,MAAMiF,gBAAmC;YACxC,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,KAAK;YACL,UAAU;QACX;QAEA,MAAM9E,OAAO,MAAMJ,KAAK,UAAU,CAAC;YAClC,MAAMA,KAAK,KAAK;YAChB,KACCC,OAAO,GAAG,IACV,CAAC,8GAA8G,EAAEA,OAAO,KAAK,CAAC,WAAW,CAAC;YAC3I,SAASA,OAAO,OAAO,EAAE,IAAI,CAACgD,KAAQ;oBAAE,GAAGiC,aAAa;oBAAE,GAAGjC,EAAE;gBAAC,OAAO,EAAE;QAC1E;QAEA,MAAMF,eAAe/C,KAAK,UAAU;QAGpC,IAAI;YACH,MAAMI,KAAK,eAAe,CAAC;QAC5B,EAAE,OAAO7D,OAAO;YACf,OAAO;gBAAE,MAAM;gBAAK,SAAS;gBAAQ,MAAM6D,KAAK,GAAG;YAAG;QACvD;QAEA,MAAMuS,YAAYvS,KAAK,OAAO,CAAC;QAG/B,IAAIH,OAAO,OAAO,IAAIA,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG;YAChD,MAAMuD,SAAS,MAAM5G,QAAQ,GAAG,CAC/BqD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC6B;gBACnB,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;gBACpC,OAAO8B,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;YACnD;YAID,MAAM+B,qBAAqBpF,KAAK,YAAY,CAAC;YAC7C,MAAMuS,UAAU,OAAO,CAAC,wBAAwB,KAAK;YACrD,MAAMA,UACJ,OAAO,CAAC,sDACR,MAAM,CAAC;gBAAE,SAAS;YAAO,GACzB,KAAK;YACP,MAAMlN,cAAc,MAAMD;YAC1B,MAAMC,YAAY,QAAQ,CAACjC;QAC5B;QAGA,MAAM2B,gBAAgB/E,KAAK,OAAO,CAAC;QACnC,MAAM+E,cAAc,KAAK;QACzB,MAAMA,cAAc,IAAI,CAAClF,OAAO,KAAK;QAGrC,MAAMsK,eAAenK,KAAK,OAAO,CAAC;QAClC,MAAMmK,aAAa,KAAK;QACxB,MAAMA,aAAa,IAAI,CAACtK,OAAO,OAAO;QAGtC,IAAIA,OAAO,MAAM,EAAE;YAClB,MAAM0S,UAAU,OAAO,CAAC,+CAA+C,KAAK;YAC5E,MAAMvS,KACJ,OAAO,CAAC,uDACR,MAAM,CAAC;gBAAE,SAASsS,UAAU,CAACzS,OAAO,MAAM,CAAC;YAAC,GAC5C,KAAK;QACR;QAGA,IAAIA,OAAO,OAAO,IAAIA,OAAO,OAAO,CAAC,MAAM,GAAG,GAC7C,MAAMG,KAAK,eAAe,CAAC;QAI5B,IAAIH,OAAO,KAAK,EACf,MAAM0S,UAAU,OAAO,CAAC,kCAAkC,KAAK;aAE/D,MAAMA,UAAU,OAAO,CAAC,gCAAgC,KAAK;QAG9D,OAAO3N,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ;IAChB;ICnEO,MAAM4N,kBAAiC,OAAO5S,MAAMC;QAC1D,IAAIA,AAAsB,UAAtBA,OAAO,UAAU,EACpB,OAAOgF,8BAAUjF,MAAMC;QAGxB,IAAIA,AAAsB,cAAtBA,OAAO,UAAU,EACpB,OAAO0C,gCAAW3C,MAAMC;QAGzB,OAAOH,cAAc6C,iCAAYsC,+BAAWjF,MAAMC;IACnD;;;;IC9BO,MAAM4S;QAgBZ,MAAM,WAAW/Q,GAAW,EAAmB;YAC9C,OAAOgR,+BAAAA,UAAiB,CAAC,OAAO,MAAM,CAAChR,KAAK,QAAQ,MAAM,CAAC;QAC5D;QAQA,MAAM,YAAYiR,IAAY,EAAmB;YAEhD,MAAMC,cAAcvG,qCAAAA,MAAAA,CAAAA,IAAW,CAACsG,MAAM,QAAQ,CAAC;YAE/C,MAAME,SAASH,+BAAAA,cAAqB,CAAC,eAAe,IAAInG,WAAW,IAAI,CAAC,QAAQ,GAAG,IAAIA,WAAW,IAAI,CAAC,EAAE;YAEzG,MAAMuG,aAAaD,OAAO,MAAM,CAACD,aAAa,QAAQ;YACtD,OAAOE,aAAaD,OAAO,KAAK,CAAC;QAClC;QAQA,MAAM,YAAYE,WAAmB,EAAmB;YAEvD,MAAMC,cAAc3G,qCAAAA,MAAAA,CAAAA,IAAW,CAAC0G,aAAa;YAE7C,OAAOC,YAAY,QAAQ,CAAC;QAC7B;QASA,MAAM,eAAeC,OAAe,EAAEC,QAAgB,EAAmB;YAExE,MAAMC,aAAa,MAAM,IAAI,CAAC,WAAW,CAACF;YAG1C,MAAMG,MAAM;gBACX,SAAS;gBACT,UAAU;gBACV,OAAOF;gBACP,aAAa;gBACb,SAASC;YACV;YAGA,MAAME,aAAa5T,KAAK,SAAS,CAAC2T,KAAK,MAAM;YAG7C,OAAO/G,qCAAAA,MAAAA,CAAAA,IAAW,CAACgH,YAAY,QAAQ,CAAC;QACzC;QAWA,MAAM,UAAU3R,GAAW,EAAE4R,EAAU,EAAEC,EAAU,EAAEL,WAAW,YAAY,EAAmB;YAC9F,MAAMP,OAAO,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAEjR,KAAK,EAAE,6CAA6C,EAAE4R,GAAG,IAAI,EAAEC,GAAG,CAAC,CAAC;YACpH,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,WAAW,CAACZ,OAAOO,WAAW;QAClF;QAEA,MAAM,GAAGM,IAAuC,EAAU;YACzD,MAAM,CAACxM,MAAMyM,WAAW,IAAI,EAAEC,QAAQ,CAAC,CAAC,GAAGF;YAC3C,OAAO/T,KAAK,SAAS,CAACuH,MAAMyM,UAAUC,OACpC,OAAO,CAAC,OAAO,IACf,OAAO,CAAC,WAAW;QACtB;;iBA9FQ,KAAK,GAAG;gBAAC;gBAAW;gBAAY;gBAAW;aAAU;iBACrD,QAAQ,GAAGrH,qCAAAA,MAAAA,CAAAA,MAAa,CAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,CACb,CAACsH,OACA,IAAIpH,WAAWF,qCAAAA,MAAAA,CAAAA,IAAW,CAAC;oBAAEsH,QAAQ,KAAM;oBAAOA,QAAQ,KAAM;oBAAOA,QAAQ,IAAK;oBAAa,OAAPA;iBAAY;iBAGjG,EAAE,GAAGtH,qCAAAA,MAAAA,CAAAA,IAAW,CAAC,oBAAoB;;IAwF9C;ICnFA,MAAM/J,mCAAmC;QACxC,KAAK;QACL,KAAK;QACL,KAAK;IACN;IAGA,MAAMsR,YAAY,IAAInB;IAEf,MAAMlQ,qCAA4B,OAAO3C,MAAMC;QACrD,MAAM8C,eAAe/C,KAAK,UAAU;QAEpC,MAAMiU,WAAWhU,OAAO,OAAO,CAAC,IAAI,CAAC,CAACgD,KAAOA,AAAY,SAAZA,GAAG,IAAI,GAAY;QAChE,IAAI,CAACgR,UACJ,OAAO;YAAE,MAAM;YAAK,SAAS;YAAsB,MAAM;QAAG;QAG7D,MAAMjR,OAAO,IAAI1G,KAAK;YACrB,SAAS;gBACR,QAAQ2D,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,KAAO,GAAGA,GAAG,IAAI,CAAC,CAAC,EAAEA,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC;gBAClE,QAAQ;gBACR,SAAS;gBACT,cACC;YACF;QACD;QAGAD,KAAK,sBAAsB,CAAiB,CAACrG;YAC5C,MAAM4O,eAAe5O,SAAS,IAAI;YAGlC,IAAI4O,cAAc,QAAQA,AAAsB,MAAtBA,aAAa,IAAI,EAAQ;gBAClD,MAAMpI,SAAST,gCAAQ,CAAC6I,aAAa,IAAI,CAAC,IAAI5O,SAAS,MAAM,CAAC,eAAe,IAAI;gBAEjF,OAAO;oBACN,MAAM+F,gCAAQ,CAAC6I,aAAa,IAAI,CAAC,GAAG,MAAM;oBAC1C,SAASpI;oBACT,MAAMoI;gBACP;YACD;QACD;QAGA,MAAM2I,gBAAgB,CAAC,6EAA6E,EAAEjU,OAAO,OAAO,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAClJ,MAAMkU,KAAK7I,KAAK,GAAG,GAAG,QAAQ;QAC9B,MAAM8I,KAAK,MAAMJ,UAAU,SAAS,CAACE,eAAeD,UAAUE;QAC9D,MAAME,cAAc,MAAMrR,KAAK,GAAG,CAA4D;YAC7F,QAAQ;YACR,SAAS;YACT,KAAKkR;YACL,iBAAiB;YACjB,SAAS;gBAAE,OAAOE;gBAAI,OAAOD;YAAG;QACjC;QAEA,MAAMG,WAAWD,YAAY,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,OAAO;QAC9D,MAAME,WAAWF,YAAY,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK;QAC5D,IAAG,CAACC,YAAY,CAACC,UAAU,OAAO;YAAE,MAAM;YAAK,SAAS;YAAiB,MAAM;QAAG;QAGlF,MAAMC,aAAa,OAAO1S,KAAazH;YACtC,MAAMoJ,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;YACpC,MAAM2S,WAAW,MAAM7Q,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;YAElE,MAAMiR,YAAYJ,QAAQ,CAACja,MAAM;YAEjC,MAAMsa,aAAajX,2BAAAA,YAAe,CAAC+W;YAEnC,MAAMzR,KAAK,GAAG,CAAC;gBACd,QAAQ;gBACR,KAAK,CAAC,mCAAmC,EAAE0R,WAAW;gBACtD,MAAMC;gBACN,SAAS;oBACR,wBAAwBJ;gBACzB;gBACA,iBAAiB;YAClB;YAEA,OAAO;gBAAEG;gBAAWH;YAAS;QAC9B;QAEA,MAAMK,aAAa,MAAMhY,QAAQ,GAAG,CAACqD,OAAO,OAAO,CAAC,GAAG,CAAC,CAACgD,IAAIkB,MAAQqQ,WAAWvR,IAAIkB;QAEpF,IAAGlE,OAAO,KAAK,IAAIA,OAAO,KAAK,CAAC,MAAM,GAAE,GACvC,MAAMrD,QAAQ,GAAG,CAACqD,OAAO,KAAK,CAAC,GAAG,CAAC,OAAOsI;YACzC,IAAG,CAACA,KAAK,CAAC,KAAK,EAAC;gBACf,MAAMsM,YAAY;oBAAC,aAAatM,KAAK,CAAC,OAAO;gBAAA;gBAC7C,MAAMuM,eAAed,UAAU,KAAK,CAACa;gBACrC,MAAME,YAAYzJ,KAAK,GAAG,GAAG,QAAQ;gBACrC,MAAM0J,YAAY,MAAMhB,UAAU,SAAS,CAAC,CAAC,+CAA+C,EAAEc,cAAc,EAAEb,UAAUc;gBAExH,IAAIE,cAAc,MAAMjS,KAAK,GAAG,CAAC;oBAChC,QAAQ;oBACR,KAAK;oBACL,SAAS;wBACR,OAAOgS;wBACP,OAAOD;oBACR;oBACA,MAAMF;oBACN,iBAAiB;gBAClB;gBACAhY,OAAO,MAAM,CAAC0L,OAAQ0M,YAAY,IAAI,CAAC,WAAW,CAAC,EAAE;YACtD;QACD;QAGD,MAAMpQ,cAAc;YACnB,QAAQ;gBACP,KAAK,EAAE;gBACP,eAAe,EAAE;gBACjB,MAAM5E,QAAQ;gBACd,YAAY,CAAC;gBACb,UAAUA,OAAO,KAAK,IAAI,EAAE;gBAC5B,SAAS;gBACT,QAAQJ,KAAK,SAAS,CAAC;oBACtB,MAAM;oBACN,KAAK;oBACL,WAAW;gBACZ;gBACA,OAAOI,QAAQ;gBACf,MAAM;gBACN,cAAc;oBACb,SAAS;oBACT,MAAMA,AAAwB,aAAxBA,OAAO,YAAY,GAAgB,IAAI;gBAC9C;gBACA,UAAUA,OAAO,OAAO,GACrB;oBACA,MAAMA,OAAO,OAAO,EAAE;oBACtB,QAAQA,OAAO,OAAO,EAAE;oBACxB,UAAUA,OAAO,OAAO,EAAE;oBAC1B,SAASA,OAAO,OAAO,EAAE;gBAC1B,IACC;gBACH,gBAAgB;YACjB;YACA,YAAY;gBACX,QAAQ2U,WAAW,GAAG,CAAC,CAAC3R,KAAQ;wBAC/B,iBAAiB;wBACjB,SAASA,GAAG,SAAS;wBACrB,UAAU;4BAAE,QAAQ;wBAAG;wBACvB,UAAU;4BAAE,UAAU,EAAE;4BAAE,SAAS;wBAAE;oBACtC;YACD;YACA,YAAY;QACb;QAGA,MAAMiS,sBAAsB;YAC3B,QAAQ;YACR,WAAW,CAAC;YACZ,YAAY,CAAC;QACd;QAEA,IAAIjV,OAAO,eAAe,EAAE,SAAS,uBAEpCiV,oBAAoB,MAAM,GAAG;aACvB,IAAIjV,OAAO,eAAe,EAAE,SAAS,gBAE3CiV,oBAAoB,MAAM,GAAG;aACvB,IAAIjV,OAAO,eAAe,EAAE,SAAS;YAE3C,IAAIA,AAAqC,oBAArCA,OAAO,eAAe,CAAC,SAAS,EAEnCiV,oBAAoB,MAAM,GAAG;iBACvB,IAAIjV,AAAqC,oBAArCA,OAAO,eAAe,CAAC,SAAS,EAAsB;gBAEhEiV,oBAAoB,MAAM,GAAG;gBAC7B,MAAMC,YAA0D,CAAC;gBAEjE,IAAIlV,OAAO,eAAe,CAAC,gBAAgB,EAE1CkV,UAAU,UAAU,GAAG;oBACtB,MAAMlV,OAAO,eAAe,CAAC,gBAAgB,CAAC,IAAI;oBAClD,OAAOA,OAAO,eAAe,CAAC,gBAAgB,CAAC,MAAM;oBACrD,SAASA,OAAO,eAAe,CAAC,gBAAgB,CAAC,QAAQ;oBACzD,SAASA,OAAO,eAAe,CAAC,gBAAgB,CAAC,YAAY;gBAC9D;gBAGD,IAAIA,OAAO,eAAe,CAAC,YAAY,EAEtCkV,UAAU,SAAS,GAAGlV,OAAO,eAAe,CAAC,YAAY;gBAG1DiV,oBAAoB,SAAS,GAAGC;YACjC,OAAO,IAAIlV,AAAqC,oBAArCA,OAAO,eAAe,CAAC,SAAS,EAAsB;gBAEhEiV,oBAAoB,MAAM,GAAG;gBAE7B,IAAIjV,OAAO,eAAe,CAAC,WAAW,EAErCiV,oBAAoB,UAAU,GAAG;oBAChC,QAAQjV,OAAO,eAAe,CAAC,WAAW;gBAC3C;YAEF;;QAGD,MAAMmV,iBAAiB;YACtB,SAAS;YACT,SAAS;YACT,QAAQ;YACR,eAAe,CAAC;YAEhB,gBAAgBnV,OAAO,oBAAoB,GAAG,CAAC,IAAI;gBAAE,UAAUA,OAAO,gBAAgB;YAAC;YACvF,oBAAoB;gBAAE,IAAI;YAAG;YAC7B,GAAIA,OAAO,eAAe,GAAG;gBAAEiV;YAAoB,IAAI,CAAC,CAAC;QAC1D;QAEArQ,YAAY,MAAM,CAAC,cAAc,GAAGhF,KAAK,SAAS,CAACuV;QAEnD,MAAMC,iBAAiBrB,UAAU,KAAK,CAACnP;QACvC,MAAMkQ,YAAYzJ,KAAK,GAAG,GAAG,QAAQ;QACrC,MAAM0J,YAAY,MAAMhB,UAAU,SAAS,CAAC,CAAC,oBAAoB,EAAEqB,gBAAgB,EAAEpB,UAAUc;QAG/F,MAAMjM,gBAAgB,MAAM9F,KAAK,GAAG,CAAiC;YACpE,QAAQ;YACR,KAAK;YACL,MAAM6B;YACN,SAAS;gBACR,OAAOmQ;gBACP,OAAOD;YACR;YACA,iBAAiB;QAClB;QAEA,OAAO/P,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQ8D,cAAc,IAAI,EAAE;IACpC;IChPA,MAAMkL,gBAAY,IAAInB;IAEf,MAAM5N,mCAA2B,OAAOjF,MAAMC;QACpD,MAAMiF,gBAAmC;YACxC,MAAM;YACN,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,KAAK;YACL,UAAU;QACX;QAEA,MAAM9E,OAAO,MAAMJ,KAAK,UAAU,CAAC;YAClC,MAAMA,KAAK,KAAK;YAChB,KAAKC,OAAO,GAAG,IAAI;YACnB,SAASA,OAAO,OAAO,EAAE,IAAI,CAACgD,KAAQ;oBAAE,GAAGiC,aAAa;oBAAE,GAAGjC,EAAE;gBAAC,OAAO,EAAE;QAC1E;QAEA,MAAMF,eAAe/C,KAAK,UAAU;QAEpC,MAAM+I,gBAAgB;YACrB;YACA;YACA;YACA;YACA;YACA;SACA;QAED,MAAM3I,KAAK,KAAK,CAAC,MAAM,OAAO4I,OAAOC;YACpC,MAAMnH,MAAMmH,QAAQ,GAAG;YACvB,IAAIF,cAAc,IAAI,CAACI,CAAAA,UAAWrH,IAAI,QAAQ,CAACqH,WAAW;gBACzD,MAAMmM,SAAS,IAAIpM,IAAIpH;gBACvB,MAAMoS,gBAAgBoB,OAAO,QAAQ,GAAGA,OAAO,MAAM;gBACrD,MAAMnB,KAAK7I,KAAK,GAAG,GAAG,QAAQ;gBAE9B,MAAM2I,WAAWhU,OAAO,OAAO,CAAC,IAAI,CAAC,CAACgD,KAAOA,AAAY,SAAZA,GAAG,IAAI,GAAY;gBAChE,IAAI,CAACgR,UAAU;oBACd,MAAMjL,MAAM,OAAO,CAAC;wBACnB,QAAQ;wBACR,aAAa;wBACb,MAAMnJ,KAAK,SAAS,CAAC;4BAAE,MAAM;4BAAK,SAAS;4BAAsB,MAAM;wBAAG;oBAC3E;oBACA;gBACD;gBAEA,MAAM0V,gBAAgBD,OAAO,QAAQ,CAAC,QAAQ,CAACvM,aAAa,CAAC,EAAE;gBAE/D,MAAMqL,KAAK,MAAOmB,CAAAA,gBACd;oBACF,MAAM1Q,cAAchF,KAAK,KAAK,CAACoJ,QAAQ,QAAQ,MAAM;oBACrD,MAAMoM,iBAAiBrB,cAAU,KAAK,CAACnP;oBAEvC,OAAOmP,cAAU,SAAS,CAACjL,aAAa,CAAC,EAAE,GAACsM,gBAAgBpB,UAAUE;gBACrE,OAAMH,cAAU,SAAS,CAACE,eAAeD,UAAUE,GAAE;gBAGxD,MAAMqB,aAAa;oBAClB,GAAGvM,QAAQ,OAAO,EAAE;oBACpB,OAAOmL;gBACR;gBAEA,MAAMpL,MAAM,QAAQ,CAAC;oBAAE,SAASwM;gBAAW;YAC5C,OACC,MAAMxM,MAAM,QAAQ;QAEtB;QAIA,MAAMyM,gBAAgB,OAAOC,UAAmBC;YAC/C,MAAMC,WAAW,AAAoB,YAApB,OAAOF,WAAwBtV,KAAK,OAAO,CAACsV,YAAYA;YACzE,MAAME,SAAS,KAAK;YACpB,MAAMA,SAAS,OAAO,CAAC,SAAS,IAAI,CAACD;YACrC,MAAM9L,gBAAgBzJ,KAAK,OAAO,CAAC;YACnC,MAAMyJ,cAAc,KAAK,GAAG,OAAO;YACnC,MAAMA,cAAc,KAAK,GAAG,KAAK;QAClC;QAGA,MAAMgM,aAAa,OAAOH,UAA4BI;YACrD,MAAMF,WAAW,AAAoB,YAApB,OAAOF,WAAwBtV,KAAK,OAAO,CAACsV,YAAYA;YACzE,MAAME,SAAS,KAAK;YACpB,MAAMA,SAAS,IAAI,CAACE;YACpB,MAAMF,SAAS,IAAI;QACpB;QAGA,MAAMG,mBAAmB;YACxB,MAAM3V,KAAK,cAAc,CAAC;YAC1B,MAAM4V,WAAW5V,KAAK,OAAO,CAAC;YAC9B,MAAM6V,QAAQ,MAAMD,SAAS,KAAK;YAClC,MAAME,kBAAuC,EAAE;YAE/C,IAAK,IAAI1d,IAAI,GAAGA,IAAIyd,OAAOzd,IAAK;gBAC/B,MAAM2d,UAAUH,SAAS,GAAG,CAACxd;gBAC7B,MAAM4d,QAAQ,MAAMD,QAAQ,YAAY,CAAC;gBACzC,IAAIC,SAAS,CAACA,MAAM,QAAQ,CAAC,kBAC5BF,gBAAgB,IAAI,CAACC;YAEvB;YAEA,IAAID,gBAAgB,MAAM,GAAG,GAC5B,OAAOA,eAAe,CAACA,gBAAgB,MAAM,GAAG,EAAE;YAGnD,MAAM,IAAItW,MAAM;QACjB;QAGA,MAAMyW,oBAAoB;YACzB,MAAMjW,KAAK,cAAc,CAAC;YAC1B,MAAM4V,WAAW5V,KAAK,OAAO,CAAC;YAC9B,OAAO4V,SAAS,IAAI;QACrB;QAMA,IAAI;YACH,MAAM5V,KAAK,eAAe,CAAC,oBAAoB;gBAAE,OAAO;YAAU;QACnE,EAAE,OAAO7D,OAAO;YACf,OAAO;gBAAE,MAAM;gBAAK,SAAS;gBAAQ,MAAM6D,KAAK,GAAG;YAAG;QACvD;QAGA,MAAMA,KAAK,OAAO,CAAC,qDAAqD,KAAK;QAG7E,MAAMA,KACJ,OAAO,CAAC,0EACR,MAAM,CAAC;YAAE,SAAS;QAAS,GAC3B,KAAK;QAGP,MAAMoD,SAAS,MAAM5G,QAAQ,GAAG,CAC/BqD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC6B;YACnB,MAAM2B,WAAWC,AAAAA,IAAAA,sBAAAA,kBAAAA,AAAAA,EAAmB5B;YACpC,OAAO8B,AAAAA,IAAAA,sBAAAA,aAAAA,AAAAA,EAAc9B,KAAKxE,6BAAAA,IAAS,CAACyF,cAAcU;QACnD;QAID,MAAM+B,qBAAqBpF,KAAK,YAAY,CAAC;QAC7C,MAAMA,KAAK,SAAS,CAAC,WAAW,KAAK;QACrC,MAAMqF,cAAc,MAAMD;QAC1B,MAAMC,YAAY,QAAQ,CAACjC;QAG3B,MAAM2B,gBAAgB/E,KAAK,OAAO,CAAC;QACnC,MAAM+E,cAAc,KAAK;QACzB,MAAMA,cAAc,IAAI,CAAClF,OAAO,KAAK;QAGrC,MAAMsK,eAAenK,KAAK,OAAO,CAAC;QAClC,MAAMmK,aAAa,KAAK;QACxB,MAAMA,aAAa,iBAAiB,CAACtK,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAgB;QAG5E,IAAGA,OAAO,KAAK,IAAIA,OAAO,KAAK,CAAC,MAAM,GAAG,GACxC,KAAK,MAAMgD,MAAMhD,OAAO,KAAK,CAAE;YAC9B,MAAMsK,aAAa,iBAAiB,CAAC,CAAC,CAAC,EAAEtH,EAAE,CAAC,OAAO,EAAE;YACrD,MAAM7C,KAAK,OAAO,CAAC,uBAAuB,OAAO,CAAC;gBAAE,OAAO;YAAW;YACtE,MAAMA,KAAK,cAAc,CAAC;YAC1B,MAAMA,KAAK,OAAO,CAAC,wCAAwC,KAAK;QACjE;QAID,MAAMuS,YAAYvS,KAAK,OAAO,CAAC;QAC/B,MAAMuS,UAAU,KAAK;QACrB,MAAMvS,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG;QAE1B,IAAIH,OAAO,OAAO,EAEjB,MAAMwV,cACLrV,KAAK,OAAO,CAAC,mCAAmC,MAAM,CAAC;YAAE,SAAS;QAAO,IACzEH,OAAO,OAAO,CAAC,IAAI;QAIrB,IAAIA,OAAO,eAAe,EAAE;YAE3B,MAAMG,KAAK,OAAO,CAAC,4BAA4B,MAAM,CAAC;gBAAE,SAAS;YAAS,GAAG,OAAO,CAAC,yBAAyB,KAAK;YACnH,MAAMyJ,gBAAgB,MAAMkM;YAC5B,MAAMO,0BAA0BzM,cAAc,OAAO,CAAC;YACtD,IAAI5J,AAAgC,0BAAhCA,OAAO,eAAe,CAAC,IAAI,EAC9B,MAAMqW,wBAAwB,MAAM,CAAC;gBAAE,SAAS;YAAY,GAAG,KAAK;iBAC9D,IAAIrW,AAAgC,mBAAhCA,OAAO,eAAe,CAAC,IAAI,EACrC,MAAMqW,wBAAwB,MAAM,CAAC;gBAAE,SAAS;YAAY,GAAG,KAAK;iBAC9D,IAAIrW,AAAgC,uBAAhCA,OAAO,eAAe,CAAC,IAAI,EAAyB;gBAC9D,MAAMqW,wBAAwB,MAAM,CAAC;oBAAE,SAAS;gBAAS,GAAG,KAAK;gBAEjE,MAAMC,uCAAwC,OAAMR,kBAAiB,EAAG,OAAO,CAAC;gBAEhF,MAAMQ,qCAAqC,KAAK,GAAG,OAAO;gBAC1D,IAAItW,AAAqC,oBAArCA,OAAO,eAAe,CAAC,SAAS,EACnC,MAAMsW,qCAAqC,MAAM,CAAC;oBAAE,SAAS;gBAAY,GAAG,KAAK;qBAC3E,IAAItW,AAAqC,oBAArCA,OAAO,eAAe,CAAC,SAAS,EAAsB;oBAChE,MAAM,EAAEuW,YAAY,EAAEC,gBAAgB,EAAE,GAAGxW,OAAO,eAAe;oBACjE,MAAMsW,qCAAqC,MAAM,CAAC;wBAAE,SAAS;oBAAO,GAAG,KAAK;oBAE5E,MAAMG,oBAAoB,MAAML;oBAChC,MAAMM,mBAAmBH,gBAAgBC;oBAGzC,IAAIA,kBACH,MAAMhB,cAAciB,kBAAkB,OAAO,CAAC,mBAAmBD,iBAAiB,IAAI;oBAGvF,IAAID,cACH,MAAMX,WAAWa,kBAAkB,OAAO,CAAC,uBAAuBF;oBAGnE,MAAME,kBACJ,OAAO,CAAC,iBACR,MAAM,CAAC;wBAAE,SAASC,mBAAmB,OAAO;oBAAK,GACjD,KAAK;gBACR,OAAO,IAAI1W,AAAqC,oBAArCA,OAAO,eAAe,CAAC,SAAS,EAAsB;oBAChE,MAAMsW,qCAAqC,MAAM,CAAC;wBAAE,SAAS;oBAAO,GAAG,KAAK;oBAE5E,MAAMG,oBAAoB,MAAML;oBAEhC,MAAMO,cAAc3W,OAAO,eAAe,CAAC,WAAW;oBACtD,IAAI2W,aACH,MAAMF,kBAAkB,OAAO,CAAC,mBAAmB,IAAI,CAACE;oBAGzD,MAAMF,kBACJ,OAAO,CAAC,iBACR,MAAM,CAAC;wBAAE,SAASE,cAAc,OAAO;oBAAK,GAC5C,KAAK;gBACR;YACD;QACD;QAGA,IAAI3W,AAAwB,cAAxBA,OAAO,YAAY,EAAgB;YACtC,MAAMG,KAAK,OAAO,CAAC,4BAA4B,MAAM,CAAC;gBAAE,SAAS;YAAO,GAAG,OAAO,CAAC,qBAAqB,KAAK;YAC7G,MAAMyJ,gBAAgB,MAAMkM;YAC5B,MAAMlM,cAAc,OAAO,CAAC,6BAA6B,MAAM,CAAC;gBAAE,SAAS;YAAQ,GAAG,KAAK;QAC5F;QAEA,MAAMgN,sBAAsBzW,KAC1B,OAAO,CAAC,SACR,MAAM,CAAC;YAAE,SAASH,OAAO,oBAAoB,GAAG,SAAS;QAAO;QAClE,MAAM4W,oBAAoB,KAAK;QAE/B,IAAI5W,OAAO,gBAAgB,EAE1B,MAAM4V,WAAW,sBAAsB5V,OAAO,gBAAgB;QAG/D,MAAMtD,WAAW,MAAM,IAAIC,QAAgB,CAACoJ;YAE3C,MAAMC,iBAAiB,OAAOtJ;gBAC7B,IAAIA,SAAS,GAAG,GAAG,QAAQ,CAAC,yBAAyB;oBACpD,MAAMuJ,eAAe,MAAMvJ,SAAS,IAAI;oBACxCyD,KAAK,GAAG,CAAC,YAAY6F;oBACrBD,QAAQE,cAAc,MAAM;gBAC7B;YACD;YAGA9F,KAAK,EAAE,CAAC,YAAY6F;YAEpB7F,KAAK,OAAO,CAAC,uBAAuB,KAAK;QAC1C;QAGA,MAAMA,KAAK,KAAK;QAEhB,OAAO4E,AAAAA,IAAAA,sBAAAA,OAAAA,AAAAA,EAAQrI;IAChB;IClPO,MAAMma,qBAAoC,OAAO9W,MAAMC;QAC7D,IAAIA,AAAsB,UAAtBA,OAAO,UAAU,EACpB,OAAOgF,iCAAUjF,MAAMC;QAGxB,IAAIA,AAAsB,cAAtBA,OAAO,UAAU,EACpB,OAAO0C,mCAAW3C,MAAMC;QAGzB,OAAOH,cAAc6C,oCAAYsC,kCAAWjF,MAAMC;IACnD;;;;IChCO,MAAM8W;QACZ,YAAoB/W,IAAkB,CAAE;iBAApBA,IAAI,GAAJA;QAAqB;QAGzC,MAAc,SAA0CgX,IAAwB,EAAE/W,MAAS,EAAE;YAC5F,IAAIsL;YAEJ,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAEzB,IAAI,CAAC,IAAI,CAAC,YAAY,CAACtL,OAAO,SAAS,IAAI;YAG5C,IAAI,AAAkB,YAAlB,OAAOA,UAAuBA,AAAW,SAAXA,QAEjCA,OAAO,OAAO,GAAGA,QAAQ,WAAW,EAAE;YAGvC,IAAI;gBACHsL,eAAe,MAAMyL,KAAK,IAAI,CAAC,IAAI,EAAE/W;YACtC,EAAE,OAAO1D,OAAO;gBACfgP,eAAejP,KAAK,cAAc,CAACC;YACpC;YAEA,IAAIgP,AAAsB,QAAtBA,aAAa,IAAI,EAEpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAGyL,KAAK,IAAI,CAAC,oBAAoB,CAAC,EAAEzL;iBACpD,IAAIA,AAAsB,MAAtBA,aAAa,IAAI,EAAQ;gBACnC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CACrBA,aAAa,OAAO,IAAI,GAAGyL,KAAK,IAAI,CAAC,KAAK,CAAC,EAC3CrX,eAAe4L,aAAa,IAAI,GAChCA,aAAa,KAAK;gBAEnB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAGyL,KAAK,IAAI,CAAC,cAAc,CAAC;YACnD,OACC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAGA,KAAK,IAAI,CAAC,eAAe,CAAC;YAGpD,OAAOzL;QACR;QAGA,uBAAuBtL,MAAoC,EAAE;YAC5D,OAAO,IAAI,CAAC,QAAQ,CAAC8G,wBAAwB9G;QAC9C;QAGA,iBAAiBA,MAA8B,EAAE;YAChD,OAAO,IAAI,CAAC,QAAQ,CAACuG,kBAAkBvG;QACxC;QAGA,iBAAiBA,MAA8B,EAAE;YAChD,OAAO,IAAI,CAAC,QAAQ,CAACmG,kBAAkBnG;QACxC;QAGA,qBAAqBA,MAAkC,EAAE;YACxD,OAAO,IAAI,CAAC,QAAQ,CAACoG,sBAAsBpG;QAC5C;QAGA,mBAAmBA,MAAgC,EAAE;YACpD,OAAO,IAAI,CAAC,QAAQ,CAAC6W,oBAAoB7W;QAC1C;QAGA,2BAA2BA,MAAwC,EAAE;YACpE,OAAO,IAAI,CAAC,QAAQ,CAACgH,4BAA4BhH;QAClD;QAEA,0BAA0BA,MAAuC,EAAE;YAClE,OAAO,IAAI,CAAC,QAAQ,CAAC+G,2BAA2B/G;QACjD;QAGA,gBAAgBA,MAA6B,EAAE;YAC9C,OAAO,IAAI,CAAC,QAAQ,CAAC2S,iBAAiB3S;QACvC;QAGA,kBAAkBA,MAA+B,EAAE;YAClD,OAAO,IAAI,CAAC,QAAQ,CAACyK,mBAAmBzK;QACzC;QAGA,eAAeA,MAA4B,EAAE;YAC5C,OAAO,IAAI,CAAC,QAAQ,CAACiK,gBAAgBjK;QACtC;QAGA,cAAcA,MAA2B,EAAE;YAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC6R,eAAe7R;QACrC;IACD"}